From 5e5df233902a8cfef3e71447c2f7a29d5afe5554 Mon Sep 17 00:00:00 2001 From: Kris West Date: Tue, 17 Oct 2023 12:03:07 +0100 Subject: [PATCH 01/99] Expose the prefer-const-values Typescript language setting via CLI --- packages/quicktype-core/src/language/TypeScriptFlow.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/TypeScriptFlow.ts b/packages/quicktype-core/src/language/TypeScriptFlow.ts index 3bc02e2a9..0c5750006 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow.ts @@ -51,7 +51,8 @@ export abstract class TypeScriptFlowBaseTargetLanguage extends JavaScriptTargetL tsFlowOptions.converters, tsFlowOptions.rawType, tsFlowOptions.preferUnions, - tsFlowOptions.preferTypes + tsFlowOptions.preferTypes, + tsFlowOptions.preferConstValues ]; } From 958d199d74b507175d9a49871c5d3770eaaf7873 Mon Sep 17 00:00:00 2001 From: Tsung-Ju Lii Date: Fri, 17 Nov 2023 11:31:54 +0800 Subject: [PATCH 02/99] Fix Python class member comment placement (#2443) --- packages/quicktype-core/src/language/Python.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Python.ts b/packages/quicktype-core/src/language/Python.ts index 7da7dc74d..18fc2d97d 100644 --- a/packages/quicktype-core/src/language/Python.ts +++ b/packages/quicktype-core/src/language/Python.ts @@ -461,8 +461,8 @@ export class PythonRenderer extends ConvenienceRenderer { this.emitLine("pass"); } else { this.forEachClassProperty(t, "none", (name, jsonName, cp) => { - this.emitDescription(this.descriptionForClassProperty(t, jsonName)); this.emitLine(name, this.typeHint(": ", this.pythonType(cp.type, true))); + this.emitDescription(this.descriptionForClassProperty(t, jsonName)); }); } this.ensureBlankLine(); From 2a60269d431b392b658e671df2c1fb5479aec855 Mon Sep 17 00:00:00 2001 From: Kyle Gordon Date: Thu, 30 Nov 2023 07:17:41 -0800 Subject: [PATCH 03/99] Adding a golang flag to allow all non-required struct fields to be set to omitempty (#2449) --- packages/quicktype-core/src/language/Golang.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index 42cfacddd..c7aa3110c 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -25,7 +25,8 @@ export const goOptions = { justTypesAndPackage: new BooleanOption("just-types-and-package", "Plain types with package only", false), packageName: new StringOption("package", "Generated package name", "NAME", "main"), multiFileOutput: new BooleanOption("multi-file-output", "Renders each top-level object in its own Go file", false), - fieldTags: new StringOption("field-tags", "list of tags which should be generated for fields", "TAGS", "json") + fieldTags: new StringOption("field-tags", "list of tags which should be generated for fields", "TAGS", "json"), + omitEmpty: new BooleanOption("omit-empty", "If set, all non-required objects will be tagged with ,omitempty", false) }; export class GoTargetLanguage extends TargetLanguage { @@ -88,6 +89,7 @@ function isValueType(t: Type): boolean { function canOmitEmpty(cp: ClassProperty): boolean { if (!cp.isOptional) return false; + if (goOptions.omitEmpty) return true; const t = cp.type; return ["union", "null", "any"].indexOf(t.kind) < 0; } From 838c5e0e63a50d7c7790dc81118e664480fc4a80 Mon Sep 17 00:00:00 2001 From: rohan Date: Sun, 7 Jan 2024 06:37:18 +0800 Subject: [PATCH 04/99] added option to rust keywords (#2399) Co-authored-by: David Siegel --- packages/quicktype-core/src/language/Rust.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Rust.ts b/packages/quicktype-core/src/language/Rust.ts index 93b0a1b33..3e3a3b89b 100644 --- a/packages/quicktype-core/src/language/Rust.ts +++ b/packages/quicktype-core/src/language/Rust.ts @@ -203,7 +203,10 @@ const keywords = [ "default", "dyn", "'static", - "union" + "union", + + // Conflict between `std::Option` and potentially generated Option + "option" ]; const isAsciiLetterOrUnderscoreOrDigit = (codePoint: number): boolean => { From a15f8065d11b93e1cfdbdd09c4b8c277a83d056a Mon Sep 17 00:00:00 2001 From: Patrick Cho Date: Wed, 14 Feb 2024 04:41:27 -0800 Subject: [PATCH 05/99] Updated Newtonsoft.Json csharp library to 13.0.3 (#2493) --- test/fixtures/csharp/test.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/fixtures/csharp/test.csproj b/test/fixtures/csharp/test.csproj index 2e46824ab..2fbf1477c 100755 --- a/test/fixtures/csharp/test.csproj +++ b/test/fixtures/csharp/test.csproj @@ -4,6 +4,6 @@ netcoreapp6.0 - + - \ No newline at end of file + From fa751abe9257b38ceaf4d8f8d22540423fa2864e Mon Sep 17 00:00:00 2001 From: Adam724 <32963828+Adam724@users.noreply.github.com> Date: Wed, 14 Feb 2024 07:59:10 -0500 Subject: [PATCH 06/99] Fixing failing unit test causing CI pipeline to fail (#2494) * move omit empty check * Remove unneeded import --------- Co-authored-by: David Siegel --- packages/quicktype-core/src/language/Golang.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index c7aa3110c..fb25e844e 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -89,7 +89,6 @@ function isValueType(t: Type): boolean { function canOmitEmpty(cp: ClassProperty): boolean { if (!cp.isOptional) return false; - if (goOptions.omitEmpty) return true; const t = cp.type; return ["union", "null", "any"].indexOf(t.kind) < 0; } @@ -271,7 +270,7 @@ export class GoRenderer extends ConvenienceRenderer { const docStrings = description !== undefined && description.length > 0 ? description.map(d => "// " + d) : []; const goType = this.propertyGoType(p); - const omitEmpty = canOmitEmpty(p) ? ",omitempty" : []; + const omitEmpty = canOmitEmpty(p) || this._options.omitEmpty ? ",omitempty" : []; docStrings.forEach(doc => columns.push([doc])); const tags = this._options.fieldTags From 1fd39fffcf1a0a9e044724bf52932b2fef778148 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Wed, 14 Feb 2024 05:11:48 -0800 Subject: [PATCH 07/99] removes default leading comment in Crystal (#2479) Co-authored-by: David Siegel --- .../quicktype-core/src/language/Crystal.ts | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/packages/quicktype-core/src/language/Crystal.ts b/packages/quicktype-core/src/language/Crystal.ts index 461b8fe30..ceaa784dc 100644 --- a/packages/quicktype-core/src/language/Crystal.ts +++ b/packages/quicktype-core/src/language/Crystal.ts @@ -380,33 +380,6 @@ export class CrystalRenderer extends ConvenienceRenderer { this.emitCommentLines(this.leadingComments); return; } - - this.emitMultiline( - `# Example code that deserializes and serializes the model: -# -# require "json" -# -# class Location -# include JSON::Serializable -# -# @[JSON::Field(key: "lat")] -# property latitude : Float64 -# -# @[JSON::Field(key: "lng")] -# property longitude : Float64 -# end -# -# class House -# include JSON::Serializable -# property address : String -# property location : Location? -# end -# -# house = House.from_json(%({"address": "Crystal Road 1234", "location": {"lat": 12.3, "lng": 34.5}})) -# house.address # => "Crystal Road 1234" -# house.location # => # -` - ); } protected emitSourceStructure(): void { From 0427ff6b7e913956ea97a869b5408b4d77cd692a Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Wed, 14 Feb 2024 05:12:17 -0800 Subject: [PATCH 08/99] fix: Make private members of TypeScriptZodRenderer protected (#2476) * make private members of TypeScriptZodRenderer protected * add protected access for typeMapTypeForProperty, typeMapTypeFor --------- Co-authored-by: David Siegel --- .../quicktype-core/src/language/TypeScriptZod.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/quicktype-core/src/language/TypeScriptZod.ts b/packages/quicktype-core/src/language/TypeScriptZod.ts index 2ec7df178..2fc685dac 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod.ts @@ -62,7 +62,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + protected readonly _options: OptionValues ) { super(targetLanguage, renderContext); } @@ -102,7 +102,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { return funPrefixNamer("enum-cases", s => this.nameStyle(s, false)); } - private importStatement(lhs: Sourcelike, moduleName: Sourcelike): Sourcelike { + protected importStatement(lhs: Sourcelike, moduleName: Sourcelike): Sourcelike { return ["import ", lhs, " from ", moduleName, ";"]; } @@ -111,12 +111,12 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { this.emitLine(this.importStatement("* as z", '"zod"')); } - typeMapTypeForProperty(p: ClassProperty): Sourcelike { + protected typeMapTypeForProperty(p: ClassProperty): Sourcelike { const typeMap = this.typeMapTypeFor(p.type); return p.isOptional ? [typeMap, ".optional()"] : typeMap; } - typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { + protected typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { if (["class", "object", "enum"].indexOf(t.kind) >= 0) { return [this.nameForNamedType(t), "Schema"]; } @@ -154,7 +154,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { return match; } - private emitObject(name: Name, t: ObjectType) { + protected emitObject(name: Name, t: ObjectType) { this.ensureBlankLine(); this.emitLine("\nexport const ", name, "Schema = ", "z.object({"); this.indent(() => { @@ -168,7 +168,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { } } - private emitEnum(e: EnumType, enumName: Name): void { + protected emitEnum(e: EnumType, enumName: Name): void { this.ensureBlankLine(); this.emitDescription(this.descriptionForType(e)); this.emitLine("\nexport const ", enumName, "Schema = ", "z.enum(["); From 63bbff03c76c4887c3c229c064b8d80644789691 Mon Sep 17 00:00:00 2001 From: Zeno Jiricek Date: Wed, 14 Feb 2024 23:42:44 +1030 Subject: [PATCH 09/99] Update test-pr.yaml (#2454) typecheck PRs Co-authored-by: David Siegel --- .github/workflows/test-pr.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index b9af1b9f2..47e70a12b 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -9,7 +9,7 @@ jobs: steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup - + test: needs: [build] runs-on: ${{ matrix.runs-on }} @@ -176,6 +176,7 @@ jobs: - run: echo '@main def hello() = println("We need this spam print statement for bloop to exit correctly...")' | scala-cli _ if: ${{ contains(matrix.fixture, 'scala3') }} + - run: tsc --noEmit - run: QUICKTEST=true FIXTURE=${{ matrix.fixture }} npm test test-complete: From 78a5b7e02c38547b6bdd51344eeeaaadbf9323ab Mon Sep 17 00:00:00 2001 From: Naoki Hiroshima Date: Wed, 14 Feb 2024 05:13:38 -0800 Subject: [PATCH 10/99] apply Sendable unless it's class and mutable. (#2473) Co-authored-by: David Siegel --- packages/quicktype-core/src/language/Swift.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Swift.ts b/packages/quicktype-core/src/language/Swift.ts index 5abe711b2..c99f4b999 100644 --- a/packages/quicktype-core/src/language/Swift.ts +++ b/packages/quicktype-core/src/language/Swift.ts @@ -567,7 +567,7 @@ export class SwiftRenderer extends ConvenienceRenderer { protocols.push("Equatable"); } - if (this._options.sendable && !this._options.mutableProperties && !this._options.objcSupport) { + if (this._options.sendable && (!this._options.mutableProperties || !isClass) && !this._options.objcSupport) { protocols.push("Sendable"); } From 67cc0454d5db0e74032d82b1f23120254f23becb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0j=C3=B3n=20Ragnar=20Brynjarsson?= Date: Wed, 14 Feb 2024 13:18:20 +0000 Subject: [PATCH 11/99] Rust: Add option to skip serializing empty optional fields (#2397) Co-authored-by: Gudjon Ragnar Brynjarsson Co-authored-by: David Siegel --- packages/quicktype-core/src/language/Rust.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Rust.ts b/packages/quicktype-core/src/language/Rust.ts index 3e3a3b89b..c55b21d2a 100644 --- a/packages/quicktype-core/src/language/Rust.ts +++ b/packages/quicktype-core/src/language/Rust.ts @@ -49,6 +49,7 @@ export const rustOptions = { deriveDebug: new BooleanOption("derive-debug", "Derive Debug impl", false), deriveClone: new BooleanOption("derive-clone", "Derive Clone impl", false), derivePartialEq: new BooleanOption("derive-partial-eq", "Derive PartialEq impl", false), + skipSerializingNone: new BooleanOption("skip-serializing-none", "Skip serializing empty Option fields", false), edition2018: new BooleanOption("edition-2018", "Edition 2018", true), leadingComments: new BooleanOption("leading-comments", "Leading Comments", true) }; @@ -127,7 +128,8 @@ export class RustTargetLanguage extends TargetLanguage { rustOptions.deriveClone, rustOptions.derivePartialEq, rustOptions.edition2018, - rustOptions.leadingComments + rustOptions.leadingComments, + rustOptions.skipSerializingNone, ]; } } @@ -366,6 +368,13 @@ export class RustRenderer extends ConvenienceRenderer { } } + private emitSkipSerializeNone(t: Type) { + if (t instanceof UnionType) { + const nullable = nullableFromUnion(t); + if (nullable !== null) this.emitLine('#[serde(skip_serializing_if = "Option::is_none")]'); + } + } + private get visibility(): string { if (this._options.visibility === Visibility.Crate) { return "pub(crate) "; @@ -403,6 +412,7 @@ export class RustRenderer extends ConvenienceRenderer { this.forEachClassProperty(c, blankLines, (name, jsonName, prop) => { this.emitDescription(this.descriptionForClassProperty(c, jsonName)); this.emitRenameAttribute(name, jsonName, defaultStyle, preferedNamingStyle); + this._options.skipSerializingNone && this.emitSkipSerializeNone(prop.type); this.emitLine(this.visibility, name, ": ", this.breakCycle(prop.type, true), ","); }); From 9d1ad9a7539c3dfba77075dfb28c885c4d4d962b Mon Sep 17 00:00:00 2001 From: Marvin Willms <54174311+marvin-kolja@users.noreply.github.com> Date: Wed, 14 Feb 2024 14:18:42 +0100 Subject: [PATCH 12/99] fix: missing description emit when freezed is used (#2394) Co-authored-by: David Siegel --- packages/quicktype-core/src/language/Dart.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/quicktype-core/src/language/Dart.ts b/packages/quicktype-core/src/language/Dart.ts index 1dd8032cd..5ac375f68 100644 --- a/packages/quicktype-core/src/language/Dart.ts +++ b/packages/quicktype-core/src/language/Dart.ts @@ -788,6 +788,11 @@ export class DartRenderer extends ConvenienceRenderer { this.emitLine("const factory ", className, "({"); this.indent(() => { this.forEachClassProperty(c, "none", (name, jsonName, prop) => { + const description = this.descriptionForClassProperty(c, jsonName); + if (description !== undefined) { + this.emitDescription(description); + } + const required = this._options.requiredProperties || (this._options.nullSafety && (!prop.type.isNullable || !prop.isOptional)); From cb0adcde6216342288655951743e8018adaa6cf5 Mon Sep 17 00:00:00 2001 From: Kyle Gordon Date: Wed, 14 Feb 2024 05:19:51 -0800 Subject: [PATCH 13/99] Adding missing export of new Golang option (#2450) Co-authored-by: David Siegel --- packages/quicktype-core/src/language/Golang.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index fb25e844e..7eff608ed 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -40,7 +40,8 @@ export class GoTargetLanguage extends TargetLanguage { goOptions.packageName, goOptions.multiFileOutput, goOptions.justTypesAndPackage, - goOptions.fieldTags + goOptions.fieldTags, + goOptions.omitEmpty ]; } From 6e26b76363d3edc13499c344b478d28e922114a3 Mon Sep 17 00:00:00 2001 From: CabinIkaros <81321122+CabinIkaros@users.noreply.github.com> Date: Wed, 14 Feb 2024 21:20:47 +0800 Subject: [PATCH 14/99] C# add keep property name options (#2316) * !W(Core.Language.CSharp) add `keepPropertyName` * !B(Core.Language.CSharp) `keywords` * !T(Core.Language.CSharp) `keepPropertyName` default value is false and use ternary --------- Co-authored-by: David Siegel --- .../quicktype-core/src/language/CSharp.ts | 115 +++++++++++++++++- 1 file changed, 111 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/language/CSharp.ts b/packages/quicktype-core/src/language/CSharp.ts index f58132fd6..69c202853 100644 --- a/packages/quicktype-core/src/language/CSharp.ts +++ b/packages/quicktype-core/src/language/CSharp.ts @@ -19,7 +19,8 @@ import { splitIntoWords, combineWords, firstUpperWordStyle, - camelCase + camelCase, + WordInName } from "../support/Strings"; import { defined, assert, panic, assertNever } from "../support/Support"; import { Name, DependencyName, Namer, funPrefixNamer, SimpleName } from "../Naming"; @@ -189,7 +190,8 @@ export const cSharpOptions = { "Object", "secondary" ), - checkRequired: new BooleanOption("check-required", "Fail if required properties are missing", false) + checkRequired: new BooleanOption("check-required", "Fail if required properties are missing", false), + keepPropertyName: new BooleanOption("keep-property-name", "Keep original field name generate", false), }; export class CSharpTargetLanguage extends TargetLanguage { @@ -209,7 +211,8 @@ export class CSharpTargetLanguage extends TargetLanguage { cSharpOptions.virtual, cSharpOptions.features, cSharpOptions.baseclass, - cSharpOptions.checkRequired + cSharpOptions.checkRequired, + cSharpOptions.keepPropertyName ]; } @@ -264,6 +267,7 @@ export class CSharpTargetLanguage extends TargetLanguage { } const namingFunction = funPrefixNamer("namer", csNameStyle); +const namingFunctionKeep = funPrefixNamer("namerKeep", csNameStyleKeep); // FIXME: Make a Named? const denseJsonPropertyName = "J"; @@ -301,6 +305,109 @@ function csNameStyle(original: string): string { ); } +function csNameStyleKeep(original: string): string { + + const keywords = [ + "abstract", + "as", + "base", + "bool", + "break", + "byte", + "case", + "catch", + "char", + "checked", + "class", + "const", + "continue", + "decimal", + "default", + "delegate", + "do", + "double", + "else", + "enum", + "event", + "explicit", + "extern", + "false", + "finally", + "fixed", + "float", + "for", + "foreach", + "goto", + "if", + "implicit", + "in", + "int", + "interface", + "internal", + "is", + "lock", + "long", + "namespace", + "new", + "null", + "object", + "operator", + "out", + "override", + "params", + "private", + "protected", + "public", + "readonly", + "ref", + "return", + "sbyte", + "sealed", + "short", + "sizeof", + "stackalloc", + "static", + "string", + "struct", + "switch", + "this", + "throw", + "true", + "try", + "typeof", + "uint", + "ulong", + "unchecked", + "unsafe", + "ushort", + "using", + "virtual", + "void", + "volatile", + "while", + ] + + const words: WordInName[] = [ + { + word: original, + isAcronym: false + } + ]; + + const result = combineWords( + words, + legalizeName, + x => x, + x => x, + x => x, + x => x, + "", + isStartCharacter + ) + + return keywords.includes(result) ? "@" + result : result; +} + function isValueType(t: Type): boolean { if (t instanceof UnionType) { return nullableFromUnion(t) === null; @@ -346,7 +453,7 @@ export class CSharpRenderer extends ConvenienceRenderer { } protected namerForObjectProperty(): Namer { - return namingFunction; + return this._csOptions.keepPropertyName ? namingFunctionKeep : namingFunction; } protected makeUnionMemberNamer(): Namer { From 2793074bdf09aee55db9b6d008974d5fecccfcb7 Mon Sep 17 00:00:00 2001 From: Osman Karaketir Date: Wed, 14 Feb 2024 16:21:20 +0300 Subject: [PATCH 15/99] Improve Error Messaging for Enumeration Conversion (#2431) Enhance clarity and informativeness of error messages in the C++ code generator for enum type conversions. Update the default case in `to_json` function to include the specific enumeration name and the unexpected value in the error message. This aids in quicker debugging and aligns with best practices in error messaging. Co-authored-by: David Siegel --- packages/quicktype-core/src/language/CPlusPlus.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus.ts b/packages/quicktype-core/src/language/CPlusPlus.ts index 510b69802..c11a48795 100644 --- a/packages/quicktype-core/src/language/CPlusPlus.ts +++ b/packages/quicktype-core/src/language/CPlusPlus.ts @@ -1982,7 +1982,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { "; break;" ); }); - this.emitLine('default: throw std::runtime_error("This should not happen");'); + this.emitLine(`default: throw std::runtime_error("Unexpected value in enumeration \\"${enumName}\\": " + std::to_string(static_cast(x)));`); }); } ); From 2b10c8f7af94297f44f7c4e00ad16df6df932d8d Mon Sep 17 00:00:00 2001 From: David Siegel Date: Wed, 14 Feb 2024 05:34:04 -0800 Subject: [PATCH 16/99] Revert "Update test-pr.yaml (#2454)" (#2500) This reverts commit 63bbff03c76c4887c3c229c064b8d80644789691. --- .github/workflows/test-pr.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index 47e70a12b..b9af1b9f2 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -9,7 +9,7 @@ jobs: steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup - + test: needs: [build] runs-on: ${{ matrix.runs-on }} @@ -176,7 +176,6 @@ jobs: - run: echo '@main def hello() = println("We need this spam print statement for bloop to exit correctly...")' | scala-cli _ if: ${{ contains(matrix.fixture, 'scala3') }} - - run: tsc --noEmit - run: QUICKTEST=true FIXTURE=${{ matrix.fixture }} npm test test-complete: From fdd4052e6e2f47817bd3d8a150e839fe391642b2 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Wed, 14 Feb 2024 05:41:43 -0800 Subject: [PATCH 17/99] add supportsOptionalClassProperties to TypeScriptZod target language (#2478) Co-authored-by: David Siegel --- packages/quicktype-core/src/language/TypeScriptZod.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/quicktype-core/src/language/TypeScriptZod.ts b/packages/quicktype-core/src/language/TypeScriptZod.ts index 2fc685dac..0e605d80d 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod.ts @@ -46,6 +46,10 @@ export class TypeScriptZodTargetLanguage extends TargetLanguage { return mapping; } + get supportsOptionalClassProperties(): boolean { + return true; + } + protected makeRenderer( renderContext: RenderContext, untypedOptionValues: { [name: string]: any } From 4382eccd5d0b1b9fd49fb959276443bcb7ea6dbf Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Wed, 14 Feb 2024 05:42:47 -0800 Subject: [PATCH 18/99] style: format code with Prettier (#2501) This commit fixes the style issues introduced in fdd4052 according to the output from Prettier. Details: None Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- packages/quicktype-core/src/language/TypeScriptZod.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/quicktype-core/src/language/TypeScriptZod.ts b/packages/quicktype-core/src/language/TypeScriptZod.ts index 0e605d80d..3d67f5191 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod.ts @@ -46,9 +46,9 @@ export class TypeScriptZodTargetLanguage extends TargetLanguage { return mapping; } - get supportsOptionalClassProperties(): boolean { - return true; - } + get supportsOptionalClassProperties(): boolean { + return true; + } protected makeRenderer( renderContext: RenderContext, From c188abad9c71d440117c86e1d7ce72a83bcb191e Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Wed, 14 Feb 2024 05:48:43 -0800 Subject: [PATCH 19/99] feat: Support more leading comment types (#2482) * add CommentConfig and LeadingComments type * add emitComments function to ConvenienceRenderer * use object params for comment options in ConvenienceRenderer.emitCommentLines * rename beforeLine -> beforeComment, afterLine -> afterComment * support lineNed in emitCommentLines * allow SourceLike in CommentConfig types * update inline description block comments --------- Co-authored-by: David Siegel --- .../quicktype-core/src/ConvenienceRenderer.ts | 52 +++-- packages/quicktype-core/src/Renderer.ts | 10 +- packages/quicktype-core/src/Run.ts | 3 +- packages/quicktype-core/src/TargetLanguage.ts | 9 +- packages/quicktype-core/src/language/CJSON.ts | 2 +- .../quicktype-core/src/language/CPlusPlus.ts | 9 +- .../quicktype-core/src/language/CSharp.ts | 4 +- .../quicktype-core/src/language/Crystal.ts | 2 +- packages/quicktype-core/src/language/Dart.ts | 4 +- packages/quicktype-core/src/language/Elm.ts | 6 +- .../quicktype-core/src/language/Haskell.ts | 8 +- packages/quicktype-core/src/language/Java.ts | 9 +- .../quicktype-core/src/language/JavaScript.ts | 4 +- .../src/language/JavaScriptPropTypes.ts | 4 +- .../quicktype-core/src/language/Kotlin.ts | 4 +- .../src/language/Objective-C.ts | 4 +- packages/quicktype-core/src/language/Php.ts | 4 +- packages/quicktype-core/src/language/Pike.ts | 2 +- .../quicktype-core/src/language/Python.ts | 10 +- packages/quicktype-core/src/language/Rust.ts | 2 +- .../quicktype-core/src/language/Scala3.ts | 153 +++++++------ .../quicktype-core/src/language/Smithy4s.ts | 204 +++++++++--------- packages/quicktype-core/src/language/Swift.ts | 12 +- .../src/language/TypeScriptEffectSchema.ts | 2 +- .../src/language/TypeScriptZod.ts | 2 +- .../quicktype-core/src/language/ruby/index.ts | 2 +- .../quicktype-core/src/support/Comments.ts | 23 ++ 27 files changed, 321 insertions(+), 229 deletions(-) create mode 100644 packages/quicktype-core/src/support/Comments.ts diff --git a/packages/quicktype-core/src/ConvenienceRenderer.ts b/packages/quicktype-core/src/ConvenienceRenderer.ts index 774906783..ec80df6f5 100644 --- a/packages/quicktype-core/src/ConvenienceRenderer.ts +++ b/packages/quicktype-core/src/ConvenienceRenderer.ts @@ -24,6 +24,7 @@ import { descriptionTypeAttributeKind, propertyDescriptionsTypeAttributeKind } f import { enumCaseNames, objectPropertyNames, unionMemberName, getAccessorName } from "./attributes/AccessorNames"; import { transformationForType, followTargetType, Transformation } from "./Transformers"; import { TargetLanguage } from "./TargetLanguage"; +import { type Comment, isStringComment, type CommentOptions } from "./support/Comments"; const wordWrap: (s: string) => string = require("wordwrap")(90); @@ -803,33 +804,52 @@ export abstract class ConvenienceRenderer extends Renderer { return "// "; } + protected emitComments(comments: Comment[]): void { + comments.forEach(comment => { + if (isStringComment(comment)) { + this.emitCommentLines([comment]); + } else if ("lines" in comment) { + this.emitCommentLines(comment.lines); + } else if ("descriptionBlock" in comment) { + this.emitDescriptionBlock(comment.descriptionBlock); + } else { + this.emitCommentLines(comment.customLines, comment); + } + + this.ensureBlankLine(); + }); + } + protected emitCommentLines( lines: Sourcelike[], - lineStart?: string, - beforeLine?: string, - afterLine?: string, - firstLineStart?: string + { + lineStart = this.commentLineStart, + firstLineStart = lineStart, + lineEnd, + beforeComment, + afterComment + }: CommentOptions = {} ): void { - if (lineStart === undefined) { - lineStart = this.commentLineStart; - } - if (firstLineStart === undefined) { - firstLineStart = lineStart; - } - if (beforeLine !== undefined) { - this.emitLine(beforeLine); + if (beforeComment !== undefined) { + this.emitLine(beforeComment); } let first = true; for (const line of lines) { let start = first ? firstLineStart : lineStart; + first = false; + if (this.sourcelikeToString(line) === "") { start = trimEnd(start); } - this.emitLine(start, line); - first = false; + + if (lineEnd) { + this.emitLine(start, line, lineEnd); + } else { + this.emitLine(start, line); + } } - if (afterLine !== undefined) { - this.emitLine(afterLine); + if (afterComment !== undefined) { + this.emitLine(afterComment); } } diff --git a/packages/quicktype-core/src/Renderer.ts b/packages/quicktype-core/src/Renderer.ts index bd9badc6f..c9ab8f4d4 100644 --- a/packages/quicktype-core/src/Renderer.ts +++ b/packages/quicktype-core/src/Renderer.ts @@ -6,6 +6,7 @@ import { Source, Sourcelike, NewlineSource, annotated, sourcelikeToSource, newli import { AnnotationData, IssueAnnotationData } from "./Annotation"; import { assert, panic } from "./support/Support"; import { TargetLanguage } from "./TargetLanguage"; +import { type Comment } from "./support/Comments"; export type RenderResult = { sources: ReadonlyMap; @@ -40,7 +41,7 @@ function lineIndentation(line: string): { indent: number; text: string | null } export type RenderContext = { typeGraph: TypeGraph; - leadingComments: string[] | undefined; + leadingComments?: Comment[]; }; export type ForEachPosition = "first" | "last" | "middle" | "only"; @@ -120,7 +121,7 @@ class EmitContext { export abstract class Renderer { protected readonly typeGraph: TypeGraph; - protected readonly leadingComments: string[] | undefined; + protected readonly leadingComments: Comment[] | undefined; private _names: ReadonlyMap | undefined; private _finishedFiles: Map; @@ -128,7 +129,10 @@ export abstract class Renderer { private _emitContext: EmitContext; - constructor(protected readonly targetLanguage: TargetLanguage, renderContext: RenderContext) { + constructor( + protected readonly targetLanguage: TargetLanguage, + renderContext: RenderContext + ) { this.typeGraph = renderContext.typeGraph; this.leadingComments = renderContext.leadingComments; diff --git a/packages/quicktype-core/src/Run.ts b/packages/quicktype-core/src/Run.ts index 57db411db..195417cb9 100644 --- a/packages/quicktype-core/src/Run.ts +++ b/packages/quicktype-core/src/Run.ts @@ -19,6 +19,7 @@ import { InputData } from "./input/Inputs"; import { flattenStrings } from "./rewrites/FlattenStrings"; import { makeTransformations } from "./MakeTransformations"; import { TransformedStringTypeKind } from "./Type"; +import { type Comment } from "./support/Comments"; export function getTargetLanguage(nameOrInstance: string | TargetLanguage): TargetLanguage { if (typeof nameOrInstance === "object") { @@ -137,7 +138,7 @@ export type NonInferenceOptions = { /** Don't render output. This is mainly useful for benchmarking. */ noRender: boolean; /** If given, output these comments at the beginning of the main output file */ - leadingComments: string[] | undefined; + leadingComments?: Comment[]; /** Options for the target language's renderer */ rendererOptions: RendererOptions; /** String to use for one indentation level. If not given, use the target language's default. */ diff --git a/packages/quicktype-core/src/TargetLanguage.ts b/packages/quicktype-core/src/TargetLanguage.ts index 4b8203026..f1c3a90bf 100644 --- a/packages/quicktype-core/src/TargetLanguage.ts +++ b/packages/quicktype-core/src/TargetLanguage.ts @@ -9,11 +9,16 @@ import { defined } from "./support/Support"; import { ConvenienceRenderer } from "./ConvenienceRenderer"; import { Type } from "./Type"; import { DateTimeRecognizer, DefaultDateTimeRecognizer } from "./DateTime"; +import { type Comment } from "./support/Comments"; export type MultiFileRenderResult = ReadonlyMap; export abstract class TargetLanguage { - constructor(readonly displayName: string, readonly names: string[], readonly extension: string) {} + constructor( + readonly displayName: string, + readonly names: string[], + readonly extension: string + ) {} protected abstract getOptions(): Option[]; @@ -41,7 +46,7 @@ export abstract class TargetLanguage { typeGraph: TypeGraph, givenOutputFilename: string, alphabetizeProperties: boolean, - leadingComments: string[] | undefined, + leadingComments: Comment[] | undefined, rendererOptions: { [name: string]: any }, indentation?: string ): MultiFileRenderResult { diff --git a/packages/quicktype-core/src/language/CJSON.ts b/packages/quicktype-core/src/language/CJSON.ts index 2a9ee43c5..8dd1990b2 100644 --- a/packages/quicktype-core/src/language/CJSON.ts +++ b/packages/quicktype-core/src/language/CJSON.ts @@ -3948,7 +3948,7 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param lines: description block lines */ protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } /** diff --git a/packages/quicktype-core/src/language/CPlusPlus.ts b/packages/quicktype-core/src/language/CPlusPlus.ts index c11a48795..e538000d1 100644 --- a/packages/quicktype-core/src/language/CPlusPlus.ts +++ b/packages/quicktype-core/src/language/CPlusPlus.ts @@ -383,7 +383,10 @@ function addQualifier(qualifier: Sourcelike, qualified: Sourcelike[]): Sourcelik } class WrappingCode { - constructor(private readonly start: Sourcelike[], private readonly end: Sourcelike[]) {} + constructor( + private readonly start: Sourcelike[], + private readonly end: Sourcelike[] + ) {} wrap(qualifier: Sourcelike, inner: Sourcelike): Sourcelike { return [addQualifier(qualifier, this.start), inner, this.end]; @@ -780,7 +783,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitCommentLines([" To parse this JSON data, first install", ""]); if (this._options.boost) { @@ -857,7 +860,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } protected emitBlock(line: Sourcelike, withSemicolon: boolean, f: () => void, withIndent = true): void { diff --git a/packages/quicktype-core/src/language/CSharp.ts b/packages/quicktype-core/src/language/CSharp.ts index 69c202853..eba9fe6b9 100644 --- a/packages/quicktype-core/src/language/CSharp.ts +++ b/packages/quicktype-core/src/language/CSharp.ts @@ -581,7 +581,7 @@ export class CSharpRenderer extends ConvenienceRenderer { if (this._csOptions.dense) { this.emitLine(start, lines.join("; "), ""); } else { - this.emitCommentLines(lines, "/// ", start, "/// "); + this.emitCommentLines(lines, { lineStart: "/// ", beforeComment: start, afterComment: "/// " }); } } @@ -755,7 +755,7 @@ export class CSharpRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else { this.emitDefaultLeadingComments(); } diff --git a/packages/quicktype-core/src/language/Crystal.ts b/packages/quicktype-core/src/language/Crystal.ts index ceaa784dc..3b469fe15 100644 --- a/packages/quicktype-core/src/language/Crystal.ts +++ b/packages/quicktype-core/src/language/Crystal.ts @@ -377,7 +377,7 @@ export class CrystalRenderer extends ConvenienceRenderer { protected emitLeadingComments(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); return; } } diff --git a/packages/quicktype-core/src/language/Dart.ts b/packages/quicktype-core/src/language/Dart.ts index 5ac375f68..43260c2c0 100644 --- a/packages/quicktype-core/src/language/Dart.ts +++ b/packages/quicktype-core/src/language/Dart.ts @@ -327,7 +327,7 @@ export class DartRenderer extends ConvenienceRenderer { protected emitFileHeader(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } if (this._options.justTypes) return; @@ -375,7 +375,7 @@ export class DartRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, "///", ""); + this.emitCommentLines(lines, { lineStart: "///", beforeComment: "" }); } protected emitBlock(line: Sourcelike, f: () => void): void { diff --git a/packages/quicktype-core/src/language/Elm.ts b/packages/quicktype-core/src/language/Elm.ts index 2c7fd49ae..bab36c541 100644 --- a/packages/quicktype-core/src/language/Elm.ts +++ b/packages/quicktype-core/src/language/Elm.ts @@ -229,9 +229,9 @@ export class ElmRenderer extends ConvenienceRenderer { protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { - this.emitLine("{-| ", lines[0], " -}"); + this.emitComments([{ customLines: lines, lineStart: "{-| ", lineEnd: " -}" }]); } else { - this.emitCommentLines(lines, "", undefined, "-}", "{-| "); + this.emitCommentLines(lines, { firstLineStart: "{-| ", lineStart: "", afterComment: "-}" }); } } @@ -574,7 +574,7 @@ export class ElmRenderer extends ConvenienceRenderer { }); if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitCommentLines([ "To decode the JSON data, add this file to your project, run", diff --git a/packages/quicktype-core/src/language/Haskell.ts b/packages/quicktype-core/src/language/Haskell.ts index e597e685d..2bac412e9 100644 --- a/packages/quicktype-core/src/language/Haskell.ts +++ b/packages/quicktype-core/src/language/Haskell.ts @@ -185,9 +185,13 @@ export class HaskellRenderer extends ConvenienceRenderer { protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { - this.emitLine("{-| ", lines[0], " -}"); + this.emitComments([{ customLines: lines, lineStart: "{-| ", lineEnd: " -}" }]); } else { - this.emitCommentLines(lines, "", undefined, "-}", "{-| "); + this.emitCommentLines(lines, { + firstLineStart: "{-| ", + lineStart: "", + afterComment: "-}" + }); } } diff --git a/packages/quicktype-core/src/language/Java.ts b/packages/quicktype-core/src/language/Java.ts index 5289794fd..05ad4b535 100644 --- a/packages/quicktype-core/src/language/Java.ts +++ b/packages/quicktype-core/src/language/Java.ts @@ -195,7 +195,10 @@ export function javaNameStyle( } abstract class JavaDateTimeProvider { - constructor(protected readonly _renderer: JavaRenderer, protected readonly _className: string) {} + constructor( + protected readonly _renderer: JavaRenderer, + protected readonly _className: string + ) {} abstract keywords: string[]; abstract dateTimeImports: string[]; @@ -574,7 +577,7 @@ export class JavaRenderer extends ConvenienceRenderer { // FIXME: Why is this necessary? this.ensureBlankLine(); if (!this._haveEmittedLeadingComments && this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); this.ensureBlankLine(); this._haveEmittedLeadingComments = true; } @@ -600,7 +603,7 @@ export class JavaRenderer extends ConvenienceRenderer { } public emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } public emitBlock(line: Sourcelike, f: () => void): void { diff --git a/packages/quicktype-core/src/language/JavaScript.ts b/packages/quicktype-core/src/language/JavaScript.ts index 36f78a12c..e8e3db9a2 100644 --- a/packages/quicktype-core/src/language/JavaScript.ts +++ b/packages/quicktype-core/src/language/JavaScript.ts @@ -164,7 +164,7 @@ export class JavaScriptRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } typeMapTypeFor(t: Type): Sourcelike { @@ -554,7 +554,7 @@ function r(name${stringAnnotation}) { protected emitSourceStructure() { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else { this.emitUsageComments(); } diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes.ts index c2d6f34bb..7d6d90612 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes.ts @@ -180,7 +180,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { " input: MyShape", "};" ], - "// " + { lineStart: "// " } ); } @@ -291,7 +291,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else { this.emitUsageComments(); } diff --git a/packages/quicktype-core/src/language/Kotlin.ts b/packages/quicktype-core/src/language/Kotlin.ts index 3b08e8a3f..407b82300 100644 --- a/packages/quicktype-core/src/language/Kotlin.ts +++ b/packages/quicktype-core/src/language/Kotlin.ts @@ -236,7 +236,7 @@ export class KotlinRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } protected emitBlock(line: Sourcelike, f: () => void, delimiter: "curly" | "paren" | "lambda" = "curly"): void { @@ -292,7 +292,7 @@ export class KotlinRenderer extends ConvenienceRenderer { protected emitHeader(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else { this.emitUsageHeader(); } diff --git a/packages/quicktype-core/src/language/Objective-C.ts b/packages/quicktype-core/src/language/Objective-C.ts index b82f065fa..b1a44e899 100644 --- a/packages/quicktype-core/src/language/Objective-C.ts +++ b/packages/quicktype-core/src/language/Objective-C.ts @@ -290,7 +290,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, "/// "); + this.emitCommentLines(lines, { lineStart: "/// " }); } protected emitBlock(line: Sourcelike, f: () => void): void { @@ -912,7 +912,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.startFile(filename, "h"); if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitCommentLines(["To parse this JSON:", ""]); this.emitLine("// NSError *error;"); diff --git a/packages/quicktype-core/src/language/Php.ts b/packages/quicktype-core/src/language/Php.ts index 559bcda14..670b09cc1 100644 --- a/packages/quicktype-core/src/language/Php.ts +++ b/packages/quicktype-core/src/language/Php.ts @@ -229,7 +229,7 @@ export class PhpRenderer extends ConvenienceRenderer { protected startFile(_basename: Sourcelike): void { this.ensureBlankLine(); if (!this._haveEmittedLeadingComments && this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); this.ensureBlankLine(); this._haveEmittedLeadingComments = true; } @@ -246,7 +246,7 @@ export class PhpRenderer extends ConvenienceRenderer { } public emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } public emitBlock(line: Sourcelike, f: () => void): void { diff --git a/packages/quicktype-core/src/language/Pike.ts b/packages/quicktype-core/src/language/Pike.ts index 686ca8c53..d2d9541b7 100644 --- a/packages/quicktype-core/src/language/Pike.ts +++ b/packages/quicktype-core/src/language/Pike.ts @@ -269,7 +269,7 @@ export class PikeRenderer extends ConvenienceRenderer { "and will likely throw an error, if the JSON string does not", "match the expected interface, even if the JSON itself is valid." ], - "// " + { lineStart: "// " } ); } diff --git a/packages/quicktype-core/src/language/Python.ts b/packages/quicktype-core/src/language/Python.ts index 18fc2d97d..bce7db095 100644 --- a/packages/quicktype-core/src/language/Python.ts +++ b/packages/quicktype-core/src/language/Python.ts @@ -282,9 +282,13 @@ export class PythonRenderer extends ConvenienceRenderer { return content; }, lines[0]); - this.emitLine('"""', docstring, '"""'); + this.emitComments([{ customLines: [docstring], lineStart: '"""', lineEnd: '"""' }]); } else { - this.emitCommentLines(lines, "", undefined, '"""', '"""'); + this.emitCommentLines(lines, { + firstLineStart: '"""', + lineStart: "", + afterComment: '"""' + }); } } @@ -509,7 +513,7 @@ export class PythonRenderer extends ConvenienceRenderer { const supportLines = this.gatherSource(() => this.emitSupportCode()); if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } this.ensureBlankLine(); this.emitImports(); diff --git a/packages/quicktype-core/src/language/Rust.ts b/packages/quicktype-core/src/language/Rust.ts index c55b21d2a..910c9e2e1 100644 --- a/packages/quicktype-core/src/language/Rust.ts +++ b/packages/quicktype-core/src/language/Rust.ts @@ -491,7 +491,7 @@ export class RustRenderer extends ConvenienceRenderer { protected emitLeadingComments(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); return; } diff --git a/packages/quicktype-core/src/language/Scala3.ts b/packages/quicktype-core/src/language/Scala3.ts index 489749cea..d18ab1023 100644 --- a/packages/quicktype-core/src/language/Scala3.ts +++ b/packages/quicktype-core/src/language/Scala3.ts @@ -13,20 +13,10 @@ import { isNumeric, legalizeCharacters, splitIntoWords - } from "../support/Strings"; import { assertNever } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayType, - ClassProperty, - ClassType, - EnumType, - MapType, - ObjectType, - Type, - UnionType -} from "../Type"; +import { ArrayType, ClassProperty, ClassType, EnumType, MapType, ObjectType, Type, UnionType } from "../Type"; import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; import { RenderContext } from "../Renderer"; @@ -37,13 +27,16 @@ export enum Framework { } export const scala3Options = { - framework: new EnumOption("framework", "Serialization framework", + framework: new EnumOption( + "framework", + "Serialization framework", [ ["just-types", Framework.None], ["circe", Framework.Circe], - ["upickle", Framework.Upickle], - ] - , undefined), + ["upickle", Framework.Upickle] + ], + undefined + ), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") }; @@ -135,13 +128,17 @@ const keywords = [ "Enum" ]; - /** * Check if given parameter name should be wrapped in a backtick * @param paramName */ const shouldAddBacktick = (paramName: string): boolean => { - return keywords.some(s => paramName === s) || invalidSymbols.some(s => paramName.includes(s)) || !isNaN(+parseFloat(paramName)) || !isNaN(parseInt(paramName.charAt(0))); + return ( + keywords.some(s => paramName === s) || + invalidSymbols.some(s => paramName.includes(s)) || + !isNaN(+parseFloat(paramName)) || + !isNaN(parseInt(paramName.charAt(0))) + ); }; const wrapOption = (s: string, optional: boolean): string => { @@ -236,7 +233,7 @@ export class Scala3Renderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } protected emitBlock( @@ -248,10 +245,10 @@ export class Scala3Renderer extends ConvenienceRenderer { delimiter === "curly" ? ["{", "}"] : delimiter === "paren" - ? ["(", ")"] - : delimiter === "none" - ? ["", ""] - : ["{", "})"]; + ? ["(", ")"] + : delimiter === "none" + ? ["", ""] + : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); @@ -308,7 +305,7 @@ export class Scala3Renderer extends ConvenienceRenderer { protected emitHeader(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else { this.emitUsageHeader(); } @@ -393,7 +390,7 @@ export class Scala3Renderer extends ConvenienceRenderer { } protected emitClassDefinitionMethods() { - this.emitLine(")"); + this.emitLine(")"); } protected emitEnumDefinition(e: EnumType, enumName: Name): void { @@ -403,19 +400,25 @@ export class Scala3Renderer extends ConvenienceRenderer { ["enum ", enumName, " : "], () => { let count = e.cases.size; - if (count > 0) { this.emitItem("\t case ") }; + if (count > 0) { + this.emitItem("\t case "); + } this.forEachEnumCase(e, "none", (name, jsonName) => { if (!(jsonName == "")) { const backticks = shouldAddBacktick(jsonName) || jsonName.includes(" ") || - !isNaN(parseInt(jsonName.charAt(0))) - if (backticks) { this.emitItem("`") } + !isNaN(parseInt(jsonName.charAt(0))); + if (backticks) { + this.emitItem("`"); + } this.emitItemOnce([name]); - if (backticks) { this.emitItem("`") } + if (backticks) { + this.emitItem("`"); + } if (--count > 0) this.emitItem([","]); } else { - --count + --count; } }); }, @@ -433,7 +436,7 @@ export class Scala3Renderer extends ConvenienceRenderer { this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Array = [] + const theTypes: Array = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { theTypes.push(this.scalaType(t)); }); @@ -470,7 +473,6 @@ export class Scala3Renderer extends ConvenienceRenderer { } export class UpickleRenderer extends Scala3Renderer { - protected emitClassDefinitionMethods() { this.emitLine(") derives ReadWriter "); } @@ -481,14 +483,12 @@ export class UpickleRenderer extends Scala3Renderer { this.emitLine("import upickle.default.*"); this.ensureBlankLine(); } - } export class Smithy4sRenderer extends Scala3Renderer { - protected emitHeader(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else { this.emitUsageHeader(); } @@ -513,8 +513,6 @@ export class Smithy4sRenderer extends Scala3Renderer { this.emitLine("structure ", className, "{}"); } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); @@ -522,30 +520,26 @@ export class Smithy4sRenderer extends Scala3Renderer { this.emitItem(["enum ", enumName, " { "]); let count = e.cases.size; this.forEachEnumCase(e, "none", (name, jsonName) => { - // if (!(jsonName == "")) { + // if (!(jsonName == "")) { /* const backticks = shouldAddBacktick(jsonName) || jsonName.includes(" ") || !isNaN(parseInt(jsonName.charAt(0))) if (backticks) {this.emitItem("`")} else */ this.emitLine(); - this.emitItem([name, " = \"", jsonName, "\""]); + this.emitItem([name, ' = "', jsonName, '"']); // if (backticks) {this.emitItem("`")} if (--count > 0) this.emitItem([","]); //} else { //--count - //} + //} }); this.ensureBlankLine(); this.emitItem(["}"]); - } - } - export class CirceRenderer extends Scala3Renderer { - seenUnionTypes: Array = []; protected circeEncoderForType(t: Type, _ = false, noOptional = false, paramName: string = ""): Sourcelike { @@ -602,15 +596,14 @@ export class CirceRenderer extends Scala3Renderer { jsonName.includes(" ") || !isNaN(parseInt(jsonName.charAt(0))) if (backticks) {this.emitItem("`")} else */ - this.emitItem(["\"", jsonName, "\""]); + this.emitItem(['"', jsonName, '"']); // if (backticks) {this.emitItem("`")} if (--count > 0) this.emitItem([" | "]); //} else { //--count - //} + //} }); this.ensureBlankLine(); - } protected emitHeader(): void { @@ -622,25 +615,45 @@ export class CirceRenderer extends Scala3Renderer { this.emitLine("import cats.syntax.functor._"); this.ensureBlankLine(); - this.emitLine("// For serialising string unions") - this.emitLine("given [A <: Singleton](using A <:< String): Decoder[A] = Decoder.decodeString.emapTry(x => Try(x.asInstanceOf[A])) "); - this.emitLine("given [A <: Singleton](using ev: A <:< String): Encoder[A] = Encoder.encodeString.contramap(ev) "); + this.emitLine("// For serialising string unions"); + this.emitLine( + "given [A <: Singleton](using A <:< String): Decoder[A] = Decoder.decodeString.emapTry(x => Try(x.asInstanceOf[A])) " + ); + this.emitLine( + "given [A <: Singleton](using ev: A <:< String): Encoder[A] = Encoder.encodeString.contramap(ev) " + ); this.ensureBlankLine(); - this.emitLine("// If a union has a null in, then we'll need this too... ") + this.emitLine("// If a union has a null in, then we'll need this too... "); this.emitLine("type NullValue = None.type"); } protected emitTopLevelArray(t: ArrayType, name: Name): void { super.emitTopLevelArray(t, name); const elementType = this.scalaType(t.items); - this.emitLine(["given (using ev : ", elementType, "): Encoder[Map[String,", elementType, "]] = Encoder.encodeMap[String, ", elementType, "]"]); + this.emitLine([ + "given (using ev : ", + elementType, + "): Encoder[Map[String,", + elementType, + "]] = Encoder.encodeMap[String, ", + elementType, + "]" + ]); } protected emitTopLevelMap(t: MapType, name: Name): void { super.emitTopLevelMap(t, name); const elementType = this.scalaType(t.values); this.ensureBlankLine(); - this.emitLine(["given (using ev : ", elementType, "): Encoder[Map[String, ", elementType, "]] = Encoder.encodeMap[String, ", elementType, "]"]); + this.emitLine([ + "given (using ev : ", + elementType, + "): Encoder[Map[String, ", + elementType, + "]] = Encoder.encodeMap[String, ", + elementType, + "]" + ]); } protected emitUnionDefinition(u: UnionType, unionName: Name): void { @@ -653,7 +666,7 @@ export class CirceRenderer extends Scala3Renderer { this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Array = [] + const theTypes: Array = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { theTypes.push(this.scalaType(t)); }); @@ -670,38 +683,43 @@ export class CirceRenderer extends Scala3Renderer { this.ensureBlankLine(); if (!this.seenUnionTypes.some(y => y === thisUnionType)) { this.seenUnionTypes.push(thisUnionType); - const sourceLikeTypes: Array<[Sourcelike, Type]> = [] + const sourceLikeTypes: Array<[Sourcelike, Type]> = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { sourceLikeTypes.push([this.scalaType(t), t]); - }); if (maybeNull !== null) { sourceLikeTypes.push([this.nameForUnionMember(u, maybeNull), maybeNull]); } - this.emitLine(["given Decoder[", unionName, "] = {"]) + this.emitLine(["given Decoder[", unionName, "] = {"]); this.indent(() => { - this.emitLine(["List[Decoder[", unionName, "]]("]) + this.emitLine(["List[Decoder[", unionName, "]]("]); this.indent(() => { - sourceLikeTypes.forEach((t) => { + sourceLikeTypes.forEach(t => { this.emitLine(["Decoder[", t[0], "].widen,"]); }); - }) - this.emitLine(").reduceLeft(_ or _)") - } - ) - this.emitLine(["}"]) + }); + this.emitLine(").reduceLeft(_ or _)"); + }); + this.emitLine(["}"]); this.ensureBlankLine(); - this.emitLine(["given Encoder[", unionName, "] = Encoder.instance {"]) + this.emitLine(["given Encoder[", unionName, "] = Encoder.instance {"]); this.indent(() => { sourceLikeTypes.forEach((t, i) => { const paramTemp = `enc${i.toString()}`; - this.emitLine(["case ", paramTemp, " : ", t[0], " => ", this.circeEncoderForType(t[1], false, false, paramTemp)]); + this.emitLine([ + "case ", + paramTemp, + " : ", + t[0], + " => ", + this.circeEncoderForType(t[1], false, false, paramTemp) + ]); }); - }) - this.emitLine("}") + }); + this.emitLine("}"); } } } @@ -741,4 +759,3 @@ export class Scala3TargetLanguage extends TargetLanguage { } } } - diff --git a/packages/quicktype-core/src/language/Smithy4s.ts b/packages/quicktype-core/src/language/Smithy4s.ts index 3b4ece721..d48c10d5e 100644 --- a/packages/quicktype-core/src/language/Smithy4s.ts +++ b/packages/quicktype-core/src/language/Smithy4s.ts @@ -13,20 +13,10 @@ import { isNumeric, legalizeCharacters, splitIntoWords - } from "../support/Strings"; import { assertNever } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayType, - ClassProperty, - ClassType, - EnumType, - MapType, - ObjectType, - Type, - UnionType -} from "../Type"; +import { ArrayType, ClassProperty, ClassType, EnumType, MapType, ObjectType, Type, UnionType } from "../Type"; import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; import { RenderContext } from "../Renderer"; @@ -35,11 +25,7 @@ export enum Framework { } export const SmithyOptions = { - framework: new EnumOption("framework", "Serialization framework", - [ - ["just-types", Framework.None] - ] - , undefined), + framework: new EnumOption("framework", "Serialization framework", [["just-types", Framework.None]], undefined), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") }; @@ -50,7 +36,7 @@ const invalidSymbols = [ "+", "!", "@", - "#", + "#", "%", "^", "&", @@ -74,9 +60,9 @@ const invalidSymbols = [ const keywords = [ "abstract", "case", - "catch", + "catch", "do", - "else", + "else", "export", "false", "final", @@ -86,7 +72,7 @@ const keywords = [ "if", "implicit", "import", - "new", + "new", "override", "package", "private", @@ -99,7 +85,7 @@ const keywords = [ "throw", "trait", "try", - "true", + "true", "val", "var", "while", @@ -121,13 +107,17 @@ const keywords = [ "Enum" ]; - /** * Check if given parameter name should be wrapped in a backtick * @param paramName */ const shouldAddBacktick = (paramName: string): boolean => { - return keywords.some(s => paramName === s) || invalidSymbols.some(s => paramName.includes(s)) || !isNaN(parseFloat(paramName)) || !isNaN(parseInt(paramName.charAt(0))); + return ( + keywords.some(s => paramName === s) || + invalidSymbols.some(s => paramName.includes(s)) || + !isNaN(parseFloat(paramName)) || + !isNaN(parseInt(paramName.charAt(0))) + ); }; function isPartCharacter(codePoint: number): boolean { @@ -203,7 +193,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, " * ", "/**", " */"); + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } protected emitBlock( @@ -215,10 +205,10 @@ export class Smithy4sRenderer extends ConvenienceRenderer { delimiter === "curly" ? ["{", "}"] : delimiter === "paren" - ? ["(", ")"] - : delimiter === "none" - ? ["", ""] - : ["{", "})"]; + ? ["(", ")"] + : delimiter === "none" + ? ["", ""] + : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); @@ -236,11 +226,11 @@ export class Smithy4sRenderer extends ConvenienceRenderer { } protected emitArrayType(_: ArrayType, smithyType: Sourcelike): void { - this.emitLine([ "list " , smithyType , " { member : ", "}" ]) + this.emitLine(["list ", smithyType, " { member : ", "}"]); } protected mapType(mapType: MapType, _ = false): Sourcelike { - return mapType.getCombinedName().toString() + "Map" + return mapType.getCombinedName().toString() + "Map"; //return [this.scalaType(mapType.values, withIssues), "Map"]; } @@ -265,32 +255,30 @@ export class Smithy4sRenderer extends ConvenienceRenderer { unionType => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { - return [this.scalaType(nullable, withIssues)]; + return [this.scalaType(nullable, withIssues)]; } return this.nameForNamedType(unionType); } ); } - - protected emitUsageHeader(): void { // To be overridden } protected emitHeader(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else { this.emitUsageHeader(); } this.ensureBlankLine(); - this.emitLine("$version: \"2\""); - this.emitLine("namespace ", this._scalaOptions.packageName); + this.emitLine('$version: "2"'); + this.emitLine("namespace ", this._scalaOptions.packageName); this.ensureBlankLine(); - - this.emitLine("document NullValue"); + + this.emitLine("document NullValue"); this.ensureBlankLine(); } @@ -330,7 +318,6 @@ export class Smithy4sRenderer extends ConvenienceRenderer { this.indent(() => { let count = c.getProperties().size; let first = true; - this.forEachClassProperty(c, "none", (_, jsonName, p) => { const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; @@ -338,9 +325,9 @@ export class Smithy4sRenderer extends ConvenienceRenderer { const last = --count === 0; const meta: Array<() => void> = []; - const laterType = p.type.kind === "array" || p.type.kind === "map" - if(laterType) { - emitLater.push(p) + const laterType = p.type.kind === "array" || p.type.kind === "map"; + if (laterType) { + emitLater.push(p); } const description = this.descriptionForClassProperty(c, jsonName); @@ -362,7 +349,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { nameWithBackticks, " : ", scalaType(p), - + last ? "" : "," ); @@ -372,29 +359,41 @@ export class Smithy4sRenderer extends ConvenienceRenderer { first = false; }); - }); + }); this.emitClassDefinitionMethods(emitLater); } - protected emitClassDefinitionMethods( arrayTypes : ClassProperty[] ) { + protected emitClassDefinitionMethods(arrayTypes: ClassProperty[]) { this.emitLine("}"); - arrayTypes.forEach (p => { - function ignore(_: T): void { - return; - } - matchCompoundType(p.type, - at => { - this.emitLine([ "list ", this.scalaType(at, true) , "{ member: ", this.scalaType(at.items, true), "}" ])}, - ignore, - mt =>{ - this.emitLine([ "map ", this.scalaType(mt, true) , "{ key: String , value: ", this.scalaType(mt.values, true), "}" ]) - }, - ignore, - ignore) - + arrayTypes.forEach(p => { + function ignore(_: T): void { + return; } - ) - + matchCompoundType( + p.type, + at => { + this.emitLine([ + "list ", + this.scalaType(at, true), + "{ member: ", + this.scalaType(at.items, true), + "}" + ]); + }, + ignore, + mt => { + this.emitLine([ + "map ", + this.scalaType(mt, true), + "{ key: String , value: ", + this.scalaType(mt.values, true), + "}" + ]); + }, + ignore, + ignore + ); + }); } protected emitEnumDefinition(e: EnumType, enumName: Name): void { @@ -404,28 +403,26 @@ export class Smithy4sRenderer extends ConvenienceRenderer { this.emitItem(["enum ", enumName, " { "]); let count = e.cases.size; - - this.forEachEnumCase(e, "none", (name, jsonName) => { - // if (!(jsonName == "")) { - /* const backticks = + this.forEachEnumCase(e, "none", (name, jsonName) => { + // if (!(jsonName == "")) { + /* const backticks = shouldAddBacktick(jsonName) || jsonName.includes(" ") || !isNaN(parseInt(jsonName.charAt(0))) if (backticks) {this.emitItem("`")} else */ - this.emitLine(); - - this.emitItem([name, " = \"", jsonName, "\""]); - - // if (backticks) {this.emitItem("`")} - if (--count > 0) this.emitItem([","]); - //} else { - //--count - //} - }); - + this.emitLine(); + + this.emitItem([name, ' = "', jsonName, '"']); + + // if (backticks) {this.emitItem("`")} + if (--count > 0) this.emitItem([","]); + //} else { + //--count + //} + }); + this.ensureBlankLine(); this.emitItem(["}"]); - } protected emitUnionDefinition(u: UnionType, unionName: Name): void { @@ -437,15 +434,14 @@ export class Smithy4sRenderer extends ConvenienceRenderer { const emitLater: Array = []; - this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Array = [] + const theTypes: Array = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { - const laterType = t.kind === "array" || t.kind === "map" - if(laterType) { - emitLater.push(t) + const laterType = t.kind === "array" || t.kind === "map"; + if (laterType) { + emitLater.push(t); } theTypes.push(this.scalaType(t)); }); @@ -456,29 +452,41 @@ export class Smithy4sRenderer extends ConvenienceRenderer { this.emitLine(["@untagged union ", unionName, " { "]); this.indent(() => { theTypes.forEach((t, i) => { - this.emitLine([String.fromCharCode(i+65), " : ", t]); + this.emitLine([String.fromCharCode(i + 65), " : ", t]); }); }); - this.emitLine("}") + this.emitLine("}"); this.ensureBlankLine(); - emitLater.forEach (p => { + emitLater.forEach(p => { function ignore(_: T): void { return; - } - matchCompoundType(p, - at => { - this.emitLine([ "list ", this.scalaType(at, true) , "{ member: ", this.scalaType(at.items, true), "}" ])}, + } + matchCompoundType( + p, + at => { + this.emitLine([ + "list ", + this.scalaType(at, true), + "{ member: ", + this.scalaType(at.items, true), + "}" + ]); + }, ignore, - mt =>{ - this.emitLine([ "map ", this.scalaType(mt, true) , "{ key: String , value: ", this.scalaType(mt.values, true), "}" ]) + mt => { + this.emitLine([ + "map ", + this.scalaType(mt, true), + "{ key: String , value: ", + this.scalaType(mt.values, true), + "}" + ]); }, - ignore, - ignore) - - } - ) - + ignore, + ignore + ); + }); } protected emitSourceStructure(): void { @@ -502,7 +510,6 @@ export class Smithy4sRenderer extends ConvenienceRenderer { } } - export class SmithyTargetLanguage extends TargetLanguage { constructor() { super("Smithy", ["Smithy"], "smithy"); @@ -534,4 +541,3 @@ export class SmithyTargetLanguage extends TargetLanguage { } } } - diff --git a/packages/quicktype-core/src/language/Swift.ts b/packages/quicktype-core/src/language/Swift.ts index c99f4b999..04fc431a1 100644 --- a/packages/quicktype-core/src/language/Swift.ts +++ b/packages/quicktype-core/src/language/Swift.ts @@ -374,7 +374,7 @@ export class SwiftRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, "/// "); + this.emitCommentLines(lines, { lineStart: "/// " }); } private emitBlock(line: Sourcelike, f: () => void): void { @@ -485,7 +485,7 @@ export class SwiftRenderer extends ConvenienceRenderer { private renderHeader(type: Type, name: Name): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { if (this._options.multiFileOutput) { this.emitLineOnce( @@ -536,7 +536,7 @@ export class SwiftRenderer extends ConvenienceRenderer { this.emitLineOnce("import Alamofire"); } if (this._options.optionalEnums) { - this.emitLineOnce("import OptionallyDecodable // https://github.com/idrougge/OptionallyDecodable"); + this.emitLineOnce("import OptionallyDecodable // https://github.com/idrougge/OptionallyDecodable"); } this.ensureBlankLine(); } @@ -574,7 +574,10 @@ export class SwiftRenderer extends ConvenienceRenderer { return protocols; } - private getProtocolString(kind: "struct" | "class" | "enum", baseClass: string | undefined = undefined): Sourcelike { + private getProtocolString( + kind: "struct" | "class" | "enum", + baseClass: string | undefined = undefined + ): Sourcelike { let protocols = this.getProtocolsArray(kind); if (baseClass) { protocols.unshift(baseClass); @@ -1416,7 +1419,6 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); if (!this._options.justTypes) { this.emitSupportFunctions4(); } - } private emitAlamofireExtension() { diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts index c615add4d..18d5d2c30 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts @@ -235,7 +235,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } this.emitImports(); diff --git a/packages/quicktype-core/src/language/TypeScriptZod.ts b/packages/quicktype-core/src/language/TypeScriptZod.ts index 3d67f5191..d57e56439 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod.ts @@ -234,7 +234,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } this.emitImports(); diff --git a/packages/quicktype-core/src/language/ruby/index.ts b/packages/quicktype-core/src/language/ruby/index.ts index 321e6cc58..383bdd5ae 100644 --- a/packages/quicktype-core/src/language/ruby/index.ts +++ b/packages/quicktype-core/src/language/ruby/index.ts @@ -620,7 +620,7 @@ export class RubyRenderer extends ConvenienceRenderer { protected emitSourceStructure() { if (this.leadingComments !== undefined) { - this.emitCommentLines(this.leadingComments); + this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitLine("# This code may look unusually verbose for Ruby (and it is), but"); this.emitLine("# it performs some subtle and complex validation of JSON data."); diff --git a/packages/quicktype-core/src/support/Comments.ts b/packages/quicktype-core/src/support/Comments.ts new file mode 100644 index 000000000..3599cf133 --- /dev/null +++ b/packages/quicktype-core/src/support/Comments.ts @@ -0,0 +1,23 @@ +import { Sourcelike } from "../Source"; + +export type CommentOptions = { + lineStart?: string; + lineEnd?: string; + beforeComment?: string; + afterComment?: string; + firstLineStart?: string; +}; + +type DescriptionBlockCommentConfig = { descriptionBlock: Sourcelike[] }; +type InlineCommentConfig = { lines: Sourcelike[] }; +type CustomCommentConfig = CommentOptions & { + customLines: Sourcelike[]; +}; + +export type CommentConfig = DescriptionBlockCommentConfig | InlineCommentConfig | CustomCommentConfig; + +export type Comment = string | CommentConfig; + +export const isStringComment = (comment: Comment): comment is string => { + return typeof comment === "string"; +}; From 1c474111bfb1ebdf3133eba44d4b14b4fb481843 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Wed, 14 Feb 2024 05:52:35 -0800 Subject: [PATCH 20/99] Update README.md --- README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/README.md b/README.md index d58334102..b8a93cb39 100644 --- a/README.md +++ b/README.md @@ -43,15 +43,6 @@ For the best CLI, we recommend installing `quicktype` globally via `npm`: npm install -g quicktype ``` -Other options: - -- [Homebrew](http://formulae.brew.sh/formula/quicktype) _(infrequently updated)_ -- [Xcode extension](https://itunes.apple.com/us/app/paste-json-as-code-quicktype/id1330801220?mt=12)\* -- [VSCode extension](https://marketplace.visualstudio.com/items/quicktype.quicktype)\* -- [Visual Studio extension](https://marketplace.visualstudio.com/items?itemName=typeguard.quicktype-vs)\* - -\* limited functionality - ## Using `quicktype` ```bash From d68b2bac1767b3efb8569734cb28037dcc898a4b Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Wed, 14 Feb 2024 13:59:18 +0000 Subject: [PATCH 21/99] style: format code with Prettier (#2502) This commit fixes the style issues introduced in c188aba according to the output from Prettier. Details: None Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- packages/quicktype-core/src/language/CPlusPlus.ts | 4 +++- packages/quicktype-core/src/language/CSharp.ts | 9 ++++----- packages/quicktype-core/src/language/Dart.ts | 4 ++-- packages/quicktype-core/src/language/Rust.ts | 4 ++-- packages/quicktype-core/src/language/Scala3.ts | 8 ++++---- packages/quicktype-core/src/language/Smithy4s.ts | 8 ++++---- 6 files changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus.ts b/packages/quicktype-core/src/language/CPlusPlus.ts index e538000d1..03cdf6285 100644 --- a/packages/quicktype-core/src/language/CPlusPlus.ts +++ b/packages/quicktype-core/src/language/CPlusPlus.ts @@ -1985,7 +1985,9 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { "; break;" ); }); - this.emitLine(`default: throw std::runtime_error("Unexpected value in enumeration \\"${enumName}\\": " + std::to_string(static_cast(x)));`); + this.emitLine( + `default: throw std::runtime_error("Unexpected value in enumeration \\"${enumName}\\": " + std::to_string(static_cast(x)));` + ); }); } ); diff --git a/packages/quicktype-core/src/language/CSharp.ts b/packages/quicktype-core/src/language/CSharp.ts index eba9fe6b9..627e387be 100644 --- a/packages/quicktype-core/src/language/CSharp.ts +++ b/packages/quicktype-core/src/language/CSharp.ts @@ -191,7 +191,7 @@ export const cSharpOptions = { "secondary" ), checkRequired: new BooleanOption("check-required", "Fail if required properties are missing", false), - keepPropertyName: new BooleanOption("keep-property-name", "Keep original field name generate", false), + keepPropertyName: new BooleanOption("keep-property-name", "Keep original field name generate", false) }; export class CSharpTargetLanguage extends TargetLanguage { @@ -306,7 +306,6 @@ function csNameStyle(original: string): string { } function csNameStyleKeep(original: string): string { - const keywords = [ "abstract", "as", @@ -384,8 +383,8 @@ function csNameStyleKeep(original: string): string { "virtual", "void", "volatile", - "while", - ] + "while" + ]; const words: WordInName[] = [ { @@ -403,7 +402,7 @@ function csNameStyleKeep(original: string): string { x => x, "", isStartCharacter - ) + ); return keywords.includes(result) ? "@" + result : result; } diff --git a/packages/quicktype-core/src/language/Dart.ts b/packages/quicktype-core/src/language/Dart.ts index 43260c2c0..6dc40ead6 100644 --- a/packages/quicktype-core/src/language/Dart.ts +++ b/packages/quicktype-core/src/language/Dart.ts @@ -200,8 +200,8 @@ function dartNameStyle(startWithUpper: boolean, upperUnderscore: boolean, origin const firstWordStyle = upperUnderscore ? allUpperWordStyle : startWithUpper - ? firstUpperWordStyle - : allLowerWordStyle; + ? firstUpperWordStyle + : allLowerWordStyle; const restWordStyle = upperUnderscore ? allUpperWordStyle : firstUpperWordStyle; return combineWords( words, diff --git a/packages/quicktype-core/src/language/Rust.ts b/packages/quicktype-core/src/language/Rust.ts index 910c9e2e1..56b464161 100644 --- a/packages/quicktype-core/src/language/Rust.ts +++ b/packages/quicktype-core/src/language/Rust.ts @@ -129,7 +129,7 @@ export class RustTargetLanguage extends TargetLanguage { rustOptions.derivePartialEq, rustOptions.edition2018, rustOptions.leadingComments, - rustOptions.skipSerializingNone, + rustOptions.skipSerializingNone ]; } } @@ -371,7 +371,7 @@ export class RustRenderer extends ConvenienceRenderer { private emitSkipSerializeNone(t: Type) { if (t instanceof UnionType) { const nullable = nullableFromUnion(t); - if (nullable !== null) this.emitLine('#[serde(skip_serializing_if = "Option::is_none")]'); + if (nullable !== null) this.emitLine('#[serde(skip_serializing_if = "Option::is_none")]'); } } diff --git a/packages/quicktype-core/src/language/Scala3.ts b/packages/quicktype-core/src/language/Scala3.ts index d18ab1023..56437c02b 100644 --- a/packages/quicktype-core/src/language/Scala3.ts +++ b/packages/quicktype-core/src/language/Scala3.ts @@ -245,10 +245,10 @@ export class Scala3Renderer extends ConvenienceRenderer { delimiter === "curly" ? ["{", "}"] : delimiter === "paren" - ? ["(", ")"] - : delimiter === "none" - ? ["", ""] - : ["{", "})"]; + ? ["(", ")"] + : delimiter === "none" + ? ["", ""] + : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); diff --git a/packages/quicktype-core/src/language/Smithy4s.ts b/packages/quicktype-core/src/language/Smithy4s.ts index d48c10d5e..3a875be64 100644 --- a/packages/quicktype-core/src/language/Smithy4s.ts +++ b/packages/quicktype-core/src/language/Smithy4s.ts @@ -205,10 +205,10 @@ export class Smithy4sRenderer extends ConvenienceRenderer { delimiter === "curly" ? ["{", "}"] : delimiter === "paren" - ? ["(", ")"] - : delimiter === "none" - ? ["", ""] - : ["{", "})"]; + ? ["(", ")"] + : delimiter === "none" + ? ["", ""] + : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); From f440afd15a59ab8e2d15f83971c72629ead4e602 Mon Sep 17 00:00:00 2001 From: Fee Fladder <33122845+feefladder@users.noreply.github.com> Date: Wed, 14 Feb 2024 15:20:42 +0100 Subject: [PATCH 22/99] fixed #2411 and typothing in script/quicktype comments: doesn't exist, in stead (#2412) Co-authored-by: David Siegel --- packages/quicktype-core/src/input/JSONSchemaInput.ts | 10 +++++----- script/quicktype | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/quicktype-core/src/input/JSONSchemaInput.ts b/packages/quicktype-core/src/input/JSONSchemaInput.ts index 88142e084..21827c467 100644 --- a/packages/quicktype-core/src/input/JSONSchemaInput.ts +++ b/packages/quicktype-core/src/input/JSONSchemaInput.ts @@ -226,7 +226,7 @@ export class Ref { get name(): string { const path = Array.from(this.path); - for (;;) { + for (; ;) { const e = path.pop(); if (e === undefined || e.kind === PathElementKind.Root) { let name = this.addressURI !== undefined ? this.addressURI.filename() : ""; @@ -399,7 +399,7 @@ class Canonizer { private readonly _map = new EqualityMap(); private readonly _schemaAddressesAdded = new Set(); - constructor(private readonly _ctx: RunContext) {} + constructor(private readonly _ctx: RunContext) { } private addIDs(schema: any, loc: Location) { if (schema === null) return; @@ -536,7 +536,7 @@ class Resolver { private readonly _ctx: RunContext, private readonly _store: JSONSchemaStore, private readonly _canonizer: Canonizer - ) {} + ) { } private async tryResolveVirtualRef( fetchBase: Location, @@ -548,7 +548,7 @@ class Resolver { // we don't know its $id mapping yet, which means we don't know where we // will end up. What we do if we encounter a new schema is add all its // IDs first, and then try to canonize again. - for (;;) { + for (; ;) { const loc = this._canonizer.canonize(fetchBase, virtualRef); const canonical = loc.canonicalRef; assert(canonical.hasAddress, "Canonical ref can't be resolved without an address"); @@ -808,7 +808,7 @@ async function addTypesInSchema( } else if (typeof items === "object") { const itemsLoc = loc.push("items"); itemType = await toType(checkJSONSchema(items, itemsLoc.canonicalRef), itemsLoc, singularAttributes); - } else if (items !== undefined) { + } else if (items !== undefined && items !== true) { return messageError("SchemaArrayItemsMustBeStringOrArray", withRef(loc, { actual: items })); } else { itemType = typeBuilder.getPrimitiveType("any"); diff --git a/script/quicktype b/script/quicktype index d970c5204..458c12a01 100755 --- a/script/quicktype +++ b/script/quicktype @@ -3,7 +3,7 @@ # This runs quicktype, ensuring dependencies are installed # and rebuilding quicktype first. # -# Use script/quickertype to skip reinstalling dependencies +# Use script/quickesttype to skip reinstalling dependencies # and rebuilding PureScript for 10s faster runs if you # are just working on TargetLanguage code in TypeScript. From 1f89a9710f35a96da070e4c3c445e208deee197f Mon Sep 17 00:00:00 2001 From: Maczug Date: Wed, 14 Feb 2024 15:23:42 +0100 Subject: [PATCH 23/99] feat(Golang): Add support for native golang Date/Time types (#2306) * feat(Golang): Add support for native golang Date/Time types * code cleanup * fix: import generation * fix: proper way of indenting imports * fixes: fix import generation, tests data, golang tests list * fix: review issues --------- Co-authored-by: Maciej Maczuga Co-authored-by: David Siegel --- .../quicktype-core/src/language/Golang.ts | 118 +- test/inputs/json/misc/0a358.json | 411 +- test/inputs/json/misc/26c9c.json | 11558 ++++++- test/inputs/json/misc/32d5c.json | 3053 +- test/inputs/json/misc/337ed.json | 1877 +- test/inputs/json/misc/54d32.json | 411 +- test/inputs/json/misc/5eae5.json | 1325 +- test/inputs/json/misc/5f7fe.json | 24829 ++++++++++++++-- test/inputs/json/misc/617e8.json | 5453 +++- test/inputs/json/misc/734ad.json | 2643 +- test/inputs/json/misc/77392.json | 2603 +- test/inputs/json/misc/80aff.json | 236 +- test/inputs/json/misc/9ac3b.json | 661 +- test/inputs/json/misc/b4865.json | 13204 +++++++- test/inputs/json/misc/d23d5.json | 411 +- test/inputs/json/samples/null-safe.json | 2 +- test/inputs/schema/date-time.1.json | 10 +- test/languages.ts | 11 +- 18 files changed, 63761 insertions(+), 5055 deletions(-) diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index 7eff608ed..c9fc9009f 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -19,6 +19,7 @@ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; import { TargetLanguage } from "../TargetLanguage"; import { ConvenienceRenderer } from "../ConvenienceRenderer"; import { RenderContext } from "../Renderer"; +import { StringTypeMapping, TransformedStringTypeKind, PrimitiveStringTypeKind } from ".."; export const goOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), @@ -49,6 +50,12 @@ export class GoTargetLanguage extends TargetLanguage { return true; } + get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + mapping.set("date-time", "date-time"); + return mapping; + } + get supportsOptionalClassProperties(): boolean { return true; } @@ -85,7 +92,7 @@ const compoundTypeKinds: TypeKind[] = ["array", "class", "map", "enum"]; function isValueType(t: Type): boolean { const kind = t.kind; - return primitiveValueTypeKinds.indexOf(kind) >= 0 || kind === "class" || kind === "enum"; + return primitiveValueTypeKinds.indexOf(kind) >= 0 || kind === "class" || kind === "enum" || kind === "date-time"; } function canOmitEmpty(cp: ClassProperty): boolean { @@ -217,6 +224,13 @@ export class GoRenderer extends ConvenienceRenderer { const nullable = nullableFromUnion(unionType); if (nullable !== null) return this.nullableGoType(nullable, withIssues); return this.nameForNamedType(unionType); + }, + transformedStringType => { + if (transformedStringType.kind === "date-time") { + return "time.Time"; + } + + return "string"; } ); } @@ -264,8 +278,8 @@ export class GoRenderer extends ConvenienceRenderer { private emitClass(c: ClassType, className: Name): void { this.startFile(className); - this.emitPackageDefinitons(false); let columns: Sourcelike[][] = []; + const usedTypes = new Set(); this.forEachClassProperty(c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); const docStrings = @@ -283,7 +297,13 @@ export class GoRenderer extends ConvenienceRenderer { [goType, " "], ["`", tags, "`"] ]); + usedTypes.add(goType.toString()); }); + + this.emitPackageDefinitons( + false, + usedTypes.has("time.Time") || usedTypes.has("*,time.Time") ? new Set(["time"]) : undefined + ); this.emitDescription(this.descriptionForType(c)); this.emitStruct(className, columns); this.endFile(); @@ -411,7 +431,7 @@ export class GoRenderer extends ConvenienceRenderer { }); } - private emitPackageDefinitons(includeJSONEncodingImport: boolean): void { + private emitPackageDefinitons(includeJSONEncodingImport: boolean, imports: Set = new Set()): void { if (!this._options.justTypes || this._options.justTypesAndPackage) { this.ensureBlankLine(); const packageDeclaration = "package " + this._options.packageName; @@ -420,27 +440,42 @@ export class GoRenderer extends ConvenienceRenderer { } if (!this._options.justTypes && !this._options.justTypesAndPackage) { - this.ensureBlankLine(); if (this.haveNamedUnions && this._options.multiFileOutput === false) { - this.emitLineOnce('import "bytes"'); - this.emitLineOnce('import "errors"'); + imports.add("bytes"); + imports.add("errors"); } if (includeJSONEncodingImport) { - this.emitLineOnce('import "encoding/json"'); + imports.add("encoding/json"); } - this.ensureBlankLine(); } + + this.emitImports(imports); + } + + private emitImports(imports: Set): void { + const sortedImports = Array.from(imports).sort((a, b) => a.localeCompare(b)); + + if (sortedImports.length === 0) { + return; + } + + sortedImports.forEach(packageName => { + this.emitLineOnce(`import "${packageName}"`); + }); + this.ensureBlankLine(); } private emitHelperFunctions(): void { if (this.haveNamedUnions) { this.startFile("JSONSchemaSupport"); - this.emitPackageDefinitons(true); + const imports = new Set(); if (this._options.multiFileOutput) { - this.emitLineOnce('import "bytes"'); - this.emitLineOnce('import "errors"'); + imports.add("bytes"); + imports.add("errors"); } + + this.emitPackageDefinitons(true, imports); this.ensureBlankLine(); this .emitMultiline(`func unmarshalUnion(data []byte, pi **int64, pf **float64, pb **bool, ps **string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) (bool, error) { @@ -568,6 +603,7 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, this.leadingComments === undefined ) { this.emitSingleFileHeaderComments(); + this.emitPackageDefinitons(false, this.collectAllImports()); } this.forEachTopLevel( @@ -587,4 +623,64 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, this.emitHelperFunctions(); } + + private collectAllImports(): Set { + let imports = new Set(); + this.forEachObject("leading-and-interposing", (c: ClassType, _className: Name) => { + const classImports = this.collectClassImports(c); + imports = new Set([...imports, ...classImports]); + }); + + this.forEachUnion("leading-and-interposing", (u: UnionType, _unionName: Name) => { + const unionImports = this.collectUnionImports(u); + imports = new Set([...imports, ...unionImports]); + }); + return imports; + } + + private collectClassImports(c: ClassType): Set { + const usedTypes = new Set(); + const mapping: Map = new Map(); + mapping.set("time.Time", "time"); + mapping.set("*,time.Time", "time"); + + this.forEachClassProperty(c, "none", (_name, _jsonName, p) => { + const goType = this.propertyGoType(p); + usedTypes.add(goType.toString()); + }); + + const imports = new Set(); + usedTypes.forEach(k => { + const typeImport = mapping.get(k); + if (typeImport) { + imports.add(typeImport); + } + }); + + return imports; + } + + private collectUnionImports(u: UnionType): Set { + const usedTypes = new Set(); + const mapping: Map = new Map(); + mapping.set("time.Time", "time"); + mapping.set("*,time.Time", "time"); + + this.forEachUnionMember(u, null, "none", null, (_fieldName, t) => { + const goType = this.nullableGoType(t, true); + usedTypes.add(goType.toString()); + }); + + const imports = new Set(); + usedTypes.forEach(k => { + const typeImport = mapping.get(k); + if (!typeImport) { + return; + } + + imports.add(typeImport); + }); + + return imports; + } } diff --git a/test/inputs/json/misc/0a358.json b/test/inputs/json/misc/0a358.json index afb4007b5..40c8d99f3 100644 --- a/test/inputs/json/misc/0a358.json +++ b/test/inputs/json/misc/0a358.json @@ -1 +1,410 @@ -{"count": 245, "facets": {}, "results": [{"code": "ZW", "name": "Zimbabwe", "created_at": "2015-04-24T01:46:50.459583", "updated_at": "2015-04-24T01:46:50.459593", "uri": "http://api.lobbyfacts.eu/api/1/country/245", "id": 245}, {"code": "ZM", "name": "Zambia", "created_at": "2015-04-24T01:46:50.457459", "updated_at": "2015-04-24T01:46:50.457468", "uri": "http://api.lobbyfacts.eu/api/1/country/244", "id": 244}, {"code": "YE", "name": "Yemen", "created_at": "2015-04-24T01:46:50.454731", "updated_at": "2015-04-24T01:46:50.454741", "uri": "http://api.lobbyfacts.eu/api/1/country/243", "id": 243}, {"code": "EH", "name": "Western Sahara", "created_at": "2015-04-24T01:46:50.452002", "updated_at": "2015-04-24T01:46:50.452011", "uri": "http://api.lobbyfacts.eu/api/1/country/242", "id": 242}, {"code": "WF", "name": "Wallis & Futuna", "created_at": "2015-04-24T01:46:50.449346", "updated_at": "2015-04-24T01:46:50.449355", "uri": "http://api.lobbyfacts.eu/api/1/country/241", "id": 241}, {"code": "VN", "name": "Vietnam", "created_at": "2015-04-24T01:46:50.446644", "updated_at": "2015-04-24T01:46:50.446652", "uri": "http://api.lobbyfacts.eu/api/1/country/240", "id": 240}, {"code": "VE", "name": "Venezuela", "created_at": "2015-04-24T01:46:50.444031", "updated_at": "2015-04-24T01:46:50.444040", "uri": "http://api.lobbyfacts.eu/api/1/country/239", "id": 239}, {"code": "VU", "name": "Vanuatu", "created_at": "2015-04-24T01:46:50.441423", "updated_at": "2015-04-24T01:46:50.441433", "uri": "http://api.lobbyfacts.eu/api/1/country/238", "id": 238}, {"code": "UZ", "name": "Uzbekistan", "created_at": "2015-04-24T01:46:50.438748", "updated_at": "2015-04-24T01:46:50.438757", "uri": "http://api.lobbyfacts.eu/api/1/country/237", "id": 237}, {"code": "UY", "name": "Uruguay", "created_at": "2015-04-24T01:46:50.435761", "updated_at": "2015-04-24T01:46:50.435770", "uri": "http://api.lobbyfacts.eu/api/1/country/236", "id": 236}, {"code": "VI", "name": "United States Virgin Islands", "created_at": "2015-04-24T01:46:50.433229", "updated_at": "2015-04-24T01:46:50.433238", "uri": "http://api.lobbyfacts.eu/api/1/country/235", "id": 235}, {"code": "US", "name": "United States", "created_at": "2015-04-24T01:46:50.430335", "updated_at": "2015-04-24T01:46:50.430340", "uri": "http://api.lobbyfacts.eu/api/1/country/234", "id": 234}, {"code": "GB", "name": "United Kingdom", "created_at": "2015-04-24T01:46:50.427956", "updated_at": "2015-04-24T01:46:50.427961", "uri": "http://api.lobbyfacts.eu/api/1/country/233", "id": 233}, {"code": "AE", "name": "United Arab Emirates", "created_at": "2015-04-24T01:46:50.425383", "updated_at": "2015-04-24T01:46:50.425392", "uri": "http://api.lobbyfacts.eu/api/1/country/232", "id": 232}, {"code": "UA", "name": "Ukraine", "created_at": "2015-04-24T01:46:50.422970", "updated_at": "2015-04-24T01:46:50.422980", "uri": "http://api.lobbyfacts.eu/api/1/country/231", "id": 231}, {"code": "UG", "name": "Uganda", "created_at": "2015-04-24T01:46:50.419963", "updated_at": "2015-04-24T01:46:50.419968", "uri": "http://api.lobbyfacts.eu/api/1/country/230", "id": 230}, {"code": "TV", "name": "Tuvalu", "created_at": "2015-04-24T01:46:50.417896", "updated_at": "2015-04-24T01:46:50.417906", "uri": "http://api.lobbyfacts.eu/api/1/country/229", "id": 229}, {"code": "TC", "name": "Turks & Caicos Islands", "created_at": "2015-04-24T01:46:50.414854", "updated_at": "2015-04-24T01:46:50.414868", "uri": "http://api.lobbyfacts.eu/api/1/country/228", "id": 228}, {"code": "TM", "name": "Turkmenistan", "created_at": "2015-04-24T01:46:50.412601", "updated_at": "2015-04-24T01:46:50.412605", "uri": "http://api.lobbyfacts.eu/api/1/country/227", "id": 227}, {"code": "TR", "name": "Turkey", "created_at": "2015-04-24T01:46:50.411105", "updated_at": "2015-04-24T01:46:50.411110", "uri": "http://api.lobbyfacts.eu/api/1/country/226", "id": 226}, {"code": "TN", "name": "Tunisia", "created_at": "2015-04-24T01:46:50.409535", "updated_at": "2015-04-24T01:46:50.409539", "uri": "http://api.lobbyfacts.eu/api/1/country/225", "id": 225}, {"code": "TT", "name": "Trinidad & Tobago", "created_at": "2015-04-24T01:46:50.408030", "updated_at": "2015-04-24T01:46:50.408034", "uri": "http://api.lobbyfacts.eu/api/1/country/224", "id": 224}, {"code": "TO", "name": "Tonga", "created_at": "2015-04-24T01:46:50.406306", "updated_at": "2015-04-24T01:46:50.406311", "uri": "http://api.lobbyfacts.eu/api/1/country/223", "id": 223}, {"code": "TK", "name": "Tokelau", "created_at": "2015-04-24T01:46:50.404794", "updated_at": "2015-04-24T01:46:50.404799", "uri": "http://api.lobbyfacts.eu/api/1/country/222", "id": 222}, {"code": "TG", "name": "Togo", "created_at": "2015-04-24T01:46:50.403306", "updated_at": "2015-04-24T01:46:50.403310", "uri": "http://api.lobbyfacts.eu/api/1/country/221", "id": 221}, {"code": "TH", "name": "Thailand", "created_at": "2015-04-24T01:46:50.400840", "updated_at": "2015-04-24T01:46:50.400849", "uri": "http://api.lobbyfacts.eu/api/1/country/220", "id": 220}, {"code": "TZ", "name": "Tanzania", "created_at": "2015-04-24T01:46:50.397846", "updated_at": "2015-04-24T01:46:50.397855", "uri": "http://api.lobbyfacts.eu/api/1/country/219", "id": 219}, {"code": "TJ", "name": "Tajikistan", "created_at": "2015-04-24T01:46:50.394924", "updated_at": "2015-04-24T01:46:50.394933", "uri": "http://api.lobbyfacts.eu/api/1/country/218", "id": 218}, {"code": "TW", "name": "Taiwan", "created_at": "2015-04-24T01:46:50.391969", "updated_at": "2015-04-24T01:46:50.391978", "uri": "http://api.lobbyfacts.eu/api/1/country/217", "id": 217}, {"code": "SY", "name": "Syria", "created_at": "2015-04-24T01:46:50.389120", "updated_at": "2015-04-24T01:46:50.389124", "uri": "http://api.lobbyfacts.eu/api/1/country/216", "id": 216}, {"code": "CH", "name": "Switzerland", "created_at": "2015-04-24T01:46:50.386939", "updated_at": "2015-04-24T01:46:50.386943", "uri": "http://api.lobbyfacts.eu/api/1/country/215", "id": 215}, {"code": "SE", "name": "Sweden", "created_at": "2015-04-24T01:46:50.385345", "updated_at": "2015-04-24T01:46:50.385349", "uri": "http://api.lobbyfacts.eu/api/1/country/214", "id": 214}, {"code": "SZ", "name": "Swaziland", "created_at": "2015-04-24T01:46:50.383834", "updated_at": "2015-04-24T01:46:50.383838", "uri": "http://api.lobbyfacts.eu/api/1/country/213", "id": 213}, {"code": "SR", "name": "Suriname", "created_at": "2015-04-24T01:46:50.382073", "updated_at": "2015-04-24T01:46:50.382078", "uri": "http://api.lobbyfacts.eu/api/1/country/212", "id": 212}, {"code": "SD", "name": "Sudan", "created_at": "2015-04-24T01:46:50.380114", "updated_at": "2015-04-24T01:46:50.380119", "uri": "http://api.lobbyfacts.eu/api/1/country/211", "id": 211}, {"code": "LK", "name": "Sri Lanka", "created_at": "2015-04-24T01:46:50.378189", "updated_at": "2015-04-24T01:46:50.378195", "uri": "http://api.lobbyfacts.eu/api/1/country/210", "id": 210}, {"code": "ES", "name": "Spain", "created_at": "2015-04-24T01:46:50.376105", "updated_at": "2015-04-24T01:46:50.376109", "uri": "http://api.lobbyfacts.eu/api/1/country/209", "id": 209}, {"code": "SS", "name": "South Sudan", "created_at": "2015-04-24T01:46:50.373942", "updated_at": "2015-04-24T01:46:50.373946", "uri": "http://api.lobbyfacts.eu/api/1/country/208", "id": 208}, {"code": "KR", "name": "South Korea", "created_at": "2015-04-24T01:46:50.371790", "updated_at": "2015-04-24T01:46:50.371794", "uri": "http://api.lobbyfacts.eu/api/1/country/207", "id": 207}, {"code": "GS", "name": "South Georgia & The South Sandwish Islands", "created_at": "2015-04-24T01:46:50.369460", "updated_at": "2015-04-24T01:46:50.369465", "uri": "http://api.lobbyfacts.eu/api/1/country/206", "id": 206}, {"code": "ZA", "name": "South Africa", "created_at": "2015-04-24T01:46:50.367247", "updated_at": "2015-04-24T01:46:50.367252", "uri": "http://api.lobbyfacts.eu/api/1/country/205", "id": 205}, {"code": "SO", "name": "Somaliland", "created_at": "2015-04-24T01:46:50.362905", "updated_at": "2016-09-18T18:34:35.724427", "uri": "http://api.lobbyfacts.eu/api/1/country/204", "id": 204}, {"code": "SB", "name": "Solomon Islands", "created_at": "2015-04-24T01:46:50.360631", "updated_at": "2015-04-24T01:46:50.360635", "uri": "http://api.lobbyfacts.eu/api/1/country/203", "id": 203}, {"code": "SI", "name": "Slovenia", "created_at": "2015-04-24T01:46:50.358394", "updated_at": "2015-04-24T01:46:50.358399", "uri": "http://api.lobbyfacts.eu/api/1/country/202", "id": 202}, {"code": "SK", "name": "Slovakia", "created_at": "2015-04-24T01:46:50.356154", "updated_at": "2015-04-24T01:46:50.356158", "uri": "http://api.lobbyfacts.eu/api/1/country/201", "id": 201}, {"code": "SX", "name": "Sint Maarten", "created_at": "2015-04-24T01:46:50.353807", "updated_at": "2015-04-24T01:46:50.353811", "uri": "http://api.lobbyfacts.eu/api/1/country/200", "id": 200}, {"code": "SG", "name": "Singapore", "created_at": "2015-04-24T01:46:50.349354", "updated_at": "2015-04-24T01:46:50.349358", "uri": "http://api.lobbyfacts.eu/api/1/country/199", "id": 199}, {"code": "SL", "name": "Sierra Leone", "created_at": "2015-04-24T01:46:50.347186", "updated_at": "2015-04-24T01:46:50.347190", "uri": "http://api.lobbyfacts.eu/api/1/country/198", "id": 198}, {"code": "SC", "name": "Seychelles", "created_at": "2015-04-24T01:46:50.344980", "updated_at": "2015-04-24T01:46:50.344984", "uri": "http://api.lobbyfacts.eu/api/1/country/197", "id": 197}, {"code": "RS", "name": "Serbia", "created_at": "2015-04-24T01:46:50.342496", "updated_at": "2015-04-24T01:46:50.342501", "uri": "http://api.lobbyfacts.eu/api/1/country/196", "id": 196}], "next": "http://api.lobbyfacts.eu/api/1/country?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false} \ No newline at end of file +{ + "count": 245, + "facets": {}, + "results": [ + { + "code": "ZW", + "name": "Zimbabwe", + "created_at": "2015-04-24T01:46:50.459583Z", + "updated_at": "2015-04-24T01:46:50.459593Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/245", + "id": 245 + }, + { + "code": "ZM", + "name": "Zambia", + "created_at": "2015-04-24T01:46:50.457459Z", + "updated_at": "2015-04-24T01:46:50.457468Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/244", + "id": 244 + }, + { + "code": "YE", + "name": "Yemen", + "created_at": "2015-04-24T01:46:50.454731Z", + "updated_at": "2015-04-24T01:46:50.454741Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/243", + "id": 243 + }, + { + "code": "EH", + "name": "Western Sahara", + "created_at": "2015-04-24T01:46:50.452002Z", + "updated_at": "2015-04-24T01:46:50.452011Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/242", + "id": 242 + }, + { + "code": "WF", + "name": "Wallis & Futuna", + "created_at": "2015-04-24T01:46:50.449346Z", + "updated_at": "2015-04-24T01:46:50.449355Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/241", + "id": 241 + }, + { + "code": "VN", + "name": "Vietnam", + "created_at": "2015-04-24T01:46:50.446644Z", + "updated_at": "2015-04-24T01:46:50.446652Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/240", + "id": 240 + }, + { + "code": "VE", + "name": "Venezuela", + "created_at": "2015-04-24T01:46:50.444031Z", + "updated_at": "2015-04-24T01:46:50.444040Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/239", + "id": 239 + }, + { + "code": "VU", + "name": "Vanuatu", + "created_at": "2015-04-24T01:46:50.441423Z", + "updated_at": "2015-04-24T01:46:50.441433Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/238", + "id": 238 + }, + { + "code": "UZ", + "name": "Uzbekistan", + "created_at": "2015-04-24T01:46:50.438748Z", + "updated_at": "2015-04-24T01:46:50.438757Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/237", + "id": 237 + }, + { + "code": "UY", + "name": "Uruguay", + "created_at": "2015-04-24T01:46:50.435761Z", + "updated_at": "2015-04-24T01:46:50.435770Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/236", + "id": 236 + }, + { + "code": "VI", + "name": "United States Virgin Islands", + "created_at": "2015-04-24T01:46:50.433229Z", + "updated_at": "2015-04-24T01:46:50.433238Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/235", + "id": 235 + }, + { + "code": "US", + "name": "United States", + "created_at": "2015-04-24T01:46:50.430335Z", + "updated_at": "2015-04-24T01:46:50.430340Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/234", + "id": 234 + }, + { + "code": "GB", + "name": "United Kingdom", + "created_at": "2015-04-24T01:46:50.427956Z", + "updated_at": "2015-04-24T01:46:50.427961Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/233", + "id": 233 + }, + { + "code": "AE", + "name": "United Arab Emirates", + "created_at": "2015-04-24T01:46:50.425383Z", + "updated_at": "2015-04-24T01:46:50.425392Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/232", + "id": 232 + }, + { + "code": "UA", + "name": "Ukraine", + "created_at": "2015-04-24T01:46:50.422970Z", + "updated_at": "2015-04-24T01:46:50.422980Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/231", + "id": 231 + }, + { + "code": "UG", + "name": "Uganda", + "created_at": "2015-04-24T01:46:50.419963Z", + "updated_at": "2015-04-24T01:46:50.419968Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/230", + "id": 230 + }, + { + "code": "TV", + "name": "Tuvalu", + "created_at": "2015-04-24T01:46:50.417896Z", + "updated_at": "2015-04-24T01:46:50.417906Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/229", + "id": 229 + }, + { + "code": "TC", + "name": "Turks & Caicos Islands", + "created_at": "2015-04-24T01:46:50.414854Z", + "updated_at": "2015-04-24T01:46:50.414868Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/228", + "id": 228 + }, + { + "code": "TM", + "name": "Turkmenistan", + "created_at": "2015-04-24T01:46:50.412601Z", + "updated_at": "2015-04-24T01:46:50.412605Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/227", + "id": 227 + }, + { + "code": "TR", + "name": "Turkey", + "created_at": "2015-04-24T01:46:50.411105Z", + "updated_at": "2015-04-24T01:46:50.411110Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/226", + "id": 226 + }, + { + "code": "TN", + "name": "Tunisia", + "created_at": "2015-04-24T01:46:50.409535Z", + "updated_at": "2015-04-24T01:46:50.409539Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/225", + "id": 225 + }, + { + "code": "TT", + "name": "Trinidad & Tobago", + "created_at": "2015-04-24T01:46:50.408030Z", + "updated_at": "2015-04-24T01:46:50.408034Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/224", + "id": 224 + }, + { + "code": "TO", + "name": "Tonga", + "created_at": "2015-04-24T01:46:50.406306Z", + "updated_at": "2015-04-24T01:46:50.406311Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/223", + "id": 223 + }, + { + "code": "TK", + "name": "Tokelau", + "created_at": "2015-04-24T01:46:50.404794Z", + "updated_at": "2015-04-24T01:46:50.404799Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/222", + "id": 222 + }, + { + "code": "TG", + "name": "Togo", + "created_at": "2015-04-24T01:46:50.403306Z", + "updated_at": "2015-04-24T01:46:50.403310Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/221", + "id": 221 + }, + { + "code": "TH", + "name": "Thailand", + "created_at": "2015-04-24T01:46:50.400840Z", + "updated_at": "2015-04-24T01:46:50.400849Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/220", + "id": 220 + }, + { + "code": "TZ", + "name": "Tanzania", + "created_at": "2015-04-24T01:46:50.397846Z", + "updated_at": "2015-04-24T01:46:50.397855Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/219", + "id": 219 + }, + { + "code": "TJ", + "name": "Tajikistan", + "created_at": "2015-04-24T01:46:50.394924Z", + "updated_at": "2015-04-24T01:46:50.394933Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/218", + "id": 218 + }, + { + "code": "TW", + "name": "Taiwan", + "created_at": "2015-04-24T01:46:50.391969Z", + "updated_at": "2015-04-24T01:46:50.391978Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/217", + "id": 217 + }, + { + "code": "SY", + "name": "Syria", + "created_at": "2015-04-24T01:46:50.389120Z", + "updated_at": "2015-04-24T01:46:50.389124Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/216", + "id": 216 + }, + { + "code": "CH", + "name": "Switzerland", + "created_at": "2015-04-24T01:46:50.386939Z", + "updated_at": "2015-04-24T01:46:50.386943Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/215", + "id": 215 + }, + { + "code": "SE", + "name": "Sweden", + "created_at": "2015-04-24T01:46:50.385345Z", + "updated_at": "2015-04-24T01:46:50.385349Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/214", + "id": 214 + }, + { + "code": "SZ", + "name": "Swaziland", + "created_at": "2015-04-24T01:46:50.383834Z", + "updated_at": "2015-04-24T01:46:50.383838Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/213", + "id": 213 + }, + { + "code": "SR", + "name": "Suriname", + "created_at": "2015-04-24T01:46:50.382073Z", + "updated_at": "2015-04-24T01:46:50.382078Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/212", + "id": 212 + }, + { + "code": "SD", + "name": "Sudan", + "created_at": "2015-04-24T01:46:50.380114Z", + "updated_at": "2015-04-24T01:46:50.380119Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/211", + "id": 211 + }, + { + "code": "LK", + "name": "Sri Lanka", + "created_at": "2015-04-24T01:46:50.378189Z", + "updated_at": "2015-04-24T01:46:50.378195Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/210", + "id": 210 + }, + { + "code": "ES", + "name": "Spain", + "created_at": "2015-04-24T01:46:50.376105Z", + "updated_at": "2015-04-24T01:46:50.376109Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/209", + "id": 209 + }, + { + "code": "SS", + "name": "South Sudan", + "created_at": "2015-04-24T01:46:50.373942Z", + "updated_at": "2015-04-24T01:46:50.373946Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/208", + "id": 208 + }, + { + "code": "KR", + "name": "South Korea", + "created_at": "2015-04-24T01:46:50.371790Z", + "updated_at": "2015-04-24T01:46:50.371794Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/207", + "id": 207 + }, + { + "code": "GS", + "name": "South Georgia & The South Sandwish Islands", + "created_at": "2015-04-24T01:46:50.369460Z", + "updated_at": "2015-04-24T01:46:50.369465Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/206", + "id": 206 + }, + { + "code": "ZA", + "name": "South Africa", + "created_at": "2015-04-24T01:46:50.367247Z", + "updated_at": "2015-04-24T01:46:50.367252Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/205", + "id": 205 + }, + { + "code": "SO", + "name": "Somaliland", + "created_at": "2015-04-24T01:46:50.362905Z", + "updated_at": "2016-09-18T18:34:35.724427Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/204", + "id": 204 + }, + { + "code": "SB", + "name": "Solomon Islands", + "created_at": "2015-04-24T01:46:50.360631Z", + "updated_at": "2015-04-24T01:46:50.360635Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/203", + "id": 203 + }, + { + "code": "SI", + "name": "Slovenia", + "created_at": "2015-04-24T01:46:50.358394Z", + "updated_at": "2015-04-24T01:46:50.358399Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/202", + "id": 202 + }, + { + "code": "SK", + "name": "Slovakia", + "created_at": "2015-04-24T01:46:50.356154Z", + "updated_at": "2015-04-24T01:46:50.356158Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/201", + "id": 201 + }, + { + "code": "SX", + "name": "Sint Maarten", + "created_at": "2015-04-24T01:46:50.353807Z", + "updated_at": "2015-04-24T01:46:50.353811Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/200", + "id": 200 + }, + { + "code": "SG", + "name": "Singapore", + "created_at": "2015-04-24T01:46:50.349354Z", + "updated_at": "2015-04-24T01:46:50.349358Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/199", + "id": 199 + }, + { + "code": "SL", + "name": "Sierra Leone", + "created_at": "2015-04-24T01:46:50.347186Z", + "updated_at": "2015-04-24T01:46:50.347190Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/198", + "id": 198 + }, + { + "code": "SC", + "name": "Seychelles", + "created_at": "2015-04-24T01:46:50.344980Z", + "updated_at": "2015-04-24T01:46:50.344984Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/197", + "id": 197 + }, + { + "code": "RS", + "name": "Serbia", + "created_at": "2015-04-24T01:46:50.342496Z", + "updated_at": "2015-04-24T01:46:50.342501Z", + "uri": "http://api.lobbyfacts.eu/api/1/country/196", + "id": 196 + } + ], + "next": "http://api.lobbyfacts.eu/api/1/country?limit=50&offset=50", + "limit": 50, + "offset": 0, + "previous": false +} diff --git a/test/inputs/json/misc/26c9c.json b/test/inputs/json/misc/26c9c.json index 3629d5f9d..3c895e5a6 100644 --- a/test/inputs/json/misc/26c9c.json +++ b/test/inputs/json/misc/26c9c.json @@ -1,1063 +1,10499 @@ { - "meta" : { - "view" : { - "id" : "d6yy-54nr", - "name" : "Lottery Powerball Winning Numbers: Beginning 2010", - "attribution" : "New York State Gaming Commission", - "attributionLink" : "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresults_powerball", - "averageRating" : 0, - "category" : "Government & Finance", - "createdAt" : 1362178006, - "description" : "Go to http://on.ny.gov/1GpWiHD on the New York Lottery website for past Powerball results and payouts.", - "displayType" : "table", - "downloadCount" : 225121, - "hideFromCatalog" : false, - "hideFromDataJson" : false, - "indexUpdatedAt" : 1501149821, - "locale" : "", - "newBackend" : false, - "numberOfComments" : 0, - "oid" : 26467445, - "provenance" : "official", - "publicationAppendEnabled" : false, - "publicationDate" : 1501149666, - "publicationGroup" : 708088, - "publicationStage" : "published", - "rowsUpdatedAt" : 1501149663, - "rowsUpdatedBy" : "xzik-pf59", - "tableId" : 14357003, - "totalTimesRated" : 0, - "viewCount" : 279585, - "viewLastModified" : 1501149666, - "viewType" : "tabular", - "columns" : [ { - "id" : -1, - "name" : "sid", - "dataTypeName" : "meta_data", - "fieldName" : ":sid", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "id", - "dataTypeName" : "meta_data", - "fieldName" : ":id", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "position", - "dataTypeName" : "meta_data", - "fieldName" : ":position", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "created_at", - "dataTypeName" : "meta_data", - "fieldName" : ":created_at", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "created_meta", - "dataTypeName" : "meta_data", - "fieldName" : ":created_meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "updated_at", - "dataTypeName" : "meta_data", - "fieldName" : ":updated_at", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "updated_meta", - "dataTypeName" : "meta_data", - "fieldName" : ":updated_meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "meta", - "dataTypeName" : "meta_data", - "fieldName" : ":meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : 313053589, - "name" : "Draw Date", - "dataTypeName" : "calendar_date", - "fieldName" : "draw_date", - "position" : 1, - "renderTypeName" : "calendar_date", - "tableColumnId" : 8275908, - "width" : 141, - "cachedContents" : { - "largest" : "2017-07-26T00:00:00", - "non_null" : 780, - "null" : 0, - "top" : [ { - "item" : "2017-07-26T00:00:00", - "count" : 20 - } ], - "smallest" : "2010-02-03T00:00:00" - }, - "format" : { - "view" : "date", - "align" : "center" + "meta": { + "view": { + "id": "d6yy-54nr", + "name": "Lottery Powerball Winning Numbers: Beginning 2010", + "attribution": "New York State Gaming Commission", + "attributionLink": "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresults_powerball", + "averageRating": 0, + "category": "Government & Finance", + "createdAt": 1362178006, + "description": "Go to http://on.ny.gov/1GpWiHD on the New York Lottery website for past Powerball results and payouts.", + "displayType": "table", + "downloadCount": 225121, + "hideFromCatalog": false, + "hideFromDataJson": false, + "indexUpdatedAt": 1501149821, + "locale": "", + "newBackend": false, + "numberOfComments": 0, + "oid": 26467445, + "provenance": "official", + "publicationAppendEnabled": false, + "publicationDate": 1501149666, + "publicationGroup": 708088, + "publicationStage": "published", + "rowsUpdatedAt": 1501149663, + "rowsUpdatedBy": "xzik-pf59", + "tableId": 14357003, + "totalTimesRated": 0, + "viewCount": 279585, + "viewLastModified": 1501149666, + "viewType": "tabular", + "columns": [ + { + "id": -1, + "name": "sid", + "dataTypeName": "meta_data", + "fieldName": ":sid", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "id", + "dataTypeName": "meta_data", + "fieldName": ":id", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "position", + "dataTypeName": "meta_data", + "fieldName": ":position", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "created_at", + "dataTypeName": "meta_data", + "fieldName": ":created_at", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "created_meta", + "dataTypeName": "meta_data", + "fieldName": ":created_meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "updated_at", + "dataTypeName": "meta_data", + "fieldName": ":updated_at", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "updated_meta", + "dataTypeName": "meta_data", + "fieldName": ":updated_meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "meta", + "dataTypeName": "meta_data", + "fieldName": ":meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": 313053589, + "name": "Draw Date", + "dataTypeName": "calendar_date", + "fieldName": "draw_date", + "position": 1, + "renderTypeName": "calendar_date", + "tableColumnId": 8275908, + "width": 141, + "cachedContents": { + "largest": "2017-07-26T00:00:00Z", + "non_null": 780, + "null": 0, + "top": [ + { + "item": "2017-07-26T00:00:00Z", + "count": 20 + } + ], + "smallest": "2010-02-03T00:00:00Z" + }, + "format": { + "view": "date", + "align": "center" + } + }, + { + "id": 313053590, + "name": "Winning Numbers", + "dataTypeName": "text", + "fieldName": "winning_numbers", + "position": 2, + "renderTypeName": "text", + "tableColumnId": 8275909, + "width": 186, + "cachedContents": { + "largest": "50 51 59 61 63 04", + "non_null": 780, + "null": 0, + "top": [ + { + "item": "07 19 21 42 69 12", + "count": 20 + } + ], + "smallest": "01 02 07 09 55 29" + }, + "format": { + "align": "center" + } + }, + { + "id": 313053591, + "name": "Multiplier", + "dataTypeName": "number", + "fieldName": "multiplier", + "position": 3, + "renderTypeName": "number", + "tableColumnId": 8275910, + "width": 136, + "cachedContents": { + "largest": "10", + "non_null": 570, + "average": "2.975438596491228", + "null": 210, + "top": [ + { + "item": "2", + "count": 20 + }, + { + "item": "3", + "count": 19 + }, + { + "item": "5", + "count": 18 + }, + { + "item": "4", + "count": 17 + }, + { + "item": "10", + "count": 16 + } + ], + "smallest": "2", + "sum": "1696" + }, + "format": { + "precisionStyle": "standard", + "noCommas": "false", + "align": "center" + } + } + ], + "grants": [ + { + "inherited": false, + "type": "viewer", + "flags": ["public"] + } + ], + "metadata": { + "custom_fields": { + "Notes": { + "Notes": "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." + }, + "Common Core": { + "Contact Email": "opendata@its.ny.gov", + "Publisher": "State of New York", + "Contact Name": "Open Data NY" + }, + "Dataset Summary": { + "Granularity": "Draw Date", + "Coverage": "Statewide", + "Data Frequency": "Twice weekly", + "Posting Frequency": "Twice weekly", + "Units": "Drawings Unit", + "Dataset Owner": "Lottery", + "Organization": "The New York Lottery", + "Time Period": "02/03/2010 to present", + "Contact Information": "Info@gaming.ny.gov" + }, + "Additional Resources": { + "See Also ": "http://www.powerball.com/pb_home.asp", + "See Also": "http://www.gaming.ny.gov/" + }, + "Dataset Information": { + "Agency": "Gaming Commission, New York State" + } + }, + "renderTypeConfig": { + "visible": { + "table": true + } + }, + "availableDisplayTypes": ["table", "fatrow", "page"], + "jsonQuery": { + "order": [ + { + "ascending": false, + "columnFieldName": "draw_date" + } + ] + }, + "rdfSubject": "0", + "attachments": [ + { + "blobId": "A13C17ED-D278-428F-BC24-CAAE9D82A787", + "assetId": "", + "name": "NYSGAM_Powerball_Overview.pdf", + "filename": "NYSGAM_Powerball_Overview.pdf" + }, + { + "blobId": "5A0D4D17-A176-44D4-B5A6-B8667F7D14C6", + "assetId": "", + "name": "NYSGAM_Powerball_DataDictionary.pdf", + "filename": "NYSGAM_Powerball_Winning_Numbers__DataDictionary.pdf" + } + ] + }, + "owner": { + "id": "xzik-pf59", + "displayName": "NY Open Data", + "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", + "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", + "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", + "roleName": "publisher", + "screenName": "NY Open Data", + "rights": [ + "create_datasets", + "edit_others_datasets", + "edit_nominations", + "approve_nominations", + "moderate_comments", + "manage_stories", + "feature_items", + "change_configurations", + "view_domain", + "view_others_datasets", + "create_pages", + "edit_pages", + "view_goals", + "view_dashboards", + "edit_goals", + "edit_dashboards", + "manage_provenance", + "view_story", + "view_unpublished_story", + "view_all_dataset_status_logs", + "use_data_connectors" + ] + }, + "query": { + "orderBys": [ + { + "ascending": false, + "expression": { + "columnId": 313053589, + "type": "column" + } + } + ] + }, + "rights": ["read"], + "tableAuthor": { + "id": "xzik-pf59", + "displayName": "NY Open Data", + "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", + "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", + "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", + "roleName": "publisher", + "screenName": "NY Open Data", + "rights": [ + "create_datasets", + "edit_others_datasets", + "edit_nominations", + "approve_nominations", + "moderate_comments", + "manage_stories", + "feature_items", + "change_configurations", + "view_domain", + "view_others_datasets", + "create_pages", + "edit_pages", + "view_goals", + "view_dashboards", + "edit_goals", + "edit_dashboards", + "manage_provenance", + "view_story", + "view_unpublished_story", + "view_all_dataset_status_logs", + "use_data_connectors" + ] + }, + "tags": ["powerball", "new york lottery", "winning", "results"], + "flags": ["default", "restorable", "restorePossibleForType"] } - }, { - "id" : 313053590, - "name" : "Winning Numbers", - "dataTypeName" : "text", - "fieldName" : "winning_numbers", - "position" : 2, - "renderTypeName" : "text", - "tableColumnId" : 8275909, - "width" : 186, - "cachedContents" : { - "largest" : "50 51 59 61 63 04", - "non_null" : 780, - "null" : 0, - "top" : [ { - "item" : "07 19 21 42 69 12", - "count" : 20 - } ], - "smallest" : "01 02 07 09 55 29" - }, - "format" : { - "align" : "center" - } - }, { - "id" : 313053591, - "name" : "Multiplier", - "dataTypeName" : "number", - "fieldName" : "multiplier", - "position" : 3, - "renderTypeName" : "number", - "tableColumnId" : 8275910, - "width" : 136, - "cachedContents" : { - "largest" : "10", - "non_null" : 570, - "average" : "2.975438596491228", - "null" : 210, - "top" : [ { - "item" : "2", - "count" : 20 - }, { - "item" : "3", - "count" : 19 - }, { - "item" : "5", - "count" : 18 - }, { - "item" : "4", - "count" : 17 - }, { - "item" : "10", - "count" : 16 - } ], - "smallest" : "2", - "sum" : "1696" - }, - "format" : { - "precisionStyle" : "standard", - "noCommas" : "false", - "align" : "center" - } - } ], - "grants" : [ { - "inherited" : false, - "type" : "viewer", - "flags" : [ "public" ] - } ], - "metadata" : { - "custom_fields" : { - "Notes" : { - "Notes" : "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." - }, - "Common Core" : { - "Contact Email" : "opendata@its.ny.gov", - "Publisher" : "State of New York", - "Contact Name" : "Open Data NY" - }, - "Dataset Summary" : { - "Granularity" : "Draw Date", - "Coverage" : "Statewide", - "Data Frequency" : "Twice weekly", - "Posting Frequency" : "Twice weekly", - "Units" : "Drawings Unit", - "Dataset Owner" : "Lottery", - "Organization" : "The New York Lottery", - "Time Period" : "02/03/2010 to present", - "Contact Information" : "Info@gaming.ny.gov" - }, - "Additional Resources" : { - "See Also " : "http://www.powerball.com/pb_home.asp", - "See Also" : "http://www.gaming.ny.gov/" - }, - "Dataset Information" : { - "Agency" : "Gaming Commission, New York State" - } - }, - "renderTypeConfig" : { - "visible" : { - "table" : true - } - }, - "availableDisplayTypes" : [ "table", "fatrow", "page" ], - "jsonQuery" : { - "order" : [ { - "ascending" : false, - "columnFieldName" : "draw_date" - } ] - }, - "rdfSubject" : "0", - "attachments" : [ { - "blobId" : "A13C17ED-D278-428F-BC24-CAAE9D82A787", - "assetId" : "", - "name" : "NYSGAM_Powerball_Overview.pdf", - "filename" : "NYSGAM_Powerball_Overview.pdf" - }, { - "blobId" : "5A0D4D17-A176-44D4-B5A6-B8667F7D14C6", - "assetId" : "", - "name" : "NYSGAM_Powerball_DataDictionary.pdf", - "filename" : "NYSGAM_Powerball_Winning_Numbers__DataDictionary.pdf" - } ] - }, - "owner" : { - "id" : "xzik-pf59", - "displayName" : "NY Open Data", - "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", - "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", - "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", - "roleName" : "publisher", - "screenName" : "NY Open Data", - "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] - }, - "query" : { - "orderBys" : [ { - "ascending" : false, - "expression" : { - "columnId" : 313053589, - "type" : "column" - } - } ] - }, - "rights" : [ "read" ], - "tableAuthor" : { - "id" : "xzik-pf59", - "displayName" : "NY Open Data", - "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", - "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", - "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", - "roleName" : "publisher", - "screenName" : "NY Open Data", - "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] - }, - "tags" : [ "powerball", "new york lottery", "winning", "results" ], - "flags" : [ "default", "restorable", "restorePossibleForType" ] - } - }, - "data" : [ [ 1, "473F0579-3060-42E8-95C6-671B43230276", 1, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-03T00:00:00", "17 22 36 37 52 24", "2" ] -, [ 2, "13ED019C-14C2-48A1-9B40-43AEEF313BCC", 2, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-06T00:00:00", "14 22 52 54 59 04", "3" ] -, [ 3, "9AEDC183-E503-4F83-A0D9-A0F9C6571E33", 3, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-10T00:00:00", "05 08 29 37 38 34", "5" ] -, [ 4, "E67834B5-BF1F-4867-A457-8E26E87E9554", 4, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-13T00:00:00", "10 14 30 40 51 01", "4" ] -, [ 5, "ECD06EF9-3D48-4A32-BEEA-B9D0A8E1499A", 5, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-17T00:00:00", "07 08 19 26 36 15", "3" ] -, [ 6, "6A36058B-0D5F-4A4B-90C7-D37ED9754BCD", 6, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-20T00:00:00", "13 27 37 41 54 32", "2" ] -, [ 7, "5D95F0A8-F691-45BD-837B-0ACC5722C724", 7, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-24T00:00:00", "04 17 35 50 57 12", "2" ] -, [ 8, "7CDC9A40-0062-44DE-A33E-FCF7ED74F2F7", 8, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-27T00:00:00", "18 47 51 53 58 30", "2" ] -, [ 9, "B4344C81-6048-47EC-BBB2-9BF061A11D1B", 9, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-03T00:00:00", "07 09 14 45 49 23", "4" ] -, [ 10, "07B0351D-6EE2-4673-B8CC-56193D1C84DC", 10, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-06T00:00:00", "10 29 33 41 59 15", "2" ] -, [ 11, "AF990B4F-BFDF-4BE8-8EFB-E10B3F950DB6", 11, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-10T00:00:00", "17 21 37 41 50 01", "2" ] -, [ 12, "633A2A57-92FF-4E58-AAA9-16A826B9647E", 12, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-13T00:00:00", "06 16 20 31 36 08", "5" ] -, [ 13, "2D7F73F5-4E71-4842-9A53-1E0B7C191232", 13, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-17T00:00:00", "24 26 45 48 55 08", "2" ] -, [ 14, "39F91900-3EB5-4889-8C0C-3E943F7AA8A3", 14, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-20T00:00:00", "09 36 39 44 45 09", "2" ] -, [ 15, "6A7E186E-9051-4771-ABA1-0A9849053799", 15, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-24T00:00:00", "14 20 24 39 49 07", "3" ] -, [ 16, "F192902E-D8A7-430B-8040-DA272A7017E0", 16, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-27T00:00:00", "07 21 32 44 52 10", "4" ] -, [ 17, "812663A1-2244-4865-9E7E-2FE73C4B0E33", 17, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-31T00:00:00", "05 13 17 45 54 12", "5" ] -, [ 18, "FAB7E07A-27FF-455A-A7F4-C3ED1AB52304", 18, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-03T00:00:00", "10 15 31 52 59 04", "4" ] -, [ 19, "DC7EE076-3EC5-46F7-BF2E-7263E9488B37", 19, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-07T00:00:00", "04 36 40 44 52 33", "2" ] -, [ 20, "7197D3BF-94AB-49EF-B883-AD40A863E3BA", 20, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-10T00:00:00", "21 22 49 52 58 34", "2" ] -, [ 21, "743DF432-2815-4714-863C-66B72F24605D", 21, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-14T00:00:00", "06 14 32 38 52 20", "3" ] -, [ 22, "8C923446-232E-4941-8EB5-A66A17FBEF69", 22, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-17T00:00:00", "05 21 22 41 49 15", "5" ] -, [ 23, "E0E09616-A6C5-4148-A2E5-F1701B6B1F87", 23, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-21T00:00:00", "11 34 41 49 55 20", "2" ] -, [ 24, "248C0E3F-C489-4DD8-BB68-DD38F788BB58", 24, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-24T00:00:00", "01 12 53 56 57 05", "2" ] -, [ 25, "CCE0FC4D-EB6A-4F8F-81FB-6D1DCED64CA4", 25, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-28T00:00:00", "12 22 25 28 44 24", "4" ] -, [ 26, "02267C6C-AB6B-4B8B-B9FD-94FCC100A96E", 26, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-01T00:00:00", "16 23 25 49 58 20", "4" ] -, [ 27, "20BC26C5-7FE1-4CED-8644-92759EEE96BD", 27, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-05T00:00:00", "13 34 40 47 57 11", "4" ] -, [ 28, "5A337131-40E0-4867-B5A2-BB52D6AFE369", 28, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-08T00:00:00", "05 22 34 41 57 31", "5" ] -, [ 29, "181CA471-4431-4279-A1BB-B291000D7791", 29, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-12T00:00:00", "37 51 52 53 58 38", "2" ] -, [ 30, "C5C70FE1-BABE-4D8A-829F-854EE7CF0C42", 30, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-15T00:00:00", "15 21 23 28 36 20", "2" ] -, [ 31, "BBF69F84-8CBB-446C-808C-4FFD42F8C697", 31, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-19T00:00:00", "02 07 29 55 58 27", "3" ] -, [ 32, "0D13C24A-2A9A-4474-A2D9-6A289D71BB0A", 32, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-22T00:00:00", "19 20 40 47 57 29", "2" ] -, [ 33, "97A2F181-B8F4-46FC-9B87-B7DA6C1CF2B7", 33, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-26T00:00:00", "01 06 10 13 20 32", "4" ] -, [ 34, "DCA55B5C-1627-4FF1-B9F5-782A5D41D6C9", 34, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-29T00:00:00", "01 03 24 28 41 10", "4" ] -, [ 35, "61E4F315-8AC6-4AD6-BA2B-A23560FBEE3D", 35, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-02T00:00:00", "04 09 14 39 43 38", "4" ] -, [ 36, "5640B9E4-7126-493A-B91E-F941668FE470", 36, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-05T00:00:00", "18 34 40 48 59 25", "4" ] -, [ 37, "BD942373-C55F-4C6F-9C0C-DBAAA5CC5559", 37, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-09T00:00:00", "14 22 27 32 49 05", "4" ] -, [ 38, "BC07F54A-7951-44FA-B33B-21BCAE7C6F33", 38, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-12T00:00:00", "09 12 13 35 38 30", "10" ] -, [ 39, "A39DC171-C91E-4968-A687-D0F37244B54E", 39, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-16T00:00:00", "08 11 18 29 36 06", "5" ] -, [ 40, "C84C1A09-5AEA-411D-B206-3A1670812275", 40, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-19T00:00:00", "09 30 31 50 54 39", "3" ] -, [ 41, "5C253151-8A9D-41B4-ADC7-36736C279671", 41, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-23T00:00:00", "11 30 45 47 48 10", "3" ] -, [ 42, "981360DD-CA16-4D2B-9407-DAEB5EBE3267", 42, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-26T00:00:00", "13 30 32 38 57 25", "4" ] -, [ 43, "5C9B4D04-7517-4A59-9811-89CEDB5FC5D3", 43, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-30T00:00:00", "06 38 43 47 48 27", "5" ] -, [ 44, "C4C539BC-EBCE-463B-A4EB-F8037476447F", 44, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-03T00:00:00", "03 10 14 52 53 03", "3" ] -, [ 45, "DB9F4D58-B01F-4C7E-9295-79935EC42014", 45, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-07T00:00:00", "10 41 44 48 56 04", "2" ] -, [ 46, "21088D5B-000F-49E6-A1BC-BF6156B06F97", 46, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-10T00:00:00", "20 21 27 28 56 04", "4" ] -, [ 47, "761AB2D4-CC73-430F-898C-3640437C24AC", 47, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-14T00:00:00", "20 21 23 38 42 06", "3" ] -, [ 48, "3E764B7B-0536-4553-B147-CA59F6AD39B6", 48, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-17T00:00:00", "22 27 35 37 45 03", "4" ] -, [ 49, "8BE6755A-CB72-4F4B-BB21-D5144C6B2471", 49, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-21T00:00:00", "16 22 30 51 58 25", "3" ] -, [ 50, "FBD67CC1-FFFE-4992-9072-A3FF87043C6D", 50, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-24T00:00:00", "20 30 38 46 59 27", "2" ] -, [ 51, "A7228EB5-44A6-4221-B277-102266B93E93", 51, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-28T00:00:00", "01 11 20 25 27 02", "5" ] -, [ 52, "6B045B58-CA3F-49D2-9957-0EAF63AD133D", 52, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-31T00:00:00", "01 16 17 41 57 15", "3" ] -, [ 53, "06F488E9-9E70-4259-AF65-425399B615B9", 53, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-04T00:00:00", "19 28 30 37 53 36", "4" ] -, [ 54, "6BC3628F-8104-4BAD-87DF-41F85980BA83", 54, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-07T00:00:00", "04 22 26 31 52 30", "5" ] -, [ 55, "B2168ECA-DF36-4193-937B-595A15C3D31D", 55, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-11T00:00:00", "07 10 22 23 52 29", "2" ] -, [ 56, "593DF38C-05F5-4864-B229-0A26D69A6D48", 56, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-14T00:00:00", "09 33 36 50 58 31", "2" ] -, [ 57, "DAE21B1F-F101-48DC-8C00-371F1F7E4DE7", 57, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-18T00:00:00", "04 32 33 47 55 39", "3" ] -, [ 58, "D3F31D49-C789-4C40-A4BC-B747335FD9FA", 58, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-21T00:00:00", "07 10 12 22 27 26", "2" ] -, [ 59, "A2B0E38D-31AF-4EF1-88E7-94ADDF9E3E6F", 59, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-25T00:00:00", "16 17 29 31 36 23", "3" ] -, [ 60, "92ACA79B-9CE4-4F2A-8B1D-14EFBBCD8300", 60, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-28T00:00:00", "04 22 27 32 56 13", "4" ] -, [ 61, "5E44F878-B62A-410A-BAE6-5007E0CE51A3", 61, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-01T00:00:00", "17 20 21 40 51 19", "3" ] -, [ 62, "9133B613-6ABF-405F-96CB-3A9EADF71B56", 62, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-04T00:00:00", "11 14 22 33 42 38", "2" ] -, [ 63, "7EE00F05-8B9B-4A55-B7DE-E4D73440D194", 63, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-08T00:00:00", "10 35 39 51 57 20", "5" ] -, [ 64, "5151B097-89FF-4932-8CE4-A7238698B71F", 64, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-11T00:00:00", "07 17 20 36 59 33", "4" ] -, [ 65, "AE464CA3-8876-478A-A442-0C486F8D62CC", 65, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-15T00:00:00", "07 20 21 34 43 34", "5" ] -, [ 66, "DABAC9CC-604A-433D-A9CB-80F33B8DB8F5", 66, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-18T00:00:00", "01 18 37 39 44 13", "4" ] -, [ 67, "ED62E207-E760-4BB2-9BFB-59E9BF4205C0", 67, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-22T00:00:00", "10 24 36 52 55 15", "5" ] -, [ 68, "352BF116-9C83-4DB7-8422-A9F4FEA693BC", 68, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-25T00:00:00", "08 16 27 35 42 30", "2" ] -, [ 69, "72561D26-F116-4C42-B7CD-717D82149C12", 69, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-29T00:00:00", "13 44 51 52 55 30", "4" ] -, [ 70, "3FC171C6-8936-4872-90DF-994281F73D02", 70, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-02T00:00:00", "12 20 30 36 47 25", "4" ] -, [ 71, "FFD2A4A9-2BD4-4E89-9EE4-F597B6DDBCC4", 71, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-06T00:00:00", "14 26 37 41 46 24", "5" ] -, [ 72, "C22C5B84-322D-4CBC-9600-F42ADF3163FB", 72, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-09T00:00:00", "02 06 32 42 49 35", "3" ] -, [ 73, "64CC8513-4ABE-484B-A6E3-8C1401B12C4C", 73, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-13T00:00:00", "12 22 32 34 46 02", "4" ] -, [ 74, "3301A17B-CF71-41AB-9787-614EDFE7C4EC", 74, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-16T00:00:00", "11 12 15 16 28 11", "2" ] -, [ 75, "DCBDF086-B73C-4375-B745-21506C9A5DD2", 75, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-20T00:00:00", "07 17 20 39 59 17", "3" ] -, [ 76, "62B84F14-8741-47A2-978C-748A9CD3090F", 76, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-23T00:00:00", "02 07 16 20 46 34", "4" ] -, [ 77, "4EF6C071-1A67-4CB1-8664-B14C8E58CBFC", 77, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-27T00:00:00", "20 24 25 53 59 15", "5" ] -, [ 78, "29F77288-AAE5-40F6-85F1-49034D76394E", 78, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-30T00:00:00", "01 07 27 36 49 39", "5" ] -, [ 79, "99BFAC1C-14DD-47A0-A697-F44B76A708AD", 79, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-03T00:00:00", "34 38 39 45 50 33", "2" ] -, [ 80, "6DAC5801-1E01-4D10-86D6-070762A4F50F", 80, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-06T00:00:00", "07 12 23 34 38 33", "4" ] -, [ 81, "0BA8EFBC-E383-4063-82CF-84728365E61E", 81, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-10T00:00:00", "05 08 11 40 44 10", "4" ] -, [ 82, "3F894729-A7A7-4E55-846E-3FD2191B7F88", 82, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-13T00:00:00", "17 30 48 51 54 29", "5" ] -, [ 83, "570CDB2A-E9D5-4375-A611-44D8A5C55C3A", 83, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-17T00:00:00", "14 16 53 54 59 05", "3" ] -, [ 84, "29C3FB4C-5898-4B1B-A07F-A96246DBE40B", 84, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-20T00:00:00", "10 12 38 53 57 01", "5" ] -, [ 85, "0437BD3B-7443-413F-94A6-C311CD043BBC", 85, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-24T00:00:00", "08 20 21 32 37 04", "3" ] -, [ 86, "AA4A70D1-A86A-4A8A-AD80-48129D1FE8E0", 86, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-27T00:00:00", "10 30 37 47 54 39", "5" ] -, [ 87, "64361722-B061-4486-940F-6A72800287AC", 87, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-01T00:00:00", "05 10 11 12 20 02", "3" ] -, [ 88, "E93C2325-0FD6-4C7C-8E2B-2B24CB5340C2", 88, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-04T00:00:00", "13 24 27 31 42 22", "5" ] -, [ 89, "C9EC5D1F-BC31-4FE4-B403-1B18057F9E83", 89, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-08T00:00:00", "08 11 25 41 58 16", "4" ] -, [ 90, "97995811-5050-43E9-BC76-D580315CA1EC", 90, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-11T00:00:00", "01 08 10 19 20 23", "2" ] -, [ 91, "92ADBB7A-CA7E-4155-8F25-629BC4925798", 91, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-15T00:00:00", "10 11 18 32 45 18", "5" ] -, [ 92, "7F32B5D0-5ABC-46F5-819D-E469CB5A5EE8", 92, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-18T00:00:00", "04 11 19 33 43 14", "4" ] -, [ 93, "D1C86092-E5F9-4229-A737-F9CD6B6D1EFA", 93, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-22T00:00:00", "11 33 44 46 47 12", "2" ] -, [ 94, "5198F649-642C-4E21-A772-134F09716BA3", 94, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-25T00:00:00", "01 17 38 50 52 24", "2" ] -, [ 95, "4FC247E7-FCB1-4530-9DCE-C52909402E52", 95, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-29T00:00:00", "03 16 18 20 37 30", "2" ] -, [ 96, "93F87258-233E-4B01-A29A-8EFCCE13722C", 96, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-01T00:00:00", "18 22 37 47 54 36", "2" ] -, [ 97, "40038954-8377-494E-944E-908E85973739", 97, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-05T00:00:00", "22 26 32 38 40 07", "5" ] -, [ 98, "C45F6776-46DC-4484-A22D-2710D96F7479", 98, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-08T00:00:00", "06 07 26 33 52 24", "2" ] -, [ 99, "B6356A6B-4369-4138-A6EE-AC710C822F4A", 99, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-12T00:00:00", "19 21 23 40 48 27", "4" ] -, [ 100, "CF901D2A-4E08-4E73-831B-A949AC1141D6", 100, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-15T00:00:00", "09 13 22 23 37 31", "3" ] -, [ 101, "8AE587F8-B4D4-48F1-A5CD-74A2D61965C0", 101, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-19T00:00:00", "22 36 51 56 59 32", "3" ] -, [ 102, "AF143F6E-C97C-400B-B1B4-F2E6D55DD9F3", 102, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-22T00:00:00", "30 31 34 45 51 23", "2" ] -, [ 103, "05BD1A80-DAC2-4877-B98A-85A642530EE5", 103, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-26T00:00:00", "04 05 36 47 58 06", "3" ] -, [ 104, "E016B13D-A0E4-4DA7-BDE3-68CD0F747494", 104, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-29T00:00:00", "24 28 45 49 52 02", "4" ] -, [ 105, "B3BCD26B-3E87-49B5-9E32-A944F64853C6", 105, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-02T00:00:00", "03 14 33 53 57 36", "4" ] -, [ 106, "EA37777E-4995-4377-94BD-C63B99CADD29", 106, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-05T00:00:00", "15 37 41 56 59 05", "5" ] -, [ 107, "4FCF4408-9656-46A5-9819-21003BC40254", 107, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-09T00:00:00", "07 11 39 42 51 30", "4" ] -, [ 108, "05A24764-9DEA-4AEF-93A5-AB82E261185D", 108, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-12T00:00:00", "11 32 36 48 52 19", "4" ] -, [ 109, "8F293368-4D17-4AD5-AF5B-C74726FD0434", 109, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-16T00:00:00", "09 13 21 23 48 24", "2" ] -, [ 110, "061296AF-4EFD-41C1-B9CF-E17CD2852137", 110, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-19T00:00:00", "03 12 34 37 42 36", "5" ] -, [ 111, "2A3C62E6-7D95-4563-9AB2-7AE7765DB390", 111, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-23T00:00:00", "29 32 36 39 49 29", "3" ] -, [ 112, "F9220CDF-6C68-4D5D-95F2-8AFC87973920", 112, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-26T00:00:00", "04 13 17 21 45 10", "5" ] -, [ 113, "FD1388E7-2747-47FA-949D-05FD678528AB", 113, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-02T00:00:00", "07 31 50 51 58 06", "2" ] -, [ 114, "CC29B3FF-7526-467F-81BB-16E0237C3E0C", 114, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-05T00:00:00", "02 23 31 42 48 21", "2" ] -, [ 115, "FF3AEC1E-2DDC-4C2A-9E7D-3DE77D22C255", 115, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-09T00:00:00", "12 20 28 40 48 08", "2" ] -, [ 116, "557208D2-F86E-4E3F-9FCB-A5BEE7356AFA", 116, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-12T00:00:00", "01 04 12 41 47 03", "4" ] -, [ 117, "533BD995-6463-429B-9958-A9BED29B39D0", 117, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-16T00:00:00", "28 39 40 48 53 09", "3" ] -, [ 118, "F71FBC6A-7F1F-4031-8178-72989CA00D2F", 118, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-19T00:00:00", "03 11 20 27 46 08", "2" ] -, [ 119, "F9CE6E77-CD5F-452A-8F5A-363513D83F62", 119, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-23T00:00:00", "05 15 26 28 32 09", "2" ] -, [ 120, "58851C51-CBA6-4015-ADB3-0632A9458096", 120, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-26T00:00:00", "04 10 11 19 33 27", "4" ] -, [ 121, "98108522-00D3-4187-9D88-800337831326", 121, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-30T00:00:00", "19 20 42 56 58 37", "4" ] -, [ 122, "526B953C-4B88-4AE0-8D48-0E74E7A8CF16", 122, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-02T00:00:00", "06 22 34 43 45 23", "2" ] -, [ 123, "5E1119FF-9619-4732-A895-865FE789F558", 123, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-06T00:00:00", "10 18 41 55 56 15", "2" ] -, [ 124, "0CE21D53-C1DC-4C48-A18F-CB4BF10B7F20", 124, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-09T00:00:00", "05 14 32 53 56 11", "4" ] -, [ 125, "7E843BE0-E068-4511-8237-9D5750123BF8", 125, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-13T00:00:00", "04 23 39 49 50 39", "3" ] -, [ 126, "51ED8DC0-6501-40FB-9531-3910843D6BC0", 126, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-16T00:00:00", "21 33 44 45 55 07", "5" ] -, [ 127, "E1AB915B-0D8E-4BBA-9089-37023D54ECBF", 127, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-20T00:00:00", "09 24 34 36 43 27", "3" ] -, [ 128, "287D98E0-5CB1-4EF9-9A57-79BEF03483A7", 128, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-23T00:00:00", "03 11 47 48 58 19", "3" ] -, [ 129, "5230AEAD-648E-4D5E-8F6D-1B64A3E7A1AB", 129, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-27T00:00:00", "04 24 40 44 55 05", "2" ] -, [ 130, "45333360-9131-4043-8852-CB77AA794370", 130, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-30T00:00:00", "06 13 15 32 41 03", "2" ] -, [ 131, "79798878-CCD2-453E-9E27-DA9765FD2A3A", 131, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-04T00:00:00", "03 15 27 29 41 24", "4" ] -, [ 132, "B3163D53-EA4D-4386-A43E-EFC60A5AEF26", 132, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-07T00:00:00", "02 11 27 47 55 15", "4" ] -, [ 133, "097C8559-2817-4737-B26D-ECB09BC40AC0", 133, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-11T00:00:00", "09 17 32 43 45 31", "3" ] -, [ 134, "062F616D-0E21-4794-8D63-3E30E3681E44", 134, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-14T00:00:00", "08 17 18 40 44 16", "2" ] -, [ 135, "0D63C006-11D5-40CF-B587-384346C41C25", 135, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-18T00:00:00", "07 12 13 42 49 16", "4" ] -, [ 136, "0FF01D7C-AE37-437E-A5AC-61BAA2508D7D", 136, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-21T00:00:00", "02 08 40 49 50 36", "3" ] -, [ 137, "A2C61ADF-F689-4794-A808-84A75826E743", 137, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-25T00:00:00", "04 23 31 42 50 23", "2" ] -, [ 138, "F3267566-AE83-44F3-8160-789EA1016E1D", 138, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-28T00:00:00", "12 20 43 51 55 11", "4" ] -, [ 139, "02B6BE3F-A964-47C4-9697-E29201F09028", 139, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-01T00:00:00", "08 18 38 46 56 31", "4" ] -, [ 140, "CC7942F6-877B-48B6-9181-93A1C98B0359", 140, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-04T00:00:00", "17 19 39 41 58 21", "5" ] -, [ 141, "61378B85-5CAA-4022-B572-B4AE0E2F7777", 141, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-08T00:00:00", "14 37 44 45 53 29", "5" ] -, [ 142, "F91BBF8A-2984-4398-8770-E4CDB5CDC4A4", 142, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-11T00:00:00", "16 18 27 36 50 08", "3" ] -, [ 143, "7D7AC37A-E986-4A6B-B961-922D9EDF1F35", 143, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-15T00:00:00", "19 20 38 41 43 29", "4" ] -, [ 144, "0ED73FCF-199E-45CC-9C97-363AA8FDFDCF", 144, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-18T00:00:00", "12 21 22 38 41 18", "2" ] -, [ 145, "A3F9E171-836B-485E-8CEE-5B98BC033F4E", 145, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-22T00:00:00", "12 15 19 46 59 12", "4" ] -, [ 146, "7D31993D-45DC-41A3-BFD0-9A813652F08E", 146, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-25T00:00:00", "18 36 39 41 57 12", "4" ] -, [ 147, "2F615FCA-77BF-467B-B83F-C8C952A495B1", 147, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-29T00:00:00", "24 30 45 57 59 26", "3" ] -, [ 148, "C763B039-97BC-429A-A266-54E676FD9FE8", 148, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-02T00:00:00", "01 11 18 29 51 32", "3" ] -, [ 149, "0CE75BB4-3F14-4A49-A29C-821D5214EEFF", 149, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-06T00:00:00", "11 15 24 50 55 08", "2" ] -, [ 150, "28EC195A-D329-4CD4-8186-830B0B26E986", 150, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-09T00:00:00", "01 09 11 23 31 06", "3" ] -, [ 151, "F01DDCEF-548F-470B-AA4C-64344207CF70", 151, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-13T00:00:00", "08 18 19 32 54 08", "4" ] -, [ 152, "BF59C62F-CE42-46B3-8D53-4BB89C044A0B", 152, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-16T00:00:00", "24 28 48 50 54 25", "3" ] -, [ 153, "F382A07F-8C7F-4421-9787-1F1848CD9495", 153, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-20T00:00:00", "01 04 38 40 42 17", "4" ] -, [ 154, "B816B09A-67CE-4F64-8F46-F40067CDEFB9", 154, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-23T00:00:00", "01 07 27 38 48 30", "3" ] -, [ 155, "C4AE9DAC-E9EF-4D8E-A325-215DD8E9ED66", 155, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-27T00:00:00", "38 40 41 51 59 33", "2" ] -, [ 156, "50A1075C-9262-4B20-8D86-C8D90A4E7752", 156, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-30T00:00:00", "20 40 41 47 55 19", "2" ] -, [ 157, "44654407-6D79-4A7B-9289-448842BDFABD", 157, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-03T00:00:00", "13 19 21 28 49 11", "2" ] -, [ 158, "8E9ECF5E-B2FD-4573-B80A-2A1ADCDC4202", 158, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-06T00:00:00", "25 30 54 57 59 06", "3" ] -, [ 159, "8C84603D-A637-400F-885E-83939C95191E", 159, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-10T00:00:00", "11 18 36 41 46 38", "4" ] -, [ 160, "C3DAF6FF-C8EE-4D4D-A6FE-D1B18DD65FF1", 160, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-13T00:00:00", "09 12 35 50 58 04", "2" ] -, [ 161, "0EB476D2-7418-4354-B8A8-205A90DC1DDF", 161, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-17T00:00:00", "18 28 31 48 52 37", "4" ] -, [ 162, "1480D8BB-7D88-4307-83EB-917D7D3D60A6", 162, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-20T00:00:00", "02 17 23 28 47 36", "2" ] -, [ 163, "91FFF0D2-E5F6-46F2-AF8D-530E691E2758", 163, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-24T00:00:00", "09 13 47 49 53 39", "5" ] -, [ 164, "DDE69E16-E29A-44F9-8DF0-B75FC8E5446E", 164, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-27T00:00:00", "02 12 25 54 58 14", "3" ] -, [ 165, "03453461-CFD5-45F8-B8D6-4F4EFC4B3E1D", 165, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-31T00:00:00", "13 19 35 47 57 29", "5" ] -, [ 166, "56803DBA-389D-414C-95F1-3F1F4EF87C93", 166, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-03T00:00:00", "15 25 52 53 54 02", "5" ] -, [ 167, "7B8C595B-EAA8-4511-AB8A-22F05D0E1493", 167, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-07T00:00:00", "03 05 18 27 54 13", "4" ] -, [ 168, "9A979EB9-5F95-4313-A115-1D0FDB7B2AA0", 168, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-10T00:00:00", "04 19 22 32 53 24", "4" ] -, [ 169, "9FA4926B-6EEB-4FAB-A6A6-B8A71BF39BCD", 169, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-14T00:00:00", "16 41 42 50 59 05", "3" ] -, [ 170, "7D4EDF40-6655-4D99-A635-66CC7FDAB422", 170, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-17T00:00:00", "06 20 22 32 43 11", "2" ] -, [ 171, "17CEB9C3-945A-4874-BA6F-B9AE7C07FAFC", 171, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-21T00:00:00", "12 47 48 52 55 13", "4" ] -, [ 172, "D074055A-E72B-4DBB-B1FB-E8783EAA0D41", 172, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-24T00:00:00", "03 04 12 27 44 26", "5" ] -, [ 173, "34C73D37-392F-43BC-A494-E0FB5D6B354D", 173, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-28T00:00:00", "30 41 50 51 53 08", "2" ] -, [ 174, "8EC47719-C980-4F2D-95A7-6DEA8EBBE49B", 174, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-01T00:00:00", "01 12 23 27 43 31", "3" ] -, [ 175, "7E194E19-56CE-4A82-991B-E623641DDA4B", 175, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-05T00:00:00", "07 20 43 46 54 17", "4" ] -, [ 176, "2E0A35CF-76FC-4AA4-9F59-B69878A66A81", 176, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-08T00:00:00", "03 27 35 37 45 31", "5" ] -, [ 177, "4FE26456-F945-4CA1-9849-5405C5EB0D02", 177, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-12T00:00:00", "10 12 23 43 47 18", "3" ] -, [ 178, "3989F7B0-F975-4456-986E-531A691311D9", 178, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-15T00:00:00", "05 10 24 38 43 01", "4" ] -, [ 179, "36AEAE64-DA73-43F7-85B0-90FD865FFC9B", 179, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-19T00:00:00", "16 26 35 52 58 02", "5" ] -, [ 180, "F14A714F-288C-4A49-80D9-8241C098F089", 180, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-22T00:00:00", "03 08 23 30 58 13", "4" ] -, [ 181, "A3FFE3C7-995D-45D4-91E9-FAEB81FA105A", 181, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-26T00:00:00", "01 18 21 39 55 06", "3" ] -, [ 182, "300213E7-DCFA-44CC-BD61-479DD2E54C11", 182, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-29T00:00:00", "11 16 40 51 56 38", "5" ] -, [ 183, "9F7AB101-0EC5-4617-AAD4-FB5DD9810884", 183, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-02T00:00:00", "12 14 34 39 46 36", "4" ] -, [ 184, "F32FB3B1-964E-4D3B-86A3-B39E8A1E44C8", 184, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-05T00:00:00", "02 33 39 40 43 26", "3" ] -, [ 185, "05C290E8-16E5-4171-934E-A81EF8EA7CE4", 185, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-09T00:00:00", "05 35 57 58 59 12", "3" ] -, [ 186, "29DD3DC2-E14B-4EDE-9C30-8216914D6FEA", 186, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-12T00:00:00", "04 35 36 51 56 08", "5" ] -, [ 187, "8D0CE332-1F93-4397-80B5-7EEC36FA54C2", 187, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-16T00:00:00", "13 22 25 39 51 28", "2" ] -, [ 188, "047DBA01-8F50-437D-A8CC-1A8EBB69B7B8", 188, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-19T00:00:00", "09 16 17 28 30 11", "3" ] -, [ 189, "5354A5AD-8C46-4292-922D-061B18AB5D56", 189, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-23T00:00:00", "04 30 35 57 59 25", "2" ] -, [ 190, "4064BDA6-CA03-4989-B90F-43317004BFF5", 190, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-26T00:00:00", "20 37 39 45 55 28", "2" ] -, [ 191, "1AFEF399-4B0D-4F4B-8B78-731594986C57", 191, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-30T00:00:00", "02 06 34 35 47 22", "2" ] -, [ 192, "7B2EB6A1-B2C2-410D-B252-880BC27937CD", 192, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-03T00:00:00", "05 18 33 43 45 08", "3" ] -, [ 193, "3DE2C47F-5816-4A66-A1D1-A926FEDC1D96", 193, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-07T00:00:00", "03 14 20 39 40 37", "2" ] -, [ 194, "18FDF2CE-359B-4AE4-ADDD-EE9BA474C3BC", 194, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-10T00:00:00", "04 19 33 41 59 09", "5" ] -, [ 195, "997563CF-3217-4133-BC62-E7C36F38FF0B", 195, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-14T00:00:00", "02 24 46 52 56 19", "5" ] -, [ 196, "583A0BA7-F5C2-4537-A074-F4589AD9ADCB", 196, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-17T00:00:00", "13 28 49 51 59 33", "4" ] -, [ 197, "C1165E24-1C4B-4FB3-936D-3D6EE2FC6EB6", 197, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-21T00:00:00", "10 13 15 31 54 18", "5" ] -, [ 198, "828E2F73-D48C-4C04-A3F1-2BB4E739E0D8", 198, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-24T00:00:00", "14 16 30 51 52 19", "2" ] -, [ 199, "CA3DF9C8-70E1-4A1D-8520-452A0E9E058E", 199, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-28T00:00:00", "16 21 27 41 45 14", "2" ] -, [ 200, "07D40B41-E652-4393-B749-19685DE4579C", 200, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-31T00:00:00", "05 23 25 28 40 34", "4" ] -, [ 201, "6ED79AB6-04B8-48AF-802D-F8940CFC370A", 201, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-04T00:00:00", "21 35 46 47 50 02", "4" ] -, [ 202, "4F718048-E61B-495B-805C-E35624F2182D", 202, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-07T00:00:00", "03 21 24 38 39 24", "5" ] -, [ 203, "99D4B50F-83D9-478D-AA96-B7225A6A0F2B", 203, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-11T00:00:00", "05 19 29 45 47 25", "2" ] -, [ 204, "369DB95A-DE5B-4070-A175-54CEA5043F88", 204, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-14T00:00:00", "10 30 36 38 41 01", "5" ] -, [ 205, "68BFE997-EF24-4FF7-809E-4B98BAD12A33", 205, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-18T00:00:00", "06 29 34 44 50 28", null ] -, [ 206, "73E19009-0F21-46C8-951D-D7BB50ECE5F1", 206, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-21T00:00:00", "12 24 43 44 45 07", null ] -, [ 207, "02C6C142-463F-413B-9005-56E28EC96210", 207, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-25T00:00:00", "04 19 28 29 47 05", null ] -, [ 208, "7B5054A4-2F50-484B-86F6-9F9CF78CC9A5", 208, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-28T00:00:00", "05 33 41 54 59 13", null ] -, [ 209, "1EF7C6C9-8B72-48E6-AB36-6BFCFB77B3DE", 209, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-01T00:00:00", "08 13 17 34 59 35", null ] -, [ 210, "A1F66607-2F2B-4C84-AD68-D3AF901A6182", 210, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-04T00:00:00", "15 23 43 45 56 07", null ] -, [ 211, "9A2D1456-8BFB-40DF-A66A-FAF7EF6B4355", 211, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-08T00:00:00", "17 28 38 39 51 33", null ] -, [ 212, "C9F84026-FA64-4891-8FDC-7D91CFAA9773", 212, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-11T00:00:00", "01 10 37 52 57 11", null ] -, [ 213, "35B6335E-90F5-406F-9417-9ECA5F4ED28E", 213, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-15T00:00:00", "11 12 32 52 56 11", null ] -, [ 214, "0D5BCFD5-88FC-46D0-ACD6-54C967456941", 214, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-18T00:00:00", "23 28 50 56 59 05", null ] -, [ 215, "8F769561-C534-46EF-8DC9-0CD5F69FCD7C", 215, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-22T00:00:00", "07 16 17 39 51 32", null ] -, [ 216, "F72A4C8C-E83F-4623-B0A8-AC4170F711BC", 216, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-25T00:00:00", "06 11 42 53 54 07", null ] -, [ 217, "C6FD7554-ACF3-45A5-8B06-06DC1DF30BB2", 217, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-29T00:00:00", "01 04 11 23 26 14", null ] -, [ 218, "222E59E8-FFD7-4CC5-BC7C-B757746CAF8D", 218, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-03T00:00:00", "29 30 45 47 49 35", null ] -, [ 219, "D2A8DF68-9343-49F2-8705-FD28B2CC3A90", 219, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-07T00:00:00", "12 35 45 46 47 12", null ] -, [ 220, "A36FEF9D-2D5B-4DEC-8A5E-58497A21241A", 220, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-10T00:00:00", "05 14 17 20 41 05", null ] -, [ 221, "6BBE1009-6381-419A-88CC-F4DCCDF5AEEE", 221, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-14T00:00:00", "01 08 41 46 59 24", null ] -, [ 222, "6340B968-9772-46AA-A489-0928359C5E72", 222, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-17T00:00:00", "11 14 49 55 58 30", null ] -, [ 223, "28FCDA38-FE5D-4F76-8E81-91D7C46AEE36", 223, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-21T00:00:00", "32 43 53 55 56 06", null ] -, [ 224, "C13FB396-7E85-4D9D-84E7-8F31BBE3953D", 224, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-24T00:00:00", "01 15 35 37 47 08", null ] -, [ 225, "77D4E5AC-74EF-49E1-8D14-E1F3C85235C8", 225, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-28T00:00:00", "11 16 29 50 58 33", null ] -, [ 226, "892B6304-F1C9-4968-BEFB-1D518B238C0A", 226, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-31T00:00:00", "05 14 36 54 58 27", null ] -, [ 227, "0540775F-6648-4FEA-8444-5573749AE140", 227, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-04T00:00:00", "01 24 33 45 49 06", null ] -, [ 228, "E63BE891-43F0-4910-8EE4-5EDA1FBB719F", 228, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-07T00:00:00", "05 13 17 20 30 18", null ] -, [ 229, "82DD4C26-AA7D-4C11-BEA8-9899EF5FF86A", 229, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-11T00:00:00", "16 23 42 44 47 02", null ] -, [ 230, "DAB9D612-C187-4B13-BCBC-36E33A22250B", 230, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-14T00:00:00", "14 15 16 19 24 02", null ] -, [ 231, "82FC523B-BD1D-4A5B-925C-488764025F63", 231, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-18T00:00:00", "20 22 39 46 49 29", null ] -, [ 232, "08E109BC-46CD-405D-B55B-D63C8EF1E88E", 232, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-21T00:00:00", "06 08 20 42 51 16", null ] -, [ 233, "25732E04-4CEA-481A-BBBD-BB706A4822A2", 233, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-25T00:00:00", "04 25 29 34 43 29", null ] -, [ 234, "84D6DF1E-2850-48D6-81C8-BA6813947093", 234, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-28T00:00:00", "31 39 40 57 58 33", null ] -, [ 235, "CE62EC65-4B54-424B-AF1E-9DA89A23AC3B", 235, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-02T00:00:00", "07 08 33 38 50 29", null ] -, [ 236, "247DF1DB-7140-4F4E-BAA8-82D44151B697", 236, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-05T00:00:00", "09 12 20 44 59 23", null ] -, [ 237, "1D2FD83C-6F5D-4D0E-84F6-DBEBA73226FB", 237, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-09T00:00:00", "01 07 11 55 56 01", null ] -, [ 238, "9F497756-5D8C-44F9-BCA9-32C85F24C7B4", 238, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-12T00:00:00", "10 24 35 53 58 22", null ] -, [ 239, "CDC9826E-CAA4-4851-BA89-40F94C43640F", 239, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-16T00:00:00", "03 07 21 28 43 02", null ] -, [ 240, "38ED6B08-4AE8-4D03-9CA3-F6CEEE7AD5EA", 240, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-19T00:00:00", "08 13 35 46 51 30", null ] -, [ 241, "DC69454E-7153-42B1-80C0-B782FE2947C6", 241, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-23T00:00:00", "04 07 26 53 59 32", null ] -, [ 242, "37DC3FAB-1784-4A7F-8175-12BF55F9F707", 242, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-26T00:00:00", "13 14 41 49 59 14", null ] -, [ 243, "8841334C-6681-4C95-A2D1-E98368995E74", 243, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-30T00:00:00", "09 10 24 52 56 14", null ] -, [ 244, "BC98C758-2146-4840-B56D-F558C6DFC597", 244, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-02T00:00:00", "09 10 17 29 45 33", null ] -, [ 245, "8745C895-057D-425C-8AC4-3893B1217811", 245, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-06T00:00:00", "19 30 33 48 59 27", null ] -, [ 246, "7ADA588B-6072-453B-83D3-3121A766E766", 246, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-09T00:00:00", "18 22 45 56 57 27", null ] -, [ 247, "EE8DA13A-D8D2-4E45-AB14-F582E01B1890", 247, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-13T00:00:00", "07 10 14 33 57 18", null ] -, [ 248, "131CCCCE-98B4-4508-BBE4-D1DAF52D24C1", 248, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-16T00:00:00", "08 14 15 16 27 26", null ] -, [ 249, "E485B061-0AB2-480C-83DD-CDD20DAF53A9", 249, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-20T00:00:00", "11 17 29 56 57 14", null ] -, [ 250, "64752403-F193-4E6C-8DAB-426B915D324C", 250, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-23T00:00:00", "01 03 41 44 53 30", null ] -, [ 251, "5A9F43EF-49A3-4775-B5D4-01FB399BDBA0", 251, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-27T00:00:00", "06 34 40 46 58 06", null ] -, [ 252, "187F3244-451C-44C4-9E2E-F6148EBD5486", 252, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-30T00:00:00", "07 15 20 41 44 22", null ] -, [ 253, "0520D56E-49E1-4437-883A-BEA8549177E9", 253, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-04T00:00:00", "14 19 35 39 56 33", null ] -, [ 254, "289BFBF7-9899-4318-8FA9-248D0D2DD6BE", 254, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-07T00:00:00", "03 05 29 39 59 29", null ] -, [ 255, "5A74A68D-4FE4-47CF-A30E-FD00A448556C", 255, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-11T00:00:00", "05 22 36 49 55 23", null ] -, [ 256, "68724EFF-9945-4B64-8703-C3885EEBF72A", 256, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-14T00:00:00", "04 16 32 37 46 13", null ] -, [ 257, "E97770CF-2D5B-4E50-AD4E-DA908CB1A65D", 257, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-18T00:00:00", "02 05 20 23 57 03", null ] -, [ 258, "94CE7B77-0577-441F-AEB8-21C06FB72FB1", 258, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-21T00:00:00", "09 31 38 54 56 20", null ] -, [ 259, "EF93A1EE-E937-46EE-BE45-93144E3B018A", 259, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-25T00:00:00", "03 14 35 38 46 16", null ] -, [ 260, "E6E27C61-9F67-4435-B056-6C9E11E05396", 260, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-28T00:00:00", "05 06 13 36 50 13", null ] -, [ 261, "DFF18A33-7D8D-49DE-8811-13A0E2D2C846", 261, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-01T00:00:00", "03 16 48 56 58 04", null ] -, [ 262, "98DBB22C-0155-4F72-A68B-179D47A1C9BA", 262, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-04T00:00:00", "19 30 48 53 55 18", null ] -, [ 263, "3BCB7B3F-E4B8-4AB7-A071-82998C6274EF", 263, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-08T00:00:00", "03 07 11 15 28 12", null ] -, [ 264, "BD63131D-D862-4186-A0EF-4A290455A282", 264, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-11T00:00:00", "04 13 39 46 51 01", null ] -, [ 265, "06C0AA9D-39A8-4928-8C8F-61DA329BCC7F", 265, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-15T00:00:00", "06 27 46 51 56 21", null ] -, [ 266, "4BE3F65C-4B6A-4081-B75D-9280C8367C17", 266, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-18T00:00:00", "14 26 41 55 59 01", null ] -, [ 267, "9A0B6856-C420-4411-84EA-99AC6BBF0015", 267, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-22T00:00:00", "22 29 31 47 55 19", null ] -, [ 268, "BF067455-0051-4B07-8A18-CAC7AA537C02", 268, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-25T00:00:00", "01 06 07 20 49 23", null ] -, [ 269, "BE75088A-CED8-44AC-AFB8-19C09D6FE196", 269, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-29T00:00:00", "25 28 49 54 56 28", null ] -, [ 270, "CEECAF38-CF6B-4715-8EE1-37C5206F1C2C", 270, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-01T00:00:00", "08 11 21 44 49 22", null ] -, [ 271, "CE3C7F39-5D43-4AFF-9761-7CE56DB9D923", 271, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-05T00:00:00", "04 19 26 42 51 29", null ] -, [ 272, "9D59886E-17B3-4947-90D9-2D3901D57C71", 272, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-08T00:00:00", "06 20 34 44 48 29", null ] -, [ 273, "49C909B5-17D3-4790-9665-6C8030223DB0", 273, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-12T00:00:00", "24 33 36 48 56 06", null ] -, [ 274, "AD1E516B-00D1-45E2-910C-1440D98CB95B", 274, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-15T00:00:00", "03 20 26 43 48 01", null ] -, [ 275, "B5ACAEA4-1D1F-43F9-BC05-A0248EB5BE8B", 275, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-19T00:00:00", "01 05 08 39 50 23", null ] -, [ 276, "5DDD7687-0420-45D4-9B0F-1A1BAC9E7B1D", 276, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-22T00:00:00", "02 16 18 40 42 33", null ] -, [ 277, "30FAC46C-67D1-4517-B9C1-C45A66ECD4AD", 277, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-26T00:00:00", "13 26 39 41 42 10", null ] -, [ 278, "085D6278-8169-45F2-8139-5AE139D49584", 278, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-29T00:00:00", "14 18 28 29 57 08", null ] -, [ 279, "26ECC80A-B310-4A53-92CE-202F7B197214", 279, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-03T00:00:00", "17 23 36 55 59 10", null ] -, [ 280, "914519F9-A8B7-434F-B0D4-907038C71E5A", 280, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-06T00:00:00", "15 26 34 36 59 35", null ] -, [ 281, "6636BBF0-8EBC-418F-A550-FA95CACC0619", 281, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-10T00:00:00", "18 26 29 35 43 28", null ] -, [ 282, "5365107E-2287-48CA-AD58-6C9A023C714C", 282, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-13T00:00:00", "02 05 25 26 49 18", null ] -, [ 283, "E417DA4F-11BE-4903-ADAF-8FDD30355EF5", 283, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-17T00:00:00", "01 07 10 23 42 35", null ] -, [ 284, "B4D90A89-0789-4D09-BDDC-03C9DF67DC6F", 284, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-20T00:00:00", "04 21 28 31 44 10", null ] -, [ 285, "9BF840BF-31FE-4089-99F6-9A011979ABEE", 285, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-24T00:00:00", "03 18 21 23 50 04", null ] -, [ 286, "B6575F0B-D385-47EA-9332-D106904A702A", 286, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-27T00:00:00", "22 32 34 36 56 33", null ] -, [ 287, "57B7ED0C-5CC1-4081-9590-E199DF5FA176", 287, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-31T00:00:00", "01 27 31 45 48 05", null ] -, [ 288, "C41607D3-580C-43BB-ADAD-9CC43C5819D0", 288, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-03T00:00:00", "04 07 09 30 54 25", null ] -, [ 289, "00DF4287-E311-4041-803D-50CD8CF730F8", 289, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-07T00:00:00", "32 34 45 52 58 20", null ] -, [ 290, "26EF36DB-6E16-4504-99D7-586EF63C5BFD", 290, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-10T00:00:00", "32 42 50 54 55 32", null ] -, [ 291, "2DFD63FF-F496-4915-ADBE-CFC7B2F020E4", 291, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-14T00:00:00", "08 10 30 44 58 13", null ] -, [ 292, "79A650AF-912E-4C50-A912-22D6CE48C74C", 292, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-17T00:00:00", "03 15 27 58 59 20", null ] -, [ 293, "79919921-AEE6-48DF-9450-BB91C923FFB4", 293, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-21T00:00:00", "08 18 24 30 39 26", null ] -, [ 294, "347CD937-33FD-40DF-B30A-2926AB462E46", 294, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-24T00:00:00", "22 32 37 44 50 34", null ] -, [ 295, "42030C9D-944B-4CA6-ACF9-491121D867AC", 295, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-28T00:00:00", "05 16 22 23 29 06", null ] -, [ 296, "1F2CCE2B-0EB4-4866-A863-4E0F6AF4C137", 296, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-01T00:00:00", "03 10 19 36 46 03", null ] -, [ 297, "BAF2D745-7C18-4FFA-BDCE-9335B51B3044", 297, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-05T00:00:00", "13 17 19 27 38 12", null ] -, [ 298, "2923720E-CC6D-4FA4-9D78-D0D1EA8EB401", 298, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-08T00:00:00", "07 23 26 40 53 21", null ] -, [ 299, "08BF1FF1-5F06-47B9-BE7D-B256988D55E3", 299, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-12T00:00:00", "08 10 25 36 44 28", null ] -, [ 300, "C471CB03-D137-4D02-A38B-17D3DD24AB61", 300, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-15T00:00:00", "15 23 40 44 55 14", null ] -, [ 301, "8D72164F-DC14-4C2D-B905-2236F6D766A0", 301, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-19T00:00:00", "05 08 20 23 30 03", null ] -, [ 302, "3751AF81-0687-4D2D-88E3-6394361D18E4", 302, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-22T00:00:00", "01 18 35 39 44 11", null ] -, [ 303, "4E4D1611-40FC-4F76-8D11-814B0230E9E9", 303, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-26T00:00:00", "11 13 23 43 54 04", null ] -, [ 304, "E8AD7A64-CBF3-41E0-8841-57A88A8A9CEA", 304, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-29T00:00:00", "36 46 50 52 55 14", null ] -, [ 305, "EA310D55-EA1A-4AD5-AEC4-2D906D578237", 305, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-02T00:00:00", "18 20 28 35 53 20", null ] -, [ 306, "5B6740CB-25FE-4096-952A-22B8FD71049F", 306, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-05T00:00:00", "26 30 49 51 54 25", null ] -, [ 307, "2D2B2571-BCB7-43F9-903F-A95BC9352549", 307, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-09T00:00:00", "11 13 20 27 59 26", null ] -, [ 308, "B6955E33-CFE9-470E-B016-CCA4037F7E8F", 308, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-12T00:00:00", "10 14 21 23 47 07", null ] -, [ 309, "7D7ADFD8-0AD5-4D8D-BB5C-54B54BAB15F1", 309, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-16T00:00:00", "09 21 28 32 51 35", null ] -, [ 310, "F135EEBF-2581-4D4B-B30D-405AC997C32F", 310, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-19T00:00:00", "08 28 29 34 38 35", null ] -, [ 311, "9826E37F-19B7-499C-84FD-9FF396B106A4", 311, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-23T00:00:00", "11 12 24 43 45 09", null ] -, [ 312, "397246CE-545F-4119-A29C-07BC53CFDA27", 312, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-26T00:00:00", "03 22 26 41 49 18", null ] -, [ 313, "738F1EC3-A68F-437A-B9F8-A3E7DB8A259F", 313, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-30T00:00:00", "14 16 32 47 52 16", null ] -, [ 314, "A1A3F5C7-97C7-4C9D-A694-2C0EE2A68760", 314, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-02T00:00:00", "11 16 33 40 41 34", null ] -, [ 315, "333E4589-A54E-49D7-91D6-1FEC76CC953B", 315, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-06T00:00:00", "05 27 36 38 41 12", null ] -, [ 316, "3FC6D439-3147-4484-8519-4440B8FE2A89", 316, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-09T00:00:00", "05 06 16 36 58 03", null ] -, [ 317, "0C92A9B8-FEDC-40D7-A407-A791143CDDBE", 317, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-13T00:00:00", "12 23 25 27 43 29", null ] -, [ 318, "BAEC5F53-D2F9-48B8-8FAF-84F32B265069", 318, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-16T00:00:00", "15 16 46 50 58 29", null ] -, [ 319, "9DC15E1B-DDDC-4404-92CB-B5DE148175E0", 319, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-20T00:00:00", "03 17 19 25 32 17", null ] -, [ 320, "508D9E18-9F15-4104-ABBD-86B5461522A7", 320, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-23T00:00:00", "02 05 31 39 41 29", null ] -, [ 321, "46951F5E-AB70-43CF-A18F-8FAB450CBFC0", 321, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-27T00:00:00", "03 14 20 34 48 21", null ] -, [ 322, "8AD80678-E48D-45AB-8DB9-E2389662D851", 322, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-03-02T00:00:00", "03 08 13 41 56 16", null ] -, [ 323, "3422EF9A-9136-486B-8DBE-71ABA6D1996C", 323, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-03-06T00:00:00", "06 10 23 41 45 01", null ] -, [ 325, "9860B5F7-D7E7-4DFF-B95D-34032B4BEDF8", 325, 1363349314, "708543", 1363349314, "708543", "{\n}", "2013-03-09T00:00:00", "10 37 40 46 52 12", null ] -, [ 326, "0439154C-78D1-4996-8CAD-B1B954931675", 326, 1363349314, "708543", 1363349314, "708543", "{\n}", "2013-03-13T00:00:00", "05 09 28 32 38 29", null ] -, [ 328, "FCF75212-D9E5-4AFF-87BC-66189B89CB98", 328, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-16T00:00:00", "03 07 21 44 53 16", null ] -, [ 329, "48D32A7D-B346-4710-8BB8-42B2272FFC14", 329, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-20T00:00:00", "13 14 17 43 54 15", null ] -, [ 330, "F5BE3238-68A7-4A8C-9965-AB377594A587", 330, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-23T00:00:00", "17 29 31 52 53 31", null ] -, [ 331, "149CB1DF-EE7B-4E15-A8C8-5F1F0BFB48FC", 331, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-27T00:00:00", "07 37 43 48 52 16", null ] -, [ 332, "4BD3AEAF-A4B7-41DB-80E3-29A84EBD1530", 332, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-30T00:00:00", "11 23 26 46 55 27", null ] -, [ 333, "DC250164-F16B-448C-86BB-1552B8E73D78", 333, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-04-03T00:00:00", "01 06 08 12 35 03", null ] -, [ 334, "BB9F041B-A32F-4CEB-AFEB-469174780DFA", 334, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-04-06T00:00:00", "04 07 08 29 39 24", null ] -, [ 336, "D1BA6B1C-1971-4840-8744-146C6EA3CE93", 336, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-10T00:00:00", "01 36 40 52 53 20", null ] -, [ 337, "D4C28FAA-6BF6-4DCD-9E92-A7CC09C7D397", 337, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-13T00:00:00", "10 12 31 56 57 33", null ] -, [ 338, "0C60CBC5-7E4B-41EC-B5C2-0F22CB589A92", 338, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-17T00:00:00", "13 18 36 48 58 28", null ] -, [ 339, "C8DC82C1-3976-4093-94F5-3951D031210C", 339, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-20T00:00:00", "06 08 30 39 48 20", null ] -, [ 340, "072ED3B5-42D2-453F-866E-BA3719910A6C", 340, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-24T00:00:00", "09 19 31 56 59 02", null ] -, [ 341, "41B7A123-CEDC-44E9-B022-C1BABEAAEC0F", 341, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-27T00:00:00", "03 23 48 54 55 05", null ] -, [ 342, "EA1593AF-D20C-484F-B5FB-B12BE0C79F74", 342, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-01T00:00:00", "22 26 31 54 55 18", null ] -, [ 343, "B7035D34-88EA-49E3-B987-9BAE3D16BE1A", 343, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-04T00:00:00", "07 12 26 36 40 17", null ] -, [ 344, "31F614CE-1B8B-43F3-9365-925D7243374C", 344, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-08T00:00:00", "21 22 26 30 57 27", null ] -, [ 345, "FAC6FECB-953A-4257-9AD0-6C4A35D5783E", 345, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-11T00:00:00", "06 13 19 23 43 16", null ] -, [ 346, "AFE17066-CCB0-41AA-800C-4D02902505A5", 346, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-15T00:00:00", "02 11 26 34 41 32", null ] -, [ 347, "E86DAD23-CDEE-4116-AD03-101D8C0296E5", 347, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-18T00:00:00", "10 13 14 22 52 11", null ] -, [ 348, "F5D88A28-5B42-469C-BF81-FEA8E4C18C53", 348, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-22T00:00:00", "09 31 35 41 57 26", null ] -, [ 349, "AF3B89F6-3B42-4947-B342-3723FCDE5308", 349, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-25T00:00:00", "02 06 19 21 27 25", null ] -, [ 350, "AB777365-B121-43E3-A731-32EF418AE1C3", 350, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-29T00:00:00", "09 14 17 49 57 02", null ] -, [ 351, "C903B823-813C-43E0-AF7E-74DE8E5561B6", 351, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-01T00:00:00", "22 28 33 53 59 14", null ] -, [ 352, "80798224-1817-432D-89DB-DE18DFB1468E", 352, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-05T00:00:00", "04 26 33 36 55 32", null ] -, [ 353, "859F250B-4CE8-40CD-85A4-2DC7CD13012A", 353, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-08T00:00:00", "02 11 22 26 32 19", null ] -, [ 354, "837CB330-52CE-44F8-B889-32B6BAA00852", 354, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-12T00:00:00", "16 22 23 42 55 32", null ] -, [ 355, "92C7D5C3-E3F8-4AFE-88D4-462D3BCE2272", 355, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-15T00:00:00", "28 36 40 48 55 01", null ] -, [ 356, "FE49F2F1-95AC-4B43-8B2F-F07BDF89CEB3", 356, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-19T00:00:00", "07 46 47 52 57 17", null ] -, [ 357, "5D40380C-DD65-4532-AC21-CF401894B317", 357, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-22T00:00:00", "13 19 23 33 57 28", null ] -, [ 358, "0B2FCAF5-4E29-4F8F-9280-97BF0EC3D0BD", 358, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-26T00:00:00", "01 18 33 39 46 33", null ] -, [ 359, "57D0A633-35B9-451E-9620-4E26808DE6A0", 359, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-29T00:00:00", "08 28 30 53 56 16", null ] -, [ 361, "04AEA4EE-4D45-49C6-B20F-6A2B8F537C0F", 361, 1373960512, "708543", 1373960512, "708543", "{\n}", "2013-07-03T00:00:00", "03 06 29 40 51 04", null ] -, [ 362, "978F0309-7452-430C-B61E-08844FEA7A48", 362, 1373960512, "708543", 1373960512, "708543", "{\n}", "2013-07-06T00:00:00", "02 13 35 36 52 11", null ] -, [ 363, "063879CE-DB8E-461E-AE83-AF99A8E8DE11", 363, 1373960512, "708543", 1373960512, "708543", "{\n}", "2013-07-10T00:00:00", "30 31 45 55 59 27", null ] -, [ 365, "F9F6AE36-65EB-4ED5-9C13-18CC98C7DA23", 365, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-13T00:00:00", "02 08 22 35 37 06", null ] -, [ 366, "2DD53C13-565A-499E-99AB-73F43680F6A8", 366, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-17T00:00:00", "01 22 34 38 42 17", null ] -, [ 367, "6752A041-C2DB-49F4-A8B4-FE9B4F32A190", 367, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-20T00:00:00", "14 25 27 38 58 06", null ] -, [ 368, "9705E491-5DB5-4F82-8F41-E206CB414B29", 368, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-24T00:00:00", "09 29 40 44 54 07", null ] -, [ 369, "51ED9563-D5E9-47A3-A39F-E32B58AB4BFE", 369, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-27T00:00:00", "09 23 40 53 58 06", null ] -, [ 370, "48E88999-FBEB-4FDE-965C-BC6B7ABDC946", 370, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-31T00:00:00", "08 24 39 49 59 05", null ] -, [ 372, "74E7FBC1-422D-4B2B-9B31-BE468A39AA04", 372, 1375712128, "708543", 1375712128, "708543", "{\n}", "2013-08-03T00:00:00", "21 24 36 42 45 15", null ] -, [ 374, "CCB64CFF-4955-4BF4-88EB-CF475FDCBF6B", 374, 1376034828, "708543", 1376034828, "708543", "{\n}", "2013-08-07T00:00:00", "05 25 30 58 59 32", null ] -, [ 376, "3A5B135F-7CF4-4F6C-AC7B-D9B87997C9F5", 376, 1376312350, "708543", 1376312350, "708543", "{\n}", "2013-08-10T00:00:00", "04 12 14 37 58 13", null ] -, [ 378, "DB91BB61-FE4B-4AC7-B79B-CB62F5BFE967", 378, 1376636929, "708543", 1376636929, "708543", "{\n}", "2013-08-14T00:00:00", "04 11 17 43 51 20", null ] -, [ 380, "35791B1C-33AB-472D-80D3-4CF9A6BE30EF", 380, 1376921117, "708543", 1376921117, "708543", "{\n}", "2013-08-17T00:00:00", "18 21 46 54 56 23", null ] -, [ 382, "3DADF8FA-B273-422A-8DD2-E3DF108CCDCD", 382, 1377152900, "708543", 1377152900, "708543", "{\n}", "2013-08-21T00:00:00", "30 40 42 46 48 23", null ] -, [ 384, "C61E59C5-F18C-45A7-A9F3-1D6B69C69312", 384, 1377508995, "708543", 1377508995, "708543", "{\n}", "2013-08-24T00:00:00", "12 17 25 45 59 19", null ] -, [ 386, "E316A2A9-0932-4553-B9A2-3F4ED3AB256E", 386, 1377778238, "708543", 1377778238, "708543", "{\n}", "2013-08-28T00:00:00", "06 07 09 19 32 13", null ] -, [ 388, "CBB2374D-6251-421E-AEAA-D57E0B1C98A1", 388, 1378004467, "708543", 1378004467, "708543", "{\n}", "2013-08-31T00:00:00", "02 07 25 40 56 20", null ] -, [ 390, "B0677941-4C55-43C8-8994-5059357CF266", 390, 1378350069, "708543", 1378350069, "708543", "{\n}", "2013-09-04T00:00:00", "02 09 26 45 47 11", null ] -, [ 392, "5270488F-C21B-4969-8E2A-C452EC7F052D", 392, 1378609358, "708543", 1378609358, "708543", "{\n}", "2013-09-07T00:00:00", "02 19 22 26 45 24", null ] -, [ 396, "F3E5C8E3-49CC-4833-90B5-7A48A90BF043", 396, 1378954855, "708543", 1378954855, "708543", "{\n}", "2013-09-11T00:00:00", "11 19 33 42 52 33", null ] -, [ 398, "3281F22C-24FC-47A0-B08B-C8F7C007EA64", 398, 1379214065, "708543", 1379214065, "708543", "{\n}", "2013-09-14T00:00:00", "01 17 25 37 44 20", null ] -, [ 400, "03D572D2-4D3B-4576-A2C8-D09C7B640839", 400, 1379559676, "708543", 1379559676, "708543", "{\n}", "2013-09-18T00:00:00", "07 10 22 32 35 19", null ] -, [ 402, "F0A0B8DD-B47E-4396-81C0-6ACED79548F2", 402, 1379818889, "708543", 1379818889, "708543", "{\n}", "2013-09-21T00:00:00", "12 17 45 54 58 13", null ] -, [ 404, "AA19E8C5-B164-47E6-A4B2-11F301B635DF", 404, 1380164455, "708543", 1380164455, "708543", "{\n}", "2013-09-25T00:00:00", "02 07 17 49 53 23", null ] -, [ 406, "5C8930B7-59A9-495E-9CD9-EDA4F114190C", 406, 1380423676, "708543", 1380423676, "708543", "{\n}", "2013-09-28T00:00:00", "14 47 52 53 54 05", null ] -, [ 408, "AAB2E771-B827-45A1-8C4C-5FF4247E54A2", 408, 1380769256, "708543", 1380769256, "708543", "{\n}", "2013-10-02T00:00:00", "04 06 25 42 51 17", null ] -, [ 410, "A11A6AD2-571D-4E68-9531-D7613C9AC5D4", 410, 1381028464, "708543", 1381028464, "708543", "{\n}", "2013-10-05T00:00:00", "11 12 17 39 40 05", null ] -, [ 412, "BE0D91A1-302C-426D-A891-BCC716FF77F4", 412, 1381374055, "708543", 1381374055, "708543", "{\n}", "2013-10-09T00:00:00", "03 09 19 33 38 18", null ] -, [ 414, "D088796F-DED4-4512-A6CD-965D62DFCD46", 414, 1381633254, "708543", 1381633254, "708543", "{\n}", "2013-10-12T00:00:00", "08 10 26 57 58 04", null ] -, [ 416, "A1F81DDE-1222-482A-9797-99BDE4C680B7", 416, 1381978865, "708543", 1381978865, "708543", "{\n}", "2013-10-16T00:00:00", "03 26 28 34 42 28", null ] -, [ 418, "B3EB04B8-0EB0-4863-A062-BDC74A5B55F8", 418, 1382238075, "708543", 1382238075, "708543", "{\n}", "2013-10-19T00:00:00", "09 33 54 56 57 05", null ] -, [ 420, "81A24BED-C113-41DB-A8D7-BFA00A811E52", 420, 1382583677, "708543", 1382583677, "708543", "{\n}", "2013-10-23T00:00:00", "03 23 31 34 47 13", null ] -, [ 422, "DA233102-CFC8-488A-9878-D4DA316E1FEE", 422, 1382842854, "708543", 1382842854, "708543", "{\n}", "2013-10-26T00:00:00", "04 06 34 49 56 29", null ] -, [ 424, "BCD1777E-78BF-42AE-9F75-051E8AB6D526", 424, 1383188463, "708543", 1383188463, "708543", "{\n}", "2013-10-30T00:00:00", "02 36 40 49 54 10", null ] -, [ 426, "3C980E92-DBA6-43EA-9C2F-6A357D8C198B", 426, 1383447654, "708543", 1383447654, "708543", "{\n}", "2013-11-02T00:00:00", "13 23 24 27 40 17", null ] -, [ 428, "C6F8ACA9-A326-4CAF-9A5B-0D1848566D1A", 428, 1383793266, "708543", 1383793266, "708543", "{\n}", "2013-11-06T00:00:00", "01 05 10 15 49 22", null ] -, [ 430, "A1AA1335-1304-41B6-9143-325B91A54538", 430, 1384052454, "708543", 1384052454, "708543", "{\n}", "2013-11-09T00:00:00", "03 09 37 49 56 32", null ] -, [ 432, "875C9020-62D2-4C17-B5EE-E82B2ED215F0", 432, 1384398377, "708543", 1384398377, "708543", "{\n}", "2013-11-13T00:00:00", "05 31 50 55 56 09", null ] -, [ 434, "A663C837-573A-4100-A04D-32D154358CEF", 434, 1384657257, "708543", 1384657257, "708543", "{\n}", "2013-11-16T00:00:00", "10 29 37 44 59 10", null ] -, [ 436, "EF0B5D0B-6670-4ED1-BD05-7F753D7BD99E", 436, 1385002844, "708543", 1385002844, "708543", "{\n}", "2013-11-20T00:00:00", "04 18 23 32 45 07", null ] -, [ 438, "6E46D30A-E623-4F9E-AE38-A28FF69C700D", 438, 1385262044, "708543", 1385262044, "708543", "{\n}", "2013-11-23T00:00:00", "05 12 43 52 55 10", null ] -, [ 440, "84BFA534-38CC-4912-A4BE-6C5718E04989", 440, 1385607655, "708543", 1385607655, "708543", "{\n}", "2013-11-27T00:00:00", "18 25 50 55 57 17", null ] -, [ 442, "4FDC7B73-BC13-4F98-9DD5-00B40EEF893A", 442, 1385866854, "708543", 1385866854, "708543", "{\n}", "2013-11-30T00:00:00", "05 26 44 45 57 29", null ] -, [ 444, "325D02BB-4FC5-4A32-A398-3A68C9C2DB69", 444, 1386212457, "708543", 1386212457, "708543", "{\n}", "2013-12-04T00:00:00", "06 09 11 31 44 25", null ] -, [ 446, "50AD8F90-A9BE-4390-8C78-FC00C4A81C76", 446, 1386471654, "708543", 1386471654, "708543", "{\n}", "2013-12-07T00:00:00", "13 20 32 45 48 17", null ] -, [ 448, "CC93F4A9-00A4-4525-BC38-9DE756831B28", 448, 1386817266, "708543", 1386817266, "708543", "{\n}", "2013-12-11T00:00:00", "01 10 13 18 19 27", null ] -, [ 450, "C003B8B1-CDB9-498C-9C7D-C4ECC78ED256", 450, 1387076495, "708543", 1387076495, "708543", "{\n}", "2013-12-14T00:00:00", "14 25 32 33 41 34", null ] -, [ 452, "C538153A-1685-4B6C-9A6E-A08F40474590", 452, 1387422065, "708543", 1387422065, "708543", "{\n}", "2013-12-18T00:00:00", "07 24 37 39 40 01", null ] -, [ 454, "393859FA-4F84-4694-9404-8373A0A70B92", 454, 1387724454, "708543", 1387724454, "708543", "{\n}", "2013-12-21T00:00:00", "25 36 40 45 51 08", null ] -, [ 456, "DEA4DB56-E3E5-492D-8F26-8F121A050F39", 456, 1388026855, "708543", 1388026855, "708543", "{\n}", "2013-12-25T00:00:00", "23 28 38 39 56 32", null ] -, [ 458, "2E898FF5-500D-46BB-B25E-715243B6D85F", 458, 1388286097, "708543", 1388286097, "708543", "{\n}", "2013-12-28T00:00:00", "08 35 44 51 56 18", null ] -, [ 460, "869B299A-CB43-42BA-96B5-0C52C7B2948B", 460, 1388631654, "708543", 1388631654, "708543", "{\n}", "2014-01-01T00:00:00", "15 24 40 48 52 23", null ] -, [ 462, "6992200D-6A41-45F0-B6CE-D0DBB8C067F3", 462, 1388890864, "708543", 1388890864, "708543", "{\n}", "2014-01-04T00:00:00", "19 20 37 41 58 14", null ] -, [ 464, "CB8287E5-7897-4CFA-8EA7-364CDE173A5C", 464, 1389236455, "708543", 1389236455, "708543", "{\n}", "2014-01-08T00:00:00", "10 28 39 47 58 22", null ] -, [ 466, "06973D85-FD1A-4DB3-95B0-56A307538275", 466, 1389495704, "708543", 1389495704, "708543", "{\n}", "2014-01-11T00:00:00", "10 15 33 48 54 34", null ] -, [ 468, "8FD5794D-0FD0-4164-AB47-EA69A2726DA2", 468, 1389841276, "708543", 1389841276, "708543", "{\n}", "2014-01-15T00:00:00", "07 08 09 24 29 25", null ] -, [ 470, "632FA9B1-6504-4745-A858-A4AD77142A73", 470, 1390100458, "708543", 1390100458, "708543", "{\n}", "2014-01-18T00:00:00", "13 14 19 31 38 25", null ] -, [ 472, "6B5C814C-3778-4C08-A8E8-14A2690DB4E1", 472, 1390446076, "708543", 1390446076, "708543", "{\n}", "2014-01-22T00:00:00", "01 02 07 09 55 29", "3" ] -, [ 474, "959EED5C-40DB-46A6-BA50-8C7F18F12B9B", 474, 1390705283, "708543", 1390705283, "708543", "{\n}", "2014-01-25T00:00:00", "08 12 18 55 57 02", "2" ] -, [ 476, "CF00D567-AD20-4773-98F0-D6F59CEBEB0A", 476, 1391050868, "708543", 1391050868, "708543", "{\n}", "2014-01-29T00:00:00", "11 23 28 32 47 20", "2" ] -, [ 478, "16039CD5-5D97-462D-80B9-C7E57C4219E1", 478, 1391310055, "708543", 1391310055, "708543", "{\n}", "2014-02-01T00:00:00", "05 12 15 27 38 07", "2" ] -, [ 480, "7662D28E-81B6-4F64-9D1D-928B22ADAAD8", 480, 1391655655, "708543", 1391655655, "708543", "{\n}", "2014-02-05T00:00:00", "08 17 32 57 59 24", "3" ] -, [ 482, "E2CD3E79-8E4D-49A1-AC4E-75678402B48D", 482, 1391914866, "708543", 1391914866, "708543", "{\n}", "2014-02-08T00:00:00", "24 25 34 37 54 29", "2" ] -, [ 484, "3F39F11A-2E74-44CF-BDD9-7E456C37AC50", 484, 1392260446, "708543", 1392260446, "708543", "{\n}", "2014-02-12T00:00:00", "36 44 49 52 57 01", "2" ] -, [ 486, "38A5578D-6E92-430E-9674-0255200D4928", 486, 1392519644, "708543", 1392519644, "708543", "{\n}", "2014-02-15T00:00:00", "02 09 14 21 23 03", "3" ] -, [ 488, "5A0B4133-BE25-4EDE-9686-3F3939CE78B1", 488, 1392865281, "708543", 1392865281, "708543", "{\n}", "2014-02-19T00:00:00", "01 17 35 49 54 34", "3" ] -, [ 490, "72286024-9A34-4F95-85BD-71C9ABFD2765", 490, 1393124475, "708543", 1393124475, "708543", "{\n}", "2014-02-22T00:00:00", "02 03 13 14 54 04", "5" ] -, [ 492, "06333392-9CB1-4436-B6DB-E0A8A264B065", 492, 1393470054, "708543", 1393470054, "708543", "{\n}", "2014-02-26T00:00:00", "11 12 17 38 42 02", "2" ] -, [ 494, "A96E282B-1D16-443C-9506-FE865E27E0BF", 494, 1393729254, "708543", 1393729254, "708543", "{\n}", "2014-03-01T00:00:00", "03 08 25 30 47 13", "4" ] -, [ 496, "DF678B5A-F304-494C-AEC5-39922FA6FB03", 496, 1394074812, "708543", 1394074812, "708543", "{\n}", "2014-03-05T00:00:00", "03 07 09 26 54 19", "2" ] -, [ 498, "B5F25102-9FFD-4696-B916-73870F17DFBA", 498, 1394334054, "708543", 1394334054, "708543", "{\n}", "2014-03-08T00:00:00", "10 14 24 32 41 30", "2" ] -, [ 500, "C38A2D61-6CC5-430E-BB3A-37446F6C7263", 500, 1394679655, "708543", 1394679655, "708543", "{\n}", "2014-03-12T00:00:00", "14 15 28 37 54 10", "2" ] -, [ 502, "079EA7C4-965C-4E3D-9836-9B92C6BE73E5", 502, 1394938854, "708543", 1394938854, "708543", "{\n}", "2014-03-15T00:00:00", "02 05 34 51 58 09", "4" ] -, [ 504, "FD32D0FB-4D24-4317-B944-784A4EC18BF5", 504, 1395284455, "708543", 1395284455, "708543", "{\n}", "2014-03-19T00:00:00", "02 19 23 34 43 14", "2" ] -, [ 506, "2B7067E1-A09E-48C4-9798-5A8FCF035ACE", 506, 1395543655, "708543", 1395543655, "708543", "{\n}", "2014-03-22T00:00:00", "13 28 31 55 58 15", "2" ] -, [ 508, "30FF8647-C283-41A2-9DCC-A8D7384F1EB7", 508, 1395889255, "708543", 1395889255, "708543", "{\n}", "2014-03-26T00:00:00", "28 33 41 44 59 21", "2" ] -, [ 510, "739C3709-5735-4AF0-A580-719A06580CCB", 510, 1396148444, "708543", 1396148444, "708543", "{\n}", "2014-03-29T00:00:00", "02 03 12 27 38 17", "2" ] -, [ 512, "3CF1F0CA-F90D-48A7-96BB-FAD65E3CC086", 512, 1396494070, "708543", 1396494070, "708543", "{\n}", "2014-04-02T00:00:00", "08 13 19 22 53 24", "2" ] -, [ 514, "9F59ED34-C239-4AE8-8678-09B3D2D039B1", 514, 1396753245, "708543", 1396753245, "708543", "{\n}", "2014-04-05T00:00:00", "11 21 26 33 34 29", "5" ] -, [ 516, "6D64F1A9-4039-4193-A9D2-951048F7C1AC", 516, 1397098855, "708543", 1397098855, "708543", "{\n}", "2014-04-09T00:00:00", "09 14 44 48 49 29", "2" ] -, [ 518, "C20FBD64-77FB-497C-86D6-9C66C29AA034", 518, 1397358054, "708543", 1397358054, "708543", "{\n}", "2014-04-12T00:00:00", "14 26 45 54 55 20", "2" ] -, [ 520, "82F04093-BAEB-4764-9D9C-575EA9E17E3E", 520, 1397703676, "708543", 1397703676, "708543", "{\n}", "2014-04-16T00:00:00", "34 39 42 44 59 08", "3" ] -, [ 522, "C0C4BB31-08F9-4FC8-8A5C-D3CD57B7A5C9", 522, 1397962855, "708543", 1397962855, "708543", "{\n}", "2014-04-19T00:00:00", "05 06 29 35 51 21", "5" ] -, [ 524, "4AB21E57-4F08-48A7-BAAE-E39DE7770947", 524, 1398308454, "708543", 1398308454, "708543", "{\n}", "2014-04-23T00:00:00", "19 25 29 36 48 12", "4" ] -, [ 526, "1B2FF91E-4DF8-45F7-9983-CCBF68599DD0", 526, 1398567654, "708543", 1398567654, "708543", "{\n}", "2014-04-26T00:00:00", "03 07 22 30 33 20", "3" ] -, [ 528, "41BBC522-A603-4A2D-BFBD-F45B00F2D96A", 528, 1398913245, "708543", 1398913245, "708543", "{\n}", "2014-04-30T00:00:00", "02 09 11 19 50 32", "3" ] -, [ 530, "487D1FF3-303E-4D43-BD9F-7FBCEEA53A78", 530, 1399172525, "708543", 1399172525, "708543", "{\n}", "2014-05-03T00:00:00", "05 15 16 46 49 26", "4" ] -, [ 532, "C096BBA0-25ED-4CAF-9872-27CDF41C3AB2", 532, 1399518165, "708543", 1399518165, "708543", "{\n}", "2014-05-07T00:00:00", "17 29 31 48 49 34", "2" ] -, [ 534, "5A46495E-2CB7-4C99-A3FF-6B829658680B", 534, 1399777318, "708543", 1399777318, "708543", "{\n}", "2014-05-10T00:00:00", "04 31 41 47 55 01", "2" ] -, [ 536, "44B9F291-72B1-4456-B88A-AF46130AB86A", 536, 1400122951, "708543", 1400122951, "708543", "{\n}", "2014-05-14T00:00:00", "07 33 39 52 55 33", "3" ] -, [ 538, "3BA9206D-AA33-4EED-8E23-3B022B7E06EC", 538, 1400382119, "708543", 1400382119, "708543", "{\n}", "2014-05-17T00:00:00", "23 32 39 47 49 22", "3" ] -, [ 540, "10E769B9-E7B7-4048-9302-B596CD6278DD", 540, 1400727781, "708543", 1400727781, "708543", "{\n}", "2014-05-21T00:00:00", "04 20 34 39 58 31", "5" ] -, [ 542, "1F143612-927F-4772-8B81-B62E2F26990C", 542, 1400986845, "708543", 1400986845, "708543", "{\n}", "2014-05-24T00:00:00", "15 16 28 49 55 18", "2" ] -, [ 544, "75647DDC-DE92-4874-A22C-453F73FBC94F", 544, 1401332519, "708543", 1401332519, "708543", "{\n}", "2014-05-28T00:00:00", "02 24 28 32 59 25", "3" ] -, [ 546, "07092E27-EB7F-4781-A41C-56FC4509332C", 546, 1401591729, "708543", 1401591729, "708543", "{\n}", "2014-05-31T00:00:00", "15 27 31 34 48 01", "2" ] -, [ 548, "DBB2A4CA-C19A-4E21-9934-3774E0CCED88", 548, 1402024048, "708543", 1402024048, "708543", "{\n}", "2014-06-04T00:00:00", "01 07 10 22 49 24", "3" ] -, [ 550, "D18F3C84-81FD-46FB-A1FC-16090A6305AC", 550, 1402196528, "708543", 1402196528, "708543", "{\n}", "2014-06-07T00:00:00", "28 30 35 58 59 15", "2" ] -, [ 552, "3B509634-0F92-481A-8A92-B3DCD47BDB27", 552, 1402542055, "708543", 1402542055, "708543", "{\n}", "2014-06-11T00:00:00", "14 18 25 33 49 23", "5" ] -, [ 554, "913D60FF-B8B0-400A-91CB-8C588A4D0BB3", 554, 1402844528, "708543", 1402844528, "708543", "{\n}", "2014-06-14T00:00:00", "09 33 42 45 54 30", "3" ] -, [ 556, "54661135-06E8-401F-92FD-07186ACC9C1B", 556, 1403233446, "708543", 1403233446, "708543", "{\n}", "2014-06-18T00:00:00", "06 09 29 52 59 07", "3" ] -, [ 558, "FD92596C-A65C-4C4D-B1BF-79E9E47619A9", 558, 1403406138, "708543", 1403406138, "708543", "{\n}", "2014-06-21T00:00:00", "05 06 37 41 54 26", "3" ] -, [ 560, "4003D691-5309-4F30-B2B0-E19E03AAC642", 560, 1403751739, "708543", 1403751739, "708543", "{\n}", "2014-06-25T00:00:00", "10 20 25 50 53 35", "4" ] -, [ 562, "52E50253-BF74-40B5-9581-682B443841D2", 562, 1404356454, "708543", 1404356454, "708543", "{\n}", "2014-07-02T00:00:00", "08 18 45 53 58 35", "2" ] -, [ 564, "8CB66308-6F25-476F-95DE-A7C8E1D621CD", 564, 1404615645, "708543", 1404615645, "708543", "{\n}", "2014-07-05T00:00:00", "24 34 36 57 58 11", "4" ] -, [ 566, "0D0AAA69-2F7A-4D5F-9DF3-C9701C7BAC22", 566, 1404961255, "708543", 1404961255, "708543", "{\n}", "2014-07-09T00:00:00", "09 25 42 55 57 14", "2" ] -, [ 568, "55FE34B2-623D-4241-A89E-308A84B4C74B", 568, 1405220454, "708543", 1405220454, "708543", "{\n}", "2014-07-12T00:00:00", "02 03 07 23 51 26", "2" ] -, [ 570, "FCFDF56B-4E14-49E5-867F-C2E4AB445A9F", 570, 1405582531, "708543", 1405582531, "708543", "{\n}", "2014-07-16T00:00:00", "05 15 18 26 32 35", "3" ] -, [ 572, "1716855F-F638-4C7E-8B8D-8EF7F73B5B06", 572, 1405825244, "708543", 1405825244, "708543", "{\n}", "2014-07-19T00:00:00", "10 17 25 45 53 09", "2" ] -, [ 574, "7D6898C6-01D5-4782-95BA-C2749ADFE9BC", 574, 1406170855, "708543", 1406170855, "708543", "{\n}", "2014-07-23T00:00:00", "04 10 12 22 31 03", "5" ] -, [ 576, "D62285D6-7C01-4C90-B7A9-C4D14752E119", 576, 1406430095, "708543", 1406430095, "708543", "{\n}", "2014-07-26T00:00:00", "24 28 30 38 39 16", "2" ] -, [ 578, "394E9921-468B-4E29-B772-59A0C54F5492", 578, 1406775657, "708543", 1406775657, "708543", "{\n}", "2014-07-30T00:00:00", "13 30 42 49 53 29", "3" ] -, [ 580, "284B0E05-5283-488D-AFE0-5B256E9D81C0", 580, 1407034866, "708543", 1407034866, "708543", "{\n}", "2014-08-02T00:00:00", "12 26 44 46 47 29", "2" ] -, [ 582, "62B6DC77-A166-4553-8D32-8A8F7840EC9F", 582, 1407380456, "708543", 1407380456, "708543", "{\n}", "2014-08-06T00:00:00", "01 08 24 28 49 24", "5" ] -, [ 584, "B5ACA65E-F5FE-4764-8138-2C700D050E05", 584, 1407639655, "708543", 1407639655, "708543", "{\n}", "2014-08-09T00:00:00", "03 12 31 34 51 24", "2" ] -, [ 586, "FB356DBD-E3D3-465F-8A17-C7465009E078", 586, 1407985265, "708543", 1407985265, "708543", "{\n}", "2014-08-13T00:00:00", "08 37 39 40 52 24", "2" ] -, [ 588, "1AADCEC8-EF2A-47A0-9508-69E2D0A25C21", 588, 1408244445, "708543", 1408244445, "708543", "{\n}", "2014-08-16T00:00:00", "07 08 17 48 59 09", "2" ] -, [ 590, "ADB2B268-7B1F-4A3C-B252-DF4298ED22F6", 590, 1408590066, "708543", 1408590066, "708543", "{\n}", "2014-08-20T00:00:00", "04 08 21 38 40 03", "2" ] -, [ 592, "F1DB5012-8A45-4E79-B123-79C3F17AE2DA", 592, 1408849266, "708543", 1408849266, "708543", "{\n}", "2014-08-23T00:00:00", "28 32 35 36 52 31", "3" ] -, [ 594, "B33326D6-1FA2-4719-9888-9C6E88EBFFEA", 594, 1409194865, "708543", 1409194865, "708543", "{\n}", "2014-08-27T00:00:00", "17 24 26 45 46 19", "3" ] -, [ 596, "4A22925B-EB06-46B1-BB68-407C5E31D5E7", 596, 1409454066, "708543", 1409454066, "708543", "{\n}", "2014-08-30T00:00:00", "05 28 31 52 59 27", "2" ] -, [ 598, "7858F42B-EB4E-408A-A84B-5AEBA66AA3DF", 598, 1409886079, "708543", 1409886079, "708543", "{\n}", "2014-09-03T00:00:00", "02 16 43 45 51 35", "3" ] -, [ 600, "97430822-1C96-46B9-92BF-86AB1BA10905", 600, 1410058856, "708543", 1410058856, "708543", "{\n}", "2014-09-06T00:00:00", "09 29 31 43 50 18", "2" ] -, [ 602, "CABB0AFD-C37C-4E49-B8C6-7D5F86DCE1A7", 602, 1410404493, "708543", 1410404493, "708543", "{\n}", "2014-09-10T00:00:00", "02 14 39 40 43 13", "5" ] -, [ 604, "D1EB641C-B9E7-4958-BFA3-6A6E353EA51A", 604, 1410857379, "708543", 1410857379, "708543", "{\n}", "2014-09-13T00:00:00", "01 06 16 37 53 27", "3" ] -, [ 606, "68358BCC-7ACC-4505-91BA-33741DE045AA", 606, 1411009291, "708543", 1411009291, "708543", "{\n}", "2014-09-17T00:00:00", "18 25 36 48 50 23", "2" ] -, [ 608, "58DCE448-E60B-4D6A-A67C-0B31304E01D4", 608, 1411484653, "708543", 1411484653, "708543", "{\n}", "2014-09-20T00:00:00", "22 23 30 37 39 16", "4" ] -, [ 610, "A125446B-3200-4E26-8E30-D3E0D11AEEA8", 610, 1411741517, "708543", 1411741517, "708543", "{\n}", "2014-09-24T00:00:00", "07 14 21 24 41 26", "4" ] -, [ 612, "44FDD0E0-D854-4CBB-A674-4E748BB851E6", 612, 1411873297, "708543", 1411873297, "708543", "{\n}", "2014-09-27T00:00:00", "02 11 35 52 54 13", "3" ] -, [ 614, "833921F3-DA63-4F64-8435-FE0FF6907174", 614, 1412218893, "708543", 1412218893, "708543", "{\n}", "2014-10-01T00:00:00", "01 04 18 20 45 07", "2" ] -, [ 616, "EE6B6F59-37D7-45CC-BE81-AA2F1F308F2C", 616, 1412521327, "708543", 1412521327, "708543", "{\n}", "2014-10-04T00:00:00", "13 18 24 25 33 31", "2" ] -, [ 618, "F8E7AC21-2BDD-4DEE-97A9-7228CF621E0A", 618, 1412823672, "708543", 1412823672, "708543", "{\n}", "2014-10-08T00:00:00", "05 16 31 46 50 18", "3" ] -, [ 620, "E8BE2206-8EF5-4CBA-BC14-97458F655875", 620, 1413082889, "708543", 1413082889, "708543", "{\n}", "2014-10-11T00:00:00", "10 19 37 38 39 28", "2" ] -, [ 622, "36FCC416-19AC-49D7-A6A5-6F2B02B14037", 622, 1413428491, "708543", 1413428491, "708543", "{\n}", "2014-10-15T00:00:00", "05 07 19 27 28 20", "2" ] -, [ 624, "4DB598EB-4512-4085-AB52-B31451700CE4", 624, 1413687689, "708543", 1413687689, "708543", "{\n}", "2014-10-18T00:00:00", "20 26 27 36 54 19", "2" ] -, [ 626, "D8A3E583-5FAB-4687-9C12-DF66BC25D1A1", 626, 1414033290, "708543", 1414033290, "708543", "{\n}", "2014-10-22T00:00:00", "29 30 40 42 50 16", "2" ] -, [ 628, "94A238A4-0D81-4904-93F0-94206E2A507D", 628, 1414292491, "708543", 1414292491, "708543", "{\n}", "2014-10-25T00:00:00", "06 10 51 54 57 12", "2" ] -, [ 630, "6A101A82-36BA-47CD-965F-CD0E9DC46DA1", 630, 1414638069, "708543", 1414638069, "708543", "{\n}", "2014-10-29T00:00:00", "25 28 48 57 59 16", "3" ] -, [ 632, "C216F750-2E31-4F60-9188-F2412BF65C5C", 632, 1414897288, "708543", 1414897288, "708543", "{\n}", "2014-11-01T00:00:00", "01 03 13 25 38 17", "2" ] -, [ 634, "C2DD204C-8C36-4F3A-826C-93A4B5FDA4B9", 634, 1415329396, "708543", 1415329396, "708543", "{\n}", "2014-11-05T00:00:00", "02 11 19 21 42 34", "3" ] -, [ 636, "10664F33-06F4-44A8-ACFC-B4577D5EC5EA", 636, 1415502092, "708543", 1415502092, "708543", "{\n}", "2014-11-08T00:00:00", "09 19 33 38 54 15", "3" ] -, [ 638, "412214CC-C4CC-4993-AA11-7F6FAE4060AF", 638, 1415847687, "708543", 1415847687, "708543", "{\n}", "2014-11-12T00:00:00", "37 39 51 52 55 11", "3" ] -, [ 640, "8590E6C5-15BF-42B1-A4F6-6C15C6C21B8B", 640, 1416193376, "708543", 1416193376, "708543", "{\n}", "2014-11-15T00:00:00", "13 16 33 35 51 28", "2" ] -, [ 642, "A8BAE147-EA3C-4252-ABE0-06641E9414C2", 642, 1416452533, "708543", 1416452533, "708543", "{\n}", "2014-11-19T00:00:00", "06 36 38 48 51 17", "2" ] -, [ 644, "8856B080-2BF0-4C94-919F-CAD7D14D394B", 644, 1416711688, "708543", 1416711688, "708543", "{\n}", "2014-11-22T00:00:00", "23 49 53 54 57 35", "2" ] -, [ 646, "EDE28D34-E74E-4EB6-AA31-B7E291380862", 646, 1417057290, "708543", 1417057290, "708543", "{\n}", "2014-11-26T00:00:00", "16 17 22 46 54 35", "5" ] -, [ 648, "492FE8DB-DF45-46CC-98A2-75020B7AE310", 648, 1417316490, "708543", 1417316490, "708543", "{\n}", "2014-11-29T00:00:00", "13 24 30 42 48 27", "2" ] -, [ 650, "8A284F29-40F3-4934-80C2-DEC138E688C4", 650, 1417662093, "708543", 1417662093, "708543", "{\n}", "2014-12-03T00:00:00", "25 30 32 46 54 26", "3" ] -, [ 652, "6B8C9416-B679-4062-AE0E-2F5D4DE63AAB", 652, 1417921272, "708543", 1417921272, "708543", "{\n}", "2014-12-06T00:00:00", "12 15 22 43 49 14", "2" ] -, [ 654, "B5E65633-5DC5-41A9-A777-47BF48B5694F", 654, 1418266870, "708543", 1418266870, "708543", "{\n}", "2014-12-10T00:00:00", "34 44 48 54 55 10", "2" ] -, [ 656, "2078DFB3-E426-458F-B76C-8CF659E96CDD", 656, 1418526094, "708543", 1418526094, "708543", "{\n}", "2014-12-13T00:00:00", "05 13 28 43 55 33", "3" ] -, [ 658, "576E343A-594A-49F4-BAF2-320389AED2C8", 658, 1418871699, "708543", 1418871699, "708543", "{\n}", "2014-12-17T00:00:00", "22 31 38 47 48 15", "3" ] -, [ 660, "C5AF5FF2-DA14-4056-865F-7C7F55E705CB", 660, 1419130892, "708543", 1419130892, "708543", "{\n}", "2014-12-20T00:00:00", "14 15 19 31 56 05", "5" ] -, [ 662, "5E6A6652-C161-4DA4-9D8E-1791C9D0DDA5", 662, 1419476499, "708543", 1419476499, "708543", "{\n}", "2014-12-24T00:00:00", "11 12 46 47 50 22", "4" ] -, [ 664, "A973E6CD-C592-490A-A8B9-99597CFB0166", 664, 1419735679, "708543", 1419735679, "708543", "{\n}", "2014-12-27T00:00:00", "07 10 11 14 36 15", "2" ] -, [ 666, "852D9F3D-2D01-456C-97B3-323697723F5F", 666, 1420081293, "708543", 1420081293, "708543", "{\n}", "2014-12-31T00:00:00", "17 27 37 40 53 35", "2" ] -, [ 668, "3F7A2659-CCCC-4C35-BD86-0E3C025C9311", 668, 1420340499, "708543", 1420340499, "708543", "{\n}", "2015-01-03T00:00:00", "04 18 43 46 55 25", "3" ] -, [ 670, "434CE58A-723C-4C47-9D33-67064A0081B4", 670, 1420686097, "708543", 1420686097, "708543", "{\n}", "2015-01-07T00:00:00", "14 15 47 49 59 10", "2" ] -, [ 672, "C9C20E1B-B660-43F9-80EE-BFA56EB5ADFF", 672, 1420945292, "708543", 1420945292, "708543", "{\n}", "2015-01-10T00:00:00", "02 09 19 28 29 19", "5" ] -, [ 674, "60D4CBA8-C33C-4F8D-9A5F-A091A06EEE39", 674, 1421290892, "708543", 1421290892, "708543", "{\n}", "2015-01-14T00:00:00", "02 04 10 41 53 22", "5" ] -, [ 676, "96C3084D-A699-477E-940E-7540D2E079DD", 676, 1421550089, "708543", 1421550089, "708543", "{\n}", "2015-01-17T00:00:00", "15 16 23 27 36 09", "2" ] -, [ 678, "64D16892-1A8F-4BD3-AD08-0F12AF37DC5B", 678, 1421895752, "708543", 1421895752, "708543", "{\n}", "2015-01-21T00:00:00", "11 12 15 28 57 23", "4" ] -, [ 680, "9B98D299-2E89-45CC-9C20-CA9A9858401C", 680, 1422154888, "708543", 1422154888, "708543", "{\n}", "2015-01-24T00:00:00", "16 19 20 29 33 10", "2" ] -, [ 682, "C8B9F03E-D092-4B68-A882-060CC9A3D5A4", 682, 1422500493, "708543", 1422500493, "708543", "{\n}", "2015-01-28T00:00:00", "12 24 35 36 49 01", "5" ] -, [ 684, "2031E7C9-B0FA-43E5-A952-25686F49FE00", 684, 1422759691, "708543", 1422759691, "708543", "{\n}", "2015-01-31T00:00:00", "05 11 16 26 50 34", "2" ] -, [ 686, "B7216262-139E-4F1A-BA84-5DB845271DAE", 686, 1423105293, "708543", 1423105293, "708543", "{\n}", "2015-02-04T00:00:00", "24 36 51 52 56 22", "2" ] -, [ 688, "08D2F580-1207-45F6-A29F-7FE66620CD90", 688, 1423364488, "708543", 1423364488, "708543", "{\n}", "2015-02-07T00:00:00", "05 10 21 34 58 33", "5" ] -, [ 690, "DDF1543E-9A9B-4ACE-BAFE-8AB37973E90C", 690, 1423710069, "708543", 1423710069, "708543", "{\n}", "2015-02-11T00:00:00", "11 13 25 39 54 19", "3" ] -, [ 692, "435F62B2-DF03-4FB8-A8B8-52E5A75666D3", 692, 1423969290, "708543", 1423969290, "708543", "{\n}", "2015-02-14T00:00:00", "01 24 44 45 51 28", "2" ] -, [ 694, "3156E6C0-2C89-45D1-9CD4-26C73005A7B3", 694, 1424314889, "708543", 1424314889, "708543", "{\n}", "2015-02-18T00:00:00", "01 09 29 32 49 22", "2" ] -, [ 696, "78AFD76F-A532-4015-821A-A6052893850A", 696, 1424574090, "708543", 1424574090, "708543", "{\n}", "2015-02-21T00:00:00", "10 14 18 34 51 26", "2" ] -, [ 698, "1958CB7F-4F9B-461B-9304-89D6C516BF36", 698, 1424919689, "708543", 1424919689, "708543", "{\n}", "2015-02-25T00:00:00", "17 19 21 32 39 08", "3" ] -, [ 700, "EDCD1F4D-DF40-4372-A354-00A3F20BA52E", 700, 1425178891, "708543", 1425178891, "708543", "{\n}", "2015-02-28T00:00:00", "11 17 25 28 46 12", "2" ] -, [ 702, "F1546B7C-472E-4965-8CF5-A60A2F488AEE", 702, 1425524491, "708543", 1425524491, "708543", "{\n}", "2015-03-04T00:00:00", "08 12 15 35 50 32", "2" ] -, [ 704, "B79C61A2-F6BE-45C7-A8E2-AF96CAF6BCA8", 704, 1425783779, "708543", 1425783779, "708543", "{\n}", "2015-03-07T00:00:00", "34 36 38 42 50 33", "4" ] -, [ 706, "65C41C93-2669-45C8-BF86-9583480708E0", 706, 1426129290, "708543", 1426129290, "708543", "{\n}", "2015-03-11T00:00:00", "11 24 31 40 44 27", "2" ] -, [ 708, "21E7CFAA-5C8C-4714-B690-23C86D9DD12F", 708, 1426388488, "708543", 1426388488, "708543", "{\n}", "2015-03-14T00:00:00", "08 14 39 46 47 18", "2" ] -, [ 710, "82F2F807-EC9F-42E1-B804-AEEABBC72D9E", 710, 1426734087, "708543", 1426734087, "708543", "{\n}", "2015-03-18T00:00:00", "14 25 30 33 47 08", "2" ] -, [ 712, "47FE9CA5-F869-4345-A69D-5E941CF5FFBB", 712, 1426993286, "708543", 1426993286, "708543", "{\n}", "2015-03-21T00:00:00", "11 16 30 38 42 07", "4" ] -, [ 714, "54EE26F7-D934-48B1-8BA1-B3285B3FBC19", 714, 1427338886, "708543", 1427338886, "708543", "{\n}", "2015-03-25T00:00:00", "07 19 23 50 54 14", "2" ] -, [ 716, "9934E265-895E-421B-8ACC-BDE393F70FF3", 716, 1427598086, "708543", 1427598086, "708543", "{\n}", "2015-03-28T00:00:00", "02 04 06 12 38 17", "3" ] -, [ 718, "36663E0C-0277-4255-B11C-2F697A9B8525", 718, 1427943687, "708543", 1427943687, "708543", "{\n}", "2015-04-01T00:00:00", "02 30 33 39 44 01", "3" ] -, [ 720, "C0E1AACD-A900-4A28-AA88-B712DB48FCC0", 720, 1428202890, "708543", 1428202890, "708543", "{\n}", "2015-04-04T00:00:00", "33 39 40 41 54 28", "3" ] -, [ 722, "92E8465A-5CDF-4BED-83FA-7BD027280751", 722, 1428548489, "708543", 1428548489, "708543", "{\n}", "2015-04-08T00:00:00", "01 19 45 46 58 29", "2" ] -, [ 724, "E6490D86-EF2D-4C79-A2E1-DCD02F7215BF", 724, 1428807687, "708543", 1428807687, "708543", "{\n}", "2015-04-11T00:00:00", "01 12 32 42 58 12", "2" ] -, [ 726, "02CAC888-050D-48A5-868C-B37CC88EEC42", 726, 1429153308, "708543", 1429153308, "708543", "{\n}", "2015-04-15T00:00:00", "01 16 21 29 40 30", "3" ] -, [ 728, "81E5718B-6F5D-49A2-B3A6-E8C5A8C49458", 728, 1429412486, "708543", 1429412486, "708543", "{\n}", "2015-04-18T00:00:00", "13 22 23 29 31 17", "3" ] -, [ 730, "4ED36D51-0CD1-403B-BF6F-474E76D12866", 730, 1429758092, "708543", 1429758092, "708543", "{\n}", "2015-04-22T00:00:00", "10 14 25 39 53 18", "2" ] -, [ 732, "1E602E88-5A04-4E97-81F4-1AC8E0F65593", 732, 1430017289, "708543", 1430017289, "708543", "{\n}", "2015-04-25T00:00:00", "21 33 35 38 45 12", "2" ] -, [ 734, "7E163D25-1D6C-41EC-98F3-FCB6323BBE21", 734, 1430362890, "708543", 1430362890, "708543", "{\n}", "2015-04-29T00:00:00", "01 26 34 38 51 06", "3" ] -, [ 736, "6AE4172D-2045-4718-875A-B5FF15FF15D7", 736, 1430622097, "708543", 1430622097, "708543", "{\n}", "2015-05-02T00:00:00", "02 06 11 30 31 33", "3" ] -, [ 738, "C36A8A54-82C5-48FE-AA7E-570DB8ED39AD", 738, 1430967717, "708543", 1430967717, "708543", "{\n}", "2015-05-06T00:00:00", "23 24 27 39 41 30", "5" ] -, [ 740, "3CF64B67-5986-4A6E-86D2-3D3A75006C2D", 740, 1431226891, "708543", 1431226891, "708543", "{\n}", "2015-05-09T00:00:00", "04 15 17 35 58 17", "3" ] -, [ 742, "21A93C94-A9CF-4C66-8752-DB70A3C877E9", 742, 1431572489, "708543", 1431572489, "708543", "{\n}", "2015-05-13T00:00:00", "01 25 29 31 47 07", "3" ] -, [ 744, "852204B9-3070-4BB2-93D6-89525B2A6A88", 744, 1431831689, "708543", 1431831689, "708543", "{\n}", "2015-05-16T00:00:00", "24 29 38 48 52 32", "2" ] -, [ 746, "C58E93C9-ED63-4A6B-8E70-DB0E572779DF", 746, 1432177299, "708543", 1432177299, "708543", "{\n}", "2015-05-20T00:00:00", "01 12 28 35 44 25", "3" ] -, [ 748, "4BA1309D-2E3A-47C7-BCB0-D5E8AACF8A23", 748, 1432436488, "708543", 1432436488, "708543", "{\n}", "2015-05-23T00:00:00", "09 15 17 31 43 16", "4" ] -, [ 750, "1BFBA543-A31E-4A61-9EE2-842B252E1A49", 750, 1432782091, "708543", 1432782091, "708543", "{\n}", "2015-05-27T00:00:00", "08 15 34 53 59 23", "2" ] -, [ 752, "A176D8B7-2B06-4638-B917-DFF229554FC5", 752, 1433041293, "708543", 1433041293, "708543", "{\n}", "2015-05-30T00:00:00", "08 09 25 56 57 22", "2" ] -, [ 754, "9B16EFF0-1C1A-43E1-89D0-0A138591BF89", 754, 1433386892, "708543", 1433386892, "708543", "{\n}", "2015-06-03T00:00:00", "06 08 13 37 40 11", "2" ] -, [ 756, "D2B7FDF6-0C3C-4BA6-8AE3-3EDD2D3554B9", 756, 1433646129, "708543", 1433646129, "708543", "{\n}", "2015-06-06T00:00:00", "08 13 18 27 43 15", "4" ] -, [ 758, "7535E4D2-583F-4096-8C62-BF639B1F0C4F", 758, 1433991688, "708543", 1433991688, "708543", "{\n}", "2015-06-10T00:00:00", "31 32 48 49 53 25", "2" ] -, [ 760, "87226083-EDDC-40D5-AC6E-2E17E8F7DAF1", 760, 1434250895, "708543", 1434250895, "708543", "{\n}", "2015-06-13T00:00:00", "29 41 48 52 54 29", "2" ] -, [ 762, "D9A556D7-FAF0-4451-A6D9-8E7ABAAF75F1", 762, 1434596511, "708543", 1434596511, "708543", "{\n}", "2015-06-17T00:00:00", "20 21 22 41 54 07", "3" ] -, [ 764, "0B4B4E43-2914-4252-9B4D-445656DD001E", 764, 1434855712, "708543", 1434855712, "708543", "{\n}", "2015-06-20T00:00:00", "09 10 16 20 57 15", "2" ] -, [ 766, "402F6B05-3B40-4839-B20E-4C86605592EA", 766, 1435201309, "708543", 1435201309, "708543", "{\n}", "2015-06-24T00:00:00", "03 05 10 22 32 07", "4" ] -, [ 768, "85C14851-24B0-4482-8610-DB5318822E47", 768, 1435460508, "708543", 1435460508, "708543", "{\n}", "2015-06-27T00:00:00", "18 28 35 46 49 27", "5" ] -, [ 770, "F917646C-C9E4-4DD0-9705-1AE52C0DBEE2", 770, 1435806142, "708543", 1435806142, "708543", "{\n}", "2015-07-01T00:00:00", "07 24 26 31 41 25", "2" ] -, [ 772, "F39FD4CD-D959-462E-B398-9A813FA9128A", 772, 1436065288, "708543", 1436065288, "708543", "{\n}", "2015-07-04T00:00:00", "03 06 14 18 24 21", "3" ] -, [ 774, "53124F7D-90C3-4B9D-B7BB-A5DD90478C00", 774, 1436410928, "708543", 1436410928, "708543", "{\n}", "2015-07-08T00:00:00", "04 15 25 27 30 18", "3" ] -, [ 776, "3B86E5CC-7CFA-4329-A914-E0BCBA3B017F", 776, 1436670069, "708543", 1436670069, "708543", null, "2015-07-11T00:00:00", "11 39 46 52 54 03", "2" ] -, [ 777, "4D234C5C-F376-4344-BD6D-A5770CD56A1F", 777, 1437015729, "708543", 1437015729, "708543", null, "2015-07-15T00:00:00", "13 16 34 45 50 11", "2" ] -, [ 778, "24EE016C-7F9D-4E0D-AA08-C4AF54E66F11", 778, 1437274885, "708543", 1437274885, "708543", null, "2015-07-18T00:00:00", "06 37 39 45 55 33", "3" ] -, [ 779, "C9C2B6CC-06CB-4F01-9281-7E4A8C43FB8E", 779, 1437620486, "708543", 1437620486, "708543", null, "2015-07-22T00:00:00", "12 31 43 44 57 11", "2" ] -, [ 780, "CC90B341-400A-4806-BBAF-E8E327598BD2", 780, 1437879687, "708543", 1437879687, "708543", null, "2015-07-25T00:00:00", "27 29 34 41 44 02", "3" ] -, [ 781, "E512BA46-7C58-41C7-9DBD-2457E9029D67", 781, 1438225285, "708543", 1438225285, "708543", null, "2015-07-29T00:00:00", "04 22 27 28 52 35", "3" ] -, [ 782, "10064E9F-AD64-429D-84F8-E8D410526A6F", 782, 1438484508, "708543", 1438484508, "708543", null, "2015-08-01T00:00:00", "07 13 24 49 57 15", "3" ] -, [ 783, "C787A37A-573D-4859-87E7-119575F1D112", 783, 1438830107, "708543", 1438830107, "708543", null, "2015-08-05T00:00:00", "09 11 14 16 42 19", "2" ] -, [ 784, "DD6C5E0E-BD8D-4290-AA73-94E40E188200", 784, 1439089330, "708543", 1439089330, "708543", null, "2015-08-08T00:00:00", "09 34 48 52 54 15", "4" ] -, [ 785, "A3D0D844-6B97-4671-87DA-693740D7D8AF", 785, 1439434947, "708543", 1439434947, "708543", null, "2015-08-12T00:00:00", "08 13 29 38 52 28", "2" ] -, [ 786, "3728F12A-F565-4B44-8176-2EEF0D165955", 786, 1439694118, "708543", 1439694118, "708543", null, "2015-08-15T00:00:00", "03 13 17 42 52 24", "4" ] -, [ 787, "298DD735-4622-4189-8EE7-F86F90B5AFCE", 787, 1440039778, "708543", 1440039778, "708543", null, "2015-08-19T00:00:00", "06 08 43 48 50 07", "2" ] -, [ 788, "DA91602B-3A63-4F41-A4E9-2CBF1168AE59", 788, 1440298930, "708543", 1440298930, "708543", null, "2015-08-22T00:00:00", "04 12 14 21 55 07", "4" ] -, [ 789, "2529F7C9-6E07-4C91-B535-DF2BEFDE2D56", 789, 1440644516, "708543", 1440644516, "708543", null, "2015-08-26T00:00:00", "02 22 32 45 56 12", "5" ] -, [ 790, "97C9829B-CEEE-4118-A38B-F7B7F79C31EF", 790, 1440959254, "708543", 1440959254, "708543", null, "2015-08-29T00:00:00", "18 21 25 28 29 16", "2" ] -, [ 791, "3EF82611-85F8-4A8A-8E3A-AA1FD0317354", 791, 1441249319, "708543", 1441249319, "708543", null, "2015-09-02T00:00:00", "17 22 30 46 56 16", "3" ] -, [ 792, "63CC0BFD-0878-4D37-9699-69D02473AA08", 792, 1441508507, "708543", 1441508507, "708543", null, "2015-09-05T00:00:00", "10 16 18 29 45 19", "2" ] -, [ 793, "73962F5A-8EC6-41F9-B0D0-13D7E9F944C4", 793, 1441854115, "708543", 1441854115, "708543", null, "2015-09-09T00:00:00", "44 45 47 50 51 08", "2" ] -, [ 794, "42753DF4-07BE-4C30-A721-B2CF0CCDB7CD", 794, 1442113307, "708543", 1442113307, "708543", null, "2015-09-12T00:00:00", "02 03 13 16 35 27", "3" ] -, [ 795, "56B46B8A-B108-42E4-9A38-24C56DE66CE6", 795, 1442458906, "708543", 1442458906, "708543", null, "2015-09-16T00:00:00", "05 07 24 31 39 07", "3" ] -, [ 796, "CDF7063C-D520-4F5D-861A-96755805F6F4", 796, 1442847785, "708543", 1442847785, "708543", null, "2015-09-19T00:00:00", "12 17 26 43 48 24", "2" ] -, [ 797, "1A936092-357A-40DD-B18B-4747851BBE87", 797, 1443063706, "708543", 1443063706, "708543", null, "2015-09-23T00:00:00", "08 29 41 51 58 05", "2" ] -, [ 798, "A06BDED2-3FEB-40F0-89A4-2CAF9B0A2858", 798, 1443322914, "708543", 1443322914, "708543", null, "2015-09-26T00:00:00", "23 31 42 50 57 05", "3" ] -, [ 799, "DB03982B-C76B-4404-977C-C9EEA3200274", 799, 1443668505, "708543", 1443668505, "708543", null, "2015-09-30T00:00:00", "21 39 40 55 59 17", "3" ] -, [ 800, "FABF6C69-E0F5-4F46-8BE0-3CA7766831D0", 800, 1443927709, "708543", 1443927709, "708543", null, "2015-10-03T00:00:00", "06 26 33 44 46 04", "2" ] -, [ 801, "43CA547E-F47A-453C-B0A9-26381E38A410", 801, 1444273306, "708543", 1444273306, "708543", null, "2015-10-07T00:00:00", "18 30 40 48 52 09", "3" ] -, [ 802, "400812A5-A956-48A9-91B1-F3D056E2F5C9", 802, 1444532485, "708543", 1444532485, "708543", null, "2015-10-10T00:00:00", "12 27 29 43 68 01", "2" ] -, [ 803, "7ABCEB8C-820F-4379-ADFA-0D590640A30C", 803, 1444878105, "708543", 1444878105, "708543", null, "2015-10-14T00:00:00", "15 20 29 31 40 01", "2" ] -, [ 804, "8B64AF93-027A-4027-A217-5D9DB0ED22AB", 804, 1445137286, "708543", 1445137286, "708543", null, "2015-10-17T00:00:00", "48 49 57 62 69 19", "3" ] -, [ 805, "465C206D-BEB3-4F5C-AF45-B7C60F736D1E", 805, 1445482905, "708543", 1445482905, "708543", null, "2015-10-21T00:00:00", "30 32 42 56 57 11", "4" ] -, [ 806, "0ECE9623-21D9-4E2B-B9F9-D67A3C284E73", 806, 1445742085, "708543", 1445742085, "708543", null, "2015-10-24T00:00:00", "20 31 56 60 64 02", "3" ] -, [ 807, "C22995CB-CBF3-4958-B80C-F9B1F8F9B9C5", 807, 1446087727, "708543", 1446087727, "708543", null, "2015-10-28T00:00:00", "04 54 56 62 63 10", "2" ] -, [ 808, "9DB950E1-1439-4B85-91F3-2D73EBECD6D4", 808, 1446346927, "708543", 1446346927, "708543", null, "2015-10-31T00:00:00", "09 20 25 47 68 07", "2" ] -, [ 809, "2C693FFD-694C-4DF3-AA8E-73C92ACD38AF", 809, 1446692509, "708543", 1446692509, "708543", null, "2015-11-04T00:00:00", "02 12 17 20 65 17", "4" ] -, [ 810, "D655D04B-E21B-4342-BD5D-C027CA362005", 810, 1446951708, "708543", 1446951708, "708543", null, "2015-11-07T00:00:00", "07 16 25 50 53 15", "2" ] -, [ 811, "7ECA2F66-0B64-493A-9FED-BC107E02287C", 811, 1447297309, "708543", 1447297309, "708543", null, "2015-11-11T00:00:00", "04 26 32 55 64 18", "3" ] -, [ 812, "1D579B1E-10CC-407E-B78A-9C5569D7A2F8", 812, 1447556507, "708543", 1447556507, "708543", null, "2015-11-14T00:00:00", "14 22 37 45 66 05", "3" ] -, [ 813, "5D32E728-9113-4C09-A8CD-BDAC99661DFD", 813, 1447902130, "708543", 1447902130, "708543", null, "2015-11-18T00:00:00", "17 40 41 46 69 06", "2" ] -, [ 814, "FCB4536B-1006-4F05-BC8D-AAFB9DF95A93", 814, 1448161306, "708543", 1448161306, "708543", null, "2015-11-21T00:00:00", "37 47 50 52 57 21", "3" ] -, [ 815, "21E5D4E6-B471-4928-9385-4CE1ECF18792", 815, 1448506906, "708543", 1448506906, "708543", null, "2015-11-25T00:00:00", "16 29 53 58 69 21", "2" ] -, [ 816, "B18D454A-B143-47CE-A4E8-EA78D6778190", 816, 1448766107, "708543", 1448766107, "708543", null, "2015-11-28T00:00:00", "02 06 47 66 67 02", "3" ] -, [ 817, "5F02EEC4-4E7F-49AD-A4AA-9BB594D1A47F", 817, 1449111727, "708543", 1449111727, "708543", null, "2015-12-02T00:00:00", "14 18 19 32 64 09", "2" ] -, [ 818, "FA5ECE8D-2868-4AA2-AE84-8272D4C1C3D9", 818, 1449370908, "708543", 1449370908, "708543", null, "2015-12-05T00:00:00", "13 27 33 47 68 13", "2" ] -, [ 819, "6655127F-8D2F-493B-8BE8-8A3D3073C305", 819, 1449716510, "708543", 1449716510, "708543", null, "2015-12-09T00:00:00", "07 10 16 46 56 01", "2" ] -, [ 820, "0B0D036D-AAA7-4012-98DA-45227548BADF", 820, 1449975728, "708543", 1449975728, "708543", null, "2015-12-12T00:00:00", "02 14 19 30 62 22", "2" ] -, [ 821, "DFA266CA-6A2B-4D42-8D07-283712CE541B", 821, 1450321306, "708543", 1450321306, "708543", null, "2015-12-16T00:00:00", "09 10 32 42 55 06", "2" ] -, [ 822, "D0D8AE46-E6E2-40BF-8C54-8E58523CC68A", 822, 1450580489, "708543", 1450580489, "708543", null, "2015-12-19T00:00:00", "28 30 41 59 68 10", "2" ] -, [ 823, "B473C73C-19F4-4C65-82A6-0E614998234A", 823, 1450926106, "708543", 1450926106, "708543", null, "2015-12-23T00:00:00", "16 38 55 63 67 25", "4" ] -, [ 824, "0525C88E-D2C8-46A4-8408-BA8E786DA09D", 824, 1451185308, "708543", 1451185308, "708543", null, "2015-12-26T00:00:00", "27 40 44 59 65 20", "2" ] -, [ 825, "C6064586-54E3-4309-8B9B-446C6041CB02", 825, 1451530913, "708543", 1451530913, "708543", null, "2015-12-30T00:00:00", "12 36 38 54 61 22", "3" ] -, [ 826, "F961863C-78F0-401C-9743-1D3791C3490A", 826, 1451790150, "708543", 1451790150, "708543", null, "2016-01-02T00:00:00", "05 06 15 29 42 10", "2" ] -, [ 827, "9D501501-D06D-46B2-9CAD-211B2F995F7A", 827, 1452135747, "708543", 1452135747, "708543", null, "2016-01-06T00:00:00", "02 11 47 62 63 17", "3" ] -, [ 828, "F5DBEFA5-54A6-4B9A-B2FB-267CD56F9835", 828, 1452394927, "708543", 1452394927, "708543", null, "2016-01-09T00:00:00", "16 19 32 34 57 13", "3" ] -, [ 829, "FDF34E6A-BA25-4D92-9DB7-7985BA3DCC2D", 829, 1452740568, "708543", 1452740568, "708543", null, "2016-01-13T00:00:00", "04 08 19 27 34 10", "2" ] -, [ 830, "7EE2F9FB-7673-4DDE-AB72-3651B3AF0444", 830, 1453042908, "708543", 1453042908, "708543", null, "2016-01-16T00:00:00", "03 51 52 61 64 06", "2" ] -, [ 831, "FACC0343-646E-4CA2-8974-C6A298077671", 831, 1453345367, "708543", 1453345367, "708543", null, "2016-01-20T00:00:00", "05 39 44 47 69 24", "5" ] -, [ 832, "F93CCC4F-D69B-4AAB-91EB-9D7446F7A2A0", 832, 1453604572, "708543", 1453604572, "708543", null, "2016-01-23T00:00:00", "22 32 34 40 69 19", "4" ] -, [ 833, "21149184-5031-4CDD-A832-1D34A2C7B623", 833, 1453950088, "708543", 1453950088, "708543", null, "2016-01-27T00:00:00", "03 12 40 52 67 21", "2" ] -, [ 834, "CEA18644-71EA-460A-B8E4-A93CF3581107", 834, 1454209328, "708543", 1454209328, "708543", null, "2016-01-30T00:00:00", "05 12 16 31 43 18", "4" ] -, [ 835, "8D0A23AA-4646-44B2-9A9E-4C25B15DB9E2", 835, 1454554910, "708543", 1454554910, "708543", null, "2016-02-03T00:00:00", "26 28 31 60 67 23", "3" ] -, [ 836, "A1E03B5F-A887-48BA-94AF-8BA6F270AA8A", 836, 1454814130, "708543", 1454814130, "708543", null, "2016-02-06T00:00:00", "04 13 31 36 52 08", "3" ] -, [ 837, "41D48664-EBDB-4E7E-8FAC-CD8F09739F73", 837, 1455159687, "708543", 1455159687, "708543", null, "2016-02-10T00:00:00", "02 03 40 50 62 05", "2" ] -, [ 838, "7AEB4B66-7747-46CC-9BEA-F25ACAE6C3C9", 838, 1455418987, "708543", 1455418987, "708543", null, "2016-02-13T00:00:00", "07 15 18 19 36 20", "2" ] -, [ 839, "6B8BE743-F22C-4A50-B2B5-380FD1D2F8EE", 839, 1455764517, "708543", 1455764517, "708543", null, "2016-02-17T00:00:00", "07 17 27 29 40 25", "2" ] -, [ 840, "C2CCCF1C-3F1A-405F-B70F-4C6C86655FEA", 840, 1456023770, "708543", 1456023770, "708543", null, "2016-02-20T00:00:00", "11 12 15 16 54 25", "5" ] -, [ 841, "94B1F83F-79A0-41B3-8482-9FC6C233E98B", 841, 1456369306, "708543", 1456369306, "708543", null, "2016-02-24T00:00:00", "21 31 64 65 67 05", "3" ] -, [ 842, "026D1654-83BA-4BF3-9C2E-66FD17B5357F", 842, 1456628570, "708543", 1456628570, "708543", null, "2016-02-27T00:00:00", "10 11 21 22 53 18", "3" ] -, [ 843, "32A2DD81-B860-4FCB-84AA-2CC4C5A2E4C6", 843, 1456974110, "708543", 1456974110, "708543", null, "2016-03-02T00:00:00", "12 13 44 52 62 06", "2" ] -, [ 844, "59C142D9-3DAB-4426-9AE6-CE628E5A454E", 844, 1457233373, "708543", 1457233373, "708543", null, "2016-03-05T00:00:00", "03 27 34 59 69 19", "2" ] -, [ 845, "3F050CD8-2598-4E91-8EB0-6672BE274C30", 845, 1457578898, "708543", 1457578898, "708543", null, "2016-03-09T00:00:00", "14 23 32 34 68 03", "3" ] -, [ 846, "D6246154-1A79-49D1-8AE3-D588EEF93CAD", 846, 1457838158, "708543", 1457838158, "708543", null, "2016-03-12T00:00:00", "11 28 50 57 62 23", "2" ] -, [ 847, "B4ADA05D-A321-4010-A151-3E00A3EC9E27", 847, 1458183687, "708543", 1458183687, "708543", null, "2016-03-16T00:00:00", "10 12 13 46 50 21", "3" ] -, [ 848, "C44AC758-6188-4C66-889E-0C11B69B3F5A", 848, 1458442886, "708543", 1458442886, "708543", null, "2016-03-19T00:00:00", "11 23 43 54 60 03", "3" ] -, [ 849, "F76B28BE-B8CC-4333-B8C2-8038FA04A5D7", 849, 1458788506, "708543", 1458788506, "708543", null, "2016-03-23T00:00:00", "05 08 15 22 49 25", "3" ] -, [ 850, "DAC76276-F82B-4521-8B22-2D77AE8B65DD", 850, 1459047769, "708543", 1459047769, "708543", null, "2016-03-26T00:00:00", "11 23 42 52 68 06", "3" ] -, [ 851, "AFA36766-0E68-4370-AF47-008B6ED8071E", 851, 1459393289, "708543", 1459393289, "708543", null, "2016-03-30T00:00:00", "24 44 53 55 63 19", "2" ] -, [ 852, "0638F190-3A0F-43C2-8688-ED2D07E85386", 852, 1459652500, "708543", 1459652500, "708543", null, "2016-04-02T00:00:00", "09 28 30 40 61 03", "2" ] -, [ 853, "538BA672-7387-4BB6-B077-DECC618EE0DA", 853, 1459998107, "708543", 1459998107, "708543", null, "2016-04-06T00:00:00", "04 28 49 60 65 25", "2" ] -, [ 854, "D292DAB1-F656-478B-9776-4307D1D2E9F6", 854, 1460257309, "708543", 1460257309, "708543", null, "2016-04-09T00:00:00", "14 22 23 41 61 09", "3" ] -, [ 855, "806C3A3C-F727-443D-AA51-A0B6FD55392C", 855, 1460602907, "708543", 1460602907, "708543", null, "2016-04-13T00:00:00", "30 33 35 38 64 22", "3" ] -, [ 856, "6C513E67-72D5-49DC-9339-8855AE411D23", 856, 1460862109, "708543", 1460862109, "708543", null, "2016-04-16T00:00:00", "03 18 25 32 51 03", "2" ] -, [ 857, "3CC889C1-BC6D-4AB3-9703-EDB0B0993D25", 857, 1461207686, "708543", 1461207686, "708543", null, "2016-04-20T00:00:00", "12 25 30 52 62 08", "3" ] -, [ 858, "66E2C834-3EE5-417A-9333-8CD4C4BDDC0D", 858, 1461466948, "708543", 1461466948, "708543", null, "2016-04-23T00:00:00", "19 35 46 59 62 13", "5" ] -, [ 859, "FB0E502B-4C20-40F1-9191-02932FFEFC20", 859, 1461812486, "708543", 1461812486, "708543", null, "2016-04-27T00:00:00", "02 25 33 39 64 17", "2" ] -, [ 860, "EFC02B54-5324-4CEA-A33B-F13F2792B866", 860, 1462071708, "708543", 1462071708, "708543", null, "2016-04-30T00:00:00", "03 12 16 32 34 14", "3" ] -, [ 861, "B343B51F-4E61-4B9A-8D32-4A6872B2B45D", 861, 1462417308, "708543", 1462417308, "708543", null, "2016-05-04T00:00:00", "30 47 57 66 69 03", "3" ] -, [ 862, "27B6967E-B5D2-46D0-B7BC-DA91059FFCDB", 862, 1462676507, "708543", 1462676507, "708543", null, "2016-05-07T00:00:00", "05 25 26 44 66 09", "2" ] -, [ 863, "A4B7173B-5E0C-4E9D-BCA4-618A323FB42D", 863, 1463022106, "708543", 1463022106, "708543", null, "2016-05-11T00:00:00", "20 32 52 66 69 23", "3" ] -, [ 864, "CE5AB6A5-25F9-4388-9467-BD0445459BC4", 864, 1463281288, "708543", 1463281288, "708543", null, "2016-05-14T00:00:00", "13 27 47 64 65 09", "3" ] -, [ 865, "3F367781-B30A-47AE-B947-B0D2AE4FFB10", 865, 1463626906, "708543", 1463626906, "708543", null, "2016-05-18T00:00:00", "23 25 39 54 67 11", "3" ] -, [ 866, "2B6846C3-B065-4EEB-B321-68C75294F7C9", 866, 1463886110, "708543", 1463886110, "708543", null, "2016-05-21T00:00:00", "05 07 09 23 32 26", "4" ] -, [ 867, "0774E3AA-3772-43E0-B98B-05EAB69847A1", 867, 1464231708, "708543", 1464231708, "708543", null, "2016-05-25T00:00:00", "11 24 41 59 64 15", "3" ] -, [ 868, "3796D800-4922-4280-8B88-E85ED906B4DF", 868, 1464490907, "708543", 1464490907, "708543", null, "2016-05-28T00:00:00", "06 33 34 58 59 12", "2" ] -, [ 869, "EEB99A68-457E-4AFF-A13F-427EEE2D4EB1", 869, 1464836507, "708543", 1464836507, "708543", null, "2016-06-01T00:00:00", "23 30 33 40 69 12", "5" ] -, [ 870, "74D58C48-7E89-4118-BD99-6DBD5043656D", 870, 1465095690, "708543", 1465095690, "708543", null, "2016-06-04T00:00:00", "16 20 22 43 64 17", "2" ] -, [ 871, "0E17BFD1-5263-4495-9CFD-817A48C251A4", 871, 1465441306, "708543", 1465441306, "708543", null, "2016-06-08T00:00:00", "12 25 37 60 69 20", "3" ] -, [ 872, "5324C432-0CA5-46C6-8980-F6D6516D07A3", 872, 1465700507, "708543", 1465700507, "708543", null, "2016-06-11T00:00:00", "20 27 36 41 58 07", "2" ] -, [ 873, "424D6940-1854-4E17-A840-FB6E3EFB0BC7", 873, 1466046088, "708543", 1466046088, "708543", null, "2016-06-15T00:00:00", "04 22 24 31 33 10", "2" ] -, [ 874, "801FF99A-39BA-44A5-B34F-7A40CCC981F4", 874, 1466305308, "708543", 1466305308, "708543", null, "2016-06-18T00:00:00", "02 23 41 53 63 11", "2" ] -, [ 875, "32B8607F-979E-4C0E-846D-5074E00DFEAB", 875, 1466650887, "708543", 1466650887, "708543", null, "2016-06-22T00:00:00", "14 40 42 43 52 17", "3" ] -, [ 876, "FDFEF46C-8E7E-4BF8-B000-C0D8C5749D4E", 876, 1466910089, "708543", 1466910089, "708543", null, "2016-06-25T00:00:00", "03 27 36 56 69 25", "2" ] -, [ 877, "A1087993-4142-44E5-8FF3-F8A77DEFFB06", 877, 1467255707, "708543", 1467255707, "708543", null, "2016-06-29T00:00:00", "23 29 37 60 64 06", "2" ] -, [ 878, "4BF9DA07-A878-4846-A461-B8B46ABD9792", 878, 1467514914, "708543", 1467514914, "708543", null, "2016-07-02T00:00:00", "10 34 39 59 63 04", "2" ] -, [ 879, "81D9BD05-0115-4833-A484-F5F5764AE5B1", 879, 1467860567, "708543", 1467860567, "708543", null, "2016-07-06T00:00:00", "02 24 31 57 66 18", "3" ] -, [ 880, "1B7693CA-B277-4943-AC44-DBDDFE46E05B", 880, 1468119706, "708543", 1468119706, "708543", null, "2016-07-09T00:00:00", "10 28 32 61 64 12", "3" ] -, [ 881, "82FEF08C-D90C-4582-B8C9-9703FEB75A77", 881, 1468465309, "708543", 1468465309, "708543", null, "2016-07-13T00:00:00", "03 15 29 54 57 10", "3" ] -, [ 882, "DEF18268-C8D4-428E-A79B-A0E0AF3CBD4B", 882, 1468724507, "708543", 1468724507, "708543", null, "2016-07-16T00:00:00", "11 17 40 50 62 26", "2" ] -, [ 883, "45A8B2F3-217E-4D2B-90A3-AE8D1B4C6174", 883, 1469070107, "708543", 1469070107, "708543", null, "2016-07-20T00:00:00", "06 25 35 58 66 05", "2" ] -, [ 884, "B58A1782-C764-46F1-B9B9-3BFE1D6B4E52", 884, 1469329307, "708543", 1469329307, "708543", null, "2016-07-23T00:00:00", "05 07 23 35 39 11", "2" ] -, [ 885, "7D4F8200-DF95-4382-8748-33E050967A9D", 885, 1469674886, "708543", 1469674886, "708543", null, "2016-07-27T00:00:00", "10 47 50 65 68 24", "2" ] -, [ 886, "79F3C5B3-FD8F-49A9-A796-60542668C200", 886, 1469934107, "708543", 1469934107, "708543", null, "2016-07-30T00:00:00", "11 17 21 23 32 05", "2" ] -, [ 887, "A5A0BD2D-64AB-4811-82AB-D61EEF1AF7B1", 887, 1470279686, "708543", 1470279686, "708543", null, "2016-08-03T00:00:00", "09 11 27 66 67 02", "3" ] -, [ 888, "BD4C1208-94E5-4D63-9D5A-586C1A3822B7", 888, 1470538909, "708543", 1470538909, "708543", null, "2016-08-06T00:00:00", "20 33 36 47 52 12", "3" ] -, [ 889, "A9CAA420-DE01-412C-A756-F1A663F4AA29", 889, 1470884507, "708543", 1470884507, "708543", null, "2016-08-10T00:00:00", "23 56 61 64 67 12", "5" ] -, [ 890, "8E27E501-E185-4712-BCDC-F3FB1230EDF8", 890, 1471143709, "708543", 1471143709, "708543", null, "2016-08-13T00:00:00", "38 44 60 64 69 06", "2" ] -, [ 891, "BD66F02B-64EE-4CC2-BD17-556CA0E719C7", 891, 1471489307, "708543", 1471489307, "708543", null, "2016-08-17T00:00:00", "33 44 49 50 52 08", "3" ] -, [ 892, "A479CB83-1789-467D-B719-50667324A737", 892, 1471773690, "708543", 1471773690, "708543", null, "2016-08-20T00:00:00", "03 06 21 60 68 24", "2" ] -, [ 893, "9839668D-4E14-477E-9048-78609B14F262", 893, 1472119267, "708543", 1472119267, "708543", null, "2016-08-24T00:00:00", "09 11 25 64 65 16", "3" ] -, [ 894, "7BE65F8C-50FB-4760-B95B-5AA9C7D7BDEB", 894, 1472378508, "708543", 1472378508, "708543", null, "2016-08-27T00:00:00", "04 32 48 49 63 20", "2" ] -, [ 895, "64CEEEC0-29D4-4F27-BAB1-A71CA938691D", 895, 1472724066, "708543", 1472724066, "708543", null, "2016-08-31T00:00:00", "05 10 24 56 61 12", "2" ] -, [ 896, "29B26B2B-D58E-44AD-A903-DBEBE05E2B0B", 896, 1472983266, "708543", 1472983266, "708543", null, "2016-09-03T00:00:00", "07 39 50 59 67 25", "3" ] -, [ 897, "D37CF53F-C59C-41D3-9C80-6FF81CE73730", 897, 1473363020, "708543", 1473363020, "708543", null, "2016-09-07T00:00:00", "22 23 29 33 55 21", "2" ] -, [ 898, "22706198-5E98-4646-987C-26275EA758CA", 898, 1473588064, "708543", 1473588064, "708543", null, "2016-09-10T00:00:00", "03 17 49 55 68 08", "2" ] -, [ 899, "BC2D6956-1D23-4DB9-9286-BB5EEAEF83A4", 899, 1473933706, "708543", 1473933706, "708543", null, "2016-09-14T00:00:00", "10 11 23 28 31 14", "2" ] -, [ 900, "3CAD5A54-A6F9-43B5-A212-1D9B57C576B0", 900, 1474192866, "708543", 1474192866, "708543", null, "2016-09-17T00:00:00", "09 19 51 55 62 14", "4" ] -, [ 901, "6BAC9382-FE49-4853-80FB-52C1A70CD422", 901, 1474538472, "708543", 1474538472, "708543", null, "2016-09-21T00:00:00", "01 28 63 67 69 17", "4" ] -, [ 902, "ACB5DEF7-15F4-45FD-B2E9-242C8B909E9D", 902, 1474797668, "708543", 1474797668, "708543", null, "2016-09-24T00:00:00", "07 15 20 29 41 22", "2" ] -, [ 903, "8FD3E76A-DEED-458A-A9CA-D6CAA1AA7A6B", 903, 1475143268, "708543", 1475143268, "708543", null, "2016-09-28T00:00:00", "30 38 52 53 62 01", "3" ] -, [ 904, "BB31C897-1552-494E-B27E-BEC1B7D72C29", 904, 1475402464, "708543", 1475402464, "708543", null, "2016-10-01T00:00:00", "02 12 50 61 64 01", "2" ] -, [ 905, "DB9A260F-8EDD-4D7E-B6F4-D24AD0FF3A4C", 905, 1475748063, "708543", 1475748063, "708543", null, "2016-10-05T00:00:00", "08 18 27 29 60 15", "2" ] -, [ 906, "7CC48100-C232-464E-9A23-034B8F0B4147", 906, 1476007263, "708543", 1476007263, "708543", null, "2016-10-08T00:00:00", "03 54 61 64 68 09", "2" ] -, [ 907, "D88F9F9B-B5D0-464F-BF4A-B08BABF3D7B3", 907, 1476352884, "708543", 1476352884, "708543", null, "2016-10-12T00:00:00", "16 30 34 37 44 16", "2" ] -, [ 908, "963109BF-96C7-4BAC-8F60-B825FAE4A346", 908, 1476612067, "708543", 1476612067, "708543", null, "2016-10-15T00:00:00", "23 49 57 64 67 20", "2" ] -, [ 909, "6A69340B-A601-40C8-99AB-D4E8E8742B08", 909, 1476957664, "708543", 1476957664, "708543", null, "2016-10-19T00:00:00", "10 16 38 43 63 23", "2" ] -, [ 910, "C336DBED-7B5B-41B0-8662-E6E71F97730E", 910, 1477216866, "708543", 1477216866, "708543", null, "2016-10-22T00:00:00", "01 28 33 55 56 22", "2" ] -, [ 911, "5F475ADD-6DC7-4259-B794-980960C64696", 911, 1477562508, "708543", 1477562508, "708543", null, "2016-10-26T00:00:00", "02 03 16 48 56 24", "2" ] -, [ 912, "1913132B-72F1-4BBB-BFC5-B6F920804656", 912, 1477821707, "708543", 1477821707, "708543", null, "2016-10-29T00:00:00", "19 20 21 42 48 23", "3" ] -, [ 913, "E3F60567-F814-45BC-BD16-548B5B430BED", 913, 1478167263, "708543", 1478167263, "708543", null, "2016-11-02T00:00:00", "13 18 37 54 61 05", "2" ] -, [ 914, "DA422B46-9D32-4BA3-8400-68B1AD0215E9", 914, 1478430063, "708543", 1478430063, "708543", null, "2016-11-05T00:00:00", "21 31 50 51 69 08", "3" ] -, [ 915, "268D2F3C-7C91-462C-8ECC-6E8E3DF20A22", 915, 1478775664, "708543", 1478775664, "708543", null, "2016-11-09T00:00:00", "01 25 28 31 54 02", "2" ] -, [ 916, "98AC28EB-755D-42C9-A445-3F6285AD7196", 916, 1479034863, "708543", 1479034863, "708543", null, "2016-11-12T00:00:00", "08 17 20 27 52 24", "2" ] -, [ 917, "7B229FE5-AC63-4D4A-91A6-0A7CB86DD532", 917, 1479380463, "708543", 1479380463, "708543", null, "2016-11-16T00:00:00", "28 41 61 63 65 07", "2" ] -, [ 918, "431C3CF5-B68F-4457-889F-49B20F9CF1C4", 918, 1479639663, "708543", 1479639663, "708543", null, "2016-11-19T00:00:00", "16 24 28 43 61 21", "2" ] -, [ 919, "E0432E50-E19E-4DC3-9A18-36806C7A88C1", 919, 1479985514, "708543", 1479985514, "708543", null, "2016-11-23T00:00:00", "07 32 41 47 61 03", "2" ] -, [ 920, "B6B9C15A-C30F-4CC0-B1BD-CA3920340503", 920, 1480244703, "708543", 1480244703, "708543", null, "2016-11-26T00:00:00", "17 19 21 37 44 16", "2" ] -, [ 921, "D40A1619-0832-4A6E-9EAF-3844B23092F0", 921, 1480590068, "708543", 1480590068, "708543", null, "2016-11-30T00:00:00", "03 14 18 25 45 07", "2" ] -, [ 922, "CBE0E3C4-72D7-446F-B787-B9A04E347C3C", 922, 1480849263, "708543", 1480849263, "708543", null, "2016-12-03T00:00:00", "08 10 26 27 33 22", "2" ] -, [ 923, "C75F0236-8827-4F14-ADA7-7061AFE4AA04", 923, 1481194864, "708543", 1481194864, "708543", null, "2016-12-07T00:00:00", "41 48 49 53 64 20", "2" ] -, [ 924, "B9908F6E-3EA8-4093-8210-E306D05F1BD2", 924, 1481583706, "708543", 1481583706, "708543", null, "2016-12-10T00:00:00", "12 21 32 44 66 15", "2" ] -, [ 925, "542E365D-8B02-4B55-AF96-8592595E12BD", 925, 1481799665, "708543", 1481799665, "708543", null, "2016-12-14T00:00:00", "18 26 37 39 66 15", "3" ] -, [ 926, "C7997154-C315-455F-AACB-B172F622C6C4", 926, 1482058866, "708543", 1482058866, "708543", null, "2016-12-17T00:00:00", "01 08 16 40 48 10", "2" ] -, [ 927, "30F782F6-E623-453A-BB19-1BF9A649CDD0", 927, 1482404464, "708543", 1482404464, "708543", null, "2016-12-21T00:00:00", "25 33 40 54 68 03", "5" ] -, [ 928, "1BCFE588-BF10-4E9E-8B10-A1508D2A3E38", 928, 1482663674, "708543", 1482663674, "708543", null, "2016-12-24T00:00:00", "28 38 42 51 52 21", "2" ] -, [ 929, "7DC520AF-2E56-4939-94EB-B17EA2DEF8B9", 929, 1483009263, "708543", 1483009263, "708543", null, "2016-12-28T00:00:00", "16 23 30 44 58 04", "2" ] -, [ 930, "C3C90ACB-7ADE-46A9-80C2-5A06431C7568", 930, 1483268548, "708543", 1483268548, "708543", null, "2016-12-31T00:00:00", "01 03 28 57 67 09", "2" ] -, [ 931, "ABE7162C-2AB8-4CF1-B7DD-00D473BC7960", 931, 1483614084, "708543", 1483614084, "708543", null, "2017-01-04T00:00:00", "16 17 29 41 42 04", "3" ] -, [ 932, "2D90D0BC-7841-4342-87DE-8CC03B2262BD", 932, 1483873291, "708543", 1483873291, "708543", null, "2017-01-07T00:00:00", "03 12 24 37 63 10", "2" ] -, [ 933, "15E71373-4AA1-4CF4-AC87-5DA454A0CAC6", 933, 1484218864, "708543", 1484218864, "708543", null, "2017-01-11T00:00:00", "01 03 13 16 43 24", "2" ] -, [ 934, "49050BC6-0AF3-421D-8F0E-D1F98D18B740", 934, 1484478065, "708543", 1484478065, "708543", null, "2017-01-14T00:00:00", "23 55 59 64 69 13", "5" ] -, [ 935, "4CF6D807-30BD-4EFE-9C6C-1858F45CCB7C", 935, 1484823665, "708543", 1484823665, "708543", null, "2017-01-18T00:00:00", "09 40 41 53 58 12", "2" ] -, [ 936, "557F2798-865C-4016-99BC-C5B9EC0E528C", 936, 1485342103, "708543", 1485342103, "708543", null, "2017-01-21T00:00:00", "23 25 45 52 67 02", "2" ] -, [ 937, "8FF07805-7014-4F6C-91D3-8240564F1F00", 937, 1485428466, "708543", 1485428466, "708543", null, "2017-01-25T00:00:00", "18 28 62 66 68 22", "2" ] -, [ 938, "B68D2427-E10F-472C-96BA-71FD05A3823C", 938, 1485687664, "708543", 1485687664, "708543", null, "2017-01-28T00:00:00", "12 20 39 49 69 17", "2" ] -, [ 939, "5E2A695D-EBAD-494B-8EDC-E97501635708", 939, 1486033265, "708543", 1486033265, "708543", null, "2017-02-01T00:00:00", "09 43 57 60 64 10", "2" ] -, [ 940, "71AF5B59-A1DF-4E4C-88D6-88E85D019C7E", 940, 1486292464, "708543", 1486292464, "708543", null, "2017-02-04T00:00:00", "06 13 16 17 52 25", "3" ] -, [ 941, "BB1F871B-84F6-4A98-9DFA-C09389B4AC6D", 941, 1486638064, "708543", 1486638064, "708543", null, "2017-02-08T00:00:00", "14 20 42 49 66 05", "2" ] -, [ 942, "124D9420-F9FB-4E51-8302-CF6997D70053", 942, 1486897266, "708543", 1486897266, "708543", null, "2017-02-11T00:00:00", "05 09 17 37 64 02", "2" ] -, [ 943, "34C29F3D-DC81-4AD4-9942-E65828561FA9", 943, 1487242864, "708543", 1487242864, "708543", null, "2017-02-15T00:00:00", "05 28 33 38 42 19", "2" ] -, [ 944, "BB3B4322-B5BA-4647-9877-9F6D4C59D91D", 944, 1487502064, "708543", 1487502064, "708543", null, "2017-02-18T00:00:00", "03 07 09 31 33 20", "3" ] -, [ 945, "3BE3ADB4-4BC2-4905-8E2B-24AB6C37F11A", 945, 1487847663, "708543", 1487847663, "708543", null, "2017-02-22T00:00:00", "10 13 28 52 61 02", "2" ] -, [ 946, "136928E1-7518-42CE-B39B-8B7ED5B0D8DD", 946, 1488106865, "708543", 1488106865, "708543", null, "2017-02-25T00:00:00", "06 32 47 62 65 19", "2" ] -, [ 947, "8B2F46F7-EFF2-4A56-B800-54CF2B0360CA", 947, 1488452443, "708543", 1488452443, "708543", null, "2017-03-01T00:00:00", "10 16 40 52 55 17", "10" ] -, [ 948, "E5C90653-DA50-490A-B98C-97A181AE0A02", 948, 1488495663, "708543", 1488495663, "708543", null, "2017-03-01T00:00:00", "10 16 40 52 55 17", "10" ] -, [ 949, "BC492FFD-A7B3-4529-9EDB-4C6F0E5BF617", 949, 1488711665, "708543", 1488711665, "708543", null, "2017-03-04T00:00:00", "02 18 19 22 63 19", "3" ] -, [ 950, "BBD64C58-81CB-43B1-90F5-304A7C892D7B", 950, 1489057264, "708543", 1489057264, "708543", null, "2017-03-08T00:00:00", "23 33 42 46 59 04", "2" ] -, [ 951, "B904A0CA-EA0D-4B49-99CB-5178E6201491", 951, 1489312863, "708543", 1489312863, "708543", null, "2017-03-11T00:00:00", "01 26 41 50 57 11", "2" ] -, [ 952, "81F3E52B-1A76-487E-BBD0-D8711CBD083B", 952, 1489658465, "708543", 1489658465, "708543", null, "2017-03-15T00:00:00", "16 30 41 48 53 16", "3" ] -, [ 953, "E73A1F78-9908-4DCA-9125-D40CE4EC5EAB", 953, 1489917663, "708543", 1489917663, "708543", null, "2017-03-18T00:00:00", "13 25 44 54 67 05", "3" ] -, [ 954, "6122F4BB-2ACA-4F48-86A1-E6A482D02BF9", 954, 1490263262, "708543", 1490263262, "708543", null, "2017-03-22T00:00:00", "02 09 27 29 42 09", "2" ] -, [ 955, "23640056-0969-4331-ACAA-001E96789E90", 955, 1490522463, "708543", 1490522463, "708543", null, "2017-03-25T00:00:00", "18 31 32 45 48 16", "4" ] -, [ 956, "7B9AB081-962E-40DD-9C0F-6C974AE5997D", 956, 1490868063, "708543", 1490868063, "708543", null, "2017-03-29T00:00:00", "08 15 31 36 62 11", "3" ] -, [ 957, "F20FEE86-0911-4C09-A1DB-290609482563", 957, 1491127263, "708543", 1491127263, "708543", null, "2017-04-01T00:00:00", "09 32 36 44 65 01", "3" ] -, [ 958, "AF7C0244-1CBA-4A9C-A238-4D47750567F7", 958, 1491472863, "708543", 1491472863, "708543", null, "2017-04-05T00:00:00", "08 20 46 53 54 13", "2" ] -, [ 959, "256878FD-772B-48D3-B7A4-4FE86DFAC088", 959, 1491732063, "708543", 1491732063, "708543", null, "2017-04-08T00:00:00", "23 36 51 53 60 15", "2" ] -, [ 960, "F114AF8A-05DB-47BA-9B9E-53ABC867CCFE", 960, 1492077663, "708543", 1492077663, "708543", null, "2017-04-12T00:00:00", "08 14 61 63 68 24", "2" ] -, [ 961, "6F58C329-42D3-4512-8117-203CECC2ECDF", 961, 1492336863, "708543", 1492336863, "708543", null, "2017-04-15T00:00:00", "05 22 26 45 61 13", "3" ] -, [ 962, "7473DF48-9E9C-4557-90FE-239C749A5B8B", 962, 1492682463, "708543", 1492682463, "708543", null, "2017-04-19T00:00:00", "01 19 37 40 52 15", "3" ] -, [ 963, "7664B507-4ADA-4AF4-A7E6-8AA8D000F05B", 963, 1492941664, "708543", 1492941664, "708543", null, "2017-04-22T00:00:00", "21 39 41 48 63 06", "3" ] -, [ 964, "4C556EA2-12CB-4C4D-B80E-E635D3413A69", 964, 1493287265, "708543", 1493287265, "708543", null, "2017-04-26T00:00:00", "01 15 18 26 51 26", "4" ] -, [ 965, "B32D3AED-6C68-4330-B70C-2B6859EBB1FB", 965, 1493546465, "708543", 1493546465, "708543", null, "2017-04-29T00:00:00", "22 23 24 45 62 05", "2" ] -, [ 966, "A6F5C3ED-3225-4FAF-8D27-01E7068A50F0", 966, 1493892066, "708543", 1493892066, "708543", null, "2017-05-03T00:00:00", "17 18 49 59 66 09", "2" ] -, [ 967, "BDFF5C57-C2CE-4439-AFA2-3FDC539BF791", 967, 1494151264, "708543", 1494151264, "708543", null, "2017-05-06T00:00:00", "11 21 31 41 59 21", "3" ] -, [ 968, "3E057E13-4199-4445-A7A1-344AAF197C36", 968, 1494496865, "708543", 1494496865, "708543", null, "2017-05-10T00:00:00", "29 31 46 56 62 08", "2" ] -, [ 969, "0C104D21-34FC-42D7-8632-40E67B3522F6", 969, 1494756065, "708543", 1494756065, "708543", null, "2017-05-13T00:00:00", "17 20 32 63 68 19", "5" ] -, [ 970, "7194A14E-F3A2-4FAB-9E38-16E88E8B5A23", 970, 1495101664, "708543", 1495101664, "708543", null, "2017-05-17T00:00:00", "04 11 39 45 48 09", "3" ] -, [ 971, "08FE9220-F04E-42BB-85FC-0D50107BE201", 971, 1495360866, "708543", 1495360866, "708543", null, "2017-05-20T00:00:00", "05 22 45 47 54 03", "2" ] -, [ 972, "6160C9E9-ACE0-44B7-9AAA-B2DDA2C83C45", 972, 1495706464, "708543", 1495706464, "708543", null, "2017-05-24T00:00:00", "28 32 33 38 62 15", "2" ] -, [ 973, "D27C5ED7-46A0-4864-ADF6-E490F3CE4F36", 973, 1495965664, "708543", 1495965664, "708543", null, "2017-05-27T00:00:00", "05 10 28 55 67 09", "3" ] -, [ 974, "C7B5F47C-2EA8-44BB-B04C-B19D4794BBA9", 974, 1496311265, "708543", 1496311265, "708543", null, "2017-05-31T00:00:00", "04 33 39 46 60 06", "2" ] -, [ 975, "F69D8094-D1AB-4E64-873F-046ED5867980", 975, 1496570464, "708543", 1496570464, "708543", null, "2017-06-03T00:00:00", "03 09 21 41 54 25", "4" ] -, [ 976, "A3F85596-082C-4FF9-BF20-3E51FF9A98F9", 976, 1496916064, "708543", 1496916064, "708543", null, "2017-06-07T00:00:00", "05 21 57 66 69 13", "3" ] -, [ 977, "0C90284F-764D-483A-B4E9-AD1C0FEDB6DA", 977, 1497520864, "708543", 1497520864, "708543", null, "2017-06-14T00:00:00", "05 22 43 57 63 24", "2" ] -, [ 978, "8167BC74-6790-4223-A42B-2CC3739EB537", 978, 1497780063, "708543", 1497780063, "708543", null, "2017-06-17T00:00:00", "10 13 32 53 62 21", "2" ] -, [ 979, "73CA9EB8-79D6-40B3-A8FE-8470793B4E4B", 979, 1498125664, "708543", 1498125664, "708543", null, "2017-06-21T00:00:00", "14 46 61 65 68 13", "2" ] -, [ 980, "F77798EC-77A9-4A22-B06B-DB617FA70AAA", 980, 1498384863, "708543", 1498384863, "708543", null, "2017-06-24T00:00:00", "10 22 32 36 58 10", "4" ] -, [ 981, "029B1864-680A-4388-9C25-CD03A2AEFCAC", 981, 1498730464, "708543", 1498730464, "708543", null, "2017-06-28T00:00:00", "29 37 46 53 68 08", "2" ] -, [ 982, "61DB0FF6-A6E6-4A2F-84D8-9DEF8670EB8F", 982, 1498989663, "708543", 1498989663, "708543", null, "2017-07-01T00:00:00", "19 42 45 48 53 16", "3" ] -, [ 983, "1C831F5D-3977-47E0-AB0A-84CBF17D0EAF", 983, 1499335263, "708543", 1499335263, "708543", null, "2017-07-05T00:00:00", "04 09 16 54 68 21", "2" ] -, [ 984, "80CBBECD-4E5A-41A1-A75C-791756039A6F", 984, 1499594464, "708543", 1499594464, "708543", null, "2017-07-08T00:00:00", "08 10 29 40 59 26", "2" ] -, [ 985, "93717B8E-CA86-4447-B74E-095E20FB5C9C", 985, 1499940064, "708543", 1499940064, "708543", null, "2017-07-12T00:00:00", "01 02 18 23 61 09", "2" ] -, [ 986, "B66C4317-9207-433C-A498-BABB79D8D144", 986, 1500199263, "708543", 1500199263, "708543", null, "2017-07-15T00:00:00", "09 40 63 64 66 17", "2" ] -, [ 987, "8724EA9E-C2EE-4F63-8CCD-2A572EBE09BB", 987, 1500544863, "708543", 1500544863, "708543", null, "2017-07-19T00:00:00", "50 51 59 61 63 04", "5" ] -, [ 988, "D19EE0BA-A71F-457E-AD3F-64AC41202A57", 988, 1500804063, "708543", 1500804063, "708543", null, "2017-07-22T00:00:00", "05 32 44 53 60 09", "3" ] -, [ 989, "78BCC11D-0F1F-46B5-A18C-847558335E13", 989, 1501149663, "708543", 1501149663, "708543", null, "2017-07-26T00:00:00", "07 19 21 42 69 12", "2" ] - ] -} \ No newline at end of file + }, + "data": [ + [ + 1, + "473F0579-3060-42E8-95C6-671B43230276", + 1, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-03T00:00:00Z", + "17 22 36 37 52 24", + "2" + ], + [ + 2, + "13ED019C-14C2-48A1-9B40-43AEEF313BCC", + 2, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-06T00:00:00Z", + "14 22 52 54 59 04", + "3" + ], + [ + 3, + "9AEDC183-E503-4F83-A0D9-A0F9C6571E33", + 3, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-10T00:00:00Z", + "05 08 29 37 38 34", + "5" + ], + [ + 4, + "E67834B5-BF1F-4867-A457-8E26E87E9554", + 4, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-13T00:00:00Z", + "10 14 30 40 51 01", + "4" + ], + [ + 5, + "ECD06EF9-3D48-4A32-BEEA-B9D0A8E1499A", + 5, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-17T00:00:00Z", + "07 08 19 26 36 15", + "3" + ], + [ + 6, + "6A36058B-0D5F-4A4B-90C7-D37ED9754BCD", + 6, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-20T00:00:00Z", + "13 27 37 41 54 32", + "2" + ], + [ + 7, + "5D95F0A8-F691-45BD-837B-0ACC5722C724", + 7, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-24T00:00:00Z", + "04 17 35 50 57 12", + "2" + ], + [ + 8, + "7CDC9A40-0062-44DE-A33E-FCF7ED74F2F7", + 8, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-02-27T00:00:00Z", + "18 47 51 53 58 30", + "2" + ], + [ + 9, + "B4344C81-6048-47EC-BBB2-9BF061A11D1B", + 9, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-03T00:00:00Z", + "07 09 14 45 49 23", + "4" + ], + [ + 10, + "07B0351D-6EE2-4673-B8CC-56193D1C84DC", + 10, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-06T00:00:00Z", + "10 29 33 41 59 15", + "2" + ], + [ + 11, + "AF990B4F-BFDF-4BE8-8EFB-E10B3F950DB6", + 11, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-10T00:00:00Z", + "17 21 37 41 50 01", + "2" + ], + [ + 12, + "633A2A57-92FF-4E58-AAA9-16A826B9647E", + 12, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-13T00:00:00Z", + "06 16 20 31 36 08", + "5" + ], + [ + 13, + "2D7F73F5-4E71-4842-9A53-1E0B7C191232", + 13, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-17T00:00:00Z", + "24 26 45 48 55 08", + "2" + ], + [ + 14, + "39F91900-3EB5-4889-8C0C-3E943F7AA8A3", + 14, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-20T00:00:00Z", + "09 36 39 44 45 09", + "2" + ], + [ + 15, + "6A7E186E-9051-4771-ABA1-0A9849053799", + 15, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-24T00:00:00Z", + "14 20 24 39 49 07", + "3" + ], + [ + 16, + "F192902E-D8A7-430B-8040-DA272A7017E0", + 16, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-27T00:00:00Z", + "07 21 32 44 52 10", + "4" + ], + [ + 17, + "812663A1-2244-4865-9E7E-2FE73C4B0E33", + 17, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-03-31T00:00:00Z", + "05 13 17 45 54 12", + "5" + ], + [ + 18, + "FAB7E07A-27FF-455A-A7F4-C3ED1AB52304", + 18, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-03T00:00:00Z", + "10 15 31 52 59 04", + "4" + ], + [ + 19, + "DC7EE076-3EC5-46F7-BF2E-7263E9488B37", + 19, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-07T00:00:00Z", + "04 36 40 44 52 33", + "2" + ], + [ + 20, + "7197D3BF-94AB-49EF-B883-AD40A863E3BA", + 20, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-10T00:00:00Z", + "21 22 49 52 58 34", + "2" + ], + [ + 21, + "743DF432-2815-4714-863C-66B72F24605D", + 21, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-14T00:00:00Z", + "06 14 32 38 52 20", + "3" + ], + [ + 22, + "8C923446-232E-4941-8EB5-A66A17FBEF69", + 22, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-17T00:00:00Z", + "05 21 22 41 49 15", + "5" + ], + [ + 23, + "E0E09616-A6C5-4148-A2E5-F1701B6B1F87", + 23, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-21T00:00:00Z", + "11 34 41 49 55 20", + "2" + ], + [ + 24, + "248C0E3F-C489-4DD8-BB68-DD38F788BB58", + 24, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-24T00:00:00Z", + "01 12 53 56 57 05", + "2" + ], + [ + 25, + "CCE0FC4D-EB6A-4F8F-81FB-6D1DCED64CA4", + 25, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-04-28T00:00:00Z", + "12 22 25 28 44 24", + "4" + ], + [ + 26, + "02267C6C-AB6B-4B8B-B9FD-94FCC100A96E", + 26, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-01T00:00:00Z", + "16 23 25 49 58 20", + "4" + ], + [ + 27, + "20BC26C5-7FE1-4CED-8644-92759EEE96BD", + 27, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-05T00:00:00Z", + "13 34 40 47 57 11", + "4" + ], + [ + 28, + "5A337131-40E0-4867-B5A2-BB52D6AFE369", + 28, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-08T00:00:00Z", + "05 22 34 41 57 31", + "5" + ], + [ + 29, + "181CA471-4431-4279-A1BB-B291000D7791", + 29, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-12T00:00:00Z", + "37 51 52 53 58 38", + "2" + ], + [ + 30, + "C5C70FE1-BABE-4D8A-829F-854EE7CF0C42", + 30, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-15T00:00:00Z", + "15 21 23 28 36 20", + "2" + ], + [ + 31, + "BBF69F84-8CBB-446C-808C-4FFD42F8C697", + 31, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-19T00:00:00Z", + "02 07 29 55 58 27", + "3" + ], + [ + 32, + "0D13C24A-2A9A-4474-A2D9-6A289D71BB0A", + 32, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-22T00:00:00Z", + "19 20 40 47 57 29", + "2" + ], + [ + 33, + "97A2F181-B8F4-46FC-9B87-B7DA6C1CF2B7", + 33, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-26T00:00:00Z", + "01 06 10 13 20 32", + "4" + ], + [ + 34, + "DCA55B5C-1627-4FF1-B9F5-782A5D41D6C9", + 34, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-05-29T00:00:00Z", + "01 03 24 28 41 10", + "4" + ], + [ + 35, + "61E4F315-8AC6-4AD6-BA2B-A23560FBEE3D", + 35, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-02T00:00:00Z", + "04 09 14 39 43 38", + "4" + ], + [ + 36, + "5640B9E4-7126-493A-B91E-F941668FE470", + 36, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-05T00:00:00Z", + "18 34 40 48 59 25", + "4" + ], + [ + 37, + "BD942373-C55F-4C6F-9C0C-DBAAA5CC5559", + 37, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-09T00:00:00Z", + "14 22 27 32 49 05", + "4" + ], + [ + 38, + "BC07F54A-7951-44FA-B33B-21BCAE7C6F33", + 38, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-12T00:00:00Z", + "09 12 13 35 38 30", + "10" + ], + [ + 39, + "A39DC171-C91E-4968-A687-D0F37244B54E", + 39, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-16T00:00:00Z", + "08 11 18 29 36 06", + "5" + ], + [ + 40, + "C84C1A09-5AEA-411D-B206-3A1670812275", + 40, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-19T00:00:00Z", + "09 30 31 50 54 39", + "3" + ], + [ + 41, + "5C253151-8A9D-41B4-ADC7-36736C279671", + 41, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-23T00:00:00Z", + "11 30 45 47 48 10", + "3" + ], + [ + 42, + "981360DD-CA16-4D2B-9407-DAEB5EBE3267", + 42, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-26T00:00:00Z", + "13 30 32 38 57 25", + "4" + ], + [ + 43, + "5C9B4D04-7517-4A59-9811-89CEDB5FC5D3", + 43, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-06-30T00:00:00Z", + "06 38 43 47 48 27", + "5" + ], + [ + 44, + "C4C539BC-EBCE-463B-A4EB-F8037476447F", + 44, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-03T00:00:00Z", + "03 10 14 52 53 03", + "3" + ], + [ + 45, + "DB9F4D58-B01F-4C7E-9295-79935EC42014", + 45, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-07T00:00:00Z", + "10 41 44 48 56 04", + "2" + ], + [ + 46, + "21088D5B-000F-49E6-A1BC-BF6156B06F97", + 46, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-10T00:00:00Z", + "20 21 27 28 56 04", + "4" + ], + [ + 47, + "761AB2D4-CC73-430F-898C-3640437C24AC", + 47, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-14T00:00:00Z", + "20 21 23 38 42 06", + "3" + ], + [ + 48, + "3E764B7B-0536-4553-B147-CA59F6AD39B6", + 48, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-17T00:00:00Z", + "22 27 35 37 45 03", + "4" + ], + [ + 49, + "8BE6755A-CB72-4F4B-BB21-D5144C6B2471", + 49, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-21T00:00:00Z", + "16 22 30 51 58 25", + "3" + ], + [ + 50, + "FBD67CC1-FFFE-4992-9072-A3FF87043C6D", + 50, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-24T00:00:00Z", + "20 30 38 46 59 27", + "2" + ], + [ + 51, + "A7228EB5-44A6-4221-B277-102266B93E93", + 51, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-28T00:00:00Z", + "01 11 20 25 27 02", + "5" + ], + [ + 52, + "6B045B58-CA3F-49D2-9957-0EAF63AD133D", + 52, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-07-31T00:00:00Z", + "01 16 17 41 57 15", + "3" + ], + [ + 53, + "06F488E9-9E70-4259-AF65-425399B615B9", + 53, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-04T00:00:00Z", + "19 28 30 37 53 36", + "4" + ], + [ + 54, + "6BC3628F-8104-4BAD-87DF-41F85980BA83", + 54, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-07T00:00:00Z", + "04 22 26 31 52 30", + "5" + ], + [ + 55, + "B2168ECA-DF36-4193-937B-595A15C3D31D", + 55, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-11T00:00:00Z", + "07 10 22 23 52 29", + "2" + ], + [ + 56, + "593DF38C-05F5-4864-B229-0A26D69A6D48", + 56, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-14T00:00:00Z", + "09 33 36 50 58 31", + "2" + ], + [ + 57, + "DAE21B1F-F101-48DC-8C00-371F1F7E4DE7", + 57, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-18T00:00:00Z", + "04 32 33 47 55 39", + "3" + ], + [ + 58, + "D3F31D49-C789-4C40-A4BC-B747335FD9FA", + 58, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-21T00:00:00Z", + "07 10 12 22 27 26", + "2" + ], + [ + 59, + "A2B0E38D-31AF-4EF1-88E7-94ADDF9E3E6F", + 59, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-25T00:00:00Z", + "16 17 29 31 36 23", + "3" + ], + [ + 60, + "92ACA79B-9CE4-4F2A-8B1D-14EFBBCD8300", + 60, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-08-28T00:00:00Z", + "04 22 27 32 56 13", + "4" + ], + [ + 61, + "5E44F878-B62A-410A-BAE6-5007E0CE51A3", + 61, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-01T00:00:00Z", + "17 20 21 40 51 19", + "3" + ], + [ + 62, + "9133B613-6ABF-405F-96CB-3A9EADF71B56", + 62, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-04T00:00:00Z", + "11 14 22 33 42 38", + "2" + ], + [ + 63, + "7EE00F05-8B9B-4A55-B7DE-E4D73440D194", + 63, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-08T00:00:00Z", + "10 35 39 51 57 20", + "5" + ], + [ + 64, + "5151B097-89FF-4932-8CE4-A7238698B71F", + 64, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-11T00:00:00Z", + "07 17 20 36 59 33", + "4" + ], + [ + 65, + "AE464CA3-8876-478A-A442-0C486F8D62CC", + 65, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-15T00:00:00Z", + "07 20 21 34 43 34", + "5" + ], + [ + 66, + "DABAC9CC-604A-433D-A9CB-80F33B8DB8F5", + 66, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-18T00:00:00Z", + "01 18 37 39 44 13", + "4" + ], + [ + 67, + "ED62E207-E760-4BB2-9BFB-59E9BF4205C0", + 67, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-22T00:00:00Z", + "10 24 36 52 55 15", + "5" + ], + [ + 68, + "352BF116-9C83-4DB7-8422-A9F4FEA693BC", + 68, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-25T00:00:00Z", + "08 16 27 35 42 30", + "2" + ], + [ + 69, + "72561D26-F116-4C42-B7CD-717D82149C12", + 69, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-09-29T00:00:00Z", + "13 44 51 52 55 30", + "4" + ], + [ + 70, + "3FC171C6-8936-4872-90DF-994281F73D02", + 70, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-02T00:00:00Z", + "12 20 30 36 47 25", + "4" + ], + [ + 71, + "FFD2A4A9-2BD4-4E89-9EE4-F597B6DDBCC4", + 71, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-06T00:00:00Z", + "14 26 37 41 46 24", + "5" + ], + [ + 72, + "C22C5B84-322D-4CBC-9600-F42ADF3163FB", + 72, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-09T00:00:00Z", + "02 06 32 42 49 35", + "3" + ], + [ + 73, + "64CC8513-4ABE-484B-A6E3-8C1401B12C4C", + 73, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-13T00:00:00Z", + "12 22 32 34 46 02", + "4" + ], + [ + 74, + "3301A17B-CF71-41AB-9787-614EDFE7C4EC", + 74, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-16T00:00:00Z", + "11 12 15 16 28 11", + "2" + ], + [ + 75, + "DCBDF086-B73C-4375-B745-21506C9A5DD2", + 75, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-20T00:00:00Z", + "07 17 20 39 59 17", + "3" + ], + [ + 76, + "62B84F14-8741-47A2-978C-748A9CD3090F", + 76, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-23T00:00:00Z", + "02 07 16 20 46 34", + "4" + ], + [ + 77, + "4EF6C071-1A67-4CB1-8664-B14C8E58CBFC", + 77, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-27T00:00:00Z", + "20 24 25 53 59 15", + "5" + ], + [ + 78, + "29F77288-AAE5-40F6-85F1-49034D76394E", + 78, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-10-30T00:00:00Z", + "01 07 27 36 49 39", + "5" + ], + [ + 79, + "99BFAC1C-14DD-47A0-A697-F44B76A708AD", + 79, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-03T00:00:00Z", + "34 38 39 45 50 33", + "2" + ], + [ + 80, + "6DAC5801-1E01-4D10-86D6-070762A4F50F", + 80, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-06T00:00:00Z", + "07 12 23 34 38 33", + "4" + ], + [ + 81, + "0BA8EFBC-E383-4063-82CF-84728365E61E", + 81, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-10T00:00:00Z", + "05 08 11 40 44 10", + "4" + ], + [ + 82, + "3F894729-A7A7-4E55-846E-3FD2191B7F88", + 82, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-13T00:00:00Z", + "17 30 48 51 54 29", + "5" + ], + [ + 83, + "570CDB2A-E9D5-4375-A611-44D8A5C55C3A", + 83, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-17T00:00:00Z", + "14 16 53 54 59 05", + "3" + ], + [ + 84, + "29C3FB4C-5898-4B1B-A07F-A96246DBE40B", + 84, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-20T00:00:00Z", + "10 12 38 53 57 01", + "5" + ], + [ + 85, + "0437BD3B-7443-413F-94A6-C311CD043BBC", + 85, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-24T00:00:00Z", + "08 20 21 32 37 04", + "3" + ], + [ + 86, + "AA4A70D1-A86A-4A8A-AD80-48129D1FE8E0", + 86, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-11-27T00:00:00Z", + "10 30 37 47 54 39", + "5" + ], + [ + 87, + "64361722-B061-4486-940F-6A72800287AC", + 87, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-01T00:00:00Z", + "05 10 11 12 20 02", + "3" + ], + [ + 88, + "E93C2325-0FD6-4C7C-8E2B-2B24CB5340C2", + 88, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-04T00:00:00Z", + "13 24 27 31 42 22", + "5" + ], + [ + 89, + "C9EC5D1F-BC31-4FE4-B403-1B18057F9E83", + 89, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-08T00:00:00Z", + "08 11 25 41 58 16", + "4" + ], + [ + 90, + "97995811-5050-43E9-BC76-D580315CA1EC", + 90, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-11T00:00:00Z", + "01 08 10 19 20 23", + "2" + ], + [ + 91, + "92ADBB7A-CA7E-4155-8F25-629BC4925798", + 91, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-15T00:00:00Z", + "10 11 18 32 45 18", + "5" + ], + [ + 92, + "7F32B5D0-5ABC-46F5-819D-E469CB5A5EE8", + 92, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-18T00:00:00Z", + "04 11 19 33 43 14", + "4" + ], + [ + 93, + "D1C86092-E5F9-4229-A737-F9CD6B6D1EFA", + 93, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-22T00:00:00Z", + "11 33 44 46 47 12", + "2" + ], + [ + 94, + "5198F649-642C-4E21-A772-134F09716BA3", + 94, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-25T00:00:00Z", + "01 17 38 50 52 24", + "2" + ], + [ + 95, + "4FC247E7-FCB1-4530-9DCE-C52909402E52", + 95, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2010-12-29T00:00:00Z", + "03 16 18 20 37 30", + "2" + ], + [ + 96, + "93F87258-233E-4B01-A29A-8EFCCE13722C", + 96, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-01T00:00:00Z", + "18 22 37 47 54 36", + "2" + ], + [ + 97, + "40038954-8377-494E-944E-908E85973739", + 97, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-05T00:00:00Z", + "22 26 32 38 40 07", + "5" + ], + [ + 98, + "C45F6776-46DC-4484-A22D-2710D96F7479", + 98, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-08T00:00:00Z", + "06 07 26 33 52 24", + "2" + ], + [ + 99, + "B6356A6B-4369-4138-A6EE-AC710C822F4A", + 99, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-12T00:00:00Z", + "19 21 23 40 48 27", + "4" + ], + [ + 100, + "CF901D2A-4E08-4E73-831B-A949AC1141D6", + 100, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-15T00:00:00Z", + "09 13 22 23 37 31", + "3" + ], + [ + 101, + "8AE587F8-B4D4-48F1-A5CD-74A2D61965C0", + 101, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-19T00:00:00Z", + "22 36 51 56 59 32", + "3" + ], + [ + 102, + "AF143F6E-C97C-400B-B1B4-F2E6D55DD9F3", + 102, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-22T00:00:00Z", + "30 31 34 45 51 23", + "2" + ], + [ + 103, + "05BD1A80-DAC2-4877-B98A-85A642530EE5", + 103, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-26T00:00:00Z", + "04 05 36 47 58 06", + "3" + ], + [ + 104, + "E016B13D-A0E4-4DA7-BDE3-68CD0F747494", + 104, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-01-29T00:00:00Z", + "24 28 45 49 52 02", + "4" + ], + [ + 105, + "B3BCD26B-3E87-49B5-9E32-A944F64853C6", + 105, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-02T00:00:00Z", + "03 14 33 53 57 36", + "4" + ], + [ + 106, + "EA37777E-4995-4377-94BD-C63B99CADD29", + 106, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-05T00:00:00Z", + "15 37 41 56 59 05", + "5" + ], + [ + 107, + "4FCF4408-9656-46A5-9819-21003BC40254", + 107, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-09T00:00:00Z", + "07 11 39 42 51 30", + "4" + ], + [ + 108, + "05A24764-9DEA-4AEF-93A5-AB82E261185D", + 108, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-12T00:00:00Z", + "11 32 36 48 52 19", + "4" + ], + [ + 109, + "8F293368-4D17-4AD5-AF5B-C74726FD0434", + 109, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-16T00:00:00Z", + "09 13 21 23 48 24", + "2" + ], + [ + 110, + "061296AF-4EFD-41C1-B9CF-E17CD2852137", + 110, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-19T00:00:00Z", + "03 12 34 37 42 36", + "5" + ], + [ + 111, + "2A3C62E6-7D95-4563-9AB2-7AE7765DB390", + 111, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-23T00:00:00Z", + "29 32 36 39 49 29", + "3" + ], + [ + 112, + "F9220CDF-6C68-4D5D-95F2-8AFC87973920", + 112, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-02-26T00:00:00Z", + "04 13 17 21 45 10", + "5" + ], + [ + 113, + "FD1388E7-2747-47FA-949D-05FD678528AB", + 113, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-02T00:00:00Z", + "07 31 50 51 58 06", + "2" + ], + [ + 114, + "CC29B3FF-7526-467F-81BB-16E0237C3E0C", + 114, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-05T00:00:00Z", + "02 23 31 42 48 21", + "2" + ], + [ + 115, + "FF3AEC1E-2DDC-4C2A-9E7D-3DE77D22C255", + 115, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-09T00:00:00Z", + "12 20 28 40 48 08", + "2" + ], + [ + 116, + "557208D2-F86E-4E3F-9FCB-A5BEE7356AFA", + 116, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-12T00:00:00Z", + "01 04 12 41 47 03", + "4" + ], + [ + 117, + "533BD995-6463-429B-9958-A9BED29B39D0", + 117, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-16T00:00:00Z", + "28 39 40 48 53 09", + "3" + ], + [ + 118, + "F71FBC6A-7F1F-4031-8178-72989CA00D2F", + 118, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-19T00:00:00Z", + "03 11 20 27 46 08", + "2" + ], + [ + 119, + "F9CE6E77-CD5F-452A-8F5A-363513D83F62", + 119, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-23T00:00:00Z", + "05 15 26 28 32 09", + "2" + ], + [ + 120, + "58851C51-CBA6-4015-ADB3-0632A9458096", + 120, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-26T00:00:00Z", + "04 10 11 19 33 27", + "4" + ], + [ + 121, + "98108522-00D3-4187-9D88-800337831326", + 121, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-03-30T00:00:00Z", + "19 20 42 56 58 37", + "4" + ], + [ + 122, + "526B953C-4B88-4AE0-8D48-0E74E7A8CF16", + 122, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-02T00:00:00Z", + "06 22 34 43 45 23", + "2" + ], + [ + 123, + "5E1119FF-9619-4732-A895-865FE789F558", + 123, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-06T00:00:00Z", + "10 18 41 55 56 15", + "2" + ], + [ + 124, + "0CE21D53-C1DC-4C48-A18F-CB4BF10B7F20", + 124, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-09T00:00:00Z", + "05 14 32 53 56 11", + "4" + ], + [ + 125, + "7E843BE0-E068-4511-8237-9D5750123BF8", + 125, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-13T00:00:00Z", + "04 23 39 49 50 39", + "3" + ], + [ + 126, + "51ED8DC0-6501-40FB-9531-3910843D6BC0", + 126, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-16T00:00:00Z", + "21 33 44 45 55 07", + "5" + ], + [ + 127, + "E1AB915B-0D8E-4BBA-9089-37023D54ECBF", + 127, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-20T00:00:00Z", + "09 24 34 36 43 27", + "3" + ], + [ + 128, + "287D98E0-5CB1-4EF9-9A57-79BEF03483A7", + 128, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-23T00:00:00Z", + "03 11 47 48 58 19", + "3" + ], + [ + 129, + "5230AEAD-648E-4D5E-8F6D-1B64A3E7A1AB", + 129, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-27T00:00:00Z", + "04 24 40 44 55 05", + "2" + ], + [ + 130, + "45333360-9131-4043-8852-CB77AA794370", + 130, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-04-30T00:00:00Z", + "06 13 15 32 41 03", + "2" + ], + [ + 131, + "79798878-CCD2-453E-9E27-DA9765FD2A3A", + 131, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-04T00:00:00Z", + "03 15 27 29 41 24", + "4" + ], + [ + 132, + "B3163D53-EA4D-4386-A43E-EFC60A5AEF26", + 132, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-07T00:00:00Z", + "02 11 27 47 55 15", + "4" + ], + [ + 133, + "097C8559-2817-4737-B26D-ECB09BC40AC0", + 133, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-11T00:00:00Z", + "09 17 32 43 45 31", + "3" + ], + [ + 134, + "062F616D-0E21-4794-8D63-3E30E3681E44", + 134, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-14T00:00:00Z", + "08 17 18 40 44 16", + "2" + ], + [ + 135, + "0D63C006-11D5-40CF-B587-384346C41C25", + 135, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-18T00:00:00Z", + "07 12 13 42 49 16", + "4" + ], + [ + 136, + "0FF01D7C-AE37-437E-A5AC-61BAA2508D7D", + 136, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-21T00:00:00Z", + "02 08 40 49 50 36", + "3" + ], + [ + 137, + "A2C61ADF-F689-4794-A808-84A75826E743", + 137, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-25T00:00:00Z", + "04 23 31 42 50 23", + "2" + ], + [ + 138, + "F3267566-AE83-44F3-8160-789EA1016E1D", + 138, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-05-28T00:00:00Z", + "12 20 43 51 55 11", + "4" + ], + [ + 139, + "02B6BE3F-A964-47C4-9697-E29201F09028", + 139, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-01T00:00:00Z", + "08 18 38 46 56 31", + "4" + ], + [ + 140, + "CC7942F6-877B-48B6-9181-93A1C98B0359", + 140, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-04T00:00:00Z", + "17 19 39 41 58 21", + "5" + ], + [ + 141, + "61378B85-5CAA-4022-B572-B4AE0E2F7777", + 141, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-08T00:00:00Z", + "14 37 44 45 53 29", + "5" + ], + [ + 142, + "F91BBF8A-2984-4398-8770-E4CDB5CDC4A4", + 142, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-11T00:00:00Z", + "16 18 27 36 50 08", + "3" + ], + [ + 143, + "7D7AC37A-E986-4A6B-B961-922D9EDF1F35", + 143, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-15T00:00:00Z", + "19 20 38 41 43 29", + "4" + ], + [ + 144, + "0ED73FCF-199E-45CC-9C97-363AA8FDFDCF", + 144, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-18T00:00:00Z", + "12 21 22 38 41 18", + "2" + ], + [ + 145, + "A3F9E171-836B-485E-8CEE-5B98BC033F4E", + 145, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-22T00:00:00Z", + "12 15 19 46 59 12", + "4" + ], + [ + 146, + "7D31993D-45DC-41A3-BFD0-9A813652F08E", + 146, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-25T00:00:00Z", + "18 36 39 41 57 12", + "4" + ], + [ + 147, + "2F615FCA-77BF-467B-B83F-C8C952A495B1", + 147, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-06-29T00:00:00Z", + "24 30 45 57 59 26", + "3" + ], + [ + 148, + "C763B039-97BC-429A-A266-54E676FD9FE8", + 148, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-02T00:00:00Z", + "01 11 18 29 51 32", + "3" + ], + [ + 149, + "0CE75BB4-3F14-4A49-A29C-821D5214EEFF", + 149, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-06T00:00:00Z", + "11 15 24 50 55 08", + "2" + ], + [ + 150, + "28EC195A-D329-4CD4-8186-830B0B26E986", + 150, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-09T00:00:00Z", + "01 09 11 23 31 06", + "3" + ], + [ + 151, + "F01DDCEF-548F-470B-AA4C-64344207CF70", + 151, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-13T00:00:00Z", + "08 18 19 32 54 08", + "4" + ], + [ + 152, + "BF59C62F-CE42-46B3-8D53-4BB89C044A0B", + 152, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-16T00:00:00Z", + "24 28 48 50 54 25", + "3" + ], + [ + 153, + "F382A07F-8C7F-4421-9787-1F1848CD9495", + 153, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-20T00:00:00Z", + "01 04 38 40 42 17", + "4" + ], + [ + 154, + "B816B09A-67CE-4F64-8F46-F40067CDEFB9", + 154, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-23T00:00:00Z", + "01 07 27 38 48 30", + "3" + ], + [ + 155, + "C4AE9DAC-E9EF-4D8E-A325-215DD8E9ED66", + 155, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-27T00:00:00Z", + "38 40 41 51 59 33", + "2" + ], + [ + 156, + "50A1075C-9262-4B20-8D86-C8D90A4E7752", + 156, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-07-30T00:00:00Z", + "20 40 41 47 55 19", + "2" + ], + [ + 157, + "44654407-6D79-4A7B-9289-448842BDFABD", + 157, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-03T00:00:00Z", + "13 19 21 28 49 11", + "2" + ], + [ + 158, + "8E9ECF5E-B2FD-4573-B80A-2A1ADCDC4202", + 158, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-06T00:00:00Z", + "25 30 54 57 59 06", + "3" + ], + [ + 159, + "8C84603D-A637-400F-885E-83939C95191E", + 159, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-10T00:00:00Z", + "11 18 36 41 46 38", + "4" + ], + [ + 160, + "C3DAF6FF-C8EE-4D4D-A6FE-D1B18DD65FF1", + 160, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-13T00:00:00Z", + "09 12 35 50 58 04", + "2" + ], + [ + 161, + "0EB476D2-7418-4354-B8A8-205A90DC1DDF", + 161, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-17T00:00:00Z", + "18 28 31 48 52 37", + "4" + ], + [ + 162, + "1480D8BB-7D88-4307-83EB-917D7D3D60A6", + 162, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-20T00:00:00Z", + "02 17 23 28 47 36", + "2" + ], + [ + 163, + "91FFF0D2-E5F6-46F2-AF8D-530E691E2758", + 163, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-24T00:00:00Z", + "09 13 47 49 53 39", + "5" + ], + [ + 164, + "DDE69E16-E29A-44F9-8DF0-B75FC8E5446E", + 164, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-27T00:00:00Z", + "02 12 25 54 58 14", + "3" + ], + [ + 165, + "03453461-CFD5-45F8-B8D6-4F4EFC4B3E1D", + 165, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-08-31T00:00:00Z", + "13 19 35 47 57 29", + "5" + ], + [ + 166, + "56803DBA-389D-414C-95F1-3F1F4EF87C93", + 166, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-03T00:00:00Z", + "15 25 52 53 54 02", + "5" + ], + [ + 167, + "7B8C595B-EAA8-4511-AB8A-22F05D0E1493", + 167, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-07T00:00:00Z", + "03 05 18 27 54 13", + "4" + ], + [ + 168, + "9A979EB9-5F95-4313-A115-1D0FDB7B2AA0", + 168, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-10T00:00:00Z", + "04 19 22 32 53 24", + "4" + ], + [ + 169, + "9FA4926B-6EEB-4FAB-A6A6-B8A71BF39BCD", + 169, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-14T00:00:00Z", + "16 41 42 50 59 05", + "3" + ], + [ + 170, + "7D4EDF40-6655-4D99-A635-66CC7FDAB422", + 170, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-17T00:00:00Z", + "06 20 22 32 43 11", + "2" + ], + [ + 171, + "17CEB9C3-945A-4874-BA6F-B9AE7C07FAFC", + 171, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-21T00:00:00Z", + "12 47 48 52 55 13", + "4" + ], + [ + 172, + "D074055A-E72B-4DBB-B1FB-E8783EAA0D41", + 172, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-24T00:00:00Z", + "03 04 12 27 44 26", + "5" + ], + [ + 173, + "34C73D37-392F-43BC-A494-E0FB5D6B354D", + 173, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-09-28T00:00:00Z", + "30 41 50 51 53 08", + "2" + ], + [ + 174, + "8EC47719-C980-4F2D-95A7-6DEA8EBBE49B", + 174, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-01T00:00:00Z", + "01 12 23 27 43 31", + "3" + ], + [ + 175, + "7E194E19-56CE-4A82-991B-E623641DDA4B", + 175, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-05T00:00:00Z", + "07 20 43 46 54 17", + "4" + ], + [ + 176, + "2E0A35CF-76FC-4AA4-9F59-B69878A66A81", + 176, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-08T00:00:00Z", + "03 27 35 37 45 31", + "5" + ], + [ + 177, + "4FE26456-F945-4CA1-9849-5405C5EB0D02", + 177, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-12T00:00:00Z", + "10 12 23 43 47 18", + "3" + ], + [ + 178, + "3989F7B0-F975-4456-986E-531A691311D9", + 178, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-15T00:00:00Z", + "05 10 24 38 43 01", + "4" + ], + [ + 179, + "36AEAE64-DA73-43F7-85B0-90FD865FFC9B", + 179, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-19T00:00:00Z", + "16 26 35 52 58 02", + "5" + ], + [ + 180, + "F14A714F-288C-4A49-80D9-8241C098F089", + 180, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-22T00:00:00Z", + "03 08 23 30 58 13", + "4" + ], + [ + 181, + "A3FFE3C7-995D-45D4-91E9-FAEB81FA105A", + 181, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-26T00:00:00Z", + "01 18 21 39 55 06", + "3" + ], + [ + 182, + "300213E7-DCFA-44CC-BD61-479DD2E54C11", + 182, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-10-29T00:00:00Z", + "11 16 40 51 56 38", + "5" + ], + [ + 183, + "9F7AB101-0EC5-4617-AAD4-FB5DD9810884", + 183, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-02T00:00:00Z", + "12 14 34 39 46 36", + "4" + ], + [ + 184, + "F32FB3B1-964E-4D3B-86A3-B39E8A1E44C8", + 184, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-05T00:00:00Z", + "02 33 39 40 43 26", + "3" + ], + [ + 185, + "05C290E8-16E5-4171-934E-A81EF8EA7CE4", + 185, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-09T00:00:00Z", + "05 35 57 58 59 12", + "3" + ], + [ + 186, + "29DD3DC2-E14B-4EDE-9C30-8216914D6FEA", + 186, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-12T00:00:00Z", + "04 35 36 51 56 08", + "5" + ], + [ + 187, + "8D0CE332-1F93-4397-80B5-7EEC36FA54C2", + 187, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-16T00:00:00Z", + "13 22 25 39 51 28", + "2" + ], + [ + 188, + "047DBA01-8F50-437D-A8CC-1A8EBB69B7B8", + 188, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-19T00:00:00Z", + "09 16 17 28 30 11", + "3" + ], + [ + 189, + "5354A5AD-8C46-4292-922D-061B18AB5D56", + 189, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-23T00:00:00Z", + "04 30 35 57 59 25", + "2" + ], + [ + 190, + "4064BDA6-CA03-4989-B90F-43317004BFF5", + 190, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-26T00:00:00Z", + "20 37 39 45 55 28", + "2" + ], + [ + 191, + "1AFEF399-4B0D-4F4B-8B78-731594986C57", + 191, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-11-30T00:00:00Z", + "02 06 34 35 47 22", + "2" + ], + [ + 192, + "7B2EB6A1-B2C2-410D-B252-880BC27937CD", + 192, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-03T00:00:00Z", + "05 18 33 43 45 08", + "3" + ], + [ + 193, + "3DE2C47F-5816-4A66-A1D1-A926FEDC1D96", + 193, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-07T00:00:00Z", + "03 14 20 39 40 37", + "2" + ], + [ + 194, + "18FDF2CE-359B-4AE4-ADDD-EE9BA474C3BC", + 194, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-10T00:00:00Z", + "04 19 33 41 59 09", + "5" + ], + [ + 195, + "997563CF-3217-4133-BC62-E7C36F38FF0B", + 195, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-14T00:00:00Z", + "02 24 46 52 56 19", + "5" + ], + [ + 196, + "583A0BA7-F5C2-4537-A074-F4589AD9ADCB", + 196, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-17T00:00:00Z", + "13 28 49 51 59 33", + "4" + ], + [ + 197, + "C1165E24-1C4B-4FB3-936D-3D6EE2FC6EB6", + 197, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-21T00:00:00Z", + "10 13 15 31 54 18", + "5" + ], + [ + 198, + "828E2F73-D48C-4C04-A3F1-2BB4E739E0D8", + 198, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-24T00:00:00Z", + "14 16 30 51 52 19", + "2" + ], + [ + 199, + "CA3DF9C8-70E1-4A1D-8520-452A0E9E058E", + 199, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-28T00:00:00Z", + "16 21 27 41 45 14", + "2" + ], + [ + 200, + "07D40B41-E652-4393-B749-19685DE4579C", + 200, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2011-12-31T00:00:00Z", + "05 23 25 28 40 34", + "4" + ], + [ + 201, + "6ED79AB6-04B8-48AF-802D-F8940CFC370A", + 201, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-04T00:00:00Z", + "21 35 46 47 50 02", + "4" + ], + [ + 202, + "4F718048-E61B-495B-805C-E35624F2182D", + 202, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-07T00:00:00Z", + "03 21 24 38 39 24", + "5" + ], + [ + 203, + "99D4B50F-83D9-478D-AA96-B7225A6A0F2B", + 203, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-11T00:00:00Z", + "05 19 29 45 47 25", + "2" + ], + [ + 204, + "369DB95A-DE5B-4070-A175-54CEA5043F88", + 204, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-14T00:00:00Z", + "10 30 36 38 41 01", + "5" + ], + [ + 205, + "68BFE997-EF24-4FF7-809E-4B98BAD12A33", + 205, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-18T00:00:00Z", + "06 29 34 44 50 28", + null + ], + [ + 206, + "73E19009-0F21-46C8-951D-D7BB50ECE5F1", + 206, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-21T00:00:00Z", + "12 24 43 44 45 07", + null + ], + [ + 207, + "02C6C142-463F-413B-9005-56E28EC96210", + 207, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-25T00:00:00Z", + "04 19 28 29 47 05", + null + ], + [ + 208, + "7B5054A4-2F50-484B-86F6-9F9CF78CC9A5", + 208, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-01-28T00:00:00Z", + "05 33 41 54 59 13", + null + ], + [ + 209, + "1EF7C6C9-8B72-48E6-AB36-6BFCFB77B3DE", + 209, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-01T00:00:00Z", + "08 13 17 34 59 35", + null + ], + [ + 210, + "A1F66607-2F2B-4C84-AD68-D3AF901A6182", + 210, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-04T00:00:00Z", + "15 23 43 45 56 07", + null + ], + [ + 211, + "9A2D1456-8BFB-40DF-A66A-FAF7EF6B4355", + 211, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-08T00:00:00Z", + "17 28 38 39 51 33", + null + ], + [ + 212, + "C9F84026-FA64-4891-8FDC-7D91CFAA9773", + 212, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-11T00:00:00Z", + "01 10 37 52 57 11", + null + ], + [ + 213, + "35B6335E-90F5-406F-9417-9ECA5F4ED28E", + 213, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-15T00:00:00Z", + "11 12 32 52 56 11", + null + ], + [ + 214, + "0D5BCFD5-88FC-46D0-ACD6-54C967456941", + 214, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-18T00:00:00Z", + "23 28 50 56 59 05", + null + ], + [ + 215, + "8F769561-C534-46EF-8DC9-0CD5F69FCD7C", + 215, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-22T00:00:00Z", + "07 16 17 39 51 32", + null + ], + [ + 216, + "F72A4C8C-E83F-4623-B0A8-AC4170F711BC", + 216, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-25T00:00:00Z", + "06 11 42 53 54 07", + null + ], + [ + 217, + "C6FD7554-ACF3-45A5-8B06-06DC1DF30BB2", + 217, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-02-29T00:00:00Z", + "01 04 11 23 26 14", + null + ], + [ + 218, + "222E59E8-FFD7-4CC5-BC7C-B757746CAF8D", + 218, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-03T00:00:00Z", + "29 30 45 47 49 35", + null + ], + [ + 219, + "D2A8DF68-9343-49F2-8705-FD28B2CC3A90", + 219, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-07T00:00:00Z", + "12 35 45 46 47 12", + null + ], + [ + 220, + "A36FEF9D-2D5B-4DEC-8A5E-58497A21241A", + 220, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-10T00:00:00Z", + "05 14 17 20 41 05", + null + ], + [ + 221, + "6BBE1009-6381-419A-88CC-F4DCCDF5AEEE", + 221, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-14T00:00:00Z", + "01 08 41 46 59 24", + null + ], + [ + 222, + "6340B968-9772-46AA-A489-0928359C5E72", + 222, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-17T00:00:00Z", + "11 14 49 55 58 30", + null + ], + [ + 223, + "28FCDA38-FE5D-4F76-8E81-91D7C46AEE36", + 223, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-21T00:00:00Z", + "32 43 53 55 56 06", + null + ], + [ + 224, + "C13FB396-7E85-4D9D-84E7-8F31BBE3953D", + 224, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-24T00:00:00Z", + "01 15 35 37 47 08", + null + ], + [ + 225, + "77D4E5AC-74EF-49E1-8D14-E1F3C85235C8", + 225, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-28T00:00:00Z", + "11 16 29 50 58 33", + null + ], + [ + 226, + "892B6304-F1C9-4968-BEFB-1D518B238C0A", + 226, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-03-31T00:00:00Z", + "05 14 36 54 58 27", + null + ], + [ + 227, + "0540775F-6648-4FEA-8444-5573749AE140", + 227, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-04T00:00:00Z", + "01 24 33 45 49 06", + null + ], + [ + 228, + "E63BE891-43F0-4910-8EE4-5EDA1FBB719F", + 228, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-07T00:00:00Z", + "05 13 17 20 30 18", + null + ], + [ + 229, + "82DD4C26-AA7D-4C11-BEA8-9899EF5FF86A", + 229, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-11T00:00:00Z", + "16 23 42 44 47 02", + null + ], + [ + 230, + "DAB9D612-C187-4B13-BCBC-36E33A22250B", + 230, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-14T00:00:00Z", + "14 15 16 19 24 02", + null + ], + [ + 231, + "82FC523B-BD1D-4A5B-925C-488764025F63", + 231, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-18T00:00:00Z", + "20 22 39 46 49 29", + null + ], + [ + 232, + "08E109BC-46CD-405D-B55B-D63C8EF1E88E", + 232, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-21T00:00:00Z", + "06 08 20 42 51 16", + null + ], + [ + 233, + "25732E04-4CEA-481A-BBBD-BB706A4822A2", + 233, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-25T00:00:00Z", + "04 25 29 34 43 29", + null + ], + [ + 234, + "84D6DF1E-2850-48D6-81C8-BA6813947093", + 234, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-04-28T00:00:00Z", + "31 39 40 57 58 33", + null + ], + [ + 235, + "CE62EC65-4B54-424B-AF1E-9DA89A23AC3B", + 235, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-02T00:00:00Z", + "07 08 33 38 50 29", + null + ], + [ + 236, + "247DF1DB-7140-4F4E-BAA8-82D44151B697", + 236, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-05T00:00:00Z", + "09 12 20 44 59 23", + null + ], + [ + 237, + "1D2FD83C-6F5D-4D0E-84F6-DBEBA73226FB", + 237, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-09T00:00:00Z", + "01 07 11 55 56 01", + null + ], + [ + 238, + "9F497756-5D8C-44F9-BCA9-32C85F24C7B4", + 238, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-12T00:00:00Z", + "10 24 35 53 58 22", + null + ], + [ + 239, + "CDC9826E-CAA4-4851-BA89-40F94C43640F", + 239, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-16T00:00:00Z", + "03 07 21 28 43 02", + null + ], + [ + 240, + "38ED6B08-4AE8-4D03-9CA3-F6CEEE7AD5EA", + 240, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-19T00:00:00Z", + "08 13 35 46 51 30", + null + ], + [ + 241, + "DC69454E-7153-42B1-80C0-B782FE2947C6", + 241, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-23T00:00:00Z", + "04 07 26 53 59 32", + null + ], + [ + 242, + "37DC3FAB-1784-4A7F-8175-12BF55F9F707", + 242, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-26T00:00:00Z", + "13 14 41 49 59 14", + null + ], + [ + 243, + "8841334C-6681-4C95-A2D1-E98368995E74", + 243, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-05-30T00:00:00Z", + "09 10 24 52 56 14", + null + ], + [ + 244, + "BC98C758-2146-4840-B56D-F558C6DFC597", + 244, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-02T00:00:00Z", + "09 10 17 29 45 33", + null + ], + [ + 245, + "8745C895-057D-425C-8AC4-3893B1217811", + 245, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-06T00:00:00Z", + "19 30 33 48 59 27", + null + ], + [ + 246, + "7ADA588B-6072-453B-83D3-3121A766E766", + 246, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-09T00:00:00Z", + "18 22 45 56 57 27", + null + ], + [ + 247, + "EE8DA13A-D8D2-4E45-AB14-F582E01B1890", + 247, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-13T00:00:00Z", + "07 10 14 33 57 18", + null + ], + [ + 248, + "131CCCCE-98B4-4508-BBE4-D1DAF52D24C1", + 248, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-16T00:00:00Z", + "08 14 15 16 27 26", + null + ], + [ + 249, + "E485B061-0AB2-480C-83DD-CDD20DAF53A9", + 249, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-20T00:00:00Z", + "11 17 29 56 57 14", + null + ], + [ + 250, + "64752403-F193-4E6C-8DAB-426B915D324C", + 250, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-23T00:00:00Z", + "01 03 41 44 53 30", + null + ], + [ + 251, + "5A9F43EF-49A3-4775-B5D4-01FB399BDBA0", + 251, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-27T00:00:00Z", + "06 34 40 46 58 06", + null + ], + [ + 252, + "187F3244-451C-44C4-9E2E-F6148EBD5486", + 252, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-06-30T00:00:00Z", + "07 15 20 41 44 22", + null + ], + [ + 253, + "0520D56E-49E1-4437-883A-BEA8549177E9", + 253, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-04T00:00:00Z", + "14 19 35 39 56 33", + null + ], + [ + 254, + "289BFBF7-9899-4318-8FA9-248D0D2DD6BE", + 254, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-07T00:00:00Z", + "03 05 29 39 59 29", + null + ], + [ + 255, + "5A74A68D-4FE4-47CF-A30E-FD00A448556C", + 255, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-11T00:00:00Z", + "05 22 36 49 55 23", + null + ], + [ + 256, + "68724EFF-9945-4B64-8703-C3885EEBF72A", + 256, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-14T00:00:00Z", + "04 16 32 37 46 13", + null + ], + [ + 257, + "E97770CF-2D5B-4E50-AD4E-DA908CB1A65D", + 257, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-18T00:00:00Z", + "02 05 20 23 57 03", + null + ], + [ + 258, + "94CE7B77-0577-441F-AEB8-21C06FB72FB1", + 258, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-21T00:00:00Z", + "09 31 38 54 56 20", + null + ], + [ + 259, + "EF93A1EE-E937-46EE-BE45-93144E3B018A", + 259, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-25T00:00:00Z", + "03 14 35 38 46 16", + null + ], + [ + 260, + "E6E27C61-9F67-4435-B056-6C9E11E05396", + 260, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-07-28T00:00:00Z", + "05 06 13 36 50 13", + null + ], + [ + 261, + "DFF18A33-7D8D-49DE-8811-13A0E2D2C846", + 261, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-01T00:00:00Z", + "03 16 48 56 58 04", + null + ], + [ + 262, + "98DBB22C-0155-4F72-A68B-179D47A1C9BA", + 262, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-04T00:00:00Z", + "19 30 48 53 55 18", + null + ], + [ + 263, + "3BCB7B3F-E4B8-4AB7-A071-82998C6274EF", + 263, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-08T00:00:00Z", + "03 07 11 15 28 12", + null + ], + [ + 264, + "BD63131D-D862-4186-A0EF-4A290455A282", + 264, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-11T00:00:00Z", + "04 13 39 46 51 01", + null + ], + [ + 265, + "06C0AA9D-39A8-4928-8C8F-61DA329BCC7F", + 265, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-15T00:00:00Z", + "06 27 46 51 56 21", + null + ], + [ + 266, + "4BE3F65C-4B6A-4081-B75D-9280C8367C17", + 266, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-18T00:00:00Z", + "14 26 41 55 59 01", + null + ], + [ + 267, + "9A0B6856-C420-4411-84EA-99AC6BBF0015", + 267, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-22T00:00:00Z", + "22 29 31 47 55 19", + null + ], + [ + 268, + "BF067455-0051-4B07-8A18-CAC7AA537C02", + 268, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-25T00:00:00Z", + "01 06 07 20 49 23", + null + ], + [ + 269, + "BE75088A-CED8-44AC-AFB8-19C09D6FE196", + 269, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-08-29T00:00:00Z", + "25 28 49 54 56 28", + null + ], + [ + 270, + "CEECAF38-CF6B-4715-8EE1-37C5206F1C2C", + 270, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-01T00:00:00Z", + "08 11 21 44 49 22", + null + ], + [ + 271, + "CE3C7F39-5D43-4AFF-9761-7CE56DB9D923", + 271, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-05T00:00:00Z", + "04 19 26 42 51 29", + null + ], + [ + 272, + "9D59886E-17B3-4947-90D9-2D3901D57C71", + 272, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-08T00:00:00Z", + "06 20 34 44 48 29", + null + ], + [ + 273, + "49C909B5-17D3-4790-9665-6C8030223DB0", + 273, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-12T00:00:00Z", + "24 33 36 48 56 06", + null + ], + [ + 274, + "AD1E516B-00D1-45E2-910C-1440D98CB95B", + 274, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-15T00:00:00Z", + "03 20 26 43 48 01", + null + ], + [ + 275, + "B5ACAEA4-1D1F-43F9-BC05-A0248EB5BE8B", + 275, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-19T00:00:00Z", + "01 05 08 39 50 23", + null + ], + [ + 276, + "5DDD7687-0420-45D4-9B0F-1A1BAC9E7B1D", + 276, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-22T00:00:00Z", + "02 16 18 40 42 33", + null + ], + [ + 277, + "30FAC46C-67D1-4517-B9C1-C45A66ECD4AD", + 277, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-26T00:00:00Z", + "13 26 39 41 42 10", + null + ], + [ + 278, + "085D6278-8169-45F2-8139-5AE139D49584", + 278, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-09-29T00:00:00Z", + "14 18 28 29 57 08", + null + ], + [ + 279, + "26ECC80A-B310-4A53-92CE-202F7B197214", + 279, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-03T00:00:00Z", + "17 23 36 55 59 10", + null + ], + [ + 280, + "914519F9-A8B7-434F-B0D4-907038C71E5A", + 280, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-06T00:00:00Z", + "15 26 34 36 59 35", + null + ], + [ + 281, + "6636BBF0-8EBC-418F-A550-FA95CACC0619", + 281, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-10T00:00:00Z", + "18 26 29 35 43 28", + null + ], + [ + 282, + "5365107E-2287-48CA-AD58-6C9A023C714C", + 282, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-13T00:00:00Z", + "02 05 25 26 49 18", + null + ], + [ + 283, + "E417DA4F-11BE-4903-ADAF-8FDD30355EF5", + 283, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-17T00:00:00Z", + "01 07 10 23 42 35", + null + ], + [ + 284, + "B4D90A89-0789-4D09-BDDC-03C9DF67DC6F", + 284, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-20T00:00:00Z", + "04 21 28 31 44 10", + null + ], + [ + 285, + "9BF840BF-31FE-4089-99F6-9A011979ABEE", + 285, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-24T00:00:00Z", + "03 18 21 23 50 04", + null + ], + [ + 286, + "B6575F0B-D385-47EA-9332-D106904A702A", + 286, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-27T00:00:00Z", + "22 32 34 36 56 33", + null + ], + [ + 287, + "57B7ED0C-5CC1-4081-9590-E199DF5FA176", + 287, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-10-31T00:00:00Z", + "01 27 31 45 48 05", + null + ], + [ + 288, + "C41607D3-580C-43BB-ADAD-9CC43C5819D0", + 288, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-03T00:00:00Z", + "04 07 09 30 54 25", + null + ], + [ + 289, + "00DF4287-E311-4041-803D-50CD8CF730F8", + 289, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-07T00:00:00Z", + "32 34 45 52 58 20", + null + ], + [ + 290, + "26EF36DB-6E16-4504-99D7-586EF63C5BFD", + 290, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-10T00:00:00Z", + "32 42 50 54 55 32", + null + ], + [ + 291, + "2DFD63FF-F496-4915-ADBE-CFC7B2F020E4", + 291, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-14T00:00:00Z", + "08 10 30 44 58 13", + null + ], + [ + 292, + "79A650AF-912E-4C50-A912-22D6CE48C74C", + 292, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-17T00:00:00Z", + "03 15 27 58 59 20", + null + ], + [ + 293, + "79919921-AEE6-48DF-9450-BB91C923FFB4", + 293, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-21T00:00:00Z", + "08 18 24 30 39 26", + null + ], + [ + 294, + "347CD937-33FD-40DF-B30A-2926AB462E46", + 294, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-24T00:00:00Z", + "22 32 37 44 50 34", + null + ], + [ + 295, + "42030C9D-944B-4CA6-ACF9-491121D867AC", + 295, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-11-28T00:00:00Z", + "05 16 22 23 29 06", + null + ], + [ + 296, + "1F2CCE2B-0EB4-4866-A863-4E0F6AF4C137", + 296, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-01T00:00:00Z", + "03 10 19 36 46 03", + null + ], + [ + 297, + "BAF2D745-7C18-4FFA-BDCE-9335B51B3044", + 297, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-05T00:00:00Z", + "13 17 19 27 38 12", + null + ], + [ + 298, + "2923720E-CC6D-4FA4-9D78-D0D1EA8EB401", + 298, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-08T00:00:00Z", + "07 23 26 40 53 21", + null + ], + [ + 299, + "08BF1FF1-5F06-47B9-BE7D-B256988D55E3", + 299, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-12T00:00:00Z", + "08 10 25 36 44 28", + null + ], + [ + 300, + "C471CB03-D137-4D02-A38B-17D3DD24AB61", + 300, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-15T00:00:00Z", + "15 23 40 44 55 14", + null + ], + [ + 301, + "8D72164F-DC14-4C2D-B905-2236F6D766A0", + 301, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-19T00:00:00Z", + "05 08 20 23 30 03", + null + ], + [ + 302, + "3751AF81-0687-4D2D-88E3-6394361D18E4", + 302, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-22T00:00:00Z", + "01 18 35 39 44 11", + null + ], + [ + 303, + "4E4D1611-40FC-4F76-8D11-814B0230E9E9", + 303, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-26T00:00:00Z", + "11 13 23 43 54 04", + null + ], + [ + 304, + "E8AD7A64-CBF3-41E0-8841-57A88A8A9CEA", + 304, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2012-12-29T00:00:00Z", + "36 46 50 52 55 14", + null + ], + [ + 305, + "EA310D55-EA1A-4AD5-AEC4-2D906D578237", + 305, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-02T00:00:00Z", + "18 20 28 35 53 20", + null + ], + [ + 306, + "5B6740CB-25FE-4096-952A-22B8FD71049F", + 306, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-05T00:00:00Z", + "26 30 49 51 54 25", + null + ], + [ + 307, + "2D2B2571-BCB7-43F9-903F-A95BC9352549", + 307, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-09T00:00:00Z", + "11 13 20 27 59 26", + null + ], + [ + 308, + "B6955E33-CFE9-470E-B016-CCA4037F7E8F", + 308, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-12T00:00:00Z", + "10 14 21 23 47 07", + null + ], + [ + 309, + "7D7ADFD8-0AD5-4D8D-BB5C-54B54BAB15F1", + 309, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-16T00:00:00Z", + "09 21 28 32 51 35", + null + ], + [ + 310, + "F135EEBF-2581-4D4B-B30D-405AC997C32F", + 310, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-19T00:00:00Z", + "08 28 29 34 38 35", + null + ], + [ + 311, + "9826E37F-19B7-499C-84FD-9FF396B106A4", + 311, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-23T00:00:00Z", + "11 12 24 43 45 09", + null + ], + [ + 312, + "397246CE-545F-4119-A29C-07BC53CFDA27", + 312, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-26T00:00:00Z", + "03 22 26 41 49 18", + null + ], + [ + 313, + "738F1EC3-A68F-437A-B9F8-A3E7DB8A259F", + 313, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-01-30T00:00:00Z", + "14 16 32 47 52 16", + null + ], + [ + 314, + "A1A3F5C7-97C7-4C9D-A694-2C0EE2A68760", + 314, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-02T00:00:00Z", + "11 16 33 40 41 34", + null + ], + [ + 315, + "333E4589-A54E-49D7-91D6-1FEC76CC953B", + 315, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-06T00:00:00Z", + "05 27 36 38 41 12", + null + ], + [ + 316, + "3FC6D439-3147-4484-8519-4440B8FE2A89", + 316, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-09T00:00:00Z", + "05 06 16 36 58 03", + null + ], + [ + 317, + "0C92A9B8-FEDC-40D7-A407-A791143CDDBE", + 317, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-13T00:00:00Z", + "12 23 25 27 43 29", + null + ], + [ + 318, + "BAEC5F53-D2F9-48B8-8FAF-84F32B265069", + 318, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-16T00:00:00Z", + "15 16 46 50 58 29", + null + ], + [ + 319, + "9DC15E1B-DDDC-4404-92CB-B5DE148175E0", + 319, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-20T00:00:00Z", + "03 17 19 25 32 17", + null + ], + [ + 320, + "508D9E18-9F15-4104-ABBD-86B5461522A7", + 320, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-23T00:00:00Z", + "02 05 31 39 41 29", + null + ], + [ + 321, + "46951F5E-AB70-43CF-A18F-8FAB450CBFC0", + 321, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-02-27T00:00:00Z", + "03 14 20 34 48 21", + null + ], + [ + 322, + "8AD80678-E48D-45AB-8DB9-E2389662D851", + 322, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-03-02T00:00:00Z", + "03 08 13 41 56 16", + null + ], + [ + 323, + "3422EF9A-9136-486B-8DBE-71ABA6D1996C", + 323, + 1362743858, + "706580", + 1362743858, + "706580", + "{\n}", + "2013-03-06T00:00:00Z", + "06 10 23 41 45 01", + null + ], + [ + 325, + "9860B5F7-D7E7-4DFF-B95D-34032B4BEDF8", + 325, + 1363349314, + "708543", + 1363349314, + "708543", + "{\n}", + "2013-03-09T00:00:00Z", + "10 37 40 46 52 12", + null + ], + [ + 326, + "0439154C-78D1-4996-8CAD-B1B954931675", + 326, + 1363349314, + "708543", + 1363349314, + "708543", + "{\n}", + "2013-03-13T00:00:00Z", + "05 09 28 32 38 29", + null + ], + [ + 328, + "FCF75212-D9E5-4AFF-87BC-66189B89CB98", + 328, + 1365512935, + "708543", + 1365512935, + "708543", + "{\n}", + "2013-03-16T00:00:00Z", + "03 07 21 44 53 16", + null + ], + [ + 329, + "48D32A7D-B346-4710-8BB8-42B2272FFC14", + 329, + 1365512935, + "708543", + 1365512935, + "708543", + "{\n}", + "2013-03-20T00:00:00Z", + "13 14 17 43 54 15", + null + ], + [ + 330, + "F5BE3238-68A7-4A8C-9965-AB377594A587", + 330, + 1365512935, + "708543", + 1365512935, + "708543", + "{\n}", + "2013-03-23T00:00:00Z", + "17 29 31 52 53 31", + null + ], + [ + 331, + "149CB1DF-EE7B-4E15-A8C8-5F1F0BFB48FC", + 331, + 1365512935, + "708543", + 1365512935, + "708543", + "{\n}", + "2013-03-27T00:00:00Z", + "07 37 43 48 52 16", + null + ], + [ + 332, + "4BD3AEAF-A4B7-41DB-80E3-29A84EBD1530", + 332, + 1365512935, + "708543", + 1365512935, + "708543", + "{\n}", + "2013-03-30T00:00:00Z", + "11 23 26 46 55 27", + null + ], + [ + 333, + "DC250164-F16B-448C-86BB-1552B8E73D78", + 333, + 1365512935, + "708543", + 1365512935, + "708543", + "{\n}", + "2013-04-03T00:00:00Z", + "01 06 08 12 35 03", + null + ], + [ + 334, + "BB9F041B-A32F-4CEB-AFEB-469174780DFA", + 334, + 1365512935, + "708543", + 1365512935, + "708543", + "{\n}", + "2013-04-06T00:00:00Z", + "04 07 08 29 39 24", + null + ], + [ + 336, + "D1BA6B1C-1971-4840-8744-146C6EA3CE93", + 336, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-04-10T00:00:00Z", + "01 36 40 52 53 20", + null + ], + [ + 337, + "D4C28FAA-6BF6-4DCD-9E92-A7CC09C7D397", + 337, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-04-13T00:00:00Z", + "10 12 31 56 57 33", + null + ], + [ + 338, + "0C60CBC5-7E4B-41EC-B5C2-0F22CB589A92", + 338, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-04-17T00:00:00Z", + "13 18 36 48 58 28", + null + ], + [ + 339, + "C8DC82C1-3976-4093-94F5-3951D031210C", + 339, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-04-20T00:00:00Z", + "06 08 30 39 48 20", + null + ], + [ + 340, + "072ED3B5-42D2-453F-866E-BA3719910A6C", + 340, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-04-24T00:00:00Z", + "09 19 31 56 59 02", + null + ], + [ + 341, + "41B7A123-CEDC-44E9-B022-C1BABEAAEC0F", + 341, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-04-27T00:00:00Z", + "03 23 48 54 55 05", + null + ], + [ + 342, + "EA1593AF-D20C-484F-B5FB-B12BE0C79F74", + 342, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-01T00:00:00Z", + "22 26 31 54 55 18", + null + ], + [ + 343, + "B7035D34-88EA-49E3-B987-9BAE3D16BE1A", + 343, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-04T00:00:00Z", + "07 12 26 36 40 17", + null + ], + [ + 344, + "31F614CE-1B8B-43F3-9365-925D7243374C", + 344, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-08T00:00:00Z", + "21 22 26 30 57 27", + null + ], + [ + 345, + "FAC6FECB-953A-4257-9AD0-6C4A35D5783E", + 345, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-11T00:00:00Z", + "06 13 19 23 43 16", + null + ], + [ + 346, + "AFE17066-CCB0-41AA-800C-4D02902505A5", + 346, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-15T00:00:00Z", + "02 11 26 34 41 32", + null + ], + [ + 347, + "E86DAD23-CDEE-4116-AD03-101D8C0296E5", + 347, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-18T00:00:00Z", + "10 13 14 22 52 11", + null + ], + [ + 348, + "F5D88A28-5B42-469C-BF81-FEA8E4C18C53", + 348, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-22T00:00:00Z", + "09 31 35 41 57 26", + null + ], + [ + 349, + "AF3B89F6-3B42-4947-B342-3723FCDE5308", + 349, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-25T00:00:00Z", + "02 06 19 21 27 25", + null + ], + [ + 350, + "AB777365-B121-43E3-A731-32EF418AE1C3", + 350, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-05-29T00:00:00Z", + "09 14 17 49 57 02", + null + ], + [ + 351, + "C903B823-813C-43E0-AF7E-74DE8E5561B6", + 351, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-01T00:00:00Z", + "22 28 33 53 59 14", + null + ], + [ + 352, + "80798224-1817-432D-89DB-DE18DFB1468E", + 352, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-05T00:00:00Z", + "04 26 33 36 55 32", + null + ], + [ + 353, + "859F250B-4CE8-40CD-85A4-2DC7CD13012A", + 353, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-08T00:00:00Z", + "02 11 22 26 32 19", + null + ], + [ + 354, + "837CB330-52CE-44F8-B889-32B6BAA00852", + 354, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-12T00:00:00Z", + "16 22 23 42 55 32", + null + ], + [ + 355, + "92C7D5C3-E3F8-4AFE-88D4-462D3BCE2272", + 355, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-15T00:00:00Z", + "28 36 40 48 55 01", + null + ], + [ + 356, + "FE49F2F1-95AC-4B43-8B2F-F07BDF89CEB3", + 356, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-19T00:00:00Z", + "07 46 47 52 57 17", + null + ], + [ + 357, + "5D40380C-DD65-4532-AC21-CF401894B317", + 357, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-22T00:00:00Z", + "13 19 23 33 57 28", + null + ], + [ + 358, + "0B2FCAF5-4E29-4F8F-9280-97BF0EC3D0BD", + 358, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-26T00:00:00Z", + "01 18 33 39 46 33", + null + ], + [ + 359, + "57D0A633-35B9-451E-9620-4E26808DE6A0", + 359, + 1373464425, + "708543", + 1373464425, + "708543", + "{\n}", + "2013-06-29T00:00:00Z", + "08 28 30 53 56 16", + null + ], + [ + 361, + "04AEA4EE-4D45-49C6-B20F-6A2B8F537C0F", + 361, + 1373960512, + "708543", + 1373960512, + "708543", + "{\n}", + "2013-07-03T00:00:00Z", + "03 06 29 40 51 04", + null + ], + [ + 362, + "978F0309-7452-430C-B61E-08844FEA7A48", + 362, + 1373960512, + "708543", + 1373960512, + "708543", + "{\n}", + "2013-07-06T00:00:00Z", + "02 13 35 36 52 11", + null + ], + [ + 363, + "063879CE-DB8E-461E-AE83-AF99A8E8DE11", + 363, + 1373960512, + "708543", + 1373960512, + "708543", + "{\n}", + "2013-07-10T00:00:00Z", + "30 31 45 55 59 27", + null + ], + [ + 365, + "F9F6AE36-65EB-4ED5-9C13-18CC98C7DA23", + 365, + 1375427681, + "708543", + 1375427681, + "708543", + "{\n}", + "2013-07-13T00:00:00Z", + "02 08 22 35 37 06", + null + ], + [ + 366, + "2DD53C13-565A-499E-99AB-73F43680F6A8", + 366, + 1375427681, + "708543", + 1375427681, + "708543", + "{\n}", + "2013-07-17T00:00:00Z", + "01 22 34 38 42 17", + null + ], + [ + 367, + "6752A041-C2DB-49F4-A8B4-FE9B4F32A190", + 367, + 1375427681, + "708543", + 1375427681, + "708543", + "{\n}", + "2013-07-20T00:00:00Z", + "14 25 27 38 58 06", + null + ], + [ + 368, + "9705E491-5DB5-4F82-8F41-E206CB414B29", + 368, + 1375427681, + "708543", + 1375427681, + "708543", + "{\n}", + "2013-07-24T00:00:00Z", + "09 29 40 44 54 07", + null + ], + [ + 369, + "51ED9563-D5E9-47A3-A39F-E32B58AB4BFE", + 369, + 1375427681, + "708543", + 1375427681, + "708543", + "{\n}", + "2013-07-27T00:00:00Z", + "09 23 40 53 58 06", + null + ], + [ + 370, + "48E88999-FBEB-4FDE-965C-BC6B7ABDC946", + 370, + 1375427681, + "708543", + 1375427681, + "708543", + "{\n}", + "2013-07-31T00:00:00Z", + "08 24 39 49 59 05", + null + ], + [ + 372, + "74E7FBC1-422D-4B2B-9B31-BE468A39AA04", + 372, + 1375712128, + "708543", + 1375712128, + "708543", + "{\n}", + "2013-08-03T00:00:00Z", + "21 24 36 42 45 15", + null + ], + [ + 374, + "CCB64CFF-4955-4BF4-88EB-CF475FDCBF6B", + 374, + 1376034828, + "708543", + 1376034828, + "708543", + "{\n}", + "2013-08-07T00:00:00Z", + "05 25 30 58 59 32", + null + ], + [ + 376, + "3A5B135F-7CF4-4F6C-AC7B-D9B87997C9F5", + 376, + 1376312350, + "708543", + 1376312350, + "708543", + "{\n}", + "2013-08-10T00:00:00Z", + "04 12 14 37 58 13", + null + ], + [ + 378, + "DB91BB61-FE4B-4AC7-B79B-CB62F5BFE967", + 378, + 1376636929, + "708543", + 1376636929, + "708543", + "{\n}", + "2013-08-14T00:00:00Z", + "04 11 17 43 51 20", + null + ], + [ + 380, + "35791B1C-33AB-472D-80D3-4CF9A6BE30EF", + 380, + 1376921117, + "708543", + 1376921117, + "708543", + "{\n}", + "2013-08-17T00:00:00Z", + "18 21 46 54 56 23", + null + ], + [ + 382, + "3DADF8FA-B273-422A-8DD2-E3DF108CCDCD", + 382, + 1377152900, + "708543", + 1377152900, + "708543", + "{\n}", + "2013-08-21T00:00:00Z", + "30 40 42 46 48 23", + null + ], + [ + 384, + "C61E59C5-F18C-45A7-A9F3-1D6B69C69312", + 384, + 1377508995, + "708543", + 1377508995, + "708543", + "{\n}", + "2013-08-24T00:00:00Z", + "12 17 25 45 59 19", + null + ], + [ + 386, + "E316A2A9-0932-4553-B9A2-3F4ED3AB256E", + 386, + 1377778238, + "708543", + 1377778238, + "708543", + "{\n}", + "2013-08-28T00:00:00Z", + "06 07 09 19 32 13", + null + ], + [ + 388, + "CBB2374D-6251-421E-AEAA-D57E0B1C98A1", + 388, + 1378004467, + "708543", + 1378004467, + "708543", + "{\n}", + "2013-08-31T00:00:00Z", + "02 07 25 40 56 20", + null + ], + [ + 390, + "B0677941-4C55-43C8-8994-5059357CF266", + 390, + 1378350069, + "708543", + 1378350069, + "708543", + "{\n}", + "2013-09-04T00:00:00Z", + "02 09 26 45 47 11", + null + ], + [ + 392, + "5270488F-C21B-4969-8E2A-C452EC7F052D", + 392, + 1378609358, + "708543", + 1378609358, + "708543", + "{\n}", + "2013-09-07T00:00:00Z", + "02 19 22 26 45 24", + null + ], + [ + 396, + "F3E5C8E3-49CC-4833-90B5-7A48A90BF043", + 396, + 1378954855, + "708543", + 1378954855, + "708543", + "{\n}", + "2013-09-11T00:00:00Z", + "11 19 33 42 52 33", + null + ], + [ + 398, + "3281F22C-24FC-47A0-B08B-C8F7C007EA64", + 398, + 1379214065, + "708543", + 1379214065, + "708543", + "{\n}", + "2013-09-14T00:00:00Z", + "01 17 25 37 44 20", + null + ], + [ + 400, + "03D572D2-4D3B-4576-A2C8-D09C7B640839", + 400, + 1379559676, + "708543", + 1379559676, + "708543", + "{\n}", + "2013-09-18T00:00:00Z", + "07 10 22 32 35 19", + null + ], + [ + 402, + "F0A0B8DD-B47E-4396-81C0-6ACED79548F2", + 402, + 1379818889, + "708543", + 1379818889, + "708543", + "{\n}", + "2013-09-21T00:00:00Z", + "12 17 45 54 58 13", + null + ], + [ + 404, + "AA19E8C5-B164-47E6-A4B2-11F301B635DF", + 404, + 1380164455, + "708543", + 1380164455, + "708543", + "{\n}", + "2013-09-25T00:00:00Z", + "02 07 17 49 53 23", + null + ], + [ + 406, + "5C8930B7-59A9-495E-9CD9-EDA4F114190C", + 406, + 1380423676, + "708543", + 1380423676, + "708543", + "{\n}", + "2013-09-28T00:00:00Z", + "14 47 52 53 54 05", + null + ], + [ + 408, + "AAB2E771-B827-45A1-8C4C-5FF4247E54A2", + 408, + 1380769256, + "708543", + 1380769256, + "708543", + "{\n}", + "2013-10-02T00:00:00Z", + "04 06 25 42 51 17", + null + ], + [ + 410, + "A11A6AD2-571D-4E68-9531-D7613C9AC5D4", + 410, + 1381028464, + "708543", + 1381028464, + "708543", + "{\n}", + "2013-10-05T00:00:00Z", + "11 12 17 39 40 05", + null + ], + [ + 412, + "BE0D91A1-302C-426D-A891-BCC716FF77F4", + 412, + 1381374055, + "708543", + 1381374055, + "708543", + "{\n}", + "2013-10-09T00:00:00Z", + "03 09 19 33 38 18", + null + ], + [ + 414, + "D088796F-DED4-4512-A6CD-965D62DFCD46", + 414, + 1381633254, + "708543", + 1381633254, + "708543", + "{\n}", + "2013-10-12T00:00:00Z", + "08 10 26 57 58 04", + null + ], + [ + 416, + "A1F81DDE-1222-482A-9797-99BDE4C680B7", + 416, + 1381978865, + "708543", + 1381978865, + "708543", + "{\n}", + "2013-10-16T00:00:00Z", + "03 26 28 34 42 28", + null + ], + [ + 418, + "B3EB04B8-0EB0-4863-A062-BDC74A5B55F8", + 418, + 1382238075, + "708543", + 1382238075, + "708543", + "{\n}", + "2013-10-19T00:00:00Z", + "09 33 54 56 57 05", + null + ], + [ + 420, + "81A24BED-C113-41DB-A8D7-BFA00A811E52", + 420, + 1382583677, + "708543", + 1382583677, + "708543", + "{\n}", + "2013-10-23T00:00:00Z", + "03 23 31 34 47 13", + null + ], + [ + 422, + "DA233102-CFC8-488A-9878-D4DA316E1FEE", + 422, + 1382842854, + "708543", + 1382842854, + "708543", + "{\n}", + "2013-10-26T00:00:00Z", + "04 06 34 49 56 29", + null + ], + [ + 424, + "BCD1777E-78BF-42AE-9F75-051E8AB6D526", + 424, + 1383188463, + "708543", + 1383188463, + "708543", + "{\n}", + "2013-10-30T00:00:00Z", + "02 36 40 49 54 10", + null + ], + [ + 426, + "3C980E92-DBA6-43EA-9C2F-6A357D8C198B", + 426, + 1383447654, + "708543", + 1383447654, + "708543", + "{\n}", + "2013-11-02T00:00:00Z", + "13 23 24 27 40 17", + null + ], + [ + 428, + "C6F8ACA9-A326-4CAF-9A5B-0D1848566D1A", + 428, + 1383793266, + "708543", + 1383793266, + "708543", + "{\n}", + "2013-11-06T00:00:00Z", + "01 05 10 15 49 22", + null + ], + [ + 430, + "A1AA1335-1304-41B6-9143-325B91A54538", + 430, + 1384052454, + "708543", + 1384052454, + "708543", + "{\n}", + "2013-11-09T00:00:00Z", + "03 09 37 49 56 32", + null + ], + [ + 432, + "875C9020-62D2-4C17-B5EE-E82B2ED215F0", + 432, + 1384398377, + "708543", + 1384398377, + "708543", + "{\n}", + "2013-11-13T00:00:00Z", + "05 31 50 55 56 09", + null + ], + [ + 434, + "A663C837-573A-4100-A04D-32D154358CEF", + 434, + 1384657257, + "708543", + 1384657257, + "708543", + "{\n}", + "2013-11-16T00:00:00Z", + "10 29 37 44 59 10", + null + ], + [ + 436, + "EF0B5D0B-6670-4ED1-BD05-7F753D7BD99E", + 436, + 1385002844, + "708543", + 1385002844, + "708543", + "{\n}", + "2013-11-20T00:00:00Z", + "04 18 23 32 45 07", + null + ], + [ + 438, + "6E46D30A-E623-4F9E-AE38-A28FF69C700D", + 438, + 1385262044, + "708543", + 1385262044, + "708543", + "{\n}", + "2013-11-23T00:00:00Z", + "05 12 43 52 55 10", + null + ], + [ + 440, + "84BFA534-38CC-4912-A4BE-6C5718E04989", + 440, + 1385607655, + "708543", + 1385607655, + "708543", + "{\n}", + "2013-11-27T00:00:00Z", + "18 25 50 55 57 17", + null + ], + [ + 442, + "4FDC7B73-BC13-4F98-9DD5-00B40EEF893A", + 442, + 1385866854, + "708543", + 1385866854, + "708543", + "{\n}", + "2013-11-30T00:00:00Z", + "05 26 44 45 57 29", + null + ], + [ + 444, + "325D02BB-4FC5-4A32-A398-3A68C9C2DB69", + 444, + 1386212457, + "708543", + 1386212457, + "708543", + "{\n}", + "2013-12-04T00:00:00Z", + "06 09 11 31 44 25", + null + ], + [ + 446, + "50AD8F90-A9BE-4390-8C78-FC00C4A81C76", + 446, + 1386471654, + "708543", + 1386471654, + "708543", + "{\n}", + "2013-12-07T00:00:00Z", + "13 20 32 45 48 17", + null + ], + [ + 448, + "CC93F4A9-00A4-4525-BC38-9DE756831B28", + 448, + 1386817266, + "708543", + 1386817266, + "708543", + "{\n}", + "2013-12-11T00:00:00Z", + "01 10 13 18 19 27", + null + ], + [ + 450, + "C003B8B1-CDB9-498C-9C7D-C4ECC78ED256", + 450, + 1387076495, + "708543", + 1387076495, + "708543", + "{\n}", + "2013-12-14T00:00:00Z", + "14 25 32 33 41 34", + null + ], + [ + 452, + "C538153A-1685-4B6C-9A6E-A08F40474590", + 452, + 1387422065, + "708543", + 1387422065, + "708543", + "{\n}", + "2013-12-18T00:00:00Z", + "07 24 37 39 40 01", + null + ], + [ + 454, + "393859FA-4F84-4694-9404-8373A0A70B92", + 454, + 1387724454, + "708543", + 1387724454, + "708543", + "{\n}", + "2013-12-21T00:00:00Z", + "25 36 40 45 51 08", + null + ], + [ + 456, + "DEA4DB56-E3E5-492D-8F26-8F121A050F39", + 456, + 1388026855, + "708543", + 1388026855, + "708543", + "{\n}", + "2013-12-25T00:00:00Z", + "23 28 38 39 56 32", + null + ], + [ + 458, + "2E898FF5-500D-46BB-B25E-715243B6D85F", + 458, + 1388286097, + "708543", + 1388286097, + "708543", + "{\n}", + "2013-12-28T00:00:00Z", + "08 35 44 51 56 18", + null + ], + [ + 460, + "869B299A-CB43-42BA-96B5-0C52C7B2948B", + 460, + 1388631654, + "708543", + 1388631654, + "708543", + "{\n}", + "2014-01-01T00:00:00Z", + "15 24 40 48 52 23", + null + ], + [ + 462, + "6992200D-6A41-45F0-B6CE-D0DBB8C067F3", + 462, + 1388890864, + "708543", + 1388890864, + "708543", + "{\n}", + "2014-01-04T00:00:00Z", + "19 20 37 41 58 14", + null + ], + [ + 464, + "CB8287E5-7897-4CFA-8EA7-364CDE173A5C", + 464, + 1389236455, + "708543", + 1389236455, + "708543", + "{\n}", + "2014-01-08T00:00:00Z", + "10 28 39 47 58 22", + null + ], + [ + 466, + "06973D85-FD1A-4DB3-95B0-56A307538275", + 466, + 1389495704, + "708543", + 1389495704, + "708543", + "{\n}", + "2014-01-11T00:00:00Z", + "10 15 33 48 54 34", + null + ], + [ + 468, + "8FD5794D-0FD0-4164-AB47-EA69A2726DA2", + 468, + 1389841276, + "708543", + 1389841276, + "708543", + "{\n}", + "2014-01-15T00:00:00Z", + "07 08 09 24 29 25", + null + ], + [ + 470, + "632FA9B1-6504-4745-A858-A4AD77142A73", + 470, + 1390100458, + "708543", + 1390100458, + "708543", + "{\n}", + "2014-01-18T00:00:00Z", + "13 14 19 31 38 25", + null + ], + [ + 472, + "6B5C814C-3778-4C08-A8E8-14A2690DB4E1", + 472, + 1390446076, + "708543", + 1390446076, + "708543", + "{\n}", + "2014-01-22T00:00:00Z", + "01 02 07 09 55 29", + "3" + ], + [ + 474, + "959EED5C-40DB-46A6-BA50-8C7F18F12B9B", + 474, + 1390705283, + "708543", + 1390705283, + "708543", + "{\n}", + "2014-01-25T00:00:00Z", + "08 12 18 55 57 02", + "2" + ], + [ + 476, + "CF00D567-AD20-4773-98F0-D6F59CEBEB0A", + 476, + 1391050868, + "708543", + 1391050868, + "708543", + "{\n}", + "2014-01-29T00:00:00Z", + "11 23 28 32 47 20", + "2" + ], + [ + 478, + "16039CD5-5D97-462D-80B9-C7E57C4219E1", + 478, + 1391310055, + "708543", + 1391310055, + "708543", + "{\n}", + "2014-02-01T00:00:00Z", + "05 12 15 27 38 07", + "2" + ], + [ + 480, + "7662D28E-81B6-4F64-9D1D-928B22ADAAD8", + 480, + 1391655655, + "708543", + 1391655655, + "708543", + "{\n}", + "2014-02-05T00:00:00Z", + "08 17 32 57 59 24", + "3" + ], + [ + 482, + "E2CD3E79-8E4D-49A1-AC4E-75678402B48D", + 482, + 1391914866, + "708543", + 1391914866, + "708543", + "{\n}", + "2014-02-08T00:00:00Z", + "24 25 34 37 54 29", + "2" + ], + [ + 484, + "3F39F11A-2E74-44CF-BDD9-7E456C37AC50", + 484, + 1392260446, + "708543", + 1392260446, + "708543", + "{\n}", + "2014-02-12T00:00:00Z", + "36 44 49 52 57 01", + "2" + ], + [ + 486, + "38A5578D-6E92-430E-9674-0255200D4928", + 486, + 1392519644, + "708543", + 1392519644, + "708543", + "{\n}", + "2014-02-15T00:00:00Z", + "02 09 14 21 23 03", + "3" + ], + [ + 488, + "5A0B4133-BE25-4EDE-9686-3F3939CE78B1", + 488, + 1392865281, + "708543", + 1392865281, + "708543", + "{\n}", + "2014-02-19T00:00:00Z", + "01 17 35 49 54 34", + "3" + ], + [ + 490, + "72286024-9A34-4F95-85BD-71C9ABFD2765", + 490, + 1393124475, + "708543", + 1393124475, + "708543", + "{\n}", + "2014-02-22T00:00:00Z", + "02 03 13 14 54 04", + "5" + ], + [ + 492, + "06333392-9CB1-4436-B6DB-E0A8A264B065", + 492, + 1393470054, + "708543", + 1393470054, + "708543", + "{\n}", + "2014-02-26T00:00:00Z", + "11 12 17 38 42 02", + "2" + ], + [ + 494, + "A96E282B-1D16-443C-9506-FE865E27E0BF", + 494, + 1393729254, + "708543", + 1393729254, + "708543", + "{\n}", + "2014-03-01T00:00:00Z", + "03 08 25 30 47 13", + "4" + ], + [ + 496, + "DF678B5A-F304-494C-AEC5-39922FA6FB03", + 496, + 1394074812, + "708543", + 1394074812, + "708543", + "{\n}", + "2014-03-05T00:00:00Z", + "03 07 09 26 54 19", + "2" + ], + [ + 498, + "B5F25102-9FFD-4696-B916-73870F17DFBA", + 498, + 1394334054, + "708543", + 1394334054, + "708543", + "{\n}", + "2014-03-08T00:00:00Z", + "10 14 24 32 41 30", + "2" + ], + [ + 500, + "C38A2D61-6CC5-430E-BB3A-37446F6C7263", + 500, + 1394679655, + "708543", + 1394679655, + "708543", + "{\n}", + "2014-03-12T00:00:00Z", + "14 15 28 37 54 10", + "2" + ], + [ + 502, + "079EA7C4-965C-4E3D-9836-9B92C6BE73E5", + 502, + 1394938854, + "708543", + 1394938854, + "708543", + "{\n}", + "2014-03-15T00:00:00Z", + "02 05 34 51 58 09", + "4" + ], + [ + 504, + "FD32D0FB-4D24-4317-B944-784A4EC18BF5", + 504, + 1395284455, + "708543", + 1395284455, + "708543", + "{\n}", + "2014-03-19T00:00:00Z", + "02 19 23 34 43 14", + "2" + ], + [ + 506, + "2B7067E1-A09E-48C4-9798-5A8FCF035ACE", + 506, + 1395543655, + "708543", + 1395543655, + "708543", + "{\n}", + "2014-03-22T00:00:00Z", + "13 28 31 55 58 15", + "2" + ], + [ + 508, + "30FF8647-C283-41A2-9DCC-A8D7384F1EB7", + 508, + 1395889255, + "708543", + 1395889255, + "708543", + "{\n}", + "2014-03-26T00:00:00Z", + "28 33 41 44 59 21", + "2" + ], + [ + 510, + "739C3709-5735-4AF0-A580-719A06580CCB", + 510, + 1396148444, + "708543", + 1396148444, + "708543", + "{\n}", + "2014-03-29T00:00:00Z", + "02 03 12 27 38 17", + "2" + ], + [ + 512, + "3CF1F0CA-F90D-48A7-96BB-FAD65E3CC086", + 512, + 1396494070, + "708543", + 1396494070, + "708543", + "{\n}", + "2014-04-02T00:00:00Z", + "08 13 19 22 53 24", + "2" + ], + [ + 514, + "9F59ED34-C239-4AE8-8678-09B3D2D039B1", + 514, + 1396753245, + "708543", + 1396753245, + "708543", + "{\n}", + "2014-04-05T00:00:00Z", + "11 21 26 33 34 29", + "5" + ], + [ + 516, + "6D64F1A9-4039-4193-A9D2-951048F7C1AC", + 516, + 1397098855, + "708543", + 1397098855, + "708543", + "{\n}", + "2014-04-09T00:00:00Z", + "09 14 44 48 49 29", + "2" + ], + [ + 518, + "C20FBD64-77FB-497C-86D6-9C66C29AA034", + 518, + 1397358054, + "708543", + 1397358054, + "708543", + "{\n}", + "2014-04-12T00:00:00Z", + "14 26 45 54 55 20", + "2" + ], + [ + 520, + "82F04093-BAEB-4764-9D9C-575EA9E17E3E", + 520, + 1397703676, + "708543", + 1397703676, + "708543", + "{\n}", + "2014-04-16T00:00:00Z", + "34 39 42 44 59 08", + "3" + ], + [ + 522, + "C0C4BB31-08F9-4FC8-8A5C-D3CD57B7A5C9", + 522, + 1397962855, + "708543", + 1397962855, + "708543", + "{\n}", + "2014-04-19T00:00:00Z", + "05 06 29 35 51 21", + "5" + ], + [ + 524, + "4AB21E57-4F08-48A7-BAAE-E39DE7770947", + 524, + 1398308454, + "708543", + 1398308454, + "708543", + "{\n}", + "2014-04-23T00:00:00Z", + "19 25 29 36 48 12", + "4" + ], + [ + 526, + "1B2FF91E-4DF8-45F7-9983-CCBF68599DD0", + 526, + 1398567654, + "708543", + 1398567654, + "708543", + "{\n}", + "2014-04-26T00:00:00Z", + "03 07 22 30 33 20", + "3" + ], + [ + 528, + "41BBC522-A603-4A2D-BFBD-F45B00F2D96A", + 528, + 1398913245, + "708543", + 1398913245, + "708543", + "{\n}", + "2014-04-30T00:00:00Z", + "02 09 11 19 50 32", + "3" + ], + [ + 530, + "487D1FF3-303E-4D43-BD9F-7FBCEEA53A78", + 530, + 1399172525, + "708543", + 1399172525, + "708543", + "{\n}", + "2014-05-03T00:00:00Z", + "05 15 16 46 49 26", + "4" + ], + [ + 532, + "C096BBA0-25ED-4CAF-9872-27CDF41C3AB2", + 532, + 1399518165, + "708543", + 1399518165, + "708543", + "{\n}", + "2014-05-07T00:00:00Z", + "17 29 31 48 49 34", + "2" + ], + [ + 534, + "5A46495E-2CB7-4C99-A3FF-6B829658680B", + 534, + 1399777318, + "708543", + 1399777318, + "708543", + "{\n}", + "2014-05-10T00:00:00Z", + "04 31 41 47 55 01", + "2" + ], + [ + 536, + "44B9F291-72B1-4456-B88A-AF46130AB86A", + 536, + 1400122951, + "708543", + 1400122951, + "708543", + "{\n}", + "2014-05-14T00:00:00Z", + "07 33 39 52 55 33", + "3" + ], + [ + 538, + "3BA9206D-AA33-4EED-8E23-3B022B7E06EC", + 538, + 1400382119, + "708543", + 1400382119, + "708543", + "{\n}", + "2014-05-17T00:00:00Z", + "23 32 39 47 49 22", + "3" + ], + [ + 540, + "10E769B9-E7B7-4048-9302-B596CD6278DD", + 540, + 1400727781, + "708543", + 1400727781, + "708543", + "{\n}", + "2014-05-21T00:00:00Z", + "04 20 34 39 58 31", + "5" + ], + [ + 542, + "1F143612-927F-4772-8B81-B62E2F26990C", + 542, + 1400986845, + "708543", + 1400986845, + "708543", + "{\n}", + "2014-05-24T00:00:00Z", + "15 16 28 49 55 18", + "2" + ], + [ + 544, + "75647DDC-DE92-4874-A22C-453F73FBC94F", + 544, + 1401332519, + "708543", + 1401332519, + "708543", + "{\n}", + "2014-05-28T00:00:00Z", + "02 24 28 32 59 25", + "3" + ], + [ + 546, + "07092E27-EB7F-4781-A41C-56FC4509332C", + 546, + 1401591729, + "708543", + 1401591729, + "708543", + "{\n}", + "2014-05-31T00:00:00Z", + "15 27 31 34 48 01", + "2" + ], + [ + 548, + "DBB2A4CA-C19A-4E21-9934-3774E0CCED88", + 548, + 1402024048, + "708543", + 1402024048, + "708543", + "{\n}", + "2014-06-04T00:00:00Z", + "01 07 10 22 49 24", + "3" + ], + [ + 550, + "D18F3C84-81FD-46FB-A1FC-16090A6305AC", + 550, + 1402196528, + "708543", + 1402196528, + "708543", + "{\n}", + "2014-06-07T00:00:00Z", + "28 30 35 58 59 15", + "2" + ], + [ + 552, + "3B509634-0F92-481A-8A92-B3DCD47BDB27", + 552, + 1402542055, + "708543", + 1402542055, + "708543", + "{\n}", + "2014-06-11T00:00:00Z", + "14 18 25 33 49 23", + "5" + ], + [ + 554, + "913D60FF-B8B0-400A-91CB-8C588A4D0BB3", + 554, + 1402844528, + "708543", + 1402844528, + "708543", + "{\n}", + "2014-06-14T00:00:00Z", + "09 33 42 45 54 30", + "3" + ], + [ + 556, + "54661135-06E8-401F-92FD-07186ACC9C1B", + 556, + 1403233446, + "708543", + 1403233446, + "708543", + "{\n}", + "2014-06-18T00:00:00Z", + "06 09 29 52 59 07", + "3" + ], + [ + 558, + "FD92596C-A65C-4C4D-B1BF-79E9E47619A9", + 558, + 1403406138, + "708543", + 1403406138, + "708543", + "{\n}", + "2014-06-21T00:00:00Z", + "05 06 37 41 54 26", + "3" + ], + [ + 560, + "4003D691-5309-4F30-B2B0-E19E03AAC642", + 560, + 1403751739, + "708543", + 1403751739, + "708543", + "{\n}", + "2014-06-25T00:00:00Z", + "10 20 25 50 53 35", + "4" + ], + [ + 562, + "52E50253-BF74-40B5-9581-682B443841D2", + 562, + 1404356454, + "708543", + 1404356454, + "708543", + "{\n}", + "2014-07-02T00:00:00Z", + "08 18 45 53 58 35", + "2" + ], + [ + 564, + "8CB66308-6F25-476F-95DE-A7C8E1D621CD", + 564, + 1404615645, + "708543", + 1404615645, + "708543", + "{\n}", + "2014-07-05T00:00:00Z", + "24 34 36 57 58 11", + "4" + ], + [ + 566, + "0D0AAA69-2F7A-4D5F-9DF3-C9701C7BAC22", + 566, + 1404961255, + "708543", + 1404961255, + "708543", + "{\n}", + "2014-07-09T00:00:00Z", + "09 25 42 55 57 14", + "2" + ], + [ + 568, + "55FE34B2-623D-4241-A89E-308A84B4C74B", + 568, + 1405220454, + "708543", + 1405220454, + "708543", + "{\n}", + "2014-07-12T00:00:00Z", + "02 03 07 23 51 26", + "2" + ], + [ + 570, + "FCFDF56B-4E14-49E5-867F-C2E4AB445A9F", + 570, + 1405582531, + "708543", + 1405582531, + "708543", + "{\n}", + "2014-07-16T00:00:00Z", + "05 15 18 26 32 35", + "3" + ], + [ + 572, + "1716855F-F638-4C7E-8B8D-8EF7F73B5B06", + 572, + 1405825244, + "708543", + 1405825244, + "708543", + "{\n}", + "2014-07-19T00:00:00Z", + "10 17 25 45 53 09", + "2" + ], + [ + 574, + "7D6898C6-01D5-4782-95BA-C2749ADFE9BC", + 574, + 1406170855, + "708543", + 1406170855, + "708543", + "{\n}", + "2014-07-23T00:00:00Z", + "04 10 12 22 31 03", + "5" + ], + [ + 576, + "D62285D6-7C01-4C90-B7A9-C4D14752E119", + 576, + 1406430095, + "708543", + 1406430095, + "708543", + "{\n}", + "2014-07-26T00:00:00Z", + "24 28 30 38 39 16", + "2" + ], + [ + 578, + "394E9921-468B-4E29-B772-59A0C54F5492", + 578, + 1406775657, + "708543", + 1406775657, + "708543", + "{\n}", + "2014-07-30T00:00:00Z", + "13 30 42 49 53 29", + "3" + ], + [ + 580, + "284B0E05-5283-488D-AFE0-5B256E9D81C0", + 580, + 1407034866, + "708543", + 1407034866, + "708543", + "{\n}", + "2014-08-02T00:00:00Z", + "12 26 44 46 47 29", + "2" + ], + [ + 582, + "62B6DC77-A166-4553-8D32-8A8F7840EC9F", + 582, + 1407380456, + "708543", + 1407380456, + "708543", + "{\n}", + "2014-08-06T00:00:00Z", + "01 08 24 28 49 24", + "5" + ], + [ + 584, + "B5ACA65E-F5FE-4764-8138-2C700D050E05", + 584, + 1407639655, + "708543", + 1407639655, + "708543", + "{\n}", + "2014-08-09T00:00:00Z", + "03 12 31 34 51 24", + "2" + ], + [ + 586, + "FB356DBD-E3D3-465F-8A17-C7465009E078", + 586, + 1407985265, + "708543", + 1407985265, + "708543", + "{\n}", + "2014-08-13T00:00:00Z", + "08 37 39 40 52 24", + "2" + ], + [ + 588, + "1AADCEC8-EF2A-47A0-9508-69E2D0A25C21", + 588, + 1408244445, + "708543", + 1408244445, + "708543", + "{\n}", + "2014-08-16T00:00:00Z", + "07 08 17 48 59 09", + "2" + ], + [ + 590, + "ADB2B268-7B1F-4A3C-B252-DF4298ED22F6", + 590, + 1408590066, + "708543", + 1408590066, + "708543", + "{\n}", + "2014-08-20T00:00:00Z", + "04 08 21 38 40 03", + "2" + ], + [ + 592, + "F1DB5012-8A45-4E79-B123-79C3F17AE2DA", + 592, + 1408849266, + "708543", + 1408849266, + "708543", + "{\n}", + "2014-08-23T00:00:00Z", + "28 32 35 36 52 31", + "3" + ], + [ + 594, + "B33326D6-1FA2-4719-9888-9C6E88EBFFEA", + 594, + 1409194865, + "708543", + 1409194865, + "708543", + "{\n}", + "2014-08-27T00:00:00Z", + "17 24 26 45 46 19", + "3" + ], + [ + 596, + "4A22925B-EB06-46B1-BB68-407C5E31D5E7", + 596, + 1409454066, + "708543", + 1409454066, + "708543", + "{\n}", + "2014-08-30T00:00:00Z", + "05 28 31 52 59 27", + "2" + ], + [ + 598, + "7858F42B-EB4E-408A-A84B-5AEBA66AA3DF", + 598, + 1409886079, + "708543", + 1409886079, + "708543", + "{\n}", + "2014-09-03T00:00:00Z", + "02 16 43 45 51 35", + "3" + ], + [ + 600, + "97430822-1C96-46B9-92BF-86AB1BA10905", + 600, + 1410058856, + "708543", + 1410058856, + "708543", + "{\n}", + "2014-09-06T00:00:00Z", + "09 29 31 43 50 18", + "2" + ], + [ + 602, + "CABB0AFD-C37C-4E49-B8C6-7D5F86DCE1A7", + 602, + 1410404493, + "708543", + 1410404493, + "708543", + "{\n}", + "2014-09-10T00:00:00Z", + "02 14 39 40 43 13", + "5" + ], + [ + 604, + "D1EB641C-B9E7-4958-BFA3-6A6E353EA51A", + 604, + 1410857379, + "708543", + 1410857379, + "708543", + "{\n}", + "2014-09-13T00:00:00Z", + "01 06 16 37 53 27", + "3" + ], + [ + 606, + "68358BCC-7ACC-4505-91BA-33741DE045AA", + 606, + 1411009291, + "708543", + 1411009291, + "708543", + "{\n}", + "2014-09-17T00:00:00Z", + "18 25 36 48 50 23", + "2" + ], + [ + 608, + "58DCE448-E60B-4D6A-A67C-0B31304E01D4", + 608, + 1411484653, + "708543", + 1411484653, + "708543", + "{\n}", + "2014-09-20T00:00:00Z", + "22 23 30 37 39 16", + "4" + ], + [ + 610, + "A125446B-3200-4E26-8E30-D3E0D11AEEA8", + 610, + 1411741517, + "708543", + 1411741517, + "708543", + "{\n}", + "2014-09-24T00:00:00Z", + "07 14 21 24 41 26", + "4" + ], + [ + 612, + "44FDD0E0-D854-4CBB-A674-4E748BB851E6", + 612, + 1411873297, + "708543", + 1411873297, + "708543", + "{\n}", + "2014-09-27T00:00:00Z", + "02 11 35 52 54 13", + "3" + ], + [ + 614, + "833921F3-DA63-4F64-8435-FE0FF6907174", + 614, + 1412218893, + "708543", + 1412218893, + "708543", + "{\n}", + "2014-10-01T00:00:00Z", + "01 04 18 20 45 07", + "2" + ], + [ + 616, + "EE6B6F59-37D7-45CC-BE81-AA2F1F308F2C", + 616, + 1412521327, + "708543", + 1412521327, + "708543", + "{\n}", + "2014-10-04T00:00:00Z", + "13 18 24 25 33 31", + "2" + ], + [ + 618, + "F8E7AC21-2BDD-4DEE-97A9-7228CF621E0A", + 618, + 1412823672, + "708543", + 1412823672, + "708543", + "{\n}", + "2014-10-08T00:00:00Z", + "05 16 31 46 50 18", + "3" + ], + [ + 620, + "E8BE2206-8EF5-4CBA-BC14-97458F655875", + 620, + 1413082889, + "708543", + 1413082889, + "708543", + "{\n}", + "2014-10-11T00:00:00Z", + "10 19 37 38 39 28", + "2" + ], + [ + 622, + "36FCC416-19AC-49D7-A6A5-6F2B02B14037", + 622, + 1413428491, + "708543", + 1413428491, + "708543", + "{\n}", + "2014-10-15T00:00:00Z", + "05 07 19 27 28 20", + "2" + ], + [ + 624, + "4DB598EB-4512-4085-AB52-B31451700CE4", + 624, + 1413687689, + "708543", + 1413687689, + "708543", + "{\n}", + "2014-10-18T00:00:00Z", + "20 26 27 36 54 19", + "2" + ], + [ + 626, + "D8A3E583-5FAB-4687-9C12-DF66BC25D1A1", + 626, + 1414033290, + "708543", + 1414033290, + "708543", + "{\n}", + "2014-10-22T00:00:00Z", + "29 30 40 42 50 16", + "2" + ], + [ + 628, + "94A238A4-0D81-4904-93F0-94206E2A507D", + 628, + 1414292491, + "708543", + 1414292491, + "708543", + "{\n}", + "2014-10-25T00:00:00Z", + "06 10 51 54 57 12", + "2" + ], + [ + 630, + "6A101A82-36BA-47CD-965F-CD0E9DC46DA1", + 630, + 1414638069, + "708543", + 1414638069, + "708543", + "{\n}", + "2014-10-29T00:00:00Z", + "25 28 48 57 59 16", + "3" + ], + [ + 632, + "C216F750-2E31-4F60-9188-F2412BF65C5C", + 632, + 1414897288, + "708543", + 1414897288, + "708543", + "{\n}", + "2014-11-01T00:00:00Z", + "01 03 13 25 38 17", + "2" + ], + [ + 634, + "C2DD204C-8C36-4F3A-826C-93A4B5FDA4B9", + 634, + 1415329396, + "708543", + 1415329396, + "708543", + "{\n}", + "2014-11-05T00:00:00Z", + "02 11 19 21 42 34", + "3" + ], + [ + 636, + "10664F33-06F4-44A8-ACFC-B4577D5EC5EA", + 636, + 1415502092, + "708543", + 1415502092, + "708543", + "{\n}", + "2014-11-08T00:00:00Z", + "09 19 33 38 54 15", + "3" + ], + [ + 638, + "412214CC-C4CC-4993-AA11-7F6FAE4060AF", + 638, + 1415847687, + "708543", + 1415847687, + "708543", + "{\n}", + "2014-11-12T00:00:00Z", + "37 39 51 52 55 11", + "3" + ], + [ + 640, + "8590E6C5-15BF-42B1-A4F6-6C15C6C21B8B", + 640, + 1416193376, + "708543", + 1416193376, + "708543", + "{\n}", + "2014-11-15T00:00:00Z", + "13 16 33 35 51 28", + "2" + ], + [ + 642, + "A8BAE147-EA3C-4252-ABE0-06641E9414C2", + 642, + 1416452533, + "708543", + 1416452533, + "708543", + "{\n}", + "2014-11-19T00:00:00Z", + "06 36 38 48 51 17", + "2" + ], + [ + 644, + "8856B080-2BF0-4C94-919F-CAD7D14D394B", + 644, + 1416711688, + "708543", + 1416711688, + "708543", + "{\n}", + "2014-11-22T00:00:00Z", + "23 49 53 54 57 35", + "2" + ], + [ + 646, + "EDE28D34-E74E-4EB6-AA31-B7E291380862", + 646, + 1417057290, + "708543", + 1417057290, + "708543", + "{\n}", + "2014-11-26T00:00:00Z", + "16 17 22 46 54 35", + "5" + ], + [ + 648, + "492FE8DB-DF45-46CC-98A2-75020B7AE310", + 648, + 1417316490, + "708543", + 1417316490, + "708543", + "{\n}", + "2014-11-29T00:00:00Z", + "13 24 30 42 48 27", + "2" + ], + [ + 650, + "8A284F29-40F3-4934-80C2-DEC138E688C4", + 650, + 1417662093, + "708543", + 1417662093, + "708543", + "{\n}", + "2014-12-03T00:00:00Z", + "25 30 32 46 54 26", + "3" + ], + [ + 652, + "6B8C9416-B679-4062-AE0E-2F5D4DE63AAB", + 652, + 1417921272, + "708543", + 1417921272, + "708543", + "{\n}", + "2014-12-06T00:00:00Z", + "12 15 22 43 49 14", + "2" + ], + [ + 654, + "B5E65633-5DC5-41A9-A777-47BF48B5694F", + 654, + 1418266870, + "708543", + 1418266870, + "708543", + "{\n}", + "2014-12-10T00:00:00Z", + "34 44 48 54 55 10", + "2" + ], + [ + 656, + "2078DFB3-E426-458F-B76C-8CF659E96CDD", + 656, + 1418526094, + "708543", + 1418526094, + "708543", + "{\n}", + "2014-12-13T00:00:00Z", + "05 13 28 43 55 33", + "3" + ], + [ + 658, + "576E343A-594A-49F4-BAF2-320389AED2C8", + 658, + 1418871699, + "708543", + 1418871699, + "708543", + "{\n}", + "2014-12-17T00:00:00Z", + "22 31 38 47 48 15", + "3" + ], + [ + 660, + "C5AF5FF2-DA14-4056-865F-7C7F55E705CB", + 660, + 1419130892, + "708543", + 1419130892, + "708543", + "{\n}", + "2014-12-20T00:00:00Z", + "14 15 19 31 56 05", + "5" + ], + [ + 662, + "5E6A6652-C161-4DA4-9D8E-1791C9D0DDA5", + 662, + 1419476499, + "708543", + 1419476499, + "708543", + "{\n}", + "2014-12-24T00:00:00Z", + "11 12 46 47 50 22", + "4" + ], + [ + 664, + "A973E6CD-C592-490A-A8B9-99597CFB0166", + 664, + 1419735679, + "708543", + 1419735679, + "708543", + "{\n}", + "2014-12-27T00:00:00Z", + "07 10 11 14 36 15", + "2" + ], + [ + 666, + "852D9F3D-2D01-456C-97B3-323697723F5F", + 666, + 1420081293, + "708543", + 1420081293, + "708543", + "{\n}", + "2014-12-31T00:00:00Z", + "17 27 37 40 53 35", + "2" + ], + [ + 668, + "3F7A2659-CCCC-4C35-BD86-0E3C025C9311", + 668, + 1420340499, + "708543", + 1420340499, + "708543", + "{\n}", + "2015-01-03T00:00:00Z", + "04 18 43 46 55 25", + "3" + ], + [ + 670, + "434CE58A-723C-4C47-9D33-67064A0081B4", + 670, + 1420686097, + "708543", + 1420686097, + "708543", + "{\n}", + "2015-01-07T00:00:00Z", + "14 15 47 49 59 10", + "2" + ], + [ + 672, + "C9C20E1B-B660-43F9-80EE-BFA56EB5ADFF", + 672, + 1420945292, + "708543", + 1420945292, + "708543", + "{\n}", + "2015-01-10T00:00:00Z", + "02 09 19 28 29 19", + "5" + ], + [ + 674, + "60D4CBA8-C33C-4F8D-9A5F-A091A06EEE39", + 674, + 1421290892, + "708543", + 1421290892, + "708543", + "{\n}", + "2015-01-14T00:00:00Z", + "02 04 10 41 53 22", + "5" + ], + [ + 676, + "96C3084D-A699-477E-940E-7540D2E079DD", + 676, + 1421550089, + "708543", + 1421550089, + "708543", + "{\n}", + "2015-01-17T00:00:00Z", + "15 16 23 27 36 09", + "2" + ], + [ + 678, + "64D16892-1A8F-4BD3-AD08-0F12AF37DC5B", + 678, + 1421895752, + "708543", + 1421895752, + "708543", + "{\n}", + "2015-01-21T00:00:00Z", + "11 12 15 28 57 23", + "4" + ], + [ + 680, + "9B98D299-2E89-45CC-9C20-CA9A9858401C", + 680, + 1422154888, + "708543", + 1422154888, + "708543", + "{\n}", + "2015-01-24T00:00:00Z", + "16 19 20 29 33 10", + "2" + ], + [ + 682, + "C8B9F03E-D092-4B68-A882-060CC9A3D5A4", + 682, + 1422500493, + "708543", + 1422500493, + "708543", + "{\n}", + "2015-01-28T00:00:00Z", + "12 24 35 36 49 01", + "5" + ], + [ + 684, + "2031E7C9-B0FA-43E5-A952-25686F49FE00", + 684, + 1422759691, + "708543", + 1422759691, + "708543", + "{\n}", + "2015-01-31T00:00:00Z", + "05 11 16 26 50 34", + "2" + ], + [ + 686, + "B7216262-139E-4F1A-BA84-5DB845271DAE", + 686, + 1423105293, + "708543", + 1423105293, + "708543", + "{\n}", + "2015-02-04T00:00:00Z", + "24 36 51 52 56 22", + "2" + ], + [ + 688, + "08D2F580-1207-45F6-A29F-7FE66620CD90", + 688, + 1423364488, + "708543", + 1423364488, + "708543", + "{\n}", + "2015-02-07T00:00:00Z", + "05 10 21 34 58 33", + "5" + ], + [ + 690, + "DDF1543E-9A9B-4ACE-BAFE-8AB37973E90C", + 690, + 1423710069, + "708543", + 1423710069, + "708543", + "{\n}", + "2015-02-11T00:00:00Z", + "11 13 25 39 54 19", + "3" + ], + [ + 692, + "435F62B2-DF03-4FB8-A8B8-52E5A75666D3", + 692, + 1423969290, + "708543", + 1423969290, + "708543", + "{\n}", + "2015-02-14T00:00:00Z", + "01 24 44 45 51 28", + "2" + ], + [ + 694, + "3156E6C0-2C89-45D1-9CD4-26C73005A7B3", + 694, + 1424314889, + "708543", + 1424314889, + "708543", + "{\n}", + "2015-02-18T00:00:00Z", + "01 09 29 32 49 22", + "2" + ], + [ + 696, + "78AFD76F-A532-4015-821A-A6052893850A", + 696, + 1424574090, + "708543", + 1424574090, + "708543", + "{\n}", + "2015-02-21T00:00:00Z", + "10 14 18 34 51 26", + "2" + ], + [ + 698, + "1958CB7F-4F9B-461B-9304-89D6C516BF36", + 698, + 1424919689, + "708543", + 1424919689, + "708543", + "{\n}", + "2015-02-25T00:00:00Z", + "17 19 21 32 39 08", + "3" + ], + [ + 700, + "EDCD1F4D-DF40-4372-A354-00A3F20BA52E", + 700, + 1425178891, + "708543", + 1425178891, + "708543", + "{\n}", + "2015-02-28T00:00:00Z", + "11 17 25 28 46 12", + "2" + ], + [ + 702, + "F1546B7C-472E-4965-8CF5-A60A2F488AEE", + 702, + 1425524491, + "708543", + 1425524491, + "708543", + "{\n}", + "2015-03-04T00:00:00Z", + "08 12 15 35 50 32", + "2" + ], + [ + 704, + "B79C61A2-F6BE-45C7-A8E2-AF96CAF6BCA8", + 704, + 1425783779, + "708543", + 1425783779, + "708543", + "{\n}", + "2015-03-07T00:00:00Z", + "34 36 38 42 50 33", + "4" + ], + [ + 706, + "65C41C93-2669-45C8-BF86-9583480708E0", + 706, + 1426129290, + "708543", + 1426129290, + "708543", + "{\n}", + "2015-03-11T00:00:00Z", + "11 24 31 40 44 27", + "2" + ], + [ + 708, + "21E7CFAA-5C8C-4714-B690-23C86D9DD12F", + 708, + 1426388488, + "708543", + 1426388488, + "708543", + "{\n}", + "2015-03-14T00:00:00Z", + "08 14 39 46 47 18", + "2" + ], + [ + 710, + "82F2F807-EC9F-42E1-B804-AEEABBC72D9E", + 710, + 1426734087, + "708543", + 1426734087, + "708543", + "{\n}", + "2015-03-18T00:00:00Z", + "14 25 30 33 47 08", + "2" + ], + [ + 712, + "47FE9CA5-F869-4345-A69D-5E941CF5FFBB", + 712, + 1426993286, + "708543", + 1426993286, + "708543", + "{\n}", + "2015-03-21T00:00:00Z", + "11 16 30 38 42 07", + "4" + ], + [ + 714, + "54EE26F7-D934-48B1-8BA1-B3285B3FBC19", + 714, + 1427338886, + "708543", + 1427338886, + "708543", + "{\n}", + "2015-03-25T00:00:00Z", + "07 19 23 50 54 14", + "2" + ], + [ + 716, + "9934E265-895E-421B-8ACC-BDE393F70FF3", + 716, + 1427598086, + "708543", + 1427598086, + "708543", + "{\n}", + "2015-03-28T00:00:00Z", + "02 04 06 12 38 17", + "3" + ], + [ + 718, + "36663E0C-0277-4255-B11C-2F697A9B8525", + 718, + 1427943687, + "708543", + 1427943687, + "708543", + "{\n}", + "2015-04-01T00:00:00Z", + "02 30 33 39 44 01", + "3" + ], + [ + 720, + "C0E1AACD-A900-4A28-AA88-B712DB48FCC0", + 720, + 1428202890, + "708543", + 1428202890, + "708543", + "{\n}", + "2015-04-04T00:00:00Z", + "33 39 40 41 54 28", + "3" + ], + [ + 722, + "92E8465A-5CDF-4BED-83FA-7BD027280751", + 722, + 1428548489, + "708543", + 1428548489, + "708543", + "{\n}", + "2015-04-08T00:00:00Z", + "01 19 45 46 58 29", + "2" + ], + [ + 724, + "E6490D86-EF2D-4C79-A2E1-DCD02F7215BF", + 724, + 1428807687, + "708543", + 1428807687, + "708543", + "{\n}", + "2015-04-11T00:00:00Z", + "01 12 32 42 58 12", + "2" + ], + [ + 726, + "02CAC888-050D-48A5-868C-B37CC88EEC42", + 726, + 1429153308, + "708543", + 1429153308, + "708543", + "{\n}", + "2015-04-15T00:00:00Z", + "01 16 21 29 40 30", + "3" + ], + [ + 728, + "81E5718B-6F5D-49A2-B3A6-E8C5A8C49458", + 728, + 1429412486, + "708543", + 1429412486, + "708543", + "{\n}", + "2015-04-18T00:00:00Z", + "13 22 23 29 31 17", + "3" + ], + [ + 730, + "4ED36D51-0CD1-403B-BF6F-474E76D12866", + 730, + 1429758092, + "708543", + 1429758092, + "708543", + "{\n}", + "2015-04-22T00:00:00Z", + "10 14 25 39 53 18", + "2" + ], + [ + 732, + "1E602E88-5A04-4E97-81F4-1AC8E0F65593", + 732, + 1430017289, + "708543", + 1430017289, + "708543", + "{\n}", + "2015-04-25T00:00:00Z", + "21 33 35 38 45 12", + "2" + ], + [ + 734, + "7E163D25-1D6C-41EC-98F3-FCB6323BBE21", + 734, + 1430362890, + "708543", + 1430362890, + "708543", + "{\n}", + "2015-04-29T00:00:00Z", + "01 26 34 38 51 06", + "3" + ], + [ + 736, + "6AE4172D-2045-4718-875A-B5FF15FF15D7", + 736, + 1430622097, + "708543", + 1430622097, + "708543", + "{\n}", + "2015-05-02T00:00:00Z", + "02 06 11 30 31 33", + "3" + ], + [ + 738, + "C36A8A54-82C5-48FE-AA7E-570DB8ED39AD", + 738, + 1430967717, + "708543", + 1430967717, + "708543", + "{\n}", + "2015-05-06T00:00:00Z", + "23 24 27 39 41 30", + "5" + ], + [ + 740, + "3CF64B67-5986-4A6E-86D2-3D3A75006C2D", + 740, + 1431226891, + "708543", + 1431226891, + "708543", + "{\n}", + "2015-05-09T00:00:00Z", + "04 15 17 35 58 17", + "3" + ], + [ + 742, + "21A93C94-A9CF-4C66-8752-DB70A3C877E9", + 742, + 1431572489, + "708543", + 1431572489, + "708543", + "{\n}", + "2015-05-13T00:00:00Z", + "01 25 29 31 47 07", + "3" + ], + [ + 744, + "852204B9-3070-4BB2-93D6-89525B2A6A88", + 744, + 1431831689, + "708543", + 1431831689, + "708543", + "{\n}", + "2015-05-16T00:00:00Z", + "24 29 38 48 52 32", + "2" + ], + [ + 746, + "C58E93C9-ED63-4A6B-8E70-DB0E572779DF", + 746, + 1432177299, + "708543", + 1432177299, + "708543", + "{\n}", + "2015-05-20T00:00:00Z", + "01 12 28 35 44 25", + "3" + ], + [ + 748, + "4BA1309D-2E3A-47C7-BCB0-D5E8AACF8A23", + 748, + 1432436488, + "708543", + 1432436488, + "708543", + "{\n}", + "2015-05-23T00:00:00Z", + "09 15 17 31 43 16", + "4" + ], + [ + 750, + "1BFBA543-A31E-4A61-9EE2-842B252E1A49", + 750, + 1432782091, + "708543", + 1432782091, + "708543", + "{\n}", + "2015-05-27T00:00:00Z", + "08 15 34 53 59 23", + "2" + ], + [ + 752, + "A176D8B7-2B06-4638-B917-DFF229554FC5", + 752, + 1433041293, + "708543", + 1433041293, + "708543", + "{\n}", + "2015-05-30T00:00:00Z", + "08 09 25 56 57 22", + "2" + ], + [ + 754, + "9B16EFF0-1C1A-43E1-89D0-0A138591BF89", + 754, + 1433386892, + "708543", + 1433386892, + "708543", + "{\n}", + "2015-06-03T00:00:00Z", + "06 08 13 37 40 11", + "2" + ], + [ + 756, + "D2B7FDF6-0C3C-4BA6-8AE3-3EDD2D3554B9", + 756, + 1433646129, + "708543", + 1433646129, + "708543", + "{\n}", + "2015-06-06T00:00:00Z", + "08 13 18 27 43 15", + "4" + ], + [ + 758, + "7535E4D2-583F-4096-8C62-BF639B1F0C4F", + 758, + 1433991688, + "708543", + 1433991688, + "708543", + "{\n}", + "2015-06-10T00:00:00Z", + "31 32 48 49 53 25", + "2" + ], + [ + 760, + "87226083-EDDC-40D5-AC6E-2E17E8F7DAF1", + 760, + 1434250895, + "708543", + 1434250895, + "708543", + "{\n}", + "2015-06-13T00:00:00Z", + "29 41 48 52 54 29", + "2" + ], + [ + 762, + "D9A556D7-FAF0-4451-A6D9-8E7ABAAF75F1", + 762, + 1434596511, + "708543", + 1434596511, + "708543", + "{\n}", + "2015-06-17T00:00:00Z", + "20 21 22 41 54 07", + "3" + ], + [ + 764, + "0B4B4E43-2914-4252-9B4D-445656DD001E", + 764, + 1434855712, + "708543", + 1434855712, + "708543", + "{\n}", + "2015-06-20T00:00:00Z", + "09 10 16 20 57 15", + "2" + ], + [ + 766, + "402F6B05-3B40-4839-B20E-4C86605592EA", + 766, + 1435201309, + "708543", + 1435201309, + "708543", + "{\n}", + "2015-06-24T00:00:00Z", + "03 05 10 22 32 07", + "4" + ], + [ + 768, + "85C14851-24B0-4482-8610-DB5318822E47", + 768, + 1435460508, + "708543", + 1435460508, + "708543", + "{\n}", + "2015-06-27T00:00:00Z", + "18 28 35 46 49 27", + "5" + ], + [ + 770, + "F917646C-C9E4-4DD0-9705-1AE52C0DBEE2", + 770, + 1435806142, + "708543", + 1435806142, + "708543", + "{\n}", + "2015-07-01T00:00:00Z", + "07 24 26 31 41 25", + "2" + ], + [ + 772, + "F39FD4CD-D959-462E-B398-9A813FA9128A", + 772, + 1436065288, + "708543", + 1436065288, + "708543", + "{\n}", + "2015-07-04T00:00:00Z", + "03 06 14 18 24 21", + "3" + ], + [ + 774, + "53124F7D-90C3-4B9D-B7BB-A5DD90478C00", + 774, + 1436410928, + "708543", + 1436410928, + "708543", + "{\n}", + "2015-07-08T00:00:00Z", + "04 15 25 27 30 18", + "3" + ], + [ + 776, + "3B86E5CC-7CFA-4329-A914-E0BCBA3B017F", + 776, + 1436670069, + "708543", + 1436670069, + "708543", + null, + "2015-07-11T00:00:00Z", + "11 39 46 52 54 03", + "2" + ], + [ + 777, + "4D234C5C-F376-4344-BD6D-A5770CD56A1F", + 777, + 1437015729, + "708543", + 1437015729, + "708543", + null, + "2015-07-15T00:00:00Z", + "13 16 34 45 50 11", + "2" + ], + [ + 778, + "24EE016C-7F9D-4E0D-AA08-C4AF54E66F11", + 778, + 1437274885, + "708543", + 1437274885, + "708543", + null, + "2015-07-18T00:00:00Z", + "06 37 39 45 55 33", + "3" + ], + [ + 779, + "C9C2B6CC-06CB-4F01-9281-7E4A8C43FB8E", + 779, + 1437620486, + "708543", + 1437620486, + "708543", + null, + "2015-07-22T00:00:00Z", + "12 31 43 44 57 11", + "2" + ], + [ + 780, + "CC90B341-400A-4806-BBAF-E8E327598BD2", + 780, + 1437879687, + "708543", + 1437879687, + "708543", + null, + "2015-07-25T00:00:00Z", + "27 29 34 41 44 02", + "3" + ], + [ + 781, + "E512BA46-7C58-41C7-9DBD-2457E9029D67", + 781, + 1438225285, + "708543", + 1438225285, + "708543", + null, + "2015-07-29T00:00:00Z", + "04 22 27 28 52 35", + "3" + ], + [ + 782, + "10064E9F-AD64-429D-84F8-E8D410526A6F", + 782, + 1438484508, + "708543", + 1438484508, + "708543", + null, + "2015-08-01T00:00:00Z", + "07 13 24 49 57 15", + "3" + ], + [ + 783, + "C787A37A-573D-4859-87E7-119575F1D112", + 783, + 1438830107, + "708543", + 1438830107, + "708543", + null, + "2015-08-05T00:00:00Z", + "09 11 14 16 42 19", + "2" + ], + [ + 784, + "DD6C5E0E-BD8D-4290-AA73-94E40E188200", + 784, + 1439089330, + "708543", + 1439089330, + "708543", + null, + "2015-08-08T00:00:00Z", + "09 34 48 52 54 15", + "4" + ], + [ + 785, + "A3D0D844-6B97-4671-87DA-693740D7D8AF", + 785, + 1439434947, + "708543", + 1439434947, + "708543", + null, + "2015-08-12T00:00:00Z", + "08 13 29 38 52 28", + "2" + ], + [ + 786, + "3728F12A-F565-4B44-8176-2EEF0D165955", + 786, + 1439694118, + "708543", + 1439694118, + "708543", + null, + "2015-08-15T00:00:00Z", + "03 13 17 42 52 24", + "4" + ], + [ + 787, + "298DD735-4622-4189-8EE7-F86F90B5AFCE", + 787, + 1440039778, + "708543", + 1440039778, + "708543", + null, + "2015-08-19T00:00:00Z", + "06 08 43 48 50 07", + "2" + ], + [ + 788, + "DA91602B-3A63-4F41-A4E9-2CBF1168AE59", + 788, + 1440298930, + "708543", + 1440298930, + "708543", + null, + "2015-08-22T00:00:00Z", + "04 12 14 21 55 07", + "4" + ], + [ + 789, + "2529F7C9-6E07-4C91-B535-DF2BEFDE2D56", + 789, + 1440644516, + "708543", + 1440644516, + "708543", + null, + "2015-08-26T00:00:00Z", + "02 22 32 45 56 12", + "5" + ], + [ + 790, + "97C9829B-CEEE-4118-A38B-F7B7F79C31EF", + 790, + 1440959254, + "708543", + 1440959254, + "708543", + null, + "2015-08-29T00:00:00Z", + "18 21 25 28 29 16", + "2" + ], + [ + 791, + "3EF82611-85F8-4A8A-8E3A-AA1FD0317354", + 791, + 1441249319, + "708543", + 1441249319, + "708543", + null, + "2015-09-02T00:00:00Z", + "17 22 30 46 56 16", + "3" + ], + [ + 792, + "63CC0BFD-0878-4D37-9699-69D02473AA08", + 792, + 1441508507, + "708543", + 1441508507, + "708543", + null, + "2015-09-05T00:00:00Z", + "10 16 18 29 45 19", + "2" + ], + [ + 793, + "73962F5A-8EC6-41F9-B0D0-13D7E9F944C4", + 793, + 1441854115, + "708543", + 1441854115, + "708543", + null, + "2015-09-09T00:00:00Z", + "44 45 47 50 51 08", + "2" + ], + [ + 794, + "42753DF4-07BE-4C30-A721-B2CF0CCDB7CD", + 794, + 1442113307, + "708543", + 1442113307, + "708543", + null, + "2015-09-12T00:00:00Z", + "02 03 13 16 35 27", + "3" + ], + [ + 795, + "56B46B8A-B108-42E4-9A38-24C56DE66CE6", + 795, + 1442458906, + "708543", + 1442458906, + "708543", + null, + "2015-09-16T00:00:00Z", + "05 07 24 31 39 07", + "3" + ], + [ + 796, + "CDF7063C-D520-4F5D-861A-96755805F6F4", + 796, + 1442847785, + "708543", + 1442847785, + "708543", + null, + "2015-09-19T00:00:00Z", + "12 17 26 43 48 24", + "2" + ], + [ + 797, + "1A936092-357A-40DD-B18B-4747851BBE87", + 797, + 1443063706, + "708543", + 1443063706, + "708543", + null, + "2015-09-23T00:00:00Z", + "08 29 41 51 58 05", + "2" + ], + [ + 798, + "A06BDED2-3FEB-40F0-89A4-2CAF9B0A2858", + 798, + 1443322914, + "708543", + 1443322914, + "708543", + null, + "2015-09-26T00:00:00Z", + "23 31 42 50 57 05", + "3" + ], + [ + 799, + "DB03982B-C76B-4404-977C-C9EEA3200274", + 799, + 1443668505, + "708543", + 1443668505, + "708543", + null, + "2015-09-30T00:00:00Z", + "21 39 40 55 59 17", + "3" + ], + [ + 800, + "FABF6C69-E0F5-4F46-8BE0-3CA7766831D0", + 800, + 1443927709, + "708543", + 1443927709, + "708543", + null, + "2015-10-03T00:00:00Z", + "06 26 33 44 46 04", + "2" + ], + [ + 801, + "43CA547E-F47A-453C-B0A9-26381E38A410", + 801, + 1444273306, + "708543", + 1444273306, + "708543", + null, + "2015-10-07T00:00:00Z", + "18 30 40 48 52 09", + "3" + ], + [ + 802, + "400812A5-A956-48A9-91B1-F3D056E2F5C9", + 802, + 1444532485, + "708543", + 1444532485, + "708543", + null, + "2015-10-10T00:00:00Z", + "12 27 29 43 68 01", + "2" + ], + [ + 803, + "7ABCEB8C-820F-4379-ADFA-0D590640A30C", + 803, + 1444878105, + "708543", + 1444878105, + "708543", + null, + "2015-10-14T00:00:00Z", + "15 20 29 31 40 01", + "2" + ], + [ + 804, + "8B64AF93-027A-4027-A217-5D9DB0ED22AB", + 804, + 1445137286, + "708543", + 1445137286, + "708543", + null, + "2015-10-17T00:00:00Z", + "48 49 57 62 69 19", + "3" + ], + [ + 805, + "465C206D-BEB3-4F5C-AF45-B7C60F736D1E", + 805, + 1445482905, + "708543", + 1445482905, + "708543", + null, + "2015-10-21T00:00:00Z", + "30 32 42 56 57 11", + "4" + ], + [ + 806, + "0ECE9623-21D9-4E2B-B9F9-D67A3C284E73", + 806, + 1445742085, + "708543", + 1445742085, + "708543", + null, + "2015-10-24T00:00:00Z", + "20 31 56 60 64 02", + "3" + ], + [ + 807, + "C22995CB-CBF3-4958-B80C-F9B1F8F9B9C5", + 807, + 1446087727, + "708543", + 1446087727, + "708543", + null, + "2015-10-28T00:00:00Z", + "04 54 56 62 63 10", + "2" + ], + [ + 808, + "9DB950E1-1439-4B85-91F3-2D73EBECD6D4", + 808, + 1446346927, + "708543", + 1446346927, + "708543", + null, + "2015-10-31T00:00:00Z", + "09 20 25 47 68 07", + "2" + ], + [ + 809, + "2C693FFD-694C-4DF3-AA8E-73C92ACD38AF", + 809, + 1446692509, + "708543", + 1446692509, + "708543", + null, + "2015-11-04T00:00:00Z", + "02 12 17 20 65 17", + "4" + ], + [ + 810, + "D655D04B-E21B-4342-BD5D-C027CA362005", + 810, + 1446951708, + "708543", + 1446951708, + "708543", + null, + "2015-11-07T00:00:00Z", + "07 16 25 50 53 15", + "2" + ], + [ + 811, + "7ECA2F66-0B64-493A-9FED-BC107E02287C", + 811, + 1447297309, + "708543", + 1447297309, + "708543", + null, + "2015-11-11T00:00:00Z", + "04 26 32 55 64 18", + "3" + ], + [ + 812, + "1D579B1E-10CC-407E-B78A-9C5569D7A2F8", + 812, + 1447556507, + "708543", + 1447556507, + "708543", + null, + "2015-11-14T00:00:00Z", + "14 22 37 45 66 05", + "3" + ], + [ + 813, + "5D32E728-9113-4C09-A8CD-BDAC99661DFD", + 813, + 1447902130, + "708543", + 1447902130, + "708543", + null, + "2015-11-18T00:00:00Z", + "17 40 41 46 69 06", + "2" + ], + [ + 814, + "FCB4536B-1006-4F05-BC8D-AAFB9DF95A93", + 814, + 1448161306, + "708543", + 1448161306, + "708543", + null, + "2015-11-21T00:00:00Z", + "37 47 50 52 57 21", + "3" + ], + [ + 815, + "21E5D4E6-B471-4928-9385-4CE1ECF18792", + 815, + 1448506906, + "708543", + 1448506906, + "708543", + null, + "2015-11-25T00:00:00Z", + "16 29 53 58 69 21", + "2" + ], + [ + 816, + "B18D454A-B143-47CE-A4E8-EA78D6778190", + 816, + 1448766107, + "708543", + 1448766107, + "708543", + null, + "2015-11-28T00:00:00Z", + "02 06 47 66 67 02", + "3" + ], + [ + 817, + "5F02EEC4-4E7F-49AD-A4AA-9BB594D1A47F", + 817, + 1449111727, + "708543", + 1449111727, + "708543", + null, + "2015-12-02T00:00:00Z", + "14 18 19 32 64 09", + "2" + ], + [ + 818, + "FA5ECE8D-2868-4AA2-AE84-8272D4C1C3D9", + 818, + 1449370908, + "708543", + 1449370908, + "708543", + null, + "2015-12-05T00:00:00Z", + "13 27 33 47 68 13", + "2" + ], + [ + 819, + "6655127F-8D2F-493B-8BE8-8A3D3073C305", + 819, + 1449716510, + "708543", + 1449716510, + "708543", + null, + "2015-12-09T00:00:00Z", + "07 10 16 46 56 01", + "2" + ], + [ + 820, + "0B0D036D-AAA7-4012-98DA-45227548BADF", + 820, + 1449975728, + "708543", + 1449975728, + "708543", + null, + "2015-12-12T00:00:00Z", + "02 14 19 30 62 22", + "2" + ], + [ + 821, + "DFA266CA-6A2B-4D42-8D07-283712CE541B", + 821, + 1450321306, + "708543", + 1450321306, + "708543", + null, + "2015-12-16T00:00:00Z", + "09 10 32 42 55 06", + "2" + ], + [ + 822, + "D0D8AE46-E6E2-40BF-8C54-8E58523CC68A", + 822, + 1450580489, + "708543", + 1450580489, + "708543", + null, + "2015-12-19T00:00:00Z", + "28 30 41 59 68 10", + "2" + ], + [ + 823, + "B473C73C-19F4-4C65-82A6-0E614998234A", + 823, + 1450926106, + "708543", + 1450926106, + "708543", + null, + "2015-12-23T00:00:00Z", + "16 38 55 63 67 25", + "4" + ], + [ + 824, + "0525C88E-D2C8-46A4-8408-BA8E786DA09D", + 824, + 1451185308, + "708543", + 1451185308, + "708543", + null, + "2015-12-26T00:00:00Z", + "27 40 44 59 65 20", + "2" + ], + [ + 825, + "C6064586-54E3-4309-8B9B-446C6041CB02", + 825, + 1451530913, + "708543", + 1451530913, + "708543", + null, + "2015-12-30T00:00:00Z", + "12 36 38 54 61 22", + "3" + ], + [ + 826, + "F961863C-78F0-401C-9743-1D3791C3490A", + 826, + 1451790150, + "708543", + 1451790150, + "708543", + null, + "2016-01-02T00:00:00Z", + "05 06 15 29 42 10", + "2" + ], + [ + 827, + "9D501501-D06D-46B2-9CAD-211B2F995F7A", + 827, + 1452135747, + "708543", + 1452135747, + "708543", + null, + "2016-01-06T00:00:00Z", + "02 11 47 62 63 17", + "3" + ], + [ + 828, + "F5DBEFA5-54A6-4B9A-B2FB-267CD56F9835", + 828, + 1452394927, + "708543", + 1452394927, + "708543", + null, + "2016-01-09T00:00:00Z", + "16 19 32 34 57 13", + "3" + ], + [ + 829, + "FDF34E6A-BA25-4D92-9DB7-7985BA3DCC2D", + 829, + 1452740568, + "708543", + 1452740568, + "708543", + null, + "2016-01-13T00:00:00Z", + "04 08 19 27 34 10", + "2" + ], + [ + 830, + "7EE2F9FB-7673-4DDE-AB72-3651B3AF0444", + 830, + 1453042908, + "708543", + 1453042908, + "708543", + null, + "2016-01-16T00:00:00Z", + "03 51 52 61 64 06", + "2" + ], + [ + 831, + "FACC0343-646E-4CA2-8974-C6A298077671", + 831, + 1453345367, + "708543", + 1453345367, + "708543", + null, + "2016-01-20T00:00:00Z", + "05 39 44 47 69 24", + "5" + ], + [ + 832, + "F93CCC4F-D69B-4AAB-91EB-9D7446F7A2A0", + 832, + 1453604572, + "708543", + 1453604572, + "708543", + null, + "2016-01-23T00:00:00Z", + "22 32 34 40 69 19", + "4" + ], + [ + 833, + "21149184-5031-4CDD-A832-1D34A2C7B623", + 833, + 1453950088, + "708543", + 1453950088, + "708543", + null, + "2016-01-27T00:00:00Z", + "03 12 40 52 67 21", + "2" + ], + [ + 834, + "CEA18644-71EA-460A-B8E4-A93CF3581107", + 834, + 1454209328, + "708543", + 1454209328, + "708543", + null, + "2016-01-30T00:00:00Z", + "05 12 16 31 43 18", + "4" + ], + [ + 835, + "8D0A23AA-4646-44B2-9A9E-4C25B15DB9E2", + 835, + 1454554910, + "708543", + 1454554910, + "708543", + null, + "2016-02-03T00:00:00Z", + "26 28 31 60 67 23", + "3" + ], + [ + 836, + "A1E03B5F-A887-48BA-94AF-8BA6F270AA8A", + 836, + 1454814130, + "708543", + 1454814130, + "708543", + null, + "2016-02-06T00:00:00Z", + "04 13 31 36 52 08", + "3" + ], + [ + 837, + "41D48664-EBDB-4E7E-8FAC-CD8F09739F73", + 837, + 1455159687, + "708543", + 1455159687, + "708543", + null, + "2016-02-10T00:00:00Z", + "02 03 40 50 62 05", + "2" + ], + [ + 838, + "7AEB4B66-7747-46CC-9BEA-F25ACAE6C3C9", + 838, + 1455418987, + "708543", + 1455418987, + "708543", + null, + "2016-02-13T00:00:00Z", + "07 15 18 19 36 20", + "2" + ], + [ + 839, + "6B8BE743-F22C-4A50-B2B5-380FD1D2F8EE", + 839, + 1455764517, + "708543", + 1455764517, + "708543", + null, + "2016-02-17T00:00:00Z", + "07 17 27 29 40 25", + "2" + ], + [ + 840, + "C2CCCF1C-3F1A-405F-B70F-4C6C86655FEA", + 840, + 1456023770, + "708543", + 1456023770, + "708543", + null, + "2016-02-20T00:00:00Z", + "11 12 15 16 54 25", + "5" + ], + [ + 841, + "94B1F83F-79A0-41B3-8482-9FC6C233E98B", + 841, + 1456369306, + "708543", + 1456369306, + "708543", + null, + "2016-02-24T00:00:00Z", + "21 31 64 65 67 05", + "3" + ], + [ + 842, + "026D1654-83BA-4BF3-9C2E-66FD17B5357F", + 842, + 1456628570, + "708543", + 1456628570, + "708543", + null, + "2016-02-27T00:00:00Z", + "10 11 21 22 53 18", + "3" + ], + [ + 843, + "32A2DD81-B860-4FCB-84AA-2CC4C5A2E4C6", + 843, + 1456974110, + "708543", + 1456974110, + "708543", + null, + "2016-03-02T00:00:00Z", + "12 13 44 52 62 06", + "2" + ], + [ + 844, + "59C142D9-3DAB-4426-9AE6-CE628E5A454E", + 844, + 1457233373, + "708543", + 1457233373, + "708543", + null, + "2016-03-05T00:00:00Z", + "03 27 34 59 69 19", + "2" + ], + [ + 845, + "3F050CD8-2598-4E91-8EB0-6672BE274C30", + 845, + 1457578898, + "708543", + 1457578898, + "708543", + null, + "2016-03-09T00:00:00Z", + "14 23 32 34 68 03", + "3" + ], + [ + 846, + "D6246154-1A79-49D1-8AE3-D588EEF93CAD", + 846, + 1457838158, + "708543", + 1457838158, + "708543", + null, + "2016-03-12T00:00:00Z", + "11 28 50 57 62 23", + "2" + ], + [ + 847, + "B4ADA05D-A321-4010-A151-3E00A3EC9E27", + 847, + 1458183687, + "708543", + 1458183687, + "708543", + null, + "2016-03-16T00:00:00Z", + "10 12 13 46 50 21", + "3" + ], + [ + 848, + "C44AC758-6188-4C66-889E-0C11B69B3F5A", + 848, + 1458442886, + "708543", + 1458442886, + "708543", + null, + "2016-03-19T00:00:00Z", + "11 23 43 54 60 03", + "3" + ], + [ + 849, + "F76B28BE-B8CC-4333-B8C2-8038FA04A5D7", + 849, + 1458788506, + "708543", + 1458788506, + "708543", + null, + "2016-03-23T00:00:00Z", + "05 08 15 22 49 25", + "3" + ], + [ + 850, + "DAC76276-F82B-4521-8B22-2D77AE8B65DD", + 850, + 1459047769, + "708543", + 1459047769, + "708543", + null, + "2016-03-26T00:00:00Z", + "11 23 42 52 68 06", + "3" + ], + [ + 851, + "AFA36766-0E68-4370-AF47-008B6ED8071E", + 851, + 1459393289, + "708543", + 1459393289, + "708543", + null, + "2016-03-30T00:00:00Z", + "24 44 53 55 63 19", + "2" + ], + [ + 852, + "0638F190-3A0F-43C2-8688-ED2D07E85386", + 852, + 1459652500, + "708543", + 1459652500, + "708543", + null, + "2016-04-02T00:00:00Z", + "09 28 30 40 61 03", + "2" + ], + [ + 853, + "538BA672-7387-4BB6-B077-DECC618EE0DA", + 853, + 1459998107, + "708543", + 1459998107, + "708543", + null, + "2016-04-06T00:00:00Z", + "04 28 49 60 65 25", + "2" + ], + [ + 854, + "D292DAB1-F656-478B-9776-4307D1D2E9F6", + 854, + 1460257309, + "708543", + 1460257309, + "708543", + null, + "2016-04-09T00:00:00Z", + "14 22 23 41 61 09", + "3" + ], + [ + 855, + "806C3A3C-F727-443D-AA51-A0B6FD55392C", + 855, + 1460602907, + "708543", + 1460602907, + "708543", + null, + "2016-04-13T00:00:00Z", + "30 33 35 38 64 22", + "3" + ], + [ + 856, + "6C513E67-72D5-49DC-9339-8855AE411D23", + 856, + 1460862109, + "708543", + 1460862109, + "708543", + null, + "2016-04-16T00:00:00Z", + "03 18 25 32 51 03", + "2" + ], + [ + 857, + "3CC889C1-BC6D-4AB3-9703-EDB0B0993D25", + 857, + 1461207686, + "708543", + 1461207686, + "708543", + null, + "2016-04-20T00:00:00Z", + "12 25 30 52 62 08", + "3" + ], + [ + 858, + "66E2C834-3EE5-417A-9333-8CD4C4BDDC0D", + 858, + 1461466948, + "708543", + 1461466948, + "708543", + null, + "2016-04-23T00:00:00Z", + "19 35 46 59 62 13", + "5" + ], + [ + 859, + "FB0E502B-4C20-40F1-9191-02932FFEFC20", + 859, + 1461812486, + "708543", + 1461812486, + "708543", + null, + "2016-04-27T00:00:00Z", + "02 25 33 39 64 17", + "2" + ], + [ + 860, + "EFC02B54-5324-4CEA-A33B-F13F2792B866", + 860, + 1462071708, + "708543", + 1462071708, + "708543", + null, + "2016-04-30T00:00:00Z", + "03 12 16 32 34 14", + "3" + ], + [ + 861, + "B343B51F-4E61-4B9A-8D32-4A6872B2B45D", + 861, + 1462417308, + "708543", + 1462417308, + "708543", + null, + "2016-05-04T00:00:00Z", + "30 47 57 66 69 03", + "3" + ], + [ + 862, + "27B6967E-B5D2-46D0-B7BC-DA91059FFCDB", + 862, + 1462676507, + "708543", + 1462676507, + "708543", + null, + "2016-05-07T00:00:00Z", + "05 25 26 44 66 09", + "2" + ], + [ + 863, + "A4B7173B-5E0C-4E9D-BCA4-618A323FB42D", + 863, + 1463022106, + "708543", + 1463022106, + "708543", + null, + "2016-05-11T00:00:00Z", + "20 32 52 66 69 23", + "3" + ], + [ + 864, + "CE5AB6A5-25F9-4388-9467-BD0445459BC4", + 864, + 1463281288, + "708543", + 1463281288, + "708543", + null, + "2016-05-14T00:00:00Z", + "13 27 47 64 65 09", + "3" + ], + [ + 865, + "3F367781-B30A-47AE-B947-B0D2AE4FFB10", + 865, + 1463626906, + "708543", + 1463626906, + "708543", + null, + "2016-05-18T00:00:00Z", + "23 25 39 54 67 11", + "3" + ], + [ + 866, + "2B6846C3-B065-4EEB-B321-68C75294F7C9", + 866, + 1463886110, + "708543", + 1463886110, + "708543", + null, + "2016-05-21T00:00:00Z", + "05 07 09 23 32 26", + "4" + ], + [ + 867, + "0774E3AA-3772-43E0-B98B-05EAB69847A1", + 867, + 1464231708, + "708543", + 1464231708, + "708543", + null, + "2016-05-25T00:00:00Z", + "11 24 41 59 64 15", + "3" + ], + [ + 868, + "3796D800-4922-4280-8B88-E85ED906B4DF", + 868, + 1464490907, + "708543", + 1464490907, + "708543", + null, + "2016-05-28T00:00:00Z", + "06 33 34 58 59 12", + "2" + ], + [ + 869, + "EEB99A68-457E-4AFF-A13F-427EEE2D4EB1", + 869, + 1464836507, + "708543", + 1464836507, + "708543", + null, + "2016-06-01T00:00:00Z", + "23 30 33 40 69 12", + "5" + ], + [ + 870, + "74D58C48-7E89-4118-BD99-6DBD5043656D", + 870, + 1465095690, + "708543", + 1465095690, + "708543", + null, + "2016-06-04T00:00:00Z", + "16 20 22 43 64 17", + "2" + ], + [ + 871, + "0E17BFD1-5263-4495-9CFD-817A48C251A4", + 871, + 1465441306, + "708543", + 1465441306, + "708543", + null, + "2016-06-08T00:00:00Z", + "12 25 37 60 69 20", + "3" + ], + [ + 872, + "5324C432-0CA5-46C6-8980-F6D6516D07A3", + 872, + 1465700507, + "708543", + 1465700507, + "708543", + null, + "2016-06-11T00:00:00Z", + "20 27 36 41 58 07", + "2" + ], + [ + 873, + "424D6940-1854-4E17-A840-FB6E3EFB0BC7", + 873, + 1466046088, + "708543", + 1466046088, + "708543", + null, + "2016-06-15T00:00:00Z", + "04 22 24 31 33 10", + "2" + ], + [ + 874, + "801FF99A-39BA-44A5-B34F-7A40CCC981F4", + 874, + 1466305308, + "708543", + 1466305308, + "708543", + null, + "2016-06-18T00:00:00Z", + "02 23 41 53 63 11", + "2" + ], + [ + 875, + "32B8607F-979E-4C0E-846D-5074E00DFEAB", + 875, + 1466650887, + "708543", + 1466650887, + "708543", + null, + "2016-06-22T00:00:00Z", + "14 40 42 43 52 17", + "3" + ], + [ + 876, + "FDFEF46C-8E7E-4BF8-B000-C0D8C5749D4E", + 876, + 1466910089, + "708543", + 1466910089, + "708543", + null, + "2016-06-25T00:00:00Z", + "03 27 36 56 69 25", + "2" + ], + [ + 877, + "A1087993-4142-44E5-8FF3-F8A77DEFFB06", + 877, + 1467255707, + "708543", + 1467255707, + "708543", + null, + "2016-06-29T00:00:00Z", + "23 29 37 60 64 06", + "2" + ], + [ + 878, + "4BF9DA07-A878-4846-A461-B8B46ABD9792", + 878, + 1467514914, + "708543", + 1467514914, + "708543", + null, + "2016-07-02T00:00:00Z", + "10 34 39 59 63 04", + "2" + ], + [ + 879, + "81D9BD05-0115-4833-A484-F5F5764AE5B1", + 879, + 1467860567, + "708543", + 1467860567, + "708543", + null, + "2016-07-06T00:00:00Z", + "02 24 31 57 66 18", + "3" + ], + [ + 880, + "1B7693CA-B277-4943-AC44-DBDDFE46E05B", + 880, + 1468119706, + "708543", + 1468119706, + "708543", + null, + "2016-07-09T00:00:00Z", + "10 28 32 61 64 12", + "3" + ], + [ + 881, + "82FEF08C-D90C-4582-B8C9-9703FEB75A77", + 881, + 1468465309, + "708543", + 1468465309, + "708543", + null, + "2016-07-13T00:00:00Z", + "03 15 29 54 57 10", + "3" + ], + [ + 882, + "DEF18268-C8D4-428E-A79B-A0E0AF3CBD4B", + 882, + 1468724507, + "708543", + 1468724507, + "708543", + null, + "2016-07-16T00:00:00Z", + "11 17 40 50 62 26", + "2" + ], + [ + 883, + "45A8B2F3-217E-4D2B-90A3-AE8D1B4C6174", + 883, + 1469070107, + "708543", + 1469070107, + "708543", + null, + "2016-07-20T00:00:00Z", + "06 25 35 58 66 05", + "2" + ], + [ + 884, + "B58A1782-C764-46F1-B9B9-3BFE1D6B4E52", + 884, + 1469329307, + "708543", + 1469329307, + "708543", + null, + "2016-07-23T00:00:00Z", + "05 07 23 35 39 11", + "2" + ], + [ + 885, + "7D4F8200-DF95-4382-8748-33E050967A9D", + 885, + 1469674886, + "708543", + 1469674886, + "708543", + null, + "2016-07-27T00:00:00Z", + "10 47 50 65 68 24", + "2" + ], + [ + 886, + "79F3C5B3-FD8F-49A9-A796-60542668C200", + 886, + 1469934107, + "708543", + 1469934107, + "708543", + null, + "2016-07-30T00:00:00Z", + "11 17 21 23 32 05", + "2" + ], + [ + 887, + "A5A0BD2D-64AB-4811-82AB-D61EEF1AF7B1", + 887, + 1470279686, + "708543", + 1470279686, + "708543", + null, + "2016-08-03T00:00:00Z", + "09 11 27 66 67 02", + "3" + ], + [ + 888, + "BD4C1208-94E5-4D63-9D5A-586C1A3822B7", + 888, + 1470538909, + "708543", + 1470538909, + "708543", + null, + "2016-08-06T00:00:00Z", + "20 33 36 47 52 12", + "3" + ], + [ + 889, + "A9CAA420-DE01-412C-A756-F1A663F4AA29", + 889, + 1470884507, + "708543", + 1470884507, + "708543", + null, + "2016-08-10T00:00:00Z", + "23 56 61 64 67 12", + "5" + ], + [ + 890, + "8E27E501-E185-4712-BCDC-F3FB1230EDF8", + 890, + 1471143709, + "708543", + 1471143709, + "708543", + null, + "2016-08-13T00:00:00Z", + "38 44 60 64 69 06", + "2" + ], + [ + 891, + "BD66F02B-64EE-4CC2-BD17-556CA0E719C7", + 891, + 1471489307, + "708543", + 1471489307, + "708543", + null, + "2016-08-17T00:00:00Z", + "33 44 49 50 52 08", + "3" + ], + [ + 892, + "A479CB83-1789-467D-B719-50667324A737", + 892, + 1471773690, + "708543", + 1471773690, + "708543", + null, + "2016-08-20T00:00:00Z", + "03 06 21 60 68 24", + "2" + ], + [ + 893, + "9839668D-4E14-477E-9048-78609B14F262", + 893, + 1472119267, + "708543", + 1472119267, + "708543", + null, + "2016-08-24T00:00:00Z", + "09 11 25 64 65 16", + "3" + ], + [ + 894, + "7BE65F8C-50FB-4760-B95B-5AA9C7D7BDEB", + 894, + 1472378508, + "708543", + 1472378508, + "708543", + null, + "2016-08-27T00:00:00Z", + "04 32 48 49 63 20", + "2" + ], + [ + 895, + "64CEEEC0-29D4-4F27-BAB1-A71CA938691D", + 895, + 1472724066, + "708543", + 1472724066, + "708543", + null, + "2016-08-31T00:00:00Z", + "05 10 24 56 61 12", + "2" + ], + [ + 896, + "29B26B2B-D58E-44AD-A903-DBEBE05E2B0B", + 896, + 1472983266, + "708543", + 1472983266, + "708543", + null, + "2016-09-03T00:00:00Z", + "07 39 50 59 67 25", + "3" + ], + [ + 897, + "D37CF53F-C59C-41D3-9C80-6FF81CE73730", + 897, + 1473363020, + "708543", + 1473363020, + "708543", + null, + "2016-09-07T00:00:00Z", + "22 23 29 33 55 21", + "2" + ], + [ + 898, + "22706198-5E98-4646-987C-26275EA758CA", + 898, + 1473588064, + "708543", + 1473588064, + "708543", + null, + "2016-09-10T00:00:00Z", + "03 17 49 55 68 08", + "2" + ], + [ + 899, + "BC2D6956-1D23-4DB9-9286-BB5EEAEF83A4", + 899, + 1473933706, + "708543", + 1473933706, + "708543", + null, + "2016-09-14T00:00:00Z", + "10 11 23 28 31 14", + "2" + ], + [ + 900, + "3CAD5A54-A6F9-43B5-A212-1D9B57C576B0", + 900, + 1474192866, + "708543", + 1474192866, + "708543", + null, + "2016-09-17T00:00:00Z", + "09 19 51 55 62 14", + "4" + ], + [ + 901, + "6BAC9382-FE49-4853-80FB-52C1A70CD422", + 901, + 1474538472, + "708543", + 1474538472, + "708543", + null, + "2016-09-21T00:00:00Z", + "01 28 63 67 69 17", + "4" + ], + [ + 902, + "ACB5DEF7-15F4-45FD-B2E9-242C8B909E9D", + 902, + 1474797668, + "708543", + 1474797668, + "708543", + null, + "2016-09-24T00:00:00Z", + "07 15 20 29 41 22", + "2" + ], + [ + 903, + "8FD3E76A-DEED-458A-A9CA-D6CAA1AA7A6B", + 903, + 1475143268, + "708543", + 1475143268, + "708543", + null, + "2016-09-28T00:00:00Z", + "30 38 52 53 62 01", + "3" + ], + [ + 904, + "BB31C897-1552-494E-B27E-BEC1B7D72C29", + 904, + 1475402464, + "708543", + 1475402464, + "708543", + null, + "2016-10-01T00:00:00Z", + "02 12 50 61 64 01", + "2" + ], + [ + 905, + "DB9A260F-8EDD-4D7E-B6F4-D24AD0FF3A4C", + 905, + 1475748063, + "708543", + 1475748063, + "708543", + null, + "2016-10-05T00:00:00Z", + "08 18 27 29 60 15", + "2" + ], + [ + 906, + "7CC48100-C232-464E-9A23-034B8F0B4147", + 906, + 1476007263, + "708543", + 1476007263, + "708543", + null, + "2016-10-08T00:00:00Z", + "03 54 61 64 68 09", + "2" + ], + [ + 907, + "D88F9F9B-B5D0-464F-BF4A-B08BABF3D7B3", + 907, + 1476352884, + "708543", + 1476352884, + "708543", + null, + "2016-10-12T00:00:00Z", + "16 30 34 37 44 16", + "2" + ], + [ + 908, + "963109BF-96C7-4BAC-8F60-B825FAE4A346", + 908, + 1476612067, + "708543", + 1476612067, + "708543", + null, + "2016-10-15T00:00:00Z", + "23 49 57 64 67 20", + "2" + ], + [ + 909, + "6A69340B-A601-40C8-99AB-D4E8E8742B08", + 909, + 1476957664, + "708543", + 1476957664, + "708543", + null, + "2016-10-19T00:00:00Z", + "10 16 38 43 63 23", + "2" + ], + [ + 910, + "C336DBED-7B5B-41B0-8662-E6E71F97730E", + 910, + 1477216866, + "708543", + 1477216866, + "708543", + null, + "2016-10-22T00:00:00Z", + "01 28 33 55 56 22", + "2" + ], + [ + 911, + "5F475ADD-6DC7-4259-B794-980960C64696", + 911, + 1477562508, + "708543", + 1477562508, + "708543", + null, + "2016-10-26T00:00:00Z", + "02 03 16 48 56 24", + "2" + ], + [ + 912, + "1913132B-72F1-4BBB-BFC5-B6F920804656", + 912, + 1477821707, + "708543", + 1477821707, + "708543", + null, + "2016-10-29T00:00:00Z", + "19 20 21 42 48 23", + "3" + ], + [ + 913, + "E3F60567-F814-45BC-BD16-548B5B430BED", + 913, + 1478167263, + "708543", + 1478167263, + "708543", + null, + "2016-11-02T00:00:00Z", + "13 18 37 54 61 05", + "2" + ], + [ + 914, + "DA422B46-9D32-4BA3-8400-68B1AD0215E9", + 914, + 1478430063, + "708543", + 1478430063, + "708543", + null, + "2016-11-05T00:00:00Z", + "21 31 50 51 69 08", + "3" + ], + [ + 915, + "268D2F3C-7C91-462C-8ECC-6E8E3DF20A22", + 915, + 1478775664, + "708543", + 1478775664, + "708543", + null, + "2016-11-09T00:00:00Z", + "01 25 28 31 54 02", + "2" + ], + [ + 916, + "98AC28EB-755D-42C9-A445-3F6285AD7196", + 916, + 1479034863, + "708543", + 1479034863, + "708543", + null, + "2016-11-12T00:00:00Z", + "08 17 20 27 52 24", + "2" + ], + [ + 917, + "7B229FE5-AC63-4D4A-91A6-0A7CB86DD532", + 917, + 1479380463, + "708543", + 1479380463, + "708543", + null, + "2016-11-16T00:00:00Z", + "28 41 61 63 65 07", + "2" + ], + [ + 918, + "431C3CF5-B68F-4457-889F-49B20F9CF1C4", + 918, + 1479639663, + "708543", + 1479639663, + "708543", + null, + "2016-11-19T00:00:00Z", + "16 24 28 43 61 21", + "2" + ], + [ + 919, + "E0432E50-E19E-4DC3-9A18-36806C7A88C1", + 919, + 1479985514, + "708543", + 1479985514, + "708543", + null, + "2016-11-23T00:00:00Z", + "07 32 41 47 61 03", + "2" + ], + [ + 920, + "B6B9C15A-C30F-4CC0-B1BD-CA3920340503", + 920, + 1480244703, + "708543", + 1480244703, + "708543", + null, + "2016-11-26T00:00:00Z", + "17 19 21 37 44 16", + "2" + ], + [ + 921, + "D40A1619-0832-4A6E-9EAF-3844B23092F0", + 921, + 1480590068, + "708543", + 1480590068, + "708543", + null, + "2016-11-30T00:00:00Z", + "03 14 18 25 45 07", + "2" + ], + [ + 922, + "CBE0E3C4-72D7-446F-B787-B9A04E347C3C", + 922, + 1480849263, + "708543", + 1480849263, + "708543", + null, + "2016-12-03T00:00:00Z", + "08 10 26 27 33 22", + "2" + ], + [ + 923, + "C75F0236-8827-4F14-ADA7-7061AFE4AA04", + 923, + 1481194864, + "708543", + 1481194864, + "708543", + null, + "2016-12-07T00:00:00Z", + "41 48 49 53 64 20", + "2" + ], + [ + 924, + "B9908F6E-3EA8-4093-8210-E306D05F1BD2", + 924, + 1481583706, + "708543", + 1481583706, + "708543", + null, + "2016-12-10T00:00:00Z", + "12 21 32 44 66 15", + "2" + ], + [ + 925, + "542E365D-8B02-4B55-AF96-8592595E12BD", + 925, + 1481799665, + "708543", + 1481799665, + "708543", + null, + "2016-12-14T00:00:00Z", + "18 26 37 39 66 15", + "3" + ], + [ + 926, + "C7997154-C315-455F-AACB-B172F622C6C4", + 926, + 1482058866, + "708543", + 1482058866, + "708543", + null, + "2016-12-17T00:00:00Z", + "01 08 16 40 48 10", + "2" + ], + [ + 927, + "30F782F6-E623-453A-BB19-1BF9A649CDD0", + 927, + 1482404464, + "708543", + 1482404464, + "708543", + null, + "2016-12-21T00:00:00Z", + "25 33 40 54 68 03", + "5" + ], + [ + 928, + "1BCFE588-BF10-4E9E-8B10-A1508D2A3E38", + 928, + 1482663674, + "708543", + 1482663674, + "708543", + null, + "2016-12-24T00:00:00Z", + "28 38 42 51 52 21", + "2" + ], + [ + 929, + "7DC520AF-2E56-4939-94EB-B17EA2DEF8B9", + 929, + 1483009263, + "708543", + 1483009263, + "708543", + null, + "2016-12-28T00:00:00Z", + "16 23 30 44 58 04", + "2" + ], + [ + 930, + "C3C90ACB-7ADE-46A9-80C2-5A06431C7568", + 930, + 1483268548, + "708543", + 1483268548, + "708543", + null, + "2016-12-31T00:00:00Z", + "01 03 28 57 67 09", + "2" + ], + [ + 931, + "ABE7162C-2AB8-4CF1-B7DD-00D473BC7960", + 931, + 1483614084, + "708543", + 1483614084, + "708543", + null, + "2017-01-04T00:00:00Z", + "16 17 29 41 42 04", + "3" + ], + [ + 932, + "2D90D0BC-7841-4342-87DE-8CC03B2262BD", + 932, + 1483873291, + "708543", + 1483873291, + "708543", + null, + "2017-01-07T00:00:00Z", + "03 12 24 37 63 10", + "2" + ], + [ + 933, + "15E71373-4AA1-4CF4-AC87-5DA454A0CAC6", + 933, + 1484218864, + "708543", + 1484218864, + "708543", + null, + "2017-01-11T00:00:00Z", + "01 03 13 16 43 24", + "2" + ], + [ + 934, + "49050BC6-0AF3-421D-8F0E-D1F98D18B740", + 934, + 1484478065, + "708543", + 1484478065, + "708543", + null, + "2017-01-14T00:00:00Z", + "23 55 59 64 69 13", + "5" + ], + [ + 935, + "4CF6D807-30BD-4EFE-9C6C-1858F45CCB7C", + 935, + 1484823665, + "708543", + 1484823665, + "708543", + null, + "2017-01-18T00:00:00Z", + "09 40 41 53 58 12", + "2" + ], + [ + 936, + "557F2798-865C-4016-99BC-C5B9EC0E528C", + 936, + 1485342103, + "708543", + 1485342103, + "708543", + null, + "2017-01-21T00:00:00Z", + "23 25 45 52 67 02", + "2" + ], + [ + 937, + "8FF07805-7014-4F6C-91D3-8240564F1F00", + 937, + 1485428466, + "708543", + 1485428466, + "708543", + null, + "2017-01-25T00:00:00Z", + "18 28 62 66 68 22", + "2" + ], + [ + 938, + "B68D2427-E10F-472C-96BA-71FD05A3823C", + 938, + 1485687664, + "708543", + 1485687664, + "708543", + null, + "2017-01-28T00:00:00Z", + "12 20 39 49 69 17", + "2" + ], + [ + 939, + "5E2A695D-EBAD-494B-8EDC-E97501635708", + 939, + 1486033265, + "708543", + 1486033265, + "708543", + null, + "2017-02-01T00:00:00Z", + "09 43 57 60 64 10", + "2" + ], + [ + 940, + "71AF5B59-A1DF-4E4C-88D6-88E85D019C7E", + 940, + 1486292464, + "708543", + 1486292464, + "708543", + null, + "2017-02-04T00:00:00Z", + "06 13 16 17 52 25", + "3" + ], + [ + 941, + "BB1F871B-84F6-4A98-9DFA-C09389B4AC6D", + 941, + 1486638064, + "708543", + 1486638064, + "708543", + null, + "2017-02-08T00:00:00Z", + "14 20 42 49 66 05", + "2" + ], + [ + 942, + "124D9420-F9FB-4E51-8302-CF6997D70053", + 942, + 1486897266, + "708543", + 1486897266, + "708543", + null, + "2017-02-11T00:00:00Z", + "05 09 17 37 64 02", + "2" + ], + [ + 943, + "34C29F3D-DC81-4AD4-9942-E65828561FA9", + 943, + 1487242864, + "708543", + 1487242864, + "708543", + null, + "2017-02-15T00:00:00Z", + "05 28 33 38 42 19", + "2" + ], + [ + 944, + "BB3B4322-B5BA-4647-9877-9F6D4C59D91D", + 944, + 1487502064, + "708543", + 1487502064, + "708543", + null, + "2017-02-18T00:00:00Z", + "03 07 09 31 33 20", + "3" + ], + [ + 945, + "3BE3ADB4-4BC2-4905-8E2B-24AB6C37F11A", + 945, + 1487847663, + "708543", + 1487847663, + "708543", + null, + "2017-02-22T00:00:00Z", + "10 13 28 52 61 02", + "2" + ], + [ + 946, + "136928E1-7518-42CE-B39B-8B7ED5B0D8DD", + 946, + 1488106865, + "708543", + 1488106865, + "708543", + null, + "2017-02-25T00:00:00Z", + "06 32 47 62 65 19", + "2" + ], + [ + 947, + "8B2F46F7-EFF2-4A56-B800-54CF2B0360CA", + 947, + 1488452443, + "708543", + 1488452443, + "708543", + null, + "2017-03-01T00:00:00Z", + "10 16 40 52 55 17", + "10" + ], + [ + 948, + "E5C90653-DA50-490A-B98C-97A181AE0A02", + 948, + 1488495663, + "708543", + 1488495663, + "708543", + null, + "2017-03-01T00:00:00Z", + "10 16 40 52 55 17", + "10" + ], + [ + 949, + "BC492FFD-A7B3-4529-9EDB-4C6F0E5BF617", + 949, + 1488711665, + "708543", + 1488711665, + "708543", + null, + "2017-03-04T00:00:00Z", + "02 18 19 22 63 19", + "3" + ], + [ + 950, + "BBD64C58-81CB-43B1-90F5-304A7C892D7B", + 950, + 1489057264, + "708543", + 1489057264, + "708543", + null, + "2017-03-08T00:00:00Z", + "23 33 42 46 59 04", + "2" + ], + [ + 951, + "B904A0CA-EA0D-4B49-99CB-5178E6201491", + 951, + 1489312863, + "708543", + 1489312863, + "708543", + null, + "2017-03-11T00:00:00Z", + "01 26 41 50 57 11", + "2" + ], + [ + 952, + "81F3E52B-1A76-487E-BBD0-D8711CBD083B", + 952, + 1489658465, + "708543", + 1489658465, + "708543", + null, + "2017-03-15T00:00:00Z", + "16 30 41 48 53 16", + "3" + ], + [ + 953, + "E73A1F78-9908-4DCA-9125-D40CE4EC5EAB", + 953, + 1489917663, + "708543", + 1489917663, + "708543", + null, + "2017-03-18T00:00:00Z", + "13 25 44 54 67 05", + "3" + ], + [ + 954, + "6122F4BB-2ACA-4F48-86A1-E6A482D02BF9", + 954, + 1490263262, + "708543", + 1490263262, + "708543", + null, + "2017-03-22T00:00:00Z", + "02 09 27 29 42 09", + "2" + ], + [ + 955, + "23640056-0969-4331-ACAA-001E96789E90", + 955, + 1490522463, + "708543", + 1490522463, + "708543", + null, + "2017-03-25T00:00:00Z", + "18 31 32 45 48 16", + "4" + ], + [ + 956, + "7B9AB081-962E-40DD-9C0F-6C974AE5997D", + 956, + 1490868063, + "708543", + 1490868063, + "708543", + null, + "2017-03-29T00:00:00Z", + "08 15 31 36 62 11", + "3" + ], + [ + 957, + "F20FEE86-0911-4C09-A1DB-290609482563", + 957, + 1491127263, + "708543", + 1491127263, + "708543", + null, + "2017-04-01T00:00:00Z", + "09 32 36 44 65 01", + "3" + ], + [ + 958, + "AF7C0244-1CBA-4A9C-A238-4D47750567F7", + 958, + 1491472863, + "708543", + 1491472863, + "708543", + null, + "2017-04-05T00:00:00Z", + "08 20 46 53 54 13", + "2" + ], + [ + 959, + "256878FD-772B-48D3-B7A4-4FE86DFAC088", + 959, + 1491732063, + "708543", + 1491732063, + "708543", + null, + "2017-04-08T00:00:00Z", + "23 36 51 53 60 15", + "2" + ], + [ + 960, + "F114AF8A-05DB-47BA-9B9E-53ABC867CCFE", + 960, + 1492077663, + "708543", + 1492077663, + "708543", + null, + "2017-04-12T00:00:00Z", + "08 14 61 63 68 24", + "2" + ], + [ + 961, + "6F58C329-42D3-4512-8117-203CECC2ECDF", + 961, + 1492336863, + "708543", + 1492336863, + "708543", + null, + "2017-04-15T00:00:00Z", + "05 22 26 45 61 13", + "3" + ], + [ + 962, + "7473DF48-9E9C-4557-90FE-239C749A5B8B", + 962, + 1492682463, + "708543", + 1492682463, + "708543", + null, + "2017-04-19T00:00:00Z", + "01 19 37 40 52 15", + "3" + ], + [ + 963, + "7664B507-4ADA-4AF4-A7E6-8AA8D000F05B", + 963, + 1492941664, + "708543", + 1492941664, + "708543", + null, + "2017-04-22T00:00:00Z", + "21 39 41 48 63 06", + "3" + ], + [ + 964, + "4C556EA2-12CB-4C4D-B80E-E635D3413A69", + 964, + 1493287265, + "708543", + 1493287265, + "708543", + null, + "2017-04-26T00:00:00Z", + "01 15 18 26 51 26", + "4" + ], + [ + 965, + "B32D3AED-6C68-4330-B70C-2B6859EBB1FB", + 965, + 1493546465, + "708543", + 1493546465, + "708543", + null, + "2017-04-29T00:00:00Z", + "22 23 24 45 62 05", + "2" + ], + [ + 966, + "A6F5C3ED-3225-4FAF-8D27-01E7068A50F0", + 966, + 1493892066, + "708543", + 1493892066, + "708543", + null, + "2017-05-03T00:00:00Z", + "17 18 49 59 66 09", + "2" + ], + [ + 967, + "BDFF5C57-C2CE-4439-AFA2-3FDC539BF791", + 967, + 1494151264, + "708543", + 1494151264, + "708543", + null, + "2017-05-06T00:00:00Z", + "11 21 31 41 59 21", + "3" + ], + [ + 968, + "3E057E13-4199-4445-A7A1-344AAF197C36", + 968, + 1494496865, + "708543", + 1494496865, + "708543", + null, + "2017-05-10T00:00:00Z", + "29 31 46 56 62 08", + "2" + ], + [ + 969, + "0C104D21-34FC-42D7-8632-40E67B3522F6", + 969, + 1494756065, + "708543", + 1494756065, + "708543", + null, + "2017-05-13T00:00:00Z", + "17 20 32 63 68 19", + "5" + ], + [ + 970, + "7194A14E-F3A2-4FAB-9E38-16E88E8B5A23", + 970, + 1495101664, + "708543", + 1495101664, + "708543", + null, + "2017-05-17T00:00:00Z", + "04 11 39 45 48 09", + "3" + ], + [ + 971, + "08FE9220-F04E-42BB-85FC-0D50107BE201", + 971, + 1495360866, + "708543", + 1495360866, + "708543", + null, + "2017-05-20T00:00:00Z", + "05 22 45 47 54 03", + "2" + ], + [ + 972, + "6160C9E9-ACE0-44B7-9AAA-B2DDA2C83C45", + 972, + 1495706464, + "708543", + 1495706464, + "708543", + null, + "2017-05-24T00:00:00Z", + "28 32 33 38 62 15", + "2" + ], + [ + 973, + "D27C5ED7-46A0-4864-ADF6-E490F3CE4F36", + 973, + 1495965664, + "708543", + 1495965664, + "708543", + null, + "2017-05-27T00:00:00Z", + "05 10 28 55 67 09", + "3" + ], + [ + 974, + "C7B5F47C-2EA8-44BB-B04C-B19D4794BBA9", + 974, + 1496311265, + "708543", + 1496311265, + "708543", + null, + "2017-05-31T00:00:00Z", + "04 33 39 46 60 06", + "2" + ], + [ + 975, + "F69D8094-D1AB-4E64-873F-046ED5867980", + 975, + 1496570464, + "708543", + 1496570464, + "708543", + null, + "2017-06-03T00:00:00Z", + "03 09 21 41 54 25", + "4" + ], + [ + 976, + "A3F85596-082C-4FF9-BF20-3E51FF9A98F9", + 976, + 1496916064, + "708543", + 1496916064, + "708543", + null, + "2017-06-07T00:00:00Z", + "05 21 57 66 69 13", + "3" + ], + [ + 977, + "0C90284F-764D-483A-B4E9-AD1C0FEDB6DA", + 977, + 1497520864, + "708543", + 1497520864, + "708543", + null, + "2017-06-14T00:00:00Z", + "05 22 43 57 63 24", + "2" + ], + [ + 978, + "8167BC74-6790-4223-A42B-2CC3739EB537", + 978, + 1497780063, + "708543", + 1497780063, + "708543", + null, + "2017-06-17T00:00:00Z", + "10 13 32 53 62 21", + "2" + ], + [ + 979, + "73CA9EB8-79D6-40B3-A8FE-8470793B4E4B", + 979, + 1498125664, + "708543", + 1498125664, + "708543", + null, + "2017-06-21T00:00:00Z", + "14 46 61 65 68 13", + "2" + ], + [ + 980, + "F77798EC-77A9-4A22-B06B-DB617FA70AAA", + 980, + 1498384863, + "708543", + 1498384863, + "708543", + null, + "2017-06-24T00:00:00Z", + "10 22 32 36 58 10", + "4" + ], + [ + 981, + "029B1864-680A-4388-9C25-CD03A2AEFCAC", + 981, + 1498730464, + "708543", + 1498730464, + "708543", + null, + "2017-06-28T00:00:00Z", + "29 37 46 53 68 08", + "2" + ], + [ + 982, + "61DB0FF6-A6E6-4A2F-84D8-9DEF8670EB8F", + 982, + 1498989663, + "708543", + 1498989663, + "708543", + null, + "2017-07-01T00:00:00Z", + "19 42 45 48 53 16", + "3" + ], + [ + 983, + "1C831F5D-3977-47E0-AB0A-84CBF17D0EAF", + 983, + 1499335263, + "708543", + 1499335263, + "708543", + null, + "2017-07-05T00:00:00Z", + "04 09 16 54 68 21", + "2" + ], + [ + 984, + "80CBBECD-4E5A-41A1-A75C-791756039A6F", + 984, + 1499594464, + "708543", + 1499594464, + "708543", + null, + "2017-07-08T00:00:00Z", + "08 10 29 40 59 26", + "2" + ], + [ + 985, + "93717B8E-CA86-4447-B74E-095E20FB5C9C", + 985, + 1499940064, + "708543", + 1499940064, + "708543", + null, + "2017-07-12T00:00:00Z", + "01 02 18 23 61 09", + "2" + ], + [ + 986, + "B66C4317-9207-433C-A498-BABB79D8D144", + 986, + 1500199263, + "708543", + 1500199263, + "708543", + null, + "2017-07-15T00:00:00Z", + "09 40 63 64 66 17", + "2" + ], + [ + 987, + "8724EA9E-C2EE-4F63-8CCD-2A572EBE09BB", + 987, + 1500544863, + "708543", + 1500544863, + "708543", + null, + "2017-07-19T00:00:00Z", + "50 51 59 61 63 04", + "5" + ], + [ + 988, + "D19EE0BA-A71F-457E-AD3F-64AC41202A57", + 988, + 1500804063, + "708543", + 1500804063, + "708543", + null, + "2017-07-22T00:00:00Z", + "05 32 44 53 60 09", + "3" + ], + [ + 989, + "78BCC11D-0F1F-46B5-A18C-847558335E13", + 989, + 1501149663, + "708543", + 1501149663, + "708543", + null, + "2017-07-26T00:00:00Z", + "07 19 21 42 69 12", + "2" + ] + ] +} diff --git a/test/inputs/json/misc/32d5c.json b/test/inputs/json/misc/32d5c.json index 47b30cbfd..7a89461ac 100644 --- a/test/inputs/json/misc/32d5c.json +++ b/test/inputs/json/misc/32d5c.json @@ -1 +1,3052 @@ -[{"PersonID":1735,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820129812","Notes":"","BirthDate":"1970-07-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Constance, Angela","PreferredName":"Angela","GenderTypeID":1},{"PersonID":1741,"PhotoURL":"","Notes":"","BirthDate":"1950-02-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Goldie, Annabel","PreferredName":"Annabel","GenderTypeID":1},{"PersonID":1742,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35960261933","Notes":"","BirthDate":"1960-08-20T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ewing, Annabelle","PreferredName":"Annabelle","GenderTypeID":1},{"PersonID":1751,"PhotoURL":"","Notes":"","BirthDate":"1954-04-14T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Craigie, Cathie","PreferredName":"Cathie","GenderTypeID":1},{"PersonID":1752,"PhotoURL":"","Notes":"","BirthDate":"1956-11-03T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Jamieson, Cathy","PreferredName":"Cathy","GenderTypeID":1},{"PersonID":1754,"PhotoURL":"","Notes":"","BirthDate":"1951-11-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Peattie, Cathy","PreferredName":"Cathy","GenderTypeID":1},{"PersonID":1756,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35819883370","Notes":"","BirthDate":"1944-09-09T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Grahame, Christine","PreferredName":"Christine","GenderTypeID":1},{"PersonID":1759,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820937650","Notes":"Twitter @Claudiabeamish\\r\\nFacebook: www.facebook.com/claudiabeamish","BirthDate":"1952-08-09T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Beamish, Claudia","PreferredName":"Claudia","GenderTypeID":1},{"PersonID":1762,"PhotoURL":"","Notes":"","BirthDate":"1942-08-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Elder, Dorothy-Grace","PreferredName":"Dorothy-Grace","GenderTypeID":1},{"PersonID":1768,"PhotoURL":"","Notes":"","BirthDate":"1954-12-22T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Murray, Elaine","PreferredName":"Elaine","GenderTypeID":1},{"PersonID":1769,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35817927427","Notes":"","BirthDate":"1963-05-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Smith, Elaine","PreferredName":"Elaine","GenderTypeID":1},{"PersonID":1770,"PhotoURL":"","Notes":"","BirthDate":"1957-08-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Thomson, Elaine","PreferredName":"Elaine","GenderTypeID":1},{"PersonID":1771,"PhotoURL":"","Notes":"","BirthDate":"1951-07-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Scott, Eleanor","PreferredName":"Eleanor","GenderTypeID":1},{"PersonID":1773,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855660228","Notes":"","BirthDate":"1964-08-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Hyslop, Fiona","PreferredName":"Fiona","GenderTypeID":1},{"PersonID":1775,"PhotoURL":"","Notes":"","BirthDate":"1957-12-03T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McLeod, Fiona","PreferredName":"Fiona","GenderTypeID":1},{"PersonID":1778,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Eadie, Helen","PreferredName":"Helen","GenderTypeID":1},{"PersonID":1781,"PhotoURL":"","Notes":"","BirthDate":"1952-08-29T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McGugan, Irene","PreferredName":"Irene","GenderTypeID":1},{"PersonID":1782,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Oldfather, Irene","PreferredName":"Irene","GenderTypeID":1},{"PersonID":1783,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855660953","Notes":"http://www.facebook.com/jackie.baillie","BirthDate":"1964-01-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Baillie, Jackie","PreferredName":"Jackie","GenderTypeID":1},{"PersonID":1791,"PhotoURL":"","Notes":"","BirthDate":"1958-05-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Hughes, Janis","PreferredName":"Janis","GenderTypeID":1},{"PersonID":1793,"PhotoURL":"","Notes":"Facebook: http://www.facebook.com/JeanUrquhartMSP\\r\\nTwitter: https://twitter.com/JeanUrquhartMSP","BirthDate":"1949-05-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Urquhart, Jean","PreferredName":"Jean","GenderTypeID":1},{"PersonID":1803,"PhotoURL":"","Notes":"","BirthDate":"1967-08-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Gillon, Karen","PreferredName":"Karen","GenderTypeID":1},{"PersonID":1805,"PhotoURL":"","Notes":"","BirthDate":"1970-01-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Whitefield, Karen","PreferredName":"Karen","GenderTypeID":1},{"PersonID":1807,"PhotoURL":"","Notes":"","BirthDate":"1958-02-16T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Maclean, Kate","PreferredName":"Kate","GenderTypeID":1},{"PersonID":1811,"PhotoURL":"","Notes":"","BirthDate":"1943-05-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ullrich, Kay","PreferredName":"Kay","GenderTypeID":1},{"PersonID":1814,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35942002662","Notes":"Declared ethnicity as Scottish.","BirthDate":"1956-12-14T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Fabiani, Linda","PreferredName":"Linda","GenderTypeID":1},{"PersonID":1820,"PhotoURL":"","Notes":"","BirthDate":"1958-11-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Curran, Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":1821,"PhotoURL":"","Notes":"\\r\\nDeclared ethnicity as Scottish.","BirthDate":"1945-09-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ewing, Mrs Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":1823,"PhotoURL":"","Notes":"","BirthDate":"1953-04-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Jamieson, Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":1826,"PhotoURL":"","Notes":"","BirthDate":"1961-02-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Smith, Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":1828,"PhotoURL":"","Notes":"","BirthDate":"1943-04-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"MacDonald, Margo","PreferredName":"Margo","GenderTypeID":1},{"PersonID":1831,"PhotoURL":"","Notes":"","BirthDate":"1951-09-30T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Glen, Marlyn","PreferredName":"Marlyn","GenderTypeID":1},{"PersonID":1832,"PhotoURL":"","Notes":"","BirthDate":"1952-09-30T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Livingstone, Marilyn","PreferredName":"Marilyn","GenderTypeID":1},{"PersonID":1837,"PhotoURL":"","Notes":"","BirthDate":"1960-02-12T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Mulligan, Mary","PreferredName":"Mary","GenderTypeID":1},{"PersonID":1839,"PhotoURL":"","Notes":"","BirthDate":"1947-05-25T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Scanlon, Mary","PreferredName":"Mary","GenderTypeID":1},{"PersonID":1840,"PhotoURL":"","Notes":"\\r\\nDeclared ethnicity as European/Caucasion.","BirthDate":"1943-02-09T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Macmillan, Maureen","PreferredName":"Maureen","GenderTypeID":1},{"PersonID":1841,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820938288","Notes":"","BirthDate":"1951-06-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Watt, Maureen","PreferredName":"Maureen","GenderTypeID":1},{"PersonID":1845,"PhotoURL":"","Notes":"","BirthDate":"1942-04-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Milne, Nanette","PreferredName":"Nanette","GenderTypeID":1},{"PersonID":1848,"PhotoURL":"http://scottishparliament.thirdlight.com/file/9853640645","Notes":"","BirthDate":"1970-07-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Sturgeon, Nicola","PreferredName":"Nicola","GenderTypeID":1},{"PersonID":1850,"PhotoURL":"","Notes":"District Councillor Gordon District 1988-92","BirthDate":"1946-03-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Radcliffe, Nora","PreferredName":"Nora","GenderTypeID":1},{"PersonID":1853,"PhotoURL":"","Notes":"","BirthDate":"1958-09-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ferguson, Patricia","PreferredName":"Patricia","GenderTypeID":1},{"PersonID":1854,"PhotoURL":"","Notes":"","BirthDate":"1939-10-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Godman, Trish","PreferredName":"Trish","GenderTypeID":1},{"PersonID":1857,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35960261831","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"McNeill, Pauline","PreferredName":"Pauline","GenderTypeID":1},{"PersonID":1860,"PhotoURL":"http://scottishparliament.thirdlight.com/file/41869411513","Notes":"","BirthDate":"1963-06-26T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Grant, Rhoda","PreferredName":"Rhoda","GenderTypeID":1},{"PersonID":1862,"PhotoURL":"","Notes":"","BirthDate":"1950-01-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Brankin, Rhona","PreferredName":"Rhona","GenderTypeID":1},{"PersonID":1863,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35942247222","Notes":"","BirthDate":"1951-07-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Cunningham, Roseanna","PreferredName":"Roseanna","GenderTypeID":1},{"PersonID":1865,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35922877182","Notes":"","BirthDate":"1951-08-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"White, Sandra","PreferredName":"Sandra","GenderTypeID":1},{"PersonID":1866,"PhotoURL":"","Notes":"","BirthDate":"1961-05-16T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Boyack, Sarah","PreferredName":"Sarah","GenderTypeID":1},{"PersonID":1869,"PhotoURL":"","Notes":"2003 Affirmation","BirthDate":"1946-09-14T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Baird, Shiona","PreferredName":"Shiona","GenderTypeID":1},{"PersonID":1870,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820938944","Notes":"","BirthDate":"1966-05-26T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Robison, Shona","PreferredName":"Shona","GenderTypeID":1},{"PersonID":1871,"PhotoURL":"","Notes":"","BirthDate":"1964-02-02T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Deacon, Susan","PreferredName":"Susan","GenderTypeID":1},{"PersonID":1873,"PhotoURL":"","Notes":"","BirthDate":"1946-12-03T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Jackson, Dr Sylvia","PreferredName":"Sylvia","GenderTypeID":1},{"PersonID":1876,"PhotoURL":"","Notes":"","BirthDate":"1953-11-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Marwick, Tricia","PreferredName":"Tricia","GenderTypeID":1},{"PersonID":1877,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Alexander, Ms Wendy","PreferredName":"Wendy","GenderTypeID":1},{"PersonID":1878,"PhotoURL":"","Notes":"\\r\\nMade a solemn affirmation in Gaelic.","BirthDate":"1929-07-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ewing, Dr Winnie","PreferredName":"Winnie","GenderTypeID":1},{"PersonID":1882,"PhotoURL":"","Notes":"","BirthDate":"1951-05-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ingram, Adam","PreferredName":"Adam","GenderTypeID":2},{"PersonID":1888,"PhotoURL":"","Notes":"","BirthDate":"1945-04-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Morgan, Alasdair","PreferredName":"Alasdair","GenderTypeID":2},{"PersonID":1889,"PhotoURL":"","Notes":"\\r\\nRepeated the Oath in Gaelic.","BirthDate":"1968-11-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Morrison, Mr Alasdair","PreferredName":"Alasdair","GenderTypeID":2},{"PersonID":1892,"PhotoURL":"","Notes":"","BirthDate":"1949-04-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Fergusson, Alex","PreferredName":"Alex","GenderTypeID":2},{"PersonID":1893,"PhotoURL":"","Notes":"","BirthDate":"1961-07-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Johnstone, Alex","PreferredName":"Alex","GenderTypeID":2},{"PersonID":1894,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820937596","Notes":"\\r\\nDeclared ethnicity as Scottish.","BirthDate":"1951-08-22T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Neil, Alex","PreferredName":"Alex","GenderTypeID":2},{"PersonID":1895,"PhotoURL":"","Notes":"","BirthDate":"1954-12-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Salmond, Alex","PreferredName":"Alex","GenderTypeID":2},{"PersonID":1901,"PhotoURL":"","Notes":"","BirthDate":"1954-08-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wilson, Allan","PreferredName":"Allan","GenderTypeID":2},{"PersonID":1906,"PhotoURL":"","Notes":"","BirthDate":"1944-04-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Welsh, Andrew","PreferredName":"Andrew","GenderTypeID":2},{"PersonID":1907,"PhotoURL":"","Notes":"","BirthDate":"1970-12-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wilson, Andrew","PreferredName":"Andrew","GenderTypeID":2},{"PersonID":1908,"PhotoURL":"","Notes":"","BirthDate":"1962-03-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Kerr, Andy","PreferredName":"Andy","GenderTypeID":2},{"PersonID":1911,"PhotoURL":"","Notes":"","BirthDate":"1964-09-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"MacKay, Angus","PreferredName":"Angus","GenderTypeID":2},{"PersonID":1915,"PhotoURL":"","Notes":"","BirthDate":"1940-02-12T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ahmad, Bashir","PreferredName":"Bashir","GenderTypeID":2},{"PersonID":1916,"PhotoURL":"","Notes":"","BirthDate":"1970-05-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wallace, Ben","PreferredName":"Ben","GenderTypeID":2},{"PersonID":1921,"PhotoURL":"","Notes":"","BirthDate":"1963-12-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wilson, Bill","PreferredName":"Bill","GenderTypeID":2},{"PersonID":1926,"PhotoURL":"","Notes":"2003 Affirmation","BirthDate":"1948-06-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Adam, Brian","PreferredName":"Brian","GenderTypeID":2},{"PersonID":1928,"PhotoURL":"","Notes":"","BirthDate":"1961-06-09T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Fitzpatrick, Brian","PreferredName":"Brian","GenderTypeID":2},{"PersonID":1930,"PhotoURL":"","Notes":"","BirthDate":"1958-01-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Monteith, Mr Brian","PreferredName":"Brian","GenderTypeID":2},{"PersonID":1931,"PhotoURL":"","Notes":"","BirthDate":"1964-03-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Muldoon, Bristow","PreferredName":"Bristow","GenderTypeID":2},{"PersonID":1932,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35818634739","Notes":"","BirthDate":"1955-02-16T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Crawford, Bruce","PreferredName":"Bruce","GenderTypeID":2},{"PersonID":1943,"PhotoURL":"","Notes":"","BirthDate":"1944-05-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Brodie, Chic","PreferredName":"Chic","GenderTypeID":2},{"PersonID":1944,"PhotoURL":"","Notes":"2003 Affirmation","BirthDate":"1952-07-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ballance, Chris","PreferredName":"Chris","GenderTypeID":2},{"PersonID":1950,"PhotoURL":"","Notes":"","BirthDate":"1938-08-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Campbell, Colin","PreferredName":"Colin","GenderTypeID":2},{"PersonID":1956,"PhotoURL":"","Notes":"","BirthDate":"1943-01-25T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Davidson, Mr David","PreferredName":"David","GenderTypeID":2},{"PersonID":1961,"PhotoURL":"","Notes":"","BirthDate":"1952-08-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McLetchie, David","PreferredName":"David","GenderTypeID":2},{"PersonID":1962,"PhotoURL":"","Notes":"","BirthDate":"1962-05-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Mundell, David","PreferredName":"David","GenderTypeID":2},{"PersonID":1963,"PhotoURL":"","Notes":"","BirthDate":"1946-12-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Petrie, Dave","PreferredName":"Dave","GenderTypeID":2},{"PersonID":1968,"PhotoURL":"","Notes":"","BirthDate":"1942-08-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Canavan, Dennis","PreferredName":"Dennis","GenderTypeID":2},{"PersonID":1970,"PhotoURL":"","Notes":"","BirthDate":"1952-07-28T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McNulty, Des","PreferredName":"Des","GenderTypeID":2},{"PersonID":1972,"PhotoURL":"","Notes":"Brahler ID changed from 0027 to 0027000 by AJP on 06/12/00 because Bill Butler assigned brahler ID of 0027.","BirthDate":"1937-08-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Dewar, Donald","PreferredName":"Donald","GenderTypeID":2},{"PersonID":1973,"PhotoURL":"","Notes":"","BirthDate":"1933-04-02T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Gorrie, Donald","PreferredName":"Donald","GenderTypeID":2},{"PersonID":1985,"PhotoURL":"","Notes":"","BirthDate":"1973-10-03T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Hamilton, Mr Duncan","PreferredName":"Duncan","GenderTypeID":2},{"PersonID":1986,"PhotoURL":"","Notes":"","BirthDate":"1950-09-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McNeil, Duncan","PreferredName":"Duncan","GenderTypeID":2},{"PersonID":1988,"PhotoURL":"","Notes":"","BirthDate":"1942-09-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Brocklebank, Ted","PreferredName":"Ted","GenderTypeID":2},{"PersonID":1990,"PhotoURL":"","Notes":"","BirthDate":"1954-02-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Robson, Euan","PreferredName":"Euan","GenderTypeID":2},{"PersonID":1994,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35943512647","Notes":"Information on Fergus Ewing can also be found on http://www.snp.org","BirthDate":"1957-09-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ewing, Fergus","PreferredName":"Fergus","GenderTypeID":2},{"PersonID":1996,"PhotoURL":"","Notes":"","BirthDate":"1962-07-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McAveety, Mr Frank","PreferredName":"Frank","GenderTypeID":2},{"PersonID":2003,"PhotoURL":"","Notes":"","BirthDate":"1956-07-16T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Lyon, George","PreferredName":"George","GenderTypeID":2},{"PersonID":2005,"PhotoURL":"","Notes":"","BirthDate":"1939-06-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Reid, Mr George","PreferredName":"George","GenderTypeID":2},{"PersonID":2010,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855484744","Notes":"","BirthDate":"1942-11-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Paterson, Gil","PreferredName":"Gil","GenderTypeID":2},{"PersonID":2013,"PhotoURL":"","Notes":"","BirthDate":"1948-08-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Jackson, Gordon","PreferredName":"Gordon","GenderTypeID":2},{"PersonID":2015,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781571580","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Lindhurst, Gordon","PreferredName":"Gordon","GenderTypeID":2},{"PersonID":2028,"PhotoURL":"","Notes":"","BirthDate":"1948-06-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McLeish, Henry","PreferredName":"Henry","GenderTypeID":2},{"PersonID":2029,"PhotoURL":"","Notes":"","BirthDate":"1952-02-12T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Henry, Hugh","PreferredName":"Hugh","GenderTypeID":2},{"PersonID":2030,"PhotoURL":"","Notes":"","BirthDate":"1952-05-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"O'Donnell, Hugh","PreferredName":"Hugh","GenderTypeID":2},{"PersonID":2033,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35817741283","Notes":"","BirthDate":"1957-06-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Gray, Iain","PreferredName":"Iain","GenderTypeID":2},{"PersonID":2038,"PhotoURL":"","Notes":"","BirthDate":"1960-05-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Smith, Iain","PreferredName":"Iain","GenderTypeID":2},{"PersonID":2044,"PhotoURL":"","Notes":"","BirthDate":"1941-03-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Jenkins, Ian","PreferredName":"Ian","GenderTypeID":2},{"PersonID":2049,"PhotoURL":"","Notes":"","BirthDate":"1940-04-02T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McKee, Ian","PreferredName":"Ian","GenderTypeID":2},{"PersonID":2051,"PhotoURL":"","Notes":"23-Nov-53\\r\\nBrahler ID as Elected MSP was 0119","BirthDate":"1953-11-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Welsh, Ian","PreferredName":"Ian","GenderTypeID":2},{"PersonID":2052,"PhotoURL":"","Notes":"","BirthDate":"1960-06-30T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McConnell, Jack","PreferredName":"Jack","GenderTypeID":2},{"PersonID":2056,"PhotoURL":"","Notes":"","BirthDate":"1942-07-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Douglas-Hamilton, Lord James","PreferredName":"James","GenderTypeID":2},{"PersonID":2059,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783690470","Notes":"","BirthDate":"1963-10-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Kelly, James","PreferredName":"James","GenderTypeID":2},{"PersonID":2066,"PhotoURL":"","Notes":"","BirthDate":"1949-10-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McGrigor, Jamie","PreferredName":"Jamie","GenderTypeID":2},{"PersonID":2068,"PhotoURL":"","Notes":"","BirthDate":"1954-06-16T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Stone, Jamie","PreferredName":"Jamie","GenderTypeID":2},{"PersonID":2074,"PhotoURL":"","Notes":"","BirthDate":"1947-03-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Mather, Jim","PreferredName":"Jim","GenderTypeID":2},{"PersonID":2077,"PhotoURL":"","Notes":"","BirthDate":"1954-08-25T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wallace, Mr Jim","PreferredName":"Jim","GenderTypeID":2},{"PersonID":2080,"PhotoURL":"http://scottishparliament.thirdlight.com/file/9853504141","Notes":"","BirthDate":"1957-07-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Lamont, Johann","PreferredName":"Johann","GenderTypeID":1},{"PersonID":2085,"PhotoURL":"","Notes":"Repeated the Oath in Gaelic.","BirthDate":"1934-08-26T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Munro, John Farquhar","PreferredName":"John Farquhar","GenderTypeID":2},{"PersonID":2090,"PhotoURL":"","Notes":"","BirthDate":"1948-02-13T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McAllion, Mr John","PreferredName":"John","GenderTypeID":2},{"PersonID":2098,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35943496226","Notes":"","BirthDate":"1964-04-13T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Swinney, John","PreferredName":"John","GenderTypeID":2},{"PersonID":2099,"PhotoURL":"","Notes":"","BirthDate":"1930-12-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Young, John","PreferredName":"John","GenderTypeID":2},{"PersonID":2100,"PhotoURL":"","Notes":"","BirthDate":"1948-12-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Home Robertson, John","PreferredName":"John","GenderTypeID":2},{"PersonID":2103,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35960260789","Notes":"","BirthDate":"1961-12-20T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Brown, Keith","PreferredName":"Keith","GenderTypeID":2},{"PersonID":2105,"PhotoURL":"","Notes":"Resigned from Conservative Party and Joined Scottish Peoples Alliance 31 March 2003","BirthDate":"1938-11-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Harding, Mr Keith","PreferredName":"Keith","GenderTypeID":2},{"PersonID":2106,"PhotoURL":"","Notes":"","BirthDate":"1949-06-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Raffan, Mr Keith","PreferredName":"Keith","GenderTypeID":2},{"PersonID":2108,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35921454568","Notes":"Twitter - http://twitter.com/kenmacintoshmsp \\r\\nFacebook - http://www.facebook.com/pages/Ken-Macintosh-MSP/135822889783835","BirthDate":"1962-01-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Macintosh, Ken","PreferredName":"Ken","GenderTypeID":2},{"PersonID":2110,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855484389","Notes":"","BirthDate":"1961-09-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Gibson, Kenneth","PreferredName":"Kenneth","GenderTypeID":2},{"PersonID":2112,"PhotoURL":"","Notes":"","BirthDate":"1958-04-28T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"MacAskill, Kenny","PreferredName":"Kenny","GenderTypeID":2},{"PersonID":2117,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35942002807","Notes":"","BirthDate":"1957-01-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Macdonald, Lewis","PreferredName":"Lewis","GenderTypeID":2},{"PersonID":2118,"PhotoURL":"","Notes":"","BirthDate":"1957-04-29T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Quinan, Mr Lloyd","PreferredName":"Lloyd","GenderTypeID":2},{"PersonID":2122,"PhotoURL":"","Notes":"","BirthDate":"1955-06-12T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McIntosh, Mrs Lyndsay","PreferredName":"Lyndsay","GenderTypeID":1},{"PersonID":2123,"PhotoURL":"","Notes":"","BirthDate":"1949-03-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Chisholm, Malcolm","PreferredName":"Malcolm","GenderTypeID":2},{"PersonID":2126,"PhotoURL":"","Notes":"","BirthDate":"1971-06-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Ballard, Mark","PreferredName":"Mark","GenderTypeID":2},{"PersonID":2127,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781781662","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Ruskell, Mark","PreferredName":"Mark","GenderTypeID":2},{"PersonID":2133,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855660631","Notes":"","BirthDate":"1970-09-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Matheson, Michael","PreferredName":"Michael","GenderTypeID":2},{"PersonID":2134,"PhotoURL":"","Notes":"","BirthDate":"1961-09-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McMahon, Michael","PreferredName":"Michael","GenderTypeID":2},{"PersonID":2135,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35819641476","Notes":"Declared ethnicity as European, Scottish & British.\\r\\nRepeated the Oath in Gaelic.","BirthDate":"1953-08-09T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Russell, Michael","PreferredName":"Michael","GenderTypeID":2},{"PersonID":2140,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783809943","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Rumbles, Mike","PreferredName":"Mike","GenderTypeID":2},{"PersonID":2142,"PhotoURL":"","Notes":"","BirthDate":"1949-05-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Watson, Mike","PreferredName":"Mike","GenderTypeID":2},{"PersonID":2148,"PhotoURL":"","Notes":"","BirthDate":"1950-09-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Tosh, Murray","PreferredName":"Murray","GenderTypeID":2},{"PersonID":2152,"PhotoURL":"","Notes":"\\r\\nRepeated the Oath in Catalan\\r\\nResigned 10/08/01","BirthDate":"1948-01-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Johnston, Nick","PreferredName":"Nick","GenderTypeID":2},{"PersonID":2154,"PhotoURL":"","Notes":"","BirthDate":"1960-03-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Stephen, Nicol","PreferredName":"Nicol","GenderTypeID":2},{"PersonID":2159,"PhotoURL":"","Notes":"","BirthDate":"1967-03-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Martin, Paul","PreferredName":"Paul","GenderTypeID":2},{"PersonID":2167,"PhotoURL":"","Notes":"","BirthDate":"1952-02-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Peacock, Peter","PreferredName":"Peter","GenderTypeID":2},{"PersonID":2172,"PhotoURL":"","Notes":"","BirthDate":"1939-06-03T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Gallie, Phil","PreferredName":"Phil","GenderTypeID":2},{"PersonID":2180,"PhotoURL":"http://scottishparliament.thirdlight.com/file/9853506741","Notes":"","BirthDate":"1969-05-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Lochhead, Richard","PreferredName":"Richard","GenderTypeID":2},{"PersonID":2182,"PhotoURL":"","Notes":"","BirthDate":"1942-10-22T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Simpson, Dr Richard","PreferredName":"Richard","GenderTypeID":2},{"PersonID":2185,"PhotoURL":"","Notes":"","BirthDate":"1947-12-25T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Brown, Robert","PreferredName":"Robert","GenderTypeID":2},{"PersonID":2188,"PhotoURL":"","Notes":"","BirthDate":"1940-08-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Harper, Robin","PreferredName":"Robin","GenderTypeID":2},{"PersonID":2201,"PhotoURL":"","Notes":"","BirthDate":"1961-06-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Kane, Rosie","PreferredName":"Rosie","GenderTypeID":1},{"PersonID":2202,"PhotoURL":"","Notes":"","BirthDate":"1947-02-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Finnie, Ross","PreferredName":"Ross","GenderTypeID":2},{"PersonID":2205,"PhotoURL":"","Notes":"Brahler ID prior to 14/05/2001 when resigned was 0037","BirthDate":"1945-08-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Galbraith, Mr Sam","PreferredName":"Sam","GenderTypeID":2},{"PersonID":2207,"PhotoURL":"","Notes":"","BirthDate":"1962-03-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Barrie, Scott","PreferredName":"Scott","GenderTypeID":2},{"PersonID":2215,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820478663","Notes":"","BirthDate":"1946-10-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Stevenson, Stewart","PreferredName":"Stewart","GenderTypeID":2},{"PersonID":2223,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820938602","Notes":"","BirthDate":"1966-05-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Scott, Tavish","PreferredName":"Tavish","GenderTypeID":2},{"PersonID":2225,"PhotoURL":"","Notes":"","BirthDate":"1964-03-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Sheridan, Tommy","PreferredName":"Tommy","GenderTypeID":2},{"PersonID":2228,"PhotoURL":"","Notes":"","BirthDate":"1954-04-28T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McCabe, Tom","PreferredName":"Tom","GenderTypeID":2},{"PersonID":2234,"PhotoURL":"","Notes":"","BirthDate":"1947-04-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Aitken, Bill","PreferredName":"Bill","GenderTypeID":2},{"PersonID":2247,"PhotoURL":"","Notes":"","BirthDate":"1944-04-12T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Arbuckle, Mr Andrew","PreferredName":"Andrew","GenderTypeID":2},{"PersonID":2252,"PhotoURL":"","Notes":"","BirthDate":"1945-12-25T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Pringle, Mike","PreferredName":"Mike","GenderTypeID":2},{"PersonID":2263,"PhotoURL":"","Notes":"","BirthDate":"1938-03-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Steel, Sir David","PreferredName":"David","GenderTypeID":2},{"PersonID":2345,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35786761546","Notes":"See also http://www.vote-tory-for-ayr.org/johnscott.html","BirthDate":"1951-06-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Scott, John","PreferredName":"John","GenderTypeID":2},{"PersonID":2364,"PhotoURL":"","Notes":"assigned Brahler ID 0027 from 29/11/00 -","BirthDate":"1956-03-30T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Butler, Bill","PreferredName":"Bill","GenderTypeID":2},{"PersonID":2390,"PhotoURL":"","Notes":"","BirthDate":"1939-12-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Turner, Dr Jean","PreferredName":"Jean","GenderTypeID":1},{"PersonID":2394,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35800892126","Notes":"Formally returned as regional MSP Mid-Scotland and Fife on 14/08/01\\r\\nTwitter: @murdo_fraser\\r\\nFacebook: www.facebook.com/MSPMurdoFraser","BirthDate":"1965-09-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Fraser, Murdo","PreferredName":"Murdo","GenderTypeID":2},{"PersonID":2487,"PhotoURL":"","Notes":"","BirthDate":"1971-08-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McLeod, Aileen","PreferredName":"Aileen","GenderTypeID":1},{"PersonID":2595,"PhotoURL":"","Notes":"","BirthDate":"1975-06-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Brown, Gavin","PreferredName":"Gavin","GenderTypeID":2},{"PersonID":2596,"PhotoURL":"","Notes":"","BirthDate":"1974-08-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Brownlee, Derek","PreferredName":"Derek","GenderTypeID":2},{"PersonID":2603,"PhotoURL":"","Notes":"","BirthDate":"1974-05-29T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Baker, Richard","PreferredName":"Richard","GenderTypeID":2},{"PersonID":2610,"PhotoURL":"","Notes":"","BirthDate":"1956-11-28T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wilson, John","PreferredName":"John","GenderTypeID":2},{"PersonID":2615,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820937738","Notes":"Twitter @GeorgeAdam","BirthDate":"1969-06-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Adam, George","PreferredName":"George","GenderTypeID":2},{"PersonID":2633,"PhotoURL":"http://scottishparliament.thirdlight.com/file/9853240684","Notes":"","BirthDate":"1971-03-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Baker, Claire","PreferredName":"Claire","GenderTypeID":1},{"PersonID":2641,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35800892437","Notes":"","BirthDate":"1971-05-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Allan, Dr Alasdair","PreferredName":"Alasdair","GenderTypeID":2},{"PersonID":2651,"PhotoURL":"","Notes":"","BirthDate":"1965-05-26T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Tolson, Jim","PreferredName":"Jim","GenderTypeID":2},{"PersonID":2665,"PhotoURL":"","Notes":"","BirthDate":"1948-03-03T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Byrne, Ms Rosemary","PreferredName":"Rosemary","GenderTypeID":1},{"PersonID":2673,"PhotoURL":"","Notes":"","BirthDate":"1953-06-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Campbell, Roderick","PreferredName":"Roderick","GenderTypeID":2},{"PersonID":2674,"PhotoURL":"","Notes":"","BirthDate":"1949-09-20T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Thompson, Dave","PreferredName":"Dave","GenderTypeID":2},{"PersonID":2675,"PhotoURL":"","Notes":"","BirthDate":"1945-10-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Gibson, Rob","PreferredName":"Rob","GenderTypeID":2},{"PersonID":2678,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35799295215","Notes":"","BirthDate":"1959-04-12T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Carlaw, Jackson","PreferredName":"Jackson","GenderTypeID":2},{"PersonID":2686,"PhotoURL":"","Notes":"BBC","BirthDate":"1930-07-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Swinburne, John","PreferredName":"John","GenderTypeID":2},{"PersonID":2767,"PhotoURL":"","Notes":"","BirthDate":"1961-05-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Curran, Frances","PreferredName":"Frances","GenderTypeID":1},{"PersonID":2826,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35942003780","Notes":"","BirthDate":"1953-03-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Dornan, James","PreferredName":"James","GenderTypeID":2},{"PersonID":2853,"PhotoURL":"","Notes":"","BirthDate":"1946-12-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Pentland, John","PreferredName":"John","GenderTypeID":2},{"PersonID":2866,"PhotoURL":"","Notes":"","BirthDate":"1974-01-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Purvis, Jeremy","PreferredName":"Jeremy","GenderTypeID":2},{"PersonID":2876,"PhotoURL":"","Notes":"","BirthDate":"1963-12-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Maxwell, Stewart","PreferredName":"Stewart","GenderTypeID":2},{"PersonID":2877,"PhotoURL":"","Notes":"","BirthDate":"1948-03-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"May, Christine","PreferredName":"Christine","GenderTypeID":1},{"PersonID":2892,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783690519","Notes":"","BirthDate":"1973-03-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Harvie, Patrick","PreferredName":"Patrick","GenderTypeID":2},{"PersonID":2902,"PhotoURL":"","Notes":"","BirthDate":"1965-03-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Leckie, Carolyn","PreferredName":"Carolyn","GenderTypeID":1},{"PersonID":2947,"PhotoURL":"","Notes":"","BirthDate":"1961-05-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McFee, Mr Bruce","PreferredName":"Bruce","GenderTypeID":2},{"PersonID":2963,"PhotoURL":"","Notes":"","BirthDate":"1966-03-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McLaughlin, Anne","PreferredName":"Anne","GenderTypeID":1},{"PersonID":3004,"PhotoURL":"","Notes":"","BirthDate":"1959-06-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Fox, Colin","PreferredName":"Colin","GenderTypeID":2},{"PersonID":3061,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783809913","Notes":"Facebook- https://www.facebook.com/margaretmitchell2016","BirthDate":"1952-11-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Mitchell, Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":3101,"PhotoURL":"","Notes":"","BirthDate":"1956-11-26T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Malik, Hanzala","PreferredName":"Hanzala","GenderTypeID":2},{"PersonID":3103,"PhotoURL":"","Notes":"","BirthDate":"1960-03-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Martin, Campbell","PreferredName":"Campbell","GenderTypeID":2},{"PersonID":3129,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35799134774 ","Notes":"","BirthDate":"1956-07-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Kidd, Bill","PreferredName":"Bill","GenderTypeID":2},{"PersonID":3538,"PhotoURL":"","Notes":"","BirthDate":"1951-10-28T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Gordon, Charlie","PreferredName":"Charlie","GenderTypeID":2},{"PersonID":3743,"PhotoURL":"","Notes":"","BirthDate":"1954-04-16T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Don, Nigel","PreferredName":"Nigel","GenderTypeID":2},{"PersonID":3745,"PhotoURL":"","Notes":"","BirthDate":"1956-08-14T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Robertson, Dennis","PreferredName":"Dennis","GenderTypeID":2},{"PersonID":3746,"PhotoURL":"","Notes":"","BirthDate":"1944-09-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Harvie, Christopher","PreferredName":"Christopher","GenderTypeID":2},{"PersonID":3749,"PhotoURL":"","Notes":"","BirthDate":"1959-09-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Tymkewycz, Stefan","PreferredName":"Stefan","GenderTypeID":2},{"PersonID":3750,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783690940","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Somerville, Shirley-Anne","PreferredName":"Shirley-Anne","GenderTypeID":1},{"PersonID":3751,"PhotoURL":"http://scottishparliament.thirdlight.com/file/38395638303","Notes":"","BirthDate":"1951-10-17T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Beattie, Colin","PreferredName":"Colin","GenderTypeID":2},{"PersonID":3758,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820938486 ","Notes":"","BirthDate":"1979-05-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Hepburn, Jamie","PreferredName":"Jamie","GenderTypeID":2},{"PersonID":3759,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35960260890","Notes":"","BirthDate":"1968-03-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McKelvie, Christina","PreferredName":"Christina","GenderTypeID":1},{"PersonID":3763,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820938765","Notes":"Twitter: @StuMcMillanSNP\\r\\nFacebook: Stuart McMillan MSP","BirthDate":"1972-05-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McMillan, Stuart","PreferredName":"Stuart","GenderTypeID":2},{"PersonID":3771,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820939764","Notes":"","BirthDate":"1973-05-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Doris, Bob","PreferredName":"Bob","GenderTypeID":2},{"PersonID":3775,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35960260104","Notes":"","BirthDate":"1980-05-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Campbell, Aileen","PreferredName":"Aileen","GenderTypeID":1},{"PersonID":3806,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35942002372","Notes":"","BirthDate":"1956-05-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Stewart, David","PreferredName":"David","GenderTypeID":2},{"PersonID":3811,"PhotoURL":"","Notes":"","BirthDate":"1942-01-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Foulkes, George","PreferredName":"George","GenderTypeID":2},{"PersonID":3812,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781781656","Notes":"","BirthDate":"1981-08-28T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Dugdale, Kezia","PreferredName":"Kezia","GenderTypeID":1},{"PersonID":3815,"PhotoURL":"","Notes":"","BirthDate":"1973-09-14T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Park, John","PreferredName":"John","GenderTypeID":2},{"PersonID":3824,"PhotoURL":"","Notes":"","BirthDate":"1949-01-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McDougall, Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":3896,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855661618","Notes":"","BirthDate":"1967-08-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McArthur, Liam","PreferredName":"Liam","GenderTypeID":2},{"PersonID":3901,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35800493586","Notes":"","BirthDate":"1967-04-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"FitzPatrick, Joe","PreferredName":"Joe","GenderTypeID":2},{"PersonID":3907,"PhotoURL":"http://scottishparliament.thirdlight.com/file/36076831535","Notes":"","BirthDate":"1958-05-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Coffey, Willie","PreferredName":"Willie","GenderTypeID":2},{"PersonID":3983,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687661","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Golden, Maurice","PreferredName":"Maurice","GenderTypeID":2},{"PersonID":3985,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783689384","Notes":"","BirthDate":"1987-09-21T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Thomson, Ross","PreferredName":"Ross","GenderTypeID":2},{"PersonID":3994,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783686696","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Simpson, Graham","PreferredName":"Graham","GenderTypeID":2},{"PersonID":4014,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35818225410","Notes":"","BirthDate":"1960-02-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Smith, Liz","PreferredName":"Liz","GenderTypeID":1},{"PersonID":4016,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35922877680","Notes":"facebook.com/JohnLamontBorders/\\r\\nTwitter: @john2win","BirthDate":"1976-04-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Lamont, John","PreferredName":"John","GenderTypeID":2},{"PersonID":4074,"PhotoURL":"","Notes":"","BirthDate":"1952-04-22T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Whitton, David","PreferredName":"David","GenderTypeID":2},{"PersonID":4080,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"McInnes, Alison","PreferredName":"Alison","GenderTypeID":1},{"PersonID":4086,"PhotoURL":"","Notes":"","BirthDate":"1962-11-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Hume, Jim","PreferredName":"Jim","GenderTypeID":2},{"PersonID":4934,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35818497919","Notes":"","BirthDate":"1965-10-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Johnstone, Alison","PreferredName":"Alison","GenderTypeID":1},{"PersonID":4938,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35960260779","Notes":"","BirthDate":"1950-06-12T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Lyle, Richard","PreferredName":"Richard","GenderTypeID":2},{"PersonID":4939,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855660763","Notes":"","BirthDate":"1963-10-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"MacDonald, Angus","PreferredName":"Angus","GenderTypeID":2},{"PersonID":4940,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820938229","Notes":"","BirthDate":"1967-08-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Adamson, Clare","PreferredName":"Clare","GenderTypeID":1},{"PersonID":4941,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35922512428 ","Notes":"","BirthDate":"1985-04-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Yousaf, Humza","PreferredName":"Humza","GenderTypeID":2},{"PersonID":4947,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783690556","Notes":"","BirthDate":"1956-12-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Finnie, John","PreferredName":"John","GenderTypeID":2},{"PersonID":4948,"PhotoURL":"","Notes":"","BirthDate":"1958-11-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"MacKenzie, Mike","PreferredName":"Mike","GenderTypeID":2},{"PersonID":4951,"PhotoURL":"http://scottishparliament.thirdlight.com/file/9853519283","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"McAlpine, Joan","PreferredName":"Joan","GenderTypeID":1},{"PersonID":4952,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35818225376","Notes":"twitter@paulwheelhouse\\r\\nf: PaulWheelhouseMSP","BirthDate":"1970-06-22T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wheelhouse, Paul","PreferredName":"Paul","GenderTypeID":2},{"PersonID":4955,"PhotoURL":"","Notes":"","BirthDate":"1968-02-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Eadie, Jim","PreferredName":"Jim","GenderTypeID":2},{"PersonID":4956,"PhotoURL":"","Notes":"","BirthDate":"1959-12-09T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Keir, Colin","PreferredName":"Colin","GenderTypeID":2},{"PersonID":4964,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35817648204","Notes":"","BirthDate":"1980-06-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McDonald, Mark","PreferredName":"Mark","GenderTypeID":2},{"PersonID":4965,"PhotoURL":"","Notes":"","BirthDate":"1964-03-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Allard, Christian","PreferredName":"Christian","GenderTypeID":2},{"PersonID":4966,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855660444","Notes":"Facebook – derekmackaysnp\\r\\nTwitter - derekmackaysnp","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Mackay, Derek","PreferredName":"Derek","GenderTypeID":2},{"PersonID":4976,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783689179","Notes":"","BirthDate":"1978-11-10T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Davidson, Ruth","PreferredName":"Ruth","GenderTypeID":1},{"PersonID":4981,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687368","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Ross, Douglas","PreferredName":"Douglas","GenderTypeID":2},{"PersonID":4982,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783689774","Notes":"","BirthDate":"1961-03-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Mountain, Edward","PreferredName":"Edward","GenderTypeID":2},{"PersonID":4984,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Buchanan, Cameron","PreferredName":"Cameron","GenderTypeID":2},{"PersonID":4987,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783685351","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Briggs, Miles","PreferredName":"Miles","GenderTypeID":2},{"PersonID":5009,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687229","Notes":"","BirthDate":"1967-09-27T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Rennie, Willie","PreferredName":"Willie","GenderTypeID":2},{"PersonID":5034,"PhotoURL":"http://scottishparliament.thirdlight.com/file/9853514522","Notes":"Facebook: facebook.com/jennymarramsp\\r\\nTwitter: @jennymarra","BirthDate":"1977-11-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Marra, Jenny","PreferredName":"Jenny","GenderTypeID":1},{"PersonID":5035,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Brennan, Lesley","PreferredName":"Lesley","GenderTypeID":1},{"PersonID":5038,"PhotoURL":"","Notes":"","BirthDate":"1955-11-05T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Baxter, Jayne","PreferredName":"Jayne","GenderTypeID":1},{"PersonID":5041,"PhotoURL":"","Notes":"","BirthDate":"1984-07-04T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McMahon, Siobhan","PreferredName":"Siobhan","GenderTypeID":1},{"PersonID":5042,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855660595","Notes":"","BirthDate":"1985-10-19T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Griffin, Mark","PreferredName":"Mark","GenderTypeID":2},{"PersonID":5047,"PhotoURL":"","Notes":"","BirthDate":"1970-01-30T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McTaggart, Anne","PreferredName":"Anne","GenderTypeID":1},{"PersonID":5054,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35817927315","Notes":"","BirthDate":"1969-03-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Findlay, Neil","PreferredName":"Neil","GenderTypeID":2},{"PersonID":5057,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Pearson, Graeme","PreferredName":"Graeme","GenderTypeID":2},{"PersonID":5059,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35818225238","Notes":"","BirthDate":"1954-03-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Fee, Mary","PreferredName":"Mary","GenderTypeID":1},{"PersonID":5060,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35960261503","Notes":"","BirthDate":"1983-09-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Bibby, Neil","PreferredName":"Neil","GenderTypeID":2},{"PersonID":5074,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35817741458","Notes":"","BirthDate":"1960-01-02T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"MacDonald, Gordon","PreferredName":"Gordon","GenderTypeID":2},{"PersonID":5075,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35800414488","Notes":"","BirthDate":"1961-03-13T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Torrance, David","PreferredName":"David","GenderTypeID":2},{"PersonID":5078,"PhotoURL":"","Notes":"","BirthDate":"1942-03-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Walker, Bill","PreferredName":"Bill","GenderTypeID":2},{"PersonID":5079,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Smith, Drew","PreferredName":"Drew","GenderTypeID":2},{"PersonID":5080,"PhotoURL":"","Notes":"","BirthDate":"1952-05-09T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"McCulloch, Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":5106,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35818497490","Notes":"","BirthDate":"1968-06-03T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Stewart, Kevin","PreferredName":"Kevin","GenderTypeID":2},{"PersonID":5107,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35802798381","Notes":"","BirthDate":"1962-10-29T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Dey, Graeme","PreferredName":"Graeme","GenderTypeID":2},{"PersonID":5108,"PhotoURL":"","Notes":"","BirthDate":"1949-12-07T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Burgess, Margaret","PreferredName":"Margaret","GenderTypeID":1},{"PersonID":5109,"PhotoURL":"","Notes":"","BirthDate":"1982-07-31T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Biagi, Marco","PreferredName":"Marco","GenderTypeID":2},{"PersonID":5110,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820937486","Notes":"","BirthDate":"1957-05-15T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Mason, John","PreferredName":"John","GenderTypeID":2},{"PersonID":5119,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35786781393 ","Notes":"","BirthDate":"1963-11-30T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Rowley, Alex","PreferredName":"Alex","GenderTypeID":2},{"PersonID":5556,"PhotoURL":"","Notes":"https://twitter.com/cara_hilton","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Hilton, Cara","PreferredName":"Cara","GenderTypeID":1},{"PersonID":5578,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781571350","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Martin, Gillian","PreferredName":"Gillian","GenderTypeID":1},{"PersonID":5579,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35942063441","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Leonard, Richard","PreferredName":"Richard","GenderTypeID":2},{"PersonID":5580,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687362","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Lennon, Monica","PreferredName":"Monica","GenderTypeID":1},{"PersonID":5586,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783690447","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Sarwar, Anas","PreferredName":"Anas","GenderTypeID":2},{"PersonID":5587,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35921454674","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Evans, Mairi","PreferredName":"Mairi","GenderTypeID":1},{"PersonID":5591,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35855660525","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Ross, Gail","PreferredName":"Gail","GenderTypeID":1},{"PersonID":5592,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688795","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Freeman, Jeane","PreferredName":"Jeane","GenderTypeID":1},{"PersonID":5596,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783689308","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"MacGregor, Fulton","PreferredName":"Fulton","GenderTypeID":2},{"PersonID":5598,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783686177","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Maguire, Ruth","PreferredName":"Ruth","GenderTypeID":1},{"PersonID":5604,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35820937956","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Johnson, Daniel","PreferredName":"Daniel","GenderTypeID":2},{"PersonID":5605,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783686850","Notes":"","BirthDate":"1974-03-08T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Denham, Ash","PreferredName":"Ash","GenderTypeID":1},{"PersonID":5608,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783686780","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Macpherson, Ben","PreferredName":"Ben","GenderTypeID":2},{"PersonID":5612,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688223","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"McKee, Ivan","PreferredName":"Ivan","GenderTypeID":2},{"PersonID":5613,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783686815","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Gilruth, Jenny","PreferredName":"Jenny","GenderTypeID":1},{"PersonID":5618,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687418","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Haughey, Clare","PreferredName":"Clare","GenderTypeID":1},{"PersonID":5621,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35942002221","Notes":"","BirthDate":"1990-04-06T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Forbes, Kate","PreferredName":"Kate","GenderTypeID":1},{"PersonID":5622,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687929","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Mackay, Rona","PreferredName":"Rona","GenderTypeID":1},{"PersonID":5638,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688355","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Smyth, Colin","PreferredName":"Colin","GenderTypeID":2},{"PersonID":5651,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687854","Notes":"","BirthDate":"1975-01-23T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Kerr, Liam","PreferredName":"Liam","GenderTypeID":2},{"PersonID":5665,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688483","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Burnett, Alexander","PreferredName":"Alexander","GenderTypeID":2},{"PersonID":5669,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783691275","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Todd, Maree","PreferredName":"Maree","GenderTypeID":1},{"PersonID":5677,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35786761150","Notes":"","BirthDate":"1976-11-26T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Cameron, Donald","PreferredName":"Donald","GenderTypeID":2},{"PersonID":5679,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783689357","Notes":"","BirthDate":"1950-05-13T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Chapman, Peter","PreferredName":"Peter","GenderTypeID":2},{"PersonID":5695,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781571691","Notes":"","BirthDate":"1963-05-29T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wightman, Andy","PreferredName":"Andy","GenderTypeID":2},{"PersonID":5698,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35681770981","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Greene, Jamie","PreferredName":"Jamie","GenderTypeID":2},{"PersonID":5700,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783689572","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Corry, Maurice","PreferredName":"Maurice","GenderTypeID":2},{"PersonID":5709,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781571941","Notes":"","BirthDate":"1989-12-01T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Mundell, Oliver","PreferredName":"Oliver","GenderTypeID":2},{"PersonID":5757,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783687836","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Greer, Ross","PreferredName":"Ross","GenderTypeID":2},{"PersonID":5769,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781571479","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Hamilton, Rachael","PreferredName":"Rachael","GenderTypeID":1},{"PersonID":5771,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35818497399","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Harper, Emma","PreferredName":"Emma","GenderTypeID":1},{"PersonID":5781,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783690200","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Harris, Alison","PreferredName":"Alison","GenderTypeID":1},{"PersonID":5782,"PhotoURL":"http://scottishparliament.thirdlight.com/file/40400707229","Notes":"","BirthDate":"1967-10-18T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Carson, Finlay","PreferredName":"Finlay","GenderTypeID":2},{"PersonID":5783,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781655804","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Tomkins, Adam","PreferredName":"Adam","GenderTypeID":2},{"PersonID":5788,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783686421","Notes":"","BirthDate":"1972-02-24T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Wells, Annie","PreferredName":"Annie","GenderTypeID":1},{"PersonID":5793,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688325","Notes":"","BirthDate":"1964-04-26T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Whittle, Brian","PreferredName":"Brian","GenderTypeID":2},{"PersonID":5797,"PhotoURL":"http://scottishparliament.thirdlight.com/file/42332640174","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Ballantyne, Michelle","PreferredName":"Michelle","GenderTypeID":1},{"PersonID":5800,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":false,"ParliamentaryName":"Halcro Johnston, Jamie","PreferredName":"Jamie","GenderTypeID":2},{"PersonID":5809,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688782","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Lockhart, Dean","PreferredName":"Dean","GenderTypeID":2},{"PersonID":5815,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781571595","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Cole-Hamilton, Alex","PreferredName":"Alex","GenderTypeID":2},{"PersonID":5866,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35781571135","Notes":"","BirthDate":"1962-11-29T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Stewart, Alexander","PreferredName":"Alexander","GenderTypeID":2},{"PersonID":5868,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688599","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Arthur, Tom","PreferredName":"Tom","GenderTypeID":2},{"PersonID":5877,"PhotoURL":"http://scottishparliament.thirdlight.com/file/35783688260","Notes":"","BirthDate":"1967-03-11T00:00:00","BirthDateIsProtected":false,"ParliamentaryName":"Balfour, Jeremy","PreferredName":"Jeremy","GenderTypeID":2},{"PersonID":5929,"PhotoURL":"","Notes":"","BirthDate":null,"BirthDateIsProtected":false,"ParliamentaryName":"Mason, Tom","PreferredName":"Tom","GenderTypeID":2},{"PersonID":6090,"PhotoURL":"http://scottishparliament.thirdlight.com/file/39689732792","Notes":"","BirthDate":null,"BirthDateIsProtected":true,"ParliamentaryName":"Bowman, Bill","PreferredName":"Bill","GenderTypeID":2}] \ No newline at end of file +[ + { + "PersonID": 1735, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820129812", + "Notes": "", + "BirthDate": "1970-07-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Constance, Angela", + "PreferredName": "Angela", + "GenderTypeID": 1 + }, + { + "PersonID": 1741, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1950-02-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Goldie, Annabel", + "PreferredName": "Annabel", + "GenderTypeID": 1 + }, + { + "PersonID": 1742, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960261933", + "Notes": "", + "BirthDate": "1960-08-20T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ewing, Annabelle", + "PreferredName": "Annabelle", + "GenderTypeID": 1 + }, + { + "PersonID": 1751, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-04-14T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Craigie, Cathie", + "PreferredName": "Cathie", + "GenderTypeID": 1 + }, + { + "PersonID": 1752, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1956-11-03T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Jamieson, Cathy", + "PreferredName": "Cathy", + "GenderTypeID": 1 + }, + { + "PersonID": 1754, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1951-11-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Peattie, Cathy", + "PreferredName": "Cathy", + "GenderTypeID": 1 + }, + { + "PersonID": 1756, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35819883370", + "Notes": "", + "BirthDate": "1944-09-09T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Grahame, Christine", + "PreferredName": "Christine", + "GenderTypeID": 1 + }, + { + "PersonID": 1759, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937650", + "Notes": "Twitter @Claudiabeamish\\r\\nFacebook: www.facebook.com/claudiabeamish", + "BirthDate": "1952-08-09T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Beamish, Claudia", + "PreferredName": "Claudia", + "GenderTypeID": 1 + }, + { + "PersonID": 1762, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-08-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Elder, Dorothy-Grace", + "PreferredName": "Dorothy-Grace", + "GenderTypeID": 1 + }, + { + "PersonID": 1768, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-12-22T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Murray, Elaine", + "PreferredName": "Elaine", + "GenderTypeID": 1 + }, + { + "PersonID": 1769, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817927427", + "Notes": "", + "BirthDate": "1963-05-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Smith, Elaine", + "PreferredName": "Elaine", + "GenderTypeID": 1 + }, + { + "PersonID": 1770, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1957-08-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Thomson, Elaine", + "PreferredName": "Elaine", + "GenderTypeID": 1 + }, + { + "PersonID": 1771, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1951-07-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Scott, Eleanor", + "PreferredName": "Eleanor", + "GenderTypeID": 1 + }, + { + "PersonID": 1773, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660228", + "Notes": "", + "BirthDate": "1964-08-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Hyslop, Fiona", + "PreferredName": "Fiona", + "GenderTypeID": 1 + }, + { + "PersonID": 1775, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1957-12-03T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McLeod, Fiona", + "PreferredName": "Fiona", + "GenderTypeID": 1 + }, + { + "PersonID": 1778, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Eadie, Helen", + "PreferredName": "Helen", + "GenderTypeID": 1 + }, + { + "PersonID": 1781, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-08-29T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McGugan, Irene", + "PreferredName": "Irene", + "GenderTypeID": 1 + }, + { + "PersonID": 1782, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Oldfather, Irene", + "PreferredName": "Irene", + "GenderTypeID": 1 + }, + { + "PersonID": 1783, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660953", + "Notes": "http://www.facebook.com/jackie.baillie", + "BirthDate": "1964-01-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Baillie, Jackie", + "PreferredName": "Jackie", + "GenderTypeID": 1 + }, + { + "PersonID": 1791, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1958-05-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Hughes, Janis", + "PreferredName": "Janis", + "GenderTypeID": 1 + }, + { + "PersonID": 1793, + "PhotoURL": "", + "Notes": "Facebook: http://www.facebook.com/JeanUrquhartMSP\\r\\nTwitter: https://twitter.com/JeanUrquhartMSP", + "BirthDate": "1949-05-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Urquhart, Jean", + "PreferredName": "Jean", + "GenderTypeID": 1 + }, + { + "PersonID": 1803, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1967-08-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Gillon, Karen", + "PreferredName": "Karen", + "GenderTypeID": 1 + }, + { + "PersonID": 1805, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1970-01-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Whitefield, Karen", + "PreferredName": "Karen", + "GenderTypeID": 1 + }, + { + "PersonID": 1807, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1958-02-16T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Maclean, Kate", + "PreferredName": "Kate", + "GenderTypeID": 1 + }, + { + "PersonID": 1811, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1943-05-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ullrich, Kay", + "PreferredName": "Kay", + "GenderTypeID": 1 + }, + { + "PersonID": 1814, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002662", + "Notes": "Declared ethnicity as Scottish.", + "BirthDate": "1956-12-14T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Fabiani, Linda", + "PreferredName": "Linda", + "GenderTypeID": 1 + }, + { + "PersonID": 1820, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1958-11-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Curran, Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 1821, + "PhotoURL": "", + "Notes": "\\r\\nDeclared ethnicity as Scottish.", + "BirthDate": "1945-09-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ewing, Mrs Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 1823, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1953-04-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Jamieson, Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 1826, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-02-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Smith, Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 1828, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1943-04-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "MacDonald, Margo", + "PreferredName": "Margo", + "GenderTypeID": 1 + }, + { + "PersonID": 1831, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1951-09-30T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Glen, Marlyn", + "PreferredName": "Marlyn", + "GenderTypeID": 1 + }, + { + "PersonID": 1832, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-09-30T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Livingstone, Marilyn", + "PreferredName": "Marilyn", + "GenderTypeID": 1 + }, + { + "PersonID": 1837, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1960-02-12T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Mulligan, Mary", + "PreferredName": "Mary", + "GenderTypeID": 1 + }, + { + "PersonID": 1839, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1947-05-25T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Scanlon, Mary", + "PreferredName": "Mary", + "GenderTypeID": 1 + }, + { + "PersonID": 1840, + "PhotoURL": "", + "Notes": "\\r\\nDeclared ethnicity as European/Caucasion.", + "BirthDate": "1943-02-09T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Macmillan, Maureen", + "PreferredName": "Maureen", + "GenderTypeID": 1 + }, + { + "PersonID": 1841, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938288", + "Notes": "", + "BirthDate": "1951-06-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Watt, Maureen", + "PreferredName": "Maureen", + "GenderTypeID": 1 + }, + { + "PersonID": 1845, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-04-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Milne, Nanette", + "PreferredName": "Nanette", + "GenderTypeID": 1 + }, + { + "PersonID": 1848, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853640645", + "Notes": "", + "BirthDate": "1970-07-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Sturgeon, Nicola", + "PreferredName": "Nicola", + "GenderTypeID": 1 + }, + { + "PersonID": 1850, + "PhotoURL": "", + "Notes": "District Councillor Gordon District 1988-92", + "BirthDate": "1946-03-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Radcliffe, Nora", + "PreferredName": "Nora", + "GenderTypeID": 1 + }, + { + "PersonID": 1853, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1958-09-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ferguson, Patricia", + "PreferredName": "Patricia", + "GenderTypeID": 1 + }, + { + "PersonID": 1854, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1939-10-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Godman, Trish", + "PreferredName": "Trish", + "GenderTypeID": 1 + }, + { + "PersonID": 1857, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960261831", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "McNeill, Pauline", + "PreferredName": "Pauline", + "GenderTypeID": 1 + }, + { + "PersonID": 1860, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/41869411513", + "Notes": "", + "BirthDate": "1963-06-26T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Grant, Rhoda", + "PreferredName": "Rhoda", + "GenderTypeID": 1 + }, + { + "PersonID": 1862, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1950-01-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Brankin, Rhona", + "PreferredName": "Rhona", + "GenderTypeID": 1 + }, + { + "PersonID": 1863, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942247222", + "Notes": "", + "BirthDate": "1951-07-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Cunningham, Roseanna", + "PreferredName": "Roseanna", + "GenderTypeID": 1 + }, + { + "PersonID": 1865, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35922877182", + "Notes": "", + "BirthDate": "1951-08-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "White, Sandra", + "PreferredName": "Sandra", + "GenderTypeID": 1 + }, + { + "PersonID": 1866, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-05-16T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Boyack, Sarah", + "PreferredName": "Sarah", + "GenderTypeID": 1 + }, + { + "PersonID": 1869, + "PhotoURL": "", + "Notes": "2003 Affirmation", + "BirthDate": "1946-09-14T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Baird, Shiona", + "PreferredName": "Shiona", + "GenderTypeID": 1 + }, + { + "PersonID": 1870, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938944", + "Notes": "", + "BirthDate": "1966-05-26T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Robison, Shona", + "PreferredName": "Shona", + "GenderTypeID": 1 + }, + { + "PersonID": 1871, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1964-02-02T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Deacon, Susan", + "PreferredName": "Susan", + "GenderTypeID": 1 + }, + { + "PersonID": 1873, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1946-12-03T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Jackson, Dr Sylvia", + "PreferredName": "Sylvia", + "GenderTypeID": 1 + }, + { + "PersonID": 1876, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1953-11-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Marwick, Tricia", + "PreferredName": "Tricia", + "GenderTypeID": 1 + }, + { + "PersonID": 1877, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Alexander, Ms Wendy", + "PreferredName": "Wendy", + "GenderTypeID": 1 + }, + { + "PersonID": 1878, + "PhotoURL": "", + "Notes": "\\r\\nMade a solemn affirmation in Gaelic.", + "BirthDate": "1929-07-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ewing, Dr Winnie", + "PreferredName": "Winnie", + "GenderTypeID": 1 + }, + { + "PersonID": 1882, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1951-05-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ingram, Adam", + "PreferredName": "Adam", + "GenderTypeID": 2 + }, + { + "PersonID": 1888, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1945-04-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Morgan, Alasdair", + "PreferredName": "Alasdair", + "GenderTypeID": 2 + }, + { + "PersonID": 1889, + "PhotoURL": "", + "Notes": "\\r\\nRepeated the Oath in Gaelic.", + "BirthDate": "1968-11-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Morrison, Mr Alasdair", + "PreferredName": "Alasdair", + "GenderTypeID": 2 + }, + { + "PersonID": 1892, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-04-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Fergusson, Alex", + "PreferredName": "Alex", + "GenderTypeID": 2 + }, + { + "PersonID": 1893, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-07-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Johnstone, Alex", + "PreferredName": "Alex", + "GenderTypeID": 2 + }, + { + "PersonID": 1894, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937596", + "Notes": "\\r\\nDeclared ethnicity as Scottish.", + "BirthDate": "1951-08-22T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Neil, Alex", + "PreferredName": "Alex", + "GenderTypeID": 2 + }, + { + "PersonID": 1895, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-12-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Salmond, Alex", + "PreferredName": "Alex", + "GenderTypeID": 2 + }, + { + "PersonID": 1901, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-08-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wilson, Allan", + "PreferredName": "Allan", + "GenderTypeID": 2 + }, + { + "PersonID": 1906, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1944-04-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Welsh, Andrew", + "PreferredName": "Andrew", + "GenderTypeID": 2 + }, + { + "PersonID": 1907, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1970-12-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wilson, Andrew", + "PreferredName": "Andrew", + "GenderTypeID": 2 + }, + { + "PersonID": 1908, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1962-03-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Kerr, Andy", + "PreferredName": "Andy", + "GenderTypeID": 2 + }, + { + "PersonID": 1911, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1964-09-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "MacKay, Angus", + "PreferredName": "Angus", + "GenderTypeID": 2 + }, + { + "PersonID": 1915, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1940-02-12T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ahmad, Bashir", + "PreferredName": "Bashir", + "GenderTypeID": 2 + }, + { + "PersonID": 1916, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1970-05-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wallace, Ben", + "PreferredName": "Ben", + "GenderTypeID": 2 + }, + { + "PersonID": 1921, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1963-12-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wilson, Bill", + "PreferredName": "Bill", + "GenderTypeID": 2 + }, + { + "PersonID": 1926, + "PhotoURL": "", + "Notes": "2003 Affirmation", + "BirthDate": "1948-06-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Adam, Brian", + "PreferredName": "Brian", + "GenderTypeID": 2 + }, + { + "PersonID": 1928, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-06-09T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Fitzpatrick, Brian", + "PreferredName": "Brian", + "GenderTypeID": 2 + }, + { + "PersonID": 1930, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1958-01-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Monteith, Mr Brian", + "PreferredName": "Brian", + "GenderTypeID": 2 + }, + { + "PersonID": 1931, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1964-03-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Muldoon, Bristow", + "PreferredName": "Bristow", + "GenderTypeID": 2 + }, + { + "PersonID": 1932, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818634739", + "Notes": "", + "BirthDate": "1955-02-16T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Crawford, Bruce", + "PreferredName": "Bruce", + "GenderTypeID": 2 + }, + { + "PersonID": 1943, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1944-05-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Brodie, Chic", + "PreferredName": "Chic", + "GenderTypeID": 2 + }, + { + "PersonID": 1944, + "PhotoURL": "", + "Notes": "2003 Affirmation", + "BirthDate": "1952-07-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ballance, Chris", + "PreferredName": "Chris", + "GenderTypeID": 2 + }, + { + "PersonID": 1950, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1938-08-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Campbell, Colin", + "PreferredName": "Colin", + "GenderTypeID": 2 + }, + { + "PersonID": 1956, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1943-01-25T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Davidson, Mr David", + "PreferredName": "David", + "GenderTypeID": 2 + }, + { + "PersonID": 1961, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-08-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McLetchie, David", + "PreferredName": "David", + "GenderTypeID": 2 + }, + { + "PersonID": 1962, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1962-05-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Mundell, David", + "PreferredName": "David", + "GenderTypeID": 2 + }, + { + "PersonID": 1963, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1946-12-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Petrie, Dave", + "PreferredName": "Dave", + "GenderTypeID": 2 + }, + { + "PersonID": 1968, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-08-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Canavan, Dennis", + "PreferredName": "Dennis", + "GenderTypeID": 2 + }, + { + "PersonID": 1970, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-07-28T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McNulty, Des", + "PreferredName": "Des", + "GenderTypeID": 2 + }, + { + "PersonID": 1972, + "PhotoURL": "", + "Notes": "Brahler ID changed from 0027 to 0027000 by AJP on 06/12/00 because Bill Butler assigned brahler ID of 0027.", + "BirthDate": "1937-08-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Dewar, Donald", + "PreferredName": "Donald", + "GenderTypeID": 2 + }, + { + "PersonID": 1973, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1933-04-02T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Gorrie, Donald", + "PreferredName": "Donald", + "GenderTypeID": 2 + }, + { + "PersonID": 1985, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1973-10-03T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Hamilton, Mr Duncan", + "PreferredName": "Duncan", + "GenderTypeID": 2 + }, + { + "PersonID": 1986, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1950-09-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McNeil, Duncan", + "PreferredName": "Duncan", + "GenderTypeID": 2 + }, + { + "PersonID": 1988, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-09-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Brocklebank, Ted", + "PreferredName": "Ted", + "GenderTypeID": 2 + }, + { + "PersonID": 1990, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-02-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Robson, Euan", + "PreferredName": "Euan", + "GenderTypeID": 2 + }, + { + "PersonID": 1994, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35943512647", + "Notes": "Information on Fergus Ewing can also be found on http://www.snp.org", + "BirthDate": "1957-09-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ewing, Fergus", + "PreferredName": "Fergus", + "GenderTypeID": 2 + }, + { + "PersonID": 1996, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1962-07-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McAveety, Mr Frank", + "PreferredName": "Frank", + "GenderTypeID": 2 + }, + { + "PersonID": 2003, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1956-07-16T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Lyon, George", + "PreferredName": "George", + "GenderTypeID": 2 + }, + { + "PersonID": 2005, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1939-06-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Reid, Mr George", + "PreferredName": "George", + "GenderTypeID": 2 + }, + { + "PersonID": 2010, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855484744", + "Notes": "", + "BirthDate": "1942-11-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Paterson, Gil", + "PreferredName": "Gil", + "GenderTypeID": 2 + }, + { + "PersonID": 2013, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1948-08-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Jackson, Gordon", + "PreferredName": "Gordon", + "GenderTypeID": 2 + }, + { + "PersonID": 2015, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571580", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Lindhurst, Gordon", + "PreferredName": "Gordon", + "GenderTypeID": 2 + }, + { + "PersonID": 2028, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1948-06-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McLeish, Henry", + "PreferredName": "Henry", + "GenderTypeID": 2 + }, + { + "PersonID": 2029, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-02-12T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Henry, Hugh", + "PreferredName": "Hugh", + "GenderTypeID": 2 + }, + { + "PersonID": 2030, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-05-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "O'Donnell, Hugh", + "PreferredName": "Hugh", + "GenderTypeID": 2 + }, + { + "PersonID": 2033, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817741283", + "Notes": "", + "BirthDate": "1957-06-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Gray, Iain", + "PreferredName": "Iain", + "GenderTypeID": 2 + }, + { + "PersonID": 2038, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1960-05-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Smith, Iain", + "PreferredName": "Iain", + "GenderTypeID": 2 + }, + { + "PersonID": 2044, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1941-03-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Jenkins, Ian", + "PreferredName": "Ian", + "GenderTypeID": 2 + }, + { + "PersonID": 2049, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1940-04-02T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McKee, Ian", + "PreferredName": "Ian", + "GenderTypeID": 2 + }, + { + "PersonID": 2051, + "PhotoURL": "", + "Notes": "23-Nov-53\\r\\nBrahler ID as Elected MSP was 0119", + "BirthDate": "1953-11-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Welsh, Ian", + "PreferredName": "Ian", + "GenderTypeID": 2 + }, + { + "PersonID": 2052, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1960-06-30T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McConnell, Jack", + "PreferredName": "Jack", + "GenderTypeID": 2 + }, + { + "PersonID": 2056, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-07-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Douglas-Hamilton, Lord James", + "PreferredName": "James", + "GenderTypeID": 2 + }, + { + "PersonID": 2059, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690470", + "Notes": "", + "BirthDate": "1963-10-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Kelly, James", + "PreferredName": "James", + "GenderTypeID": 2 + }, + { + "PersonID": 2066, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-10-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McGrigor, Jamie", + "PreferredName": "Jamie", + "GenderTypeID": 2 + }, + { + "PersonID": 2068, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-06-16T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Stone, Jamie", + "PreferredName": "Jamie", + "GenderTypeID": 2 + }, + { + "PersonID": 2074, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1947-03-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Mather, Jim", + "PreferredName": "Jim", + "GenderTypeID": 2 + }, + { + "PersonID": 2077, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-08-25T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wallace, Mr Jim", + "PreferredName": "Jim", + "GenderTypeID": 2 + }, + { + "PersonID": 2080, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853504141", + "Notes": "", + "BirthDate": "1957-07-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Lamont, Johann", + "PreferredName": "Johann", + "GenderTypeID": 1 + }, + { + "PersonID": 2085, + "PhotoURL": "", + "Notes": "Repeated the Oath in Gaelic.", + "BirthDate": "1934-08-26T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Munro, John Farquhar", + "PreferredName": "John Farquhar", + "GenderTypeID": 2 + }, + { + "PersonID": 2090, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1948-02-13T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McAllion, Mr John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2098, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35943496226", + "Notes": "", + "BirthDate": "1964-04-13T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Swinney, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2099, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1930-12-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Young, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2100, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1948-12-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Home Robertson, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2103, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260789", + "Notes": "", + "BirthDate": "1961-12-20T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Brown, Keith", + "PreferredName": "Keith", + "GenderTypeID": 2 + }, + { + "PersonID": 2105, + "PhotoURL": "", + "Notes": "Resigned from Conservative Party and Joined Scottish Peoples Alliance 31 March 2003", + "BirthDate": "1938-11-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Harding, Mr Keith", + "PreferredName": "Keith", + "GenderTypeID": 2 + }, + { + "PersonID": 2106, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-06-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Raffan, Mr Keith", + "PreferredName": "Keith", + "GenderTypeID": 2 + }, + { + "PersonID": 2108, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35921454568", + "Notes": "Twitter - http://twitter.com/kenmacintoshmsp \\r\\nFacebook - http://www.facebook.com/pages/Ken-Macintosh-MSP/135822889783835", + "BirthDate": "1962-01-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Macintosh, Ken", + "PreferredName": "Ken", + "GenderTypeID": 2 + }, + { + "PersonID": 2110, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855484389", + "Notes": "", + "BirthDate": "1961-09-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Gibson, Kenneth", + "PreferredName": "Kenneth", + "GenderTypeID": 2 + }, + { + "PersonID": 2112, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1958-04-28T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "MacAskill, Kenny", + "PreferredName": "Kenny", + "GenderTypeID": 2 + }, + { + "PersonID": 2117, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002807", + "Notes": "", + "BirthDate": "1957-01-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Macdonald, Lewis", + "PreferredName": "Lewis", + "GenderTypeID": 2 + }, + { + "PersonID": 2118, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1957-04-29T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Quinan, Mr Lloyd", + "PreferredName": "Lloyd", + "GenderTypeID": 2 + }, + { + "PersonID": 2122, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1955-06-12T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McIntosh, Mrs Lyndsay", + "PreferredName": "Lyndsay", + "GenderTypeID": 1 + }, + { + "PersonID": 2123, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-03-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Chisholm, Malcolm", + "PreferredName": "Malcolm", + "GenderTypeID": 2 + }, + { + "PersonID": 2126, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1971-06-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Ballard, Mark", + "PreferredName": "Mark", + "GenderTypeID": 2 + }, + { + "PersonID": 2127, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781781662", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Ruskell, Mark", + "PreferredName": "Mark", + "GenderTypeID": 2 + }, + { + "PersonID": 2133, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660631", + "Notes": "", + "BirthDate": "1970-09-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Matheson, Michael", + "PreferredName": "Michael", + "GenderTypeID": 2 + }, + { + "PersonID": 2134, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-09-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McMahon, Michael", + "PreferredName": "Michael", + "GenderTypeID": 2 + }, + { + "PersonID": 2135, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35819641476", + "Notes": "Declared ethnicity as European, Scottish & British.\\r\\nRepeated the Oath in Gaelic.", + "BirthDate": "1953-08-09T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Russell, Michael", + "PreferredName": "Michael", + "GenderTypeID": 2 + }, + { + "PersonID": 2140, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783809943", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Rumbles, Mike", + "PreferredName": "Mike", + "GenderTypeID": 2 + }, + { + "PersonID": 2142, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-05-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Watson, Mike", + "PreferredName": "Mike", + "GenderTypeID": 2 + }, + { + "PersonID": 2148, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1950-09-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Tosh, Murray", + "PreferredName": "Murray", + "GenderTypeID": 2 + }, + { + "PersonID": 2152, + "PhotoURL": "", + "Notes": "\\r\\nRepeated the Oath in Catalan\\r\\nResigned 10/08/01", + "BirthDate": "1948-01-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Johnston, Nick", + "PreferredName": "Nick", + "GenderTypeID": 2 + }, + { + "PersonID": 2154, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1960-03-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Stephen, Nicol", + "PreferredName": "Nicol", + "GenderTypeID": 2 + }, + { + "PersonID": 2159, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1967-03-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Martin, Paul", + "PreferredName": "Paul", + "GenderTypeID": 2 + }, + { + "PersonID": 2167, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-02-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Peacock, Peter", + "PreferredName": "Peter", + "GenderTypeID": 2 + }, + { + "PersonID": 2172, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1939-06-03T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Gallie, Phil", + "PreferredName": "Phil", + "GenderTypeID": 2 + }, + { + "PersonID": 2180, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853506741", + "Notes": "", + "BirthDate": "1969-05-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Lochhead, Richard", + "PreferredName": "Richard", + "GenderTypeID": 2 + }, + { + "PersonID": 2182, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-10-22T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Simpson, Dr Richard", + "PreferredName": "Richard", + "GenderTypeID": 2 + }, + { + "PersonID": 2185, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1947-12-25T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Brown, Robert", + "PreferredName": "Robert", + "GenderTypeID": 2 + }, + { + "PersonID": 2188, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1940-08-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Harper, Robin", + "PreferredName": "Robin", + "GenderTypeID": 2 + }, + { + "PersonID": 2201, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-06-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Kane, Rosie", + "PreferredName": "Rosie", + "GenderTypeID": 1 + }, + { + "PersonID": 2202, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1947-02-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Finnie, Ross", + "PreferredName": "Ross", + "GenderTypeID": 2 + }, + { + "PersonID": 2205, + "PhotoURL": "", + "Notes": "Brahler ID prior to 14/05/2001 when resigned was 0037", + "BirthDate": "1945-08-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Galbraith, Mr Sam", + "PreferredName": "Sam", + "GenderTypeID": 2 + }, + { + "PersonID": 2207, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1962-03-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Barrie, Scott", + "PreferredName": "Scott", + "GenderTypeID": 2 + }, + { + "PersonID": 2215, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820478663", + "Notes": "", + "BirthDate": "1946-10-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Stevenson, Stewart", + "PreferredName": "Stewart", + "GenderTypeID": 2 + }, + { + "PersonID": 2223, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938602", + "Notes": "", + "BirthDate": "1966-05-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Scott, Tavish", + "PreferredName": "Tavish", + "GenderTypeID": 2 + }, + { + "PersonID": 2225, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1964-03-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Sheridan, Tommy", + "PreferredName": "Tommy", + "GenderTypeID": 2 + }, + { + "PersonID": 2228, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-04-28T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McCabe, Tom", + "PreferredName": "Tom", + "GenderTypeID": 2 + }, + { + "PersonID": 2234, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1947-04-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Aitken, Bill", + "PreferredName": "Bill", + "GenderTypeID": 2 + }, + { + "PersonID": 2247, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1944-04-12T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Arbuckle, Mr Andrew", + "PreferredName": "Andrew", + "GenderTypeID": 2 + }, + { + "PersonID": 2252, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1945-12-25T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Pringle, Mike", + "PreferredName": "Mike", + "GenderTypeID": 2 + }, + { + "PersonID": 2263, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1938-03-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Steel, Sir David", + "PreferredName": "David", + "GenderTypeID": 2 + }, + { + "PersonID": 2345, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35786761546", + "Notes": "See also http://www.vote-tory-for-ayr.org/johnscott.html", + "BirthDate": "1951-06-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Scott, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2364, + "PhotoURL": "", + "Notes": "assigned Brahler ID 0027 from 29/11/00 -", + "BirthDate": "1956-03-30T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Butler, Bill", + "PreferredName": "Bill", + "GenderTypeID": 2 + }, + { + "PersonID": 2390, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1939-12-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Turner, Dr Jean", + "PreferredName": "Jean", + "GenderTypeID": 1 + }, + { + "PersonID": 2394, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800892126", + "Notes": "Formally returned as regional MSP Mid-Scotland and Fife on 14/08/01\\r\\nTwitter: @murdo_fraser\\r\\nFacebook: www.facebook.com/MSPMurdoFraser", + "BirthDate": "1965-09-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Fraser, Murdo", + "PreferredName": "Murdo", + "GenderTypeID": 2 + }, + { + "PersonID": 2487, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1971-08-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McLeod, Aileen", + "PreferredName": "Aileen", + "GenderTypeID": 1 + }, + { + "PersonID": 2595, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1975-06-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Brown, Gavin", + "PreferredName": "Gavin", + "GenderTypeID": 2 + }, + { + "PersonID": 2596, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1974-08-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Brownlee, Derek", + "PreferredName": "Derek", + "GenderTypeID": 2 + }, + { + "PersonID": 2603, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1974-05-29T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Baker, Richard", + "PreferredName": "Richard", + "GenderTypeID": 2 + }, + { + "PersonID": 2610, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1956-11-28T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wilson, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2615, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937738", + "Notes": "Twitter @GeorgeAdam", + "BirthDate": "1969-06-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Adam, George", + "PreferredName": "George", + "GenderTypeID": 2 + }, + { + "PersonID": 2633, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853240684", + "Notes": "", + "BirthDate": "1971-03-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Baker, Claire", + "PreferredName": "Claire", + "GenderTypeID": 1 + }, + { + "PersonID": 2641, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800892437", + "Notes": "", + "BirthDate": "1971-05-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Allan, Dr Alasdair", + "PreferredName": "Alasdair", + "GenderTypeID": 2 + }, + { + "PersonID": 2651, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1965-05-26T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Tolson, Jim", + "PreferredName": "Jim", + "GenderTypeID": 2 + }, + { + "PersonID": 2665, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1948-03-03T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Byrne, Ms Rosemary", + "PreferredName": "Rosemary", + "GenderTypeID": 1 + }, + { + "PersonID": 2673, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1953-06-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Campbell, Roderick", + "PreferredName": "Roderick", + "GenderTypeID": 2 + }, + { + "PersonID": 2674, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-09-20T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Thompson, Dave", + "PreferredName": "Dave", + "GenderTypeID": 2 + }, + { + "PersonID": 2675, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1945-10-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Gibson, Rob", + "PreferredName": "Rob", + "GenderTypeID": 2 + }, + { + "PersonID": 2678, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35799295215", + "Notes": "", + "BirthDate": "1959-04-12T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Carlaw, Jackson", + "PreferredName": "Jackson", + "GenderTypeID": 2 + }, + { + "PersonID": 2686, + "PhotoURL": "", + "Notes": "BBC", + "BirthDate": "1930-07-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Swinburne, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2767, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-05-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Curran, Frances", + "PreferredName": "Frances", + "GenderTypeID": 1 + }, + { + "PersonID": 2826, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942003780", + "Notes": "", + "BirthDate": "1953-03-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Dornan, James", + "PreferredName": "James", + "GenderTypeID": 2 + }, + { + "PersonID": 2853, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1946-12-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Pentland, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 2866, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1974-01-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Purvis, Jeremy", + "PreferredName": "Jeremy", + "GenderTypeID": 2 + }, + { + "PersonID": 2876, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1963-12-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Maxwell, Stewart", + "PreferredName": "Stewart", + "GenderTypeID": 2 + }, + { + "PersonID": 2877, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1948-03-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "May, Christine", + "PreferredName": "Christine", + "GenderTypeID": 1 + }, + { + "PersonID": 2892, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690519", + "Notes": "", + "BirthDate": "1973-03-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Harvie, Patrick", + "PreferredName": "Patrick", + "GenderTypeID": 2 + }, + { + "PersonID": 2902, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1965-03-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Leckie, Carolyn", + "PreferredName": "Carolyn", + "GenderTypeID": 1 + }, + { + "PersonID": 2947, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1961-05-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McFee, Mr Bruce", + "PreferredName": "Bruce", + "GenderTypeID": 2 + }, + { + "PersonID": 2963, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1966-03-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McLaughlin, Anne", + "PreferredName": "Anne", + "GenderTypeID": 1 + }, + { + "PersonID": 3004, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1959-06-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Fox, Colin", + "PreferredName": "Colin", + "GenderTypeID": 2 + }, + { + "PersonID": 3061, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783809913", + "Notes": "Facebook- https://www.facebook.com/margaretmitchell2016", + "BirthDate": "1952-11-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Mitchell, Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 3101, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1956-11-26T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Malik, Hanzala", + "PreferredName": "Hanzala", + "GenderTypeID": 2 + }, + { + "PersonID": 3103, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1960-03-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Martin, Campbell", + "PreferredName": "Campbell", + "GenderTypeID": 2 + }, + { + "PersonID": 3129, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35799134774 ", + "Notes": "", + "BirthDate": "1956-07-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Kidd, Bill", + "PreferredName": "Bill", + "GenderTypeID": 2 + }, + { + "PersonID": 3538, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1951-10-28T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Gordon, Charlie", + "PreferredName": "Charlie", + "GenderTypeID": 2 + }, + { + "PersonID": 3743, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1954-04-16T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Don, Nigel", + "PreferredName": "Nigel", + "GenderTypeID": 2 + }, + { + "PersonID": 3745, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1956-08-14T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Robertson, Dennis", + "PreferredName": "Dennis", + "GenderTypeID": 2 + }, + { + "PersonID": 3746, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1944-09-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Harvie, Christopher", + "PreferredName": "Christopher", + "GenderTypeID": 2 + }, + { + "PersonID": 3749, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1959-09-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Tymkewycz, Stefan", + "PreferredName": "Stefan", + "GenderTypeID": 2 + }, + { + "PersonID": 3750, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690940", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Somerville, Shirley-Anne", + "PreferredName": "Shirley-Anne", + "GenderTypeID": 1 + }, + { + "PersonID": 3751, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/38395638303", + "Notes": "", + "BirthDate": "1951-10-17T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Beattie, Colin", + "PreferredName": "Colin", + "GenderTypeID": 2 + }, + { + "PersonID": 3758, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938486 ", + "Notes": "", + "BirthDate": "1979-05-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Hepburn, Jamie", + "PreferredName": "Jamie", + "GenderTypeID": 2 + }, + { + "PersonID": 3759, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260890", + "Notes": "", + "BirthDate": "1968-03-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McKelvie, Christina", + "PreferredName": "Christina", + "GenderTypeID": 1 + }, + { + "PersonID": 3763, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938765", + "Notes": "Twitter: @StuMcMillanSNP\\r\\nFacebook: Stuart McMillan MSP", + "BirthDate": "1972-05-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McMillan, Stuart", + "PreferredName": "Stuart", + "GenderTypeID": 2 + }, + { + "PersonID": 3771, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820939764", + "Notes": "", + "BirthDate": "1973-05-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Doris, Bob", + "PreferredName": "Bob", + "GenderTypeID": 2 + }, + { + "PersonID": 3775, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260104", + "Notes": "", + "BirthDate": "1980-05-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Campbell, Aileen", + "PreferredName": "Aileen", + "GenderTypeID": 1 + }, + { + "PersonID": 3806, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002372", + "Notes": "", + "BirthDate": "1956-05-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Stewart, David", + "PreferredName": "David", + "GenderTypeID": 2 + }, + { + "PersonID": 3811, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-01-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Foulkes, George", + "PreferredName": "George", + "GenderTypeID": 2 + }, + { + "PersonID": 3812, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781781656", + "Notes": "", + "BirthDate": "1981-08-28T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Dugdale, Kezia", + "PreferredName": "Kezia", + "GenderTypeID": 1 + }, + { + "PersonID": 3815, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1973-09-14T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Park, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 3824, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-01-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McDougall, Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 3896, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855661618", + "Notes": "", + "BirthDate": "1967-08-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McArthur, Liam", + "PreferredName": "Liam", + "GenderTypeID": 2 + }, + { + "PersonID": 3901, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800493586", + "Notes": "", + "BirthDate": "1967-04-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "FitzPatrick, Joe", + "PreferredName": "Joe", + "GenderTypeID": 2 + }, + { + "PersonID": 3907, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/36076831535", + "Notes": "", + "BirthDate": "1958-05-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Coffey, Willie", + "PreferredName": "Willie", + "GenderTypeID": 2 + }, + { + "PersonID": 3983, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687661", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Golden, Maurice", + "PreferredName": "Maurice", + "GenderTypeID": 2 + }, + { + "PersonID": 3985, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689384", + "Notes": "", + "BirthDate": "1987-09-21T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Thomson, Ross", + "PreferredName": "Ross", + "GenderTypeID": 2 + }, + { + "PersonID": 3994, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686696", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Simpson, Graham", + "PreferredName": "Graham", + "GenderTypeID": 2 + }, + { + "PersonID": 4014, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818225410", + "Notes": "", + "BirthDate": "1960-02-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Smith, Liz", + "PreferredName": "Liz", + "GenderTypeID": 1 + }, + { + "PersonID": 4016, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35922877680", + "Notes": "facebook.com/JohnLamontBorders/\\r\\nTwitter: @john2win", + "BirthDate": "1976-04-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Lamont, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 4074, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-04-22T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Whitton, David", + "PreferredName": "David", + "GenderTypeID": 2 + }, + { + "PersonID": 4080, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "McInnes, Alison", + "PreferredName": "Alison", + "GenderTypeID": 1 + }, + { + "PersonID": 4086, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1962-11-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Hume, Jim", + "PreferredName": "Jim", + "GenderTypeID": 2 + }, + { + "PersonID": 4934, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818497919", + "Notes": "", + "BirthDate": "1965-10-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Johnstone, Alison", + "PreferredName": "Alison", + "GenderTypeID": 1 + }, + { + "PersonID": 4938, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260779", + "Notes": "", + "BirthDate": "1950-06-12T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Lyle, Richard", + "PreferredName": "Richard", + "GenderTypeID": 2 + }, + { + "PersonID": 4939, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660763", + "Notes": "", + "BirthDate": "1963-10-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "MacDonald, Angus", + "PreferredName": "Angus", + "GenderTypeID": 2 + }, + { + "PersonID": 4940, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938229", + "Notes": "", + "BirthDate": "1967-08-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Adamson, Clare", + "PreferredName": "Clare", + "GenderTypeID": 1 + }, + { + "PersonID": 4941, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35922512428 ", + "Notes": "", + "BirthDate": "1985-04-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Yousaf, Humza", + "PreferredName": "Humza", + "GenderTypeID": 2 + }, + { + "PersonID": 4947, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690556", + "Notes": "", + "BirthDate": "1956-12-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Finnie, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 4948, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1958-11-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "MacKenzie, Mike", + "PreferredName": "Mike", + "GenderTypeID": 2 + }, + { + "PersonID": 4951, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853519283", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "McAlpine, Joan", + "PreferredName": "Joan", + "GenderTypeID": 1 + }, + { + "PersonID": 4952, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818225376", + "Notes": "twitter@paulwheelhouse\\r\\nf: PaulWheelhouseMSP", + "BirthDate": "1970-06-22T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wheelhouse, Paul", + "PreferredName": "Paul", + "GenderTypeID": 2 + }, + { + "PersonID": 4955, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1968-02-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Eadie, Jim", + "PreferredName": "Jim", + "GenderTypeID": 2 + }, + { + "PersonID": 4956, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1959-12-09T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Keir, Colin", + "PreferredName": "Colin", + "GenderTypeID": 2 + }, + { + "PersonID": 4964, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817648204", + "Notes": "", + "BirthDate": "1980-06-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McDonald, Mark", + "PreferredName": "Mark", + "GenderTypeID": 2 + }, + { + "PersonID": 4965, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1964-03-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Allard, Christian", + "PreferredName": "Christian", + "GenderTypeID": 2 + }, + { + "PersonID": 4966, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660444", + "Notes": "Facebook – derekmackaysnp\\r\\nTwitter - derekmackaysnp", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Mackay, Derek", + "PreferredName": "Derek", + "GenderTypeID": 2 + }, + { + "PersonID": 4976, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689179", + "Notes": "", + "BirthDate": "1978-11-10T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Davidson, Ruth", + "PreferredName": "Ruth", + "GenderTypeID": 1 + }, + { + "PersonID": 4981, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687368", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Ross, Douglas", + "PreferredName": "Douglas", + "GenderTypeID": 2 + }, + { + "PersonID": 4982, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689774", + "Notes": "", + "BirthDate": "1961-03-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Mountain, Edward", + "PreferredName": "Edward", + "GenderTypeID": 2 + }, + { + "PersonID": 4984, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Buchanan, Cameron", + "PreferredName": "Cameron", + "GenderTypeID": 2 + }, + { + "PersonID": 4987, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783685351", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Briggs, Miles", + "PreferredName": "Miles", + "GenderTypeID": 2 + }, + { + "PersonID": 5009, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687229", + "Notes": "", + "BirthDate": "1967-09-27T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Rennie, Willie", + "PreferredName": "Willie", + "GenderTypeID": 2 + }, + { + "PersonID": 5034, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853514522", + "Notes": "Facebook: facebook.com/jennymarramsp\\r\\nTwitter: @jennymarra", + "BirthDate": "1977-11-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Marra, Jenny", + "PreferredName": "Jenny", + "GenderTypeID": 1 + }, + { + "PersonID": 5035, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Brennan, Lesley", + "PreferredName": "Lesley", + "GenderTypeID": 1 + }, + { + "PersonID": 5038, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1955-11-05T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Baxter, Jayne", + "PreferredName": "Jayne", + "GenderTypeID": 1 + }, + { + "PersonID": 5041, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1984-07-04T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McMahon, Siobhan", + "PreferredName": "Siobhan", + "GenderTypeID": 1 + }, + { + "PersonID": 5042, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660595", + "Notes": "", + "BirthDate": "1985-10-19T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Griffin, Mark", + "PreferredName": "Mark", + "GenderTypeID": 2 + }, + { + "PersonID": 5047, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1970-01-30T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McTaggart, Anne", + "PreferredName": "Anne", + "GenderTypeID": 1 + }, + { + "PersonID": 5054, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817927315", + "Notes": "", + "BirthDate": "1969-03-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Findlay, Neil", + "PreferredName": "Neil", + "GenderTypeID": 2 + }, + { + "PersonID": 5057, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Pearson, Graeme", + "PreferredName": "Graeme", + "GenderTypeID": 2 + }, + { + "PersonID": 5059, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818225238", + "Notes": "", + "BirthDate": "1954-03-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Fee, Mary", + "PreferredName": "Mary", + "GenderTypeID": 1 + }, + { + "PersonID": 5060, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960261503", + "Notes": "", + "BirthDate": "1983-09-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Bibby, Neil", + "PreferredName": "Neil", + "GenderTypeID": 2 + }, + { + "PersonID": 5074, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817741458", + "Notes": "", + "BirthDate": "1960-01-02T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "MacDonald, Gordon", + "PreferredName": "Gordon", + "GenderTypeID": 2 + }, + { + "PersonID": 5075, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800414488", + "Notes": "", + "BirthDate": "1961-03-13T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Torrance, David", + "PreferredName": "David", + "GenderTypeID": 2 + }, + { + "PersonID": 5078, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1942-03-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Walker, Bill", + "PreferredName": "Bill", + "GenderTypeID": 2 + }, + { + "PersonID": 5079, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Smith, Drew", + "PreferredName": "Drew", + "GenderTypeID": 2 + }, + { + "PersonID": 5080, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1952-05-09T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "McCulloch, Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 5106, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818497490", + "Notes": "", + "BirthDate": "1968-06-03T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Stewart, Kevin", + "PreferredName": "Kevin", + "GenderTypeID": 2 + }, + { + "PersonID": 5107, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35802798381", + "Notes": "", + "BirthDate": "1962-10-29T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Dey, Graeme", + "PreferredName": "Graeme", + "GenderTypeID": 2 + }, + { + "PersonID": 5108, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1949-12-07T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Burgess, Margaret", + "PreferredName": "Margaret", + "GenderTypeID": 1 + }, + { + "PersonID": 5109, + "PhotoURL": "", + "Notes": "", + "BirthDate": "1982-07-31T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Biagi, Marco", + "PreferredName": "Marco", + "GenderTypeID": 2 + }, + { + "PersonID": 5110, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937486", + "Notes": "", + "BirthDate": "1957-05-15T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Mason, John", + "PreferredName": "John", + "GenderTypeID": 2 + }, + { + "PersonID": 5119, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35786781393 ", + "Notes": "", + "BirthDate": "1963-11-30T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Rowley, Alex", + "PreferredName": "Alex", + "GenderTypeID": 2 + }, + { + "PersonID": 5556, + "PhotoURL": "", + "Notes": "https://twitter.com/cara_hilton", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Hilton, Cara", + "PreferredName": "Cara", + "GenderTypeID": 1 + }, + { + "PersonID": 5578, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571350", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Martin, Gillian", + "PreferredName": "Gillian", + "GenderTypeID": 1 + }, + { + "PersonID": 5579, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942063441", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Leonard, Richard", + "PreferredName": "Richard", + "GenderTypeID": 2 + }, + { + "PersonID": 5580, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687362", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Lennon, Monica", + "PreferredName": "Monica", + "GenderTypeID": 1 + }, + { + "PersonID": 5586, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690447", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Sarwar, Anas", + "PreferredName": "Anas", + "GenderTypeID": 2 + }, + { + "PersonID": 5587, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35921454674", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Evans, Mairi", + "PreferredName": "Mairi", + "GenderTypeID": 1 + }, + { + "PersonID": 5591, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660525", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Ross, Gail", + "PreferredName": "Gail", + "GenderTypeID": 1 + }, + { + "PersonID": 5592, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688795", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Freeman, Jeane", + "PreferredName": "Jeane", + "GenderTypeID": 1 + }, + { + "PersonID": 5596, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689308", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "MacGregor, Fulton", + "PreferredName": "Fulton", + "GenderTypeID": 2 + }, + { + "PersonID": 5598, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686177", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Maguire, Ruth", + "PreferredName": "Ruth", + "GenderTypeID": 1 + }, + { + "PersonID": 5604, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937956", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Johnson, Daniel", + "PreferredName": "Daniel", + "GenderTypeID": 2 + }, + { + "PersonID": 5605, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686850", + "Notes": "", + "BirthDate": "1974-03-08T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Denham, Ash", + "PreferredName": "Ash", + "GenderTypeID": 1 + }, + { + "PersonID": 5608, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686780", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Macpherson, Ben", + "PreferredName": "Ben", + "GenderTypeID": 2 + }, + { + "PersonID": 5612, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688223", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "McKee, Ivan", + "PreferredName": "Ivan", + "GenderTypeID": 2 + }, + { + "PersonID": 5613, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686815", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Gilruth, Jenny", + "PreferredName": "Jenny", + "GenderTypeID": 1 + }, + { + "PersonID": 5618, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687418", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Haughey, Clare", + "PreferredName": "Clare", + "GenderTypeID": 1 + }, + { + "PersonID": 5621, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002221", + "Notes": "", + "BirthDate": "1990-04-06T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Forbes, Kate", + "PreferredName": "Kate", + "GenderTypeID": 1 + }, + { + "PersonID": 5622, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687929", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Mackay, Rona", + "PreferredName": "Rona", + "GenderTypeID": 1 + }, + { + "PersonID": 5638, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688355", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Smyth, Colin", + "PreferredName": "Colin", + "GenderTypeID": 2 + }, + { + "PersonID": 5651, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687854", + "Notes": "", + "BirthDate": "1975-01-23T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Kerr, Liam", + "PreferredName": "Liam", + "GenderTypeID": 2 + }, + { + "PersonID": 5665, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688483", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Burnett, Alexander", + "PreferredName": "Alexander", + "GenderTypeID": 2 + }, + { + "PersonID": 5669, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783691275", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Todd, Maree", + "PreferredName": "Maree", + "GenderTypeID": 1 + }, + { + "PersonID": 5677, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35786761150", + "Notes": "", + "BirthDate": "1976-11-26T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Cameron, Donald", + "PreferredName": "Donald", + "GenderTypeID": 2 + }, + { + "PersonID": 5679, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689357", + "Notes": "", + "BirthDate": "1950-05-13T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Chapman, Peter", + "PreferredName": "Peter", + "GenderTypeID": 2 + }, + { + "PersonID": 5695, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571691", + "Notes": "", + "BirthDate": "1963-05-29T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wightman, Andy", + "PreferredName": "Andy", + "GenderTypeID": 2 + }, + { + "PersonID": 5698, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35681770981", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Greene, Jamie", + "PreferredName": "Jamie", + "GenderTypeID": 2 + }, + { + "PersonID": 5700, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689572", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Corry, Maurice", + "PreferredName": "Maurice", + "GenderTypeID": 2 + }, + { + "PersonID": 5709, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571941", + "Notes": "", + "BirthDate": "1989-12-01T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Mundell, Oliver", + "PreferredName": "Oliver", + "GenderTypeID": 2 + }, + { + "PersonID": 5757, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687836", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Greer, Ross", + "PreferredName": "Ross", + "GenderTypeID": 2 + }, + { + "PersonID": 5769, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571479", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Hamilton, Rachael", + "PreferredName": "Rachael", + "GenderTypeID": 1 + }, + { + "PersonID": 5771, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818497399", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Harper, Emma", + "PreferredName": "Emma", + "GenderTypeID": 1 + }, + { + "PersonID": 5781, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690200", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Harris, Alison", + "PreferredName": "Alison", + "GenderTypeID": 1 + }, + { + "PersonID": 5782, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/40400707229", + "Notes": "", + "BirthDate": "1967-10-18T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Carson, Finlay", + "PreferredName": "Finlay", + "GenderTypeID": 2 + }, + { + "PersonID": 5783, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781655804", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Tomkins, Adam", + "PreferredName": "Adam", + "GenderTypeID": 2 + }, + { + "PersonID": 5788, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686421", + "Notes": "", + "BirthDate": "1972-02-24T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Wells, Annie", + "PreferredName": "Annie", + "GenderTypeID": 1 + }, + { + "PersonID": 5793, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688325", + "Notes": "", + "BirthDate": "1964-04-26T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Whittle, Brian", + "PreferredName": "Brian", + "GenderTypeID": 2 + }, + { + "PersonID": 5797, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/42332640174", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Ballantyne, Michelle", + "PreferredName": "Michelle", + "GenderTypeID": 1 + }, + { + "PersonID": 5800, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": false, + "ParliamentaryName": "Halcro Johnston, Jamie", + "PreferredName": "Jamie", + "GenderTypeID": 2 + }, + { + "PersonID": 5809, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688782", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Lockhart, Dean", + "PreferredName": "Dean", + "GenderTypeID": 2 + }, + { + "PersonID": 5815, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571595", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Cole-Hamilton, Alex", + "PreferredName": "Alex", + "GenderTypeID": 2 + }, + { + "PersonID": 5866, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571135", + "Notes": "", + "BirthDate": "1962-11-29T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Stewart, Alexander", + "PreferredName": "Alexander", + "GenderTypeID": 2 + }, + { + "PersonID": 5868, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688599", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Arthur, Tom", + "PreferredName": "Tom", + "GenderTypeID": 2 + }, + { + "PersonID": 5877, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688260", + "Notes": "", + "BirthDate": "1967-03-11T00:00:00Z", + "BirthDateIsProtected": false, + "ParliamentaryName": "Balfour, Jeremy", + "PreferredName": "Jeremy", + "GenderTypeID": 2 + }, + { + "PersonID": 5929, + "PhotoURL": "", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": false, + "ParliamentaryName": "Mason, Tom", + "PreferredName": "Tom", + "GenderTypeID": 2 + }, + { + "PersonID": 6090, + "PhotoURL": "http://scottishparliament.thirdlight.com/file/39689732792", + "Notes": "", + "BirthDate": null, + "BirthDateIsProtected": true, + "ParliamentaryName": "Bowman, Bill", + "PreferredName": "Bill", + "GenderTypeID": 2 + } +] diff --git a/test/inputs/json/misc/337ed.json b/test/inputs/json/misc/337ed.json index 66727da13..eae968669 100644 --- a/test/inputs/json/misc/337ed.json +++ b/test/inputs/json/misc/337ed.json @@ -1 +1,1876 @@ -{"count": 17266, "facets": {}, "results": [{"other_sources_donation": 385213, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-09-18T00:49:01.406041", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "013b6cca4abc4e25b5e8bb66dc77e38e", "cost_absolute": null, "eur_sources_grants_src": null, "id": "fffabd366dd44c4fb7379481a638eecd", "customIncomes": [], "total_budget": 660960, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 385213, "cost_max": 199999, "created_at": "2015-09-18T00:49:01.409679", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/fffabd366dd44c4fb7379481a638eecd", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 275747, "other_sources_total": 385213, "other_financial_information": "We used a \u20ac/CHF exchange rate of 1.10, as per info from the ECB on 16 September 2015.", "public_financing_national": 275747, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 99999, "updated_at": "2016-05-05T01:35:10.407461", "cost_min": null, "direct_rep_costs_max": null, "representative": "f1622c9caf54453d9a6c04804863ce0e", "cost_absolute": null, "eur_sources_grants_src": null, "id": "fff1768c0aa64f0799667e2522c3f340", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-24T21:46:36.026780", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/fff1768c0aa64f0799667e2522c3f340", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2016-01-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-06-01T01:55:18.942873", "cost_min": null, "direct_rep_costs_max": null, "representative": "12750bb632484a9ca2b66d2d0c697f42", "cost_absolute": 100, "eur_sources_grants_src": null, "id": "ffe6a717d0494855b30df00b0aa364dd", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2016-06-01T01:55:18.946640", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffe6a717d0494855b30df00b0aa364dd", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-30T00:31:22.089325", "cost_min": null, "direct_rep_costs_max": null, "representative": "ee3f932f5f9a46b793f4575d3c4a1ba1", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffdd7866367541999ce4ed1de30bad50", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-30T00:31:22.091930", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffdd7866367541999ce4ed1de30bad50", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Les comptes financiers du GIGREL sont certifi\u00e9s par un expert comptable", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:03:26.456171", "cost_min": null, "direct_rep_costs_max": null, "representative": "4a97ff579f39418b8ac1ab3aaed88932", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffdb787db80d45cb9f1988f9dffd3d79", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T01:52:29.207871", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffdb787db80d45cb9f1988f9dffd3d79", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-21T02:00:24.411627", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "e0cf2c23c0974c689bb92910659121d4", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffd5741012184e55b901bfa4774ca121", "customIncomes": [], "total_budget": null, "turnover_absolute": 45122748, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-02-09T02:56:30.457858", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd5741012184e55b901bfa4774ca121", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": 54154, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-05-24T23:54:56.661915", "cost_min": null, "direct_rep_costs_max": null, "representative": "fc6ba4bc05754730b435e3ad248475ae", "cost_absolute": null, "eur_sources_grants_src": "EIDHR", "id": "ffd55c90a2eb4e5fa0aef212f9e1e46d", "customIncomes": [{"status": "active", "name": "UN bodies", "created_at": "2015-05-28T02:15:19.669323", "updated_at": "2015-05-28T02:15:19.668220", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/9a969481456647d68653dd83aac11246", "amount": 243151, "type": "public", "id": "9a969481456647d68653dd83aac11246"}, {"status": "active", "name": "Trusts and foundations", "created_at": "2015-05-28T02:15:19.683645", "updated_at": "2015-05-28T02:15:19.682195", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/d6555ad554614b8685609d5780f6b575", "amount": 241759, "type": "public", "id": "d6555ad554614b8685609d5780f6b575"}, {"status": "active", "name": "Publishing rights", "created_at": "2015-05-28T02:15:19.689808", "updated_at": "2015-05-28T02:15:19.688752", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/889cfd75b53c4c26a52db0c84c6db2ab", "amount": 590, "type": "public", "id": "889cfd75b53c4c26a52db0c84c6db2ab"}, {"status": "active", "name": "Interest", "created_at": "2015-05-28T02:15:19.695412", "updated_at": "2015-05-28T02:15:19.694444", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/4da5bb10577f498aa12d7ac9d3fcfbb1", "amount": 344, "type": "public", "id": "4da5bb10577f498aa12d7ac9d3fcfbb1"}, {"status": "active", "name": "Other INGOS & NGOs", "created_at": "2015-05-28T02:15:19.701039", "updated_at": "2015-05-28T02:15:19.700107", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/3cd306bd22394082b4f819c027d3b74f", "amount": 44147, "type": "public", "id": "3cd306bd22394082b4f819c027d3b74f"}], "total_budget": 4504192, "turnover_absolute": null, "eur_sources_grants": 1317691, "other_sources_contributions": 54154, "cost_max": 9999, "created_at": "2015-05-07T21:30:43.767784", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd55c90a2eb4e5fa0aef212f9e1e46d", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 4450038, "other_sources_total": 54154, "other_financial_information": null, "public_financing_national": 2602356, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:49:19.041473", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "6ffd2947b99e49559eccd74a21e7f508", "cost_absolute": null, "eur_sources_grants_src": "Intelligent Energy Europe (IEE), LIFE Operating grant, Executive Agency for Small and Medium-sized Enterprises (EASME)", "id": "ffd1d420375949a68d4eb2283aca2d5d", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 470000, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-03-09T01:49:19.045719", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd1d420375949a68d4eb2283aca2d5d", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-06-18T00:54:28.859949", "cost_min": null, "direct_rep_costs_max": null, "representative": "eb7a9c91b2da4c1da909d04ac1bb1466", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffcd0088616146d6baf3a0c2ccc2e7a9", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-06-18T00:54:28.863595", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffcd0088616146d6baf3a0c2ccc2e7a9", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:15:00.692458", "cost_min": null, "direct_rep_costs_max": null, "representative": "97bd0a0054a64b02a2a8d7aa01d9e88a", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffcc874f7b75440ca06df46679b6deca", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-17T01:15:00.696615", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffcc874f7b75440ca06df46679b6deca", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-06-09T00:26:54.823237", "cost_min": null, "direct_rep_costs_max": null, "representative": "ae97df280eab44b5b40098197708efe6", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffc19765007c4f3aba8eaa48c684a554", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T02:30:25.668792", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffc19765007c4f3aba8eaa48c684a554", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:58:15.973638", "cost_min": null, "direct_rep_costs_max": null, "representative": "6092b03e7105428cb513e9e249d5c4d7", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffc16d5a6e344038b5377e45960be787", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-17T01:58:15.977827", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffc16d5a6e344038b5377e45960be787", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": 100000, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 499999, "updated_at": "2016-04-08T01:00:23.785525", "cost_min": 300000, "direct_rep_costs_max": null, "representative": "c75f8e81295d4cbb880758d6e18b3589", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffb97483dfbe470cbda4933c09260bde", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 399999, "created_at": "2016-04-08T01:00:23.787495", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffb97483dfbe470cbda4933c09260bde", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": 0, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2013-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-07T00:14:47.973821", "cost_min": null, "direct_rep_costs_max": null, "representative": "6a2d6670e2ce4af1882c75ddd9666fc5", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffaf85a0e6a94685964f432cdd142bef", "customIncomes": [], "total_budget": 13000000, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 0, "cost_max": 9999, "created_at": "2015-04-24T01:59:26.164126", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffaf85a0e6a94685964f432cdd142bef", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 13000000, "other_sources_total": 0, "other_financial_information": "We are 100 percent funded by the Norwegian state and our staff only work part time on EU advocacy. ", "public_financing_national": 13000000, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2013-01-01T00:00:00"}, {"other_sources_donation": 29047000, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-06-25T00:13:19.257034", "cost_min": 300000, "direct_rep_costs_max": null, "representative": "a1f2638c81034e07a2ab3ed2c54e6097", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffaf83bd49424f3baa0716d70e1da1f9", "customIncomes": [], "total_budget": 29047000, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 29047000, "cost_max": 399999, "created_at": "2015-06-17T23:52:51.768558", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffaf83bd49424f3baa0716d70e1da1f9", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 0, "other_sources_total": 29047000, "other_financial_information": "Major funders of the ECF are:\r\n- Children\u2019s Investment Fund Foundation (United Kingdom)\r\n- McCall MacBain Foundation (Switzerland)\r\n- Oak Foundation (Switzerland)\r\n- ClimateWorks Foundation (United States of America)\r\n- Nationale Postcode Loterij (Netherlands)\r\n- Villum Fonden (Denmark)", "public_financing_national": 0, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-09-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-21T01:16:37.966794", "cost_min": null, "direct_rep_costs_max": null, "representative": "51897d28145f4329bf55bf89a8ac50b8", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffa71efed5f74254888217e6a68e7905", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-07T21:12:34.739366", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffa71efed5f74254888217e6a68e7905", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2013-10-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 99999, "updated_at": "2016-05-05T01:23:13.676750", "cost_min": null, "direct_rep_costs_max": null, "representative": "48aa47f2326b4227a5cc9421ab45fd22", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffa5b73fc4b5448ea6c27cf043991cb6", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-07T21:27:39.131564", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffa5b73fc4b5448ea6c27cf043991cb6", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2016-01-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:35:12.589885", "cost_min": null, "direct_rep_costs_max": null, "representative": "0b5fe36ecd114b729aab1d8683a34215", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff8f43a4f7e14aadaf98988bc0314d50", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-17T01:35:12.593635", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8f43a4f7e14aadaf98988bc0314d50", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "100% funded by companies active in the UK paper industry.", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": 30000, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-26T02:30:00.483178", "cost_min": null, "direct_rep_costs_max": null, "representative": "8e920e7a62994b1ebd9faec199d5534b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff8ec78386384e4bb6c56dcead8b764a", "customIncomes": [], "total_budget": 60000, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 30000, "cost_max": 9999, "created_at": "2015-09-23T00:50:08.119641", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8ec78386384e4bb6c56dcead8b764a", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": 60000, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-12-04T02:36:08.694295", "cost_min": null, "direct_rep_costs_max": null, "representative": "a3bbdd184d114bd19a444cd72882e635", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff8aac50ab16444cb3e65e75a228f2de", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-12-04T02:36:08.697897", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8aac50ab16444cb3e65e75a228f2de", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": "0", "new_organisation": null, "turnover_max": null, "updated_at": "2016-02-11T02:56:04.443073", "cost_min": null, "direct_rep_costs_max": null, "representative": "24ccf60ad967421d846dc0c78e8adbb8", "cost_absolute": 50000, "eur_sources_grants_src": "Lifelong learning Programme-Grundtvig", "id": "ff87048f461c460f9d934eb7a530dfba", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 2000, "other_sources_contributions": null, "cost_max": null, "created_at": "2016-02-11T02:56:04.446801", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff87048f461c460f9d934eb7a530dfba", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-12-23T02:43:03.491517", "cost_min": 300000, "direct_rep_costs_max": null, "representative": "29f14de439a848b6a93183888b909da5", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff7baad305284c0b9038ec8838a300a7", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 399999, "created_at": "2015-12-23T02:43:03.495155", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff7baad305284c0b9038ec8838a300a7", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-27T01:01:20.211310", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "e5a7554197164c53886192d861babdd3", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff73bcf48e4e4cc3a3e49a1bd26e98a7", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2015-05-07T21:12:38.474975", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff73bcf48e4e4cc3a3e49a1bd26e98a7", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "ECG's main source of funding is via its membership fees, and the costs attributable to activities covered by the Register have been estimated according to its Implementing Guidelines as well as the SEAP Guidelines (of which the ECG EU Affairs Adviser is a member in his personal capacity).", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-01-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-05-14T01:25:59.026666", "cost_min": null, "direct_rep_costs_max": null, "representative": "49922f3520e7430abc76aed24f3e3d14", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff661b8905174738859139b1d111b590", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-24T21:44:12.205154", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff661b8905174738859139b1d111b590", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2013-02-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-21T00:20:41.720896", "cost_min": 10000, "direct_rep_costs_max": null, "representative": "eb2693775b7a40f09063bb5e35ec3aac", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff655f4300214430b018f37da655bb5c", "customIncomes": [], "total_budget": 0, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 24999, "created_at": "2016-03-17T01:25:55.168580", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff655f4300214430b018f37da655bb5c", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 0, "other_sources_total": 0, "other_financial_information": "EFIC has own budget from biennial congresses and annual royalties of our medical online journal (European Journal of Pain) and receives unrestricted grants from the pharmaceutical companies. As an organisation representing healthcare professionals working in the field of pain care, only a small proportion of our activities are covered by the Transparency Register, with the rest dedicated to education, training and best practice sharing amongst professionals.", "public_financing_national": 0, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": "-", "new_organisation": null, "turnover_max": null, "updated_at": "2016-08-31T01:12:27.637001", "cost_min": null, "direct_rep_costs_max": null, "representative": "c81d9bc7ee0e4345a5be20393ff9fed6", "cost_absolute": 850000, "eur_sources_grants_src": "Comisi\u00f3n Europea", "id": "ff6429e2edad450786b5a47cc77b5601", "customIncomes": [], "total_budget": null, "turnover_absolute": 850000, "eur_sources_grants": 1107051, "other_sources_contributions": null, "cost_max": null, "created_at": "2016-08-31T01:12:27.641759", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff6429e2edad450786b5a47cc77b5601", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Las subvenciones recibidas corresponden a proyectos europeos (como el S\u00e9ptimo Programa Marco) en colaboraci\u00f3n en los que Zabala ha participado como l\u00edder o socio.", "public_financing_national": null, "no_clients": "Actividades propias", "type": "FinancialDataLawyer", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:41:33.481929", "cost_min": 400000, "direct_rep_costs_max": null, "representative": "e1ef1a5ab7f540929f8512c95f0600b0", "cost_absolute": null, "eur_sources_grants_src": "LIFE+, Horizon 2020 programme , Interreg, FP7", "id": "ff63c2f0a1a54fbebd729ce7c53935ad", "customIncomes": [], "total_budget": 372075, "turnover_absolute": null, "eur_sources_grants": 123410, "other_sources_contributions": null, "cost_max": 499999, "created_at": "2016-03-09T01:41:33.485949", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff63c2f0a1a54fbebd729ce7c53935ad", "public_financing_infranational": 100000, "direct_rep_costs_min": null, "public_financing_total": 223410, "other_sources_total": 148665, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-11-13T01:50:37.570747", "cost_min": null, "direct_rep_costs_max": null, "representative": "c3a15479c001435693b4e972f9932dc4", "cost_absolute": 1062180, "eur_sources_grants_src": null, "id": "ff634677ea944e0e9da29280bd1c8e21", "customIncomes": [{"status": "active", "name": "Pays non UE", "created_at": "2015-05-29T00:12:53.126202", "updated_at": "2015-05-29T00:12:53.124173", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/f3a51689636a4015b7ef0c9514db029f", "amount": 263712, "type": "public", "id": "f3a51689636a4015b7ef0c9514db029f"}], "total_budget": 1062180, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-05-29T00:12:53.091229", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff634677ea944e0e9da29280bd1c8e21", "public_financing_infranational": 243854, "direct_rep_costs_min": null, "public_financing_total": 1055017, "other_sources_total": 7163, "other_financial_information": null, "public_financing_national": 547451, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-09-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:07:33.143858", "cost_min": null, "direct_rep_costs_max": null, "representative": "ea9f0c320b13411498459ecfdf75372f", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff631c5d015940a2b27d805ad219aff4", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T01:54:58.173774", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff631c5d015940a2b27d805ad219aff4", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2013-10-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": 100000, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 499999, "updated_at": "2016-04-27T01:07:20.498409", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "b7e55c858616434bbb585b0568ced38b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff61fb9d5de04800a7e52be0c18ac00f", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2016-04-24T01:06:40.000683", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff61fb9d5de04800a7e52be0c18ac00f", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-05T01:12:31.130346", "cost_min": null, "direct_rep_costs_max": null, "representative": "7334c9fa6a2e47f7b60523e96ef415ae", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff602bc4988b41c6b703f52b665cd117", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-04-05T01:12:31.132703", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff602bc4988b41c6b703f52b665cd117", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "ENFE is financed by membership fees.", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-07-26T02:14:27.877008", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "36e5d2c3a82d41eab1c70dfd170f186f", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff5cc562357044969f96a169e6d989e9", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-07-26T02:14:27.879571", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff5cc562357044969f96a169e6d989e9", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T00:57:05.899581", "cost_min": null, "direct_rep_costs_max": null, "representative": "a55336f005c8483897cf1afea7a77406", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff5bf36cf6a84021ba3dc262cfe9e63e", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T01:47:51.877769", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff5bf36cf6a84021ba3dc262cfe9e63e", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": 91548, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2011-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-07-29T23:29:35.482487", "cost_min": null, "direct_rep_costs_max": null, "representative": "fee73f7916f94c36b2f90c4e1b294a51", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff59ceb8e0cb4cb19e254cb971358dc7", "customIncomes": [], "total_budget": 141548, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 91548, "cost_max": 9999, "created_at": "2015-04-24T02:08:08.998718", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff59ceb8e0cb4cb19e254cb971358dc7", "public_financing_infranational": 9000, "direct_rep_costs_min": null, "public_financing_total": 9000, "other_sources_total": 132548, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2010-12-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:02:22.851486", "cost_min": 4750000, "direct_rep_costs_max": null, "representative": "f5bb3f9a04154a1da09833863e665717", "cost_absolute": null, "eur_sources_grants_src": "EASY (DG EMPL); H2020; FP7", "id": "ff59a2fdf8d14c83ab787b0ced87c730", "customIncomes": [{"status": "active", "name": "Meeting room rental/financial interests", "created_at": "2016-03-09T01:02:22.888002", "updated_at": "2016-03-09T01:02:22.886828", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/11b3d3217d624f3d90541293e217588f", "amount": 23577, "type": "other", "id": "11b3d3217d624f3d90541293e217588f"}], "total_budget": 4809810, "turnover_absolute": null, "eur_sources_grants": 2574753, "other_sources_contributions": null, "cost_max": 4999999, "created_at": "2016-03-09T01:02:22.853972", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff59a2fdf8d14c83ab787b0ced87c730", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 2574753, "other_sources_total": 2235057, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-06-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-05-20T00:29:19.429630", "cost_min": null, "direct_rep_costs_max": null, "representative": "ff6ce8c03aee44788ce83a6544cdbb4c", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff564fe63435452b80ac8bbd2a079260", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-06-18T00:07:53.894598", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff564fe63435452b80ac8bbd2a079260", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-07-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-04-28T00:17:45.663986", "cost_min": 50000, "direct_rep_costs_max": null, "representative": "c34ceb998f4c4b70b7db662165a9de54", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff555374506c4af6ae57bae7e9c1b51a", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 99999, "created_at": "2015-04-24T01:53:09.466077", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff555374506c4af6ae57bae7e9c1b51a", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 5764592, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": "Executive Agency for Competitiveness and Innovation and Directorate General for Enterprise and Industry", "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-26T00:33:54.789304", "cost_min": null, "direct_rep_costs_max": null, "representative": "3c39e2830d4741ed99f4d21ca05872fa", "cost_absolute": 2850000, "eur_sources_grants_src": null, "id": "ff4950d785a94c028b1dfbf4de3e5ec6", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-04-24T02:14:56.286856", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff4950d785a94c028b1dfbf4de3e5ec6", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:23:25.917730", "cost_min": null, "direct_rep_costs_max": null, "representative": "a8459278c5b04861b6b02e8bcca18a4a", "cost_absolute": 200000, "eur_sources_grants_src": null, "id": "ff46b2e339fc4aa1bfb69c79dc4319a2", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-04-24T01:52:20.961870", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff46b2e339fc4aa1bfb69c79dc4319a2", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Der dbb wird im Wesentlichen durch seine europ\u00e4ische Dachorganisation CESI direkt gegen\u00fcber den EU-Organen vertreten. Die CESI ist registriert.", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": 3000, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-06-17T02:04:41.712226", "cost_min": null, "direct_rep_costs_max": null, "representative": "ff1754756bf64805831e8bb4c762109a", "cost_absolute": null, "eur_sources_grants_src": "eu dg home", "id": "ff43a00340f94a11847e8a1183f599f3", "customIncomes": [{"status": "active", "name": "grants", "created_at": "2016-06-17T02:04:41.774315", "updated_at": "2016-06-17T02:04:41.773044", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/b180289e9a144e9ab5b2c26c1c32e926", "amount": 74500, "type": "other", "id": "b180289e9a144e9ab5b2c26c1c32e926"}, {"status": "active", "name": "consultancy", "created_at": "2016-06-17T02:04:41.867067", "updated_at": "2016-06-17T02:04:41.865509", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/ad00aa1b40a5478490b7082f7edccc60", "amount": 6000, "type": "other", "id": "ad00aa1b40a5478490b7082f7edccc60"}, {"status": "active", "name": "others", "created_at": "2016-06-17T02:04:41.885844", "updated_at": "2016-06-17T02:04:41.884649", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/00607b57a2c4476ea3c10c3997ff9177", "amount": 9000, "type": "other", "id": "00607b57a2c4476ea3c10c3997ff9177"}], "total_budget": 121150, "turnover_absolute": null, "eur_sources_grants": 28500, "other_sources_contributions": 3000, "cost_max": 9999, "created_at": "2016-06-17T02:04:41.715911", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff43a00340f94a11847e8a1183f599f3", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 28500, "other_sources_total": 92650, "other_financial_information": null, "public_financing_national": 0, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-01-09T02:48:48.670185", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "a5c4b373e2dd41309c42b6211cbbed1b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff3e7bd1d757476babb322207fd89431", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2016-01-09T02:48:48.673828", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3e7bd1d757476babb322207fd89431", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "we have submitted in Nov 2015 a project for EC financing under the SME Disruptive Innovation ICT37 track", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-26T01:42:52.941422", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "2d1a7981a27f4caeb5a8f43eeb02de47", "cost_absolute": null, "eur_sources_grants_src": "programme MEDIA; fonds FEDER", "id": "ff3d73cd3d674f9ab63882344903c865", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 1935358, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2015-04-24T02:20:10.869745", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3d73cd3d674f9ab63882344903c865", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2013-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-02T00:07:59.374410", "cost_min": 10000, "direct_rep_costs_max": null, "representative": "e2d7e43581d34104b45bb5ac4d671df5", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff399ec0cd394a0da59444715097da16", "customIncomes": [{"status": "active", "name": "EU funded projects", "created_at": "2015-05-28T01:36:05.276235", "updated_at": "2015-05-28T01:36:05.274118", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/5eb829db8645496eb7da6dd9ba230aa0", "amount": 21655, "type": "public", "id": "5eb829db8645496eb7da6dd9ba230aa0"}], "total_budget": 52455, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 24999, "created_at": "2015-04-24T01:54:42.816653", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff399ec0cd394a0da59444715097da16", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 21655, "other_sources_total": 30800, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2013-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-07-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 99999, "updated_at": "2016-03-01T02:27:09.807510", "cost_min": null, "direct_rep_costs_max": null, "representative": "2d11327ea91f426394661d573a3b0823", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff3925bb093f42f3aad57207d507307c", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-01T02:27:09.811227", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3925bb093f42f3aad57207d507307c", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": "nothing to report", "type": "FinancialDataLawyer", "start_date": "2014-07-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2016-05-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-05-14T01:23:57.344764", "cost_min": null, "direct_rep_costs_max": null, "representative": "3b3953455f344ddf983af43d791d30e8", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff32000e621a4160b10fcc71dffb4194", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-05-14T01:23:57.349338", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff32000e621a4160b10fcc71dffb4194", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "EPIC is not dependent on any EU subsidies and has a very limited budget. The secretariat is financed by NVC (meeting room for biannual plenary meetings and backoffice for data-exchange and communication) whereas the member-institutes (including NVC) cover their own expenses (travel, attending meetings, etc.) on a voluntary basis. ", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-06-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-02-18T02:20:45.702640", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "4270dcf1403d40299c380499dddda0a7", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff305f722afd49ea86de0746cc70d3ab", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-02-18T02:20:45.704520", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff305f722afd49ea86de0746cc70d3ab", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-10-29T01:59:24.507191", "cost_min": null, "direct_rep_costs_max": null, "representative": "98dc888ca71240ff93db25822ca0c11a", "cost_absolute": 35000, "eur_sources_grants_src": null, "id": "ff2d7cdd117b43f6ab44e119a1bafca4", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-10-29T01:59:24.510841", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2d7cdd117b43f6ab44e119a1bafca4", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-10-15T00:49:59.154282", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "a6659a7ac34a46ae8af3c7035e318d5b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff2c1c60233d4584a30376b886eb6670", "customIncomes": [], "total_budget": 0, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2015-10-15T00:49:59.159594", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2c1c60233d4584a30376b886eb6670", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "we receive our budget from the Moroccan Finance Department", "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-07-14T02:14:13.083569", "cost_min": 50000, "direct_rep_costs_max": null, "representative": "75f442e91d054c00a56c4488b9159c4f", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff2b9ed37dd64e0bba88065da1e2e0b8", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 99999, "created_at": "2016-07-14T02:14:13.087248", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2b9ed37dd64e0bba88065da1e2e0b8", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Finazierung aus Mitgliederbeitr\u00e4gen", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00"}, {"other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 28378, "end_date": "2015-12-01T00:00:00", "eur_sources_procurement_src": "Daguerreobase Project", "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-23T01:13:50.286315", "cost_min": null, "direct_rep_costs_max": null, "representative": "54a567a6dd454450a5c5e6d9077f1988", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff2b598043f04061a50bc70240cd6354", "customIncomes": [{"status": "active", "name": "Shopinkomsten", "created_at": "2016-04-23T01:13:50.325922", "updated_at": "2016-04-23T01:13:50.323842", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/5e8bdfbae8794dceb91fbc7fa6025d9a", "amount": 133026, "type": "other", "id": "5e8bdfbae8794dceb91fbc7fa6025d9a"}, {"status": "active", "name": "Zaalverhuur en concessie", "created_at": "2016-04-23T01:13:50.338422", "updated_at": "2016-04-23T01:13:50.336526", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/ca0e76ad7a2644528a875233550fa301", "amount": 37274, "type": "other", "id": "ca0e76ad7a2644528a875233550fa301"}, {"status": "active", "name": "Organisatie publieksactiviteiten", "created_at": "2016-04-23T01:13:50.372977", "updated_at": "2016-04-23T01:13:50.371056", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/acceed6d3ad0465ba2876c2c51161bbe", "amount": 56076, "type": "other", "id": "acceed6d3ad0465ba2876c2c51161bbe"}, {"status": "active", "name": "Personeelsubsidies", "created_at": "2016-04-23T01:13:50.485699", "updated_at": "2016-04-23T01:13:50.483938", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/83f204483e2940ee8bf6815e13c0c5d1", "amount": 3981, "type": "other", "id": "83f204483e2940ee8bf6815e13c0c5d1"}, {"status": "active", "name": "Varia opbrengsten", "created_at": "2016-04-23T01:13:50.516579", "updated_at": "2016-04-23T01:13:50.514618", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/bcddc8a783424f8dadc8628a6a27d7bb", "amount": 67722, "type": "other", "id": "bcddc8a783424f8dadc8628a6a27d7bb"}], "total_budget": 3002447, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-04-23T01:13:50.290118", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2b598043f04061a50bc70240cd6354", "public_financing_infranational": 2260632, "direct_rep_costs_min": null, "public_financing_total": 2496215, "other_sources_total": 506232, "other_financial_information": null, "public_financing_national": 207205, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2015-01-01T00:00:00"}], "next": "http://api.lobbyfacts.eu/api/1/financial_data?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false} \ No newline at end of file +{ + "count": 17266, + "facets": {}, + "results": [ + { + "other_sources_donation": 385213, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-09-18T00:49:01.406041Z", + "cost_min": 100000, + "direct_rep_costs_max": null, + "representative": "013b6cca4abc4e25b5e8bb66dc77e38e", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "fffabd366dd44c4fb7379481a638eecd", + "customIncomes": [], + "total_budget": 660960, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": 385213, + "cost_max": 199999, + "created_at": "2015-09-18T00:49:01.409679Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/fffabd366dd44c4fb7379481a638eecd", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": 275747, + "other_sources_total": 385213, + "other_financial_information": "We used a \u20ac/CHF exchange rate of 1.10, as per info from the ECB on 16 September 2015.", + "public_financing_national": 275747, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": 99999, + "updated_at": "2016-05-05T01:35:10.407461Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "f1622c9caf54453d9a6c04804863ce0e", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "fff1768c0aa64f0799667e2522c3f340", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-05-24T21:46:36.026780Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/fff1768c0aa64f0799667e2522c3f340", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataLawyer", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2016-01-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-06-01T01:55:18.942873Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "12750bb632484a9ca2b66d2d0c697f42", + "cost_absolute": 100, + "eur_sources_grants_src": null, + "id": "ffe6a717d0494855b30df00b0aa364dd", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": null, + "created_at": "2016-06-01T01:55:18.946640Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffe6a717d0494855b30df00b0aa364dd", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-30T00:31:22.089325Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "ee3f932f5f9a46b793f4575d3c4a1ba1", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffdd7866367541999ce4ed1de30bad50", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-03-30T00:31:22.091930Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffdd7866367541999ce4ed1de30bad50", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "Les comptes financiers du GIGREL sont certifi\u00e9s par un expert comptable", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-09T01:03:26.456171Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "4a97ff579f39418b8ac1ab3aaed88932", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffdb787db80d45cb9f1988f9dffd3d79", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-04-24T01:52:29.207871Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffdb787db80d45cb9f1988f9dffd3d79", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-21T02:00:24.411627Z", + "cost_min": 25000, + "direct_rep_costs_max": null, + "representative": "e0cf2c23c0974c689bb92910659121d4", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffd5741012184e55b901bfa4774ca121", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": 45122748, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 49999, + "created_at": "2016-02-09T02:56:30.457858Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd5741012184e55b901bfa4774ca121", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataLawyer", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": 54154, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-05-24T23:54:56.661915Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "fc6ba4bc05754730b435e3ad248475ae", + "cost_absolute": null, + "eur_sources_grants_src": "EIDHR", + "id": "ffd55c90a2eb4e5fa0aef212f9e1e46d", + "customIncomes": [ + { + "status": "active", + "name": "UN bodies", + "created_at": "2015-05-28T02:15:19.669323Z", + "updated_at": "2015-05-28T02:15:19.668220Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/9a969481456647d68653dd83aac11246", + "amount": 243151, + "type": "public", + "id": "9a969481456647d68653dd83aac11246" + }, + { + "status": "active", + "name": "Trusts and foundations", + "created_at": "2015-05-28T02:15:19.683645Z", + "updated_at": "2015-05-28T02:15:19.682195Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/d6555ad554614b8685609d5780f6b575", + "amount": 241759, + "type": "public", + "id": "d6555ad554614b8685609d5780f6b575" + }, + { + "status": "active", + "name": "Publishing rights", + "created_at": "2015-05-28T02:15:19.689808Z", + "updated_at": "2015-05-28T02:15:19.688752Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/889cfd75b53c4c26a52db0c84c6db2ab", + "amount": 590, + "type": "public", + "id": "889cfd75b53c4c26a52db0c84c6db2ab" + }, + { + "status": "active", + "name": "Interest", + "created_at": "2015-05-28T02:15:19.695412Z", + "updated_at": "2015-05-28T02:15:19.694444Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/4da5bb10577f498aa12d7ac9d3fcfbb1", + "amount": 344, + "type": "public", + "id": "4da5bb10577f498aa12d7ac9d3fcfbb1" + }, + { + "status": "active", + "name": "Other INGOS & NGOs", + "created_at": "2015-05-28T02:15:19.701039Z", + "updated_at": "2015-05-28T02:15:19.700107Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/3cd306bd22394082b4f819c027d3b74f", + "amount": 44147, + "type": "public", + "id": "3cd306bd22394082b4f819c027d3b74f" + } + ], + "total_budget": 4504192, + "turnover_absolute": null, + "eur_sources_grants": 1317691, + "other_sources_contributions": 54154, + "cost_max": 9999, + "created_at": "2015-05-07T21:30:43.767784Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd55c90a2eb4e5fa0aef212f9e1e46d", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": 4450038, + "other_sources_total": 54154, + "other_financial_information": null, + "public_financing_national": 2602356, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-09T01:49:19.041473Z", + "cost_min": 25000, + "direct_rep_costs_max": null, + "representative": "6ffd2947b99e49559eccd74a21e7f508", + "cost_absolute": null, + "eur_sources_grants_src": "Intelligent Energy Europe (IEE), LIFE Operating grant, Executive Agency for Small and Medium-sized Enterprises (EASME)", + "id": "ffd1d420375949a68d4eb2283aca2d5d", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 470000, + "other_sources_contributions": null, + "cost_max": 49999, + "created_at": "2016-03-09T01:49:19.045719Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd1d420375949a68d4eb2283aca2d5d", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-06-18T00:54:28.859949Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "eb7a9c91b2da4c1da909d04ac1bb1466", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffcd0088616146d6baf3a0c2ccc2e7a9", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-06-18T00:54:28.863595Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffcd0088616146d6baf3a0c2ccc2e7a9", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-17T01:15:00.692458Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "97bd0a0054a64b02a2a8d7aa01d9e88a", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffcc874f7b75440ca06df46679b6deca", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-03-17T01:15:00.696615Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffcc874f7b75440ca06df46679b6deca", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-06-09T00:26:54.823237Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "ae97df280eab44b5b40098197708efe6", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffc19765007c4f3aba8eaa48c684a554", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-04-24T02:30:25.668792Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffc19765007c4f3aba8eaa48c684a554", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-17T01:58:15.973638Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "6092b03e7105428cb513e9e249d5c4d7", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffc16d5a6e344038b5377e45960be787", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-03-17T01:58:15.977827Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffc16d5a6e344038b5377e45960be787", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": 100000, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": 499999, + "updated_at": "2016-04-08T01:00:23.785525Z", + "cost_min": 300000, + "direct_rep_costs_max": null, + "representative": "c75f8e81295d4cbb880758d6e18b3589", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffb97483dfbe470cbda4933c09260bde", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 399999, + "created_at": "2016-04-08T01:00:23.787495Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffb97483dfbe470cbda4933c09260bde", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataLawyer", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": 0, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2013-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-07T00:14:47.973821Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "6a2d6670e2ce4af1882c75ddd9666fc5", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffaf85a0e6a94685964f432cdd142bef", + "customIncomes": [], + "total_budget": 13000000, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": 0, + "cost_max": 9999, + "created_at": "2015-04-24T01:59:26.164126Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffaf85a0e6a94685964f432cdd142bef", + "public_financing_infranational": 0, + "direct_rep_costs_min": null, + "public_financing_total": 13000000, + "other_sources_total": 0, + "other_financial_information": "We are 100 percent funded by the Norwegian state and our staff only work part time on EU advocacy. ", + "public_financing_national": 13000000, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2013-01-01T00:00:00Z" + }, + { + "other_sources_donation": 29047000, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-06-25T00:13:19.257034Z", + "cost_min": 300000, + "direct_rep_costs_max": null, + "representative": "a1f2638c81034e07a2ab3ed2c54e6097", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffaf83bd49424f3baa0716d70e1da1f9", + "customIncomes": [], + "total_budget": 29047000, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": 29047000, + "cost_max": 399999, + "created_at": "2015-06-17T23:52:51.768558Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffaf83bd49424f3baa0716d70e1da1f9", + "public_financing_infranational": 0, + "direct_rep_costs_min": null, + "public_financing_total": 0, + "other_sources_total": 29047000, + "other_financial_information": "Major funders of the ECF are:\r\n- Children\u2019s Investment Fund Foundation (United Kingdom)\r\n- McCall MacBain Foundation (Switzerland)\r\n- Oak Foundation (Switzerland)\r\n- ClimateWorks Foundation (United States of America)\r\n- Nationale Postcode Loterij (Netherlands)\r\n- Villum Fonden (Denmark)", + "public_financing_national": 0, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-09-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-21T01:16:37.966794Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "51897d28145f4329bf55bf89a8ac50b8", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffa71efed5f74254888217e6a68e7905", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-05-07T21:12:34.739366Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffa71efed5f74254888217e6a68e7905", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2013-10-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": 99999, + "updated_at": "2016-05-05T01:23:13.676750Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "48aa47f2326b4227a5cc9421ab45fd22", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ffa5b73fc4b5448ea6c27cf043991cb6", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-05-07T21:27:39.131564Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffa5b73fc4b5448ea6c27cf043991cb6", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataLawyer", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2016-01-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-17T01:35:12.589885Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "0b5fe36ecd114b729aab1d8683a34215", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff8f43a4f7e14aadaf98988bc0314d50", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-03-17T01:35:12.593635Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8f43a4f7e14aadaf98988bc0314d50", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "100% funded by companies active in the UK paper industry.", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": 30000, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-26T02:30:00.483178Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "8e920e7a62994b1ebd9faec199d5534b", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff8ec78386384e4bb6c56dcead8b764a", + "customIncomes": [], + "total_budget": 60000, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": 30000, + "cost_max": 9999, + "created_at": "2015-09-23T00:50:08.119641Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8ec78386384e4bb6c56dcead8b764a", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": 60000, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-12-04T02:36:08.694295Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "a3bbdd184d114bd19a444cd72882e635", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff8aac50ab16444cb3e65e75a228f2de", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-12-04T02:36:08.697897Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8aac50ab16444cb3e65e75a228f2de", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": "0", + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-02-11T02:56:04.443073Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "24ccf60ad967421d846dc0c78e8adbb8", + "cost_absolute": 50000, + "eur_sources_grants_src": "Lifelong learning Programme-Grundtvig", + "id": "ff87048f461c460f9d934eb7a530dfba", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 2000, + "other_sources_contributions": null, + "cost_max": null, + "created_at": "2016-02-11T02:56:04.446801Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff87048f461c460f9d934eb7a530dfba", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-12-23T02:43:03.491517Z", + "cost_min": 300000, + "direct_rep_costs_max": null, + "representative": "29f14de439a848b6a93183888b909da5", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff7baad305284c0b9038ec8838a300a7", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 399999, + "created_at": "2015-12-23T02:43:03.495155Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff7baad305284c0b9038ec8838a300a7", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-27T01:01:20.211310Z", + "cost_min": 100000, + "direct_rep_costs_max": null, + "representative": "e5a7554197164c53886192d861babdd3", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff73bcf48e4e4cc3a3e49a1bd26e98a7", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 199999, + "created_at": "2015-05-07T21:12:38.474975Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff73bcf48e4e4cc3a3e49a1bd26e98a7", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "ECG's main source of funding is via its membership fees, and the costs attributable to activities covered by the Register have been estimated according to its Implementing Guidelines as well as the SEAP Guidelines (of which the ECG EU Affairs Adviser is a member in his personal capacity).", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-01-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-05-14T01:25:59.026666Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "49922f3520e7430abc76aed24f3e3d14", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff661b8905174738859139b1d111b590", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-05-24T21:44:12.205154Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff661b8905174738859139b1d111b590", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2013-02-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-21T00:20:41.720896Z", + "cost_min": 10000, + "direct_rep_costs_max": null, + "representative": "eb2693775b7a40f09063bb5e35ec3aac", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff655f4300214430b018f37da655bb5c", + "customIncomes": [], + "total_budget": 0, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 24999, + "created_at": "2016-03-17T01:25:55.168580Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff655f4300214430b018f37da655bb5c", + "public_financing_infranational": 0, + "direct_rep_costs_min": null, + "public_financing_total": 0, + "other_sources_total": 0, + "other_financial_information": "EFIC has own budget from biennial congresses and annual royalties of our medical online journal (European Journal of Pain) and receives unrestricted grants from the pharmaceutical companies. As an organisation representing healthcare professionals working in the field of pain care, only a small proportion of our activities are covered by the Transparency Register, with the rest dedicated to education, training and best practice sharing amongst professionals.", + "public_financing_national": 0, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": "-", + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-08-31T01:12:27.637001Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "c81d9bc7ee0e4345a5be20393ff9fed6", + "cost_absolute": 850000, + "eur_sources_grants_src": "Comisi\u00f3n Europea", + "id": "ff6429e2edad450786b5a47cc77b5601", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": 850000, + "eur_sources_grants": 1107051, + "other_sources_contributions": null, + "cost_max": null, + "created_at": "2016-08-31T01:12:27.641759Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff6429e2edad450786b5a47cc77b5601", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "Las subvenciones recibidas corresponden a proyectos europeos (como el S\u00e9ptimo Programa Marco) en colaboraci\u00f3n en los que Zabala ha participado como l\u00edder o socio.", + "public_financing_national": null, + "no_clients": "Actividades propias", + "type": "FinancialDataLawyer", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-09T01:41:33.481929Z", + "cost_min": 400000, + "direct_rep_costs_max": null, + "representative": "e1ef1a5ab7f540929f8512c95f0600b0", + "cost_absolute": null, + "eur_sources_grants_src": "LIFE+, Horizon 2020 programme , Interreg, FP7", + "id": "ff63c2f0a1a54fbebd729ce7c53935ad", + "customIncomes": [], + "total_budget": 372075, + "turnover_absolute": null, + "eur_sources_grants": 123410, + "other_sources_contributions": null, + "cost_max": 499999, + "created_at": "2016-03-09T01:41:33.485949Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff63c2f0a1a54fbebd729ce7c53935ad", + "public_financing_infranational": 100000, + "direct_rep_costs_min": null, + "public_financing_total": 223410, + "other_sources_total": 148665, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-11-13T01:50:37.570747Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "c3a15479c001435693b4e972f9932dc4", + "cost_absolute": 1062180, + "eur_sources_grants_src": null, + "id": "ff634677ea944e0e9da29280bd1c8e21", + "customIncomes": [ + { + "status": "active", + "name": "Pays non UE", + "created_at": "2015-05-29T00:12:53.126202Z", + "updated_at": "2015-05-29T00:12:53.124173Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/f3a51689636a4015b7ef0c9514db029f", + "amount": 263712, + "type": "public", + "id": "f3a51689636a4015b7ef0c9514db029f" + } + ], + "total_budget": 1062180, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": null, + "created_at": "2015-05-29T00:12:53.091229Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff634677ea944e0e9da29280bd1c8e21", + "public_financing_infranational": 243854, + "direct_rep_costs_min": null, + "public_financing_total": 1055017, + "other_sources_total": 7163, + "other_financial_information": null, + "public_financing_national": 547451, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-09-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-09T01:07:33.143858Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "ea9f0c320b13411498459ecfdf75372f", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff631c5d015940a2b27d805ad219aff4", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-04-24T01:54:58.173774Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff631c5d015940a2b27d805ad219aff4", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2013-10-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": 100000, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": 499999, + "updated_at": "2016-04-27T01:07:20.498409Z", + "cost_min": 100000, + "direct_rep_costs_max": null, + "representative": "b7e55c858616434bbb585b0568ced38b", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff61fb9d5de04800a7e52be0c18ac00f", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 199999, + "created_at": "2016-04-24T01:06:40.000683Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff61fb9d5de04800a7e52be0c18ac00f", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataLawyer", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-05T01:12:31.130346Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "7334c9fa6a2e47f7b60523e96ef415ae", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff602bc4988b41c6b703f52b665cd117", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-04-05T01:12:31.132703Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff602bc4988b41c6b703f52b665cd117", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "ENFE is financed by membership fees.", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-07-26T02:14:27.877008Z", + "cost_min": 25000, + "direct_rep_costs_max": null, + "representative": "36e5d2c3a82d41eab1c70dfd170f186f", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff5cc562357044969f96a169e6d989e9", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 49999, + "created_at": "2016-07-26T02:14:27.879571Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff5cc562357044969f96a169e6d989e9", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-09T00:57:05.899581Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "a55336f005c8483897cf1afea7a77406", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff5bf36cf6a84021ba3dc262cfe9e63e", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-04-24T01:47:51.877769Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff5bf36cf6a84021ba3dc262cfe9e63e", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": 91548, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2011-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-07-29T23:29:35.482487Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "fee73f7916f94c36b2f90c4e1b294a51", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff59ceb8e0cb4cb19e254cb971358dc7", + "customIncomes": [], + "total_budget": 141548, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": 91548, + "cost_max": 9999, + "created_at": "2015-04-24T02:08:08.998718Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff59ceb8e0cb4cb19e254cb971358dc7", + "public_financing_infranational": 9000, + "direct_rep_costs_min": null, + "public_financing_total": 9000, + "other_sources_total": 132548, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2010-12-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-09T01:02:22.851486Z", + "cost_min": 4750000, + "direct_rep_costs_max": null, + "representative": "f5bb3f9a04154a1da09833863e665717", + "cost_absolute": null, + "eur_sources_grants_src": "EASY (DG EMPL); H2020; FP7", + "id": "ff59a2fdf8d14c83ab787b0ced87c730", + "customIncomes": [ + { + "status": "active", + "name": "Meeting room rental/financial interests", + "created_at": "2016-03-09T01:02:22.888002Z", + "updated_at": "2016-03-09T01:02:22.886828Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/11b3d3217d624f3d90541293e217588f", + "amount": 23577, + "type": "other", + "id": "11b3d3217d624f3d90541293e217588f" + } + ], + "total_budget": 4809810, + "turnover_absolute": null, + "eur_sources_grants": 2574753, + "other_sources_contributions": null, + "cost_max": 4999999, + "created_at": "2016-03-09T01:02:22.853972Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff59a2fdf8d14c83ab787b0ced87c730", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": 2574753, + "other_sources_total": 2235057, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-06-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-05-20T00:29:19.429630Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "ff6ce8c03aee44788ce83a6544cdbb4c", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff564fe63435452b80ac8bbd2a079260", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2015-06-18T00:07:53.894598Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff564fe63435452b80ac8bbd2a079260", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-07-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-04-28T00:17:45.663986Z", + "cost_min": 50000, + "direct_rep_costs_max": null, + "representative": "c34ceb998f4c4b70b7db662165a9de54", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff555374506c4af6ae57bae7e9c1b51a", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 99999, + "created_at": "2015-04-24T01:53:09.466077Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff555374506c4af6ae57bae7e9c1b51a", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 5764592, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": "Executive Agency for Competitiveness and Innovation and Directorate General for Enterprise and Industry", + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-26T00:33:54.789304Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "3c39e2830d4741ed99f4d21ca05872fa", + "cost_absolute": 2850000, + "eur_sources_grants_src": null, + "id": "ff4950d785a94c028b1dfbf4de3e5ec6", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": null, + "created_at": "2015-04-24T02:14:56.286856Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff4950d785a94c028b1dfbf4de3e5ec6", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-17T01:23:25.917730Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "a8459278c5b04861b6b02e8bcca18a4a", + "cost_absolute": 200000, + "eur_sources_grants_src": null, + "id": "ff46b2e339fc4aa1bfb69c79dc4319a2", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": null, + "created_at": "2015-04-24T01:52:20.961870Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff46b2e339fc4aa1bfb69c79dc4319a2", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "Der dbb wird im Wesentlichen durch seine europ\u00e4ische Dachorganisation CESI direkt gegen\u00fcber den EU-Organen vertreten. Die CESI ist registriert.", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": 3000, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-06-17T02:04:41.712226Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "ff1754756bf64805831e8bb4c762109a", + "cost_absolute": null, + "eur_sources_grants_src": "eu dg home", + "id": "ff43a00340f94a11847e8a1183f599f3", + "customIncomes": [ + { + "status": "active", + "name": "grants", + "created_at": "2016-06-17T02:04:41.774315Z", + "updated_at": "2016-06-17T02:04:41.773044Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/b180289e9a144e9ab5b2c26c1c32e926", + "amount": 74500, + "type": "other", + "id": "b180289e9a144e9ab5b2c26c1c32e926" + }, + { + "status": "active", + "name": "consultancy", + "created_at": "2016-06-17T02:04:41.867067Z", + "updated_at": "2016-06-17T02:04:41.865509Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/ad00aa1b40a5478490b7082f7edccc60", + "amount": 6000, + "type": "other", + "id": "ad00aa1b40a5478490b7082f7edccc60" + }, + { + "status": "active", + "name": "others", + "created_at": "2016-06-17T02:04:41.885844Z", + "updated_at": "2016-06-17T02:04:41.884649Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/00607b57a2c4476ea3c10c3997ff9177", + "amount": 9000, + "type": "other", + "id": "00607b57a2c4476ea3c10c3997ff9177" + } + ], + "total_budget": 121150, + "turnover_absolute": null, + "eur_sources_grants": 28500, + "other_sources_contributions": 3000, + "cost_max": 9999, + "created_at": "2016-06-17T02:04:41.715911Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff43a00340f94a11847e8a1183f599f3", + "public_financing_infranational": 0, + "direct_rep_costs_min": null, + "public_financing_total": 28500, + "other_sources_total": 92650, + "other_financial_information": null, + "public_financing_national": 0, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-01-09T02:48:48.670185Z", + "cost_min": 100000, + "direct_rep_costs_max": null, + "representative": "a5c4b373e2dd41309c42b6211cbbed1b", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff3e7bd1d757476babb322207fd89431", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 199999, + "created_at": "2016-01-09T02:48:48.673828Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3e7bd1d757476babb322207fd89431", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "we have submitted in Nov 2015 a project for EC financing under the SME Disruptive Innovation ICT37 track", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-03-26T01:42:52.941422Z", + "cost_min": 100000, + "direct_rep_costs_max": null, + "representative": "2d1a7981a27f4caeb5a8f43eeb02de47", + "cost_absolute": null, + "eur_sources_grants_src": "programme MEDIA; fonds FEDER", + "id": "ff3d73cd3d674f9ab63882344903c865", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 1935358, + "other_sources_contributions": null, + "cost_max": 199999, + "created_at": "2015-04-24T02:20:10.869745Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3d73cd3d674f9ab63882344903c865", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "inactive", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2013-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-02T00:07:59.374410Z", + "cost_min": 10000, + "direct_rep_costs_max": null, + "representative": "e2d7e43581d34104b45bb5ac4d671df5", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff399ec0cd394a0da59444715097da16", + "customIncomes": [ + { + "status": "active", + "name": "EU funded projects", + "created_at": "2015-05-28T01:36:05.276235Z", + "updated_at": "2015-05-28T01:36:05.274118Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/5eb829db8645496eb7da6dd9ba230aa0", + "amount": 21655, + "type": "public", + "id": "5eb829db8645496eb7da6dd9ba230aa0" + } + ], + "total_budget": 52455, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 24999, + "created_at": "2015-04-24T01:54:42.816653Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff399ec0cd394a0da59444715097da16", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": 21655, + "other_sources_total": 30800, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2013-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-07-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": 99999, + "updated_at": "2016-03-01T02:27:09.807510Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "2d11327ea91f426394661d573a3b0823", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff3925bb093f42f3aad57207d507307c", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-03-01T02:27:09.811227Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3925bb093f42f3aad57207d507307c", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": "nothing to report", + "type": "FinancialDataLawyer", + "start_date": "2014-07-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2016-05-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-05-14T01:23:57.344764Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "3b3953455f344ddf983af43d791d30e8", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff32000e621a4160b10fcc71dffb4194", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-05-14T01:23:57.349338Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff32000e621a4160b10fcc71dffb4194", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "EPIC is not dependent on any EU subsidies and has a very limited budget. The secretariat is financed by NVC (meeting room for biannual plenary meetings and backoffice for data-exchange and communication) whereas the member-institutes (including NVC) cover their own expenses (travel, attending meetings, etc.) on a voluntary basis. ", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-06-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-02-18T02:20:45.702640Z", + "cost_min": 25000, + "direct_rep_costs_max": null, + "representative": "4270dcf1403d40299c380499dddda0a7", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff305f722afd49ea86de0746cc70d3ab", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 49999, + "created_at": "2016-02-18T02:20:45.704520Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff305f722afd49ea86de0746cc70d3ab", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-10-29T01:59:24.507191Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "98dc888ca71240ff93db25822ca0c11a", + "cost_absolute": 35000, + "eur_sources_grants_src": null, + "id": "ff2d7cdd117b43f6ab44e119a1bafca4", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": null, + "created_at": "2015-10-29T01:59:24.510841Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2d7cdd117b43f6ab44e119a1bafca4", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": null, + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2014-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2015-10-15T00:49:59.154282Z", + "cost_min": 100000, + "direct_rep_costs_max": null, + "representative": "a6659a7ac34a46ae8af3c7035e318d5b", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff2c1c60233d4584a30376b886eb6670", + "customIncomes": [], + "total_budget": 0, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 199999, + "created_at": "2015-10-15T00:49:59.159594Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2c1c60233d4584a30376b886eb6670", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "we receive our budget from the Moroccan Finance Department", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2014-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 0, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": null, + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-07-14T02:14:13.083569Z", + "cost_min": 50000, + "direct_rep_costs_max": null, + "representative": "75f442e91d054c00a56c4488b9159c4f", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff2b9ed37dd64e0bba88065da1e2e0b8", + "customIncomes": [], + "total_budget": null, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 99999, + "created_at": "2016-07-14T02:14:13.087248Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2b9ed37dd64e0bba88065da1e2e0b8", + "public_financing_infranational": null, + "direct_rep_costs_min": null, + "public_financing_total": null, + "other_sources_total": null, + "other_financial_information": "Finazierung aus Mitgliederbeitr\u00e4gen", + "public_financing_national": null, + "no_clients": null, + "type": "FinancialDataTradeAssociation", + "start_date": "2015-01-01T00:00:00Z" + }, + { + "other_sources_donation": null, + "status": "active", + "turnover_min": null, + "eur_sources_procurement": 28378, + "end_date": "2015-12-01T00:00:00Z", + "eur_sources_procurement_src": "Daguerreobase Project", + "new_organisation": null, + "turnover_max": null, + "updated_at": "2016-04-23T01:13:50.286315Z", + "cost_min": null, + "direct_rep_costs_max": null, + "representative": "54a567a6dd454450a5c5e6d9077f1988", + "cost_absolute": null, + "eur_sources_grants_src": null, + "id": "ff2b598043f04061a50bc70240cd6354", + "customIncomes": [ + { + "status": "active", + "name": "Shopinkomsten", + "created_at": "2016-04-23T01:13:50.325922Z", + "updated_at": "2016-04-23T01:13:50.323842Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/5e8bdfbae8794dceb91fbc7fa6025d9a", + "amount": 133026, + "type": "other", + "id": "5e8bdfbae8794dceb91fbc7fa6025d9a" + }, + { + "status": "active", + "name": "Zaalverhuur en concessie", + "created_at": "2016-04-23T01:13:50.338422Z", + "updated_at": "2016-04-23T01:13:50.336526Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/ca0e76ad7a2644528a875233550fa301", + "amount": 37274, + "type": "other", + "id": "ca0e76ad7a2644528a875233550fa301" + }, + { + "status": "active", + "name": "Organisatie publieksactiviteiten", + "created_at": "2016-04-23T01:13:50.372977Z", + "updated_at": "2016-04-23T01:13:50.371056Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/acceed6d3ad0465ba2876c2c51161bbe", + "amount": 56076, + "type": "other", + "id": "acceed6d3ad0465ba2876c2c51161bbe" + }, + { + "status": "active", + "name": "Personeelsubsidies", + "created_at": "2016-04-23T01:13:50.485699Z", + "updated_at": "2016-04-23T01:13:50.483938Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/83f204483e2940ee8bf6815e13c0c5d1", + "amount": 3981, + "type": "other", + "id": "83f204483e2940ee8bf6815e13c0c5d1" + }, + { + "status": "active", + "name": "Varia opbrengsten", + "created_at": "2016-04-23T01:13:50.516579Z", + "updated_at": "2016-04-23T01:13:50.514618Z", + "uri": "http://api.lobbyfacts.eu/api/1/custom_income/bcddc8a783424f8dadc8628a6a27d7bb", + "amount": 67722, + "type": "other", + "id": "bcddc8a783424f8dadc8628a6a27d7bb" + } + ], + "total_budget": 3002447, + "turnover_absolute": null, + "eur_sources_grants": 0, + "other_sources_contributions": null, + "cost_max": 9999, + "created_at": "2016-04-23T01:13:50.290118Z", + "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2b598043f04061a50bc70240cd6354", + "public_financing_infranational": 2260632, + "direct_rep_costs_min": null, + "public_financing_total": 2496215, + "other_sources_total": 506232, + "other_financial_information": null, + "public_financing_national": 207205, + "no_clients": null, + "type": "FinancialDataNGO", + "start_date": "2015-01-01T00:00:00Z" + } + ], + "next": "http://api.lobbyfacts.eu/api/1/financial_data?limit=50&offset=50", + "limit": 50, + "offset": 0, + "previous": false +} diff --git a/test/inputs/json/misc/54d32.json b/test/inputs/json/misc/54d32.json index 22dfed2c0..545aaaa70 100644 --- a/test/inputs/json/misc/54d32.json +++ b/test/inputs/json/misc/54d32.json @@ -1 +1,410 @@ -{"count": 15499, "facets": {}, "results": [{"status": "inactive", "person_id": "92887cb8ec924bd98c1f9605f9723d7e", "created_at": "2015-04-24T01:57:40.146184", "representative_id": "e466f4977a294886b1aeedd3c21eafcd", "id": "ffff9201e61b4aeeb9270ce86f44c7d3", "updated_at": "2015-06-06T00:34:33.246147"}, {"status": "inactive", "person_id": "f6ce1642963d4ce5aecdaa7e470c6003", "created_at": "2015-05-07T21:25:53.095506", "representative_id": "58e4be0261c34a9eaf28559ddc94a599", "id": "fff59757f5d547f5b289622cb9cf2127", "updated_at": "2016-09-07T01:23:02.318998"}, {"status": "active", "person_id": "bdd8c25bfe044c6c8f8c2917458ceab5", "created_at": "2015-04-24T01:52:58.781612", "representative_id": "ece996ab939a4d2b926a93f5ade011e2", "id": "fff2afd23d7f41749193df662f3aa229", "updated_at": "2016-08-27T00:21:22.927847"}, {"status": "inactive", "person_id": "668cd2d9b8a948e9866055af830a77db", "created_at": "2015-04-24T01:49:40.789471", "representative_id": "6a3eb9d6407845d5804bee4a0f9a025a", "id": "fff29e51576b43d19fc9b2ce8924a0ec", "updated_at": "2015-08-04T22:36:58.049322"}, {"status": "active", "person_id": "d7b4c3fbf05a48fca6f2441ea57547ee", "created_at": "2016-04-23T01:05:52.295257", "representative_id": "bd926a6fca154450bd2b60a73872b9a1", "id": "ffdeaf683d75427086d472ffaea3e32b", "updated_at": "2016-04-23T01:05:52.274536"}, {"status": "inactive", "person_id": "7250314b415d4fa79510c21293de451d", "created_at": "2016-03-03T01:06:14.224390", "representative_id": "2ce3eb46ffb14f8f95bf2bb0666b73b8", "id": "ffdc72a920464f998b6fb1c798ed6a3e", "updated_at": "2016-08-05T00:20:12.744738"}, {"status": "inactive", "person_id": "a633626481a247b0afa2c59a08e004a0", "created_at": "2016-02-04T02:42:50.214936", "representative_id": "b2021c69fa63418ba904d5dc6da74ed1", "id": "ffdc3bdd26354d24b097499c8fe8f51b", "updated_at": "2016-09-18T20:00:07.962349"}, {"status": "inactive", "person_id": "20a3c28ef5ff466dab5654d913feb999", "created_at": "2015-05-07T21:15:41.759517", "representative_id": "e3f1aa49fd804c4ca02273558aa5553b", "id": "ffda0f30217f45fa892ce11d7b0cc683", "updated_at": "2015-08-04T23:30:54.475902"}, {"status": "inactive", "person_id": "5b8b08553d5d42dfb44f8207b4ff6447", "created_at": "2015-05-07T21:15:06.899231", "representative_id": "a44693edf34a4bdc95e8758e8e8f676e", "id": "ffd9663edf5e46c3bc3a2e9ab43acb24", "updated_at": "2015-05-19T23:46:55.316287"}, {"status": "active", "person_id": "172b024232ad42418bc0b801cf325678", "created_at": "2015-08-04T23:02:44.432514", "representative_id": "1db3d7632d83461f909315ea4c47c2f4", "id": "ffcf456306574488bcb5576228364419", "updated_at": "2016-06-05T00:39:41.608409"}, {"status": "inactive", "person_id": "d8da409b5ffc417e8c32fcf91e7c2487", "created_at": "2015-04-24T02:22:08.859843", "representative_id": "a3fa721f180c4c98af94abaaa4841f87", "id": "ffb91d2df99143adb320f9e92fc71d6b", "updated_at": "2015-08-04T23:11:15.951183"}, {"status": "active", "person_id": "992704bdfd5549dfb6f3aee09a915aba", "created_at": "2016-03-31T00:03:32.722750", "representative_id": "0953ee0069084fd8977032f8d0a769fe", "id": "ffb6372e995344858b01f065063572ae", "updated_at": "2016-03-31T00:03:32.706198"}, {"status": "inactive", "person_id": "00cf53ebdca242309028342928a7fe3a", "created_at": "2015-05-07T21:17:54.144160", "representative_id": "a6c703d41db0454a8e6842d7710be777", "id": "ffb138f2284246f89f8f3a4d01369453", "updated_at": "2016-02-13T02:09:14.190687"}, {"status": "inactive", "person_id": "3cfda55e1c01400faa170a5d2e137162", "created_at": "2015-04-24T02:06:41.033430", "representative_id": "3b461914a9d4442faafd03823131a2bc", "id": "ffacc6c2fb7d465da475e03bf545b2de", "updated_at": "2015-08-04T22:58:00.958720"}, {"status": "inactive", "person_id": "2dd4019418ef45d8a4d90325f7d039d8", "created_at": "2015-06-03T01:43:50.021074", "representative_id": "4d8194505ec34efea308c7d0a15237d3", "id": "ffa7844c8a504975b7dc4e472ef7b504", "updated_at": "2015-08-04T23:39:38.356939"}, {"status": "active", "person_id": "e94129fbf52a44b6b0b4a626a7581767", "created_at": "2015-09-30T00:48:37.682464", "representative_id": "c9161ae39e9c4f21ae0f2a9cf6171d5e", "id": "ffa41e130e124be2aaf37b2a6d515169", "updated_at": "2016-08-24T01:40:52.074743"}, {"status": "inactive", "person_id": "c9b027619c2a4b3482aaf04e81cce6bb", "created_at": "2015-05-07T21:16:45.204954", "representative_id": "c299640936ce4ef9abad49a9f113e6bd", "id": "ff980c453b7f46c7b0835864ed9d6464", "updated_at": "2015-08-04T23:31:23.565766"}, {"status": "active", "person_id": "bd1cd2120e49484a84c9dfdf3d8821d6", "created_at": "2015-10-23T23:36:44.109227", "representative_id": "eb42f038196e445db274d8868c5587e6", "id": "ff90c43b32754a729d37228644f804ac", "updated_at": "2016-03-27T23:59:17.123770"}, {"status": "inactive", "person_id": "bc372931e61e4c9db7622d5a750f5be5", "created_at": "2015-08-04T23:04:14.166763", "representative_id": "f3a3532d175a4c619d94b9c6c89cf2d8", "id": "ff9056998de54d878c997e608287c6e4", "updated_at": "2015-09-10T00:41:09.228783"}, {"status": "active", "person_id": "a486959583c644b7bba237d7500b876c", "created_at": "2016-04-07T00:11:19.512676", "representative_id": "3a8141ddc6514331a4791f928380ccd3", "id": "ff8ed55da0bc4882ae1ceaa14b09e0d1", "updated_at": "2016-04-07T00:11:19.505200"}, {"status": "inactive", "person_id": "37e10ed58aea470abbe61f359e1da73e", "created_at": "2015-08-04T23:36:53.012926", "representative_id": "364a8033a2cb485392a0e3be0f2570cf", "id": "ff850f1e1e234e4c8ac924a041ba0465", "updated_at": "2015-12-18T02:19:31.339634"}, {"status": "inactive", "person_id": "a9a84653dfb2463fa795e5b4505d8ac9", "created_at": "2015-05-07T18:23:48.938685", "representative_id": "8ad8a14a56094e8290e1f162bd7b7241", "id": "ff833f13613546b7a6717b1b5dbf98b9", "updated_at": "2015-08-04T23:03:19.058201"}, {"status": "active", "person_id": "6f4f47f424a44bfe941020d571ab893c", "created_at": "2015-08-04T22:51:19.970533", "representative_id": "8db2ae5f710c433b93edb066632734c2", "id": "ff80a192583146a8bb0b2db7c8bfd657", "updated_at": "2016-08-27T00:32:05.189953"}, {"status": "inactive", "person_id": "9287793c6bd74e708f8a0c2854fca399", "created_at": "2015-04-24T01:47:58.308618", "representative_id": "7a446a1b6c8e441395292dba83690a8b", "id": "ff7f4d7ecdd7496f968b479d22828241", "updated_at": "2015-08-04T22:34:09.108244"}, {"status": "inactive", "person_id": "9de7820c037743fba0b607e840e0f90d", "created_at": "2015-04-24T02:26:08.533369", "representative_id": "6ca65f0cfbdd489d8ef6dc9c25c52a04", "id": "ff7d624371894083a80f36e731062883", "updated_at": "2015-08-04T23:17:04.226802"}, {"status": "active", "person_id": "5d9b94ff3b7343649a3c192d3482977f", "created_at": "2015-08-04T22:53:27.483803", "representative_id": "8adeff0cac0e46ac9f82e863aa3212c4", "id": "ff7bab387ae64fe4bde1917201a2a642", "updated_at": "2016-09-07T00:37:25.636352"}, {"status": "active", "person_id": "b56029018ff6427e8f49d6864053187c", "created_at": "2015-08-04T23:01:19.794250", "representative_id": "18c8ed1798f842a28824293a8448a49a", "id": "ff7a3b896552418ba47b8f3b46945f28", "updated_at": "2016-03-28T00:25:02.864214"}, {"status": "inactive", "person_id": "2b845c8f547149559020fbda21e5f520", "created_at": "2015-04-24T02:31:52.179802", "representative_id": "962529ab26a74715adf1b10857964dc3", "id": "ff76ba1e944b417ea4df8040badd510b", "updated_at": "2015-08-04T23:25:26.787610"}, {"status": "inactive", "person_id": "0a6c3b9b501042d58b04be227e391c8f", "created_at": "2015-08-04T23:00:25.349985", "representative_id": "a38d7453bc2d40a1af18a983de949d20", "id": "ff76649dbcd14a458728f5fa5ef2cbfd", "updated_at": "2016-06-17T00:42:47.603804"}, {"status": "active", "person_id": "10da25ac784a44769b2d43c165b70096", "created_at": "2015-08-04T22:34:33.060161", "representative_id": "9ea9f5cdb07e420f87601244f15240d3", "id": "ff6f9bc84d694f98be0e20972fd976ae", "updated_at": "2016-07-01T00:11:37.386746"}, {"status": "active", "person_id": "9e5f2d0b73cd4d5097d1aa1d834624c7", "created_at": "2016-03-06T01:49:51.557186", "representative_id": "d34ce3b349604f54b1ac1cdfc94f31d9", "id": "ff6d771928aa45c5a7453f9321809b00", "updated_at": "2016-03-28T00:55:55.934625"}, {"status": "inactive", "person_id": "b14e9b5c26c845b5b691bee99c8ee61d", "created_at": "2015-08-04T23:29:39.944035", "representative_id": "2dad0e4813e247c09655c5f10da434dc", "id": "ff6471a35f4e4cbfbf1e9569f1ffebcd", "updated_at": "2015-10-04T00:24:15.475958"}, {"status": "inactive", "person_id": "c4b584540ef34ab2b380a096fdce8f15", "created_at": "2015-05-07T21:27:14.296076", "representative_id": "1a02eb0b409c40a682db0a5af823911e", "id": "ff5c8780b862421b9687fdff4f55350e", "updated_at": "2016-02-06T02:22:34.666734"}, {"status": "inactive", "person_id": "74103ffcfb544ef7a93d2ae948e70f9b", "created_at": "2015-08-04T22:42:23.105191", "representative_id": "388d31d917304c4f859b029541786e9d", "id": "ff5b6884d0a846caa4c11c7ffddb42f1", "updated_at": "2016-03-12T01:02:08.934469"}, {"status": "inactive", "person_id": "97e993956cb94687bc2849e83882c7d3", "created_at": "2015-04-24T02:04:02.997570", "representative_id": "4f4ed6bbd59147e4adf673b4028d04d0", "id": "ff5537175d934f8ca84550027db8ee4d", "updated_at": "2015-08-04T22:55:55.366183"}, {"status": "inactive", "person_id": "cb81918f83a24854b894d2ad6bcff4ef", "created_at": "2015-04-24T02:24:26.593122", "representative_id": "b752c5e7def04707bcb75a1a71616a01", "id": "ff4cc9a4884548ebb93d08cef7b81517", "updated_at": "2015-08-04T23:14:29.484124"}, {"status": "inactive", "person_id": "12215cbb9029433c91ce61e16e04e446", "created_at": "2015-04-24T01:47:34.416412", "representative_id": "c718c5411cf64c7faa2aa58482f6c49a", "id": "ff48539540224abe8cee2cdbd013ea07", "updated_at": "2015-08-04T22:33:22.032048"}, {"status": "active", "person_id": "59e87479365d4c66963b9d8a81db403e", "created_at": "2015-06-05T00:51:43.975489", "representative_id": "03dc171894554424a2223b8e5321ff66", "id": "ff424f8df0b744b5b6363f7c55c0bdeb", "updated_at": "2016-07-21T00:22:27.208260"}, {"status": "inactive", "person_id": "b41e607034094d35ac2633e3a95a038e", "created_at": "2015-08-04T23:01:25.650388", "representative_id": "a5848efd0a424693bd42916a25b5cf9f", "id": "ff3edb08036f461486898c9ff84b95b8", "updated_at": "2015-10-03T23:57:44.666952"}, {"status": "active", "person_id": "308aba8870b94303bf138b7f61906808", "created_at": "2016-07-21T00:12:58.019042", "representative_id": "369f73cbcd63403cbbee3043af38b12b", "id": "ff3802a4570045189f6d7337112d7b80", "updated_at": "2016-07-21T00:12:57.994159"}, {"status": "active", "person_id": "6d181c09bda24a5295b9a98a74e4a856", "created_at": "2016-09-18T19:44:03.839087", "representative_id": "32ff56235e8c4b7ba4dc747c275ecce7", "id": "ff337afcf6684f4fa01fa9bc5e76002e", "updated_at": "2016-09-18T19:44:03.835619"}, {"status": "inactive", "person_id": "bf53d7cd9fdb4476bd9169e216a262c8", "created_at": "2015-08-04T22:48:42.510885", "representative_id": "3a8141ddc6514331a4791f928380ccd3", "id": "ff26d7fe9ff74810ac0a59ee8e102aec", "updated_at": "2016-03-25T01:22:20.658520"}, {"status": "active", "person_id": "94b4adf1d4e04d04bc633c86d34ae0d1", "created_at": "2016-06-30T00:17:32.731789", "representative_id": "fa30ac2918dd4865964af6dd2d16ff6a", "id": "ff257562abe44fe7ace01548a725b0b2", "updated_at": "2016-06-30T00:17:32.718339"}, {"status": "inactive", "person_id": "bfd3e56304c54cff937e6aa182c6a262", "created_at": "2015-08-04T22:34:56.100215", "representative_id": "3c82e55d53e344f59ac5a553197bb4f7", "id": "ff20f7a6c3e54e39b4393fcddff01df5", "updated_at": "2016-04-23T00:01:03.328079"}, {"status": "active", "person_id": "5b97b14d2c1c44c9b553a8d95656ebc9", "created_at": "2016-09-18T18:47:01.411892", "representative_id": "615be2d7e3a843f3a220e9aff7dd2597", "id": "ff1f85cbb11d4c7f8b62fe6cbd931850", "updated_at": "2016-09-18T18:47:01.387259"}, {"status": "inactive", "person_id": "d818c561996948729befdf20b77d8b71", "created_at": "2015-04-24T02:10:57.180397", "representative_id": "90638985bf7d44a3a9a1aaed57c38b01", "id": "ff1d5aabe72246668fab4357caa32a6e", "updated_at": "2015-08-04T23:01:22.447779"}, {"status": "inactive", "person_id": "2ad02b5dab46443aaaf5da305114390b", "created_at": "2015-04-24T02:16:21.623091", "representative_id": "07b61c6a46fa46cf8bb03254c647fb3e", "id": "ff1bd14c8b414da3854f9feaf9bd7b59", "updated_at": "2015-08-04T23:05:47.961176"}, {"status": "active", "person_id": "d05f3dc752f44ae39c7082b5878d6362", "created_at": "2015-08-04T23:32:25.664220", "representative_id": "b1bb5cffee0e4de4b4e872ff0a91b018", "id": "ff15213c2ef74436a68807d9943b5987", "updated_at": "2016-03-28T00:58:55.097367"}, {"status": "inactive", "person_id": "6ea7fb8917fb4b628243479c99263419", "created_at": "2015-04-24T02:04:11.678438", "representative_id": "7ecadf032da7452c83a15ced57c07ac3", "id": "ff13f1287045404584063eca990c6280", "updated_at": "2015-08-04T22:56:02.488908"}, {"status": "inactive", "person_id": "ca6305a88f0a49f1afa03db19080fb4f", "created_at": "2015-08-04T23:40:30.802663", "representative_id": "3d13cb4f61e9450c9b4ea3717a9da256", "id": "ff12bbbf25994a1da3340400d47786ce", "updated_at": "2015-09-18T00:33:33.915808"}], "next": "http://api.lobbyfacts.eu/api/1/accreditation?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false} \ No newline at end of file +{ + "count": 15499, + "facets": {}, + "results": [ + { + "status": "inactive", + "person_id": "92887cb8ec924bd98c1f9605f9723d7e", + "created_at": "2015-04-24T01:57:40.146184Z", + "representative_id": "e466f4977a294886b1aeedd3c21eafcd", + "id": "ffff9201e61b4aeeb9270ce86f44c7d3", + "updated_at": "2015-06-06T00:34:33.246147Z" + }, + { + "status": "inactive", + "person_id": "f6ce1642963d4ce5aecdaa7e470c6003", + "created_at": "2015-05-07T21:25:53.095506Z", + "representative_id": "58e4be0261c34a9eaf28559ddc94a599", + "id": "fff59757f5d547f5b289622cb9cf2127", + "updated_at": "2016-09-07T01:23:02.318998Z" + }, + { + "status": "active", + "person_id": "bdd8c25bfe044c6c8f8c2917458ceab5", + "created_at": "2015-04-24T01:52:58.781612Z", + "representative_id": "ece996ab939a4d2b926a93f5ade011e2", + "id": "fff2afd23d7f41749193df662f3aa229", + "updated_at": "2016-08-27T00:21:22.927847Z" + }, + { + "status": "inactive", + "person_id": "668cd2d9b8a948e9866055af830a77db", + "created_at": "2015-04-24T01:49:40.789471Z", + "representative_id": "6a3eb9d6407845d5804bee4a0f9a025a", + "id": "fff29e51576b43d19fc9b2ce8924a0ec", + "updated_at": "2015-08-04T22:36:58.049322Z" + }, + { + "status": "active", + "person_id": "d7b4c3fbf05a48fca6f2441ea57547ee", + "created_at": "2016-04-23T01:05:52.295257Z", + "representative_id": "bd926a6fca154450bd2b60a73872b9a1", + "id": "ffdeaf683d75427086d472ffaea3e32b", + "updated_at": "2016-04-23T01:05:52.274536Z" + }, + { + "status": "inactive", + "person_id": "7250314b415d4fa79510c21293de451d", + "created_at": "2016-03-03T01:06:14.224390Z", + "representative_id": "2ce3eb46ffb14f8f95bf2bb0666b73b8", + "id": "ffdc72a920464f998b6fb1c798ed6a3e", + "updated_at": "2016-08-05T00:20:12.744738Z" + }, + { + "status": "inactive", + "person_id": "a633626481a247b0afa2c59a08e004a0", + "created_at": "2016-02-04T02:42:50.214936Z", + "representative_id": "b2021c69fa63418ba904d5dc6da74ed1", + "id": "ffdc3bdd26354d24b097499c8fe8f51b", + "updated_at": "2016-09-18T20:00:07.962349Z" + }, + { + "status": "inactive", + "person_id": "20a3c28ef5ff466dab5654d913feb999", + "created_at": "2015-05-07T21:15:41.759517Z", + "representative_id": "e3f1aa49fd804c4ca02273558aa5553b", + "id": "ffda0f30217f45fa892ce11d7b0cc683", + "updated_at": "2015-08-04T23:30:54.475902Z" + }, + { + "status": "inactive", + "person_id": "5b8b08553d5d42dfb44f8207b4ff6447", + "created_at": "2015-05-07T21:15:06.899231Z", + "representative_id": "a44693edf34a4bdc95e8758e8e8f676e", + "id": "ffd9663edf5e46c3bc3a2e9ab43acb24", + "updated_at": "2015-05-19T23:46:55.316287Z" + }, + { + "status": "active", + "person_id": "172b024232ad42418bc0b801cf325678", + "created_at": "2015-08-04T23:02:44.432514Z", + "representative_id": "1db3d7632d83461f909315ea4c47c2f4", + "id": "ffcf456306574488bcb5576228364419", + "updated_at": "2016-06-05T00:39:41.608409Z" + }, + { + "status": "inactive", + "person_id": "d8da409b5ffc417e8c32fcf91e7c2487", + "created_at": "2015-04-24T02:22:08.859843Z", + "representative_id": "a3fa721f180c4c98af94abaaa4841f87", + "id": "ffb91d2df99143adb320f9e92fc71d6b", + "updated_at": "2015-08-04T23:11:15.951183Z" + }, + { + "status": "active", + "person_id": "992704bdfd5549dfb6f3aee09a915aba", + "created_at": "2016-03-31T00:03:32.722750Z", + "representative_id": "0953ee0069084fd8977032f8d0a769fe", + "id": "ffb6372e995344858b01f065063572ae", + "updated_at": "2016-03-31T00:03:32.706198Z" + }, + { + "status": "inactive", + "person_id": "00cf53ebdca242309028342928a7fe3a", + "created_at": "2015-05-07T21:17:54.144160Z", + "representative_id": "a6c703d41db0454a8e6842d7710be777", + "id": "ffb138f2284246f89f8f3a4d01369453", + "updated_at": "2016-02-13T02:09:14.190687Z" + }, + { + "status": "inactive", + "person_id": "3cfda55e1c01400faa170a5d2e137162", + "created_at": "2015-04-24T02:06:41.033430Z", + "representative_id": "3b461914a9d4442faafd03823131a2bc", + "id": "ffacc6c2fb7d465da475e03bf545b2de", + "updated_at": "2015-08-04T22:58:00.958720Z" + }, + { + "status": "inactive", + "person_id": "2dd4019418ef45d8a4d90325f7d039d8", + "created_at": "2015-06-03T01:43:50.021074Z", + "representative_id": "4d8194505ec34efea308c7d0a15237d3", + "id": "ffa7844c8a504975b7dc4e472ef7b504", + "updated_at": "2015-08-04T23:39:38.356939Z" + }, + { + "status": "active", + "person_id": "e94129fbf52a44b6b0b4a626a7581767", + "created_at": "2015-09-30T00:48:37.682464Z", + "representative_id": "c9161ae39e9c4f21ae0f2a9cf6171d5e", + "id": "ffa41e130e124be2aaf37b2a6d515169", + "updated_at": "2016-08-24T01:40:52.074743Z" + }, + { + "status": "inactive", + "person_id": "c9b027619c2a4b3482aaf04e81cce6bb", + "created_at": "2015-05-07T21:16:45.204954Z", + "representative_id": "c299640936ce4ef9abad49a9f113e6bd", + "id": "ff980c453b7f46c7b0835864ed9d6464", + "updated_at": "2015-08-04T23:31:23.565766Z" + }, + { + "status": "active", + "person_id": "bd1cd2120e49484a84c9dfdf3d8821d6", + "created_at": "2015-10-23T23:36:44.109227Z", + "representative_id": "eb42f038196e445db274d8868c5587e6", + "id": "ff90c43b32754a729d37228644f804ac", + "updated_at": "2016-03-27T23:59:17.123770Z" + }, + { + "status": "inactive", + "person_id": "bc372931e61e4c9db7622d5a750f5be5", + "created_at": "2015-08-04T23:04:14.166763Z", + "representative_id": "f3a3532d175a4c619d94b9c6c89cf2d8", + "id": "ff9056998de54d878c997e608287c6e4", + "updated_at": "2015-09-10T00:41:09.228783Z" + }, + { + "status": "active", + "person_id": "a486959583c644b7bba237d7500b876c", + "created_at": "2016-04-07T00:11:19.512676Z", + "representative_id": "3a8141ddc6514331a4791f928380ccd3", + "id": "ff8ed55da0bc4882ae1ceaa14b09e0d1", + "updated_at": "2016-04-07T00:11:19.505200Z" + }, + { + "status": "inactive", + "person_id": "37e10ed58aea470abbe61f359e1da73e", + "created_at": "2015-08-04T23:36:53.012926Z", + "representative_id": "364a8033a2cb485392a0e3be0f2570cf", + "id": "ff850f1e1e234e4c8ac924a041ba0465", + "updated_at": "2015-12-18T02:19:31.339634Z" + }, + { + "status": "inactive", + "person_id": "a9a84653dfb2463fa795e5b4505d8ac9", + "created_at": "2015-05-07T18:23:48.938685Z", + "representative_id": "8ad8a14a56094e8290e1f162bd7b7241", + "id": "ff833f13613546b7a6717b1b5dbf98b9", + "updated_at": "2015-08-04T23:03:19.058201Z" + }, + { + "status": "active", + "person_id": "6f4f47f424a44bfe941020d571ab893c", + "created_at": "2015-08-04T22:51:19.970533Z", + "representative_id": "8db2ae5f710c433b93edb066632734c2", + "id": "ff80a192583146a8bb0b2db7c8bfd657", + "updated_at": "2016-08-27T00:32:05.189953Z" + }, + { + "status": "inactive", + "person_id": "9287793c6bd74e708f8a0c2854fca399", + "created_at": "2015-04-24T01:47:58.308618Z", + "representative_id": "7a446a1b6c8e441395292dba83690a8b", + "id": "ff7f4d7ecdd7496f968b479d22828241", + "updated_at": "2015-08-04T22:34:09.108244Z" + }, + { + "status": "inactive", + "person_id": "9de7820c037743fba0b607e840e0f90d", + "created_at": "2015-04-24T02:26:08.533369Z", + "representative_id": "6ca65f0cfbdd489d8ef6dc9c25c52a04", + "id": "ff7d624371894083a80f36e731062883", + "updated_at": "2015-08-04T23:17:04.226802Z" + }, + { + "status": "active", + "person_id": "5d9b94ff3b7343649a3c192d3482977f", + "created_at": "2015-08-04T22:53:27.483803Z", + "representative_id": "8adeff0cac0e46ac9f82e863aa3212c4", + "id": "ff7bab387ae64fe4bde1917201a2a642", + "updated_at": "2016-09-07T00:37:25.636352Z" + }, + { + "status": "active", + "person_id": "b56029018ff6427e8f49d6864053187c", + "created_at": "2015-08-04T23:01:19.794250Z", + "representative_id": "18c8ed1798f842a28824293a8448a49a", + "id": "ff7a3b896552418ba47b8f3b46945f28", + "updated_at": "2016-03-28T00:25:02.864214Z" + }, + { + "status": "inactive", + "person_id": "2b845c8f547149559020fbda21e5f520", + "created_at": "2015-04-24T02:31:52.179802Z", + "representative_id": "962529ab26a74715adf1b10857964dc3", + "id": "ff76ba1e944b417ea4df8040badd510b", + "updated_at": "2015-08-04T23:25:26.787610Z" + }, + { + "status": "inactive", + "person_id": "0a6c3b9b501042d58b04be227e391c8f", + "created_at": "2015-08-04T23:00:25.349985Z", + "representative_id": "a38d7453bc2d40a1af18a983de949d20", + "id": "ff76649dbcd14a458728f5fa5ef2cbfd", + "updated_at": "2016-06-17T00:42:47.603804Z" + }, + { + "status": "active", + "person_id": "10da25ac784a44769b2d43c165b70096", + "created_at": "2015-08-04T22:34:33.060161Z", + "representative_id": "9ea9f5cdb07e420f87601244f15240d3", + "id": "ff6f9bc84d694f98be0e20972fd976ae", + "updated_at": "2016-07-01T00:11:37.386746Z" + }, + { + "status": "active", + "person_id": "9e5f2d0b73cd4d5097d1aa1d834624c7", + "created_at": "2016-03-06T01:49:51.557186Z", + "representative_id": "d34ce3b349604f54b1ac1cdfc94f31d9", + "id": "ff6d771928aa45c5a7453f9321809b00", + "updated_at": "2016-03-28T00:55:55.934625Z" + }, + { + "status": "inactive", + "person_id": "b14e9b5c26c845b5b691bee99c8ee61d", + "created_at": "2015-08-04T23:29:39.944035Z", + "representative_id": "2dad0e4813e247c09655c5f10da434dc", + "id": "ff6471a35f4e4cbfbf1e9569f1ffebcd", + "updated_at": "2015-10-04T00:24:15.475958Z" + }, + { + "status": "inactive", + "person_id": "c4b584540ef34ab2b380a096fdce8f15", + "created_at": "2015-05-07T21:27:14.296076Z", + "representative_id": "1a02eb0b409c40a682db0a5af823911e", + "id": "ff5c8780b862421b9687fdff4f55350e", + "updated_at": "2016-02-06T02:22:34.666734Z" + }, + { + "status": "inactive", + "person_id": "74103ffcfb544ef7a93d2ae948e70f9b", + "created_at": "2015-08-04T22:42:23.105191Z", + "representative_id": "388d31d917304c4f859b029541786e9d", + "id": "ff5b6884d0a846caa4c11c7ffddb42f1", + "updated_at": "2016-03-12T01:02:08.934469Z" + }, + { + "status": "inactive", + "person_id": "97e993956cb94687bc2849e83882c7d3", + "created_at": "2015-04-24T02:04:02.997570Z", + "representative_id": "4f4ed6bbd59147e4adf673b4028d04d0", + "id": "ff5537175d934f8ca84550027db8ee4d", + "updated_at": "2015-08-04T22:55:55.366183Z" + }, + { + "status": "inactive", + "person_id": "cb81918f83a24854b894d2ad6bcff4ef", + "created_at": "2015-04-24T02:24:26.593122Z", + "representative_id": "b752c5e7def04707bcb75a1a71616a01", + "id": "ff4cc9a4884548ebb93d08cef7b81517", + "updated_at": "2015-08-04T23:14:29.484124Z" + }, + { + "status": "inactive", + "person_id": "12215cbb9029433c91ce61e16e04e446", + "created_at": "2015-04-24T01:47:34.416412Z", + "representative_id": "c718c5411cf64c7faa2aa58482f6c49a", + "id": "ff48539540224abe8cee2cdbd013ea07", + "updated_at": "2015-08-04T22:33:22.032048Z" + }, + { + "status": "active", + "person_id": "59e87479365d4c66963b9d8a81db403e", + "created_at": "2015-06-05T00:51:43.975489Z", + "representative_id": "03dc171894554424a2223b8e5321ff66", + "id": "ff424f8df0b744b5b6363f7c55c0bdeb", + "updated_at": "2016-07-21T00:22:27.208260Z" + }, + { + "status": "inactive", + "person_id": "b41e607034094d35ac2633e3a95a038e", + "created_at": "2015-08-04T23:01:25.650388Z", + "representative_id": "a5848efd0a424693bd42916a25b5cf9f", + "id": "ff3edb08036f461486898c9ff84b95b8", + "updated_at": "2015-10-03T23:57:44.666952Z" + }, + { + "status": "active", + "person_id": "308aba8870b94303bf138b7f61906808", + "created_at": "2016-07-21T00:12:58.019042Z", + "representative_id": "369f73cbcd63403cbbee3043af38b12b", + "id": "ff3802a4570045189f6d7337112d7b80", + "updated_at": "2016-07-21T00:12:57.994159Z" + }, + { + "status": "active", + "person_id": "6d181c09bda24a5295b9a98a74e4a856", + "created_at": "2016-09-18T19:44:03.839087Z", + "representative_id": "32ff56235e8c4b7ba4dc747c275ecce7", + "id": "ff337afcf6684f4fa01fa9bc5e76002e", + "updated_at": "2016-09-18T19:44:03.835619Z" + }, + { + "status": "inactive", + "person_id": "bf53d7cd9fdb4476bd9169e216a262c8", + "created_at": "2015-08-04T22:48:42.510885Z", + "representative_id": "3a8141ddc6514331a4791f928380ccd3", + "id": "ff26d7fe9ff74810ac0a59ee8e102aec", + "updated_at": "2016-03-25T01:22:20.658520Z" + }, + { + "status": "active", + "person_id": "94b4adf1d4e04d04bc633c86d34ae0d1", + "created_at": "2016-06-30T00:17:32.731789Z", + "representative_id": "fa30ac2918dd4865964af6dd2d16ff6a", + "id": "ff257562abe44fe7ace01548a725b0b2", + "updated_at": "2016-06-30T00:17:32.718339Z" + }, + { + "status": "inactive", + "person_id": "bfd3e56304c54cff937e6aa182c6a262", + "created_at": "2015-08-04T22:34:56.100215Z", + "representative_id": "3c82e55d53e344f59ac5a553197bb4f7", + "id": "ff20f7a6c3e54e39b4393fcddff01df5", + "updated_at": "2016-04-23T00:01:03.328079Z" + }, + { + "status": "active", + "person_id": "5b97b14d2c1c44c9b553a8d95656ebc9", + "created_at": "2016-09-18T18:47:01.411892Z", + "representative_id": "615be2d7e3a843f3a220e9aff7dd2597", + "id": "ff1f85cbb11d4c7f8b62fe6cbd931850", + "updated_at": "2016-09-18T18:47:01.387259Z" + }, + { + "status": "inactive", + "person_id": "d818c561996948729befdf20b77d8b71", + "created_at": "2015-04-24T02:10:57.180397Z", + "representative_id": "90638985bf7d44a3a9a1aaed57c38b01", + "id": "ff1d5aabe72246668fab4357caa32a6e", + "updated_at": "2015-08-04T23:01:22.447779Z" + }, + { + "status": "inactive", + "person_id": "2ad02b5dab46443aaaf5da305114390b", + "created_at": "2015-04-24T02:16:21.623091Z", + "representative_id": "07b61c6a46fa46cf8bb03254c647fb3e", + "id": "ff1bd14c8b414da3854f9feaf9bd7b59", + "updated_at": "2015-08-04T23:05:47.961176Z" + }, + { + "status": "active", + "person_id": "d05f3dc752f44ae39c7082b5878d6362", + "created_at": "2015-08-04T23:32:25.664220Z", + "representative_id": "b1bb5cffee0e4de4b4e872ff0a91b018", + "id": "ff15213c2ef74436a68807d9943b5987", + "updated_at": "2016-03-28T00:58:55.097367Z" + }, + { + "status": "inactive", + "person_id": "6ea7fb8917fb4b628243479c99263419", + "created_at": "2015-04-24T02:04:11.678438Z", + "representative_id": "7ecadf032da7452c83a15ced57c07ac3", + "id": "ff13f1287045404584063eca990c6280", + "updated_at": "2015-08-04T22:56:02.488908Z" + }, + { + "status": "inactive", + "person_id": "ca6305a88f0a49f1afa03db19080fb4f", + "created_at": "2015-08-04T23:40:30.802663Z", + "representative_id": "3d13cb4f61e9450c9b4ea3717a9da256", + "id": "ff12bbbf25994a1da3340400d47786ce", + "updated_at": "2015-09-18T00:33:33.915808Z" + } + ], + "next": "http://api.lobbyfacts.eu/api/1/accreditation?limit=50&offset=50", + "limit": 50, + "offset": 0, + "previous": false +} diff --git a/test/inputs/json/misc/5eae5.json b/test/inputs/json/misc/5eae5.json index a51e53b05..c665de9b9 100644 --- a/test/inputs/json/misc/5eae5.json +++ b/test/inputs/json/misc/5eae5.json @@ -1 +1,1324 @@ -[{"ID":1,"Date":"2015-09-01T00:00:00","Title":"European North Sea Energy Alliance","Sponsor":"Christina McKelvie MSP"},{"ID":2,"Date":"2015-09-01T00:00:00","Title":"AS it is","Sponsor":"Margaret McCulloch MSP"},{"ID":3,"Date":"2015-09-01T00:00:00","Title":"Building Capacity, Investing in Stroke Research","Sponsor":"Dennis Robertson MSP"},{"ID":4,"Date":"2015-09-02T00:00:00","Title":"Celebrating Scotland's Small and Rural Towns","Sponsor":"Margaret McCulloch MSP"},{"ID":5,"Date":"2015-09-02T00:00:00","Title":"50 years of supporting carers","Sponsor":"Graeme Dey MSP"},{"ID":6,"Date":"2015-09-02T00:00:00","Title":"Sole Searching - A Hootenanny","Sponsor":"Alex Rowley MSP"},{"ID":7,"Date":"2015-09-02T00:00:00","Title":"Exploring European Approaches to Development","Sponsor":"Sarah Boyack MSP"},{"ID":8,"Date":"2015-09-03T00:00:00","Title":"Saltire Fletcher Lecture 2015","Sponsor":"Linda Fabiani MSP"},{"ID":9,"Date":"2015-09-07T00:00:00","Title":"Your Say","Sponsor":"Welfare Reform Committee"},{"ID":10,"Date":"2015-09-08T00:00:00","Title":"Celebrating Scotland's Walking Champions","Sponsor":"Patricia Ferguson MSP"},{"ID":11,"Date":"2015-09-08T00:00:00","Title":"Columba 1400 Impact Study","Sponsor":"Dave Thompson MSP"},{"ID":12,"Date":"2015-09-08T00:00:00","Title":"Women in Business ","Sponsor":"Margaret McCulloch MSP"},{"ID":13,"Date":"2015-09-09T00:00:00","Title":"Scottish Older People's Assembly","Sponsor":"Christine Grahame MSP"},{"ID":14,"Date":"2015-09-09T00:00:00","Title":"How we can prevent homelessness and reduce re-offending?","Sponsor":"Mary Fee MSP"},{"ID":15,"Date":"2015-09-09T00:00:00","Title":"Street Law: bringing practical law to classrooms","Sponsor":"Paul Martin MSP"},{"ID":16,"Date":"2015-09-09T00:00:00","Title":"FAST Forward ","Sponsor":"Stewart Maxwell MSP"},{"ID":17,"Date":"2015-09-09T00:00:00","Title":"Preventing Accidents, Scotland's National Outcomes","Sponsor":"Clare Adamson MSP"},{"ID":18,"Date":"2015-09-10T00:00:00","Title":"Nature of Scotland Awards 2015 Shortlist ","Sponsor":"Claudia Beamish MSP"},{"ID":19,"Date":"2015-09-15T00:00:00","Title":"Children Get Arthritis Too","Sponsor":"Margaret McCulloch MSP"},{"ID":20,"Date":"2015-09-15T00:00:00","Title":"Transport Focus Stakeholders ","Sponsor":"Patrick Harvie MSP"},{"ID":21,"Date":"2015-09-15T00:00:00","Title":"Growing Your Small Business","Sponsor":"Hugh Henry MSP"},{"ID":22,"Date":"2015-09-16T00:00:00","Title":"SCIAF 50th Anniversary ","Sponsor":"Presiding Officer "},{"ID":23,"Date":"2015-09-16T00:00:00","Title":"Luxembourg Presidency of the EU ","Sponsor":"Christina McKelvie MSP"},{"ID":24,"Date":"2015-09-16T00:00:00","Title":"Camphill Scotland - Worldwide Weave","Sponsor":"Alison McInnes MSP"},{"ID":25,"Date":"2015-09-16T00:00:00","Title":"Association of Chief Officers of Scottish Voluntary Organisations","Sponsor":"Alex Neil MSP"},{"ID":26,"Date":"2015-09-16T00:00:00","Title":"IPSA Conference 2015: Roundtable and Reception","Sponsor":"Bruce Crawford MSP"},{"ID":27,"Date":"2015-09-17T00:00:00","Title":"Wear it Pink photocall","Sponsor":"Christina McKelvie MSP"},{"ID":28,"Date":"2015-09-17T00:00:00","Title":"Holyrood Apple Day 2015","Sponsor":"John Wilson MSP"},{"ID":29,"Date":"2015-09-17T00:00:00","Title":"Youth Volunteering - The Lived Experience","Sponsor":"Fiona McLeod MSP"},{"ID":30,"Date":"2015-09-17T00:00:00","Title":"See Me: In Health","Sponsor":"Jenny Marra MSP"},{"ID":31,"Date":"2015-09-18T00:00:00","Title":"Future Directions for Well-Being Policy","Sponsor":"Scotland's Future Forum"},{"ID":32,"Date":"2015-09-21T00:00:00","Title":"Breast Cancer Care Scotland - B-Aware Mobile Roadshow","Sponsor":"Bob Doris MSP"},{"ID":33,"Date":"2015-09-22T00:00:00","Title":"Scottish Craft Distillers Association ","Sponsor":"Jean Urquhart MSP "},{"ID":34,"Date":"2015-09-22T00:00:00","Title":"Connect2Renewables","Sponsor":"Christina McKelvie MSP"},{"ID":35,"Date":"2015-09-22T00:00:00","Title":"25 Years of Parkhead CAB","Sponsor":"John Mason MSP"},{"ID":36,"Date":"2015-09-23T00:00:00","Title":"250th Anniversary of Thomas Muir, Father of Scottish Democracy","Sponsor":"Fiona McLeod MSP"},{"ID":37,"Date":"2016-09-23T00:00:00","Title":"Scottish Sport Alliance Manifesto for Scottish Sport","Sponsor":"Alison Johnstone MSP and Liz Smith MSP"},{"ID":38,"Date":"2019-09-23T00:00:00","Title":"SCOTLAND: Towards a Global Nuclear Weapons Ban","Sponsor":"Bill Kidd MSP"},{"ID":39,"Date":"2015-09-24T00:00:00","Title":"Our Environment Competition: Meet the Winners","Sponsor":"Alex Fergusson MSP"},{"ID":40,"Date":"2015-09-24T00:00:00","Title":"National Review of Primary Care Out of Hours Services","Sponsor":"Duncan McNeill MSP"},{"ID":41,"Date":"2015-09-24T00:00:00","Title":"1+2: Language Learning for All","Sponsor":"Michael Russell MSP"},{"ID":42,"Date":"2015-09-29T00:00:00","Title":"Working to End Breast Cancer Now","Sponsor":"Jenny Marra MSP"},{"ID":43,"Date":"2015-09-29T00:00:00","Title":"Colleges Scotland ","Sponsor":"Iain Gray MSP"},{"ID":44,"Date":"2015-09-29T00:00:00","Title":"Safeguarding Diabetes Service ","Sponsor":"Nanette Milne MSP"},{"ID":45,"Date":"2015-09-30T00:00:00","Title":"STV Breakfast Briefing","Sponsor":"Linda Fabiani MSP"},{"ID":46,"Date":"2015-09-30T00:00:00","Title":"Self Management Awards 2015","Sponsor":"Jackie Baillie MSP"},{"ID":47,"Date":"2015-09-30T00:00:00","Title":"Livestock Keepers","Sponsor":"John Scott MSP"},{"ID":48,"Date":"2015-09-30T00:00:00","Title":"High Quality Haemophilia Care in Scotland","Sponsor":"Richard Lyle MSP"},{"ID":49,"Date":"2015-09-30T00:00:00","Title":"Special Olympics World Games 2015","Sponsor":"Presiding Officer and Minister for Sport, Health Improvement and Mental Health"},{"ID":50,"Date":"2015-10-01T00:00:00","Title":"Breaking the Mould Celebrating Women's Role Over the Past 100 Years","Sponsor":"Joan McAlpine MSP"},{"ID":51,"Date":"2015-10-01T00:00:00","Title":"Play/Talk/Read","Sponsor":"Fiona McLeod MSP"},{"ID":52,"Date":"2015-10-01T00:00:00","Title":"Manufacturing our Future: Driving Value for Scotland","Sponsor":"Gordon MacDonald MSP"},{"ID":53,"Date":"2015-10-05T00:00:00","Title":"Scottish Older People's Assembly","Sponsor":"Christian Allard MSP"},{"ID":54,"Date":"2015-10-06T00:00:00","Title":"Federation of City Farms and Community Gardens (FCFCG) 10th Anniversary in Scotland","Sponsor":"Anne McTaggart MSP"},{"ID":55,"Date":"2015-10-06T00:00:00","Title":"SSAFA: The Armed Forces Charity","Sponsor":"Margaret Mitchell MSP"},{"ID":56,"Date":"2015-10-06T00:00:00","Title":"From dots to digital: National Braille Week 2015","Sponsor":"Dennis Robertson MSP"},{"ID":57,"Date":"2015-10-06T00:00:00","Title":"Roundtable: Women & Justice","Sponsor":"Jean Urquhart MSP"},{"ID":58,"Date":"2015-10-07T00:00:00","Title":"Unveiling and presentation of the Army painting Service ","Sponsor":"Presiding Officer"},{"ID":59,"Date":"2015-10-07T00:00:00","Title":"UK Music Event","Sponsor":"Anne McTaggart MSP"},{"ID":60,"Date":"2015-10-07T00:00:00","Title":"UN 70 Years of Service to Humanity","Sponsor":"Christina McKelvie MSP"},{"ID":61,"Date":"2015-10-07T00:00:00","Title":"Alcoholics Anonymous Awareness","Sponsor":"Rhoda Grant MSP"},{"ID":62,"Date":"2015-10-07T00:00:00","Title":"Human Rights and The Peace Process in Colombia","Sponsor":"Sarah Boyack MSP"},{"ID":63,"Date":"2015-10-08T00:00:00","Title":"Glasgow Gurdwara - Kultar's Mime","Sponsor":"Sandra White MSP"},{"ID":64,"Date":"2015-10-08T00:00:00","Title":"International Credit Union Day 2015","Sponsor":"John Wilson MSP"},{"ID":65,"Date":"2015-10-26T00:00:00","Title":"Scottish Futures Forum/Knowledge Exchange - Parliament/Universities","Sponsor":"Scottish Futures Forum"},{"ID":66,"Date":"2015-10-27T00:00:00","Title":"Scottish Tree of the Year Prize giving Reception","Sponsor":"Jim Hume MSP"},{"ID":67,"Date":"2015-10-27T00:00:00","Title":"Citizens Advice Scotland","Sponsor":"Dave Thompson MSP"},{"ID":68,"Date":"2015-10-27T00:00:00","Title":"Aberdeen City Region Deal","Sponsor":"Mark McDonald MSP"},{"ID":69,"Date":"2015-10-28T00:00:00","Title":"Scottish Parliament Launch of the 2015 Scottish Poppy Appeal","Sponsor":"The Presiding Officer"},{"ID":70,"Date":"2015-10-28T00:00:00","Title":"Scottish Sports Futures Reception","Sponsor":"Colin Keir MSP"},{"ID":71,"Date":"2015-10-28T00:00:00","Title":"Recognising the Contribution of William Hill","Sponsor":"John Scott MSP"},{"ID":72,"Date":"2015-10-28T00:00:00","Title":"Creating a 21st Century Learning Environment","Sponsor":"George Adam MSP"},{"ID":73,"Date":"2015-10-28T00:00:00","Title":"Care and Repair Edinburgh 30th Birthday Party","Sponsor":"Gordon MacDonald MSP"},{"ID":74,"Date":"2015-10-29T00:00:00","Title":"Ownership and Management Options for Scotland's Community Land Assets","Sponsor":"Chic Brodie MSP"},{"ID":75,"Date":"2015-10-29T00:00:00","Title":"Business in the Parliament 2015 Reception and Dinner","Sponsor":"Presiding Officer"},{"ID":76,"Date":"2015-10-30T00:00:00","Title":"Business in the Parliament 2015 ","Sponsor":"Presiding Officer"},{"ID":77,"Date":"2015-10-31T00:00:00","Title":"Holyrood Rocks Final 2015","Sponsor":"SPCB"},{"ID":78,"Date":"2015-11-03T00:00:00","Title":"Celebrating Social Enterprise","Sponsor":"Tavish Scott MSP"},{"ID":79,"Date":"2015-11-03T00:00:00","Title":"Holocaust Educational Trust","Sponsor":"Ken McIntosh MSP"},{"ID":80,"Date":"2015-11-03T00:00:00","Title":"10 Years of ScottishPower Energy People Trust","Sponsor":"James Dornan MSP"},{"ID":81,"Date":"2015-11-03T00:00:00","Title":"New lamp post mounted wind turbine technology","Sponsor":"Richard Lyle MSP"},{"ID":82,"Date":"2015-11-04T00:00:00","Title":"BHF Scotland: Fighting for Every Heart Beat","Sponsor":"Dennis Robertson MSP"},{"ID":83,"Date":"2015-11-04T00:00:00","Title":"Edinburgh Tenants Federation","Sponsor":"Sarah Boyack MSP"},{"ID":84,"Date":"2015-11-04T00:00:00","Title":"Psoriatic Arthritis Awareness in Scotland","Sponsor":"Dave Thompson MSP"},{"ID":85,"Date":"2015-11-04T00:00:00","Title":"Knitting a Nation: Social Fabric ","Sponsor":"Roderick Campbell MSP"},{"ID":86,"Date":"2015-11-04T00:00:00","Title":"Blacklisted","Sponsor":"Neil Findlay MSP"},{"ID":87,"Date":"2015-11-06T00:00:00","Title":"Community Resources Network Scotland (CRNS) Conference 2015 - Choose to Reuse","Sponsor":"Patrick Harvie MSP"},{"ID":88,"Date":"2015-11-10T00:00:00","Title":"Lung Ha Theatre Company 30th Anniversary","Sponsor":"Joan McAlpine MSP"},{"ID":89,"Date":"2015-11-10T00:00:00","Title":"Making it Happen: Encouraging Enterprise & Entrepreneurship","Sponsor":"Liz Smith MSP"},{"ID":90,"Date":"2015-11-10T00:00:00","Title":"Celebrating World Diabetes Day","Sponsor":"Nanette Milne MSP"},{"ID":91,"Date":"2015-11-10T00:00:00","Title":"Prostitution Law Reform Bill","Sponsor":"Jean Urquhart MSP"},{"ID":92,"Date":"2015-11-10T00:00:00","Title":"Supporting Families Affected by Someone's Drinking","Sponsor":"Christian Allard MSP"},{"ID":93,"Date":"2015-11-11T00:00:00","Title":"Remembrance Day Commemorations","Sponsor":"SPCB"},{"ID":94,"Date":"2015-11-11T00:00:00","Title":"RAMH 25th Anniversary of Service Provision","Sponsor":"George Adam MSP"},{"ID":95,"Date":"2015-11-12T00:00:00","Title":"Get Ready for Winter","Sponsor":"Stuart McMillan MSP"},{"ID":96,"Date":"2015-11-12T00:00:00","Title":"Scotland's Outdoors - Our natural health service","Sponsor":"Malcolm Chisholm MSP"},{"ID":97,"Date":"2015-11-12T00:00:00","Title":"Anxiety & Depression in Families Affected by Substance Abuse","Sponsor":"John Mason MSP"},{"ID":98,"Date":"2015-11-16T00:00:00","Title":"SFF - Participative Budgeting","Sponsor":"Scottish Futures Forum"},{"ID":99,"Date":"2015-11-17T00:00:00","Title":"SCVO Annual Parliamentary Reception","Sponsor":"James Dornan MSP"},{"ID":100,"Date":"2015-11-17T00:00:00","Title":"Pancreatic Cancer UK","Sponsor":"Clare Adamson MSP"},{"ID":101,"Date":"2015-11-17T00:00:00","Title":"Scotland United in prayer for Parliament","Sponsor":"Nigel Don MSP"},{"ID":102,"Date":"2015-11-17T00:00:00","Title":"Women in Property - Annual Review of the Scottish Planning System","Sponsor":"Jayne Baxter MSP"},{"ID":103,"Date":"2015-11-17T00:00:00","Title":"The Refugee Crisis: framing the Scottish Response","Sponsor":"John Mason MSP"},{"ID":104,"Date":"2015-11-18T00:00:00","Title":"Celebrate. Remember, Continue Celebrating 60 Years of Action for Children","Sponsor":"Anne McTaggart MSP"},{"ID":105,"Date":"2015-11-18T00:00:00","Title":"Scottish Parliamentary Maritime Reception","Sponsor":"Liam McArthur MSP"},{"ID":106,"Date":"2015-11-18T00:00:00","Title":"My Lungs My Life","Sponsor":"Nanette Milne MSP"},{"ID":107,"Date":"2015-11-19T00:00:00","Title":"Experiences of Psychosis Film Showing","Sponsor":"Malcolm Chisholm MSP"},{"ID":108,"Date":"2015-11-19T00:00:00","Title":"Road to Recovery?","Sponsor":"Cara Hilton MSP"},{"ID":109,"Date":"2015-11-19T00:00:00","Title":"Carers Rights Day","Sponsor":"Rhoda Grant MSP"},{"ID":110,"Date":"2015-11-19T00:00:00","Title":"National Third Sector GIRFEC project: Getting children's services right for every child - how the third sector can help","Sponsor":"George Adam MSP"},{"ID":111,"Date":"2015-11-20T00:00:00","Title":"Marine Tourism Conference","Sponsor":"Stuart McMillan MSP"},{"ID":112,"Date":"2015-11-24T00:00:00","Title":"10 Years of Architecture & Design Scotland (A&DS)","Sponsor":"Patricia Ferguson MSP"},{"ID":113,"Date":"2015-11-24T00:00:00","Title":"Scottish Literature International lecture","Sponsor":"Jean Urquhart MSP"},{"ID":114,"Date":"2015-11-24T00:00:00","Title":"European HIV-Hepatitis Testing Week - HIV Scotland Reception","Sponsor":"Kevin Stewart MSP"},{"ID":115,"Date":"2015-11-24T00:00:00","Title":"Shaw Trust Scotland","Sponsor":"Michael McMahon MSP"},{"ID":116,"Date":"2015-11-24T00:00:00","Title":"Delivering biodiversity through grouse moor management","Sponsor":"Graeme Dey MSP"},{"ID":117,"Date":"2015-11-25T00:00:00","Title":"National Gaelic Schools Debate and Cross Party Group on Gaelic's Annual Reception","Sponsor":"Angus MacDonald MSP"},{"ID":118,"Date":"2015-11-25T00:00:00","Title":"HIE's 50th Anniversary","Sponsor":"Dave Thompson MSP"},{"ID":119,"Date":"2015-11-25T00:00:00","Title":"Scotland's Nuclear Sector & The Economy","Sponsor":"Iain Gray MSP"},{"ID":120,"Date":"2015-11-26T00:00:00","Title":"Implementing the 'Discards Ban' in Scotland","Sponsor":"Angus MacDonald MSP"},{"ID":121,"Date":"2015-11-26T00:00:00","Title":"PAS Parliamentary Reception","Sponsor":"Stuart McMillan MSP"},{"ID":122,"Date":"2015-11-26T00:00:00","Title":"Centenary Memorials Restoration Fund Reception","Sponsor":"Alex Salmond MSP"},{"ID":123,"Date":"2015-11-30T00:00:00","Title":"St Andrews Day Schools Debating Competition 2015","Sponsor":"SPCB"},{"ID":124,"Date":"2015-12-01T00:00:00","Title":"Penumbra 30 Years of Making a Positive Difference","Sponsor":"Mary Scanlon MSP"},{"ID":125,"Date":"2015-12-01T00:00:00","Title":"Promoting General Practice: RCGP Scotland's Manifesto for 2016","Sponsor":"Bob Doris MSP"},{"ID":126,"Date":"2015-12-01T00:00:00","Title":"Land Ecology: The Norwegian Experience","Sponsor":"Rob Gibson MSP"},{"ID":127,"Date":"2015-12-01T00:00:00","Title":"Moonwalk Supporting Vital Cancer Services","Sponsor":"Drew Smith MSP"},{"ID":128,"Date":"2015-12-02T00:00:00","Title":"Design in Action Business Showcase ","Sponsor":"Michael Russell MSP"},{"ID":129,"Date":"2015-12-02T00:00:00","Title":"Money Advice Scotland","Sponsor":"Deputy Presiding Officer John Scott MSP and Minister for Business, Energy and Tourism"},{"ID":130,"Date":"2015-12-02T00:00:00","Title":"Physiotherapy Works in Scotland","Sponsor":"Dennis Robertson MSP"},{"ID":131,"Date":"2015-12-02T00:00:00","Title":"In the pink? In the red? Or in between?","Sponsor":"Mark McDonald MSP"},{"ID":132,"Date":"2015-12-03T00:00:00","Title":"Care Opinion: Supporting the Citizen Voice","Sponsor":"Roderick Campbell MSP"},{"ID":133,"Date":"2015-12-03T00:00:00","Title":"HiFest Showcase","Sponsor":"Mike MacKenzie MSP "},{"ID":134,"Date":"2015-12-03T00:00:00","Title":"Clydeside Action on Asbestos","Sponsor":"Stuart McMillan MSP"},{"ID":135,"Date":"2015-12-04T00:00:00","Title":"Young Voices on Preventing Sexual Violence","Sponsor":"Malcolm Chisholm MSP"},{"ID":136,"Date":"2015-12-07T00:00:00","Title":"Scottish Public Service Awards","Sponsor":"Presiding Officer and Cabinet Secretary for Fair Work, Skills and Training"},{"ID":137,"Date":"2015-12-08T00:00:00","Title":"Fields in Trust's 90th Anniversary","Sponsor":"Alison Johnstone MSP"},{"ID":138,"Date":"2015-12-08T00:00:00","Title":"The Vascular Health and Stroke Training Programme","Sponsor":"Duncan McNeil MSP"},{"ID":139,"Date":"2015-12-08T00:00:00","Title":"CBI Scotland","Sponsor":"Ruth Davidson MSP"},{"ID":140,"Date":"2015-12-09T00:00:00","Title":"International Human Rights Day","Sponsor":"John Finnie MSP"},{"ID":141,"Date":"2015-12-09T00:00:00","Title":"SBATC Apprentice of the Year Awards 2015","Sponsor":"Nigel Don MSP"},{"ID":142,"Date":"2015-12-09T00:00:00","Title":"PRS for Music Creators Reception","Sponsor":"Deputy Presiding Officer and Cabinet Secretary for Culture, Europe and External Affairs"},{"ID":143,"Date":"2015-12-10T00:00:00","Title":"Scarf School Calendar Awards","Sponsor":"Mark McDonald MSP"},{"ID":144,"Date":"2015-12-10T00:00:00","Title":"Write to End Violence Against Women Awards","Sponsor":"Kezia Dugdale MSP"},{"ID":145,"Date":"2015-12-14T00:00:00","Title":"Roots of Empathy","Sponsor":"Dennis Robertson MSP"},{"ID":146,"Date":"2015-12-15T00:00:00","Title":"Selfhelp4stroke","Sponsor":"Dennis Robertson MSP"},{"ID":147,"Date":"2015-12-15T00:00:00","Title":"Cystic Fibrosis Trust","Sponsor":"Bob Doris MSP"},{"ID":148,"Date":"2015-12-15T00:00:00","Title":"Scottish Health Action on Alcohol Problems-LGBT","Sponsor":"Jim Eadie MSP"},{"ID":149,"Date":"2015-12-16T00:00:00","Title":"Scottish Parliament Christmas Carol Service","Sponsor":"Presiding Officer"},{"ID":150,"Date":"2015-12-17T00:00:00","Title":"Scotland Welcomes Refugees","Sponsor":"Sandra White MSP"},{"ID":151,"Date":"2015-12-17T00:00:00","Title":"MG ALBA - Vision Document Lèirsinn 2021 ","Sponsor":"Angus MacDonald MSP"},{"ID":152,"Date":"2015-12-17T00:00:00","Title":"Humanist Yuletide Lunch","Sponsor":"Patrick Harvie MSP"},{"ID":153,"Date":"2015-12-17T00:00:00","Title":"BBC Charter Renewal - Advanced preview of the Doctor Who Christmas Special","Sponsor":"Claire Baker MSP / George Adam MSP"},{"ID":154,"Date":"2016-01-07T00:00:00","Title":"A Football Manifesto - Scottish Football Supporters Association","Sponsor":"Alison Johnstone MSP"},{"ID":155,"Date":"2016-01-12T00:00:00","Title":"Scottish Renewables 2016","Sponsor":"Patrick Harvie MSP"},{"ID":156,"Date":"2016-01-12T00:00:00","Title":"No one living in a hard-to-heat, draughty home by 2025","Sponsor":"Jim Eadie MSP"},{"ID":157,"Date":"2016-01-13T00:00:00","Title":"VisitScotland","Sponsor":"Deputy Presiding Officer Elaine Smith MSP and Minister for Business, Energy and Tourism Fergus Ewing MSP"},{"ID":158,"Date":"2016-01-13T00:00:00","Title":"Celebrating the Success of Supporting Young People","Sponsor":"Tavish Scott MSP"},{"ID":159,"Date":"2016-01-13T00:00:00","Title":"IoF Scotland / OSCR Reception","Sponsor":"Bill Kidd MSP"},{"ID":160,"Date":"2016-01-14T00:00:00","Title":"Scottish Local Shop Report","Sponsor":"Gordon MacDonald MSP"},{"ID":161,"Date":"2016-01-14T00:00:00","Title":"Parliamentary Cancer Pledge ","Sponsor":"Jackson Carlaw MSP"},{"ID":162,"Date":"2016-01-14T00:00:00","Title":"The Financial Capability Strategy for Scotland","Sponsor":"John Wilson MSP"},{"ID":163,"Date":"2016-01-15T00:00:00","Title":"NUS: Women Lead the Way","Sponsor":"Alison Johnstone MSP"},{"ID":164,"Date":"2016-01-19T00:00:00","Title":"John Bellany and Scottish Women's Hospitals exhibition Preview Reception","Sponsor":"Presiding Officer "},{"ID":165,"Date":"2016-01-19T00:00:00","Title":"Celebrating James Watt 2015-19","Sponsor":"Angus MacDonald MSP"},{"ID":166,"Date":"2016-01-19T00:00:00","Title":"SAMH","Sponsor":"Bob Doris MSP"},{"ID":167,"Date":"2016-01-19T00:00:00","Title":"Scotland's Trusts - A New Pill for Health","Sponsor":"Bruce Crawford MSP"},{"ID":168,"Date":"2016-01-19T00:00:00","Title":"Engineering trends, potential and challenges in Scotland","Sponsor":"Elaine Murray MSP"},{"ID":169,"Date":"2016-01-20T00:00:00","Title":"Consular Corps' Burns Supper","Sponsor":"Presiding Officer "},{"ID":170,"Date":"2016-01-21T00:00:00","Title":"A Deposit Return System for Scotland","Sponsor":"Angus MacDonald MSP"},{"ID":171,"Date":"2016-01-21T00:00:00","Title":"First Ministers Portrait Exhibition - Art Talk","Sponsor":"Angus MacDonald MSP"},{"ID":172,"Date":"2016-01-26T00:00:00","Title":"Quality Scotland Celebrating 25 Years of Excellence","Sponsor":"Richard Lyle MSP"},{"ID":173,"Date":"2016-01-26T00:00:00","Title":"Scottish Parliament Burns Club Supper","Sponsor":"Rob Gibson MSP"},{"ID":174,"Date":"2016-01-26T00:00:00","Title":"Gathering the Voices ","Sponsor":"Stewart Maxwell MSP"},{"ID":175,"Date":"2016-01-26T00:00:00","Title":"Immigration: What’s the Story? – Show Racism the Red Card","Sponsor":"Alex Neil MSP"},{"ID":176,"Date":"2016-01-27T00:00:00","Title":"Active Kids: Briefing with Paralympics Gold Medallist Ellie Simmonds","Sponsor":"Linda Fabiani MSP"},{"ID":177,"Date":"2016-01-27T00:00:00","Title":"Forestry in Scotland","Sponsor":"Angus MacDonald MSP"},{"ID":178,"Date":"2016-01-27T00:00:00","Title":"Essential Facts Regarding A&E Services in Scotland","Sponsor":"Fiona McLeod MSP"},{"ID":179,"Date":"2016-01-27T00:00:00","Title":"A campaign group for a Safe and Accountable Peoples NHS in Scotland (ASAP)","Sponsor":"Neil Findlay MSP"},{"ID":180,"Date":"2016-01-28T00:00:00","Title":"Calling Time on Nuisance Calls","Sponsor":"Graeme Dey MSP"},{"ID":181,"Date":"2016-01-28T00:00:00","Title":"Celebrate Organic Ambitions: Scotland's Organic Action Plan 2016-2020","Sponsor":"Angus McDonald MSP"},{"ID":182,"Date":"2016-01-28T00:00:00","Title":"100 years of the right to Contentiously Object","Sponsor":"Patrick Harvie MSP"},{"ID":183,"Date":"2016-02-02T00:00:00","Title":"Fraser of Allander Institute at the University of Strathclyde ","Sponsor":"Jackie Baillie MSP, Jackson Carlaw MSP, Patrick Harvie MSP, Willie Rennie MSP, John Swinney MSP "},{"ID":184,"Date":"2016-02-02T00:00:00","Title":"Scotland's Futures Forum and GGIS Annual Seminar","Sponsor":"Scotland's Future Forum"},{"ID":185,"Date":"2016-02-02T00:00:00","Title":"Zero Tolerance to Female Genital Mutilation ","Sponsor":"Margaret McCulloch MSP "},{"ID":186,"Date":"2016-02-02T00:00:00","Title":"Citizen and Consumer Interests in Communications ","Sponsor":"Bruce Crawford MSP"},{"ID":187,"Date":"2016-02-02T00:00:00","Title":"PCS Parliamentary Reception","Sponsor":"Neil Findlay MSP"},{"ID":188,"Date":"2016-02-03T00:00:00","Title":"Lloyds TSB Foundation for Scotland 30 Years of Supporting Scotland","Sponsor":"Presiding Officer & Deputy First Minister"},{"ID":189,"Date":"2016-02-03T00:00:00","Title":"Mobility as a Service: A New Reality","Sponsor":"Graeme Dey MSP"},{"ID":190,"Date":"2016-02-03T00:00:00","Title":"Music Therapy and Dementia: Enriching Life When It is Needed","Sponsor":"Tavish Scott MSP "},{"ID":191,"Date":"2016-02-03T00:00:00","Title":"Federation of Entertainment Unions Manifesto","Sponsor":"Claire Baker MSP"},{"ID":192,"Date":"2016-02-03T00:00:00","Title":"ACTSA Reception: Anti-Apartheid Movement","Sponsor":"Drew Smith MSP"},{"ID":193,"Date":"2016-02-04T00:00:00","Title":"Vattenfall – investing in Scottish onshore and offshore wind","Sponsor":"Dennis Robertson MSP"},{"ID":194,"Date":"2016-02-09T00:00:00","Title":"A Fairer and Healthier Scotland: the Housing Association Offer","Sponsor":"Jim Eadie MSP"},{"ID":195,"Date":"2016-02-09T00:00:00","Title":"Starting Again – a new life in Scotland","Sponsor":"Sandra White MSP"},{"ID":196,"Date":"2016-02-09T00:00:00","Title":"More Than Just Money","Sponsor":"Jenny Marra MSP"},{"ID":197,"Date":"2016-02-09T00:00:00","Title":"Digital Scotland Superfast Broadband (DSSB) Briefing","Sponsor":"Stewart Stevenson MSP"},{"ID":198,"Date":"2016-02-09T00:00:00","Title":"Laudato Si’ and delivering climate change action in Scotland","Sponsor":"Siobhan McMahon MSP & Sarah Boyack MSP"},{"ID":199,"Date":"2016-02-10T00:00:00","Title":"Parkinson's UK - Get it on Time","Sponsor":"Dennis Robertson MSP"},{"ID":200,"Date":"2016-02-10T00:00:00","Title":"Celebrating diversities in Scotland - Polish Culture and Language","Sponsor":"Jean Urquhart MSP"},{"ID":201,"Date":"2016-02-10T00:00:00","Title":"Blacklist","Sponsor":"Elaine Smith MSP"},{"ID":202,"Date":"2016-02-10T00:00:00","Title":"Hepatitis C – Scoping Exercise and Film Screening","Sponsor":"Malcolm Chisholm MSP"},{"ID":203,"Date":"2016-02-10T00:00:00","Title":"POVERTY: See It Change It- East Lothian","Sponsor":"Iain Gray MSP"},{"ID":204,"Date":"2016-02-11T00:00:00","Title":"#ScotSpirit Photocall","Sponsor":"Bruce Crawford MSP"},{"ID":205,"Date":"2016-02-11T00:00:00","Title":"Edinburgh Festival Fringe Society","Sponsor":"Colin Keir MSP"},{"ID":206,"Date":"2016-02-11T00:00:00","Title":"Scotland’s UNESCO Global Geoparks ","Sponsor":"Jean Urquhart MSP"},{"ID":207,"Date":"2016-02-12T00:00:00","Title":"Making Scotland a Credit Union Nation","Sponsor":"SPCB"},{"ID":208,"Date":"2016-02-23T00:00:00","Title":"No Young Person Left Behind","Sponsor":"George Adam MSP & Iain Gray MSP"},{"ID":209,"Date":"2016-02-23T00:00:00","Title":"Scottish Newspaper Society: The Effectiveness of Local Newspapers","Sponsor":"Alex Neil MSP"},{"ID":210,"Date":"2016-02-23T00:00:00","Title":"University of the Highlands and Islands","Sponsor":"Jean Urquhart MSP"},{"ID":211,"Date":"2016-02-23T00:00:00","Title":"Huts for Scotland: Introducing the new guidance","Sponsor":"Angus MacDonald MSP"},{"ID":212,"Date":"2016-02-24T00:00:00","Title":"Scottish Environment Link","Sponsor":"Rob Gibson MSP"},{"ID":213,"Date":"2016-02-24T00:00:00","Title":"Podiatry and Prevention- Keeping Scotland on its Feet.","Sponsor":"Jim Hume MSP"},{"ID":214,"Date":"2016-02-24T00:00:00","Title":"What Would Keir Hardie say? ","Sponsor":"Neil Findlay MSP"},{"ID":215,"Date":"2016-02-25T00:00:00","Title":"Shaping Landscapes","Sponsor":"Liam McArthur MSP"},{"ID":216,"Date":"2016-02-25T00:00:00","Title":"CrossReach Drop-in","Sponsor":"Jim Eadie MSP"},{"ID":217,"Date":"2016-02-25T00:00:00","Title":"Ocean Youth Trust Scotland","Sponsor":"Stuart McMillan MSP"},{"ID":218,"Date":"2016-02-25T00:00:00","Title":"An Impact event on a public protection project","Sponsor":"Alex Johnstone MSP"},{"ID":219,"Date":"2016-02-25T00:00:00","Title":"Royal Highland Education Trust","Sponsor":"John Scott MSP"},{"ID":220,"Date":"2016-02-26T00:00:00","Title":"Scotland's Journey: Quality Eating Disorder Services","Sponsor":"Dennis Robertson MSP"},{"ID":221,"Date":"2016-02-29T00:00:00","Title":"Learning for Democracy","Sponsor":"Jean Urquhart MSP"},{"ID":222,"Date":"2016-03-01T00:00:00","Title":"Rare Disease Day 2016","Sponsor":"Malcolm Chisholm MSP "},{"ID":223,"Date":"2016-03-01T00:00:00","Title":"Moving beyond neonicotinoids ","Sponsor":"Graeme Dey MSP"},{"ID":224,"Date":"2016-03-01T00:00:00","Title":"Scotland United in Prayer","Sponsor":"Murdo Fraser MSP"},{"ID":225,"Date":"2016-03-01T00:00:00","Title":"Child Health and Wellbeing","Sponsor":"Cara Hilton MSP"},{"ID":226,"Date":"2016-03-02T00:00:00","Title":"EU Integration from a Scottish Shia Perspective","Sponsor":"Bill Kidd MSP "},{"ID":227,"Date":"2016-03-02T00:00:00","Title":"Borders Forest Trust 20th Anniversary ","Sponsor":"Jim Hume MSP "},{"ID":228,"Date":"2016-03-02T00:00:00","Title":"Sue Ryder ","Sponsor":"Christian Allard MSP"},{"ID":229,"Date":"2016-03-02T00:00:00","Title":"The Brain Tumour Charity","Sponsor":"Cameron Buchanan MSP"},{"ID":230,"Date":"2016-03-03T00:00:00","Title":"Scotland’s outdoors for health & wellbeing","Sponsor":"Alison Johnstone MSP"},{"ID":231,"Date":"2016-03-03T00:00:00","Title":"Improving Safety Standards in the Scottish Prison Sector","Sponsor":"Graeme Pearson MSP"},{"ID":232,"Date":"2016-03-09T00:00:00","Title":"Marie Curie Great Daffadil Appeal 2016","Sponsor":"Linda Fabiani MSP "},{"ID":233,"Date":"2016-03-09T00:00:00","Title":"Epilepsy Services in Scotland: A Blue Print for Success","Sponsor":"Kenneth Gibson MSP"},{"ID":234,"Date":"2016-03-09T00:00:00","Title":"Supporting Scotland’s Heritage","Sponsor":"Jamie McGrigor MSP "},{"ID":235,"Date":"2016-03-09T00:00:00","Title":"The contribution of e-cigarettes to individual and public health","Sponsor":"Mike MacKenzie MSP"},{"ID":236,"Date":"2016-03-10T00:00:00","Title":"In-Work Poverty and Enterprise: Self-employment and Business Ownership as Contexts of Poverty","Sponsor":"Joan McAlpine MSP "},{"ID":237,"Date":"2016-03-10T00:00:00","Title":"40 Years of Scottish Women’s Aid Choir Performance","Sponsor":"Malcolm Chisholm MSP/Christina McKelvie MSP"},{"ID":238,"Date":"2016-03-10T00:00:00","Title":"Banking for the Common Good","Sponsor":"Lesley Brennan MSP"},{"ID":239,"Date":"2016-03-10T00:00:00","Title":"StepChange Debt Charity Scotland: Scotland in the Red","Sponsor":"James Dornan MSP"},{"ID":240,"Date":"2016-03-10T00:00:00","Title":"The UK wide report on Depression and Employment","Sponsor":"Malcolm Chisholm MSP"},{"ID":241,"Date":"2016-03-15T00:00:00","Title":"Cancer Research UK","Sponsor":"Malcolm Chisholm MSP"},{"ID":242,"Date":"2016-03-15T00:00:00","Title":"Celebrating Food for Thought ","Sponsor":"Rob Gibson MSP"},{"ID":243,"Date":"2016-03-15T00:00:00","Title":"Lions Clubs International UN Day","Sponsor":"Alex Fergusson MSP"},{"ID":244,"Date":"2016-03-15T00:00:00","Title":"Tackling homelessness in Scotland","Sponsor":"Gordon MacDonald MSP "},{"ID":245,"Date":"2016-03-16T00:00:00","Title":"A Charter for Trees, Woods and People","Sponsor":"Claudia Beamish MSP "},{"ID":246,"Date":"2016-03-16T00:00:00","Title":"Hibs Community Foundation","Sponsor":"Kezia Dugdale MSP"},{"ID":247,"Date":"2016-03-17T00:00:00","Title":"Green/Blue infrastructure ","Sponsor":"Chic Brodie MSP"},{"ID":248,"Date":"2016-03-17T00:00:00","Title":"Skills & Training in Scotch Whisky Industry","Sponsor":"Gordon MacDonald MSP "},{"ID":249,"Date":"2016-03-17T00:00:00","Title":"Industrial Evolution Report ","Sponsor":"Kenneth Gibson MSP"},{"ID":250,"Date":"2016-03-17T00:00:00","Title":"UN Global Goals: Bangladesh & Scotland Cooperation","Sponsor":"Sarah Boyack MSP"},{"ID":251,"Date":"2016-03-17T00:00:00","Title":"Intersex Equality & Human Rights ","Sponsor":"Margaret McCulloch MSP"},{"ID":252,"Date":"2016-03-21T00:00:00","Title":"Our Films: Our Europe Premiere and Awards Ceremony","Sponsor":"Christina McKelvie MSP"},{"ID":253,"Date":"2016-03-22T00:00:00","Title":"Spark 50th Anniversary ","Sponsor":"Fiona McLeod MSP "},{"ID":254,"Date":"2016-03-22T00:00:00","Title":"Scottish Young Consumer of the Year Final 2016","Sponsor":"Dave Thompson MSP"},{"ID":255,"Date":"2016-03-22T00:00:00","Title":"Family Group Conferencing -The Child At The Centre","Sponsor":"Mark MacDonald MSP"},{"ID":256,"Date":"2016-03-22T00:00:00","Title":"Diabetes in Scotland ","Sponsor":"Dennis Robertson MSP"},{"ID":257,"Date":"2016-03-23T00:00:00","Title":"Patient Charter on Access to Medicines in Scotland","Sponsor":"Malcolm Chisholm MSP"},{"ID":258,"Date":"2016-03-23T00:00:00","Title":"Every Picture Tells a Story","Sponsor":"Jim Eadie MSP"},{"ID":259,"Date":"2016-03-23T00:00:00","Title":"Celebrating 10 Years of Smoke-Free Indoor Public Places","Sponsor":"Stewart Maxwell MSP"},{"ID":260,"Date":"2016-05-25T00:00:00","Title":"European Heart Network Annual Conference 2016","Sponsor":"Andy Wightman MSP "},{"ID":261,"Date":"2016-06-02T00:00:00","Title":"Photocall - Volunteers' Week ","Sponsor":"Bruce Crawford MSP"},{"ID":262,"Date":"2016-06-07T00:00:00","Title":"The Headmasters' Conference","Sponsor":"Liz Smith MSP"},{"ID":263,"Date":"2016-06-07T00:00:00","Title":"Should GM be on the table?","Sponsor":"Iain Gray MSP"},{"ID":264,"Date":"2016-06-08T00:00:00","Title":"Social security in Scotland: A manifesto for change","Sponsor":"Patrick Harvie MSP"},{"ID":265,"Date":"2016-06-16T00:00:00","Title":"Neurological care","Sponsor":"Mark McDonald MSP"},{"ID":266,"Date":"2016-06-16T00:00:00","Title":"Looking Forward Not Back National Symposium","Sponsor":"Christina McKelvie MSP / Alison Harris MSP"},{"ID":267,"Date":"2016-06-28T00:00:00","Title":"International Cricket Council Annual Conference 2016","Sponsor":"Deputy Presiding Officer Linda Fabiani MSP and Minister for Public Health and Sport Aileen Campbell MSP"},{"ID":268,"Date":"2016-06-28T00:00:00","Title":"Scottish IBD Delivery Plan","Sponsor":"Clare Adamson MSP"},{"ID":269,"Date":"2016-06-28T00:00:00","Title":"BBC Scotland Charter","Sponsor":"George Adam MSP "},{"ID":270,"Date":"2016-06-28T00:00:00","Title":"CAMRA","Sponsor":"Patrick Harvie MSP"},{"ID":271,"Date":"2016-06-28T00:00:00","Title":"Inverness Airport to Heathrow Airport Service","Sponsor":"Maree Todd MSP"},{"ID":272,"Date":"2016-06-29T00:00:00","Title":"Holyrood Magazine and Coca-Cola Summer Drinks","Sponsor":"Linda Fabiani MSP"},{"ID":273,"Date":"2016-06-29T00:00:00","Title":"Scottish Introduction to The Parliament Project","Sponsor":"Willie Rennie MSP"},{"ID":274,"Date":"2016-06-29T00:00:00","Title":"Addition Workers Graduation","Sponsor":"John Finnie MSP"},{"ID":275,"Date":"2016-06-30T00:00:00","Title":"No Patient Left Behind","Sponsor":"Gillian Martin MSP"},{"ID":276,"Date":"2016-06-30T00:00:00","Title":"Snare-free Scotland information and photocall drop-in event","Sponsor":"Mark Ruskell MSP"},{"ID":277,"Date":"2016-06-30T00:00:00","Title":"Scottish PEN event for Raid Badawi","Sponsor":"Michael Russell MSP"}] \ No newline at end of file +[ + { + "ID": 1, + "Date": "2015-09-01T00:00:00Z", + "Title": "European North Sea Energy Alliance", + "Sponsor": "Christina McKelvie MSP" + }, + { "ID": 2, "Date": "2015-09-01T00:00:00Z", "Title": "AS it is", "Sponsor": "Margaret McCulloch MSP" }, + { + "ID": 3, + "Date": "2015-09-01T00:00:00Z", + "Title": "Building Capacity, Investing in Stroke Research", + "Sponsor": "Dennis Robertson MSP" + }, + { + "ID": 4, + "Date": "2015-09-02T00:00:00Z", + "Title": "Celebrating Scotland's Small and Rural Towns", + "Sponsor": "Margaret McCulloch MSP" + }, + { "ID": 5, "Date": "2015-09-02T00:00:00Z", "Title": "50 years of supporting carers", "Sponsor": "Graeme Dey MSP" }, + { "ID": 6, "Date": "2015-09-02T00:00:00Z", "Title": "Sole Searching - A Hootenanny", "Sponsor": "Alex Rowley MSP" }, + { + "ID": 7, + "Date": "2015-09-02T00:00:00Z", + "Title": "Exploring European Approaches to Development", + "Sponsor": "Sarah Boyack MSP" + }, + { + "ID": 8, + "Date": "2015-09-03T00:00:00Z", + "Title": "Saltire Fletcher Lecture 2015", + "Sponsor": "Linda Fabiani MSP" + }, + { "ID": 9, "Date": "2015-09-07T00:00:00Z", "Title": "Your Say", "Sponsor": "Welfare Reform Committee" }, + { + "ID": 10, + "Date": "2015-09-08T00:00:00Z", + "Title": "Celebrating Scotland's Walking Champions", + "Sponsor": "Patricia Ferguson MSP" + }, + { "ID": 11, "Date": "2015-09-08T00:00:00Z", "Title": "Columba 1400 Impact Study", "Sponsor": "Dave Thompson MSP" }, + { "ID": 12, "Date": "2015-09-08T00:00:00Z", "Title": "Women in Business ", "Sponsor": "Margaret McCulloch MSP" }, + { + "ID": 13, + "Date": "2015-09-09T00:00:00Z", + "Title": "Scottish Older People's Assembly", + "Sponsor": "Christine Grahame MSP" + }, + { + "ID": 14, + "Date": "2015-09-09T00:00:00Z", + "Title": "How we can prevent homelessness and reduce re-offending?", + "Sponsor": "Mary Fee MSP" + }, + { + "ID": 15, + "Date": "2015-09-09T00:00:00Z", + "Title": "Street Law: bringing practical law to classrooms", + "Sponsor": "Paul Martin MSP" + }, + { "ID": 16, "Date": "2015-09-09T00:00:00Z", "Title": "FAST Forward ", "Sponsor": "Stewart Maxwell MSP" }, + { + "ID": 17, + "Date": "2015-09-09T00:00:00Z", + "Title": "Preventing Accidents, Scotland's National Outcomes", + "Sponsor": "Clare Adamson MSP" + }, + { + "ID": 18, + "Date": "2015-09-10T00:00:00Z", + "Title": "Nature of Scotland Awards 2015 Shortlist ", + "Sponsor": "Claudia Beamish MSP" + }, + { + "ID": 19, + "Date": "2015-09-15T00:00:00Z", + "Title": "Children Get Arthritis Too", + "Sponsor": "Margaret McCulloch MSP" + }, + { + "ID": 20, + "Date": "2015-09-15T00:00:00Z", + "Title": "Transport Focus Stakeholders ", + "Sponsor": "Patrick Harvie MSP" + }, + { "ID": 21, "Date": "2015-09-15T00:00:00Z", "Title": "Growing Your Small Business", "Sponsor": "Hugh Henry MSP" }, + { "ID": 22, "Date": "2015-09-16T00:00:00Z", "Title": "SCIAF 50th Anniversary ", "Sponsor": "Presiding Officer " }, + { + "ID": 23, + "Date": "2015-09-16T00:00:00Z", + "Title": "Luxembourg Presidency of the EU ", + "Sponsor": "Christina McKelvie MSP" + }, + { + "ID": 24, + "Date": "2015-09-16T00:00:00Z", + "Title": "Camphill Scotland - Worldwide Weave", + "Sponsor": "Alison McInnes MSP" + }, + { + "ID": 25, + "Date": "2015-09-16T00:00:00Z", + "Title": "Association of Chief Officers of Scottish Voluntary Organisations", + "Sponsor": "Alex Neil MSP" + }, + { + "ID": 26, + "Date": "2015-09-16T00:00:00Z", + "Title": "IPSA Conference 2015: Roundtable and Reception", + "Sponsor": "Bruce Crawford MSP" + }, + { + "ID": 27, + "Date": "2015-09-17T00:00:00Z", + "Title": "Wear it Pink photocall", + "Sponsor": "Christina McKelvie MSP" + }, + { "ID": 28, "Date": "2015-09-17T00:00:00Z", "Title": "Holyrood Apple Day 2015", "Sponsor": "John Wilson MSP" }, + { + "ID": 29, + "Date": "2015-09-17T00:00:00Z", + "Title": "Youth Volunteering - The Lived Experience", + "Sponsor": "Fiona McLeod MSP" + }, + { "ID": 30, "Date": "2015-09-17T00:00:00Z", "Title": "See Me: In Health", "Sponsor": "Jenny Marra MSP" }, + { + "ID": 31, + "Date": "2015-09-18T00:00:00Z", + "Title": "Future Directions for Well-Being Policy", + "Sponsor": "Scotland's Future Forum" + }, + { + "ID": 32, + "Date": "2015-09-21T00:00:00Z", + "Title": "Breast Cancer Care Scotland - B-Aware Mobile Roadshow", + "Sponsor": "Bob Doris MSP" + }, + { + "ID": 33, + "Date": "2015-09-22T00:00:00Z", + "Title": "Scottish Craft Distillers Association ", + "Sponsor": "Jean Urquhart MSP " + }, + { "ID": 34, "Date": "2015-09-22T00:00:00Z", "Title": "Connect2Renewables", "Sponsor": "Christina McKelvie MSP" }, + { "ID": 35, "Date": "2015-09-22T00:00:00Z", "Title": "25 Years of Parkhead CAB", "Sponsor": "John Mason MSP" }, + { + "ID": 36, + "Date": "2015-09-23T00:00:00Z", + "Title": "250th Anniversary of Thomas Muir, Father of Scottish Democracy", + "Sponsor": "Fiona McLeod MSP" + }, + { + "ID": 37, + "Date": "2016-09-23T00:00:00Z", + "Title": "Scottish Sport Alliance Manifesto for Scottish Sport", + "Sponsor": "Alison Johnstone MSP and Liz Smith MSP" + }, + { + "ID": 38, + "Date": "2019-09-23T00:00:00Z", + "Title": "SCOTLAND: Towards a Global Nuclear Weapons Ban", + "Sponsor": "Bill Kidd MSP" + }, + { + "ID": 39, + "Date": "2015-09-24T00:00:00Z", + "Title": "Our Environment Competition: Meet the Winners", + "Sponsor": "Alex Fergusson MSP" + }, + { + "ID": 40, + "Date": "2015-09-24T00:00:00Z", + "Title": "National Review of Primary Care Out of Hours Services", + "Sponsor": "Duncan McNeill MSP" + }, + { + "ID": 41, + "Date": "2015-09-24T00:00:00Z", + "Title": "1+2: Language Learning for All", + "Sponsor": "Michael Russell MSP" + }, + { + "ID": 42, + "Date": "2015-09-29T00:00:00Z", + "Title": "Working to End Breast Cancer Now", + "Sponsor": "Jenny Marra MSP" + }, + { "ID": 43, "Date": "2015-09-29T00:00:00Z", "Title": "Colleges Scotland ", "Sponsor": "Iain Gray MSP" }, + { + "ID": 44, + "Date": "2015-09-29T00:00:00Z", + "Title": "Safeguarding Diabetes Service ", + "Sponsor": "Nanette Milne MSP" + }, + { "ID": 45, "Date": "2015-09-30T00:00:00Z", "Title": "STV Breakfast Briefing", "Sponsor": "Linda Fabiani MSP" }, + { + "ID": 46, + "Date": "2015-09-30T00:00:00Z", + "Title": "Self Management Awards 2015", + "Sponsor": "Jackie Baillie MSP" + }, + { "ID": 47, "Date": "2015-09-30T00:00:00Z", "Title": "Livestock Keepers", "Sponsor": "John Scott MSP" }, + { + "ID": 48, + "Date": "2015-09-30T00:00:00Z", + "Title": "High Quality Haemophilia Care in Scotland", + "Sponsor": "Richard Lyle MSP" + }, + { + "ID": 49, + "Date": "2015-09-30T00:00:00Z", + "Title": "Special Olympics World Games 2015", + "Sponsor": "Presiding Officer and Minister for Sport, Health Improvement and Mental Health" + }, + { + "ID": 50, + "Date": "2015-10-01T00:00:00Z", + "Title": "Breaking the Mould Celebrating Women's Role Over the Past 100 Years", + "Sponsor": "Joan McAlpine MSP" + }, + { "ID": 51, "Date": "2015-10-01T00:00:00Z", "Title": "Play/Talk/Read", "Sponsor": "Fiona McLeod MSP" }, + { + "ID": 52, + "Date": "2015-10-01T00:00:00Z", + "Title": "Manufacturing our Future: Driving Value for Scotland", + "Sponsor": "Gordon MacDonald MSP" + }, + { + "ID": 53, + "Date": "2015-10-05T00:00:00Z", + "Title": "Scottish Older People's Assembly", + "Sponsor": "Christian Allard MSP" + }, + { + "ID": 54, + "Date": "2015-10-06T00:00:00Z", + "Title": "Federation of City Farms and Community Gardens (FCFCG) 10th Anniversary in Scotland", + "Sponsor": "Anne McTaggart MSP" + }, + { + "ID": 55, + "Date": "2015-10-06T00:00:00Z", + "Title": "SSAFA: The Armed Forces Charity", + "Sponsor": "Margaret Mitchell MSP" + }, + { + "ID": 56, + "Date": "2015-10-06T00:00:00Z", + "Title": "From dots to digital: National Braille Week 2015", + "Sponsor": "Dennis Robertson MSP" + }, + { + "ID": 57, + "Date": "2015-10-06T00:00:00Z", + "Title": "Roundtable: Women & Justice", + "Sponsor": "Jean Urquhart MSP" + }, + { + "ID": 58, + "Date": "2015-10-07T00:00:00Z", + "Title": "Unveiling and presentation of the Army painting Service ", + "Sponsor": "Presiding Officer" + }, + { "ID": 59, "Date": "2015-10-07T00:00:00Z", "Title": "UK Music Event", "Sponsor": "Anne McTaggart MSP" }, + { + "ID": 60, + "Date": "2015-10-07T00:00:00Z", + "Title": "UN 70 Years of Service to Humanity", + "Sponsor": "Christina McKelvie MSP" + }, + { + "ID": 61, + "Date": "2015-10-07T00:00:00Z", + "Title": "Alcoholics Anonymous Awareness", + "Sponsor": "Rhoda Grant MSP" + }, + { + "ID": 62, + "Date": "2015-10-07T00:00:00Z", + "Title": "Human Rights and The Peace Process in Colombia", + "Sponsor": "Sarah Boyack MSP" + }, + { + "ID": 63, + "Date": "2015-10-08T00:00:00Z", + "Title": "Glasgow Gurdwara - Kultar's Mime", + "Sponsor": "Sandra White MSP" + }, + { + "ID": 64, + "Date": "2015-10-08T00:00:00Z", + "Title": "International Credit Union Day 2015", + "Sponsor": "John Wilson MSP" + }, + { + "ID": 65, + "Date": "2015-10-26T00:00:00Z", + "Title": "Scottish Futures Forum/Knowledge Exchange - Parliament/Universities", + "Sponsor": "Scottish Futures Forum" + }, + { + "ID": 66, + "Date": "2015-10-27T00:00:00Z", + "Title": "Scottish Tree of the Year Prize giving Reception", + "Sponsor": "Jim Hume MSP" + }, + { "ID": 67, "Date": "2015-10-27T00:00:00Z", "Title": "Citizens Advice Scotland", "Sponsor": "Dave Thompson MSP" }, + { "ID": 68, "Date": "2015-10-27T00:00:00Z", "Title": "Aberdeen City Region Deal", "Sponsor": "Mark McDonald MSP" }, + { + "ID": 69, + "Date": "2015-10-28T00:00:00Z", + "Title": "Scottish Parliament Launch of the 2015 Scottish Poppy Appeal", + "Sponsor": "The Presiding Officer" + }, + { + "ID": 70, + "Date": "2015-10-28T00:00:00Z", + "Title": "Scottish Sports Futures Reception", + "Sponsor": "Colin Keir MSP" + }, + { + "ID": 71, + "Date": "2015-10-28T00:00:00Z", + "Title": "Recognising the Contribution of William Hill", + "Sponsor": "John Scott MSP" + }, + { + "ID": 72, + "Date": "2015-10-28T00:00:00Z", + "Title": "Creating a 21st Century Learning Environment", + "Sponsor": "George Adam MSP" + }, + { + "ID": 73, + "Date": "2015-10-28T00:00:00Z", + "Title": "Care and Repair Edinburgh 30th Birthday Party", + "Sponsor": "Gordon MacDonald MSP" + }, + { + "ID": 74, + "Date": "2015-10-29T00:00:00Z", + "Title": "Ownership and Management Options for Scotland's Community Land Assets", + "Sponsor": "Chic Brodie MSP" + }, + { + "ID": 75, + "Date": "2015-10-29T00:00:00Z", + "Title": "Business in the Parliament 2015 Reception and Dinner", + "Sponsor": "Presiding Officer" + }, + { + "ID": 76, + "Date": "2015-10-30T00:00:00Z", + "Title": "Business in the Parliament 2015 ", + "Sponsor": "Presiding Officer" + }, + { "ID": 77, "Date": "2015-10-31T00:00:00Z", "Title": "Holyrood Rocks Final 2015", "Sponsor": "SPCB" }, + { + "ID": 78, + "Date": "2015-11-03T00:00:00Z", + "Title": "Celebrating Social Enterprise", + "Sponsor": "Tavish Scott MSP" + }, + { "ID": 79, "Date": "2015-11-03T00:00:00Z", "Title": "Holocaust Educational Trust", "Sponsor": "Ken McIntosh MSP" }, + { + "ID": 80, + "Date": "2015-11-03T00:00:00Z", + "Title": "10 Years of ScottishPower Energy People Trust", + "Sponsor": "James Dornan MSP" + }, + { + "ID": 81, + "Date": "2015-11-03T00:00:00Z", + "Title": "New lamp post mounted wind turbine technology", + "Sponsor": "Richard Lyle MSP" + }, + { + "ID": 82, + "Date": "2015-11-04T00:00:00Z", + "Title": "BHF Scotland: Fighting for Every Heart Beat", + "Sponsor": "Dennis Robertson MSP" + }, + { + "ID": 83, + "Date": "2015-11-04T00:00:00Z", + "Title": "Edinburgh Tenants Federation", + "Sponsor": "Sarah Boyack MSP" + }, + { + "ID": 84, + "Date": "2015-11-04T00:00:00Z", + "Title": "Psoriatic Arthritis Awareness in Scotland", + "Sponsor": "Dave Thompson MSP" + }, + { + "ID": 85, + "Date": "2015-11-04T00:00:00Z", + "Title": "Knitting a Nation: Social Fabric ", + "Sponsor": "Roderick Campbell MSP" + }, + { "ID": 86, "Date": "2015-11-04T00:00:00Z", "Title": "Blacklisted", "Sponsor": "Neil Findlay MSP" }, + { + "ID": 87, + "Date": "2015-11-06T00:00:00Z", + "Title": "Community Resources Network Scotland (CRNS) Conference 2015 - Choose to Reuse", + "Sponsor": "Patrick Harvie MSP" + }, + { + "ID": 88, + "Date": "2015-11-10T00:00:00Z", + "Title": "Lung Ha Theatre Company 30th Anniversary", + "Sponsor": "Joan McAlpine MSP" + }, + { + "ID": 89, + "Date": "2015-11-10T00:00:00Z", + "Title": "Making it Happen: Encouraging Enterprise & Entrepreneurship", + "Sponsor": "Liz Smith MSP" + }, + { + "ID": 90, + "Date": "2015-11-10T00:00:00Z", + "Title": "Celebrating World Diabetes Day", + "Sponsor": "Nanette Milne MSP" + }, + { + "ID": 91, + "Date": "2015-11-10T00:00:00Z", + "Title": "Prostitution Law Reform Bill", + "Sponsor": "Jean Urquhart MSP" + }, + { + "ID": 92, + "Date": "2015-11-10T00:00:00Z", + "Title": "Supporting Families Affected by Someone's Drinking", + "Sponsor": "Christian Allard MSP" + }, + { "ID": 93, "Date": "2015-11-11T00:00:00Z", "Title": "Remembrance Day Commemorations", "Sponsor": "SPCB" }, + { + "ID": 94, + "Date": "2015-11-11T00:00:00Z", + "Title": "RAMH 25th Anniversary of Service Provision", + "Sponsor": "George Adam MSP" + }, + { "ID": 95, "Date": "2015-11-12T00:00:00Z", "Title": "Get Ready for Winter", "Sponsor": "Stuart McMillan MSP" }, + { + "ID": 96, + "Date": "2015-11-12T00:00:00Z", + "Title": "Scotland's Outdoors - Our natural health service", + "Sponsor": "Malcolm Chisholm MSP" + }, + { + "ID": 97, + "Date": "2015-11-12T00:00:00Z", + "Title": "Anxiety & Depression in Families Affected by Substance Abuse", + "Sponsor": "John Mason MSP" + }, + { + "ID": 98, + "Date": "2015-11-16T00:00:00Z", + "Title": "SFF - Participative Budgeting", + "Sponsor": "Scottish Futures Forum" + }, + { + "ID": 99, + "Date": "2015-11-17T00:00:00Z", + "Title": "SCVO Annual Parliamentary Reception", + "Sponsor": "James Dornan MSP" + }, + { "ID": 100, "Date": "2015-11-17T00:00:00Z", "Title": "Pancreatic Cancer UK", "Sponsor": "Clare Adamson MSP" }, + { + "ID": 101, + "Date": "2015-11-17T00:00:00Z", + "Title": "Scotland United in prayer for Parliament", + "Sponsor": "Nigel Don MSP" + }, + { + "ID": 102, + "Date": "2015-11-17T00:00:00Z", + "Title": "Women in Property - Annual Review of the Scottish Planning System", + "Sponsor": "Jayne Baxter MSP" + }, + { + "ID": 103, + "Date": "2015-11-17T00:00:00Z", + "Title": "The Refugee Crisis: framing the Scottish Response", + "Sponsor": "John Mason MSP" + }, + { + "ID": 104, + "Date": "2015-11-18T00:00:00Z", + "Title": "Celebrate. Remember, Continue Celebrating 60 Years of Action for Children", + "Sponsor": "Anne McTaggart MSP" + }, + { + "ID": 105, + "Date": "2015-11-18T00:00:00Z", + "Title": "Scottish Parliamentary Maritime Reception", + "Sponsor": "Liam McArthur MSP" + }, + { "ID": 106, "Date": "2015-11-18T00:00:00Z", "Title": "My Lungs My Life", "Sponsor": "Nanette Milne MSP" }, + { + "ID": 107, + "Date": "2015-11-19T00:00:00Z", + "Title": "Experiences of Psychosis Film Showing", + "Sponsor": "Malcolm Chisholm MSP" + }, + { "ID": 108, "Date": "2015-11-19T00:00:00Z", "Title": "Road to Recovery?", "Sponsor": "Cara Hilton MSP" }, + { "ID": 109, "Date": "2015-11-19T00:00:00Z", "Title": "Carers Rights Day", "Sponsor": "Rhoda Grant MSP" }, + { + "ID": 110, + "Date": "2015-11-19T00:00:00Z", + "Title": "National Third Sector GIRFEC project: Getting children's services right for every child - how the third sector can help", + "Sponsor": "George Adam MSP" + }, + { + "ID": 111, + "Date": "2015-11-20T00:00:00Z", + "Title": "Marine Tourism Conference", + "Sponsor": "Stuart McMillan MSP" + }, + { + "ID": 112, + "Date": "2015-11-24T00:00:00Z", + "Title": "10 Years of Architecture & Design Scotland (A&DS)", + "Sponsor": "Patricia Ferguson MSP" + }, + { + "ID": 113, + "Date": "2015-11-24T00:00:00Z", + "Title": "Scottish Literature International lecture", + "Sponsor": "Jean Urquhart MSP" + }, + { + "ID": 114, + "Date": "2015-11-24T00:00:00Z", + "Title": "European HIV-Hepatitis Testing Week - HIV Scotland Reception", + "Sponsor": "Kevin Stewart MSP" + }, + { "ID": 115, "Date": "2015-11-24T00:00:00Z", "Title": "Shaw Trust Scotland", "Sponsor": "Michael McMahon MSP" }, + { + "ID": 116, + "Date": "2015-11-24T00:00:00Z", + "Title": "Delivering biodiversity through grouse moor management", + "Sponsor": "Graeme Dey MSP" + }, + { + "ID": 117, + "Date": "2015-11-25T00:00:00Z", + "Title": "National Gaelic Schools Debate and Cross Party Group on Gaelic's Annual Reception", + "Sponsor": "Angus MacDonald MSP" + }, + { "ID": 118, "Date": "2015-11-25T00:00:00Z", "Title": "HIE's 50th Anniversary", "Sponsor": "Dave Thompson MSP" }, + { + "ID": 119, + "Date": "2015-11-25T00:00:00Z", + "Title": "Scotland's Nuclear Sector & The Economy", + "Sponsor": "Iain Gray MSP" + }, + { + "ID": 120, + "Date": "2015-11-26T00:00:00Z", + "Title": "Implementing the 'Discards Ban' in Scotland", + "Sponsor": "Angus MacDonald MSP" + }, + { + "ID": 121, + "Date": "2015-11-26T00:00:00Z", + "Title": "PAS Parliamentary Reception", + "Sponsor": "Stuart McMillan MSP" + }, + { + "ID": 122, + "Date": "2015-11-26T00:00:00Z", + "Title": "Centenary Memorials Restoration Fund Reception", + "Sponsor": "Alex Salmond MSP" + }, + { + "ID": 123, + "Date": "2015-11-30T00:00:00Z", + "Title": "St Andrews Day Schools Debating Competition 2015", + "Sponsor": "SPCB" + }, + { + "ID": 124, + "Date": "2015-12-01T00:00:00Z", + "Title": "Penumbra 30 Years of Making a Positive Difference", + "Sponsor": "Mary Scanlon MSP" + }, + { + "ID": 125, + "Date": "2015-12-01T00:00:00Z", + "Title": "Promoting General Practice: RCGP Scotland's Manifesto for 2016", + "Sponsor": "Bob Doris MSP" + }, + { + "ID": 126, + "Date": "2015-12-01T00:00:00Z", + "Title": "Land Ecology: The Norwegian Experience", + "Sponsor": "Rob Gibson MSP" + }, + { + "ID": 127, + "Date": "2015-12-01T00:00:00Z", + "Title": "Moonwalk Supporting Vital Cancer Services", + "Sponsor": "Drew Smith MSP" + }, + { + "ID": 128, + "Date": "2015-12-02T00:00:00Z", + "Title": "Design in Action Business Showcase ", + "Sponsor": "Michael Russell MSP" + }, + { + "ID": 129, + "Date": "2015-12-02T00:00:00Z", + "Title": "Money Advice Scotland", + "Sponsor": "Deputy Presiding Officer John Scott MSP and Minister for Business, Energy and Tourism" + }, + { + "ID": 130, + "Date": "2015-12-02T00:00:00Z", + "Title": "Physiotherapy Works in Scotland", + "Sponsor": "Dennis Robertson MSP" + }, + { + "ID": 131, + "Date": "2015-12-02T00:00:00Z", + "Title": "In the pink? In the red? Or in between?", + "Sponsor": "Mark McDonald MSP" + }, + { + "ID": 132, + "Date": "2015-12-03T00:00:00Z", + "Title": "Care Opinion: Supporting the Citizen Voice", + "Sponsor": "Roderick Campbell MSP" + }, + { "ID": 133, "Date": "2015-12-03T00:00:00Z", "Title": "HiFest Showcase", "Sponsor": "Mike MacKenzie MSP " }, + { + "ID": 134, + "Date": "2015-12-03T00:00:00Z", + "Title": "Clydeside Action on Asbestos", + "Sponsor": "Stuart McMillan MSP" + }, + { + "ID": 135, + "Date": "2015-12-04T00:00:00Z", + "Title": "Young Voices on Preventing Sexual Violence", + "Sponsor": "Malcolm Chisholm MSP" + }, + { + "ID": 136, + "Date": "2015-12-07T00:00:00Z", + "Title": "Scottish Public Service Awards", + "Sponsor": "Presiding Officer and Cabinet Secretary for Fair Work, Skills and Training" + }, + { + "ID": 137, + "Date": "2015-12-08T00:00:00Z", + "Title": "Fields in Trust's 90th Anniversary", + "Sponsor": "Alison Johnstone MSP" + }, + { + "ID": 138, + "Date": "2015-12-08T00:00:00Z", + "Title": "The Vascular Health and Stroke Training Programme", + "Sponsor": "Duncan McNeil MSP" + }, + { "ID": 139, "Date": "2015-12-08T00:00:00Z", "Title": "CBI Scotland", "Sponsor": "Ruth Davidson MSP" }, + { + "ID": 140, + "Date": "2015-12-09T00:00:00Z", + "Title": "International Human Rights Day", + "Sponsor": "John Finnie MSP" + }, + { + "ID": 141, + "Date": "2015-12-09T00:00:00Z", + "Title": "SBATC Apprentice of the Year Awards 2015", + "Sponsor": "Nigel Don MSP" + }, + { + "ID": 142, + "Date": "2015-12-09T00:00:00Z", + "Title": "PRS for Music Creators Reception", + "Sponsor": "Deputy Presiding Officer and Cabinet Secretary for Culture, Europe and External Affairs" + }, + { + "ID": 143, + "Date": "2015-12-10T00:00:00Z", + "Title": "Scarf School Calendar Awards", + "Sponsor": "Mark McDonald MSP" + }, + { + "ID": 144, + "Date": "2015-12-10T00:00:00Z", + "Title": "Write to End Violence Against Women Awards", + "Sponsor": "Kezia Dugdale MSP" + }, + { "ID": 145, "Date": "2015-12-14T00:00:00Z", "Title": "Roots of Empathy", "Sponsor": "Dennis Robertson MSP" }, + { "ID": 146, "Date": "2015-12-15T00:00:00Z", "Title": "Selfhelp4stroke", "Sponsor": "Dennis Robertson MSP" }, + { "ID": 147, "Date": "2015-12-15T00:00:00Z", "Title": "Cystic Fibrosis Trust", "Sponsor": "Bob Doris MSP" }, + { + "ID": 148, + "Date": "2015-12-15T00:00:00Z", + "Title": "Scottish Health Action on Alcohol Problems-LGBT", + "Sponsor": "Jim Eadie MSP" + }, + { + "ID": 149, + "Date": "2015-12-16T00:00:00Z", + "Title": "Scottish Parliament Christmas Carol Service", + "Sponsor": "Presiding Officer" + }, + { "ID": 150, "Date": "2015-12-17T00:00:00Z", "Title": "Scotland Welcomes Refugees", "Sponsor": "Sandra White MSP" }, + { + "ID": 151, + "Date": "2015-12-17T00:00:00Z", + "Title": "MG ALBA - Vision Document Lèirsinn 2021 ", + "Sponsor": "Angus MacDonald MSP" + }, + { "ID": 152, "Date": "2015-12-17T00:00:00Z", "Title": "Humanist Yuletide Lunch", "Sponsor": "Patrick Harvie MSP" }, + { + "ID": 153, + "Date": "2015-12-17T00:00:00Z", + "Title": "BBC Charter Renewal - Advanced preview of the Doctor Who Christmas Special", + "Sponsor": "Claire Baker MSP / George Adam MSP" + }, + { + "ID": 154, + "Date": "2016-01-07T00:00:00Z", + "Title": "A Football Manifesto - Scottish Football Supporters Association", + "Sponsor": "Alison Johnstone MSP" + }, + { "ID": 155, "Date": "2016-01-12T00:00:00Z", "Title": "Scottish Renewables 2016", "Sponsor": "Patrick Harvie MSP" }, + { + "ID": 156, + "Date": "2016-01-12T00:00:00Z", + "Title": "No one living in a hard-to-heat, draughty home by 2025", + "Sponsor": "Jim Eadie MSP" + }, + { + "ID": 157, + "Date": "2016-01-13T00:00:00Z", + "Title": "VisitScotland", + "Sponsor": "Deputy Presiding Officer Elaine Smith MSP and Minister for Business, Energy and Tourism Fergus Ewing MSP" + }, + { + "ID": 158, + "Date": "2016-01-13T00:00:00Z", + "Title": "Celebrating the Success of Supporting Young People", + "Sponsor": "Tavish Scott MSP" + }, + { "ID": 159, "Date": "2016-01-13T00:00:00Z", "Title": "IoF Scotland / OSCR Reception", "Sponsor": "Bill Kidd MSP" }, + { + "ID": 160, + "Date": "2016-01-14T00:00:00Z", + "Title": "Scottish Local Shop Report", + "Sponsor": "Gordon MacDonald MSP" + }, + { + "ID": 161, + "Date": "2016-01-14T00:00:00Z", + "Title": "Parliamentary Cancer Pledge ", + "Sponsor": "Jackson Carlaw MSP" + }, + { + "ID": 162, + "Date": "2016-01-14T00:00:00Z", + "Title": "The Financial Capability Strategy for Scotland", + "Sponsor": "John Wilson MSP" + }, + { + "ID": 163, + "Date": "2016-01-15T00:00:00Z", + "Title": "NUS: Women Lead the Way", + "Sponsor": "Alison Johnstone MSP" + }, + { + "ID": 164, + "Date": "2016-01-19T00:00:00Z", + "Title": "John Bellany and Scottish Women's Hospitals exhibition Preview Reception", + "Sponsor": "Presiding Officer " + }, + { + "ID": 165, + "Date": "2016-01-19T00:00:00Z", + "Title": "Celebrating James Watt 2015-19", + "Sponsor": "Angus MacDonald MSP" + }, + { "ID": 166, "Date": "2016-01-19T00:00:00Z", "Title": "SAMH", "Sponsor": "Bob Doris MSP" }, + { + "ID": 167, + "Date": "2016-01-19T00:00:00Z", + "Title": "Scotland's Trusts - A New Pill for Health", + "Sponsor": "Bruce Crawford MSP" + }, + { + "ID": 168, + "Date": "2016-01-19T00:00:00Z", + "Title": "Engineering trends, potential and challenges in Scotland", + "Sponsor": "Elaine Murray MSP" + }, + { + "ID": 169, + "Date": "2016-01-20T00:00:00Z", + "Title": "Consular Corps' Burns Supper", + "Sponsor": "Presiding Officer " + }, + { + "ID": 170, + "Date": "2016-01-21T00:00:00Z", + "Title": "A Deposit Return System for Scotland", + "Sponsor": "Angus MacDonald MSP" + }, + { + "ID": 171, + "Date": "2016-01-21T00:00:00Z", + "Title": "First Ministers Portrait Exhibition - Art Talk", + "Sponsor": "Angus MacDonald MSP" + }, + { + "ID": 172, + "Date": "2016-01-26T00:00:00Z", + "Title": "Quality Scotland Celebrating 25 Years of Excellence", + "Sponsor": "Richard Lyle MSP" + }, + { + "ID": 173, + "Date": "2016-01-26T00:00:00Z", + "Title": "Scottish Parliament Burns Club Supper", + "Sponsor": "Rob Gibson MSP" + }, + { "ID": 174, "Date": "2016-01-26T00:00:00Z", "Title": "Gathering the Voices ", "Sponsor": "Stewart Maxwell MSP" }, + { + "ID": 175, + "Date": "2016-01-26T00:00:00Z", + "Title": "Immigration: What’s the Story? – Show Racism the Red Card", + "Sponsor": "Alex Neil MSP" + }, + { + "ID": 176, + "Date": "2016-01-27T00:00:00Z", + "Title": "Active Kids: Briefing with Paralympics Gold Medallist Ellie Simmonds", + "Sponsor": "Linda Fabiani MSP" + }, + { "ID": 177, "Date": "2016-01-27T00:00:00Z", "Title": "Forestry in Scotland", "Sponsor": "Angus MacDonald MSP" }, + { + "ID": 178, + "Date": "2016-01-27T00:00:00Z", + "Title": "Essential Facts Regarding A&E Services in Scotland", + "Sponsor": "Fiona McLeod MSP" + }, + { + "ID": 179, + "Date": "2016-01-27T00:00:00Z", + "Title": "A campaign group for a Safe and Accountable Peoples NHS in Scotland (ASAP)", + "Sponsor": "Neil Findlay MSP" + }, + { + "ID": 180, + "Date": "2016-01-28T00:00:00Z", + "Title": "Calling Time on Nuisance Calls", + "Sponsor": "Graeme Dey MSP" + }, + { + "ID": 181, + "Date": "2016-01-28T00:00:00Z", + "Title": "Celebrate Organic Ambitions: Scotland's Organic Action Plan 2016-2020", + "Sponsor": "Angus McDonald MSP" + }, + { + "ID": 182, + "Date": "2016-01-28T00:00:00Z", + "Title": "100 years of the right to Contentiously Object", + "Sponsor": "Patrick Harvie MSP" + }, + { + "ID": 183, + "Date": "2016-02-02T00:00:00Z", + "Title": "Fraser of Allander Institute at the University of Strathclyde ", + "Sponsor": "Jackie Baillie MSP, Jackson Carlaw MSP, Patrick Harvie MSP, Willie Rennie MSP, John Swinney MSP " + }, + { + "ID": 184, + "Date": "2016-02-02T00:00:00Z", + "Title": "Scotland's Futures Forum and GGIS Annual Seminar", + "Sponsor": "Scotland's Future Forum" + }, + { + "ID": 185, + "Date": "2016-02-02T00:00:00Z", + "Title": "Zero Tolerance to Female Genital Mutilation ", + "Sponsor": "Margaret McCulloch MSP " + }, + { + "ID": 186, + "Date": "2016-02-02T00:00:00Z", + "Title": "Citizen and Consumer Interests in Communications ", + "Sponsor": "Bruce Crawford MSP" + }, + { + "ID": 187, + "Date": "2016-02-02T00:00:00Z", + "Title": "PCS Parliamentary Reception", + "Sponsor": "Neil Findlay MSP" + }, + { + "ID": 188, + "Date": "2016-02-03T00:00:00Z", + "Title": "Lloyds TSB Foundation for Scotland 30 Years of Supporting Scotland", + "Sponsor": "Presiding Officer & Deputy First Minister" + }, + { + "ID": 189, + "Date": "2016-02-03T00:00:00Z", + "Title": "Mobility as a Service: A New Reality", + "Sponsor": "Graeme Dey MSP" + }, + { + "ID": 190, + "Date": "2016-02-03T00:00:00Z", + "Title": "Music Therapy and Dementia: Enriching Life When It is Needed", + "Sponsor": "Tavish Scott MSP " + }, + { + "ID": 191, + "Date": "2016-02-03T00:00:00Z", + "Title": "Federation of Entertainment Unions Manifesto", + "Sponsor": "Claire Baker MSP" + }, + { + "ID": 192, + "Date": "2016-02-03T00:00:00Z", + "Title": "ACTSA Reception: Anti-Apartheid Movement", + "Sponsor": "Drew Smith MSP" + }, + { + "ID": 193, + "Date": "2016-02-04T00:00:00Z", + "Title": "Vattenfall – investing in Scottish onshore and offshore wind", + "Sponsor": "Dennis Robertson MSP" + }, + { + "ID": 194, + "Date": "2016-02-09T00:00:00Z", + "Title": "A Fairer and Healthier Scotland: the Housing Association Offer", + "Sponsor": "Jim Eadie MSP" + }, + { + "ID": 195, + "Date": "2016-02-09T00:00:00Z", + "Title": "Starting Again – a new life in Scotland", + "Sponsor": "Sandra White MSP" + }, + { "ID": 196, "Date": "2016-02-09T00:00:00Z", "Title": "More Than Just Money", "Sponsor": "Jenny Marra MSP" }, + { + "ID": 197, + "Date": "2016-02-09T00:00:00Z", + "Title": "Digital Scotland Superfast Broadband (DSSB) Briefing", + "Sponsor": "Stewart Stevenson MSP" + }, + { + "ID": 198, + "Date": "2016-02-09T00:00:00Z", + "Title": "Laudato Si’ and delivering climate change action in Scotland", + "Sponsor": "Siobhan McMahon MSP & Sarah Boyack MSP" + }, + { + "ID": 199, + "Date": "2016-02-10T00:00:00Z", + "Title": "Parkinson's UK - Get it on Time", + "Sponsor": "Dennis Robertson MSP" + }, + { + "ID": 200, + "Date": "2016-02-10T00:00:00Z", + "Title": "Celebrating diversities in Scotland - Polish Culture and Language", + "Sponsor": "Jean Urquhart MSP" + }, + { "ID": 201, "Date": "2016-02-10T00:00:00Z", "Title": "Blacklist", "Sponsor": "Elaine Smith MSP" }, + { + "ID": 202, + "Date": "2016-02-10T00:00:00Z", + "Title": "Hepatitis C – Scoping Exercise and Film Screening", + "Sponsor": "Malcolm Chisholm MSP" + }, + { + "ID": 203, + "Date": "2016-02-10T00:00:00Z", + "Title": "POVERTY: See It Change It- East Lothian", + "Sponsor": "Iain Gray MSP" + }, + { "ID": 204, "Date": "2016-02-11T00:00:00Z", "Title": "#ScotSpirit Photocall", "Sponsor": "Bruce Crawford MSP" }, + { + "ID": 205, + "Date": "2016-02-11T00:00:00Z", + "Title": "Edinburgh Festival Fringe Society", + "Sponsor": "Colin Keir MSP" + }, + { + "ID": 206, + "Date": "2016-02-11T00:00:00Z", + "Title": "Scotland’s UNESCO Global Geoparks ", + "Sponsor": "Jean Urquhart MSP" + }, + { "ID": 207, "Date": "2016-02-12T00:00:00Z", "Title": "Making Scotland a Credit Union Nation", "Sponsor": "SPCB" }, + { + "ID": 208, + "Date": "2016-02-23T00:00:00Z", + "Title": "No Young Person Left Behind", + "Sponsor": "George Adam MSP & Iain Gray MSP" + }, + { + "ID": 209, + "Date": "2016-02-23T00:00:00Z", + "Title": "Scottish Newspaper Society: The Effectiveness of Local Newspapers", + "Sponsor": "Alex Neil MSP" + }, + { + "ID": 210, + "Date": "2016-02-23T00:00:00Z", + "Title": "University of the Highlands and Islands", + "Sponsor": "Jean Urquhart MSP" + }, + { + "ID": 211, + "Date": "2016-02-23T00:00:00Z", + "Title": "Huts for Scotland: Introducing the new guidance", + "Sponsor": "Angus MacDonald MSP" + }, + { "ID": 212, "Date": "2016-02-24T00:00:00Z", "Title": "Scottish Environment Link", "Sponsor": "Rob Gibson MSP" }, + { + "ID": 213, + "Date": "2016-02-24T00:00:00Z", + "Title": "Podiatry and Prevention- Keeping Scotland on its Feet.", + "Sponsor": "Jim Hume MSP" + }, + { + "ID": 214, + "Date": "2016-02-24T00:00:00Z", + "Title": "What Would Keir Hardie say? ", + "Sponsor": "Neil Findlay MSP" + }, + { "ID": 215, "Date": "2016-02-25T00:00:00Z", "Title": "Shaping Landscapes", "Sponsor": "Liam McArthur MSP" }, + { "ID": 216, "Date": "2016-02-25T00:00:00Z", "Title": "CrossReach Drop-in", "Sponsor": "Jim Eadie MSP" }, + { + "ID": 217, + "Date": "2016-02-25T00:00:00Z", + "Title": "Ocean Youth Trust Scotland", + "Sponsor": "Stuart McMillan MSP" + }, + { + "ID": 218, + "Date": "2016-02-25T00:00:00Z", + "Title": "An Impact event on a public protection project", + "Sponsor": "Alex Johnstone MSP" + }, + { + "ID": 219, + "Date": "2016-02-25T00:00:00Z", + "Title": "Royal Highland Education Trust", + "Sponsor": "John Scott MSP" + }, + { + "ID": 220, + "Date": "2016-02-26T00:00:00Z", + "Title": "Scotland's Journey: Quality Eating Disorder Services", + "Sponsor": "Dennis Robertson MSP" + }, + { "ID": 221, "Date": "2016-02-29T00:00:00Z", "Title": "Learning for Democracy", "Sponsor": "Jean Urquhart MSP" }, + { "ID": 222, "Date": "2016-03-01T00:00:00Z", "Title": "Rare Disease Day 2016", "Sponsor": "Malcolm Chisholm MSP " }, + { + "ID": 223, + "Date": "2016-03-01T00:00:00Z", + "Title": "Moving beyond neonicotinoids ", + "Sponsor": "Graeme Dey MSP" + }, + { "ID": 224, "Date": "2016-03-01T00:00:00Z", "Title": "Scotland United in Prayer", "Sponsor": "Murdo Fraser MSP" }, + { "ID": 225, "Date": "2016-03-01T00:00:00Z", "Title": "Child Health and Wellbeing", "Sponsor": "Cara Hilton MSP" }, + { + "ID": 226, + "Date": "2016-03-02T00:00:00Z", + "Title": "EU Integration from a Scottish Shia Perspective", + "Sponsor": "Bill Kidd MSP " + }, + { + "ID": 227, + "Date": "2016-03-02T00:00:00Z", + "Title": "Borders Forest Trust 20th Anniversary ", + "Sponsor": "Jim Hume MSP " + }, + { "ID": 228, "Date": "2016-03-02T00:00:00Z", "Title": "Sue Ryder ", "Sponsor": "Christian Allard MSP" }, + { + "ID": 229, + "Date": "2016-03-02T00:00:00Z", + "Title": "The Brain Tumour Charity", + "Sponsor": "Cameron Buchanan MSP" + }, + { + "ID": 230, + "Date": "2016-03-03T00:00:00Z", + "Title": "Scotland’s outdoors for health & wellbeing", + "Sponsor": "Alison Johnstone MSP" + }, + { + "ID": 231, + "Date": "2016-03-03T00:00:00Z", + "Title": "Improving Safety Standards in the Scottish Prison Sector", + "Sponsor": "Graeme Pearson MSP" + }, + { + "ID": 232, + "Date": "2016-03-09T00:00:00Z", + "Title": "Marie Curie Great Daffadil Appeal 2016", + "Sponsor": "Linda Fabiani MSP " + }, + { + "ID": 233, + "Date": "2016-03-09T00:00:00Z", + "Title": "Epilepsy Services in Scotland: A Blue Print for Success", + "Sponsor": "Kenneth Gibson MSP" + }, + { + "ID": 234, + "Date": "2016-03-09T00:00:00Z", + "Title": "Supporting Scotland’s Heritage", + "Sponsor": "Jamie McGrigor MSP " + }, + { + "ID": 235, + "Date": "2016-03-09T00:00:00Z", + "Title": "The contribution of e-cigarettes to individual and public health", + "Sponsor": "Mike MacKenzie MSP" + }, + { + "ID": 236, + "Date": "2016-03-10T00:00:00Z", + "Title": "In-Work Poverty and Enterprise: Self-employment and Business Ownership as Contexts of Poverty", + "Sponsor": "Joan McAlpine MSP " + }, + { + "ID": 237, + "Date": "2016-03-10T00:00:00Z", + "Title": "40 Years of Scottish Women’s Aid Choir Performance", + "Sponsor": "Malcolm Chisholm MSP/Christina McKelvie MSP" + }, + { + "ID": 238, + "Date": "2016-03-10T00:00:00Z", + "Title": "Banking for the Common Good", + "Sponsor": "Lesley Brennan MSP" + }, + { + "ID": 239, + "Date": "2016-03-10T00:00:00Z", + "Title": "StepChange Debt Charity Scotland: Scotland in the Red", + "Sponsor": "James Dornan MSP" + }, + { + "ID": 240, + "Date": "2016-03-10T00:00:00Z", + "Title": "The UK wide report on Depression and Employment", + "Sponsor": "Malcolm Chisholm MSP" + }, + { "ID": 241, "Date": "2016-03-15T00:00:00Z", "Title": "Cancer Research UK", "Sponsor": "Malcolm Chisholm MSP" }, + { + "ID": 242, + "Date": "2016-03-15T00:00:00Z", + "Title": "Celebrating Food for Thought ", + "Sponsor": "Rob Gibson MSP" + }, + { + "ID": 243, + "Date": "2016-03-15T00:00:00Z", + "Title": "Lions Clubs International UN Day", + "Sponsor": "Alex Fergusson MSP" + }, + { + "ID": 244, + "Date": "2016-03-15T00:00:00Z", + "Title": "Tackling homelessness in Scotland", + "Sponsor": "Gordon MacDonald MSP " + }, + { + "ID": 245, + "Date": "2016-03-16T00:00:00Z", + "Title": "A Charter for Trees, Woods and People", + "Sponsor": "Claudia Beamish MSP " + }, + { "ID": 246, "Date": "2016-03-16T00:00:00Z", "Title": "Hibs Community Foundation", "Sponsor": "Kezia Dugdale MSP" }, + { "ID": 247, "Date": "2016-03-17T00:00:00Z", "Title": "Green/Blue infrastructure ", "Sponsor": "Chic Brodie MSP" }, + { + "ID": 248, + "Date": "2016-03-17T00:00:00Z", + "Title": "Skills & Training in Scotch Whisky Industry", + "Sponsor": "Gordon MacDonald MSP " + }, + { + "ID": 249, + "Date": "2016-03-17T00:00:00Z", + "Title": "Industrial Evolution Report ", + "Sponsor": "Kenneth Gibson MSP" + }, + { + "ID": 250, + "Date": "2016-03-17T00:00:00Z", + "Title": "UN Global Goals: Bangladesh & Scotland Cooperation", + "Sponsor": "Sarah Boyack MSP" + }, + { + "ID": 251, + "Date": "2016-03-17T00:00:00Z", + "Title": "Intersex Equality & Human Rights ", + "Sponsor": "Margaret McCulloch MSP" + }, + { + "ID": 252, + "Date": "2016-03-21T00:00:00Z", + "Title": "Our Films: Our Europe Premiere and Awards Ceremony", + "Sponsor": "Christina McKelvie MSP" + }, + { "ID": 253, "Date": "2016-03-22T00:00:00Z", "Title": "Spark 50th Anniversary ", "Sponsor": "Fiona McLeod MSP " }, + { + "ID": 254, + "Date": "2016-03-22T00:00:00Z", + "Title": "Scottish Young Consumer of the Year Final 2016", + "Sponsor": "Dave Thompson MSP" + }, + { + "ID": 255, + "Date": "2016-03-22T00:00:00Z", + "Title": "Family Group Conferencing -The Child At The Centre", + "Sponsor": "Mark MacDonald MSP" + }, + { "ID": 256, "Date": "2016-03-22T00:00:00Z", "Title": "Diabetes in Scotland ", "Sponsor": "Dennis Robertson MSP" }, + { + "ID": 257, + "Date": "2016-03-23T00:00:00Z", + "Title": "Patient Charter on Access to Medicines in Scotland", + "Sponsor": "Malcolm Chisholm MSP" + }, + { "ID": 258, "Date": "2016-03-23T00:00:00Z", "Title": "Every Picture Tells a Story", "Sponsor": "Jim Eadie MSP" }, + { + "ID": 259, + "Date": "2016-03-23T00:00:00Z", + "Title": "Celebrating 10 Years of Smoke-Free Indoor Public Places", + "Sponsor": "Stewart Maxwell MSP" + }, + { + "ID": 260, + "Date": "2016-05-25T00:00:00Z", + "Title": "European Heart Network Annual Conference 2016", + "Sponsor": "Andy Wightman MSP " + }, + { + "ID": 261, + "Date": "2016-06-02T00:00:00Z", + "Title": "Photocall - Volunteers' Week ", + "Sponsor": "Bruce Crawford MSP" + }, + { "ID": 262, "Date": "2016-06-07T00:00:00Z", "Title": "The Headmasters' Conference", "Sponsor": "Liz Smith MSP" }, + { "ID": 263, "Date": "2016-06-07T00:00:00Z", "Title": "Should GM be on the table?", "Sponsor": "Iain Gray MSP" }, + { + "ID": 264, + "Date": "2016-06-08T00:00:00Z", + "Title": "Social security in Scotland: A manifesto for change", + "Sponsor": "Patrick Harvie MSP" + }, + { "ID": 265, "Date": "2016-06-16T00:00:00Z", "Title": "Neurological care", "Sponsor": "Mark McDonald MSP" }, + { + "ID": 266, + "Date": "2016-06-16T00:00:00Z", + "Title": "Looking Forward Not Back National Symposium", + "Sponsor": "Christina McKelvie MSP / Alison Harris MSP" + }, + { + "ID": 267, + "Date": "2016-06-28T00:00:00Z", + "Title": "International Cricket Council Annual Conference 2016", + "Sponsor": "Deputy Presiding Officer Linda Fabiani MSP and Minister for Public Health and Sport Aileen Campbell MSP" + }, + { + "ID": 268, + "Date": "2016-06-28T00:00:00Z", + "Title": "Scottish IBD Delivery Plan", + "Sponsor": "Clare Adamson MSP" + }, + { "ID": 269, "Date": "2016-06-28T00:00:00Z", "Title": "BBC Scotland Charter", "Sponsor": "George Adam MSP " }, + { "ID": 270, "Date": "2016-06-28T00:00:00Z", "Title": "CAMRA", "Sponsor": "Patrick Harvie MSP" }, + { + "ID": 271, + "Date": "2016-06-28T00:00:00Z", + "Title": "Inverness Airport to Heathrow Airport Service", + "Sponsor": "Maree Todd MSP" + }, + { + "ID": 272, + "Date": "2016-06-29T00:00:00Z", + "Title": "Holyrood Magazine and Coca-Cola Summer Drinks", + "Sponsor": "Linda Fabiani MSP" + }, + { + "ID": 273, + "Date": "2016-06-29T00:00:00Z", + "Title": "Scottish Introduction to The Parliament Project", + "Sponsor": "Willie Rennie MSP" + }, + { "ID": 274, "Date": "2016-06-29T00:00:00Z", "Title": "Addition Workers Graduation", "Sponsor": "John Finnie MSP" }, + { "ID": 275, "Date": "2016-06-30T00:00:00Z", "Title": "No Patient Left Behind", "Sponsor": "Gillian Martin MSP" }, + { + "ID": 276, + "Date": "2016-06-30T00:00:00Z", + "Title": "Snare-free Scotland information and photocall drop-in event", + "Sponsor": "Mark Ruskell MSP" + }, + { + "ID": 277, + "Date": "2016-06-30T00:00:00Z", + "Title": "Scottish PEN event for Raid Badawi", + "Sponsor": "Michael Russell MSP" + } +] diff --git a/test/inputs/json/misc/5f7fe.json b/test/inputs/json/misc/5f7fe.json index 852506b47..fe39712d6 100644 --- a/test/inputs/json/misc/5f7fe.json +++ b/test/inputs/json/misc/5f7fe.json @@ -1,2053 +1,22780 @@ { - "meta" : { - "view" : { - "id" : "5xaw-6ayf", - "name" : "Lottery Mega Millions Winning Numbers: Beginning 2002", - "attribution" : "New York State Gaming Commission", - "attributionLink" : "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresultsmega", - "averageRating" : 0, - "category" : "Government & Finance", - "createdAt" : 1362492565, - "description" : "Go to http://on.ny.gov/1J8tPSN on the New York Lottery website for past Mega Millions results and payouts.", - "displayType" : "table", - "downloadCount" : 44849, - "hideFromCatalog" : false, - "hideFromDataJson" : false, - "indexUpdatedAt" : 1501322618, - "locale" : "", - "newBackend" : false, - "numberOfComments" : 0, - "oid" : 26482418, - "provenance" : "official", - "publicationAppendEnabled" : false, - "publicationDate" : 1501322465, - "publicationGroup" : 714877, - "publicationStage" : "published", - "rowsUpdatedAt" : 1501322464, - "rowsUpdatedBy" : "xzik-pf59", - "tableId" : 14361925, - "totalTimesRated" : 0, - "viewCount" : 337494, - "viewLastModified" : 1501322465, - "viewType" : "tabular", - "columns" : [ { - "id" : -1, - "name" : "sid", - "dataTypeName" : "meta_data", - "fieldName" : ":sid", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "id", - "dataTypeName" : "meta_data", - "fieldName" : ":id", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "position", - "dataTypeName" : "meta_data", - "fieldName" : ":position", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "created_at", - "dataTypeName" : "meta_data", - "fieldName" : ":created_at", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "created_meta", - "dataTypeName" : "meta_data", - "fieldName" : ":created_meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "updated_at", - "dataTypeName" : "meta_data", - "fieldName" : ":updated_at", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "updated_meta", - "dataTypeName" : "meta_data", - "fieldName" : ":updated_meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "meta", - "dataTypeName" : "meta_data", - "fieldName" : ":meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : 313393711, - "name" : "Draw Date", - "dataTypeName" : "calendar_date", - "fieldName" : "draw_date", - "position" : 1, - "renderTypeName" : "calendar_date", - "tableColumnId" : 8368515, - "width" : 140, - "cachedContents" : { - "largest" : "2017-07-28T00:00:00", - "non_null" : 1584, - "null" : 0, - "top" : [ { - "item" : "2017-05-02T00:00:00", - "count" : 20 - }, { - "item" : "2017-05-05T00:00:00", - "count" : 19 - }, { - "item" : "2017-05-09T00:00:00", - "count" : 18 - }, { - "item" : "2017-05-12T00:00:00", - "count" : 17 - }, { - "item" : "2017-05-16T00:00:00", - "count" : 16 - }, { - "item" : "2017-05-19T00:00:00", - "count" : 15 - }, { - "item" : "2017-05-23T00:00:00", - "count" : 14 - }, { - "item" : "2017-05-26T00:00:00", - "count" : 13 - }, { - "item" : "2017-05-30T00:00:00", - "count" : 12 - }, { - "item" : "2017-06-02T00:00:00", - "count" : 11 - }, { - "item" : "2017-06-06T00:00:00", - "count" : 10 - }, { - "item" : "2017-06-09T00:00:00", - "count" : 9 - }, { - "item" : "2017-06-13T00:00:00", - "count" : 8 - }, { - "item" : "2017-06-16T00:00:00", - "count" : 7 - }, { - "item" : "2017-06-20T00:00:00", - "count" : 6 - }, { - "item" : "2017-06-23T00:00:00", - "count" : 5 - }, { - "item" : "2017-06-27T00:00:00", - "count" : 4 - }, { - "item" : "2017-06-30T00:00:00", - "count" : 3 - }, { - "item" : "2017-07-04T00:00:00", - "count" : 2 - }, { - "item" : "2017-07-07T00:00:00", - "count" : 1 - } ], - "smallest" : "2002-05-17T00:00:00" - }, - "format" : { - "view" : "date", - "align" : "center" + "meta": { + "view": { + "id": "5xaw-6ayf", + "name": "Lottery Mega Millions Winning Numbers: Beginning 2002", + "attribution": "New York State Gaming Commission", + "attributionLink": "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresultsmega", + "averageRating": 0, + "category": "Government & Finance", + "createdAt": 1362492565, + "description": "Go to http://on.ny.gov/1J8tPSN on the New York Lottery website for past Mega Millions results and payouts.", + "displayType": "table", + "downloadCount": 44849, + "hideFromCatalog": false, + "hideFromDataJson": false, + "indexUpdatedAt": 1501322618, + "locale": "", + "newBackend": false, + "numberOfComments": 0, + "oid": 26482418, + "provenance": "official", + "publicationAppendEnabled": false, + "publicationDate": 1501322465, + "publicationGroup": 714877, + "publicationStage": "published", + "rowsUpdatedAt": 1501322464, + "rowsUpdatedBy": "xzik-pf59", + "tableId": 14361925, + "totalTimesRated": 0, + "viewCount": 337494, + "viewLastModified": 1501322465, + "viewType": "tabular", + "columns": [ + { + "id": -1, + "name": "sid", + "dataTypeName": "meta_data", + "fieldName": ":sid", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "id", + "dataTypeName": "meta_data", + "fieldName": ":id", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "position", + "dataTypeName": "meta_data", + "fieldName": ":position", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "created_at", + "dataTypeName": "meta_data", + "fieldName": ":created_at", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "created_meta", + "dataTypeName": "meta_data", + "fieldName": ":created_meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "updated_at", + "dataTypeName": "meta_data", + "fieldName": ":updated_at", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "updated_meta", + "dataTypeName": "meta_data", + "fieldName": ":updated_meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "meta", + "dataTypeName": "meta_data", + "fieldName": ":meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": 313393711, + "name": "Draw Date", + "dataTypeName": "calendar_date", + "fieldName": "draw_date", + "position": 1, + "renderTypeName": "calendar_date", + "tableColumnId": 8368515, + "width": 140, + "cachedContents": { + "largest": "2017-07-28T00:00:00Z", + "non_null": 1584, + "null": 0, + "top": [ + { + "item": "2017-05-02T00:00:00Z", + "count": 20 + }, + { + "item": "2017-05-05T00:00:00Z", + "count": 19 + }, + { + "item": "2017-05-09T00:00:00Z", + "count": 18 + }, + { + "item": "2017-05-12T00:00:00Z", + "count": 17 + }, + { + "item": "2017-05-16T00:00:00Z", + "count": 16 + }, + { + "item": "2017-05-19T00:00:00Z", + "count": 15 + }, + { + "item": "2017-05-23T00:00:00Z", + "count": 14 + }, + { + "item": "2017-05-26T00:00:00Z", + "count": 13 + }, + { + "item": "2017-05-30T00:00:00Z", + "count": 12 + }, + { + "item": "2017-06-02T00:00:00Z", + "count": 11 + }, + { + "item": "2017-06-06T00:00:00Z", + "count": 10 + }, + { + "item": "2017-06-09T00:00:00Z", + "count": 9 + }, + { + "item": "2017-06-13T00:00:00Z", + "count": 8 + }, + { + "item": "2017-06-16T00:00:00Z", + "count": 7 + }, + { + "item": "2017-06-20T00:00:00Z", + "count": 6 + }, + { + "item": "2017-06-23T00:00:00Z", + "count": 5 + }, + { + "item": "2017-06-27T00:00:00Z", + "count": 4 + }, + { + "item": "2017-06-30T00:00:00Z", + "count": 3 + }, + { + "item": "2017-07-04T00:00:00Z", + "count": 2 + }, + { + "item": "2017-07-07T00:00:00Z", + "count": 1 + } + ], + "smallest": "2002-05-17T00:00:00Z" + }, + "format": { + "view": "date", + "align": "center" + } + }, + { + "id": 313393712, + "name": "Winning Numbers", + "dataTypeName": "text", + "fieldName": "winning_numbers", + "position": 2, + "renderTypeName": "text", + "tableColumnId": 8368516, + "width": 182, + "cachedContents": { + "largest": "46 48 53 61 74", + "non_null": 1584, + "null": 0, + "top": [ + { + "item": "05 14 42 43 58", + "count": 20 + }, + { + "item": "04 23 33 47 53", + "count": 19 + }, + { + "item": "06 29 45 69 73", + "count": 18 + }, + { + "item": "28 34 41 42 47", + "count": 17 + }, + { + "item": "04 35 39 56 72", + "count": 16 + }, + { + "item": "01 04 05 24 30", + "count": 15 + }, + { + "item": "06 13 17 33 60", + "count": 14 + }, + { + "item": "25 26 28 37 56", + "count": 13 + }, + { + "item": "05 20 32 37 67", + "count": 12 + }, + { + "item": "07 42 57 69 72", + "count": 11 + }, + { + "item": "03 05 16 49 75", + "count": 10 + }, + { + "item": "03 16 28 33 37", + "count": 9 + }, + { + "item": "27 51 62 68 75", + "count": 8 + }, + { + "item": "18 22 26 30 44", + "count": 7 + }, + { + "item": "02 15 41 49 63", + "count": 6 + }, + { + "item": "12 20 53 66 74", + "count": 5 + }, + { + "item": "04 21 45 52 57", + "count": 4 + }, + { + "item": "10 38 51 55 64", + "count": 3 + }, + { + "item": "16 39 47 53 71", + "count": 2 + }, + { + "item": "02 09 11 28 60", + "count": 1 + } + ], + "smallest": "01 02 03 12 37" + }, + "format": { + "align": "center" + } + }, + { + "id": 313393713, + "name": "Mega Ball", + "dataTypeName": "text", + "fieldName": "mega_ball", + "position": 3, + "renderTypeName": "text", + "tableColumnId": 8368517, + "width": 138, + "cachedContents": { + "largest": "52", + "non_null": 1584, + "null": 0, + "top": [ + { + "item": "21", + "count": 20 + }, + { + "item": "34", + "count": 19 + }, + { + "item": "03", + "count": 18 + }, + { + "item": "10", + "count": 17 + }, + { + "item": "13", + "count": 16 + }, + { + "item": "36", + "count": 15 + }, + { + "item": "07", + "count": 14 + }, + { + "item": "42", + "count": 13 + }, + { + "item": "09", + "count": 12 + }, + { + "item": "35", + "count": 11 + }, + { + "item": "06", + "count": 10 + }, + { + "item": "25", + "count": 9 + }, + { + "item": "38", + "count": 8 + }, + { + "item": "02", + "count": 7 + }, + { + "item": "44", + "count": 6 + }, + { + "item": "26", + "count": 5 + }, + { + "item": "29", + "count": 4 + }, + { + "item": "19", + "count": 3 + }, + { + "item": "24", + "count": 2 + }, + { + "item": "08", + "count": 1 + } + ], + "smallest": "01" + }, + "format": { + "align": "center" + } + }, + { + "id": 313393714, + "name": "Multiplier", + "dataTypeName": "text", + "fieldName": "multiplier", + "position": 4, + "renderTypeName": "text", + "tableColumnId": 8368518, + "width": 131, + "cachedContents": { + "largest": "05", + "non_null": 681, + "null": 903, + "top": [ + { + "item": "04", + "count": 20 + }, + { + "item": "02", + "count": 19 + }, + { + "item": "03", + "count": 18 + }, + { + "item": "05", + "count": 17 + } + ], + "smallest": "02" + }, + "format": { + "align": "center" + } + } + ], + "grants": [ + { + "inherited": false, + "type": "viewer", + "flags": ["public"] + } + ], + "metadata": { + "custom_fields": { + "Notes": { + "Notes": "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." + }, + "Common Core": { + "Contact Email": "opendata@its.ny.gov", + "Publisher": "State of New York", + "Contact Name": "Open Data NY" + }, + "Dataset Summary": { + "Granularity": "Draw Date", + "Coverage": "Statewide", + "Posting Frequency": "Twice weekly", + "Data Frequency": "Twice weekly", + "Units": "Drawings Unit", + "Dataset Owner": "Lottery", + "Organization": "The New York Lottery", + "Time Period": "05/17/2002 to present", + "Contact Information": "Info@gaming.ny.gov" + }, + "Additional Resources": { + "See Also ": "http://www.megamillions.com/", + "See Also": "http://www.gaming.ny.gov/" + }, + "Dataset Information": { + "Agency": "Gaming Commission, New York State" + } + }, + "renderTypeConfig": { + "visible": { + "table": true + } + }, + "availableDisplayTypes": ["table", "fatrow", "page"], + "jsonQuery": { + "order": [ + { + "ascending": false, + "columnFieldName": "draw_date" + } + ] + }, + "rdfSubject": "0", + "attachments": [ + { + "blobId": "43B923D1-44E4-4220-96F1-D87BCE113E07", + "assetId": "", + "name": "NYSGAM_Mega_Overview.pdf", + "filename": "NYSGAM_Mega_Overview.pdf" + }, + { + "blobId": "BDC2731B-4B54-447D-B1AB-1091E5E5B24E", + "assetId": "", + "name": "NYSGAM_Mega_Winning_Numbers_DataDictionary.pdf", + "filename": "NYSGAM_Mega_Winning_Numbers_DataDictionary.pdf" + } + ] + }, + "owner": { + "id": "xzik-pf59", + "displayName": "NY Open Data", + "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", + "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", + "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", + "roleName": "publisher", + "screenName": "NY Open Data", + "rights": [ + "create_datasets", + "edit_others_datasets", + "edit_nominations", + "approve_nominations", + "moderate_comments", + "manage_stories", + "feature_items", + "change_configurations", + "view_domain", + "view_others_datasets", + "create_pages", + "edit_pages", + "view_goals", + "view_dashboards", + "edit_goals", + "edit_dashboards", + "manage_provenance", + "view_story", + "view_unpublished_story", + "view_all_dataset_status_logs", + "use_data_connectors" + ] + }, + "query": { + "orderBys": [ + { + "ascending": false, + "expression": { + "columnId": 313393711, + "type": "column" + } + } + ] + }, + "rights": ["read"], + "tableAuthor": { + "id": "xzik-pf59", + "displayName": "NY Open Data", + "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", + "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", + "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", + "roleName": "publisher", + "screenName": "NY Open Data", + "rights": [ + "create_datasets", + "edit_others_datasets", + "edit_nominations", + "approve_nominations", + "moderate_comments", + "manage_stories", + "feature_items", + "change_configurations", + "view_domain", + "view_others_datasets", + "create_pages", + "edit_pages", + "view_goals", + "view_dashboards", + "edit_goals", + "edit_dashboards", + "manage_provenance", + "view_story", + "view_unpublished_story", + "view_all_dataset_status_logs", + "use_data_connectors" + ] + }, + "tags": ["mega millions", "new york lottery", "winning", "results"], + "flags": ["default", "restorable", "restorePossibleForType"] } - }, { - "id" : 313393712, - "name" : "Winning Numbers", - "dataTypeName" : "text", - "fieldName" : "winning_numbers", - "position" : 2, - "renderTypeName" : "text", - "tableColumnId" : 8368516, - "width" : 182, - "cachedContents" : { - "largest" : "46 48 53 61 74", - "non_null" : 1584, - "null" : 0, - "top" : [ { - "item" : "05 14 42 43 58", - "count" : 20 - }, { - "item" : "04 23 33 47 53", - "count" : 19 - }, { - "item" : "06 29 45 69 73", - "count" : 18 - }, { - "item" : "28 34 41 42 47", - "count" : 17 - }, { - "item" : "04 35 39 56 72", - "count" : 16 - }, { - "item" : "01 04 05 24 30", - "count" : 15 - }, { - "item" : "06 13 17 33 60", - "count" : 14 - }, { - "item" : "25 26 28 37 56", - "count" : 13 - }, { - "item" : "05 20 32 37 67", - "count" : 12 - }, { - "item" : "07 42 57 69 72", - "count" : 11 - }, { - "item" : "03 05 16 49 75", - "count" : 10 - }, { - "item" : "03 16 28 33 37", - "count" : 9 - }, { - "item" : "27 51 62 68 75", - "count" : 8 - }, { - "item" : "18 22 26 30 44", - "count" : 7 - }, { - "item" : "02 15 41 49 63", - "count" : 6 - }, { - "item" : "12 20 53 66 74", - "count" : 5 - }, { - "item" : "04 21 45 52 57", - "count" : 4 - }, { - "item" : "10 38 51 55 64", - "count" : 3 - }, { - "item" : "16 39 47 53 71", - "count" : 2 - }, { - "item" : "02 09 11 28 60", - "count" : 1 - } ], - "smallest" : "01 02 03 12 37" - }, - "format" : { - "align" : "center" - } - }, { - "id" : 313393713, - "name" : "Mega Ball", - "dataTypeName" : "text", - "fieldName" : "mega_ball", - "position" : 3, - "renderTypeName" : "text", - "tableColumnId" : 8368517, - "width" : 138, - "cachedContents" : { - "largest" : "52", - "non_null" : 1584, - "null" : 0, - "top" : [ { - "item" : "21", - "count" : 20 - }, { - "item" : "34", - "count" : 19 - }, { - "item" : "03", - "count" : 18 - }, { - "item" : "10", - "count" : 17 - }, { - "item" : "13", - "count" : 16 - }, { - "item" : "36", - "count" : 15 - }, { - "item" : "07", - "count" : 14 - }, { - "item" : "42", - "count" : 13 - }, { - "item" : "09", - "count" : 12 - }, { - "item" : "35", - "count" : 11 - }, { - "item" : "06", - "count" : 10 - }, { - "item" : "25", - "count" : 9 - }, { - "item" : "38", - "count" : 8 - }, { - "item" : "02", - "count" : 7 - }, { - "item" : "44", - "count" : 6 - }, { - "item" : "26", - "count" : 5 - }, { - "item" : "29", - "count" : 4 - }, { - "item" : "19", - "count" : 3 - }, { - "item" : "24", - "count" : 2 - }, { - "item" : "08", - "count" : 1 - } ], - "smallest" : "01" - }, - "format" : { - "align" : "center" - } - }, { - "id" : 313393714, - "name" : "Multiplier", - "dataTypeName" : "text", - "fieldName" : "multiplier", - "position" : 4, - "renderTypeName" : "text", - "tableColumnId" : 8368518, - "width" : 131, - "cachedContents" : { - "largest" : "05", - "non_null" : 681, - "null" : 903, - "top" : [ { - "item" : "04", - "count" : 20 - }, { - "item" : "02", - "count" : 19 - }, { - "item" : "03", - "count" : 18 - }, { - "item" : "05", - "count" : 17 - } ], - "smallest" : "02" - }, - "format" : { - "align" : "center" - } - } ], - "grants" : [ { - "inherited" : false, - "type" : "viewer", - "flags" : [ "public" ] - } ], - "metadata" : { - "custom_fields" : { - "Notes" : { - "Notes" : "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." - }, - "Common Core" : { - "Contact Email" : "opendata@its.ny.gov", - "Publisher" : "State of New York", - "Contact Name" : "Open Data NY" - }, - "Dataset Summary" : { - "Granularity" : "Draw Date", - "Coverage" : "Statewide", - "Posting Frequency" : "Twice weekly", - "Data Frequency" : "Twice weekly", - "Units" : "Drawings Unit", - "Dataset Owner" : "Lottery", - "Organization" : "The New York Lottery", - "Time Period" : "05/17/2002 to present", - "Contact Information" : "Info@gaming.ny.gov" - }, - "Additional Resources" : { - "See Also " : "http://www.megamillions.com/", - "See Also" : "http://www.gaming.ny.gov/" - }, - "Dataset Information" : { - "Agency" : "Gaming Commission, New York State" - } - }, - "renderTypeConfig" : { - "visible" : { - "table" : true - } - }, - "availableDisplayTypes" : [ "table", "fatrow", "page" ], - "jsonQuery" : { - "order" : [ { - "ascending" : false, - "columnFieldName" : "draw_date" - } ] - }, - "rdfSubject" : "0", - "attachments" : [ { - "blobId" : "43B923D1-44E4-4220-96F1-D87BCE113E07", - "assetId" : "", - "name" : "NYSGAM_Mega_Overview.pdf", - "filename" : "NYSGAM_Mega_Overview.pdf" - }, { - "blobId" : "BDC2731B-4B54-447D-B1AB-1091E5E5B24E", - "assetId" : "", - "name" : "NYSGAM_Mega_Winning_Numbers_DataDictionary.pdf", - "filename" : "NYSGAM_Mega_Winning_Numbers_DataDictionary.pdf" - } ] - }, - "owner" : { - "id" : "xzik-pf59", - "displayName" : "NY Open Data", - "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", - "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", - "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", - "roleName" : "publisher", - "screenName" : "NY Open Data", - "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] - }, - "query" : { - "orderBys" : [ { - "ascending" : false, - "expression" : { - "columnId" : 313393711, - "type" : "column" - } - } ] - }, - "rights" : [ "read" ], - "tableAuthor" : { - "id" : "xzik-pf59", - "displayName" : "NY Open Data", - "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", - "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", - "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", - "roleName" : "publisher", - "screenName" : "NY Open Data", - "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] - }, - "tags" : [ "mega millions", "new york lottery", "winning", "results" ], - "flags" : [ "default", "restorable", "restorePossibleForType" ] - } - }, - "data" : [ [ 1, "DD63E09E-4222-4E85-B209-4ECB6FEB8B9D", 1, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-17T00:00:00", "15 18 25 33 47", "30", null ] -, [ 2, "CDB0B5A7-F4E1-4D26-97E2-C0643DF22F9C", 2, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-21T00:00:00", "04 28 39 41 44", "09", null ] -, [ 3, "2E7BD2A6-7685-4C03-9DA2-F23490539D0A", 3, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-24T00:00:00", "02 04 32 44 52", "36", null ] -, [ 4, "5A8BEB43-7731-4019-87CA-5674C82123F7", 4, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-28T00:00:00", "06 21 22 29 32", "24", null ] -, [ 5, "AA15F9F3-C9B9-413D-84AA-915039E534D4", 5, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-31T00:00:00", "12 28 45 46 52", "47", null ] -, [ 6, "E322CD76-D127-4524-97D7-073B62D1E2CE", 6, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-04T00:00:00", "03 25 29 30 48", "48", null ] -, [ 7, "6D9D2AF9-D5C9-486A-B522-0F00B9DE27F4", 7, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-07T00:00:00", "14 22 27 28 42", "13", null ] -, [ 8, "D5C31C03-3C01-4089-83ED-D286EC8EB4E0", 8, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-11T00:00:00", "05 06 09 33 44", "52", null ] -, [ 9, "D195047D-520E-43B4-AB07-62468B5F0D7D", 9, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-14T00:00:00", "04 08 32 37 43", "02", null ] -, [ 10, "B70FC384-3AB2-4374-BE6B-19FE0B1B5E60", 10, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-18T00:00:00", "06 13 18 27 45", "18", null ] -, [ 11, "604A874F-7DA9-4CD2-90EB-E6AC68736016", 11, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-21T00:00:00", "13 18 32 39 49", "06", null ] -, [ 12, "BB41E518-5BAD-4AE3-90C3-2BFCB25FA9AF", 12, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-25T00:00:00", "04 18 21 27 41", "50", null ] -, [ 13, "E927B1DB-EE55-4BD2-AD76-23F93A0151AC", 13, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-28T00:00:00", "18 31 49 50 51", "04", null ] -, [ 14, "B676A329-65DC-4084-AABE-6A25C83EFAB3", 14, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-02T00:00:00", "14 22 32 35 44", "06", null ] -, [ 15, "776E4AE3-82C8-48CF-930B-C92A1F571516", 15, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-05T00:00:00", "11 20 26 29 41", "41", null ] -, [ 16, "DD63071A-8491-4ED3-A3AC-18352FA79BED", 16, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-09T00:00:00", "26 29 31 44 48", "40", null ] -, [ 17, "3BD81BA2-8C8F-4A58-AAC2-22D96A0672B7", 17, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-12T00:00:00", "13 19 23 38 47", "15", null ] -, [ 18, "46D285E0-FE04-43C5-A848-B9846D038F5B", 18, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-16T00:00:00", "10 24 35 49 52", "47", null ] -, [ 19, "470FA664-DEB5-49C3-9D6F-A3C187FA6FDF", 19, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-19T00:00:00", "07 15 24 37 46", "09", null ] -, [ 20, "4F3CA620-EA20-4576-B91B-44A4A8C38B1C", 20, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-23T00:00:00", "10 12 29 32 38", "07", null ] -, [ 21, "7326095E-618A-4DD2-8949-BC6BE5358158", 21, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-26T00:00:00", "20 27 28 37 49", "32", null ] -, [ 22, "CFAC1CDB-7D92-4432-97D7-83E5FBDB3D8A", 22, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-30T00:00:00", "02 06 22 27 44", "01", null ] -, [ 23, "A2F33330-714C-4D90-93AF-E003BFDE8459", 23, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-02T00:00:00", "10 16 23 28 31", "07", null ] -, [ 24, "69C74D9F-48C8-4A14-9A1D-BF41DE0AFB20", 24, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-06T00:00:00", "02 06 38 40 50", "14", null ] -, [ 25, "0FB58BD0-9EE5-4018-BE99-65A943A57052", 25, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-09T00:00:00", "07 17 23 43 44", "26", null ] -, [ 26, "F90BA0BD-C520-44C5-B511-6A12634A3CE3", 26, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-13T00:00:00", "03 10 15 18 25", "52", null ] -, [ 27, "A22129D4-F083-4E99-97C7-15E807B2053E", 27, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-16T00:00:00", "22 31 33 44 52", "43", null ] -, [ 28, "0B145B86-D93E-4729-B31F-102C9BA6E2F5", 28, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-20T00:00:00", "02 13 20 23 43", "06", null ] -, [ 29, "E813DDA1-E3CA-4B4D-9FE2-290318C777DA", 29, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-23T00:00:00", "05 19 20 45 48", "44", null ] -, [ 30, "6292DFE4-D4A5-484A-9E52-8D2CDD57346E", 30, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-27T00:00:00", "02 05 11 18 45", "22", null ] -, [ 31, "5F8C47D5-94BF-4744-879A-879576D98824", 31, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-30T00:00:00", "06 31 32 42 51", "42", null ] -, [ 32, "0B608831-82DE-4A5D-B1B5-175B0386B92C", 32, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-03T00:00:00", "08 23 36 49 51", "10", null ] -, [ 33, "0729E99F-EDF4-4CF8-9C7D-538F359A43D6", 33, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-06T00:00:00", "31 39 42 49 51", "35", null ] -, [ 34, "480239A2-53C4-49F8-9B38-0C50CEA74DAA", 34, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-10T00:00:00", "04 06 10 21 25", "21", null ] -, [ 35, "2A460703-1EE5-4863-AD16-AB89FEE47E3C", 35, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-13T00:00:00", "24 32 37 40 51", "12", null ] -, [ 36, "FE0F5025-940B-4B6A-8748-078CE383248C", 36, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-17T00:00:00", "07 10 19 26 44", "05", null ] -, [ 37, "F8B8EB29-240C-4EDD-8D83-767A7144D889", 37, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-20T00:00:00", "01 02 04 05 46", "08", null ] -, [ 38, "B16F1457-6AE7-4F6E-9CD4-2D2A45FAC9AE", 38, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-24T00:00:00", "08 32 34 42 50", "21", null ] -, [ 39, "5B3358D5-CEC6-40A2-B805-27C3C0CEFC46", 39, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-27T00:00:00", "23 27 30 33 36", "05", null ] -, [ 40, "F4B78AC5-E425-4199-8847-378923739E98", 40, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-01T00:00:00", "07 21 30 32 37", "15", null ] -, [ 41, "E38867F4-3486-42B1-BB61-C62BFB44E0DC", 41, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-04T00:00:00", "10 42 43 45 51", "01", null ] -, [ 42, "807547BC-EE1A-4B65-84AD-3CE1E854FC35", 42, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-08T00:00:00", "18 34 43 47 50", "25", null ] -, [ 43, "AC63F7BD-012F-4C12-8661-D4E4117368C1", 43, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-11T00:00:00", "09 11 17 26 41", "29", null ] -, [ 44, "A3E5E55D-900C-494F-9E9F-09406CF28772", 44, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-15T00:00:00", "06 20 27 34 51", "22", null ] -, [ 45, "76FE6E0D-849C-4876-9B35-79B6945D12B9", 45, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-18T00:00:00", "10 31 40 48 51", "38", null ] -, [ 46, "0247E8D6-04A3-4975-BB28-9E5ED39E7013", 46, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-22T00:00:00", "16 20 26 36 48", "32", null ] -, [ 47, "203F46F2-9559-4634-B419-0CF89FC181B5", 47, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-25T00:00:00", "08 15 34 39 47", "04", null ] -, [ 48, "A6901E49-98E3-4C6E-8315-0266D96AEB91", 48, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-29T00:00:00", "09 10 14 41 49", "35", null ] -, [ 49, "DE30E918-423E-42EB-BA73-F657ABCFD8FE", 49, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-01T00:00:00", "05 10 22 23 43", "37", null ] -, [ 50, "6A5EF20C-5F46-4DB1-B77E-01E1D55D805F", 50, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-05T00:00:00", "02 07 16 28 36", "47", null ] -, [ 51, "0DDE170F-9285-4B87-B30A-AD3C7F643585", 51, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-08T00:00:00", "17 19 37 47 48", "14", null ] -, [ 52, "DB2E5ECC-86E3-49E6-BE8D-B36C8B860FAE", 52, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-12T00:00:00", "03 28 45 48 50", "24", null ] -, [ 53, "C9E90F12-A9A5-4650-A6F3-D5D7D0A7ED1C", 53, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-15T00:00:00", "06 17 44 49 51", "39", null ] -, [ 54, "E7969201-469E-43CD-9B96-5B4D9B5535A1", 54, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-19T00:00:00", "07 16 20 40 52", "08", null ] -, [ 55, "270528C5-6420-4FE3-AAA1-8D19B8AFB6E2", 55, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-22T00:00:00", "11 16 19 22 46", "05", null ] -, [ 56, "C15AD01F-1345-43D5-B0AB-769467A17A9B", 56, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-26T00:00:00", "03 21 27 31 43", "34", null ] -, [ 57, "32E2EF7A-2D3B-4AB7-883D-78E2E55D037E", 57, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-29T00:00:00", "08 25 33 42 49", "40", null ] -, [ 58, "2B065668-6258-414B-92E3-4C992B783DDD", 58, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-03T00:00:00", "01 15 19 40 51", "26", null ] -, [ 59, "3974C6B7-6B78-4503-8DD4-7AF43B9D83C6", 59, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-06T00:00:00", "04 08 30 36 52", "48", null ] -, [ 60, "2B12B387-2C45-4544-B2C5-509EC3EF25EA", 60, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-10T00:00:00", "03 05 09 16 31", "28", null ] -, [ 61, "B82357E8-CA56-4079-9CF8-7D4801ECD65B", 61, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-13T00:00:00", "02 13 14 24 46", "34", null ] -, [ 62, "13CB91BC-2F31-42F1-8107-89B322AFE86F", 62, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-17T00:00:00", "03 07 21 29 49", "46", null ] -, [ 63, "22F91DAE-F451-4527-8222-987F1A38D258", 63, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-20T00:00:00", "10 14 41 46 49", "52", null ] -, [ 64, "BD3EC7D2-2C57-4E83-AF26-17710AD6A208", 64, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-24T00:00:00", "08 24 39 43 52", "43", null ] -, [ 65, "D5CCC43B-959F-44B1-B13D-A7E410E4E761", 65, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-27T00:00:00", "11 14 26 30 39", "03", null ] -, [ 66, "E285D142-DA61-4320-A64B-0460BC9AD06E", 66, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-31T00:00:00", "08 21 29 42 51", "34", null ] -, [ 67, "98E41CD9-7A07-4777-99C4-7A3FF99E1843", 67, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-03T00:00:00", "06 14 28 37 46", "03", null ] -, [ 68, "AEEA3F05-8610-47C6-A1DD-8A179E989AE2", 68, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-07T00:00:00", "15 16 28 34 51", "33", null ] -, [ 69, "4E06CBF1-A178-49DD-8633-0BC1B37DA970", 69, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-10T00:00:00", "07 17 18 34 50", "18", null ] -, [ 70, "C0AA6972-7E61-44F6-AB49-00E2F277C475", 70, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-14T00:00:00", "30 39 41 47 52", "27", null ] -, [ 71, "628A1E63-1D14-49BB-AD14-242855DA8215", 71, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-17T00:00:00", "25 26 38 42 46", "27", null ] -, [ 72, "08C611B7-7BF9-4151-BF2F-7813FD7B1CF8", 72, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-21T00:00:00", "04 41 48 50 51", "23", null ] -, [ 73, "46A0C177-42F3-40FD-A28F-1039BA0F4CEF", 73, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-24T00:00:00", "16 31 37 40 41", "05", null ] -, [ 74, "E45F2A0A-C3CB-4F40-9975-154ACD72FA7F", 74, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-28T00:00:00", "13 24 26 32 47", "34", null ] -, [ 75, "3BC338E9-A5E7-4BE9-BBB8-F2BF9D15CEE4", 75, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-31T00:00:00", "01 08 09 19 22", "21", null ] -, [ 76, "A4515DBC-FFBA-409E-8BE8-CF303205D017", 76, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-04T00:00:00", "05 12 16 22 24", "48", null ] -, [ 77, "1522A885-5C53-4246-988D-05F89AA7D40B", 77, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-07T00:00:00", "03 09 20 26 27", "50", null ] -, [ 78, "90677E80-B1E2-4F1F-AA35-AF8916FBBF9F", 78, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-11T00:00:00", "18 20 23 48 49", "10", null ] -, [ 79, "7707C582-F232-41DB-B2AD-482FF443C9E8", 79, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-14T00:00:00", "11 13 19 32 47", "21", null ] -, [ 80, "3F14C37A-54D4-4DCD-B83A-3A7F267441DE", 80, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-18T00:00:00", "12 22 29 42 50", "11", null ] -, [ 81, "5823D1CA-DABD-4A60-980E-83739E6F1CA2", 81, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-21T00:00:00", "21 28 29 40 51", "20", null ] -, [ 82, "FFB2EDFC-6008-43C7-B085-802A10E87EB1", 82, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-25T00:00:00", "02 04 06 37 47", "38", null ] -, [ 83, "0A9ABE29-045E-4F63-9078-BAC824AB6704", 83, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-28T00:00:00", "11 16 26 48 49", "13", null ] -, [ 84, "4EE62AB5-8FA2-4D3A-B4B5-69A1C3EA158A", 84, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-04T00:00:00", "02 26 36 37 41", "22", null ] -, [ 85, "C2E50A67-D861-4786-A68D-C6A44BE85409", 85, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-07T00:00:00", "07 10 32 36 41", "33", null ] -, [ 86, "26C6335D-FB4B-45B0-BE37-E1D1C7775527", 86, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-11T00:00:00", "10 15 26 28 39", "10", null ] -, [ 87, "EE125C30-5C1A-4655-A8EB-2B1CC440DB50", 87, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-14T00:00:00", "03 06 14 31 33", "08", null ] -, [ 88, "E14A17CA-D479-4C2C-8128-464926CBD322", 88, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-18T00:00:00", "13 14 16 29 49", "29", null ] -, [ 89, "D137FA48-2A58-4107-911F-D8DB91D708EA", 89, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-21T00:00:00", "06 17 18 40 50", "08", null ] -, [ 90, "ADE703B0-44B8-4EF3-9251-743D5A9EC566", 90, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-25T00:00:00", "15 21 37 40 42", "07", null ] -, [ 91, "AB8E0352-1F85-4DCE-A9F0-D14E4536B079", 91, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-28T00:00:00", "08 12 21 27 29", "15", null ] -, [ 92, "09359168-05CA-40CC-A9DA-CDEF43B38B53", 92, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-01T00:00:00", "07 12 26 45 47", "36", null ] -, [ 93, "3BE7FEFD-6E77-4543-AED2-C671DFF538B2", 93, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-04T00:00:00", "06 22 28 31 40", "18", null ] -, [ 94, "31DE14F3-C5F3-4570-95E5-BDD9CF730DCF", 94, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-08T00:00:00", "08 10 24 38 45", "06", null ] -, [ 95, "5D649EB0-C1CA-4816-B26B-2B0167EA660F", 95, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-11T00:00:00", "15 26 27 38 39", "46", null ] -, [ 96, "D3506FF7-DF54-441A-8CE5-83F036B839DA", 96, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-15T00:00:00", "16 29 31 39 52", "21", null ] -, [ 97, "E46D4DDD-F39E-483B-9039-5861A76A47F2", 97, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-18T00:00:00", "05 15 24 50 52", "03", null ] -, [ 98, "7E8146F7-D852-40DE-8C52-43BE45BE562E", 98, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-22T00:00:00", "03 09 15 28 52", "07", null ] -, [ 99, "BA9B9A00-E659-425F-9D67-A92211D08CBE", 99, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-25T00:00:00", "01 12 32 48 51", "29", null ] -, [ 100, "58C1D225-815B-4DB8-B948-35A652949308", 100, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-29T00:00:00", "06 08 09 33 35", "32", null ] -, [ 101, "1754387A-A0DF-4168-918F-8168243D07A8", 101, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-02T00:00:00", "02 05 19 32 34", "52", null ] -, [ 102, "9D5762AF-6758-46C0-9171-827486835D08", 102, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-06T00:00:00", "05 14 32 44 52", "24", null ] -, [ 103, "454BC472-EEFE-4ACF-B4F9-168839FD8665", 103, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-09T00:00:00", "01 10 20 22 28", "39", null ] -, [ 104, "A8D661D0-3B6B-440D-B4E0-CD61055A1FD4", 104, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-13T00:00:00", "17 20 47 49 50", "34", null ] -, [ 105, "B7EC9B0F-9AFE-45FD-93B2-7FFCA2ED8EDA", 105, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-16T00:00:00", "05 10 16 26 39", "52", null ] -, [ 106, "1CF96B88-1B48-488A-BD4E-DB23E455812F", 106, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-20T00:00:00", "02 16 36 44 49", "03", null ] -, [ 107, "96DDFF18-6B91-4025-BD0A-8E7BFB8F145C", 107, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-23T00:00:00", "12 20 31 33 50", "17", null ] -, [ 108, "B9DB7AEF-4963-490A-9021-D3F9DF7E44CA", 108, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-27T00:00:00", "10 11 17 20 26", "03", null ] -, [ 109, "FAD4EBFE-8EA9-440F-A64A-6EAA0751142A", 109, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-30T00:00:00", "01 21 28 33 51", "03", null ] -, [ 110, "49420CC9-2969-499C-9682-0922078F53C7", 110, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-03T00:00:00", "04 20 25 29 32", "20", null ] -, [ 111, "DE8AF8DE-54CC-47F3-B3BB-05471B80C030", 111, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-06T00:00:00", "10 14 28 39 40", "35", null ] -, [ 112, "7AEC15E5-8753-42DA-8D8B-D44AE2936037", 112, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-10T00:00:00", "14 15 23 32 52", "37", null ] -, [ 113, "3744E2FD-4467-473F-AD08-615DABDF4BF9", 113, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-13T00:00:00", "12 15 16 20 51", "33", null ] -, [ 114, "4204CF2D-6A71-49DB-A1CC-EC65C7F337DF", 114, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-17T00:00:00", "27 31 34 40 52", "01", null ] -, [ 115, "D1D590C1-A5BC-462B-9004-A666D7301BCD", 115, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-20T00:00:00", "01 02 03 12 37", "35", null ] -, [ 116, "4975BB43-7289-4C7B-8A35-FAF5F1B2DCB5", 116, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-24T00:00:00", "02 26 43 44 47", "31", null ] -, [ 117, "C02F25C6-38D1-4DF6-B6A1-FBFFD94BD95F", 117, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-27T00:00:00", "01 14 20 31 40", "43", null ] -, [ 118, "B417F0A8-9D77-4C4D-9AAC-CCD1CFBDE184", 118, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-01T00:00:00", "28 32 39 45 48", "31", null ] -, [ 119, "AB2B5C72-8FE3-4793-853E-1AE475BB514D", 119, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-04T00:00:00", "06 07 22 37 46", "08", null ] -, [ 120, "142013F7-D91E-44AC-95CC-8DE4C4FB06FC", 120, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-08T00:00:00", "02 09 27 29 35", "18", null ] -, [ 121, "5EC16F46-F61F-438D-9158-380060242B6E", 121, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-11T00:00:00", "01 04 10 16 18", "10", null ] -, [ 122, "10344C0E-E9A9-4272-A637-331A9CE4C387", 122, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-15T00:00:00", "01 26 33 43 48", "22", null ] -, [ 123, "F56CED15-FCFF-4517-A2C8-7304D1539E69", 123, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-18T00:00:00", "29 30 34 38 44", "39", null ] -, [ 124, "26143402-87D4-49D1-88EF-E33AFDC3508E", 124, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-22T00:00:00", "01 05 31 38 47", "03", null ] -, [ 125, "5B59CCDB-E5F1-4AEE-B128-3E8CF145939D", 125, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-25T00:00:00", "33 46 47 50 51", "30", null ] -, [ 126, "AFC67E7B-C793-46F7-9EF1-1C52AA2E94EE", 126, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-29T00:00:00", "01 17 19 32 42", "33", null ] -, [ 127, "E1C1FA86-E45D-4A8E-82F7-9A5BD5C8485C", 127, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-01T00:00:00", "02 11 27 30 33", "46", null ] -, [ 128, "BE4D241F-D6A3-42D5-B82D-C7C5F548BAA7", 128, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-05T00:00:00", "07 32 34 38 44", "49", null ] -, [ 129, "34419EB4-F8CE-4979-BF7A-022B83FE4119", 129, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-08T00:00:00", "06 09 35 40 43", "42", null ] -, [ 130, "D97F5B99-5715-41DB-989F-EE646D0885CE", 130, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-12T00:00:00", "08 11 18 35 51", "26", null ] -, [ 131, "54DD969F-9ADB-409E-8C07-FD104FF3214E", 131, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-15T00:00:00", "01 16 20 41 52", "13", null ] -, [ 132, "C45D583E-DBF7-419A-AC90-92366F3BEC38", 132, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-19T00:00:00", "07 11 24 28 52", "16", null ] -, [ 133, "FB0467F9-610B-4187-B189-A1679E990D91", 133, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-22T00:00:00", "04 19 31 32 51", "31", null ] -, [ 134, "E3BF4E12-0FBC-4324-9FE1-6DA035540AEA", 134, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-26T00:00:00", "09 28 42 44 49", "47", null ] -, [ 135, "4367D263-7EB2-4860-AB00-CEEE46595568", 135, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-29T00:00:00", "08 11 17 42 52", "10", null ] -, [ 136, "703C475D-9209-4E84-B245-E167C7CF15CB", 136, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-02T00:00:00", "22 26 27 32 39", "14", null ] -, [ 137, "87F8EC61-3E18-42A4-9DFD-F0C83B86394D", 137, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-05T00:00:00", "07 09 28 41 42", "19", null ] -, [ 138, "2F14383B-8605-4624-8AD2-5A0FBB27AFB8", 138, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-09T00:00:00", "14 15 30 39 46", "30", null ] -, [ 139, "7EE72B00-2CE6-4041-B9C6-D3E5A30B58CD", 139, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-12T00:00:00", "16 22 23 38 46", "45", null ] -, [ 140, "A9512471-39BE-4381-81A2-16D003C63F06", 140, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-16T00:00:00", "15 20 24 30 46", "42", null ] -, [ 141, "C33B630E-4AEF-471A-B115-ACE4C7ABB4C9", 141, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-19T00:00:00", "13 14 24 34 47", "13", null ] -, [ 142, "90AECD1E-D7A1-4C0C-B40A-A6FEE8C89582", 142, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-23T00:00:00", "05 16 24 49 51", "28", null ] -, [ 143, "10BE1B47-B8F8-4C5D-B864-161897D232A4", 143, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-26T00:00:00", "05 29 32 45 52", "29", null ] -, [ 144, "456D7CA6-FEE6-4DA7-81CA-2DCA2E97A114", 144, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-30T00:00:00", "02 26 37 40 46", "49", null ] -, [ 145, "58CBE626-2263-4622-83A1-172520060895", 145, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-03T00:00:00", "19 21 30 31 52", "51", null ] -, [ 146, "DEBA65E1-7811-402B-B00F-BA8FF5397918", 146, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-07T00:00:00", "01 02 22 40 41", "43", null ] -, [ 147, "6EBA14B3-3CB0-451D-8E30-F8C1478D229C", 147, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-10T00:00:00", "04 19 36 42 48", "13", null ] -, [ 148, "60C042BD-AA8F-438F-BAC3-DA0659C4AAE5", 148, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-14T00:00:00", "18 19 21 33 40", "29", null ] -, [ 149, "E3056AF1-D254-4FF8-AD9E-B519592CD15C", 149, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-17T00:00:00", "14 20 31 46 48", "18", null ] -, [ 150, "3F10D07A-00CD-4903-B1CF-9AE1CDCE0BE9", 150, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-21T00:00:00", "18 34 46 51 52", "38", null ] -, [ 151, "286A4F08-E3C6-43AA-9218-5DE78829445C", 151, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-24T00:00:00", "08 09 16 30 31", "15", null ] -, [ 152, "96DA12DE-9616-409F-9B97-D0EF9B2361F0", 152, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-28T00:00:00", "06 09 20 40 47", "26", null ] -, [ 153, "CF8AF49F-06AB-467D-9465-ECC72ED4FBEB", 153, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-31T00:00:00", "06 12 13 36 46", "03", null ] -, [ 154, "660B8C66-B5F5-43F2-8B48-1D1BD288F397", 154, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-04T00:00:00", "16 24 43 44 45", "22", null ] -, [ 155, "12930383-A5F6-4021-864F-6E6613EFCC02", 155, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-07T00:00:00", "06 18 23 26 30", "31", null ] -, [ 156, "55ACF0F2-4E61-4DD1-9AD0-121B04E8E2D8", 156, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-11T00:00:00", "02 05 17 21 22", "43", null ] -, [ 157, "AFFE3574-5A71-449A-A5A9-89A02CC63B46", 157, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-14T00:00:00", "03 13 31 41 42", "52", null ] -, [ 158, "53838D7A-3459-4B07-A5EA-62D93F98F5A0", 158, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-18T00:00:00", "04 11 25 30 52", "36", null ] -, [ 159, "028A208C-371B-4F58-B771-ADDDE67122A1", 159, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-21T00:00:00", "14 26 28 36 42", "14", null ] -, [ 160, "89F065A8-44C0-4FB4-B16E-A67EE3D12895", 160, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-25T00:00:00", "22 32 37 40 41", "52", null ] -, [ 161, "9328CDE3-5932-40FC-8D93-F4D5F75D4900", 161, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-28T00:00:00", "19 26 31 44 50", "19", null ] -, [ 162, "6EC846B7-104F-4C4A-B8E0-8BF46EA0E67F", 162, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-02T00:00:00", "10 13 24 34 49", "04", null ] -, [ 163, "A3AA23AD-8665-4F09-BADB-96C5D5C54D3A", 163, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-05T00:00:00", "01 12 15 18 44", "42", null ] -, [ 164, "181538CE-E898-498C-897E-13CEF30A9A24", 164, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-09T00:00:00", "04 14 15 24 48", "41", null ] -, [ 165, "19102899-F12B-405C-A594-F212042C01CB", 165, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-12T00:00:00", "09 16 32 45 46", "26", null ] -, [ 166, "00A140E6-B878-453E-9C36-31A84EE9EB95", 166, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-16T00:00:00", "16 24 31 46 47", "47", null ] -, [ 167, "736F2B3D-93B7-4DAE-B6AF-C4C9BF2EE8EE", 167, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-19T00:00:00", "05 10 17 35 39", "38", null ] -, [ 168, "8CA935B2-B5C0-419D-87EF-26F64B6EC006", 168, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-23T00:00:00", "02 13 21 22 49", "52", null ] -, [ 169, "F7C96926-4484-494B-A7C9-676DCA6F1729", 169, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-26T00:00:00", "01 10 17 20 29", "36", null ] -, [ 170, "16F8399E-7FE4-401B-B800-FA7BB56A97DD", 170, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-30T00:00:00", "12 18 21 32 46", "49", null ] -, [ 171, "9ED8E78A-62FB-41C1-870E-8CDFC91C74D6", 171, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-02T00:00:00", "07 08 36 44 48", "09", null ] -, [ 172, "3CF133FE-1FA3-47DD-897C-60481ED06E88", 172, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-06T00:00:00", "07 13 15 25 32", "09", null ] -, [ 173, "22948242-9DDD-43CB-BF72-CF93BD75566E", 173, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-09T00:00:00", "24 32 38 47 49", "12", null ] -, [ 174, "35461A28-871A-479F-953A-E06F8CB4384F", 174, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-13T00:00:00", "03 17 18 21 45", "21", null ] -, [ 175, "7DABD050-F49B-41BF-A9BA-656346A9F38C", 175, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-16T00:00:00", "12 26 41 44 49", "44", null ] -, [ 176, "90A89117-6F30-49F5-A23C-8333F74EAA1E", 176, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-20T00:00:00", "05 07 14 21 45", "36", null ] -, [ 177, "80664E0D-B4D2-49F0-9959-C9AB17CF93AE", 177, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-23T00:00:00", "10 18 33 46 51", "13", null ] -, [ 178, "D0CE2C24-B101-4185-B19B-D158FB47ED3E", 178, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-27T00:00:00", "06 10 20 38 50", "27", null ] -, [ 179, "F01C707E-9960-4E43-A81E-1782647082A3", 179, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-30T00:00:00", "17 28 30 40 51", "44", null ] -, [ 180, "677A8C08-956F-46C4-B6A3-F651B929C471", 180, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-03T00:00:00", "09 21 26 35 41", "17", null ] -, [ 181, "1AC95439-5800-4931-80E8-F93513E15EFA", 181, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-06T00:00:00", "01 06 16 30 49", "13", null ] -, [ 182, "DDE9D7CC-A931-4103-AB9A-DC3DDF728EB5", 182, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-10T00:00:00", "03 07 10 22 32", "23", null ] -, [ 183, "166A3441-00D2-4FEC-BF3B-631E835EA49C", 183, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-13T00:00:00", "14 30 42 43 45", "30", null ] -, [ 184, "1BDB7F1B-A39A-4115-B172-3303380E1DF3", 184, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-17T00:00:00", "02 08 34 36 52", "21", null ] -, [ 185, "E355CFD8-D090-41B8-8811-028D99AB8DA8", 185, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-20T00:00:00", "01 13 20 21 30", "24", null ] -, [ 186, "B999148E-D11E-440B-81DA-789CB7E68DBB", 186, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-24T00:00:00", "06 11 43 49 52", "21", null ] -, [ 187, "1F1CC98F-6F31-4BF7-9145-56C2FF15E6FD", 187, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-27T00:00:00", "02 09 24 36 52", "44", null ] -, [ 188, "A78AF303-06C3-4C18-8CD0-491D985D7A43", 188, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-02T00:00:00", "25 30 35 40 50", "04", null ] -, [ 189, "5D0C62A6-844E-4C80-8981-1EC4862B165A", 189, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-05T00:00:00", "30 40 47 49 52", "03", null ] -, [ 190, "DF590B22-E81F-41A7-9ED0-B792C9CE5249", 190, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-09T00:00:00", "16 23 29 36 51", "49", null ] -, [ 191, "DD89D574-8A08-41C4-A5EE-4E4A5AA07163", 191, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-12T00:00:00", "04 29 32 35 36", "11", null ] -, [ 192, "9F301819-E19D-4D62-8128-AE50FC932F93", 192, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-16T00:00:00", "03 28 45 49 51", "52", null ] -, [ 193, "287B8DFB-0016-4750-86CA-425DB92CA791", 193, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-19T00:00:00", "06 09 14 32 50", "04", null ] -, [ 194, "30AC2580-A52B-4268-A81C-BF18BE48945D", 194, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-23T00:00:00", "12 22 35 39 46", "32", null ] -, [ 195, "151FEC11-E77A-43D6-B5F5-E0B0A884017B", 195, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-26T00:00:00", "08 10 17 37 49", "20", null ] -, [ 196, "F7C95B95-0C63-4A37-AA6B-EA02803C0F1E", 196, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-30T00:00:00", "03 27 31 41 45", "33", null ] -, [ 197, "37183BCC-D528-4EFF-8337-4329057BB4E6", 197, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-02T00:00:00", "08 17 25 46 47", "13", null ] -, [ 198, "D0B36FC0-DF03-4360-8B25-4346181571B2", 198, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-06T00:00:00", "08 17 29 32 39", "49", null ] -, [ 199, "4401F17E-E367-440B-99FB-688A755EA807", 199, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-09T00:00:00", "02 08 10 11 23", "40", null ] -, [ 200, "64E8D621-CD53-43AA-A99E-9469BF1CF78D", 200, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-13T00:00:00", "13 36 39 50 51", "34", null ] -, [ 201, "530AD7EA-F834-4223-8EB1-35148E1329A8", 201, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-16T00:00:00", "06 24 29 42 51", "41", null ] -, [ 202, "CE4121AF-B677-4B9B-9061-E3BC4CCE3CF4", 202, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-20T00:00:00", "12 22 37 46 48", "49", null ] -, [ 203, "D89990AD-D822-43B2-9D98-B4DB4D36BD27", 203, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-23T00:00:00", "08 22 25 47 48", "27", null ] -, [ 204, "8F52A470-2731-451C-A0E9-652338AC2AE5", 204, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-27T00:00:00", "01 10 17 23 35", "45", null ] -, [ 205, "EEEDFFAB-7B51-4B47-9167-604CD2BBCEDC", 205, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-30T00:00:00", "15 21 32 39 50", "34", null ] -, [ 206, "4281178C-8AE5-4EDB-AE19-FFCE603ED9F8", 206, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-04T00:00:00", "03 15 29 37 39", "40", null ] -, [ 207, "FA75A85C-0A84-44B0-BD03-3F6BB05FDE6D", 207, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-07T00:00:00", "14 17 19 44 50", "17", null ] -, [ 208, "3FAD2848-7B00-4795-AAD7-B595FE15B0F2", 208, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-11T00:00:00", "09 25 30 34 37", "30", null ] -, [ 209, "EDE45563-04A9-452C-950C-F90D50C60B7F", 209, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-14T00:00:00", "10 19 32 36 46", "06", null ] -, [ 210, "2CA731BD-CD0F-4CAA-A73D-952783FB2963", 210, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-18T00:00:00", "02 36 44 46 51", "45", null ] -, [ 211, "AB2A1494-C7CD-406A-869E-E91C3B1F9BDB", 211, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-21T00:00:00", "04 20 27 38 49", "31", null ] -, [ 212, "C1BA08C1-1F30-487B-9E16-4E11970807DA", 212, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-25T00:00:00", "05 18 34 36 39", "43", null ] -, [ 213, "7883E5E8-E510-4E95-B2AE-1B3E6322025A", 213, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-28T00:00:00", "13 27 36 39 51", "33", null ] -, [ 214, "BE1D586A-3362-4D15-B51F-52F8B09B3BC7", 214, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-01T00:00:00", "07 16 17 26 48", "15", null ] -, [ 215, "4C803D13-0DF9-4B75-AB36-BFA811A6A44B", 215, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-04T00:00:00", "04 16 18 41 47", "46", null ] -, [ 216, "90CECF2B-081E-46D8-ADF3-DE9AF9FFA85D", 216, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-08T00:00:00", "17 24 29 37 45", "43", null ] -, [ 217, "23D2B616-7C32-44DE-BF92-F965349CD096", 217, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-11T00:00:00", "12 28 36 39 52", "36", null ] -, [ 218, "74430CB6-1A79-4878-963D-E5DFF95B7882", 218, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-15T00:00:00", "18 23 27 29 44", "24", null ] -, [ 219, "3CFF8EC5-D00F-4EBC-8E08-DA91AECA3A61", 219, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-18T00:00:00", "07 10 11 15 51", "23", null ] -, [ 220, "D13D362C-47B9-44A7-948D-2377519ACDAB", 220, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-22T00:00:00", "09 10 17 41 52", "19", null ] -, [ 221, "1B04F369-0AA5-4EC1-9ACE-1B1B1A29949B", 221, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-25T00:00:00", "18 19 29 32 42", "32", null ] -, [ 222, "A4EB48A6-5B93-4F87-937D-3FA8D3D9B13A", 222, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-29T00:00:00", "10 13 19 28 38", "01", null ] -, [ 223, "C973AB92-79E2-4F3B-9532-29B1EF730C15", 223, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-02T00:00:00", "10 25 38 39 50", "12", null ] -, [ 224, "2A8B3B87-C571-44C5-8B72-4D5FC07E3C4E", 224, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-06T00:00:00", "06 07 08 31 48", "19", null ] -, [ 225, "0CB0EEF7-3E07-47C2-834A-CCC22BD96076", 225, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-09T00:00:00", "11 23 25 29 45", "16", null ] -, [ 226, "FFB87A81-D21E-4374-AB89-D0E77B35C578", 226, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-13T00:00:00", "13 31 37 39 52", "38", null ] -, [ 227, "11FB4729-5353-4468-8630-1404816AE321", 227, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-16T00:00:00", "03 21 22 35 44", "07", null ] -, [ 228, "9C3F4245-A499-4EBC-BF96-C29B635CA561", 228, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-20T00:00:00", "06 15 21 32 44", "13", null ] -, [ 229, "C09247AD-299E-4A91-A8CF-C3A0179AB270", 229, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-23T00:00:00", "05 12 25 35 37", "12", null ] -, [ 230, "DA4F201D-2A37-4504-9947-14F8542402D5", 230, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-27T00:00:00", "08 10 11 13 24", "46", null ] -, [ 231, "169DA2A4-95D6-4BCC-AEFD-46C5FA9370B2", 231, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-30T00:00:00", "16 19 21 34 35", "22", null ] -, [ 232, "025397EA-5654-411F-880E-EB525C9D29B9", 232, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-03T00:00:00", "01 02 13 16 22", "31", null ] -, [ 233, "B45BCE14-9723-436A-B1D2-A98665679467", 233, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-06T00:00:00", "04 23 33 38 49", "07", null ] -, [ 234, "9DA11ECD-BC04-4EE6-890B-3B22B141D912", 234, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-10T00:00:00", "18 25 29 31 44", "33", null ] -, [ 235, "29B3B61A-07FB-45E4-8E2B-42BADD6E2B13", 235, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-13T00:00:00", "14 31 41 45 48", "20", null ] -, [ 236, "4D1C8130-8D61-4BE8-820C-335E37212DDC", 236, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-17T00:00:00", "22 23 26 28 36", "10", null ] -, [ 237, "0E60BFAF-3237-4A2F-9EC4-25458A705F26", 237, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-20T00:00:00", "12 17 34 37 39", "34", null ] -, [ 238, "79D77C70-4484-4795-A6B0-D5F87F1C2E74", 238, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-24T00:00:00", "02 05 21 47 50", "46", null ] -, [ 239, "ABB0385F-D6B3-4ED7-A7BE-75C967EFF5F3", 239, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-27T00:00:00", "05 25 38 46 47", "14", null ] -, [ 240, "825BC9DA-7E28-48DF-B5DC-DB33D1F598E8", 240, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-31T00:00:00", "14 15 25 42 44", "03", null ] -, [ 241, "64C6A60E-3E95-495C-BC4A-44C53814E058", 241, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-03T00:00:00", "04 14 34 38 44", "10", null ] -, [ 242, "E6ADBDFD-2F6B-4726-A525-746186368933", 242, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-07T00:00:00", "13 30 36 38 51", "35", null ] -, [ 243, "2F5EDD22-FB98-43CC-811B-9877253B4F8A", 243, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-10T00:00:00", "11 17 27 45 52", "05", null ] -, [ 244, "BCD22E2B-7328-49C3-8CC3-FC63B9A344D7", 244, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-14T00:00:00", "12 35 37 38 50", "49", null ] -, [ 245, "5835A221-CB4A-4785-B15B-84FF74486672", 245, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-17T00:00:00", "03 16 25 38 49", "04", null ] -, [ 246, "1D628B4B-456A-430D-96D3-6F4DE602BCFA", 246, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-21T00:00:00", "01 03 15 19 29", "39", null ] -, [ 247, "22DAACA0-0D4E-4874-A27D-60C726301E87", 247, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-24T00:00:00", "11 26 30 49 50", "52", null ] -, [ 248, "DB3BC6FA-6BD3-48AC-8B65-65B6A9681BE6", 248, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-28T00:00:00", "01 18 39 42 50", "35", null ] -, [ 249, "F9C7E41D-9C9B-49D1-A4E3-15FC77F7F86F", 249, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-01T00:00:00", "08 10 17 24 39", "52", null ] -, [ 250, "52BE51BE-708D-4321-8C26-DE6165AFE04E", 250, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-05T00:00:00", "08 34 39 48 49", "47", null ] -, [ 251, "B4000AC5-B2AE-4BA0-94A2-E044745964AC", 251, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-08T00:00:00", "16 17 21 33 41", "06", null ] -, [ 252, "D191CC09-A515-4BF6-B819-1FE3B2CA14B3", 252, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-12T00:00:00", "04 18 19 39 51", "13", null ] -, [ 253, "A162D2E1-642C-49E6-992A-BB972253B641", 253, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-15T00:00:00", "04 08 24 30 36", "25", null ] -, [ 254, "50754DC2-AFD6-4809-ACFD-2853213FE3DC", 254, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-19T00:00:00", "06 13 19 34 50", "33", null ] -, [ 255, "6BBC3098-B05C-482D-934B-6BF8C7930F01", 255, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-22T00:00:00", "03 07 20 24 43", "36", null ] -, [ 256, "F2BC443C-393C-42AC-97CD-03845FA2AF4B", 256, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-26T00:00:00", "14 25 39 43 49", "27", null ] -, [ 257, "FD20CDD7-751B-45E2-A189-6F06336E4662", 257, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-29T00:00:00", "10 18 26 31 41", "48", null ] -, [ 258, "78F4866D-7BBE-4981-AF76-82B4B1FF4A2E", 258, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-02T00:00:00", "24 32 42 49 50", "03", null ] -, [ 259, "0F1336CF-A403-4F6D-9FE9-6A54EF4F7707", 259, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-05T00:00:00", "03 29 30 41 43", "01", null ] -, [ 260, "F081994F-6D07-4891-BFAF-1AFF8C14CFD4", 260, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-09T00:00:00", "11 20 26 28 52", "07", null ] -, [ 261, "2BD8589C-58C2-4EB1-9AC2-9D7680A25908", 261, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-12T00:00:00", "05 31 33 35 51", "01", null ] -, [ 262, "CEF71225-C2BF-4B92-B680-278C358B7720", 262, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-16T00:00:00", "09 10 27 28 30", "18", null ] -, [ 263, "66BA5BBF-68B0-4AFA-8271-418B80BC6718", 263, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-19T00:00:00", "01 12 24 36 51", "38", null ] -, [ 264, "8509E8A0-2D85-4259-92F6-29B471E9AC37", 264, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-23T00:00:00", "08 30 32 35 51", "17", null ] -, [ 265, "E28F4368-1712-48D1-91F6-26904326CF2D", 265, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-26T00:00:00", "07 09 18 37 43", "34", null ] -, [ 266, "74CF5561-90C2-45C1-979E-F07822F35FC2", 266, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-30T00:00:00", "10 20 22 28 52", "04", null ] -, [ 267, "B41849CC-89C1-483B-949C-6F6A87CD73A0", 267, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-03T00:00:00", "12 32 37 41 52", "13", null ] -, [ 268, "579AAC40-3B30-4E09-87DD-B5A87C2D92A5", 268, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-07T00:00:00", "01 19 22 32 49", "29", null ] -, [ 269, "A3A9B945-6C27-48B4-AC62-8EE5F1FD0A30", 269, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-10T00:00:00", "22 23 37 42 47", "15", null ] -, [ 270, "8926C688-28B7-4534-AFE5-51FE044A3927", 270, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-14T00:00:00", "14 27 32 34 40", "02", null ] -, [ 271, "22DBCDF8-AEB6-4F84-865A-E25E670EE8A6", 271, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-17T00:00:00", "16 34 38 42 47", "01", null ] -, [ 272, "3F07DD76-991F-49F8-BE80-C9D05D80F060", 272, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-21T00:00:00", "07 22 27 31 38", "12", null ] -, [ 273, "41AC3E8D-EC34-4E08-AA87-5918880FE818", 273, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-24T00:00:00", "09 20 22 41 42", "10", null ] -, [ 274, "65F331BB-6BD2-495C-8FCB-E0460922F04E", 274, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-28T00:00:00", "18 29 32 38 43", "50", null ] -, [ 275, "588CD7B2-93DC-4A0F-9437-36D0C339AA9C", 275, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-31T00:00:00", "10 14 45 47 51", "20", null ] -, [ 276, "93825C54-2A7A-434A-AC7B-D60BEA85F53D", 276, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-04T00:00:00", "03 06 07 12 32", "30", null ] -, [ 277, "F4313158-89FD-4820-A8A7-36C5C88ED660", 277, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-07T00:00:00", "02 08 14 15 51", "38", null ] -, [ 278, "E8206E3B-51A1-4B45-A90E-CA2419422CA5", 278, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-11T00:00:00", "02 23 24 35 45", "18", null ] -, [ 279, "D3C97927-9FD1-4A11-BC1F-258ED901202F", 279, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-14T00:00:00", "15 19 24 40 47", "50", null ] -, [ 280, "B76A1E6C-C254-4CB3-AA0B-9E3D49472813", 280, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-18T00:00:00", "10 23 28 39 51", "05", null ] -, [ 281, "AF46D29A-1B37-4EEC-B4A5-E3B21DB5673A", 281, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-21T00:00:00", "17 27 39 40 41", "21", null ] -, [ 282, "929C4BC0-B7DC-458C-9230-1D510E57F709", 282, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-25T00:00:00", "02 10 21 25 45", "22", null ] -, [ 283, "AAF2C647-D464-4385-B732-B49913AF69CB", 283, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-28T00:00:00", "25 31 39 47 52", "43", null ] -, [ 284, "F1AF9F93-409C-4418-BCD8-390EA73B9336", 284, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-01T00:00:00", "03 17 21 42 44", "35", null ] -, [ 285, "DED59622-8D29-4664-8398-9FE120A46A87", 285, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-04T00:00:00", "03 12 14 30 52", "34", null ] -, [ 286, "6301C513-1F63-465C-9077-8FB388B4CEB4", 286, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-08T00:00:00", "08 11 14 23 25", "21", null ] -, [ 287, "B2F3018C-414F-4556-8635-405C6ADA0F10", 287, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-11T00:00:00", "06 14 21 24 50", "28", null ] -, [ 288, "12E0E1A8-1F85-4A57-B608-AD5AB2420CBF", 288, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-15T00:00:00", "03 16 20 21 38", "10", null ] -, [ 289, "82FC585B-BAAD-4725-A657-9646108D5DC4", 289, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-18T00:00:00", "01 19 31 35 42", "34", null ] -, [ 290, "5C140B83-2CEA-4985-B28B-663F7B5BABF3", 290, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-22T00:00:00", "15 18 28 41 45", "27", null ] -, [ 291, "4ADFED3A-9CF7-4D7B-A2CC-5A8F2053B472", 291, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-25T00:00:00", "04 13 37 38 50", "24", null ] -, [ 292, "1D4741B1-E68A-413C-B3BB-C403DB0C17DE", 292, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-01T00:00:00", "01 08 18 39 48", "01", null ] -, [ 293, "74C81011-F2BF-4720-B210-7743B22FBE8D", 293, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-04T00:00:00", "07 10 13 35 39", "21", null ] -, [ 294, "9B80E24B-1B29-406D-B39D-92CE0D9D84F3", 294, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-08T00:00:00", "08 14 15 22 31", "13", null ] -, [ 295, "31DF6251-BA07-45B6-A2F6-2C697D00C48E", 295, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-11T00:00:00", "18 19 31 35 36", "17", null ] -, [ 296, "708C6B64-35A2-42C9-8647-351C4BD30FDC", 296, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-15T00:00:00", "14 26 27 34 44", "27", null ] -, [ 297, "38357837-482D-41DD-AFD4-4AE48DF385CC", 297, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-18T00:00:00", "02 09 28 29 48", "33", null ] -, [ 298, "A7FA5D10-0B55-4947-B720-7C94D3610337", 298, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-22T00:00:00", "06 11 27 37 43", "34", null ] -, [ 299, "434ED7A8-6257-46F4-BBCC-D8A674C356F8", 299, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-25T00:00:00", "11 18 19 45 49", "02", null ] -, [ 300, "6CD696BD-A80A-44B1-B77D-FA1FF25E0F08", 300, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-29T00:00:00", "07 17 18 30 42", "38", null ] -, [ 301, "8CF288D1-0C69-4693-BE90-551A8127B384", 301, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-01T00:00:00", "11 19 28 32 45", "10", null ] -, [ 302, "8012F879-2E18-42E2-8711-19BE5F70B358", 302, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-05T00:00:00", "04 19 45 51 52", "22", null ] -, [ 303, "9B2671A2-C2BB-4A10-8205-F717FE4F741D", 303, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-08T00:00:00", "05 13 17 33 35", "35", null ] -, [ 304, "EDFB6722-641F-4EEC-B91C-EE7FE6E42B8F", 304, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-12T00:00:00", "15 20 43 47 50", "24", null ] -, [ 305, "37447A5F-204E-4912-9E95-5F017C168136", 305, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-15T00:00:00", "25 26 37 39 49", "29", null ] -, [ 306, "8E386A7C-E59E-42AA-B564-ECB8A4C383AA", 306, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-19T00:00:00", "05 06 14 42 47", "03", null ] -, [ 307, "0838C56E-BD1F-4819-9E52-2B4BFFDFDF66", 307, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-22T00:00:00", "23 25 43 46 49", "26", null ] -, [ 308, "559B2A64-C329-4BA1-9EE3-5B56BD11C81F", 308, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-26T00:00:00", "18 22 33 34 42", "16", null ] -, [ 309, "FE0AA6EB-B376-44B9-AB47-E2BA73934853", 309, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-29T00:00:00", "02 05 07 28 46", "21", null ] -, [ 310, "DC01C25F-6D99-46FE-A4A6-860DED5F011C", 310, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-03T00:00:00", "07 17 42 46 52", "47", null ] -, [ 311, "AA1EB43B-E2E0-403D-9D39-6B236AC3DE50", 311, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-06T00:00:00", "07 12 25 50 51", "19", null ] -, [ 312, "54907768-39E9-493F-B79D-54DD04E476F2", 312, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-10T00:00:00", "11 25 38 40 42", "40", null ] -, [ 313, "2EACE389-A6DB-459C-ADC5-AF98F96E5DC3", 313, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-13T00:00:00", "21 23 27 33 39", "08", null ] -, [ 314, "D0011038-F7E8-4ED5-A95E-EB30C075C01F", 314, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-17T00:00:00", "07 09 10 29 44", "17", null ] -, [ 315, "0695D550-C28B-4362-B428-CF02186E3AC6", 315, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-20T00:00:00", "03 06 27 40 44", "09", null ] -, [ 316, "F317FFE5-E091-476C-9ABA-DF9FF531C6D3", 316, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-24T00:00:00", "09 28 39 40 45", "24", null ] -, [ 317, "2CE91E33-2D19-4741-B712-B5A37A853E80", 317, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-27T00:00:00", "07 17 22 34 50", "24", null ] -, [ 318, "272EB917-BC29-44A6-B42F-2B1234927DB8", 318, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-31T00:00:00", "05 13 22 37 38", "11", null ] -, [ 319, "2C09A590-CE5E-4B0E-A216-49D6C1E2ED31", 319, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-03T00:00:00", "04 06 14 28 47", "42", null ] -, [ 320, "13B8AB19-B7DA-4DE8-B1FA-2F7B5C73B852", 320, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-07T00:00:00", "07 14 28 46 47", "25", null ] -, [ 321, "DE848D9F-40C5-4491-AFC6-66337901C5E2", 321, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-10T00:00:00", "14 29 31 37 50", "34", null ] -, [ 322, "B5DDE7DA-82E4-452E-AD3C-D0133EBC32E0", 322, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-14T00:00:00", "01 10 29 48 49", "36", null ] -, [ 323, "2B861970-45DA-4DD9-82B1-35FE957B34DE", 323, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-17T00:00:00", "16 35 40 49 50", "34", null ] -, [ 324, "B3FED69E-5468-4985-B4DC-89D71F6C06B0", 324, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-21T00:00:00", "09 13 40 46 50", "30", null ] -, [ 325, "033A0BD1-1324-4D5D-8409-6EE08E820D5E", 325, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-24T00:00:00", "14 43 44 50 56", "07", null ] -, [ 326, "83865852-9E82-454A-8334-B8E457FD5564", 326, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-28T00:00:00", "02 20 37 43 46", "04", null ] -, [ 327, "9AE7DD16-ABF4-4A5C-B036-1E3767164646", 327, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-01T00:00:00", "14 25 41 42 50", "40", null ] -, [ 328, "FAFFAC8C-2539-4ABC-AC83-F31E4745CD88", 328, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-05T00:00:00", "22 38 48 50 55", "29", null ] -, [ 329, "D031E86C-7BFC-46B8-8434-5ED4A422E3D5", 329, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-08T00:00:00", "09 23 45 48 50", "03", null ] -, [ 330, "A0C46007-15B5-428F-B3F9-65FE8F129069", 330, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-12T00:00:00", "05 17 32 39 53", "36", null ] -, [ 331, "F7E1B862-C554-4C22-BAA4-ACDDAC559AD7", 331, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-15T00:00:00", "09 13 25 36 48", "02", null ] -, [ 332, "C050912D-7E3B-4F8F-9317-51BDD65FE247", 332, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-19T00:00:00", "07 13 48 51 54", "11", null ] -, [ 333, "4DA6DF81-0826-413E-A33B-B149B510AA59", 333, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-22T00:00:00", "07 18 27 35 54", "34", null ] -, [ 334, "C43C9B1C-17E5-4148-BA4B-E5CEB3525941", 334, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-26T00:00:00", "01 10 18 29 55", "08", null ] -, [ 335, "561F43EE-FD24-4908-8042-F110C9D7FC98", 335, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-29T00:00:00", "04 16 23 25 40", "22", null ] -, [ 336, "13D5FF40-2E43-4A28-9FD9-E95FB19FE2AC", 336, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-02T00:00:00", "17 22 39 50 52", "46", null ] -, [ 337, "8B10E7B4-B3C5-4BCF-A62D-5B8BA3DE8355", 337, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-05T00:00:00", "03 05 48 50 53", "04", null ] -, [ 338, "E035770B-AAC3-40BC-AD66-E0D9E64372BC", 338, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-09T00:00:00", "13 35 36 43 52", "05", null ] -, [ 339, "0BC13F6C-2DF9-4834-B3D4-34F4E52DB6A0", 339, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-12T00:00:00", "08 37 38 45 54", "21", null ] -, [ 340, "40D316EA-945A-4584-A463-B7220694F598", 340, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-16T00:00:00", "09 15 20 24 55", "03", null ] -, [ 341, "2ECD8059-BFAD-4A9B-971E-C276188878C7", 341, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-19T00:00:00", "02 13 18 36 46", "36", null ] -, [ 342, "09F9240B-DF24-4C16-B8CB-813998920F64", 342, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-23T00:00:00", "06 07 08 13 40", "12", null ] -, [ 343, "08DC3E31-889F-4A80-9874-1A4FE05CFBF8", 343, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-26T00:00:00", "05 20 38 47 54", "35", null ] -, [ 344, "DFD70689-7341-47CD-B95F-BFE2D51D32C2", 344, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-30T00:00:00", "19 32 42 49 56", "29", null ] -, [ 345, "E5B9F273-A709-4583-8047-6FD74DE24846", 345, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-02T00:00:00", "01 04 14 45 53", "33", null ] -, [ 346, "ACC92702-99C0-4E8D-9C4D-5AF531E3E469", 346, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-06T00:00:00", "01 08 27 31 50", "40", null ] -, [ 347, "FC9EB200-2DF5-41F0-ABA3-AE199C366FF6", 347, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-09T00:00:00", "15 28 43 51 52", "11", null ] -, [ 348, "747A6C12-78D5-4FEF-8B8A-EF0FA8A3BC02", 348, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-13T00:00:00", "13 24 44 48 52", "30", null ] -, [ 349, "E81382F7-026A-4F8A-B94F-A37CCC4DCCD3", 349, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-16T00:00:00", "05 16 41 46 50", "01", null ] -, [ 350, "7ED2D57E-9121-440C-AA0F-C6B024E372EE", 350, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-20T00:00:00", "35 36 40 42 52", "45", null ] -, [ 351, "7328006D-B455-4A06-B68A-89FC788CBAFD", 351, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-23T00:00:00", "06 07 20 41 51", "38", null ] -, [ 352, "A9052160-FF2E-4C2F-8B1F-BFE55B0BD024", 352, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-27T00:00:00", "14 17 26 27 28", "05", null ] -, [ 353, "5A153CDF-3CB1-47D0-8242-899326BD456C", 353, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-30T00:00:00", "01 03 14 30 52", "10", null ] -, [ 354, "FE7185D0-A535-45CB-A6CC-01A0B09D6346", 354, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-04T00:00:00", "12 24 28 29 36", "41", null ] -, [ 355, "0ACAA2C4-D8AD-489E-8969-41FD4F1DA446", 355, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-07T00:00:00", "02 04 23 27 36", "37", null ] -, [ 356, "125F6530-E5F5-46C0-AEAA-67800AB47EBA", 356, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-11T00:00:00", "24 30 42 53 54", "20", null ] -, [ 357, "8AEE764F-10C9-4487-A4A7-BCC7B7432F4D", 357, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-14T00:00:00", "06 20 24 25 34", "44", null ] -, [ 358, "D1B8530E-5CE8-4CF8-9D8A-3E78F6D9711D", 358, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-18T00:00:00", "03 12 16 32 33", "15", null ] -, [ 359, "7FB69C53-5BCC-4612-963F-22A0FBE0D366", 359, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-21T00:00:00", "11 17 28 29 36", "42", null ] -, [ 360, "099CE0AD-F072-4A7F-9E16-24F9E265983B", 360, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-25T00:00:00", "07 12 18 31 55", "30", null ] -, [ 361, "82BD5396-346A-4808-8568-6DF24372709F", 361, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-28T00:00:00", "08 17 25 28 53", "01", null ] -, [ 362, "163D026B-60CB-4B09-B6C4-A7488308DD8E", 362, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-01T00:00:00", "05 18 21 28 36", "20", null ] -, [ 363, "2E75AF04-00FF-4E0E-BF24-395B9FB275E3", 363, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-04T00:00:00", "07 09 41 53 54", "38", null ] -, [ 364, "FC2FA6E3-E70C-4A4B-9F64-0FC75AC6BECF", 364, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-08T00:00:00", "08 16 21 25 27", "16", null ] -, [ 365, "B05C3588-63F4-4918-9A0B-22DC5BF62C32", 365, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-11T00:00:00", "09 14 34 50 51", "40", null ] -, [ 366, "97A88400-902F-44B4-A497-38AAAB38B7C5", 366, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-15T00:00:00", "02 04 05 40 48", "07", null ] -, [ 367, "2D471B32-ABF6-47E8-9B85-DE9BA6052D75", 367, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-18T00:00:00", "08 18 21 42 46", "11", null ] -, [ 368, "E21BBAC7-6A3A-411D-8328-9A3DAC360F70", 368, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-22T00:00:00", "09 22 37 41 43", "30", null ] -, [ 369, "F2DA346E-8664-43BC-8067-BF6F81FD71AD", 369, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-25T00:00:00", "05 25 31 33 34", "41", null ] -, [ 370, "3D150C47-1D71-4F59-9FAB-950EE578B141", 370, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-29T00:00:00", "07 08 47 51 52", "05", null ] -, [ 371, "D6D3E5D9-0AB1-41DD-88B8-70586D133D1E", 371, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-02T00:00:00", "03 12 21 38 44", "45", null ] -, [ 372, "C5BB8996-A321-4F80-BC0D-C2D880384DF1", 372, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-06T00:00:00", "06 10 26 30 33", "16", null ] -, [ 373, "F7F985C7-C509-4D77-B34A-FE8512F24EB3", 373, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-09T00:00:00", "14 15 31 32 43", "20", null ] -, [ 374, "90F85C5C-CDB9-42BE-AC2B-A7ADC515BAB2", 374, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-13T00:00:00", "09 10 12 22 41", "04", null ] -, [ 375, "F2ED349C-1FE5-4F23-BF41-D9D0CF91D948", 375, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-16T00:00:00", "14 25 26 31 56", "17", null ] -, [ 376, "156ED523-B9AE-4F78-9EA6-8AB545668B5C", 376, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-20T00:00:00", "06 20 23 40 56", "36", null ] -, [ 377, "16299179-341A-48BF-B14D-4F78593B59CA", 377, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-23T00:00:00", "10 37 39 49 54", "08", null ] -, [ 378, "F3F9CA26-835C-4F9F-AE53-9870DF0E82CB", 378, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-27T00:00:00", "11 24 27 49 55", "23", null ] -, [ 379, "E3B45416-2CE2-4FB7-9226-339ABDCF13D3", 379, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-30T00:00:00", "14 20 25 40 44", "37", null ] -, [ 380, "29E99521-1745-4BEA-8379-32E8A3B4EB71", 380, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-03T00:00:00", "15 19 20 32 38", "21", null ] -, [ 381, "23A4CE2F-D83A-4A90-9099-B224EDFCBD09", 381, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-06T00:00:00", "08 11 28 37 53", "12", null ] -, [ 382, "0BDE11E7-43EB-45A4-A01C-D8E922694253", 382, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-10T00:00:00", "07 27 32 37 38", "30", null ] -, [ 383, "167D5629-9E1C-4611-B2AE-2315FA48DCE5", 383, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-13T00:00:00", "05 21 27 44 53", "36", null ] -, [ 384, "0CA5B072-5559-4DA7-854A-560FAB3A1F9A", 384, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-17T00:00:00", "24 32 37 39 40", "44", null ] -, [ 385, "0359B182-D50B-48FF-A09F-D183DFD79088", 385, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-20T00:00:00", "18 22 28 44 53", "46", null ] -, [ 386, "D67E15A1-07AA-4C5F-83D3-E48B6CD1036C", 386, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-24T00:00:00", "31 34 36 51 55", "04", null ] -, [ 387, "CBE69F65-752B-4F95-A6E0-3D352BD3D73F", 387, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-27T00:00:00", "02 07 08 18 29", "46", null ] -, [ 388, "D9F7E97F-227D-443B-8981-FA36E63E6BE4", 388, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-31T00:00:00", "01 35 53 54 56", "44", null ] -, [ 389, "1064AE8D-A39B-4902-B11F-DA839EE81966", 389, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-03T00:00:00", "29 31 32 41 52", "42", null ] -, [ 390, "5C5F012B-1868-4006-BDF1-0C77C004B068", 390, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-07T00:00:00", "02 16 25 30 48", "26", null ] -, [ 391, "C8BCF21E-FA5E-46D6-9D6D-47E33673FD84", 391, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-10T00:00:00", "24 39 40 43 46", "02", null ] -, [ 392, "7B16B91E-5DAD-429E-B56A-308A7CC4F3C2", 392, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-14T00:00:00", "27 36 43 49 54", "33", null ] -, [ 393, "2C55BB3E-91D2-4E1A-90F9-99DBF303C292", 393, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-17T00:00:00", "16 25 31 43 46", "28", null ] -, [ 394, "DFF595AC-6BA2-400E-AFEA-684B14DB0ED7", 394, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-21T00:00:00", "14 23 27 36 45", "36", null ] -, [ 395, "D26EBE63-5EF4-428D-A3B9-E899335A7BF8", 395, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-24T00:00:00", "03 05 12 16 34", "27", null ] -, [ 396, "B75EBDD7-F67B-43ED-A426-204C3005ACBB", 396, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-28T00:00:00", "02 04 35 36 48", "22", null ] -, [ 397, "813AA2A0-653B-4DEA-95BC-842A99C81DE7", 397, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-03T00:00:00", "25 29 38 39 46", "04", null ] -, [ 398, "527704D6-2E02-457B-8149-F47FC0C8EB5E", 398, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-07T00:00:00", "15 27 36 38 42", "32", null ] -, [ 399, "2A55196C-4775-443A-B52F-48221944909B", 399, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-10T00:00:00", "04 17 18 51 54", "31", null ] -, [ 400, "DB2E7BA4-1A59-4A27-969E-2177D00567A7", 400, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-14T00:00:00", "27 28 30 42 50", "22", null ] -, [ 401, "7D7FB09E-BFED-4940-BE40-800C9B8E72DA", 401, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-17T00:00:00", "08 11 23 48 52", "05", null ] -, [ 402, "3CE93466-1F2F-4464-AD81-EA76817D9D1E", 402, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-21T00:00:00", "04 16 17 28 31", "08", null ] -, [ 403, "0A400896-D7C6-4572-96D9-81D24A122EA5", 403, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-24T00:00:00", "01 02 17 47 49", "19", null ] -, [ 404, "94CA0CC7-8204-4018-B709-397559907294", 404, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-28T00:00:00", "14 18 35 39 49", "14", null ] -, [ 405, "F745FFDD-883A-4C3D-9360-71F3A83E00FD", 405, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-31T00:00:00", "04 07 19 50 52", "15", null ] -, [ 406, "29EAB288-7556-4FCF-8189-080D1B2A59C0", 406, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-04T00:00:00", "09 25 48 51 56", "07", null ] -, [ 407, "CD488BBE-ACB3-40B0-BB7E-271B098F29DA", 407, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-07T00:00:00", "01 18 31 46 52", "37", null ] -, [ 408, "1DA1A60A-B1C2-426E-8852-9D39DBAEA790", 408, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-11T00:00:00", "02 12 45 46 56", "20", null ] -, [ 409, "93D317B3-E6EC-42D8-81AF-F2647E15F1C5", 409, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-14T00:00:00", "08 10 18 29 33", "10", null ] -, [ 410, "BA283EA9-2AD9-4E97-BB8A-3AC557F746DA", 410, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-18T00:00:00", "13 14 25 34 50", "06", null ] -, [ 411, "F3E9328B-F020-4C2E-AA17-08D20F513104", 411, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-21T00:00:00", "02 04 07 27 41", "04", null ] -, [ 412, "40BCF77C-5836-4312-A4DB-B307424B6DDE", 412, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-25T00:00:00", "01 20 32 37 39", "09", null ] -, [ 413, "25AEE37E-66F3-4507-86CB-1A787D01CD22", 413, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-28T00:00:00", "16 29 32 36 55", "12", null ] -, [ 414, "0D65468E-A001-4953-B9D7-3673D895BA94", 414, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-02T00:00:00", "07 11 22 27 31", "33", null ] -, [ 415, "3E43C068-9C2A-4A98-BD64-67B25F5385E9", 415, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-05T00:00:00", "08 20 39 53 55", "10", null ] -, [ 416, "196933EB-DC89-4F74-9489-4ADB3F0CB2D1", 416, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-09T00:00:00", "07 15 24 43 44", "22", null ] -, [ 417, "88B1ECC7-7F6D-46B3-B60A-8B2FE334AC29", 417, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-12T00:00:00", "06 36 39 45 52", "45", null ] -, [ 418, "69578B1A-F682-478A-B16F-786D601FB0D1", 418, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-16T00:00:00", "07 24 40 48 50", "15", null ] -, [ 419, "BA8F27F9-D6C8-4965-AFC6-C307D9377569", 419, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-19T00:00:00", "05 12 31 51 56", "01", null ] -, [ 420, "FDCA3825-57D6-4B86-8BFB-65FF69D2F961", 420, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-23T00:00:00", "17 21 28 48 54", "01", null ] -, [ 421, "DD8D9CD4-0283-4839-87A0-D018E4E994AE", 421, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-26T00:00:00", "12 14 20 47 48", "24", null ] -, [ 422, "287A016B-D049-48B5-AA90-BD3215D46D66", 422, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-30T00:00:00", "02 13 28 34 45", "36", null ] -, [ 423, "8FF174E9-FC60-48BE-832B-F1C2F283EC7D", 423, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-02T00:00:00", "03 10 18 36 38", "41", null ] -, [ 424, "74BD27FB-1F58-4935-9B0F-201B7394009D", 424, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-06T00:00:00", "05 29 35 52 53", "09", null ] -, [ 425, "9E40B131-700A-4BF5-924D-372AA99C2EEC", 425, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-09T00:00:00", "08 17 18 26 47", "37", null ] -, [ 426, "91BC5C38-BEFD-450E-B343-CF9C22ED4D37", 426, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-13T00:00:00", "01 20 23 24 33", "29", null ] -, [ 427, "26FA79C8-F2D2-4D0E-B2B8-592180AD8EA6", 427, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-16T00:00:00", "27 30 36 38 45", "13", null ] -, [ 428, "4C517676-2FE5-4574-8D14-60D2A7A470EA", 428, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-20T00:00:00", "11 21 37 53 54", "12", null ] -, [ 429, "137CCAD7-CCDD-47CF-8526-99BF3D6E13B6", 429, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-23T00:00:00", "13 17 24 34 56", "24", null ] -, [ 430, "3172D8F0-00D6-41EC-A33C-39DFACD85C54", 430, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-27T00:00:00", "02 14 20 29 44", "32", null ] -, [ 431, "721F7AD5-4110-4BA1-A481-4B872481540C", 431, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-30T00:00:00", "20 40 46 48 54", "27", null ] -, [ 432, "A3BCAF71-6B04-46AB-9DAF-C6F2AFCDDB22", 432, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-04T00:00:00", "09 15 31 42 45", "41", null ] -, [ 433, "3F716DED-DCC8-4F23-8654-A4AA0CE1F7BB", 433, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-07T00:00:00", "07 15 27 46 56", "39", null ] -, [ 434, "69D46A31-8B5E-46F0-BCFC-64804619BB0D", 434, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-11T00:00:00", "05 14 34 36 52", "42", null ] -, [ 435, "B0FC844B-8408-4DE9-8B9D-036CEA4A52D6", 435, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-14T00:00:00", "13 25 26 28 56", "39", null ] -, [ 436, "B9632DEA-2612-48E7-BFFF-59CCF6D7B195", 436, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-18T00:00:00", "12 13 29 49 52", "20", null ] -, [ 437, "AA05FDD3-F33B-445C-81D0-417531FFCAEE", 437, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-21T00:00:00", "18 26 35 36 43", "24", null ] -, [ 438, "B95A74B3-8357-48CA-81A6-08378A45C791", 438, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-25T00:00:00", "07 21 24 41 51", "10", null ] -, [ 439, "000D3A35-CA16-49E7-9989-E533E90F9B86", 439, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-28T00:00:00", "02 13 23 32 35", "04", null ] -, [ 440, "8BE39A1F-6479-4904-94C5-17761E012833", 440, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-01T00:00:00", "14 29 32 43 49", "14", null ] -, [ 441, "5D1B112D-E76B-4363-84E3-8F30AB59A225", 441, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-04T00:00:00", "02 24 31 50 55", "44", null ] -, [ 442, "FF4C81A1-0886-492A-A7E6-7E811B7618BE", 442, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-08T00:00:00", "01 05 13 18 33", "30", null ] -, [ 443, "6914B454-3487-4CF9-A7B3-E71B73DFC240", 443, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-11T00:00:00", "14 16 38 40 49", "29", null ] -, [ 444, "FD7B124A-D7D9-4769-8293-EE137100046F", 444, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-15T00:00:00", "10 12 22 44 48", "16", null ] -, [ 445, "1310D87A-CE78-4DEF-8C82-7D5C4F107A78", 445, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-18T00:00:00", "05 12 13 46 50", "10", null ] -, [ 446, "64AF74E8-B273-406F-A65B-21FF45A6EE97", 446, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-22T00:00:00", "03 04 05 07 36", "16", null ] -, [ 447, "FD99C149-C6DF-4716-9303-6CAE04DBC69B", 447, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-25T00:00:00", "17 24 35 46 54", "33", null ] -, [ 448, "4828E912-24A4-4EE2-A1EC-F4DD9C4D34F4", 448, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-29T00:00:00", "15 25 37 38 52", "04", null ] -, [ 449, "876BD770-0F17-4A55-9D1D-859ED0E71E43", 449, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-01T00:00:00", "05 06 51 53 55", "12", null ] -, [ 450, "3B501C09-05A2-4D12-988F-89CB2F762C24", 450, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-05T00:00:00", "01 32 36 42 53", "04", null ] -, [ 451, "81E6F31E-DF5C-43F6-A728-05585313E815", 451, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-08T00:00:00", "09 17 34 52 53", "02", null ] -, [ 452, "6EA79B46-5FC5-4A69-9233-944BAD07ADD7", 452, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-12T00:00:00", "03 16 25 30 44", "42", null ] -, [ 453, "009A90F0-5559-4268-987F-F6B82ECE62E8", 453, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-15T00:00:00", "06 26 33 39 55", "01", null ] -, [ 454, "E4BE828E-96E8-49C9-8CD3-22D163F8CA95", 454, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-19T00:00:00", "02 19 44 45 56", "43", null ] -, [ 455, "64115699-83B2-4A2F-AFCD-DB780FBF6EA4", 455, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-22T00:00:00", "07 12 17 22 43", "16", null ] -, [ 456, "F292063C-3138-4F0F-89CB-46D26C3A0458", 456, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-26T00:00:00", "03 06 38 42 45", "30", null ] -, [ 457, "012D91E0-729E-4072-B587-0BE7EAE01E69", 457, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-29T00:00:00", "03 25 43 45 55", "40", null ] -, [ 458, "6118DFB2-98F1-4083-917F-BEAB59C88D79", 458, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-03T00:00:00", "06 19 32 33 40", "39", null ] -, [ 459, "FEC3AA53-F3BC-4C7E-BFFD-094D134652ED", 459, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-06T00:00:00", "01 11 20 21 46", "18", null ] -, [ 460, "F59A1C13-3CA5-494D-92DE-A0D739B44578", 460, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-10T00:00:00", "14 30 35 40 43", "02", null ] -, [ 461, "261C39D5-E5FD-4454-A417-242D7D090B55", 461, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-13T00:00:00", "24 27 42 47 50", "08", null ] -, [ 462, "B36A2C2B-9501-4AF9-9754-8CE90B5BB31D", 462, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-17T00:00:00", "06 18 20 28 38", "37", null ] -, [ 463, "A7753123-848A-4066-A8AA-074FED6A5805", 463, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-20T00:00:00", "09 13 23 29 54", "34", null ] -, [ 464, "92DBCCC3-793A-427F-98BA-BBFECD7D078F", 464, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-24T00:00:00", "05 25 41 48 51", "35", null ] -, [ 465, "C5C9129D-0DDD-493C-BF76-FA9FF1B6918E", 465, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-27T00:00:00", "15 22 26 30 32", "31", null ] -, [ 466, "57CBB0CC-1645-46DB-9309-CC7BADDA9930", 466, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-31T00:00:00", "05 34 40 45 46", "21", null ] -, [ 467, "E35554AE-5653-4D27-949A-AEC4E3F061C9", 467, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-03T00:00:00", "08 10 22 25 55", "22", null ] -, [ 468, "2BEDBC19-AD7E-4DB0-806E-DFC3AC9695E5", 468, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-07T00:00:00", "13 22 33 51 52", "42", null ] -, [ 469, "A314EFBF-2B15-4FE9-B159-6AFAFE253953", 469, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-10T00:00:00", "11 42 52 53 55", "28", null ] -, [ 470, "3FE5905D-6A77-4DA2-BD41-97A8C35EA4A1", 470, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-14T00:00:00", "09 20 24 25 36", "23", null ] -, [ 471, "659F5995-2816-4F6D-B416-CA6202070B2F", 471, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-17T00:00:00", "05 19 25 30 50", "42", null ] -, [ 472, "596964AA-A8EC-4EF1-ABE1-88CEB210AC0F", 472, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-21T00:00:00", "07 13 20 42 47", "09", null ] -, [ 473, "65E180A1-4FDA-45E5-8527-D9CB3B9E06E9", 473, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-24T00:00:00", "14 35 40 47 48", "35", null ] -, [ 474, "5C995EB5-EDEA-4321-A9C3-56800D99F0BB", 474, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-28T00:00:00", "07 14 24 41 56", "07", null ] -, [ 475, "D130CD7B-53CD-472A-96DD-4D212DA0A53C", 475, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-01T00:00:00", "16 22 23 37 53", "35", null ] -, [ 476, "12FF9A05-37ED-4075-9439-04420AB4FCAB", 476, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-05T00:00:00", "06 09 13 43 46", "45", null ] -, [ 477, "2B26456D-4358-48A2-9B1B-DAEF68AB717B", 477, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-08T00:00:00", "01 15 29 32 45", "08", null ] -, [ 478, "1E3EDF59-31DC-4911-BB35-7D976DD611A9", 478, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-12T00:00:00", "20 30 31 35 49", "23", null ] -, [ 479, "C61F4D38-2EDD-4B77-9E83-2D02D4832CF7", 479, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-15T00:00:00", "06 07 17 28 40", "39", null ] -, [ 480, "E396FD08-5E4E-4150-BF25-753BF3B5338A", 480, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-19T00:00:00", "09 32 37 42 48", "07", null ] -, [ 481, "63BBEEBB-8051-4F72-AF25-8082D26CE558", 481, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-22T00:00:00", "05 12 15 25 34", "43", null ] -, [ 482, "0BDAA512-21EC-4665-8093-EF7813E19536", 482, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-26T00:00:00", "07 12 25 44 53", "03", null ] -, [ 483, "A2C16873-A6C5-4DD5-BED8-0774D4C51A6E", 483, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-29T00:00:00", "03 04 10 39 50", "29", null ] -, [ 484, "80DFE370-F29E-4FC6-ADD9-D2E1C6F285DF", 484, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-02T00:00:00", "09 10 38 51 53", "01", null ] -, [ 485, "1F4F9085-9D5D-4154-A7C9-07CC14B1360F", 485, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-05T00:00:00", "02 12 44 46 51", "06", null ] -, [ 486, "1C804255-DD48-459F-80B2-9A2A51F000E2", 486, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-09T00:00:00", "07 11 26 38 54", "13", null ] -, [ 487, "F2168D7F-692D-49E8-9BBD-9BAF919A429C", 487, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-12T00:00:00", "12 14 26 40 42", "22", null ] -, [ 488, "82A04EF2-AFDB-43AB-9AD5-35B5A52B0C7C", 488, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-16T00:00:00", "04 08 15 33 52", "10", null ] -, [ 489, "87CD8B58-A34F-447F-B738-338FAEA4ADA6", 489, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-19T00:00:00", "04 28 30 31 35", "17", null ] -, [ 490, "DFC10A63-3A94-4758-B7AE-72783F703352", 490, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-23T00:00:00", "03 05 15 26 53", "35", null ] -, [ 491, "A70BB32D-39D8-4140-8388-8FA026770676", 491, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-26T00:00:00", "16 17 36 49 54", "14", null ] -, [ 492, "63210A51-5D26-4FC2-BEFB-C39A41B76188", 492, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-30T00:00:00", "14 18 44 52 56", "25", null ] -, [ 493, "357413EB-414B-45C1-BE01-6C7811EFD331", 493, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-02T00:00:00", "22 33 35 40 53", "15", null ] -, [ 494, "B0C7B36A-3BC6-4A2D-B61B-CF6D59A2DE5D", 494, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-06T00:00:00", "16 21 35 36 46", "38", null ] -, [ 495, "44CD2B3C-DD2A-497D-9878-F4B724DF0C4F", 495, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-09T00:00:00", "32 39 46 48 49", "41", null ] -, [ 496, "7AE39468-C494-4058-BA75-4DC65DD0B14C", 496, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-13T00:00:00", "03 09 24 29 41", "41", null ] -, [ 497, "87D2E024-815A-486D-854E-3AE38F88E25B", 497, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-16T00:00:00", "17 35 40 46 48", "41", null ] -, [ 498, "29043663-7DA3-4E24-B131-FFD830CB4559", 498, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-20T00:00:00", "01 09 26 46 51", "11", null ] -, [ 499, "F1966050-1B54-4E51-BA1D-01D4885FF55A", 499, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-23T00:00:00", "03 18 21 38 50", "43", null ] -, [ 500, "CDC0E58D-A787-443D-B091-4C7B526B428E", 500, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-27T00:00:00", "18 31 44 45 48", "18", null ] -, [ 501, "027B2C00-9225-4D2C-BD32-40D24F18857C", 501, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-02T00:00:00", "14 21 33 35 51", "43", null ] -, [ 502, "3CCD3436-51C5-4009-8F83-0B6E1A2D9621", 502, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-06T00:00:00", "16 22 29 39 42", "20", null ] -, [ 503, "7EA1C45C-B586-4EE4-B220-2148621ABDF8", 503, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-09T00:00:00", "10 13 25 42 43", "30", null ] -, [ 504, "A328A035-D9CF-4A90-95F9-9E2B40EBA016", 504, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-13T00:00:00", "07 11 16 38 49", "35", null ] -, [ 505, "33DCB90F-A257-49AE-9BB5-C856E3519522", 505, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-16T00:00:00", "17 25 36 40 43", "09", null ] -, [ 506, "21F3B240-0B45-4F71-9511-B94C977B4A21", 506, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-20T00:00:00", "07 21 46 49 55", "15", null ] -, [ 507, "11C3082B-C804-4EB8-9B39-67548771671E", 507, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-23T00:00:00", "18 21 35 51 53", "36", null ] -, [ 508, "32E540A6-D425-404E-B2AD-0FEEC35D2F91", 508, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-27T00:00:00", "18 25 34 35 42", "06", null ] -, [ 509, "E6A20F49-B5F1-472B-BB7D-B06DD124AEFA", 509, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-30T00:00:00", "15 23 37 48 53", "22", null ] -, [ 510, "625A06C6-8963-4251-A51B-3229701ED972", 510, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-03T00:00:00", "16 26 33 34 46", "38", null ] -, [ 511, "CCDC57D2-0595-410A-8F16-5658A0715D7C", 511, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-06T00:00:00", "24 32 34 36 39", "06", null ] -, [ 512, "533647E4-C13D-4E9B-BAD2-3A3884B4BBC1", 512, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-10T00:00:00", "07 15 16 19 28", "10", null ] -, [ 513, "00A3835B-5630-4CE3-884E-8A721832B485", 513, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-13T00:00:00", "11 14 21 25 26", "33", null ] -, [ 514, "B05BDA43-8F9E-4780-A687-31592ADF193C", 514, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-17T00:00:00", "01 04 11 31 47", "37", null ] -, [ 515, "B0D1A237-A2D2-49DB-942F-04CF6403DDAF", 515, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-20T00:00:00", "01 09 10 23 53", "40", null ] -, [ 516, "CF0C9918-32B2-43E0-B1AA-BC8836DD8AAF", 516, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-24T00:00:00", "08 10 35 36 43", "14", null ] -, [ 517, "4860C387-45D4-43C8-9513-AA13684C6E55", 517, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-27T00:00:00", "05 07 26 38 56", "15", null ] -, [ 518, "8BBFFBDD-860A-46F4-9E37-899211A77BDE", 518, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-01T00:00:00", "11 16 31 52 53", "42", null ] -, [ 519, "9AA8796F-0E60-41D3-BEA8-DC65B72C0F9F", 519, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-04T00:00:00", "04 09 20 45 55", "34", null ] -, [ 520, "327324DA-C32B-4FC1-A2C8-83442FC0B4DC", 520, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-08T00:00:00", "16 24 41 43 54", "36", null ] -, [ 521, "590CB81B-44B8-4275-BCE8-18C4D8F912BF", 521, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-11T00:00:00", "28 30 33 48 54", "25", null ] -, [ 522, "CB538DA0-BE56-4F97-8806-353E9E13934C", 522, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-15T00:00:00", "06 13 42 46 56", "42", null ] -, [ 523, "71BCFD52-BC6E-4E35-ACA1-8F10909971D4", 523, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-18T00:00:00", "13 23 24 30 44", "05", null ] -, [ 524, "919DB6FB-31C9-4682-878E-13CA05A4655B", 524, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-22T00:00:00", "02 07 11 22 36", "35", null ] -, [ 525, "305E9588-E64D-4C2D-A4EF-E5B78518793B", 525, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-25T00:00:00", "10 14 22 42 43", "01", null ] -, [ 526, "4719B10B-AD10-4D50-8D46-A0CAE5F605C8", 526, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-29T00:00:00", "02 24 44 51 54", "07", null ] -, [ 527, "1A71051C-3A19-4D8C-9385-479010DB22F9", 527, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-01T00:00:00", "12 19 29 32 48", "09", null ] -, [ 528, "F9374DC6-B1DD-46B1-85FC-D5CB57642F63", 528, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-05T00:00:00", "27 35 38 49 56", "15", null ] -, [ 529, "D7CA0C49-B9CB-4112-B9EB-7F8FCFAB6D3D", 529, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-08T00:00:00", "06 26 29 31 39", "31", null ] -, [ 530, "0227FE28-D804-4BD3-A030-4BB9FE984784", 530, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-12T00:00:00", "03 13 19 31 50", "21", null ] -, [ 531, "21A96721-FEC2-4209-A12E-58DEB0C25565", 531, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-15T00:00:00", "01 05 16 26 30", "21", null ] -, [ 532, "8B7CDDBD-DE8F-43C1-8432-4749207D9C90", 532, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-19T00:00:00", "05 16 31 49 54", "19", null ] -, [ 533, "40A021A2-FB3D-4F3E-8B75-53906F89BE63", 533, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-22T00:00:00", "11 14 21 24 31", "23", null ] -, [ 534, "219E423B-F4F8-4FED-8F15-DB0BAFF558B6", 534, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-26T00:00:00", "04 10 20 29 45", "21", null ] -, [ 535, "17E57B87-08C2-4C62-BDFD-23B8EA26B4D8", 535, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-29T00:00:00", "01 17 40 51 52", "07", null ] -, [ 536, "32A17E56-EBE7-4251-BD2A-D19BE4CB117D", 536, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-03T00:00:00", "21 35 37 39 40", "35", null ] -, [ 537, "E8DD110B-0D8B-408D-A8EA-7ACA299EA6C5", 537, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-06T00:00:00", "03 09 12 25 47", "37", null ] -, [ 538, "E251BA7F-0AFF-4C05-A888-BE5DB36870C8", 538, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-10T00:00:00", "19 24 30 34 56", "19", null ] -, [ 539, "8693C58E-FFB4-4391-89A4-CA39898C188B", 539, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-13T00:00:00", "07 39 41 48 53", "21", null ] -, [ 540, "FCA45A5C-8B1B-48AD-A423-9E6ACBD9FA39", 540, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-17T00:00:00", "16 30 38 46 51", "05", null ] -, [ 541, "6F819E39-2FC5-47B6-81BB-C07A9EE6AD78", 541, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-20T00:00:00", "06 13 30 41 52", "26", null ] -, [ 542, "935E5F56-B297-4BEF-AF4E-798BD16FB200", 542, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-24T00:00:00", "08 17 20 23 50", "17", null ] -, [ 543, "DCCBD8F4-950D-4DD4-8625-8CD371BF0537", 543, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-27T00:00:00", "07 12 35 54 55", "02", null ] -, [ 544, "C7946459-75F4-4873-B7A9-4B2D4117C172", 544, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-31T00:00:00", "05 18 37 39 43", "42", null ] -, [ 545, "5A5EC1A5-F598-49F8-B294-B0742BAB9FE8", 545, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-03T00:00:00", "16 29 42 46 51", "40", null ] -, [ 546, "733BBBEB-B041-4E3C-AC7F-B061D9FDC2E2", 546, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-07T00:00:00", "36 41 50 55 56", "09", null ] -, [ 547, "8CF32173-2825-4083-94EC-3CA62231EB32", 547, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-10T00:00:00", "10 20 32 33 54", "39", null ] -, [ 548, "71255C58-16DF-464C-9910-B7C5E9368B80", 548, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-14T00:00:00", "05 08 09 24 34", "17", null ] -, [ 549, "29B14293-5FF6-4A9B-8A6D-9F4979AC2A3C", 549, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-17T00:00:00", "02 08 33 38 53", "12", null ] -, [ 550, "DBCFD864-00A3-4C73-B98E-168D7C7A7298", 550, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-21T00:00:00", "08 38 54 55 56", "02", null ] -, [ 551, "71581616-86DC-43A6-8E97-EB71AC7EAF9E", 551, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-24T00:00:00", "04 21 46 51 53", "05", null ] -, [ 552, "395D50C8-FFDC-4EB7-9BED-D46B60EF4A4F", 552, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-28T00:00:00", "37 40 48 53 56", "44", null ] -, [ 553, "024142D8-A96F-48DB-A5CE-BD82D129A146", 553, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-31T00:00:00", "08 18 22 40 44", "11", null ] -, [ 554, "7C7DA9A9-8A93-4DEC-A838-25ADA4688FB0", 554, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-04T00:00:00", "03 06 11 42 46", "38", null ] -, [ 555, "0579315D-E2CF-49AF-885E-71B088019AF1", 555, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-07T00:00:00", "14 19 27 34 48", "03", null ] -, [ 556, "971171AF-EFBA-4484-A414-5B01B9452D5F", 556, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-11T00:00:00", "09 10 17 21 35", "06", null ] -, [ 557, "28285D15-4A1A-44D3-9333-8239592BDE99", 557, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-14T00:00:00", "05 09 12 33 40", "27", null ] -, [ 558, "94B57E37-496D-4389-ADE3-55BC6C5D2BC5", 558, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-18T00:00:00", "20 24 31 34 49", "08", null ] -, [ 559, "5BEA0A7E-308C-4AB5-9EB3-E7829A54DE9A", 559, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-21T00:00:00", "05 21 23 33 45", "43", null ] -, [ 560, "2E981127-7486-4C6B-A8B5-97AC12022114", 560, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-25T00:00:00", "02 19 23 47 54", "16", null ] -, [ 561, "5105617C-AB05-4AB1-8AF0-51695E69D2C2", 561, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-28T00:00:00", "04 13 20 25 33", "42", null ] -, [ 562, "2437D531-AB19-4459-A67A-121972794A47", 562, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-02T00:00:00", "28 37 40 43 44", "20", null ] -, [ 563, "27284339-0E47-4BA9-A613-AA77CDC172FB", 563, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-05T00:00:00", "10 19 37 40 48", "01", null ] -, [ 564, "E0DD475C-1A32-4FD7-931A-1ED646B58376", 564, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-09T00:00:00", "01 10 17 32 51", "44", null ] -, [ 565, "6EFE62AE-AE28-44F7-AA85-286B4D0C9282", 565, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-12T00:00:00", "21 26 34 44 54", "23", null ] -, [ 566, "D5D353C1-8580-4064-8E83-78A727163693", 566, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-16T00:00:00", "01 02 05 41 44", "25", null ] -, [ 567, "8A6A4478-06D9-4120-9D60-736EC2D928F4", 567, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-19T00:00:00", "05 15 18 23 46", "14", null ] -, [ 568, "89ED8174-0D4D-4DBB-BFA0-EEE2ED2A191A", 568, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-23T00:00:00", "02 07 45 52 53", "18", null ] -, [ 569, "A4FD154B-73D1-4BDB-ADE9-1DA2FC880D58", 569, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-26T00:00:00", "12 20 24 38 51", "03", null ] -, [ 570, "27BFB91C-1B21-42B2-B974-7BBF668A0B96", 570, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-30T00:00:00", "02 08 44 46 51", "22", null ] -, [ 571, "583F59AF-3EC3-4912-B2B2-456D72F114E0", 571, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-02T00:00:00", "01 03 34 49 52", "19", null ] -, [ 572, "5EF7A2A3-960B-42CA-8D65-8607614DF1CC", 572, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-06T00:00:00", "03 17 43 46 47", "02", null ] -, [ 573, "3847BF2B-6773-4D29-938F-3806665D4FC1", 573, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-09T00:00:00", "11 33 41 42 46", "21", null ] -, [ 574, "FA9EA266-45A8-42C8-8D47-1D8BEB542211", 574, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-13T00:00:00", "15 26 36 39 40", "45", null ] -, [ 575, "50D7079B-6127-44CC-A4E0-263E7D452B52", 575, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-16T00:00:00", "12 13 30 31 39", "29", null ] -, [ 576, "56852C92-2149-4F4A-A660-59F939102925", 576, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-20T00:00:00", "14 20 23 42 43", "06", null ] -, [ 577, "39B6B3A1-52EE-4AC4-9676-DC4AE52237E8", 577, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-23T00:00:00", "18 21 33 42 56", "11", null ] -, [ 578, "D4194C06-722A-4E27-8F44-3D0C22B6A3DF", 578, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-27T00:00:00", "09 10 26 29 39", "10", null ] -, [ 579, "3932D673-921C-49E3-9291-BE717E702397", 579, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-30T00:00:00", "05 06 12 26 51", "07", null ] -, [ 580, "85FB5051-629B-436F-A43D-4C016A1DF93E", 580, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-04T00:00:00", "16 27 30 45 53", "43", null ] -, [ 581, "CF8D92A3-D767-42DA-B2F7-C8E790ECB065", 581, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-07T00:00:00", "12 18 26 28 51", "35", null ] -, [ 582, "8114AD78-1E0C-4F9C-AADB-508EDF06E336", 582, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-11T00:00:00", "06 25 27 30 45", "46", null ] -, [ 583, "43ACA759-99D1-4D7A-9089-6E639ADDFEDE", 583, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-14T00:00:00", "04 07 12 17 30", "44", null ] -, [ 584, "F2CAB9C2-553C-488A-9E30-CFA7DC65F412", 584, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-18T00:00:00", "03 23 46 48 49", "02", null ] -, [ 585, "9B44D4A4-0F8E-4213-A25F-E6BD1069DF0F", 585, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-21T00:00:00", "14 19 20 43 53", "07", null ] -, [ 586, "3E2922D0-284D-4614-8272-F83BBA38DDF5", 586, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-28T00:00:00", "02 19 22 28 54", "25", null ] -, [ 587, "04551495-BED3-4C37-9648-2FFA8347B05B", 587, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-01T00:00:00", "13 16 25 30 54", "11", null ] -, [ 588, "43BA977B-D380-48A8-85D9-EAF2A7A3AFA0", 588, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-04T00:00:00", "24 31 39 40 56", "32", null ] -, [ 589, "BA466130-57DE-4D6D-9FCD-C95831A4200D", 589, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-08T00:00:00", "10 29 45 52 54", "10", null ] -, [ 590, "AFF26B6A-34B8-4F89-8A85-88ED3C831D30", 590, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-11T00:00:00", "22 36 42 45 55", "42", null ] -, [ 591, "5DD841B2-F85D-493D-AFA2-F8164983D88B", 591, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-15T00:00:00", "21 30 42 44 50", "06", null ] -, [ 592, "CE5E4BA5-75FA-45B6-8C3E-F6EE890F8BAD", 592, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-18T00:00:00", "12 22 33 43 44", "15", null ] -, [ 593, "54B02ECF-BAC1-4940-BF9D-6D1DDD8561BB", 593, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-22T00:00:00", "12 15 22 25 33", "02", null ] -, [ 594, "B59B30E0-5386-455D-94D1-2EFBC646D36C", 594, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-25T00:00:00", "05 12 22 38 56", "22", null ] -, [ 595, "F99E577B-F55E-45E1-93D2-5832E92A52B8", 595, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-29T00:00:00", "08 23 39 40 42", "24", null ] -, [ 596, "4B67172C-E66E-4497-AE02-779DFC91A478", 596, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-01T00:00:00", "03 14 30 44 56", "05", null ] -, [ 597, "E604D301-A1AB-4D1F-BC23-70A17775C9F7", 597, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-05T00:00:00", "04 05 17 40 51", "38", null ] -, [ 598, "7EE23997-BF93-4901-8DBE-C4E394C1D211", 598, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-08T00:00:00", "21 30 43 46 50", "18", null ] -, [ 599, "D44E343F-CBED-4A68-98BC-92A0B0BF5920", 599, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-12T00:00:00", "14 27 39 47 50", "12", null ] -, [ 600, "52AAF078-59D5-4833-BA90-49B772ECAD50", 600, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-15T00:00:00", "07 11 26 30 53", "14", null ] -, [ 601, "2331FF0B-08D0-44C4-87C2-4841BB08040C", 601, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-19T00:00:00", "01 38 42 55 56", "34", null ] -, [ 602, "8EFEACF5-1F4F-4F67-8299-A13BC7B83C97", 602, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-22T00:00:00", "07 12 13 19 22", "10", null ] -, [ 603, "2D979590-2BF1-4EA5-A0D2-810843EDD84A", 603, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-26T00:00:00", "09 12 30 36 55", "15", null ] -, [ 604, "EF8F8EF7-18A9-4416-9A40-8B537E58D37A", 604, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-29T00:00:00", "05 17 22 26 55", "38", null ] -, [ 605, "AFD6E03E-C539-47CB-9BE2-6AA2E7CACBDB", 605, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-04T00:00:00", "07 15 30 33 56", "22", null ] -, [ 606, "54BC1E13-8915-40A8-88DA-15614181D8C4", 606, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-07T00:00:00", "19 32 33 41 48", "12", null ] -, [ 607, "511B590A-2D57-4C79-8F52-35E42CC64ED5", 607, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-11T00:00:00", "04 13 35 41 47", "44", null ] -, [ 608, "D62F24D8-6136-41FB-A019-03C0E9CC9406", 608, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-14T00:00:00", "03 12 18 25 52", "21", null ] -, [ 609, "B9FA4CFD-CD64-44C2-95A9-2BD4D042A75F", 609, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-18T00:00:00", "13 15 20 25 44", "37", null ] -, [ 610, "EA5686F4-4CB3-4DFF-816A-C1D94A1B1F48", 610, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-21T00:00:00", "05 08 17 19 41", "21", null ] -, [ 611, "AC709B10-C196-4023-AB43-7E95A7CC950D", 611, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-25T00:00:00", "38 42 43 48 53", "12", null ] -, [ 612, "6DF05F03-4E2F-49A0-9413-01B84EEAD863", 612, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-28T00:00:00", "07 26 27 40 43", "10", null ] -, [ 613, "1A9F5D9F-4E82-4903-B7AF-E391E31213F2", 613, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-01T00:00:00", "04 17 26 46 56", "25", null ] -, [ 614, "CB9B12F8-FBAC-41F2-A914-AF6455F0FF01", 614, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-04T00:00:00", "03 05 40 45 49", "17", null ] -, [ 615, "C20A8974-D7CF-424B-A508-C18AA16EF0BF", 615, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-08T00:00:00", "08 09 31 37 44", "38", null ] -, [ 616, "DD901315-2325-4C18-8319-81B01B0DFE1D", 616, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-11T00:00:00", "14 18 27 31 42", "07", null ] -, [ 617, "7D3AC251-031A-4D46-B6E3-D57950F6CB58", 617, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-15T00:00:00", "12 13 27 48 50", "30", null ] -, [ 618, "72EDF49D-BC25-4A23-956A-57D27374E917", 618, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-18T00:00:00", "24 28 36 50 53", "29", null ] -, [ 619, "BBC81A36-EBE1-4963-99CF-0FF40F70EC1F", 619, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-22T00:00:00", "03 22 31 48 54", "09", null ] -, [ 620, "A7BFDD05-2042-47C7-B393-067E4B9008A5", 620, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-25T00:00:00", "19 32 37 45 52", "41", null ] -, [ 621, "D766A4DB-4E03-4DD3-9141-2DEACE174839", 621, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-29T00:00:00", "19 24 35 44 51", "26", null ] -, [ 622, "39338F15-1D3D-4B25-8E41-A47775643753", 622, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-02T00:00:00", "08 28 37 53 55", "26", null ] -, [ 623, "61E2B968-18EA-4661-97D8-1557EA46EF07", 623, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-06T00:00:00", "04 21 46 53 54", "26", null ] -, [ 624, "858831D9-54C7-4330-BDB5-5B034C4BE4E4", 624, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-09T00:00:00", "16 31 43 46 56", "22", null ] -, [ 625, "D0CEF627-5AF9-42F9-AA58-4686413929C9", 625, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-13T00:00:00", "20 24 27 31 47", "15", null ] -, [ 626, "9009BD57-C8CE-4668-9CE0-F5D59CA5F172", 626, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-16T00:00:00", "06 11 39 46 47", "26", null ] -, [ 627, "A991C2F5-559D-44FE-8C0D-9BCAA3E344A5", 627, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-20T00:00:00", "02 14 26 32 41", "32", null ] -, [ 628, "91E9434A-7FBF-444A-B4B1-613B961F2A48", 628, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-23T00:00:00", "04 08 11 22 30", "04", null ] -, [ 629, "DC5EED77-8143-4F86-97DE-13972F2B2AFC", 629, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-27T00:00:00", "14 24 32 45 49", "17", null ] -, [ 630, "97097C20-BC7D-43E1-AAC5-F48B2F638E45", 630, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-30T00:00:00", "39 40 47 53 55", "32", null ] -, [ 631, "1BF2908A-5A66-4E7D-9F48-A22B94C280F0", 631, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-03T00:00:00", "04 19 24 32 54", "05", null ] -, [ 632, "79E09164-E650-489E-9641-DC52D4203F50", 632, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-06T00:00:00", "08 09 43 44 54", "27", null ] -, [ 633, "F2AF63EE-E3A5-4D2C-90C7-0D4B0003792D", 633, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-10T00:00:00", "03 05 15 43 51", "11", null ] -, [ 634, "7A95EAC2-EB23-4F35-BB91-7B291DC85943", 634, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-13T00:00:00", "08 09 14 38 44", "36", null ] -, [ 635, "BA5F710C-0B05-4FEB-9DB9-DE4E80C23089", 635, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-17T00:00:00", "05 14 25 47 49", "36", null ] -, [ 636, "07ABF657-5309-4D77-9BE4-716F3E48BE4E", 636, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-20T00:00:00", "11 17 25 36 42", "13", null ] -, [ 637, "441E43A9-2BFE-4EDD-86A5-7D0237E40AD9", 637, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-24T00:00:00", "10 22 36 50 53", "39", null ] -, [ 638, "B7473E75-6067-4E58-B934-81512155CC22", 638, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-27T00:00:00", "08 14 22 39 50", "44", null ] -, [ 639, "E498C1F6-8191-4DCF-97D5-B4838C72B27E", 639, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-01T00:00:00", "01 22 33 43 52", "36", null ] -, [ 640, "E6F1EB36-9C3D-432B-955A-5A87B91CF56A", 640, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-04T00:00:00", "01 03 12 19 20", "28", null ] -, [ 641, "7B9F9687-FA7C-4C35-9CD0-C75C24F6B843", 641, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-08T00:00:00", "01 20 22 29 41", "35", null ] -, [ 642, "DF85FE52-BB4B-42DC-B762-FFE86C7287FF", 642, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-11T00:00:00", "05 14 16 39 51", "34", null ] -, [ 643, "C2952461-9560-42BF-89D7-A128C11664A2", 643, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-15T00:00:00", "19 24 34 45 51", "40", null ] -, [ 644, "61469DD6-B4E4-4BCC-90AB-A71BAC7567CE", 644, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-18T00:00:00", "17 29 36 53 55", "26", null ] -, [ 645, "536EA679-7D1A-4740-8B02-EE9C33B203E7", 645, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-22T00:00:00", "02 16 23 29 32", "46", null ] -, [ 646, "95937200-82F3-402E-8248-B8951D1C1873", 646, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-25T00:00:00", "02 16 19 35 52", "17", null ] -, [ 647, "05997811-B217-45CA-9EAB-3126E3C649CD", 647, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-29T00:00:00", "11 13 20 30 42", "03", null ] -, [ 648, "FAF32B79-7770-4454-B053-47F6965910B8", 648, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-01T00:00:00", "09 13 17 18 56", "02", null ] -, [ 649, "BB9F5AC4-4B54-4EFC-B40E-28A4ABD26D63", 649, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-05T00:00:00", "09 21 36 38 55", "13", null ] -, [ 650, "809C3172-9F6E-4E8A-9EB5-CC9D1EBD7FDB", 650, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-08T00:00:00", "11 17 28 32 50", "33", null ] -, [ 651, "04182DD5-998D-44E2-B594-64556A39C8CD", 651, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-12T00:00:00", "02 07 23 38 40", "40", null ] -, [ 652, "8381CACD-0581-40DE-9D78-1402384FAE15", 652, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-15T00:00:00", "08 23 29 30 53", "07", null ] -, [ 653, "1B4D963D-ADAB-4871-B192-4B985AC36F31", 653, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-19T00:00:00", "09 18 19 26 40", "38", null ] -, [ 654, "C4183FB9-A12F-4E51-8630-6D4C4FF6236E", 654, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-22T00:00:00", "12 13 15 41 42", "37", null ] -, [ 655, "B5863FA9-E005-4C28-BB32-9132851D9C19", 655, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-26T00:00:00", "06 16 24 34 36", "30", null ] -, [ 656, "3BF0DDAC-D674-4055-9A4B-DA9AC99E0D82", 656, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-29T00:00:00", "21 25 26 50 51", "22", null ] -, [ 657, "19B8A21B-A93F-42E5-B8A2-B65B17C03CBC", 657, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-02T00:00:00", "14 23 43 44 54", "39", null ] -, [ 658, "0B7BF62B-A20B-4B31-AD56-A24C98307C57", 658, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-05T00:00:00", "01 06 15 27 46", "39", null ] -, [ 659, "6292265B-0462-4FAE-A4BE-CF94C20DB96F", 659, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-09T00:00:00", "22 23 28 49 52", "02", null ] -, [ 660, "948DD599-9C55-40F8-89FD-8D67E835938C", 660, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-12T00:00:00", "01 12 14 25 35", "38", null ] -, [ 661, "EBAB9596-15F7-4E80-9AE5-B2614299CD35", 661, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-16T00:00:00", "13 24 39 51 52", "44", null ] -, [ 662, "32E7961A-6226-4037-9A77-D7B26D188DC2", 662, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-19T00:00:00", "02 09 41 48 51", "37", null ] -, [ 663, "EE6BA26A-7962-4738-AD11-1ABDF472E47D", 663, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-23T00:00:00", "09 32 34 43 52", "04", null ] -, [ 664, "67930A86-D27C-4F43-81D8-1B04573D642F", 664, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-26T00:00:00", "06 13 14 31 36", "36", null ] -, [ 665, "90B63F14-6644-42AF-9827-4DAE75D83F76", 665, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-30T00:00:00", "09 30 35 39 49", "36", null ] -, [ 666, "E4AB005C-DE82-4FF3-B929-59933A564E52", 666, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-03T00:00:00", "13 28 32 41 52", "16", null ] -, [ 667, "8306F542-EDF9-4ABE-ABEA-BE7FF13F5F45", 667, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-07T00:00:00", "02 25 35 38 42", "34", null ] -, [ 668, "E60DF50F-8CE6-4B60-AA78-F7BD1CB2E8E6", 668, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-10T00:00:00", "14 15 43 46 48", "21", null ] -, [ 669, "217D2DF3-97B0-48EF-9F35-01FCFB97B83F", 669, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-14T00:00:00", "14 35 41 42 51", "23", null ] -, [ 670, "DD45E22D-72A2-4052-838A-7E236925AFAB", 670, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-17T00:00:00", "07 15 27 28 31", "35", null ] -, [ 671, "FC5BB8FE-AFD6-4784-A950-25D21B85493F", 671, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-21T00:00:00", "16 19 39 42 44", "38", null ] -, [ 672, "0CD5FC5D-4989-496C-B575-11EAAAD6115C", 672, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-24T00:00:00", "05 33 34 47 52", "18", null ] -, [ 673, "3F9A2F2B-919D-4F31-B636-52862546E3BB", 673, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-28T00:00:00", "06 39 45 46 48", "36", null ] -, [ 674, "E02FF34D-3A58-42C9-8722-0347598852F7", 674, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-31T00:00:00", "02 07 17 29 47", "40", null ] -, [ 675, "6DF2E2C0-A871-4AFE-9E12-738CBE7AF05D", 675, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-04T00:00:00", "10 21 23 41 55", "09", null ] -, [ 676, "7B508DB8-75A8-4C05-BB9A-63697C7A0A4D", 676, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-07T00:00:00", "14 24 32 43 44", "21", null ] -, [ 677, "808AB5CA-F5CA-47B7-8F73-1517D8892037", 677, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-11T00:00:00", "05 27 38 42 55", "41", null ] -, [ 678, "B0536821-95CC-4733-84C7-F4F052327A8E", 678, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-14T00:00:00", "03 18 19 30 34", "03", null ] -, [ 679, "74023E2B-EEB5-44BF-9694-3E044C8C83F5", 679, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-18T00:00:00", "10 15 22 52 53", "12", null ] -, [ 680, "4C086620-5B40-41D6-B9B4-F79479D5F2ED", 680, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-21T00:00:00", "01 22 52 53 56", "45", null ] -, [ 681, "57EEB3E2-33B7-4FF1-BB90-8A6005FA79DE", 681, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-25T00:00:00", "02 11 22 51 52", "46", null ] -, [ 682, "CBBEE8D1-B7C9-40B4-A622-D061805B9B7D", 682, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-28T00:00:00", "10 30 44 46 48", "44", null ] -, [ 683, "F5376D25-5DF8-42C3-B344-AA5CE2F413D7", 683, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-02T00:00:00", "02 17 22 32 51", "35", null ] -, [ 684, "52198556-DA62-4169-AA41-D92046DD93FD", 684, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-05T00:00:00", "21 27 46 52 55", "14", null ] -, [ 685, "6DDE7205-0EB7-46EB-8F9B-B2FF0B217AC8", 685, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-09T00:00:00", "11 12 26 31 33", "27", null ] -, [ 686, "2BE6965D-BF8A-4145-8C6B-094C377A8BEA", 686, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-12T00:00:00", "10 16 19 27 48", "25", null ] -, [ 687, "8483A370-5A9E-4C91-BC8B-AD11582907D3", 687, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-16T00:00:00", "10 14 16 29 40", "06", null ] -, [ 688, "EDBFF068-2C35-433F-882A-D56A37C36747", 688, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-19T00:00:00", "03 13 16 39 54", "32", null ] -, [ 689, "85088580-AC76-4A88-9A43-CA57062D3991", 689, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-23T00:00:00", "01 08 13 27 41", "45", null ] -, [ 690, "41BB763A-B7EE-4B77-B46C-35B2D4D11397", 690, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-26T00:00:00", "06 19 29 33 37", "31", null ] -, [ 691, "F45C1691-4DCA-4754-ACDC-370D4D1BD7C0", 691, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-30T00:00:00", "01 22 29 44 52", "39", null ] -, [ 692, "DA9A9104-C0DB-4306-BCE5-B825281DFA12", 692, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-02T00:00:00", "02 11 19 21 34", "38", null ] -, [ 693, "457BD885-F877-4984-B9EC-CB13469E7BF7", 693, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-06T00:00:00", "03 11 12 19 33", "30", null ] -, [ 694, "006D900C-426D-43BB-B1D7-2C7B407BC426", 694, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-09T00:00:00", "23 25 30 45 50", "08", null ] -, [ 695, "A4775431-5ADA-4A87-AE5F-C6E639F9E631", 695, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-13T00:00:00", "22 25 33 36 48", "40", null ] -, [ 696, "67534450-D8C3-40A5-8913-84D193109350", 696, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-16T00:00:00", "02 04 21 39 51", "29", null ] -, [ 697, "C93BDF71-0B5F-4EEE-BFF0-06559684E40B", 697, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-20T00:00:00", "01 09 10 35 46", "09", null ] -, [ 698, "87AE85FC-0B31-4036-8BB1-3EB6BFB12353", 698, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-23T00:00:00", "02 17 20 27 28", "07", null ] -, [ 699, "0C8FCC5D-F1AA-4F04-AE12-EBDCDD302550", 699, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-27T00:00:00", "03 11 12 14 21", "25", null ] -, [ 700, "4598C166-E066-430F-A34B-191133D82DC0", 700, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-30T00:00:00", "13 16 19 53 55", "02", null ] -, [ 701, "84952D50-FB23-41B8-B8B9-7C563FB0DEF3", 701, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-03T00:00:00", "04 15 29 43 56", "29", null ] -, [ 702, "4FBD061D-4178-478A-A9DA-0591952AF4A1", 702, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-06T00:00:00", "02 12 18 28 31", "03", null ] -, [ 703, "61079EAE-409B-4FA4-AF31-BD6290B4DECD", 703, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-10T00:00:00", "18 29 38 43 47", "07", null ] -, [ 704, "BC0C8E66-8F2B-4627-A61F-16476BE4D0D1", 704, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-13T00:00:00", "25 36 37 40 51", "20", null ] -, [ 705, "02D3567D-CDCA-4E4B-8558-805A7F344CA8", 705, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-17T00:00:00", "01 09 23 27 33", "24", null ] -, [ 706, "D5889D79-7B25-4EB4-B609-E985347A3E6D", 706, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-20T00:00:00", "21 28 41 45 55", "24", null ] -, [ 707, "DBD4B0BD-CCDC-4E1D-AEAC-7B1CFD1863CC", 707, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-24T00:00:00", "01 27 28 35 40", "06", null ] -, [ 708, "A4B1FE35-873D-46EA-890E-CA09F4A445A7", 708, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-27T00:00:00", "24 37 44 50 56", "35", null ] -, [ 709, "813AE8F3-A520-4B94-9830-51FC6CFAEE27", 709, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-03T00:00:00", "26 32 35 43 52", "10", null ] -, [ 710, "FC0C4C98-0E7B-42C7-9D18-9707EBD8BC8E", 710, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-06T00:00:00", "11 18 37 46 55", "45", null ] -, [ 711, "9A17DCEE-779A-4020-9CEC-8064B73B0EAC", 711, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-10T00:00:00", "02 27 31 39 40", "23", null ] -, [ 712, "C2055A92-0EA6-46BF-A085-D1B2F2FD9F87", 712, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-13T00:00:00", "10 12 26 46 50", "23", null ] -, [ 713, "471EB7B1-EC76-428C-B4C1-D4746EE3B5BD", 713, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-17T00:00:00", "09 15 24 28 31", "17", null ] -, [ 714, "AEC2FFB5-3CF4-4541-AF59-429BA4EA88ED", 714, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-20T00:00:00", "15 16 20 39 40", "26", null ] -, [ 715, "5D59F47E-FDB3-4D75-8726-A89B26E960EB", 715, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-24T00:00:00", "04 25 34 43 44", "45", null ] -, [ 716, "E3C8C9EC-2595-43D8-9220-801A471A0785", 716, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-27T00:00:00", "10 15 24 38 50", "19", null ] -, [ 717, "75F8683A-8CB5-4A64-B394-F3856113C734", 717, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-31T00:00:00", "14 39 47 48 53", "29", null ] -, [ 718, "1DFBD7FB-D346-47E3-8055-650E565084DB", 718, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-03T00:00:00", "16 22 38 39 48", "42", null ] -, [ 719, "F2228ABC-483D-4402-885C-07F9CA41D3FF", 719, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-07T00:00:00", "02 04 13 17 36", "15", null ] -, [ 720, "23C5D3A0-28C4-414A-AA41-56BB9FF9E4D6", 720, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-10T00:00:00", "18 25 36 42 51", "22", null ] -, [ 721, "7214BB77-B931-442E-8656-AF6388E58DA0", 721, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-14T00:00:00", "04 11 22 48 50", "42", null ] -, [ 722, "103C24D8-2F24-4B67-B25B-BE1E6CE96A85", 722, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-17T00:00:00", "05 13 26 35 45", "32", null ] -, [ 723, "74CD43FF-6C29-42F2-8492-1D9FD9BE1B96", 723, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-21T00:00:00", "05 24 37 47 52", "06", null ] -, [ 724, "0B0DCFE8-1FEF-437F-BD58-33EAEA95BBDE", 724, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-24T00:00:00", "09 20 21 48 49", "07", null ] -, [ 725, "21DCD08A-3F15-4065-A97B-85B46045F5D3", 725, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-28T00:00:00", "15 20 24 36 44", "06", null ] -, [ 726, "351EBC69-A427-4C20-B798-68E178E5088B", 726, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-01T00:00:00", "09 16 24 40 43", "35", null ] -, [ 727, "168B47E6-6EB9-4387-B9AB-FBEE6E70187B", 727, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-05T00:00:00", "05 23 38 39 54", "03", null ] -, [ 728, "D87CA568-F428-44DC-8E0D-938DAE764D2D", 728, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-08T00:00:00", "12 27 29 32 34", "34", null ] -, [ 729, "BE8F8E4C-87AC-419E-8B35-25B645F733A0", 729, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-12T00:00:00", "04 08 10 14 51", "31", null ] -, [ 730, "81151545-D0DE-4732-A845-747FD7B426A0", 730, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-15T00:00:00", "07 12 24 36 48", "27", null ] -, [ 731, "AFAB890B-9AE6-4DC4-9E2F-FBBDD5CAA71F", 731, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-19T00:00:00", "02 04 09 15 42", "13", null ] -, [ 732, "3FB0BBB5-9305-4AD1-A8EF-677EB14D739A", 732, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-22T00:00:00", "03 29 34 42 49", "29", null ] -, [ 733, "11EA5295-1010-4F48-9FA7-166D5CE49043", 733, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-26T00:00:00", "09 18 21 37 55", "33", null ] -, [ 734, "81049EB0-34A3-404C-805D-EC79155BD474", 734, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-29T00:00:00", "23 30 36 39 48", "34", null ] -, [ 735, "F22FA563-2C4C-49CD-A213-F3B0258DD2F7", 735, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-02T00:00:00", "09 13 26 30 35", "33", null ] -, [ 736, "339FAF34-DD23-4C2C-8FF1-11BC297110D5", 736, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-05T00:00:00", "05 20 38 41 52", "20", null ] -, [ 737, "572A228E-A2B7-4853-AC56-B51FA3E4E977", 737, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-09T00:00:00", "05 17 31 36 56", "46", null ] -, [ 738, "B1912705-910F-40B0-B26C-C080AE03A64E", 738, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-12T00:00:00", "06 11 20 32 44", "38", null ] -, [ 739, "18C01ED7-F086-462D-952C-3690822D9EB3", 739, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-16T00:00:00", "09 15 21 26 45", "25", null ] -, [ 740, "778E58D2-A4BF-4397-ACB4-CD45F4594E02", 740, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-19T00:00:00", "04 09 12 16 46", "44", null ] -, [ 741, "EBD03D4A-8D22-4069-BB9C-85B2905C1908", 741, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-23T00:00:00", "12 14 16 31 50", "09", null ] -, [ 742, "946BC592-27E8-4679-8A4F-D1ADE23BCAB2", 742, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-26T00:00:00", "11 15 17 29 46", "16", null ] -, [ 743, "37C1E7E8-D038-4632-8095-CF7C367AF16C", 743, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-30T00:00:00", "07 34 49 54 55", "34", null ] -, [ 744, "0CEAED99-4AF4-4C56-BDBE-2CD11790E752", 744, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-03T00:00:00", "05 06 07 11 25", "31", null ] -, [ 745, "56165FDF-EACB-4D44-8FD0-19188EBF9FDB", 745, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-07T00:00:00", "25 27 35 38 39", "28", null ] -, [ 746, "F75DCF35-BB8A-4E25-A08A-C70AED507E1B", 746, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-10T00:00:00", "05 10 26 27 28", "04", null ] -, [ 747, "A5AED3DC-82D1-47B2-AD84-3E4CFF492863", 747, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-14T00:00:00", "20 29 35 45 53", "41", null ] -, [ 748, "CBC7B3F7-A0FB-4B17-8FC9-B584A48ACE1A", 748, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-17T00:00:00", "08 17 40 47 50", "13", null ] -, [ 749, "3972E622-3A12-4459-A2F3-853C6E3DF528", 749, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-21T00:00:00", "03 08 21 50 52", "02", null ] -, [ 750, "36750E7C-756E-46DE-9C57-1CDB57C686AF", 750, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-24T00:00:00", "03 06 43 51 52", "36", null ] -, [ 751, "0ED2B295-A760-4BFF-A56B-A303E61A48C2", 751, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-28T00:00:00", "04 17 24 25 48", "34", null ] -, [ 752, "FC76F901-1F35-4951-9FB1-E2FF0688D0C5", 752, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-31T00:00:00", "17 35 44 52 56", "22", null ] -, [ 753, "7F2411E9-C4EE-4D90-94DF-387E3D33E14C", 753, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-04T00:00:00", "01 28 34 42 50", "27", null ] -, [ 754, "B19ED6DC-2FE3-4379-B92F-F4E04BD8B602", 754, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-07T00:00:00", "07 18 35 45 56", "03", null ] -, [ 755, "CAF2B068-BCB0-4E9E-B094-3C092814F3D6", 755, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-11T00:00:00", "06 12 15 32 42", "40", null ] -, [ 756, "BE14FCFA-6D56-4B87-9428-F036AF6A153A", 756, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-14T00:00:00", "08 22 25 33 35", "46", null ] -, [ 757, "9D7178FE-3F92-4B7C-A73B-30933BA111C6", 757, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-18T00:00:00", "04 05 26 37 56", "25", null ] -, [ 758, "DAD3C7AA-522B-4F6F-A217-6B18954EF1D4", 758, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-21T00:00:00", "09 38 44 48 49", "13", null ] -, [ 759, "AA1A3D6E-3344-435B-B813-971C58193477", 759, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-25T00:00:00", "03 12 19 22 40", "02", null ] -, [ 760, "F24708B7-2F8E-4551-908C-C221C7A9C5D3", 760, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-28T00:00:00", "01 17 31 37 54", "31", null ] -, [ 761, "7D46008B-19E9-4BA4-8E63-846F0F8F7C11", 761, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-01T00:00:00", "02 09 28 51 53", "19", null ] -, [ 762, "146376B5-76BF-492D-828D-3CA640DFDBDA", 762, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-04T00:00:00", "02 04 06 21 44", "37", null ] -, [ 763, "74CBE867-A0EA-4BDD-903C-CBCF649F0852", 763, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-08T00:00:00", "04 10 18 28 50", "35", null ] -, [ 764, "C5083416-19DA-4EB2-BB73-F106C6714BCD", 764, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-11T00:00:00", "16 27 48 49 54", "02", null ] -, [ 765, "54B77269-DF10-43D2-85AC-87310F635F40", 765, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-15T00:00:00", "29 30 32 35 41", "39", null ] -, [ 766, "9F3A9E56-B7C2-49BA-AC52-1A9845358AD1", 766, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-18T00:00:00", "18 27 31 36 52", "33", null ] -, [ 767, "83DD43D5-A17C-4BC0-A94B-CE5C98800671", 767, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-22T00:00:00", "26 29 33 39 46", "24", null ] -, [ 768, "E2289CDE-FE3A-4572-BDDF-7B796DDE0F48", 768, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-25T00:00:00", "07 27 42 49 52", "19", null ] -, [ 769, "6C158BB8-3C8D-4821-A36A-12D493870B1D", 769, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-29T00:00:00", "02 21 25 45 50", "21", null ] -, [ 770, "14EF87A6-B943-4168-A85C-92986474FE73", 770, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-02T00:00:00", "15 24 51 53 55", "11", null ] -, [ 771, "2940046E-0856-4C27-BDEC-0081153FE6D9", 771, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-06T00:00:00", "09 33 51 53 56", "39", null ] -, [ 772, "4B1ECB95-422B-4E5C-AE4A-A36CC7289AE2", 772, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-09T00:00:00", "03 14 21 24 51", "14", null ] -, [ 773, "917603BF-CE49-4D4C-B344-4F7BFB4A3000", 773, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-13T00:00:00", "17 31 34 45 51", "24", null ] -, [ 774, "C4B244A5-71AE-4737-8696-FAD69FCC4306", 774, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-16T00:00:00", "10 13 18 33 51", "43", null ] -, [ 775, "B09A6263-AE32-48A1-B27F-5261FF85BB0A", 775, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-20T00:00:00", "13 17 25 45 55", "08", null ] -, [ 776, "49AC2B38-0F01-4ECF-97F9-DFEE683496FB", 776, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-23T00:00:00", "27 45 48 54 56", "02", null ] -, [ 777, "8F5C36CD-13DA-482D-8D06-C70FAD47E5DD", 777, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-27T00:00:00", "07 13 37 46 51", "02", null ] -, [ 778, "EC9A3519-606B-4389-9A2E-39C962F5E2B4", 778, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-30T00:00:00", "04 15 17 29 38", "20", null ] -, [ 779, "167BFB3F-0E07-4C16-978E-FBE7FFD5B68B", 779, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-03T00:00:00", "05 18 23 31 38", "20", null ] -, [ 780, "E701E122-932C-47DB-91E4-8EDEC824EF6D", 780, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-06T00:00:00", "07 11 27 40 46", "08", null ] -, [ 781, "7DDD4033-B3ED-48A6-806C-8886C6A2BE5B", 781, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-10T00:00:00", "08 21 29 34 37", "15", null ] -, [ 782, "65739373-4856-4DEB-B8EB-D2A5867F6AF7", 782, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-13T00:00:00", "27 43 45 49 54", "44", null ] -, [ 783, "BD325C4F-DC06-4DE8-8AB0-B0CA898310D2", 783, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-17T00:00:00", "08 22 27 49 50", "28", null ] -, [ 784, "BA3F8A87-E1F8-4518-AFA7-6E6CB0094ADE", 784, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-20T00:00:00", "03 04 07 16 56", "39", null ] -, [ 785, "10601DE2-F74F-4A16-A5AE-D9B528F37947", 785, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-24T00:00:00", "10 11 35 37 50", "12", null ] -, [ 786, "028E0467-039A-4646-B805-419A7EA4215F", 786, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-27T00:00:00", "12 25 37 39 45", "11", null ] -, [ 787, "CCA3BDA4-4EA3-4847-B489-DA31CE612F46", 787, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-01T00:00:00", "17 30 39 52 53", "21", null ] -, [ 788, "5A4D2F95-05B7-45B0-AFC6-0C8671090078", 788, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-04T00:00:00", "04 33 41 51 56", "38", null ] -, [ 789, "1AFDE069-1C2C-4B11-ABF2-5D34C99F8009", 789, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-08T00:00:00", "20 23 28 30 46", "29", null ] -, [ 790, "C8688557-3C55-40B1-8547-F8F63EA978E2", 790, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-11T00:00:00", "02 21 27 34 44", "45", null ] -, [ 791, "170F03BB-4FA6-4012-9DEA-3F355327CB2D", 791, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-15T00:00:00", "27 31 32 36 47", "35", null ] -, [ 792, "A1C9B69C-F6E9-4F03-BD08-3612C8130DB2", 792, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-18T00:00:00", "10 20 30 44 49", "24", null ] -, [ 793, "2DF0DE5D-822C-4B1F-8189-150829710D6D", 793, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-22T00:00:00", "03 33 35 39 45", "13", null ] -, [ 794, "2BFF67A2-5627-45EB-9332-DFA144B11A4E", 794, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-29T00:00:00", "02 05 29 35 51", "03", null ] -, [ 795, "2A5CE53D-DC71-4E03-9BE0-75214C869310", 795, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-01T00:00:00", "06 08 27 40 41", "21", null ] -, [ 796, "E0C0761D-CDE8-4951-8FAD-1649611251D5", 796, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-05T00:00:00", "13 28 39 50 55", "10", null ] -, [ 797, "FC60EB92-6CC8-4E00-92ED-329B206F34BF", 797, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-08T00:00:00", "18 20 31 36 43", "33", null ] -, [ 798, "1395E5F5-EAD5-4A9E-8E30-3D4ED3180582", 798, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-12T00:00:00", "05 09 31 37 56", "16", null ] -, [ 799, "61176EE6-194E-4B7A-8289-641D6D73E30F", 799, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-15T00:00:00", "04 07 19 21 38", "29", null ] -, [ 800, "053F0AAB-3C80-4608-A15B-11EF823A97A0", 800, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-19T00:00:00", "04 05 34 38 41", "18", null ] -, [ 801, "11D64BB4-E070-4C24-8369-142791A0DB96", 801, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-22T00:00:00", "08 13 27 28 52", "09", null ] -, [ 802, "D8151C78-F265-4CBB-99A2-42E38293079D", 802, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-26T00:00:00", "07 08 38 39 48", "22", null ] -, [ 803, "0CCA6D18-2074-488C-A3D0-DA64DFFD8AA4", 803, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-29T00:00:00", "01 10 22 23 38", "19", null ] -, [ 804, "F5782C73-F67B-4BC7-88C1-D27461D9D2D3", 804, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-02T00:00:00", "06 07 26 27 49", "09", null ] -, [ 805, "31DB7363-8E05-4A5F-B44A-2084214F4376", 805, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-05T00:00:00", "10 20 45 51 53", "41", null ] -, [ 806, "F1F49235-006D-4983-8E66-C28093B9935C", 806, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-09T00:00:00", "02 17 20 26 48", "12", null ] -, [ 807, "1AF21D48-A038-4F94-AB71-EB64D7ADD2AC", 807, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-12T00:00:00", "14 16 17 33 47", "23", null ] -, [ 808, "3B55D6A9-90F8-4A0E-9231-AB28F15F994E", 808, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-16T00:00:00", "11 12 21 29 45", "05", null ] -, [ 809, "A119EC98-37A8-48EC-BE53-DEFE528ED3DB", 809, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-19T00:00:00", "01 22 39 42 46", "36", null ] -, [ 810, "2FE766E0-110C-4FCE-80B2-179AF7347FAE", 810, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-23T00:00:00", "04 16 36 40 53", "18", null ] -, [ 811, "DB5883CA-B9DD-471A-99AC-07BFDB428539", 811, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-26T00:00:00", "04 14 29 54 56", "40", null ] -, [ 812, "15CB5697-EB46-4932-8B7F-19A32ACF2340", 812, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-02T00:00:00", "09 12 47 48 56", "25", null ] -, [ 813, "CF4EB296-ABBE-4034-A548-A8CC9917EC24", 813, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-05T00:00:00", "11 31 34 44 52", "32", null ] -, [ 814, "A1EDA1B5-B783-4732-89DC-A359CB1FD0C7", 814, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-09T00:00:00", "14 16 18 19 29", "16", null ] -, [ 815, "1D791D17-41CD-4053-804F-3A7058B0EC24", 815, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-12T00:00:00", "02 15 25 48 53", "41", null ] -, [ 816, "D4C9077C-B7DD-4890-A6C1-DF0228AA3B1C", 816, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-16T00:00:00", "03 22 48 52 56", "13", null ] -, [ 817, "32DD92A6-6176-421B-AD93-6467660CF6D2", 817, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-19T00:00:00", "10 31 45 50 54", "25", null ] -, [ 818, "E773448F-7D8E-41B3-A08F-118B31FEB680", 818, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-23T00:00:00", "03 25 28 29 40", "13", null ] -, [ 819, "24388C14-9B3E-43A6-A07A-C80597855505", 819, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-26T00:00:00", "23 41 46 47 52", "22", null ] -, [ 820, "FC270668-BDB7-47E6-BA4D-7639B11FF369", 820, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-30T00:00:00", "01 11 24 38 44", "41", null ] -, [ 821, "FDF67DCE-BF83-4409-AFC6-A2FC0E1C35C9", 821, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-02T00:00:00", "02 17 22 30 31", "19", null ] -, [ 822, "F8EE5F90-48B8-4E4D-BE7B-F9A3780C04B0", 822, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-06T00:00:00", "16 43 44 52 56", "26", null ] -, [ 823, "2D4979F0-21FA-4EB4-A12F-A82ECAD11C85", 823, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-09T00:00:00", "15 18 39 48 53", "03", null ] -, [ 824, "3AD05007-2EBF-4675-BCAC-8D7610966D5C", 824, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-13T00:00:00", "03 12 27 39 47", "32", null ] -, [ 825, "671D846F-3632-44D6-98E4-E267DA8D19AB", 825, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-16T00:00:00", "10 16 31 48 50", "44", null ] -, [ 826, "9217DF4A-F053-4D12-AC26-DE254B56E4B0", 826, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-20T00:00:00", "05 08 10 34 42", "25", null ] -, [ 827, "AE0105AC-6C6E-4F11-9879-42A06D3090A3", 827, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-23T00:00:00", "19 26 28 37 52", "18", null ] -, [ 828, "65A9C9F5-5792-4D64-B225-3CF46C8D0026", 828, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-27T00:00:00", "23 37 41 50 55", "06", null ] -, [ 829, "5423D260-E2FC-4F86-8618-AAFAC601760B", 829, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-30T00:00:00", "14 20 41 47 53", "40", null ] -, [ 830, "45A9F9A3-30E6-41F0-A703-56B4F9E07294", 830, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-04T00:00:00", "09 21 31 36 43", "08", null ] -, [ 831, "1C82A9F5-D878-492C-A2CE-B37E205DB898", 831, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-07T00:00:00", "02 07 20 34 50", "40", null ] -, [ 832, "9615C4EB-1283-420B-94A2-48DBDD59A26A", 832, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-11T00:00:00", "26 33 43 46 54", "09", null ] -, [ 833, "1A730B61-1C5D-4EBB-8BD2-763F8EA4E8A5", 833, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-14T00:00:00", "20 21 40 47 56", "12", null ] -, [ 834, "1CAB05D1-6329-48C2-B5B4-253E53B89D46", 834, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-18T00:00:00", "11 13 19 37 40", "26", null ] -, [ 835, "EE46E0D7-377B-4075-9E44-618AC3F3F437", 835, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-21T00:00:00", "15 20 23 26 30", "17", null ] -, [ 836, "80585183-B52E-4348-9B2A-FF02017789B8", 836, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-25T00:00:00", "05 14 17 19 24", "25", null ] -, [ 837, "749A0427-5968-45CE-BD6C-C864F6F26A71", 837, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-28T00:00:00", "03 11 20 29 39", "26", null ] -, [ 838, "D72ACE65-0BFD-4826-8747-3CBB207764FA", 838, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-01T00:00:00", "12 27 44 45 51", "30", null ] -, [ 839, "78CFF352-C91F-4F79-9985-988B16077D13", 839, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-04T00:00:00", "12 13 15 17 50", "23", null ] -, [ 840, "3357706B-14F6-4A84-82EA-0BA1AD4705CE", 840, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-08T00:00:00", "12 18 28 48 54", "06", null ] -, [ 841, "F5926E9D-91D0-4FA0-9657-255273DA02BB", 841, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-11T00:00:00", "06 13 33 34 42", "25", null ] -, [ 842, "EE8D88B6-371B-48D8-B55F-0226F5058211", 842, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-15T00:00:00", "04 12 13 21 27", "46", null ] -, [ 843, "B584633B-6A66-4F79-8F2F-1609E41A44A5", 843, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-18T00:00:00", "11 36 37 41 55", "07", null ] -, [ 844, "47480512-F3C4-4411-BCED-EADC1B42F0D5", 844, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-22T00:00:00", "12 17 21 23 30", "24", null ] -, [ 845, "508956C9-C492-4141-9CE6-0DCBCE172E9D", 845, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-25T00:00:00", "01 02 13 19 27", "21", null ] -, [ 846, "9510B976-63F8-4F92-830F-BB53C4B7D35C", 846, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-29T00:00:00", "03 04 15 27 37", "35", null ] -, [ 847, "914A95CB-37B6-496A-8A7D-5A27B9F3E497", 847, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-02T00:00:00", "01 10 12 32 36", "25", null ] -, [ 848, "AB8D3AC8-D4F4-45A4-A8B9-4A398D6161FF", 848, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-06T00:00:00", "08 18 45 47 50", "36", null ] -, [ 849, "3CAF750C-2F9E-4805-AF9D-2F7A17D7390C", 849, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-09T00:00:00", "01 31 33 34 50", "41", null ] -, [ 850, "42BB83DD-69F5-4DD0-B7F6-B09CB72F84BB", 850, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-13T00:00:00", "07 11 14 15 34", "14", null ] -, [ 851, "A54BB62A-B5C4-4D33-8BF6-A47AD370146C", 851, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-16T00:00:00", "02 15 18 20 39", "34", null ] -, [ 852, "35689336-FA69-430B-BB7B-9D8757F5C563", 852, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-20T00:00:00", "12 18 28 36 43", "19", null ] -, [ 853, "79CF2CDF-F4FE-41AF-948C-679C89573D5A", 853, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-23T00:00:00", "16 19 39 44 49", "26", null ] -, [ 854, "8F6A8839-96B9-4695-B375-9D6ADC32915A", 854, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-27T00:00:00", "02 07 10 16 29", "08", null ] -, [ 855, "07371AEF-A119-4A98-BDC6-1E08263E3F78", 855, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-30T00:00:00", "11 30 40 48 52", "42", null ] -, [ 856, "A66E6504-5920-439B-88CA-8F0736C2CA2C", 856, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-03T00:00:00", "04 13 20 22 56", "32", null ] -, [ 857, "E3EC6624-7BB5-470B-AC8A-5CFB8289E377", 857, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-06T00:00:00", "07 13 30 33 54", "30", null ] -, [ 858, "A141A3CC-BD51-4E30-84C0-2A7D994FC250", 858, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-10T00:00:00", "02 14 26 50 56", "12", null ] -, [ 859, "A0E7F6EB-D326-4A9F-A31D-094EAD6A518E", 859, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-13T00:00:00", "06 17 24 43 55", "36", null ] -, [ 860, "D5438DC0-4EC6-48D9-B519-AD24C0B3FB25", 860, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-17T00:00:00", "11 19 40 43 44", "33", null ] -, [ 861, "5219DDB6-E022-4D60-9BFE-34FD4ECB709E", 861, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-20T00:00:00", "04 13 20 29 48", "36", null ] -, [ 862, "E662E6C4-0BE4-421F-893D-3527D5D5502C", 862, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-24T00:00:00", "04 23 24 28 32", "31", null ] -, [ 863, "805E4BEC-91C1-4A75-8465-568254B40416", 863, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-27T00:00:00", "04 10 26 32 41", "31", null ] -, [ 864, "8C850AB9-558A-4129-8544-0D9A634FA9E3", 864, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-31T00:00:00", "10 20 29 47 48", "38", null ] -, [ 865, "88CC3B82-9F43-4566-B130-C5517DBC33BA", 865, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-03T00:00:00", "10 13 20 28 36", "09", null ] -, [ 866, "E902EE49-B63A-4DB6-B67C-0FAAC30C3932", 866, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-07T00:00:00", "08 18 22 24 38", "23", null ] -, [ 867, "C78C1DE3-8629-429A-BD5B-C42A6F797F9C", 867, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-10T00:00:00", "11 12 17 21 23", "20", null ] -, [ 868, "CEBD219F-94FD-4152-9EC0-1A8395E776C9", 868, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-14T00:00:00", "06 14 50 55 56", "01", null ] -, [ 869, "2815439B-B45A-48AB-BC06-4E95BBDFED63", 869, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-17T00:00:00", "03 04 14 18 27", "13", null ] -, [ 870, "A4C211ED-A3C8-454D-B9AA-ED672D593BC0", 870, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-21T00:00:00", "03 20 43 47 52", "26", null ] -, [ 871, "3AE643AE-3752-4D4A-A8E3-A1EB0A794A48", 871, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-24T00:00:00", "02 28 38 42 55", "25", null ] -, [ 872, "1C36A6DE-F815-4E0C-BA3C-9144DA40C6B5", 872, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-28T00:00:00", "02 10 13 36 38", "18", null ] -, [ 873, "54F92A9D-74F4-4E96-802D-4C9838159251", 873, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-01T00:00:00", "03 08 21 28 52", "43", null ] -, [ 874, "A907DF1F-CDF1-4896-91D7-7FC18AEECBE6", 874, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-05T00:00:00", "10 19 24 37 44", "27", null ] -, [ 875, "8A737E94-9C1C-4D08-8BC8-9269BBC8D96F", 875, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-08T00:00:00", "24 29 37 48 50", "19", null ] -, [ 876, "E2152E19-B4AF-4B12-822B-4F8B9222C1ED", 876, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-12T00:00:00", "10 31 36 37 43", "15", null ] -, [ 877, "F3D56D53-59CA-4F5B-9758-79848E9FAF15", 877, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-15T00:00:00", "09 10 13 31 50", "10", null ] -, [ 878, "22C9895B-CEDF-400F-92EA-223B53FDA227", 878, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-19T00:00:00", "02 09 14 37 42", "41", null ] -, [ 879, "A0A4388D-A0C0-4614-8CE5-0EC197C3A92F", 879, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-22T00:00:00", "02 07 18 32 53", "18", null ] -, [ 880, "21185BC4-A0B6-401F-966C-F05F66A4AAAB", 880, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-26T00:00:00", "15 21 30 31 32", "26", null ] -, [ 881, "FF4917B9-749B-4410-B9AB-52130F6DF61C", 881, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-29T00:00:00", "04 19 26 28 39", "14", null ] -, [ 882, "6807A66D-E7DC-419D-AF2D-E4F2FCBCB6F4", 882, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-02T00:00:00", "01 03 12 16 54", "46", null ] -, [ 883, "FAA07034-9641-44B4-B65A-DBEBBD6750AC", 883, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-05T00:00:00", "19 25 34 46 53", "15", null ] -, [ 884, "B4C6A53B-F3AF-4867-84F5-55FB664CB90B", 884, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-09T00:00:00", "08 26 28 33 53", "11", null ] -, [ 885, "02A30C8B-B84D-4933-B04C-9188538A5FA7", 885, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-12T00:00:00", "09 26 28 35 38", "10", null ] -, [ 886, "11F16F0E-CB24-4E7D-A5F4-4BBF478A37FE", 886, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-16T00:00:00", "01 26 27 39 46", "21", null ] -, [ 887, "9E8A03C2-DFEC-4112-A696-EA9DDAD9E046", 887, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-19T00:00:00", "07 14 31 51 54", "35", null ] -, [ 888, "A96DE32B-3967-48BA-B33B-D1018E35334B", 888, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-23T00:00:00", "02 06 12 34 35", "33", null ] -, [ 889, "4CA5F4E1-FBE4-4E1E-A4B7-1C587DAB70ED", 889, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-26T00:00:00", "05 09 34 43 47", "08", null ] -, [ 890, "0AA621FC-44F6-487F-B81C-E2AE461301EF", 890, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-30T00:00:00", "11 16 19 47 53", "02", null ] -, [ 891, "D1529B07-F805-41BC-A0C0-1551575AE197", 891, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-03T00:00:00", "06 11 12 18 56", "12", null ] -, [ 892, "04CE11BD-8B0D-437E-8E0C-0C4B1D14C47D", 892, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-07T00:00:00", "04 38 45 53 54", "09", null ] -, [ 893, "BBE92898-012A-42EF-B481-64C5226EB753", 893, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-10T00:00:00", "23 27 33 44 46", "36", null ] -, [ 894, "9002B5AC-EE00-4406-A18D-3F2B219DC32A", 894, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-14T00:00:00", "18 22 25 31 38", "29", null ] -, [ 895, "FC1726CE-A844-4A99-9DFA-D539BDDCA6D4", 895, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-17T00:00:00", "11 20 26 46 53", "12", null ] -, [ 896, "A09E249A-42AA-4FC7-A7AE-DE5A7A81730D", 896, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-21T00:00:00", "08 11 12 31 32", "29", null ] -, [ 897, "06BBE3E8-F94D-4C38-84D0-B69EA134FFBF", 897, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-24T00:00:00", "15 16 27 40 52", "16", null ] -, [ 898, "20564B01-7B85-4448-B8E7-20634A4F9BDF", 898, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-28T00:00:00", "06 18 36 40 49", "07", null ] -, [ 899, "13965554-94D3-4B1F-918E-873DBCAF3770", 899, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-31T00:00:00", "10 12 13 35 56", "09", null ] -, [ 900, "2C0357BE-D0C4-4F6B-AD5D-454A3B01C445", 900, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-04T00:00:00", "04 08 15 25 47", "42", null ] -, [ 901, "77D470C4-97D8-4CD6-9CA7-E859EEAB4ED4", 901, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-07T00:00:00", "04 22 42 46 53", "20", null ] -, [ 902, "26BAF649-07AE-4D93-B04E-FBE9CC8E49C7", 902, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-11T00:00:00", "01 04 11 16 45", "37", null ] -, [ 903, "ED65CBC2-082D-49D7-A606-6BE130637FD4", 903, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-14T00:00:00", "02 15 17 33 35", "08", null ] -, [ 904, "79DED60A-4528-436F-96B3-20A5ECD2A325", 904, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-18T00:00:00", "04 27 29 38 45", "05", "04" ] -, [ 905, "E504A2AA-4A80-4CA3-87F4-7126B60E3CB2", 905, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-21T00:00:00", "05 09 21 35 38", "20", "04" ] -, [ 906, "6F676480-6614-4824-B7A0-A26A8B685BFE", 906, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-25T00:00:00", "05 08 31 46 50", "04", "04" ] -, [ 907, "C299984A-6FD1-46F2-A7FE-BF6FBA223648", 907, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-28T00:00:00", "14 33 48 49 50", "18", "04" ] -, [ 908, "DB803BB1-1023-4152-BE1A-677F08638237", 908, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-01T00:00:00", "16 22 23 26 35", "31", "04" ] -, [ 909, "59B74F61-2A5E-45D6-A80C-555F393BE9D2", 909, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-04T00:00:00", "06 20 29 48 55", "06", "04" ] -, [ 910, "ED342343-2A2F-43D9-A4AF-B0E8975A8D4F", 910, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-08T00:00:00", "25 35 36 47 48", "18", "02" ] -, [ 911, "997BA78B-4852-4D68-9136-0985CFF2A1B2", 911, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-11T00:00:00", "08 09 17 32 34", "13", "02" ] -, [ 912, "B9185736-00EE-445E-ABF2-68FD1FD9D41A", 912, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-15T00:00:00", "17 18 24 35 39", "18", "04" ] -, [ 913, "97470996-54FB-43DD-A51C-DCAC8B285499", 913, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-18T00:00:00", "05 06 07 30 45", "42", "03" ] -, [ 914, "1648D615-BF93-43BB-914C-ED9917530014", 914, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-22T00:00:00", "15 22 23 48 55", "31", "04" ] -, [ 915, "1706FD60-3151-4521-8369-ECCF5713BDF4", 915, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-25T00:00:00", "04 05 17 19 50", "07", "04" ] -, [ 916, "C31F64C8-FC0C-4378-A874-B3525CAEB27B", 916, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-01T00:00:00", "01 12 19 20 47", "25", "03" ] -, [ 917, "E7B38725-6D52-4D74-BE16-3EA8FDD10522", 917, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-04T00:00:00", "08 10 15 23 41", "07", "04" ] -, [ 918, "85F41156-0B86-480C-B223-BF206B9C4E8C", 918, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-08T00:00:00", "03 17 19 41 55", "24", "04" ] -, [ 919, "9377C452-D026-450A-B335-10C3709281F7", 919, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-11T00:00:00", "14 19 21 42 45", "06", "02" ] -, [ 920, "ED632697-783D-40E4-BBFA-BC9082954A7C", 920, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-15T00:00:00", "10 11 12 28 43", "45", "04" ] -, [ 921, "8681263B-5DAA-42EF-91EC-B7696A1E0849", 921, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-18T00:00:00", "14 33 34 54 56", "37", "04" ] -, [ 922, "3A284E39-1A0C-437A-A226-D221A4662F82", 922, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-22T00:00:00", "01 14 35 50 53", "43", "04" ] -, [ 923, "0CA4411F-F91F-4E80-B481-B5623FD47A33", 923, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-25T00:00:00", "22 24 31 52 54", "04", "04" ] -, [ 924, "CA55CA0F-FA9E-4348-B093-FC8A814140CB", 924, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-29T00:00:00", "06 15 23 34 38", "43", "04" ] -, [ 925, "EE5FC4AE-6C59-49BD-A6B9-CB0A04129E71", 925, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-01T00:00:00", "13 14 35 36 53", "19", "03" ] -, [ 926, "B70B7726-A102-489D-BF40-EB1F09381F4F", 926, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-05T00:00:00", "01 19 20 31 36", "09", "02" ] -, [ 927, "12A34C6D-6E1C-4888-B5F8-897E69681A44", 927, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-08T00:00:00", "06 40 45 50 56", "11", "03" ] -, [ 928, "8A851800-D763-454E-82FC-A8EBABA79F79", 928, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-12T00:00:00", "10 23 39 41 45", "15", "02" ] -, [ 929, "DFD2C533-7E17-4E64-8DE2-708A88683D96", 929, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-15T00:00:00", "22 23 33 39 48", "29", "03" ] -, [ 930, "C91C01F8-E7EF-4BBF-BCD3-C10695E342D3", 930, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-19T00:00:00", "20 24 32 45 51", "43", "04" ] -, [ 931, "C9A991A6-F088-4BF5-86CC-7786BCC4B8BF", 931, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-22T00:00:00", "03 18 46 51 53", "17", "03" ] -, [ 932, "082306E6-63D4-4E90-885E-4F29F45038B2", 932, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-26T00:00:00", "19 29 32 38 55", "15", "03" ] -, [ 933, "FDB58993-7061-4DCD-BD25-97ED0F318800", 933, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-29T00:00:00", "09 10 11 33 51", "29", "04" ] -, [ 934, "E042D17F-5ECB-40B2-8F2B-8326E77CFAD1", 934, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-03T00:00:00", "01 16 29 36 50", "16", "02" ] -, [ 935, "BCB6D64F-B258-40C3-BC82-EA562C957524", 935, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-06T00:00:00", "06 18 26 37 41", "09", "03" ] -, [ 936, "53C3DF38-DE02-49F1-90A2-108EB17948DD", 936, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-10T00:00:00", "11 16 34 40 51", "34", "04" ] -, [ 937, "9062FC96-A0F7-4EBC-9222-207F6758945C", 937, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-13T00:00:00", "03 33 39 47 53", "09", "04" ] -, [ 938, "32BB7177-E9EB-47B6-84FC-548D8B8A8406", 938, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-17T00:00:00", "01 02 17 25 48", "45", "04" ] -, [ 939, "27A3671C-10EF-401B-A767-610E60A6D0D4", 939, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-20T00:00:00", "10 17 19 45 48", "30", "04" ] -, [ 940, "3F03D46F-A972-431C-9605-B0CEDDFBB538", 940, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-24T00:00:00", "09 12 21 42 43", "42", "03" ] -, [ 941, "B4084B59-39C3-4252-9F9A-BB40B2CDB0E3", 941, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-27T00:00:00", "05 07 14 28 56", "10", "04" ] -, [ 942, "D7487BF7-2906-4A83-9BD9-98340B7FF036", 942, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-31T00:00:00", "28 30 31 37 55", "13", "03" ] -, [ 943, "361175FE-70B8-4080-BCBE-DB3E33556884", 943, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-03T00:00:00", "20 23 41 49 53", "31", "03" ] -, [ 944, "78C57DD5-875D-4F58-BFD9-121A6426D17B", 944, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-07T00:00:00", "29 32 35 47 52", "13", "04" ] -, [ 945, "9B6A425B-C5D3-4060-BAE7-97BDCC0BA7A4", 945, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-10T00:00:00", "18 21 27 37 38", "07", "03" ] -, [ 946, "9FDFF7B8-D455-4EE2-9AF2-7863146C4254", 946, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-14T00:00:00", "09 10 20 51 53", "24", "04" ] -, [ 947, "E4FE6C91-145A-4F31-9329-2976DC2DC0B1", 947, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-17T00:00:00", "12 29 46 47 51", "24", "04" ] -, [ 948, "12BDCBD8-F24B-48B1-867C-FD63ACC61CBF", 948, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-21T00:00:00", "11 24 25 31 46", "17", "03" ] -, [ 949, "1767DF09-F7CC-4762-B402-0E78147849D2", 949, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-24T00:00:00", "10 14 40 49 51", "04", "03" ] -, [ 950, "75829CF8-883B-4288-A747-9CF265DA50D9", 950, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-28T00:00:00", "12 17 27 47 48", "33", "04" ] -, [ 951, "C4C4306D-220A-43A8-A17B-6CFB22A90C45", 951, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-01T00:00:00", "12 17 30 35 47", "26", "04" ] -, [ 952, "1D651FF1-7190-422B-9E1C-9A964497C63B", 952, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-05T00:00:00", "01 10 13 18 46", "19", "02" ] -, [ 953, "15662C19-F99B-4447-9E80-6C8BDD767BBD", 953, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-08T00:00:00", "01 02 22 37 50", "45", "03" ] -, [ 954, "F61F010C-3070-4BCA-B84E-9040E840FB7B", 954, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-12T00:00:00", "03 09 11 44 49", "09", "04" ] -, [ 955, "03407F0F-604A-442F-A41E-4EA6CAFF01B7", 955, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-15T00:00:00", "16 29 30 46 56", "06", "03" ] -, [ 956, "4F5FE17B-8F5B-4648-9C22-FF9C6CB4626A", 956, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-19T00:00:00", "02 09 10 16 35", "40", "04" ] -, [ 957, "FE5C7077-5151-4BDF-A84B-148E50276C42", 957, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-22T00:00:00", "23 31 32 39 56", "38", "04" ] -, [ 958, "7AB8C5B6-90EB-4D60-9460-5F2AA356D05F", 958, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-26T00:00:00", "20 25 35 52 55", "10", "03" ] -, [ 959, "4083D81B-59EA-4E2D-B1F4-BEA1BCB41C25", 959, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-29T00:00:00", "08 10 22 47 48", "35", "04" ] -, [ 960, "61B4C46D-7E74-4438-950B-90514726608E", 960, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-02T00:00:00", "14 17 19 20 32", "28", "04" ] -, [ 961, "2CC54035-3718-4107-97B6-4BE09FD71596", 961, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-05T00:00:00", "06 24 28 33 42", "19", "03" ] -, [ 962, "C857D075-C3B6-4F20-A7DA-1DC845609E06", 962, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-09T00:00:00", "11 19 39 45 54", "15", "04" ] -, [ 963, "2CA2F348-42C1-4F15-8DDB-98966C409F07", 963, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-12T00:00:00", "09 43 51 54 55", "13", "04" ] -, [ 964, "1C06FA2B-34CA-4FF9-839A-FA0CBD905412", 964, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-16T00:00:00", "04 38 41 42 43", "44", "04" ] -, [ 965, "A7002E4C-D525-4F4C-A6AD-CBCB5A398BF1", 965, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-19T00:00:00", "05 15 53 54 56", "22", "02" ] -, [ 966, "D9A6699C-0C64-4546-8D22-6D6AC65F2EEF", 966, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-23T00:00:00", "11 21 44 48 49", "23", "03" ] -, [ 967, "E52436B0-9F29-4E7F-81D9-D21216826900", 967, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-26T00:00:00", "02 03 27 30 47", "36", "03" ] -, [ 968, "A26F102A-2C79-4F3D-A3E7-F3C58BF013A5", 968, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-30T00:00:00", "02 22 25 28 50", "18", "04" ] -, [ 969, "C577652E-D5BA-4C64-95CD-7FE4113D1534", 969, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-02T00:00:00", "25 44 48 49 55", "20", "03" ] -, [ 970, "353CE32E-67DD-4000-A3B2-165DBE4F2AAD", 970, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-06T00:00:00", "01 36 38 42 49", "19", "04" ] -, [ 971, "DA63C527-7600-4B8C-B383-C60019F11E5A", 971, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-09T00:00:00", "07 12 19 23 31", "45", "04" ] -, [ 972, "1A5842C0-C7C8-4AE5-B7A0-C6E8526ECD60", 972, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-13T00:00:00", "22 31 43 48 56", "45", "04" ] -, [ 973, "B7BAA60D-4658-4CB5-A865-D8C09693BBE7", 973, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-16T00:00:00", "06 23 41 45 56", "24", "04" ] -, [ 974, "A79C80C8-5F1B-43F2-A85A-4EABE40717B1", 974, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-20T00:00:00", "06 29 38 50 51", "39", "04" ] -, [ 975, "9C7F9D8A-9F22-4D27-AA9F-6B33AC7E70C1", 975, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-23T00:00:00", "27 31 32 40 52", "36", "04" ] -, [ 976, "AD2198FD-D11B-4183-9795-0F6E1B615274", 976, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-27T00:00:00", "02 20 28 36 45", "37", "04" ] -, [ 977, "14359A50-4A72-49E1-BA4F-88F1D18FEDFD", 977, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-30T00:00:00", "03 19 21 44 45", "29", "04" ] -, [ 978, "30A42918-32C3-4CE6-987F-AA1F27428177", 978, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-04T00:00:00", "03 26 40 45 52", "11", "03" ] -, [ 979, "01BF3321-0A60-4A1E-B5BE-81C2EFF99377", 979, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-07T00:00:00", "05 15 19 23 38", "19", "04" ] -, [ 980, "151F6F6E-3E97-4C7D-B393-6F4E62FF5239", 980, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-11T00:00:00", "25 34 38 44 56", "27", "04" ] -, [ 981, "786305BD-AE43-4B74-904E-236BDC499173", 981, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-14T00:00:00", "13 35 42 45 54", "26", "04" ] -, [ 982, "4D851549-3C28-40F9-9007-52231A2ED3EC", 982, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-18T00:00:00", "24 25 45 47 53", "42", "02" ] -, [ 983, "9EF3EFE4-9B8F-4014-8255-65EE45D9C3BE", 983, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-21T00:00:00", "06 21 35 37 38", "17", "03" ] -, [ 984, "5A28EBCE-5991-4A98-9931-5F1188307510", 984, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-25T00:00:00", "13 33 40 44 46", "08", "04" ] -, [ 985, "9B8BD3AB-FC4E-4877-856E-ACBC96EB4FCA", 985, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-28T00:00:00", "13 31 49 52 56", "41", "04" ] -, [ 986, "23D572A8-4943-416E-8344-79058FA41CDD", 986, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-01T00:00:00", "27 31 39 40 46", "36", "03" ] -, [ 987, "AE43DCE8-48BD-4103-A73D-1A9727E2616D", 987, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-04T00:00:00", "26 30 32 33 44", "01", "04" ] -, [ 988, "86A6904E-420B-4093-B38E-5B2786E20787", 988, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-08T00:00:00", "05 31 45 47 54", "04", "04" ] -, [ 989, "FCB62BE1-0722-40C7-A08E-C6E4938DC12C", 989, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-11T00:00:00", "02 16 22 29 50", "27", "04" ] -, [ 990, "7AE6EB76-503C-4BD5-BF39-A80C061F7F41", 990, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-15T00:00:00", "03 06 24 30 33", "21", "04" ] -, [ 991, "E5B962F9-B0B4-458D-9E1D-9E13AB973BD5", 991, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-18T00:00:00", "04 13 33 39 55", "03", "04" ] -, [ 992, "EB0D798E-AE4A-43BA-95DF-C7BBC32EBD9B", 992, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-22T00:00:00", "04 16 23 33 48", "38", "02" ] -, [ 993, "ACF4DF8E-BE16-45A6-BEDF-88206B701D0B", 993, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-25T00:00:00", "22 28 42 49 54", "43", "03" ] -, [ 994, "165668FF-6882-4BD5-8F20-466C5642A6CF", 994, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-29T00:00:00", "17 29 43 48 52", "36", "04" ] -, [ 995, "A2363856-2A4E-4701-A67B-94FC6ACA1DB0", 995, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-02T00:00:00", "24 30 48 51 56", "45", "04" ] -, [ 996, "532D6096-7C43-49C0-BB8C-212540A0DE99", 996, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-06T00:00:00", "07 21 29 35 49", "39", "04" ] -, [ 997, "C4B9DE45-9917-4551-9E78-8DA354CD74A6", 997, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-09T00:00:00", "04 12 29 49 51", "44", "04" ] -, [ 998, "24CB3C7A-76D3-4FCA-8ECE-C49794E30096", 998, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-13T00:00:00", "05 06 22 26 41", "06", "04" ] -, [ 999, "C30F212B-2CE3-406A-B3CB-28B6307A4A5D", 999, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-16T00:00:00", "02 04 26 36 39", "27", "03" ] -, [ 1000, "CD1A74E7-9E48-485B-8821-BFF2B6ECB703", 1000, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-20T00:00:00", "20 24 27 45 51", "31", "04" ] -, [ 1001, "4EDD3812-7564-4A29-B3E8-D64EE36AC9A7", 1001, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-23T00:00:00", "03 05 08 18 29", "14", "04" ] -, [ 1002, "D387D16A-8078-4E85-B4A1-E24BBDF45CC8", 1002, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-27T00:00:00", "23 32 33 39 43", "08", "03" ] -, [ 1003, "2F7BF875-07B8-4155-A068-229749172CDE", 1003, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-30T00:00:00", "04 24 45 46 52", "01", "04" ] -, [ 1004, "889504F6-0DFA-46AE-A744-B83293ABC371", 1004, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-03T00:00:00", "02 03 15 22 36", "23", "02" ] -, [ 1005, "76A27770-967F-411A-9748-CF2390EE3076", 1005, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-06T00:00:00", "09 17 28 34 48", "46", "02" ] -, [ 1006, "BA255100-BE0C-4719-A6D8-8E4E9BEA6A6C", 1006, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-10T00:00:00", "04 10 16 38 48", "34", "03" ] -, [ 1007, "82C36070-B9A3-4229-941D-B78430B169E2", 1007, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-13T00:00:00", "10 27 28 37 51", "19", "03" ] -, [ 1008, "75E0C7D8-ECD3-4DE1-9A7D-535F3B20CB3B", 1008, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-17T00:00:00", "03 15 31 36 53", "27", "02" ] -, [ 1009, "4ED7B6B9-35E5-42F5-B252-E57C515EE88E", 1009, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-20T00:00:00", "01 09 28 38 47", "08", "02" ] -, [ 1010, "BC86C784-2F3B-4403-A7DA-AD689471EC92", 1010, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-24T00:00:00", "10 22 24 36 49", "33", "04" ] -, [ 1011, "B8BD18B7-206A-4EBE-8DF8-45758EAA7A9D", 1011, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-27T00:00:00", "03 05 30 36 48", "23", "04" ] -, [ 1012, "3BBB4C54-DAF1-4D85-964B-D454BD35F996", 1012, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-31T00:00:00", "09 17 18 28 43", "09", "03" ] -, [ 1013, "EE2BB967-740B-41F2-8E2F-C714F30640E3", 1013, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-03T00:00:00", "07 19 21 49 53", "35", "04" ] -, [ 1014, "70FCEB5F-1CF6-4FFB-AD16-BAD74E82508E", 1014, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-07T00:00:00", "17 23 30 37 45", "04", "04" ] -, [ 1015, "32CE4FC2-B7D8-4D53-8BE9-5C71C805DB1E", 1015, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-10T00:00:00", "03 04 18 29 50", "20", "04" ] -, [ 1016, "A6C2E716-7C33-4C21-8F6D-FD67832236CF", 1016, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-14T00:00:00", "03 05 10 26 27", "27", "02" ] -, [ 1017, "78CC6486-2735-47CA-871D-EB288034B18F", 1017, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-17T00:00:00", "16 25 28 32 40", "03", "03" ] -, [ 1018, "47263F7C-71EE-43E4-975B-3C5DF80046B7", 1018, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-21T00:00:00", "09 30 39 42 47", "37", "03" ] -, [ 1019, "B5FD41BF-5398-4E7C-A04B-6110ABD8EEED", 1019, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-24T00:00:00", "01 16 18 25 27", "03", "04" ] -, [ 1020, "2568AF78-E4B3-4C0A-9D84-EB2BBA8674C7", 1020, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-28T00:00:00", "06 15 29 39 51", "36", "03" ] -, [ 1021, "A33ED94D-C63F-4D5A-A22D-74A6B3B37642", 1021, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-02T00:00:00", "16 29 48 52 54", "05", "02" ] -, [ 1022, "59AE5BFB-80D6-405A-9625-2B69FCD4B05E", 1022, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-06T00:00:00", "20 24 31 33 36", "44", "04" ] -, [ 1023, "032F093E-4D73-4CBE-8326-F24E4EA1ED75", 1023, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-09T00:00:00", "09 10 27 36 42", "11", "04" ] -, [ 1024, "CA113647-C098-4AEF-A96D-15D60FB897F8", 1024, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-13T00:00:00", "02 08 30 36 48", "31", "03" ] -, [ 1025, "44AA3D24-858A-406C-B594-06AE881897FE", 1025, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-16T00:00:00", "28 29 43 51 53", "07", "03" ] -, [ 1026, "24B69175-A86E-4AFA-8907-6B9ECFFD4D90", 1026, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-20T00:00:00", "01 04 06 11 14", "30", "04" ] -, [ 1027, "2D3BF97D-85C5-4BAD-ABF3-8E2D6376AA64", 1027, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-23T00:00:00", "06 17 19 20 21", "20", "04" ] -, [ 1028, "287A0E8A-4CA3-46CD-99D5-DA0C70EA8623", 1028, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-27T00:00:00", "09 19 34 44 51", "24", "03" ] -, [ 1029, "E0CBAB93-0D60-4131-B751-AF175E839DC5", 1029, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-30T00:00:00", "02 04 23 38 46", "23", "03" ] -, [ 1030, "2B8F29D2-4F87-4FF3-940F-61A8BB5EAEF5", 1030, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-03T00:00:00", "11 35 38 41 52", "40", "04" ] -, [ 1031, "4C5219FC-B9CE-49D3-B015-16B2E70787E4", 1031, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-06T00:00:00", "02 19 20 24 33", "39", "04" ] -, [ 1032, "A9D5BE40-C127-4D07-B697-FF1A5C1F23D0", 1032, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-10T00:00:00", "02 06 12 31 48", "25", "04" ] -, [ 1033, "2800F10F-2350-4D18-90BD-08B9D6AB5147", 1033, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-13T00:00:00", "09 14 17 36 42", "33", "04" ] -, [ 1034, "30125944-9595-44DC-9BC2-496EF0A18A0F", 1034, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-17T00:00:00", "01 16 24 32 48", "02", "04" ] -, [ 1035, "B1EC5474-6214-4C5C-8AF8-DB582A346125", 1035, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-20T00:00:00", "14 23 26 33 35", "40", "03" ] -, [ 1036, "5F6AEAD5-C667-4EFF-93F6-55E65CDD6E53", 1036, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-24T00:00:00", "03 09 15 37 38", "39", "04" ] -, [ 1037, "0F0DA791-5E11-413F-9116-17E2CA8A4393", 1037, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-27T00:00:00", "02 05 45 46 47", "37", "04" ] -, [ 1038, "0C71166B-0DEE-4DC7-91B1-C07F5A983930", 1038, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-01T00:00:00", "24 27 31 45 52", "38", "04" ] -, [ 1039, "B932BD1C-ADB6-4055-BA78-6C974B288CA4", 1039, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-04T00:00:00", "04 11 21 42 53", "38", "04" ] -, [ 1040, "BE8AF87B-F38F-4E90-94AA-A7DFC3311A72", 1040, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-08T00:00:00", "02 06 08 18 51", "19", "03" ] -, [ 1041, "A94A8741-F148-4E47-8537-2D677D998EA8", 1041, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-11T00:00:00", "03 15 29 35 54", "08", "04" ] -, [ 1042, "72D8AD79-C9F3-4DF2-BADF-3DE68622F209", 1042, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-15T00:00:00", "10 11 12 14 24", "06", "04" ] -, [ 1043, "6C599BA2-2F12-42D0-92BD-08C0C744DC82", 1043, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-18T00:00:00", "03 11 22 34 49", "01", "04" ] -, [ 1044, "723FDBC5-CFF6-4E47-BF82-2239FFD02151", 1044, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-22T00:00:00", "10 14 35 43 52", "16", "02" ] -, [ 1045, "A5BBE96D-3E42-4E92-BDCB-EB8AE2FEE2E6", 1045, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-25T00:00:00", "09 15 21 40 54", "11", "04" ] -, [ 1046, "305F4750-B4FE-4239-94CC-200981921FE8", 1046, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-29T00:00:00", "02 14 29 53 55", "31", "03" ] -, [ 1047, "BED1DE4C-7487-4697-ABB0-6EE0DE1D4C04", 1047, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-01T00:00:00", "02 27 38 46 52", "45", "03" ] -, [ 1048, "B6CC489D-1533-43CA-89AA-DEC3FA71868C", 1048, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-05T00:00:00", "37 39 42 53 55", "22", "03" ] -, [ 1049, "B282494C-029B-48A5-A971-BA1921A48F9C", 1049, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-08T00:00:00", "04 09 34 40 48", "25", "03" ] -, [ 1050, "705B58FB-961E-4DFB-9CE5-DD699AE6FE85", 1050, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-12T00:00:00", "02 09 17 34 50", "45", "04" ] -, [ 1051, "1AA6BC29-665A-4273-A019-CB18A0EF7E50", 1051, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-15T00:00:00", "08 12 18 30 40", "04", "03" ] -, [ 1052, "D28DA568-A586-4B07-BFCA-B6EFFF9E1E31", 1052, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-19T00:00:00", "11 21 27 30 53", "11", "02" ] -, [ 1053, "3AF12744-1D00-4BAC-8FA5-2843BBA1A78D", 1053, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-22T00:00:00", "10 16 19 32 36", "13", "03" ] -, [ 1054, "8EAB153B-B676-4A10-A75F-8360F91F7055", 1054, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-26T00:00:00", "03 16 23 35 36", "20", "04" ] -, [ 1055, "5352FDFD-E36E-422B-ADA4-587EC8275C8F", 1055, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-29T00:00:00", "28 34 39 45 53", "34", "04" ] -, [ 1056, "26E044FD-9174-44BF-9C91-E9FA6815CEF0", 1056, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-03T00:00:00", "03 04 24 36 52", "45", "04" ] -, [ 1057, "2FA5C720-4FDC-4A9F-B91F-07D4A92EA36C", 1057, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-06T00:00:00", "20 23 28 35 39", "21", "03" ] -, [ 1058, "7A122C50-A85E-403D-B68B-93290FAAC6D0", 1058, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-10T00:00:00", "03 11 19 23 36", "21", "04" ] -, [ 1059, "5478F179-CB82-4D15-8BFF-406E7560B55C", 1059, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-13T00:00:00", "06 07 13 24 46", "34", "02" ] -, [ 1060, "87740C9F-5839-4E38-8941-538016EB7A1B", 1060, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-17T00:00:00", "01 13 21 49 55", "17", "04" ] -, [ 1061, "E8F5ECD9-405B-4DDC-BB35-6247149D2DD7", 1061, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-20T00:00:00", "02 44 48 50 52", "03", "03" ] -, [ 1062, "21E69FF5-7872-4D58-AD7D-419F6B34AB5B", 1062, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-24T00:00:00", "05 09 38 46 51", "05", "04" ] -, [ 1063, "2714EA68-34BE-4055-8BC1-C907DE0D79FD", 1063, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-27T00:00:00", "02 03 04 08 43", "26", "03" ] -, [ 1064, "F0BBD71B-BB7C-4A97-8582-F86CA8B2F948", 1064, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-31T00:00:00", "05 18 21 29 41", "37", "03" ] -, [ 1065, "D86272A6-5D75-425F-A394-6165EA82158F", 1065, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-03T00:00:00", "02 10 13 38 46", "02", "03" ] -, [ 1066, "24D037E0-9557-4E57-AEB6-EECC0B19A7EE", 1066, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-07T00:00:00", "30 32 33 42 48", "07", "04" ] -, [ 1067, "50ECF7BF-2414-4BDA-837F-37F70F919736", 1067, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-10T00:00:00", "10 18 36 38 44", "08", "04" ] -, [ 1068, "49E869CF-430E-40E1-9505-A56BF9E5C452", 1068, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-14T00:00:00", "15 23 34 39 55", "32", "04" ] -, [ 1069, "4C5FA5C7-BA64-457B-86B4-0E8DB3627DBA", 1069, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-17T00:00:00", "08 20 24 35 56", "24", "03" ] -, [ 1070, "81506B15-2BAB-43FE-B9D7-9C71A8AF4EE9", 1070, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-21T00:00:00", "05 13 20 23 33", "30", "02" ] -, [ 1071, "952B076F-8AE1-400D-93BA-9867E014DFA2", 1071, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-24T00:00:00", "25 34 45 46 49", "34", "02" ] -, [ 1072, "3AFF5326-08D1-4F56-BEAE-51B9F7D0996A", 1072, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-28T00:00:00", "04 09 40 45 50", "39", "04" ] -, [ 1073, "537C9CD1-1310-4E5E-809B-D3E090056EE7", 1073, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-31T00:00:00", "31 40 41 47 48", "45", "03" ] -, [ 1074, "DF515955-CF4F-45B9-9936-F22EAF2DB035", 1074, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-04T00:00:00", "16 32 39 41 53", "16", "03" ] -, [ 1075, "C58215A7-C613-40B9-8927-C97403B4E82E", 1075, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-07T00:00:00", "15 32 38 42 46", "31", "04" ] -, [ 1076, "245ED977-E62E-4E8C-B64C-B17A1402870B", 1076, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-11T00:00:00", "05 11 20 33 36", "11", "03" ] -, [ 1077, "9F3F66A2-40BD-4955-B76E-EDCEBBAB20B0", 1077, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-14T00:00:00", "16 17 21 40 51", "20", "04" ] -, [ 1078, "2BE42A83-7582-4311-976D-63325F6C3321", 1078, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-18T00:00:00", "05 09 22 36 49", "36", "03" ] -, [ 1079, "DF65731A-4ADB-4724-B5B1-C2D61E1D39E6", 1079, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-21T00:00:00", "03 13 14 46 55", "34", "04" ] -, [ 1080, "7EF88A92-5329-4F32-8B37-43827B42F8D5", 1080, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-25T00:00:00", "07 08 23 50 51", "26", "03" ] -, [ 1081, "DFF13765-B557-4D84-80BF-8020B16F7107", 1081, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-28T00:00:00", "06 08 14 43 56", "28", "04" ] -, [ 1082, "E85924F2-4908-48C8-B845-CF32BE2D6D82", 1082, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-02T00:00:00", "10 11 20 42 55", "09", "04" ] -, [ 1083, "4136F9B6-D4E6-406E-A256-F09FE9C08F6A", 1083, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-05T00:00:00", "08 09 16 32 39", "15", "03" ] -, [ 1084, "8FC75879-BBB0-4BFD-817D-DFAC4BC5FC53", 1084, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-09T00:00:00", "06 15 16 22 37", "03", "04" ] -, [ 1085, "DA6C0387-AAC5-4D7B-8AB8-ACFB2DE932D7", 1085, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-12T00:00:00", "06 10 24 26 42", "15", "04" ] -, [ 1086, "77632ABE-F1FE-4DF7-9A02-4F3971F88C0A", 1086, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-16T00:00:00", "13 37 40 46 52", "29", "04" ] -, [ 1087, "35A41C79-9F9F-4051-8324-4E01959AF6F2", 1087, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-19T00:00:00", "14 34 36 48 53", "42", "03" ] -, [ 1088, "C43C079A-8259-46AE-AD0C-C1171C0D9702", 1088, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-23T00:00:00", "01 17 42 46 55", "01", "02" ] -, [ 1089, "46175276-4C66-4662-A23B-43E736DA2823", 1089, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-26T00:00:00", "04 15 24 36 40", "44", "02" ] -, [ 1090, "717D3849-2E82-4B11-8869-916662186A7D", 1090, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-30T00:00:00", "05 12 18 29 56", "38", "04" ] -, [ 1091, "37B75EFB-58C1-4F42-8B5C-F8EC5B381204", 1091, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-02T00:00:00", "04 18 22 38 44", "24", "03" ] -, [ 1092, "BA9E7188-173F-4C06-94C2-FA01ED9B3A64", 1092, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-06T00:00:00", "03 05 13 32 35", "06", "03" ] -, [ 1093, "D4EF0869-D9F0-4ADC-BE7B-356178EBA83A", 1093, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-09T00:00:00", "18 22 33 35 40", "11", "04" ] -, [ 1094, "167AB7D8-1685-45F9-B174-BBD1A7209F65", 1094, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-13T00:00:00", "06 12 31 46 56", "34", "02" ] -, [ 1095, "00FEB10F-0562-4691-9475-2E8DBF917745", 1095, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-16T00:00:00", "05 24 26 29 53", "36", "04" ] -, [ 1096, "FF917F07-13CC-4BA0-B947-7317F69BBD5D", 1096, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-20T00:00:00", "09 13 22 38 52", "44", "04" ] -, [ 1097, "EDE051F2-8DAF-4C2B-A7EE-A86E4C90C301", 1097, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-23T00:00:00", "08 37 44 47 48", "27", "04" ] -, [ 1098, "4FF05C3B-F34D-489D-A3BD-BF21FC01E90D", 1098, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-27T00:00:00", "05 12 26 42 49", "24", "04" ] -, [ 1099, "2CE2BB7D-AC4B-4524-8A19-EAEC23D1DB03", 1099, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-30T00:00:00", "11 22 24 28 31", "46", "03" ] -, [ 1100, "59EC55D3-6A65-4B9E-B764-A97714792364", 1100, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-04T00:00:00", "03 19 24 32 43", "44", "04" ] -, [ 1101, "F5EB2D52-1B44-493A-AAE3-7B024D35A473", 1101, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-07T00:00:00", "07 43 44 51 56", "04", "03" ] -, [ 1102, "4514531E-80EE-4556-B1A1-988590D025CC", 1102, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-11T00:00:00", "39 44 51 52 54", "13", "04" ] -, [ 1103, "B81A703D-FAC1-44E6-9686-652FD8271F71", 1103, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-14T00:00:00", "11 28 33 41 43", "41", "04" ] -, [ 1104, "7CEC7CB4-D889-44F3-8B63-6F8E50BD311A", 1104, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-18T00:00:00", "01 06 07 18 29", "16", "03" ] -, [ 1105, "F932DB93-4B9E-4563-A4B8-77E44190251B", 1105, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-21T00:00:00", "03 18 32 41 56", "19", "03" ] -, [ 1106, "F9751A75-3897-4B2A-A8B6-41481F808EB6", 1106, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-25T00:00:00", "02 03 18 34 48", "36", "04" ] -, [ 1107, "802578FB-DD16-4547-935D-D1148FBA842D", 1107, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-28T00:00:00", "10 13 32 40 41", "32", "04" ] -, [ 1108, "52CE7186-5986-428E-A395-B1C5D65A0BC0", 1108, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-01T00:00:00", "04 11 21 25 44", "29", "04" ] -, [ 1109, "AFC4FC11-6440-4195-A4D7-7BABF693798C", 1109, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-04T00:00:00", "01 02 23 25 55", "39", "04" ] -, [ 1110, "C7038282-827D-49CE-9421-AE78FADC4136", 1110, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-08T00:00:00", "03 20 21 38 42", "19", "04" ] -, [ 1111, "A1EE93AE-0700-4CEB-AAC1-E400CE47CF5E", 1111, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-11T00:00:00", "24 29 30 34 56", "01", "04" ] -, [ 1112, "6E6B28D8-DA3A-4A18-ACAA-ED5FBEE6F765", 1112, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-15T00:00:00", "01 06 12 19 41", "14", "04" ] -, [ 1113, "1CDA422F-6161-45AB-A608-3265EE8A02DF", 1113, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-18T00:00:00", "08 18 25 42 49", "14", "03" ] -, [ 1114, "D9BF1554-63B5-4AAB-B731-BDAC2ED2B49C", 1114, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-22T00:00:00", "07 11 16 39 54", "13", "03" ] -, [ 1115, "D9E2F748-C7A5-498C-9C34-ACCF4CD59C53", 1115, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-25T00:00:00", "11 12 17 31 48", "01", "04" ] -, [ 1116, "D354463F-ED6D-4C64-97BD-02F99BBFE12D", 1116, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-29T00:00:00", "08 12 27 46 47", "06", "03" ] -, [ 1117, "344BF005-5F14-456D-8F66-B045F0BDD0CF", 1117, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-01T00:00:00", "01 30 32 40 41", "17", "03" ] -, [ 1118, "FF269451-6A86-4792-86A0-F47F087E7B8C", 1118, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-05T00:00:00", "02 05 10 26 44", "46", "04" ] -, [ 1119, "946D9BF5-21CE-445F-9B54-23C00BF6B9A4", 1119, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-08T00:00:00", "06 15 20 39 50", "05", "04" ] -, [ 1120, "CCE92EEE-5DFE-46DC-A811-FB8FB6C42BDE", 1120, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-12T00:00:00", "09 22 32 38 55", "44", "03" ] -, [ 1121, "6E8DC59E-A1D3-4BE3-AD94-C9DDC798BCFD", 1121, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-15T00:00:00", "11 35 41 42 44", "42", "04" ] -, [ 1122, "267D0BD4-D7EF-4376-95B2-D11B5E4E4D2E", 1122, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-19T00:00:00", "01 15 19 30 56", "28", "03" ] -, [ 1123, "8E59FD84-CE6F-4F32-8BD6-24F2B2C6761A", 1123, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-22T00:00:00", "09 13 24 38 49", "30", "03" ] -, [ 1124, "CE025393-8E66-4A35-9785-3AF57314120E", 1124, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-26T00:00:00", "06 07 13 15 43", "07", "04" ] -, [ 1125, "41BAA06F-92DA-4FBD-BD08-6E0F30CC74EE", 1125, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-03-01T00:00:00", "17 30 38 43 51", "20", "04" ] -, [ 1126, "3C759335-70F9-43D8-8579-B10EE02BBA92", 1126, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-03-05T00:00:00", "06 20 39 41 46", "42", "03" ] -, [ 1128, "3BEE54D7-5827-423D-A45B-57280225C64B", 1128, 1363348969, "708543", 1363348969, "708543", "{\n}", "2013-03-08T00:00:00", "04 11 25 34 35", "44", "04" ] -, [ 1129, "9BA95032-4CD2-47C0-8849-B2763A756018", 1129, 1363348969, "708543", 1363348969, "708543", "{\n}", "2013-03-12T00:00:00", "09 12 19 20 30", "39", "04" ] -, [ 1131, "9EC242F7-CAF9-4BEE-8B68-69FFA06FD50E", 1131, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-15T00:00:00", "04 08 17 22 32", "08", "02" ] -, [ 1132, "ED91D5E6-75D0-461F-B75F-C71D05680F9A", 1132, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-19T00:00:00", "03 06 14 21 37", "35", "03" ] -, [ 1133, "484C92DF-9C91-44F8-A0D5-E6B1CA710ECE", 1133, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-22T00:00:00", "14 27 34 37 41", "38", "04" ] -, [ 1134, "3AE3734D-4290-4BFF-BEDC-6C80DFE1E017", 1134, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-26T00:00:00", "20 33 46 49 51", "46", "04" ] -, [ 1135, "D94AD183-ACB1-497A-8D41-0D4CB7C7A9B3", 1135, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-29T00:00:00", "25 31 36 46 53", "21", "04" ] -, [ 1136, "AAD7C104-063F-44FE-9871-D57F7AB15BCF", 1136, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-04-02T00:00:00", "07 10 14 40 47", "34", "04" ] -, [ 1137, "51CAFA51-4C1A-4680-A871-B8E95A4D5BC3", 1137, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-04-05T00:00:00", "08 15 23 36 41", "05", "03" ] -, [ 1139, "A6BC9F0F-78FE-46C4-A8B2-A814751D8620", 1139, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-09T00:00:00", "17 30 41 48 54", "13", "04" ] -, [ 1140, "31755A74-A1D7-4D79-9036-655BB9675711", 1140, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-12T00:00:00", "01 10 13 19 21", "28", "03" ] -, [ 1141, "C8DCB5D0-D886-4EA0-B036-2D28D8E566D2", 1141, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-16T00:00:00", "02 05 15 18 39", "42", "02" ] -, [ 1142, "68ACECAD-8C19-4528-9D43-66172BD23FF4", 1142, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-19T00:00:00", "06 08 12 22 43", "28", "04" ] -, [ 1143, "FB784F0E-D578-4096-BDB8-FE6B0AA6438B", 1143, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-23T00:00:00", "09 21 22 32 50", "10", "03" ] -, [ 1144, "51267C00-092E-4FAD-A0C2-0E80E5B287F8", 1144, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-26T00:00:00", "17 42 49 54 55", "31", "04" ] -, [ 1145, "BE7FCB7C-6D9A-4C53-9003-1762D1002834", 1145, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-30T00:00:00", "21 30 34 39 49", "43", "03" ] -, [ 1146, "37489A5A-AE35-4963-818A-79C81D7C420E", 1146, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-03T00:00:00", "02 20 34 42 54", "39", "02" ] -, [ 1147, "4103658B-1FCC-4C61-BD60-A25F14D7CB76", 1147, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-07T00:00:00", "01 06 13 20 51", "31", "04" ] -, [ 1148, "73828964-F4E0-4D97-9BE0-1030C96C06DD", 1148, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-10T00:00:00", "01 19 20 39 49", "28", "04" ] -, [ 1149, "CD109F37-1660-453B-B11F-E1A042F6367A", 1149, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-14T00:00:00", "06 10 12 28 32", "38", "04" ] -, [ 1150, "134C197F-4D35-46D5-97A8-363EC85C5F7A", 1150, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-17T00:00:00", "11 15 35 43 49", "41", "04" ] -, [ 1151, "D31E4D6A-1ED7-46E9-8801-C538F2B00DF8", 1151, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-21T00:00:00", "02 15 17 48 55", "11", "04" ] -, [ 1152, "67A3676C-9CE9-4AD5-AA4D-816428CD9DD6", 1152, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-24T00:00:00", "04 05 16 18 53", "28", "04" ] -, [ 1153, "2C1F1E98-3526-4DCA-99F6-3232C975FF7A", 1153, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-28T00:00:00", "04 12 25 32 54", "36", "04" ] -, [ 1154, "281321B5-0D36-4873-BA58-CFF592F88283", 1154, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-31T00:00:00", "02 20 26 44 46", "26", "03" ] -, [ 1155, "DE8A7985-1514-45D2-B3F4-71066E9A93EA", 1155, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-04T00:00:00", "10 11 12 20 55", "19", "03" ] -, [ 1156, "88A78BA1-75B1-4B19-B86B-E3E7A4B56DF3", 1156, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-07T00:00:00", "01 10 37 48 55", "21", "04" ] -, [ 1157, "19D77AD1-099E-4B73-867E-AE0E030A1D1B", 1157, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-11T00:00:00", "15 40 45 50 53", "28", "04" ] -, [ 1158, "6B2CFEC0-1059-42BB-8177-9884ED63A7FD", 1158, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-14T00:00:00", "02 05 31 33 34", "20", "04" ] -, [ 1159, "43196123-3624-4EAA-B62B-CDCE787D5891", 1159, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-18T00:00:00", "06 17 34 40 48", "30", "02" ] -, [ 1160, "E696EFBB-4D90-4788-AD22-DB95B76CF993", 1160, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-21T00:00:00", "03 14 17 40 50", "03", "03" ] -, [ 1161, "CF648C6E-2F7F-4E79-9CBE-A77779667BBC", 1161, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-25T00:00:00", "03 05 28 33 51", "16", "02" ] -, [ 1162, "8DE750D6-72BB-4DFE-BD37-E4B79A787AF5", 1162, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-28T00:00:00", "08 15 35 46 52", "38", "04" ] -, [ 1163, "F6C35A37-9C0A-497E-84AF-8C541B723501", 1163, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-07-02T00:00:00", "36 42 51 52 53", "40", "04" ] -, [ 1165, "B57DBFEB-3CE5-421A-B4D0-1C6FE19CD9D1", 1165, 1373960495, "708543", 1373960495, "708543", "{\n}", "2013-07-05T00:00:00", "02 23 41 47 54", "42", "04" ] -, [ 1166, "C39FE0CC-B623-4A5C-93B0-978C7D117C57", 1166, 1373960495, "708543", 1373960495, "708543", "{\n}", "2013-07-09T00:00:00", "03 21 43 45 48", "14", "02" ] -, [ 1168, "B8FC6747-8337-4895-9B3E-EBB6D585DFD1", 1168, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-12T00:00:00", "04 05 25 27 51", "10", "03" ] -, [ 1169, "8FE98420-15E7-46B3-80B8-5C969B920EF1", 1169, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-16T00:00:00", "10 14 21 40 53", "20", "02" ] -, [ 1170, "DD88EF69-CD96-4E83-89E2-6B53BD97EE73", 1170, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-19T00:00:00", "16 20 24 39 42", "46", "03" ] -, [ 1171, "1C7ADA59-1801-4B96-968C-B77854440912", 1171, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-23T00:00:00", "25 32 35 50 51", "46", "03" ] -, [ 1172, "EACD3FC7-2935-458E-AA95-44F2C20CB220", 1172, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-26T00:00:00", "04 22 23 27 38", "42", "04" ] -, [ 1173, "7DF345B2-D9AE-41E3-9C50-4820B5F6BEC7", 1173, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-30T00:00:00", "25 27 36 42 44", "39", "03" ] -, [ 1175, "6373BCDC-8BED-494F-9EF6-27C2632D5059", 1175, 1375712208, "708543", 1375712208, "708543", "{\n}", "2013-08-02T00:00:00", "08 21 23 25 39", "04", "02" ] -, [ 1177, "FDC98341-B359-4B13-9ACC-E56CD21D3006", 1177, 1376034895, "708543", 1376034895, "708543", "{\n}", "2013-08-06T00:00:00", "01 11 16 51 55", "41", "03" ] -, [ 1179, "4671157E-B666-4D37-BD2D-6BC7301F134C", 1179, 1376312414, "708543", 1376312414, "708543", "{\n}", "2013-08-09T00:00:00", "11 20 30 34 38", "12", "03" ] -, [ 1181, "8DDBA2CD-DB9C-4C8D-82FD-6966BE6A59E4", 1181, 1376486912, "708543", 1376486912, "708543", "{\n}", "2013-08-13T00:00:00", "02 31 32 37 41", "40", "04" ] -, [ 1183, "0911616E-2F9E-4473-B45B-16E2636132EE", 1183, 1376921184, "708543", 1376921184, "708543", "{\n}", "2013-08-16T00:00:00", "07 13 26 36 46", "37", "04" ] -, [ 1185, "54AF8A3A-8432-41BA-9DAB-4005B31898E6", 1185, 1377071706, "708543", 1377071706, "708543", "{\n}", "2013-08-20T00:00:00", "13 28 35 38 41", "33", "03" ] -, [ 1187, "75FE181F-FD04-449B-B905-DDE3E9D8B45A", 1187, 1377509016, "708543", 1377509016, "708543", "{\n}", "2013-08-23T00:00:00", "01 09 17 20 53", "14", "04" ] -, [ 1189, "AF8A2810-0255-4390-89B7-01B9CD3714B7", 1189, 1377695374, "708543", 1377695374, "708543", "{\n}", "2013-08-27T00:00:00", "04 07 30 36 38", "38", "04" ] -, [ 1191, "F340F4D7-005E-43A7-835C-5F437C8CE980", 1191, 1377918076, "708543", 1377918076, "708543", "{\n}", "2013-08-30T00:00:00", "06 19 24 43 44", "33", "02" ] -, [ 1193, "57668138-D77E-41A4-A653-A502920BAE5E", 1193, 1378263736, "708543", 1378263736, "708543", "{\n}", "2013-09-03T00:00:00", "04 13 14 28 41", "28", "03" ] -, [ 1197, "67057DAF-BB8E-49A3-A9E5-9C4498E7759F", 1197, 1378566096, "708543", 1378566096, "708543", "{\n}", "2013-09-06T00:00:00", "02 16 17 22 41", "31", "04" ] -, [ 1203, "2F3EFDD8-73E0-4577-A717-F943FE97BBD0", 1203, 1378868474, "708543", 1378868474, "708543", "{\n}", "2013-09-10T00:00:00", "02 12 18 54 56", "01", "03" ] -, [ 1205, "6CD062A7-159D-4079-92DB-AE8C20424C63", 1205, 1379127654, "708543", 1379127654, "708543", "{\n}", "2013-09-13T00:00:00", "09 22 28 48 54", "08", "04" ] -, [ 1207, "CFB168A0-A233-48E8-88B8-6EAB7721AD7B", 1207, 1379473264, "708543", 1379473264, "708543", "{\n}", "2013-09-17T00:00:00", "06 15 27 31 39", "25", "02" ] -, [ 1209, "B7FB8DDD-3DC7-472E-8C06-CDF77B7A1D20", 1209, 1379732475, "708543", 1379732475, "708543", "{\n}", "2013-09-20T00:00:00", "01 15 20 21 47", "34", "02" ] -, [ 1211, "7A049284-67B5-4A91-AF01-9914E831CDA7", 1211, 1380078065, "708543", 1380078065, "708543", "{\n}", "2013-09-24T00:00:00", "04 11 32 39 40", "33", "03" ] -, [ 1213, "7D185A57-BF93-48FC-89C5-13047BB01971", 1213, 1380337279, "708543", 1380337279, "708543", "{\n}", "2013-09-27T00:00:00", "09 23 27 49 51", "38", "02" ] -, [ 1215, "C521C07D-8F39-415E-B899-05489EEECD08", 1215, 1380682866, "708543", 1380682866, "708543", "{\n}", "2013-10-01T00:00:00", "07 10 30 37 53", "01", "03" ] -, [ 1217, "DA977317-43B0-4A2D-A0DE-BBD02E216397", 1217, 1380942064, "708543", 1380942064, "708543", "{\n}", "2013-10-04T00:00:00", "04 16 24 25 44", "05", "03" ] -, [ 1219, "178C758D-E83D-45DA-8B41-5FC1668DF08D", 1219, 1381287665, "708543", 1381287665, "708543", "{\n}", "2013-10-08T00:00:00", "06 15 19 23 40", "05", "03" ] -, [ 1221, "B591BCA6-8B28-4784-8291-E22BAA150DC9", 1221, 1381546854, "708543", 1381546854, "708543", "{\n}", "2013-10-11T00:00:00", "03 27 37 45 48", "46", "04" ] -, [ 1223, "1D2A1993-B0E0-4D79-AAB5-4CDD63EBBE74", 1223, 1381892445, "708543", 1381892445, "708543", "{\n}", "2013-10-15T00:00:00", "04 23 30 43 50", "11", "04" ] -, [ 1225, "05047244-5520-4963-9631-FB059B1D818D", 1225, 1382497255, "708543", 1382497255, "708543", "{\n}", "2013-10-22T00:00:00", "02 03 19 52 71", "14", "05" ] -, [ 1227, "F67117B4-9506-4B0F-AFB3-2068AFC40EBD", 1227, 1382756454, "708543", 1382756454, "708543", "{\n}", "2013-10-25T00:00:00", "06 16 45 54 60", "15", "02" ] -, [ 1229, "A1912FEE-CCAD-4455-BA2A-C7B70FFBEFA0", 1229, 1383102063, "708543", 1383102063, "708543", "{\n}", "2013-10-29T00:00:00", "20 33 50 53 54", "07", "03" ] -, [ 1231, "EF38518A-5261-432F-8C5A-AB1DB4938019", 1231, 1383361276, "708543", 1383361276, "708543", "{\n}", "2013-11-01T00:00:00", "32 35 49 62 67", "01", "05" ] -, [ 1233, "EBE1179F-A084-44F1-9CE4-93DAA1E8B5EA", 1233, 1383706866, "708543", 1383706866, "708543", "{\n}", "2013-11-05T00:00:00", "02 11 42 64 74", "02", "05" ] -, [ 1235, "2621B189-2DA4-4442-81E3-A5C5B3C45E9C", 1235, 1383966043, "708543", 1383966043, "708543", "{\n}", "2013-11-08T00:00:00", "41 42 51 57 65", "07", "02" ] -, [ 1237, "240EC7B3-968C-49A8-8964-6BA21C62B9B0", 1237, 1384335595, "708543", 1384335595, "708543", "{\n}", "2013-11-12T00:00:00", "20 30 32 42 71", "15", "05" ] -, [ 1239, "0DE2D9C9-90A2-4935-AD2C-3E83D65F9146", 1239, 1384571065, "708543", 1384571065, "708543", "{\n}", "2013-11-15T00:00:00", "25 44 49 54 63", "08", "04" ] -, [ 1241, "7935AC34-8C2D-41B9-AD70-D961EA870C52", 1241, 1384916445, "708543", 1384916445, "708543", "{\n}", "2013-11-19T00:00:00", "14 15 29 49 63", "02", "03" ] -, [ 1243, "28E02973-21FA-4667-8338-1EAD00A18DD3", 1243, 1385175654, "708543", 1385175654, "708543", "{\n}", "2013-11-22T00:00:00", "17 23 35 36 44", "08", "03" ] -, [ 1245, "78A29F4C-E6D8-4220-9BAF-A39EC86B01B1", 1245, 1385521297, "708543", 1385521297, "708543", "{\n}", "2013-11-26T00:00:00", "27 44 59 74 75", "03", "05" ] -, [ 1247, "23D353A9-9DA9-48CF-831F-1A1814B3338F", 1247, 1385780464, "708543", 1385780464, "708543", "{\n}", "2013-11-29T00:00:00", "09 41 43 47 57", "05", "04" ] -, [ 1249, "F65A0532-2E1D-4F37-8DC8-4393915B1311", 1249, 1386126046, "708543", 1386126046, "708543", "{\n}", "2013-12-03T00:00:00", "07 12 41 44 59", "03", "03" ] -, [ 1251, "B2E81356-B8CB-401B-BB42-2B76AD3FF125", 1251, 1386385254, "708543", 1386385254, "708543", "{\n}", "2013-12-06T00:00:00", "11 29 44 63 64", "03", "03" ] -, [ 1253, "418BDDC3-6283-4D2B-932E-25AE4BE0E39A", 1253, 1386730867, "708543", 1386730867, "708543", "{\n}", "2013-12-10T00:00:00", "05 12 22 41 65", "13", "02" ] -, [ 1255, "9C4371B8-472D-43C9-909F-A2C4853559ED", 1255, 1386990065, "708543", 1386990065, "708543", "{\n}", "2013-12-13T00:00:00", "19 24 26 27 70", "12", "02" ] -, [ 1257, "026F619A-B4D9-424B-AF29-10337E920A41", 1257, 1387335655, "708543", 1387335655, "708543", "{\n}", "2013-12-17T00:00:00", "08 14 17 20 39", "07", "04" ] -, [ 1259, "68BF57AC-6C45-4467-B7A8-B779BDC0962D", 1259, 1387594857, "708543", 1387594857, "708543", "{\n}", "2013-12-20T00:00:00", "03 04 31 49 57", "06", "02" ] -, [ 1261, "6DB61C6B-B71C-423D-A1CE-1339FCAB9E4A", 1261, 1387940464, "708543", 1387940464, "708543", "{\n}", "2013-12-24T00:00:00", "23 34 53 58 73", "02", "03" ] -, [ 1263, "F015A899-E4DE-4107-93A9-8A2B153B86CF", 1263, 1388286160, "708543", 1388286160, "708543", "{\n}", "2013-12-27T00:00:00", "04 15 35 48 49", "11", "05" ] -, [ 1265, "BEB24506-D802-409A-A5F2-BBFFDA30EF3F", 1265, 1388545256, "708543", 1388545256, "708543", "{\n}", "2013-12-31T00:00:00", "08 12 34 52 58", "08", "03" ] -, [ 1267, "42CF4EA0-F05B-47C9-96C4-0988DBFB9E43", 1267, 1388804475, "708543", 1388804475, "708543", "{\n}", "2014-01-03T00:00:00", "22 24 25 40 70", "05", "05" ] -, [ 1269, "759EF80C-6780-4CC8-A27B-F715230A2FB2", 1269, 1389150065, "708543", 1389150065, "708543", "{\n}", "2014-01-07T00:00:00", "13 34 56 62 64", "06", "05" ] -, [ 1271, "10DAB9D2-46FC-449B-8B66-EBF65D9FD40C", 1271, 1389409265, "708543", 1389409265, "708543", "{\n}", "2014-01-10T00:00:00", "08 28 36 37 57", "08", "03" ] -, [ 1273, "9A60089C-24F6-424F-B5CB-D4CCBE7F5988", 1273, 1389754865, "708543", 1389754865, "708543", "{\n}", "2014-01-14T00:00:00", "04 23 26 62 69", "13", "03" ] -, [ 1275, "FA057396-A897-42CD-A4FC-6CA5ABBA1C4F", 1275, 1390014118, "708543", 1390014118, "708543", "{\n}", "2014-01-17T00:00:00", "01 10 26 31 51", "11", "04" ] -, [ 1277, "D3DFB854-FC39-4840-8827-7D1019D3DA67", 1277, 1390359685, "708543", 1390359685, "708543", "{\n}", "2014-01-21T00:00:00", "08 23 33 45 52", "04", "04" ] -, [ 1279, "B9C11D6D-6EAF-46DA-888F-3631F2F8F57F", 1279, 1390618854, "708543", 1390618854, "708543", "{\n}", "2014-01-24T00:00:00", "22 45 46 47 65", "10", "05" ] -, [ 1281, "6C8D1F24-E450-49BB-BCC0-3E6EAE0FE1EB", 1281, 1390964455, "708543", 1390964455, "708543", "{\n}", "2014-01-28T00:00:00", "07 16 28 53 60", "02", "03" ] -, [ 1283, "382CEE0F-C829-4AFF-BF00-8B39312C4F9C", 1283, 1391223655, "708543", 1391223655, "708543", "{\n}", "2014-01-31T00:00:00", "03 09 13 47 52", "08", "04" ] -, [ 1285, "86776381-2947-4FA4-86FC-F558D7CC86E5", 1285, 1391569286, "708543", 1391569286, "708543", "{\n}", "2014-02-04T00:00:00", "25 44 49 60 73", "09", "03" ] -, [ 1287, "873B54D5-CB06-4D9B-A0D7-A48660F76ADD", 1287, 1391828465, "708543", 1391828465, "708543", "{\n}", "2014-02-07T00:00:00", "11 21 23 35 64", "10", "03" ] -, [ 1289, "FD28870B-0C80-4AF1-B2DF-4C52D4D79E58", 1289, 1392174055, "708543", 1392174055, "708543", "{\n}", "2014-02-11T00:00:00", "43 64 67 71 73", "04", "02" ] -, [ 1291, "5159CE5E-66B0-4DB9-9DD9-5B9B4D0745FD", 1291, 1392433255, "708543", 1392433255, "708543", "{\n}", "2014-02-14T00:00:00", "20 28 35 71 72", "07", "03" ] -, [ 1293, "DEAFD715-D7CD-4708-B535-D9899DD4621D", 1293, 1392778855, "708543", 1392778855, "708543", "{\n}", "2014-02-18T00:00:00", "23 29 31 37 70", "14", "05" ] -, [ 1295, "158825F3-5163-42A3-81DC-70D7B74D3F97", 1295, 1393038044, "708543", 1393038044, "708543", "{\n}", "2014-02-21T00:00:00", "23 29 32 45 46", "15", "05" ] -, [ 1297, "40802F04-A3AC-43C2-9734-1D1DC7C3B974", 1297, 1393383657, "708543", 1393383657, "708543", "{\n}", "2014-02-25T00:00:00", "12 18 25 35 66", "15", "05" ] -, [ 1299, "5ACF39BD-F796-425E-9F66-CB0B27E7C6B1", 1299, 1393642845, "708543", 1393642845, "708543", "{\n}", "2014-02-28T00:00:00", "03 31 50 58 59", "06", "04" ] -, [ 1301, "A28FF876-2890-4BF6-99DD-C392F055CACD", 1301, 1393988455, "708543", 1393988455, "708543", "{\n}", "2014-03-04T00:00:00", "10 29 31 35 45", "10", "02" ] -, [ 1303, "A92F3246-6DA4-48B7-90EA-B2D9A5DBFFB3", 1303, 1394247656, "708543", 1394247656, "708543", "{\n}", "2014-03-07T00:00:00", "11 13 51 57 69", "01", "04" ] -, [ 1305, "FDEA8FEE-8538-40FC-AEF4-DB0F81B3EB1A", 1305, 1394593254, "708543", 1394593254, "708543", "{\n}", "2014-03-11T00:00:00", "09 14 56 57 69", "10", "04" ] -, [ 1307, "BCB912F4-419E-4BE3-983B-200EBAA821E3", 1307, 1394852454, "708543", 1394852454, "708543", "{\n}", "2014-03-14T00:00:00", "07 20 40 54 69", "12", "03" ] -, [ 1309, "1030DC1D-317C-4D87-B1B9-C06B46814C7A", 1309, 1395198065, "708543", 1395198065, "708543", "{\n}", "2014-03-18T00:00:00", "11 19 24 33 51", "07", "03" ] -, [ 1311, "C4CB2C86-7538-4347-9CD1-070BC0C71401", 1311, 1395457255, "708543", 1395457255, "708543", "{\n}", "2014-03-21T00:00:00", "02 23 30 35 53", "10", "05" ] -, [ 1313, "C836D6E0-C01E-4E00-BD1C-A14D1CF63588", 1313, 1395802856, "708543", 1395802856, "708543", "{\n}", "2014-03-25T00:00:00", "19 26 51 57 73", "15", "03" ] -, [ 1315, "5448D834-9CE6-4F77-AE17-19710BA851DC", 1315, 1396105275, "708543", 1396105275, "708543", "{\n}", "2014-03-28T00:00:00", "02 03 09 50 73", "12", "03" ] -, [ 1317, "5F48BA5C-1DC0-49F2-9AEF-8DCAE61E57CC", 1317, 1396407655, "708543", 1396407655, "708543", "{\n}", "2014-04-01T00:00:00", "10 23 68 74 75", "09", "05" ] -, [ 1319, "802D51AA-4C72-4264-8A00-6F1FEB1CA238", 1319, 1396666854, "708543", 1396666854, "708543", "{\n}", "2014-04-04T00:00:00", "01 10 15 41 54", "09", "02" ] -, [ 1321, "01F73B3B-B197-4BCE-8F02-95115A601CB5", 1321, 1397012466, "708543", 1397012466, "708543", "{\n}", "2014-04-08T00:00:00", "35 36 41 60 71", "03", "03" ] -, [ 1323, "6C79075A-EB20-4E77-89DB-C663CA5BF346", 1323, 1397271699, "708543", 1397271699, "708543", "{\n}", "2014-04-11T00:00:00", "03 42 44 47 57", "08", "05" ] -, [ 1325, "E45F48E3-1406-45F0-AB43-FE8D891EBD27", 1325, 1397617245, "708543", 1397617245, "708543", "{\n}", "2014-04-15T00:00:00", "04 39 46 47 70", "13", "03" ] -, [ 1327, "5EB30A7D-8459-4869-AE84-2A2DD1DB5B26", 1327, 1397876455, "708543", 1397876455, "708543", "{\n}", "2014-04-18T00:00:00", "18 25 38 45 63", "09", "02" ] -, [ 1329, "F7877028-A351-43B9-BD5A-D308A12C0115", 1329, 1398222385, "708543", 1398222385, "708543", "{\n}", "2014-04-22T00:00:00", "02 18 19 49 50", "01", "03" ] -, [ 1331, "6BD4A8B0-05E1-4C3B-BBB1-67CB07D2375D", 1331, 1398481352, "708543", 1398481352, "708543", "{\n}", "2014-04-25T00:00:00", "03 11 18 20 66", "09", "02" ] -, [ 1333, "AD580C79-D981-4492-9C81-4D975790086E", 1333, 1398826854, "708543", 1398826854, "708543", "{\n}", "2014-04-29T00:00:00", "07 43 59 61 66", "03", "03" ] -, [ 1335, "E2A087C6-174E-4627-925E-DE97C997ABED", 1335, 1399086054, "708543", 1399086054, "708543", "{\n}", "2014-05-02T00:00:00", "01 18 26 35 40", "13", "05" ] -, [ 1337, "2FDCA593-5848-467B-B3BF-730AED119414", 1337, 1399431741, "708543", 1399431741, "708543", "{\n}", "2014-05-06T00:00:00", "18 20 27 48 51", "05", "03" ] -, [ 1339, "B9E82F60-40BE-4CF4-88A5-FC6BD28807D1", 1339, 1399690844, "708543", 1399690844, "708543", "{\n}", "2014-05-09T00:00:00", "10 28 39 51 59", "14", "02" ] -, [ 1341, "90CF704A-3004-4DA4-BCE4-A5E1A8D717D3", 1341, 1400036529, "708543", 1400036529, "708543", "{\n}", "2014-05-13T00:00:00", "37 46 48 70 74", "01", "02" ] -, [ 1343, "DA1069E2-CB5D-451C-BB3C-7D1C35F561B0", 1343, 1400295664, "708543", 1400295664, "708543", "{\n}", "2014-05-16T00:00:00", "13 14 16 50 56", "11", "05" ] -, [ 1345, "F0CCE86A-0493-4D82-BCA8-CCE4EEBA9CB7", 1345, 1400641329, "708543", 1400641329, "708543", "{\n}", "2014-05-20T00:00:00", "10 40 63 64 69", "07", "02" ] -, [ 1347, "7FAD9C65-4F10-418D-B767-66A240EE8C87", 1347, 1400900518, "708543", 1400900518, "708543", "{\n}", "2014-05-23T00:00:00", "12 14 21 38 70", "15", "04" ] -, [ 1349, "791FB6CC-F7D0-4C9D-BFCE-4F068C0E7F4C", 1349, 1401246129, "708543", 1401246129, "708543", "{\n}", "2014-05-27T00:00:00", "01 06 10 46 58", "13", "02" ] -, [ 1351, "99C102A0-EE2C-4831-A852-FFDCAA15BCDC", 1351, 1401505329, "708543", 1401505329, "708543", "{\n}", "2014-05-30T00:00:00", "10 13 42 43 62", "02", "04" ] -, [ 1353, "CFDC3F17-1919-4AB6-B8F7-3591D7C31688", 1353, 1402024243, "708543", 1402024243, "708543", "{\n}", "2014-06-03T00:00:00", "19 28 62 66 74", "06", "03" ] -, [ 1355, "0FC680AA-3BF1-4785-AD94-A3088BAE1937", 1355, 1402110057, "708543", 1402110057, "708543", "{\n}", "2014-06-06T00:00:00", "12 29 37 49 72", "09", "04" ] -, [ 1357, "28AD4295-DD5E-483A-B44C-4C49E82467C9", 1357, 1402455655, "708543", 1402455655, "708543", "{\n}", "2014-06-10T00:00:00", "02 10 24 26 74", "07", "05" ] -, [ 1359, "2A70E1C3-7D5F-4525-92BD-CFCFAB3D3CBF", 1359, 1402714928, "708543", 1402714928, "708543", "{\n}", "2014-06-13T00:00:00", "07 38 46 49 56", "01", "05" ] -, [ 1361, "94CEE9E6-8F91-4BE7-ABCA-7B2129DC86C4", 1361, 1403060540, "708543", 1403060540, "708543", "{\n}", "2014-06-17T00:00:00", "10 14 24 47 60", "03", "04" ] -, [ 1363, "E71CDAAF-A30A-4D3E-9705-96DF940C1792", 1363, 1403319665, "708543", 1403319665, "708543", "{\n}", "2014-06-20T00:00:00", "01 22 25 29 56", "03", "05" ] -, [ 1365, "78923DD8-7B8A-4095-A4B5-DE0F205C7455", 1365, 1403665339, "708543", 1403665339, "708543", "{\n}", "2014-06-24T00:00:00", "13 17 24 47 65", "10", "04" ] -, [ 1367, "201A2006-4B49-4B3A-A99C-56E811DB26DB", 1367, 1403924475, "708543", 1403924475, "708543", "{\n}", "2014-06-27T00:00:00", "15 29 31 46 64", "10", "03" ] -, [ 1369, "B51C0FFE-A2F8-43A3-BFF9-F13ED5437EAC", 1369, 1404270128, "708543", 1404270128, "708543", "{\n}", "2014-07-01T00:00:00", "09 22 38 47 49", "15", "03" ] -, [ 1371, "B421489C-518C-44E2-B4E1-1739115E80A4", 1371, 1404529254, "708543", 1404529254, "708543", "{\n}", "2014-07-04T00:00:00", "16 33 39 58 69", "02", "05" ] -, [ 1373, "B9CC2A6E-9DDC-4D54-8BB8-C0DE58D4CCAF", 1373, 1404874864, "708543", 1404874864, "708543", "{\n}", "2014-07-08T00:00:00", "14 25 27 48 49", "09", "05" ] -, [ 1375, "9A035F2C-B234-4592-BF32-C88182E53A4C", 1375, 1405134066, "708543", 1405134066, "708543", "{\n}", "2014-07-11T00:00:00", "09 13 30 35 69", "10", "05" ] -, [ 1377, "4BF0FB2B-65A8-40DA-9DBA-697D7861AD00", 1377, 1405479645, "708543", 1405479645, "708543", "{\n}", "2014-07-15T00:00:00", "02 04 17 36 40", "05", "02" ] -, [ 1379, "108F044B-4621-4389-B12F-29CEACF20F30", 1379, 1405738855, "708543", 1405738855, "708543", "{\n}", "2014-07-18T00:00:00", "05 08 59 65 72", "03", "03" ] -, [ 1381, "D8B6033E-27F9-40AD-BE99-7F115C07D3A9", 1381, 1406084465, "708543", 1406084465, "708543", "{\n}", "2014-07-22T00:00:00", "14 18 22 31 47", "15", "03" ] -, [ 1383, "23AEF0BE-4851-4489-8195-0B5D084A5D76", 1383, 1406343656, "708543", 1406343656, "708543", "{\n}", "2014-07-25T00:00:00", "22 29 33 41 68", "12", "05" ] -, [ 1385, "781CE161-A749-41BC-8128-06367FB855CE", 1385, 1406689245, "708543", 1406689245, "708543", "{\n}", "2014-07-29T00:00:00", "02 08 16 43 74", "01", "04" ] -, [ 1387, "EC807140-3D55-49C4-BE48-2CD4847B5B50", 1387, 1406948455, "708543", 1406948455, "708543", "{\n}", "2014-08-01T00:00:00", "13 29 34 37 72", "06", "05" ] -, [ 1389, "437853F0-FAFD-4FFB-ACC5-9581E3335D29", 1389, 1407294066, "708543", 1407294066, "708543", "{\n}", "2014-08-05T00:00:00", "25 28 36 45 53", "06", "05" ] -, [ 1391, "283739E2-D52E-4A05-B041-C3832A4FD03F", 1391, 1407553265, "708543", 1407553265, "708543", "{\n}", "2014-08-08T00:00:00", "09 16 61 70 75", "07", "05" ] -, [ 1393, "F9F5E31F-0AF3-48CC-9243-EA28B055525B", 1393, 1407898866, "708543", 1407898866, "708543", "{\n}", "2014-08-12T00:00:00", "32 53 60 63 68", "06", "04" ] -, [ 1395, "A551D24C-0E35-43C7-AFD7-BCFC9B1A8458", 1395, 1408158065, "708543", 1408158065, "708543", "{\n}", "2014-08-15T00:00:00", "16 19 28 29 68", "09", "02" ] -, [ 1397, "932D43AF-18E1-4C9D-90AC-0EBB473DA2AE", 1397, 1408503656, "708543", 1408503656, "708543", "{\n}", "2014-08-19T00:00:00", "22 39 56 67 71", "15", "04" ] -, [ 1399, "869D1C4F-05FE-4CB7-B2B8-2226D93B2BEE", 1399, 1408762865, "708543", 1408762865, "708543", "{\n}", "2014-08-22T00:00:00", "05 31 34 41 74", "03", "05" ] -, [ 1401, "5DD5D9B1-0338-4C20-AA2D-6FA5E96F59E0", 1401, 1409108455, "708543", 1409108455, "708543", "{\n}", "2014-08-26T00:00:00", "29 31 51 60 64", "01", "05" ] -, [ 1403, "068A5120-3B84-41C2-A798-4D29C04252EF", 1403, 1409367666, "708543", 1409367666, "708543", "{\n}", "2014-08-29T00:00:00", "03 26 45 58 73", "12", "02" ] -, [ 1405, "E0F9E0B8-89FE-4966-A782-DC09D6359977", 1405, 1409713276, "708543", 1409713276, "708543", "{\n}", "2014-09-02T00:00:00", "01 08 54 69 72", "01", "03" ] -, [ 1407, "509607B9-9609-481E-83C7-DB52AA1DFF16", 1407, 1409972456, "708543", 1409972456, "708543", "{\n}", "2014-09-05T00:00:00", "07 12 20 24 59", "07", "02" ] -, [ 1409, "587B5A59-F548-457D-9936-71C0D6749539", 1409, 1410359284, "708543", 1410359284, "708543", "{\n}", "2014-09-09T00:00:00", "25 34 55 70 71", "01", "04" ] -, [ 1411, "109218EC-770D-4D23-8FC1-170CAB79D91B", 1411, 1410857469, "708543", 1410857469, "708543", "{\n}", "2014-09-12T00:00:00", "18 28 33 36 42", "07", "03" ] -, [ 1413, "3B36FBD4-980C-412C-BE40-DC647C1BC1EC", 1413, 1410922895, "708543", 1410922895, "708543", "{\n}", "2014-09-16T00:00:00", "25 45 51 53 73", "02", "02" ] -, [ 1415, "25B65074-AEBB-4AC5-8773-26ECC64BE53B", 1415, 1411225291, "708543", 1411225291, "708543", "{\n}", "2014-09-19T00:00:00", "16 25 27 29 34", "02", "02" ] -, [ 1417, "5743D5F1-F6EC-4C4B-A823-8EA8F70F8472", 1417, 1411527691, "708543", 1411527691, "708543", "{\n}", "2014-09-23T00:00:00", "21 24 25 40 43", "12", "05" ] -, [ 1419, "3E083094-377E-4539-82CE-9DBEF1F04FF7", 1419, 1411786960, "708543", 1411786960, "708543", "{\n}", "2014-09-26T00:00:00", "17 26 35 46 62", "09", "05" ] -, [ 1421, "D765F55E-7EEA-407C-B053-16503F02985E", 1421, 1412175692, "708543", 1412175692, "708543", "{\n}", "2014-09-30T00:00:00", "03 16 52 54 61", "06", "05" ] -, [ 1423, "A2B9AB24-47CD-42F2-96AC-EEA20DD75824", 1423, 1412391627, "708543", 1412391627, "708543", "{\n}", "2014-10-03T00:00:00", "03 20 34 58 67", "06", "03" ] -, [ 1425, "28DCADB9-7202-4BBF-89B9-B3740E7D1DBD", 1425, 1412780470, "708543", 1412780470, "708543", "{\n}", "2014-10-07T00:00:00", "16 29 46 48 55", "02", "03" ] -, [ 1427, "48C60FDD-51FA-4DEA-A448-B4BA3AEEFB6F", 1427, 1412996487, "708543", 1412996487, "708543", "{\n}", "2014-10-10T00:00:00", "02 32 35 50 59", "03", "05" ] -, [ 1429, "141DA9CF-E55A-479C-B882-08951E859ECD", 1429, 1413342225, "708543", 1413342225, "708543", "{\n}", "2014-10-14T00:00:00", "11 37 46 64 68", "15", "03" ] -, [ 1431, "C9ADA820-57B4-48F6-8E63-4D73F2B38278", 1431, 1413601288, "708543", 1413601288, "708543", "{\n}", "2014-10-17T00:00:00", "21 31 43 56 60", "12", "04" ] -, [ 1433, "C8637DC5-F6BC-48BA-86A2-C8C3EA59D9C0", 1433, 1413946886, "708543", 1413946886, "708543", "{\n}", "2014-10-21T00:00:00", "05 35 37 41 66", "11", "05" ] -, [ 1435, "F66ADFB5-6426-4807-9FAD-7D32A44811FA", 1435, 1414206088, "708543", 1414206088, "708543", "{\n}", "2014-10-24T00:00:00", "02 14 21 28 55", "03", "03" ] -, [ 1437, "AA6A6599-1679-4CEB-A74B-B01FDC4479AF", 1437, 1414551686, "708543", 1414551686, "708543", "{\n}", "2014-10-28T00:00:00", "03 50 57 58 60", "11", "05" ] -, [ 1439, "540D4B98-5003-4DE4-9D65-9815DC33BB18", 1439, 1414810889, "708543", 1414810889, "708543", "{\n}", "2014-10-31T00:00:00", "11 29 36 58 67", "15", "02" ] -, [ 1441, "50B7B5D2-D3DF-4E29-8D09-95AF015916CB", 1441, 1415156491, "708543", 1415156491, "708543", "{\n}", "2014-11-04T00:00:00", "09 15 24 39 41", "01", "04" ] -, [ 1443, "5578102D-B814-45E5-88E3-92E8546BA3E7", 1443, 1415415687, "708543", 1415415687, "708543", "{\n}", "2014-11-07T00:00:00", "31 35 41 65 66", "05", "05" ] -, [ 1445, "BCBA72A1-AF88-480F-9F9B-EAE4D5AFC88F", 1445, 1415804595, "708543", 1415804595, "708543", "{\n}", "2014-11-11T00:00:00", "23 25 28 30 75", "11", "05" ] -, [ 1447, "226C67C8-8DFA-48F7-B743-25EF3F2AAF62", 1447, 1416193460, "708543", 1416193460, "708543", "{\n}", "2014-11-14T00:00:00", "03 49 61 62 68", "15", "05" ] -, [ 1449, "BF321267-5089-4771-B912-00DF34976A87", 1449, 1416452617, "708543", 1416452617, "708543", "{\n}", "2014-11-18T00:00:00", "37 39 53 68 75", "06", "02" ] -, [ 1451, "A79F946A-1E3B-4A8E-BB5E-C0C13C99C5B6", 1451, 1416625290, "708543", 1416625290, "708543", "{\n}", "2014-11-21T00:00:00", "03 12 35 37 63", "15", "02" ] -, [ 1453, "4533C6C0-AB19-4FE3-9CF8-15DA4CC80699", 1453, 1416970890, "708543", 1416970890, "708543", "{\n}", "2014-11-25T00:00:00", "10 11 29 47 56", "04", "02" ] -, [ 1455, "C42CB168-F837-46FE-9253-87B0872F4969", 1455, 1417230091, "708543", 1417230091, "708543", "{\n}", "2014-11-28T00:00:00", "08 26 29 36 47", "10", "03" ] -, [ 1457, "98ACB2EF-CFF0-4F85-89DB-49E3049A1B4E", 1457, 1417575689, "708543", 1417575689, "708543", "{\n}", "2014-12-02T00:00:00", "13 18 22 49 62", "11", "05" ] -, [ 1459, "34E52148-0F7E-4E2F-A184-88DD9FEEC593", 1459, 1417834897, "708543", 1417834897, "708543", "{\n}", "2014-12-05T00:00:00", "04 05 11 51 59", "05", "05" ] -, [ 1461, "5369666F-70AF-42D2-A900-6631404FCFF0", 1461, 1418180484, "708543", 1418180484, "708543", "{\n}", "2014-12-09T00:00:00", "27 45 49 51 52", "14", "05" ] -, [ 1463, "76484243-0CFA-4951-8699-9C0115C85933", 1463, 1418439700, "708543", 1418439700, "708543", "{\n}", "2014-12-12T00:00:00", "02 31 46 58 65", "07", "05" ] -, [ 1465, "7E4E9479-256F-44C8-BBDC-BD0E17AA3501", 1465, 1418785292, "708543", 1418785292, "708543", "{\n}", "2014-12-16T00:00:00", "41 58 68 72 73", "01", "05" ] -, [ 1467, "D2360BBD-56C2-4DD3-B532-91E07CAC7062", 1467, 1419044492, "708543", 1419044492, "708543", "{\n}", "2014-12-19T00:00:00", "14 18 58 59 68", "04", "03" ] -, [ 1469, "BD3EE70B-A135-4BC5-98F5-2C7B1F1AD47D", 1469, 1419390093, "708543", 1419390093, "708543", "{\n}", "2014-12-23T00:00:00", "04 10 31 56 66", "07", "03" ] -, [ 1471, "5787AFFB-6C5A-448E-9525-1A896D8F69C1", 1471, 1419649380, "708543", 1419649380, "708543", "{\n}", "2014-12-26T00:00:00", "02 05 10 20 38", "14", "03" ] -, [ 1473, "720F4D3F-A832-4C4B-A137-5051A202656B", 1473, 1419994895, "708543", 1419994895, "708543", "{\n}", "2014-12-30T00:00:00", "03 07 44 63 67", "12", "04" ] -, [ 1475, "1E9AC8BA-D977-4FED-BB99-2BC5277DD02F", 1475, 1420254092, "708543", 1420254092, "708543", "{\n}", "2015-01-02T00:00:00", "13 15 35 62 74", "12", "04" ] -, [ 1477, "03F23C47-039E-484C-BBC7-60312DF63D12", 1477, 1420599691, "708543", 1420599691, "708543", "{\n}", "2015-01-06T00:00:00", "12 20 27 38 75", "04", "03" ] -, [ 1479, "23409C63-89B9-441B-8CA6-8B9481C7B8DC", 1479, 1420858876, "708543", 1420858876, "708543", "{\n}", "2015-01-09T00:00:00", "37 49 50 56 57", "08", "05" ] -, [ 1481, "7D28878E-B1A6-4068-98A0-E6CF1825A96B", 1481, 1421204593, "708543", 1421204593, "708543", "{\n}", "2015-01-13T00:00:00", "12 20 25 50 51", "07", "05" ] -, [ 1483, "29F7CCC7-0AF3-4814-A461-D31C3AE51815", 1483, 1421463668, "708543", 1421463668, "708543", "{\n}", "2015-01-16T00:00:00", "26 32 44 45 58", "11", "03" ] -, [ 1485, "DCBEEBB5-2F0C-48DD-86C5-C61B20888290", 1485, 1421809296, "708543", 1421809296, "708543", "{\n}", "2015-01-20T00:00:00", "31 35 56 59 63", "06", "05" ] -, [ 1487, "7C1F426A-59E8-4DB5-AB4E-219C5325C340", 1487, 1422068490, "708543", 1422068490, "708543", "{\n}", "2015-01-23T00:00:00", "14 15 32 68 72", "08", "02" ] -, [ 1489, "854D8323-507E-44FC-BF64-90A934F13D29", 1489, 1422414088, "708543", 1422414088, "708543", "{\n}", "2015-01-27T00:00:00", "05 26 27 44 57", "07", "03" ] -, [ 1491, "52F40161-7F01-4506-96F2-5A8A98D4DAC9", 1491, 1422673269, "708543", 1422673269, "708543", "{\n}", "2015-01-30T00:00:00", "18 31 39 45 55", "06", "05" ] -, [ 1493, "6A0CE853-9E0D-4ED5-95A1-4E0F9E374FF0", 1493, 1423018893, "708543", 1423018893, "708543", "{\n}", "2015-02-03T00:00:00", "11 22 25 58 69", "13", "05" ] -, [ 1495, "BC84605C-8B57-4569-97F0-5AE244C67001", 1495, 1423278090, "708543", 1423278090, "708543", "{\n}", "2015-02-06T00:00:00", "05 06 17 33 68", "13", "03" ] -, [ 1497, "8E0F669E-B531-4F3B-B2BF-B2771BD94A74", 1497, 1423623690, "708543", 1423623690, "708543", "{\n}", "2015-02-10T00:00:00", "07 42 53 58 71", "15", "02" ] -, [ 1499, "CE96B160-24FB-402B-AA8F-4936E2D39F81", 1499, 1423882891, "708543", 1423882891, "708543", "{\n}", "2015-02-13T00:00:00", "04 20 44 65 74", "14", "03" ] -, [ 1501, "1488A3D6-7D6E-444A-A4F5-1CDF80F801F7", 1501, 1424228493, "708543", 1424228493, "708543", "{\n}", "2015-02-17T00:00:00", "06 45 50 65 66", "01", "05" ] -, [ 1503, "ECE25E72-E4CA-41C2-8700-DD99960A7BD9", 1503, 1424487687, "708543", 1424487687, "708543", "{\n}", "2015-02-20T00:00:00", "02 06 08 52 66", "13", "03" ] -, [ 1505, "12F983C2-99EA-4616-843D-383B1A3D3B05", 1505, 1424833287, "708543", 1424833287, "708543", "{\n}", "2015-02-24T00:00:00", "15 23 26 45 66", "04", "03" ] -, [ 1507, "76073F80-C906-400E-8D4C-BC2E9FE6DB1B", 1507, 1425092468, "708543", 1425092468, "708543", "{\n}", "2015-02-27T00:00:00", "07 49 53 60 64", "04", "02" ] -, [ 1509, "E0984802-013E-4277-85BF-2D5E8CE49EBA", 1509, 1425438096, "708543", 1425438096, "708543", "{\n}", "2015-03-03T00:00:00", "09 11 42 44 50", "03", "04" ] -, [ 1511, "0A3DAF39-2EB3-4650-A72F-89A45ED5FC5D", 1511, 1425697322, "708543", 1425697322, "708543", "{\n}", "2015-03-06T00:00:00", "30 48 55 68 73", "05", "03" ] -, [ 1513, "D6EB5B00-F0DF-4CD6-AEFB-3833C1087B69", 1513, 1426042905, "708543", 1426042905, "708543", "{\n}", "2015-03-10T00:00:00", "10 14 19 30 73", "14", "05" ] -, [ 1515, "FC3C62B4-CD9E-40CB-AD63-A0920FAA15FE", 1515, 1426302087, "708543", 1426302087, "708543", "{\n}", "2015-03-13T00:00:00", "08 22 30 42 45", "03", "05" ] -, [ 1517, "7691B527-2FDA-4AD5-A180-B935E802D9EF", 1517, 1426647689, "708543", 1426647689, "708543", "{\n}", "2015-03-17T00:00:00", "11 27 44 45 58", "03", "05" ] -, [ 1519, "00FAB518-D2CA-4B7A-89A4-F81F738490DC", 1519, 1426906887, "708543", 1426906887, "708543", "{\n}", "2015-03-20T00:00:00", "07 50 54 61 75", "07", "04" ] -, [ 1521, "606D43E5-EA21-465A-AAC0-2C70C208B935", 1521, 1427252484, "708543", 1427252484, "708543", "{\n}", "2015-03-24T00:00:00", "02 23 32 45 55", "12", "02" ] -, [ 1523, "3BF3F918-FD1B-4762-A373-B5D9EB016FE9", 1523, 1427511687, "708543", 1427511687, "708543", "{\n}", "2015-03-27T00:00:00", "17 21 36 58 70", "03", "05" ] -, [ 1525, "D1FD0F94-BB97-40B6-BD07-14B355F38EDF", 1525, 1427857287, "708543", 1427857287, "708543", "{\n}", "2015-03-31T00:00:00", "08 26 41 61 73", "11", "05" ] -, [ 1527, "75C70A26-B013-47F6-AB17-55C5328B66BC", 1527, 1428116490, "708543", 1428116490, "708543", "{\n}", "2015-04-03T00:00:00", "10 36 47 63 74", "02", "05" ] -, [ 1529, "C0FC19C0-5945-4C1F-A836-CB310E1395C3", 1529, 1428462088, "708543", 1428462088, "708543", "{\n}", "2015-04-07T00:00:00", "05 15 22 26 64", "06", "04" ] -, [ 1531, "BA163D58-47C9-4B0B-B432-3115631C3403", 1531, 1428721288, "708543", 1428721288, "708543", "{\n}", "2015-04-10T00:00:00", "06 11 32 46 68", "09", "02" ] -, [ 1533, "DB69CE29-443B-4F14-B9E5-1CAA95882FD7", 1533, 1429066887, "708543", 1429066887, "708543", "{\n}", "2015-04-14T00:00:00", "03 07 25 68 71", "03", "05" ] -, [ 1535, "EF4A13BC-7E42-411E-B38C-89BA969F85CC", 1535, 1429326089, "708543", 1429326089, "708543", "{\n}", "2015-04-17T00:00:00", "15 18 29 41 50", "05", "02" ] -, [ 1537, "02ECDBF5-B6FD-4A1D-BBF3-61C1F04A3CE2", 1537, 1429671687, "708543", 1429671687, "708543", "{\n}", "2015-04-21T00:00:00", "31 33 35 41 69", "11", "05" ] -, [ 1539, "9A0FE695-8393-4F33-A105-6C1BB5E9EDE9", 1539, 1429930889, "708543", 1429930889, "708543", "{\n}", "2015-04-24T00:00:00", "24 25 29 47 67", "04", "04" ] -, [ 1541, "A1D5F972-6D8C-4B76-A289-69E352E806CD", 1541, 1430276508, "708543", 1430276508, "708543", "{\n}", "2015-04-28T00:00:00", "22 27 55 58 63", "11", "05" ] -, [ 1543, "CB258EDF-076B-4199-8BFF-7E799B635D55", 1543, 1430535711, "708543", 1430535711, "708543", "{\n}", "2015-05-01T00:00:00", "17 18 61 66 74", "03", "03" ] -, [ 1545, "EEB76D4C-E7C1-4C74-BFEC-2296C29AEF0F", 1545, 1430881307, "708543", 1430881307, "708543", "{\n}", "2015-05-05T00:00:00", "11 21 42 62 71", "07", "05" ] -, [ 1547, "4E7287E0-B454-4D0D-B2CD-F7973ED0DD0B", 1547, 1431140494, "708543", 1431140494, "708543", "{\n}", "2015-05-08T00:00:00", "09 21 25 66 72", "07", "03" ] -, [ 1549, "F11F018E-0E2A-4FD7-88E1-C0978A87AAFD", 1549, 1431486108, "708543", 1431486108, "708543", "{\n}", "2015-05-12T00:00:00", "14 30 33 36 44", "02", "05" ] -, [ 1551, "9DC8A2A8-6EEB-4C6F-85D6-2E121BA31891", 1551, 1431745290, "708543", 1431745290, "708543", "{\n}", "2015-05-15T00:00:00", "11 17 21 36 74", "15", "05" ] -, [ 1553, "16A8B73D-D63A-471A-9575-C82B0F79348E", 1553, 1432090927, "708543", 1432090927, "708543", "{\n}", "2015-05-19T00:00:00", "10 12 21 29 65", "10", "05" ] -, [ 1555, "79E08881-8F9F-4152-8A46-6F4740358B15", 1555, 1432350090, "708543", 1432350090, "708543", "{\n}", "2015-05-22T00:00:00", "03 14 15 25 48", "08", "05" ] -, [ 1557, "16AA6E62-2764-4352-8079-E10FD79C6C0A", 1557, 1432695687, "708543", 1432695687, "708543", "{\n}", "2015-05-26T00:00:00", "01 39 52 69 72", "12", "04" ] -, [ 1559, "8291B987-7740-4A35-A8AA-444F1CC1E21B", 1559, 1432954911, "708543", 1432954911, "708543", "{\n}", "2015-05-29T00:00:00", "20 27 38 49 66", "02", "04" ] -, [ 1561, "BB565492-D644-4BD5-8127-C9CC2005DC73", 1561, 1433300489, "708543", 1433300489, "708543", "{\n}", "2015-06-02T00:00:00", "02 09 11 22 23", "12", "04" ] -, [ 1563, "6F42DCC6-0C62-40C6-B530-BE484E52FB3E", 1563, 1433559758, "708543", 1433559758, "708543", "{\n}", "2015-06-05T00:00:00", "07 22 27 41 49", "10", "04" ] -, [ 1565, "A3EE789D-9396-4CDA-8B89-899EFDB844C6", 1565, 1433905222, "708543", 1433905222, "708543", "{\n}", "2015-06-09T00:00:00", "06 16 17 25 36", "07", "05" ] -, [ 1567, "856CE10D-D4B2-4C16-8A18-31DF4766B6A9", 1567, 1434164494, "708543", 1434164494, "708543", "{\n}", "2015-06-12T00:00:00", "01 40 42 56 62", "02", "05" ] -, [ 1569, "422205F9-728E-4DFB-86C2-0CF2A12A9FD4", 1569, 1434510087, "708543", 1434510087, "708543", "{\n}", "2015-06-16T00:00:00", "08 19 26 56 67", "14", "02" ] -, [ 1571, "46AF2341-F648-425D-8343-117626DDD550", 1571, 1434769320, "708543", 1434769320, "708543", "{\n}", "2015-06-19T00:00:00", "04 35 36 52 68", "08", "03" ] -, [ 1573, "4C88ED32-DEA2-4D0D-B0BC-735ECA9A3C83", 1573, 1435114948, "708543", 1435114948, "708543", "{\n}", "2015-06-23T00:00:00", "06 13 38 56 70", "02", "05" ] -, [ 1575, "0FAD5736-617A-4582-A81A-3B61984F2B61", 1575, 1435374132, "708543", 1435374132, "708543", "{\n}", "2015-06-26T00:00:00", "12 23 33 47 50", "03", "05" ] -, [ 1577, "5E53C0D5-0652-4D7F-9F12-E3167CA63C1F", 1577, 1435719666, "708543", 1435719666, "708543", "{\n}", "2015-06-30T00:00:00", "11 17 34 43 50", "15", "04" ] -, [ 1579, "B9EBA90D-732D-4A17-9675-4BE770E869AF", 1579, 1435980252, "708543", 1435980252, "708543", "{\n}", "2015-07-03T00:00:00", "33 50 64 71 72", "09", "04" ] -, [ 1581, "F786B892-2A7D-4C1E-8C50-9044D07A78DB", 1581, 1436324525, "708543", 1436324525, "708543", "{\n}", "2015-07-07T00:00:00", "06 15 16 28 49", "14", "03" ] -, [ 1583, "173F799E-8486-47D5-A2E8-55D828DEDFC1", 1583, 1436583671, "708543", 1436583671, "708543", null, "2015-07-10T00:00:00", "24 27 45 51 54", "08", "03" ] -, [ 1584, "2885C9A3-6363-42C9-BCE8-AD2C652986CB", 1584, 1436929328, "708543", 1436929328, "708543", null, "2015-07-14T00:00:00", "19 24 30 35 72", "05", "03" ] -, [ 1585, "E5F4CC7B-147B-42BA-B75D-2BAE8021C6ED", 1585, 1437188486, "708543", 1437188486, "708543", null, "2015-07-17T00:00:00", "06 17 30 31 41", "15", "03" ] -, [ 1586, "E4A64E1F-7F45-4D23-A5BE-FB8B31FB1BC0", 1586, 1437534086, "708543", 1437534086, "708543", null, "2015-07-21T00:00:00", "20 30 62 65 74", "01", "05" ] -, [ 1587, "B2F7936C-6001-4234-B9B9-681131049B3D", 1587, 1437793264, "708543", 1437793264, "708543", null, "2015-07-24T00:00:00", "10 12 26 60 62", "13", "05" ] -, [ 1588, "CB5C79BF-C111-42EA-B656-345263A124FA", 1588, 1438138886, "708543", 1438138886, "708543", null, "2015-07-28T00:00:00", "08 35 61 68 75", "15", "05" ] -, [ 1589, "DBF152CB-ECCE-40CC-834A-E35E6D3198EA", 1589, 1438398127, "708543", 1438398127, "708543", null, "2015-07-31T00:00:00", "28 32 33 40 46", "10", "04" ] -, [ 1590, "1AAE9761-BA0D-4883-9981-BEB91B225B68", 1590, 1438743707, "708543", 1438743707, "708543", null, "2015-08-04T00:00:00", "02 19 44 51 57", "14", "02" ] -, [ 1591, "C72F41A6-3F86-4EA0-A05B-ECC42BF5068A", 1591, 1439002932, "708543", 1439002932, "708543", null, "2015-08-07T00:00:00", "01 38 53 63 66", "10", "03" ] -, [ 1592, "6FEA722E-6A92-4AAA-A853-9186C57C50F3", 1592, 1439348526, "708543", 1439348526, "708543", null, "2015-08-11T00:00:00", "03 08 29 57 68", "08", "04" ] -, [ 1593, "CFA8B480-20C9-4999-9546-F1A8CB997E35", 1593, 1439607747, "708543", 1439607747, "708543", null, "2015-08-14T00:00:00", "12 15 20 52 71", "03", "04" ] -, [ 1594, "4346D64A-3084-4333-9808-7BEA3322BB67", 1594, 1439953329, "708543", 1439953329, "708543", null, "2015-08-18T00:00:00", "02 07 33 39 53", "09", "03" ] -, [ 1595, "D3193CB6-30E4-4F8C-A26C-B7F0B11FC519", 1595, 1440212561, "708543", 1440212561, "708543", null, "2015-08-21T00:00:00", "13 15 21 41 72", "01", "05" ] -, [ 1596, "4275034A-4B46-439E-B76B-7EAE60AB3B57", 1596, 1440558107, "708543", 1440558107, "708543", null, "2015-08-25T00:00:00", "05 44 54 59 63", "01", "05" ] -, [ 1597, "19875C2F-4710-4402-997B-06277EB1DD3B", 1597, 1440817288, "708543", 1440817288, "708543", null, "2015-08-28T00:00:00", "13 35 40 60 68", "09", "04" ] -, [ 1598, "9E1E52A1-49E3-44F8-8A8B-E0AE76939ED0", 1598, 1441162926, "708543", 1441162926, "708543", null, "2015-09-01T00:00:00", "02 05 35 40 54", "13", "05" ] -, [ 1599, "ABBF4221-3651-4E33-9826-778CDB6160D5", 1599, 1441422137, "708543", 1441422137, "708543", null, "2015-09-04T00:00:00", "17 21 39 52 57", "05", "05" ] -, [ 1600, "F966B71B-2043-42CD-95C3-E1D052D0F5DC", 1600, 1441767706, "708543", 1441767706, "708543", null, "2015-09-08T00:00:00", "19 20 36 41 46", "07", "03" ] -, [ 1601, "6C0212B9-27FE-4779-8E1E-4E978B393488", 1601, 1442026906, "708543", 1442026906, "708543", null, "2015-09-11T00:00:00", "05 11 31 50 67", "14", "02" ] -, [ 1602, "951A886B-09C7-40FE-8D21-65BFE67E0E20", 1602, 1442372505, "708543", 1442372505, "708543", null, "2015-09-15T00:00:00", "07 20 35 49 56", "09", "04" ] -, [ 1603, "8B5F5037-DEB5-44AA-B5DE-D76E18D731DC", 1603, 1442631785, "708543", 1442631785, "708543", null, "2015-09-18T00:00:00", "17 34 35 51 65", "07", "03" ] -, [ 1604, "F7432096-1416-4186-AD4E-A36B61D0FDF3", 1604, 1442977285, "708543", 1442977285, "708543", null, "2015-09-22T00:00:00", "28 30 38 45 51", "08", "05" ] -, [ 1605, "33D70780-01EA-441A-9A4C-990859DC0629", 1605, 1443236506, "708543", 1443236506, "708543", null, "2015-09-25T00:00:00", "03 08 38 51 64", "04", "05" ] -, [ 1606, "C0905F04-1938-4970-AB55-09034B99C92B", 1606, 1443582127, "708543", 1443582127, "708543", null, "2015-09-29T00:00:00", "08 21 30 61 62", "09", "03" ] -, [ 1607, "181D106E-63BE-4A21-8A82-973C9467C233", 1607, 1443841309, "708543", 1443841309, "708543", null, "2015-10-02T00:00:00", "04 14 29 31 47", "09", "02" ] -, [ 1608, "E40045A0-5E29-4C8E-8CB2-6BD75D932427", 1608, 1444186906, "708543", 1444186906, "708543", null, "2015-10-06T00:00:00", "17 58 63 64 66", "13", "03" ] -, [ 1609, "861F130E-42CC-4654-8650-1D386AC20D62", 1609, 1444446107, "708543", 1444446107, "708543", null, "2015-10-09T00:00:00", "08 09 21 63 75", "14", "04" ] -, [ 1610, "ECD5BFB6-8892-41CC-B760-EDD8AAB9B93B", 1610, 1444791707, "708543", 1444791707, "708543", null, "2015-10-13T00:00:00", "07 09 24 38 52", "01", "05" ] -, [ 1611, "8E5AF013-320C-4B04-81E7-18A40F090924", 1611, 1445050907, "708543", 1445050907, "708543", null, "2015-10-16T00:00:00", "02 38 48 61 68", "04", "03" ] -, [ 1612, "3F86F0A3-0657-4C23-964C-B2597E46EED3", 1612, 1445396526, "708543", 1445396526, "708543", null, "2015-10-20T00:00:00", "06 25 35 38 52", "04", "04" ] -, [ 1613, "39DEFA41-D1AF-4254-ACC8-2CF8FB9196EB", 1613, 1445655706, "708543", 1445655706, "708543", null, "2015-10-23T00:00:00", "25 32 37 45 70", "01", "05" ] -, [ 1614, "6CF15757-6420-41C6-977F-DBD65C34F437", 1614, 1446001285, "708543", 1446001285, "708543", null, "2015-10-27T00:00:00", "09 26 27 29 74", "04", "03" ] -, [ 1615, "BF4C8D3B-3CD2-443A-B733-49700D3AF505", 1615, 1446260527, "708543", 1446260527, "708543", null, "2015-10-30T00:00:00", "17 41 51 53 56", "15", "05" ] -, [ 1616, "24AC2580-F864-456E-95BE-C6451E52DAA8", 1616, 1446606108, "708543", 1446606108, "708543", null, "2015-11-03T00:00:00", "16 29 44 69 74", "12", "05" ] -, [ 1617, "AF9AC066-EA3E-4A56-A549-69462973239E", 1617, 1446865313, "708543", 1446865313, "708543", null, "2015-11-06T00:00:00", "10 31 35 50 72", "08", "03" ] -, [ 1618, "5B523B94-4392-493C-8B77-37AAAD523BD0", 1618, 1447210947, "708543", 1447210947, "708543", null, "2015-11-10T00:00:00", "08 17 20 45 71", "04", "04" ] -, [ 1619, "33E35597-2F1E-4EA8-B8AE-B408573042C6", 1619, 1447470107, "708543", 1447470107, "708543", null, "2015-11-13T00:00:00", "17 18 31 35 59", "09", "05" ] -, [ 1620, "012E2E76-2B89-43BE-807D-24F86894DB3F", 1620, 1447815708, "708543", 1447815708, "708543", null, "2015-11-17T00:00:00", "12 14 18 24 61", "10", "03" ] -, [ 1621, "5C3E6FAB-3A63-45F4-BABF-0F2A7B05721A", 1621, 1448074906, "708543", 1448074906, "708543", null, "2015-11-20T00:00:00", "09 12 29 37 67", "15", "02" ] -, [ 1622, "50AB6256-911B-4734-B098-A1C7E029FC50", 1622, 1448420505, "708543", 1448420505, "708543", null, "2015-11-24T00:00:00", "02 19 30 38 70", "08", "04" ] -, [ 1623, "733C5B78-D944-42F9-9D39-206B69395C1C", 1623, 1448679706, "708543", 1448679706, "708543", null, "2015-11-27T00:00:00", "16 20 39 56 59", "12", "03" ] -, [ 1624, "3466B9EB-25AE-493B-9F81-A70C296687D6", 1624, 1449025305, "708543", 1449025305, "708543", null, "2015-12-01T00:00:00", "05 07 25 50 59", "12", "02" ] -, [ 1625, "BFDA9763-E55B-4E68-AC4A-64FC5BEA7290", 1625, 1449284488, "708543", 1449284488, "708543", null, "2015-12-04T00:00:00", "26 42 47 61 73", "06", "05" ] -, [ 1626, "FB3F13D9-F108-4F20-9550-5597912CFBE5", 1626, 1449630108, "708543", 1449630108, "708543", null, "2015-12-08T00:00:00", "07 17 37 49 73", "15", "03" ] -, [ 1627, "9E08A0BF-C5E0-48BE-B88D-D740895745C3", 1627, 1449889348, "708543", 1449889348, "708543", null, "2015-12-11T00:00:00", "14 20 43 54 69", "05", "04" ] -, [ 1628, "B94BCB4B-037B-4CD2-AF74-C91D52F1180F", 1628, 1450234926, "708543", 1450234926, "708543", null, "2015-12-15T00:00:00", "18 25 47 51 61", "05", "05" ] -, [ 1629, "B5B2B02B-14B7-4157-9A7B-EC5F8BFB91EE", 1629, 1450494130, "708543", 1450494130, "708543", null, "2015-12-18T00:00:00", "06 23 24 28 62", "07", "05" ] -, [ 1630, "94CC0B9B-F3D5-4AF1-91EC-2E80DA049A3E", 1630, 1450839805, "708543", 1450839805, "708543", null, "2015-12-22T00:00:00", "11 21 40 50 70", "15", "03" ] -, [ 1631, "7D95C3DB-8346-4A0A-99F9-8388D3455F05", 1631, 1451098926, "708543", 1451098926, "708543", null, "2015-12-25T00:00:00", "15 25 29 44 51", "04", "04" ] -, [ 1632, "2C7475AA-BF40-446B-AF68-4D0F75B8C6F8", 1632, 1451444486, "708543", 1451444486, "708543", null, "2015-12-29T00:00:00", "20 25 55 62 74", "07", "03" ] -, [ 1633, "C76B3278-31E5-4212-9F91-3A9B8FB8FEE7", 1633, 1451703685, "708543", 1451703685, "708543", null, "2016-01-01T00:00:00", "07 18 37 38 39", "09", "05" ] -, [ 1634, "1701538C-706D-4F58-BEAD-E85A125BAA93", 1634, 1452049285, "708543", 1452049285, "708543", null, "2016-01-05T00:00:00", "01 04 36 48 57", "13", "05" ] -, [ 1635, "2DECE042-B1F3-4BAF-92E2-ACC534B62171", 1635, 1452308424, "708543", 1452308424, "708543", null, "2016-01-08T00:00:00", "11 39 51 57 75", "02", "05" ] -, [ 1636, "59AA8588-E389-44D4-898A-B88D215B3180", 1636, 1452654246, "708543", 1452654246, "708543", null, "2016-01-12T00:00:00", "15 27 29 31 48", "15", "04" ] -, [ 1637, "EB18630E-DFCB-4DA9-B3C6-5D017B4CB539", 1637, 1452913329, "708543", 1452913329, "708543", null, "2016-01-15T00:00:00", "29 41 53 54 70", "12", "02" ] -, [ 1638, "6B3ECBDD-C850-4F5E-876A-3DFD62D39CC0", 1638, 1453258928, "708543", 1453258928, "708543", null, "2016-01-19T00:00:00", "02 17 31 39 47", "09", "02" ] -, [ 1639, "6CE292DA-B019-4C72-869B-33F7378737C2", 1639, 1453518148, "708543", 1453518148, "708543", null, "2016-01-22T00:00:00", "21 25 40 46 56", "03", "05" ] -, [ 1640, "941AFB5B-975C-451B-A1D4-9BB39C5CDE3A", 1640, 1453863685, "708543", 1453863685, "708543", null, "2016-01-26T00:00:00", "14 27 39 50 69", "02", "02" ] -, [ 1641, "DC2CFE1D-AF9A-4D71-A64B-7DC7F04F5F97", 1641, 1454122956, "708543", 1454122956, "708543", null, "2016-01-29T00:00:00", "20 28 49 51 52", "06", "02" ] -, [ 1642, "AC5D2A7E-4F80-4BDB-90A6-1D751A93ED93", 1642, 1454468486, "708543", 1454468486, "708543", null, "2016-02-02T00:00:00", "07 13 25 51 70", "09", "04" ] -, [ 1643, "1D000580-A2EF-43DF-9A38-DE8E08AACF5A", 1643, 1454727710, "708543", 1454727710, "708543", null, "2016-02-05T00:00:00", "04 06 23 55 75", "02", "03" ] -, [ 1644, "297A9E01-53D1-492F-8797-B9ED4B59084D", 1644, 1455073306, "708543", 1455073306, "708543", null, "2016-02-09T00:00:00", "03 42 46 56 71", "13", "04" ] -, [ 1645, "3F84D541-E559-42C0-A4CA-E18F9089AA1A", 1645, 1455332486, "708543", 1455332486, "708543", null, "2016-02-12T00:00:00", "01 07 44 68 73", "01", "03" ] -, [ 1646, "58DDCF16-F230-4B9A-BDA6-9FE0DB79CB4F", 1646, 1455678105, "708543", 1455678105, "708543", null, "2016-02-16T00:00:00", "09 31 33 46 64", "04", "03" ] -, [ 1647, "1538C7E2-86A5-4AD3-B5E1-5C3302FE635C", 1647, 1455937343, "708543", 1455937343, "708543", null, "2016-02-19T00:00:00", "02 27 41 50 75", "04", "04" ] -, [ 1648, "BFC5316B-4251-4DB1-8244-C6E36166125B", 1648, 1456282885, "708543", 1456282885, "708543", null, "2016-02-23T00:00:00", "16 32 39 53 57", "10", "05" ] -, [ 1649, "F93DA3B6-AAB1-4515-AAD0-7A6B4C31F7E6", 1649, 1456542125, "708543", 1456542125, "708543", null, "2016-02-26T00:00:00", "03 15 19 62 74", "14", "04" ] -, [ 1650, "DA81E261-D572-4CB3-8049-F9F396136F54", 1650, 1456887623, "708543", 1456887623, "708543", null, "2016-03-01T00:00:00", "01 29 33 34 55", "06", "05" ] -, [ 1651, "9CE887E3-9BF2-47C2-AED3-D6432D439626", 1651, 1457146912, "708543", 1457146912, "708543", null, "2016-03-04T00:00:00", "21 26 33 48 73", "14", "04" ] -, [ 1652, "F4CB0CEF-4734-48B2-BFD3-87C959B4BF60", 1652, 1457492506, "708543", 1457492506, "708543", null, "2016-03-08T00:00:00", "27 37 54 66 69", "05", "05" ] -, [ 1653, "E7EFFA53-90C7-4A52-BC33-A41CC6F35743", 1653, 1457751711, "708543", 1457751711, "708543", null, "2016-03-11T00:00:00", "14 18 48 54 71", "13", "04" ] -, [ 1654, "3B31A0E3-38D3-49F2-86FB-300A875F4FE0", 1654, 1458097306, "708543", 1458097306, "708543", null, "2016-03-15T00:00:00", "18 26 30 44 68", "07", "04" ] -, [ 1655, "7346468C-570F-4959-9C47-D3968389C666", 1655, 1458356507, "708543", 1458356507, "708543", null, "2016-03-18T00:00:00", "05 08 57 59 73", "13", "05" ] -, [ 1656, "F32E462E-EC01-48B3-99F6-AD6656CC8BAB", 1656, 1458702105, "708543", 1458702105, "708543", null, "2016-03-22T00:00:00", "06 19 34 38 70", "05", "05" ] -, [ 1657, "1E34E7D5-CDED-4CC3-907A-DB890B845B3C", 1657, 1458961346, "708543", 1458961346, "708543", null, "2016-03-25T00:00:00", "04 11 12 35 46", "12", "02" ] -, [ 1658, "2472EA19-C13B-4A4C-BB18-2770ED68FEB4", 1658, 1459306927, "708543", 1459306927, "708543", null, "2016-03-29T00:00:00", "33 38 40 46 49", "15", "05" ] -, [ 1659, "5EAA3253-2899-4961-A8AA-3AF3577FFB34", 1659, 1459566137, "708543", 1459566137, "708543", null, "2016-04-01T00:00:00", "25 28 33 41 69", "06", "02" ] -, [ 1660, "730C99CF-8304-4E8E-9DC8-37EDCB468913", 1660, 1459911705, "708543", 1459911705, "708543", null, "2016-04-05T00:00:00", "13 45 52 53 57", "10", "05" ] -, [ 1661, "635A8961-E360-46DC-99F2-82C35E8ADE1B", 1661, 1460170909, "708543", 1460170909, "708543", null, "2016-04-08T00:00:00", "31 38 52 65 71", "15", "03" ] -, [ 1662, "1684546A-9BF3-40A4-BB78-58D7E7C6EA78", 1662, 1460516506, "708543", 1460516506, "708543", null, "2016-04-12T00:00:00", "07 11 59 62 63", "03", "05" ] -, [ 1663, "5FAD000A-6227-42A4-B37B-5C3413481CA5", 1663, 1460775769, "708543", 1460775769, "708543", null, "2016-04-15T00:00:00", "09 10 34 37 73", "09", "05" ] -, [ 1664, "59F5A789-DE19-4648-B46D-196833A64927", 1664, 1461121307, "708543", 1461121307, "708543", null, "2016-04-19T00:00:00", "09 28 40 57 65", "02", "05" ] -, [ 1665, "1EFFFA59-5E1A-4F67-B885-4403A2EEA36B", 1665, 1461380489, "708543", 1461380489, "708543", null, "2016-04-22T00:00:00", "02 19 21 42 60", "13", "05" ] -, [ 1666, "3D1A81F6-FC6D-4A43-ABBD-124B3C6A15CB", 1666, 1461726127, "708543", 1461726127, "708543", null, "2016-04-26T00:00:00", "14 16 17 28 48", "02", "02" ] -, [ 1667, "9F063336-F99B-4B5A-B425-CAC2772F5DC5", 1667, 1461985308, "708543", 1461985308, "708543", null, "2016-04-29T00:00:00", "05 06 37 55 74", "10", "05" ] -, [ 1668, "9CA74EE6-461C-4AE1-96C1-7C9041086E65", 1668, 1462330906, "708543", 1462330906, "708543", null, "2016-05-03T00:00:00", "28 29 33 36 45", "15", "05" ] -, [ 1669, "28B4E2DD-05CD-435F-8144-373554ADCC07", 1669, 1462590107, "708543", 1462590107, "708543", null, "2016-05-06T00:00:00", "14 26 27 32 36", "07", "04" ] -, [ 1670, "E6136A00-E6CD-4564-9BDB-5D8658C1266F", 1670, 1462935706, "708543", 1462935706, "708543", null, "2016-05-10T00:00:00", "12 22 46 56 74", "04", "03" ] -, [ 1671, "144177A9-0D5C-41E0-87AA-B476C6076F11", 1671, 1463194908, "708543", 1463194908, "708543", null, "2016-05-13T00:00:00", "20 21 38 54 66", "07", "04" ] -, [ 1672, "77A58B0B-B6FB-43A3-99D5-C1A8962A3683", 1672, 1463540486, "708543", 1463540486, "708543", null, "2016-05-17T00:00:00", "17 24 27 48 75", "06", "03" ] -, [ 1673, "C90DB1FC-B9F4-44F1-BAE0-56541E75CB7C", 1673, 1463799716, "708543", 1463799716, "708543", null, "2016-05-20T00:00:00", "19 24 26 40 68", "08", "02" ] -, [ 1674, "31AA7AEB-7AFF-4E7C-AB41-1E61FF8D940E", 1674, 1464145306, "708543", 1464145306, "708543", null, "2016-05-24T00:00:00", "11 50 51 70 75", "15", "04" ] -, [ 1675, "4F63AC2C-8696-43A3-95D2-EFDBC8F93FA8", 1675, 1464404510, "708543", 1464404510, "708543", null, "2016-05-27T00:00:00", "18 41 50 68 70", "09", "03" ] -, [ 1676, "CFB15510-5ACA-4A3C-8120-F0B60A465B2D", 1676, 1464750107, "708543", 1464750107, "708543", null, "2016-05-31T00:00:00", "09 31 34 41 49", "08", "05" ] -, [ 1677, "C0EA471B-8C90-446F-948D-E5D2F022020A", 1677, 1465009311, "708543", 1465009311, "708543", null, "2016-06-03T00:00:00", "32 54 65 66 71", "10", "03" ] -, [ 1678, "35E2149B-4F4B-4FA7-8E33-1AFE8AABF057", 1678, 1465375783, "708543", 1465375783, "708543", null, "2016-06-07T00:00:00", "25 48 51 65 72", "04", "04" ] -, [ 1679, "6E874453-0778-4D7F-9713-0A4A3074D7E3", 1679, 1465614107, "708543", 1465614107, "708543", null, "2016-06-10T00:00:00", "34 61 66 67 68", "07", "05" ] -, [ 1680, "B21F8F34-9F29-463F-AC25-79A1FB778512", 1680, 1465959706, "708543", 1465959706, "708543", null, "2016-06-14T00:00:00", "36 37 38 52 62", "06", "05" ] -, [ 1681, "FF41B26A-4D95-46FD-90D6-BE358A9D7FEB", 1681, 1466218908, "708543", 1466218908, "708543", null, "2016-06-17T00:00:00", "20 23 30 44 59", "09", "05" ] -, [ 1682, "093F0CEB-4416-493E-BAC0-DADCBE527A9C", 1682, 1466564486, "708543", 1466564486, "708543", null, "2016-06-21T00:00:00", "06 13 21 49 50", "10", "05" ] -, [ 1683, "0DAE0DED-2901-4FFF-B384-08A5D8C81B7A", 1683, 1466823708, "708543", 1466823708, "708543", null, "2016-06-24T00:00:00", "11 14 54 57 63", "11", "05" ] -, [ 1684, "6C7CBB06-FAA1-480F-BF36-333F4BBD0CF2", 1684, 1467169306, "708543", 1467169306, "708543", null, "2016-06-28T00:00:00", "15 17 20 35 55", "07", "02" ] -, [ 1685, "C9B81A72-3904-4620-8449-41A9290F4FBE", 1685, 1467428490, "708543", 1467428490, "708543", null, "2016-07-01T00:00:00", "20 41 42 45 49", "14", "02" ] -, [ 1686, "D1A987BF-16F8-4ED2-96D9-B3E17B64D960", 1686, 1467774149, "708543", 1467774149, "708543", null, "2016-07-05T00:00:00", "29 46 53 64 73", "10", "05" ] -, [ 1687, "5F960802-C664-4042-9335-123EC20BE436", 1687, 1468033308, "708543", 1468033308, "708543", null, "2016-07-08T00:00:00", "08 19 20 55 73", "05", "02" ] -, [ 1688, "9D920794-C05B-485C-924A-9982FFD79A80", 1688, 1468378905, "708543", 1468378905, "708543", null, "2016-07-12T00:00:00", "06 08 22 46 68", "04", "04" ] -, [ 1689, "2144EBBB-EDA3-4E17-8BCB-A0682E6E2711", 1689, 1468638086, "708543", 1468638086, "708543", null, "2016-07-15T00:00:00", "16 51 52 56 58", "04", "02" ] -, [ 1690, "72A8E501-6FCD-44BE-9F14-D2428CFD296A", 1690, 1468983705, "708543", 1468983705, "708543", null, "2016-07-19T00:00:00", "03 34 54 65 66", "04", "05" ] -, [ 1691, "6C611C43-B591-4FB2-B377-364CC0E42915", 1691, 1469242907, "708543", 1469242907, "708543", null, "2016-07-22T00:00:00", "08 24 25 26 30", "07", "04" ] -, [ 1692, "984FA443-EEBD-4558-B81C-5C3067CB6BED", 1692, 1469588505, "708543", 1469588505, "708543", null, "2016-07-26T00:00:00", "01 04 31 36 54", "09", "03" ] -, [ 1693, "3DF563C7-1EC0-490A-AD2B-F65CC5700B89", 1693, 1469847706, "708543", 1469847706, "708543", null, "2016-07-29T00:00:00", "11 16 19 31 48", "04", "05" ] -, [ 1694, "4D0679B3-5476-40DD-89FE-93378295A073", 1694, 1470193285, "708543", 1470193285, "708543", null, "2016-08-02T00:00:00", "03 12 36 54 70", "12", "05" ] -, [ 1695, "5CB223B1-DD54-4EE5-BA4B-07A736D4DB1E", 1695, 1470452508, "708543", 1470452508, "708543", null, "2016-08-05T00:00:00", "05 18 28 54 74", "06", "04" ] -, [ 1696, "295B3CAA-7AD7-48EA-99C7-B607F0BD93C0", 1696, 1470798106, "708543", 1470798106, "708543", null, "2016-08-09T00:00:00", "12 19 20 44 66", "01", "05" ] -, [ 1697, "2D055176-5D79-486C-8319-DE5093C0C312", 1697, 1471057309, "708543", 1471057309, "708543", null, "2016-08-12T00:00:00", "04 41 44 56 69", "10", "04" ] -, [ 1698, "E3A9ADEA-B623-49E8-ABBB-51BB2E3D316E", 1698, 1471402905, "708543", 1471402905, "708543", null, "2016-08-16T00:00:00", "02 43 52 62 63", "06", "05" ] -, [ 1699, "B905E132-9D91-4425-A6B8-6912D3A5690B", 1699, 1471687310, "708543", 1471687310, "708543", null, "2016-08-19T00:00:00", "22 37 45 65 73", "13", "05" ] -, [ 1700, "DCC4E78B-4BF2-4D5D-8229-BCE9DEEB08C0", 1700, 1472076211, "708543", 1472076211, "708543", null, "2016-08-23T00:00:00", "02 07 46 61 66", "01", "02" ] -, [ 1701, "273F2248-9E79-4C97-B889-CAAD926DFA38", 1701, 1472292089, "708543", 1472292089, "708543", null, "2016-08-26T00:00:00", "10 11 31 41 44", "14", "02" ] -, [ 1702, "8B3C608A-E36D-43C1-9D18-1D403785CFB5", 1702, 1472637685, "708543", 1472637685, "708543", null, "2016-08-30T00:00:00", "28 32 41 51 71", "11", "04" ] -, [ 1703, "8E89CD90-99D4-4B76-9804-BFD0A158ED62", 1703, 1472896890, "708543", 1472896890, "708543", null, "2016-09-02T00:00:00", "22 28 41 46 60", "03", "03" ] -, [ 1704, "7D26FA54-E694-4AEA-95D9-6DEA7A996E01", 1704, 1473268935, "708543", 1473268935, "708543", null, "2016-09-06T00:00:00", "25 37 58 69 75", "08", "03" ] -, [ 1705, "FAF31467-323F-475D-A552-14C8A21B01CB", 1705, 1473501665, "708543", 1473501665, "708543", null, "2016-09-09T00:00:00", "01 34 43 44 63", "11", "04" ] -, [ 1706, "84C31388-A7AA-4E26-9744-E84E09C5552C", 1706, 1473847264, "708543", 1473847264, "708543", null, "2016-09-13T00:00:00", "06 15 17 39 56", "15", "03" ] -, [ 1707, "E6018DA5-15BE-41C0-9D93-531D725B4888", 1707, 1474106467, "708543", 1474106467, "708543", null, "2016-09-16T00:00:00", "13 21 28 34 40", "15", "03" ] -, [ 1708, "387F9D9B-8BC1-4DCA-B7E5-AC82FE71B8E0", 1708, 1474452067, "708543", 1474452067, "708543", null, "2016-09-20T00:00:00", "02 22 34 62 72", "02", "05" ] -, [ 1709, "9FAE3266-01D8-4DBF-9A73-3D8E1EEAC979", 1709, 1474711269, "708543", 1474711269, "708543", null, "2016-09-23T00:00:00", "01 05 08 25 62", "14", "03" ] -, [ 1710, "8B93C93D-B84C-4555-AED4-3D9CB3AA9776", 1710, 1475056863, "708543", 1475056863, "708543", null, "2016-09-27T00:00:00", "14 16 26 53 72", "04", "04" ] -, [ 1711, "4C02FA18-E31D-48D7-9452-7A226FDCB303", 1711, 1475316064, "708543", 1475316064, "708543", null, "2016-09-30T00:00:00", "21 30 47 50 57", "09", "05" ] -, [ 1712, "BF8A02DB-6CB8-4518-9D1A-39EDD6544658", 1712, 1475661663, "708543", 1475661663, "708543", null, "2016-10-04T00:00:00", "18 29 30 54 66", "01", "05" ] -, [ 1713, "1C68ACE2-D84B-455D-8013-D73C46A33B3C", 1713, 1475920864, "708543", 1475920864, "708543", null, "2016-10-07T00:00:00", "24 37 42 50 65", "14", "02" ] -, [ 1714, "F8296378-E773-4580-B6DE-BAFA66825C08", 1714, 1476266463, "708543", 1476266463, "708543", null, "2016-10-11T00:00:00", "36 39 42 45 48", "03", "02" ] -, [ 1715, "1674EA77-1766-4DBD-9B00-65384F2D0B10", 1715, 1476525664, "708543", 1476525664, "708543", null, "2016-10-14T00:00:00", "07 27 60 64 74", "05", "03" ] -, [ 1716, "9596D39E-D8E8-4CAA-B7FF-BA7A0B9849DD", 1716, 1476871264, "708543", 1476871264, "708543", null, "2016-10-18T00:00:00", "07 24 28 65 74", "01", "02" ] -, [ 1717, "00AA4CA5-AE12-4E21-8121-97BE38E6C511", 1717, 1477130472, "708543", 1477130472, "708543", null, "2016-10-21T00:00:00", "12 43 44 48 66", "03", "04" ] -, [ 1718, "0A85CFA3-AE43-4729-8311-BFBA0AADE5D4", 1718, 1477476148, "708543", 1477476148, "708543", null, "2016-10-25T00:00:00", "08 09 24 49 67", "13", "03" ] -, [ 1719, "9219598E-02DA-4CF5-854C-93EB269927DF", 1719, 1477735313, "708543", 1477735313, "708543", null, "2016-10-28T00:00:00", "07 38 46 57 66", "02", "05" ] -, [ 1720, "32C5372F-AFE4-4A21-A2C0-4476B4136338", 1720, 1478080862, "708543", 1478080862, "708543", null, "2016-11-01T00:00:00", "19 24 31 39 45", "13", "02" ] -, [ 1721, "E0DAAFDE-7446-4E41-8D60-38D73DF49F0E", 1721, 1478340064, "708543", 1478340064, "708543", null, "2016-11-04T00:00:00", "10 29 32 44 46", "10", "03" ] -, [ 1722, "0344AAB0-8B3C-43C2-9C70-9009F8E9FBA5", 1722, 1478689263, "708543", 1478689263, "708543", null, "2016-11-08T00:00:00", "46 48 53 61 74", "12", "04" ] -, [ 1723, "F348889E-FDF7-4DB6-8492-E44FD7807A44", 1723, 1478948463, "708543", 1478948463, "708543", null, "2016-11-11T00:00:00", "16 40 47 53 59", "11", "05" ] -, [ 1724, "45E178E8-1A5D-4C5C-A8CD-491DC5B192D7", 1724, 1479294062, "708543", 1479294062, "708543", null, "2016-11-15T00:00:00", "09 17 23 57 71", "06", "03" ] -, [ 1725, "6FF8AD19-266E-47BE-8DDC-0604876C3BAD", 1725, 1479553263, "708543", 1479553263, "708543", null, "2016-11-18T00:00:00", "31 32 49 55 58", "15", "05" ] -, [ 1726, "A78E2756-66C5-442A-AABD-F2EDC0E468EE", 1726, 1479899137, "708543", 1479899137, "708543", null, "2016-11-22T00:00:00", "01 43 45 66 69", "07", "05" ] -, [ 1727, "EFC65225-EFB0-4CDC-8EFF-626C6B56421E", 1727, 1480158306, "708543", 1480158306, "708543", null, "2016-11-25T00:00:00", "44 47 49 69 75", "10", "03" ] -, [ 1728, "60D9C9FE-16A3-4665-8B22-562BC0455695", 1728, 1480503662, "708543", 1480503662, "708543", null, "2016-11-29T00:00:00", "22 33 49 51 59", "08", "04" ] -, [ 1729, "4E86685E-363A-43CE-A927-4E327A8E0796", 1729, 1480762864, "708543", 1480762864, "708543", null, "2016-12-02T00:00:00", "03 33 35 49 51", "01", "02" ] -, [ 1730, "053614AB-69B8-4A4E-9309-3EAED9879AC4", 1730, 1481108463, "708543", 1481108463, "708543", null, "2016-12-06T00:00:00", "13 34 48 53 63", "12", "04" ] -, [ 1731, "DA02B9B1-5288-4D72-B13D-DAA2D3848E1D", 1731, 1481454064, "708543", 1481454064, "708543", null, "2016-12-09T00:00:00", "19 27 47 67 68", "01", "05" ] -, [ 1732, "3AD77F5E-F385-4384-8D55-6E0537C8371D", 1732, 1481713263, "708543", 1481713263, "708543", null, "2016-12-13T00:00:00", "02 15 26 34 41", "14", "05" ] -, [ 1733, "45ADFFB5-0863-456E-BBDA-A17A74B1B3FC", 1733, 1481972465, "708543", 1481972465, "708543", null, "2016-12-16T00:00:00", "01 08 15 36 43", "06", "05" ] -, [ 1734, "77491A99-CD4A-406E-9794-2EB82DEDB58D", 1734, 1482318191, "708543", 1482318191, "708543", null, "2016-12-20T00:00:00", "01 12 14 48 65", "02", "05" ] -, [ 1735, "714943E2-57A3-4101-8ED2-F4FC7530E30B", 1735, 1482577541, "708543", 1482577541, "708543", null, "2016-12-23T00:00:00", "21 30 39 60 69", "15", "05" ] -, [ 1736, "9283006E-6539-4923-B806-004B27DCFE8C", 1736, 1482922987, "708543", 1482922987, "708543", null, "2016-12-27T00:00:00", "02 28 30 38 39", "11", "04" ] -, [ 1737, "AE2B492D-A47C-482A-AD4D-10D664C3BA67", 1737, 1483182148, "708543", 1483182148, "708543", null, "2016-12-30T00:00:00", "06 21 33 39 43", "02", "02" ] -, [ 1738, "5D46057F-9D99-4702-81CC-4F49A38D643F", 1738, 1483527775, "708543", 1483527775, "708543", null, "2017-01-03T00:00:00", "14 16 23 49 53", "12", "02" ] -, [ 1739, "2D5234E0-E230-4272-91E3-8416C6B75BF6", 1739, 1483786929, "708543", 1483786929, "708543", null, "2017-01-06T00:00:00", "06 10 44 47 54", "06", "05" ] -, [ 1740, "3DC94C0A-7A60-45E1-A0E9-24383610F930", 1740, 1484132463, "708543", 1484132463, "708543", null, "2017-01-10T00:00:00", "11 20 40 41 59", "15", "05" ] -, [ 1741, "0301A455-E49F-4073-8F9D-503176FAC83E", 1741, 1484391663, "708543", 1484391663, "708543", null, "2017-01-13T00:00:00", "10 44 58 74 75", "11", "03" ] -, [ 1742, "F4F58F62-5E75-4002-BDEF-D80122F8413D", 1742, 1484737264, "708543", 1484737264, "708543", null, "2017-01-17T00:00:00", "20 31 54 56 59", "03", "05" ] -, [ 1744, "0B9EA1DD-8367-47A3-940D-66AB052177C6", 1744, 1485342205, "708543", 1485342205, "708543", null, "2017-01-20T00:00:00", "07 09 24 41 53", "14", "03" ] -, [ 1745, "63C31E5D-BA55-43C2-9E9B-9B4BA7DB0B74", 1745, 1485342246, "708543", 1485342246, "708543", null, "2017-01-24T00:00:00", "08 42 54 63 67", "11", "04" ] -, [ 1746, "759F3C65-541D-49FF-BE9A-28D067247072", 1746, 1485601284, "708543", 1485601284, "708543", null, "2017-01-27T00:00:00", "17 37 53 54 61", "08", "03" ] -, [ 1747, "E68E6833-8A5D-471C-854A-A8951B2FEC47", 1747, 1485946975, "708543", 1485946975, "708543", null, "2017-01-31T00:00:00", "03 14 27 62 72", "04", "03" ] -, [ 1748, "40A6F426-B63F-4829-813E-B85B848156A9", 1748, 1486206064, "708543", 1486206064, "708543", null, "2017-02-03T00:00:00", "03 06 29 30 64", "03", "05" ] -, [ 1749, "C6F73F48-40BF-485D-A2CD-473041C2F024", 1749, 1486551663, "708543", 1486551663, "708543", null, "2017-02-07T00:00:00", "23 28 37 56 71", "12", "05" ] -, [ 1750, "38FEE57B-E1E5-484E-923E-967FA6B59C7B", 1750, 1486810865, "708543", 1486810865, "708543", null, "2017-02-10T00:00:00", "32 39 51 62 75", "14", "05" ] -, [ 1751, "1ED88425-BBBE-481E-B401-8FB56251794C", 1751, 1487156483, "708543", 1487156483, "708543", null, "2017-02-14T00:00:00", "07 11 33 60 68", "15", "05" ] -, [ 1752, "50DC084A-AB4F-4CF9-9431-1242348550D7", 1752, 1487415663, "708543", 1487415663, "708543", null, "2017-02-17T00:00:00", "04 56 58 67 75", "08", "05" ] -, [ 1753, "3657D265-4C07-4890-BFA3-C188C1846DAF", 1753, 1487761263, "708543", 1487761263, "708543", null, "2017-02-21T00:00:00", "09 21 30 32 75", "09", "05" ] -, [ 1754, "D41829B2-3AA3-4663-9BAE-B7F2E91290E7", 1754, 1488020464, "708543", 1488020464, "708543", null, "2017-02-24T00:00:00", "12 29 33 42 68", "14", "03" ] -, [ 1755, "B0F99384-F7AE-402A-BACC-F6F317DC6DED", 1755, 1488366063, "708543", 1488366063, "708543", null, "2017-02-28T00:00:00", "20 33 45 58 69", "04", "02" ] -, [ 1756, "F8753135-AD9D-4059-9862-C4AA0AAB259C", 1756, 1488625264, "708543", 1488625264, "708543", null, "2017-03-03T00:00:00", "14 26 39 48 51", "09", "05" ] -, [ 1757, "D4F83543-9B57-40C6-A9DE-FCEE3E05B3CE", 1757, 1488970863, "708543", 1488970863, "708543", null, "2017-03-07T00:00:00", "03 30 45 53 68", "11", "03" ] -, [ 1758, "A4282612-1A7F-461F-81C4-DB4E6EEACD96", 1758, 1489230064, "708543", 1489230064, "708543", null, "2017-03-10T00:00:00", "26 38 42 58 70", "05", "05" ] -, [ 1759, "CE0B76F1-7657-4984-A22F-874F6106E232", 1759, 1489572063, "708543", 1489572063, "708543", null, "2017-03-14T00:00:00", "16 23 28 33 59", "13", "03" ] -, [ 1760, "0638F069-9AFE-4471-A553-D074B4574341", 1760, 1489831264, "708543", 1489831264, "708543", null, "2017-03-17T00:00:00", "11 27 31 58 60", "10", "04" ] -, [ 1761, "22420896-3EE1-4690-BFFF-564A46D017D7", 1761, 1490176862, "708543", 1490176862, "708543", null, "2017-03-21T00:00:00", "04 45 53 73 75", "07", "03" ] -, [ 1762, "DB64A17B-1CDD-4077-944B-CD8A6DCE8E76", 1762, 1490436062, "708543", 1490436062, "708543", null, "2017-03-24T00:00:00", "05 28 37 61 69", "01", "05" ] -, [ 1763, "3EA50957-B887-4FB0-AB54-70F5A9ED385C", 1763, 1490781664, "708543", 1490781664, "708543", null, "2017-03-28T00:00:00", "30 33 35 37 46", "10", "05" ] -, [ 1764, "9893AE26-8C83-4E1A-A74F-3563F9C980AE", 1764, 1491040863, "708543", 1491040863, "708543", null, "2017-03-31T00:00:00", "17 24 27 32 58", "10", "03" ] -, [ 1765, "B935B56A-C478-43EF-AF02-AC85613DF286", 1765, 1491386467, "708543", 1491386467, "708543", null, "2017-04-04T00:00:00", "13 24 34 35 55", "09", "05" ] -, [ 1766, "ED3D7FE2-51BC-4055-ADF6-05FDD98A75AE", 1766, 1491645663, "708543", 1491645663, "708543", null, "2017-04-07T00:00:00", "30 33 43 47 69", "15", "05" ] -, [ 1767, "EFA3E720-B90F-42BF-AAB4-7815B320B313", 1767, 1491991262, "708543", 1491991262, "708543", null, "2017-04-11T00:00:00", "19 34 35 38 49", "08", "05" ] -, [ 1768, "10D0ECDB-2152-4073-840D-78AE2A4085BD", 1768, 1492250463, "708543", 1492250463, "708543", null, "2017-04-14T00:00:00", "05 10 55 60 73", "12", "05" ] -, [ 1769, "AE102C01-DAE4-461A-9CC1-23B5B9694881", 1769, 1492596083, "708543", 1492596083, "708543", null, "2017-04-18T00:00:00", "08 29 30 43 64", "06", "03" ] -, [ 1770, "A6AD1EA5-6800-451A-ACDE-1187FAD9B566", 1770, 1492855281, "708543", 1492855281, "708543", null, "2017-04-21T00:00:00", "01 12 13 32 34", "10", "02" ] -, [ 1771, "17BE4C71-7B00-47D6-B4CE-1EFC7E3A2916", 1771, 1493200863, "708543", 1493200863, "708543", null, "2017-04-25T00:00:00", "03 13 33 40 50", "02", "04" ] -, [ 1772, "A020B997-F086-4F1B-99E8-36C46069D873", 1772, 1493460064, "708543", 1493460064, "708543", null, "2017-04-28T00:00:00", "06 13 18 20 31", "13", "04" ] -, [ 1773, "1727AFF8-9F51-4634-8E03-C5CF20E45000", 1773, 1493805664, "708543", 1493805664, "708543", null, "2017-05-02T00:00:00", "05 14 42 43 58", "01", "04" ] -, [ 1774, "30DFFCED-2E18-4FB6-BD33-62FD300F0E44", 1774, 1494064867, "708543", 1494064867, "708543", null, "2017-05-05T00:00:00", "04 23 33 47 53", "07", "04" ] -, [ 1775, "5976EE30-2E10-4BF9-BD9D-AD1C8E1EEFC1", 1775, 1494410464, "708543", 1494410464, "708543", null, "2017-05-09T00:00:00", "06 29 45 69 73", "11", "05" ] -, [ 1776, "6F450884-CDD9-4523-9265-FA369DD13916", 1776, 1494669666, "708543", 1494669666, "708543", null, "2017-05-12T00:00:00", "28 34 41 42 47", "13", "04" ] -, [ 1777, "E31793AD-5A3D-46D6-92CD-F913A92498CF", 1777, 1495015264, "708543", 1495015264, "708543", null, "2017-05-16T00:00:00", "04 35 39 56 72", "11", "05" ] -, [ 1778, "A2D9FAC3-749D-48A9-B5F4-CBE7C647FDE6", 1778, 1495274464, "708543", 1495274464, "708543", null, "2017-05-19T00:00:00", "01 04 05 24 30", "01", "03" ] -, [ 1779, "2C2AD6B7-7EFC-44E7-B605-9056848A94F8", 1779, 1495620065, "708543", 1495620065, "708543", null, "2017-05-23T00:00:00", "06 13 17 33 60", "14", "02" ] -, [ 1780, "05675B2E-FE56-4DC0-81FA-A8AB14DD214D", 1780, 1495879264, "708543", 1495879264, "708543", null, "2017-05-26T00:00:00", "25 26 28 37 56", "05", "03" ] -, [ 1781, "346129F8-E92D-43DF-91DE-B694AB06BF04", 1781, 1496224863, "708543", 1496224863, "708543", null, "2017-05-30T00:00:00", "05 20 32 37 67", "05", "05" ] -, [ 1782, "72417B49-381B-4F9A-BFE5-AC92EFF700DF", 1782, 1496484066, "708543", 1496484066, "708543", null, "2017-06-02T00:00:00", "07 42 57 69 72", "10", "03" ] -, [ 1783, "417815C8-6350-42FE-9DA2-BDA965D13F75", 1783, 1496829663, "708543", 1496829663, "708543", null, "2017-06-06T00:00:00", "03 05 16 49 75", "05", "03" ] -, [ 1784, "11947D29-85FA-4288-B16A-7673C450B25C", 1784, 1497088864, "708543", 1497088864, "708543", null, "2017-06-09T00:00:00", "03 16 28 33 37", "09", "05" ] -, [ 1785, "BA728323-F4EB-4037-AE22-37CA3D6FF2AE", 1785, 1497434463, "708543", 1497434463, "708543", null, "2017-06-13T00:00:00", "27 51 62 68 75", "08", "03" ] -, [ 1786, "D5161AD7-1ED0-45A6-803D-24D27B3B72AD", 1786, 1497693665, "708543", 1497693665, "708543", null, "2017-06-16T00:00:00", "18 22 26 30 44", "09", "05" ] -, [ 1787, "E58ABE14-127D-49FF-8B96-F3A43551985D", 1787, 1498039264, "708543", 1498039264, "708543", null, "2017-06-20T00:00:00", "02 15 41 49 63", "03", "03" ] -, [ 1788, "E0AB73AA-FB82-4D5A-BBE6-3C8C7F4C35E2", 1788, 1498298464, "708543", 1498298464, "708543", null, "2017-06-23T00:00:00", "12 20 53 66 74", "11", "02" ] -, [ 1789, "317B88B2-1E7B-4988-8E08-DB2D6B93FDB5", 1789, 1498644063, "708543", 1498644063, "708543", null, "2017-06-27T00:00:00", "04 21 45 52 57", "14", "04" ] -, [ 1790, "704B021F-90F0-430C-827F-344C6716B574", 1790, 1498903263, "708543", 1498903263, "708543", null, "2017-06-30T00:00:00", "10 38 51 55 64", "06", "05" ] -, [ 1791, "77AE800A-DB56-460A-968D-FC03DCDA98FC", 1791, 1499248863, "708543", 1499248863, "708543", null, "2017-07-04T00:00:00", "16 39 47 53 71", "15", "04" ] -, [ 1792, "B699871F-3188-410B-BD10-CF831C3ED41D", 1792, 1499508064, "708543", 1499508064, "708543", null, "2017-07-07T00:00:00", "02 09 11 28 60", "10", "05" ] -, [ 1793, "DB8207CA-BD86-4ABB-B937-8FB0177A4AE9", 1793, 1499853662, "708543", 1499853662, "708543", null, "2017-07-11T00:00:00", "07 18 24 55 74", "10", "02" ] -, [ 1794, "7E9FDDE3-A7BC-436C-9A65-D81EE060EAD0", 1794, 1500112863, "708543", 1500112863, "708543", null, "2017-07-14T00:00:00", "11 12 24 32 73", "01", "04" ] -, [ 1795, "1212E8CB-D109-45ED-90A6-C568D2E40C2E", 1795, 1500458464, "708543", 1500458464, "708543", null, "2017-07-18T00:00:00", "08 12 23 51 73", "06", "04" ] -, [ 1796, "FD732321-5433-49B1-AC3E-22D79F295C62", 1796, 1500717663, "708543", 1500717663, "708543", null, "2017-07-21T00:00:00", "18 31 36 50 74", "10", "04" ] -, [ 1797, "63EA61AF-4FF9-404F-B971-DB540DBFE9D5", 1797, 1501063263, "708543", 1501063263, "708543", null, "2017-07-25T00:00:00", "02 05 26 58 60", "06", "03" ] -, [ 1798, "DC590A73-39DE-4FCC-93B3-07241059B1E0", 1798, 1501322464, "708543", 1501322464, "708543", null, "2017-07-28T00:00:00", "04 06 31 49 52", "11", "03" ] - ] -} \ No newline at end of file + }, + "data": [ + [ + 1, + "DD63E09E-4222-4E85-B209-4ECB6FEB8B9D", + 1, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-05-17T00:00:00Z", + "15 18 25 33 47", + "30", + null + ], + [ + 2, + "CDB0B5A7-F4E1-4D26-97E2-C0643DF22F9C", + 2, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-05-21T00:00:00Z", + "04 28 39 41 44", + "09", + null + ], + [ + 3, + "2E7BD2A6-7685-4C03-9DA2-F23490539D0A", + 3, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-05-24T00:00:00Z", + "02 04 32 44 52", + "36", + null + ], + [ + 4, + "5A8BEB43-7731-4019-87CA-5674C82123F7", + 4, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-05-28T00:00:00Z", + "06 21 22 29 32", + "24", + null + ], + [ + 5, + "AA15F9F3-C9B9-413D-84AA-915039E534D4", + 5, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-05-31T00:00:00Z", + "12 28 45 46 52", + "47", + null + ], + [ + 6, + "E322CD76-D127-4524-97D7-073B62D1E2CE", + 6, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-04T00:00:00Z", + "03 25 29 30 48", + "48", + null + ], + [ + 7, + "6D9D2AF9-D5C9-486A-B522-0F00B9DE27F4", + 7, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-07T00:00:00Z", + "14 22 27 28 42", + "13", + null + ], + [ + 8, + "D5C31C03-3C01-4089-83ED-D286EC8EB4E0", + 8, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-11T00:00:00Z", + "05 06 09 33 44", + "52", + null + ], + [ + 9, + "D195047D-520E-43B4-AB07-62468B5F0D7D", + 9, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-14T00:00:00Z", + "04 08 32 37 43", + "02", + null + ], + [ + 10, + "B70FC384-3AB2-4374-BE6B-19FE0B1B5E60", + 10, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-18T00:00:00Z", + "06 13 18 27 45", + "18", + null + ], + [ + 11, + "604A874F-7DA9-4CD2-90EB-E6AC68736016", + 11, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-21T00:00:00Z", + "13 18 32 39 49", + "06", + null + ], + [ + 12, + "BB41E518-5BAD-4AE3-90C3-2BFCB25FA9AF", + 12, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-25T00:00:00Z", + "04 18 21 27 41", + "50", + null + ], + [ + 13, + "E927B1DB-EE55-4BD2-AD76-23F93A0151AC", + 13, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-06-28T00:00:00Z", + "18 31 49 50 51", + "04", + null + ], + [ + 14, + "B676A329-65DC-4084-AABE-6A25C83EFAB3", + 14, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-02T00:00:00Z", + "14 22 32 35 44", + "06", + null + ], + [ + 15, + "776E4AE3-82C8-48CF-930B-C92A1F571516", + 15, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-05T00:00:00Z", + "11 20 26 29 41", + "41", + null + ], + [ + 16, + "DD63071A-8491-4ED3-A3AC-18352FA79BED", + 16, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-09T00:00:00Z", + "26 29 31 44 48", + "40", + null + ], + [ + 17, + "3BD81BA2-8C8F-4A58-AAC2-22D96A0672B7", + 17, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-12T00:00:00Z", + "13 19 23 38 47", + "15", + null + ], + [ + 18, + "46D285E0-FE04-43C5-A848-B9846D038F5B", + 18, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-16T00:00:00Z", + "10 24 35 49 52", + "47", + null + ], + [ + 19, + "470FA664-DEB5-49C3-9D6F-A3C187FA6FDF", + 19, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-19T00:00:00Z", + "07 15 24 37 46", + "09", + null + ], + [ + 20, + "4F3CA620-EA20-4576-B91B-44A4A8C38B1C", + 20, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-23T00:00:00Z", + "10 12 29 32 38", + "07", + null + ], + [ + 21, + "7326095E-618A-4DD2-8949-BC6BE5358158", + 21, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-26T00:00:00Z", + "20 27 28 37 49", + "32", + null + ], + [ + 22, + "CFAC1CDB-7D92-4432-97D7-83E5FBDB3D8A", + 22, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-07-30T00:00:00Z", + "02 06 22 27 44", + "01", + null + ], + [ + 23, + "A2F33330-714C-4D90-93AF-E003BFDE8459", + 23, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-02T00:00:00Z", + "10 16 23 28 31", + "07", + null + ], + [ + 24, + "69C74D9F-48C8-4A14-9A1D-BF41DE0AFB20", + 24, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-06T00:00:00Z", + "02 06 38 40 50", + "14", + null + ], + [ + 25, + "0FB58BD0-9EE5-4018-BE99-65A943A57052", + 25, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-09T00:00:00Z", + "07 17 23 43 44", + "26", + null + ], + [ + 26, + "F90BA0BD-C520-44C5-B511-6A12634A3CE3", + 26, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-13T00:00:00Z", + "03 10 15 18 25", + "52", + null + ], + [ + 27, + "A22129D4-F083-4E99-97C7-15E807B2053E", + 27, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-16T00:00:00Z", + "22 31 33 44 52", + "43", + null + ], + [ + 28, + "0B145B86-D93E-4729-B31F-102C9BA6E2F5", + 28, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-20T00:00:00Z", + "02 13 20 23 43", + "06", + null + ], + [ + 29, + "E813DDA1-E3CA-4B4D-9FE2-290318C777DA", + 29, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-23T00:00:00Z", + "05 19 20 45 48", + "44", + null + ], + [ + 30, + "6292DFE4-D4A5-484A-9E52-8D2CDD57346E", + 30, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-27T00:00:00Z", + "02 05 11 18 45", + "22", + null + ], + [ + 31, + "5F8C47D5-94BF-4744-879A-879576D98824", + 31, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-08-30T00:00:00Z", + "06 31 32 42 51", + "42", + null + ], + [ + 32, + "0B608831-82DE-4A5D-B1B5-175B0386B92C", + 32, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-03T00:00:00Z", + "08 23 36 49 51", + "10", + null + ], + [ + 33, + "0729E99F-EDF4-4CF8-9C7D-538F359A43D6", + 33, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-06T00:00:00Z", + "31 39 42 49 51", + "35", + null + ], + [ + 34, + "480239A2-53C4-49F8-9B38-0C50CEA74DAA", + 34, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-10T00:00:00Z", + "04 06 10 21 25", + "21", + null + ], + [ + 35, + "2A460703-1EE5-4863-AD16-AB89FEE47E3C", + 35, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-13T00:00:00Z", + "24 32 37 40 51", + "12", + null + ], + [ + 36, + "FE0F5025-940B-4B6A-8748-078CE383248C", + 36, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-17T00:00:00Z", + "07 10 19 26 44", + "05", + null + ], + [ + 37, + "F8B8EB29-240C-4EDD-8D83-767A7144D889", + 37, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-20T00:00:00Z", + "01 02 04 05 46", + "08", + null + ], + [ + 38, + "B16F1457-6AE7-4F6E-9CD4-2D2A45FAC9AE", + 38, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-24T00:00:00Z", + "08 32 34 42 50", + "21", + null + ], + [ + 39, + "5B3358D5-CEC6-40A2-B805-27C3C0CEFC46", + 39, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-09-27T00:00:00Z", + "23 27 30 33 36", + "05", + null + ], + [ + 40, + "F4B78AC5-E425-4199-8847-378923739E98", + 40, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-01T00:00:00Z", + "07 21 30 32 37", + "15", + null + ], + [ + 41, + "E38867F4-3486-42B1-BB61-C62BFB44E0DC", + 41, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-04T00:00:00Z", + "10 42 43 45 51", + "01", + null + ], + [ + 42, + "807547BC-EE1A-4B65-84AD-3CE1E854FC35", + 42, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-08T00:00:00Z", + "18 34 43 47 50", + "25", + null + ], + [ + 43, + "AC63F7BD-012F-4C12-8661-D4E4117368C1", + 43, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-11T00:00:00Z", + "09 11 17 26 41", + "29", + null + ], + [ + 44, + "A3E5E55D-900C-494F-9E9F-09406CF28772", + 44, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-15T00:00:00Z", + "06 20 27 34 51", + "22", + null + ], + [ + 45, + "76FE6E0D-849C-4876-9B35-79B6945D12B9", + 45, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-18T00:00:00Z", + "10 31 40 48 51", + "38", + null + ], + [ + 46, + "0247E8D6-04A3-4975-BB28-9E5ED39E7013", + 46, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-22T00:00:00Z", + "16 20 26 36 48", + "32", + null + ], + [ + 47, + "203F46F2-9559-4634-B419-0CF89FC181B5", + 47, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-25T00:00:00Z", + "08 15 34 39 47", + "04", + null + ], + [ + 48, + "A6901E49-98E3-4C6E-8315-0266D96AEB91", + 48, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-10-29T00:00:00Z", + "09 10 14 41 49", + "35", + null + ], + [ + 49, + "DE30E918-423E-42EB-BA73-F657ABCFD8FE", + 49, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-01T00:00:00Z", + "05 10 22 23 43", + "37", + null + ], + [ + 50, + "6A5EF20C-5F46-4DB1-B77E-01E1D55D805F", + 50, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-05T00:00:00Z", + "02 07 16 28 36", + "47", + null + ], + [ + 51, + "0DDE170F-9285-4B87-B30A-AD3C7F643585", + 51, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-08T00:00:00Z", + "17 19 37 47 48", + "14", + null + ], + [ + 52, + "DB2E5ECC-86E3-49E6-BE8D-B36C8B860FAE", + 52, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-12T00:00:00Z", + "03 28 45 48 50", + "24", + null + ], + [ + 53, + "C9E90F12-A9A5-4650-A6F3-D5D7D0A7ED1C", + 53, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-15T00:00:00Z", + "06 17 44 49 51", + "39", + null + ], + [ + 54, + "E7969201-469E-43CD-9B96-5B4D9B5535A1", + 54, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-19T00:00:00Z", + "07 16 20 40 52", + "08", + null + ], + [ + 55, + "270528C5-6420-4FE3-AAA1-8D19B8AFB6E2", + 55, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-22T00:00:00Z", + "11 16 19 22 46", + "05", + null + ], + [ + 56, + "C15AD01F-1345-43D5-B0AB-769467A17A9B", + 56, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-26T00:00:00Z", + "03 21 27 31 43", + "34", + null + ], + [ + 57, + "32E2EF7A-2D3B-4AB7-883D-78E2E55D037E", + 57, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-11-29T00:00:00Z", + "08 25 33 42 49", + "40", + null + ], + [ + 58, + "2B065668-6258-414B-92E3-4C992B783DDD", + 58, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-03T00:00:00Z", + "01 15 19 40 51", + "26", + null + ], + [ + 59, + "3974C6B7-6B78-4503-8DD4-7AF43B9D83C6", + 59, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-06T00:00:00Z", + "04 08 30 36 52", + "48", + null + ], + [ + 60, + "2B12B387-2C45-4544-B2C5-509EC3EF25EA", + 60, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-10T00:00:00Z", + "03 05 09 16 31", + "28", + null + ], + [ + 61, + "B82357E8-CA56-4079-9CF8-7D4801ECD65B", + 61, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-13T00:00:00Z", + "02 13 14 24 46", + "34", + null + ], + [ + 62, + "13CB91BC-2F31-42F1-8107-89B322AFE86F", + 62, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-17T00:00:00Z", + "03 07 21 29 49", + "46", + null + ], + [ + 63, + "22F91DAE-F451-4527-8222-987F1A38D258", + 63, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-20T00:00:00Z", + "10 14 41 46 49", + "52", + null + ], + [ + 64, + "BD3EC7D2-2C57-4E83-AF26-17710AD6A208", + 64, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-24T00:00:00Z", + "08 24 39 43 52", + "43", + null + ], + [ + 65, + "D5CCC43B-959F-44B1-B13D-A7E410E4E761", + 65, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-27T00:00:00Z", + "11 14 26 30 39", + "03", + null + ], + [ + 66, + "E285D142-DA61-4320-A64B-0460BC9AD06E", + 66, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2002-12-31T00:00:00Z", + "08 21 29 42 51", + "34", + null + ], + [ + 67, + "98E41CD9-7A07-4777-99C4-7A3FF99E1843", + 67, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-03T00:00:00Z", + "06 14 28 37 46", + "03", + null + ], + [ + 68, + "AEEA3F05-8610-47C6-A1DD-8A179E989AE2", + 68, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-07T00:00:00Z", + "15 16 28 34 51", + "33", + null + ], + [ + 69, + "4E06CBF1-A178-49DD-8633-0BC1B37DA970", + 69, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-10T00:00:00Z", + "07 17 18 34 50", + "18", + null + ], + [ + 70, + "C0AA6972-7E61-44F6-AB49-00E2F277C475", + 70, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-14T00:00:00Z", + "30 39 41 47 52", + "27", + null + ], + [ + 71, + "628A1E63-1D14-49BB-AD14-242855DA8215", + 71, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-17T00:00:00Z", + "25 26 38 42 46", + "27", + null + ], + [ + 72, + "08C611B7-7BF9-4151-BF2F-7813FD7B1CF8", + 72, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-21T00:00:00Z", + "04 41 48 50 51", + "23", + null + ], + [ + 73, + "46A0C177-42F3-40FD-A28F-1039BA0F4CEF", + 73, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-24T00:00:00Z", + "16 31 37 40 41", + "05", + null + ], + [ + 74, + "E45F2A0A-C3CB-4F40-9975-154ACD72FA7F", + 74, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-28T00:00:00Z", + "13 24 26 32 47", + "34", + null + ], + [ + 75, + "3BC338E9-A5E7-4BE9-BBB8-F2BF9D15CEE4", + 75, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-01-31T00:00:00Z", + "01 08 09 19 22", + "21", + null + ], + [ + 76, + "A4515DBC-FFBA-409E-8BE8-CF303205D017", + 76, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-04T00:00:00Z", + "05 12 16 22 24", + "48", + null + ], + [ + 77, + "1522A885-5C53-4246-988D-05F89AA7D40B", + 77, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-07T00:00:00Z", + "03 09 20 26 27", + "50", + null + ], + [ + 78, + "90677E80-B1E2-4F1F-AA35-AF8916FBBF9F", + 78, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-11T00:00:00Z", + "18 20 23 48 49", + "10", + null + ], + [ + 79, + "7707C582-F232-41DB-B2AD-482FF443C9E8", + 79, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-14T00:00:00Z", + "11 13 19 32 47", + "21", + null + ], + [ + 80, + "3F14C37A-54D4-4DCD-B83A-3A7F267441DE", + 80, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-18T00:00:00Z", + "12 22 29 42 50", + "11", + null + ], + [ + 81, + "5823D1CA-DABD-4A60-980E-83739E6F1CA2", + 81, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-21T00:00:00Z", + "21 28 29 40 51", + "20", + null + ], + [ + 82, + "FFB2EDFC-6008-43C7-B085-802A10E87EB1", + 82, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-25T00:00:00Z", + "02 04 06 37 47", + "38", + null + ], + [ + 83, + "0A9ABE29-045E-4F63-9078-BAC824AB6704", + 83, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-02-28T00:00:00Z", + "11 16 26 48 49", + "13", + null + ], + [ + 84, + "4EE62AB5-8FA2-4D3A-B4B5-69A1C3EA158A", + 84, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-04T00:00:00Z", + "02 26 36 37 41", + "22", + null + ], + [ + 85, + "C2E50A67-D861-4786-A68D-C6A44BE85409", + 85, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-07T00:00:00Z", + "07 10 32 36 41", + "33", + null + ], + [ + 86, + "26C6335D-FB4B-45B0-BE37-E1D1C7775527", + 86, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-11T00:00:00Z", + "10 15 26 28 39", + "10", + null + ], + [ + 87, + "EE125C30-5C1A-4655-A8EB-2B1CC440DB50", + 87, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-14T00:00:00Z", + "03 06 14 31 33", + "08", + null + ], + [ + 88, + "E14A17CA-D479-4C2C-8128-464926CBD322", + 88, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-18T00:00:00Z", + "13 14 16 29 49", + "29", + null + ], + [ + 89, + "D137FA48-2A58-4107-911F-D8DB91D708EA", + 89, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-21T00:00:00Z", + "06 17 18 40 50", + "08", + null + ], + [ + 90, + "ADE703B0-44B8-4EF3-9251-743D5A9EC566", + 90, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-25T00:00:00Z", + "15 21 37 40 42", + "07", + null + ], + [ + 91, + "AB8E0352-1F85-4DCE-A9F0-D14E4536B079", + 91, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-03-28T00:00:00Z", + "08 12 21 27 29", + "15", + null + ], + [ + 92, + "09359168-05CA-40CC-A9DA-CDEF43B38B53", + 92, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-01T00:00:00Z", + "07 12 26 45 47", + "36", + null + ], + [ + 93, + "3BE7FEFD-6E77-4543-AED2-C671DFF538B2", + 93, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-04T00:00:00Z", + "06 22 28 31 40", + "18", + null + ], + [ + 94, + "31DE14F3-C5F3-4570-95E5-BDD9CF730DCF", + 94, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-08T00:00:00Z", + "08 10 24 38 45", + "06", + null + ], + [ + 95, + "5D649EB0-C1CA-4816-B26B-2B0167EA660F", + 95, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-11T00:00:00Z", + "15 26 27 38 39", + "46", + null + ], + [ + 96, + "D3506FF7-DF54-441A-8CE5-83F036B839DA", + 96, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-15T00:00:00Z", + "16 29 31 39 52", + "21", + null + ], + [ + 97, + "E46D4DDD-F39E-483B-9039-5861A76A47F2", + 97, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-18T00:00:00Z", + "05 15 24 50 52", + "03", + null + ], + [ + 98, + "7E8146F7-D852-40DE-8C52-43BE45BE562E", + 98, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-22T00:00:00Z", + "03 09 15 28 52", + "07", + null + ], + [ + 99, + "BA9B9A00-E659-425F-9D67-A92211D08CBE", + 99, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-25T00:00:00Z", + "01 12 32 48 51", + "29", + null + ], + [ + 100, + "58C1D225-815B-4DB8-B948-35A652949308", + 100, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-04-29T00:00:00Z", + "06 08 09 33 35", + "32", + null + ], + [ + 101, + "1754387A-A0DF-4168-918F-8168243D07A8", + 101, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-02T00:00:00Z", + "02 05 19 32 34", + "52", + null + ], + [ + 102, + "9D5762AF-6758-46C0-9171-827486835D08", + 102, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-06T00:00:00Z", + "05 14 32 44 52", + "24", + null + ], + [ + 103, + "454BC472-EEFE-4ACF-B4F9-168839FD8665", + 103, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-09T00:00:00Z", + "01 10 20 22 28", + "39", + null + ], + [ + 104, + "A8D661D0-3B6B-440D-B4E0-CD61055A1FD4", + 104, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-13T00:00:00Z", + "17 20 47 49 50", + "34", + null + ], + [ + 105, + "B7EC9B0F-9AFE-45FD-93B2-7FFCA2ED8EDA", + 105, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-16T00:00:00Z", + "05 10 16 26 39", + "52", + null + ], + [ + 106, + "1CF96B88-1B48-488A-BD4E-DB23E455812F", + 106, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-20T00:00:00Z", + "02 16 36 44 49", + "03", + null + ], + [ + 107, + "96DDFF18-6B91-4025-BD0A-8E7BFB8F145C", + 107, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-23T00:00:00Z", + "12 20 31 33 50", + "17", + null + ], + [ + 108, + "B9DB7AEF-4963-490A-9021-D3F9DF7E44CA", + 108, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-27T00:00:00Z", + "10 11 17 20 26", + "03", + null + ], + [ + 109, + "FAD4EBFE-8EA9-440F-A64A-6EAA0751142A", + 109, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-05-30T00:00:00Z", + "01 21 28 33 51", + "03", + null + ], + [ + 110, + "49420CC9-2969-499C-9682-0922078F53C7", + 110, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-03T00:00:00Z", + "04 20 25 29 32", + "20", + null + ], + [ + 111, + "DE8AF8DE-54CC-47F3-B3BB-05471B80C030", + 111, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-06T00:00:00Z", + "10 14 28 39 40", + "35", + null + ], + [ + 112, + "7AEC15E5-8753-42DA-8D8B-D44AE2936037", + 112, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-10T00:00:00Z", + "14 15 23 32 52", + "37", + null + ], + [ + 113, + "3744E2FD-4467-473F-AD08-615DABDF4BF9", + 113, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-13T00:00:00Z", + "12 15 16 20 51", + "33", + null + ], + [ + 114, + "4204CF2D-6A71-49DB-A1CC-EC65C7F337DF", + 114, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-17T00:00:00Z", + "27 31 34 40 52", + "01", + null + ], + [ + 115, + "D1D590C1-A5BC-462B-9004-A666D7301BCD", + 115, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-20T00:00:00Z", + "01 02 03 12 37", + "35", + null + ], + [ + 116, + "4975BB43-7289-4C7B-8A35-FAF5F1B2DCB5", + 116, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-24T00:00:00Z", + "02 26 43 44 47", + "31", + null + ], + [ + 117, + "C02F25C6-38D1-4DF6-B6A1-FBFFD94BD95F", + 117, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-06-27T00:00:00Z", + "01 14 20 31 40", + "43", + null + ], + [ + 118, + "B417F0A8-9D77-4C4D-9AAC-CCD1CFBDE184", + 118, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-01T00:00:00Z", + "28 32 39 45 48", + "31", + null + ], + [ + 119, + "AB2B5C72-8FE3-4793-853E-1AE475BB514D", + 119, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-04T00:00:00Z", + "06 07 22 37 46", + "08", + null + ], + [ + 120, + "142013F7-D91E-44AC-95CC-8DE4C4FB06FC", + 120, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-08T00:00:00Z", + "02 09 27 29 35", + "18", + null + ], + [ + 121, + "5EC16F46-F61F-438D-9158-380060242B6E", + 121, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-11T00:00:00Z", + "01 04 10 16 18", + "10", + null + ], + [ + 122, + "10344C0E-E9A9-4272-A637-331A9CE4C387", + 122, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-15T00:00:00Z", + "01 26 33 43 48", + "22", + null + ], + [ + 123, + "F56CED15-FCFF-4517-A2C8-7304D1539E69", + 123, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-18T00:00:00Z", + "29 30 34 38 44", + "39", + null + ], + [ + 124, + "26143402-87D4-49D1-88EF-E33AFDC3508E", + 124, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-22T00:00:00Z", + "01 05 31 38 47", + "03", + null + ], + [ + 125, + "5B59CCDB-E5F1-4AEE-B128-3E8CF145939D", + 125, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-25T00:00:00Z", + "33 46 47 50 51", + "30", + null + ], + [ + 126, + "AFC67E7B-C793-46F7-9EF1-1C52AA2E94EE", + 126, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-07-29T00:00:00Z", + "01 17 19 32 42", + "33", + null + ], + [ + 127, + "E1C1FA86-E45D-4A8E-82F7-9A5BD5C8485C", + 127, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-01T00:00:00Z", + "02 11 27 30 33", + "46", + null + ], + [ + 128, + "BE4D241F-D6A3-42D5-B82D-C7C5F548BAA7", + 128, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-05T00:00:00Z", + "07 32 34 38 44", + "49", + null + ], + [ + 129, + "34419EB4-F8CE-4979-BF7A-022B83FE4119", + 129, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-08T00:00:00Z", + "06 09 35 40 43", + "42", + null + ], + [ + 130, + "D97F5B99-5715-41DB-989F-EE646D0885CE", + 130, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-12T00:00:00Z", + "08 11 18 35 51", + "26", + null + ], + [ + 131, + "54DD969F-9ADB-409E-8C07-FD104FF3214E", + 131, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-15T00:00:00Z", + "01 16 20 41 52", + "13", + null + ], + [ + 132, + "C45D583E-DBF7-419A-AC90-92366F3BEC38", + 132, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-19T00:00:00Z", + "07 11 24 28 52", + "16", + null + ], + [ + 133, + "FB0467F9-610B-4187-B189-A1679E990D91", + 133, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-22T00:00:00Z", + "04 19 31 32 51", + "31", + null + ], + [ + 134, + "E3BF4E12-0FBC-4324-9FE1-6DA035540AEA", + 134, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-26T00:00:00Z", + "09 28 42 44 49", + "47", + null + ], + [ + 135, + "4367D263-7EB2-4860-AB00-CEEE46595568", + 135, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-08-29T00:00:00Z", + "08 11 17 42 52", + "10", + null + ], + [ + 136, + "703C475D-9209-4E84-B245-E167C7CF15CB", + 136, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-02T00:00:00Z", + "22 26 27 32 39", + "14", + null + ], + [ + 137, + "87F8EC61-3E18-42A4-9DFD-F0C83B86394D", + 137, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-05T00:00:00Z", + "07 09 28 41 42", + "19", + null + ], + [ + 138, + "2F14383B-8605-4624-8AD2-5A0FBB27AFB8", + 138, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-09T00:00:00Z", + "14 15 30 39 46", + "30", + null + ], + [ + 139, + "7EE72B00-2CE6-4041-B9C6-D3E5A30B58CD", + 139, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-12T00:00:00Z", + "16 22 23 38 46", + "45", + null + ], + [ + 140, + "A9512471-39BE-4381-81A2-16D003C63F06", + 140, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-16T00:00:00Z", + "15 20 24 30 46", + "42", + null + ], + [ + 141, + "C33B630E-4AEF-471A-B115-ACE4C7ABB4C9", + 141, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-19T00:00:00Z", + "13 14 24 34 47", + "13", + null + ], + [ + 142, + "90AECD1E-D7A1-4C0C-B40A-A6FEE8C89582", + 142, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-23T00:00:00Z", + "05 16 24 49 51", + "28", + null + ], + [ + 143, + "10BE1B47-B8F8-4C5D-B864-161897D232A4", + 143, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-26T00:00:00Z", + "05 29 32 45 52", + "29", + null + ], + [ + 144, + "456D7CA6-FEE6-4DA7-81CA-2DCA2E97A114", + 144, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-09-30T00:00:00Z", + "02 26 37 40 46", + "49", + null + ], + [ + 145, + "58CBE626-2263-4622-83A1-172520060895", + 145, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-03T00:00:00Z", + "19 21 30 31 52", + "51", + null + ], + [ + 146, + "DEBA65E1-7811-402B-B00F-BA8FF5397918", + 146, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-07T00:00:00Z", + "01 02 22 40 41", + "43", + null + ], + [ + 147, + "6EBA14B3-3CB0-451D-8E30-F8C1478D229C", + 147, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-10T00:00:00Z", + "04 19 36 42 48", + "13", + null + ], + [ + 148, + "60C042BD-AA8F-438F-BAC3-DA0659C4AAE5", + 148, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-14T00:00:00Z", + "18 19 21 33 40", + "29", + null + ], + [ + 149, + "E3056AF1-D254-4FF8-AD9E-B519592CD15C", + 149, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-17T00:00:00Z", + "14 20 31 46 48", + "18", + null + ], + [ + 150, + "3F10D07A-00CD-4903-B1CF-9AE1CDCE0BE9", + 150, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-21T00:00:00Z", + "18 34 46 51 52", + "38", + null + ], + [ + 151, + "286A4F08-E3C6-43AA-9218-5DE78829445C", + 151, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-24T00:00:00Z", + "08 09 16 30 31", + "15", + null + ], + [ + 152, + "96DA12DE-9616-409F-9B97-D0EF9B2361F0", + 152, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-28T00:00:00Z", + "06 09 20 40 47", + "26", + null + ], + [ + 153, + "CF8AF49F-06AB-467D-9465-ECC72ED4FBEB", + 153, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-10-31T00:00:00Z", + "06 12 13 36 46", + "03", + null + ], + [ + 154, + "660B8C66-B5F5-43F2-8B48-1D1BD288F397", + 154, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-04T00:00:00Z", + "16 24 43 44 45", + "22", + null + ], + [ + 155, + "12930383-A5F6-4021-864F-6E6613EFCC02", + 155, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-07T00:00:00Z", + "06 18 23 26 30", + "31", + null + ], + [ + 156, + "55ACF0F2-4E61-4DD1-9AD0-121B04E8E2D8", + 156, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-11T00:00:00Z", + "02 05 17 21 22", + "43", + null + ], + [ + 157, + "AFFE3574-5A71-449A-A5A9-89A02CC63B46", + 157, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-14T00:00:00Z", + "03 13 31 41 42", + "52", + null + ], + [ + 158, + "53838D7A-3459-4B07-A5EA-62D93F98F5A0", + 158, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-18T00:00:00Z", + "04 11 25 30 52", + "36", + null + ], + [ + 159, + "028A208C-371B-4F58-B771-ADDDE67122A1", + 159, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-21T00:00:00Z", + "14 26 28 36 42", + "14", + null + ], + [ + 160, + "89F065A8-44C0-4FB4-B16E-A67EE3D12895", + 160, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-25T00:00:00Z", + "22 32 37 40 41", + "52", + null + ], + [ + 161, + "9328CDE3-5932-40FC-8D93-F4D5F75D4900", + 161, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-11-28T00:00:00Z", + "19 26 31 44 50", + "19", + null + ], + [ + 162, + "6EC846B7-104F-4C4A-B8E0-8BF46EA0E67F", + 162, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-02T00:00:00Z", + "10 13 24 34 49", + "04", + null + ], + [ + 163, + "A3AA23AD-8665-4F09-BADB-96C5D5C54D3A", + 163, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-05T00:00:00Z", + "01 12 15 18 44", + "42", + null + ], + [ + 164, + "181538CE-E898-498C-897E-13CEF30A9A24", + 164, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-09T00:00:00Z", + "04 14 15 24 48", + "41", + null + ], + [ + 165, + "19102899-F12B-405C-A594-F212042C01CB", + 165, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-12T00:00:00Z", + "09 16 32 45 46", + "26", + null + ], + [ + 166, + "00A140E6-B878-453E-9C36-31A84EE9EB95", + 166, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-16T00:00:00Z", + "16 24 31 46 47", + "47", + null + ], + [ + 167, + "736F2B3D-93B7-4DAE-B6AF-C4C9BF2EE8EE", + 167, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-19T00:00:00Z", + "05 10 17 35 39", + "38", + null + ], + [ + 168, + "8CA935B2-B5C0-419D-87EF-26F64B6EC006", + 168, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-23T00:00:00Z", + "02 13 21 22 49", + "52", + null + ], + [ + 169, + "F7C96926-4484-494B-A7C9-676DCA6F1729", + 169, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-26T00:00:00Z", + "01 10 17 20 29", + "36", + null + ], + [ + 170, + "16F8399E-7FE4-401B-B800-FA7BB56A97DD", + 170, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2003-12-30T00:00:00Z", + "12 18 21 32 46", + "49", + null + ], + [ + 171, + "9ED8E78A-62FB-41C1-870E-8CDFC91C74D6", + 171, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-02T00:00:00Z", + "07 08 36 44 48", + "09", + null + ], + [ + 172, + "3CF133FE-1FA3-47DD-897C-60481ED06E88", + 172, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-06T00:00:00Z", + "07 13 15 25 32", + "09", + null + ], + [ + 173, + "22948242-9DDD-43CB-BF72-CF93BD75566E", + 173, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-09T00:00:00Z", + "24 32 38 47 49", + "12", + null + ], + [ + 174, + "35461A28-871A-479F-953A-E06F8CB4384F", + 174, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-13T00:00:00Z", + "03 17 18 21 45", + "21", + null + ], + [ + 175, + "7DABD050-F49B-41BF-A9BA-656346A9F38C", + 175, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-16T00:00:00Z", + "12 26 41 44 49", + "44", + null + ], + [ + 176, + "90A89117-6F30-49F5-A23C-8333F74EAA1E", + 176, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-20T00:00:00Z", + "05 07 14 21 45", + "36", + null + ], + [ + 177, + "80664E0D-B4D2-49F0-9959-C9AB17CF93AE", + 177, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-23T00:00:00Z", + "10 18 33 46 51", + "13", + null + ], + [ + 178, + "D0CE2C24-B101-4185-B19B-D158FB47ED3E", + 178, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-27T00:00:00Z", + "06 10 20 38 50", + "27", + null + ], + [ + 179, + "F01C707E-9960-4E43-A81E-1782647082A3", + 179, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-01-30T00:00:00Z", + "17 28 30 40 51", + "44", + null + ], + [ + 180, + "677A8C08-956F-46C4-B6A3-F651B929C471", + 180, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-03T00:00:00Z", + "09 21 26 35 41", + "17", + null + ], + [ + 181, + "1AC95439-5800-4931-80E8-F93513E15EFA", + 181, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-06T00:00:00Z", + "01 06 16 30 49", + "13", + null + ], + [ + 182, + "DDE9D7CC-A931-4103-AB9A-DC3DDF728EB5", + 182, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-10T00:00:00Z", + "03 07 10 22 32", + "23", + null + ], + [ + 183, + "166A3441-00D2-4FEC-BF3B-631E835EA49C", + 183, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-13T00:00:00Z", + "14 30 42 43 45", + "30", + null + ], + [ + 184, + "1BDB7F1B-A39A-4115-B172-3303380E1DF3", + 184, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-17T00:00:00Z", + "02 08 34 36 52", + "21", + null + ], + [ + 185, + "E355CFD8-D090-41B8-8811-028D99AB8DA8", + 185, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-20T00:00:00Z", + "01 13 20 21 30", + "24", + null + ], + [ + 186, + "B999148E-D11E-440B-81DA-789CB7E68DBB", + 186, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-24T00:00:00Z", + "06 11 43 49 52", + "21", + null + ], + [ + 187, + "1F1CC98F-6F31-4BF7-9145-56C2FF15E6FD", + 187, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-02-27T00:00:00Z", + "02 09 24 36 52", + "44", + null + ], + [ + 188, + "A78AF303-06C3-4C18-8CD0-491D985D7A43", + 188, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-02T00:00:00Z", + "25 30 35 40 50", + "04", + null + ], + [ + 189, + "5D0C62A6-844E-4C80-8981-1EC4862B165A", + 189, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-05T00:00:00Z", + "30 40 47 49 52", + "03", + null + ], + [ + 190, + "DF590B22-E81F-41A7-9ED0-B792C9CE5249", + 190, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-09T00:00:00Z", + "16 23 29 36 51", + "49", + null + ], + [ + 191, + "DD89D574-8A08-41C4-A5EE-4E4A5AA07163", + 191, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-12T00:00:00Z", + "04 29 32 35 36", + "11", + null + ], + [ + 192, + "9F301819-E19D-4D62-8128-AE50FC932F93", + 192, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-16T00:00:00Z", + "03 28 45 49 51", + "52", + null + ], + [ + 193, + "287B8DFB-0016-4750-86CA-425DB92CA791", + 193, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-19T00:00:00Z", + "06 09 14 32 50", + "04", + null + ], + [ + 194, + "30AC2580-A52B-4268-A81C-BF18BE48945D", + 194, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-23T00:00:00Z", + "12 22 35 39 46", + "32", + null + ], + [ + 195, + "151FEC11-E77A-43D6-B5F5-E0B0A884017B", + 195, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-26T00:00:00Z", + "08 10 17 37 49", + "20", + null + ], + [ + 196, + "F7C95B95-0C63-4A37-AA6B-EA02803C0F1E", + 196, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-03-30T00:00:00Z", + "03 27 31 41 45", + "33", + null + ], + [ + 197, + "37183BCC-D528-4EFF-8337-4329057BB4E6", + 197, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-02T00:00:00Z", + "08 17 25 46 47", + "13", + null + ], + [ + 198, + "D0B36FC0-DF03-4360-8B25-4346181571B2", + 198, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-06T00:00:00Z", + "08 17 29 32 39", + "49", + null + ], + [ + 199, + "4401F17E-E367-440B-99FB-688A755EA807", + 199, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-09T00:00:00Z", + "02 08 10 11 23", + "40", + null + ], + [ + 200, + "64E8D621-CD53-43AA-A99E-9469BF1CF78D", + 200, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-13T00:00:00Z", + "13 36 39 50 51", + "34", + null + ], + [ + 201, + "530AD7EA-F834-4223-8EB1-35148E1329A8", + 201, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-16T00:00:00Z", + "06 24 29 42 51", + "41", + null + ], + [ + 202, + "CE4121AF-B677-4B9B-9061-E3BC4CCE3CF4", + 202, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-20T00:00:00Z", + "12 22 37 46 48", + "49", + null + ], + [ + 203, + "D89990AD-D822-43B2-9D98-B4DB4D36BD27", + 203, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-23T00:00:00Z", + "08 22 25 47 48", + "27", + null + ], + [ + 204, + "8F52A470-2731-451C-A0E9-652338AC2AE5", + 204, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-27T00:00:00Z", + "01 10 17 23 35", + "45", + null + ], + [ + 205, + "EEEDFFAB-7B51-4B47-9167-604CD2BBCEDC", + 205, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-04-30T00:00:00Z", + "15 21 32 39 50", + "34", + null + ], + [ + 206, + "4281178C-8AE5-4EDB-AE19-FFCE603ED9F8", + 206, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-04T00:00:00Z", + "03 15 29 37 39", + "40", + null + ], + [ + 207, + "FA75A85C-0A84-44B0-BD03-3F6BB05FDE6D", + 207, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-07T00:00:00Z", + "14 17 19 44 50", + "17", + null + ], + [ + 208, + "3FAD2848-7B00-4795-AAD7-B595FE15B0F2", + 208, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-11T00:00:00Z", + "09 25 30 34 37", + "30", + null + ], + [ + 209, + "EDE45563-04A9-452C-950C-F90D50C60B7F", + 209, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-14T00:00:00Z", + "10 19 32 36 46", + "06", + null + ], + [ + 210, + "2CA731BD-CD0F-4CAA-A73D-952783FB2963", + 210, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-18T00:00:00Z", + "02 36 44 46 51", + "45", + null + ], + [ + 211, + "AB2A1494-C7CD-406A-869E-E91C3B1F9BDB", + 211, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-21T00:00:00Z", + "04 20 27 38 49", + "31", + null + ], + [ + 212, + "C1BA08C1-1F30-487B-9E16-4E11970807DA", + 212, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-25T00:00:00Z", + "05 18 34 36 39", + "43", + null + ], + [ + 213, + "7883E5E8-E510-4E95-B2AE-1B3E6322025A", + 213, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-05-28T00:00:00Z", + "13 27 36 39 51", + "33", + null + ], + [ + 214, + "BE1D586A-3362-4D15-B51F-52F8B09B3BC7", + 214, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-01T00:00:00Z", + "07 16 17 26 48", + "15", + null + ], + [ + 215, + "4C803D13-0DF9-4B75-AB36-BFA811A6A44B", + 215, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-04T00:00:00Z", + "04 16 18 41 47", + "46", + null + ], + [ + 216, + "90CECF2B-081E-46D8-ADF3-DE9AF9FFA85D", + 216, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-08T00:00:00Z", + "17 24 29 37 45", + "43", + null + ], + [ + 217, + "23D2B616-7C32-44DE-BF92-F965349CD096", + 217, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-11T00:00:00Z", + "12 28 36 39 52", + "36", + null + ], + [ + 218, + "74430CB6-1A79-4878-963D-E5DFF95B7882", + 218, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-15T00:00:00Z", + "18 23 27 29 44", + "24", + null + ], + [ + 219, + "3CFF8EC5-D00F-4EBC-8E08-DA91AECA3A61", + 219, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-18T00:00:00Z", + "07 10 11 15 51", + "23", + null + ], + [ + 220, + "D13D362C-47B9-44A7-948D-2377519ACDAB", + 220, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-22T00:00:00Z", + "09 10 17 41 52", + "19", + null + ], + [ + 221, + "1B04F369-0AA5-4EC1-9ACE-1B1B1A29949B", + 221, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-25T00:00:00Z", + "18 19 29 32 42", + "32", + null + ], + [ + 222, + "A4EB48A6-5B93-4F87-937D-3FA8D3D9B13A", + 222, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-06-29T00:00:00Z", + "10 13 19 28 38", + "01", + null + ], + [ + 223, + "C973AB92-79E2-4F3B-9532-29B1EF730C15", + 223, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-02T00:00:00Z", + "10 25 38 39 50", + "12", + null + ], + [ + 224, + "2A8B3B87-C571-44C5-8B72-4D5FC07E3C4E", + 224, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-06T00:00:00Z", + "06 07 08 31 48", + "19", + null + ], + [ + 225, + "0CB0EEF7-3E07-47C2-834A-CCC22BD96076", + 225, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-09T00:00:00Z", + "11 23 25 29 45", + "16", + null + ], + [ + 226, + "FFB87A81-D21E-4374-AB89-D0E77B35C578", + 226, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-13T00:00:00Z", + "13 31 37 39 52", + "38", + null + ], + [ + 227, + "11FB4729-5353-4468-8630-1404816AE321", + 227, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-16T00:00:00Z", + "03 21 22 35 44", + "07", + null + ], + [ + 228, + "9C3F4245-A499-4EBC-BF96-C29B635CA561", + 228, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-20T00:00:00Z", + "06 15 21 32 44", + "13", + null + ], + [ + 229, + "C09247AD-299E-4A91-A8CF-C3A0179AB270", + 229, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-23T00:00:00Z", + "05 12 25 35 37", + "12", + null + ], + [ + 230, + "DA4F201D-2A37-4504-9947-14F8542402D5", + 230, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-27T00:00:00Z", + "08 10 11 13 24", + "46", + null + ], + [ + 231, + "169DA2A4-95D6-4BCC-AEFD-46C5FA9370B2", + 231, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-07-30T00:00:00Z", + "16 19 21 34 35", + "22", + null + ], + [ + 232, + "025397EA-5654-411F-880E-EB525C9D29B9", + 232, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-03T00:00:00Z", + "01 02 13 16 22", + "31", + null + ], + [ + 233, + "B45BCE14-9723-436A-B1D2-A98665679467", + 233, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-06T00:00:00Z", + "04 23 33 38 49", + "07", + null + ], + [ + 234, + "9DA11ECD-BC04-4EE6-890B-3B22B141D912", + 234, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-10T00:00:00Z", + "18 25 29 31 44", + "33", + null + ], + [ + 235, + "29B3B61A-07FB-45E4-8E2B-42BADD6E2B13", + 235, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-13T00:00:00Z", + "14 31 41 45 48", + "20", + null + ], + [ + 236, + "4D1C8130-8D61-4BE8-820C-335E37212DDC", + 236, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-17T00:00:00Z", + "22 23 26 28 36", + "10", + null + ], + [ + 237, + "0E60BFAF-3237-4A2F-9EC4-25458A705F26", + 237, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-20T00:00:00Z", + "12 17 34 37 39", + "34", + null + ], + [ + 238, + "79D77C70-4484-4795-A6B0-D5F87F1C2E74", + 238, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-24T00:00:00Z", + "02 05 21 47 50", + "46", + null + ], + [ + 239, + "ABB0385F-D6B3-4ED7-A7BE-75C967EFF5F3", + 239, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-27T00:00:00Z", + "05 25 38 46 47", + "14", + null + ], + [ + 240, + "825BC9DA-7E28-48DF-B5DC-DB33D1F598E8", + 240, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-08-31T00:00:00Z", + "14 15 25 42 44", + "03", + null + ], + [ + 241, + "64C6A60E-3E95-495C-BC4A-44C53814E058", + 241, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-03T00:00:00Z", + "04 14 34 38 44", + "10", + null + ], + [ + 242, + "E6ADBDFD-2F6B-4726-A525-746186368933", + 242, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-07T00:00:00Z", + "13 30 36 38 51", + "35", + null + ], + [ + 243, + "2F5EDD22-FB98-43CC-811B-9877253B4F8A", + 243, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-10T00:00:00Z", + "11 17 27 45 52", + "05", + null + ], + [ + 244, + "BCD22E2B-7328-49C3-8CC3-FC63B9A344D7", + 244, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-14T00:00:00Z", + "12 35 37 38 50", + "49", + null + ], + [ + 245, + "5835A221-CB4A-4785-B15B-84FF74486672", + 245, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-17T00:00:00Z", + "03 16 25 38 49", + "04", + null + ], + [ + 246, + "1D628B4B-456A-430D-96D3-6F4DE602BCFA", + 246, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-21T00:00:00Z", + "01 03 15 19 29", + "39", + null + ], + [ + 247, + "22DAACA0-0D4E-4874-A27D-60C726301E87", + 247, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-24T00:00:00Z", + "11 26 30 49 50", + "52", + null + ], + [ + 248, + "DB3BC6FA-6BD3-48AC-8B65-65B6A9681BE6", + 248, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-09-28T00:00:00Z", + "01 18 39 42 50", + "35", + null + ], + [ + 249, + "F9C7E41D-9C9B-49D1-A4E3-15FC77F7F86F", + 249, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-01T00:00:00Z", + "08 10 17 24 39", + "52", + null + ], + [ + 250, + "52BE51BE-708D-4321-8C26-DE6165AFE04E", + 250, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-05T00:00:00Z", + "08 34 39 48 49", + "47", + null + ], + [ + 251, + "B4000AC5-B2AE-4BA0-94A2-E044745964AC", + 251, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-08T00:00:00Z", + "16 17 21 33 41", + "06", + null + ], + [ + 252, + "D191CC09-A515-4BF6-B819-1FE3B2CA14B3", + 252, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-12T00:00:00Z", + "04 18 19 39 51", + "13", + null + ], + [ + 253, + "A162D2E1-642C-49E6-992A-BB972253B641", + 253, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-15T00:00:00Z", + "04 08 24 30 36", + "25", + null + ], + [ + 254, + "50754DC2-AFD6-4809-ACFD-2853213FE3DC", + 254, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-19T00:00:00Z", + "06 13 19 34 50", + "33", + null + ], + [ + 255, + "6BBC3098-B05C-482D-934B-6BF8C7930F01", + 255, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-22T00:00:00Z", + "03 07 20 24 43", + "36", + null + ], + [ + 256, + "F2BC443C-393C-42AC-97CD-03845FA2AF4B", + 256, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-26T00:00:00Z", + "14 25 39 43 49", + "27", + null + ], + [ + 257, + "FD20CDD7-751B-45E2-A189-6F06336E4662", + 257, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-10-29T00:00:00Z", + "10 18 26 31 41", + "48", + null + ], + [ + 258, + "78F4866D-7BBE-4981-AF76-82B4B1FF4A2E", + 258, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-02T00:00:00Z", + "24 32 42 49 50", + "03", + null + ], + [ + 259, + "0F1336CF-A403-4F6D-9FE9-6A54EF4F7707", + 259, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-05T00:00:00Z", + "03 29 30 41 43", + "01", + null + ], + [ + 260, + "F081994F-6D07-4891-BFAF-1AFF8C14CFD4", + 260, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-09T00:00:00Z", + "11 20 26 28 52", + "07", + null + ], + [ + 261, + "2BD8589C-58C2-4EB1-9AC2-9D7680A25908", + 261, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-12T00:00:00Z", + "05 31 33 35 51", + "01", + null + ], + [ + 262, + "CEF71225-C2BF-4B92-B680-278C358B7720", + 262, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-16T00:00:00Z", + "09 10 27 28 30", + "18", + null + ], + [ + 263, + "66BA5BBF-68B0-4AFA-8271-418B80BC6718", + 263, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-19T00:00:00Z", + "01 12 24 36 51", + "38", + null + ], + [ + 264, + "8509E8A0-2D85-4259-92F6-29B471E9AC37", + 264, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-23T00:00:00Z", + "08 30 32 35 51", + "17", + null + ], + [ + 265, + "E28F4368-1712-48D1-91F6-26904326CF2D", + 265, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-26T00:00:00Z", + "07 09 18 37 43", + "34", + null + ], + [ + 266, + "74CF5561-90C2-45C1-979E-F07822F35FC2", + 266, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-11-30T00:00:00Z", + "10 20 22 28 52", + "04", + null + ], + [ + 267, + "B41849CC-89C1-483B-949C-6F6A87CD73A0", + 267, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-03T00:00:00Z", + "12 32 37 41 52", + "13", + null + ], + [ + 268, + "579AAC40-3B30-4E09-87DD-B5A87C2D92A5", + 268, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-07T00:00:00Z", + "01 19 22 32 49", + "29", + null + ], + [ + 269, + "A3A9B945-6C27-48B4-AC62-8EE5F1FD0A30", + 269, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-10T00:00:00Z", + "22 23 37 42 47", + "15", + null + ], + [ + 270, + "8926C688-28B7-4534-AFE5-51FE044A3927", + 270, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-14T00:00:00Z", + "14 27 32 34 40", + "02", + null + ], + [ + 271, + "22DBCDF8-AEB6-4F84-865A-E25E670EE8A6", + 271, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-17T00:00:00Z", + "16 34 38 42 47", + "01", + null + ], + [ + 272, + "3F07DD76-991F-49F8-BE80-C9D05D80F060", + 272, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-21T00:00:00Z", + "07 22 27 31 38", + "12", + null + ], + [ + 273, + "41AC3E8D-EC34-4E08-AA87-5918880FE818", + 273, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-24T00:00:00Z", + "09 20 22 41 42", + "10", + null + ], + [ + 274, + "65F331BB-6BD2-495C-8FCB-E0460922F04E", + 274, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-28T00:00:00Z", + "18 29 32 38 43", + "50", + null + ], + [ + 275, + "588CD7B2-93DC-4A0F-9437-36D0C339AA9C", + 275, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2004-12-31T00:00:00Z", + "10 14 45 47 51", + "20", + null + ], + [ + 276, + "93825C54-2A7A-434A-AC7B-D60BEA85F53D", + 276, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-04T00:00:00Z", + "03 06 07 12 32", + "30", + null + ], + [ + 277, + "F4313158-89FD-4820-A8A7-36C5C88ED660", + 277, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-07T00:00:00Z", + "02 08 14 15 51", + "38", + null + ], + [ + 278, + "E8206E3B-51A1-4B45-A90E-CA2419422CA5", + 278, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-11T00:00:00Z", + "02 23 24 35 45", + "18", + null + ], + [ + 279, + "D3C97927-9FD1-4A11-BC1F-258ED901202F", + 279, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-14T00:00:00Z", + "15 19 24 40 47", + "50", + null + ], + [ + 280, + "B76A1E6C-C254-4CB3-AA0B-9E3D49472813", + 280, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-18T00:00:00Z", + "10 23 28 39 51", + "05", + null + ], + [ + 281, + "AF46D29A-1B37-4EEC-B4A5-E3B21DB5673A", + 281, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-21T00:00:00Z", + "17 27 39 40 41", + "21", + null + ], + [ + 282, + "929C4BC0-B7DC-458C-9230-1D510E57F709", + 282, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-25T00:00:00Z", + "02 10 21 25 45", + "22", + null + ], + [ + 283, + "AAF2C647-D464-4385-B732-B49913AF69CB", + 283, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-01-28T00:00:00Z", + "25 31 39 47 52", + "43", + null + ], + [ + 284, + "F1AF9F93-409C-4418-BCD8-390EA73B9336", + 284, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-01T00:00:00Z", + "03 17 21 42 44", + "35", + null + ], + [ + 285, + "DED59622-8D29-4664-8398-9FE120A46A87", + 285, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-04T00:00:00Z", + "03 12 14 30 52", + "34", + null + ], + [ + 286, + "6301C513-1F63-465C-9077-8FB388B4CEB4", + 286, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-08T00:00:00Z", + "08 11 14 23 25", + "21", + null + ], + [ + 287, + "B2F3018C-414F-4556-8635-405C6ADA0F10", + 287, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-11T00:00:00Z", + "06 14 21 24 50", + "28", + null + ], + [ + 288, + "12E0E1A8-1F85-4A57-B608-AD5AB2420CBF", + 288, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-15T00:00:00Z", + "03 16 20 21 38", + "10", + null + ], + [ + 289, + "82FC585B-BAAD-4725-A657-9646108D5DC4", + 289, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-18T00:00:00Z", + "01 19 31 35 42", + "34", + null + ], + [ + 290, + "5C140B83-2CEA-4985-B28B-663F7B5BABF3", + 290, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-22T00:00:00Z", + "15 18 28 41 45", + "27", + null + ], + [ + 291, + "4ADFED3A-9CF7-4D7B-A2CC-5A8F2053B472", + 291, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-02-25T00:00:00Z", + "04 13 37 38 50", + "24", + null + ], + [ + 292, + "1D4741B1-E68A-413C-B3BB-C403DB0C17DE", + 292, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-01T00:00:00Z", + "01 08 18 39 48", + "01", + null + ], + [ + 293, + "74C81011-F2BF-4720-B210-7743B22FBE8D", + 293, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-04T00:00:00Z", + "07 10 13 35 39", + "21", + null + ], + [ + 294, + "9B80E24B-1B29-406D-B39D-92CE0D9D84F3", + 294, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-08T00:00:00Z", + "08 14 15 22 31", + "13", + null + ], + [ + 295, + "31DF6251-BA07-45B6-A2F6-2C697D00C48E", + 295, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-11T00:00:00Z", + "18 19 31 35 36", + "17", + null + ], + [ + 296, + "708C6B64-35A2-42C9-8647-351C4BD30FDC", + 296, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-15T00:00:00Z", + "14 26 27 34 44", + "27", + null + ], + [ + 297, + "38357837-482D-41DD-AFD4-4AE48DF385CC", + 297, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-18T00:00:00Z", + "02 09 28 29 48", + "33", + null + ], + [ + 298, + "A7FA5D10-0B55-4947-B720-7C94D3610337", + 298, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-22T00:00:00Z", + "06 11 27 37 43", + "34", + null + ], + [ + 299, + "434ED7A8-6257-46F4-BBCC-D8A674C356F8", + 299, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-25T00:00:00Z", + "11 18 19 45 49", + "02", + null + ], + [ + 300, + "6CD696BD-A80A-44B1-B77D-FA1FF25E0F08", + 300, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-03-29T00:00:00Z", + "07 17 18 30 42", + "38", + null + ], + [ + 301, + "8CF288D1-0C69-4693-BE90-551A8127B384", + 301, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-01T00:00:00Z", + "11 19 28 32 45", + "10", + null + ], + [ + 302, + "8012F879-2E18-42E2-8711-19BE5F70B358", + 302, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-05T00:00:00Z", + "04 19 45 51 52", + "22", + null + ], + [ + 303, + "9B2671A2-C2BB-4A10-8205-F717FE4F741D", + 303, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-08T00:00:00Z", + "05 13 17 33 35", + "35", + null + ], + [ + 304, + "EDFB6722-641F-4EEC-B91C-EE7FE6E42B8F", + 304, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-12T00:00:00Z", + "15 20 43 47 50", + "24", + null + ], + [ + 305, + "37447A5F-204E-4912-9E95-5F017C168136", + 305, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-15T00:00:00Z", + "25 26 37 39 49", + "29", + null + ], + [ + 306, + "8E386A7C-E59E-42AA-B564-ECB8A4C383AA", + 306, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-19T00:00:00Z", + "05 06 14 42 47", + "03", + null + ], + [ + 307, + "0838C56E-BD1F-4819-9E52-2B4BFFDFDF66", + 307, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-22T00:00:00Z", + "23 25 43 46 49", + "26", + null + ], + [ + 308, + "559B2A64-C329-4BA1-9EE3-5B56BD11C81F", + 308, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-26T00:00:00Z", + "18 22 33 34 42", + "16", + null + ], + [ + 309, + "FE0AA6EB-B376-44B9-AB47-E2BA73934853", + 309, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-04-29T00:00:00Z", + "02 05 07 28 46", + "21", + null + ], + [ + 310, + "DC01C25F-6D99-46FE-A4A6-860DED5F011C", + 310, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-03T00:00:00Z", + "07 17 42 46 52", + "47", + null + ], + [ + 311, + "AA1EB43B-E2E0-403D-9D39-6B236AC3DE50", + 311, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-06T00:00:00Z", + "07 12 25 50 51", + "19", + null + ], + [ + 312, + "54907768-39E9-493F-B79D-54DD04E476F2", + 312, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-10T00:00:00Z", + "11 25 38 40 42", + "40", + null + ], + [ + 313, + "2EACE389-A6DB-459C-ADC5-AF98F96E5DC3", + 313, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-13T00:00:00Z", + "21 23 27 33 39", + "08", + null + ], + [ + 314, + "D0011038-F7E8-4ED5-A95E-EB30C075C01F", + 314, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-17T00:00:00Z", + "07 09 10 29 44", + "17", + null + ], + [ + 315, + "0695D550-C28B-4362-B428-CF02186E3AC6", + 315, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-20T00:00:00Z", + "03 06 27 40 44", + "09", + null + ], + [ + 316, + "F317FFE5-E091-476C-9ABA-DF9FF531C6D3", + 316, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-24T00:00:00Z", + "09 28 39 40 45", + "24", + null + ], + [ + 317, + "2CE91E33-2D19-4741-B712-B5A37A853E80", + 317, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-27T00:00:00Z", + "07 17 22 34 50", + "24", + null + ], + [ + 318, + "272EB917-BC29-44A6-B42F-2B1234927DB8", + 318, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-05-31T00:00:00Z", + "05 13 22 37 38", + "11", + null + ], + [ + 319, + "2C09A590-CE5E-4B0E-A216-49D6C1E2ED31", + 319, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-03T00:00:00Z", + "04 06 14 28 47", + "42", + null + ], + [ + 320, + "13B8AB19-B7DA-4DE8-B1FA-2F7B5C73B852", + 320, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-07T00:00:00Z", + "07 14 28 46 47", + "25", + null + ], + [ + 321, + "DE848D9F-40C5-4491-AFC6-66337901C5E2", + 321, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-10T00:00:00Z", + "14 29 31 37 50", + "34", + null + ], + [ + 322, + "B5DDE7DA-82E4-452E-AD3C-D0133EBC32E0", + 322, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-14T00:00:00Z", + "01 10 29 48 49", + "36", + null + ], + [ + 323, + "2B861970-45DA-4DD9-82B1-35FE957B34DE", + 323, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-17T00:00:00Z", + "16 35 40 49 50", + "34", + null + ], + [ + 324, + "B3FED69E-5468-4985-B4DC-89D71F6C06B0", + 324, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-21T00:00:00Z", + "09 13 40 46 50", + "30", + null + ], + [ + 325, + "033A0BD1-1324-4D5D-8409-6EE08E820D5E", + 325, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-24T00:00:00Z", + "14 43 44 50 56", + "07", + null + ], + [ + 326, + "83865852-9E82-454A-8334-B8E457FD5564", + 326, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-06-28T00:00:00Z", + "02 20 37 43 46", + "04", + null + ], + [ + 327, + "9AE7DD16-ABF4-4A5C-B036-1E3767164646", + 327, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-01T00:00:00Z", + "14 25 41 42 50", + "40", + null + ], + [ + 328, + "FAFFAC8C-2539-4ABC-AC83-F31E4745CD88", + 328, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-05T00:00:00Z", + "22 38 48 50 55", + "29", + null + ], + [ + 329, + "D031E86C-7BFC-46B8-8434-5ED4A422E3D5", + 329, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-08T00:00:00Z", + "09 23 45 48 50", + "03", + null + ], + [ + 330, + "A0C46007-15B5-428F-B3F9-65FE8F129069", + 330, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-12T00:00:00Z", + "05 17 32 39 53", + "36", + null + ], + [ + 331, + "F7E1B862-C554-4C22-BAA4-ACDDAC559AD7", + 331, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-15T00:00:00Z", + "09 13 25 36 48", + "02", + null + ], + [ + 332, + "C050912D-7E3B-4F8F-9317-51BDD65FE247", + 332, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-19T00:00:00Z", + "07 13 48 51 54", + "11", + null + ], + [ + 333, + "4DA6DF81-0826-413E-A33B-B149B510AA59", + 333, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-22T00:00:00Z", + "07 18 27 35 54", + "34", + null + ], + [ + 334, + "C43C9B1C-17E5-4148-BA4B-E5CEB3525941", + 334, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-26T00:00:00Z", + "01 10 18 29 55", + "08", + null + ], + [ + 335, + "561F43EE-FD24-4908-8042-F110C9D7FC98", + 335, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-07-29T00:00:00Z", + "04 16 23 25 40", + "22", + null + ], + [ + 336, + "13D5FF40-2E43-4A28-9FD9-E95FB19FE2AC", + 336, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-02T00:00:00Z", + "17 22 39 50 52", + "46", + null + ], + [ + 337, + "8B10E7B4-B3C5-4BCF-A62D-5B8BA3DE8355", + 337, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-05T00:00:00Z", + "03 05 48 50 53", + "04", + null + ], + [ + 338, + "E035770B-AAC3-40BC-AD66-E0D9E64372BC", + 338, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-09T00:00:00Z", + "13 35 36 43 52", + "05", + null + ], + [ + 339, + "0BC13F6C-2DF9-4834-B3D4-34F4E52DB6A0", + 339, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-12T00:00:00Z", + "08 37 38 45 54", + "21", + null + ], + [ + 340, + "40D316EA-945A-4584-A463-B7220694F598", + 340, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-16T00:00:00Z", + "09 15 20 24 55", + "03", + null + ], + [ + 341, + "2ECD8059-BFAD-4A9B-971E-C276188878C7", + 341, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-19T00:00:00Z", + "02 13 18 36 46", + "36", + null + ], + [ + 342, + "09F9240B-DF24-4C16-B8CB-813998920F64", + 342, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-23T00:00:00Z", + "06 07 08 13 40", + "12", + null + ], + [ + 343, + "08DC3E31-889F-4A80-9874-1A4FE05CFBF8", + 343, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-26T00:00:00Z", + "05 20 38 47 54", + "35", + null + ], + [ + 344, + "DFD70689-7341-47CD-B95F-BFE2D51D32C2", + 344, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-08-30T00:00:00Z", + "19 32 42 49 56", + "29", + null + ], + [ + 345, + "E5B9F273-A709-4583-8047-6FD74DE24846", + 345, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-02T00:00:00Z", + "01 04 14 45 53", + "33", + null + ], + [ + 346, + "ACC92702-99C0-4E8D-9C4D-5AF531E3E469", + 346, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-06T00:00:00Z", + "01 08 27 31 50", + "40", + null + ], + [ + 347, + "FC9EB200-2DF5-41F0-ABA3-AE199C366FF6", + 347, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-09T00:00:00Z", + "15 28 43 51 52", + "11", + null + ], + [ + 348, + "747A6C12-78D5-4FEF-8B8A-EF0FA8A3BC02", + 348, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-13T00:00:00Z", + "13 24 44 48 52", + "30", + null + ], + [ + 349, + "E81382F7-026A-4F8A-B94F-A37CCC4DCCD3", + 349, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-16T00:00:00Z", + "05 16 41 46 50", + "01", + null + ], + [ + 350, + "7ED2D57E-9121-440C-AA0F-C6B024E372EE", + 350, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-20T00:00:00Z", + "35 36 40 42 52", + "45", + null + ], + [ + 351, + "7328006D-B455-4A06-B68A-89FC788CBAFD", + 351, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-23T00:00:00Z", + "06 07 20 41 51", + "38", + null + ], + [ + 352, + "A9052160-FF2E-4C2F-8B1F-BFE55B0BD024", + 352, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-27T00:00:00Z", + "14 17 26 27 28", + "05", + null + ], + [ + 353, + "5A153CDF-3CB1-47D0-8242-899326BD456C", + 353, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-09-30T00:00:00Z", + "01 03 14 30 52", + "10", + null + ], + [ + 354, + "FE7185D0-A535-45CB-A6CC-01A0B09D6346", + 354, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-04T00:00:00Z", + "12 24 28 29 36", + "41", + null + ], + [ + 355, + "0ACAA2C4-D8AD-489E-8969-41FD4F1DA446", + 355, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-07T00:00:00Z", + "02 04 23 27 36", + "37", + null + ], + [ + 356, + "125F6530-E5F5-46C0-AEAA-67800AB47EBA", + 356, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-11T00:00:00Z", + "24 30 42 53 54", + "20", + null + ], + [ + 357, + "8AEE764F-10C9-4487-A4A7-BCC7B7432F4D", + 357, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-14T00:00:00Z", + "06 20 24 25 34", + "44", + null + ], + [ + 358, + "D1B8530E-5CE8-4CF8-9D8A-3E78F6D9711D", + 358, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-18T00:00:00Z", + "03 12 16 32 33", + "15", + null + ], + [ + 359, + "7FB69C53-5BCC-4612-963F-22A0FBE0D366", + 359, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-21T00:00:00Z", + "11 17 28 29 36", + "42", + null + ], + [ + 360, + "099CE0AD-F072-4A7F-9E16-24F9E265983B", + 360, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-25T00:00:00Z", + "07 12 18 31 55", + "30", + null + ], + [ + 361, + "82BD5396-346A-4808-8568-6DF24372709F", + 361, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-10-28T00:00:00Z", + "08 17 25 28 53", + "01", + null + ], + [ + 362, + "163D026B-60CB-4B09-B6C4-A7488308DD8E", + 362, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-01T00:00:00Z", + "05 18 21 28 36", + "20", + null + ], + [ + 363, + "2E75AF04-00FF-4E0E-BF24-395B9FB275E3", + 363, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-04T00:00:00Z", + "07 09 41 53 54", + "38", + null + ], + [ + 364, + "FC2FA6E3-E70C-4A4B-9F64-0FC75AC6BECF", + 364, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-08T00:00:00Z", + "08 16 21 25 27", + "16", + null + ], + [ + 365, + "B05C3588-63F4-4918-9A0B-22DC5BF62C32", + 365, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-11T00:00:00Z", + "09 14 34 50 51", + "40", + null + ], + [ + 366, + "97A88400-902F-44B4-A497-38AAAB38B7C5", + 366, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-15T00:00:00Z", + "02 04 05 40 48", + "07", + null + ], + [ + 367, + "2D471B32-ABF6-47E8-9B85-DE9BA6052D75", + 367, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-18T00:00:00Z", + "08 18 21 42 46", + "11", + null + ], + [ + 368, + "E21BBAC7-6A3A-411D-8328-9A3DAC360F70", + 368, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-22T00:00:00Z", + "09 22 37 41 43", + "30", + null + ], + [ + 369, + "F2DA346E-8664-43BC-8067-BF6F81FD71AD", + 369, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-25T00:00:00Z", + "05 25 31 33 34", + "41", + null + ], + [ + 370, + "3D150C47-1D71-4F59-9FAB-950EE578B141", + 370, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-11-29T00:00:00Z", + "07 08 47 51 52", + "05", + null + ], + [ + 371, + "D6D3E5D9-0AB1-41DD-88B8-70586D133D1E", + 371, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-02T00:00:00Z", + "03 12 21 38 44", + "45", + null + ], + [ + 372, + "C5BB8996-A321-4F80-BC0D-C2D880384DF1", + 372, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-06T00:00:00Z", + "06 10 26 30 33", + "16", + null + ], + [ + 373, + "F7F985C7-C509-4D77-B34A-FE8512F24EB3", + 373, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-09T00:00:00Z", + "14 15 31 32 43", + "20", + null + ], + [ + 374, + "90F85C5C-CDB9-42BE-AC2B-A7ADC515BAB2", + 374, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-13T00:00:00Z", + "09 10 12 22 41", + "04", + null + ], + [ + 375, + "F2ED349C-1FE5-4F23-BF41-D9D0CF91D948", + 375, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-16T00:00:00Z", + "14 25 26 31 56", + "17", + null + ], + [ + 376, + "156ED523-B9AE-4F78-9EA6-8AB545668B5C", + 376, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-20T00:00:00Z", + "06 20 23 40 56", + "36", + null + ], + [ + 377, + "16299179-341A-48BF-B14D-4F78593B59CA", + 377, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-23T00:00:00Z", + "10 37 39 49 54", + "08", + null + ], + [ + 378, + "F3F9CA26-835C-4F9F-AE53-9870DF0E82CB", + 378, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-27T00:00:00Z", + "11 24 27 49 55", + "23", + null + ], + [ + 379, + "E3B45416-2CE2-4FB7-9226-339ABDCF13D3", + 379, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2005-12-30T00:00:00Z", + "14 20 25 40 44", + "37", + null + ], + [ + 380, + "29E99521-1745-4BEA-8379-32E8A3B4EB71", + 380, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-03T00:00:00Z", + "15 19 20 32 38", + "21", + null + ], + [ + 381, + "23A4CE2F-D83A-4A90-9099-B224EDFCBD09", + 381, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-06T00:00:00Z", + "08 11 28 37 53", + "12", + null + ], + [ + 382, + "0BDE11E7-43EB-45A4-A01C-D8E922694253", + 382, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-10T00:00:00Z", + "07 27 32 37 38", + "30", + null + ], + [ + 383, + "167D5629-9E1C-4611-B2AE-2315FA48DCE5", + 383, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-13T00:00:00Z", + "05 21 27 44 53", + "36", + null + ], + [ + 384, + "0CA5B072-5559-4DA7-854A-560FAB3A1F9A", + 384, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-17T00:00:00Z", + "24 32 37 39 40", + "44", + null + ], + [ + 385, + "0359B182-D50B-48FF-A09F-D183DFD79088", + 385, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-20T00:00:00Z", + "18 22 28 44 53", + "46", + null + ], + [ + 386, + "D67E15A1-07AA-4C5F-83D3-E48B6CD1036C", + 386, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-24T00:00:00Z", + "31 34 36 51 55", + "04", + null + ], + [ + 387, + "CBE69F65-752B-4F95-A6E0-3D352BD3D73F", + 387, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-27T00:00:00Z", + "02 07 08 18 29", + "46", + null + ], + [ + 388, + "D9F7E97F-227D-443B-8981-FA36E63E6BE4", + 388, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-01-31T00:00:00Z", + "01 35 53 54 56", + "44", + null + ], + [ + 389, + "1064AE8D-A39B-4902-B11F-DA839EE81966", + 389, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-03T00:00:00Z", + "29 31 32 41 52", + "42", + null + ], + [ + 390, + "5C5F012B-1868-4006-BDF1-0C77C004B068", + 390, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-07T00:00:00Z", + "02 16 25 30 48", + "26", + null + ], + [ + 391, + "C8BCF21E-FA5E-46D6-9D6D-47E33673FD84", + 391, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-10T00:00:00Z", + "24 39 40 43 46", + "02", + null + ], + [ + 392, + "7B16B91E-5DAD-429E-B56A-308A7CC4F3C2", + 392, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-14T00:00:00Z", + "27 36 43 49 54", + "33", + null + ], + [ + 393, + "2C55BB3E-91D2-4E1A-90F9-99DBF303C292", + 393, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-17T00:00:00Z", + "16 25 31 43 46", + "28", + null + ], + [ + 394, + "DFF595AC-6BA2-400E-AFEA-684B14DB0ED7", + 394, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-21T00:00:00Z", + "14 23 27 36 45", + "36", + null + ], + [ + 395, + "D26EBE63-5EF4-428D-A3B9-E899335A7BF8", + 395, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-24T00:00:00Z", + "03 05 12 16 34", + "27", + null + ], + [ + 396, + "B75EBDD7-F67B-43ED-A426-204C3005ACBB", + 396, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-02-28T00:00:00Z", + "02 04 35 36 48", + "22", + null + ], + [ + 397, + "813AA2A0-653B-4DEA-95BC-842A99C81DE7", + 397, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-03T00:00:00Z", + "25 29 38 39 46", + "04", + null + ], + [ + 398, + "527704D6-2E02-457B-8149-F47FC0C8EB5E", + 398, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-07T00:00:00Z", + "15 27 36 38 42", + "32", + null + ], + [ + 399, + "2A55196C-4775-443A-B52F-48221944909B", + 399, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-10T00:00:00Z", + "04 17 18 51 54", + "31", + null + ], + [ + 400, + "DB2E7BA4-1A59-4A27-969E-2177D00567A7", + 400, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-14T00:00:00Z", + "27 28 30 42 50", + "22", + null + ], + [ + 401, + "7D7FB09E-BFED-4940-BE40-800C9B8E72DA", + 401, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-17T00:00:00Z", + "08 11 23 48 52", + "05", + null + ], + [ + 402, + "3CE93466-1F2F-4464-AD81-EA76817D9D1E", + 402, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-21T00:00:00Z", + "04 16 17 28 31", + "08", + null + ], + [ + 403, + "0A400896-D7C6-4572-96D9-81D24A122EA5", + 403, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-24T00:00:00Z", + "01 02 17 47 49", + "19", + null + ], + [ + 404, + "94CA0CC7-8204-4018-B709-397559907294", + 404, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-28T00:00:00Z", + "14 18 35 39 49", + "14", + null + ], + [ + 405, + "F745FFDD-883A-4C3D-9360-71F3A83E00FD", + 405, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-03-31T00:00:00Z", + "04 07 19 50 52", + "15", + null + ], + [ + 406, + "29EAB288-7556-4FCF-8189-080D1B2A59C0", + 406, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-04T00:00:00Z", + "09 25 48 51 56", + "07", + null + ], + [ + 407, + "CD488BBE-ACB3-40B0-BB7E-271B098F29DA", + 407, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-07T00:00:00Z", + "01 18 31 46 52", + "37", + null + ], + [ + 408, + "1DA1A60A-B1C2-426E-8852-9D39DBAEA790", + 408, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-11T00:00:00Z", + "02 12 45 46 56", + "20", + null + ], + [ + 409, + "93D317B3-E6EC-42D8-81AF-F2647E15F1C5", + 409, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-14T00:00:00Z", + "08 10 18 29 33", + "10", + null + ], + [ + 410, + "BA283EA9-2AD9-4E97-BB8A-3AC557F746DA", + 410, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-18T00:00:00Z", + "13 14 25 34 50", + "06", + null + ], + [ + 411, + "F3E9328B-F020-4C2E-AA17-08D20F513104", + 411, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-21T00:00:00Z", + "02 04 07 27 41", + "04", + null + ], + [ + 412, + "40BCF77C-5836-4312-A4DB-B307424B6DDE", + 412, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-25T00:00:00Z", + "01 20 32 37 39", + "09", + null + ], + [ + 413, + "25AEE37E-66F3-4507-86CB-1A787D01CD22", + 413, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-04-28T00:00:00Z", + "16 29 32 36 55", + "12", + null + ], + [ + 414, + "0D65468E-A001-4953-B9D7-3673D895BA94", + 414, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-02T00:00:00Z", + "07 11 22 27 31", + "33", + null + ], + [ + 415, + "3E43C068-9C2A-4A98-BD64-67B25F5385E9", + 415, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-05T00:00:00Z", + "08 20 39 53 55", + "10", + null + ], + [ + 416, + "196933EB-DC89-4F74-9489-4ADB3F0CB2D1", + 416, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-09T00:00:00Z", + "07 15 24 43 44", + "22", + null + ], + [ + 417, + "88B1ECC7-7F6D-46B3-B60A-8B2FE334AC29", + 417, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-12T00:00:00Z", + "06 36 39 45 52", + "45", + null + ], + [ + 418, + "69578B1A-F682-478A-B16F-786D601FB0D1", + 418, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-16T00:00:00Z", + "07 24 40 48 50", + "15", + null + ], + [ + 419, + "BA8F27F9-D6C8-4965-AFC6-C307D9377569", + 419, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-19T00:00:00Z", + "05 12 31 51 56", + "01", + null + ], + [ + 420, + "FDCA3825-57D6-4B86-8BFB-65FF69D2F961", + 420, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-23T00:00:00Z", + "17 21 28 48 54", + "01", + null + ], + [ + 421, + "DD8D9CD4-0283-4839-87A0-D018E4E994AE", + 421, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-26T00:00:00Z", + "12 14 20 47 48", + "24", + null + ], + [ + 422, + "287A016B-D049-48B5-AA90-BD3215D46D66", + 422, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-05-30T00:00:00Z", + "02 13 28 34 45", + "36", + null + ], + [ + 423, + "8FF174E9-FC60-48BE-832B-F1C2F283EC7D", + 423, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-02T00:00:00Z", + "03 10 18 36 38", + "41", + null + ], + [ + 424, + "74BD27FB-1F58-4935-9B0F-201B7394009D", + 424, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-06T00:00:00Z", + "05 29 35 52 53", + "09", + null + ], + [ + 425, + "9E40B131-700A-4BF5-924D-372AA99C2EEC", + 425, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-09T00:00:00Z", + "08 17 18 26 47", + "37", + null + ], + [ + 426, + "91BC5C38-BEFD-450E-B343-CF9C22ED4D37", + 426, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-13T00:00:00Z", + "01 20 23 24 33", + "29", + null + ], + [ + 427, + "26FA79C8-F2D2-4D0E-B2B8-592180AD8EA6", + 427, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-16T00:00:00Z", + "27 30 36 38 45", + "13", + null + ], + [ + 428, + "4C517676-2FE5-4574-8D14-60D2A7A470EA", + 428, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-20T00:00:00Z", + "11 21 37 53 54", + "12", + null + ], + [ + 429, + "137CCAD7-CCDD-47CF-8526-99BF3D6E13B6", + 429, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-23T00:00:00Z", + "13 17 24 34 56", + "24", + null + ], + [ + 430, + "3172D8F0-00D6-41EC-A33C-39DFACD85C54", + 430, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-27T00:00:00Z", + "02 14 20 29 44", + "32", + null + ], + [ + 431, + "721F7AD5-4110-4BA1-A481-4B872481540C", + 431, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-06-30T00:00:00Z", + "20 40 46 48 54", + "27", + null + ], + [ + 432, + "A3BCAF71-6B04-46AB-9DAF-C6F2AFCDDB22", + 432, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-04T00:00:00Z", + "09 15 31 42 45", + "41", + null + ], + [ + 433, + "3F716DED-DCC8-4F23-8654-A4AA0CE1F7BB", + 433, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-07T00:00:00Z", + "07 15 27 46 56", + "39", + null + ], + [ + 434, + "69D46A31-8B5E-46F0-BCFC-64804619BB0D", + 434, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-11T00:00:00Z", + "05 14 34 36 52", + "42", + null + ], + [ + 435, + "B0FC844B-8408-4DE9-8B9D-036CEA4A52D6", + 435, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-14T00:00:00Z", + "13 25 26 28 56", + "39", + null + ], + [ + 436, + "B9632DEA-2612-48E7-BFFF-59CCF6D7B195", + 436, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-18T00:00:00Z", + "12 13 29 49 52", + "20", + null + ], + [ + 437, + "AA05FDD3-F33B-445C-81D0-417531FFCAEE", + 437, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-21T00:00:00Z", + "18 26 35 36 43", + "24", + null + ], + [ + 438, + "B95A74B3-8357-48CA-81A6-08378A45C791", + 438, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-25T00:00:00Z", + "07 21 24 41 51", + "10", + null + ], + [ + 439, + "000D3A35-CA16-49E7-9989-E533E90F9B86", + 439, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-07-28T00:00:00Z", + "02 13 23 32 35", + "04", + null + ], + [ + 440, + "8BE39A1F-6479-4904-94C5-17761E012833", + 440, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-01T00:00:00Z", + "14 29 32 43 49", + "14", + null + ], + [ + 441, + "5D1B112D-E76B-4363-84E3-8F30AB59A225", + 441, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-04T00:00:00Z", + "02 24 31 50 55", + "44", + null + ], + [ + 442, + "FF4C81A1-0886-492A-A7E6-7E811B7618BE", + 442, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-08T00:00:00Z", + "01 05 13 18 33", + "30", + null + ], + [ + 443, + "6914B454-3487-4CF9-A7B3-E71B73DFC240", + 443, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-11T00:00:00Z", + "14 16 38 40 49", + "29", + null + ], + [ + 444, + "FD7B124A-D7D9-4769-8293-EE137100046F", + 444, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-15T00:00:00Z", + "10 12 22 44 48", + "16", + null + ], + [ + 445, + "1310D87A-CE78-4DEF-8C82-7D5C4F107A78", + 445, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-18T00:00:00Z", + "05 12 13 46 50", + "10", + null + ], + [ + 446, + "64AF74E8-B273-406F-A65B-21FF45A6EE97", + 446, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-22T00:00:00Z", + "03 04 05 07 36", + "16", + null + ], + [ + 447, + "FD99C149-C6DF-4716-9303-6CAE04DBC69B", + 447, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-25T00:00:00Z", + "17 24 35 46 54", + "33", + null + ], + [ + 448, + "4828E912-24A4-4EE2-A1EC-F4DD9C4D34F4", + 448, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-08-29T00:00:00Z", + "15 25 37 38 52", + "04", + null + ], + [ + 449, + "876BD770-0F17-4A55-9D1D-859ED0E71E43", + 449, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-01T00:00:00Z", + "05 06 51 53 55", + "12", + null + ], + [ + 450, + "3B501C09-05A2-4D12-988F-89CB2F762C24", + 450, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-05T00:00:00Z", + "01 32 36 42 53", + "04", + null + ], + [ + 451, + "81E6F31E-DF5C-43F6-A728-05585313E815", + 451, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-08T00:00:00Z", + "09 17 34 52 53", + "02", + null + ], + [ + 452, + "6EA79B46-5FC5-4A69-9233-944BAD07ADD7", + 452, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-12T00:00:00Z", + "03 16 25 30 44", + "42", + null + ], + [ + 453, + "009A90F0-5559-4268-987F-F6B82ECE62E8", + 453, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-15T00:00:00Z", + "06 26 33 39 55", + "01", + null + ], + [ + 454, + "E4BE828E-96E8-49C9-8CD3-22D163F8CA95", + 454, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-19T00:00:00Z", + "02 19 44 45 56", + "43", + null + ], + [ + 455, + "64115699-83B2-4A2F-AFCD-DB780FBF6EA4", + 455, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-22T00:00:00Z", + "07 12 17 22 43", + "16", + null + ], + [ + 456, + "F292063C-3138-4F0F-89CB-46D26C3A0458", + 456, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-26T00:00:00Z", + "03 06 38 42 45", + "30", + null + ], + [ + 457, + "012D91E0-729E-4072-B587-0BE7EAE01E69", + 457, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-09-29T00:00:00Z", + "03 25 43 45 55", + "40", + null + ], + [ + 458, + "6118DFB2-98F1-4083-917F-BEAB59C88D79", + 458, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-03T00:00:00Z", + "06 19 32 33 40", + "39", + null + ], + [ + 459, + "FEC3AA53-F3BC-4C7E-BFFD-094D134652ED", + 459, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-06T00:00:00Z", + "01 11 20 21 46", + "18", + null + ], + [ + 460, + "F59A1C13-3CA5-494D-92DE-A0D739B44578", + 460, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-10T00:00:00Z", + "14 30 35 40 43", + "02", + null + ], + [ + 461, + "261C39D5-E5FD-4454-A417-242D7D090B55", + 461, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-13T00:00:00Z", + "24 27 42 47 50", + "08", + null + ], + [ + 462, + "B36A2C2B-9501-4AF9-9754-8CE90B5BB31D", + 462, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-17T00:00:00Z", + "06 18 20 28 38", + "37", + null + ], + [ + 463, + "A7753123-848A-4066-A8AA-074FED6A5805", + 463, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-20T00:00:00Z", + "09 13 23 29 54", + "34", + null + ], + [ + 464, + "92DBCCC3-793A-427F-98BA-BBFECD7D078F", + 464, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-24T00:00:00Z", + "05 25 41 48 51", + "35", + null + ], + [ + 465, + "C5C9129D-0DDD-493C-BF76-FA9FF1B6918E", + 465, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-27T00:00:00Z", + "15 22 26 30 32", + "31", + null + ], + [ + 466, + "57CBB0CC-1645-46DB-9309-CC7BADDA9930", + 466, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-10-31T00:00:00Z", + "05 34 40 45 46", + "21", + null + ], + [ + 467, + "E35554AE-5653-4D27-949A-AEC4E3F061C9", + 467, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-03T00:00:00Z", + "08 10 22 25 55", + "22", + null + ], + [ + 468, + "2BEDBC19-AD7E-4DB0-806E-DFC3AC9695E5", + 468, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-07T00:00:00Z", + "13 22 33 51 52", + "42", + null + ], + [ + 469, + "A314EFBF-2B15-4FE9-B159-6AFAFE253953", + 469, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-10T00:00:00Z", + "11 42 52 53 55", + "28", + null + ], + [ + 470, + "3FE5905D-6A77-4DA2-BD41-97A8C35EA4A1", + 470, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-14T00:00:00Z", + "09 20 24 25 36", + "23", + null + ], + [ + 471, + "659F5995-2816-4F6D-B416-CA6202070B2F", + 471, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-17T00:00:00Z", + "05 19 25 30 50", + "42", + null + ], + [ + 472, + "596964AA-A8EC-4EF1-ABE1-88CEB210AC0F", + 472, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-21T00:00:00Z", + "07 13 20 42 47", + "09", + null + ], + [ + 473, + "65E180A1-4FDA-45E5-8527-D9CB3B9E06E9", + 473, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-24T00:00:00Z", + "14 35 40 47 48", + "35", + null + ], + [ + 474, + "5C995EB5-EDEA-4321-A9C3-56800D99F0BB", + 474, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-11-28T00:00:00Z", + "07 14 24 41 56", + "07", + null + ], + [ + 475, + "D130CD7B-53CD-472A-96DD-4D212DA0A53C", + 475, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-01T00:00:00Z", + "16 22 23 37 53", + "35", + null + ], + [ + 476, + "12FF9A05-37ED-4075-9439-04420AB4FCAB", + 476, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-05T00:00:00Z", + "06 09 13 43 46", + "45", + null + ], + [ + 477, + "2B26456D-4358-48A2-9B1B-DAEF68AB717B", + 477, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-08T00:00:00Z", + "01 15 29 32 45", + "08", + null + ], + [ + 478, + "1E3EDF59-31DC-4911-BB35-7D976DD611A9", + 478, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-12T00:00:00Z", + "20 30 31 35 49", + "23", + null + ], + [ + 479, + "C61F4D38-2EDD-4B77-9E83-2D02D4832CF7", + 479, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-15T00:00:00Z", + "06 07 17 28 40", + "39", + null + ], + [ + 480, + "E396FD08-5E4E-4150-BF25-753BF3B5338A", + 480, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-19T00:00:00Z", + "09 32 37 42 48", + "07", + null + ], + [ + 481, + "63BBEEBB-8051-4F72-AF25-8082D26CE558", + 481, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-22T00:00:00Z", + "05 12 15 25 34", + "43", + null + ], + [ + 482, + "0BDAA512-21EC-4665-8093-EF7813E19536", + 482, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-26T00:00:00Z", + "07 12 25 44 53", + "03", + null + ], + [ + 483, + "A2C16873-A6C5-4DD5-BED8-0774D4C51A6E", + 483, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2006-12-29T00:00:00Z", + "03 04 10 39 50", + "29", + null + ], + [ + 484, + "80DFE370-F29E-4FC6-ADD9-D2E1C6F285DF", + 484, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-02T00:00:00Z", + "09 10 38 51 53", + "01", + null + ], + [ + 485, + "1F4F9085-9D5D-4154-A7C9-07CC14B1360F", + 485, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-05T00:00:00Z", + "02 12 44 46 51", + "06", + null + ], + [ + 486, + "1C804255-DD48-459F-80B2-9A2A51F000E2", + 486, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-09T00:00:00Z", + "07 11 26 38 54", + "13", + null + ], + [ + 487, + "F2168D7F-692D-49E8-9BBD-9BAF919A429C", + 487, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-12T00:00:00Z", + "12 14 26 40 42", + "22", + null + ], + [ + 488, + "82A04EF2-AFDB-43AB-9AD5-35B5A52B0C7C", + 488, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-16T00:00:00Z", + "04 08 15 33 52", + "10", + null + ], + [ + 489, + "87CD8B58-A34F-447F-B738-338FAEA4ADA6", + 489, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-19T00:00:00Z", + "04 28 30 31 35", + "17", + null + ], + [ + 490, + "DFC10A63-3A94-4758-B7AE-72783F703352", + 490, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-23T00:00:00Z", + "03 05 15 26 53", + "35", + null + ], + [ + 491, + "A70BB32D-39D8-4140-8388-8FA026770676", + 491, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-26T00:00:00Z", + "16 17 36 49 54", + "14", + null + ], + [ + 492, + "63210A51-5D26-4FC2-BEFB-C39A41B76188", + 492, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-01-30T00:00:00Z", + "14 18 44 52 56", + "25", + null + ], + [ + 493, + "357413EB-414B-45C1-BE01-6C7811EFD331", + 493, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-02T00:00:00Z", + "22 33 35 40 53", + "15", + null + ], + [ + 494, + "B0C7B36A-3BC6-4A2D-B61B-CF6D59A2DE5D", + 494, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-06T00:00:00Z", + "16 21 35 36 46", + "38", + null + ], + [ + 495, + "44CD2B3C-DD2A-497D-9878-F4B724DF0C4F", + 495, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-09T00:00:00Z", + "32 39 46 48 49", + "41", + null + ], + [ + 496, + "7AE39468-C494-4058-BA75-4DC65DD0B14C", + 496, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-13T00:00:00Z", + "03 09 24 29 41", + "41", + null + ], + [ + 497, + "87D2E024-815A-486D-854E-3AE38F88E25B", + 497, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-16T00:00:00Z", + "17 35 40 46 48", + "41", + null + ], + [ + 498, + "29043663-7DA3-4E24-B131-FFD830CB4559", + 498, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-20T00:00:00Z", + "01 09 26 46 51", + "11", + null + ], + [ + 499, + "F1966050-1B54-4E51-BA1D-01D4885FF55A", + 499, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-23T00:00:00Z", + "03 18 21 38 50", + "43", + null + ], + [ + 500, + "CDC0E58D-A787-443D-B091-4C7B526B428E", + 500, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-02-27T00:00:00Z", + "18 31 44 45 48", + "18", + null + ], + [ + 501, + "027B2C00-9225-4D2C-BD32-40D24F18857C", + 501, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-02T00:00:00Z", + "14 21 33 35 51", + "43", + null + ], + [ + 502, + "3CCD3436-51C5-4009-8F83-0B6E1A2D9621", + 502, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-06T00:00:00Z", + "16 22 29 39 42", + "20", + null + ], + [ + 503, + "7EA1C45C-B586-4EE4-B220-2148621ABDF8", + 503, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-09T00:00:00Z", + "10 13 25 42 43", + "30", + null + ], + [ + 504, + "A328A035-D9CF-4A90-95F9-9E2B40EBA016", + 504, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-13T00:00:00Z", + "07 11 16 38 49", + "35", + null + ], + [ + 505, + "33DCB90F-A257-49AE-9BB5-C856E3519522", + 505, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-16T00:00:00Z", + "17 25 36 40 43", + "09", + null + ], + [ + 506, + "21F3B240-0B45-4F71-9511-B94C977B4A21", + 506, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-20T00:00:00Z", + "07 21 46 49 55", + "15", + null + ], + [ + 507, + "11C3082B-C804-4EB8-9B39-67548771671E", + 507, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-23T00:00:00Z", + "18 21 35 51 53", + "36", + null + ], + [ + 508, + "32E540A6-D425-404E-B2AD-0FEEC35D2F91", + 508, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-27T00:00:00Z", + "18 25 34 35 42", + "06", + null + ], + [ + 509, + "E6A20F49-B5F1-472B-BB7D-B06DD124AEFA", + 509, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-03-30T00:00:00Z", + "15 23 37 48 53", + "22", + null + ], + [ + 510, + "625A06C6-8963-4251-A51B-3229701ED972", + 510, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-03T00:00:00Z", + "16 26 33 34 46", + "38", + null + ], + [ + 511, + "CCDC57D2-0595-410A-8F16-5658A0715D7C", + 511, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-06T00:00:00Z", + "24 32 34 36 39", + "06", + null + ], + [ + 512, + "533647E4-C13D-4E9B-BAD2-3A3884B4BBC1", + 512, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-10T00:00:00Z", + "07 15 16 19 28", + "10", + null + ], + [ + 513, + "00A3835B-5630-4CE3-884E-8A721832B485", + 513, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-13T00:00:00Z", + "11 14 21 25 26", + "33", + null + ], + [ + 514, + "B05BDA43-8F9E-4780-A687-31592ADF193C", + 514, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-17T00:00:00Z", + "01 04 11 31 47", + "37", + null + ], + [ + 515, + "B0D1A237-A2D2-49DB-942F-04CF6403DDAF", + 515, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-20T00:00:00Z", + "01 09 10 23 53", + "40", + null + ], + [ + 516, + "CF0C9918-32B2-43E0-B1AA-BC8836DD8AAF", + 516, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-24T00:00:00Z", + "08 10 35 36 43", + "14", + null + ], + [ + 517, + "4860C387-45D4-43C8-9513-AA13684C6E55", + 517, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-04-27T00:00:00Z", + "05 07 26 38 56", + "15", + null + ], + [ + 518, + "8BBFFBDD-860A-46F4-9E37-899211A77BDE", + 518, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-01T00:00:00Z", + "11 16 31 52 53", + "42", + null + ], + [ + 519, + "9AA8796F-0E60-41D3-BEA8-DC65B72C0F9F", + 519, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-04T00:00:00Z", + "04 09 20 45 55", + "34", + null + ], + [ + 520, + "327324DA-C32B-4FC1-A2C8-83442FC0B4DC", + 520, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-08T00:00:00Z", + "16 24 41 43 54", + "36", + null + ], + [ + 521, + "590CB81B-44B8-4275-BCE8-18C4D8F912BF", + 521, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-11T00:00:00Z", + "28 30 33 48 54", + "25", + null + ], + [ + 522, + "CB538DA0-BE56-4F97-8806-353E9E13934C", + 522, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-15T00:00:00Z", + "06 13 42 46 56", + "42", + null + ], + [ + 523, + "71BCFD52-BC6E-4E35-ACA1-8F10909971D4", + 523, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-18T00:00:00Z", + "13 23 24 30 44", + "05", + null + ], + [ + 524, + "919DB6FB-31C9-4682-878E-13CA05A4655B", + 524, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-22T00:00:00Z", + "02 07 11 22 36", + "35", + null + ], + [ + 525, + "305E9588-E64D-4C2D-A4EF-E5B78518793B", + 525, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-25T00:00:00Z", + "10 14 22 42 43", + "01", + null + ], + [ + 526, + "4719B10B-AD10-4D50-8D46-A0CAE5F605C8", + 526, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-05-29T00:00:00Z", + "02 24 44 51 54", + "07", + null + ], + [ + 527, + "1A71051C-3A19-4D8C-9385-479010DB22F9", + 527, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-01T00:00:00Z", + "12 19 29 32 48", + "09", + null + ], + [ + 528, + "F9374DC6-B1DD-46B1-85FC-D5CB57642F63", + 528, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-05T00:00:00Z", + "27 35 38 49 56", + "15", + null + ], + [ + 529, + "D7CA0C49-B9CB-4112-B9EB-7F8FCFAB6D3D", + 529, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-08T00:00:00Z", + "06 26 29 31 39", + "31", + null + ], + [ + 530, + "0227FE28-D804-4BD3-A030-4BB9FE984784", + 530, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-12T00:00:00Z", + "03 13 19 31 50", + "21", + null + ], + [ + 531, + "21A96721-FEC2-4209-A12E-58DEB0C25565", + 531, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-15T00:00:00Z", + "01 05 16 26 30", + "21", + null + ], + [ + 532, + "8B7CDDBD-DE8F-43C1-8432-4749207D9C90", + 532, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-19T00:00:00Z", + "05 16 31 49 54", + "19", + null + ], + [ + 533, + "40A021A2-FB3D-4F3E-8B75-53906F89BE63", + 533, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-22T00:00:00Z", + "11 14 21 24 31", + "23", + null + ], + [ + 534, + "219E423B-F4F8-4FED-8F15-DB0BAFF558B6", + 534, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-26T00:00:00Z", + "04 10 20 29 45", + "21", + null + ], + [ + 535, + "17E57B87-08C2-4C62-BDFD-23B8EA26B4D8", + 535, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-06-29T00:00:00Z", + "01 17 40 51 52", + "07", + null + ], + [ + 536, + "32A17E56-EBE7-4251-BD2A-D19BE4CB117D", + 536, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-03T00:00:00Z", + "21 35 37 39 40", + "35", + null + ], + [ + 537, + "E8DD110B-0D8B-408D-A8EA-7ACA299EA6C5", + 537, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-06T00:00:00Z", + "03 09 12 25 47", + "37", + null + ], + [ + 538, + "E251BA7F-0AFF-4C05-A888-BE5DB36870C8", + 538, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-10T00:00:00Z", + "19 24 30 34 56", + "19", + null + ], + [ + 539, + "8693C58E-FFB4-4391-89A4-CA39898C188B", + 539, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-13T00:00:00Z", + "07 39 41 48 53", + "21", + null + ], + [ + 540, + "FCA45A5C-8B1B-48AD-A423-9E6ACBD9FA39", + 540, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-17T00:00:00Z", + "16 30 38 46 51", + "05", + null + ], + [ + 541, + "6F819E39-2FC5-47B6-81BB-C07A9EE6AD78", + 541, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-20T00:00:00Z", + "06 13 30 41 52", + "26", + null + ], + [ + 542, + "935E5F56-B297-4BEF-AF4E-798BD16FB200", + 542, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-24T00:00:00Z", + "08 17 20 23 50", + "17", + null + ], + [ + 543, + "DCCBD8F4-950D-4DD4-8625-8CD371BF0537", + 543, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-27T00:00:00Z", + "07 12 35 54 55", + "02", + null + ], + [ + 544, + "C7946459-75F4-4873-B7A9-4B2D4117C172", + 544, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-07-31T00:00:00Z", + "05 18 37 39 43", + "42", + null + ], + [ + 545, + "5A5EC1A5-F598-49F8-B294-B0742BAB9FE8", + 545, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-03T00:00:00Z", + "16 29 42 46 51", + "40", + null + ], + [ + 546, + "733BBBEB-B041-4E3C-AC7F-B061D9FDC2E2", + 546, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-07T00:00:00Z", + "36 41 50 55 56", + "09", + null + ], + [ + 547, + "8CF32173-2825-4083-94EC-3CA62231EB32", + 547, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-10T00:00:00Z", + "10 20 32 33 54", + "39", + null + ], + [ + 548, + "71255C58-16DF-464C-9910-B7C5E9368B80", + 548, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-14T00:00:00Z", + "05 08 09 24 34", + "17", + null + ], + [ + 549, + "29B14293-5FF6-4A9B-8A6D-9F4979AC2A3C", + 549, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-17T00:00:00Z", + "02 08 33 38 53", + "12", + null + ], + [ + 550, + "DBCFD864-00A3-4C73-B98E-168D7C7A7298", + 550, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-21T00:00:00Z", + "08 38 54 55 56", + "02", + null + ], + [ + 551, + "71581616-86DC-43A6-8E97-EB71AC7EAF9E", + 551, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-24T00:00:00Z", + "04 21 46 51 53", + "05", + null + ], + [ + 552, + "395D50C8-FFDC-4EB7-9BED-D46B60EF4A4F", + 552, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-28T00:00:00Z", + "37 40 48 53 56", + "44", + null + ], + [ + 553, + "024142D8-A96F-48DB-A5CE-BD82D129A146", + 553, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-08-31T00:00:00Z", + "08 18 22 40 44", + "11", + null + ], + [ + 554, + "7C7DA9A9-8A93-4DEC-A838-25ADA4688FB0", + 554, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-04T00:00:00Z", + "03 06 11 42 46", + "38", + null + ], + [ + 555, + "0579315D-E2CF-49AF-885E-71B088019AF1", + 555, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-07T00:00:00Z", + "14 19 27 34 48", + "03", + null + ], + [ + 556, + "971171AF-EFBA-4484-A414-5B01B9452D5F", + 556, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-11T00:00:00Z", + "09 10 17 21 35", + "06", + null + ], + [ + 557, + "28285D15-4A1A-44D3-9333-8239592BDE99", + 557, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-14T00:00:00Z", + "05 09 12 33 40", + "27", + null + ], + [ + 558, + "94B57E37-496D-4389-ADE3-55BC6C5D2BC5", + 558, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-18T00:00:00Z", + "20 24 31 34 49", + "08", + null + ], + [ + 559, + "5BEA0A7E-308C-4AB5-9EB3-E7829A54DE9A", + 559, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-21T00:00:00Z", + "05 21 23 33 45", + "43", + null + ], + [ + 560, + "2E981127-7486-4C6B-A8B5-97AC12022114", + 560, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-25T00:00:00Z", + "02 19 23 47 54", + "16", + null + ], + [ + 561, + "5105617C-AB05-4AB1-8AF0-51695E69D2C2", + 561, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-09-28T00:00:00Z", + "04 13 20 25 33", + "42", + null + ], + [ + 562, + "2437D531-AB19-4459-A67A-121972794A47", + 562, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-02T00:00:00Z", + "28 37 40 43 44", + "20", + null + ], + [ + 563, + "27284339-0E47-4BA9-A613-AA77CDC172FB", + 563, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-05T00:00:00Z", + "10 19 37 40 48", + "01", + null + ], + [ + 564, + "E0DD475C-1A32-4FD7-931A-1ED646B58376", + 564, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-09T00:00:00Z", + "01 10 17 32 51", + "44", + null + ], + [ + 565, + "6EFE62AE-AE28-44F7-AA85-286B4D0C9282", + 565, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-12T00:00:00Z", + "21 26 34 44 54", + "23", + null + ], + [ + 566, + "D5D353C1-8580-4064-8E83-78A727163693", + 566, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-16T00:00:00Z", + "01 02 05 41 44", + "25", + null + ], + [ + 567, + "8A6A4478-06D9-4120-9D60-736EC2D928F4", + 567, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-19T00:00:00Z", + "05 15 18 23 46", + "14", + null + ], + [ + 568, + "89ED8174-0D4D-4DBB-BFA0-EEE2ED2A191A", + 568, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-23T00:00:00Z", + "02 07 45 52 53", + "18", + null + ], + [ + 569, + "A4FD154B-73D1-4BDB-ADE9-1DA2FC880D58", + 569, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-26T00:00:00Z", + "12 20 24 38 51", + "03", + null + ], + [ + 570, + "27BFB91C-1B21-42B2-B974-7BBF668A0B96", + 570, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-10-30T00:00:00Z", + "02 08 44 46 51", + "22", + null + ], + [ + 571, + "583F59AF-3EC3-4912-B2B2-456D72F114E0", + 571, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-02T00:00:00Z", + "01 03 34 49 52", + "19", + null + ], + [ + 572, + "5EF7A2A3-960B-42CA-8D65-8607614DF1CC", + 572, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-06T00:00:00Z", + "03 17 43 46 47", + "02", + null + ], + [ + 573, + "3847BF2B-6773-4D29-938F-3806665D4FC1", + 573, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-09T00:00:00Z", + "11 33 41 42 46", + "21", + null + ], + [ + 574, + "FA9EA266-45A8-42C8-8D47-1D8BEB542211", + 574, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-13T00:00:00Z", + "15 26 36 39 40", + "45", + null + ], + [ + 575, + "50D7079B-6127-44CC-A4E0-263E7D452B52", + 575, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-16T00:00:00Z", + "12 13 30 31 39", + "29", + null + ], + [ + 576, + "56852C92-2149-4F4A-A660-59F939102925", + 576, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-20T00:00:00Z", + "14 20 23 42 43", + "06", + null + ], + [ + 577, + "39B6B3A1-52EE-4AC4-9676-DC4AE52237E8", + 577, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-23T00:00:00Z", + "18 21 33 42 56", + "11", + null + ], + [ + 578, + "D4194C06-722A-4E27-8F44-3D0C22B6A3DF", + 578, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-27T00:00:00Z", + "09 10 26 29 39", + "10", + null + ], + [ + 579, + "3932D673-921C-49E3-9291-BE717E702397", + 579, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-11-30T00:00:00Z", + "05 06 12 26 51", + "07", + null + ], + [ + 580, + "85FB5051-629B-436F-A43D-4C016A1DF93E", + 580, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-12-04T00:00:00Z", + "16 27 30 45 53", + "43", + null + ], + [ + 581, + "CF8D92A3-D767-42DA-B2F7-C8E790ECB065", + 581, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-12-07T00:00:00Z", + "12 18 26 28 51", + "35", + null + ], + [ + 582, + "8114AD78-1E0C-4F9C-AADB-508EDF06E336", + 582, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-12-11T00:00:00Z", + "06 25 27 30 45", + "46", + null + ], + [ + 583, + "43ACA759-99D1-4D7A-9089-6E639ADDFEDE", + 583, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-12-14T00:00:00Z", + "04 07 12 17 30", + "44", + null + ], + [ + 584, + "F2CAB9C2-553C-488A-9E30-CFA7DC65F412", + 584, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-12-18T00:00:00Z", + "03 23 46 48 49", + "02", + null + ], + [ + 585, + "9B44D4A4-0F8E-4213-A25F-E6BD1069DF0F", + 585, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-12-21T00:00:00Z", + "14 19 20 43 53", + "07", + null + ], + [ + 586, + "3E2922D0-284D-4614-8272-F83BBA38DDF5", + 586, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2007-12-28T00:00:00Z", + "02 19 22 28 54", + "25", + null + ], + [ + 587, + "04551495-BED3-4C37-9648-2FFA8347B05B", + 587, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-01T00:00:00Z", + "13 16 25 30 54", + "11", + null + ], + [ + 588, + "43BA977B-D380-48A8-85D9-EAF2A7A3AFA0", + 588, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-04T00:00:00Z", + "24 31 39 40 56", + "32", + null + ], + [ + 589, + "BA466130-57DE-4D6D-9FCD-C95831A4200D", + 589, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-08T00:00:00Z", + "10 29 45 52 54", + "10", + null + ], + [ + 590, + "AFF26B6A-34B8-4F89-8A85-88ED3C831D30", + 590, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-11T00:00:00Z", + "22 36 42 45 55", + "42", + null + ], + [ + 591, + "5DD841B2-F85D-493D-AFA2-F8164983D88B", + 591, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-15T00:00:00Z", + "21 30 42 44 50", + "06", + null + ], + [ + 592, + "CE5E4BA5-75FA-45B6-8C3E-F6EE890F8BAD", + 592, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-18T00:00:00Z", + "12 22 33 43 44", + "15", + null + ], + [ + 593, + "54B02ECF-BAC1-4940-BF9D-6D1DDD8561BB", + 593, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-22T00:00:00Z", + "12 15 22 25 33", + "02", + null + ], + [ + 594, + "B59B30E0-5386-455D-94D1-2EFBC646D36C", + 594, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-25T00:00:00Z", + "05 12 22 38 56", + "22", + null + ], + [ + 595, + "F99E577B-F55E-45E1-93D2-5832E92A52B8", + 595, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-01-29T00:00:00Z", + "08 23 39 40 42", + "24", + null + ], + [ + 596, + "4B67172C-E66E-4497-AE02-779DFC91A478", + 596, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-01T00:00:00Z", + "03 14 30 44 56", + "05", + null + ], + [ + 597, + "E604D301-A1AB-4D1F-BC23-70A17775C9F7", + 597, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-05T00:00:00Z", + "04 05 17 40 51", + "38", + null + ], + [ + 598, + "7EE23997-BF93-4901-8DBE-C4E394C1D211", + 598, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-08T00:00:00Z", + "21 30 43 46 50", + "18", + null + ], + [ + 599, + "D44E343F-CBED-4A68-98BC-92A0B0BF5920", + 599, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-12T00:00:00Z", + "14 27 39 47 50", + "12", + null + ], + [ + 600, + "52AAF078-59D5-4833-BA90-49B772ECAD50", + 600, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-15T00:00:00Z", + "07 11 26 30 53", + "14", + null + ], + [ + 601, + "2331FF0B-08D0-44C4-87C2-4841BB08040C", + 601, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-19T00:00:00Z", + "01 38 42 55 56", + "34", + null + ], + [ + 602, + "8EFEACF5-1F4F-4F67-8299-A13BC7B83C97", + 602, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-22T00:00:00Z", + "07 12 13 19 22", + "10", + null + ], + [ + 603, + "2D979590-2BF1-4EA5-A0D2-810843EDD84A", + 603, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-26T00:00:00Z", + "09 12 30 36 55", + "15", + null + ], + [ + 604, + "EF8F8EF7-18A9-4416-9A40-8B537E58D37A", + 604, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-02-29T00:00:00Z", + "05 17 22 26 55", + "38", + null + ], + [ + 605, + "AFD6E03E-C539-47CB-9BE2-6AA2E7CACBDB", + 605, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-04T00:00:00Z", + "07 15 30 33 56", + "22", + null + ], + [ + 606, + "54BC1E13-8915-40A8-88DA-15614181D8C4", + 606, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-07T00:00:00Z", + "19 32 33 41 48", + "12", + null + ], + [ + 607, + "511B590A-2D57-4C79-8F52-35E42CC64ED5", + 607, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-11T00:00:00Z", + "04 13 35 41 47", + "44", + null + ], + [ + 608, + "D62F24D8-6136-41FB-A019-03C0E9CC9406", + 608, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-14T00:00:00Z", + "03 12 18 25 52", + "21", + null + ], + [ + 609, + "B9FA4CFD-CD64-44C2-95A9-2BD4D042A75F", + 609, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-18T00:00:00Z", + "13 15 20 25 44", + "37", + null + ], + [ + 610, + "EA5686F4-4CB3-4DFF-816A-C1D94A1B1F48", + 610, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-21T00:00:00Z", + "05 08 17 19 41", + "21", + null + ], + [ + 611, + "AC709B10-C196-4023-AB43-7E95A7CC950D", + 611, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-25T00:00:00Z", + "38 42 43 48 53", + "12", + null + ], + [ + 612, + "6DF05F03-4E2F-49A0-9413-01B84EEAD863", + 612, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-03-28T00:00:00Z", + "07 26 27 40 43", + "10", + null + ], + [ + 613, + "1A9F5D9F-4E82-4903-B7AF-E391E31213F2", + 613, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-01T00:00:00Z", + "04 17 26 46 56", + "25", + null + ], + [ + 614, + "CB9B12F8-FBAC-41F2-A914-AF6455F0FF01", + 614, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-04T00:00:00Z", + "03 05 40 45 49", + "17", + null + ], + [ + 615, + "C20A8974-D7CF-424B-A508-C18AA16EF0BF", + 615, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-08T00:00:00Z", + "08 09 31 37 44", + "38", + null + ], + [ + 616, + "DD901315-2325-4C18-8319-81B01B0DFE1D", + 616, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-11T00:00:00Z", + "14 18 27 31 42", + "07", + null + ], + [ + 617, + "7D3AC251-031A-4D46-B6E3-D57950F6CB58", + 617, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-15T00:00:00Z", + "12 13 27 48 50", + "30", + null + ], + [ + 618, + "72EDF49D-BC25-4A23-956A-57D27374E917", + 618, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-18T00:00:00Z", + "24 28 36 50 53", + "29", + null + ], + [ + 619, + "BBC81A36-EBE1-4963-99CF-0FF40F70EC1F", + 619, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-22T00:00:00Z", + "03 22 31 48 54", + "09", + null + ], + [ + 620, + "A7BFDD05-2042-47C7-B393-067E4B9008A5", + 620, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-25T00:00:00Z", + "19 32 37 45 52", + "41", + null + ], + [ + 621, + "D766A4DB-4E03-4DD3-9141-2DEACE174839", + 621, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-04-29T00:00:00Z", + "19 24 35 44 51", + "26", + null + ], + [ + 622, + "39338F15-1D3D-4B25-8E41-A47775643753", + 622, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-02T00:00:00Z", + "08 28 37 53 55", + "26", + null + ], + [ + 623, + "61E2B968-18EA-4661-97D8-1557EA46EF07", + 623, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-06T00:00:00Z", + "04 21 46 53 54", + "26", + null + ], + [ + 624, + "858831D9-54C7-4330-BDB5-5B034C4BE4E4", + 624, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-09T00:00:00Z", + "16 31 43 46 56", + "22", + null + ], + [ + 625, + "D0CEF627-5AF9-42F9-AA58-4686413929C9", + 625, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-13T00:00:00Z", + "20 24 27 31 47", + "15", + null + ], + [ + 626, + "9009BD57-C8CE-4668-9CE0-F5D59CA5F172", + 626, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-16T00:00:00Z", + "06 11 39 46 47", + "26", + null + ], + [ + 627, + "A991C2F5-559D-44FE-8C0D-9BCAA3E344A5", + 627, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-20T00:00:00Z", + "02 14 26 32 41", + "32", + null + ], + [ + 628, + "91E9434A-7FBF-444A-B4B1-613B961F2A48", + 628, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-23T00:00:00Z", + "04 08 11 22 30", + "04", + null + ], + [ + 629, + "DC5EED77-8143-4F86-97DE-13972F2B2AFC", + 629, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-27T00:00:00Z", + "14 24 32 45 49", + "17", + null + ], + [ + 630, + "97097C20-BC7D-43E1-AAC5-F48B2F638E45", + 630, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-05-30T00:00:00Z", + "39 40 47 53 55", + "32", + null + ], + [ + 631, + "1BF2908A-5A66-4E7D-9F48-A22B94C280F0", + 631, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-03T00:00:00Z", + "04 19 24 32 54", + "05", + null + ], + [ + 632, + "79E09164-E650-489E-9641-DC52D4203F50", + 632, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-06T00:00:00Z", + "08 09 43 44 54", + "27", + null + ], + [ + 633, + "F2AF63EE-E3A5-4D2C-90C7-0D4B0003792D", + 633, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-10T00:00:00Z", + "03 05 15 43 51", + "11", + null + ], + [ + 634, + "7A95EAC2-EB23-4F35-BB91-7B291DC85943", + 634, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-13T00:00:00Z", + "08 09 14 38 44", + "36", + null + ], + [ + 635, + "BA5F710C-0B05-4FEB-9DB9-DE4E80C23089", + 635, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-17T00:00:00Z", + "05 14 25 47 49", + "36", + null + ], + [ + 636, + "07ABF657-5309-4D77-9BE4-716F3E48BE4E", + 636, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-20T00:00:00Z", + "11 17 25 36 42", + "13", + null + ], + [ + 637, + "441E43A9-2BFE-4EDD-86A5-7D0237E40AD9", + 637, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-24T00:00:00Z", + "10 22 36 50 53", + "39", + null + ], + [ + 638, + "B7473E75-6067-4E58-B934-81512155CC22", + 638, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-06-27T00:00:00Z", + "08 14 22 39 50", + "44", + null + ], + [ + 639, + "E498C1F6-8191-4DCF-97D5-B4838C72B27E", + 639, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-01T00:00:00Z", + "01 22 33 43 52", + "36", + null + ], + [ + 640, + "E6F1EB36-9C3D-432B-955A-5A87B91CF56A", + 640, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-04T00:00:00Z", + "01 03 12 19 20", + "28", + null + ], + [ + 641, + "7B9F9687-FA7C-4C35-9CD0-C75C24F6B843", + 641, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-08T00:00:00Z", + "01 20 22 29 41", + "35", + null + ], + [ + 642, + "DF85FE52-BB4B-42DC-B762-FFE86C7287FF", + 642, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-11T00:00:00Z", + "05 14 16 39 51", + "34", + null + ], + [ + 643, + "C2952461-9560-42BF-89D7-A128C11664A2", + 643, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-15T00:00:00Z", + "19 24 34 45 51", + "40", + null + ], + [ + 644, + "61469DD6-B4E4-4BCC-90AB-A71BAC7567CE", + 644, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-18T00:00:00Z", + "17 29 36 53 55", + "26", + null + ], + [ + 645, + "536EA679-7D1A-4740-8B02-EE9C33B203E7", + 645, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-22T00:00:00Z", + "02 16 23 29 32", + "46", + null + ], + [ + 646, + "95937200-82F3-402E-8248-B8951D1C1873", + 646, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-25T00:00:00Z", + "02 16 19 35 52", + "17", + null + ], + [ + 647, + "05997811-B217-45CA-9EAB-3126E3C649CD", + 647, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-07-29T00:00:00Z", + "11 13 20 30 42", + "03", + null + ], + [ + 648, + "FAF32B79-7770-4454-B053-47F6965910B8", + 648, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-01T00:00:00Z", + "09 13 17 18 56", + "02", + null + ], + [ + 649, + "BB9F5AC4-4B54-4EFC-B40E-28A4ABD26D63", + 649, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-05T00:00:00Z", + "09 21 36 38 55", + "13", + null + ], + [ + 650, + "809C3172-9F6E-4E8A-9EB5-CC9D1EBD7FDB", + 650, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-08T00:00:00Z", + "11 17 28 32 50", + "33", + null + ], + [ + 651, + "04182DD5-998D-44E2-B594-64556A39C8CD", + 651, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-12T00:00:00Z", + "02 07 23 38 40", + "40", + null + ], + [ + 652, + "8381CACD-0581-40DE-9D78-1402384FAE15", + 652, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-15T00:00:00Z", + "08 23 29 30 53", + "07", + null + ], + [ + 653, + "1B4D963D-ADAB-4871-B192-4B985AC36F31", + 653, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-19T00:00:00Z", + "09 18 19 26 40", + "38", + null + ], + [ + 654, + "C4183FB9-A12F-4E51-8630-6D4C4FF6236E", + 654, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-22T00:00:00Z", + "12 13 15 41 42", + "37", + null + ], + [ + 655, + "B5863FA9-E005-4C28-BB32-9132851D9C19", + 655, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-26T00:00:00Z", + "06 16 24 34 36", + "30", + null + ], + [ + 656, + "3BF0DDAC-D674-4055-9A4B-DA9AC99E0D82", + 656, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-08-29T00:00:00Z", + "21 25 26 50 51", + "22", + null + ], + [ + 657, + "19B8A21B-A93F-42E5-B8A2-B65B17C03CBC", + 657, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-02T00:00:00Z", + "14 23 43 44 54", + "39", + null + ], + [ + 658, + "0B7BF62B-A20B-4B31-AD56-A24C98307C57", + 658, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-05T00:00:00Z", + "01 06 15 27 46", + "39", + null + ], + [ + 659, + "6292265B-0462-4FAE-A4BE-CF94C20DB96F", + 659, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-09T00:00:00Z", + "22 23 28 49 52", + "02", + null + ], + [ + 660, + "948DD599-9C55-40F8-89FD-8D67E835938C", + 660, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-12T00:00:00Z", + "01 12 14 25 35", + "38", + null + ], + [ + 661, + "EBAB9596-15F7-4E80-9AE5-B2614299CD35", + 661, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-16T00:00:00Z", + "13 24 39 51 52", + "44", + null + ], + [ + 662, + "32E7961A-6226-4037-9A77-D7B26D188DC2", + 662, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-19T00:00:00Z", + "02 09 41 48 51", + "37", + null + ], + [ + 663, + "EE6BA26A-7962-4738-AD11-1ABDF472E47D", + 663, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-23T00:00:00Z", + "09 32 34 43 52", + "04", + null + ], + [ + 664, + "67930A86-D27C-4F43-81D8-1B04573D642F", + 664, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-26T00:00:00Z", + "06 13 14 31 36", + "36", + null + ], + [ + 665, + "90B63F14-6644-42AF-9827-4DAE75D83F76", + 665, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-09-30T00:00:00Z", + "09 30 35 39 49", + "36", + null + ], + [ + 666, + "E4AB005C-DE82-4FF3-B929-59933A564E52", + 666, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-03T00:00:00Z", + "13 28 32 41 52", + "16", + null + ], + [ + 667, + "8306F542-EDF9-4ABE-ABEA-BE7FF13F5F45", + 667, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-07T00:00:00Z", + "02 25 35 38 42", + "34", + null + ], + [ + 668, + "E60DF50F-8CE6-4B60-AA78-F7BD1CB2E8E6", + 668, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-10T00:00:00Z", + "14 15 43 46 48", + "21", + null + ], + [ + 669, + "217D2DF3-97B0-48EF-9F35-01FCFB97B83F", + 669, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-14T00:00:00Z", + "14 35 41 42 51", + "23", + null + ], + [ + 670, + "DD45E22D-72A2-4052-838A-7E236925AFAB", + 670, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-17T00:00:00Z", + "07 15 27 28 31", + "35", + null + ], + [ + 671, + "FC5BB8FE-AFD6-4784-A950-25D21B85493F", + 671, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-21T00:00:00Z", + "16 19 39 42 44", + "38", + null + ], + [ + 672, + "0CD5FC5D-4989-496C-B575-11EAAAD6115C", + 672, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-24T00:00:00Z", + "05 33 34 47 52", + "18", + null + ], + [ + 673, + "3F9A2F2B-919D-4F31-B636-52862546E3BB", + 673, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-28T00:00:00Z", + "06 39 45 46 48", + "36", + null + ], + [ + 674, + "E02FF34D-3A58-42C9-8722-0347598852F7", + 674, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-10-31T00:00:00Z", + "02 07 17 29 47", + "40", + null + ], + [ + 675, + "6DF2E2C0-A871-4AFE-9E12-738CBE7AF05D", + 675, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-04T00:00:00Z", + "10 21 23 41 55", + "09", + null + ], + [ + 676, + "7B508DB8-75A8-4C05-BB9A-63697C7A0A4D", + 676, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-07T00:00:00Z", + "14 24 32 43 44", + "21", + null + ], + [ + 677, + "808AB5CA-F5CA-47B7-8F73-1517D8892037", + 677, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-11T00:00:00Z", + "05 27 38 42 55", + "41", + null + ], + [ + 678, + "B0536821-95CC-4733-84C7-F4F052327A8E", + 678, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-14T00:00:00Z", + "03 18 19 30 34", + "03", + null + ], + [ + 679, + "74023E2B-EEB5-44BF-9694-3E044C8C83F5", + 679, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-18T00:00:00Z", + "10 15 22 52 53", + "12", + null + ], + [ + 680, + "4C086620-5B40-41D6-B9B4-F79479D5F2ED", + 680, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-21T00:00:00Z", + "01 22 52 53 56", + "45", + null + ], + [ + 681, + "57EEB3E2-33B7-4FF1-BB90-8A6005FA79DE", + 681, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-25T00:00:00Z", + "02 11 22 51 52", + "46", + null + ], + [ + 682, + "CBBEE8D1-B7C9-40B4-A622-D061805B9B7D", + 682, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-11-28T00:00:00Z", + "10 30 44 46 48", + "44", + null + ], + [ + 683, + "F5376D25-5DF8-42C3-B344-AA5CE2F413D7", + 683, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-02T00:00:00Z", + "02 17 22 32 51", + "35", + null + ], + [ + 684, + "52198556-DA62-4169-AA41-D92046DD93FD", + 684, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-05T00:00:00Z", + "21 27 46 52 55", + "14", + null + ], + [ + 685, + "6DDE7205-0EB7-46EB-8F9B-B2FF0B217AC8", + 685, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-09T00:00:00Z", + "11 12 26 31 33", + "27", + null + ], + [ + 686, + "2BE6965D-BF8A-4145-8C6B-094C377A8BEA", + 686, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-12T00:00:00Z", + "10 16 19 27 48", + "25", + null + ], + [ + 687, + "8483A370-5A9E-4C91-BC8B-AD11582907D3", + 687, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-16T00:00:00Z", + "10 14 16 29 40", + "06", + null + ], + [ + 688, + "EDBFF068-2C35-433F-882A-D56A37C36747", + 688, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-19T00:00:00Z", + "03 13 16 39 54", + "32", + null + ], + [ + 689, + "85088580-AC76-4A88-9A43-CA57062D3991", + 689, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-23T00:00:00Z", + "01 08 13 27 41", + "45", + null + ], + [ + 690, + "41BB763A-B7EE-4B77-B46C-35B2D4D11397", + 690, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-26T00:00:00Z", + "06 19 29 33 37", + "31", + null + ], + [ + 691, + "F45C1691-4DCA-4754-ACDC-370D4D1BD7C0", + 691, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2008-12-30T00:00:00Z", + "01 22 29 44 52", + "39", + null + ], + [ + 692, + "DA9A9104-C0DB-4306-BCE5-B825281DFA12", + 692, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-02T00:00:00Z", + "02 11 19 21 34", + "38", + null + ], + [ + 693, + "457BD885-F877-4984-B9EC-CB13469E7BF7", + 693, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-06T00:00:00Z", + "03 11 12 19 33", + "30", + null + ], + [ + 694, + "006D900C-426D-43BB-B1D7-2C7B407BC426", + 694, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-09T00:00:00Z", + "23 25 30 45 50", + "08", + null + ], + [ + 695, + "A4775431-5ADA-4A87-AE5F-C6E639F9E631", + 695, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-13T00:00:00Z", + "22 25 33 36 48", + "40", + null + ], + [ + 696, + "67534450-D8C3-40A5-8913-84D193109350", + 696, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-16T00:00:00Z", + "02 04 21 39 51", + "29", + null + ], + [ + 697, + "C93BDF71-0B5F-4EEE-BFF0-06559684E40B", + 697, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-20T00:00:00Z", + "01 09 10 35 46", + "09", + null + ], + [ + 698, + "87AE85FC-0B31-4036-8BB1-3EB6BFB12353", + 698, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-23T00:00:00Z", + "02 17 20 27 28", + "07", + null + ], + [ + 699, + "0C8FCC5D-F1AA-4F04-AE12-EBDCDD302550", + 699, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-27T00:00:00Z", + "03 11 12 14 21", + "25", + null + ], + [ + 700, + "4598C166-E066-430F-A34B-191133D82DC0", + 700, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-01-30T00:00:00Z", + "13 16 19 53 55", + "02", + null + ], + [ + 701, + "84952D50-FB23-41B8-B8B9-7C563FB0DEF3", + 701, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-03T00:00:00Z", + "04 15 29 43 56", + "29", + null + ], + [ + 702, + "4FBD061D-4178-478A-A9DA-0591952AF4A1", + 702, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-06T00:00:00Z", + "02 12 18 28 31", + "03", + null + ], + [ + 703, + "61079EAE-409B-4FA4-AF31-BD6290B4DECD", + 703, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-10T00:00:00Z", + "18 29 38 43 47", + "07", + null + ], + [ + 704, + "BC0C8E66-8F2B-4627-A61F-16476BE4D0D1", + 704, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-13T00:00:00Z", + "25 36 37 40 51", + "20", + null + ], + [ + 705, + "02D3567D-CDCA-4E4B-8558-805A7F344CA8", + 705, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-17T00:00:00Z", + "01 09 23 27 33", + "24", + null + ], + [ + 706, + "D5889D79-7B25-4EB4-B609-E985347A3E6D", + 706, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-20T00:00:00Z", + "21 28 41 45 55", + "24", + null + ], + [ + 707, + "DBD4B0BD-CCDC-4E1D-AEAC-7B1CFD1863CC", + 707, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-24T00:00:00Z", + "01 27 28 35 40", + "06", + null + ], + [ + 708, + "A4B1FE35-873D-46EA-890E-CA09F4A445A7", + 708, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-02-27T00:00:00Z", + "24 37 44 50 56", + "35", + null + ], + [ + 709, + "813AE8F3-A520-4B94-9830-51FC6CFAEE27", + 709, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-03T00:00:00Z", + "26 32 35 43 52", + "10", + null + ], + [ + 710, + "FC0C4C98-0E7B-42C7-9D18-9707EBD8BC8E", + 710, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-06T00:00:00Z", + "11 18 37 46 55", + "45", + null + ], + [ + 711, + "9A17DCEE-779A-4020-9CEC-8064B73B0EAC", + 711, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-10T00:00:00Z", + "02 27 31 39 40", + "23", + null + ], + [ + 712, + "C2055A92-0EA6-46BF-A085-D1B2F2FD9F87", + 712, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-13T00:00:00Z", + "10 12 26 46 50", + "23", + null + ], + [ + 713, + "471EB7B1-EC76-428C-B4C1-D4746EE3B5BD", + 713, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-17T00:00:00Z", + "09 15 24 28 31", + "17", + null + ], + [ + 714, + "AEC2FFB5-3CF4-4541-AF59-429BA4EA88ED", + 714, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-20T00:00:00Z", + "15 16 20 39 40", + "26", + null + ], + [ + 715, + "5D59F47E-FDB3-4D75-8726-A89B26E960EB", + 715, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-24T00:00:00Z", + "04 25 34 43 44", + "45", + null + ], + [ + 716, + "E3C8C9EC-2595-43D8-9220-801A471A0785", + 716, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-27T00:00:00Z", + "10 15 24 38 50", + "19", + null + ], + [ + 717, + "75F8683A-8CB5-4A64-B394-F3856113C734", + 717, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-03-31T00:00:00Z", + "14 39 47 48 53", + "29", + null + ], + [ + 718, + "1DFBD7FB-D346-47E3-8055-650E565084DB", + 718, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-03T00:00:00Z", + "16 22 38 39 48", + "42", + null + ], + [ + 719, + "F2228ABC-483D-4402-885C-07F9CA41D3FF", + 719, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-07T00:00:00Z", + "02 04 13 17 36", + "15", + null + ], + [ + 720, + "23C5D3A0-28C4-414A-AA41-56BB9FF9E4D6", + 720, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-10T00:00:00Z", + "18 25 36 42 51", + "22", + null + ], + [ + 721, + "7214BB77-B931-442E-8656-AF6388E58DA0", + 721, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-14T00:00:00Z", + "04 11 22 48 50", + "42", + null + ], + [ + 722, + "103C24D8-2F24-4B67-B25B-BE1E6CE96A85", + 722, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-17T00:00:00Z", + "05 13 26 35 45", + "32", + null + ], + [ + 723, + "74CD43FF-6C29-42F2-8492-1D9FD9BE1B96", + 723, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-21T00:00:00Z", + "05 24 37 47 52", + "06", + null + ], + [ + 724, + "0B0DCFE8-1FEF-437F-BD58-33EAEA95BBDE", + 724, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-24T00:00:00Z", + "09 20 21 48 49", + "07", + null + ], + [ + 725, + "21DCD08A-3F15-4065-A97B-85B46045F5D3", + 725, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-04-28T00:00:00Z", + "15 20 24 36 44", + "06", + null + ], + [ + 726, + "351EBC69-A427-4C20-B798-68E178E5088B", + 726, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-01T00:00:00Z", + "09 16 24 40 43", + "35", + null + ], + [ + 727, + "168B47E6-6EB9-4387-B9AB-FBEE6E70187B", + 727, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-05T00:00:00Z", + "05 23 38 39 54", + "03", + null + ], + [ + 728, + "D87CA568-F428-44DC-8E0D-938DAE764D2D", + 728, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-08T00:00:00Z", + "12 27 29 32 34", + "34", + null + ], + [ + 729, + "BE8F8E4C-87AC-419E-8B35-25B645F733A0", + 729, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-12T00:00:00Z", + "04 08 10 14 51", + "31", + null + ], + [ + 730, + "81151545-D0DE-4732-A845-747FD7B426A0", + 730, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-15T00:00:00Z", + "07 12 24 36 48", + "27", + null + ], + [ + 731, + "AFAB890B-9AE6-4DC4-9E2F-FBBDD5CAA71F", + 731, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-19T00:00:00Z", + "02 04 09 15 42", + "13", + null + ], + [ + 732, + "3FB0BBB5-9305-4AD1-A8EF-677EB14D739A", + 732, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-22T00:00:00Z", + "03 29 34 42 49", + "29", + null + ], + [ + 733, + "11EA5295-1010-4F48-9FA7-166D5CE49043", + 733, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-26T00:00:00Z", + "09 18 21 37 55", + "33", + null + ], + [ + 734, + "81049EB0-34A3-404C-805D-EC79155BD474", + 734, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-05-29T00:00:00Z", + "23 30 36 39 48", + "34", + null + ], + [ + 735, + "F22FA563-2C4C-49CD-A213-F3B0258DD2F7", + 735, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-02T00:00:00Z", + "09 13 26 30 35", + "33", + null + ], + [ + 736, + "339FAF34-DD23-4C2C-8FF1-11BC297110D5", + 736, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-05T00:00:00Z", + "05 20 38 41 52", + "20", + null + ], + [ + 737, + "572A228E-A2B7-4853-AC56-B51FA3E4E977", + 737, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-09T00:00:00Z", + "05 17 31 36 56", + "46", + null + ], + [ + 738, + "B1912705-910F-40B0-B26C-C080AE03A64E", + 738, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-12T00:00:00Z", + "06 11 20 32 44", + "38", + null + ], + [ + 739, + "18C01ED7-F086-462D-952C-3690822D9EB3", + 739, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-16T00:00:00Z", + "09 15 21 26 45", + "25", + null + ], + [ + 740, + "778E58D2-A4BF-4397-ACB4-CD45F4594E02", + 740, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-19T00:00:00Z", + "04 09 12 16 46", + "44", + null + ], + [ + 741, + "EBD03D4A-8D22-4069-BB9C-85B2905C1908", + 741, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-23T00:00:00Z", + "12 14 16 31 50", + "09", + null + ], + [ + 742, + "946BC592-27E8-4679-8A4F-D1ADE23BCAB2", + 742, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-26T00:00:00Z", + "11 15 17 29 46", + "16", + null + ], + [ + 743, + "37C1E7E8-D038-4632-8095-CF7C367AF16C", + 743, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-06-30T00:00:00Z", + "07 34 49 54 55", + "34", + null + ], + [ + 744, + "0CEAED99-4AF4-4C56-BDBE-2CD11790E752", + 744, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-03T00:00:00Z", + "05 06 07 11 25", + "31", + null + ], + [ + 745, + "56165FDF-EACB-4D44-8FD0-19188EBF9FDB", + 745, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-07T00:00:00Z", + "25 27 35 38 39", + "28", + null + ], + [ + 746, + "F75DCF35-BB8A-4E25-A08A-C70AED507E1B", + 746, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-10T00:00:00Z", + "05 10 26 27 28", + "04", + null + ], + [ + 747, + "A5AED3DC-82D1-47B2-AD84-3E4CFF492863", + 747, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-14T00:00:00Z", + "20 29 35 45 53", + "41", + null + ], + [ + 748, + "CBC7B3F7-A0FB-4B17-8FC9-B584A48ACE1A", + 748, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-17T00:00:00Z", + "08 17 40 47 50", + "13", + null + ], + [ + 749, + "3972E622-3A12-4459-A2F3-853C6E3DF528", + 749, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-21T00:00:00Z", + "03 08 21 50 52", + "02", + null + ], + [ + 750, + "36750E7C-756E-46DE-9C57-1CDB57C686AF", + 750, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-24T00:00:00Z", + "03 06 43 51 52", + "36", + null + ], + [ + 751, + "0ED2B295-A760-4BFF-A56B-A303E61A48C2", + 751, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-28T00:00:00Z", + "04 17 24 25 48", + "34", + null + ], + [ + 752, + "FC76F901-1F35-4951-9FB1-E2FF0688D0C5", + 752, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-07-31T00:00:00Z", + "17 35 44 52 56", + "22", + null + ], + [ + 753, + "7F2411E9-C4EE-4D90-94DF-387E3D33E14C", + 753, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-04T00:00:00Z", + "01 28 34 42 50", + "27", + null + ], + [ + 754, + "B19ED6DC-2FE3-4379-B92F-F4E04BD8B602", + 754, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-07T00:00:00Z", + "07 18 35 45 56", + "03", + null + ], + [ + 755, + "CAF2B068-BCB0-4E9E-B094-3C092814F3D6", + 755, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-11T00:00:00Z", + "06 12 15 32 42", + "40", + null + ], + [ + 756, + "BE14FCFA-6D56-4B87-9428-F036AF6A153A", + 756, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-14T00:00:00Z", + "08 22 25 33 35", + "46", + null + ], + [ + 757, + "9D7178FE-3F92-4B7C-A73B-30933BA111C6", + 757, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-18T00:00:00Z", + "04 05 26 37 56", + "25", + null + ], + [ + 758, + "DAD3C7AA-522B-4F6F-A217-6B18954EF1D4", + 758, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-21T00:00:00Z", + "09 38 44 48 49", + "13", + null + ], + [ + 759, + "AA1A3D6E-3344-435B-B813-971C58193477", + 759, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-25T00:00:00Z", + "03 12 19 22 40", + "02", + null + ], + [ + 760, + "F24708B7-2F8E-4551-908C-C221C7A9C5D3", + 760, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-08-28T00:00:00Z", + "01 17 31 37 54", + "31", + null + ], + [ + 761, + "7D46008B-19E9-4BA4-8E63-846F0F8F7C11", + 761, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-01T00:00:00Z", + "02 09 28 51 53", + "19", + null + ], + [ + 762, + "146376B5-76BF-492D-828D-3CA640DFDBDA", + 762, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-04T00:00:00Z", + "02 04 06 21 44", + "37", + null + ], + [ + 763, + "74CBE867-A0EA-4BDD-903C-CBCF649F0852", + 763, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-08T00:00:00Z", + "04 10 18 28 50", + "35", + null + ], + [ + 764, + "C5083416-19DA-4EB2-BB73-F106C6714BCD", + 764, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-11T00:00:00Z", + "16 27 48 49 54", + "02", + null + ], + [ + 765, + "54B77269-DF10-43D2-85AC-87310F635F40", + 765, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-15T00:00:00Z", + "29 30 32 35 41", + "39", + null + ], + [ + 766, + "9F3A9E56-B7C2-49BA-AC52-1A9845358AD1", + 766, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-18T00:00:00Z", + "18 27 31 36 52", + "33", + null + ], + [ + 767, + "83DD43D5-A17C-4BC0-A94B-CE5C98800671", + 767, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-22T00:00:00Z", + "26 29 33 39 46", + "24", + null + ], + [ + 768, + "E2289CDE-FE3A-4572-BDDF-7B796DDE0F48", + 768, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-25T00:00:00Z", + "07 27 42 49 52", + "19", + null + ], + [ + 769, + "6C158BB8-3C8D-4821-A36A-12D493870B1D", + 769, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-09-29T00:00:00Z", + "02 21 25 45 50", + "21", + null + ], + [ + 770, + "14EF87A6-B943-4168-A85C-92986474FE73", + 770, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-02T00:00:00Z", + "15 24 51 53 55", + "11", + null + ], + [ + 771, + "2940046E-0856-4C27-BDEC-0081153FE6D9", + 771, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-06T00:00:00Z", + "09 33 51 53 56", + "39", + null + ], + [ + 772, + "4B1ECB95-422B-4E5C-AE4A-A36CC7289AE2", + 772, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-09T00:00:00Z", + "03 14 21 24 51", + "14", + null + ], + [ + 773, + "917603BF-CE49-4D4C-B344-4F7BFB4A3000", + 773, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-13T00:00:00Z", + "17 31 34 45 51", + "24", + null + ], + [ + 774, + "C4B244A5-71AE-4737-8696-FAD69FCC4306", + 774, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-16T00:00:00Z", + "10 13 18 33 51", + "43", + null + ], + [ + 775, + "B09A6263-AE32-48A1-B27F-5261FF85BB0A", + 775, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-20T00:00:00Z", + "13 17 25 45 55", + "08", + null + ], + [ + 776, + "49AC2B38-0F01-4ECF-97F9-DFEE683496FB", + 776, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-23T00:00:00Z", + "27 45 48 54 56", + "02", + null + ], + [ + 777, + "8F5C36CD-13DA-482D-8D06-C70FAD47E5DD", + 777, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-27T00:00:00Z", + "07 13 37 46 51", + "02", + null + ], + [ + 778, + "EC9A3519-606B-4389-9A2E-39C962F5E2B4", + 778, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-10-30T00:00:00Z", + "04 15 17 29 38", + "20", + null + ], + [ + 779, + "167BFB3F-0E07-4C16-978E-FBE7FFD5B68B", + 779, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-03T00:00:00Z", + "05 18 23 31 38", + "20", + null + ], + [ + 780, + "E701E122-932C-47DB-91E4-8EDEC824EF6D", + 780, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-06T00:00:00Z", + "07 11 27 40 46", + "08", + null + ], + [ + 781, + "7DDD4033-B3ED-48A6-806C-8886C6A2BE5B", + 781, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-10T00:00:00Z", + "08 21 29 34 37", + "15", + null + ], + [ + 782, + "65739373-4856-4DEB-B8EB-D2A5867F6AF7", + 782, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-13T00:00:00Z", + "27 43 45 49 54", + "44", + null + ], + [ + 783, + "BD325C4F-DC06-4DE8-8AB0-B0CA898310D2", + 783, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-17T00:00:00Z", + "08 22 27 49 50", + "28", + null + ], + [ + 784, + "BA3F8A87-E1F8-4518-AFA7-6E6CB0094ADE", + 784, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-20T00:00:00Z", + "03 04 07 16 56", + "39", + null + ], + [ + 785, + "10601DE2-F74F-4A16-A5AE-D9B528F37947", + 785, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-24T00:00:00Z", + "10 11 35 37 50", + "12", + null + ], + [ + 786, + "028E0467-039A-4646-B805-419A7EA4215F", + 786, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-11-27T00:00:00Z", + "12 25 37 39 45", + "11", + null + ], + [ + 787, + "CCA3BDA4-4EA3-4847-B489-DA31CE612F46", + 787, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-01T00:00:00Z", + "17 30 39 52 53", + "21", + null + ], + [ + 788, + "5A4D2F95-05B7-45B0-AFC6-0C8671090078", + 788, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-04T00:00:00Z", + "04 33 41 51 56", + "38", + null + ], + [ + 789, + "1AFDE069-1C2C-4B11-ABF2-5D34C99F8009", + 789, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-08T00:00:00Z", + "20 23 28 30 46", + "29", + null + ], + [ + 790, + "C8688557-3C55-40B1-8547-F8F63EA978E2", + 790, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-11T00:00:00Z", + "02 21 27 34 44", + "45", + null + ], + [ + 791, + "170F03BB-4FA6-4012-9DEA-3F355327CB2D", + 791, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-15T00:00:00Z", + "27 31 32 36 47", + "35", + null + ], + [ + 792, + "A1C9B69C-F6E9-4F03-BD08-3612C8130DB2", + 792, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-18T00:00:00Z", + "10 20 30 44 49", + "24", + null + ], + [ + 793, + "2DF0DE5D-822C-4B1F-8189-150829710D6D", + 793, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-22T00:00:00Z", + "03 33 35 39 45", + "13", + null + ], + [ + 794, + "2BFF67A2-5627-45EB-9332-DFA144B11A4E", + 794, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2009-12-29T00:00:00Z", + "02 05 29 35 51", + "03", + null + ], + [ + 795, + "2A5CE53D-DC71-4E03-9BE0-75214C869310", + 795, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-01T00:00:00Z", + "06 08 27 40 41", + "21", + null + ], + [ + 796, + "E0C0761D-CDE8-4951-8FAD-1649611251D5", + 796, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-05T00:00:00Z", + "13 28 39 50 55", + "10", + null + ], + [ + 797, + "FC60EB92-6CC8-4E00-92ED-329B206F34BF", + 797, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-08T00:00:00Z", + "18 20 31 36 43", + "33", + null + ], + [ + 798, + "1395E5F5-EAD5-4A9E-8E30-3D4ED3180582", + 798, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-12T00:00:00Z", + "05 09 31 37 56", + "16", + null + ], + [ + 799, + "61176EE6-194E-4B7A-8289-641D6D73E30F", + 799, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-15T00:00:00Z", + "04 07 19 21 38", + "29", + null + ], + [ + 800, + "053F0AAB-3C80-4608-A15B-11EF823A97A0", + 800, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-19T00:00:00Z", + "04 05 34 38 41", + "18", + null + ], + [ + 801, + "11D64BB4-E070-4C24-8369-142791A0DB96", + 801, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-22T00:00:00Z", + "08 13 27 28 52", + "09", + null + ], + [ + 802, + "D8151C78-F265-4CBB-99A2-42E38293079D", + 802, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-26T00:00:00Z", + "07 08 38 39 48", + "22", + null + ], + [ + 803, + "0CCA6D18-2074-488C-A3D0-DA64DFFD8AA4", + 803, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-01-29T00:00:00Z", + "01 10 22 23 38", + "19", + null + ], + [ + 804, + "F5782C73-F67B-4BC7-88C1-D27461D9D2D3", + 804, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-02T00:00:00Z", + "06 07 26 27 49", + "09", + null + ], + [ + 805, + "31DB7363-8E05-4A5F-B44A-2084214F4376", + 805, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-05T00:00:00Z", + "10 20 45 51 53", + "41", + null + ], + [ + 806, + "F1F49235-006D-4983-8E66-C28093B9935C", + 806, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-09T00:00:00Z", + "02 17 20 26 48", + "12", + null + ], + [ + 807, + "1AF21D48-A038-4F94-AB71-EB64D7ADD2AC", + 807, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-12T00:00:00Z", + "14 16 17 33 47", + "23", + null + ], + [ + 808, + "3B55D6A9-90F8-4A0E-9231-AB28F15F994E", + 808, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-16T00:00:00Z", + "11 12 21 29 45", + "05", + null + ], + [ + 809, + "A119EC98-37A8-48EC-BE53-DEFE528ED3DB", + 809, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-19T00:00:00Z", + "01 22 39 42 46", + "36", + null + ], + [ + 810, + "2FE766E0-110C-4FCE-80B2-179AF7347FAE", + 810, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-23T00:00:00Z", + "04 16 36 40 53", + "18", + null + ], + [ + 811, + "DB5883CA-B9DD-471A-99AC-07BFDB428539", + 811, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-02-26T00:00:00Z", + "04 14 29 54 56", + "40", + null + ], + [ + 812, + "15CB5697-EB46-4932-8B7F-19A32ACF2340", + 812, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-02T00:00:00Z", + "09 12 47 48 56", + "25", + null + ], + [ + 813, + "CF4EB296-ABBE-4034-A548-A8CC9917EC24", + 813, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-05T00:00:00Z", + "11 31 34 44 52", + "32", + null + ], + [ + 814, + "A1EDA1B5-B783-4732-89DC-A359CB1FD0C7", + 814, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-09T00:00:00Z", + "14 16 18 19 29", + "16", + null + ], + [ + 815, + "1D791D17-41CD-4053-804F-3A7058B0EC24", + 815, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-12T00:00:00Z", + "02 15 25 48 53", + "41", + null + ], + [ + 816, + "D4C9077C-B7DD-4890-A6C1-DF0228AA3B1C", + 816, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-16T00:00:00Z", + "03 22 48 52 56", + "13", + null + ], + [ + 817, + "32DD92A6-6176-421B-AD93-6467660CF6D2", + 817, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-19T00:00:00Z", + "10 31 45 50 54", + "25", + null + ], + [ + 818, + "E773448F-7D8E-41B3-A08F-118B31FEB680", + 818, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-23T00:00:00Z", + "03 25 28 29 40", + "13", + null + ], + [ + 819, + "24388C14-9B3E-43A6-A07A-C80597855505", + 819, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-26T00:00:00Z", + "23 41 46 47 52", + "22", + null + ], + [ + 820, + "FC270668-BDB7-47E6-BA4D-7639B11FF369", + 820, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-03-30T00:00:00Z", + "01 11 24 38 44", + "41", + null + ], + [ + 821, + "FDF67DCE-BF83-4409-AFC6-A2FC0E1C35C9", + 821, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-02T00:00:00Z", + "02 17 22 30 31", + "19", + null + ], + [ + 822, + "F8EE5F90-48B8-4E4D-BE7B-F9A3780C04B0", + 822, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-06T00:00:00Z", + "16 43 44 52 56", + "26", + null + ], + [ + 823, + "2D4979F0-21FA-4EB4-A12F-A82ECAD11C85", + 823, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-09T00:00:00Z", + "15 18 39 48 53", + "03", + null + ], + [ + 824, + "3AD05007-2EBF-4675-BCAC-8D7610966D5C", + 824, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-13T00:00:00Z", + "03 12 27 39 47", + "32", + null + ], + [ + 825, + "671D846F-3632-44D6-98E4-E267DA8D19AB", + 825, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-16T00:00:00Z", + "10 16 31 48 50", + "44", + null + ], + [ + 826, + "9217DF4A-F053-4D12-AC26-DE254B56E4B0", + 826, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-20T00:00:00Z", + "05 08 10 34 42", + "25", + null + ], + [ + 827, + "AE0105AC-6C6E-4F11-9879-42A06D3090A3", + 827, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-23T00:00:00Z", + "19 26 28 37 52", + "18", + null + ], + [ + 828, + "65A9C9F5-5792-4D64-B225-3CF46C8D0026", + 828, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-27T00:00:00Z", + "23 37 41 50 55", + "06", + null + ], + [ + 829, + "5423D260-E2FC-4F86-8618-AAFAC601760B", + 829, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-04-30T00:00:00Z", + "14 20 41 47 53", + "40", + null + ], + [ + 830, + "45A9F9A3-30E6-41F0-A703-56B4F9E07294", + 830, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-04T00:00:00Z", + "09 21 31 36 43", + "08", + null + ], + [ + 831, + "1C82A9F5-D878-492C-A2CE-B37E205DB898", + 831, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-07T00:00:00Z", + "02 07 20 34 50", + "40", + null + ], + [ + 832, + "9615C4EB-1283-420B-94A2-48DBDD59A26A", + 832, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-11T00:00:00Z", + "26 33 43 46 54", + "09", + null + ], + [ + 833, + "1A730B61-1C5D-4EBB-8BD2-763F8EA4E8A5", + 833, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-14T00:00:00Z", + "20 21 40 47 56", + "12", + null + ], + [ + 834, + "1CAB05D1-6329-48C2-B5B4-253E53B89D46", + 834, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-18T00:00:00Z", + "11 13 19 37 40", + "26", + null + ], + [ + 835, + "EE46E0D7-377B-4075-9E44-618AC3F3F437", + 835, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-21T00:00:00Z", + "15 20 23 26 30", + "17", + null + ], + [ + 836, + "80585183-B52E-4348-9B2A-FF02017789B8", + 836, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-25T00:00:00Z", + "05 14 17 19 24", + "25", + null + ], + [ + 837, + "749A0427-5968-45CE-BD6C-C864F6F26A71", + 837, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-05-28T00:00:00Z", + "03 11 20 29 39", + "26", + null + ], + [ + 838, + "D72ACE65-0BFD-4826-8747-3CBB207764FA", + 838, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-01T00:00:00Z", + "12 27 44 45 51", + "30", + null + ], + [ + 839, + "78CFF352-C91F-4F79-9985-988B16077D13", + 839, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-04T00:00:00Z", + "12 13 15 17 50", + "23", + null + ], + [ + 840, + "3357706B-14F6-4A84-82EA-0BA1AD4705CE", + 840, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-08T00:00:00Z", + "12 18 28 48 54", + "06", + null + ], + [ + 841, + "F5926E9D-91D0-4FA0-9657-255273DA02BB", + 841, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-11T00:00:00Z", + "06 13 33 34 42", + "25", + null + ], + [ + 842, + "EE8D88B6-371B-48D8-B55F-0226F5058211", + 842, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-15T00:00:00Z", + "04 12 13 21 27", + "46", + null + ], + [ + 843, + "B584633B-6A66-4F79-8F2F-1609E41A44A5", + 843, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-18T00:00:00Z", + "11 36 37 41 55", + "07", + null + ], + [ + 844, + "47480512-F3C4-4411-BCED-EADC1B42F0D5", + 844, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-22T00:00:00Z", + "12 17 21 23 30", + "24", + null + ], + [ + 845, + "508956C9-C492-4141-9CE6-0DCBCE172E9D", + 845, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-25T00:00:00Z", + "01 02 13 19 27", + "21", + null + ], + [ + 846, + "9510B976-63F8-4F92-830F-BB53C4B7D35C", + 846, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-06-29T00:00:00Z", + "03 04 15 27 37", + "35", + null + ], + [ + 847, + "914A95CB-37B6-496A-8A7D-5A27B9F3E497", + 847, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-02T00:00:00Z", + "01 10 12 32 36", + "25", + null + ], + [ + 848, + "AB8D3AC8-D4F4-45A4-A8B9-4A398D6161FF", + 848, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-06T00:00:00Z", + "08 18 45 47 50", + "36", + null + ], + [ + 849, + "3CAF750C-2F9E-4805-AF9D-2F7A17D7390C", + 849, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-09T00:00:00Z", + "01 31 33 34 50", + "41", + null + ], + [ + 850, + "42BB83DD-69F5-4DD0-B7F6-B09CB72F84BB", + 850, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-13T00:00:00Z", + "07 11 14 15 34", + "14", + null + ], + [ + 851, + "A54BB62A-B5C4-4D33-8BF6-A47AD370146C", + 851, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-16T00:00:00Z", + "02 15 18 20 39", + "34", + null + ], + [ + 852, + "35689336-FA69-430B-BB7B-9D8757F5C563", + 852, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-20T00:00:00Z", + "12 18 28 36 43", + "19", + null + ], + [ + 853, + "79CF2CDF-F4FE-41AF-948C-679C89573D5A", + 853, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-23T00:00:00Z", + "16 19 39 44 49", + "26", + null + ], + [ + 854, + "8F6A8839-96B9-4695-B375-9D6ADC32915A", + 854, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-27T00:00:00Z", + "02 07 10 16 29", + "08", + null + ], + [ + 855, + "07371AEF-A119-4A98-BDC6-1E08263E3F78", + 855, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-07-30T00:00:00Z", + "11 30 40 48 52", + "42", + null + ], + [ + 856, + "A66E6504-5920-439B-88CA-8F0736C2CA2C", + 856, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-03T00:00:00Z", + "04 13 20 22 56", + "32", + null + ], + [ + 857, + "E3EC6624-7BB5-470B-AC8A-5CFB8289E377", + 857, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-06T00:00:00Z", + "07 13 30 33 54", + "30", + null + ], + [ + 858, + "A141A3CC-BD51-4E30-84C0-2A7D994FC250", + 858, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-10T00:00:00Z", + "02 14 26 50 56", + "12", + null + ], + [ + 859, + "A0E7F6EB-D326-4A9F-A31D-094EAD6A518E", + 859, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-13T00:00:00Z", + "06 17 24 43 55", + "36", + null + ], + [ + 860, + "D5438DC0-4EC6-48D9-B519-AD24C0B3FB25", + 860, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-17T00:00:00Z", + "11 19 40 43 44", + "33", + null + ], + [ + 861, + "5219DDB6-E022-4D60-9BFE-34FD4ECB709E", + 861, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-20T00:00:00Z", + "04 13 20 29 48", + "36", + null + ], + [ + 862, + "E662E6C4-0BE4-421F-893D-3527D5D5502C", + 862, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-24T00:00:00Z", + "04 23 24 28 32", + "31", + null + ], + [ + 863, + "805E4BEC-91C1-4A75-8465-568254B40416", + 863, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-27T00:00:00Z", + "04 10 26 32 41", + "31", + null + ], + [ + 864, + "8C850AB9-558A-4129-8544-0D9A634FA9E3", + 864, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-08-31T00:00:00Z", + "10 20 29 47 48", + "38", + null + ], + [ + 865, + "88CC3B82-9F43-4566-B130-C5517DBC33BA", + 865, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-03T00:00:00Z", + "10 13 20 28 36", + "09", + null + ], + [ + 866, + "E902EE49-B63A-4DB6-B67C-0FAAC30C3932", + 866, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-07T00:00:00Z", + "08 18 22 24 38", + "23", + null + ], + [ + 867, + "C78C1DE3-8629-429A-BD5B-C42A6F797F9C", + 867, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-10T00:00:00Z", + "11 12 17 21 23", + "20", + null + ], + [ + 868, + "CEBD219F-94FD-4152-9EC0-1A8395E776C9", + 868, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-14T00:00:00Z", + "06 14 50 55 56", + "01", + null + ], + [ + 869, + "2815439B-B45A-48AB-BC06-4E95BBDFED63", + 869, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-17T00:00:00Z", + "03 04 14 18 27", + "13", + null + ], + [ + 870, + "A4C211ED-A3C8-454D-B9AA-ED672D593BC0", + 870, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-21T00:00:00Z", + "03 20 43 47 52", + "26", + null + ], + [ + 871, + "3AE643AE-3752-4D4A-A8E3-A1EB0A794A48", + 871, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-24T00:00:00Z", + "02 28 38 42 55", + "25", + null + ], + [ + 872, + "1C36A6DE-F815-4E0C-BA3C-9144DA40C6B5", + 872, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-09-28T00:00:00Z", + "02 10 13 36 38", + "18", + null + ], + [ + 873, + "54F92A9D-74F4-4E96-802D-4C9838159251", + 873, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-01T00:00:00Z", + "03 08 21 28 52", + "43", + null + ], + [ + 874, + "A907DF1F-CDF1-4896-91D7-7FC18AEECBE6", + 874, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-05T00:00:00Z", + "10 19 24 37 44", + "27", + null + ], + [ + 875, + "8A737E94-9C1C-4D08-8BC8-9269BBC8D96F", + 875, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-08T00:00:00Z", + "24 29 37 48 50", + "19", + null + ], + [ + 876, + "E2152E19-B4AF-4B12-822B-4F8B9222C1ED", + 876, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-12T00:00:00Z", + "10 31 36 37 43", + "15", + null + ], + [ + 877, + "F3D56D53-59CA-4F5B-9758-79848E9FAF15", + 877, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-15T00:00:00Z", + "09 10 13 31 50", + "10", + null + ], + [ + 878, + "22C9895B-CEDF-400F-92EA-223B53FDA227", + 878, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-19T00:00:00Z", + "02 09 14 37 42", + "41", + null + ], + [ + 879, + "A0A4388D-A0C0-4614-8CE5-0EC197C3A92F", + 879, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-22T00:00:00Z", + "02 07 18 32 53", + "18", + null + ], + [ + 880, + "21185BC4-A0B6-401F-966C-F05F66A4AAAB", + 880, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-26T00:00:00Z", + "15 21 30 31 32", + "26", + null + ], + [ + 881, + "FF4917B9-749B-4410-B9AB-52130F6DF61C", + 881, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-10-29T00:00:00Z", + "04 19 26 28 39", + "14", + null + ], + [ + 882, + "6807A66D-E7DC-419D-AF2D-E4F2FCBCB6F4", + 882, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-02T00:00:00Z", + "01 03 12 16 54", + "46", + null + ], + [ + 883, + "FAA07034-9641-44B4-B65A-DBEBBD6750AC", + 883, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-05T00:00:00Z", + "19 25 34 46 53", + "15", + null + ], + [ + 884, + "B4C6A53B-F3AF-4867-84F5-55FB664CB90B", + 884, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-09T00:00:00Z", + "08 26 28 33 53", + "11", + null + ], + [ + 885, + "02A30C8B-B84D-4933-B04C-9188538A5FA7", + 885, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-12T00:00:00Z", + "09 26 28 35 38", + "10", + null + ], + [ + 886, + "11F16F0E-CB24-4E7D-A5F4-4BBF478A37FE", + 886, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-16T00:00:00Z", + "01 26 27 39 46", + "21", + null + ], + [ + 887, + "9E8A03C2-DFEC-4112-A696-EA9DDAD9E046", + 887, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-19T00:00:00Z", + "07 14 31 51 54", + "35", + null + ], + [ + 888, + "A96DE32B-3967-48BA-B33B-D1018E35334B", + 888, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-23T00:00:00Z", + "02 06 12 34 35", + "33", + null + ], + [ + 889, + "4CA5F4E1-FBE4-4E1E-A4B7-1C587DAB70ED", + 889, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-26T00:00:00Z", + "05 09 34 43 47", + "08", + null + ], + [ + 890, + "0AA621FC-44F6-487F-B81C-E2AE461301EF", + 890, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-11-30T00:00:00Z", + "11 16 19 47 53", + "02", + null + ], + [ + 891, + "D1529B07-F805-41BC-A0C0-1551575AE197", + 891, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-03T00:00:00Z", + "06 11 12 18 56", + "12", + null + ], + [ + 892, + "04CE11BD-8B0D-437E-8E0C-0C4B1D14C47D", + 892, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-07T00:00:00Z", + "04 38 45 53 54", + "09", + null + ], + [ + 893, + "BBE92898-012A-42EF-B481-64C5226EB753", + 893, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-10T00:00:00Z", + "23 27 33 44 46", + "36", + null + ], + [ + 894, + "9002B5AC-EE00-4406-A18D-3F2B219DC32A", + 894, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-14T00:00:00Z", + "18 22 25 31 38", + "29", + null + ], + [ + 895, + "FC1726CE-A844-4A99-9DFA-D539BDDCA6D4", + 895, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-17T00:00:00Z", + "11 20 26 46 53", + "12", + null + ], + [ + 896, + "A09E249A-42AA-4FC7-A7AE-DE5A7A81730D", + 896, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-21T00:00:00Z", + "08 11 12 31 32", + "29", + null + ], + [ + 897, + "06BBE3E8-F94D-4C38-84D0-B69EA134FFBF", + 897, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-24T00:00:00Z", + "15 16 27 40 52", + "16", + null + ], + [ + 898, + "20564B01-7B85-4448-B8E7-20634A4F9BDF", + 898, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-28T00:00:00Z", + "06 18 36 40 49", + "07", + null + ], + [ + 899, + "13965554-94D3-4B1F-918E-873DBCAF3770", + 899, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2010-12-31T00:00:00Z", + "10 12 13 35 56", + "09", + null + ], + [ + 900, + "2C0357BE-D0C4-4F6B-AD5D-454A3B01C445", + 900, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-04T00:00:00Z", + "04 08 15 25 47", + "42", + null + ], + [ + 901, + "77D470C4-97D8-4CD6-9CA7-E859EEAB4ED4", + 901, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-07T00:00:00Z", + "04 22 42 46 53", + "20", + null + ], + [ + 902, + "26BAF649-07AE-4D93-B04E-FBE9CC8E49C7", + 902, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-11T00:00:00Z", + "01 04 11 16 45", + "37", + null + ], + [ + 903, + "ED65CBC2-082D-49D7-A606-6BE130637FD4", + 903, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-14T00:00:00Z", + "02 15 17 33 35", + "08", + null + ], + [ + 904, + "79DED60A-4528-436F-96B3-20A5ECD2A325", + 904, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-18T00:00:00Z", + "04 27 29 38 45", + "05", + "04" + ], + [ + 905, + "E504A2AA-4A80-4CA3-87F4-7126B60E3CB2", + 905, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-21T00:00:00Z", + "05 09 21 35 38", + "20", + "04" + ], + [ + 906, + "6F676480-6614-4824-B7A0-A26A8B685BFE", + 906, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-25T00:00:00Z", + "05 08 31 46 50", + "04", + "04" + ], + [ + 907, + "C299984A-6FD1-46F2-A7FE-BF6FBA223648", + 907, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-01-28T00:00:00Z", + "14 33 48 49 50", + "18", + "04" + ], + [ + 908, + "DB803BB1-1023-4152-BE1A-677F08638237", + 908, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-01T00:00:00Z", + "16 22 23 26 35", + "31", + "04" + ], + [ + 909, + "59B74F61-2A5E-45D6-A80C-555F393BE9D2", + 909, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-04T00:00:00Z", + "06 20 29 48 55", + "06", + "04" + ], + [ + 910, + "ED342343-2A2F-43D9-A4AF-B0E8975A8D4F", + 910, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-08T00:00:00Z", + "25 35 36 47 48", + "18", + "02" + ], + [ + 911, + "997BA78B-4852-4D68-9136-0985CFF2A1B2", + 911, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-11T00:00:00Z", + "08 09 17 32 34", + "13", + "02" + ], + [ + 912, + "B9185736-00EE-445E-ABF2-68FD1FD9D41A", + 912, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-15T00:00:00Z", + "17 18 24 35 39", + "18", + "04" + ], + [ + 913, + "97470996-54FB-43DD-A51C-DCAC8B285499", + 913, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-18T00:00:00Z", + "05 06 07 30 45", + "42", + "03" + ], + [ + 914, + "1648D615-BF93-43BB-914C-ED9917530014", + 914, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-22T00:00:00Z", + "15 22 23 48 55", + "31", + "04" + ], + [ + 915, + "1706FD60-3151-4521-8369-ECCF5713BDF4", + 915, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-02-25T00:00:00Z", + "04 05 17 19 50", + "07", + "04" + ], + [ + 916, + "C31F64C8-FC0C-4378-A874-B3525CAEB27B", + 916, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-01T00:00:00Z", + "01 12 19 20 47", + "25", + "03" + ], + [ + 917, + "E7B38725-6D52-4D74-BE16-3EA8FDD10522", + 917, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-04T00:00:00Z", + "08 10 15 23 41", + "07", + "04" + ], + [ + 918, + "85F41156-0B86-480C-B223-BF206B9C4E8C", + 918, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-08T00:00:00Z", + "03 17 19 41 55", + "24", + "04" + ], + [ + 919, + "9377C452-D026-450A-B335-10C3709281F7", + 919, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-11T00:00:00Z", + "14 19 21 42 45", + "06", + "02" + ], + [ + 920, + "ED632697-783D-40E4-BBFA-BC9082954A7C", + 920, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-15T00:00:00Z", + "10 11 12 28 43", + "45", + "04" + ], + [ + 921, + "8681263B-5DAA-42EF-91EC-B7696A1E0849", + 921, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-18T00:00:00Z", + "14 33 34 54 56", + "37", + "04" + ], + [ + 922, + "3A284E39-1A0C-437A-A226-D221A4662F82", + 922, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-22T00:00:00Z", + "01 14 35 50 53", + "43", + "04" + ], + [ + 923, + "0CA4411F-F91F-4E80-B481-B5623FD47A33", + 923, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-25T00:00:00Z", + "22 24 31 52 54", + "04", + "04" + ], + [ + 924, + "CA55CA0F-FA9E-4348-B093-FC8A814140CB", + 924, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-03-29T00:00:00Z", + "06 15 23 34 38", + "43", + "04" + ], + [ + 925, + "EE5FC4AE-6C59-49BD-A6B9-CB0A04129E71", + 925, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-01T00:00:00Z", + "13 14 35 36 53", + "19", + "03" + ], + [ + 926, + "B70B7726-A102-489D-BF40-EB1F09381F4F", + 926, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-05T00:00:00Z", + "01 19 20 31 36", + "09", + "02" + ], + [ + 927, + "12A34C6D-6E1C-4888-B5F8-897E69681A44", + 927, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-08T00:00:00Z", + "06 40 45 50 56", + "11", + "03" + ], + [ + 928, + "8A851800-D763-454E-82FC-A8EBABA79F79", + 928, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-12T00:00:00Z", + "10 23 39 41 45", + "15", + "02" + ], + [ + 929, + "DFD2C533-7E17-4E64-8DE2-708A88683D96", + 929, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-15T00:00:00Z", + "22 23 33 39 48", + "29", + "03" + ], + [ + 930, + "C91C01F8-E7EF-4BBF-BCD3-C10695E342D3", + 930, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-19T00:00:00Z", + "20 24 32 45 51", + "43", + "04" + ], + [ + 931, + "C9A991A6-F088-4BF5-86CC-7786BCC4B8BF", + 931, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-22T00:00:00Z", + "03 18 46 51 53", + "17", + "03" + ], + [ + 932, + "082306E6-63D4-4E90-885E-4F29F45038B2", + 932, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-26T00:00:00Z", + "19 29 32 38 55", + "15", + "03" + ], + [ + 933, + "FDB58993-7061-4DCD-BD25-97ED0F318800", + 933, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-04-29T00:00:00Z", + "09 10 11 33 51", + "29", + "04" + ], + [ + 934, + "E042D17F-5ECB-40B2-8F2B-8326E77CFAD1", + 934, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-03T00:00:00Z", + "01 16 29 36 50", + "16", + "02" + ], + [ + 935, + "BCB6D64F-B258-40C3-BC82-EA562C957524", + 935, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-06T00:00:00Z", + "06 18 26 37 41", + "09", + "03" + ], + [ + 936, + "53C3DF38-DE02-49F1-90A2-108EB17948DD", + 936, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-10T00:00:00Z", + "11 16 34 40 51", + "34", + "04" + ], + [ + 937, + "9062FC96-A0F7-4EBC-9222-207F6758945C", + 937, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-13T00:00:00Z", + "03 33 39 47 53", + "09", + "04" + ], + [ + 938, + "32BB7177-E9EB-47B6-84FC-548D8B8A8406", + 938, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-17T00:00:00Z", + "01 02 17 25 48", + "45", + "04" + ], + [ + 939, + "27A3671C-10EF-401B-A767-610E60A6D0D4", + 939, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-20T00:00:00Z", + "10 17 19 45 48", + "30", + "04" + ], + [ + 940, + "3F03D46F-A972-431C-9605-B0CEDDFBB538", + 940, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-24T00:00:00Z", + "09 12 21 42 43", + "42", + "03" + ], + [ + 941, + "B4084B59-39C3-4252-9F9A-BB40B2CDB0E3", + 941, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-27T00:00:00Z", + "05 07 14 28 56", + "10", + "04" + ], + [ + 942, + "D7487BF7-2906-4A83-9BD9-98340B7FF036", + 942, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-05-31T00:00:00Z", + "28 30 31 37 55", + "13", + "03" + ], + [ + 943, + "361175FE-70B8-4080-BCBE-DB3E33556884", + 943, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-03T00:00:00Z", + "20 23 41 49 53", + "31", + "03" + ], + [ + 944, + "78C57DD5-875D-4F58-BFD9-121A6426D17B", + 944, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-07T00:00:00Z", + "29 32 35 47 52", + "13", + "04" + ], + [ + 945, + "9B6A425B-C5D3-4060-BAE7-97BDCC0BA7A4", + 945, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-10T00:00:00Z", + "18 21 27 37 38", + "07", + "03" + ], + [ + 946, + "9FDFF7B8-D455-4EE2-9AF2-7863146C4254", + 946, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-14T00:00:00Z", + "09 10 20 51 53", + "24", + "04" + ], + [ + 947, + "E4FE6C91-145A-4F31-9329-2976DC2DC0B1", + 947, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-17T00:00:00Z", + "12 29 46 47 51", + "24", + "04" + ], + [ + 948, + "12BDCBD8-F24B-48B1-867C-FD63ACC61CBF", + 948, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-21T00:00:00Z", + "11 24 25 31 46", + "17", + "03" + ], + [ + 949, + "1767DF09-F7CC-4762-B402-0E78147849D2", + 949, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-24T00:00:00Z", + "10 14 40 49 51", + "04", + "03" + ], + [ + 950, + "75829CF8-883B-4288-A747-9CF265DA50D9", + 950, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-06-28T00:00:00Z", + "12 17 27 47 48", + "33", + "04" + ], + [ + 951, + "C4C4306D-220A-43A8-A17B-6CFB22A90C45", + 951, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-01T00:00:00Z", + "12 17 30 35 47", + "26", + "04" + ], + [ + 952, + "1D651FF1-7190-422B-9E1C-9A964497C63B", + 952, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-05T00:00:00Z", + "01 10 13 18 46", + "19", + "02" + ], + [ + 953, + "15662C19-F99B-4447-9E80-6C8BDD767BBD", + 953, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-08T00:00:00Z", + "01 02 22 37 50", + "45", + "03" + ], + [ + 954, + "F61F010C-3070-4BCA-B84E-9040E840FB7B", + 954, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-12T00:00:00Z", + "03 09 11 44 49", + "09", + "04" + ], + [ + 955, + "03407F0F-604A-442F-A41E-4EA6CAFF01B7", + 955, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-15T00:00:00Z", + "16 29 30 46 56", + "06", + "03" + ], + [ + 956, + "4F5FE17B-8F5B-4648-9C22-FF9C6CB4626A", + 956, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-19T00:00:00Z", + "02 09 10 16 35", + "40", + "04" + ], + [ + 957, + "FE5C7077-5151-4BDF-A84B-148E50276C42", + 957, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-22T00:00:00Z", + "23 31 32 39 56", + "38", + "04" + ], + [ + 958, + "7AB8C5B6-90EB-4D60-9460-5F2AA356D05F", + 958, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-26T00:00:00Z", + "20 25 35 52 55", + "10", + "03" + ], + [ + 959, + "4083D81B-59EA-4E2D-B1F4-BEA1BCB41C25", + 959, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-07-29T00:00:00Z", + "08 10 22 47 48", + "35", + "04" + ], + [ + 960, + "61B4C46D-7E74-4438-950B-90514726608E", + 960, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-02T00:00:00Z", + "14 17 19 20 32", + "28", + "04" + ], + [ + 961, + "2CC54035-3718-4107-97B6-4BE09FD71596", + 961, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-05T00:00:00Z", + "06 24 28 33 42", + "19", + "03" + ], + [ + 962, + "C857D075-C3B6-4F20-A7DA-1DC845609E06", + 962, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-09T00:00:00Z", + "11 19 39 45 54", + "15", + "04" + ], + [ + 963, + "2CA2F348-42C1-4F15-8DDB-98966C409F07", + 963, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-12T00:00:00Z", + "09 43 51 54 55", + "13", + "04" + ], + [ + 964, + "1C06FA2B-34CA-4FF9-839A-FA0CBD905412", + 964, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-16T00:00:00Z", + "04 38 41 42 43", + "44", + "04" + ], + [ + 965, + "A7002E4C-D525-4F4C-A6AD-CBCB5A398BF1", + 965, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-19T00:00:00Z", + "05 15 53 54 56", + "22", + "02" + ], + [ + 966, + "D9A6699C-0C64-4546-8D22-6D6AC65F2EEF", + 966, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-23T00:00:00Z", + "11 21 44 48 49", + "23", + "03" + ], + [ + 967, + "E52436B0-9F29-4E7F-81D9-D21216826900", + 967, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-26T00:00:00Z", + "02 03 27 30 47", + "36", + "03" + ], + [ + 968, + "A26F102A-2C79-4F3D-A3E7-F3C58BF013A5", + 968, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-08-30T00:00:00Z", + "02 22 25 28 50", + "18", + "04" + ], + [ + 969, + "C577652E-D5BA-4C64-95CD-7FE4113D1534", + 969, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-02T00:00:00Z", + "25 44 48 49 55", + "20", + "03" + ], + [ + 970, + "353CE32E-67DD-4000-A3B2-165DBE4F2AAD", + 970, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-06T00:00:00Z", + "01 36 38 42 49", + "19", + "04" + ], + [ + 971, + "DA63C527-7600-4B8C-B383-C60019F11E5A", + 971, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-09T00:00:00Z", + "07 12 19 23 31", + "45", + "04" + ], + [ + 972, + "1A5842C0-C7C8-4AE5-B7A0-C6E8526ECD60", + 972, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-13T00:00:00Z", + "22 31 43 48 56", + "45", + "04" + ], + [ + 973, + "B7BAA60D-4658-4CB5-A865-D8C09693BBE7", + 973, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-16T00:00:00Z", + "06 23 41 45 56", + "24", + "04" + ], + [ + 974, + "A79C80C8-5F1B-43F2-A85A-4EABE40717B1", + 974, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-20T00:00:00Z", + "06 29 38 50 51", + "39", + "04" + ], + [ + 975, + "9C7F9D8A-9F22-4D27-AA9F-6B33AC7E70C1", + 975, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-23T00:00:00Z", + "27 31 32 40 52", + "36", + "04" + ], + [ + 976, + "AD2198FD-D11B-4183-9795-0F6E1B615274", + 976, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-27T00:00:00Z", + "02 20 28 36 45", + "37", + "04" + ], + [ + 977, + "14359A50-4A72-49E1-BA4F-88F1D18FEDFD", + 977, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-09-30T00:00:00Z", + "03 19 21 44 45", + "29", + "04" + ], + [ + 978, + "30A42918-32C3-4CE6-987F-AA1F27428177", + 978, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-04T00:00:00Z", + "03 26 40 45 52", + "11", + "03" + ], + [ + 979, + "01BF3321-0A60-4A1E-B5BE-81C2EFF99377", + 979, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-07T00:00:00Z", + "05 15 19 23 38", + "19", + "04" + ], + [ + 980, + "151F6F6E-3E97-4C7D-B393-6F4E62FF5239", + 980, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-11T00:00:00Z", + "25 34 38 44 56", + "27", + "04" + ], + [ + 981, + "786305BD-AE43-4B74-904E-236BDC499173", + 981, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-14T00:00:00Z", + "13 35 42 45 54", + "26", + "04" + ], + [ + 982, + "4D851549-3C28-40F9-9007-52231A2ED3EC", + 982, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-18T00:00:00Z", + "24 25 45 47 53", + "42", + "02" + ], + [ + 983, + "9EF3EFE4-9B8F-4014-8255-65EE45D9C3BE", + 983, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-21T00:00:00Z", + "06 21 35 37 38", + "17", + "03" + ], + [ + 984, + "5A28EBCE-5991-4A98-9931-5F1188307510", + 984, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-25T00:00:00Z", + "13 33 40 44 46", + "08", + "04" + ], + [ + 985, + "9B8BD3AB-FC4E-4877-856E-ACBC96EB4FCA", + 985, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-10-28T00:00:00Z", + "13 31 49 52 56", + "41", + "04" + ], + [ + 986, + "23D572A8-4943-416E-8344-79058FA41CDD", + 986, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-01T00:00:00Z", + "27 31 39 40 46", + "36", + "03" + ], + [ + 987, + "AE43DCE8-48BD-4103-A73D-1A9727E2616D", + 987, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-04T00:00:00Z", + "26 30 32 33 44", + "01", + "04" + ], + [ + 988, + "86A6904E-420B-4093-B38E-5B2786E20787", + 988, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-08T00:00:00Z", + "05 31 45 47 54", + "04", + "04" + ], + [ + 989, + "FCB62BE1-0722-40C7-A08E-C6E4938DC12C", + 989, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-11T00:00:00Z", + "02 16 22 29 50", + "27", + "04" + ], + [ + 990, + "7AE6EB76-503C-4BD5-BF39-A80C061F7F41", + 990, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-15T00:00:00Z", + "03 06 24 30 33", + "21", + "04" + ], + [ + 991, + "E5B962F9-B0B4-458D-9E1D-9E13AB973BD5", + 991, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-18T00:00:00Z", + "04 13 33 39 55", + "03", + "04" + ], + [ + 992, + "EB0D798E-AE4A-43BA-95DF-C7BBC32EBD9B", + 992, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-22T00:00:00Z", + "04 16 23 33 48", + "38", + "02" + ], + [ + 993, + "ACF4DF8E-BE16-45A6-BEDF-88206B701D0B", + 993, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-25T00:00:00Z", + "22 28 42 49 54", + "43", + "03" + ], + [ + 994, + "165668FF-6882-4BD5-8F20-466C5642A6CF", + 994, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-11-29T00:00:00Z", + "17 29 43 48 52", + "36", + "04" + ], + [ + 995, + "A2363856-2A4E-4701-A67B-94FC6ACA1DB0", + 995, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-02T00:00:00Z", + "24 30 48 51 56", + "45", + "04" + ], + [ + 996, + "532D6096-7C43-49C0-BB8C-212540A0DE99", + 996, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-06T00:00:00Z", + "07 21 29 35 49", + "39", + "04" + ], + [ + 997, + "C4B9DE45-9917-4551-9E78-8DA354CD74A6", + 997, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-09T00:00:00Z", + "04 12 29 49 51", + "44", + "04" + ], + [ + 998, + "24CB3C7A-76D3-4FCA-8ECE-C49794E30096", + 998, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-13T00:00:00Z", + "05 06 22 26 41", + "06", + "04" + ], + [ + 999, + "C30F212B-2CE3-406A-B3CB-28B6307A4A5D", + 999, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-16T00:00:00Z", + "02 04 26 36 39", + "27", + "03" + ], + [ + 1000, + "CD1A74E7-9E48-485B-8821-BFF2B6ECB703", + 1000, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-20T00:00:00Z", + "20 24 27 45 51", + "31", + "04" + ], + [ + 1001, + "4EDD3812-7564-4A29-B3E8-D64EE36AC9A7", + 1001, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-23T00:00:00Z", + "03 05 08 18 29", + "14", + "04" + ], + [ + 1002, + "D387D16A-8078-4E85-B4A1-E24BBDF45CC8", + 1002, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-27T00:00:00Z", + "23 32 33 39 43", + "08", + "03" + ], + [ + 1003, + "2F7BF875-07B8-4155-A068-229749172CDE", + 1003, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2011-12-30T00:00:00Z", + "04 24 45 46 52", + "01", + "04" + ], + [ + 1004, + "889504F6-0DFA-46AE-A744-B83293ABC371", + 1004, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-03T00:00:00Z", + "02 03 15 22 36", + "23", + "02" + ], + [ + 1005, + "76A27770-967F-411A-9748-CF2390EE3076", + 1005, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-06T00:00:00Z", + "09 17 28 34 48", + "46", + "02" + ], + [ + 1006, + "BA255100-BE0C-4719-A6D8-8E4E9BEA6A6C", + 1006, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-10T00:00:00Z", + "04 10 16 38 48", + "34", + "03" + ], + [ + 1007, + "82C36070-B9A3-4229-941D-B78430B169E2", + 1007, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-13T00:00:00Z", + "10 27 28 37 51", + "19", + "03" + ], + [ + 1008, + "75E0C7D8-ECD3-4DE1-9A7D-535F3B20CB3B", + 1008, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-17T00:00:00Z", + "03 15 31 36 53", + "27", + "02" + ], + [ + 1009, + "4ED7B6B9-35E5-42F5-B252-E57C515EE88E", + 1009, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-20T00:00:00Z", + "01 09 28 38 47", + "08", + "02" + ], + [ + 1010, + "BC86C784-2F3B-4403-A7DA-AD689471EC92", + 1010, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-24T00:00:00Z", + "10 22 24 36 49", + "33", + "04" + ], + [ + 1011, + "B8BD18B7-206A-4EBE-8DF8-45758EAA7A9D", + 1011, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-27T00:00:00Z", + "03 05 30 36 48", + "23", + "04" + ], + [ + 1012, + "3BBB4C54-DAF1-4D85-964B-D454BD35F996", + 1012, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-01-31T00:00:00Z", + "09 17 18 28 43", + "09", + "03" + ], + [ + 1013, + "EE2BB967-740B-41F2-8E2F-C714F30640E3", + 1013, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-03T00:00:00Z", + "07 19 21 49 53", + "35", + "04" + ], + [ + 1014, + "70FCEB5F-1CF6-4FFB-AD16-BAD74E82508E", + 1014, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-07T00:00:00Z", + "17 23 30 37 45", + "04", + "04" + ], + [ + 1015, + "32CE4FC2-B7D8-4D53-8BE9-5C71C805DB1E", + 1015, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-10T00:00:00Z", + "03 04 18 29 50", + "20", + "04" + ], + [ + 1016, + "A6C2E716-7C33-4C21-8F6D-FD67832236CF", + 1016, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-14T00:00:00Z", + "03 05 10 26 27", + "27", + "02" + ], + [ + 1017, + "78CC6486-2735-47CA-871D-EB288034B18F", + 1017, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-17T00:00:00Z", + "16 25 28 32 40", + "03", + "03" + ], + [ + 1018, + "47263F7C-71EE-43E4-975B-3C5DF80046B7", + 1018, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-21T00:00:00Z", + "09 30 39 42 47", + "37", + "03" + ], + [ + 1019, + "B5FD41BF-5398-4E7C-A04B-6110ABD8EEED", + 1019, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-24T00:00:00Z", + "01 16 18 25 27", + "03", + "04" + ], + [ + 1020, + "2568AF78-E4B3-4C0A-9D84-EB2BBA8674C7", + 1020, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-02-28T00:00:00Z", + "06 15 29 39 51", + "36", + "03" + ], + [ + 1021, + "A33ED94D-C63F-4D5A-A22D-74A6B3B37642", + 1021, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-02T00:00:00Z", + "16 29 48 52 54", + "05", + "02" + ], + [ + 1022, + "59AE5BFB-80D6-405A-9625-2B69FCD4B05E", + 1022, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-06T00:00:00Z", + "20 24 31 33 36", + "44", + "04" + ], + [ + 1023, + "032F093E-4D73-4CBE-8326-F24E4EA1ED75", + 1023, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-09T00:00:00Z", + "09 10 27 36 42", + "11", + "04" + ], + [ + 1024, + "CA113647-C098-4AEF-A96D-15D60FB897F8", + 1024, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-13T00:00:00Z", + "02 08 30 36 48", + "31", + "03" + ], + [ + 1025, + "44AA3D24-858A-406C-B594-06AE881897FE", + 1025, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-16T00:00:00Z", + "28 29 43 51 53", + "07", + "03" + ], + [ + 1026, + "24B69175-A86E-4AFA-8907-6B9ECFFD4D90", + 1026, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-20T00:00:00Z", + "01 04 06 11 14", + "30", + "04" + ], + [ + 1027, + "2D3BF97D-85C5-4BAD-ABF3-8E2D6376AA64", + 1027, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-23T00:00:00Z", + "06 17 19 20 21", + "20", + "04" + ], + [ + 1028, + "287A0E8A-4CA3-46CD-99D5-DA0C70EA8623", + 1028, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-27T00:00:00Z", + "09 19 34 44 51", + "24", + "03" + ], + [ + 1029, + "E0CBAB93-0D60-4131-B751-AF175E839DC5", + 1029, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-03-30T00:00:00Z", + "02 04 23 38 46", + "23", + "03" + ], + [ + 1030, + "2B8F29D2-4F87-4FF3-940F-61A8BB5EAEF5", + 1030, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-03T00:00:00Z", + "11 35 38 41 52", + "40", + "04" + ], + [ + 1031, + "4C5219FC-B9CE-49D3-B015-16B2E70787E4", + 1031, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-06T00:00:00Z", + "02 19 20 24 33", + "39", + "04" + ], + [ + 1032, + "A9D5BE40-C127-4D07-B697-FF1A5C1F23D0", + 1032, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-10T00:00:00Z", + "02 06 12 31 48", + "25", + "04" + ], + [ + 1033, + "2800F10F-2350-4D18-90BD-08B9D6AB5147", + 1033, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-13T00:00:00Z", + "09 14 17 36 42", + "33", + "04" + ], + [ + 1034, + "30125944-9595-44DC-9BC2-496EF0A18A0F", + 1034, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-17T00:00:00Z", + "01 16 24 32 48", + "02", + "04" + ], + [ + 1035, + "B1EC5474-6214-4C5C-8AF8-DB582A346125", + 1035, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-20T00:00:00Z", + "14 23 26 33 35", + "40", + "03" + ], + [ + 1036, + "5F6AEAD5-C667-4EFF-93F6-55E65CDD6E53", + 1036, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-24T00:00:00Z", + "03 09 15 37 38", + "39", + "04" + ], + [ + 1037, + "0F0DA791-5E11-413F-9116-17E2CA8A4393", + 1037, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-04-27T00:00:00Z", + "02 05 45 46 47", + "37", + "04" + ], + [ + 1038, + "0C71166B-0DEE-4DC7-91B1-C07F5A983930", + 1038, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-01T00:00:00Z", + "24 27 31 45 52", + "38", + "04" + ], + [ + 1039, + "B932BD1C-ADB6-4055-BA78-6C974B288CA4", + 1039, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-04T00:00:00Z", + "04 11 21 42 53", + "38", + "04" + ], + [ + 1040, + "BE8AF87B-F38F-4E90-94AA-A7DFC3311A72", + 1040, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-08T00:00:00Z", + "02 06 08 18 51", + "19", + "03" + ], + [ + 1041, + "A94A8741-F148-4E47-8537-2D677D998EA8", + 1041, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-11T00:00:00Z", + "03 15 29 35 54", + "08", + "04" + ], + [ + 1042, + "72D8AD79-C9F3-4DF2-BADF-3DE68622F209", + 1042, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-15T00:00:00Z", + "10 11 12 14 24", + "06", + "04" + ], + [ + 1043, + "6C599BA2-2F12-42D0-92BD-08C0C744DC82", + 1043, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-18T00:00:00Z", + "03 11 22 34 49", + "01", + "04" + ], + [ + 1044, + "723FDBC5-CFF6-4E47-BF82-2239FFD02151", + 1044, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-22T00:00:00Z", + "10 14 35 43 52", + "16", + "02" + ], + [ + 1045, + "A5BBE96D-3E42-4E92-BDCB-EB8AE2FEE2E6", + 1045, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-25T00:00:00Z", + "09 15 21 40 54", + "11", + "04" + ], + [ + 1046, + "305F4750-B4FE-4239-94CC-200981921FE8", + 1046, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-05-29T00:00:00Z", + "02 14 29 53 55", + "31", + "03" + ], + [ + 1047, + "BED1DE4C-7487-4697-ABB0-6EE0DE1D4C04", + 1047, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-01T00:00:00Z", + "02 27 38 46 52", + "45", + "03" + ], + [ + 1048, + "B6CC489D-1533-43CA-89AA-DEC3FA71868C", + 1048, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-05T00:00:00Z", + "37 39 42 53 55", + "22", + "03" + ], + [ + 1049, + "B282494C-029B-48A5-A971-BA1921A48F9C", + 1049, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-08T00:00:00Z", + "04 09 34 40 48", + "25", + "03" + ], + [ + 1050, + "705B58FB-961E-4DFB-9CE5-DD699AE6FE85", + 1050, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-12T00:00:00Z", + "02 09 17 34 50", + "45", + "04" + ], + [ + 1051, + "1AA6BC29-665A-4273-A019-CB18A0EF7E50", + 1051, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-15T00:00:00Z", + "08 12 18 30 40", + "04", + "03" + ], + [ + 1052, + "D28DA568-A586-4B07-BFCA-B6EFFF9E1E31", + 1052, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-19T00:00:00Z", + "11 21 27 30 53", + "11", + "02" + ], + [ + 1053, + "3AF12744-1D00-4BAC-8FA5-2843BBA1A78D", + 1053, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-22T00:00:00Z", + "10 16 19 32 36", + "13", + "03" + ], + [ + 1054, + "8EAB153B-B676-4A10-A75F-8360F91F7055", + 1054, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-26T00:00:00Z", + "03 16 23 35 36", + "20", + "04" + ], + [ + 1055, + "5352FDFD-E36E-422B-ADA4-587EC8275C8F", + 1055, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-06-29T00:00:00Z", + "28 34 39 45 53", + "34", + "04" + ], + [ + 1056, + "26E044FD-9174-44BF-9C91-E9FA6815CEF0", + 1056, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-03T00:00:00Z", + "03 04 24 36 52", + "45", + "04" + ], + [ + 1057, + "2FA5C720-4FDC-4A9F-B91F-07D4A92EA36C", + 1057, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-06T00:00:00Z", + "20 23 28 35 39", + "21", + "03" + ], + [ + 1058, + "7A122C50-A85E-403D-B68B-93290FAAC6D0", + 1058, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-10T00:00:00Z", + "03 11 19 23 36", + "21", + "04" + ], + [ + 1059, + "5478F179-CB82-4D15-8BFF-406E7560B55C", + 1059, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-13T00:00:00Z", + "06 07 13 24 46", + "34", + "02" + ], + [ + 1060, + "87740C9F-5839-4E38-8941-538016EB7A1B", + 1060, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-17T00:00:00Z", + "01 13 21 49 55", + "17", + "04" + ], + [ + 1061, + "E8F5ECD9-405B-4DDC-BB35-6247149D2DD7", + 1061, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-20T00:00:00Z", + "02 44 48 50 52", + "03", + "03" + ], + [ + 1062, + "21E69FF5-7872-4D58-AD7D-419F6B34AB5B", + 1062, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-24T00:00:00Z", + "05 09 38 46 51", + "05", + "04" + ], + [ + 1063, + "2714EA68-34BE-4055-8BC1-C907DE0D79FD", + 1063, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-27T00:00:00Z", + "02 03 04 08 43", + "26", + "03" + ], + [ + 1064, + "F0BBD71B-BB7C-4A97-8582-F86CA8B2F948", + 1064, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-07-31T00:00:00Z", + "05 18 21 29 41", + "37", + "03" + ], + [ + 1065, + "D86272A6-5D75-425F-A394-6165EA82158F", + 1065, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-03T00:00:00Z", + "02 10 13 38 46", + "02", + "03" + ], + [ + 1066, + "24D037E0-9557-4E57-AEB6-EECC0B19A7EE", + 1066, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-07T00:00:00Z", + "30 32 33 42 48", + "07", + "04" + ], + [ + 1067, + "50ECF7BF-2414-4BDA-837F-37F70F919736", + 1067, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-10T00:00:00Z", + "10 18 36 38 44", + "08", + "04" + ], + [ + 1068, + "49E869CF-430E-40E1-9505-A56BF9E5C452", + 1068, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-14T00:00:00Z", + "15 23 34 39 55", + "32", + "04" + ], + [ + 1069, + "4C5FA5C7-BA64-457B-86B4-0E8DB3627DBA", + 1069, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-17T00:00:00Z", + "08 20 24 35 56", + "24", + "03" + ], + [ + 1070, + "81506B15-2BAB-43FE-B9D7-9C71A8AF4EE9", + 1070, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-21T00:00:00Z", + "05 13 20 23 33", + "30", + "02" + ], + [ + 1071, + "952B076F-8AE1-400D-93BA-9867E014DFA2", + 1071, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-24T00:00:00Z", + "25 34 45 46 49", + "34", + "02" + ], + [ + 1072, + "3AFF5326-08D1-4F56-BEAE-51B9F7D0996A", + 1072, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-28T00:00:00Z", + "04 09 40 45 50", + "39", + "04" + ], + [ + 1073, + "537C9CD1-1310-4E5E-809B-D3E090056EE7", + 1073, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-08-31T00:00:00Z", + "31 40 41 47 48", + "45", + "03" + ], + [ + 1074, + "DF515955-CF4F-45B9-9936-F22EAF2DB035", + 1074, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-04T00:00:00Z", + "16 32 39 41 53", + "16", + "03" + ], + [ + 1075, + "C58215A7-C613-40B9-8927-C97403B4E82E", + 1075, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-07T00:00:00Z", + "15 32 38 42 46", + "31", + "04" + ], + [ + 1076, + "245ED977-E62E-4E8C-B64C-B17A1402870B", + 1076, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-11T00:00:00Z", + "05 11 20 33 36", + "11", + "03" + ], + [ + 1077, + "9F3F66A2-40BD-4955-B76E-EDCEBBAB20B0", + 1077, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-14T00:00:00Z", + "16 17 21 40 51", + "20", + "04" + ], + [ + 1078, + "2BE42A83-7582-4311-976D-63325F6C3321", + 1078, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-18T00:00:00Z", + "05 09 22 36 49", + "36", + "03" + ], + [ + 1079, + "DF65731A-4ADB-4724-B5B1-C2D61E1D39E6", + 1079, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-21T00:00:00Z", + "03 13 14 46 55", + "34", + "04" + ], + [ + 1080, + "7EF88A92-5329-4F32-8B37-43827B42F8D5", + 1080, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-25T00:00:00Z", + "07 08 23 50 51", + "26", + "03" + ], + [ + 1081, + "DFF13765-B557-4D84-80BF-8020B16F7107", + 1081, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-09-28T00:00:00Z", + "06 08 14 43 56", + "28", + "04" + ], + [ + 1082, + "E85924F2-4908-48C8-B845-CF32BE2D6D82", + 1082, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-02T00:00:00Z", + "10 11 20 42 55", + "09", + "04" + ], + [ + 1083, + "4136F9B6-D4E6-406E-A256-F09FE9C08F6A", + 1083, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-05T00:00:00Z", + "08 09 16 32 39", + "15", + "03" + ], + [ + 1084, + "8FC75879-BBB0-4BFD-817D-DFAC4BC5FC53", + 1084, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-09T00:00:00Z", + "06 15 16 22 37", + "03", + "04" + ], + [ + 1085, + "DA6C0387-AAC5-4D7B-8AB8-ACFB2DE932D7", + 1085, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-12T00:00:00Z", + "06 10 24 26 42", + "15", + "04" + ], + [ + 1086, + "77632ABE-F1FE-4DF7-9A02-4F3971F88C0A", + 1086, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-16T00:00:00Z", + "13 37 40 46 52", + "29", + "04" + ], + [ + 1087, + "35A41C79-9F9F-4051-8324-4E01959AF6F2", + 1087, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-19T00:00:00Z", + "14 34 36 48 53", + "42", + "03" + ], + [ + 1088, + "C43C079A-8259-46AE-AD0C-C1171C0D9702", + 1088, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-23T00:00:00Z", + "01 17 42 46 55", + "01", + "02" + ], + [ + 1089, + "46175276-4C66-4662-A23B-43E736DA2823", + 1089, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-26T00:00:00Z", + "04 15 24 36 40", + "44", + "02" + ], + [ + 1090, + "717D3849-2E82-4B11-8869-916662186A7D", + 1090, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-10-30T00:00:00Z", + "05 12 18 29 56", + "38", + "04" + ], + [ + 1091, + "37B75EFB-58C1-4F42-8B5C-F8EC5B381204", + 1091, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-02T00:00:00Z", + "04 18 22 38 44", + "24", + "03" + ], + [ + 1092, + "BA9E7188-173F-4C06-94C2-FA01ED9B3A64", + 1092, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-06T00:00:00Z", + "03 05 13 32 35", + "06", + "03" + ], + [ + 1093, + "D4EF0869-D9F0-4ADC-BE7B-356178EBA83A", + 1093, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-09T00:00:00Z", + "18 22 33 35 40", + "11", + "04" + ], + [ + 1094, + "167AB7D8-1685-45F9-B174-BBD1A7209F65", + 1094, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-13T00:00:00Z", + "06 12 31 46 56", + "34", + "02" + ], + [ + 1095, + "00FEB10F-0562-4691-9475-2E8DBF917745", + 1095, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-16T00:00:00Z", + "05 24 26 29 53", + "36", + "04" + ], + [ + 1096, + "FF917F07-13CC-4BA0-B947-7317F69BBD5D", + 1096, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-20T00:00:00Z", + "09 13 22 38 52", + "44", + "04" + ], + [ + 1097, + "EDE051F2-8DAF-4C2B-A7EE-A86E4C90C301", + 1097, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-23T00:00:00Z", + "08 37 44 47 48", + "27", + "04" + ], + [ + 1098, + "4FF05C3B-F34D-489D-A3BD-BF21FC01E90D", + 1098, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-27T00:00:00Z", + "05 12 26 42 49", + "24", + "04" + ], + [ + 1099, + "2CE2BB7D-AC4B-4524-8A19-EAEC23D1DB03", + 1099, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-11-30T00:00:00Z", + "11 22 24 28 31", + "46", + "03" + ], + [ + 1100, + "59EC55D3-6A65-4B9E-B764-A97714792364", + 1100, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-04T00:00:00Z", + "03 19 24 32 43", + "44", + "04" + ], + [ + 1101, + "F5EB2D52-1B44-493A-AAE3-7B024D35A473", + 1101, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-07T00:00:00Z", + "07 43 44 51 56", + "04", + "03" + ], + [ + 1102, + "4514531E-80EE-4556-B1A1-988590D025CC", + 1102, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-11T00:00:00Z", + "39 44 51 52 54", + "13", + "04" + ], + [ + 1103, + "B81A703D-FAC1-44E6-9686-652FD8271F71", + 1103, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-14T00:00:00Z", + "11 28 33 41 43", + "41", + "04" + ], + [ + 1104, + "7CEC7CB4-D889-44F3-8B63-6F8E50BD311A", + 1104, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-18T00:00:00Z", + "01 06 07 18 29", + "16", + "03" + ], + [ + 1105, + "F932DB93-4B9E-4563-A4B8-77E44190251B", + 1105, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-21T00:00:00Z", + "03 18 32 41 56", + "19", + "03" + ], + [ + 1106, + "F9751A75-3897-4B2A-A8B6-41481F808EB6", + 1106, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-25T00:00:00Z", + "02 03 18 34 48", + "36", + "04" + ], + [ + 1107, + "802578FB-DD16-4547-935D-D1148FBA842D", + 1107, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2012-12-28T00:00:00Z", + "10 13 32 40 41", + "32", + "04" + ], + [ + 1108, + "52CE7186-5986-428E-A395-B1C5D65A0BC0", + 1108, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-01T00:00:00Z", + "04 11 21 25 44", + "29", + "04" + ], + [ + 1109, + "AFC4FC11-6440-4195-A4D7-7BABF693798C", + 1109, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-04T00:00:00Z", + "01 02 23 25 55", + "39", + "04" + ], + [ + 1110, + "C7038282-827D-49CE-9421-AE78FADC4136", + 1110, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-08T00:00:00Z", + "03 20 21 38 42", + "19", + "04" + ], + [ + 1111, + "A1EE93AE-0700-4CEB-AAC1-E400CE47CF5E", + 1111, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-11T00:00:00Z", + "24 29 30 34 56", + "01", + "04" + ], + [ + 1112, + "6E6B28D8-DA3A-4A18-ACAA-ED5FBEE6F765", + 1112, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-15T00:00:00Z", + "01 06 12 19 41", + "14", + "04" + ], + [ + 1113, + "1CDA422F-6161-45AB-A608-3265EE8A02DF", + 1113, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-18T00:00:00Z", + "08 18 25 42 49", + "14", + "03" + ], + [ + 1114, + "D9BF1554-63B5-4AAB-B731-BDAC2ED2B49C", + 1114, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-22T00:00:00Z", + "07 11 16 39 54", + "13", + "03" + ], + [ + 1115, + "D9E2F748-C7A5-498C-9C34-ACCF4CD59C53", + 1115, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-25T00:00:00Z", + "11 12 17 31 48", + "01", + "04" + ], + [ + 1116, + "D354463F-ED6D-4C64-97BD-02F99BBFE12D", + 1116, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-01-29T00:00:00Z", + "08 12 27 46 47", + "06", + "03" + ], + [ + 1117, + "344BF005-5F14-456D-8F66-B045F0BDD0CF", + 1117, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-01T00:00:00Z", + "01 30 32 40 41", + "17", + "03" + ], + [ + 1118, + "FF269451-6A86-4792-86A0-F47F087E7B8C", + 1118, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-05T00:00:00Z", + "02 05 10 26 44", + "46", + "04" + ], + [ + 1119, + "946D9BF5-21CE-445F-9B54-23C00BF6B9A4", + 1119, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-08T00:00:00Z", + "06 15 20 39 50", + "05", + "04" + ], + [ + 1120, + "CCE92EEE-5DFE-46DC-A811-FB8FB6C42BDE", + 1120, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-12T00:00:00Z", + "09 22 32 38 55", + "44", + "03" + ], + [ + 1121, + "6E8DC59E-A1D3-4BE3-AD94-C9DDC798BCFD", + 1121, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-15T00:00:00Z", + "11 35 41 42 44", + "42", + "04" + ], + [ + 1122, + "267D0BD4-D7EF-4376-95B2-D11B5E4E4D2E", + 1122, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-19T00:00:00Z", + "01 15 19 30 56", + "28", + "03" + ], + [ + 1123, + "8E59FD84-CE6F-4F32-8BD6-24F2B2C6761A", + 1123, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-22T00:00:00Z", + "09 13 24 38 49", + "30", + "03" + ], + [ + 1124, + "CE025393-8E66-4A35-9785-3AF57314120E", + 1124, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-02-26T00:00:00Z", + "06 07 13 15 43", + "07", + "04" + ], + [ + 1125, + "41BAA06F-92DA-4FBD-BD08-6E0F30CC74EE", + 1125, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-03-01T00:00:00Z", + "17 30 38 43 51", + "20", + "04" + ], + [ + 1126, + "3C759335-70F9-43D8-8579-B10EE02BBA92", + 1126, + 1362743863, + "706580", + 1362743863, + "706580", + "{\n}", + "2013-03-05T00:00:00Z", + "06 20 39 41 46", + "42", + "03" + ], + [ + 1128, + "3BEE54D7-5827-423D-A45B-57280225C64B", + 1128, + 1363348969, + "708543", + 1363348969, + "708543", + "{\n}", + "2013-03-08T00:00:00Z", + "04 11 25 34 35", + "44", + "04" + ], + [ + 1129, + "9BA95032-4CD2-47C0-8849-B2763A756018", + 1129, + 1363348969, + "708543", + 1363348969, + "708543", + "{\n}", + "2013-03-12T00:00:00Z", + "09 12 19 20 30", + "39", + "04" + ], + [ + 1131, + "9EC242F7-CAF9-4BEE-8B68-69FFA06FD50E", + 1131, + 1365512815, + "708543", + 1365512815, + "708543", + "{\n}", + "2013-03-15T00:00:00Z", + "04 08 17 22 32", + "08", + "02" + ], + [ + 1132, + "ED91D5E6-75D0-461F-B75F-C71D05680F9A", + 1132, + 1365512815, + "708543", + 1365512815, + "708543", + "{\n}", + "2013-03-19T00:00:00Z", + "03 06 14 21 37", + "35", + "03" + ], + [ + 1133, + "484C92DF-9C91-44F8-A0D5-E6B1CA710ECE", + 1133, + 1365512815, + "708543", + 1365512815, + "708543", + "{\n}", + "2013-03-22T00:00:00Z", + "14 27 34 37 41", + "38", + "04" + ], + [ + 1134, + "3AE3734D-4290-4BFF-BEDC-6C80DFE1E017", + 1134, + 1365512815, + "708543", + 1365512815, + "708543", + "{\n}", + "2013-03-26T00:00:00Z", + "20 33 46 49 51", + "46", + "04" + ], + [ + 1135, + "D94AD183-ACB1-497A-8D41-0D4CB7C7A9B3", + 1135, + 1365512815, + "708543", + 1365512815, + "708543", + "{\n}", + "2013-03-29T00:00:00Z", + "25 31 36 46 53", + "21", + "04" + ], + [ + 1136, + "AAD7C104-063F-44FE-9871-D57F7AB15BCF", + 1136, + 1365512815, + "708543", + 1365512815, + "708543", + "{\n}", + "2013-04-02T00:00:00Z", + "07 10 14 40 47", + "34", + "04" + ], + [ + 1137, + "51CAFA51-4C1A-4680-A871-B8E95A4D5BC3", + 1137, + 1365512815, + "708543", + 1365512815, + "708543", + "{\n}", + "2013-04-05T00:00:00Z", + "08 15 23 36 41", + "05", + "03" + ], + [ + 1139, + "A6BC9F0F-78FE-46C4-A8B2-A814751D8620", + 1139, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-04-09T00:00:00Z", + "17 30 41 48 54", + "13", + "04" + ], + [ + 1140, + "31755A74-A1D7-4D79-9036-655BB9675711", + 1140, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-04-12T00:00:00Z", + "01 10 13 19 21", + "28", + "03" + ], + [ + 1141, + "C8DCB5D0-D886-4EA0-B036-2D28D8E566D2", + 1141, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-04-16T00:00:00Z", + "02 05 15 18 39", + "42", + "02" + ], + [ + 1142, + "68ACECAD-8C19-4528-9D43-66172BD23FF4", + 1142, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-04-19T00:00:00Z", + "06 08 12 22 43", + "28", + "04" + ], + [ + 1143, + "FB784F0E-D578-4096-BDB8-FE6B0AA6438B", + 1143, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-04-23T00:00:00Z", + "09 21 22 32 50", + "10", + "03" + ], + [ + 1144, + "51267C00-092E-4FAD-A0C2-0E80E5B287F8", + 1144, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-04-26T00:00:00Z", + "17 42 49 54 55", + "31", + "04" + ], + [ + 1145, + "BE7FCB7C-6D9A-4C53-9003-1762D1002834", + 1145, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-04-30T00:00:00Z", + "21 30 34 39 49", + "43", + "03" + ], + [ + 1146, + "37489A5A-AE35-4963-818A-79C81D7C420E", + 1146, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-03T00:00:00Z", + "02 20 34 42 54", + "39", + "02" + ], + [ + 1147, + "4103658B-1FCC-4C61-BD60-A25F14D7CB76", + 1147, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-07T00:00:00Z", + "01 06 13 20 51", + "31", + "04" + ], + [ + 1148, + "73828964-F4E0-4D97-9BE0-1030C96C06DD", + 1148, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-10T00:00:00Z", + "01 19 20 39 49", + "28", + "04" + ], + [ + 1149, + "CD109F37-1660-453B-B11F-E1A042F6367A", + 1149, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-14T00:00:00Z", + "06 10 12 28 32", + "38", + "04" + ], + [ + 1150, + "134C197F-4D35-46D5-97A8-363EC85C5F7A", + 1150, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-17T00:00:00Z", + "11 15 35 43 49", + "41", + "04" + ], + [ + 1151, + "D31E4D6A-1ED7-46E9-8801-C538F2B00DF8", + 1151, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-21T00:00:00Z", + "02 15 17 48 55", + "11", + "04" + ], + [ + 1152, + "67A3676C-9CE9-4AD5-AA4D-816428CD9DD6", + 1152, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-24T00:00:00Z", + "04 05 16 18 53", + "28", + "04" + ], + [ + 1153, + "2C1F1E98-3526-4DCA-99F6-3232C975FF7A", + 1153, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-28T00:00:00Z", + "04 12 25 32 54", + "36", + "04" + ], + [ + 1154, + "281321B5-0D36-4873-BA58-CFF592F88283", + 1154, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-05-31T00:00:00Z", + "02 20 26 44 46", + "26", + "03" + ], + [ + 1155, + "DE8A7985-1514-45D2-B3F4-71066E9A93EA", + 1155, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-04T00:00:00Z", + "10 11 12 20 55", + "19", + "03" + ], + [ + 1156, + "88A78BA1-75B1-4B19-B86B-E3E7A4B56DF3", + 1156, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-07T00:00:00Z", + "01 10 37 48 55", + "21", + "04" + ], + [ + 1157, + "19D77AD1-099E-4B73-867E-AE0E030A1D1B", + 1157, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-11T00:00:00Z", + "15 40 45 50 53", + "28", + "04" + ], + [ + 1158, + "6B2CFEC0-1059-42BB-8177-9884ED63A7FD", + 1158, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-14T00:00:00Z", + "02 05 31 33 34", + "20", + "04" + ], + [ + 1159, + "43196123-3624-4EAA-B62B-CDCE787D5891", + 1159, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-18T00:00:00Z", + "06 17 34 40 48", + "30", + "02" + ], + [ + 1160, + "E696EFBB-4D90-4788-AD22-DB95B76CF993", + 1160, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-21T00:00:00Z", + "03 14 17 40 50", + "03", + "03" + ], + [ + 1161, + "CF648C6E-2F7F-4E79-9CBE-A77779667BBC", + 1161, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-25T00:00:00Z", + "03 05 28 33 51", + "16", + "02" + ], + [ + 1162, + "8DE750D6-72BB-4DFE-BD37-E4B79A787AF5", + 1162, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-06-28T00:00:00Z", + "08 15 35 46 52", + "38", + "04" + ], + [ + 1163, + "F6C35A37-9C0A-497E-84AF-8C541B723501", + 1163, + 1373464329, + "708543", + 1373464329, + "708543", + "{\n}", + "2013-07-02T00:00:00Z", + "36 42 51 52 53", + "40", + "04" + ], + [ + 1165, + "B57DBFEB-3CE5-421A-B4D0-1C6FE19CD9D1", + 1165, + 1373960495, + "708543", + 1373960495, + "708543", + "{\n}", + "2013-07-05T00:00:00Z", + "02 23 41 47 54", + "42", + "04" + ], + [ + 1166, + "C39FE0CC-B623-4A5C-93B0-978C7D117C57", + 1166, + 1373960495, + "708543", + 1373960495, + "708543", + "{\n}", + "2013-07-09T00:00:00Z", + "03 21 43 45 48", + "14", + "02" + ], + [ + 1168, + "B8FC6747-8337-4895-9B3E-EBB6D585DFD1", + 1168, + 1375427752, + "708543", + 1375427752, + "708543", + "{\n}", + "2013-07-12T00:00:00Z", + "04 05 25 27 51", + "10", + "03" + ], + [ + 1169, + "8FE98420-15E7-46B3-80B8-5C969B920EF1", + 1169, + 1375427752, + "708543", + 1375427752, + "708543", + "{\n}", + "2013-07-16T00:00:00Z", + "10 14 21 40 53", + "20", + "02" + ], + [ + 1170, + "DD88EF69-CD96-4E83-89E2-6B53BD97EE73", + 1170, + 1375427752, + "708543", + 1375427752, + "708543", + "{\n}", + "2013-07-19T00:00:00Z", + "16 20 24 39 42", + "46", + "03" + ], + [ + 1171, + "1C7ADA59-1801-4B96-968C-B77854440912", + 1171, + 1375427752, + "708543", + 1375427752, + "708543", + "{\n}", + "2013-07-23T00:00:00Z", + "25 32 35 50 51", + "46", + "03" + ], + [ + 1172, + "EACD3FC7-2935-458E-AA95-44F2C20CB220", + 1172, + 1375427752, + "708543", + 1375427752, + "708543", + "{\n}", + "2013-07-26T00:00:00Z", + "04 22 23 27 38", + "42", + "04" + ], + [ + 1173, + "7DF345B2-D9AE-41E3-9C50-4820B5F6BEC7", + 1173, + 1375427752, + "708543", + 1375427752, + "708543", + "{\n}", + "2013-07-30T00:00:00Z", + "25 27 36 42 44", + "39", + "03" + ], + [ + 1175, + "6373BCDC-8BED-494F-9EF6-27C2632D5059", + 1175, + 1375712208, + "708543", + 1375712208, + "708543", + "{\n}", + "2013-08-02T00:00:00Z", + "08 21 23 25 39", + "04", + "02" + ], + [ + 1177, + "FDC98341-B359-4B13-9ACC-E56CD21D3006", + 1177, + 1376034895, + "708543", + 1376034895, + "708543", + "{\n}", + "2013-08-06T00:00:00Z", + "01 11 16 51 55", + "41", + "03" + ], + [ + 1179, + "4671157E-B666-4D37-BD2D-6BC7301F134C", + 1179, + 1376312414, + "708543", + 1376312414, + "708543", + "{\n}", + "2013-08-09T00:00:00Z", + "11 20 30 34 38", + "12", + "03" + ], + [ + 1181, + "8DDBA2CD-DB9C-4C8D-82FD-6966BE6A59E4", + 1181, + 1376486912, + "708543", + 1376486912, + "708543", + "{\n}", + "2013-08-13T00:00:00Z", + "02 31 32 37 41", + "40", + "04" + ], + [ + 1183, + "0911616E-2F9E-4473-B45B-16E2636132EE", + 1183, + 1376921184, + "708543", + 1376921184, + "708543", + "{\n}", + "2013-08-16T00:00:00Z", + "07 13 26 36 46", + "37", + "04" + ], + [ + 1185, + "54AF8A3A-8432-41BA-9DAB-4005B31898E6", + 1185, + 1377071706, + "708543", + 1377071706, + "708543", + "{\n}", + "2013-08-20T00:00:00Z", + "13 28 35 38 41", + "33", + "03" + ], + [ + 1187, + "75FE181F-FD04-449B-B905-DDE3E9D8B45A", + 1187, + 1377509016, + "708543", + 1377509016, + "708543", + "{\n}", + "2013-08-23T00:00:00Z", + "01 09 17 20 53", + "14", + "04" + ], + [ + 1189, + "AF8A2810-0255-4390-89B7-01B9CD3714B7", + 1189, + 1377695374, + "708543", + 1377695374, + "708543", + "{\n}", + "2013-08-27T00:00:00Z", + "04 07 30 36 38", + "38", + "04" + ], + [ + 1191, + "F340F4D7-005E-43A7-835C-5F437C8CE980", + 1191, + 1377918076, + "708543", + 1377918076, + "708543", + "{\n}", + "2013-08-30T00:00:00Z", + "06 19 24 43 44", + "33", + "02" + ], + [ + 1193, + "57668138-D77E-41A4-A653-A502920BAE5E", + 1193, + 1378263736, + "708543", + 1378263736, + "708543", + "{\n}", + "2013-09-03T00:00:00Z", + "04 13 14 28 41", + "28", + "03" + ], + [ + 1197, + "67057DAF-BB8E-49A3-A9E5-9C4498E7759F", + 1197, + 1378566096, + "708543", + 1378566096, + "708543", + "{\n}", + "2013-09-06T00:00:00Z", + "02 16 17 22 41", + "31", + "04" + ], + [ + 1203, + "2F3EFDD8-73E0-4577-A717-F943FE97BBD0", + 1203, + 1378868474, + "708543", + 1378868474, + "708543", + "{\n}", + "2013-09-10T00:00:00Z", + "02 12 18 54 56", + "01", + "03" + ], + [ + 1205, + "6CD062A7-159D-4079-92DB-AE8C20424C63", + 1205, + 1379127654, + "708543", + 1379127654, + "708543", + "{\n}", + "2013-09-13T00:00:00Z", + "09 22 28 48 54", + "08", + "04" + ], + [ + 1207, + "CFB168A0-A233-48E8-88B8-6EAB7721AD7B", + 1207, + 1379473264, + "708543", + 1379473264, + "708543", + "{\n}", + "2013-09-17T00:00:00Z", + "06 15 27 31 39", + "25", + "02" + ], + [ + 1209, + "B7FB8DDD-3DC7-472E-8C06-CDF77B7A1D20", + 1209, + 1379732475, + "708543", + 1379732475, + "708543", + "{\n}", + "2013-09-20T00:00:00Z", + "01 15 20 21 47", + "34", + "02" + ], + [ + 1211, + "7A049284-67B5-4A91-AF01-9914E831CDA7", + 1211, + 1380078065, + "708543", + 1380078065, + "708543", + "{\n}", + "2013-09-24T00:00:00Z", + "04 11 32 39 40", + "33", + "03" + ], + [ + 1213, + "7D185A57-BF93-48FC-89C5-13047BB01971", + 1213, + 1380337279, + "708543", + 1380337279, + "708543", + "{\n}", + "2013-09-27T00:00:00Z", + "09 23 27 49 51", + "38", + "02" + ], + [ + 1215, + "C521C07D-8F39-415E-B899-05489EEECD08", + 1215, + 1380682866, + "708543", + 1380682866, + "708543", + "{\n}", + "2013-10-01T00:00:00Z", + "07 10 30 37 53", + "01", + "03" + ], + [ + 1217, + "DA977317-43B0-4A2D-A0DE-BBD02E216397", + 1217, + 1380942064, + "708543", + 1380942064, + "708543", + "{\n}", + "2013-10-04T00:00:00Z", + "04 16 24 25 44", + "05", + "03" + ], + [ + 1219, + "178C758D-E83D-45DA-8B41-5FC1668DF08D", + 1219, + 1381287665, + "708543", + 1381287665, + "708543", + "{\n}", + "2013-10-08T00:00:00Z", + "06 15 19 23 40", + "05", + "03" + ], + [ + 1221, + "B591BCA6-8B28-4784-8291-E22BAA150DC9", + 1221, + 1381546854, + "708543", + 1381546854, + "708543", + "{\n}", + "2013-10-11T00:00:00Z", + "03 27 37 45 48", + "46", + "04" + ], + [ + 1223, + "1D2A1993-B0E0-4D79-AAB5-4CDD63EBBE74", + 1223, + 1381892445, + "708543", + 1381892445, + "708543", + "{\n}", + "2013-10-15T00:00:00Z", + "04 23 30 43 50", + "11", + "04" + ], + [ + 1225, + "05047244-5520-4963-9631-FB059B1D818D", + 1225, + 1382497255, + "708543", + 1382497255, + "708543", + "{\n}", + "2013-10-22T00:00:00Z", + "02 03 19 52 71", + "14", + "05" + ], + [ + 1227, + "F67117B4-9506-4B0F-AFB3-2068AFC40EBD", + 1227, + 1382756454, + "708543", + 1382756454, + "708543", + "{\n}", + "2013-10-25T00:00:00Z", + "06 16 45 54 60", + "15", + "02" + ], + [ + 1229, + "A1912FEE-CCAD-4455-BA2A-C7B70FFBEFA0", + 1229, + 1383102063, + "708543", + 1383102063, + "708543", + "{\n}", + "2013-10-29T00:00:00Z", + "20 33 50 53 54", + "07", + "03" + ], + [ + 1231, + "EF38518A-5261-432F-8C5A-AB1DB4938019", + 1231, + 1383361276, + "708543", + 1383361276, + "708543", + "{\n}", + "2013-11-01T00:00:00Z", + "32 35 49 62 67", + "01", + "05" + ], + [ + 1233, + "EBE1179F-A084-44F1-9CE4-93DAA1E8B5EA", + 1233, + 1383706866, + "708543", + 1383706866, + "708543", + "{\n}", + "2013-11-05T00:00:00Z", + "02 11 42 64 74", + "02", + "05" + ], + [ + 1235, + "2621B189-2DA4-4442-81E3-A5C5B3C45E9C", + 1235, + 1383966043, + "708543", + 1383966043, + "708543", + "{\n}", + "2013-11-08T00:00:00Z", + "41 42 51 57 65", + "07", + "02" + ], + [ + 1237, + "240EC7B3-968C-49A8-8964-6BA21C62B9B0", + 1237, + 1384335595, + "708543", + 1384335595, + "708543", + "{\n}", + "2013-11-12T00:00:00Z", + "20 30 32 42 71", + "15", + "05" + ], + [ + 1239, + "0DE2D9C9-90A2-4935-AD2C-3E83D65F9146", + 1239, + 1384571065, + "708543", + 1384571065, + "708543", + "{\n}", + "2013-11-15T00:00:00Z", + "25 44 49 54 63", + "08", + "04" + ], + [ + 1241, + "7935AC34-8C2D-41B9-AD70-D961EA870C52", + 1241, + 1384916445, + "708543", + 1384916445, + "708543", + "{\n}", + "2013-11-19T00:00:00Z", + "14 15 29 49 63", + "02", + "03" + ], + [ + 1243, + "28E02973-21FA-4667-8338-1EAD00A18DD3", + 1243, + 1385175654, + "708543", + 1385175654, + "708543", + "{\n}", + "2013-11-22T00:00:00Z", + "17 23 35 36 44", + "08", + "03" + ], + [ + 1245, + "78A29F4C-E6D8-4220-9BAF-A39EC86B01B1", + 1245, + 1385521297, + "708543", + 1385521297, + "708543", + "{\n}", + "2013-11-26T00:00:00Z", + "27 44 59 74 75", + "03", + "05" + ], + [ + 1247, + "23D353A9-9DA9-48CF-831F-1A1814B3338F", + 1247, + 1385780464, + "708543", + 1385780464, + "708543", + "{\n}", + "2013-11-29T00:00:00Z", + "09 41 43 47 57", + "05", + "04" + ], + [ + 1249, + "F65A0532-2E1D-4F37-8DC8-4393915B1311", + 1249, + 1386126046, + "708543", + 1386126046, + "708543", + "{\n}", + "2013-12-03T00:00:00Z", + "07 12 41 44 59", + "03", + "03" + ], + [ + 1251, + "B2E81356-B8CB-401B-BB42-2B76AD3FF125", + 1251, + 1386385254, + "708543", + 1386385254, + "708543", + "{\n}", + "2013-12-06T00:00:00Z", + "11 29 44 63 64", + "03", + "03" + ], + [ + 1253, + "418BDDC3-6283-4D2B-932E-25AE4BE0E39A", + 1253, + 1386730867, + "708543", + 1386730867, + "708543", + "{\n}", + "2013-12-10T00:00:00Z", + "05 12 22 41 65", + "13", + "02" + ], + [ + 1255, + "9C4371B8-472D-43C9-909F-A2C4853559ED", + 1255, + 1386990065, + "708543", + 1386990065, + "708543", + "{\n}", + "2013-12-13T00:00:00Z", + "19 24 26 27 70", + "12", + "02" + ], + [ + 1257, + "026F619A-B4D9-424B-AF29-10337E920A41", + 1257, + 1387335655, + "708543", + 1387335655, + "708543", + "{\n}", + "2013-12-17T00:00:00Z", + "08 14 17 20 39", + "07", + "04" + ], + [ + 1259, + "68BF57AC-6C45-4467-B7A8-B779BDC0962D", + 1259, + 1387594857, + "708543", + 1387594857, + "708543", + "{\n}", + "2013-12-20T00:00:00Z", + "03 04 31 49 57", + "06", + "02" + ], + [ + 1261, + "6DB61C6B-B71C-423D-A1CE-1339FCAB9E4A", + 1261, + 1387940464, + "708543", + 1387940464, + "708543", + "{\n}", + "2013-12-24T00:00:00Z", + "23 34 53 58 73", + "02", + "03" + ], + [ + 1263, + "F015A899-E4DE-4107-93A9-8A2B153B86CF", + 1263, + 1388286160, + "708543", + 1388286160, + "708543", + "{\n}", + "2013-12-27T00:00:00Z", + "04 15 35 48 49", + "11", + "05" + ], + [ + 1265, + "BEB24506-D802-409A-A5F2-BBFFDA30EF3F", + 1265, + 1388545256, + "708543", + 1388545256, + "708543", + "{\n}", + "2013-12-31T00:00:00Z", + "08 12 34 52 58", + "08", + "03" + ], + [ + 1267, + "42CF4EA0-F05B-47C9-96C4-0988DBFB9E43", + 1267, + 1388804475, + "708543", + 1388804475, + "708543", + "{\n}", + "2014-01-03T00:00:00Z", + "22 24 25 40 70", + "05", + "05" + ], + [ + 1269, + "759EF80C-6780-4CC8-A27B-F715230A2FB2", + 1269, + 1389150065, + "708543", + 1389150065, + "708543", + "{\n}", + "2014-01-07T00:00:00Z", + "13 34 56 62 64", + "06", + "05" + ], + [ + 1271, + "10DAB9D2-46FC-449B-8B66-EBF65D9FD40C", + 1271, + 1389409265, + "708543", + 1389409265, + "708543", + "{\n}", + "2014-01-10T00:00:00Z", + "08 28 36 37 57", + "08", + "03" + ], + [ + 1273, + "9A60089C-24F6-424F-B5CB-D4CCBE7F5988", + 1273, + 1389754865, + "708543", + 1389754865, + "708543", + "{\n}", + "2014-01-14T00:00:00Z", + "04 23 26 62 69", + "13", + "03" + ], + [ + 1275, + "FA057396-A897-42CD-A4FC-6CA5ABBA1C4F", + 1275, + 1390014118, + "708543", + 1390014118, + "708543", + "{\n}", + "2014-01-17T00:00:00Z", + "01 10 26 31 51", + "11", + "04" + ], + [ + 1277, + "D3DFB854-FC39-4840-8827-7D1019D3DA67", + 1277, + 1390359685, + "708543", + 1390359685, + "708543", + "{\n}", + "2014-01-21T00:00:00Z", + "08 23 33 45 52", + "04", + "04" + ], + [ + 1279, + "B9C11D6D-6EAF-46DA-888F-3631F2F8F57F", + 1279, + 1390618854, + "708543", + 1390618854, + "708543", + "{\n}", + "2014-01-24T00:00:00Z", + "22 45 46 47 65", + "10", + "05" + ], + [ + 1281, + "6C8D1F24-E450-49BB-BCC0-3E6EAE0FE1EB", + 1281, + 1390964455, + "708543", + 1390964455, + "708543", + "{\n}", + "2014-01-28T00:00:00Z", + "07 16 28 53 60", + "02", + "03" + ], + [ + 1283, + "382CEE0F-C829-4AFF-BF00-8B39312C4F9C", + 1283, + 1391223655, + "708543", + 1391223655, + "708543", + "{\n}", + "2014-01-31T00:00:00Z", + "03 09 13 47 52", + "08", + "04" + ], + [ + 1285, + "86776381-2947-4FA4-86FC-F558D7CC86E5", + 1285, + 1391569286, + "708543", + 1391569286, + "708543", + "{\n}", + "2014-02-04T00:00:00Z", + "25 44 49 60 73", + "09", + "03" + ], + [ + 1287, + "873B54D5-CB06-4D9B-A0D7-A48660F76ADD", + 1287, + 1391828465, + "708543", + 1391828465, + "708543", + "{\n}", + "2014-02-07T00:00:00Z", + "11 21 23 35 64", + "10", + "03" + ], + [ + 1289, + "FD28870B-0C80-4AF1-B2DF-4C52D4D79E58", + 1289, + 1392174055, + "708543", + 1392174055, + "708543", + "{\n}", + "2014-02-11T00:00:00Z", + "43 64 67 71 73", + "04", + "02" + ], + [ + 1291, + "5159CE5E-66B0-4DB9-9DD9-5B9B4D0745FD", + 1291, + 1392433255, + "708543", + 1392433255, + "708543", + "{\n}", + "2014-02-14T00:00:00Z", + "20 28 35 71 72", + "07", + "03" + ], + [ + 1293, + "DEAFD715-D7CD-4708-B535-D9899DD4621D", + 1293, + 1392778855, + "708543", + 1392778855, + "708543", + "{\n}", + "2014-02-18T00:00:00Z", + "23 29 31 37 70", + "14", + "05" + ], + [ + 1295, + "158825F3-5163-42A3-81DC-70D7B74D3F97", + 1295, + 1393038044, + "708543", + 1393038044, + "708543", + "{\n}", + "2014-02-21T00:00:00Z", + "23 29 32 45 46", + "15", + "05" + ], + [ + 1297, + "40802F04-A3AC-43C2-9734-1D1DC7C3B974", + 1297, + 1393383657, + "708543", + 1393383657, + "708543", + "{\n}", + "2014-02-25T00:00:00Z", + "12 18 25 35 66", + "15", + "05" + ], + [ + 1299, + "5ACF39BD-F796-425E-9F66-CB0B27E7C6B1", + 1299, + 1393642845, + "708543", + 1393642845, + "708543", + "{\n}", + "2014-02-28T00:00:00Z", + "03 31 50 58 59", + "06", + "04" + ], + [ + 1301, + "A28FF876-2890-4BF6-99DD-C392F055CACD", + 1301, + 1393988455, + "708543", + 1393988455, + "708543", + "{\n}", + "2014-03-04T00:00:00Z", + "10 29 31 35 45", + "10", + "02" + ], + [ + 1303, + "A92F3246-6DA4-48B7-90EA-B2D9A5DBFFB3", + 1303, + 1394247656, + "708543", + 1394247656, + "708543", + "{\n}", + "2014-03-07T00:00:00Z", + "11 13 51 57 69", + "01", + "04" + ], + [ + 1305, + "FDEA8FEE-8538-40FC-AEF4-DB0F81B3EB1A", + 1305, + 1394593254, + "708543", + 1394593254, + "708543", + "{\n}", + "2014-03-11T00:00:00Z", + "09 14 56 57 69", + "10", + "04" + ], + [ + 1307, + "BCB912F4-419E-4BE3-983B-200EBAA821E3", + 1307, + 1394852454, + "708543", + 1394852454, + "708543", + "{\n}", + "2014-03-14T00:00:00Z", + "07 20 40 54 69", + "12", + "03" + ], + [ + 1309, + "1030DC1D-317C-4D87-B1B9-C06B46814C7A", + 1309, + 1395198065, + "708543", + 1395198065, + "708543", + "{\n}", + "2014-03-18T00:00:00Z", + "11 19 24 33 51", + "07", + "03" + ], + [ + 1311, + "C4CB2C86-7538-4347-9CD1-070BC0C71401", + 1311, + 1395457255, + "708543", + 1395457255, + "708543", + "{\n}", + "2014-03-21T00:00:00Z", + "02 23 30 35 53", + "10", + "05" + ], + [ + 1313, + "C836D6E0-C01E-4E00-BD1C-A14D1CF63588", + 1313, + 1395802856, + "708543", + 1395802856, + "708543", + "{\n}", + "2014-03-25T00:00:00Z", + "19 26 51 57 73", + "15", + "03" + ], + [ + 1315, + "5448D834-9CE6-4F77-AE17-19710BA851DC", + 1315, + 1396105275, + "708543", + 1396105275, + "708543", + "{\n}", + "2014-03-28T00:00:00Z", + "02 03 09 50 73", + "12", + "03" + ], + [ + 1317, + "5F48BA5C-1DC0-49F2-9AEF-8DCAE61E57CC", + 1317, + 1396407655, + "708543", + 1396407655, + "708543", + "{\n}", + "2014-04-01T00:00:00Z", + "10 23 68 74 75", + "09", + "05" + ], + [ + 1319, + "802D51AA-4C72-4264-8A00-6F1FEB1CA238", + 1319, + 1396666854, + "708543", + 1396666854, + "708543", + "{\n}", + "2014-04-04T00:00:00Z", + "01 10 15 41 54", + "09", + "02" + ], + [ + 1321, + "01F73B3B-B197-4BCE-8F02-95115A601CB5", + 1321, + 1397012466, + "708543", + 1397012466, + "708543", + "{\n}", + "2014-04-08T00:00:00Z", + "35 36 41 60 71", + "03", + "03" + ], + [ + 1323, + "6C79075A-EB20-4E77-89DB-C663CA5BF346", + 1323, + 1397271699, + "708543", + 1397271699, + "708543", + "{\n}", + "2014-04-11T00:00:00Z", + "03 42 44 47 57", + "08", + "05" + ], + [ + 1325, + "E45F48E3-1406-45F0-AB43-FE8D891EBD27", + 1325, + 1397617245, + "708543", + 1397617245, + "708543", + "{\n}", + "2014-04-15T00:00:00Z", + "04 39 46 47 70", + "13", + "03" + ], + [ + 1327, + "5EB30A7D-8459-4869-AE84-2A2DD1DB5B26", + 1327, + 1397876455, + "708543", + 1397876455, + "708543", + "{\n}", + "2014-04-18T00:00:00Z", + "18 25 38 45 63", + "09", + "02" + ], + [ + 1329, + "F7877028-A351-43B9-BD5A-D308A12C0115", + 1329, + 1398222385, + "708543", + 1398222385, + "708543", + "{\n}", + "2014-04-22T00:00:00Z", + "02 18 19 49 50", + "01", + "03" + ], + [ + 1331, + "6BD4A8B0-05E1-4C3B-BBB1-67CB07D2375D", + 1331, + 1398481352, + "708543", + 1398481352, + "708543", + "{\n}", + "2014-04-25T00:00:00Z", + "03 11 18 20 66", + "09", + "02" + ], + [ + 1333, + "AD580C79-D981-4492-9C81-4D975790086E", + 1333, + 1398826854, + "708543", + 1398826854, + "708543", + "{\n}", + "2014-04-29T00:00:00Z", + "07 43 59 61 66", + "03", + "03" + ], + [ + 1335, + "E2A087C6-174E-4627-925E-DE97C997ABED", + 1335, + 1399086054, + "708543", + 1399086054, + "708543", + "{\n}", + "2014-05-02T00:00:00Z", + "01 18 26 35 40", + "13", + "05" + ], + [ + 1337, + "2FDCA593-5848-467B-B3BF-730AED119414", + 1337, + 1399431741, + "708543", + 1399431741, + "708543", + "{\n}", + "2014-05-06T00:00:00Z", + "18 20 27 48 51", + "05", + "03" + ], + [ + 1339, + "B9E82F60-40BE-4CF4-88A5-FC6BD28807D1", + 1339, + 1399690844, + "708543", + 1399690844, + "708543", + "{\n}", + "2014-05-09T00:00:00Z", + "10 28 39 51 59", + "14", + "02" + ], + [ + 1341, + "90CF704A-3004-4DA4-BCE4-A5E1A8D717D3", + 1341, + 1400036529, + "708543", + 1400036529, + "708543", + "{\n}", + "2014-05-13T00:00:00Z", + "37 46 48 70 74", + "01", + "02" + ], + [ + 1343, + "DA1069E2-CB5D-451C-BB3C-7D1C35F561B0", + 1343, + 1400295664, + "708543", + 1400295664, + "708543", + "{\n}", + "2014-05-16T00:00:00Z", + "13 14 16 50 56", + "11", + "05" + ], + [ + 1345, + "F0CCE86A-0493-4D82-BCA8-CCE4EEBA9CB7", + 1345, + 1400641329, + "708543", + 1400641329, + "708543", + "{\n}", + "2014-05-20T00:00:00Z", + "10 40 63 64 69", + "07", + "02" + ], + [ + 1347, + "7FAD9C65-4F10-418D-B767-66A240EE8C87", + 1347, + 1400900518, + "708543", + 1400900518, + "708543", + "{\n}", + "2014-05-23T00:00:00Z", + "12 14 21 38 70", + "15", + "04" + ], + [ + 1349, + "791FB6CC-F7D0-4C9D-BFCE-4F068C0E7F4C", + 1349, + 1401246129, + "708543", + 1401246129, + "708543", + "{\n}", + "2014-05-27T00:00:00Z", + "01 06 10 46 58", + "13", + "02" + ], + [ + 1351, + "99C102A0-EE2C-4831-A852-FFDCAA15BCDC", + 1351, + 1401505329, + "708543", + 1401505329, + "708543", + "{\n}", + "2014-05-30T00:00:00Z", + "10 13 42 43 62", + "02", + "04" + ], + [ + 1353, + "CFDC3F17-1919-4AB6-B8F7-3591D7C31688", + 1353, + 1402024243, + "708543", + 1402024243, + "708543", + "{\n}", + "2014-06-03T00:00:00Z", + "19 28 62 66 74", + "06", + "03" + ], + [ + 1355, + "0FC680AA-3BF1-4785-AD94-A3088BAE1937", + 1355, + 1402110057, + "708543", + 1402110057, + "708543", + "{\n}", + "2014-06-06T00:00:00Z", + "12 29 37 49 72", + "09", + "04" + ], + [ + 1357, + "28AD4295-DD5E-483A-B44C-4C49E82467C9", + 1357, + 1402455655, + "708543", + 1402455655, + "708543", + "{\n}", + "2014-06-10T00:00:00Z", + "02 10 24 26 74", + "07", + "05" + ], + [ + 1359, + "2A70E1C3-7D5F-4525-92BD-CFCFAB3D3CBF", + 1359, + 1402714928, + "708543", + 1402714928, + "708543", + "{\n}", + "2014-06-13T00:00:00Z", + "07 38 46 49 56", + "01", + "05" + ], + [ + 1361, + "94CEE9E6-8F91-4BE7-ABCA-7B2129DC86C4", + 1361, + 1403060540, + "708543", + 1403060540, + "708543", + "{\n}", + "2014-06-17T00:00:00Z", + "10 14 24 47 60", + "03", + "04" + ], + [ + 1363, + "E71CDAAF-A30A-4D3E-9705-96DF940C1792", + 1363, + 1403319665, + "708543", + 1403319665, + "708543", + "{\n}", + "2014-06-20T00:00:00Z", + "01 22 25 29 56", + "03", + "05" + ], + [ + 1365, + "78923DD8-7B8A-4095-A4B5-DE0F205C7455", + 1365, + 1403665339, + "708543", + 1403665339, + "708543", + "{\n}", + "2014-06-24T00:00:00Z", + "13 17 24 47 65", + "10", + "04" + ], + [ + 1367, + "201A2006-4B49-4B3A-A99C-56E811DB26DB", + 1367, + 1403924475, + "708543", + 1403924475, + "708543", + "{\n}", + "2014-06-27T00:00:00Z", + "15 29 31 46 64", + "10", + "03" + ], + [ + 1369, + "B51C0FFE-A2F8-43A3-BFF9-F13ED5437EAC", + 1369, + 1404270128, + "708543", + 1404270128, + "708543", + "{\n}", + "2014-07-01T00:00:00Z", + "09 22 38 47 49", + "15", + "03" + ], + [ + 1371, + "B421489C-518C-44E2-B4E1-1739115E80A4", + 1371, + 1404529254, + "708543", + 1404529254, + "708543", + "{\n}", + "2014-07-04T00:00:00Z", + "16 33 39 58 69", + "02", + "05" + ], + [ + 1373, + "B9CC2A6E-9DDC-4D54-8BB8-C0DE58D4CCAF", + 1373, + 1404874864, + "708543", + 1404874864, + "708543", + "{\n}", + "2014-07-08T00:00:00Z", + "14 25 27 48 49", + "09", + "05" + ], + [ + 1375, + "9A035F2C-B234-4592-BF32-C88182E53A4C", + 1375, + 1405134066, + "708543", + 1405134066, + "708543", + "{\n}", + "2014-07-11T00:00:00Z", + "09 13 30 35 69", + "10", + "05" + ], + [ + 1377, + "4BF0FB2B-65A8-40DA-9DBA-697D7861AD00", + 1377, + 1405479645, + "708543", + 1405479645, + "708543", + "{\n}", + "2014-07-15T00:00:00Z", + "02 04 17 36 40", + "05", + "02" + ], + [ + 1379, + "108F044B-4621-4389-B12F-29CEACF20F30", + 1379, + 1405738855, + "708543", + 1405738855, + "708543", + "{\n}", + "2014-07-18T00:00:00Z", + "05 08 59 65 72", + "03", + "03" + ], + [ + 1381, + "D8B6033E-27F9-40AD-BE99-7F115C07D3A9", + 1381, + 1406084465, + "708543", + 1406084465, + "708543", + "{\n}", + "2014-07-22T00:00:00Z", + "14 18 22 31 47", + "15", + "03" + ], + [ + 1383, + "23AEF0BE-4851-4489-8195-0B5D084A5D76", + 1383, + 1406343656, + "708543", + 1406343656, + "708543", + "{\n}", + "2014-07-25T00:00:00Z", + "22 29 33 41 68", + "12", + "05" + ], + [ + 1385, + "781CE161-A749-41BC-8128-06367FB855CE", + 1385, + 1406689245, + "708543", + 1406689245, + "708543", + "{\n}", + "2014-07-29T00:00:00Z", + "02 08 16 43 74", + "01", + "04" + ], + [ + 1387, + "EC807140-3D55-49C4-BE48-2CD4847B5B50", + 1387, + 1406948455, + "708543", + 1406948455, + "708543", + "{\n}", + "2014-08-01T00:00:00Z", + "13 29 34 37 72", + "06", + "05" + ], + [ + 1389, + "437853F0-FAFD-4FFB-ACC5-9581E3335D29", + 1389, + 1407294066, + "708543", + 1407294066, + "708543", + "{\n}", + "2014-08-05T00:00:00Z", + "25 28 36 45 53", + "06", + "05" + ], + [ + 1391, + "283739E2-D52E-4A05-B041-C3832A4FD03F", + 1391, + 1407553265, + "708543", + 1407553265, + "708543", + "{\n}", + "2014-08-08T00:00:00Z", + "09 16 61 70 75", + "07", + "05" + ], + [ + 1393, + "F9F5E31F-0AF3-48CC-9243-EA28B055525B", + 1393, + 1407898866, + "708543", + 1407898866, + "708543", + "{\n}", + "2014-08-12T00:00:00Z", + "32 53 60 63 68", + "06", + "04" + ], + [ + 1395, + "A551D24C-0E35-43C7-AFD7-BCFC9B1A8458", + 1395, + 1408158065, + "708543", + 1408158065, + "708543", + "{\n}", + "2014-08-15T00:00:00Z", + "16 19 28 29 68", + "09", + "02" + ], + [ + 1397, + "932D43AF-18E1-4C9D-90AC-0EBB473DA2AE", + 1397, + 1408503656, + "708543", + 1408503656, + "708543", + "{\n}", + "2014-08-19T00:00:00Z", + "22 39 56 67 71", + "15", + "04" + ], + [ + 1399, + "869D1C4F-05FE-4CB7-B2B8-2226D93B2BEE", + 1399, + 1408762865, + "708543", + 1408762865, + "708543", + "{\n}", + "2014-08-22T00:00:00Z", + "05 31 34 41 74", + "03", + "05" + ], + [ + 1401, + "5DD5D9B1-0338-4C20-AA2D-6FA5E96F59E0", + 1401, + 1409108455, + "708543", + 1409108455, + "708543", + "{\n}", + "2014-08-26T00:00:00Z", + "29 31 51 60 64", + "01", + "05" + ], + [ + 1403, + "068A5120-3B84-41C2-A798-4D29C04252EF", + 1403, + 1409367666, + "708543", + 1409367666, + "708543", + "{\n}", + "2014-08-29T00:00:00Z", + "03 26 45 58 73", + "12", + "02" + ], + [ + 1405, + "E0F9E0B8-89FE-4966-A782-DC09D6359977", + 1405, + 1409713276, + "708543", + 1409713276, + "708543", + "{\n}", + "2014-09-02T00:00:00Z", + "01 08 54 69 72", + "01", + "03" + ], + [ + 1407, + "509607B9-9609-481E-83C7-DB52AA1DFF16", + 1407, + 1409972456, + "708543", + 1409972456, + "708543", + "{\n}", + "2014-09-05T00:00:00Z", + "07 12 20 24 59", + "07", + "02" + ], + [ + 1409, + "587B5A59-F548-457D-9936-71C0D6749539", + 1409, + 1410359284, + "708543", + 1410359284, + "708543", + "{\n}", + "2014-09-09T00:00:00Z", + "25 34 55 70 71", + "01", + "04" + ], + [ + 1411, + "109218EC-770D-4D23-8FC1-170CAB79D91B", + 1411, + 1410857469, + "708543", + 1410857469, + "708543", + "{\n}", + "2014-09-12T00:00:00Z", + "18 28 33 36 42", + "07", + "03" + ], + [ + 1413, + "3B36FBD4-980C-412C-BE40-DC647C1BC1EC", + 1413, + 1410922895, + "708543", + 1410922895, + "708543", + "{\n}", + "2014-09-16T00:00:00Z", + "25 45 51 53 73", + "02", + "02" + ], + [ + 1415, + "25B65074-AEBB-4AC5-8773-26ECC64BE53B", + 1415, + 1411225291, + "708543", + 1411225291, + "708543", + "{\n}", + "2014-09-19T00:00:00Z", + "16 25 27 29 34", + "02", + "02" + ], + [ + 1417, + "5743D5F1-F6EC-4C4B-A823-8EA8F70F8472", + 1417, + 1411527691, + "708543", + 1411527691, + "708543", + "{\n}", + "2014-09-23T00:00:00Z", + "21 24 25 40 43", + "12", + "05" + ], + [ + 1419, + "3E083094-377E-4539-82CE-9DBEF1F04FF7", + 1419, + 1411786960, + "708543", + 1411786960, + "708543", + "{\n}", + "2014-09-26T00:00:00Z", + "17 26 35 46 62", + "09", + "05" + ], + [ + 1421, + "D765F55E-7EEA-407C-B053-16503F02985E", + 1421, + 1412175692, + "708543", + 1412175692, + "708543", + "{\n}", + "2014-09-30T00:00:00Z", + "03 16 52 54 61", + "06", + "05" + ], + [ + 1423, + "A2B9AB24-47CD-42F2-96AC-EEA20DD75824", + 1423, + 1412391627, + "708543", + 1412391627, + "708543", + "{\n}", + "2014-10-03T00:00:00Z", + "03 20 34 58 67", + "06", + "03" + ], + [ + 1425, + "28DCADB9-7202-4BBF-89B9-B3740E7D1DBD", + 1425, + 1412780470, + "708543", + 1412780470, + "708543", + "{\n}", + "2014-10-07T00:00:00Z", + "16 29 46 48 55", + "02", + "03" + ], + [ + 1427, + "48C60FDD-51FA-4DEA-A448-B4BA3AEEFB6F", + 1427, + 1412996487, + "708543", + 1412996487, + "708543", + "{\n}", + "2014-10-10T00:00:00Z", + "02 32 35 50 59", + "03", + "05" + ], + [ + 1429, + "141DA9CF-E55A-479C-B882-08951E859ECD", + 1429, + 1413342225, + "708543", + 1413342225, + "708543", + "{\n}", + "2014-10-14T00:00:00Z", + "11 37 46 64 68", + "15", + "03" + ], + [ + 1431, + "C9ADA820-57B4-48F6-8E63-4D73F2B38278", + 1431, + 1413601288, + "708543", + 1413601288, + "708543", + "{\n}", + "2014-10-17T00:00:00Z", + "21 31 43 56 60", + "12", + "04" + ], + [ + 1433, + "C8637DC5-F6BC-48BA-86A2-C8C3EA59D9C0", + 1433, + 1413946886, + "708543", + 1413946886, + "708543", + "{\n}", + "2014-10-21T00:00:00Z", + "05 35 37 41 66", + "11", + "05" + ], + [ + 1435, + "F66ADFB5-6426-4807-9FAD-7D32A44811FA", + 1435, + 1414206088, + "708543", + 1414206088, + "708543", + "{\n}", + "2014-10-24T00:00:00Z", + "02 14 21 28 55", + "03", + "03" + ], + [ + 1437, + "AA6A6599-1679-4CEB-A74B-B01FDC4479AF", + 1437, + 1414551686, + "708543", + 1414551686, + "708543", + "{\n}", + "2014-10-28T00:00:00Z", + "03 50 57 58 60", + "11", + "05" + ], + [ + 1439, + "540D4B98-5003-4DE4-9D65-9815DC33BB18", + 1439, + 1414810889, + "708543", + 1414810889, + "708543", + "{\n}", + "2014-10-31T00:00:00Z", + "11 29 36 58 67", + "15", + "02" + ], + [ + 1441, + "50B7B5D2-D3DF-4E29-8D09-95AF015916CB", + 1441, + 1415156491, + "708543", + 1415156491, + "708543", + "{\n}", + "2014-11-04T00:00:00Z", + "09 15 24 39 41", + "01", + "04" + ], + [ + 1443, + "5578102D-B814-45E5-88E3-92E8546BA3E7", + 1443, + 1415415687, + "708543", + 1415415687, + "708543", + "{\n}", + "2014-11-07T00:00:00Z", + "31 35 41 65 66", + "05", + "05" + ], + [ + 1445, + "BCBA72A1-AF88-480F-9F9B-EAE4D5AFC88F", + 1445, + 1415804595, + "708543", + 1415804595, + "708543", + "{\n}", + "2014-11-11T00:00:00Z", + "23 25 28 30 75", + "11", + "05" + ], + [ + 1447, + "226C67C8-8DFA-48F7-B743-25EF3F2AAF62", + 1447, + 1416193460, + "708543", + 1416193460, + "708543", + "{\n}", + "2014-11-14T00:00:00Z", + "03 49 61 62 68", + "15", + "05" + ], + [ + 1449, + "BF321267-5089-4771-B912-00DF34976A87", + 1449, + 1416452617, + "708543", + 1416452617, + "708543", + "{\n}", + "2014-11-18T00:00:00Z", + "37 39 53 68 75", + "06", + "02" + ], + [ + 1451, + "A79F946A-1E3B-4A8E-BB5E-C0C13C99C5B6", + 1451, + 1416625290, + "708543", + 1416625290, + "708543", + "{\n}", + "2014-11-21T00:00:00Z", + "03 12 35 37 63", + "15", + "02" + ], + [ + 1453, + "4533C6C0-AB19-4FE3-9CF8-15DA4CC80699", + 1453, + 1416970890, + "708543", + 1416970890, + "708543", + "{\n}", + "2014-11-25T00:00:00Z", + "10 11 29 47 56", + "04", + "02" + ], + [ + 1455, + "C42CB168-F837-46FE-9253-87B0872F4969", + 1455, + 1417230091, + "708543", + 1417230091, + "708543", + "{\n}", + "2014-11-28T00:00:00Z", + "08 26 29 36 47", + "10", + "03" + ], + [ + 1457, + "98ACB2EF-CFF0-4F85-89DB-49E3049A1B4E", + 1457, + 1417575689, + "708543", + 1417575689, + "708543", + "{\n}", + "2014-12-02T00:00:00Z", + "13 18 22 49 62", + "11", + "05" + ], + [ + 1459, + "34E52148-0F7E-4E2F-A184-88DD9FEEC593", + 1459, + 1417834897, + "708543", + 1417834897, + "708543", + "{\n}", + "2014-12-05T00:00:00Z", + "04 05 11 51 59", + "05", + "05" + ], + [ + 1461, + "5369666F-70AF-42D2-A900-6631404FCFF0", + 1461, + 1418180484, + "708543", + 1418180484, + "708543", + "{\n}", + "2014-12-09T00:00:00Z", + "27 45 49 51 52", + "14", + "05" + ], + [ + 1463, + "76484243-0CFA-4951-8699-9C0115C85933", + 1463, + 1418439700, + "708543", + 1418439700, + "708543", + "{\n}", + "2014-12-12T00:00:00Z", + "02 31 46 58 65", + "07", + "05" + ], + [ + 1465, + "7E4E9479-256F-44C8-BBDC-BD0E17AA3501", + 1465, + 1418785292, + "708543", + 1418785292, + "708543", + "{\n}", + "2014-12-16T00:00:00Z", + "41 58 68 72 73", + "01", + "05" + ], + [ + 1467, + "D2360BBD-56C2-4DD3-B532-91E07CAC7062", + 1467, + 1419044492, + "708543", + 1419044492, + "708543", + "{\n}", + "2014-12-19T00:00:00Z", + "14 18 58 59 68", + "04", + "03" + ], + [ + 1469, + "BD3EE70B-A135-4BC5-98F5-2C7B1F1AD47D", + 1469, + 1419390093, + "708543", + 1419390093, + "708543", + "{\n}", + "2014-12-23T00:00:00Z", + "04 10 31 56 66", + "07", + "03" + ], + [ + 1471, + "5787AFFB-6C5A-448E-9525-1A896D8F69C1", + 1471, + 1419649380, + "708543", + 1419649380, + "708543", + "{\n}", + "2014-12-26T00:00:00Z", + "02 05 10 20 38", + "14", + "03" + ], + [ + 1473, + "720F4D3F-A832-4C4B-A137-5051A202656B", + 1473, + 1419994895, + "708543", + 1419994895, + "708543", + "{\n}", + "2014-12-30T00:00:00Z", + "03 07 44 63 67", + "12", + "04" + ], + [ + 1475, + "1E9AC8BA-D977-4FED-BB99-2BC5277DD02F", + 1475, + 1420254092, + "708543", + 1420254092, + "708543", + "{\n}", + "2015-01-02T00:00:00Z", + "13 15 35 62 74", + "12", + "04" + ], + [ + 1477, + "03F23C47-039E-484C-BBC7-60312DF63D12", + 1477, + 1420599691, + "708543", + 1420599691, + "708543", + "{\n}", + "2015-01-06T00:00:00Z", + "12 20 27 38 75", + "04", + "03" + ], + [ + 1479, + "23409C63-89B9-441B-8CA6-8B9481C7B8DC", + 1479, + 1420858876, + "708543", + 1420858876, + "708543", + "{\n}", + "2015-01-09T00:00:00Z", + "37 49 50 56 57", + "08", + "05" + ], + [ + 1481, + "7D28878E-B1A6-4068-98A0-E6CF1825A96B", + 1481, + 1421204593, + "708543", + 1421204593, + "708543", + "{\n}", + "2015-01-13T00:00:00Z", + "12 20 25 50 51", + "07", + "05" + ], + [ + 1483, + "29F7CCC7-0AF3-4814-A461-D31C3AE51815", + 1483, + 1421463668, + "708543", + 1421463668, + "708543", + "{\n}", + "2015-01-16T00:00:00Z", + "26 32 44 45 58", + "11", + "03" + ], + [ + 1485, + "DCBEEBB5-2F0C-48DD-86C5-C61B20888290", + 1485, + 1421809296, + "708543", + 1421809296, + "708543", + "{\n}", + "2015-01-20T00:00:00Z", + "31 35 56 59 63", + "06", + "05" + ], + [ + 1487, + "7C1F426A-59E8-4DB5-AB4E-219C5325C340", + 1487, + 1422068490, + "708543", + 1422068490, + "708543", + "{\n}", + "2015-01-23T00:00:00Z", + "14 15 32 68 72", + "08", + "02" + ], + [ + 1489, + "854D8323-507E-44FC-BF64-90A934F13D29", + 1489, + 1422414088, + "708543", + 1422414088, + "708543", + "{\n}", + "2015-01-27T00:00:00Z", + "05 26 27 44 57", + "07", + "03" + ], + [ + 1491, + "52F40161-7F01-4506-96F2-5A8A98D4DAC9", + 1491, + 1422673269, + "708543", + 1422673269, + "708543", + "{\n}", + "2015-01-30T00:00:00Z", + "18 31 39 45 55", + "06", + "05" + ], + [ + 1493, + "6A0CE853-9E0D-4ED5-95A1-4E0F9E374FF0", + 1493, + 1423018893, + "708543", + 1423018893, + "708543", + "{\n}", + "2015-02-03T00:00:00Z", + "11 22 25 58 69", + "13", + "05" + ], + [ + 1495, + "BC84605C-8B57-4569-97F0-5AE244C67001", + 1495, + 1423278090, + "708543", + 1423278090, + "708543", + "{\n}", + "2015-02-06T00:00:00Z", + "05 06 17 33 68", + "13", + "03" + ], + [ + 1497, + "8E0F669E-B531-4F3B-B2BF-B2771BD94A74", + 1497, + 1423623690, + "708543", + 1423623690, + "708543", + "{\n}", + "2015-02-10T00:00:00Z", + "07 42 53 58 71", + "15", + "02" + ], + [ + 1499, + "CE96B160-24FB-402B-AA8F-4936E2D39F81", + 1499, + 1423882891, + "708543", + 1423882891, + "708543", + "{\n}", + "2015-02-13T00:00:00Z", + "04 20 44 65 74", + "14", + "03" + ], + [ + 1501, + "1488A3D6-7D6E-444A-A4F5-1CDF80F801F7", + 1501, + 1424228493, + "708543", + 1424228493, + "708543", + "{\n}", + "2015-02-17T00:00:00Z", + "06 45 50 65 66", + "01", + "05" + ], + [ + 1503, + "ECE25E72-E4CA-41C2-8700-DD99960A7BD9", + 1503, + 1424487687, + "708543", + 1424487687, + "708543", + "{\n}", + "2015-02-20T00:00:00Z", + "02 06 08 52 66", + "13", + "03" + ], + [ + 1505, + "12F983C2-99EA-4616-843D-383B1A3D3B05", + 1505, + 1424833287, + "708543", + 1424833287, + "708543", + "{\n}", + "2015-02-24T00:00:00Z", + "15 23 26 45 66", + "04", + "03" + ], + [ + 1507, + "76073F80-C906-400E-8D4C-BC2E9FE6DB1B", + 1507, + 1425092468, + "708543", + 1425092468, + "708543", + "{\n}", + "2015-02-27T00:00:00Z", + "07 49 53 60 64", + "04", + "02" + ], + [ + 1509, + "E0984802-013E-4277-85BF-2D5E8CE49EBA", + 1509, + 1425438096, + "708543", + 1425438096, + "708543", + "{\n}", + "2015-03-03T00:00:00Z", + "09 11 42 44 50", + "03", + "04" + ], + [ + 1511, + "0A3DAF39-2EB3-4650-A72F-89A45ED5FC5D", + 1511, + 1425697322, + "708543", + 1425697322, + "708543", + "{\n}", + "2015-03-06T00:00:00Z", + "30 48 55 68 73", + "05", + "03" + ], + [ + 1513, + "D6EB5B00-F0DF-4CD6-AEFB-3833C1087B69", + 1513, + 1426042905, + "708543", + 1426042905, + "708543", + "{\n}", + "2015-03-10T00:00:00Z", + "10 14 19 30 73", + "14", + "05" + ], + [ + 1515, + "FC3C62B4-CD9E-40CB-AD63-A0920FAA15FE", + 1515, + 1426302087, + "708543", + 1426302087, + "708543", + "{\n}", + "2015-03-13T00:00:00Z", + "08 22 30 42 45", + "03", + "05" + ], + [ + 1517, + "7691B527-2FDA-4AD5-A180-B935E802D9EF", + 1517, + 1426647689, + "708543", + 1426647689, + "708543", + "{\n}", + "2015-03-17T00:00:00Z", + "11 27 44 45 58", + "03", + "05" + ], + [ + 1519, + "00FAB518-D2CA-4B7A-89A4-F81F738490DC", + 1519, + 1426906887, + "708543", + 1426906887, + "708543", + "{\n}", + "2015-03-20T00:00:00Z", + "07 50 54 61 75", + "07", + "04" + ], + [ + 1521, + "606D43E5-EA21-465A-AAC0-2C70C208B935", + 1521, + 1427252484, + "708543", + 1427252484, + "708543", + "{\n}", + "2015-03-24T00:00:00Z", + "02 23 32 45 55", + "12", + "02" + ], + [ + 1523, + "3BF3F918-FD1B-4762-A373-B5D9EB016FE9", + 1523, + 1427511687, + "708543", + 1427511687, + "708543", + "{\n}", + "2015-03-27T00:00:00Z", + "17 21 36 58 70", + "03", + "05" + ], + [ + 1525, + "D1FD0F94-BB97-40B6-BD07-14B355F38EDF", + 1525, + 1427857287, + "708543", + 1427857287, + "708543", + "{\n}", + "2015-03-31T00:00:00Z", + "08 26 41 61 73", + "11", + "05" + ], + [ + 1527, + "75C70A26-B013-47F6-AB17-55C5328B66BC", + 1527, + 1428116490, + "708543", + 1428116490, + "708543", + "{\n}", + "2015-04-03T00:00:00Z", + "10 36 47 63 74", + "02", + "05" + ], + [ + 1529, + "C0FC19C0-5945-4C1F-A836-CB310E1395C3", + 1529, + 1428462088, + "708543", + 1428462088, + "708543", + "{\n}", + "2015-04-07T00:00:00Z", + "05 15 22 26 64", + "06", + "04" + ], + [ + 1531, + "BA163D58-47C9-4B0B-B432-3115631C3403", + 1531, + 1428721288, + "708543", + 1428721288, + "708543", + "{\n}", + "2015-04-10T00:00:00Z", + "06 11 32 46 68", + "09", + "02" + ], + [ + 1533, + "DB69CE29-443B-4F14-B9E5-1CAA95882FD7", + 1533, + 1429066887, + "708543", + 1429066887, + "708543", + "{\n}", + "2015-04-14T00:00:00Z", + "03 07 25 68 71", + "03", + "05" + ], + [ + 1535, + "EF4A13BC-7E42-411E-B38C-89BA969F85CC", + 1535, + 1429326089, + "708543", + 1429326089, + "708543", + "{\n}", + "2015-04-17T00:00:00Z", + "15 18 29 41 50", + "05", + "02" + ], + [ + 1537, + "02ECDBF5-B6FD-4A1D-BBF3-61C1F04A3CE2", + 1537, + 1429671687, + "708543", + 1429671687, + "708543", + "{\n}", + "2015-04-21T00:00:00Z", + "31 33 35 41 69", + "11", + "05" + ], + [ + 1539, + "9A0FE695-8393-4F33-A105-6C1BB5E9EDE9", + 1539, + 1429930889, + "708543", + 1429930889, + "708543", + "{\n}", + "2015-04-24T00:00:00Z", + "24 25 29 47 67", + "04", + "04" + ], + [ + 1541, + "A1D5F972-6D8C-4B76-A289-69E352E806CD", + 1541, + 1430276508, + "708543", + 1430276508, + "708543", + "{\n}", + "2015-04-28T00:00:00Z", + "22 27 55 58 63", + "11", + "05" + ], + [ + 1543, + "CB258EDF-076B-4199-8BFF-7E799B635D55", + 1543, + 1430535711, + "708543", + 1430535711, + "708543", + "{\n}", + "2015-05-01T00:00:00Z", + "17 18 61 66 74", + "03", + "03" + ], + [ + 1545, + "EEB76D4C-E7C1-4C74-BFEC-2296C29AEF0F", + 1545, + 1430881307, + "708543", + 1430881307, + "708543", + "{\n}", + "2015-05-05T00:00:00Z", + "11 21 42 62 71", + "07", + "05" + ], + [ + 1547, + "4E7287E0-B454-4D0D-B2CD-F7973ED0DD0B", + 1547, + 1431140494, + "708543", + 1431140494, + "708543", + "{\n}", + "2015-05-08T00:00:00Z", + "09 21 25 66 72", + "07", + "03" + ], + [ + 1549, + "F11F018E-0E2A-4FD7-88E1-C0978A87AAFD", + 1549, + 1431486108, + "708543", + 1431486108, + "708543", + "{\n}", + "2015-05-12T00:00:00Z", + "14 30 33 36 44", + "02", + "05" + ], + [ + 1551, + "9DC8A2A8-6EEB-4C6F-85D6-2E121BA31891", + 1551, + 1431745290, + "708543", + 1431745290, + "708543", + "{\n}", + "2015-05-15T00:00:00Z", + "11 17 21 36 74", + "15", + "05" + ], + [ + 1553, + "16A8B73D-D63A-471A-9575-C82B0F79348E", + 1553, + 1432090927, + "708543", + 1432090927, + "708543", + "{\n}", + "2015-05-19T00:00:00Z", + "10 12 21 29 65", + "10", + "05" + ], + [ + 1555, + "79E08881-8F9F-4152-8A46-6F4740358B15", + 1555, + 1432350090, + "708543", + 1432350090, + "708543", + "{\n}", + "2015-05-22T00:00:00Z", + "03 14 15 25 48", + "08", + "05" + ], + [ + 1557, + "16AA6E62-2764-4352-8079-E10FD79C6C0A", + 1557, + 1432695687, + "708543", + 1432695687, + "708543", + "{\n}", + "2015-05-26T00:00:00Z", + "01 39 52 69 72", + "12", + "04" + ], + [ + 1559, + "8291B987-7740-4A35-A8AA-444F1CC1E21B", + 1559, + 1432954911, + "708543", + 1432954911, + "708543", + "{\n}", + "2015-05-29T00:00:00Z", + "20 27 38 49 66", + "02", + "04" + ], + [ + 1561, + "BB565492-D644-4BD5-8127-C9CC2005DC73", + 1561, + 1433300489, + "708543", + 1433300489, + "708543", + "{\n}", + "2015-06-02T00:00:00Z", + "02 09 11 22 23", + "12", + "04" + ], + [ + 1563, + "6F42DCC6-0C62-40C6-B530-BE484E52FB3E", + 1563, + 1433559758, + "708543", + 1433559758, + "708543", + "{\n}", + "2015-06-05T00:00:00Z", + "07 22 27 41 49", + "10", + "04" + ], + [ + 1565, + "A3EE789D-9396-4CDA-8B89-899EFDB844C6", + 1565, + 1433905222, + "708543", + 1433905222, + "708543", + "{\n}", + "2015-06-09T00:00:00Z", + "06 16 17 25 36", + "07", + "05" + ], + [ + 1567, + "856CE10D-D4B2-4C16-8A18-31DF4766B6A9", + 1567, + 1434164494, + "708543", + 1434164494, + "708543", + "{\n}", + "2015-06-12T00:00:00Z", + "01 40 42 56 62", + "02", + "05" + ], + [ + 1569, + "422205F9-728E-4DFB-86C2-0CF2A12A9FD4", + 1569, + 1434510087, + "708543", + 1434510087, + "708543", + "{\n}", + "2015-06-16T00:00:00Z", + "08 19 26 56 67", + "14", + "02" + ], + [ + 1571, + "46AF2341-F648-425D-8343-117626DDD550", + 1571, + 1434769320, + "708543", + 1434769320, + "708543", + "{\n}", + "2015-06-19T00:00:00Z", + "04 35 36 52 68", + "08", + "03" + ], + [ + 1573, + "4C88ED32-DEA2-4D0D-B0BC-735ECA9A3C83", + 1573, + 1435114948, + "708543", + 1435114948, + "708543", + "{\n}", + "2015-06-23T00:00:00Z", + "06 13 38 56 70", + "02", + "05" + ], + [ + 1575, + "0FAD5736-617A-4582-A81A-3B61984F2B61", + 1575, + 1435374132, + "708543", + 1435374132, + "708543", + "{\n}", + "2015-06-26T00:00:00Z", + "12 23 33 47 50", + "03", + "05" + ], + [ + 1577, + "5E53C0D5-0652-4D7F-9F12-E3167CA63C1F", + 1577, + 1435719666, + "708543", + 1435719666, + "708543", + "{\n}", + "2015-06-30T00:00:00Z", + "11 17 34 43 50", + "15", + "04" + ], + [ + 1579, + "B9EBA90D-732D-4A17-9675-4BE770E869AF", + 1579, + 1435980252, + "708543", + 1435980252, + "708543", + "{\n}", + "2015-07-03T00:00:00Z", + "33 50 64 71 72", + "09", + "04" + ], + [ + 1581, + "F786B892-2A7D-4C1E-8C50-9044D07A78DB", + 1581, + 1436324525, + "708543", + 1436324525, + "708543", + "{\n}", + "2015-07-07T00:00:00Z", + "06 15 16 28 49", + "14", + "03" + ], + [ + 1583, + "173F799E-8486-47D5-A2E8-55D828DEDFC1", + 1583, + 1436583671, + "708543", + 1436583671, + "708543", + null, + "2015-07-10T00:00:00Z", + "24 27 45 51 54", + "08", + "03" + ], + [ + 1584, + "2885C9A3-6363-42C9-BCE8-AD2C652986CB", + 1584, + 1436929328, + "708543", + 1436929328, + "708543", + null, + "2015-07-14T00:00:00Z", + "19 24 30 35 72", + "05", + "03" + ], + [ + 1585, + "E5F4CC7B-147B-42BA-B75D-2BAE8021C6ED", + 1585, + 1437188486, + "708543", + 1437188486, + "708543", + null, + "2015-07-17T00:00:00Z", + "06 17 30 31 41", + "15", + "03" + ], + [ + 1586, + "E4A64E1F-7F45-4D23-A5BE-FB8B31FB1BC0", + 1586, + 1437534086, + "708543", + 1437534086, + "708543", + null, + "2015-07-21T00:00:00Z", + "20 30 62 65 74", + "01", + "05" + ], + [ + 1587, + "B2F7936C-6001-4234-B9B9-681131049B3D", + 1587, + 1437793264, + "708543", + 1437793264, + "708543", + null, + "2015-07-24T00:00:00Z", + "10 12 26 60 62", + "13", + "05" + ], + [ + 1588, + "CB5C79BF-C111-42EA-B656-345263A124FA", + 1588, + 1438138886, + "708543", + 1438138886, + "708543", + null, + "2015-07-28T00:00:00Z", + "08 35 61 68 75", + "15", + "05" + ], + [ + 1589, + "DBF152CB-ECCE-40CC-834A-E35E6D3198EA", + 1589, + 1438398127, + "708543", + 1438398127, + "708543", + null, + "2015-07-31T00:00:00Z", + "28 32 33 40 46", + "10", + "04" + ], + [ + 1590, + "1AAE9761-BA0D-4883-9981-BEB91B225B68", + 1590, + 1438743707, + "708543", + 1438743707, + "708543", + null, + "2015-08-04T00:00:00Z", + "02 19 44 51 57", + "14", + "02" + ], + [ + 1591, + "C72F41A6-3F86-4EA0-A05B-ECC42BF5068A", + 1591, + 1439002932, + "708543", + 1439002932, + "708543", + null, + "2015-08-07T00:00:00Z", + "01 38 53 63 66", + "10", + "03" + ], + [ + 1592, + "6FEA722E-6A92-4AAA-A853-9186C57C50F3", + 1592, + 1439348526, + "708543", + 1439348526, + "708543", + null, + "2015-08-11T00:00:00Z", + "03 08 29 57 68", + "08", + "04" + ], + [ + 1593, + "CFA8B480-20C9-4999-9546-F1A8CB997E35", + 1593, + 1439607747, + "708543", + 1439607747, + "708543", + null, + "2015-08-14T00:00:00Z", + "12 15 20 52 71", + "03", + "04" + ], + [ + 1594, + "4346D64A-3084-4333-9808-7BEA3322BB67", + 1594, + 1439953329, + "708543", + 1439953329, + "708543", + null, + "2015-08-18T00:00:00Z", + "02 07 33 39 53", + "09", + "03" + ], + [ + 1595, + "D3193CB6-30E4-4F8C-A26C-B7F0B11FC519", + 1595, + 1440212561, + "708543", + 1440212561, + "708543", + null, + "2015-08-21T00:00:00Z", + "13 15 21 41 72", + "01", + "05" + ], + [ + 1596, + "4275034A-4B46-439E-B76B-7EAE60AB3B57", + 1596, + 1440558107, + "708543", + 1440558107, + "708543", + null, + "2015-08-25T00:00:00Z", + "05 44 54 59 63", + "01", + "05" + ], + [ + 1597, + "19875C2F-4710-4402-997B-06277EB1DD3B", + 1597, + 1440817288, + "708543", + 1440817288, + "708543", + null, + "2015-08-28T00:00:00Z", + "13 35 40 60 68", + "09", + "04" + ], + [ + 1598, + "9E1E52A1-49E3-44F8-8A8B-E0AE76939ED0", + 1598, + 1441162926, + "708543", + 1441162926, + "708543", + null, + "2015-09-01T00:00:00Z", + "02 05 35 40 54", + "13", + "05" + ], + [ + 1599, + "ABBF4221-3651-4E33-9826-778CDB6160D5", + 1599, + 1441422137, + "708543", + 1441422137, + "708543", + null, + "2015-09-04T00:00:00Z", + "17 21 39 52 57", + "05", + "05" + ], + [ + 1600, + "F966B71B-2043-42CD-95C3-E1D052D0F5DC", + 1600, + 1441767706, + "708543", + 1441767706, + "708543", + null, + "2015-09-08T00:00:00Z", + "19 20 36 41 46", + "07", + "03" + ], + [ + 1601, + "6C0212B9-27FE-4779-8E1E-4E978B393488", + 1601, + 1442026906, + "708543", + 1442026906, + "708543", + null, + "2015-09-11T00:00:00Z", + "05 11 31 50 67", + "14", + "02" + ], + [ + 1602, + "951A886B-09C7-40FE-8D21-65BFE67E0E20", + 1602, + 1442372505, + "708543", + 1442372505, + "708543", + null, + "2015-09-15T00:00:00Z", + "07 20 35 49 56", + "09", + "04" + ], + [ + 1603, + "8B5F5037-DEB5-44AA-B5DE-D76E18D731DC", + 1603, + 1442631785, + "708543", + 1442631785, + "708543", + null, + "2015-09-18T00:00:00Z", + "17 34 35 51 65", + "07", + "03" + ], + [ + 1604, + "F7432096-1416-4186-AD4E-A36B61D0FDF3", + 1604, + 1442977285, + "708543", + 1442977285, + "708543", + null, + "2015-09-22T00:00:00Z", + "28 30 38 45 51", + "08", + "05" + ], + [ + 1605, + "33D70780-01EA-441A-9A4C-990859DC0629", + 1605, + 1443236506, + "708543", + 1443236506, + "708543", + null, + "2015-09-25T00:00:00Z", + "03 08 38 51 64", + "04", + "05" + ], + [ + 1606, + "C0905F04-1938-4970-AB55-09034B99C92B", + 1606, + 1443582127, + "708543", + 1443582127, + "708543", + null, + "2015-09-29T00:00:00Z", + "08 21 30 61 62", + "09", + "03" + ], + [ + 1607, + "181D106E-63BE-4A21-8A82-973C9467C233", + 1607, + 1443841309, + "708543", + 1443841309, + "708543", + null, + "2015-10-02T00:00:00Z", + "04 14 29 31 47", + "09", + "02" + ], + [ + 1608, + "E40045A0-5E29-4C8E-8CB2-6BD75D932427", + 1608, + 1444186906, + "708543", + 1444186906, + "708543", + null, + "2015-10-06T00:00:00Z", + "17 58 63 64 66", + "13", + "03" + ], + [ + 1609, + "861F130E-42CC-4654-8650-1D386AC20D62", + 1609, + 1444446107, + "708543", + 1444446107, + "708543", + null, + "2015-10-09T00:00:00Z", + "08 09 21 63 75", + "14", + "04" + ], + [ + 1610, + "ECD5BFB6-8892-41CC-B760-EDD8AAB9B93B", + 1610, + 1444791707, + "708543", + 1444791707, + "708543", + null, + "2015-10-13T00:00:00Z", + "07 09 24 38 52", + "01", + "05" + ], + [ + 1611, + "8E5AF013-320C-4B04-81E7-18A40F090924", + 1611, + 1445050907, + "708543", + 1445050907, + "708543", + null, + "2015-10-16T00:00:00Z", + "02 38 48 61 68", + "04", + "03" + ], + [ + 1612, + "3F86F0A3-0657-4C23-964C-B2597E46EED3", + 1612, + 1445396526, + "708543", + 1445396526, + "708543", + null, + "2015-10-20T00:00:00Z", + "06 25 35 38 52", + "04", + "04" + ], + [ + 1613, + "39DEFA41-D1AF-4254-ACC8-2CF8FB9196EB", + 1613, + 1445655706, + "708543", + 1445655706, + "708543", + null, + "2015-10-23T00:00:00Z", + "25 32 37 45 70", + "01", + "05" + ], + [ + 1614, + "6CF15757-6420-41C6-977F-DBD65C34F437", + 1614, + 1446001285, + "708543", + 1446001285, + "708543", + null, + "2015-10-27T00:00:00Z", + "09 26 27 29 74", + "04", + "03" + ], + [ + 1615, + "BF4C8D3B-3CD2-443A-B733-49700D3AF505", + 1615, + 1446260527, + "708543", + 1446260527, + "708543", + null, + "2015-10-30T00:00:00Z", + "17 41 51 53 56", + "15", + "05" + ], + [ + 1616, + "24AC2580-F864-456E-95BE-C6451E52DAA8", + 1616, + 1446606108, + "708543", + 1446606108, + "708543", + null, + "2015-11-03T00:00:00Z", + "16 29 44 69 74", + "12", + "05" + ], + [ + 1617, + "AF9AC066-EA3E-4A56-A549-69462973239E", + 1617, + 1446865313, + "708543", + 1446865313, + "708543", + null, + "2015-11-06T00:00:00Z", + "10 31 35 50 72", + "08", + "03" + ], + [ + 1618, + "5B523B94-4392-493C-8B77-37AAAD523BD0", + 1618, + 1447210947, + "708543", + 1447210947, + "708543", + null, + "2015-11-10T00:00:00Z", + "08 17 20 45 71", + "04", + "04" + ], + [ + 1619, + "33E35597-2F1E-4EA8-B8AE-B408573042C6", + 1619, + 1447470107, + "708543", + 1447470107, + "708543", + null, + "2015-11-13T00:00:00Z", + "17 18 31 35 59", + "09", + "05" + ], + [ + 1620, + "012E2E76-2B89-43BE-807D-24F86894DB3F", + 1620, + 1447815708, + "708543", + 1447815708, + "708543", + null, + "2015-11-17T00:00:00Z", + "12 14 18 24 61", + "10", + "03" + ], + [ + 1621, + "5C3E6FAB-3A63-45F4-BABF-0F2A7B05721A", + 1621, + 1448074906, + "708543", + 1448074906, + "708543", + null, + "2015-11-20T00:00:00Z", + "09 12 29 37 67", + "15", + "02" + ], + [ + 1622, + "50AB6256-911B-4734-B098-A1C7E029FC50", + 1622, + 1448420505, + "708543", + 1448420505, + "708543", + null, + "2015-11-24T00:00:00Z", + "02 19 30 38 70", + "08", + "04" + ], + [ + 1623, + "733C5B78-D944-42F9-9D39-206B69395C1C", + 1623, + 1448679706, + "708543", + 1448679706, + "708543", + null, + "2015-11-27T00:00:00Z", + "16 20 39 56 59", + "12", + "03" + ], + [ + 1624, + "3466B9EB-25AE-493B-9F81-A70C296687D6", + 1624, + 1449025305, + "708543", + 1449025305, + "708543", + null, + "2015-12-01T00:00:00Z", + "05 07 25 50 59", + "12", + "02" + ], + [ + 1625, + "BFDA9763-E55B-4E68-AC4A-64FC5BEA7290", + 1625, + 1449284488, + "708543", + 1449284488, + "708543", + null, + "2015-12-04T00:00:00Z", + "26 42 47 61 73", + "06", + "05" + ], + [ + 1626, + "FB3F13D9-F108-4F20-9550-5597912CFBE5", + 1626, + 1449630108, + "708543", + 1449630108, + "708543", + null, + "2015-12-08T00:00:00Z", + "07 17 37 49 73", + "15", + "03" + ], + [ + 1627, + "9E08A0BF-C5E0-48BE-B88D-D740895745C3", + 1627, + 1449889348, + "708543", + 1449889348, + "708543", + null, + "2015-12-11T00:00:00Z", + "14 20 43 54 69", + "05", + "04" + ], + [ + 1628, + "B94BCB4B-037B-4CD2-AF74-C91D52F1180F", + 1628, + 1450234926, + "708543", + 1450234926, + "708543", + null, + "2015-12-15T00:00:00Z", + "18 25 47 51 61", + "05", + "05" + ], + [ + 1629, + "B5B2B02B-14B7-4157-9A7B-EC5F8BFB91EE", + 1629, + 1450494130, + "708543", + 1450494130, + "708543", + null, + "2015-12-18T00:00:00Z", + "06 23 24 28 62", + "07", + "05" + ], + [ + 1630, + "94CC0B9B-F3D5-4AF1-91EC-2E80DA049A3E", + 1630, + 1450839805, + "708543", + 1450839805, + "708543", + null, + "2015-12-22T00:00:00Z", + "11 21 40 50 70", + "15", + "03" + ], + [ + 1631, + "7D95C3DB-8346-4A0A-99F9-8388D3455F05", + 1631, + 1451098926, + "708543", + 1451098926, + "708543", + null, + "2015-12-25T00:00:00Z", + "15 25 29 44 51", + "04", + "04" + ], + [ + 1632, + "2C7475AA-BF40-446B-AF68-4D0F75B8C6F8", + 1632, + 1451444486, + "708543", + 1451444486, + "708543", + null, + "2015-12-29T00:00:00Z", + "20 25 55 62 74", + "07", + "03" + ], + [ + 1633, + "C76B3278-31E5-4212-9F91-3A9B8FB8FEE7", + 1633, + 1451703685, + "708543", + 1451703685, + "708543", + null, + "2016-01-01T00:00:00Z", + "07 18 37 38 39", + "09", + "05" + ], + [ + 1634, + "1701538C-706D-4F58-BEAD-E85A125BAA93", + 1634, + 1452049285, + "708543", + 1452049285, + "708543", + null, + "2016-01-05T00:00:00Z", + "01 04 36 48 57", + "13", + "05" + ], + [ + 1635, + "2DECE042-B1F3-4BAF-92E2-ACC534B62171", + 1635, + 1452308424, + "708543", + 1452308424, + "708543", + null, + "2016-01-08T00:00:00Z", + "11 39 51 57 75", + "02", + "05" + ], + [ + 1636, + "59AA8588-E389-44D4-898A-B88D215B3180", + 1636, + 1452654246, + "708543", + 1452654246, + "708543", + null, + "2016-01-12T00:00:00Z", + "15 27 29 31 48", + "15", + "04" + ], + [ + 1637, + "EB18630E-DFCB-4DA9-B3C6-5D017B4CB539", + 1637, + 1452913329, + "708543", + 1452913329, + "708543", + null, + "2016-01-15T00:00:00Z", + "29 41 53 54 70", + "12", + "02" + ], + [ + 1638, + "6B3ECBDD-C850-4F5E-876A-3DFD62D39CC0", + 1638, + 1453258928, + "708543", + 1453258928, + "708543", + null, + "2016-01-19T00:00:00Z", + "02 17 31 39 47", + "09", + "02" + ], + [ + 1639, + "6CE292DA-B019-4C72-869B-33F7378737C2", + 1639, + 1453518148, + "708543", + 1453518148, + "708543", + null, + "2016-01-22T00:00:00Z", + "21 25 40 46 56", + "03", + "05" + ], + [ + 1640, + "941AFB5B-975C-451B-A1D4-9BB39C5CDE3A", + 1640, + 1453863685, + "708543", + 1453863685, + "708543", + null, + "2016-01-26T00:00:00Z", + "14 27 39 50 69", + "02", + "02" + ], + [ + 1641, + "DC2CFE1D-AF9A-4D71-A64B-7DC7F04F5F97", + 1641, + 1454122956, + "708543", + 1454122956, + "708543", + null, + "2016-01-29T00:00:00Z", + "20 28 49 51 52", + "06", + "02" + ], + [ + 1642, + "AC5D2A7E-4F80-4BDB-90A6-1D751A93ED93", + 1642, + 1454468486, + "708543", + 1454468486, + "708543", + null, + "2016-02-02T00:00:00Z", + "07 13 25 51 70", + "09", + "04" + ], + [ + 1643, + "1D000580-A2EF-43DF-9A38-DE8E08AACF5A", + 1643, + 1454727710, + "708543", + 1454727710, + "708543", + null, + "2016-02-05T00:00:00Z", + "04 06 23 55 75", + "02", + "03" + ], + [ + 1644, + "297A9E01-53D1-492F-8797-B9ED4B59084D", + 1644, + 1455073306, + "708543", + 1455073306, + "708543", + null, + "2016-02-09T00:00:00Z", + "03 42 46 56 71", + "13", + "04" + ], + [ + 1645, + "3F84D541-E559-42C0-A4CA-E18F9089AA1A", + 1645, + 1455332486, + "708543", + 1455332486, + "708543", + null, + "2016-02-12T00:00:00Z", + "01 07 44 68 73", + "01", + "03" + ], + [ + 1646, + "58DDCF16-F230-4B9A-BDA6-9FE0DB79CB4F", + 1646, + 1455678105, + "708543", + 1455678105, + "708543", + null, + "2016-02-16T00:00:00Z", + "09 31 33 46 64", + "04", + "03" + ], + [ + 1647, + "1538C7E2-86A5-4AD3-B5E1-5C3302FE635C", + 1647, + 1455937343, + "708543", + 1455937343, + "708543", + null, + "2016-02-19T00:00:00Z", + "02 27 41 50 75", + "04", + "04" + ], + [ + 1648, + "BFC5316B-4251-4DB1-8244-C6E36166125B", + 1648, + 1456282885, + "708543", + 1456282885, + "708543", + null, + "2016-02-23T00:00:00Z", + "16 32 39 53 57", + "10", + "05" + ], + [ + 1649, + "F93DA3B6-AAB1-4515-AAD0-7A6B4C31F7E6", + 1649, + 1456542125, + "708543", + 1456542125, + "708543", + null, + "2016-02-26T00:00:00Z", + "03 15 19 62 74", + "14", + "04" + ], + [ + 1650, + "DA81E261-D572-4CB3-8049-F9F396136F54", + 1650, + 1456887623, + "708543", + 1456887623, + "708543", + null, + "2016-03-01T00:00:00Z", + "01 29 33 34 55", + "06", + "05" + ], + [ + 1651, + "9CE887E3-9BF2-47C2-AED3-D6432D439626", + 1651, + 1457146912, + "708543", + 1457146912, + "708543", + null, + "2016-03-04T00:00:00Z", + "21 26 33 48 73", + "14", + "04" + ], + [ + 1652, + "F4CB0CEF-4734-48B2-BFD3-87C959B4BF60", + 1652, + 1457492506, + "708543", + 1457492506, + "708543", + null, + "2016-03-08T00:00:00Z", + "27 37 54 66 69", + "05", + "05" + ], + [ + 1653, + "E7EFFA53-90C7-4A52-BC33-A41CC6F35743", + 1653, + 1457751711, + "708543", + 1457751711, + "708543", + null, + "2016-03-11T00:00:00Z", + "14 18 48 54 71", + "13", + "04" + ], + [ + 1654, + "3B31A0E3-38D3-49F2-86FB-300A875F4FE0", + 1654, + 1458097306, + "708543", + 1458097306, + "708543", + null, + "2016-03-15T00:00:00Z", + "18 26 30 44 68", + "07", + "04" + ], + [ + 1655, + "7346468C-570F-4959-9C47-D3968389C666", + 1655, + 1458356507, + "708543", + 1458356507, + "708543", + null, + "2016-03-18T00:00:00Z", + "05 08 57 59 73", + "13", + "05" + ], + [ + 1656, + "F32E462E-EC01-48B3-99F6-AD6656CC8BAB", + 1656, + 1458702105, + "708543", + 1458702105, + "708543", + null, + "2016-03-22T00:00:00Z", + "06 19 34 38 70", + "05", + "05" + ], + [ + 1657, + "1E34E7D5-CDED-4CC3-907A-DB890B845B3C", + 1657, + 1458961346, + "708543", + 1458961346, + "708543", + null, + "2016-03-25T00:00:00Z", + "04 11 12 35 46", + "12", + "02" + ], + [ + 1658, + "2472EA19-C13B-4A4C-BB18-2770ED68FEB4", + 1658, + 1459306927, + "708543", + 1459306927, + "708543", + null, + "2016-03-29T00:00:00Z", + "33 38 40 46 49", + "15", + "05" + ], + [ + 1659, + "5EAA3253-2899-4961-A8AA-3AF3577FFB34", + 1659, + 1459566137, + "708543", + 1459566137, + "708543", + null, + "2016-04-01T00:00:00Z", + "25 28 33 41 69", + "06", + "02" + ], + [ + 1660, + "730C99CF-8304-4E8E-9DC8-37EDCB468913", + 1660, + 1459911705, + "708543", + 1459911705, + "708543", + null, + "2016-04-05T00:00:00Z", + "13 45 52 53 57", + "10", + "05" + ], + [ + 1661, + "635A8961-E360-46DC-99F2-82C35E8ADE1B", + 1661, + 1460170909, + "708543", + 1460170909, + "708543", + null, + "2016-04-08T00:00:00Z", + "31 38 52 65 71", + "15", + "03" + ], + [ + 1662, + "1684546A-9BF3-40A4-BB78-58D7E7C6EA78", + 1662, + 1460516506, + "708543", + 1460516506, + "708543", + null, + "2016-04-12T00:00:00Z", + "07 11 59 62 63", + "03", + "05" + ], + [ + 1663, + "5FAD000A-6227-42A4-B37B-5C3413481CA5", + 1663, + 1460775769, + "708543", + 1460775769, + "708543", + null, + "2016-04-15T00:00:00Z", + "09 10 34 37 73", + "09", + "05" + ], + [ + 1664, + "59F5A789-DE19-4648-B46D-196833A64927", + 1664, + 1461121307, + "708543", + 1461121307, + "708543", + null, + "2016-04-19T00:00:00Z", + "09 28 40 57 65", + "02", + "05" + ], + [ + 1665, + "1EFFFA59-5E1A-4F67-B885-4403A2EEA36B", + 1665, + 1461380489, + "708543", + 1461380489, + "708543", + null, + "2016-04-22T00:00:00Z", + "02 19 21 42 60", + "13", + "05" + ], + [ + 1666, + "3D1A81F6-FC6D-4A43-ABBD-124B3C6A15CB", + 1666, + 1461726127, + "708543", + 1461726127, + "708543", + null, + "2016-04-26T00:00:00Z", + "14 16 17 28 48", + "02", + "02" + ], + [ + 1667, + "9F063336-F99B-4B5A-B425-CAC2772F5DC5", + 1667, + 1461985308, + "708543", + 1461985308, + "708543", + null, + "2016-04-29T00:00:00Z", + "05 06 37 55 74", + "10", + "05" + ], + [ + 1668, + "9CA74EE6-461C-4AE1-96C1-7C9041086E65", + 1668, + 1462330906, + "708543", + 1462330906, + "708543", + null, + "2016-05-03T00:00:00Z", + "28 29 33 36 45", + "15", + "05" + ], + [ + 1669, + "28B4E2DD-05CD-435F-8144-373554ADCC07", + 1669, + 1462590107, + "708543", + 1462590107, + "708543", + null, + "2016-05-06T00:00:00Z", + "14 26 27 32 36", + "07", + "04" + ], + [ + 1670, + "E6136A00-E6CD-4564-9BDB-5D8658C1266F", + 1670, + 1462935706, + "708543", + 1462935706, + "708543", + null, + "2016-05-10T00:00:00Z", + "12 22 46 56 74", + "04", + "03" + ], + [ + 1671, + "144177A9-0D5C-41E0-87AA-B476C6076F11", + 1671, + 1463194908, + "708543", + 1463194908, + "708543", + null, + "2016-05-13T00:00:00Z", + "20 21 38 54 66", + "07", + "04" + ], + [ + 1672, + "77A58B0B-B6FB-43A3-99D5-C1A8962A3683", + 1672, + 1463540486, + "708543", + 1463540486, + "708543", + null, + "2016-05-17T00:00:00Z", + "17 24 27 48 75", + "06", + "03" + ], + [ + 1673, + "C90DB1FC-B9F4-44F1-BAE0-56541E75CB7C", + 1673, + 1463799716, + "708543", + 1463799716, + "708543", + null, + "2016-05-20T00:00:00Z", + "19 24 26 40 68", + "08", + "02" + ], + [ + 1674, + "31AA7AEB-7AFF-4E7C-AB41-1E61FF8D940E", + 1674, + 1464145306, + "708543", + 1464145306, + "708543", + null, + "2016-05-24T00:00:00Z", + "11 50 51 70 75", + "15", + "04" + ], + [ + 1675, + "4F63AC2C-8696-43A3-95D2-EFDBC8F93FA8", + 1675, + 1464404510, + "708543", + 1464404510, + "708543", + null, + "2016-05-27T00:00:00Z", + "18 41 50 68 70", + "09", + "03" + ], + [ + 1676, + "CFB15510-5ACA-4A3C-8120-F0B60A465B2D", + 1676, + 1464750107, + "708543", + 1464750107, + "708543", + null, + "2016-05-31T00:00:00Z", + "09 31 34 41 49", + "08", + "05" + ], + [ + 1677, + "C0EA471B-8C90-446F-948D-E5D2F022020A", + 1677, + 1465009311, + "708543", + 1465009311, + "708543", + null, + "2016-06-03T00:00:00Z", + "32 54 65 66 71", + "10", + "03" + ], + [ + 1678, + "35E2149B-4F4B-4FA7-8E33-1AFE8AABF057", + 1678, + 1465375783, + "708543", + 1465375783, + "708543", + null, + "2016-06-07T00:00:00Z", + "25 48 51 65 72", + "04", + "04" + ], + [ + 1679, + "6E874453-0778-4D7F-9713-0A4A3074D7E3", + 1679, + 1465614107, + "708543", + 1465614107, + "708543", + null, + "2016-06-10T00:00:00Z", + "34 61 66 67 68", + "07", + "05" + ], + [ + 1680, + "B21F8F34-9F29-463F-AC25-79A1FB778512", + 1680, + 1465959706, + "708543", + 1465959706, + "708543", + null, + "2016-06-14T00:00:00Z", + "36 37 38 52 62", + "06", + "05" + ], + [ + 1681, + "FF41B26A-4D95-46FD-90D6-BE358A9D7FEB", + 1681, + 1466218908, + "708543", + 1466218908, + "708543", + null, + "2016-06-17T00:00:00Z", + "20 23 30 44 59", + "09", + "05" + ], + [ + 1682, + "093F0CEB-4416-493E-BAC0-DADCBE527A9C", + 1682, + 1466564486, + "708543", + 1466564486, + "708543", + null, + "2016-06-21T00:00:00Z", + "06 13 21 49 50", + "10", + "05" + ], + [ + 1683, + "0DAE0DED-2901-4FFF-B384-08A5D8C81B7A", + 1683, + 1466823708, + "708543", + 1466823708, + "708543", + null, + "2016-06-24T00:00:00Z", + "11 14 54 57 63", + "11", + "05" + ], + [ + 1684, + "6C7CBB06-FAA1-480F-BF36-333F4BBD0CF2", + 1684, + 1467169306, + "708543", + 1467169306, + "708543", + null, + "2016-06-28T00:00:00Z", + "15 17 20 35 55", + "07", + "02" + ], + [ + 1685, + "C9B81A72-3904-4620-8449-41A9290F4FBE", + 1685, + 1467428490, + "708543", + 1467428490, + "708543", + null, + "2016-07-01T00:00:00Z", + "20 41 42 45 49", + "14", + "02" + ], + [ + 1686, + "D1A987BF-16F8-4ED2-96D9-B3E17B64D960", + 1686, + 1467774149, + "708543", + 1467774149, + "708543", + null, + "2016-07-05T00:00:00Z", + "29 46 53 64 73", + "10", + "05" + ], + [ + 1687, + "5F960802-C664-4042-9335-123EC20BE436", + 1687, + 1468033308, + "708543", + 1468033308, + "708543", + null, + "2016-07-08T00:00:00Z", + "08 19 20 55 73", + "05", + "02" + ], + [ + 1688, + "9D920794-C05B-485C-924A-9982FFD79A80", + 1688, + 1468378905, + "708543", + 1468378905, + "708543", + null, + "2016-07-12T00:00:00Z", + "06 08 22 46 68", + "04", + "04" + ], + [ + 1689, + "2144EBBB-EDA3-4E17-8BCB-A0682E6E2711", + 1689, + 1468638086, + "708543", + 1468638086, + "708543", + null, + "2016-07-15T00:00:00Z", + "16 51 52 56 58", + "04", + "02" + ], + [ + 1690, + "72A8E501-6FCD-44BE-9F14-D2428CFD296A", + 1690, + 1468983705, + "708543", + 1468983705, + "708543", + null, + "2016-07-19T00:00:00Z", + "03 34 54 65 66", + "04", + "05" + ], + [ + 1691, + "6C611C43-B591-4FB2-B377-364CC0E42915", + 1691, + 1469242907, + "708543", + 1469242907, + "708543", + null, + "2016-07-22T00:00:00Z", + "08 24 25 26 30", + "07", + "04" + ], + [ + 1692, + "984FA443-EEBD-4558-B81C-5C3067CB6BED", + 1692, + 1469588505, + "708543", + 1469588505, + "708543", + null, + "2016-07-26T00:00:00Z", + "01 04 31 36 54", + "09", + "03" + ], + [ + 1693, + "3DF563C7-1EC0-490A-AD2B-F65CC5700B89", + 1693, + 1469847706, + "708543", + 1469847706, + "708543", + null, + "2016-07-29T00:00:00Z", + "11 16 19 31 48", + "04", + "05" + ], + [ + 1694, + "4D0679B3-5476-40DD-89FE-93378295A073", + 1694, + 1470193285, + "708543", + 1470193285, + "708543", + null, + "2016-08-02T00:00:00Z", + "03 12 36 54 70", + "12", + "05" + ], + [ + 1695, + "5CB223B1-DD54-4EE5-BA4B-07A736D4DB1E", + 1695, + 1470452508, + "708543", + 1470452508, + "708543", + null, + "2016-08-05T00:00:00Z", + "05 18 28 54 74", + "06", + "04" + ], + [ + 1696, + "295B3CAA-7AD7-48EA-99C7-B607F0BD93C0", + 1696, + 1470798106, + "708543", + 1470798106, + "708543", + null, + "2016-08-09T00:00:00Z", + "12 19 20 44 66", + "01", + "05" + ], + [ + 1697, + "2D055176-5D79-486C-8319-DE5093C0C312", + 1697, + 1471057309, + "708543", + 1471057309, + "708543", + null, + "2016-08-12T00:00:00Z", + "04 41 44 56 69", + "10", + "04" + ], + [ + 1698, + "E3A9ADEA-B623-49E8-ABBB-51BB2E3D316E", + 1698, + 1471402905, + "708543", + 1471402905, + "708543", + null, + "2016-08-16T00:00:00Z", + "02 43 52 62 63", + "06", + "05" + ], + [ + 1699, + "B905E132-9D91-4425-A6B8-6912D3A5690B", + 1699, + 1471687310, + "708543", + 1471687310, + "708543", + null, + "2016-08-19T00:00:00Z", + "22 37 45 65 73", + "13", + "05" + ], + [ + 1700, + "DCC4E78B-4BF2-4D5D-8229-BCE9DEEB08C0", + 1700, + 1472076211, + "708543", + 1472076211, + "708543", + null, + "2016-08-23T00:00:00Z", + "02 07 46 61 66", + "01", + "02" + ], + [ + 1701, + "273F2248-9E79-4C97-B889-CAAD926DFA38", + 1701, + 1472292089, + "708543", + 1472292089, + "708543", + null, + "2016-08-26T00:00:00Z", + "10 11 31 41 44", + "14", + "02" + ], + [ + 1702, + "8B3C608A-E36D-43C1-9D18-1D403785CFB5", + 1702, + 1472637685, + "708543", + 1472637685, + "708543", + null, + "2016-08-30T00:00:00Z", + "28 32 41 51 71", + "11", + "04" + ], + [ + 1703, + "8E89CD90-99D4-4B76-9804-BFD0A158ED62", + 1703, + 1472896890, + "708543", + 1472896890, + "708543", + null, + "2016-09-02T00:00:00Z", + "22 28 41 46 60", + "03", + "03" + ], + [ + 1704, + "7D26FA54-E694-4AEA-95D9-6DEA7A996E01", + 1704, + 1473268935, + "708543", + 1473268935, + "708543", + null, + "2016-09-06T00:00:00Z", + "25 37 58 69 75", + "08", + "03" + ], + [ + 1705, + "FAF31467-323F-475D-A552-14C8A21B01CB", + 1705, + 1473501665, + "708543", + 1473501665, + "708543", + null, + "2016-09-09T00:00:00Z", + "01 34 43 44 63", + "11", + "04" + ], + [ + 1706, + "84C31388-A7AA-4E26-9744-E84E09C5552C", + 1706, + 1473847264, + "708543", + 1473847264, + "708543", + null, + "2016-09-13T00:00:00Z", + "06 15 17 39 56", + "15", + "03" + ], + [ + 1707, + "E6018DA5-15BE-41C0-9D93-531D725B4888", + 1707, + 1474106467, + "708543", + 1474106467, + "708543", + null, + "2016-09-16T00:00:00Z", + "13 21 28 34 40", + "15", + "03" + ], + [ + 1708, + "387F9D9B-8BC1-4DCA-B7E5-AC82FE71B8E0", + 1708, + 1474452067, + "708543", + 1474452067, + "708543", + null, + "2016-09-20T00:00:00Z", + "02 22 34 62 72", + "02", + "05" + ], + [ + 1709, + "9FAE3266-01D8-4DBF-9A73-3D8E1EEAC979", + 1709, + 1474711269, + "708543", + 1474711269, + "708543", + null, + "2016-09-23T00:00:00Z", + "01 05 08 25 62", + "14", + "03" + ], + [ + 1710, + "8B93C93D-B84C-4555-AED4-3D9CB3AA9776", + 1710, + 1475056863, + "708543", + 1475056863, + "708543", + null, + "2016-09-27T00:00:00Z", + "14 16 26 53 72", + "04", + "04" + ], + [ + 1711, + "4C02FA18-E31D-48D7-9452-7A226FDCB303", + 1711, + 1475316064, + "708543", + 1475316064, + "708543", + null, + "2016-09-30T00:00:00Z", + "21 30 47 50 57", + "09", + "05" + ], + [ + 1712, + "BF8A02DB-6CB8-4518-9D1A-39EDD6544658", + 1712, + 1475661663, + "708543", + 1475661663, + "708543", + null, + "2016-10-04T00:00:00Z", + "18 29 30 54 66", + "01", + "05" + ], + [ + 1713, + "1C68ACE2-D84B-455D-8013-D73C46A33B3C", + 1713, + 1475920864, + "708543", + 1475920864, + "708543", + null, + "2016-10-07T00:00:00Z", + "24 37 42 50 65", + "14", + "02" + ], + [ + 1714, + "F8296378-E773-4580-B6DE-BAFA66825C08", + 1714, + 1476266463, + "708543", + 1476266463, + "708543", + null, + "2016-10-11T00:00:00Z", + "36 39 42 45 48", + "03", + "02" + ], + [ + 1715, + "1674EA77-1766-4DBD-9B00-65384F2D0B10", + 1715, + 1476525664, + "708543", + 1476525664, + "708543", + null, + "2016-10-14T00:00:00Z", + "07 27 60 64 74", + "05", + "03" + ], + [ + 1716, + "9596D39E-D8E8-4CAA-B7FF-BA7A0B9849DD", + 1716, + 1476871264, + "708543", + 1476871264, + "708543", + null, + "2016-10-18T00:00:00Z", + "07 24 28 65 74", + "01", + "02" + ], + [ + 1717, + "00AA4CA5-AE12-4E21-8121-97BE38E6C511", + 1717, + 1477130472, + "708543", + 1477130472, + "708543", + null, + "2016-10-21T00:00:00Z", + "12 43 44 48 66", + "03", + "04" + ], + [ + 1718, + "0A85CFA3-AE43-4729-8311-BFBA0AADE5D4", + 1718, + 1477476148, + "708543", + 1477476148, + "708543", + null, + "2016-10-25T00:00:00Z", + "08 09 24 49 67", + "13", + "03" + ], + [ + 1719, + "9219598E-02DA-4CF5-854C-93EB269927DF", + 1719, + 1477735313, + "708543", + 1477735313, + "708543", + null, + "2016-10-28T00:00:00Z", + "07 38 46 57 66", + "02", + "05" + ], + [ + 1720, + "32C5372F-AFE4-4A21-A2C0-4476B4136338", + 1720, + 1478080862, + "708543", + 1478080862, + "708543", + null, + "2016-11-01T00:00:00Z", + "19 24 31 39 45", + "13", + "02" + ], + [ + 1721, + "E0DAAFDE-7446-4E41-8D60-38D73DF49F0E", + 1721, + 1478340064, + "708543", + 1478340064, + "708543", + null, + "2016-11-04T00:00:00Z", + "10 29 32 44 46", + "10", + "03" + ], + [ + 1722, + "0344AAB0-8B3C-43C2-9C70-9009F8E9FBA5", + 1722, + 1478689263, + "708543", + 1478689263, + "708543", + null, + "2016-11-08T00:00:00Z", + "46 48 53 61 74", + "12", + "04" + ], + [ + 1723, + "F348889E-FDF7-4DB6-8492-E44FD7807A44", + 1723, + 1478948463, + "708543", + 1478948463, + "708543", + null, + "2016-11-11T00:00:00Z", + "16 40 47 53 59", + "11", + "05" + ], + [ + 1724, + "45E178E8-1A5D-4C5C-A8CD-491DC5B192D7", + 1724, + 1479294062, + "708543", + 1479294062, + "708543", + null, + "2016-11-15T00:00:00Z", + "09 17 23 57 71", + "06", + "03" + ], + [ + 1725, + "6FF8AD19-266E-47BE-8DDC-0604876C3BAD", + 1725, + 1479553263, + "708543", + 1479553263, + "708543", + null, + "2016-11-18T00:00:00Z", + "31 32 49 55 58", + "15", + "05" + ], + [ + 1726, + "A78E2756-66C5-442A-AABD-F2EDC0E468EE", + 1726, + 1479899137, + "708543", + 1479899137, + "708543", + null, + "2016-11-22T00:00:00Z", + "01 43 45 66 69", + "07", + "05" + ], + [ + 1727, + "EFC65225-EFB0-4CDC-8EFF-626C6B56421E", + 1727, + 1480158306, + "708543", + 1480158306, + "708543", + null, + "2016-11-25T00:00:00Z", + "44 47 49 69 75", + "10", + "03" + ], + [ + 1728, + "60D9C9FE-16A3-4665-8B22-562BC0455695", + 1728, + 1480503662, + "708543", + 1480503662, + "708543", + null, + "2016-11-29T00:00:00Z", + "22 33 49 51 59", + "08", + "04" + ], + [ + 1729, + "4E86685E-363A-43CE-A927-4E327A8E0796", + 1729, + 1480762864, + "708543", + 1480762864, + "708543", + null, + "2016-12-02T00:00:00Z", + "03 33 35 49 51", + "01", + "02" + ], + [ + 1730, + "053614AB-69B8-4A4E-9309-3EAED9879AC4", + 1730, + 1481108463, + "708543", + 1481108463, + "708543", + null, + "2016-12-06T00:00:00Z", + "13 34 48 53 63", + "12", + "04" + ], + [ + 1731, + "DA02B9B1-5288-4D72-B13D-DAA2D3848E1D", + 1731, + 1481454064, + "708543", + 1481454064, + "708543", + null, + "2016-12-09T00:00:00Z", + "19 27 47 67 68", + "01", + "05" + ], + [ + 1732, + "3AD77F5E-F385-4384-8D55-6E0537C8371D", + 1732, + 1481713263, + "708543", + 1481713263, + "708543", + null, + "2016-12-13T00:00:00Z", + "02 15 26 34 41", + "14", + "05" + ], + [ + 1733, + "45ADFFB5-0863-456E-BBDA-A17A74B1B3FC", + 1733, + 1481972465, + "708543", + 1481972465, + "708543", + null, + "2016-12-16T00:00:00Z", + "01 08 15 36 43", + "06", + "05" + ], + [ + 1734, + "77491A99-CD4A-406E-9794-2EB82DEDB58D", + 1734, + 1482318191, + "708543", + 1482318191, + "708543", + null, + "2016-12-20T00:00:00Z", + "01 12 14 48 65", + "02", + "05" + ], + [ + 1735, + "714943E2-57A3-4101-8ED2-F4FC7530E30B", + 1735, + 1482577541, + "708543", + 1482577541, + "708543", + null, + "2016-12-23T00:00:00Z", + "21 30 39 60 69", + "15", + "05" + ], + [ + 1736, + "9283006E-6539-4923-B806-004B27DCFE8C", + 1736, + 1482922987, + "708543", + 1482922987, + "708543", + null, + "2016-12-27T00:00:00Z", + "02 28 30 38 39", + "11", + "04" + ], + [ + 1737, + "AE2B492D-A47C-482A-AD4D-10D664C3BA67", + 1737, + 1483182148, + "708543", + 1483182148, + "708543", + null, + "2016-12-30T00:00:00Z", + "06 21 33 39 43", + "02", + "02" + ], + [ + 1738, + "5D46057F-9D99-4702-81CC-4F49A38D643F", + 1738, + 1483527775, + "708543", + 1483527775, + "708543", + null, + "2017-01-03T00:00:00Z", + "14 16 23 49 53", + "12", + "02" + ], + [ + 1739, + "2D5234E0-E230-4272-91E3-8416C6B75BF6", + 1739, + 1483786929, + "708543", + 1483786929, + "708543", + null, + "2017-01-06T00:00:00Z", + "06 10 44 47 54", + "06", + "05" + ], + [ + 1740, + "3DC94C0A-7A60-45E1-A0E9-24383610F930", + 1740, + 1484132463, + "708543", + 1484132463, + "708543", + null, + "2017-01-10T00:00:00Z", + "11 20 40 41 59", + "15", + "05" + ], + [ + 1741, + "0301A455-E49F-4073-8F9D-503176FAC83E", + 1741, + 1484391663, + "708543", + 1484391663, + "708543", + null, + "2017-01-13T00:00:00Z", + "10 44 58 74 75", + "11", + "03" + ], + [ + 1742, + "F4F58F62-5E75-4002-BDEF-D80122F8413D", + 1742, + 1484737264, + "708543", + 1484737264, + "708543", + null, + "2017-01-17T00:00:00Z", + "20 31 54 56 59", + "03", + "05" + ], + [ + 1744, + "0B9EA1DD-8367-47A3-940D-66AB052177C6", + 1744, + 1485342205, + "708543", + 1485342205, + "708543", + null, + "2017-01-20T00:00:00Z", + "07 09 24 41 53", + "14", + "03" + ], + [ + 1745, + "63C31E5D-BA55-43C2-9E9B-9B4BA7DB0B74", + 1745, + 1485342246, + "708543", + 1485342246, + "708543", + null, + "2017-01-24T00:00:00Z", + "08 42 54 63 67", + "11", + "04" + ], + [ + 1746, + "759F3C65-541D-49FF-BE9A-28D067247072", + 1746, + 1485601284, + "708543", + 1485601284, + "708543", + null, + "2017-01-27T00:00:00Z", + "17 37 53 54 61", + "08", + "03" + ], + [ + 1747, + "E68E6833-8A5D-471C-854A-A8951B2FEC47", + 1747, + 1485946975, + "708543", + 1485946975, + "708543", + null, + "2017-01-31T00:00:00Z", + "03 14 27 62 72", + "04", + "03" + ], + [ + 1748, + "40A6F426-B63F-4829-813E-B85B848156A9", + 1748, + 1486206064, + "708543", + 1486206064, + "708543", + null, + "2017-02-03T00:00:00Z", + "03 06 29 30 64", + "03", + "05" + ], + [ + 1749, + "C6F73F48-40BF-485D-A2CD-473041C2F024", + 1749, + 1486551663, + "708543", + 1486551663, + "708543", + null, + "2017-02-07T00:00:00Z", + "23 28 37 56 71", + "12", + "05" + ], + [ + 1750, + "38FEE57B-E1E5-484E-923E-967FA6B59C7B", + 1750, + 1486810865, + "708543", + 1486810865, + "708543", + null, + "2017-02-10T00:00:00Z", + "32 39 51 62 75", + "14", + "05" + ], + [ + 1751, + "1ED88425-BBBE-481E-B401-8FB56251794C", + 1751, + 1487156483, + "708543", + 1487156483, + "708543", + null, + "2017-02-14T00:00:00Z", + "07 11 33 60 68", + "15", + "05" + ], + [ + 1752, + "50DC084A-AB4F-4CF9-9431-1242348550D7", + 1752, + 1487415663, + "708543", + 1487415663, + "708543", + null, + "2017-02-17T00:00:00Z", + "04 56 58 67 75", + "08", + "05" + ], + [ + 1753, + "3657D265-4C07-4890-BFA3-C188C1846DAF", + 1753, + 1487761263, + "708543", + 1487761263, + "708543", + null, + "2017-02-21T00:00:00Z", + "09 21 30 32 75", + "09", + "05" + ], + [ + 1754, + "D41829B2-3AA3-4663-9BAE-B7F2E91290E7", + 1754, + 1488020464, + "708543", + 1488020464, + "708543", + null, + "2017-02-24T00:00:00Z", + "12 29 33 42 68", + "14", + "03" + ], + [ + 1755, + "B0F99384-F7AE-402A-BACC-F6F317DC6DED", + 1755, + 1488366063, + "708543", + 1488366063, + "708543", + null, + "2017-02-28T00:00:00Z", + "20 33 45 58 69", + "04", + "02" + ], + [ + 1756, + "F8753135-AD9D-4059-9862-C4AA0AAB259C", + 1756, + 1488625264, + "708543", + 1488625264, + "708543", + null, + "2017-03-03T00:00:00Z", + "14 26 39 48 51", + "09", + "05" + ], + [ + 1757, + "D4F83543-9B57-40C6-A9DE-FCEE3E05B3CE", + 1757, + 1488970863, + "708543", + 1488970863, + "708543", + null, + "2017-03-07T00:00:00Z", + "03 30 45 53 68", + "11", + "03" + ], + [ + 1758, + "A4282612-1A7F-461F-81C4-DB4E6EEACD96", + 1758, + 1489230064, + "708543", + 1489230064, + "708543", + null, + "2017-03-10T00:00:00Z", + "26 38 42 58 70", + "05", + "05" + ], + [ + 1759, + "CE0B76F1-7657-4984-A22F-874F6106E232", + 1759, + 1489572063, + "708543", + 1489572063, + "708543", + null, + "2017-03-14T00:00:00Z", + "16 23 28 33 59", + "13", + "03" + ], + [ + 1760, + "0638F069-9AFE-4471-A553-D074B4574341", + 1760, + 1489831264, + "708543", + 1489831264, + "708543", + null, + "2017-03-17T00:00:00Z", + "11 27 31 58 60", + "10", + "04" + ], + [ + 1761, + "22420896-3EE1-4690-BFFF-564A46D017D7", + 1761, + 1490176862, + "708543", + 1490176862, + "708543", + null, + "2017-03-21T00:00:00Z", + "04 45 53 73 75", + "07", + "03" + ], + [ + 1762, + "DB64A17B-1CDD-4077-944B-CD8A6DCE8E76", + 1762, + 1490436062, + "708543", + 1490436062, + "708543", + null, + "2017-03-24T00:00:00Z", + "05 28 37 61 69", + "01", + "05" + ], + [ + 1763, + "3EA50957-B887-4FB0-AB54-70F5A9ED385C", + 1763, + 1490781664, + "708543", + 1490781664, + "708543", + null, + "2017-03-28T00:00:00Z", + "30 33 35 37 46", + "10", + "05" + ], + [ + 1764, + "9893AE26-8C83-4E1A-A74F-3563F9C980AE", + 1764, + 1491040863, + "708543", + 1491040863, + "708543", + null, + "2017-03-31T00:00:00Z", + "17 24 27 32 58", + "10", + "03" + ], + [ + 1765, + "B935B56A-C478-43EF-AF02-AC85613DF286", + 1765, + 1491386467, + "708543", + 1491386467, + "708543", + null, + "2017-04-04T00:00:00Z", + "13 24 34 35 55", + "09", + "05" + ], + [ + 1766, + "ED3D7FE2-51BC-4055-ADF6-05FDD98A75AE", + 1766, + 1491645663, + "708543", + 1491645663, + "708543", + null, + "2017-04-07T00:00:00Z", + "30 33 43 47 69", + "15", + "05" + ], + [ + 1767, + "EFA3E720-B90F-42BF-AAB4-7815B320B313", + 1767, + 1491991262, + "708543", + 1491991262, + "708543", + null, + "2017-04-11T00:00:00Z", + "19 34 35 38 49", + "08", + "05" + ], + [ + 1768, + "10D0ECDB-2152-4073-840D-78AE2A4085BD", + 1768, + 1492250463, + "708543", + 1492250463, + "708543", + null, + "2017-04-14T00:00:00Z", + "05 10 55 60 73", + "12", + "05" + ], + [ + 1769, + "AE102C01-DAE4-461A-9CC1-23B5B9694881", + 1769, + 1492596083, + "708543", + 1492596083, + "708543", + null, + "2017-04-18T00:00:00Z", + "08 29 30 43 64", + "06", + "03" + ], + [ + 1770, + "A6AD1EA5-6800-451A-ACDE-1187FAD9B566", + 1770, + 1492855281, + "708543", + 1492855281, + "708543", + null, + "2017-04-21T00:00:00Z", + "01 12 13 32 34", + "10", + "02" + ], + [ + 1771, + "17BE4C71-7B00-47D6-B4CE-1EFC7E3A2916", + 1771, + 1493200863, + "708543", + 1493200863, + "708543", + null, + "2017-04-25T00:00:00Z", + "03 13 33 40 50", + "02", + "04" + ], + [ + 1772, + "A020B997-F086-4F1B-99E8-36C46069D873", + 1772, + 1493460064, + "708543", + 1493460064, + "708543", + null, + "2017-04-28T00:00:00Z", + "06 13 18 20 31", + "13", + "04" + ], + [ + 1773, + "1727AFF8-9F51-4634-8E03-C5CF20E45000", + 1773, + 1493805664, + "708543", + 1493805664, + "708543", + null, + "2017-05-02T00:00:00Z", + "05 14 42 43 58", + "01", + "04" + ], + [ + 1774, + "30DFFCED-2E18-4FB6-BD33-62FD300F0E44", + 1774, + 1494064867, + "708543", + 1494064867, + "708543", + null, + "2017-05-05T00:00:00Z", + "04 23 33 47 53", + "07", + "04" + ], + [ + 1775, + "5976EE30-2E10-4BF9-BD9D-AD1C8E1EEFC1", + 1775, + 1494410464, + "708543", + 1494410464, + "708543", + null, + "2017-05-09T00:00:00Z", + "06 29 45 69 73", + "11", + "05" + ], + [ + 1776, + "6F450884-CDD9-4523-9265-FA369DD13916", + 1776, + 1494669666, + "708543", + 1494669666, + "708543", + null, + "2017-05-12T00:00:00Z", + "28 34 41 42 47", + "13", + "04" + ], + [ + 1777, + "E31793AD-5A3D-46D6-92CD-F913A92498CF", + 1777, + 1495015264, + "708543", + 1495015264, + "708543", + null, + "2017-05-16T00:00:00Z", + "04 35 39 56 72", + "11", + "05" + ], + [ + 1778, + "A2D9FAC3-749D-48A9-B5F4-CBE7C647FDE6", + 1778, + 1495274464, + "708543", + 1495274464, + "708543", + null, + "2017-05-19T00:00:00Z", + "01 04 05 24 30", + "01", + "03" + ], + [ + 1779, + "2C2AD6B7-7EFC-44E7-B605-9056848A94F8", + 1779, + 1495620065, + "708543", + 1495620065, + "708543", + null, + "2017-05-23T00:00:00Z", + "06 13 17 33 60", + "14", + "02" + ], + [ + 1780, + "05675B2E-FE56-4DC0-81FA-A8AB14DD214D", + 1780, + 1495879264, + "708543", + 1495879264, + "708543", + null, + "2017-05-26T00:00:00Z", + "25 26 28 37 56", + "05", + "03" + ], + [ + 1781, + "346129F8-E92D-43DF-91DE-B694AB06BF04", + 1781, + 1496224863, + "708543", + 1496224863, + "708543", + null, + "2017-05-30T00:00:00Z", + "05 20 32 37 67", + "05", + "05" + ], + [ + 1782, + "72417B49-381B-4F9A-BFE5-AC92EFF700DF", + 1782, + 1496484066, + "708543", + 1496484066, + "708543", + null, + "2017-06-02T00:00:00Z", + "07 42 57 69 72", + "10", + "03" + ], + [ + 1783, + "417815C8-6350-42FE-9DA2-BDA965D13F75", + 1783, + 1496829663, + "708543", + 1496829663, + "708543", + null, + "2017-06-06T00:00:00Z", + "03 05 16 49 75", + "05", + "03" + ], + [ + 1784, + "11947D29-85FA-4288-B16A-7673C450B25C", + 1784, + 1497088864, + "708543", + 1497088864, + "708543", + null, + "2017-06-09T00:00:00Z", + "03 16 28 33 37", + "09", + "05" + ], + [ + 1785, + "BA728323-F4EB-4037-AE22-37CA3D6FF2AE", + 1785, + 1497434463, + "708543", + 1497434463, + "708543", + null, + "2017-06-13T00:00:00Z", + "27 51 62 68 75", + "08", + "03" + ], + [ + 1786, + "D5161AD7-1ED0-45A6-803D-24D27B3B72AD", + 1786, + 1497693665, + "708543", + 1497693665, + "708543", + null, + "2017-06-16T00:00:00Z", + "18 22 26 30 44", + "09", + "05" + ], + [ + 1787, + "E58ABE14-127D-49FF-8B96-F3A43551985D", + 1787, + 1498039264, + "708543", + 1498039264, + "708543", + null, + "2017-06-20T00:00:00Z", + "02 15 41 49 63", + "03", + "03" + ], + [ + 1788, + "E0AB73AA-FB82-4D5A-BBE6-3C8C7F4C35E2", + 1788, + 1498298464, + "708543", + 1498298464, + "708543", + null, + "2017-06-23T00:00:00Z", + "12 20 53 66 74", + "11", + "02" + ], + [ + 1789, + "317B88B2-1E7B-4988-8E08-DB2D6B93FDB5", + 1789, + 1498644063, + "708543", + 1498644063, + "708543", + null, + "2017-06-27T00:00:00Z", + "04 21 45 52 57", + "14", + "04" + ], + [ + 1790, + "704B021F-90F0-430C-827F-344C6716B574", + 1790, + 1498903263, + "708543", + 1498903263, + "708543", + null, + "2017-06-30T00:00:00Z", + "10 38 51 55 64", + "06", + "05" + ], + [ + 1791, + "77AE800A-DB56-460A-968D-FC03DCDA98FC", + 1791, + 1499248863, + "708543", + 1499248863, + "708543", + null, + "2017-07-04T00:00:00Z", + "16 39 47 53 71", + "15", + "04" + ], + [ + 1792, + "B699871F-3188-410B-BD10-CF831C3ED41D", + 1792, + 1499508064, + "708543", + 1499508064, + "708543", + null, + "2017-07-07T00:00:00Z", + "02 09 11 28 60", + "10", + "05" + ], + [ + 1793, + "DB8207CA-BD86-4ABB-B937-8FB0177A4AE9", + 1793, + 1499853662, + "708543", + 1499853662, + "708543", + null, + "2017-07-11T00:00:00Z", + "07 18 24 55 74", + "10", + "02" + ], + [ + 1794, + "7E9FDDE3-A7BC-436C-9A65-D81EE060EAD0", + 1794, + 1500112863, + "708543", + 1500112863, + "708543", + null, + "2017-07-14T00:00:00Z", + "11 12 24 32 73", + "01", + "04" + ], + [ + 1795, + "1212E8CB-D109-45ED-90A6-C568D2E40C2E", + 1795, + 1500458464, + "708543", + 1500458464, + "708543", + null, + "2017-07-18T00:00:00Z", + "08 12 23 51 73", + "06", + "04" + ], + [ + 1796, + "FD732321-5433-49B1-AC3E-22D79F295C62", + 1796, + 1500717663, + "708543", + 1500717663, + "708543", + null, + "2017-07-21T00:00:00Z", + "18 31 36 50 74", + "10", + "04" + ], + [ + 1797, + "63EA61AF-4FF9-404F-B971-DB540DBFE9D5", + 1797, + 1501063263, + "708543", + 1501063263, + "708543", + null, + "2017-07-25T00:00:00Z", + "02 05 26 58 60", + "06", + "03" + ], + [ + 1798, + "DC590A73-39DE-4FCC-93B3-07241059B1E0", + 1798, + 1501322464, + "708543", + 1501322464, + "708543", + null, + "2017-07-28T00:00:00Z", + "04 06 31 49 52", + "11", + "03" + ] + ] +} diff --git a/test/inputs/json/misc/617e8.json b/test/inputs/json/misc/617e8.json index f4ab7f0e3..9e174b997 100644 --- a/test/inputs/json/misc/617e8.json +++ b/test/inputs/json/misc/617e8.json @@ -1,716 +1,4741 @@ { - "meta" : { - "view" : { - "id" : "kwxv-fwze", - "name" : "Lottery Cash 4 Life Winning Numbers: Beginning 2014", - "attribution" : "New York State Gaming Commission", - "attributionLink" : "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresults_cash4life", - "averageRating" : 0, - "category" : "Government & Finance", - "createdAt" : 1403034474, - "description" : "Go to http://on.ny.gov/1xRIvPz on the New York Lottery website for past Cash 4 Life results and payouts.", - "displayType" : "table", - "downloadCount" : 24233, - "hideFromCatalog" : false, - "hideFromDataJson" : false, - "indexUpdatedAt" : 1501261257, - "locale" : "", - "newBackend" : false, - "numberOfComments" : 0, - "oid" : 26475943, - "provenance" : "official", - "publicationAppendEnabled" : false, - "publicationDate" : 1501236068, - "publicationGroup" : 1619790, - "publicationStage" : "published", - "rowsUpdatedAt" : 1501236065, - "rowsUpdatedBy" : "xzik-pf59", - "tableId" : 14359574, - "totalTimesRated" : 0, - "viewCount" : 4833328, - "viewLastModified" : 1501236068, - "viewType" : "tabular", - "columns" : [ { - "id" : -1, - "name" : "sid", - "dataTypeName" : "meta_data", - "fieldName" : ":sid", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "id", - "dataTypeName" : "meta_data", - "fieldName" : ":id", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "position", - "dataTypeName" : "meta_data", - "fieldName" : ":position", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "created_at", - "dataTypeName" : "meta_data", - "fieldName" : ":created_at", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "created_meta", - "dataTypeName" : "meta_data", - "fieldName" : ":created_meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "updated_at", - "dataTypeName" : "meta_data", - "fieldName" : ":updated_at", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "updated_meta", - "dataTypeName" : "meta_data", - "fieldName" : ":updated_meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : -1, - "name" : "meta", - "dataTypeName" : "meta_data", - "fieldName" : ":meta", - "position" : 0, - "renderTypeName" : "meta_data", - "format" : { }, - "flags" : [ "hidden" ] - }, { - "id" : 313240570, - "name" : "Draw Date", - "dataTypeName" : "calendar_date", - "fieldName" : "draw_date", - "position" : 1, - "renderTypeName" : "calendar_date", - "tableColumnId" : 20316627, - "width" : 140, - "cachedContents" : { - "largest" : "2017-07-27T00:00:00", - "non_null" : 326, - "null" : 0, - "top" : [ { - "item" : "2017-03-16T00:00:00", - "count" : 20 - }, { - "item" : "2017-03-20T00:00:00", - "count" : 19 - }, { - "item" : "2017-03-23T00:00:00", - "count" : 18 - }, { - "item" : "2017-03-27T00:00:00", - "count" : 17 - }, { - "item" : "2017-03-30T00:00:00", - "count" : 16 - }, { - "item" : "2017-04-03T00:00:00", - "count" : 15 - }, { - "item" : "2017-04-06T00:00:00", - "count" : 14 - }, { - "item" : "2017-04-10T00:00:00", - "count" : 13 - }, { - "item" : "2017-04-13T00:00:00", - "count" : 12 - }, { - "item" : "2017-04-17T00:00:00", - "count" : 11 - }, { - "item" : "2017-04-20T00:00:00", - "count" : 10 - }, { - "item" : "2017-04-24T00:00:00", - "count" : 9 - }, { - "item" : "2017-04-27T00:00:00", - "count" : 8 - }, { - "item" : "2017-05-01T00:00:00", - "count" : 7 - }, { - "item" : "2017-05-04T00:00:00", - "count" : 6 - }, { - "item" : "2017-05-08T00:00:00", - "count" : 5 - }, { - "item" : "2017-05-11T00:00:00", - "count" : 4 - }, { - "item" : "2017-05-15T00:00:00", - "count" : 3 - }, { - "item" : "2017-05-18T00:00:00", - "count" : 2 - }, { - "item" : "2017-05-22T00:00:00", - "count" : 1 - } ], - "smallest" : "2014-06-16T00:00:00" - }, - "format" : { - "view" : "date", - "align" : "center" + "meta": { + "view": { + "id": "kwxv-fwze", + "name": "Lottery Cash 4 Life Winning Numbers: Beginning 2014", + "attribution": "New York State Gaming Commission", + "attributionLink": "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresults_cash4life", + "averageRating": 0, + "category": "Government & Finance", + "createdAt": 1403034474, + "description": "Go to http://on.ny.gov/1xRIvPz on the New York Lottery website for past Cash 4 Life results and payouts.", + "displayType": "table", + "downloadCount": 24233, + "hideFromCatalog": false, + "hideFromDataJson": false, + "indexUpdatedAt": 1501261257, + "locale": "", + "newBackend": false, + "numberOfComments": 0, + "oid": 26475943, + "provenance": "official", + "publicationAppendEnabled": false, + "publicationDate": 1501236068, + "publicationGroup": 1619790, + "publicationStage": "published", + "rowsUpdatedAt": 1501236065, + "rowsUpdatedBy": "xzik-pf59", + "tableId": 14359574, + "totalTimesRated": 0, + "viewCount": 4833328, + "viewLastModified": 1501236068, + "viewType": "tabular", + "columns": [ + { + "id": -1, + "name": "sid", + "dataTypeName": "meta_data", + "fieldName": ":sid", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "id", + "dataTypeName": "meta_data", + "fieldName": ":id", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "position", + "dataTypeName": "meta_data", + "fieldName": ":position", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "created_at", + "dataTypeName": "meta_data", + "fieldName": ":created_at", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "created_meta", + "dataTypeName": "meta_data", + "fieldName": ":created_meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "updated_at", + "dataTypeName": "meta_data", + "fieldName": ":updated_at", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "updated_meta", + "dataTypeName": "meta_data", + "fieldName": ":updated_meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": -1, + "name": "meta", + "dataTypeName": "meta_data", + "fieldName": ":meta", + "position": 0, + "renderTypeName": "meta_data", + "format": {}, + "flags": ["hidden"] + }, + { + "id": 313240570, + "name": "Draw Date", + "dataTypeName": "calendar_date", + "fieldName": "draw_date", + "position": 1, + "renderTypeName": "calendar_date", + "tableColumnId": 20316627, + "width": 140, + "cachedContents": { + "largest": "2017-07-27T00:00:00Z", + "non_null": 326, + "null": 0, + "top": [ + { + "item": "2017-03-16T00:00:00Z", + "count": 20 + }, + { + "item": "2017-03-20T00:00:00Z", + "count": 19 + }, + { + "item": "2017-03-23T00:00:00Z", + "count": 18 + }, + { + "item": "2017-03-27T00:00:00Z", + "count": 17 + }, + { + "item": "2017-03-30T00:00:00Z", + "count": 16 + }, + { + "item": "2017-04-03T00:00:00Z", + "count": 15 + }, + { + "item": "2017-04-06T00:00:00Z", + "count": 14 + }, + { + "item": "2017-04-10T00:00:00Z", + "count": 13 + }, + { + "item": "2017-04-13T00:00:00Z", + "count": 12 + }, + { + "item": "2017-04-17T00:00:00Z", + "count": 11 + }, + { + "item": "2017-04-20T00:00:00Z", + "count": 10 + }, + { + "item": "2017-04-24T00:00:00Z", + "count": 9 + }, + { + "item": "2017-04-27T00:00:00Z", + "count": 8 + }, + { + "item": "2017-05-01T00:00:00Z", + "count": 7 + }, + { + "item": "2017-05-04T00:00:00Z", + "count": 6 + }, + { + "item": "2017-05-08T00:00:00Z", + "count": 5 + }, + { + "item": "2017-05-11T00:00:00Z", + "count": 4 + }, + { + "item": "2017-05-15T00:00:00Z", + "count": 3 + }, + { + "item": "2017-05-18T00:00:00Z", + "count": 2 + }, + { + "item": "2017-05-22T00:00:00Z", + "count": 1 + } + ], + "smallest": "2014-06-16T00:00:00Z" + }, + "format": { + "view": "date", + "align": "center" + } + }, + { + "id": 313240571, + "name": "Winning Numbers", + "dataTypeName": "text", + "description": "Winning numbers", + "fieldName": "winning_numbers", + "position": 2, + "renderTypeName": "text", + "tableColumnId": 20316628, + "width": 188, + "cachedContents": { + "largest": "46 50 56 57 58", + "non_null": 326, + "null": 0, + "top": [ + { + "item": "13 14 36 48 57", + "count": 20 + }, + { + "item": "13 22 41 46 56", + "count": 19 + }, + { + "item": "02 28 30 39 53", + "count": 18 + }, + { + "item": "32 42 58 59 60", + "count": 17 + }, + { + "item": "24 38 40 44 49", + "count": 16 + }, + { + "item": "12 15 28 46 57", + "count": 15 + }, + { + "item": "04 06 17 48 53", + "count": 14 + }, + { + "item": "20 22 37 55 56", + "count": 13 + }, + { + "item": "17 19 49 50 56", + "count": 12 + }, + { + "item": "05 09 12 33 46", + "count": 11 + }, + { + "item": "22 23 37 56 60", + "count": 10 + }, + { + "item": "19 33 35 36 48", + "count": 9 + }, + { + "item": "02 20 27 29 53", + "count": 8 + }, + { + "item": "07 19 23 24 40", + "count": 7 + }, + { + "item": "01 02 17 24 38", + "count": 6 + }, + { + "item": "22 34 42 46 57", + "count": 5 + }, + { + "item": "06 20 30 34 36", + "count": 4 + }, + { + "item": "02 27 28 34 39", + "count": 3 + }, + { + "item": "04 29 30 55 58", + "count": 2 + }, + { + "item": "04 06 25 31 47", + "count": 1 + } + ], + "smallest": "01 02 14 29 59" + }, + "format": { + "align": "center" + } + }, + { + "id": 313240572, + "name": "Cash Ball", + "dataTypeName": "text", + "description": "Cash ball", + "fieldName": "cash_ball", + "position": 3, + "renderTypeName": "text", + "tableColumnId": 20316629, + "width": 134, + "cachedContents": { + "largest": "04", + "non_null": 326, + "null": 0, + "top": [ + { + "item": "03", + "count": 20 + }, + { + "item": "02", + "count": 19 + }, + { + "item": "04", + "count": 18 + }, + { + "item": "01", + "count": 17 + } + ], + "smallest": "01" + }, + "format": { + "align": "center" + } + } + ], + "grants": [ + { + "inherited": false, + "type": "viewer", + "flags": ["public"] + } + ], + "metadata": { + "custom_fields": { + "Notes": { + "Notes": "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." + }, + "Common Core": { + "Contact Email": "opendata@its.ny.gov", + "Publisher": "State of New York", + "Contact Name": "Open Data NY" + }, + "Dataset Summary": { + "Granularity": "By draw", + "Coverage": "Statewide", + "Data Frequency": "Twice weekly", + "Posting Frequency": "Twice weekly", + "Dataset Owner": "New York State Gaming Commission", + "Organization": "The New York Lottery", + "Time Period": "Beginning 6/16/2014", + "Contact Information": "Info@gaming.ny.gov" + }, + "Additional Resources": { + "See Also": "http://www.gaming.ny.gov/" + }, + "Dataset Information": { + "Agency": "Gaming Commission, New York State" + } + }, + "renderTypeConfig": { + "visible": { + "table": true + } + }, + "availableDisplayTypes": ["table", "fatrow", "page"], + "jsonQuery": { + "order": [ + { + "ascending": false, + "columnFieldName": "draw_date" + } + ] + }, + "rdfSubject": "0", + "attachments": [ + { + "blobId": "", + "assetId": "TVLdpXbCpZhhc1DSgHaSY0QOSV_L7LM1wGCcx_Txx5k", + "name": "NYSGAM_Cash4Life_Overview.pdf", + "filename": "NYSGAM_Cash4Life_Overview.pdf" + }, + { + "blobId": "", + "assetId": "8eMY9KKmZL0Ig4zEfycwd2X8qhZlv3mzJUBoIOYrO9o", + "name": "NYSGAM_Cash4Life_Winning_Numbers_DataDictionary.pdf", + "filename": "NYSGAM_Cash4Life_Winning_Numbers_DataDictionary.pdf" + } + ] + }, + "owner": { + "id": "xzik-pf59", + "displayName": "NY Open Data", + "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", + "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", + "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", + "roleName": "publisher", + "screenName": "NY Open Data", + "rights": [ + "create_datasets", + "edit_others_datasets", + "edit_nominations", + "approve_nominations", + "moderate_comments", + "manage_stories", + "feature_items", + "change_configurations", + "view_domain", + "view_others_datasets", + "create_pages", + "edit_pages", + "view_goals", + "view_dashboards", + "edit_goals", + "edit_dashboards", + "manage_provenance", + "view_story", + "view_unpublished_story", + "view_all_dataset_status_logs", + "use_data_connectors" + ] + }, + "query": { + "orderBys": [ + { + "ascending": false, + "expression": { + "columnId": 313240570, + "type": "column" + } + } + ] + }, + "rights": ["read"], + "tableAuthor": { + "id": "xzik-pf59", + "displayName": "NY Open Data", + "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", + "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", + "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", + "roleName": "publisher", + "screenName": "NY Open Data", + "rights": [ + "create_datasets", + "edit_others_datasets", + "edit_nominations", + "approve_nominations", + "moderate_comments", + "manage_stories", + "feature_items", + "change_configurations", + "view_domain", + "view_others_datasets", + "create_pages", + "edit_pages", + "view_goals", + "view_dashboards", + "edit_goals", + "edit_dashboards", + "manage_provenance", + "view_story", + "view_unpublished_story", + "view_all_dataset_status_logs", + "use_data_connectors" + ] + }, + "tags": ["cash 4 life", "new york lottery", "winning", "results"], + "flags": ["default", "restorable", "restorePossibleForType"] } - }, { - "id" : 313240571, - "name" : "Winning Numbers", - "dataTypeName" : "text", - "description" : "Winning numbers", - "fieldName" : "winning_numbers", - "position" : 2, - "renderTypeName" : "text", - "tableColumnId" : 20316628, - "width" : 188, - "cachedContents" : { - "largest" : "46 50 56 57 58", - "non_null" : 326, - "null" : 0, - "top" : [ { - "item" : "13 14 36 48 57", - "count" : 20 - }, { - "item" : "13 22 41 46 56", - "count" : 19 - }, { - "item" : "02 28 30 39 53", - "count" : 18 - }, { - "item" : "32 42 58 59 60", - "count" : 17 - }, { - "item" : "24 38 40 44 49", - "count" : 16 - }, { - "item" : "12 15 28 46 57", - "count" : 15 - }, { - "item" : "04 06 17 48 53", - "count" : 14 - }, { - "item" : "20 22 37 55 56", - "count" : 13 - }, { - "item" : "17 19 49 50 56", - "count" : 12 - }, { - "item" : "05 09 12 33 46", - "count" : 11 - }, { - "item" : "22 23 37 56 60", - "count" : 10 - }, { - "item" : "19 33 35 36 48", - "count" : 9 - }, { - "item" : "02 20 27 29 53", - "count" : 8 - }, { - "item" : "07 19 23 24 40", - "count" : 7 - }, { - "item" : "01 02 17 24 38", - "count" : 6 - }, { - "item" : "22 34 42 46 57", - "count" : 5 - }, { - "item" : "06 20 30 34 36", - "count" : 4 - }, { - "item" : "02 27 28 34 39", - "count" : 3 - }, { - "item" : "04 29 30 55 58", - "count" : 2 - }, { - "item" : "04 06 25 31 47", - "count" : 1 - } ], - "smallest" : "01 02 14 29 59" - }, - "format" : { - "align" : "center" - } - }, { - "id" : 313240572, - "name" : "Cash Ball", - "dataTypeName" : "text", - "description" : "Cash ball", - "fieldName" : "cash_ball", - "position" : 3, - "renderTypeName" : "text", - "tableColumnId" : 20316629, - "width" : 134, - "cachedContents" : { - "largest" : "04", - "non_null" : 326, - "null" : 0, - "top" : [ { - "item" : "03", - "count" : 20 - }, { - "item" : "02", - "count" : 19 - }, { - "item" : "04", - "count" : 18 - }, { - "item" : "01", - "count" : 17 - } ], - "smallest" : "01" - }, - "format" : { - "align" : "center" - } - } ], - "grants" : [ { - "inherited" : false, - "type" : "viewer", - "flags" : [ "public" ] - } ], - "metadata" : { - "custom_fields" : { - "Notes" : { - "Notes" : "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." - }, - "Common Core" : { - "Contact Email" : "opendata@its.ny.gov", - "Publisher" : "State of New York", - "Contact Name" : "Open Data NY" - }, - "Dataset Summary" : { - "Granularity" : "By draw", - "Coverage" : "Statewide", - "Data Frequency" : "Twice weekly", - "Posting Frequency" : "Twice weekly", - "Dataset Owner" : "New York State Gaming Commission", - "Organization" : "The New York Lottery", - "Time Period" : "Beginning 6/16/2014", - "Contact Information" : "Info@gaming.ny.gov" - }, - "Additional Resources" : { - "See Also" : "http://www.gaming.ny.gov/" - }, - "Dataset Information" : { - "Agency" : "Gaming Commission, New York State" - } - }, - "renderTypeConfig" : { - "visible" : { - "table" : true - } - }, - "availableDisplayTypes" : [ "table", "fatrow", "page" ], - "jsonQuery" : { - "order" : [ { - "ascending" : false, - "columnFieldName" : "draw_date" - } ] - }, - "rdfSubject" : "0", - "attachments" : [ { - "blobId" : "", - "assetId" : "TVLdpXbCpZhhc1DSgHaSY0QOSV_L7LM1wGCcx_Txx5k", - "name" : "NYSGAM_Cash4Life_Overview.pdf", - "filename" : "NYSGAM_Cash4Life_Overview.pdf" - }, { - "blobId" : "", - "assetId" : "8eMY9KKmZL0Ig4zEfycwd2X8qhZlv3mzJUBoIOYrO9o", - "name" : "NYSGAM_Cash4Life_Winning_Numbers_DataDictionary.pdf", - "filename" : "NYSGAM_Cash4Life_Winning_Numbers_DataDictionary.pdf" - } ] - }, - "owner" : { - "id" : "xzik-pf59", - "displayName" : "NY Open Data", - "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", - "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", - "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", - "roleName" : "publisher", - "screenName" : "NY Open Data", - "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] - }, - "query" : { - "orderBys" : [ { - "ascending" : false, - "expression" : { - "columnId" : 313240570, - "type" : "column" - } - } ] - }, - "rights" : [ "read" ], - "tableAuthor" : { - "id" : "xzik-pf59", - "displayName" : "NY Open Data", - "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", - "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", - "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", - "roleName" : "publisher", - "screenName" : "NY Open Data", - "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] - }, - "tags" : [ "cash 4 life", "new york lottery", "winning", "results" ], - "flags" : [ "default", "restorable", "restorePossibleForType" ] - } - }, - "data" : [ [ 1, "012CAE53-5033-48B4-BADA-E2EDB4C82D76", 1, 1403096267, "707756", 1403096267, "707756", "{\n}", "2014-06-16T00:00:00", "09 36 44 53 59", "03" ] -, [ 3, "9A327854-2BA9-474A-B392-EBBDF0806559", 3, 1403233340, "708543", 1403233340, "708543", "{\n}", "2014-06-19T00:00:00", "08 13 43 56 60", "02" ] -, [ 5, "B03A03EA-661A-452F-9084-6B95EDE9EFEA", 5, 1403578864, "708543", 1403578864, "708543", "{\n}", "2014-06-23T00:00:00", "05 16 21 33 47", "04" ] -, [ 7, "205077A2-7F97-42B3-9BF8-592B6E314EC6", 7, 1403861033, "708543", 1403861033, "708543", "{\n}", "2014-06-26T00:00:00", "15 22 51 52 58", "03" ] -, [ 9, "038EA5F2-C6F5-4DA9-B57A-EA185D8A609B", 9, 1404183739, "708543", 1404183739, "708543", "{\n}", "2014-06-30T00:00:00", "01 04 10 28 33", "02" ] -, [ 11, "FB8E9108-DA9A-4D9C-9BDF-3727F7A862AA", 11, 1404442822, "708543", 1404442822, "708543", "{\n}", "2014-07-03T00:00:00", "08 10 25 28 31", "02" ] -, [ 13, "49BC2CEE-8BEB-4A2B-9951-D0669FC80A57", 13, 1404788422, "708543", 1404788422, "708543", "{\n}", "2014-07-07T00:00:00", "11 13 23 54 55", "02" ] -, [ 15, "81B00141-368C-4C89-A943-5512A585E9B6", 15, 1405047685, "708543", 1405047685, "708543", "{\n}", "2014-07-10T00:00:00", "11 12 31 54 59", "03" ] -, [ 17, "B2217278-0DF2-4BD9-993B-CBF3E38005D8", 17, 1405393265, "708543", 1405393265, "708543", "{\n}", "2014-07-14T00:00:00", "09 19 34 37 49", "02" ] -, [ 19, "7A02B89B-7A1E-41F6-A4DD-D25CE447B9DE", 19, 1405652467, "708543", 1405652467, "708543", "{\n}", "2014-07-17T00:00:00", "08 09 22 46 51", "01" ] -, [ 21, "3BFADF1B-EDD6-415A-8790-05AAEECFB7C3", 21, 1405998064, "708543", 1405998064, "708543", "{\n}", "2014-07-21T00:00:00", "04 06 11 24 31", "03" ] -, [ 23, "EAAAAB4F-C17E-4129-B18A-5A2197AFBEAC", 23, 1406257265, "708543", 1406257265, "708543", "{\n}", "2014-07-24T00:00:00", "05 20 35 43 48", "03" ] -, [ 25, "68097553-6CC4-4787-865A-747B130D5EBE", 25, 1406602865, "708543", 1406602865, "708543", "{\n}", "2014-07-28T00:00:00", "06 15 31 51 53", "02" ] -, [ 27, "76996EA0-DD54-4EB5-B5C2-7FF8FE6E6386", 27, 1406862065, "708543", 1406862065, "708543", "{\n}", "2014-07-31T00:00:00", "13 25 26 32 58", "01" ] -, [ 29, "91616BD7-CD64-4F70-92AD-260AED90744E", 29, 1407207665, "708543", 1407207665, "708543", "{\n}", "2014-08-04T00:00:00", "17 21 36 48 60", "03" ] -, [ 31, "DB3F3DF6-C19A-4970-9F76-060B7D1DD383", 31, 1407466895, "708543", 1407466895, "708543", "{\n}", "2014-08-07T00:00:00", "03 18 38 40 49", "02" ] -, [ 33, "60819CBF-EA03-477B-ABF2-0BD2242A9438", 33, 1407812457, "708543", 1407812457, "708543", "{\n}", "2014-08-11T00:00:00", "05 10 33 48 57", "03" ] -, [ 35, "0C13DB12-A55A-42A7-A2BB-66D0C7C50645", 35, 1408071655, "708543", 1408071655, "708543", "{\n}", "2014-08-14T00:00:00", "03 11 34 46 60", "02" ] -, [ 37, "1839C767-92D9-4A0D-8897-02DB365BA7C7", 37, 1408417266, "708543", 1408417266, "708543", "{\n}", "2014-08-18T00:00:00", "06 10 29 44 57", "02" ] -, [ 39, "774C4C27-7C65-48D1-89AA-89C3D9AF5C6B", 39, 1408676455, "708543", 1408676455, "708543", "{\n}", "2014-08-21T00:00:00", "11 24 40 43 47", "02" ] -, [ 41, "C1877239-185A-4B3D-946E-F5512047707A", 41, 1409022066, "708543", 1409022066, "708543", "{\n}", "2014-08-25T00:00:00", "06 08 34 40 59", "04" ] -, [ 43, "0BB0CCA8-09D9-475F-B97A-8084266C10C3", 43, 1409281275, "708543", 1409281275, "708543", "{\n}", "2014-08-28T00:00:00", "12 24 27 38 49", "02" ] -, [ 45, "6DB0C8AB-5075-4BB1-9149-2A7BEC028612", 45, 1409626855, "708543", 1409626855, "708543", "{\n}", "2014-09-01T00:00:00", "09 21 27 45 53", "02" ] -, [ 47, "0374F671-02F0-4D00-AB0F-689BD851BBFF", 47, 1409886057, "708543", 1409886057, "708543", "{\n}", "2014-09-04T00:00:00", "03 21 28 32 56", "03" ] -, [ 49, "DA294964-7674-4E5A-BBBC-D5452940E330", 49, 1410249467, "708543", 1410249467, "708543", "{\n}", "2014-09-08T00:00:00", "01 17 23 44 45", "02" ] -, [ 51, "60E229E5-B1B3-4EB3-B235-ECE3320C2151", 51, 1410490873, "708543", 1410490873, "708543", "{\n}", "2014-09-11T00:00:00", "12 44 56 58 59", "02" ] -, [ 53, "AF1C8CC1-1FBA-4462-9314-ED07B787BEF7", 53, 1410857335, "708543", 1410857335, "708543", "{\n}", "2014-09-15T00:00:00", "03 05 09 32 56", "01" ] -, [ 55, "C7EB51A3-93B2-4A41-9CB7-E19F2294C189", 55, 1411138891, "708543", 1411138891, "708543", "{\n}", "2014-09-18T00:00:00", "05 10 11 24 28", "03" ] -, [ 57, "AF5594CC-74AE-4B25-8D3A-E75AB61F320C", 57, 1411484595, "708543", 1411484595, "708543", "{\n}", "2014-09-22T00:00:00", "28 39 40 53 54", "01" ] -, [ 59, "A5A781A5-5521-4B22-B514-F5DFA3F6D25A", 59, 1411741475, "708543", 1411741475, "708543", "{\n}", "2014-09-25T00:00:00", "09 11 28 30 41", "04" ] -, [ 61, "6942D491-BAE6-4106-BBFF-9692E675D407", 61, 1412089290, "708543", 1412089290, "708543", "{\n}", "2014-09-29T00:00:00", "19 36 37 43 50", "01" ] -, [ 63, "756710CC-B5F0-4283-8BA0-3689222F93BC", 63, 1412348485, "708543", 1412348485, "708543", "{\n}", "2014-10-02T00:00:00", "23 34 35 44 52", "01" ] -, [ 65, "EFC086DD-DE15-4DD8-9310-16911270BB89", 65, 1412737309, "708543", 1412737309, "708543", "{\n}", "2014-10-06T00:00:00", "16 30 37 52 55", "03" ] -, [ 67, "AA1A6D71-13B5-44E0-9B81-0BB34DAE7EA4", 67, 1412910109, "708543", 1412910109, "708543", "{\n}", "2014-10-09T00:00:00", "23 26 32 50 57", "04" ] -, [ 69, "1335B8F0-D3F5-4F48-B286-3F798CBC701D", 69, 1413255710, "708543", 1413255710, "708543", "{\n}", "2014-10-13T00:00:00", "10 13 49 54 57", "04" ] -, [ 71, "46182F8D-360D-488B-A4F9-05514FA57EFB", 71, 1413514894, "708543", 1413514894, "708543", "{\n}", "2014-10-16T00:00:00", "12 13 20 28 45", "04" ] -, [ 73, "0EBA077B-BE4A-4D7C-9944-8741019B368E", 73, 1413860491, "708543", 1413860491, "708543", "{\n}", "2014-10-20T00:00:00", "08 16 43 52 59", "03" ] -, [ 75, "4E97E80D-7E86-48D3-A356-461BDC559E2D", 75, 1414119691, "708543", 1414119691, "708543", "{\n}", "2014-10-23T00:00:00", "09 22 24 36 54", "01" ] -, [ 77, "D79ED4C9-E736-4503-9F8F-44E814128A11", 77, 1414465287, "708543", 1414465287, "708543", "{\n}", "2014-10-27T00:00:00", "06 09 28 40 41", "01" ] -, [ 79, "792BD778-BFDB-4778-A82C-FC9A225D944F", 79, 1414724491, "708543", 1414724491, "708543", "{\n}", "2014-10-30T00:00:00", "19 22 29 38 53", "01" ] -, [ 81, "896D69B7-9696-4D2F-9534-540A5EFF5C46", 81, 1415113288, "708543", 1415113288, "708543", "{\n}", "2014-11-03T00:00:00", "03 27 28 49 52", "04" ] -, [ 83, "0D294751-4AF6-47C1-A95E-9D9709CC0F7F", 83, 1415329353, "708543", 1415329353, "708543", "{\n}", "2014-11-06T00:00:00", "03 07 14 20 32", "03" ] -, [ 85, "9FA03830-2A74-4DD2-85A0-0ABDDA81D1D1", 85, 1415804550, "708543", 1415804550, "708543", "{\n}", "2014-11-10T00:00:00", "07 21 30 53 55", "02" ] -, [ 87, "38EC3289-915B-4D7B-8B5A-6C70EC890078", 87, 1415934097, "708543", 1415934097, "708543", "{\n}", "2014-11-13T00:00:00", "07 08 16 49 56", "04" ] -, [ 89, "4BB65C7D-C7AE-4B3B-B97B-04AB4F0F8837", 89, 1416279689, "708543", 1416279689, "708543", "{\n}", "2014-11-17T00:00:00", "08 23 37 38 58", "01" ] -, [ 91, "AACF639A-77E9-4D8C-8998-75A1A9279F42", 91, 1416538890, "708543", 1416538890, "708543", "{\n}", "2014-11-20T00:00:00", "02 40 46 59 60", "02" ] -, [ 93, "E4FBC55A-B4ED-468A-A44C-CE5445C21A1B", 93, 1416884510, "708543", 1416884510, "708543", "{\n}", "2014-11-24T00:00:00", "08 25 26 33 56", "01" ] -, [ 95, "776BD8AD-7BBC-45E0-8E90-39811986C977", 95, 1417143689, "708543", 1417143689, "708543", "{\n}", "2014-11-27T00:00:00", "09 30 43 51 55", "03" ] -, [ 97, "EBF6ECC5-0B85-438D-8A46-9FCE5E519E29", 97, 1417489289, "708543", 1417489289, "708543", "{\n}", "2014-12-01T00:00:00", "04 07 33 50 55", "01" ] -, [ 99, "33276E54-A25A-4344-9522-952660A46FC6", 99, 1417748490, "708543", 1417748490, "708543", "{\n}", "2014-12-04T00:00:00", "01 15 21 41 60", "04" ] -, [ 101, "1A59B642-300B-4971-97A2-2EEB3B617A96", 101, 1418094070, "708543", 1418094070, "708543", "{\n}", "2014-12-08T00:00:00", "04 11 14 46 59", "04" ] -, [ 103, "A9B2120A-45B0-4B5A-91A6-2CD14B6CB804", 103, 1418353294, "708543", 1418353294, "708543", "{\n}", "2014-12-11T00:00:00", "12 22 27 35 49", "04" ] -, [ 105, "BF8D8512-533A-47D8-B958-1D53A359D5F6", 105, 1418698895, "708543", 1418698895, "708543", "{\n}", "2014-12-15T00:00:00", "08 22 31 38 40", "03" ] -, [ 107, "520953D2-4DFD-404D-8D61-713CBDD641E5", 107, 1418958101, "708543", 1418958101, "708543", "{\n}", "2014-12-18T00:00:00", "20 22 26 27 43", "02" ] -, [ 109, "5A0507CF-B794-43A6-A30D-9B830091D8A3", 109, 1419303692, "708543", 1419303692, "708543", "{\n}", "2014-12-22T00:00:00", "03 17 30 50 55", "03" ] -, [ 111, "E12FA573-ED28-4726-8E80-9783452BECA0", 111, 1419562871, "708543", 1419562871, "708543", "{\n}", "2014-12-25T00:00:00", "05 14 22 37 60", "02" ] -, [ 113, "E194E4AF-152C-4229-88F9-45F7629E0ABF", 113, 1419908521, "708543", 1419908521, "708543", "{\n}", "2014-12-29T00:00:00", "08 09 35 37 41", "04" ] -, [ 115, "BBB2C4CC-93DE-4015-B820-FB007F1CB762", 115, 1420167754, "708543", 1420167754, "708543", "{\n}", "2015-01-01T00:00:00", "13 19 20 21 35", "02" ] -, [ 117, "ED96AB53-FCDB-46E9-8440-3655AC3FB34C", 117, 1420513290, "708543", 1420513290, "708543", "{\n}", "2015-01-05T00:00:00", "12 23 29 38 43", "03" ] -, [ 119, "0C5A0B65-8D2D-4839-8786-5081A47668C8", 119, 1420772494, "708543", 1420772494, "708543", "{\n}", "2015-01-08T00:00:00", "16 28 38 43 45", "03" ] -, [ 121, "D42D2EBF-7700-4F5B-9BC0-FD5637A19FD9", 121, 1421118090, "708543", 1421118090, "708543", "{\n}", "2015-01-12T00:00:00", "01 05 11 39 47", "01" ] -, [ 123, "008F206D-92EB-4A20-B887-E6689B25E3E2", 123, 1421377288, "708543", 1421377288, "708543", "{\n}", "2015-01-15T00:00:00", "12 15 22 25 27", "03" ] -, [ 125, "0E8CB1B4-823F-4E60-A773-1A939E96DC06", 125, 1421722893, "708543", 1421722893, "708543", "{\n}", "2015-01-19T00:00:00", "18 29 47 52 53", "03" ] -, [ 127, "2AA47495-72C5-4086-98EF-CDE64374946E", 127, 1421982100, "708543", 1421982100, "708543", "{\n}", "2015-01-22T00:00:00", "08 11 35 47 60", "02" ] -, [ 129, "60873354-72B3-48C2-8CB3-13BD630B4DBC", 129, 1422327709, "708543", 1422327709, "708543", "{\n}", "2015-01-26T00:00:00", "01 20 24 46 57", "01" ] -, [ 131, "9E0C5355-4E03-477D-A073-4BED0B3A24C1", 131, 1422586894, "708543", 1422586894, "708543", "{\n}", "2015-01-29T00:00:00", "08 24 28 57 60", "02" ] -, [ 133, "EFA8A999-2C71-4357-81B8-DD1FBBBEDB2A", 133, 1422932500, "708543", 1422932500, "708543", "{\n}", "2015-02-02T00:00:00", "04 08 17 20 21", "04" ] -, [ 135, "42FB45D1-A071-4F57-9CE2-08A01CDDF478", 135, 1423191694, "708543", 1423191694, "708543", "{\n}", "2015-02-05T00:00:00", "14 17 38 40 45", "02" ] -, [ 137, "11ECE352-720D-42CC-9205-4CDF6500FA83", 137, 1423537294, "708543", 1423537294, "708543", "{\n}", "2015-02-09T00:00:00", "09 17 36 38 53", "04" ] -, [ 139, "93BCF5A7-5C23-4672-AC03-40720ED5F22B", 139, 1423796489, "708543", 1423796489, "708543", "{\n}", "2015-02-12T00:00:00", "06 11 32 56 60", "02" ] -, [ 141, "D322B0C0-56A8-4374-A29A-80CFDE1D6543", 141, 1424142113, "708543", 1424142113, "708543", "{\n}", "2015-02-16T00:00:00", "06 26 35 40 43", "02" ] -, [ 143, "DC6AD720-4BF5-4C4F-95A0-752F916BBEFF", 143, 1424401290, "708543", 1424401290, "708543", "{\n}", "2015-02-19T00:00:00", "18 43 51 52 60", "04" ] -, [ 145, "9E251D18-D632-4E4E-BE91-389DAC1E83EF", 145, 1424746886, "708543", 1424746886, "708543", "{\n}", "2015-02-23T00:00:00", "01 14 20 21 43", "04" ] -, [ 147, "E4F2CA88-3B82-48DF-8BCC-0F48ED01025E", 147, 1425049289, "708543", 1425049289, "708543", "{\n}", "2015-02-26T00:00:00", "03 16 20 38 49", "03" ] -, [ 149, "A0BC2444-1A83-4EC9-A5C7-DD4BEBEC8BAC", 149, 1425351687, "708543", 1425351687, "708543", "{\n}", "2015-03-02T00:00:00", "08 23 27 38 47", "04" ] -, [ 151, "DEA71FE8-C1A6-4822-AFAA-21E11860F30E", 151, 1425610898, "708543", 1425610898, "708543", "{\n}", "2015-03-05T00:00:00", "10 22 46 47 48", "04" ] -, [ 153, "7CDE1F9C-B37A-4688-B430-4B876FF1E3AC", 153, 1425956488, "708543", 1425956488, "708543", "{\n}", "2015-03-09T00:00:00", "19 34 35 54 57", "03" ] -, [ 155, "05A29298-CC69-4E09-BEA3-5A2C9BA94CAA", 155, 1426561286, "708543", 1426561286, "708543", "{\n}", "2015-03-16T00:00:00", "12 18 33 44 46", "01" ] -, [ 157, "6CCFF205-6249-4098-BCEE-133280F60530", 157, 1426820509, "708543", 1426820509, "708543", "{\n}", "2015-03-19T00:00:00", "02 12 28 51 54", "01" ] -, [ 159, "E1D85EB5-A7E8-419E-9BBC-4FC4E30128A1", 159, 1427166105, "708543", 1427166105, "708543", "{\n}", "2015-03-23T00:00:00", "18 26 28 35 36", "04" ] -, [ 161, "F4F2FB7D-6BD3-4DF3-A3BB-A8572B4F99DA", 161, 1427425305, "708543", 1427425305, "708543", "{\n}", "2015-03-26T00:00:00", "06 35 36 47 53", "02" ] -, [ 163, "5BCAA6C8-600B-42A8-AE34-259DC41EC39B", 163, 1427770905, "708543", 1427770905, "708543", "{\n}", "2015-03-30T00:00:00", "09 23 43 45 52", "02" ] -, [ 165, "845ECC12-550A-4E48-B410-47AE380B0456", 165, 1428030106, "708543", 1428030106, "708543", "{\n}", "2015-04-02T00:00:00", "15 22 29 34 37", "03" ] -, [ 167, "2B936DE6-6D4B-4FA1-9F98-CF5C39A7A0B6", 167, 1428375707, "708543", 1428375707, "708543", "{\n}", "2015-04-06T00:00:00", "02 16 20 25 50", "03" ] -, [ 169, "ABA57A21-845C-43BD-A750-462A07940823", 169, 1428634907, "708543", 1428634907, "708543", "{\n}", "2015-04-09T00:00:00", "05 07 27 43 50", "03" ] -, [ 171, "8A3DF170-CB4F-4B1C-882D-A91384A892FA", 171, 1428980487, "708543", 1428980487, "708543", "{\n}", "2015-04-13T00:00:00", "07 17 26 34 60", "04" ] -, [ 173, "C8CE05E3-B5CA-4289-8704-6652FE4DB081", 173, 1429239707, "708543", 1429239707, "708543", "{\n}", "2015-04-16T00:00:00", "01 06 11 13 23", "01" ] -, [ 175, "67068049-9182-466F-841B-191C0C834971", 175, 1429585286, "708543", 1429585286, "708543", "{\n}", "2015-04-20T00:00:00", "35 36 37 53 56", "04" ] -, [ 177, "2B244FB4-5148-42BB-8C0F-18F72302A072", 177, 1429844487, "708543", 1429844487, "708543", "{\n}", "2015-04-23T00:00:00", "03 12 30 40 56", "02" ] -, [ 179, "BE06E4D1-AE96-40F3-97A5-5A937E0983D5", 179, 1430190127, "708543", 1430190127, "708543", "{\n}", "2015-04-27T00:00:00", "13 14 29 46 47", "01" ] -, [ 181, "5FC39380-1949-40E6-B9DD-5FB1648901D7", 181, 1430449308, "708543", 1430449308, "708543", "{\n}", "2015-04-30T00:00:00", "09 26 29 46 58", "02" ] -, [ 183, "12EA4AE4-F823-427B-9DF7-AAE2BB7DCA08", 183, 1430794909, "708543", 1430794909, "708543", "{\n}", "2015-05-04T00:00:00", "03 05 21 30 60", "04" ] -, [ 185, "D9E721A6-B28A-4811-BC5D-D2BDAABA692F", 185, 1431054131, "708543", 1431054131, "708543", "{\n}", "2015-05-07T00:00:00", "04 11 44 47 53", "02" ] -, [ 187, "5BF8802C-A0CE-4DA2-B482-3133F62C4B77", 187, 1431399749, "708543", 1431399749, "708543", "{\n}", "2015-05-11T00:00:00", "07 08 14 18 52", "01" ] -, [ 189, "90482458-111E-4B10-B506-3D3B50C5013D", 189, 1431659009, "708543", 1431659009, "708543", "{\n}", "2015-05-14T00:00:00", "06 28 34 39 43", "02" ] -, [ 191, "DD2AF2B3-DBB3-44ED-A0D6-1E1BE8D10624", 191, 1432004548, "708543", 1432004548, "708543", "{\n}", "2015-05-18T00:00:00", "16 30 35 38 51", "01" ] -, [ 193, "41866238-C5D3-4CC9-9E88-A15076EA3C50", 193, 1432263708, "708543", 1432263708, "708543", "{\n}", "2015-05-21T00:00:00", "18 22 24 29 56", "04" ] -, [ 195, "86C4BD79-F837-4B0E-A2D7-FB8EA3623DC8", 195, 1432609440, "708543", 1432609440, "708543", "{\n}", "2015-05-25T00:00:00", "15 40 48 59 60", "01" ] -, [ 197, "88A989DB-863E-481F-825E-632FEE7BF997", 197, 1432868513, "708543", 1432868513, "708543", "{\n}", "2015-05-28T00:00:00", "08 25 28 33 47", "01" ] -, [ 199, "168810EE-D7D4-4CA0-B514-2F78BFBC2CA4", 199, 1433214108, "708543", 1433214108, "708543", "{\n}", "2015-06-01T00:00:00", "07 10 23 37 56", "03" ] -, [ 201, "D5E3EC37-3306-41FE-99C9-9A6C18983111", 201, 1433473306, "708543", 1433473306, "708543", "{\n}", "2015-06-04T00:00:00", "04 09 32 41 43", "02" ] -, [ 203, "BE6B2BA7-5F95-4A31-9DF3-8BF03DFCA091", 203, 1433818929, "708543", 1433818929, "708543", "{\n}", "2015-06-08T00:00:00", "33 39 43 49 52", "03" ] -, [ 205, "FC34C3C6-2380-4FE3-8D7E-5913155A26C9", 205, 1434078114, "708543", 1434078114, "708543", "{\n}", "2015-06-11T00:00:00", "17 24 43 49 57", "02" ] -, [ 207, "CD40F120-C2CB-48C5-A139-622DEB4F65B6", 207, 1434423759, "708543", 1434423759, "708543", "{\n}", "2015-06-15T00:00:00", "10 14 16 32 34", "03" ] -, [ 209, "E983452E-64EC-400E-93D1-70D70F5F20E2", 209, 1434682981, "708543", 1434682981, "708543", "{\n}", "2015-06-18T00:00:00", "01 02 14 29 59", "03" ] -, [ 211, "9656A33A-C34E-4F34-A928-5010D8584C0C", 211, 1435028542, "708543", 1435028542, "708543", "{\n}", "2015-06-22T00:00:00", "05 26 27 51 59", "02" ] -, [ 213, "EBF6F368-12B2-4DA9-941C-9A1CD9982750", 213, 1435287707, "708543", 1435287707, "708543", "{\n}", "2015-06-25T00:00:00", "03 26 27 29 58", "01" ] -, [ 215, "C95EA299-841C-470A-A919-660D41CB7A19", 215, 1435633286, "708543", 1435633286, "708543", "{\n}", "2015-06-29T00:00:00", "01 19 37 49 56", "03" ] -, [ 217, "8E894D24-2D77-4E0C-ADFE-39BC258A29DC", 217, 1435892551, "708543", 1435892551, "708543", "{\n}", "2015-07-02T00:00:00", "18 19 31 43 54", "03" ] -, [ 219, "8536A4D2-1AD1-4009-A572-3E5A6162C627", 219, 1436238167, "708543", 1436238167, "708543", "{\n}", "2015-07-06T00:00:00", "03 10 30 33 40", "01" ] -, [ 221, "C46245BD-9AE0-441F-B363-E17E984A3CFA", 221, 1436497289, "708543", 1436497289, "708543", "{\n}", "2015-07-09T00:00:00", "19 34 36 54 55", "01" ] -, [ 223, "4BDC3777-34BD-4258-8E5C-A964D265E8A6", 223, 1436842990, "708543", 1436842990, "708543", null, "2015-07-13T00:00:00", "05 23 27 55 57", "01" ] -, [ 224, "10889320-B901-47FC-AFD6-75BDE9356FF7", 224, 1437102065, "708543", 1437102065, "708543", null, "2015-07-16T00:00:00", "22 29 47 53 54", "03" ] -, [ 225, "9A754F78-F807-4021-B9A7-035BA2C6CBE1", 225, 1437447725, "708543", 1437447725, "708543", null, "2015-07-20T00:00:00", "10 29 47 48 55", "04" ] -, [ 226, "8EA5F297-5030-4AA2-AE0E-9A71375EE66B", 226, 1437706890, "708543", 1437706890, "708543", null, "2015-07-23T00:00:00", "08 26 28 41 52", "04" ] -, [ 227, "6373AF9F-31E8-4346-9422-1994C4DE879D", 227, 1438052506, "708543", 1438052506, "708543", null, "2015-07-27T00:00:00", "03 05 36 43 53", "03" ] -, [ 228, "498DEED9-EFBF-4296-B13B-AEC0017F3135", 228, 1438311725, "708543", 1438311725, "708543", null, "2015-07-30T00:00:00", "15 16 26 27 51", "02" ] -, [ 229, "9E06C3EA-C137-4F17-A67F-C8CE28D8BEF8", 229, 1438657327, "708543", 1438657327, "708543", null, "2015-08-03T00:00:00", "25 29 30 38 39", "03" ] -, [ 230, "05461696-20D9-417B-90D2-4351469BBA1F", 230, 1438916529, "708543", 1438916529, "708543", null, "2015-08-06T00:00:00", "04 05 24 31 42", "02" ] -, [ 231, "DF0DB2F5-0C4E-4953-B716-B95ADAE9A742", 231, 1439262152, "708543", 1439262152, "708543", null, "2015-08-10T00:00:00", "02 07 11 33 47", "02" ] -, [ 232, "74954961-473B-4546-8C15-42BBDD81C47B", 232, 1439564546, "708543", 1439564546, "708543", null, "2015-08-13T00:00:00", "08 12 50 51 56", "04" ] -, [ 233, "CAC3EB9F-5BF5-454A-86BD-68A3F18DBDB6", 233, 1439866949, "708543", 1439866949, "708543", null, "2015-08-17T00:00:00", "05 19 21 24 27", "03" ] -, [ 234, "910E19A6-4152-4BDE-9BF1-60AA55BED6F3", 234, 1440126149, "708543", 1440126149, "708543", null, "2015-08-20T00:00:00", "06 14 25 39 56", "04" ] -, [ 235, "03CF6AAE-2276-4DC4-AC2D-7F9A038AA615", 235, 1440471749, "708543", 1440471749, "708543", null, "2015-08-24T00:00:00", "02 19 35 37 44", "03" ] -, [ 236, "21833935-DBB4-4A8C-ACEB-8C28EC36AD6B", 236, 1440730943, "708543", 1440730943, "708543", null, "2015-08-27T00:00:00", "05 29 37 55 58", "02" ] -, [ 237, "05804F56-7B0A-4227-9EF4-2E98CA8B9129", 237, 1441076532, "708543", 1441076532, "708543", null, "2015-08-31T00:00:00", "12 15 44 45 47", "01" ] -, [ 238, "69159851-6432-4A78-83D8-4D47C1871671", 238, 1441335740, "708543", 1441335740, "708543", null, "2015-09-03T00:00:00", "20 33 46 49 51", "04" ] -, [ 239, "C1500EE4-EB00-4C95-B624-88DC44D43872", 239, 1441681331, "708543", 1441681331, "708543", null, "2015-09-07T00:00:00", "04 21 26 45 46", "04" ] -, [ 240, "D7558560-CCF8-430B-A516-6A02D1C6C6BC", 240, 1442286105, "708543", 1442286105, "708543", null, "2015-09-14T00:00:00", "03 07 14 19 25", "02" ] -, [ 241, "819B7082-516B-4A46-94ED-CD29F5AFF3AF", 241, 1442545304, "708543", 1442545304, "708543", null, "2015-09-17T00:00:00", "14 15 17 35 56", "02" ] -, [ 242, "9F4B80B3-0FC2-41CA-A394-E1FD348C43D5", 242, 1442890890, "708543", 1442890890, "708543", null, "2015-09-21T00:00:00", "17 27 39 44 49", "01" ] -, [ 243, "3D22C9B7-519E-4549-BCF9-7DD9B46A441A", 243, 1442934107, "708543", 1442934107, "708543", null, "2015-09-10T00:00:00", "11 16 50 55 56", "04" ] -, [ 244, "46D6D1F4-BD73-4959-9240-FEC3E7D0F0CF", 244, 1443150147, "708543", 1443150147, "708543", null, "2015-09-24T00:00:00", "14 17 29 39 50", "03" ] -, [ 245, "49D625D0-79BE-4144-A9BE-F1BE234D202D", 245, 1443495706, "708543", 1443495706, "708543", null, "2015-09-28T00:00:00", "01 25 29 43 54", "02" ] -, [ 246, "DC858348-F3ED-4D7C-858C-E914015E5E6A", 246, 1443754927, "708543", 1443754927, "708543", null, "2015-10-01T00:00:00", "25 37 39 47 55", "03" ] -, [ 247, "81C2B637-F49A-41B4-800F-1D6DDC3ACF3E", 247, 1444100546, "708543", 1444100546, "708543", null, "2015-10-05T00:00:00", "08 20 34 41 43", "03" ] -, [ 248, "9013BCB6-CE28-4C96-ADC8-25C2329E6653", 248, 1444359767, "708543", 1444359767, "708543", null, "2015-10-08T00:00:00", "25 27 28 42 53", "02" ] -, [ 249, "8B2BA24A-545E-4453-939D-7B9AF5A82F1B", 249, 1444705326, "708543", 1444705326, "708543", null, "2015-10-12T00:00:00", "28 30 36 38 39", "04" ] -, [ 250, "F0E3B49C-EF02-4205-8C7C-06B79D869EB0", 250, 1444964525, "708543", 1444964525, "708543", null, "2015-10-15T00:00:00", "07 11 39 40 45", "02" ] -, [ 251, "BDAA2D7D-27B1-45EA-A1FB-7A5D0F0FCED2", 251, 1445310125, "708543", 1445310125, "708543", null, "2015-10-19T00:00:00", "04 08 31 46 54", "03" ] -, [ 252, "7423590E-8D14-45A2-9820-0AA6E0F39573", 252, 1445569305, "708543", 1445569305, "708543", null, "2015-10-22T00:00:00", "05 18 45 52 57", "02" ] -, [ 253, "40D07FF0-0812-4BA8-96CC-777F1BE5CC81", 253, 1445914946, "708543", 1445914946, "708543", null, "2015-10-26T00:00:00", "17 20 45 49 58", "02" ] -, [ 254, "70C6BBEF-E408-489E-8944-F99F53CA4108", 254, 1446174085, "708543", 1446174085, "708543", null, "2015-10-29T00:00:00", "10 31 32 34 51", "04" ] -, [ 255, "CD77860A-B40A-4809-8C24-3FA2360ED81A", 255, 1446519796, "708543", 1446519796, "708543", null, "2015-11-02T00:00:00", "01 07 12 34 44", "01" ] -, [ 256, "C558D5E5-22CC-43EA-BDA7-D44CCFB7F83A", 256, 1446778887, "708543", 1446778887, "708543", null, "2015-11-05T00:00:00", "13 20 25 31 51", "03" ] -, [ 257, "7461A9DC-4A7C-4E6F-90A2-AD8B7D5797D4", 257, 1447124506, "708543", 1447124506, "708543", null, "2015-11-09T00:00:00", "06 09 11 27 37", "03" ] -, [ 258, "F49A1AEC-852B-4F80-A7B4-8A1C92B3DE82", 258, 1447383624, "708543", 1447383624, "708543", null, "2015-11-12T00:00:00", "06 41 44 49 56", "04" ] -, [ 259, "4E5D11CB-2D6A-4221-A4C4-3ABC18F9FB46", 259, 1447729327, "708543", 1447729327, "708543", null, "2015-11-16T00:00:00", "06 20 28 34 40", "03" ] -, [ 260, "416BEBC5-580E-4D05-9749-C0F135231E80", 260, 1447988529, "708543", 1447988529, "708543", null, "2015-11-19T00:00:00", "02 07 21 38 48", "04" ] -, [ 261, "B1D35BFE-94AC-424B-868F-0F6F15AD4EB4", 261, 1448334106, "708543", 1448334106, "708543", null, "2015-11-23T00:00:00", "04 21 42 43 59", "04" ] -, [ 262, "14B39058-519A-4E79-9012-BE289B006246", 262, 1448593285, "708543", 1448593285, "708543", null, "2015-11-26T00:00:00", "13 23 43 47 59", "03" ] -, [ 263, "0511598D-7453-4CFF-BA2C-E58525A8AFF0", 263, 1448938966, "708543", 1448938966, "708543", null, "2015-11-30T00:00:00", "04 07 08 19 53", "04" ] -, [ 264, "BA08DC3D-1F1A-4F33-B8DC-1EAD043EDA4A", 264, 1449198126, "708543", 1449198126, "708543", null, "2015-12-03T00:00:00", "08 10 27 37 39", "01" ] -, [ 265, "E6957ED1-4C85-42E5-B20F-A413B19E9AD9", 265, 1449543688, "708543", 1449543688, "708543", null, "2015-12-07T00:00:00", "03 05 36 40 44", "02" ] -, [ 266, "9CE576B4-F88C-4AEB-905F-6EAF7F29C942", 266, 1449802936, "708543", 1449802936, "708543", null, "2015-12-10T00:00:00", "10 47 48 53 58", "02" ] -, [ 267, "76C71A89-020A-4154-89CB-E7E8FFFE597A", 267, 1450148626, "708543", 1450148626, "708543", null, "2015-12-14T00:00:00", "46 50 56 57 58", "01" ] -, [ 268, "90567CD2-57B0-4436-84FB-9FFB867E870F", 268, 1450407725, "708543", 1450407725, "708543", null, "2015-12-17T00:00:00", "26 49 52 54 56", "01" ] -, [ 269, "8B379FC0-AF52-437C-99E5-7F12F4F92213", 269, 1450753388, "708543", 1450753388, "708543", null, "2015-12-21T00:00:00", "09 27 33 40 49", "03" ] -, [ 270, "74367FD8-49EB-40D0-B411-210103794D50", 270, 1451012527, "708543", 1451012527, "708543", null, "2015-12-24T00:00:00", "05 19 36 41 55", "02" ] -, [ 271, "93018B4E-8B54-45CC-B998-A5BF858BDC9F", 271, 1451358229, "708543", 1451358229, "708543", null, "2015-12-28T00:00:00", "07 11 16 23 24", "02" ] -, [ 272, "A295AB45-D532-44E4-BACA-AC0A70587F5E", 272, 1451617326, "708543", 1451617326, "708543", null, "2015-12-31T00:00:00", "01 05 24 47 55", "01" ] -, [ 273, "B8E84552-9E0A-4B17-836B-AAE4079BC556", 273, 1451962965, "708543", 1451962965, "708543", null, "2016-01-04T00:00:00", "08 19 25 51 52", "03" ] -, [ 274, "BE18BC72-52BE-4033-B8A9-4626A8CF0EEB", 274, 1451963067, "708543", 1451963067, "708543", null, "2015-03-12T00:00:00", "03 06 17 47 48", "01" ] -, [ 275, "2E040FA4-DBA5-4784-9B4D-2876309578F3", 275, 1452222146, "708543", 1452222146, "708543", null, "2016-01-07T00:00:00", "14 31 37 54 56", "01" ] -, [ 276, "4FDFAA43-4862-4F0A-B041-BC3ADA834F35", 276, 1452567745, "708543", 1452567745, "708543", null, "2016-01-11T00:00:00", "04 20 30 34 36", "02" ] -, [ 277, "CFAA63BC-0EA2-4CB5-9E1A-AB5D99D0DB67", 277, 1452826946, "708543", 1452826946, "708543", null, "2016-01-14T00:00:00", "23 27 29 36 60", "04" ] -, [ 278, "2A929F8D-6EF6-4468-8AAE-FB650C9C0575", 278, 1453172605, "708543", 1453172605, "708543", null, "2016-01-18T00:00:00", "14 17 39 43 51", "03" ] -, [ 279, "713D5E49-AB48-49B7-9E0A-983831BA98B9", 279, 1453431707, "708543", 1453431707, "708543", null, "2016-01-21T00:00:00", "11 13 36 46 48", "04" ] -, [ 280, "87722842-E694-462C-BCE2-33F27977EAFF", 280, 1453777406, "708543", 1453777406, "708543", null, "2016-01-25T00:00:00", "19 24 38 55 56", "04" ] -, [ 281, "47C6704D-9200-4B34-B220-05C000CF8FA0", 281, 1454036487, "708543", 1454036487, "708543", null, "2016-01-28T00:00:00", "04 05 15 25 59", "02" ] -, [ 282, "7BBFAE55-5759-4C8C-957A-6B492291B6A8", 282, 1454382227, "708543", 1454382227, "708543", null, "2016-02-01T00:00:00", "02 09 22 43 44", "01" ] -, [ 283, "C121AB49-5B80-494E-8F1A-BFBD4A303F77", 283, 1454641306, "708543", 1454641306, "708543", null, "2016-02-04T00:00:00", "08 12 23 40 54", "01" ] -, [ 284, "7B04BDF0-3D43-48EA-ADE6-9CD4834A07CB", 284, 1454987128, "708543", 1454987128, "708543", null, "2016-02-08T00:00:00", "13 23 48 57 59", "02" ] -, [ 285, "82C7F79A-D888-4ADF-9588-E26CEFBECCDD", 285, 1455246328, "708543", 1455246328, "708543", null, "2016-02-11T00:00:00", "06 31 35 40 55", "02" ] -, [ 286, "8EC5B96F-C188-4465-89EB-F887EB3D0EE1", 286, 1455591808, "708543", 1455591808, "708543", null, "2016-02-15T00:00:00", "02 09 30 37 42", "02" ] -, [ 287, "C8975BF7-2707-4128-B038-CA24C6479AC6", 287, 1455850911, "708543", 1455850911, "708543", null, "2016-02-18T00:00:00", "21 24 37 38 49", "04" ] -, [ 288, "C2C83C0F-110F-48DF-BB4B-5FA814445E21", 288, 1456196566, "708543", 1456196566, "708543", null, "2016-02-22T00:00:00", "08 09 10 11 27", "04" ] -, [ 289, "70EA9E33-5346-4356-8B0D-BB5D4994D0C2", 289, 1456455707, "708543", 1456455707, "708543", null, "2016-02-25T00:00:00", "02 16 19 33 39", "03" ] -, [ 290, "77747333-4D77-461B-91BE-321169F75BBE", 290, 1456801366, "708543", 1456801366, "708543", null, "2016-02-29T00:00:00", "03 17 26 47 58", "01" ] -, [ 291, "8B5BFF9C-D3B5-4363-8919-9920B32B5972", 291, 1457060507, "708543", 1457060507, "708543", null, "2016-03-03T00:00:00", "07 13 35 40 45", "04" ] -, [ 292, "0A190D1C-A984-4C3B-85A3-7888E3EB6AFB", 292, 1457406146, "708543", 1457406146, "708543", null, "2016-03-07T00:00:00", "09 21 24 37 38", "02" ] -, [ 293, "D5CF7DBD-F742-46B5-933B-0461C4AF35BD", 293, 1457665307, "708543", 1457665307, "708543", null, "2016-03-10T00:00:00", "06 12 21 40 57", "01" ] -, [ 294, "438D098F-0FD7-4AE4-ABE1-5F3B627598A6", 294, 1458010948, "708543", 1458010948, "708543", null, "2016-03-14T00:00:00", "17 28 37 38 41", "01" ] -, [ 295, "3753CF29-DD5E-4E34-B0B2-DCE5A4705745", 295, 1458270085, "708543", 1458270085, "708543", null, "2016-03-17T00:00:00", "11 16 34 44 56", "01" ] -, [ 296, "D72F0087-09BE-49E2-AC57-6745208BFD3A", 296, 1458615706, "708543", 1458615706, "708543", null, "2016-03-21T00:00:00", "13 30 41 50 55", "01" ] -, [ 297, "E3AA41F1-C4D0-4868-AB15-115FC538A42D", 297, 1458874906, "708543", 1458874906, "708543", null, "2016-03-24T00:00:00", "17 24 30 45 48", "03" ] -, [ 298, "C2BF8733-16B5-4227-8C6A-B844DB98C50C", 298, 1459220505, "708543", 1459220505, "708543", null, "2016-03-28T00:00:00", "20 33 49 53 56", "04" ] -, [ 299, "4F49FA6F-1798-4D53-A584-C20494804316", 299, 1459479705, "708543", 1459479705, "708543", null, "2016-03-31T00:00:00", "09 17 28 38 45", "01" ] -, [ 300, "A447AD72-8550-482E-97C7-3C99DF68E0CF", 300, 1459825329, "708543", 1459825329, "708543", null, "2016-04-04T00:00:00", "05 26 32 36 58", "04" ] -, [ 301, "58B023C5-98DF-40D0-83E0-F59455C54A22", 301, 1460084526, "708543", 1460084526, "708543", null, "2016-04-07T00:00:00", "02 11 32 50 54", "02" ] -, [ 302, "EF0612D5-4C76-415B-B319-6AEC5556CF37", 302, 1460430128, "708543", 1460430128, "708543", null, "2016-04-11T00:00:00", "15 30 34 38 55", "02" ] -, [ 303, "A97F5813-253E-4260-8574-D345AFC22F9D", 303, 1460689307, "708543", 1460689307, "708543", null, "2016-04-14T00:00:00", "24 25 48 55 56", "02" ] -, [ 304, "3C793ED7-C910-471F-B618-B402368054AE", 304, 1461034930, "708543", 1461034930, "708543", null, "2016-04-18T00:00:00", "06 25 29 33 44", "02" ] -, [ 305, "36F1E6A8-801D-4403-A665-5EEAB32626AB", 305, 1461294107, "708543", 1461294107, "708543", null, "2016-04-21T00:00:00", "06 12 20 40 53", "04" ] -, [ 306, "EADE786A-269F-400F-8C33-89F4B0AD1942", 306, 1461639766, "708543", 1461639766, "708543", null, "2016-04-25T00:00:00", "02 18 27 52 57", "04" ] -, [ 307, "AB171349-0D36-4C32-AA59-4FBBC152CAF8", 307, 1461898908, "708543", 1461898908, "708543", null, "2016-04-28T00:00:00", "04 14 22 47 58", "03" ] -, [ 308, "CCF28D0A-BF2A-493D-AB70-A9FF0030A0D8", 308, 1462244607, "708543", 1462244607, "708543", null, "2016-05-02T00:00:00", "10 14 30 55 56", "01" ] -, [ 309, "4B2467EE-76B5-4234-93AF-08DA874D2C97", 309, 1462503706, "708543", 1462503706, "708543", null, "2016-05-05T00:00:00", "17 18 30 43 49", "04" ] -, [ 310, "D1703DB4-0C48-4EE1-9143-EE7D721F51E0", 310, 1462849327, "708543", 1462849327, "708543", null, "2016-05-09T00:00:00", "20 23 38 48 56", "03" ] -, [ 311, "A92AB3F1-4B91-4DAD-9B0B-ED02022D66E2", 311, 1463108526, "708543", 1463108526, "708543", null, "2016-05-12T00:00:00", "04 13 15 16 32", "04" ] -, [ 312, "50F030BF-4F12-4CB4-927F-5CAFDF89C31E", 312, 1463454165, "708543", 1463454165, "708543", null, "2016-05-16T00:00:00", "04 20 25 32 45", "03" ] -, [ 313, "FA8A7822-FDF4-4388-8AF3-6E9D045D78B8", 313, 1463713286, "708543", 1463713286, "708543", null, "2016-05-19T00:00:00", "10 18 37 40 57", "04" ] -, [ 314, "D6178B28-AE42-4CA4-9FF0-D9B878E98335", 314, 1464058906, "708543", 1464058906, "708543", null, "2016-05-23T00:00:00", "04 19 26 33 58", "02" ] -, [ 315, "551DFBDF-EC8E-456D-A09D-5A9B8B42BD9D", 315, 1464318105, "708543", 1464318105, "708543", null, "2016-05-26T00:00:00", "04 13 26 34 43", "03" ] -, [ 316, "B4E5CA65-8F5C-4A75-A68E-01CD98074B29", 316, 1464663786, "708543", 1464663786, "708543", null, "2016-05-30T00:00:00", "05 07 27 28 36", "04" ] -, [ 317, "E7E2C9F9-A64E-43EB-B9C7-BD6D8E4962C4", 317, 1464922887, "708543", 1464922887, "708543", null, "2016-06-02T00:00:00", "18 28 30 31 37", "02" ] -, [ 318, "C45FF1A8-7331-4DC6-9AB6-E4DE04A0B09C", 318, 1465268547, "708543", 1465268547, "708543", null, "2016-06-06T00:00:00", "18 25 35 41 57", "02" ] -, [ 319, "58BB5146-A70B-41DE-AFCF-5E024D26B38F", 319, 1465527708, "708543", 1465527708, "708543", null, "2016-06-09T00:00:00", "01 04 12 33 41", "02" ] -, [ 320, "68C6831F-536C-4009-BFB9-BC3A2B4AD625", 320, 1465873309, "708543", 1465873309, "708543", null, "2016-06-13T00:00:00", "35 40 51 55 60", "01" ] -, [ 321, "5C1548EC-0215-4D3E-87AA-8D807B4E60FB", 321, 1466132506, "708543", 1466132506, "708543", null, "2016-06-16T00:00:00", "03 17 22 57 59", "02" ] -, [ 322, "830DCC3A-6742-4948-89CC-82FBA203A36C", 322, 1466478145, "708543", 1466478145, "708543", null, "2016-06-20T00:00:00", "01 12 14 32 60", "03" ] -, [ 323, "5DF63F07-C89F-486B-8B29-7772ABEF0A92", 323, 1466737307, "708543", 1466737307, "708543", null, "2016-06-23T00:00:00", "01 09 36 38 46", "01" ] -, [ 324, "FC9292E2-8D42-4696-81F8-F5377A8C59D6", 324, 1467082985, "708543", 1467082985, "708543", null, "2016-06-27T00:00:00", "02 03 09 27 37", "01" ] -, [ 325, "1954E04D-32A1-45E0-9ACF-B47404D258DF", 325, 1467342107, "708543", 1467342107, "708543", null, "2016-06-30T00:00:00", "04 09 10 31 34", "03" ] -, [ 326, "7C56F803-F4B5-4DA0-8C97-9B7FA2ADC1F3", 326, 1467687725, "708543", 1467687725, "708543", null, "2016-07-04T00:00:00", "02 15 17 18 52", "01" ] -, [ 327, "4294E688-3864-491C-86C9-CA646EC2C49C", 327, 1467947025, "708543", 1467947025, "708543", null, "2016-07-07T00:00:00", "04 08 26 41 55", "03" ] -, [ 328, "066CD036-4708-429B-9B76-060E77753B4C", 328, 1468292515, "708543", 1468292515, "708543", null, "2016-07-11T00:00:00", "16 20 25 27 43", "03" ] -, [ 329, "AAA3A2F3-5860-4F9F-94D1-C28D152A2621", 329, 1468551706, "708543", 1468551706, "708543", null, "2016-07-14T00:00:00", "03 08 11 24 25", "02" ] -, [ 330, "FC5C2E01-2289-433A-88D1-50430851D90D", 330, 1468897350, "708543", 1468897350, "708543", null, "2016-07-18T00:00:00", "13 45 51 58 60", "01" ] -, [ 331, "7521FBF4-81E2-4DED-ADDD-74F693D0031D", 331, 1469156485, "708543", 1469156485, "708543", null, "2016-07-21T00:00:00", "01 04 18 29 32", "01" ] -, [ 332, "7153C695-63D1-49A3-91D2-082D09171CC0", 332, 1469502126, "708543", 1469502126, "708543", null, "2016-07-25T00:00:00", "11 12 23 26 43", "02" ] -, [ 333, "27681D0A-040F-4D9A-A119-13C4392622CF", 333, 1469761306, "708543", 1469761306, "708543", null, "2016-07-28T00:00:00", "13 19 32 36 41", "02" ] -, [ 334, "75246569-4982-4E24-81AA-45F9A9803C8D", 334, 1470106886, "708543", 1470106886, "708543", null, "2016-08-01T00:00:00", "32 34 36 39 46", "01" ] -, [ 335, "1382260F-0898-4945-AB2E-8DC51E11593A", 335, 1470366105, "708543", 1470366105, "708543", null, "2016-08-04T00:00:00", "08 22 41 54 56", "01" ] -, [ 336, "3ADD1C00-4497-450C-ADDD-300DA05C1BE8", 336, 1470711725, "708543", 1470711725, "708543", null, "2016-08-08T00:00:00", "04 07 08 12 23", "01" ] -, [ 337, "8AEC193F-651F-4C61-8F91-792211203FB9", 337, 1470970905, "708543", 1470970905, "708543", null, "2016-08-11T00:00:00", "03 34 44 53 55", "04" ] -, [ 338, "BFCE5235-8BFE-4DDB-B133-92787B11E6F1", 338, 1471316525, "708543", 1471316525, "708543", null, "2016-08-15T00:00:00", "13 40 48 50 57", "04" ] -, [ 339, "E69693B0-5EE1-4E00-80F8-5E3826BDF3C2", 339, 1471575706, "708543", 1471575706, "708543", null, "2016-08-18T00:00:00", "07 24 25 56 58", "03" ] -, [ 340, "866871A3-7952-4D0F-A557-86147F0FFABB", 340, 1472076169, "708543", 1472076169, "708543", null, "2016-08-22T00:00:00", "08 12 22 56 58", "01" ] -, [ 341, "542C6698-71F5-4698-84EC-06F2660FD6F8", 341, 1472205665, "708543", 1472205665, "708543", null, "2016-08-25T00:00:00", "10 17 24 47 59", "02" ] -, [ 342, "C51D55B6-5946-456C-A55F-D0AB8A2D4A21", 342, 1472551269, "708543", 1472551269, "708543", null, "2016-08-29T00:00:00", "05 21 25 31 55", "04" ] -, [ 343, "B6A9851F-B803-47E0-8049-8C2D87476A7F", 343, 1472810465, "708543", 1472810465, "708543", null, "2016-09-01T00:00:00", "17 45 46 51 53", "02" ] -, [ 344, "1AE0AF41-51F0-48B3-8843-EBEE145E8325", 344, 1473268891, "708543", 1473268891, "708543", null, "2016-09-05T00:00:00", "16 19 40 41 43", "03" ] -, [ 345, "21F27DE2-45CC-4D6B-9FD0-1D8CA8A20024", 345, 1473445246, "708543", 1473445246, "708543", null, "2016-09-08T00:00:00", "03 07 22 37 60", "02" ] -, [ 346, "9E61A94F-8971-4347-8E38-3505413BF359", 346, 1473760864, "708543", 1473760864, "708543", null, "2016-09-12T00:00:00", "01 32 39 55 58", "02" ] -, [ 347, "B18D0A66-3AC8-43B6-8E40-BD28B95874E9", 347, 1474020065, "708543", 1474020065, "708543", null, "2016-09-15T00:00:00", "11 20 54 59 60", "02" ] -, [ 348, "FF974006-3F5C-452D-8067-DB663B1E4070", 348, 1474365664, "708543", 1474365664, "708543", null, "2016-09-19T00:00:00", "19 40 49 54 56", "04" ] -, [ 349, "3A072E03-BC85-4F81-8ED9-436ED49F4DFA", 349, 1474624871, "708543", 1474624871, "708543", null, "2016-09-22T00:00:00", "01 03 24 42 59", "01" ] -, [ 350, "1C880DFC-09D3-4108-9038-721786886E91", 350, 1474970463, "708543", 1474970463, "708543", null, "2016-09-26T00:00:00", "36 44 50 54 60", "04" ] -, [ 351, "3A5F2AF8-1578-4EA2-93BD-D1AE9BB6605F", 351, 1475229663, "708543", 1475229663, "708543", null, "2016-09-29T00:00:00", "13 25 39 51 55", "03" ] -, [ 352, "2BC4E88D-7706-40B9-A71D-DCA1F37EED76", 352, 1475575263, "708543", 1475575263, "708543", null, "2016-10-03T00:00:00", "05 48 49 52 58", "02" ] -, [ 353, "5B7DD3A9-D218-4210-AA73-BCBEAFD8A807", 353, 1475834463, "708543", 1475834463, "708543", null, "2016-10-06T00:00:00", "05 07 09 12 43", "02" ] -, [ 354, "9203C4C9-9D90-47D5-8CEB-A1B92BBB6648", 354, 1476180084, "708543", 1476180084, "708543", null, "2016-10-10T00:00:00", "11 35 38 45 58", "01" ] -, [ 355, "BF36F047-2FBA-452E-911A-756F1D1BFE6A", 355, 1476439263, "708543", 1476439263, "708543", null, "2016-10-13T00:00:00", "03 19 21 26 43", "03" ] -, [ 356, "0E587093-37FA-40EE-AF54-B0BA90D3C41C", 356, 1476784863, "708543", 1476784863, "708543", null, "2016-10-17T00:00:00", "04 16 35 37 55", "04" ] -, [ 357, "E64FCA93-AD90-4C08-96F6-F5D3893F4864", 357, 1477044065, "708543", 1477044065, "708543", null, "2016-10-20T00:00:00", "06 38 40 48 57", "02" ] -, [ 358, "207063E0-B35C-47A9-B86A-29C9303F8C99", 358, 1477411657, "708543", 1477411657, "708543", null, "2016-10-24T00:00:00", "01 02 20 40 55", "04" ] -, [ 359, "12F517F0-6AB0-49AF-B3FD-60551DB5E71C", 359, 1477648862, "708543", 1477648862, "708543", null, "2016-10-27T00:00:00", "15 16 19 37 40", "04" ] -, [ 360, "BDFDD6D9-6C78-4ADD-9D8C-1BC306BF9D47", 360, 1477994484, "708543", 1477994484, "708543", null, "2016-10-31T00:00:00", "17 25 38 41 58", "03" ] -, [ 361, "0F8581C9-2308-4CF3-85AF-58997BAA6195", 361, 1478253663, "708543", 1478253663, "708543", null, "2016-11-03T00:00:00", "05 10 29 37 59", "04" ] -, [ 362, "B1A0DE7D-8653-4174-8165-6178E15DE970", 362, 1478602863, "708543", 1478602863, "708543", null, "2016-11-07T00:00:00", "09 11 20 37 60", "02" ] -, [ 363, "1881FB59-CACC-4DE1-811E-470ACEB648AA", 363, 1478862062, "708543", 1478862062, "708543", null, "2016-11-10T00:00:00", "06 07 17 20 44", "02" ] -, [ 364, "EA961E65-99E4-4534-8AD0-927FD4B33152", 364, 1479207685, "708543", 1479207685, "708543", null, "2016-11-14T00:00:00", "03 10 20 30 43", "01" ] -, [ 365, "444F25A6-0B87-4BFC-81F0-48169EB912CB", 365, 1479466863, "708543", 1479466863, "708543", null, "2016-11-17T00:00:00", "06 30 32 35 48", "01" ] -, [ 366, "A1B19B86-0101-422D-ACA5-6E0F257F9936", 366, 1479812595, "708543", 1479812595, "708543", null, "2016-11-21T00:00:00", "08 11 37 41 54", "04" ] -, [ 367, "F3666FC9-4209-46DC-A083-AAB50F49AE32", 367, 1480071815, "708543", 1480071815, "708543", null, "2016-11-24T00:00:00", "04 24 25 32 46", "01" ] -, [ 368, "4610C832-DE20-48B3-BC5C-4C599067F3DB", 368, 1480417262, "708543", 1480417262, "708543", null, "2016-11-28T00:00:00", "22 32 42 45 49", "04" ] -, [ 369, "1559BB20-317A-4092-8966-788A8265EEA5", 369, 1480676463, "708543", 1480676463, "708543", null, "2016-12-01T00:00:00", "17 23 30 49 55", "01" ] -, [ 370, "3B1D2CEB-0135-4AE2-A220-76D269851B3B", 370, 1481022063, "708543", 1481022063, "708543", null, "2016-12-05T00:00:00", "05 06 19 22 45", "04" ] -, [ 371, "A04FCBEE-20D1-43E9-8B8B-3367AED3A724", 371, 1481281263, "708543", 1481281263, "708543", null, "2016-12-08T00:00:00", "08 28 29 49 57", "03" ] -, [ 372, "34543D5E-6964-494C-B91E-E4CDF4DC14A3", 372, 1481626862, "708543", 1481626862, "708543", null, "2016-12-12T00:00:00", "14 19 48 53 54", "04" ] -, [ 373, "A1020F9A-D7C6-4CC3-AC05-AAA2D238DD55", 373, 1481886064, "708543", 1481886064, "708543", null, "2016-12-15T00:00:00", "05 07 21 44 57", "02" ] -, [ 374, "BDF2DA85-5CEB-48CC-B9E3-E2FBCEB23C2B", 374, 1482231662, "708543", 1482231662, "708543", null, "2016-12-19T00:00:00", "01 08 16 22 47", "03" ] -, [ 375, "FA3C3D28-FD22-4EC5-8336-7C846CAD2443", 375, 1482577419, "708543", 1482577419, "708543", null, "2016-12-22T00:00:00", "14 19 32 38 43", "03" ] -, [ 376, "4C35A52C-6907-43EC-86FF-4B4BEC6A5E49", 376, 1482836463, "708543", 1482836463, "708543", null, "2016-12-26T00:00:00", "04 12 29 31 36", "01" ] -, [ 377, "C6F39639-73F6-4154-BD6E-B132ED1105E8", 377, 1483095662, "708543", 1483095662, "708543", null, "2016-12-29T00:00:00", "11 16 19 29 34", "01" ] -, [ 378, "7AF97546-0AD7-40C7-BFE0-40A1E0BB1B33", 378, 1483441353, "708543", 1483441353, "708543", null, "2017-01-02T00:00:00", "26 31 37 38 41", "02" ] -, [ 379, "E983310B-B8AF-4A58-858F-0E9304EA8249", 379, 1483700569, "708543", 1483700569, "708543", null, "2017-01-05T00:00:00", "05 18 42 44 46", "04" ] -, [ 380, "103D6B62-39BE-4EA4-B534-08BB03C150C8", 380, 1484046133, "708543", 1484046133, "708543", null, "2017-01-09T00:00:00", "21 28 31 44 51", "01" ] -, [ 381, "7CD6CAB4-8153-4BB3-A27B-A542AB245036", 381, 1484305263, "708543", 1484305263, "708543", null, "2017-01-12T00:00:00", "06 32 37 50 56", "01" ] -, [ 382, "0BA4693E-BAB9-474B-AF77-E1167BC331B6", 382, 1484650863, "708543", 1484650863, "708543", null, "2017-01-16T00:00:00", "03 15 16 19 26", "01" ] -, [ 383, "F8E9EA6C-E90D-4747-9B9E-ABED48B51012", 383, 1484910064, "708543", 1484910064, "708543", null, "2017-01-19T00:00:00", "14 32 37 43 45", "02" ] -, [ 384, "933403B9-374D-4F52-9016-A366170C7B80", 384, 1485255703, "708543", 1485255703, "708543", null, "2017-01-23T00:00:00", "16 24 32 44 48", "01" ] -, [ 385, "1911AB83-55BF-41DA-9435-80647451B102", 385, 1485514863, "708543", 1485514863, "708543", null, "2017-01-26T00:00:00", "01 14 25 40 59", "02" ] -, [ 386, "C9A55462-3885-4282-B2F9-D81DF650BB2A", 386, 1485860463, "708543", 1485860463, "708543", null, "2017-01-30T00:00:00", "11 20 31 34 51", "03" ] -, [ 387, "0EBCE21B-9B55-455B-B50B-2C59071D79EB", 387, 1486119661, "708543", 1486119661, "708543", null, "2017-02-02T00:00:00", "13 20 24 37 58", "02" ] -, [ 388, "EB111070-EDC8-4551-9340-2591ECD7C2C8", 388, 1486465263, "708543", 1486465263, "708543", null, "2017-02-06T00:00:00", "06 24 48 54 59", "02" ] -, [ 389, "1AD26A0B-D5BA-4645-ACCF-F46113F2338C", 389, 1486724463, "708543", 1486724463, "708543", null, "2017-02-09T00:00:00", "02 28 37 38 48", "04" ] -, [ 390, "5F8E008F-6819-4537-A227-B1B6E17F91B5", 390, 1487070063, "708543", 1487070063, "708543", null, "2017-02-13T00:00:00", "17 18 24 25 41", "01" ] -, [ 391, "835E6675-3ED7-4366-A2C9-CBA14A2E2D21", 391, 1487329283, "708543", 1487329283, "708543", null, "2017-02-16T00:00:00", "08 12 19 35 42", "04" ] -, [ 392, "92ACF91E-7E18-4474-B9CE-1FF4A6CA254C", 392, 1487674863, "708543", 1487674863, "708543", null, "2017-02-20T00:00:00", "13 16 23 37 48", "03" ] -, [ 393, "8F0AA716-50CD-4F3A-8C03-A30502C50F12", 393, 1487934063, "708543", 1487934063, "708543", null, "2017-02-23T00:00:00", "03 24 38 43 52", "03" ] -, [ 394, "FC265525-1D9E-4446-8D16-2E7B274FEE39", 394, 1488279663, "708543", 1488279663, "708543", null, "2017-02-27T00:00:00", "06 19 28 57 60", "01" ] -, [ 395, "C83F7BA9-4D51-4162-BB6B-0D18AAA63D7A", 395, 1488538863, "708543", 1488538863, "708543", null, "2017-03-02T00:00:00", "03 07 11 30 42", "03" ] -, [ 396, "48273180-B95E-4577-A184-BC322612FD77", 396, 1488884464, "708543", 1488884464, "708543", null, "2017-03-06T00:00:00", "01 05 14 22 50", "02" ] -, [ 397, "E6EDD74A-BFA0-43ED-A0A8-89F9F297CBC8", 397, 1489143662, "708543", 1489143662, "708543", null, "2017-03-09T00:00:00", "01 08 23 56 58", "03" ] -, [ 398, "638B5ABD-5A49-4D49-8E65-0C80CD12C359", 398, 1489485665, "708543", 1489485665, "708543", null, "2017-03-13T00:00:00", "13 16 17 24 50", "02" ] -, [ 399, "CE4D7DBB-FA7E-4A9E-B690-69ACF26681C2", 399, 1489744863, "708543", 1489744863, "708543", null, "2017-03-16T00:00:00", "13 14 36 48 57", "02" ] -, [ 400, "A79B333A-4D79-46AB-876A-ED37FDA22179", 400, 1490090463, "708543", 1490090463, "708543", null, "2017-03-20T00:00:00", "13 22 41 46 56", "02" ] -, [ 401, "7E5D329D-8BA7-4F19-A9C4-B0C54C20470B", 401, 1490349662, "708543", 1490349662, "708543", null, "2017-03-23T00:00:00", "02 28 30 39 53", "04" ] -, [ 402, "1985AC19-100B-4AB7-9576-B6B8227EE8C2", 402, 1490695263, "708543", 1490695263, "708543", null, "2017-03-27T00:00:00", "32 42 58 59 60", "04" ] -, [ 403, "B253914E-565E-4CDA-A8F7-739D870195D6", 403, 1490954462, "708543", 1490954462, "708543", null, "2017-03-30T00:00:00", "24 38 40 44 49", "02" ] -, [ 404, "6C4EA2A4-B16E-4933-94E4-CC03D67C41F5", 404, 1491300064, "708543", 1491300064, "708543", null, "2017-04-03T00:00:00", "12 15 28 46 57", "02" ] -, [ 405, "0ABBB5BF-08B3-4106-8C0B-A7E4D3FFAB85", 405, 1491559263, "708543", 1491559263, "708543", null, "2017-04-06T00:00:00", "04 06 17 48 53", "04" ] -, [ 406, "13B8CAA5-E796-4524-BEE5-74C3B4CE0262", 406, 1491904864, "708543", 1491904864, "708543", null, "2017-04-10T00:00:00", "20 22 37 55 56", "03" ] -, [ 407, "7BCBE538-0B50-436D-9590-53E8C5D90F37", 407, 1492164063, "708543", 1492164063, "708543", null, "2017-04-13T00:00:00", "17 19 49 50 56", "04" ] -, [ 408, "5958B7B7-B596-4599-9AFC-3605927278C3", 408, 1492509663, "708543", 1492509663, "708543", null, "2017-04-17T00:00:00", "05 09 12 33 46", "04" ] -, [ 409, "38574FCC-C191-429E-BA01-6945C49FDA31", 409, 1492768863, "708543", 1492768863, "708543", null, "2017-04-20T00:00:00", "22 23 37 56 60", "04" ] -, [ 410, "88377B77-8DFB-4B28-8D7C-778AE0574761", 410, 1493114484, "708543", 1493114484, "708543", null, "2017-04-24T00:00:00", "19 33 35 36 48", "02" ] -, [ 411, "7B77E69F-1E58-4F9E-928F-31136AB6E344", 411, 1493373665, "708543", 1493373665, "708543", null, "2017-04-27T00:00:00", "02 20 27 29 53", "04" ] -, [ 412, "D1439024-FE00-4907-BB75-A017CAE2298B", 412, 1493762464, "708543", 1493762464, "708543", null, "2017-05-01T00:00:00", "07 19 23 24 40", "02" ] -, [ 413, "14FA8C72-6190-46D3-B86D-6B04643CC1F9", 413, 1493978463, "708543", 1493978463, "708543", null, "2017-05-04T00:00:00", "01 02 17 24 38", "04" ] -, [ 414, "45E0D1A0-D009-4F72-8A54-2164799E0405", 414, 1494324065, "708543", 1494324065, "708543", null, "2017-05-08T00:00:00", "22 34 42 46 57", "03" ] -, [ 415, "877064A5-1C75-4A14-8504-678698EA5CE5", 415, 1494583263, "708543", 1494583263, "708543", null, "2017-05-11T00:00:00", "06 20 30 34 36", "01" ] -, [ 416, "9F38DE70-E408-4705-BD7F-BBB6E66DA750", 416, 1494928884, "708543", 1494928884, "708543", null, "2017-05-15T00:00:00", "02 27 28 34 39", "03" ] -, [ 417, "E1E94E70-16BB-4D44-878A-D98B8B080DFD", 417, 1495188064, "708543", 1495188064, "708543", null, "2017-05-18T00:00:00", "04 29 30 55 58", "03" ] -, [ 418, "96667C9D-2FF0-450B-905F-21D1F7EDB7CD", 418, 1495533664, "708543", 1495533664, "708543", null, "2017-05-22T00:00:00", "04 06 25 31 47", "01" ] -, [ 419, "AF4400B9-8891-4605-9F13-51937F17B03B", 419, 1495792863, "708543", 1495792863, "708543", null, "2017-05-25T00:00:00", "06 07 13 16 30", "01" ] -, [ 420, "048E1CAE-2335-44CB-9A83-5182E1340DB7", 420, 1496138464, "708543", 1496138464, "708543", null, "2017-05-29T00:00:00", "18 22 23 25 49", "04" ] -, [ 421, "1DB24704-5C12-4A46-8E68-CD1DD147BDEC", 421, 1496397665, "708543", 1496397665, "708543", null, "2017-06-01T00:00:00", "05 09 46 55 58", "04" ] -, [ 422, "FEE6742F-1091-4CD5-B512-702D5A4EC2B0", 422, 1496743263, "708543", 1496743263, "708543", null, "2017-06-05T00:00:00", "03 29 32 48 56", "01" ] -, [ 423, "0A4E5275-85AB-47AF-BC6B-E0F20AFB16C2", 423, 1497002463, "708543", 1497002463, "708543", null, "2017-06-08T00:00:00", "24 27 43 50 60", "03" ] -, [ 424, "303C188D-FDBB-45DD-85AC-05713746DB00", 424, 1497348063, "708543", 1497348063, "708543", null, "2017-06-12T00:00:00", "10 11 44 53 57", "03" ] -, [ 425, "D5521A42-7B8E-4543-A679-7E8B30420AD2", 425, 1497607263, "708543", 1497607263, "708543", null, "2017-06-15T00:00:00", "01 09 17 26 55", "01" ] -, [ 426, "6B9C238D-2DAD-4893-A400-41EE87FAA507", 426, 1497952863, "708543", 1497952863, "708543", null, "2017-06-19T00:00:00", "02 10 15 33 58", "04" ] -, [ 427, "2F1D8176-05CC-42FD-9948-2DF7D2D17789", 427, 1498212065, "708543", 1498212065, "708543", null, "2017-06-22T00:00:00", "31 40 45 54 57", "03" ] -, [ 428, "9BD5890A-DDD6-4F6B-BCB0-E8958FE6A64E", 428, 1498557663, "708543", 1498557663, "708543", null, "2017-06-26T00:00:00", "08 33 39 40 49", "02" ] -, [ 429, "7A097BCB-1AE8-4F43-A54C-74F145E6EC89", 429, 1498816862, "708543", 1498816862, "708543", null, "2017-06-29T00:00:00", "07 08 13 18 48", "02" ] -, [ 430, "1378F87D-4AE2-4A2E-9C6F-B16E64B6F6AE", 430, 1499162463, "708543", 1499162463, "708543", null, "2017-07-03T00:00:00", "04 28 40 41 48", "03" ] -, [ 431, "DC076E67-B307-40C0-8542-B2137A9AE611", 431, 1499421663, "708543", 1499421663, "708543", null, "2017-07-06T00:00:00", "04 09 39 44 52", "02" ] -, [ 432, "3E109B20-AE12-42CB-9DB9-2915BDB33484", 432, 1499767263, "708543", 1499767263, "708543", null, "2017-07-10T00:00:00", "13 19 34 38 53", "01" ] -, [ 433, "D583AB29-686F-4C7C-A419-44BC8EDFF09C", 433, 1500026463, "708543", 1500026463, "708543", null, "2017-07-13T00:00:00", "06 17 32 45 59", "03" ] -, [ 434, "8D36A3EA-081C-43D6-BE99-5444EC524B8D", 434, 1500372063, "708543", 1500372063, "708543", null, "2017-07-17T00:00:00", "08 17 27 28 39", "02" ] -, [ 435, "5E8FA7B1-1811-4AD8-B38D-45AC8BD6892E", 435, 1500631263, "708543", 1500631263, "708543", null, "2017-07-20T00:00:00", "26 37 40 42 50", "01" ] -, [ 436, "2DE0CC06-BC82-40F7-9EC1-7D994914295F", 436, 1500976822, "708543", 1500976822, "708543", null, "2017-07-24T00:00:00", "07 20 21 41 59", "01" ] -, [ 437, "63D9B819-449D-4674-B015-B6C0DFE74DB2", 437, 1501236065, "708543", 1501236065, "708543", null, "2017-07-27T00:00:00", "32 37 38 42 43", "02" ] - ] -} \ No newline at end of file + }, + "data": [ + [ + 1, + "012CAE53-5033-48B4-BADA-E2EDB4C82D76", + 1, + 1403096267, + "707756", + 1403096267, + "707756", + "{\n}", + "2014-06-16T00:00:00Z", + "09 36 44 53 59", + "03" + ], + [ + 3, + "9A327854-2BA9-474A-B392-EBBDF0806559", + 3, + 1403233340, + "708543", + 1403233340, + "708543", + "{\n}", + "2014-06-19T00:00:00Z", + "08 13 43 56 60", + "02" + ], + [ + 5, + "B03A03EA-661A-452F-9084-6B95EDE9EFEA", + 5, + 1403578864, + "708543", + 1403578864, + "708543", + "{\n}", + "2014-06-23T00:00:00Z", + "05 16 21 33 47", + "04" + ], + [ + 7, + "205077A2-7F97-42B3-9BF8-592B6E314EC6", + 7, + 1403861033, + "708543", + 1403861033, + "708543", + "{\n}", + "2014-06-26T00:00:00Z", + "15 22 51 52 58", + "03" + ], + [ + 9, + "038EA5F2-C6F5-4DA9-B57A-EA185D8A609B", + 9, + 1404183739, + "708543", + 1404183739, + "708543", + "{\n}", + "2014-06-30T00:00:00Z", + "01 04 10 28 33", + "02" + ], + [ + 11, + "FB8E9108-DA9A-4D9C-9BDF-3727F7A862AA", + 11, + 1404442822, + "708543", + 1404442822, + "708543", + "{\n}", + "2014-07-03T00:00:00Z", + "08 10 25 28 31", + "02" + ], + [ + 13, + "49BC2CEE-8BEB-4A2B-9951-D0669FC80A57", + 13, + 1404788422, + "708543", + 1404788422, + "708543", + "{\n}", + "2014-07-07T00:00:00Z", + "11 13 23 54 55", + "02" + ], + [ + 15, + "81B00141-368C-4C89-A943-5512A585E9B6", + 15, + 1405047685, + "708543", + 1405047685, + "708543", + "{\n}", + "2014-07-10T00:00:00Z", + "11 12 31 54 59", + "03" + ], + [ + 17, + "B2217278-0DF2-4BD9-993B-CBF3E38005D8", + 17, + 1405393265, + "708543", + 1405393265, + "708543", + "{\n}", + "2014-07-14T00:00:00Z", + "09 19 34 37 49", + "02" + ], + [ + 19, + "7A02B89B-7A1E-41F6-A4DD-D25CE447B9DE", + 19, + 1405652467, + "708543", + 1405652467, + "708543", + "{\n}", + "2014-07-17T00:00:00Z", + "08 09 22 46 51", + "01" + ], + [ + 21, + "3BFADF1B-EDD6-415A-8790-05AAEECFB7C3", + 21, + 1405998064, + "708543", + 1405998064, + "708543", + "{\n}", + "2014-07-21T00:00:00Z", + "04 06 11 24 31", + "03" + ], + [ + 23, + "EAAAAB4F-C17E-4129-B18A-5A2197AFBEAC", + 23, + 1406257265, + "708543", + 1406257265, + "708543", + "{\n}", + "2014-07-24T00:00:00Z", + "05 20 35 43 48", + "03" + ], + [ + 25, + "68097553-6CC4-4787-865A-747B130D5EBE", + 25, + 1406602865, + "708543", + 1406602865, + "708543", + "{\n}", + "2014-07-28T00:00:00Z", + "06 15 31 51 53", + "02" + ], + [ + 27, + "76996EA0-DD54-4EB5-B5C2-7FF8FE6E6386", + 27, + 1406862065, + "708543", + 1406862065, + "708543", + "{\n}", + "2014-07-31T00:00:00Z", + "13 25 26 32 58", + "01" + ], + [ + 29, + "91616BD7-CD64-4F70-92AD-260AED90744E", + 29, + 1407207665, + "708543", + 1407207665, + "708543", + "{\n}", + "2014-08-04T00:00:00Z", + "17 21 36 48 60", + "03" + ], + [ + 31, + "DB3F3DF6-C19A-4970-9F76-060B7D1DD383", + 31, + 1407466895, + "708543", + 1407466895, + "708543", + "{\n}", + "2014-08-07T00:00:00Z", + "03 18 38 40 49", + "02" + ], + [ + 33, + "60819CBF-EA03-477B-ABF2-0BD2242A9438", + 33, + 1407812457, + "708543", + 1407812457, + "708543", + "{\n}", + "2014-08-11T00:00:00Z", + "05 10 33 48 57", + "03" + ], + [ + 35, + "0C13DB12-A55A-42A7-A2BB-66D0C7C50645", + 35, + 1408071655, + "708543", + 1408071655, + "708543", + "{\n}", + "2014-08-14T00:00:00Z", + "03 11 34 46 60", + "02" + ], + [ + 37, + "1839C767-92D9-4A0D-8897-02DB365BA7C7", + 37, + 1408417266, + "708543", + 1408417266, + "708543", + "{\n}", + "2014-08-18T00:00:00Z", + "06 10 29 44 57", + "02" + ], + [ + 39, + "774C4C27-7C65-48D1-89AA-89C3D9AF5C6B", + 39, + 1408676455, + "708543", + 1408676455, + "708543", + "{\n}", + "2014-08-21T00:00:00Z", + "11 24 40 43 47", + "02" + ], + [ + 41, + "C1877239-185A-4B3D-946E-F5512047707A", + 41, + 1409022066, + "708543", + 1409022066, + "708543", + "{\n}", + "2014-08-25T00:00:00Z", + "06 08 34 40 59", + "04" + ], + [ + 43, + "0BB0CCA8-09D9-475F-B97A-8084266C10C3", + 43, + 1409281275, + "708543", + 1409281275, + "708543", + "{\n}", + "2014-08-28T00:00:00Z", + "12 24 27 38 49", + "02" + ], + [ + 45, + "6DB0C8AB-5075-4BB1-9149-2A7BEC028612", + 45, + 1409626855, + "708543", + 1409626855, + "708543", + "{\n}", + "2014-09-01T00:00:00Z", + "09 21 27 45 53", + "02" + ], + [ + 47, + "0374F671-02F0-4D00-AB0F-689BD851BBFF", + 47, + 1409886057, + "708543", + 1409886057, + "708543", + "{\n}", + "2014-09-04T00:00:00Z", + "03 21 28 32 56", + "03" + ], + [ + 49, + "DA294964-7674-4E5A-BBBC-D5452940E330", + 49, + 1410249467, + "708543", + 1410249467, + "708543", + "{\n}", + "2014-09-08T00:00:00Z", + "01 17 23 44 45", + "02" + ], + [ + 51, + "60E229E5-B1B3-4EB3-B235-ECE3320C2151", + 51, + 1410490873, + "708543", + 1410490873, + "708543", + "{\n}", + "2014-09-11T00:00:00Z", + "12 44 56 58 59", + "02" + ], + [ + 53, + "AF1C8CC1-1FBA-4462-9314-ED07B787BEF7", + 53, + 1410857335, + "708543", + 1410857335, + "708543", + "{\n}", + "2014-09-15T00:00:00Z", + "03 05 09 32 56", + "01" + ], + [ + 55, + "C7EB51A3-93B2-4A41-9CB7-E19F2294C189", + 55, + 1411138891, + "708543", + 1411138891, + "708543", + "{\n}", + "2014-09-18T00:00:00Z", + "05 10 11 24 28", + "03" + ], + [ + 57, + "AF5594CC-74AE-4B25-8D3A-E75AB61F320C", + 57, + 1411484595, + "708543", + 1411484595, + "708543", + "{\n}", + "2014-09-22T00:00:00Z", + "28 39 40 53 54", + "01" + ], + [ + 59, + "A5A781A5-5521-4B22-B514-F5DFA3F6D25A", + 59, + 1411741475, + "708543", + 1411741475, + "708543", + "{\n}", + "2014-09-25T00:00:00Z", + "09 11 28 30 41", + "04" + ], + [ + 61, + "6942D491-BAE6-4106-BBFF-9692E675D407", + 61, + 1412089290, + "708543", + 1412089290, + "708543", + "{\n}", + "2014-09-29T00:00:00Z", + "19 36 37 43 50", + "01" + ], + [ + 63, + "756710CC-B5F0-4283-8BA0-3689222F93BC", + 63, + 1412348485, + "708543", + 1412348485, + "708543", + "{\n}", + "2014-10-02T00:00:00Z", + "23 34 35 44 52", + "01" + ], + [ + 65, + "EFC086DD-DE15-4DD8-9310-16911270BB89", + 65, + 1412737309, + "708543", + 1412737309, + "708543", + "{\n}", + "2014-10-06T00:00:00Z", + "16 30 37 52 55", + "03" + ], + [ + 67, + "AA1A6D71-13B5-44E0-9B81-0BB34DAE7EA4", + 67, + 1412910109, + "708543", + 1412910109, + "708543", + "{\n}", + "2014-10-09T00:00:00Z", + "23 26 32 50 57", + "04" + ], + [ + 69, + "1335B8F0-D3F5-4F48-B286-3F798CBC701D", + 69, + 1413255710, + "708543", + 1413255710, + "708543", + "{\n}", + "2014-10-13T00:00:00Z", + "10 13 49 54 57", + "04" + ], + [ + 71, + "46182F8D-360D-488B-A4F9-05514FA57EFB", + 71, + 1413514894, + "708543", + 1413514894, + "708543", + "{\n}", + "2014-10-16T00:00:00Z", + "12 13 20 28 45", + "04" + ], + [ + 73, + "0EBA077B-BE4A-4D7C-9944-8741019B368E", + 73, + 1413860491, + "708543", + 1413860491, + "708543", + "{\n}", + "2014-10-20T00:00:00Z", + "08 16 43 52 59", + "03" + ], + [ + 75, + "4E97E80D-7E86-48D3-A356-461BDC559E2D", + 75, + 1414119691, + "708543", + 1414119691, + "708543", + "{\n}", + "2014-10-23T00:00:00Z", + "09 22 24 36 54", + "01" + ], + [ + 77, + "D79ED4C9-E736-4503-9F8F-44E814128A11", + 77, + 1414465287, + "708543", + 1414465287, + "708543", + "{\n}", + "2014-10-27T00:00:00Z", + "06 09 28 40 41", + "01" + ], + [ + 79, + "792BD778-BFDB-4778-A82C-FC9A225D944F", + 79, + 1414724491, + "708543", + 1414724491, + "708543", + "{\n}", + "2014-10-30T00:00:00Z", + "19 22 29 38 53", + "01" + ], + [ + 81, + "896D69B7-9696-4D2F-9534-540A5EFF5C46", + 81, + 1415113288, + "708543", + 1415113288, + "708543", + "{\n}", + "2014-11-03T00:00:00Z", + "03 27 28 49 52", + "04" + ], + [ + 83, + "0D294751-4AF6-47C1-A95E-9D9709CC0F7F", + 83, + 1415329353, + "708543", + 1415329353, + "708543", + "{\n}", + "2014-11-06T00:00:00Z", + "03 07 14 20 32", + "03" + ], + [ + 85, + "9FA03830-2A74-4DD2-85A0-0ABDDA81D1D1", + 85, + 1415804550, + "708543", + 1415804550, + "708543", + "{\n}", + "2014-11-10T00:00:00Z", + "07 21 30 53 55", + "02" + ], + [ + 87, + "38EC3289-915B-4D7B-8B5A-6C70EC890078", + 87, + 1415934097, + "708543", + 1415934097, + "708543", + "{\n}", + "2014-11-13T00:00:00Z", + "07 08 16 49 56", + "04" + ], + [ + 89, + "4BB65C7D-C7AE-4B3B-B97B-04AB4F0F8837", + 89, + 1416279689, + "708543", + 1416279689, + "708543", + "{\n}", + "2014-11-17T00:00:00Z", + "08 23 37 38 58", + "01" + ], + [ + 91, + "AACF639A-77E9-4D8C-8998-75A1A9279F42", + 91, + 1416538890, + "708543", + 1416538890, + "708543", + "{\n}", + "2014-11-20T00:00:00Z", + "02 40 46 59 60", + "02" + ], + [ + 93, + "E4FBC55A-B4ED-468A-A44C-CE5445C21A1B", + 93, + 1416884510, + "708543", + 1416884510, + "708543", + "{\n}", + "2014-11-24T00:00:00Z", + "08 25 26 33 56", + "01" + ], + [ + 95, + "776BD8AD-7BBC-45E0-8E90-39811986C977", + 95, + 1417143689, + "708543", + 1417143689, + "708543", + "{\n}", + "2014-11-27T00:00:00Z", + "09 30 43 51 55", + "03" + ], + [ + 97, + "EBF6ECC5-0B85-438D-8A46-9FCE5E519E29", + 97, + 1417489289, + "708543", + 1417489289, + "708543", + "{\n}", + "2014-12-01T00:00:00Z", + "04 07 33 50 55", + "01" + ], + [ + 99, + "33276E54-A25A-4344-9522-952660A46FC6", + 99, + 1417748490, + "708543", + 1417748490, + "708543", + "{\n}", + "2014-12-04T00:00:00Z", + "01 15 21 41 60", + "04" + ], + [ + 101, + "1A59B642-300B-4971-97A2-2EEB3B617A96", + 101, + 1418094070, + "708543", + 1418094070, + "708543", + "{\n}", + "2014-12-08T00:00:00Z", + "04 11 14 46 59", + "04" + ], + [ + 103, + "A9B2120A-45B0-4B5A-91A6-2CD14B6CB804", + 103, + 1418353294, + "708543", + 1418353294, + "708543", + "{\n}", + "2014-12-11T00:00:00Z", + "12 22 27 35 49", + "04" + ], + [ + 105, + "BF8D8512-533A-47D8-B958-1D53A359D5F6", + 105, + 1418698895, + "708543", + 1418698895, + "708543", + "{\n}", + "2014-12-15T00:00:00Z", + "08 22 31 38 40", + "03" + ], + [ + 107, + "520953D2-4DFD-404D-8D61-713CBDD641E5", + 107, + 1418958101, + "708543", + 1418958101, + "708543", + "{\n}", + "2014-12-18T00:00:00Z", + "20 22 26 27 43", + "02" + ], + [ + 109, + "5A0507CF-B794-43A6-A30D-9B830091D8A3", + 109, + 1419303692, + "708543", + 1419303692, + "708543", + "{\n}", + "2014-12-22T00:00:00Z", + "03 17 30 50 55", + "03" + ], + [ + 111, + "E12FA573-ED28-4726-8E80-9783452BECA0", + 111, + 1419562871, + "708543", + 1419562871, + "708543", + "{\n}", + "2014-12-25T00:00:00Z", + "05 14 22 37 60", + "02" + ], + [ + 113, + "E194E4AF-152C-4229-88F9-45F7629E0ABF", + 113, + 1419908521, + "708543", + 1419908521, + "708543", + "{\n}", + "2014-12-29T00:00:00Z", + "08 09 35 37 41", + "04" + ], + [ + 115, + "BBB2C4CC-93DE-4015-B820-FB007F1CB762", + 115, + 1420167754, + "708543", + 1420167754, + "708543", + "{\n}", + "2015-01-01T00:00:00Z", + "13 19 20 21 35", + "02" + ], + [ + 117, + "ED96AB53-FCDB-46E9-8440-3655AC3FB34C", + 117, + 1420513290, + "708543", + 1420513290, + "708543", + "{\n}", + "2015-01-05T00:00:00Z", + "12 23 29 38 43", + "03" + ], + [ + 119, + "0C5A0B65-8D2D-4839-8786-5081A47668C8", + 119, + 1420772494, + "708543", + 1420772494, + "708543", + "{\n}", + "2015-01-08T00:00:00Z", + "16 28 38 43 45", + "03" + ], + [ + 121, + "D42D2EBF-7700-4F5B-9BC0-FD5637A19FD9", + 121, + 1421118090, + "708543", + 1421118090, + "708543", + "{\n}", + "2015-01-12T00:00:00Z", + "01 05 11 39 47", + "01" + ], + [ + 123, + "008F206D-92EB-4A20-B887-E6689B25E3E2", + 123, + 1421377288, + "708543", + 1421377288, + "708543", + "{\n}", + "2015-01-15T00:00:00Z", + "12 15 22 25 27", + "03" + ], + [ + 125, + "0E8CB1B4-823F-4E60-A773-1A939E96DC06", + 125, + 1421722893, + "708543", + 1421722893, + "708543", + "{\n}", + "2015-01-19T00:00:00Z", + "18 29 47 52 53", + "03" + ], + [ + 127, + "2AA47495-72C5-4086-98EF-CDE64374946E", + 127, + 1421982100, + "708543", + 1421982100, + "708543", + "{\n}", + "2015-01-22T00:00:00Z", + "08 11 35 47 60", + "02" + ], + [ + 129, + "60873354-72B3-48C2-8CB3-13BD630B4DBC", + 129, + 1422327709, + "708543", + 1422327709, + "708543", + "{\n}", + "2015-01-26T00:00:00Z", + "01 20 24 46 57", + "01" + ], + [ + 131, + "9E0C5355-4E03-477D-A073-4BED0B3A24C1", + 131, + 1422586894, + "708543", + 1422586894, + "708543", + "{\n}", + "2015-01-29T00:00:00Z", + "08 24 28 57 60", + "02" + ], + [ + 133, + "EFA8A999-2C71-4357-81B8-DD1FBBBEDB2A", + 133, + 1422932500, + "708543", + 1422932500, + "708543", + "{\n}", + "2015-02-02T00:00:00Z", + "04 08 17 20 21", + "04" + ], + [ + 135, + "42FB45D1-A071-4F57-9CE2-08A01CDDF478", + 135, + 1423191694, + "708543", + 1423191694, + "708543", + "{\n}", + "2015-02-05T00:00:00Z", + "14 17 38 40 45", + "02" + ], + [ + 137, + "11ECE352-720D-42CC-9205-4CDF6500FA83", + 137, + 1423537294, + "708543", + 1423537294, + "708543", + "{\n}", + "2015-02-09T00:00:00Z", + "09 17 36 38 53", + "04" + ], + [ + 139, + "93BCF5A7-5C23-4672-AC03-40720ED5F22B", + 139, + 1423796489, + "708543", + 1423796489, + "708543", + "{\n}", + "2015-02-12T00:00:00Z", + "06 11 32 56 60", + "02" + ], + [ + 141, + "D322B0C0-56A8-4374-A29A-80CFDE1D6543", + 141, + 1424142113, + "708543", + 1424142113, + "708543", + "{\n}", + "2015-02-16T00:00:00Z", + "06 26 35 40 43", + "02" + ], + [ + 143, + "DC6AD720-4BF5-4C4F-95A0-752F916BBEFF", + 143, + 1424401290, + "708543", + 1424401290, + "708543", + "{\n}", + "2015-02-19T00:00:00Z", + "18 43 51 52 60", + "04" + ], + [ + 145, + "9E251D18-D632-4E4E-BE91-389DAC1E83EF", + 145, + 1424746886, + "708543", + 1424746886, + "708543", + "{\n}", + "2015-02-23T00:00:00Z", + "01 14 20 21 43", + "04" + ], + [ + 147, + "E4F2CA88-3B82-48DF-8BCC-0F48ED01025E", + 147, + 1425049289, + "708543", + 1425049289, + "708543", + "{\n}", + "2015-02-26T00:00:00Z", + "03 16 20 38 49", + "03" + ], + [ + 149, + "A0BC2444-1A83-4EC9-A5C7-DD4BEBEC8BAC", + 149, + 1425351687, + "708543", + 1425351687, + "708543", + "{\n}", + "2015-03-02T00:00:00Z", + "08 23 27 38 47", + "04" + ], + [ + 151, + "DEA71FE8-C1A6-4822-AFAA-21E11860F30E", + 151, + 1425610898, + "708543", + 1425610898, + "708543", + "{\n}", + "2015-03-05T00:00:00Z", + "10 22 46 47 48", + "04" + ], + [ + 153, + "7CDE1F9C-B37A-4688-B430-4B876FF1E3AC", + 153, + 1425956488, + "708543", + 1425956488, + "708543", + "{\n}", + "2015-03-09T00:00:00Z", + "19 34 35 54 57", + "03" + ], + [ + 155, + "05A29298-CC69-4E09-BEA3-5A2C9BA94CAA", + 155, + 1426561286, + "708543", + 1426561286, + "708543", + "{\n}", + "2015-03-16T00:00:00Z", + "12 18 33 44 46", + "01" + ], + [ + 157, + "6CCFF205-6249-4098-BCEE-133280F60530", + 157, + 1426820509, + "708543", + 1426820509, + "708543", + "{\n}", + "2015-03-19T00:00:00Z", + "02 12 28 51 54", + "01" + ], + [ + 159, + "E1D85EB5-A7E8-419E-9BBC-4FC4E30128A1", + 159, + 1427166105, + "708543", + 1427166105, + "708543", + "{\n}", + "2015-03-23T00:00:00Z", + "18 26 28 35 36", + "04" + ], + [ + 161, + "F4F2FB7D-6BD3-4DF3-A3BB-A8572B4F99DA", + 161, + 1427425305, + "708543", + 1427425305, + "708543", + "{\n}", + "2015-03-26T00:00:00Z", + "06 35 36 47 53", + "02" + ], + [ + 163, + "5BCAA6C8-600B-42A8-AE34-259DC41EC39B", + 163, + 1427770905, + "708543", + 1427770905, + "708543", + "{\n}", + "2015-03-30T00:00:00Z", + "09 23 43 45 52", + "02" + ], + [ + 165, + "845ECC12-550A-4E48-B410-47AE380B0456", + 165, + 1428030106, + "708543", + 1428030106, + "708543", + "{\n}", + "2015-04-02T00:00:00Z", + "15 22 29 34 37", + "03" + ], + [ + 167, + "2B936DE6-6D4B-4FA1-9F98-CF5C39A7A0B6", + 167, + 1428375707, + "708543", + 1428375707, + "708543", + "{\n}", + "2015-04-06T00:00:00Z", + "02 16 20 25 50", + "03" + ], + [ + 169, + "ABA57A21-845C-43BD-A750-462A07940823", + 169, + 1428634907, + "708543", + 1428634907, + "708543", + "{\n}", + "2015-04-09T00:00:00Z", + "05 07 27 43 50", + "03" + ], + [ + 171, + "8A3DF170-CB4F-4B1C-882D-A91384A892FA", + 171, + 1428980487, + "708543", + 1428980487, + "708543", + "{\n}", + "2015-04-13T00:00:00Z", + "07 17 26 34 60", + "04" + ], + [ + 173, + "C8CE05E3-B5CA-4289-8704-6652FE4DB081", + 173, + 1429239707, + "708543", + 1429239707, + "708543", + "{\n}", + "2015-04-16T00:00:00Z", + "01 06 11 13 23", + "01" + ], + [ + 175, + "67068049-9182-466F-841B-191C0C834971", + 175, + 1429585286, + "708543", + 1429585286, + "708543", + "{\n}", + "2015-04-20T00:00:00Z", + "35 36 37 53 56", + "04" + ], + [ + 177, + "2B244FB4-5148-42BB-8C0F-18F72302A072", + 177, + 1429844487, + "708543", + 1429844487, + "708543", + "{\n}", + "2015-04-23T00:00:00Z", + "03 12 30 40 56", + "02" + ], + [ + 179, + "BE06E4D1-AE96-40F3-97A5-5A937E0983D5", + 179, + 1430190127, + "708543", + 1430190127, + "708543", + "{\n}", + "2015-04-27T00:00:00Z", + "13 14 29 46 47", + "01" + ], + [ + 181, + "5FC39380-1949-40E6-B9DD-5FB1648901D7", + 181, + 1430449308, + "708543", + 1430449308, + "708543", + "{\n}", + "2015-04-30T00:00:00Z", + "09 26 29 46 58", + "02" + ], + [ + 183, + "12EA4AE4-F823-427B-9DF7-AAE2BB7DCA08", + 183, + 1430794909, + "708543", + 1430794909, + "708543", + "{\n}", + "2015-05-04T00:00:00Z", + "03 05 21 30 60", + "04" + ], + [ + 185, + "D9E721A6-B28A-4811-BC5D-D2BDAABA692F", + 185, + 1431054131, + "708543", + 1431054131, + "708543", + "{\n}", + "2015-05-07T00:00:00Z", + "04 11 44 47 53", + "02" + ], + [ + 187, + "5BF8802C-A0CE-4DA2-B482-3133F62C4B77", + 187, + 1431399749, + "708543", + 1431399749, + "708543", + "{\n}", + "2015-05-11T00:00:00Z", + "07 08 14 18 52", + "01" + ], + [ + 189, + "90482458-111E-4B10-B506-3D3B50C5013D", + 189, + 1431659009, + "708543", + 1431659009, + "708543", + "{\n}", + "2015-05-14T00:00:00Z", + "06 28 34 39 43", + "02" + ], + [ + 191, + "DD2AF2B3-DBB3-44ED-A0D6-1E1BE8D10624", + 191, + 1432004548, + "708543", + 1432004548, + "708543", + "{\n}", + "2015-05-18T00:00:00Z", + "16 30 35 38 51", + "01" + ], + [ + 193, + "41866238-C5D3-4CC9-9E88-A15076EA3C50", + 193, + 1432263708, + "708543", + 1432263708, + "708543", + "{\n}", + "2015-05-21T00:00:00Z", + "18 22 24 29 56", + "04" + ], + [ + 195, + "86C4BD79-F837-4B0E-A2D7-FB8EA3623DC8", + 195, + 1432609440, + "708543", + 1432609440, + "708543", + "{\n}", + "2015-05-25T00:00:00Z", + "15 40 48 59 60", + "01" + ], + [ + 197, + "88A989DB-863E-481F-825E-632FEE7BF997", + 197, + 1432868513, + "708543", + 1432868513, + "708543", + "{\n}", + "2015-05-28T00:00:00Z", + "08 25 28 33 47", + "01" + ], + [ + 199, + "168810EE-D7D4-4CA0-B514-2F78BFBC2CA4", + 199, + 1433214108, + "708543", + 1433214108, + "708543", + "{\n}", + "2015-06-01T00:00:00Z", + "07 10 23 37 56", + "03" + ], + [ + 201, + "D5E3EC37-3306-41FE-99C9-9A6C18983111", + 201, + 1433473306, + "708543", + 1433473306, + "708543", + "{\n}", + "2015-06-04T00:00:00Z", + "04 09 32 41 43", + "02" + ], + [ + 203, + "BE6B2BA7-5F95-4A31-9DF3-8BF03DFCA091", + 203, + 1433818929, + "708543", + 1433818929, + "708543", + "{\n}", + "2015-06-08T00:00:00Z", + "33 39 43 49 52", + "03" + ], + [ + 205, + "FC34C3C6-2380-4FE3-8D7E-5913155A26C9", + 205, + 1434078114, + "708543", + 1434078114, + "708543", + "{\n}", + "2015-06-11T00:00:00Z", + "17 24 43 49 57", + "02" + ], + [ + 207, + "CD40F120-C2CB-48C5-A139-622DEB4F65B6", + 207, + 1434423759, + "708543", + 1434423759, + "708543", + "{\n}", + "2015-06-15T00:00:00Z", + "10 14 16 32 34", + "03" + ], + [ + 209, + "E983452E-64EC-400E-93D1-70D70F5F20E2", + 209, + 1434682981, + "708543", + 1434682981, + "708543", + "{\n}", + "2015-06-18T00:00:00Z", + "01 02 14 29 59", + "03" + ], + [ + 211, + "9656A33A-C34E-4F34-A928-5010D8584C0C", + 211, + 1435028542, + "708543", + 1435028542, + "708543", + "{\n}", + "2015-06-22T00:00:00Z", + "05 26 27 51 59", + "02" + ], + [ + 213, + "EBF6F368-12B2-4DA9-941C-9A1CD9982750", + 213, + 1435287707, + "708543", + 1435287707, + "708543", + "{\n}", + "2015-06-25T00:00:00Z", + "03 26 27 29 58", + "01" + ], + [ + 215, + "C95EA299-841C-470A-A919-660D41CB7A19", + 215, + 1435633286, + "708543", + 1435633286, + "708543", + "{\n}", + "2015-06-29T00:00:00Z", + "01 19 37 49 56", + "03" + ], + [ + 217, + "8E894D24-2D77-4E0C-ADFE-39BC258A29DC", + 217, + 1435892551, + "708543", + 1435892551, + "708543", + "{\n}", + "2015-07-02T00:00:00Z", + "18 19 31 43 54", + "03" + ], + [ + 219, + "8536A4D2-1AD1-4009-A572-3E5A6162C627", + 219, + 1436238167, + "708543", + 1436238167, + "708543", + "{\n}", + "2015-07-06T00:00:00Z", + "03 10 30 33 40", + "01" + ], + [ + 221, + "C46245BD-9AE0-441F-B363-E17E984A3CFA", + 221, + 1436497289, + "708543", + 1436497289, + "708543", + "{\n}", + "2015-07-09T00:00:00Z", + "19 34 36 54 55", + "01" + ], + [ + 223, + "4BDC3777-34BD-4258-8E5C-A964D265E8A6", + 223, + 1436842990, + "708543", + 1436842990, + "708543", + null, + "2015-07-13T00:00:00Z", + "05 23 27 55 57", + "01" + ], + [ + 224, + "10889320-B901-47FC-AFD6-75BDE9356FF7", + 224, + 1437102065, + "708543", + 1437102065, + "708543", + null, + "2015-07-16T00:00:00Z", + "22 29 47 53 54", + "03" + ], + [ + 225, + "9A754F78-F807-4021-B9A7-035BA2C6CBE1", + 225, + 1437447725, + "708543", + 1437447725, + "708543", + null, + "2015-07-20T00:00:00Z", + "10 29 47 48 55", + "04" + ], + [ + 226, + "8EA5F297-5030-4AA2-AE0E-9A71375EE66B", + 226, + 1437706890, + "708543", + 1437706890, + "708543", + null, + "2015-07-23T00:00:00Z", + "08 26 28 41 52", + "04" + ], + [ + 227, + "6373AF9F-31E8-4346-9422-1994C4DE879D", + 227, + 1438052506, + "708543", + 1438052506, + "708543", + null, + "2015-07-27T00:00:00Z", + "03 05 36 43 53", + "03" + ], + [ + 228, + "498DEED9-EFBF-4296-B13B-AEC0017F3135", + 228, + 1438311725, + "708543", + 1438311725, + "708543", + null, + "2015-07-30T00:00:00Z", + "15 16 26 27 51", + "02" + ], + [ + 229, + "9E06C3EA-C137-4F17-A67F-C8CE28D8BEF8", + 229, + 1438657327, + "708543", + 1438657327, + "708543", + null, + "2015-08-03T00:00:00Z", + "25 29 30 38 39", + "03" + ], + [ + 230, + "05461696-20D9-417B-90D2-4351469BBA1F", + 230, + 1438916529, + "708543", + 1438916529, + "708543", + null, + "2015-08-06T00:00:00Z", + "04 05 24 31 42", + "02" + ], + [ + 231, + "DF0DB2F5-0C4E-4953-B716-B95ADAE9A742", + 231, + 1439262152, + "708543", + 1439262152, + "708543", + null, + "2015-08-10T00:00:00Z", + "02 07 11 33 47", + "02" + ], + [ + 232, + "74954961-473B-4546-8C15-42BBDD81C47B", + 232, + 1439564546, + "708543", + 1439564546, + "708543", + null, + "2015-08-13T00:00:00Z", + "08 12 50 51 56", + "04" + ], + [ + 233, + "CAC3EB9F-5BF5-454A-86BD-68A3F18DBDB6", + 233, + 1439866949, + "708543", + 1439866949, + "708543", + null, + "2015-08-17T00:00:00Z", + "05 19 21 24 27", + "03" + ], + [ + 234, + "910E19A6-4152-4BDE-9BF1-60AA55BED6F3", + 234, + 1440126149, + "708543", + 1440126149, + "708543", + null, + "2015-08-20T00:00:00Z", + "06 14 25 39 56", + "04" + ], + [ + 235, + "03CF6AAE-2276-4DC4-AC2D-7F9A038AA615", + 235, + 1440471749, + "708543", + 1440471749, + "708543", + null, + "2015-08-24T00:00:00Z", + "02 19 35 37 44", + "03" + ], + [ + 236, + "21833935-DBB4-4A8C-ACEB-8C28EC36AD6B", + 236, + 1440730943, + "708543", + 1440730943, + "708543", + null, + "2015-08-27T00:00:00Z", + "05 29 37 55 58", + "02" + ], + [ + 237, + "05804F56-7B0A-4227-9EF4-2E98CA8B9129", + 237, + 1441076532, + "708543", + 1441076532, + "708543", + null, + "2015-08-31T00:00:00Z", + "12 15 44 45 47", + "01" + ], + [ + 238, + "69159851-6432-4A78-83D8-4D47C1871671", + 238, + 1441335740, + "708543", + 1441335740, + "708543", + null, + "2015-09-03T00:00:00Z", + "20 33 46 49 51", + "04" + ], + [ + 239, + "C1500EE4-EB00-4C95-B624-88DC44D43872", + 239, + 1441681331, + "708543", + 1441681331, + "708543", + null, + "2015-09-07T00:00:00Z", + "04 21 26 45 46", + "04" + ], + [ + 240, + "D7558560-CCF8-430B-A516-6A02D1C6C6BC", + 240, + 1442286105, + "708543", + 1442286105, + "708543", + null, + "2015-09-14T00:00:00Z", + "03 07 14 19 25", + "02" + ], + [ + 241, + "819B7082-516B-4A46-94ED-CD29F5AFF3AF", + 241, + 1442545304, + "708543", + 1442545304, + "708543", + null, + "2015-09-17T00:00:00Z", + "14 15 17 35 56", + "02" + ], + [ + 242, + "9F4B80B3-0FC2-41CA-A394-E1FD348C43D5", + 242, + 1442890890, + "708543", + 1442890890, + "708543", + null, + "2015-09-21T00:00:00Z", + "17 27 39 44 49", + "01" + ], + [ + 243, + "3D22C9B7-519E-4549-BCF9-7DD9B46A441A", + 243, + 1442934107, + "708543", + 1442934107, + "708543", + null, + "2015-09-10T00:00:00Z", + "11 16 50 55 56", + "04" + ], + [ + 244, + "46D6D1F4-BD73-4959-9240-FEC3E7D0F0CF", + 244, + 1443150147, + "708543", + 1443150147, + "708543", + null, + "2015-09-24T00:00:00Z", + "14 17 29 39 50", + "03" + ], + [ + 245, + "49D625D0-79BE-4144-A9BE-F1BE234D202D", + 245, + 1443495706, + "708543", + 1443495706, + "708543", + null, + "2015-09-28T00:00:00Z", + "01 25 29 43 54", + "02" + ], + [ + 246, + "DC858348-F3ED-4D7C-858C-E914015E5E6A", + 246, + 1443754927, + "708543", + 1443754927, + "708543", + null, + "2015-10-01T00:00:00Z", + "25 37 39 47 55", + "03" + ], + [ + 247, + "81C2B637-F49A-41B4-800F-1D6DDC3ACF3E", + 247, + 1444100546, + "708543", + 1444100546, + "708543", + null, + "2015-10-05T00:00:00Z", + "08 20 34 41 43", + "03" + ], + [ + 248, + "9013BCB6-CE28-4C96-ADC8-25C2329E6653", + 248, + 1444359767, + "708543", + 1444359767, + "708543", + null, + "2015-10-08T00:00:00Z", + "25 27 28 42 53", + "02" + ], + [ + 249, + "8B2BA24A-545E-4453-939D-7B9AF5A82F1B", + 249, + 1444705326, + "708543", + 1444705326, + "708543", + null, + "2015-10-12T00:00:00Z", + "28 30 36 38 39", + "04" + ], + [ + 250, + "F0E3B49C-EF02-4205-8C7C-06B79D869EB0", + 250, + 1444964525, + "708543", + 1444964525, + "708543", + null, + "2015-10-15T00:00:00Z", + "07 11 39 40 45", + "02" + ], + [ + 251, + "BDAA2D7D-27B1-45EA-A1FB-7A5D0F0FCED2", + 251, + 1445310125, + "708543", + 1445310125, + "708543", + null, + "2015-10-19T00:00:00Z", + "04 08 31 46 54", + "03" + ], + [ + 252, + "7423590E-8D14-45A2-9820-0AA6E0F39573", + 252, + 1445569305, + "708543", + 1445569305, + "708543", + null, + "2015-10-22T00:00:00Z", + "05 18 45 52 57", + "02" + ], + [ + 253, + "40D07FF0-0812-4BA8-96CC-777F1BE5CC81", + 253, + 1445914946, + "708543", + 1445914946, + "708543", + null, + "2015-10-26T00:00:00Z", + "17 20 45 49 58", + "02" + ], + [ + 254, + "70C6BBEF-E408-489E-8944-F99F53CA4108", + 254, + 1446174085, + "708543", + 1446174085, + "708543", + null, + "2015-10-29T00:00:00Z", + "10 31 32 34 51", + "04" + ], + [ + 255, + "CD77860A-B40A-4809-8C24-3FA2360ED81A", + 255, + 1446519796, + "708543", + 1446519796, + "708543", + null, + "2015-11-02T00:00:00Z", + "01 07 12 34 44", + "01" + ], + [ + 256, + "C558D5E5-22CC-43EA-BDA7-D44CCFB7F83A", + 256, + 1446778887, + "708543", + 1446778887, + "708543", + null, + "2015-11-05T00:00:00Z", + "13 20 25 31 51", + "03" + ], + [ + 257, + "7461A9DC-4A7C-4E6F-90A2-AD8B7D5797D4", + 257, + 1447124506, + "708543", + 1447124506, + "708543", + null, + "2015-11-09T00:00:00Z", + "06 09 11 27 37", + "03" + ], + [ + 258, + "F49A1AEC-852B-4F80-A7B4-8A1C92B3DE82", + 258, + 1447383624, + "708543", + 1447383624, + "708543", + null, + "2015-11-12T00:00:00Z", + "06 41 44 49 56", + "04" + ], + [ + 259, + "4E5D11CB-2D6A-4221-A4C4-3ABC18F9FB46", + 259, + 1447729327, + "708543", + 1447729327, + "708543", + null, + "2015-11-16T00:00:00Z", + "06 20 28 34 40", + "03" + ], + [ + 260, + "416BEBC5-580E-4D05-9749-C0F135231E80", + 260, + 1447988529, + "708543", + 1447988529, + "708543", + null, + "2015-11-19T00:00:00Z", + "02 07 21 38 48", + "04" + ], + [ + 261, + "B1D35BFE-94AC-424B-868F-0F6F15AD4EB4", + 261, + 1448334106, + "708543", + 1448334106, + "708543", + null, + "2015-11-23T00:00:00Z", + "04 21 42 43 59", + "04" + ], + [ + 262, + "14B39058-519A-4E79-9012-BE289B006246", + 262, + 1448593285, + "708543", + 1448593285, + "708543", + null, + "2015-11-26T00:00:00Z", + "13 23 43 47 59", + "03" + ], + [ + 263, + "0511598D-7453-4CFF-BA2C-E58525A8AFF0", + 263, + 1448938966, + "708543", + 1448938966, + "708543", + null, + "2015-11-30T00:00:00Z", + "04 07 08 19 53", + "04" + ], + [ + 264, + "BA08DC3D-1F1A-4F33-B8DC-1EAD043EDA4A", + 264, + 1449198126, + "708543", + 1449198126, + "708543", + null, + "2015-12-03T00:00:00Z", + "08 10 27 37 39", + "01" + ], + [ + 265, + "E6957ED1-4C85-42E5-B20F-A413B19E9AD9", + 265, + 1449543688, + "708543", + 1449543688, + "708543", + null, + "2015-12-07T00:00:00Z", + "03 05 36 40 44", + "02" + ], + [ + 266, + "9CE576B4-F88C-4AEB-905F-6EAF7F29C942", + 266, + 1449802936, + "708543", + 1449802936, + "708543", + null, + "2015-12-10T00:00:00Z", + "10 47 48 53 58", + "02" + ], + [ + 267, + "76C71A89-020A-4154-89CB-E7E8FFFE597A", + 267, + 1450148626, + "708543", + 1450148626, + "708543", + null, + "2015-12-14T00:00:00Z", + "46 50 56 57 58", + "01" + ], + [ + 268, + "90567CD2-57B0-4436-84FB-9FFB867E870F", + 268, + 1450407725, + "708543", + 1450407725, + "708543", + null, + "2015-12-17T00:00:00Z", + "26 49 52 54 56", + "01" + ], + [ + 269, + "8B379FC0-AF52-437C-99E5-7F12F4F92213", + 269, + 1450753388, + "708543", + 1450753388, + "708543", + null, + "2015-12-21T00:00:00Z", + "09 27 33 40 49", + "03" + ], + [ + 270, + "74367FD8-49EB-40D0-B411-210103794D50", + 270, + 1451012527, + "708543", + 1451012527, + "708543", + null, + "2015-12-24T00:00:00Z", + "05 19 36 41 55", + "02" + ], + [ + 271, + "93018B4E-8B54-45CC-B998-A5BF858BDC9F", + 271, + 1451358229, + "708543", + 1451358229, + "708543", + null, + "2015-12-28T00:00:00Z", + "07 11 16 23 24", + "02" + ], + [ + 272, + "A295AB45-D532-44E4-BACA-AC0A70587F5E", + 272, + 1451617326, + "708543", + 1451617326, + "708543", + null, + "2015-12-31T00:00:00Z", + "01 05 24 47 55", + "01" + ], + [ + 273, + "B8E84552-9E0A-4B17-836B-AAE4079BC556", + 273, + 1451962965, + "708543", + 1451962965, + "708543", + null, + "2016-01-04T00:00:00Z", + "08 19 25 51 52", + "03" + ], + [ + 274, + "BE18BC72-52BE-4033-B8A9-4626A8CF0EEB", + 274, + 1451963067, + "708543", + 1451963067, + "708543", + null, + "2015-03-12T00:00:00Z", + "03 06 17 47 48", + "01" + ], + [ + 275, + "2E040FA4-DBA5-4784-9B4D-2876309578F3", + 275, + 1452222146, + "708543", + 1452222146, + "708543", + null, + "2016-01-07T00:00:00Z", + "14 31 37 54 56", + "01" + ], + [ + 276, + "4FDFAA43-4862-4F0A-B041-BC3ADA834F35", + 276, + 1452567745, + "708543", + 1452567745, + "708543", + null, + "2016-01-11T00:00:00Z", + "04 20 30 34 36", + "02" + ], + [ + 277, + "CFAA63BC-0EA2-4CB5-9E1A-AB5D99D0DB67", + 277, + 1452826946, + "708543", + 1452826946, + "708543", + null, + "2016-01-14T00:00:00Z", + "23 27 29 36 60", + "04" + ], + [ + 278, + "2A929F8D-6EF6-4468-8AAE-FB650C9C0575", + 278, + 1453172605, + "708543", + 1453172605, + "708543", + null, + "2016-01-18T00:00:00Z", + "14 17 39 43 51", + "03" + ], + [ + 279, + "713D5E49-AB48-49B7-9E0A-983831BA98B9", + 279, + 1453431707, + "708543", + 1453431707, + "708543", + null, + "2016-01-21T00:00:00Z", + "11 13 36 46 48", + "04" + ], + [ + 280, + "87722842-E694-462C-BCE2-33F27977EAFF", + 280, + 1453777406, + "708543", + 1453777406, + "708543", + null, + "2016-01-25T00:00:00Z", + "19 24 38 55 56", + "04" + ], + [ + 281, + "47C6704D-9200-4B34-B220-05C000CF8FA0", + 281, + 1454036487, + "708543", + 1454036487, + "708543", + null, + "2016-01-28T00:00:00Z", + "04 05 15 25 59", + "02" + ], + [ + 282, + "7BBFAE55-5759-4C8C-957A-6B492291B6A8", + 282, + 1454382227, + "708543", + 1454382227, + "708543", + null, + "2016-02-01T00:00:00Z", + "02 09 22 43 44", + "01" + ], + [ + 283, + "C121AB49-5B80-494E-8F1A-BFBD4A303F77", + 283, + 1454641306, + "708543", + 1454641306, + "708543", + null, + "2016-02-04T00:00:00Z", + "08 12 23 40 54", + "01" + ], + [ + 284, + "7B04BDF0-3D43-48EA-ADE6-9CD4834A07CB", + 284, + 1454987128, + "708543", + 1454987128, + "708543", + null, + "2016-02-08T00:00:00Z", + "13 23 48 57 59", + "02" + ], + [ + 285, + "82C7F79A-D888-4ADF-9588-E26CEFBECCDD", + 285, + 1455246328, + "708543", + 1455246328, + "708543", + null, + "2016-02-11T00:00:00Z", + "06 31 35 40 55", + "02" + ], + [ + 286, + "8EC5B96F-C188-4465-89EB-F887EB3D0EE1", + 286, + 1455591808, + "708543", + 1455591808, + "708543", + null, + "2016-02-15T00:00:00Z", + "02 09 30 37 42", + "02" + ], + [ + 287, + "C8975BF7-2707-4128-B038-CA24C6479AC6", + 287, + 1455850911, + "708543", + 1455850911, + "708543", + null, + "2016-02-18T00:00:00Z", + "21 24 37 38 49", + "04" + ], + [ + 288, + "C2C83C0F-110F-48DF-BB4B-5FA814445E21", + 288, + 1456196566, + "708543", + 1456196566, + "708543", + null, + "2016-02-22T00:00:00Z", + "08 09 10 11 27", + "04" + ], + [ + 289, + "70EA9E33-5346-4356-8B0D-BB5D4994D0C2", + 289, + 1456455707, + "708543", + 1456455707, + "708543", + null, + "2016-02-25T00:00:00Z", + "02 16 19 33 39", + "03" + ], + [ + 290, + "77747333-4D77-461B-91BE-321169F75BBE", + 290, + 1456801366, + "708543", + 1456801366, + "708543", + null, + "2016-02-29T00:00:00Z", + "03 17 26 47 58", + "01" + ], + [ + 291, + "8B5BFF9C-D3B5-4363-8919-9920B32B5972", + 291, + 1457060507, + "708543", + 1457060507, + "708543", + null, + "2016-03-03T00:00:00Z", + "07 13 35 40 45", + "04" + ], + [ + 292, + "0A190D1C-A984-4C3B-85A3-7888E3EB6AFB", + 292, + 1457406146, + "708543", + 1457406146, + "708543", + null, + "2016-03-07T00:00:00Z", + "09 21 24 37 38", + "02" + ], + [ + 293, + "D5CF7DBD-F742-46B5-933B-0461C4AF35BD", + 293, + 1457665307, + "708543", + 1457665307, + "708543", + null, + "2016-03-10T00:00:00Z", + "06 12 21 40 57", + "01" + ], + [ + 294, + "438D098F-0FD7-4AE4-ABE1-5F3B627598A6", + 294, + 1458010948, + "708543", + 1458010948, + "708543", + null, + "2016-03-14T00:00:00Z", + "17 28 37 38 41", + "01" + ], + [ + 295, + "3753CF29-DD5E-4E34-B0B2-DCE5A4705745", + 295, + 1458270085, + "708543", + 1458270085, + "708543", + null, + "2016-03-17T00:00:00Z", + "11 16 34 44 56", + "01" + ], + [ + 296, + "D72F0087-09BE-49E2-AC57-6745208BFD3A", + 296, + 1458615706, + "708543", + 1458615706, + "708543", + null, + "2016-03-21T00:00:00Z", + "13 30 41 50 55", + "01" + ], + [ + 297, + "E3AA41F1-C4D0-4868-AB15-115FC538A42D", + 297, + 1458874906, + "708543", + 1458874906, + "708543", + null, + "2016-03-24T00:00:00Z", + "17 24 30 45 48", + "03" + ], + [ + 298, + "C2BF8733-16B5-4227-8C6A-B844DB98C50C", + 298, + 1459220505, + "708543", + 1459220505, + "708543", + null, + "2016-03-28T00:00:00Z", + "20 33 49 53 56", + "04" + ], + [ + 299, + "4F49FA6F-1798-4D53-A584-C20494804316", + 299, + 1459479705, + "708543", + 1459479705, + "708543", + null, + "2016-03-31T00:00:00Z", + "09 17 28 38 45", + "01" + ], + [ + 300, + "A447AD72-8550-482E-97C7-3C99DF68E0CF", + 300, + 1459825329, + "708543", + 1459825329, + "708543", + null, + "2016-04-04T00:00:00Z", + "05 26 32 36 58", + "04" + ], + [ + 301, + "58B023C5-98DF-40D0-83E0-F59455C54A22", + 301, + 1460084526, + "708543", + 1460084526, + "708543", + null, + "2016-04-07T00:00:00Z", + "02 11 32 50 54", + "02" + ], + [ + 302, + "EF0612D5-4C76-415B-B319-6AEC5556CF37", + 302, + 1460430128, + "708543", + 1460430128, + "708543", + null, + "2016-04-11T00:00:00Z", + "15 30 34 38 55", + "02" + ], + [ + 303, + "A97F5813-253E-4260-8574-D345AFC22F9D", + 303, + 1460689307, + "708543", + 1460689307, + "708543", + null, + "2016-04-14T00:00:00Z", + "24 25 48 55 56", + "02" + ], + [ + 304, + "3C793ED7-C910-471F-B618-B402368054AE", + 304, + 1461034930, + "708543", + 1461034930, + "708543", + null, + "2016-04-18T00:00:00Z", + "06 25 29 33 44", + "02" + ], + [ + 305, + "36F1E6A8-801D-4403-A665-5EEAB32626AB", + 305, + 1461294107, + "708543", + 1461294107, + "708543", + null, + "2016-04-21T00:00:00Z", + "06 12 20 40 53", + "04" + ], + [ + 306, + "EADE786A-269F-400F-8C33-89F4B0AD1942", + 306, + 1461639766, + "708543", + 1461639766, + "708543", + null, + "2016-04-25T00:00:00Z", + "02 18 27 52 57", + "04" + ], + [ + 307, + "AB171349-0D36-4C32-AA59-4FBBC152CAF8", + 307, + 1461898908, + "708543", + 1461898908, + "708543", + null, + "2016-04-28T00:00:00Z", + "04 14 22 47 58", + "03" + ], + [ + 308, + "CCF28D0A-BF2A-493D-AB70-A9FF0030A0D8", + 308, + 1462244607, + "708543", + 1462244607, + "708543", + null, + "2016-05-02T00:00:00Z", + "10 14 30 55 56", + "01" + ], + [ + 309, + "4B2467EE-76B5-4234-93AF-08DA874D2C97", + 309, + 1462503706, + "708543", + 1462503706, + "708543", + null, + "2016-05-05T00:00:00Z", + "17 18 30 43 49", + "04" + ], + [ + 310, + "D1703DB4-0C48-4EE1-9143-EE7D721F51E0", + 310, + 1462849327, + "708543", + 1462849327, + "708543", + null, + "2016-05-09T00:00:00Z", + "20 23 38 48 56", + "03" + ], + [ + 311, + "A92AB3F1-4B91-4DAD-9B0B-ED02022D66E2", + 311, + 1463108526, + "708543", + 1463108526, + "708543", + null, + "2016-05-12T00:00:00Z", + "04 13 15 16 32", + "04" + ], + [ + 312, + "50F030BF-4F12-4CB4-927F-5CAFDF89C31E", + 312, + 1463454165, + "708543", + 1463454165, + "708543", + null, + "2016-05-16T00:00:00Z", + "04 20 25 32 45", + "03" + ], + [ + 313, + "FA8A7822-FDF4-4388-8AF3-6E9D045D78B8", + 313, + 1463713286, + "708543", + 1463713286, + "708543", + null, + "2016-05-19T00:00:00Z", + "10 18 37 40 57", + "04" + ], + [ + 314, + "D6178B28-AE42-4CA4-9FF0-D9B878E98335", + 314, + 1464058906, + "708543", + 1464058906, + "708543", + null, + "2016-05-23T00:00:00Z", + "04 19 26 33 58", + "02" + ], + [ + 315, + "551DFBDF-EC8E-456D-A09D-5A9B8B42BD9D", + 315, + 1464318105, + "708543", + 1464318105, + "708543", + null, + "2016-05-26T00:00:00Z", + "04 13 26 34 43", + "03" + ], + [ + 316, + "B4E5CA65-8F5C-4A75-A68E-01CD98074B29", + 316, + 1464663786, + "708543", + 1464663786, + "708543", + null, + "2016-05-30T00:00:00Z", + "05 07 27 28 36", + "04" + ], + [ + 317, + "E7E2C9F9-A64E-43EB-B9C7-BD6D8E4962C4", + 317, + 1464922887, + "708543", + 1464922887, + "708543", + null, + "2016-06-02T00:00:00Z", + "18 28 30 31 37", + "02" + ], + [ + 318, + "C45FF1A8-7331-4DC6-9AB6-E4DE04A0B09C", + 318, + 1465268547, + "708543", + 1465268547, + "708543", + null, + "2016-06-06T00:00:00Z", + "18 25 35 41 57", + "02" + ], + [ + 319, + "58BB5146-A70B-41DE-AFCF-5E024D26B38F", + 319, + 1465527708, + "708543", + 1465527708, + "708543", + null, + "2016-06-09T00:00:00Z", + "01 04 12 33 41", + "02" + ], + [ + 320, + "68C6831F-536C-4009-BFB9-BC3A2B4AD625", + 320, + 1465873309, + "708543", + 1465873309, + "708543", + null, + "2016-06-13T00:00:00Z", + "35 40 51 55 60", + "01" + ], + [ + 321, + "5C1548EC-0215-4D3E-87AA-8D807B4E60FB", + 321, + 1466132506, + "708543", + 1466132506, + "708543", + null, + "2016-06-16T00:00:00Z", + "03 17 22 57 59", + "02" + ], + [ + 322, + "830DCC3A-6742-4948-89CC-82FBA203A36C", + 322, + 1466478145, + "708543", + 1466478145, + "708543", + null, + "2016-06-20T00:00:00Z", + "01 12 14 32 60", + "03" + ], + [ + 323, + "5DF63F07-C89F-486B-8B29-7772ABEF0A92", + 323, + 1466737307, + "708543", + 1466737307, + "708543", + null, + "2016-06-23T00:00:00Z", + "01 09 36 38 46", + "01" + ], + [ + 324, + "FC9292E2-8D42-4696-81F8-F5377A8C59D6", + 324, + 1467082985, + "708543", + 1467082985, + "708543", + null, + "2016-06-27T00:00:00Z", + "02 03 09 27 37", + "01" + ], + [ + 325, + "1954E04D-32A1-45E0-9ACF-B47404D258DF", + 325, + 1467342107, + "708543", + 1467342107, + "708543", + null, + "2016-06-30T00:00:00Z", + "04 09 10 31 34", + "03" + ], + [ + 326, + "7C56F803-F4B5-4DA0-8C97-9B7FA2ADC1F3", + 326, + 1467687725, + "708543", + 1467687725, + "708543", + null, + "2016-07-04T00:00:00Z", + "02 15 17 18 52", + "01" + ], + [ + 327, + "4294E688-3864-491C-86C9-CA646EC2C49C", + 327, + 1467947025, + "708543", + 1467947025, + "708543", + null, + "2016-07-07T00:00:00Z", + "04 08 26 41 55", + "03" + ], + [ + 328, + "066CD036-4708-429B-9B76-060E77753B4C", + 328, + 1468292515, + "708543", + 1468292515, + "708543", + null, + "2016-07-11T00:00:00Z", + "16 20 25 27 43", + "03" + ], + [ + 329, + "AAA3A2F3-5860-4F9F-94D1-C28D152A2621", + 329, + 1468551706, + "708543", + 1468551706, + "708543", + null, + "2016-07-14T00:00:00Z", + "03 08 11 24 25", + "02" + ], + [ + 330, + "FC5C2E01-2289-433A-88D1-50430851D90D", + 330, + 1468897350, + "708543", + 1468897350, + "708543", + null, + "2016-07-18T00:00:00Z", + "13 45 51 58 60", + "01" + ], + [ + 331, + "7521FBF4-81E2-4DED-ADDD-74F693D0031D", + 331, + 1469156485, + "708543", + 1469156485, + "708543", + null, + "2016-07-21T00:00:00Z", + "01 04 18 29 32", + "01" + ], + [ + 332, + "7153C695-63D1-49A3-91D2-082D09171CC0", + 332, + 1469502126, + "708543", + 1469502126, + "708543", + null, + "2016-07-25T00:00:00Z", + "11 12 23 26 43", + "02" + ], + [ + 333, + "27681D0A-040F-4D9A-A119-13C4392622CF", + 333, + 1469761306, + "708543", + 1469761306, + "708543", + null, + "2016-07-28T00:00:00Z", + "13 19 32 36 41", + "02" + ], + [ + 334, + "75246569-4982-4E24-81AA-45F9A9803C8D", + 334, + 1470106886, + "708543", + 1470106886, + "708543", + null, + "2016-08-01T00:00:00Z", + "32 34 36 39 46", + "01" + ], + [ + 335, + "1382260F-0898-4945-AB2E-8DC51E11593A", + 335, + 1470366105, + "708543", + 1470366105, + "708543", + null, + "2016-08-04T00:00:00Z", + "08 22 41 54 56", + "01" + ], + [ + 336, + "3ADD1C00-4497-450C-ADDD-300DA05C1BE8", + 336, + 1470711725, + "708543", + 1470711725, + "708543", + null, + "2016-08-08T00:00:00Z", + "04 07 08 12 23", + "01" + ], + [ + 337, + "8AEC193F-651F-4C61-8F91-792211203FB9", + 337, + 1470970905, + "708543", + 1470970905, + "708543", + null, + "2016-08-11T00:00:00Z", + "03 34 44 53 55", + "04" + ], + [ + 338, + "BFCE5235-8BFE-4DDB-B133-92787B11E6F1", + 338, + 1471316525, + "708543", + 1471316525, + "708543", + null, + "2016-08-15T00:00:00Z", + "13 40 48 50 57", + "04" + ], + [ + 339, + "E69693B0-5EE1-4E00-80F8-5E3826BDF3C2", + 339, + 1471575706, + "708543", + 1471575706, + "708543", + null, + "2016-08-18T00:00:00Z", + "07 24 25 56 58", + "03" + ], + [ + 340, + "866871A3-7952-4D0F-A557-86147F0FFABB", + 340, + 1472076169, + "708543", + 1472076169, + "708543", + null, + "2016-08-22T00:00:00Z", + "08 12 22 56 58", + "01" + ], + [ + 341, + "542C6698-71F5-4698-84EC-06F2660FD6F8", + 341, + 1472205665, + "708543", + 1472205665, + "708543", + null, + "2016-08-25T00:00:00Z", + "10 17 24 47 59", + "02" + ], + [ + 342, + "C51D55B6-5946-456C-A55F-D0AB8A2D4A21", + 342, + 1472551269, + "708543", + 1472551269, + "708543", + null, + "2016-08-29T00:00:00Z", + "05 21 25 31 55", + "04" + ], + [ + 343, + "B6A9851F-B803-47E0-8049-8C2D87476A7F", + 343, + 1472810465, + "708543", + 1472810465, + "708543", + null, + "2016-09-01T00:00:00Z", + "17 45 46 51 53", + "02" + ], + [ + 344, + "1AE0AF41-51F0-48B3-8843-EBEE145E8325", + 344, + 1473268891, + "708543", + 1473268891, + "708543", + null, + "2016-09-05T00:00:00Z", + "16 19 40 41 43", + "03" + ], + [ + 345, + "21F27DE2-45CC-4D6B-9FD0-1D8CA8A20024", + 345, + 1473445246, + "708543", + 1473445246, + "708543", + null, + "2016-09-08T00:00:00Z", + "03 07 22 37 60", + "02" + ], + [ + 346, + "9E61A94F-8971-4347-8E38-3505413BF359", + 346, + 1473760864, + "708543", + 1473760864, + "708543", + null, + "2016-09-12T00:00:00Z", + "01 32 39 55 58", + "02" + ], + [ + 347, + "B18D0A66-3AC8-43B6-8E40-BD28B95874E9", + 347, + 1474020065, + "708543", + 1474020065, + "708543", + null, + "2016-09-15T00:00:00Z", + "11 20 54 59 60", + "02" + ], + [ + 348, + "FF974006-3F5C-452D-8067-DB663B1E4070", + 348, + 1474365664, + "708543", + 1474365664, + "708543", + null, + "2016-09-19T00:00:00Z", + "19 40 49 54 56", + "04" + ], + [ + 349, + "3A072E03-BC85-4F81-8ED9-436ED49F4DFA", + 349, + 1474624871, + "708543", + 1474624871, + "708543", + null, + "2016-09-22T00:00:00Z", + "01 03 24 42 59", + "01" + ], + [ + 350, + "1C880DFC-09D3-4108-9038-721786886E91", + 350, + 1474970463, + "708543", + 1474970463, + "708543", + null, + "2016-09-26T00:00:00Z", + "36 44 50 54 60", + "04" + ], + [ + 351, + "3A5F2AF8-1578-4EA2-93BD-D1AE9BB6605F", + 351, + 1475229663, + "708543", + 1475229663, + "708543", + null, + "2016-09-29T00:00:00Z", + "13 25 39 51 55", + "03" + ], + [ + 352, + "2BC4E88D-7706-40B9-A71D-DCA1F37EED76", + 352, + 1475575263, + "708543", + 1475575263, + "708543", + null, + "2016-10-03T00:00:00Z", + "05 48 49 52 58", + "02" + ], + [ + 353, + "5B7DD3A9-D218-4210-AA73-BCBEAFD8A807", + 353, + 1475834463, + "708543", + 1475834463, + "708543", + null, + "2016-10-06T00:00:00Z", + "05 07 09 12 43", + "02" + ], + [ + 354, + "9203C4C9-9D90-47D5-8CEB-A1B92BBB6648", + 354, + 1476180084, + "708543", + 1476180084, + "708543", + null, + "2016-10-10T00:00:00Z", + "11 35 38 45 58", + "01" + ], + [ + 355, + "BF36F047-2FBA-452E-911A-756F1D1BFE6A", + 355, + 1476439263, + "708543", + 1476439263, + "708543", + null, + "2016-10-13T00:00:00Z", + "03 19 21 26 43", + "03" + ], + [ + 356, + "0E587093-37FA-40EE-AF54-B0BA90D3C41C", + 356, + 1476784863, + "708543", + 1476784863, + "708543", + null, + "2016-10-17T00:00:00Z", + "04 16 35 37 55", + "04" + ], + [ + 357, + "E64FCA93-AD90-4C08-96F6-F5D3893F4864", + 357, + 1477044065, + "708543", + 1477044065, + "708543", + null, + "2016-10-20T00:00:00Z", + "06 38 40 48 57", + "02" + ], + [ + 358, + "207063E0-B35C-47A9-B86A-29C9303F8C99", + 358, + 1477411657, + "708543", + 1477411657, + "708543", + null, + "2016-10-24T00:00:00Z", + "01 02 20 40 55", + "04" + ], + [ + 359, + "12F517F0-6AB0-49AF-B3FD-60551DB5E71C", + 359, + 1477648862, + "708543", + 1477648862, + "708543", + null, + "2016-10-27T00:00:00Z", + "15 16 19 37 40", + "04" + ], + [ + 360, + "BDFDD6D9-6C78-4ADD-9D8C-1BC306BF9D47", + 360, + 1477994484, + "708543", + 1477994484, + "708543", + null, + "2016-10-31T00:00:00Z", + "17 25 38 41 58", + "03" + ], + [ + 361, + "0F8581C9-2308-4CF3-85AF-58997BAA6195", + 361, + 1478253663, + "708543", + 1478253663, + "708543", + null, + "2016-11-03T00:00:00Z", + "05 10 29 37 59", + "04" + ], + [ + 362, + "B1A0DE7D-8653-4174-8165-6178E15DE970", + 362, + 1478602863, + "708543", + 1478602863, + "708543", + null, + "2016-11-07T00:00:00Z", + "09 11 20 37 60", + "02" + ], + [ + 363, + "1881FB59-CACC-4DE1-811E-470ACEB648AA", + 363, + 1478862062, + "708543", + 1478862062, + "708543", + null, + "2016-11-10T00:00:00Z", + "06 07 17 20 44", + "02" + ], + [ + 364, + "EA961E65-99E4-4534-8AD0-927FD4B33152", + 364, + 1479207685, + "708543", + 1479207685, + "708543", + null, + "2016-11-14T00:00:00Z", + "03 10 20 30 43", + "01" + ], + [ + 365, + "444F25A6-0B87-4BFC-81F0-48169EB912CB", + 365, + 1479466863, + "708543", + 1479466863, + "708543", + null, + "2016-11-17T00:00:00Z", + "06 30 32 35 48", + "01" + ], + [ + 366, + "A1B19B86-0101-422D-ACA5-6E0F257F9936", + 366, + 1479812595, + "708543", + 1479812595, + "708543", + null, + "2016-11-21T00:00:00Z", + "08 11 37 41 54", + "04" + ], + [ + 367, + "F3666FC9-4209-46DC-A083-AAB50F49AE32", + 367, + 1480071815, + "708543", + 1480071815, + "708543", + null, + "2016-11-24T00:00:00Z", + "04 24 25 32 46", + "01" + ], + [ + 368, + "4610C832-DE20-48B3-BC5C-4C599067F3DB", + 368, + 1480417262, + "708543", + 1480417262, + "708543", + null, + "2016-11-28T00:00:00Z", + "22 32 42 45 49", + "04" + ], + [ + 369, + "1559BB20-317A-4092-8966-788A8265EEA5", + 369, + 1480676463, + "708543", + 1480676463, + "708543", + null, + "2016-12-01T00:00:00Z", + "17 23 30 49 55", + "01" + ], + [ + 370, + "3B1D2CEB-0135-4AE2-A220-76D269851B3B", + 370, + 1481022063, + "708543", + 1481022063, + "708543", + null, + "2016-12-05T00:00:00Z", + "05 06 19 22 45", + "04" + ], + [ + 371, + "A04FCBEE-20D1-43E9-8B8B-3367AED3A724", + 371, + 1481281263, + "708543", + 1481281263, + "708543", + null, + "2016-12-08T00:00:00Z", + "08 28 29 49 57", + "03" + ], + [ + 372, + "34543D5E-6964-494C-B91E-E4CDF4DC14A3", + 372, + 1481626862, + "708543", + 1481626862, + "708543", + null, + "2016-12-12T00:00:00Z", + "14 19 48 53 54", + "04" + ], + [ + 373, + "A1020F9A-D7C6-4CC3-AC05-AAA2D238DD55", + 373, + 1481886064, + "708543", + 1481886064, + "708543", + null, + "2016-12-15T00:00:00Z", + "05 07 21 44 57", + "02" + ], + [ + 374, + "BDF2DA85-5CEB-48CC-B9E3-E2FBCEB23C2B", + 374, + 1482231662, + "708543", + 1482231662, + "708543", + null, + "2016-12-19T00:00:00Z", + "01 08 16 22 47", + "03" + ], + [ + 375, + "FA3C3D28-FD22-4EC5-8336-7C846CAD2443", + 375, + 1482577419, + "708543", + 1482577419, + "708543", + null, + "2016-12-22T00:00:00Z", + "14 19 32 38 43", + "03" + ], + [ + 376, + "4C35A52C-6907-43EC-86FF-4B4BEC6A5E49", + 376, + 1482836463, + "708543", + 1482836463, + "708543", + null, + "2016-12-26T00:00:00Z", + "04 12 29 31 36", + "01" + ], + [ + 377, + "C6F39639-73F6-4154-BD6E-B132ED1105E8", + 377, + 1483095662, + "708543", + 1483095662, + "708543", + null, + "2016-12-29T00:00:00Z", + "11 16 19 29 34", + "01" + ], + [ + 378, + "7AF97546-0AD7-40C7-BFE0-40A1E0BB1B33", + 378, + 1483441353, + "708543", + 1483441353, + "708543", + null, + "2017-01-02T00:00:00Z", + "26 31 37 38 41", + "02" + ], + [ + 379, + "E983310B-B8AF-4A58-858F-0E9304EA8249", + 379, + 1483700569, + "708543", + 1483700569, + "708543", + null, + "2017-01-05T00:00:00Z", + "05 18 42 44 46", + "04" + ], + [ + 380, + "103D6B62-39BE-4EA4-B534-08BB03C150C8", + 380, + 1484046133, + "708543", + 1484046133, + "708543", + null, + "2017-01-09T00:00:00Z", + "21 28 31 44 51", + "01" + ], + [ + 381, + "7CD6CAB4-8153-4BB3-A27B-A542AB245036", + 381, + 1484305263, + "708543", + 1484305263, + "708543", + null, + "2017-01-12T00:00:00Z", + "06 32 37 50 56", + "01" + ], + [ + 382, + "0BA4693E-BAB9-474B-AF77-E1167BC331B6", + 382, + 1484650863, + "708543", + 1484650863, + "708543", + null, + "2017-01-16T00:00:00Z", + "03 15 16 19 26", + "01" + ], + [ + 383, + "F8E9EA6C-E90D-4747-9B9E-ABED48B51012", + 383, + 1484910064, + "708543", + 1484910064, + "708543", + null, + "2017-01-19T00:00:00Z", + "14 32 37 43 45", + "02" + ], + [ + 384, + "933403B9-374D-4F52-9016-A366170C7B80", + 384, + 1485255703, + "708543", + 1485255703, + "708543", + null, + "2017-01-23T00:00:00Z", + "16 24 32 44 48", + "01" + ], + [ + 385, + "1911AB83-55BF-41DA-9435-80647451B102", + 385, + 1485514863, + "708543", + 1485514863, + "708543", + null, + "2017-01-26T00:00:00Z", + "01 14 25 40 59", + "02" + ], + [ + 386, + "C9A55462-3885-4282-B2F9-D81DF650BB2A", + 386, + 1485860463, + "708543", + 1485860463, + "708543", + null, + "2017-01-30T00:00:00Z", + "11 20 31 34 51", + "03" + ], + [ + 387, + "0EBCE21B-9B55-455B-B50B-2C59071D79EB", + 387, + 1486119661, + "708543", + 1486119661, + "708543", + null, + "2017-02-02T00:00:00Z", + "13 20 24 37 58", + "02" + ], + [ + 388, + "EB111070-EDC8-4551-9340-2591ECD7C2C8", + 388, + 1486465263, + "708543", + 1486465263, + "708543", + null, + "2017-02-06T00:00:00Z", + "06 24 48 54 59", + "02" + ], + [ + 389, + "1AD26A0B-D5BA-4645-ACCF-F46113F2338C", + 389, + 1486724463, + "708543", + 1486724463, + "708543", + null, + "2017-02-09T00:00:00Z", + "02 28 37 38 48", + "04" + ], + [ + 390, + "5F8E008F-6819-4537-A227-B1B6E17F91B5", + 390, + 1487070063, + "708543", + 1487070063, + "708543", + null, + "2017-02-13T00:00:00Z", + "17 18 24 25 41", + "01" + ], + [ + 391, + "835E6675-3ED7-4366-A2C9-CBA14A2E2D21", + 391, + 1487329283, + "708543", + 1487329283, + "708543", + null, + "2017-02-16T00:00:00Z", + "08 12 19 35 42", + "04" + ], + [ + 392, + "92ACF91E-7E18-4474-B9CE-1FF4A6CA254C", + 392, + 1487674863, + "708543", + 1487674863, + "708543", + null, + "2017-02-20T00:00:00Z", + "13 16 23 37 48", + "03" + ], + [ + 393, + "8F0AA716-50CD-4F3A-8C03-A30502C50F12", + 393, + 1487934063, + "708543", + 1487934063, + "708543", + null, + "2017-02-23T00:00:00Z", + "03 24 38 43 52", + "03" + ], + [ + 394, + "FC265525-1D9E-4446-8D16-2E7B274FEE39", + 394, + 1488279663, + "708543", + 1488279663, + "708543", + null, + "2017-02-27T00:00:00Z", + "06 19 28 57 60", + "01" + ], + [ + 395, + "C83F7BA9-4D51-4162-BB6B-0D18AAA63D7A", + 395, + 1488538863, + "708543", + 1488538863, + "708543", + null, + "2017-03-02T00:00:00Z", + "03 07 11 30 42", + "03" + ], + [ + 396, + "48273180-B95E-4577-A184-BC322612FD77", + 396, + 1488884464, + "708543", + 1488884464, + "708543", + null, + "2017-03-06T00:00:00Z", + "01 05 14 22 50", + "02" + ], + [ + 397, + "E6EDD74A-BFA0-43ED-A0A8-89F9F297CBC8", + 397, + 1489143662, + "708543", + 1489143662, + "708543", + null, + "2017-03-09T00:00:00Z", + "01 08 23 56 58", + "03" + ], + [ + 398, + "638B5ABD-5A49-4D49-8E65-0C80CD12C359", + 398, + 1489485665, + "708543", + 1489485665, + "708543", + null, + "2017-03-13T00:00:00Z", + "13 16 17 24 50", + "02" + ], + [ + 399, + "CE4D7DBB-FA7E-4A9E-B690-69ACF26681C2", + 399, + 1489744863, + "708543", + 1489744863, + "708543", + null, + "2017-03-16T00:00:00Z", + "13 14 36 48 57", + "02" + ], + [ + 400, + "A79B333A-4D79-46AB-876A-ED37FDA22179", + 400, + 1490090463, + "708543", + 1490090463, + "708543", + null, + "2017-03-20T00:00:00Z", + "13 22 41 46 56", + "02" + ], + [ + 401, + "7E5D329D-8BA7-4F19-A9C4-B0C54C20470B", + 401, + 1490349662, + "708543", + 1490349662, + "708543", + null, + "2017-03-23T00:00:00Z", + "02 28 30 39 53", + "04" + ], + [ + 402, + "1985AC19-100B-4AB7-9576-B6B8227EE8C2", + 402, + 1490695263, + "708543", + 1490695263, + "708543", + null, + "2017-03-27T00:00:00Z", + "32 42 58 59 60", + "04" + ], + [ + 403, + "B253914E-565E-4CDA-A8F7-739D870195D6", + 403, + 1490954462, + "708543", + 1490954462, + "708543", + null, + "2017-03-30T00:00:00Z", + "24 38 40 44 49", + "02" + ], + [ + 404, + "6C4EA2A4-B16E-4933-94E4-CC03D67C41F5", + 404, + 1491300064, + "708543", + 1491300064, + "708543", + null, + "2017-04-03T00:00:00Z", + "12 15 28 46 57", + "02" + ], + [ + 405, + "0ABBB5BF-08B3-4106-8C0B-A7E4D3FFAB85", + 405, + 1491559263, + "708543", + 1491559263, + "708543", + null, + "2017-04-06T00:00:00Z", + "04 06 17 48 53", + "04" + ], + [ + 406, + "13B8CAA5-E796-4524-BEE5-74C3B4CE0262", + 406, + 1491904864, + "708543", + 1491904864, + "708543", + null, + "2017-04-10T00:00:00Z", + "20 22 37 55 56", + "03" + ], + [ + 407, + "7BCBE538-0B50-436D-9590-53E8C5D90F37", + 407, + 1492164063, + "708543", + 1492164063, + "708543", + null, + "2017-04-13T00:00:00Z", + "17 19 49 50 56", + "04" + ], + [ + 408, + "5958B7B7-B596-4599-9AFC-3605927278C3", + 408, + 1492509663, + "708543", + 1492509663, + "708543", + null, + "2017-04-17T00:00:00Z", + "05 09 12 33 46", + "04" + ], + [ + 409, + "38574FCC-C191-429E-BA01-6945C49FDA31", + 409, + 1492768863, + "708543", + 1492768863, + "708543", + null, + "2017-04-20T00:00:00Z", + "22 23 37 56 60", + "04" + ], + [ + 410, + "88377B77-8DFB-4B28-8D7C-778AE0574761", + 410, + 1493114484, + "708543", + 1493114484, + "708543", + null, + "2017-04-24T00:00:00Z", + "19 33 35 36 48", + "02" + ], + [ + 411, + "7B77E69F-1E58-4F9E-928F-31136AB6E344", + 411, + 1493373665, + "708543", + 1493373665, + "708543", + null, + "2017-04-27T00:00:00Z", + "02 20 27 29 53", + "04" + ], + [ + 412, + "D1439024-FE00-4907-BB75-A017CAE2298B", + 412, + 1493762464, + "708543", + 1493762464, + "708543", + null, + "2017-05-01T00:00:00Z", + "07 19 23 24 40", + "02" + ], + [ + 413, + "14FA8C72-6190-46D3-B86D-6B04643CC1F9", + 413, + 1493978463, + "708543", + 1493978463, + "708543", + null, + "2017-05-04T00:00:00Z", + "01 02 17 24 38", + "04" + ], + [ + 414, + "45E0D1A0-D009-4F72-8A54-2164799E0405", + 414, + 1494324065, + "708543", + 1494324065, + "708543", + null, + "2017-05-08T00:00:00Z", + "22 34 42 46 57", + "03" + ], + [ + 415, + "877064A5-1C75-4A14-8504-678698EA5CE5", + 415, + 1494583263, + "708543", + 1494583263, + "708543", + null, + "2017-05-11T00:00:00Z", + "06 20 30 34 36", + "01" + ], + [ + 416, + "9F38DE70-E408-4705-BD7F-BBB6E66DA750", + 416, + 1494928884, + "708543", + 1494928884, + "708543", + null, + "2017-05-15T00:00:00Z", + "02 27 28 34 39", + "03" + ], + [ + 417, + "E1E94E70-16BB-4D44-878A-D98B8B080DFD", + 417, + 1495188064, + "708543", + 1495188064, + "708543", + null, + "2017-05-18T00:00:00Z", + "04 29 30 55 58", + "03" + ], + [ + 418, + "96667C9D-2FF0-450B-905F-21D1F7EDB7CD", + 418, + 1495533664, + "708543", + 1495533664, + "708543", + null, + "2017-05-22T00:00:00Z", + "04 06 25 31 47", + "01" + ], + [ + 419, + "AF4400B9-8891-4605-9F13-51937F17B03B", + 419, + 1495792863, + "708543", + 1495792863, + "708543", + null, + "2017-05-25T00:00:00Z", + "06 07 13 16 30", + "01" + ], + [ + 420, + "048E1CAE-2335-44CB-9A83-5182E1340DB7", + 420, + 1496138464, + "708543", + 1496138464, + "708543", + null, + "2017-05-29T00:00:00Z", + "18 22 23 25 49", + "04" + ], + [ + 421, + "1DB24704-5C12-4A46-8E68-CD1DD147BDEC", + 421, + 1496397665, + "708543", + 1496397665, + "708543", + null, + "2017-06-01T00:00:00Z", + "05 09 46 55 58", + "04" + ], + [ + 422, + "FEE6742F-1091-4CD5-B512-702D5A4EC2B0", + 422, + 1496743263, + "708543", + 1496743263, + "708543", + null, + "2017-06-05T00:00:00Z", + "03 29 32 48 56", + "01" + ], + [ + 423, + "0A4E5275-85AB-47AF-BC6B-E0F20AFB16C2", + 423, + 1497002463, + "708543", + 1497002463, + "708543", + null, + "2017-06-08T00:00:00Z", + "24 27 43 50 60", + "03" + ], + [ + 424, + "303C188D-FDBB-45DD-85AC-05713746DB00", + 424, + 1497348063, + "708543", + 1497348063, + "708543", + null, + "2017-06-12T00:00:00Z", + "10 11 44 53 57", + "03" + ], + [ + 425, + "D5521A42-7B8E-4543-A679-7E8B30420AD2", + 425, + 1497607263, + "708543", + 1497607263, + "708543", + null, + "2017-06-15T00:00:00Z", + "01 09 17 26 55", + "01" + ], + [ + 426, + "6B9C238D-2DAD-4893-A400-41EE87FAA507", + 426, + 1497952863, + "708543", + 1497952863, + "708543", + null, + "2017-06-19T00:00:00Z", + "02 10 15 33 58", + "04" + ], + [ + 427, + "2F1D8176-05CC-42FD-9948-2DF7D2D17789", + 427, + 1498212065, + "708543", + 1498212065, + "708543", + null, + "2017-06-22T00:00:00Z", + "31 40 45 54 57", + "03" + ], + [ + 428, + "9BD5890A-DDD6-4F6B-BCB0-E8958FE6A64E", + 428, + 1498557663, + "708543", + 1498557663, + "708543", + null, + "2017-06-26T00:00:00Z", + "08 33 39 40 49", + "02" + ], + [ + 429, + "7A097BCB-1AE8-4F43-A54C-74F145E6EC89", + 429, + 1498816862, + "708543", + 1498816862, + "708543", + null, + "2017-06-29T00:00:00Z", + "07 08 13 18 48", + "02" + ], + [ + 430, + "1378F87D-4AE2-4A2E-9C6F-B16E64B6F6AE", + 430, + 1499162463, + "708543", + 1499162463, + "708543", + null, + "2017-07-03T00:00:00Z", + "04 28 40 41 48", + "03" + ], + [ + 431, + "DC076E67-B307-40C0-8542-B2137A9AE611", + 431, + 1499421663, + "708543", + 1499421663, + "708543", + null, + "2017-07-06T00:00:00Z", + "04 09 39 44 52", + "02" + ], + [ + 432, + "3E109B20-AE12-42CB-9DB9-2915BDB33484", + 432, + 1499767263, + "708543", + 1499767263, + "708543", + null, + "2017-07-10T00:00:00Z", + "13 19 34 38 53", + "01" + ], + [ + 433, + "D583AB29-686F-4C7C-A419-44BC8EDFF09C", + 433, + 1500026463, + "708543", + 1500026463, + "708543", + null, + "2017-07-13T00:00:00Z", + "06 17 32 45 59", + "03" + ], + [ + 434, + "8D36A3EA-081C-43D6-BE99-5444EC524B8D", + 434, + 1500372063, + "708543", + 1500372063, + "708543", + null, + "2017-07-17T00:00:00Z", + "08 17 27 28 39", + "02" + ], + [ + 435, + "5E8FA7B1-1811-4AD8-B38D-45AC8BD6892E", + 435, + 1500631263, + "708543", + 1500631263, + "708543", + null, + "2017-07-20T00:00:00Z", + "26 37 40 42 50", + "01" + ], + [ + 436, + "2DE0CC06-BC82-40F7-9EC1-7D994914295F", + 436, + 1500976822, + "708543", + 1500976822, + "708543", + null, + "2017-07-24T00:00:00Z", + "07 20 21 41 59", + "01" + ], + [ + 437, + "63D9B819-449D-4674-B015-B6C0DFE74DB2", + 437, + 1501236065, + "708543", + 1501236065, + "708543", + null, + "2017-07-27T00:00:00Z", + "32 37 38 42 43", + "02" + ] + ] +} diff --git a/test/inputs/json/misc/734ad.json b/test/inputs/json/misc/734ad.json index abd9e98c0..656757a51 100644 --- a/test/inputs/json/misc/734ad.json +++ b/test/inputs/json/misc/734ad.json @@ -1 +1,2642 @@ -{"count": 12129, "facets": {}, "results": [{"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-21T00:36:51.167919", "entity": "f68eebed3ca14d66aeb9be6e5680cdcd", "number_of_natural_persons": null, "legal": "8e8b73cc70d241e5bb32c8907cd042ba", "native_name": null, "head_office_country": "Denmark", "id": "fffebd3272294bb0a38d0347b0e0c4df", "activity_industry_forums": "None", "contact_country": 59, "head_office_postbox": null, "networking": "The European Federation of Building and Woodworkers (EFBWW) is the European Industry Federation for the construction industry, the building materials industry, the wood and furniture industry and the forestry industry. The EFBWW has 76 affiliated unions in 34 countries and represents a total of 2,000,000 members, see\r\nhttp://www.efbww.org/default.asp?Language=EN", "members_75": null, "main_category": 2, "members_50": 4, "activity_expert_groups": "None", "sub_category_title": "Trade unions and professional associations", "other_code_of_conduct": null, "head_office_town": "K\u00f8benhavn V", "info_members": "", "head": "8e8b73cc70d241e5bb32c8907cd042ba", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Kampmannsgade 4, 70300300 ", "activity_inter_groups": "None", "acronym": "BAT", "activity_eu_legislative": "Policies in the fields of the construction industry, employment and labour market, posting of workers, migrant workers, energy savings, works councils, occupational health and safety", "registration_date": "2012-09-19T14:07:17.947000", "activity_relevant_comm": "None", "head_office_post_code": "1790", "goals": "BAT coordinates and represents the member organisations' (3F, Blik & R\u00f8rarbejderforbundet, El-forbundet, HK/Privat, Malerforbundet, Dansk Metal og Teknisk Landsforbund) interests on working environment, co-determination, AS, Works Councils and EWC, industrial policy, housing policy and labour market polity , international work, posted workers, foreign companies and Greenland.", "members": 4, "last_update_date": "2016-04-12T08:34:24.029000", "members_fte": 2.0, "head_office_phone": "45 70300300", "members_25": null, "web_site_url": "http://www.batkartellet.dk", "sub_category": 26, "activity_other": "BAT coordinates the member organisations' interest on an european level through compilation and dialogue with the decision-makers. Further, BAT is the proponent for the Danish collective agreement model.", "name": "Bygge-, Anl\u00e6gs- og Tr\u00e6kartellet", "created_at": "2015-04-24T02:06:02.588289", "uri": "http://api.lobbyfacts.eu/api/1/representative/fffebd3272294bb0a38d0347b0e0c4df", "identification_code": "18539199654-93", "legal_status": "Faglig organisation (association; trade union federation)", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 45.5893459, "updated_at": "2016-02-17T01:42:44.613826", "entity": "c476460f5e8243a8b16b75ae1cfafa41", "number_of_natural_persons": 390, "legal": "e9918b3c28ed4f1197e97c17a59e4703", "native_name": null, "head_office_country": "Italy", "id": "ffdb86d0032b4bdf8682ff4cc908bf48", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "* wikimedia.org\r\n* https://meta.wikimedia.org/wiki/Wikimedia_chapters\r\n* https://meta.wikimedia.org/wiki/EU_policy\r\n* frontieredigitali.it\r\n* beniculturaliaperti.it", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Monza (MB)", "info_members": "Only volunteer work, mostly by members Federico Leva and Lorenzo Losa.\r\n\r\nWe also contribute a small share of the costs for the Free Knowledge Advocacy Group EU representative in Brussels.", "head": "e9918b3c28ed4f1197e97c17a59e4703", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "via Bergamo, 18 ", "activity_inter_groups": "None", "acronym": "WMI", "activity_eu_legislative": "Net neutrality, InfoSoc directive; anything related to public domain, copyright, free knowledge, free/libre open source software, open data, cultural heritage, digital divide, wikis, collaboration and sharing on the internet.", "registration_date": "2014-01-27T13:07:45.787000", "activity_relevant_comm": "http://wiki.wikimedia.it/wiki/Consultazione_europea_sul_diritto_d%27autore", "head_office_post_code": "20900", "goals": "Wikimedia Italia persegue esclusivamente finalit\u00e0 di solidariet\u00e0 sociale nel campo della promozione della cultura. L'Associazione ha per obiettivo di contribuire attivamente a diffusione, miglioramento e avanzamento del sapere e della cultura promuovendo la produzione, raccolta e diffusione gratuita di contenuti liberi (Open Content) per incentivare le possibilit\u00e0 di accesso alla conoscenza e alla formazione. Sono definiti \"contenuti liberi\" nel senso inteso dall'associazione tutte le opere che sono state contrassegnate dai loro autori con una licenza che ne permetta l'elaborazione e/o la diffusione gratuita. In aggiunta a ci\u00f2 sar\u00e0 approfondita anche la conoscenza e la consapevolezza delle questioni sociali e filosofiche correlate.\r\n\r\nIn particolare Wikimedia Italia si d\u00e0 come obiettivo di promuovere e sostenere, direttamente o indirettamente, gli sviluppi, i trasferimenti, le traduzioni in lingua italiana dei progetti della Wikimedia Foundation, Inc.\r\n\r\nAnche se Wikimedia Italia \u00e8 soggetta alla legge italiana, i suoi obiettivi includono il sostegno ai progetti di Wikimedia Foundation, Inc. nel suo complesso e non solamente a quelli in lingua italiana. Wikimedia Italia non ha interesse a intervenire nella gestione dei siti di Wikimedia Foundation, Inc.\r\n\r\n----\r\n\r\n\"Wikimedia italiana\" has no profit purpose. It intends to operate in the field of the culture and knowledge. In order to actively contribute to the diffusion, the improvement and the progress of the knowledge and culture in the world, Wikimedia italiana aims at supporting the development of encyclopedias, quote collections, educational books and collections of other documents, information and electronic databases having the following characteristics:\r\n\r\n they are completely free\r\n they are available on-line through the internet technologies and their derivatives\r\n they have a content editable by the user\r\n they have a free content, that can be distributed freely under the conditions of licenses like the GNU Free Documentation License, issued by the Free Software Association Inc., and particularly by its European branch on the site http://www.fsfeurope.org/.\r\n\r\nParticularly, Wikimedia italiana intends to promote and support, directly and indirectly, the developments, the transfers, the translations in Italian language of the projects of the Wikimedia Foundation, Inc.\r\n\r\nEven though Wikimedia italiana is subject to the Italian laws, its purposes include the support to the projects of the Association on the whole, and not only to the ones in Italian language. The usage of the Italian language is functional to the work of the association but it does not mean a definition of the association purposes on a national basis.", "members": 1, "last_update_date": "2016-02-16T16:19:57.030000", "members_fte": 0.25, "head_office_phone": "39 0395962256", "members_25": 1, "web_site_url": "http://wikimedia.it/", "sub_category": 31, "activity_other": "* Joined the https://meta.wikimedia.org/wiki/EU_policy/Statement_of_Intent\r\n* Helped draft https://meta.wikimedia.org/wiki/European_Commission_copyright_consultation\r\n* Submitted http://wiki.wikimedia.it/wiki/Consultazione_europea_sul_diritto_d%27autore and partecipating in InfoSoc directive review debate.\r\n* Joined Italian activities by multiple organisations, like beniculturaliaperti.it and fotoliberebbcc.wordpress.com, aimed at free culture promotion in Italy, also with an EU-level scope.", "name": "Associazione Wikimedia Italia", "created_at": "2015-04-24T02:33:36.659656", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffdb86d0032b4bdf8682ff4cc908bf48", "identification_code": "070762412733-39", "legal_status": "Associazione di promozione sociale", "members_100": null, "head_office_lon": 9.289427, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-28T02:12:35.246192", "entity": "2c67100610be42cd8f3573a08c677329", "number_of_natural_persons": null, "legal": "4cb1b6f7ae6944c1afc30fb37e0cb5e6", "native_name": null, "head_office_country": "Switzerland", "id": "ffc66947e9214c91ad50ca1f21879084", "activity_industry_forums": "None", "contact_country": 215, "head_office_postbox": null, "networking": "Advanced Medical Technology Association (AdvaMed) - advamed.org; European Society for Radiotherapy and Oncology (ESTRO) - estro.org; European Coordination Committee of the Radiological Electromedical and Healthcare IT Industry (COCIR) - cocir.org; Global Diagnostic Imaging, Healthcare IT and Radiation Therapy Trade Association (DITTA) - globalditta.org; Union for International Cancer Control (UICC) - uicc.org", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Cham", "info_members": "All Varian employees involved in activities described under heading 9 are based in Cham, Switzerland. Varian does maintain a small office in Belgium, but this office and all of its employees are entirely excluded from any activities described under heading 9, and is thus not applicable for the purpose of this registration.", "head": "b6b2bc34195647919988bdc66a928041", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Varian Medical Systems International AG Hinterbergstrasse 14 Hinterbergstrasse 14", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Varian Medical Systems primarily follows EU initiatives, policies and legislative files relating to public health and/or research and innovation (e.g., Horizon 2020).", "registration_date": "2016-06-27T17:53:26.204000", "activity_relevant_comm": "Horizon 2020; Europe 2020 Strategy", "head_office_post_code": "6330", "goals": "Varian's mission is to focus energy on saving lives. Varian pioneered the use of high-energy X-rays for cancer treatments and developed the first linear accelerators to deliver radiotherapy. Today, Varian is the world's leading supplier of radiotherapy treatment solutions, continually improving delivery systems and advancing the field with new technologies, such as radiosurgery and proton therapy.", "members": 2, "last_update_date": "2016-06-27T17:53:56.186000", "members_fte": 0.5, "head_office_phone": "41 417498844", "members_25": 2, "web_site_url": "http://varian.com", "sub_category": 21, "activity_other": "Varian Medical Systems is currently a member of the Innovative Medicines Initiative 2 (IMI2).", "name": "Varian Medical Systems International AG", "created_at": "2016-06-28T02:12:35.253532", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffc66947e9214c91ad50ca1f21879084", "identification_code": "185216022477-29", "legal_status": "public limited company", "members_100": null, "head_office_lon": null, "structure_members": "N/A", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-05-18T01:55:12.188289", "entity": "58e648b6c5f84e7385d918a130930e8e", "number_of_natural_persons": null, "legal": "3919868fa8014565a1d1c5a3a805178b", "native_name": null, "head_office_country": "United Kingdom", "id": "ffc559aded2d4379915fe024267d5399", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": "ECCO\r\nESSO\r\nESO\r\nECPC\r\nESMO\r\nEPF\r\nUEG\r\nESDO", "members_75": 1, "main_category": 3, "members_50": 3, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Salisbury", "info_members": "", "head": "a7b6d02d614b4e98a40e35a9246facd4", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "5 Deans Yard Phillips Lane Phillips Lane", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Wo work with our 40 partner groups in Europe to support patients, raise awareness of colorectal cancer and to advocate for the best treatment care and screening across all EU countries", "registration_date": "2016-05-16T18:01:23.910000", "activity_relevant_comm": "White Paper on colorectal cancer treatment\r\nAnnual review\r\nMeetings in the EU Parliament \r\nCollaboration with other NGO and clinical stakeholders in Europe on health issues", "head_office_post_code": "SP1 3YP", "goals": "EuropaColon is committed to preventing deaths from colorectal cancer and improving the quality of life and support for those affected by the disease\r\n\r\nOur 4 Key Goals\r\nTo reduce the numbers of European citizens affected by colorectal cancer\r\nTo identify colorectal cancer at an early stage\r\nTo ensure access\r\nto best treatment and care for all European patients\r\nTo support novel and innovative research into colorectal cancer", "members": 5, "last_update_date": "2016-05-17T10:41:19.666000", "members_fte": 3.25, "head_office_phone": "44 1772333587", "members_25": null, "web_site_url": "http://www.europacolon.com", "sub_category": 31, "activity_other": "We are not involved in these groups at present", "name": "Europacolon", "created_at": "2016-05-17T01:52:12.447290", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffc559aded2d4379915fe024267d5399", "identification_code": "509496521674-06", "legal_status": "not for profit", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "be_office_lat": null, "updated_at": "2016-08-12T02:07:20.156460", "entity": "1b95406c5f8c486fbad9295c26f6e201", "number_of_natural_persons": null, "legal": "4499ffdcc0744c59914a27084dbe7d22", "native_name": null, "head_office_country": "Italy", "id": "ffb255f6e8004fe88b4593048bae9c6f", "activity_industry_forums": "Nell'ambito della realizzazione di ETIS (European Tourism Indicator System) la Dott.ssa Bresciani, consulente specializzato nel Turismo ha partecipato a tutti i Forum sulla materia organizzati dalla Commissione dagli anni 2009 ed ha concluso l'iter partecipativo con la relazione tenuta presso la Commissione lo scorso Gennaio 2016 durante la premiazione per le 100 destinazioni di turismo europeo di cui ha fatto parte con l'Unione dei Comuni TERRAE ANIO IUBENSANAE come coordinatore del progetto.", "contact_country": 108, "head_office_postbox": "00027", "networking": "www.lazio.coldiretti.it\r\nwww.confcooperative.it\r\nwww.jlag.com\r\nwww.festfoundation.eu\r\nwww.pm4esd.eu\r\nwww.ccitabel.com", "members_75": null, "main_category": 1, "members_50": 100, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": "nessuno", "head_office_town": "ROVIANO", "info_members": "La costruzione di PRESS il nuovo gruppo associativo di progettisti europei fa pensare ad un aumento del gruppo di interesse intorno al proponente MB&PARTNERS", "head": "4499ffdcc0744c59914a27084dbe7d22", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Viale Alessandro Manzoni 13 13", "be_office_post_code": null, "activity_inter_groups": "None", "acronym": "MB&P", "activity_eu_legislative": "Le principali iniziative sono state nell'ambito del turismo in collaborazione con la attuale DG GROWTH con cui si \u00e8 percorso il cammino dei label territoriali ETIS sui piccoli comuni del Lazio. La societ\u00e0 ha anche partecipato a riunioni del Consiglio d'Europa sui Cammini e il Presidente \u00e8 divenuto Manager di Routes presso l'Istituto Culturale di Lussemburgo per il riconoscimento dei Cammini Certificati.\r\nIniziative sono state svolte di seminari relativi alle opportunit\u00e0 della Commissione per la convergenza tra turismo e agricoltura.\r\nNell'ambito formativo si \u00e8 ottenuta la certificazione PM4SD in Bruxelles per le certificazioni di Project Management e si sono organizzati seminari in Roma per il trasferimento di competenza e informazione sulle opportunit\u00e0 europee all'interno di Fondazione Italia Sostenibile per Azioni. \r\nAttualmente MB&PARTNERS \u00e8 proponente di una petizione europea per il riconoscimento della figura professionale del progettista europeo seguendo i regolamenti comunitari 1025/2012, la Direttiva 123/2006 sui Servizi e le attivit\u00e0 di controllo e sorveglianza, EQF (European Qualification Framework), Reg. CE n.765/2008 in materia di sorveglianza del mercato.", "registration_date": "2016-07-26T07:50:53.829000", "activity_relevant_comm": "MB&PARTNERS ha svolto attivit\u00e0 di comunicazione sia a livello locale , regionale e nazionale , che a livello internazionale. In ambito locale \u00e8 attiva con animazione territoriale per la conoscenza delle linee programmatiche europee di sviluppo dei territori rurali con attivit\u00e0 eventistiche per il miglior posizionamento dei temi. Con un evento di rilevanza europea \u00e8 stata la societ\u00e0 proponente dell'evento INCOUNTRY (www.incountry.eu), patrocinato dalla rappresentanza italiana della Commissione Europea. Il Presidente Dott.ssa Marina Bresciani ha partecipato al panel di ETIS (European Tourism Indicator System) come una tra le 100 destinazioni selezionate in Europa per il turismo sostenibile (marina bresciani-youtube-ETIS PANEL CONFERENCE). Il Presidente \u00e8 presente a tutti gli INFODAY sul turismo e alle discussioni correlate per il benessere e la qualit\u00e0 della vita con forti connotazioni e correlazioni con l'agricoltura (Coldiretti). Il Presidente \u00e8 attualmente anche rappresentante della Associazione Europea PRESS che ha realizzato il primo evento lo scorso 8 luglio per la certificazione degli skills del progettista europeo e i criteri di valutazione della figura professionale per una regolamentazione europea (pagina facebook PRESS - Progettisti Europei Associati).", "head_office_post_code": "00027", "goals": "MB&PARTNERS nasce dall'idea di creare un network di aziende e professionisti accomunati da un unico obiettivo, in cui ciascuno possa consolidare e condividere le proprie esperienze professionali maturate nel marketing territoriale, del turismo, strizzando l'occhio all'agricoltura, all'arte, alla cultura ed all'ambiente in generale.\r\nIl network non nasce come semplice aggregazione di aziende e professionisti che si occupano delle stesse cose, ma di entit\u00e0 che hanno effettivamente lavorato insieme, cooperato in progetti europei o nazionali o regionali, creato valore aggiunto per il proprio territorio ed abbiano, effettivamente, consolidato la propria collaborazione, collaudandola e fondandola sui risultati effettivamente raggiunti.\r\nMarina Bresciani \u00e8 l'elemento di coordinamento e raccordo tra le competenze verticali e specifiche dei singoli partner, grazie alle molteplici competenze sviluppate nel coordinare progetti integrati dal 2003 ad oggi. Lo spirito aggregativo e cooperativo nasce dalla qualit\u00e0 e solidit\u00e0 delle relazioni professionali che si sono create nel tempo tra i diversi soggetti coinvolti.", "members": 100, "last_update_date": "2016-07-26T08:01:19.825000", "members_fte": 50.0, "head_office_phone": "39 3274089916", "be_office_town": "Bruxelles", "members_25": null, "web_site_url": "http://mbandpartners.it", "sub_category": 13, "activity_other": null, "be_office_postbox": null, "name": "MB&PARTNERS di BRESCIANI MARINA", "be_office_street": "Rue de la Loi 26 ", "created_at": "2016-07-27T02:05:12.456085", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffb255f6e8004fe88b4593048bae9c6f", "identification_code": "346207322801-08", "legal_status": "DITTA INDIVIDUALE", "members_100": null, "be_office_phone": "32 33185868", "be_office_lon": null, "head_office_lon": null, "structure_members": "www.studiomorandini.net\r\nwww.italiaspa.org\r\nwww.unionegiovenzano.rm.it\r\nwww.comune.mentana.rm.it", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "Standing Committee on Agricultural Research (SCAR) Brusel, Belgicko\r\nInternational Committee for Animal Recording, Rome Italy (Medzin\u00e1rodn\u00e1 komisia pre evidenciu zvierat)\r\nInternational Committee on Food Microbiology and Hygiene (ICFMH) of International Union of Microbiological Societes (IUMS), Monells, \u0160panielsko (pracovn\u00edci NPPC \u2013 V\u00daP s\u00fa zodpovedn\u00ed za rie\u0161enie jednotliv\u00fdch oblast\u00ed potravin\u00e1rskej mikrobiol\u00f3gie pri zabezpe\u010dovan\u00ed bezpe\u010dnos\u0165 potrav\u00edn.", "activity_high_level_groups": "Akt\u00edvna \u010dinnos\u0165 NPPC je v pracovnej skupine Rady EU pre medzin\u00e1rodn\u00e9 environment\u00e1lne z\u00e1le\u017eitosti \u2013 dezertifik\u00e1cia k problematike Dohovoru OSN o boji proti dezertifik\u00e1cii,\r\n\r\n\tEuropean Soil Bureau Network \u2013 Eur\u00f3psky \u00farad pre p\u00f4du, EK/JRC/IES/Ispra,(Zvy\u0161ovanie povedomia o p\u00f4de \u2013 pr\u00edprava podkladov, spracov\u00e1vanie p\u00f4dnych \u00fadajov)\r\n\r\nEuropean Commission, Directorate General for Health and Consumer Protection, Brusel, Belgicko\r\nNPPC \u2013 V\u00daP spolupracuje s komisiou v oblastiach zdravia a ochrany spotrebite\u013eov a zaober\u00e1 sa ochranou a zlep\u0161ovan\u00edm zdravia obyvate\u013eov, bezpe\u010dnos\u0165ou a ne\u0161kodnos\u0165ou potrav\u00edn,", "head_office_lat": null, "updated_at": "2016-08-31T02:17:50.588053", "entity": "15af1f49221b4eafba575eca7e3d371e", "number_of_natural_persons": null, "legal": "6513b50e074640aaae1de8a9622abfa2", "native_name": null, "head_office_country": "Slovakia", "id": "ffae9158758a410391d34d6831f01b86", "activity_industry_forums": "Medzivl\u00e1dny technick\u00fd panel Glob\u00e1lneho partnerstva o p\u00f4de v r\u00e1mci FAO (ITPS-GSP FAO) \u2013 NPPC - V\u00daPOP akt\u00edvna spolupr\u00e1ca\r\n\r\nFarm Accountancy Data Network Committee (\u00da\u010das\u0165 na zasadnutiach v\u00fdboru FADN 3-4x ro\u010dne. Prerokovan\u00e9 s\u00fa: predpisy a nariadenia Eur\u00f3pskej Komisie, Rady a Parlamentu, s\u00favisiace s informa\u010dnou sie\u0165ou po\u013enohospod\u00e1rskeho \u00fa\u010dtovn\u00edctva E\u00da, form\u00e1t v\u00fdkazu pre zber d\u00e1t.)\r\n\r\nInternational Commission of Agricultural and Biosystems Engineering (CIGR), Brusel, Belgicko\r\nThe Organisation for Economic Co-operation and Development, Par\u00ed\u017e, Franc\u00fazsko (OECD)", "contact_country": 201, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 4, "members_50": null, "activity_expert_groups": "DG SANTE - Health and Food Safety, Unit E2 Plant Health, WG Plant Genetic Resources, Brusel, Belgicko (Expertn\u00e1 pracovn\u00e1 skupina genetick\u00fdch zdrojov rastl\u00edn pri E\u00da).\r\n\r\nKomisia E\u00da COPA/COGECA pracovn\u00e1 skupina pre ovce, kozy, te\u013eacie a hov\u00e4dzie m\u00e4so, Brusel, Belgicko (Organiz\u00e1cia EU zastre\u0161uj\u00faca potravin\u00e1rske a po\u013enohospod\u00e1rske organiz\u00e1cie a zv\u00e4zy. NPPC-V\u00da\u017dV Nitra m\u00e1 \u010dlenov v pracovnej skupine Ovce a kozy (poradensk\u00e1 skupina te\u013eacie a hov\u00e4dzie m\u00e4so).\r\n\tEuropean Food Safety Authority (EFSA), Parma, Taliansko\r\n\r\nEuropean Federation of Animal Science (EAAP)\r\nR\u00edm, Taliansko", "sub_category_title": "Think tanks and research institutions", "other_code_of_conduct": null, "head_office_town": "Lu\u017eianky", "info_members": "", "head": "6513b50e074640aaae1de8a9622abfa2", "status": "active", "main_category_title": "IV - Think tanks, research and academic institutions", "head_office_street": "Hlohoveck\u00e1 2 ", "activity_inter_groups": "European Regional Focal Point for ANGR (Eur\u00f3psky region\u00e1lny kontaktn\u00fd bod pre genetick\u00e9 \u017eivo\u010d\u00ed\u0161ne zdroje)\r\n\tEuropean Association for Research on Plant Breeding (EUCARPIA), Z\u00fcrich, \u0160vaj\u010diarsko (Eur\u00f3pska asoci\u00e1cia pre v\u00fdskum v \u0161\u013eachten\u00ed rastl\u00edn (V\u00daRV sa podie\u013ea na pr\u00e1ci viacer\u00fdch sekci\u00ed, najm\u00e4 GZ, krmov\u00edn a obiln\u00edn a zabezpe\u010duje pokusy s tritikale, pr\u00ednosom je mo\u017enos\u0165 z\u00edskavania najnov\u0161\u00edch inform\u00e1ci\u00ed v oblasti geneticko-\u0161\u013eachtite\u013esk\u00e9ho v\u00fdskumu)\r\n\r\nDAGENE (Dunamenti \u00c1llatfajt\u00e1k G\u00e9nmeg\u00f6rz\u00f6 Nemzetk\u00f6zi Egyes\u00fclete), Budape\u0161\u0165, Ma\u010farsko\r\nMedzin\u00e1rodn\u00e1 organiz\u00e1cia pre vini\u010d a v\u00edno v Par\u00ed\u017ei, O.I.V.", "acronym": "NPPC", "activity_eu_legislative": "V zmysle plnenia Nariadenia Eur\u00f3pskeho parlamentu a Rady \u010d. 1107/2009 o uv\u00e1dzan\u00ed pr\u00edpravkov na ochranu rastl\u00edn na trh a Smernice Eur\u00f3pskeho Parlamentu a Rady 2009/128/ES,ktorou sa ustanovuje r\u00e1mec pre \u010dinnos\u0165 Spolo\u010denstva na dosiahnutie trvalo udr\u017eate\u013en\u00e9ho pou\u017e\u00edvania pestic\u00eddov NPPC v s\u00fa\u010dasnosti rie\u0161i \u00falohu \u201eHodnotenie riz\u00edk pr\u00edpravkov na ochranu rastl\u00edn pre ope\u013eova\u010de a spravovanie toxikologicko-informa\u010dn\u00e9ho centra pre v\u010dely a pestic\u00eddy\u201c\r\n-\tSpracov\u00e1vaj\u00fa sa odborn\u00e9 stanovisk\u00e1 pre St\u00e1ly v\u00fdbor pre bezpe\u010dnos\u0165 potrav\u00edn pri EK oh\u013eadom rizika aplik\u00e1cie pr\u00edpravkov na ochranu rastl\u00edn", "registration_date": "2016-08-23T14:54:09.690000", "activity_relevant_comm": "V zmysle rozhodnutia EUR\u00d3PSKEHO PARLAMENTU A RADY \u010d. 529/2013/E\u00da z 21. m\u00e1ja 2013 o pravidl\u00e1ch zapo\u010d\u00edtavania pre emisie a z\u00e1chyty sklen\u00edkov\u00fdch plynov vypl\u00fdvaj\u00face z \u010dinnost\u00ed s\u00favisiacich s vyu\u017e\u00edvan\u00edm p\u00f4dy, so zmenami vo vyu\u017e\u00edvan\u00ed p\u00f4dy a s lesn\u00fdm hospod\u00e1rstvom a o inform\u00e1ci\u00e1ch t\u00fdkaj\u00facich sa opatren\u00ed s\u00favisiacich s t\u00fdmito \u010dinnos\u0165ami sa NPPC zaober\u00e1 sledovan\u00edm a inventariz\u00e1ciou emisi\u00ed z po\u013enohospod\u00e1rskej p\u00f4dy a zmien vyu\u017e\u00edvania p\u00f4dy ako aj anal\u00fdzou emisn\u00fdch faktorov a emisi\u00ed amoniaku a sklen\u00edkov\u00fdch plynov (CH4 , N2O) z chovu hospod\u00e1rskych zvierat\r\n\r\nV zmysle Smernice Eur\u00f3pskeho parlamentu a Rady 2009/28/ES o podpore obnovite\u013en\u00fdch zdrojov energie sa rie\u0161i \u00faloha \u201eVypracovanie krit\u00e9ri\u00ed udr\u017eate\u013en\u00e9ho vyu\u017e\u00edvania biomasy\u201c\r\n\r\nV r\u00e1mci programu programu HORIZONT 2020 je NPPC zapojen\u00e9 do rie\u0161enia projektu BIOSKOH\u2019s Innovation Stepping Stones for a novel European Second Generation BioEconomy. \r\nZ\u00e1merom projektu BIOSKOH je podpora rie\u0161en\u00ed pre unik\u00e1tne spracovanie a vyu\u017eitie fytomasy na v\u00fdrobu bioetanolu technol\u00f3giou druhej gener\u00e1cie.", "head_office_post_code": "95141", "goals": "The National Agricultural and Food Centre focuses on comprehensive research and gathering of knowledge in the sustainable use and protection of natural resources, especially soil and water resources for crop production and animal husbandry, quality and safety, innovation and competitiveness of food and non-food products of agricultural origin, productive and non-productive impact of agriculture on the environment and rural development and the transfer of knowledge from agricultural and food research to end users.", "members": 10, "last_update_date": "2016-08-23T15:15:53.294000", "members_fte": 2.5, "head_office_phone": "421 376546122", "members_25": 10, "web_site_url": "http://www.nppc.sk/index.php/sk/", "sub_category": 41, "activity_other": null, "name": "N\u00e1rodn\u00e9 po\u013enohospod\u00e1rske a potravin\u00e1rske centrum", "created_at": "2016-08-31T02:17:50.591701", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffae9158758a410391d34d6831f01b86", "identification_code": "509308323113-13", "legal_status": "\u0161t\u00e1tna pr\u00edspevkov\u00e1 organiz\u00e1cia", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-07T00:03:42.963618", "entity": "4c94c490da1e48a6af5d409dad93d2cc", "number_of_natural_persons": null, "legal": "923468e984824eb0a525f369e8e03dca", "native_name": null, "head_office_country": "Italy", "id": "ffaa55befc9b477bb35bd635bf458c3c", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "COPA : Committee of Professional Agricultural Organisations\r\nthrough Confagricoltura", "members_75": null, "main_category": 2, "members_50": 2, "activity_expert_groups": "None", "sub_category_title": "Trade unions and professional associations", "other_code_of_conduct": null, "head_office_town": "BOLOGNA", "info_members": "", "head": "ba011dd23b5240af8f980775e88609a6", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "via del monte 10 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "PAC", "registration_date": "2010-04-08T11:17:31.076000", "activity_relevant_comm": "None", "head_office_post_code": "40126", "goals": "Confagricoltura Emilia- Romagna is a regional branch of the national organisation representative of agricultural interests, which safeguards local farmer structures, all the associated members and every professional group, trade union and economic category linked to those members.", "members": 2, "last_update_date": "2016-04-06T16:35:51.728000", "members_fte": 1.0, "head_office_phone": "39 051 251866", "members_25": null, "web_site_url": "http://www.confagricoltura.org/it/", "sub_category": 26, "activity_other": "-Response to Consultations published by European Commission\r\n\r\n- Forwarding of position papers / statements to MEPS \r\n\r\n- Participation in the elaboration of agricultural position papers on the European level", "name": "CONFAGRICOLTURA EMILIA-ROMAGNA", "created_at": "2015-04-24T01:53:02.429922", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffaa55befc9b477bb35bd635bf458c3c", "identification_code": "36395803420-35", "legal_status": "ASSOCIAZIONE SINDACALE", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-02-11T02:56:07.336686", "entity": "dd0024740d7141a0870688d2aaafe8f6", "number_of_natural_persons": 12, "legal": "1cde557356d944059919483fca786984", "native_name": null, "head_office_country": "Greece", "id": "ffa463c6b2d24eb281d08ce34f369730", "activity_industry_forums": "None", "contact_country": 85, "head_office_postbox": null, "networking": "Member of the INGO network of the Council of Europe", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Thessaloniki", "info_members": "", "head": "db7eb8bab6d347b68fea1312a38f3db0", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Krispou 9, Ano Poli Ano Poli", "activity_inter_groups": "None", "acronym": "CDRSEE", "activity_eu_legislative": "DG for Neighbourhood and Enlargement Negotiations\r\nDG for Education and Culture\r\nDG for International Cooperation and Development\r\nDG for Justice and Consumers\r\nDG for Migration and Home Affairs", "registration_date": "2016-02-10T15:31:14.791000", "activity_relevant_comm": "Joint History Project -- The CDRSEE's flagship project, the JHP is an educational programme that aims to change the way history is taught in high schools across Southeast Europe. The programme, currently in its second phase, provides teachers with workbooks and training so they can offer coursework with multiple perspectives, encouraging students to consider the many aspects of an event and to think critically about information provided. There are currently four workbooks, in 11 languages, covering history up to the Second World War. The next two workbooks, which will address the Cold War and the Wars of the 1990s, are due to be published in July 2016 and launched in September 2016. The programme enjoys the support of nearly all the Ministries of Education across the region, and is considered the gold standard in history teaching.\r\n \r\nOkruzenje (Vicinities) -- The CDRSEE has done what no one thought possible just a few years ago -- created an informative, engaging talk show especially for the Western Balkans that deals with divisive issues in the region. The same programme is broadcast on 10 national television channels and scores of regional channels across the Western Balkans, including all the countries of the former Yugoslavia and Albania. The show, kicking off its fifth season, brings together guests from different countries and backgrounds on the same set. Okruzenje made history at the Western Balkans Summit Vienna 2015 in August when for the first time ever, the Prime Ministers of Albania and Serbia were both guests in a single studio, in this case advocating regional cooperation. \r\n\r\nNetucate -- The CDRSEE is partnering with EUROCLIO for a three-year project on education reform in Southeast Europe. The project leverages the \"Teaching for Learning\" methodology manual produced by the CDRSEE, providing teacher training and materials. Overall the project includes a major education evaluation, a pilot project and a project plan, as well as teacher training and a strengthening of the network of key actors, all focused on enhancing the education system to deal with a global, interactive society. The process will be followed via a special episode series of the \"Okruzenje\" TV talk show. The ultimate goal is educational reform in order to help sustain the democratisation process and enhance sensitivity and understanding, through reforms and changes in the formal school system.\r\n \r\nVicinities Europe -- Vicinities Europe has taken the proven Okruzenje (Vicinities) model and applied it to Europe, where there are certainly ample divisive issues. The idea surfaced from a presentation of Okruzenje in the European Parliament, where MEPs suggested widening the show to Europe, noting its power in fostering reconciliation and understanding among the people. Two pilot shows were produced in October 2015 -- one on the migrant and refugee crisis, and another on the future of the European idea. CIRCOM, the European Association of Regional Televisions, featured Vicinities Europe on its website and offered it to all of its members. So far, the shows have been broadcast in at least nine countries.", "head_office_post_code": "54634", "goals": "The Center for Democracy and Reconciliation in Southeast Europe is a non-governmental, non-profit organisation that seeks to foster democratic, pluralist, and peaceful societies in Southeast Europe. We advocate principles of social responsibility, sustainable development, and reconciliation among the peoples in the region. We accomplish these goals via media activities, educational programmes, seminars, publications, conferences, research projects, exchange programmes, and opinion polls.", "members": 1, "last_update_date": "2016-02-10T15:32:51.296000", "members_fte": 0.25, "head_office_phone": "30 2310960820", "members_25": 1, "web_site_url": "http://www.cdrsee.org", "sub_category": 31, "activity_other": null, "name": "Stichting Center for Democracy and Reconciliation in Southeast Europe", "created_at": "2016-02-11T02:56:07.343619", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffa463c6b2d24eb281d08ce34f369730", "identification_code": "660781520586-28", "legal_status": "Foundation non-governmental and non-profit", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-07-21T02:08:37.366704", "entity": "8325771f162b45498135a098dfb51cb8", "number_of_natural_persons": 39582, "legal": "77b4e80e645c4eb88d42acae1f4fd430", "native_name": null, "head_office_country": "United Kingdom", "id": "ffa09f73d35640b788cf26e335b50d84", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 4, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Academic institutions", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "4d1f631078c3459689f9115858f83163", "status": "active", "main_category_title": "IV - Think tanks, research and academic institutions", "head_office_street": "The Strand ", "activity_inter_groups": "None", "acronym": "KCL", "activity_eu_legislative": "Contribution to consultation and written correspondence", "registration_date": "2016-07-20T13:28:48.646000", "activity_relevant_comm": "None", "head_office_post_code": "WC2R 2LS", "goals": "King's College London is dedicated to the advancement of knowledge, learning and understanding in the service of society.\r\n\r\nThe college's mission is articulated in the College's Strategic Plan 2006 - 2016 (http://www.kcl.ac.uk/aboutkings/strategy/PDFs--Resources/2006-16StrategicPlan.pdf) and in the accompanying suite of linked strategies", "members": 1, "last_update_date": "2016-07-20T13:29:14.656000", "members_fte": 0.25, "head_office_phone": "44 78365454", "members_25": 1, "web_site_url": "http://www.kcl.ac.uk", "sub_category": 42, "activity_other": "Contribution to consultation and written correspondence", "name": "King's College London", "created_at": "2016-07-21T02:08:37.373983", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffa09f73d35640b788cf26e335b50d84", "identification_code": "335281522747-30", "legal_status": "'Exempt' charity under Schedule 3 of the Charities Act 2011 for the purposes of UK charity legislation", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-18T01:59:10.877902", "entity": "ea23cc779051402da25cfd080b2a83c4", "number_of_natural_persons": null, "legal": "7efa8b08a3d14ea9bce46dda642837da", "native_name": null, "head_office_country": "Germany", "id": "ff95562e4f774e7ba0c4a8ee98403c18", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": "B\u00f6rsenverein des Deutschen Buchhandels.\r\nhttp://www.boersenverein.de/de/portal/index.html", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Berlin", "info_members": "", "head": "7efa8b08a3d14ea9bce46dda642837da", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Fredericiastrasse 8 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Urheberrecht\r\nVerlagsrecht", "registration_date": "2016-05-31T15:28:20.995000", "activity_relevant_comm": "None", "head_office_post_code": "14050", "goals": "Das Publizieren von B\u00fcchern. Schwerpunkte: Theater, Film und Literatur.", "members": 3, "last_update_date": "2016-05-31T15:30:48.897000", "members_fte": 3.0, "head_office_phone": "49 303021826", "members_25": null, "web_site_url": "http://www.alexander-verlag.com", "sub_category": 21, "activity_other": null, "name": "Alexander Verlag Berlin", "created_at": "2016-06-01T01:55:05.349179", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff95562e4f774e7ba0c4a8ee98403c18", "identification_code": "052108522024-86", "legal_status": "Einzelfirma", "members_100": 3, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-17T01:39:21.520955", "entity": "e736f0e4a6d149459c5a1da0d62af8ec", "number_of_natural_persons": 1, "legal": "55203a1b62914a8a8033a633b2a3a2a3", "native_name": null, "head_office_country": "Canada", "id": "ff919bf968eb498bb7af62a1494a49d1", "activity_industry_forums": "None", "contact_country": 39, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": "Michel Georges Abdelahad", "head_office_town": "St-Jean-sur-Richelieu", "info_members": "De 1989 \u00e0 2004, nous avons \u00e9t\u00e9 tr\u00e8s actif au Canada. Des raisons personnelles ont conduit un ancien organisme de charit\u00e9 canadien \u00e0 se retir\u00e9.\r\n\r\n( Les Habitations Organisationnelles Mondiales pour la Famille )\r\n\r\nMichel Abdelahad, fondateur et ex-pr\u00e9sident de cet organisme reprendra les activit\u00e9es.", "head": "0ae64e61a73a431580ea1cb456740bdd", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "1392 Jacques-Cartier Sud ", "activity_inter_groups": "None", "acronym": "Michel Abdelahad", "activity_eu_legislative": "Nous avons les m\u00eames buts que l'Union europ\u00e9enne ou les Nations Unies, soit: C\u2019est en 2000 au sommet du mill\u00e9naire organis\u00e9 par les Nations Unies que les Chefs d\u2019\u00c9tats de 189 pays et des gouvernements du monde entier, se sont mis d\u2019accord pour n\u2019\u00e9pargner aucun effort pour lib\u00e9rer leurs semblables, hommes, femmes et enfants des conditions abjectes et d\u00e9shumanisantes de l\u2019extr\u00eame pauvret\u00e9. L\u2019objectif de l\u2019Union europ\u00e9enne, avec plus de 80 millions de personnes menac\u00e9es de pauvret\u00e9, consistait \u00e0 sortir au moins 20 millions de personnes de la pauvret\u00e9 et de l\u2019exclusion sociale d\u2019ici l\u2019an 2020.", "registration_date": "2012-04-06T18:28:15.430000", "activity_relevant_comm": "None", "head_office_post_code": "J3B 6Y8", "goals": "Une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage\r\n\r\nNotre projet vise \u00e0 garantir la s\u00e9curit\u00e9 de l\u2019habitation et de l\u2019alimentation de la famille vivant sous le seuil de pauvret\u00e9 \u00e0 la classe moyenne, telle garantie n\u2019\u00e9tant actuellement qu\u2019un avantage de la classes plus nantie. \r\n\r\nEn solvant les probl\u00e8mes de pauvret\u00e9, ce projet va cr\u00e9er un \u00e9quilibre entre ces classes. L\u2019une d\u00e9pendra de l\u2019autre, mais dans des conditions ou contextes diff\u00e9rents.\r\n\r\nL\u2019\u00e9quilibre ainsi cr\u00e9\u00e9 mettra un terme \u00e0 la lutte des classes et aux conflits qui, depuis trop longtemps,\r\nperdurent \u00e0 faire tant de victimes.\r\n\r\nNous consid\u00e9rons que nous avons tous un travail \u00e9galement valable, essentiel et indispensable dans la soci\u00e9t\u00e9. L\u2019habitation et l\u2019alimentation sont des besoins essentiels autant pour le plus bas salari\u00e9 que pour le plus nanti. Pourtant, ces besoins ne sont pas toujours ad\u00e9quatement\r\ncombl\u00e9s.\r\n\r\nLes travailleurs moins salari\u00e9s n\u2019auraient-ils pas droits \u00e0 aux m\u00eames avantages que leur employeur qui s\u2019enrichira \u00e0 leurs d\u00e9pends ?\r\n\r\nNotre projet cr\u00e9era cette \u00e9quilibre\r\n\r\nUne solution concr\u00e8te et r\u00e9aliste \u00e0 ce probl\u00e8me, c\u2019est l\u2019acc\u00e8s \u00e0 l\u2019habitation unifamiliale priv\u00e9e et l\u2019alimentation pour le travailleur soutien de famille bas salari\u00e9 ainsi que pour la classe moyenne. Ce projet a \u00e9t\u00e9 con\u00e7u pour r\u00e9tablir un \u00e9quilibre entres ces classes.\r\n\r\nLe 27 octobre 2014, nous avons fait parvenir une lettre \u00e0 Monsieur Martin Schultz, Pr\u00e9sident du Parlement europ\u00e9en. \u00c9tant canadiens, nous lui demandions dans notre correspondance, le processus afin d\u2019obtenir un ou une d\u00e9put\u00e9(e), dans le but de pr\u00e9senter officiellement notre projet aux membres de l\u2019Union europ\u00e9enne.", "members": 1, "last_update_date": "2016-03-15T12:32:49.855000", "members_fte": 0.5, "head_office_phone": "438 8376023", "members_25": null, "web_site_url": "http://www.michelabdelahad.ca", "sub_category": 31, "activity_other": "Nous avons fait parvenir une lettre de sensibilisation \u00e0 plus de 120 pays, \u00e0 des milliers de personnes dont des leaders, des administrateurs, des commer\u00e7ants, des industries.\r\n\r\nVoici la Lettre de sensibilisation:\r\n\r\nobjet:Le Projet , une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage\r\n\r\nMadame, Monsieur,\r\n \r\nCe projet, une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage, vise \u00e0 s\u00e9curiser l\u2019habitation et l\u2019alimentation pour la classe moyenne, une garantie qui n\u2019est actuellement qu\u2019un avantage de la classes plus nantie. \r\nNous consid\u00e9rons que, l'habitation et l'alimentation ne vont pas au m\u00e9rite, mais sont acquises et essentielles pour l'\u00eatre humain et nous y avons tous droit.\r\nEn apportant une solution aux probl\u00e8mes de pauvret\u00e9 dans le monde, ce projet cr\u00e9era un \u00e9quilibre entre ces classes. L\u2019une d\u00e9pendra de l\u2019autre, mais dans des conditions ou contextes diff\u00e9rents.\r\nL\u2019\u00e9quilibre ainsi cr\u00e9\u00e9 mettra un terme \u00e0 la lutte des classes, aux injustices et aux conflits qui, depuis trop longtemps, perdurent \u00e0 faire tant de victimes.\r\nNous consid\u00e9rons que nous avons tous un travail \u00e9galement valable, essentiel et indispensable dans la soci\u00e9t\u00e9. L\u2019habitation et l\u2019alimentation sont des besoins essentiels autant pour le plus bas salari\u00e9 que pour le plus nanti. Pourtant, ces besoins ne sont pas toujours ad\u00e9quatement combl\u00e9s.\r\nLes travailleurs moins salari\u00e9s n\u2019auraient-ils pas droits aux m\u00eames avantages que leur employeur qui s\u2019enrichira \u00e0 leurs d\u00e9pends ?\r\nNotre projet cr\u00e9era cet \u00e9quilibre. \r\nNous vous invitons \u00e0 venir visiter notre site internet au www.michelabdelahad.ca\r\nNous avons besoin de votre aide.\r\nAu plaisir de vous rencontrer.\r\nVeuillez, agr\u00e9er, Madame, Monsieur, l'expression de nos sentiments les meilleurs.\r\nMichel Abdelahad", "name": "Michel Abdelahad", "created_at": "2015-04-24T02:03:29.575210", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff919bf968eb498bb7af62a1494a49d1", "identification_code": "90135938437-51", "legal_status": "\u00c9tudiant / retrait\u00e9", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-08-18T02:05:39.164064", "entity": "93355a2361e94cdca6c3109c22d5c021", "number_of_natural_persons": null, "legal": "b1ca1ea84ce34faa8cdc85a44adc6532", "native_name": null, "head_office_country": "Belgium", "id": "ff8bf95428b24bfbb473f10d41580e0e", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "Sustainable Transport Forum\r\nMotorcycle Working Group", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Brussel", "info_members": "", "head": "ae93dd141fee4dd4b8e52c2ffd293e3e", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Boulevard de la Plaine 2 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "- Type-approval\r\n- Transport policy\r\n- Energy policy\r\n- Communication on decarbonization of transport\r\n- Review Transport Criteria Green Public Procurement", "registration_date": "2016-08-17T15:32:40.727000", "activity_relevant_comm": "- Coordinator European Alternative Fuels' Observatory\r\n- Partner in Solutions\r\n- Partner in REE4EU\r\n- Co-organizor EVS", "head_office_post_code": "1050", "goals": "AVERE \u2013 founded in 1978 - is a European network comprised of members including Users, NGO\u2019s, Associations, Interest groups, Public Bodies, Research & Development entities, Vehicle and Equipment Manufacturers, Electricity Utilities.\r\n\r\nIts main objective is to promote the use of electric mobility in order to achieve greener mobility for cities and countries.\r\n\r\nThe main activities to achieve these objectives are related to dissemination, networking, monitoring, participation in European and multilateral projects, lobbying, research and development, among other. In public policy, AVERE presents the electric drive industry\u2019s and R&D bodies\u2019 concerns to the European Commission.", "members": 3, "last_update_date": "2016-08-17T15:39:52.710000", "members_fte": 0.75, "head_office_phone": "32 477633923", "members_25": 3, "web_site_url": "http://www.avere.org", "sub_category": 31, "activity_other": null, "name": "AVERE", "created_at": "2016-08-18T02:05:39.168461", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff8bf95428b24bfbb473f10d41580e0e", "identification_code": "269727723042-29", "legal_status": "VZW", "members_100": null, "head_office_lon": null, "structure_members": "All AVERE members can be found here:\r\n\r\nhttps://averelev.wordpress.com/avere-lev-task-force-participants/", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-05-20T01:56:04.459713", "entity": "8483b8617edf495ba3a0c548efd0d036", "number_of_natural_persons": 4, "legal": "ba47d71f97c6415a95f7adb15969660c", "native_name": null, "head_office_country": "Belgium", "id": "ff8b766c3874481596465f39a7374139", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": null, "members_75": 0, "main_category": 3, "members_50": 3, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Bruxelles", "info_members": "", "head": "4a9a2409fc7543b8ab2c7de45cbcbf25", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Boulevard Saint Lazare 11 ", "activity_inter_groups": "None", "acronym": "ABF", "activity_eu_legislative": "EU activities in the field of education", "registration_date": "2016-05-16T17:32:32.443000", "activity_relevant_comm": "Erasmus+", "head_office_post_code": "1210", "goals": "Alphabet Formation, ABF, is a network of European organizations in the field of human capital development. This investment in knowledge, skills and competences will benefit individuals, institutions, organisations and society as a whole by contributing to growth and ensuring equity, prosperity and social inclusion in Europe and beyond.", "members": 3, "last_update_date": "2016-05-19T19:24:35.963000", "members_fte": 1.5, "head_office_phone": "32 488326305", "members_25": 0, "web_site_url": "http://www.alphabetformation.org", "sub_category": 31, "activity_other": null, "name": "Alphabet Formation", "created_at": "2016-05-17T01:52:14.441021", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff8b766c3874481596465f39a7374139", "identification_code": "348324921710-79", "legal_status": "ASBL", "members_100": 0, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "Horizon H2020", "head_office_lat": null, "updated_at": "2016-09-18T20:36:33.419121", "entity": "fb567d6ec94d40c7844a2bb9a324b727", "number_of_natural_persons": null, "legal": "c9244b6262854fe481ab829974aa01a4", "native_name": null, "head_office_country": "France", "id": "ff893be893604f0e9959c6bb774a97e4", "activity_industry_forums": "None", "contact_country": 75, "head_office_postbox": "34830", "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": null, "head_office_town": "CLAPIERS", "info_members": "", "head": "c9244b6262854fe481ab829974aa01a4", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "45 all\u00e9e Yves Stourdz\u00e9 ", "activity_inter_groups": "None", "acronym": "IDATE", "activity_eu_legislative": "MetisII\r\nEuro5G\r\nCreate-IOT\r\nMagicII\r\nFinancement FEDER", "registration_date": "2016-09-09T15:48:56.517000", "activity_relevant_comm": "None", "head_office_post_code": null, "goals": "IDATE DigiWorld, l\u2019un des instituts europ\u00e9ens de l\u2019\u00e9conomie num\u00e9rique les plus renomm\u00e9s, est sp\u00e9cialis\u00e9 sur les march\u00e9s t\u00e9l\u00e9coms, Internet, m\u00e9dias et les territoires num\u00e9riques. Depuis 1977, nos \u00e9quipes proposent des missions de conseil, des services de veille des march\u00e9s et un programme de d\u00e9bats et de rencontres afin de d\u00e9crypter les enjeux de l\u2019\u00e9conomie num\u00e9rique et d\u2019\u00e9clairer les d\u00e9cisions strat\u00e9giques de nos clients. Nous sommes fiers de travailler chaque ann\u00e9e avec plus de 400 d\u00e9cideurs publics et grandes entreprises qui renouvellent leur confiance dans nos services, au travers de nos trois lignes d\u2019activit\u00e9s :\r\n\u2022\tDigiWorld Research, une offre de prestations d\u2019\u00e9tudes et de conseil\r\n\u2022\tIDATE Consulting, un observatoire ind\u00e9pendant des march\u00e9s et de l\u2019innovation num\u00e9rique\r\n\u2022\tDigiWorld Institute, un think tank europ\u00e9en ouvert sur le monde", "members": 13, "last_update_date": "2016-09-09T15:52:37.466000", "members_fte": 3.25, "head_office_phone": "33 467144444", "members_25": 13, "web_site_url": "http://www.idate.org", "sub_category": 11, "activity_other": null, "name": "Institut de l'Audiovisuel et des T\u00e9l\u00e9communications en Europe", "created_at": "2016-09-18T20:36:33.426290", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff893be893604f0e9959c6bb774a97e4", "identification_code": "713335923349-24", "legal_status": "Association Loi 1901", "members_100": null, "head_office_lon": null, "structure_members": "http://www.idate.org/en/Forum/Members/Members-List_42_.html", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 37.5197479, "updated_at": "2016-03-26T01:50:56.435389", "entity": "241e762235884644aad9cd2ca1b4e4d9", "number_of_natural_persons": null, "legal": "ddcefa2c6ed84403a79cf581ef8ae649", "native_name": null, "head_office_country": "Italy", "id": "ff802d6280874fb08e132d662e46f18e", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": null, "members_75": 1, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "CATANIA", "info_members": "", "head": "af5aa34046b24aa79be61c468362d592", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "CORSO DELLE PROVINCE, 203 ", "activity_inter_groups": "None", "acronym": "FIPI", "activity_eu_legislative": "Mobilit\u00e0 lavoratori", "registration_date": "2015-01-01T13:14:34.261000", "activity_relevant_comm": "None", "head_office_post_code": "95128", "goals": "1) la rappresentanza sindacale degli associati, tutelandone gli interessi in tutte le sedi;\r\n2) la promozione dell\u2019attivit\u00e0 di formazione dei lavoratori autonomi e degli imprenditori, a tutela dei valori morali, civili e per la qualificazione;\r\n3) la rappresentanza e tutela dei lavoratori autonomi e delle imprese, nei rapporti con le istituzioni pubbliche e private, la Pubblica Amministrazione, le organizzazioni politiche, sociali, economiche a livello nazionale ed internazionale intervenendo anche attraverso le proprie organizzazioni territoriali e di settore per garantire la tutela e rappresentanza a tutti i livelli;\r\n4) la stipula, anche attraverso organizzazioni di settore, di accordi e contratti collettivi di lavoro fornendo la relativa assistenza alle associazioni territoriali e di settore interessato;\r\n5) l\u2019assistenza sociale e previdenziale di Patronato in Italia ed all\u2019estero, anche in convenzione;\r\n6) la rappresentanza, l\u2019assistenza e la consulenza di ogni aspetto dell\u2019attivit\u00e0 aziendale anche sotto i profili: contabile, amministrativo, legale, tecnico, tributario-fiscale, assicurativo-finanziario, sindacale e di consulenza del lavoro;\r\n7) la costituzione e la promozione di agenzie per l\u2019impiego secondo le norme vigenti, in attuazione del disposto di cui all\u2019art.78 della Legge n. 413 del 30.12.1991 e s.m.i,;\r\n8) la promozione ed assistenza alla creazione di nuove imprese con azioni specifiche, anche nel quadro degli appositi programmi della U.E.;\r\n9) la formazione professionale e continua dei lavoratori autonomi, degli imprenditori della piccola impresa, degli apprendisti, dei dipendenti e quanti operano nelle imprese o che intendano inserirsi nelle attivit\u00e0 aziendali, anche ai sensi del comma 3, art. 8 bis, D.lgs. 626/94 e s.m.i.;\r\n10) la costituzione, il potenziamento e l\u2019organizzazione anche sindacale di organismi economici, cooperativistici, mutualistici e consortili;\r\n11) attivit\u00e0 in materia di immigrazione e formazione interculturale con l\u2019obiettivo di elaborare strategie progettuali che permettano alla comunit\u00e0 locale di relazionarsi in maniera consapevole, aperta e dialogica con il fenomeno migratorio, contribuendo alla formazione di una societ\u00e0 multiculturale retta dalla valorizzazione delle differenze in un contesto di civile e pacifica convivenza.", "members": 2, "last_update_date": "2016-03-23T12:09:35.589000", "members_fte": 1.75, "head_office_phone": "095 449778", "members_25": null, "web_site_url": "http://www.fipi.it", "sub_category": 31, "activity_other": "Mobilit\u00e0 di persone a scopo lavorativo all'interno della Comunit\u00e0 europea.", "name": "FEDERAZIONE ITALIANA PICCOLE IMPRESE", "created_at": "2015-04-24T02:26:23.530723", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff802d6280874fb08e132d662e46f18e", "identification_code": "681912015411-37", "legal_status": "ASSOCIAZIONE", "members_100": 1, "head_office_lon": 15.0910225, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-07T00:37:19.553399", "entity": "a6ec27aa087f4d17afcd58832b92d3a7", "number_of_natural_persons": 51, "legal": "2dbc3ce9673b4989b73632e346f8dbf2", "native_name": null, "head_office_country": "Ireland", "id": "ff724deeeaf8408a9ff65a58e605d552", "activity_industry_forums": "None", "contact_country": 105, "head_office_postbox": null, "networking": "Health and Environment Alliance\r\nInternational Society of Doctors for the Environment\r\nInternational Physicians for the Prevention of Nuclear War\r\nInternational Campaign to Abolish Nuclear Weapons\r\nIrish Environmental Network\r\nIrish Environmental Pillar", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Bandon", "info_members": "All persons are volunteers (Unpaid)", "head": "2dbc3ce9673b4989b73632e346f8dbf2", "status": "inactive", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Castlebernard ", "activity_inter_groups": "None", "acronym": "IDEA", "activity_eu_legislative": "We are involved in many EU environmental issues through our affiliation to the Health and Environment Alliance (HEAL) based in Brussels, and with UN (UNEP) issues, mainly Climate Change, through the International Society of Doctors for the Environment (ISDE).", "registration_date": "2015-03-31T19:35:05.471000", "activity_relevant_comm": "Letters and articles in the lay and medical press, speaking on local and national radio and on TV when the opportunity arises. Attending various relevant meetings.", "head_office_post_code": "xxxxx", "goals": "To highlight the risks of environmental degradation and loss of biodiversity to human health including chemical contamination of the biosphere and climate change to medical professionals, the public and government. To advocate for a better and more sustainable way of life by holding public meetings, writing in lay and medical press/journals, speaking at public meetings, liasing with other NGOs, official organisations and government departments, the EU and the UN.", "members": 10, "last_update_date": "2015-04-20T19:17:38.830000", "members_fte": 2.5, "head_office_phone": "353 23 8844697", "members_25": 10, "web_site_url": "http://www.ideaireland.org", "sub_category": 31, "activity_other": null, "name": "Irish Doctors Environmental Association", "created_at": "2015-04-24T02:20:30.597430", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff724deeeaf8408a9ff65a58e605d552", "identification_code": "115584716819-62", "legal_status": "Registered charity", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 52.5151735, "updated_at": "2016-05-20T00:29:19.114087", "entity": "19db79249b454902a639066e1ec8b07c", "number_of_natural_persons": null, "legal": "d5f231312f2644a5b7c8e6983f983ee1", "native_name": null, "head_office_country": "Germany", "id": "ff6ce8c03aee44788ce83a6544cdbb4c", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "MDEG\r\nBorderline Classification Group", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Berlin", "info_members": "", "head": "3cd888fb06694df0b59bdfaf9559a27f", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Werderscher Markt 15 ", "activity_inter_groups": "None", "acronym": "EUROM", "activity_eu_legislative": "Medical Devices Regulation\r\nTTIP\r\nUDI\r\nREACH and RoHS", "registration_date": "2013-09-27T10:09:10.979000", "activity_relevant_comm": "None", "head_office_post_code": "10117", "goals": "The object of EUROM is to represent the joint interests of the precision mechanical and optical industries and to promote cooperation amongst the members.\r\n\r\nMembers of EUROM are the professional organizations which represent the precision mechanical and optical industries in their respective countries (member states of the EU).", "members": 2, "last_update_date": "2016-05-19T12:57:55.693000", "members_fte": 0.5, "head_office_phone": "49 3041402156", "members_25": 2, "web_site_url": "http://eurom.org/", "sub_category": 25, "activity_other": null, "name": "European Federation of Precision, Mechanical and Optical Industries", "created_at": "2015-04-24T02:04:35.541629", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff6ce8c03aee44788ce83a6544cdbb4c", "identification_code": "585778511937-68", "legal_status": "nicht-rechtsf\u00e4higer Verein im Sinne des \u00a7 54 BGB", "members_100": null, "head_office_lon": 13.3971302, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-07T01:00:14.924104", "entity": "abf0273d6186405bac6432a67fd01921", "number_of_natural_persons": 3, "legal": "09a75790dd0e4bbfa6b1d043f2cf38ed", "native_name": null, "head_office_country": "Netherlands", "id": "ff6ba0bcb497410fa406c9794206bf37", "activity_industry_forums": "None", "contact_country": 177, "head_office_postbox": "1000-119", "networking": "ECNAIS is active in an informal platform called European Meeting of Independent Education. EMIE is an informal platform that binds together, once a year all organizations with similar purposes.", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": "Ana Sofia Fialho Coelho dos Reis", "head_office_town": "Den Haag", "info_members": "The members of the Company shall be such persons nominated pursuant to the principles of the following named bodies (together referred to as \u201cthe Constituent Associations\u201d) shall so long as they remain in membership have the right to nominate a member for election of the Company. \r\n\r\nIn addition such other National Associations of Independent Schools as the Management Committee shall from time to time approve may each nominate 1 person as a member of the Company.", "head": "90fdf56cff874f0bb8a213be45db6d2c", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Bezuidenhoutseweg, 251-253 32-1E 32-1E", "activity_inter_groups": "None", "acronym": "ECNAIS", "activity_eu_legislative": "Collaboration between national associations of Independent Schools. \r\n\r\nTo function as a network of National Associations To exchange ideas and information. To hold meetings at which to discuss new initiatives in order to strength the European dimension in independent schools. \r\nTo provide information about European education and to disseminate more knowledge about different educational systems. To assist the establishment of E.U. educational projects. \r\nTo organize in service training for headmasters and teachers. To promote participation in international teacher\u00b4s training progammes. To help mobility and network for teachers, students and educational personnel. \r\n\r\nCoordination of National Associations of Independent Schools. To monitor the changing trends towards the Independent Schools in the different European countries. To monitor the political environment with regard to the Independent Schools in European countries. \r\nTo discuss different educational solutions. To audit both governmental and parliamentary documents. To support EU education organisations. To promote understanding of the rights of pluralism in the national systems of education. \r\n\r\nTo be a Forum for working together to establish a common understanding of freedom of education as well as of parental choice. To illuminate public opinion and the EU instances regarding freedom of education and freedom of parental choice. To promote understanding of the rights of parental choice. \r\nTo promote understanding of the vital role of independent schools in a modern democratic society. To further the interest of a all kinds of independent education whose principles conform to those set out in the Universal Declaration of Human Rights. \r\n\r\nTo be a source of contacts for other European countries (Western, Central and Eastern Europe). To be a meeting point with other National Associations of Independent Schools that share the same principles of freedom of education and freedom of parental choice. \r\nTo make agreed representation to the Council of Europe, the European Parliament and the European Union authorities.", "registration_date": "2015-01-16T17:29:52.689000", "activity_relevant_comm": "None", "head_office_post_code": "2594 AM", "goals": "ECNAIS is a non-political, non-confessional, international association for collaboration between national associations of independent schools in European countries. \r\n\r\nECNAIS Supports and pursues the values embedded in a democratic approach to pluralism in the national educational systems, and the respect of the parental choice. \r\nPROMOTES the interests of all kinds of Independent education, confessional and lay, whose principles conform to those set out in the Universal Declaration of Human rights. \r\nDEVELOPS political statements that promote the understanding of the values of the independent sector, and improve their acceptance and financial support in national legislation. \r\nTARGETS policy makers at an international level by representing the Independent sector at the Council of Europe, the European Parliament, The Commission of the European Union and other international organisations, on matters of common concern, based on an agreed programme. ASSISTS current and potential members in their efforts to promote the understanding of the value of a democratic attitude in a plural society.", "members": 1, "last_update_date": "2016-04-06T12:42:40.840000", "members_fte": 0.25, "head_office_phone": "31 70 3315252", "members_25": 1, "web_site_url": "http://www.ecnais.org", "sub_category": 31, "activity_other": "ECNAIS is a non-political, non-confessional, international association for collaboration between national associations of independent schools in European countries.\r\n\r\nECNAIS is recognized by the Council of Europe and the European Union Commission as a non-government organisation with consultavie status.\r\nIts principal objects are:\r\n\r\n-To bring together national associations of independent schools in European countries.\r\n-To assist its members in promoting understanding of the rights of pluralism in the national systems, of education and of parental choice of education for their children and of the vital role of independent schools in a modern democratic society.\r\n-To further the interests of all kinds of independent education, confessional and lay, whose principles conform to those set out in the Universal Declaration of Human Rights.\r\n- When so requested, to make agreed representation to the Council of Europe, the European Parliament, the European Union Commission and other international organisations on matters of joint concern.", "name": "European Council of National Associations of Independent Schools", "created_at": "2015-04-24T02:33:38.686042", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff6ba0bcb497410fa406c9794206bf37", "identification_code": "153452315640-05", "legal_status": "Company limited by guarantee", "members_100": null, "head_office_lon": null, "structure_members": "Association of Independent Schools in the Netherlands(2),\r\nF\u00f6rderverband Freier Schulen(1),\r\nAssociation of Private Schools of Bohemia Moravia and Silesia(1),\r\nBulgarian Association of Private Schools(1),\r\nDanish Council for International Cooperation for Independent Schools(2),\r\nAssiociation of Private Schools in Finland(1),\r\nFoudation pour l'ecole(1),\r\nAssociation of Hungarian Independent Schools(1),\r\nFederation of Independent Schools(1),\r\nNational Forum of Non-public Education(1),\r\nPortuguese Association of Independent Schools(2),\r\nEducati\u00f3n Y Gesti\u00f3n/ Escuelas Catolicas(1),\r\nNational Union for the Development of Private Pre-University Education(1),\r\nFOMENTO Education Centers(1),\r\nAssociation of Catholic Schoolboards(1),\r\nVerus(1),\r\nTurkish Private Schools' Association(1),\r\nUkrainian Association of Private Educational Istitutes(1),\r\nStichting Rijdende School(1),\r\nHellenic Private Schools Association(1),\r\nElternlobby(1)", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-26T01:30:01.606285", "entity": "50c6580582f94a34af348a115a00ae2b", "number_of_natural_persons": null, "legal": "a7ffe3422509435fbb15f365747978f8", "native_name": null, "head_office_country": "Ireland", "id": "ff698260d45047178a5e8775547815bc", "activity_industry_forums": "None", "contact_country": 105, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Dublin", "info_members": "", "head": "2382bd341af34ef786218727e8e6c46b", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Old Central Terminal Building, 1st Floor Dublin Airport Dublin Airport", "activity_inter_groups": "None", "acronym": "daa", "activity_eu_legislative": "Air Passenger Rights, Slots, Aviation Security, General Aviation Policy; Environmental Issues, Energy Union, Infrastructure Development", "registration_date": "2012-04-27T11:56:55.661000", "activity_relevant_comm": "None", "head_office_post_code": "N/A", "goals": "To influence the formulation or implementation of policy and decision making processes of the EU Institutions", "members": 25, "last_update_date": "2016-03-24T12:49:27.922000", "members_fte": 6.25, "head_office_phone": "353 1 8141111", "members_25": 25, "web_site_url": "http://www.daa.ie/gns/home.aspx", "sub_category": 21, "activity_other": "Engagement on Airport Package", "name": "daa plc", "created_at": "2015-04-24T02:07:49.792070", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff698260d45047178a5e8775547815bc", "identification_code": "64031768679-71", "legal_status": "Operating", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "Participation in BEPA until 2009", "activity_high_level_groups": "None", "head_office_lat": 50.01643435, "updated_at": "2016-03-09T01:52:57.476417", "entity": "40d6d5612dce4849a8422da8868f0570", "number_of_natural_persons": 9, "legal": "0ce76701cd904ea082793e5af8572015", "native_name": null, "head_office_country": "Germany", "id": "ff5e850d10a34a8d9e0b6772f68050b2", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": "no", "networking": "SGI Europe Buddhist Association e.V. is a member of Soka Gakkai International, domiciled in Tokyo, Japan", "members_75": null, "main_category": 5, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Organisations representing churches and religious communities", "other_code_of_conduct": null, "head_office_town": "M\u00f6rfelden-Walldorf", "info_members": "Matthias Gr\u00f6ninger (chairperson)\r\nHideaki Takahashi (vice (deputy) chairperson)\r\nRobert Samuels (treasurer)\r\nSuzanne Pritchard (member of the board of directors)\r\nJo\u04eblle Troeder (member of the board of directors)\r\nKazuo Fujii (member of the board of directors)", "head": "9a6e6bafa8a2494fa169854ef3c6757f", "status": "active", "main_category_title": "V - Organisations representing churches and religious communities", "head_office_street": "Nordendstrasse, 38 ", "activity_inter_groups": "None", "acronym": "SGI EBA", "activity_eu_legislative": "We are active in the fields of peace-building through culture and education based on the humanistic principles of Nichiren Buddhism as practised within the SGI movement", "registration_date": "2014-06-18T14:44:23.915000", "activity_relevant_comm": "We remain open to involvement in activities and projects", "head_office_post_code": "64546", "goals": "We are the European branch of the Soka Gakkai International (SGI) a lay Buddhist movement linking together approximately 140,000 members across Europe. (see www.sgi.org for more information).", "members": 2, "last_update_date": "2016-03-08T17:23:38.377000", "members_fte": 0.5, "head_office_phone": "49 610540910", "members_25": 2, "web_site_url": null, "sub_category": 51, "activity_other": "Our various constituent national organisations are active in interfaith activities and projects aimed at developing tolerance, understanding and cohesion", "name": "SGI Europe Buddhist Association", "created_at": "2015-04-24T02:31:28.178188", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff5e850d10a34a8d9e0b6772f68050b2", "identification_code": "828340313721-55", "legal_status": "registered association at district court Darmstadt registration number: VR 83170", "members_100": null, "head_office_lon": 8.58259536432507, "structure_members": "http://www.sgi.org/about-us/sgi-facts/sgi-organizations-registered-constituent.html", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-04T01:34:25.606548", "entity": "5de9a6d9a53747f6975b9a445620cba3", "number_of_natural_persons": null, "legal": "496705ef71014783a6550f088671bb28", "native_name": null, "head_office_country": "United Kingdom", "id": "ff5de8e3812e48caa9147bed2f17c2d3", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": "Innovate Finance, innovatefinance.com\r\n\r\nFuture 50, futurefifty.com", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "04ac790fa23b4605b043b5fe65caf051", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "186 - 188 City Road London London", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "PSD, AMLD, EMD.", "registration_date": "2015-06-30T12:34:39.762000", "activity_relevant_comm": "None", "head_office_post_code": "EC1V 2NT", "goals": "We\u2019re making the world a bit better by helping to make the financial system fair.\r\n\r\nWhen you transfer money internationally, banks and brokers often hide the real cost so you end up paying more in fees than you thought you were going to.\r\nSometimes this is because of the mark-up they put on the exchange rate or because there are additional fees that they just don\u2019t tell you about upfront.\r\n\r\nAt TransferWise, we\u2019re always completely transparent about the total charge and we make that as low as we can. TransferWise is the cheapest and fairest way of transferring money internationally. We\u2019re making sure that it\u2019s our customers that benefit and not the banking system.", "members": 2, "last_update_date": "2016-06-03T14:25:12.105000", "members_fte": 1.25, "head_office_phone": "44 207 250 3119", "members_25": 1, "web_site_url": "http://transferwise.com", "sub_category": 21, "activity_other": null, "name": "TransferWise Ltd", "created_at": "2015-07-07T00:57:02.084724", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff5de8e3812e48caa9147bed2f17c2d3", "identification_code": "843309518020-96", "legal_status": "Corporation", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 41.3989444, "updated_at": "2015-07-07T00:54:39.651407", "entity": "b710ed84a0714ee6bc51f5802ba6f3d8", "number_of_natural_persons": null, "legal": "c008150a897b47e4923badc9114a49f0", "native_name": null, "head_office_country": "Spain", "id": "ff4ffaee340a4512af726094b4ef145d", "activity_industry_forums": "None", "contact_country": 209, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": null, "head_office_town": "BARCELONA", "info_members": "", "head": "c008150a897b47e4923badc9114a49f0", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "LLACUNA 22 ", "activity_inter_groups": "None", "acronym": "ENERTIKA", "activity_eu_legislative": "eficiencia energ\u00e9tica", "registration_date": "2015-06-12T11:49:46.342000", "activity_relevant_comm": "None", "head_office_post_code": "08005", "goals": "Presentar nuestra organizaci\u00f3n.", "members": 2, "last_update_date": "2015-06-12T12:04:57.328000", "members_fte": 0.5, "head_office_phone": "34 030000718", "members_25": 2, "web_site_url": "http://WWW.ENERTIKA.COM", "sub_category": 11, "activity_other": null, "name": "INGENIERIA Y SERVICIOS DE EFICIENCIA ENERGETICA S.L.", "created_at": "2015-06-13T00:49:44.804466", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff4ffaee340a4512af726094b4ef145d", "identification_code": "580103617803-87", "legal_status": "SOCIEDAD LIMITADA", "members_100": null, "head_office_lon": 2.2017422, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-09-30T00:50:25.823162", "entity": "eafd9fd5011c4e9194f1c60a8ae53c5c", "number_of_natural_persons": null, "legal": "3cd636d80d5a405e8464dc3f13939169", "native_name": null, "head_office_country": "United Kingdom", "id": "ff3f0e3bc4824efaad758a4b11912dd7", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": 1, "main_category": 3, "members_50": null, "activity_expert_groups": "IAS was until summer 2015 member of the EU Alcohol and Health Forum", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "bab6f1f9af8746ce98bacebaabaef791", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Alliance House, 12 Caxton Street, London ", "activity_inter_groups": "None", "acronym": "IAS", "activity_eu_legislative": "IAS is actively involved at the European level regarding alcohol policies, such as the EU Alcohol Strategy, information to consumers, taxation, marketing and AVMSD, road safety.", "registration_date": "2015-09-29T13:43:09.123000", "activity_relevant_comm": "IAS is member of the European Alcohol Policy Alliance (Eurocare) and holds one board seat in Eurocare. IAS is involved in European projects and conferences on alcohol policies.", "head_office_post_code": "SW1H 0QS", "goals": "Our main work is based around helping to bridge the gap between the scientific evidence on alcohol and the wider public. We want to make all of this evidence accessible to anyone with an interest in alcohol - politicians, reporters, health professionals, students, youth workers and others - and to advocate for effective responses that will reduce the toll of alcohol in society.", "members": 2, "last_update_date": "2015-09-29T13:43:39.428000", "members_fte": 1.0, "head_office_phone": "44 2072224001", "members_25": 1, "web_site_url": "http://www.ias.org.uk", "sub_category": 31, "activity_other": null, "name": "Institute of Alcohol Studies (UK)", "created_at": "2015-09-30T00:50:25.830572", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3f0e3bc4824efaad758a4b11912dd7", "identification_code": "150480218577-06", "legal_status": "charity", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-23T02:00:02.214006", "entity": "14ac306c727745d4ad0c65b940d53322", "number_of_natural_persons": 8, "legal": "aa3f7ce935604bdab7b28d94d1553129", "native_name": null, "head_office_country": "Poland", "id": "ff3e2e39d8424ab198a14c1ed74b92fc", "activity_industry_forums": "None", "contact_country": 176, "head_office_postbox": null, "networking": "Sie\u0107 Szk\u00f3\u0142 Nauk Politycznych Rady Europy\r\nhttp://www.schoolsofpoliticalstudies.eu/list-of-schools.aspx", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Warszawa", "info_members": "", "head": "b4065d1f8823493092c8a2f7a970cdde", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Oleandr\u00f3w 6 ", "activity_inter_groups": "None", "acronym": "EAD", "activity_eu_legislative": "EU Global Strategy on Foreign and Security Policy", "registration_date": "2016-06-20T10:41:54.877000", "activity_relevant_comm": "Wsp\u00f3lna Polityka Zagraniczna i Bezpiecze\u0144stwa, aktywno\u015b\u0107 Europejskiej S\u0142u\u017cby Dzia\u0142a\u0144 Zewn\u0119trznych, EU Public Diplomacy, Europejska Polityka S\u0105siedztwa, Partnerstwo Wschodnie", "head_office_post_code": "00-629", "goals": "Celem Fundacji jest:\r\na) Kszta\u0142cenie m\u0142odych os\u00f3b zainteresowanych prac\u0105 w administracji krajowej i\r\nzagranicznej ze szczeg\u00f3lnym uwzgl\u0119dnieniem dyplomacji;\r\nb) Promowanie pozytywnego wizerunku Polski w kraju i za granic\u0105;\r\nc) Promowanie wiedzy z zakresu stosunk\u00f3w mi\u0119dzynarodowych;\r\nd) Dzia\u0142alno\u015b\u0107 na rzecz wsp\u00f3\u0142pracy mi\u0119dzynarodowej; \r\n\r\n\r\nFundacja realizuje swoje cele poprzez:\r\na) prowadzenie systematycznych zaj\u0119\u0107 edukacyjnych w charakterze studi\u00f3w;\r\nb) wspieranie i organizowanie kurs\u00f3w, szkole\u0144, seminari\u00f3w, warsztat\u00f3w tematycznych;\r\nc) organizowanie wyk\u0142ad\u00f3w, seminari\u00f3w i konferencji s\u0142u\u017c\u0105cych przekazywaniu wiedzy, gromadzeniu danych i informacji z zakresu dzia\u0142alno\u015bci Fundacji;\r\nd) inicjowanie i wspieranie program\u00f3w szkolenia specjalist\u00f3w r\u00f3\u017cnych dziedzin dla powstaj\u0105cych i rozwijaj\u0105cych si\u0119 instytucji rynku, demokracji i samorz\u0105du lokalnego;\r\ne) inicjowanie i wspieranie program\u00f3w badawczych maj\u0105cych dostarczy\u0107 wiedzy na temat zjawisk spo\u0142ecznych, ekonomicznych i politycznych, w zakresie o\u015bwiaty, kultury, ochrony \u015brodowiska oraz ochrony zdrowia i pomocy spo\u0142ecznej;\r\nf) inicjowanie i wspieranie program\u00f3w i przedsi\u0119wzi\u0119\u0107 podejmowanych przez plac\u00f3wki prowadz\u0105ce dzia\u0142alno\u015b\u0107 naukow\u0105, naukowo-techniczn\u0105, o\u015bwiatow\u0105, kulturaln\u0105\r\n(tak\u017ce kultury fizycznej i sportu), ochrony \u015brodowiska, dobroczynno\u015bci, ochrony zdrowia i pomocy spo\u0142ecznej oraz rehabilitacji zawodowej i spo\u0142ecznej inwalid\u00f3w;\r\ng) inicjowanie i wspieranie kontakt\u00f3w mi\u0119dzynarodowych, s\u0142u\u017c\u0105cych nawi\u0105zywaniu wsp\u00f3\u0142pracy na rzecz rozwoju demokracji, rynku, nauki, kultury, sztuki i o\u015bwiaty oraz\r\nwymiany informacji;\r\nh) Inicjowanie i wspieranie program\u00f3w informacyjnych, s\u0142u\u017c\u0105cych krzewieniu wiedzy na temat mechanizm\u00f3w rynkowych, instytucji demokracji, praw obywatelskich, a tak\u017ce propagowaniu postawy obywatelskiej oraz ekonomicznej samodzielno\u015bci i inicjatywy;\r\ni) wsp\u00f3\u0142prac\u0119 z w\u0142adzami samorz\u0105dowymi, rz\u0105dowymi i organizacjami pozarz\u0105dowymi w zakresie wymienionym w celach dzia\u0142ania Fundacji;\r\nj) organizowanie i koordynowanie pilota\u017cowych program\u00f3w badawczych oraz pracy grup ekspert\u00f3w;\r\nk) wspomaganie spo\u0142ecznych inicjatyw zbie\u017cnych z celami Fundacji;\r\nl) dzia\u0142ania na rzecz interes\u00f3w grup marginalizowanych spo\u0142ecznie; \r\nm) organizowanie i finansowanie bada\u0144 dotycz\u0105cych tworzenia i stosowania prawa;\r\nn) wsp\u00f3\u0142prac\u0119 z osobami, instytucjami krajowymi oraz zagranicznymi prowadz\u0105cymi dzia\u0142alno\u015b\u0107 w zakresie obj\u0119tym dzia\u0142alno\u015bci\u0105 Fundacji; \r\n\r\nOpr\u00f3cz realizacji inicjowanych przez siebie przedsi\u0119wzi\u0119\u0107, Fundacja wsp\u00f3\u0142dzia\u0142a z innymi instytucjami, organizacjami i osobami dla osi\u0105gania wsp\u00f3lnych cel\u00f3w\r\nstatutowych. Wsp\u00f3\u0142dzia\u0142anie to mo\u017ce mie\u0107 charakter wsparcia organizacyjnego, cz\u0119\u015bciowego lub ca\u0142kowitego finansowania przedsi\u0119wzi\u0119cia albo pomocy w uzyskaniu\r\nniezb\u0119dnych funduszy z innych \u017ar\u00f3de\u0142.", "members": 1, "last_update_date": "2016-06-22T10:16:21.966000", "members_fte": 0.25, "head_office_phone": "48 22 205 06 18", "members_25": 1, "web_site_url": "http://diplomats.pl/", "sub_category": 31, "activity_other": null, "name": "Europejska Akademia Dyplomacji", "created_at": "2016-06-21T02:01:15.432879", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3e2e39d8424ab198a14c1ed74b92fc", "identification_code": "397716222322-37", "legal_status": "Fundacja", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-09T01:47:07.392731", "entity": "e1f1e5abffaf4f109f38d141ab6191d9", "number_of_natural_persons": 33, "legal": "75619ec6640248049fe0c5d325c6e2d0", "native_name": null, "head_office_country": "United Kingdom", "id": "ff3d3f236e4747af9fc50ff58ddb4377", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": "1376", "networking": "Religious Liberty Partnership", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Luton", "info_members": "Vicki Salkin, Advocacy and Development Manager", "head": "234619020a0847b9be2d14b8b0b4a707", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "PO Box 1376 ", "activity_inter_groups": "Contact with the Intergroup on Freedom of Religion and Belief and Religious Tolerance, and attendance at hearings and other activities hosted by this Intergroup.", "acronym": "MEC", "activity_eu_legislative": "Activities of the EEAS, and the Foreign Affairs and Human Rights Committees, with a special focus on freedom of religion and belief.", "registration_date": "2014-05-20T13:25:59.855000", "activity_relevant_comm": "Policy implementation of EU Guidelines on the promotion and protection of freedom of religion or belief.", "head_office_post_code": "LU1 9PP", "goals": "Middle East Concern is a coalition of Christian organisations and individuals that promotes religious freedom in the Middle East and North Africa region, with a special focus on the Christian communities.", "members": 1, "last_update_date": "2016-03-08T10:33:23.289000", "members_fte": 0.25, "head_office_phone": "44 7408 884 202", "members_25": 1, "web_site_url": "http://www.meconcern.org", "sub_category": 31, "activity_other": "Engagement with MEPs and the European External Action Service to assist victims in individual cases of Freedom of Religion or Belief violations, and to address underlying causes of these violations in the Middle East and North Africa region.\r\n\r\nParticipation in European Parliament hearings, consultations and other meetings in Brussels relevant to our mandate.", "name": "Middle East Concern", "created_at": "2015-04-24T02:28:02.887563", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3d3f236e4747af9fc50ff58ddb4377", "identification_code": "814728213659-93", "legal_status": "Not for profit / NGO", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 53.1389846, "be_office_lat": 50.84595215, "updated_at": "2016-08-31T01:28:06.743898", "entity": "7486afe72dcd45dc9ed4331ac4b87b84", "number_of_natural_persons": null, "legal": "7e9d854f81624abfb77aa212a7a7a9f3", "native_name": null, "head_office_country": "Germany", "id": "ff3855a7d5c54d27947ce7773f6b3357", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": "EWE ist aufgrund seiner Struktur Mitglied in zahlreichen Verb\u00e4nden und Foren, wie u.a. dem Bundesverband der Energie- und Wasserwirtschaft (bdew), dem Verband kommunaler Unternehmen (VKU), dem Bundesverband Breitbandkommunikation (BREKO), dem European Energy Forum (EEF) oder der European Federation of Energy Traders (EFET). \u00dcber die Mitgliedschaften im VKU und bdew, ist EWE im Rahmen des Europ\u00e4ischen Dachverbandes der lokalen und regionalen Energieunternehmen (CEDEC) sowie EURELECTRIC aktiv. Die Mitgliedschaften unterst\u00fctzen die Arbeit der EWE auf Ebene der Europ\u00e4ischen Union.", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "Task Force Smart Grid (EG 3)", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Oldenburg", "info_members": "Sebastian Schulte-Derne, Beauftragter Br\u00fcssel\r\nDr. Eberhard Meller (Senior Counselor, part-time)", "head": "61d6249ecf2e4d1cadcc5a37599949e6", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Tirpitzstra\u00dfe, 39 ", "be_office_post_code": "1040", "activity_inter_groups": "None", "acronym": "EWE AG", "activity_eu_legislative": "Dossiers v.a. der EU-Energiepolitik, u.a. der Rahmen f\u00fcr die Klima- und Energiepolitik 2030, der Vorschlag zur Einrichtung und Anwendung einer Marktstabilit\u00e4tsreserve f\u00fcr das EU-System f\u00fcr den Handel mit Treibhausgasemissionszertifikaten; die Richtlinie \u00fcber M\u00e4rkte f\u00fcr Finanzinstrumente; die Verordnung \u00fcber die Integrit\u00e4t und Transparenz des Energiegro\u00dfhandelsmarktes (REMIT) sowie die Richtlinie \u00fcber den Aufbau der Infrastruktur f\u00fcr alternative Kraftstoffe.", "registration_date": "2012-02-06T15:22:29.163000", "activity_relevant_comm": "None", "head_office_post_code": "26122", "goals": "Als innovativer Dienstleister mit regionaler Ausrichtung ist EWE in den Gesch\u00e4ftsbereichen Energie, Telekommunikation und Informationstechnologie aktiv. \r\n\r\nDie Vereinigung dieser drei Felder unter einem Dach erm\u00f6glicht es dem Konzern intelligente Energiesysteme zu entwickeln und zu betreiben. Durch eine Reihe von innovativen Produkten f\u00fcr Privat- und Gesch\u00e4ftskunden gestaltet EWE auf diese Weise die Energieversorgung der Zukunft mit gr\u00f6\u00dftm\u00f6glicher Nachhaltigkeit, Effizienz und Zuverl\u00e4ssigkeit. \r\n\r\nMit mehr als 9.000 Mitarbeitern und \u00fcber acht Milliarden Euro Umsatz geh\u00f6rt EWE zu den gro\u00dfen Energieunternehmen in Deutschland. Der Konzern mit Hauptsitz im nieders\u00e4chsischen Oldenburg befindet sich \u00fcberwiegend in kommunaler Hand. Er beliefert im Nordwesten Deutschlands, in Brandenburg und auf R\u00fcgen sowie international in Teilen Polens und der T\u00fcrkei rund 1,5 Millionen Kunden mit Strom und Gas sowie rund 700.000 Kunden mit Telekommunikationsdienstleistungen. Hierf\u00fcr betreiben verschiedene Unternehmen der EWE-Gruppe mehr als 180.000 Kilometer Energie- und Telekommunikationsnetze.", "members": 2, "last_update_date": "2016-08-30T09:56:43.802000", "members_fte": 2.0, "head_office_phone": "49 0441 480500", "be_office_town": "Br\u00fcssel", "members_25": null, "web_site_url": "http://www.ewe.com", "sub_category": 21, "activity_other": null, "be_office_postbox": null, "name": "EWE Aktiengesellschaft", "be_office_street": "Avenue de Cortenbergh 172 ", "created_at": "2015-05-07T21:24:27.391519", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3855a7d5c54d27947ce7773f6b3357", "identification_code": "00741337988-18", "legal_status": "Aktiengesellschaft", "members_100": 2, "be_office_phone": "32 27438110", "be_office_lon": 4.39140462709525, "head_office_lon": 8.1962705, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 52.2070386, "updated_at": "2016-07-22T01:38:25.249158", "entity": "3ba2dd6a9fa8476287958f7e5c9fe427", "number_of_natural_persons": null, "legal": "bb554fda058e4557b86b4aa85f1dee23", "native_name": null, "head_office_country": "Poland", "id": "ff2e01dcb4264779be6aad1d601392b7", "activity_industry_forums": "None", "contact_country": 176, "head_office_postbox": null, "networking": "Stowarzyszenie Kreatywna Polska www.kreatywnapolska.pl", "members_75": null, "main_category": 2, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Warszawa", "info_members": "", "head": "bb554fda058e4557b86b4aa85f1dee23", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "St\u0119pi\u0144ska 22/30 ", "activity_inter_groups": "None", "acronym": "Sygna\u0142", "activity_eu_legislative": "1. Digital Single Market Strategy\r\n2. Przegl\u0105d Dyrektywy Audiowizualnej\r\n3. Reforma Prawa Autorskiego", "registration_date": "2015-07-20T14:21:47.515000", "activity_relevant_comm": "None", "head_office_post_code": "00-739", "goals": "Stowarzyszenie Sygna\u0142 dzia\u0142a na rzecz poszanowania w\u0142asno\u015bci intelektualnej, praw nadawc\u00f3w, dystrybutor\u00f3w, licencjodawc\u00f3w oraz odbiorc\u00f3w program\u00f3w telewizyjnych i innych tre\u015bci multimedialnych. Jego pocz\u0105tki si\u0119gaj\u0105 2001 roku. Obecnie w sk\u0142ad Stowarzyszenia wchodz\u0105 22 firmy dzia\u0142aj\u0105ce w bran\u017cy medi\u00f3w i telekomunikacji.\r\n\r\nSygna\u0142 skupia swoje dzia\u0142ania wok\u00f3\u0142 propagowania konieczno\u015bci efektywnej ochrony w\u0142asno\u015bci intelektualnej. Realizuje swoje cele poprzez organizacj\u0119 szkole\u0144 i warsztat\u00f3w (w tym dla firm cz\u0142onkowskich oraz organ\u00f3w \u015bcigania), prowadzenie kampanii edukacyjnych, przygotowywanie raport\u00f3w, bada\u0144 i stanowisk na tematy zwi\u0105zane z ochron\u0105 w\u0142asno\u015bci intelektualnej.", "members": 3, "last_update_date": "2015-07-20T14:23:51.987000", "members_fte": 1.0, "head_office_phone": "48 22 848 51 29", "members_25": 2, "web_site_url": "http://sygnal.org.pl", "sub_category": 25, "activity_other": null, "name": "Stowarzyszenie Sygna\u0142", "created_at": "2015-07-21T01:03:37.663899", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2e01dcb4264779be6aad1d601392b7", "identification_code": "208598218249-90", "legal_status": "Stowarzyszenie", "members_100": null, "head_office_lon": 21.0375624, "structure_members": "A+E Networks\r\nBBC Worldwide Polska\r\nCyfrowy Polsat\r\nDiscovery Polska\r\nFOX International Channels Poland\r\nHBO Polska\r\nIrdeto\r\nITI Neovision\r\nKino Polska TV\r\nMTG World Ltd\r\nMultimedia Polska\r\nNAGRA\r\nGrupa Onet\r\nSony Pictures Television\r\nTelewizja Polsat\r\nTurner Broadcasting System Poland\r\nTVN\r\nUniversal Networks International\r\nViacom International Media Networks Northern Europe\r\nThe Walt Disney Company (Polska)\r\nZPR Media", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-01T01:18:27.242764", "entity": "83e2a7225e074cda8317a50c35512eb0", "number_of_natural_persons": null, "legal": "7461491a69334e6f9b4c31663a0a1512", "native_name": null, "head_office_country": "Belgium", "id": "ff2dcae924f245828146c2bb86178fde", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": "NEANT", "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": "Code de conduite de la Sophrologie", "head_office_town": "BEUZET", "info_members": "NEANT", "head": "7461491a69334e6f9b4c31663a0a1512", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "12 A rue des Taillettes ", "activity_inter_groups": "None", "acronym": "JYL", "activity_eu_legislative": "NEANT", "registration_date": "2014-04-23T14:00:43.123000", "activity_relevant_comm": "NEANT", "head_office_post_code": "5030", "goals": "- Pr\u00e9vention des risques fiscaux transnationaux infra et extra europ\u00e9ens\r\n- Exercice des principes de subsidiarit\u00e9 dans les rapports transnationaux sociaux infra et extra europ\u00e9ens", "members": 1, "last_update_date": "2015-04-30T17:25:18.573000", "members_fte": 1.0, "head_office_phone": "32 478693508", "members_25": null, "web_site_url": null, "sub_category": 13, "activity_other": "NEANT", "name": "Jacques Y. LEIBOVITCH", "created_at": "2015-05-07T21:41:48.375353", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2dcae924f245828146c2bb86178fde", "identification_code": "520259613506-88", "legal_status": "ind\u00e9pendant", "members_100": 1, "head_office_lon": null, "structure_members": "NEANT", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-01-23T02:47:18.371076", "entity": "dcb5ab6757054a2ba6dab325168c035f", "number_of_natural_persons": null, "legal": "e1faea297e1049c4a965b66fec482503", "native_name": null, "head_office_country": "United Kingdom", "id": "ff2c0482fa3f45f2a7f6b111849f11a9", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "e1faea297e1049c4a965b66fec482503", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Suite 177 372 Old street 372 Old street", "activity_inter_groups": "The years I have been lobbying I have mostly followed the ITREE committee", "acronym": null, "activity_eu_legislative": "Contribute with input to different committees as ITRE, INTA and the Commission.", "registration_date": "2015-12-02T12:13:12.207000", "activity_relevant_comm": "Somerco have handed out several draft proposals to the MEPs in the European Parliament and also the Commission. See the list below:\r\nDraft proposals Enhance the competitiveness of EU member states \r\nPart 1 \u2013 Designated tax to science Enhance the competitiveness of EU member states \r\nPart 2 \u2013 Strategy to support the software industry Enhance the competitiveness of EU member states \r\nPart 3 \u2013 Actions to support women in ICT Enhance the competitiveness of EU member states \r\nPart 4 \u2013 Going abroad\u2013Competitive assets Enhance the competitiveness of EU member states \r\nPart 5 \u2013 Business incubators, financial recycling and incentives into reward Enhance the competitiveness of EU member states \r\nPart 6 \u2013 Standardization as a tool to increase competitiveness Enhance the competitiveness of EU member states \r\nPart 7 \u2013 Different types of innovations Enhance the competitiveness of EU member states \r\nPart 8 \u2013 Open source from science to society Enhance the competitiveness of EU member states \r\nPart 9 \u2013 Crowd sourcing and crowd funding Enhance the competitiveness of EU member states \r\nPart 10 \u2013 Green VAT for business Enhance the competitiveness of EU member states \r\nPart 11 \u2013 Keep talent in Europe Enhance the competitiveness of EU member states \r\nPart 12 \u2013 Research leftovers Enhance the competitiveness of EU member states \r\nPart 13 \u2013 Science Parks - Specializations Enhance the competitiveness of EU member states \r\nPart 14 \u2013 Patent trolls Enhance the competitiveness of EU member states \r\nPart 15 \u2013 Science e - Parks Enhance the competitiveness of EU member states \r\nPart 16 \u2013 Expansion options Enhance the competitiveness of EU member states \r\nPart 17 \u2013 The locally developed infrastructure Enhance the competitiveness of EU member states \r\nPart 18 \u2013 Treaty (Knowledge transfer) Enhance the competitiveness of EU member states \r\nPart 19 \u2013 Different types of infrastructure Enhance the competitiveness of EU member states \r\nPart 20 \u2013 Build infrastructure Enhance the competitiveness of EU member states \r\nPart 21 \u2013 Energy infrastructure (elsewhere) (In progress) \r\nEnhance the competitiveness of EU member states \r\nPart 22 \u2013 Quick market entry (Medical) Enhance the competitiveness of EU member states \r\nPart 23 \u2013 Innovation, Commercialization, Growth Enhance the competitiveness of EU member states \r\nPart 24 \u2013 External energy dependencies Enhance the competitiveness of EU member states \r\nPart 25 \u2013 Old innovations Enhance the competitiveness of EU member states \r\nPart 26 \u2013 The non-IP Parks Enhance the competitiveness of EU member states \r\nPart 27 \u2013 Digital inequality into prosperous society Enhance the competitiveness of EU member states \r\nPart 28 \u2013 Digital Magna Carta \u2013 exemptions in privacy Enhance the competitiveness of EU member states \r\nPart 29 \u2013 The networked subsidiarity (In progress) Enhance the competitiveness of EU member states \r\nPart 30 \u2013 Artic route (counterbalance) Enhance the competitiveness of EU member states \r\nOverview \u2013 Old and new key areas in order to increase the competitiveness of the industry (In progress) \r\nInput on threats against information society.", "head_office_post_code": "EC1V 9LT", "goals": "Somerco aims to help companies, governmental organisations and persons to succeed with increasing trade. It will create job growth. We do this online and offline.", "members": 1, "last_update_date": "2015-12-02T13:05:30.145000", "members_fte": 0.25, "head_office_phone": "44 7733824711", "members_25": 1, "web_site_url": null, "sub_category": 13, "activity_other": "I do not know if theer was a mistake doen when it was time for a renewal. Somerco has been registered in the Transparency register a few years before.", "name": "Somerco", "created_at": "2015-12-03T02:37:11.313688", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2c0482fa3f45f2a7f6b111849f11a9", "identification_code": "035508519773-34", "legal_status": "Limitied company", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "Analysis, monitoring, communicating with DGs officers or theme related sub-sections (e.g. Executive Agencies) or external national services which are commisioned through the European Commission, related to the above mentioned policy fields in relation to the aforementioned ICCM program initiative.", "head_office_lat": null, "updated_at": "2016-08-02T02:02:57.823297", "entity": "7a85467a724b420a9943dedced251363", "number_of_natural_persons": null, "legal": "bea73ab6ec8c4ae3863da0a781add3ed", "native_name": null, "head_office_country": "Germany", "id": "ff1ddb8bfd7149b6888de10daaac1839", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": null, "head_office_town": "Berlin", "info_members": "The operational workload including research, communication, administration and further tasks generated through engagement for European Union themes and affairs, should be basically considered as a contribution of the private sector and as such must be basically compensated. In particular, if the workload is rendered by smallest market participants.", "head": "bea73ab6ec8c4ae3863da0a781add3ed", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Borsigstr. 9 ", "activity_inter_groups": "None", "acronym": "gmjw", "activity_eu_legislative": "Culture and Education; Entrepreneurship; External Relations; Neighbouring Policies; Sustainable Development; Coherency; Internal Markets; Research;", "registration_date": "2016-06-26T20:35:55.739000", "activity_relevant_comm": "Program initiative for Intercivilizational / Intercultural Dialogue, Development and Cooperation (ICCM)\r\n\r\n(in development)", "head_office_post_code": null, "goals": "gmjw consulting is dedicated to the diversity of cultures and creativity as the central root and expression of human abilities, social interrelations, identity, intercultural dialogue and exchange, and as a key driving factor for development, progress, wealth, community building, civil societies and stability.\r\n\r\ngmjw consulting develops, contributes and carries out operational and strategic value for content, individuals, projects, organisations and frameworks, in particular - but not limited - for smaller organisations, small business and single professionals.\r\n\r\ngmjw consulting supports the encouragement and promotion of cultural entrepreneurship through strategic and operational contributions such as,\r\n\r\n- assistance and support by accompanied consultancy and mentorship,\r\n- project-oriented or temporarily aligned services and mandates,\r\n- contributions and research for the development and improvement of sector and segment specific policy and advocacy frameworks, and\r\n- commitment for cooperation, networking and community building.", "members": 1, "last_update_date": "2016-08-01T10:16:17.440000", "members_fte": 1.0, "head_office_phone": "49 3020008400", "members_25": null, "web_site_url": "http://www.gmjw.net", "sub_category": 13, "activity_other": "I am not sure which other group may be right to be selected. As so far, I have dealt only with groups as described above.", "name": "gmjw consulting - Martin JW Hannemann", "created_at": "2016-06-28T02:12:32.449916", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1ddb8bfd7149b6888de10daaac1839", "identification_code": "176405522467-72", "legal_status": "Sole entrepreneur", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-17T02:04:41.455253", "entity": "fa393bf592b94f44ac194ad7275d1227", "number_of_natural_persons": 15, "legal": "bf45cc3122db432e98f7dbfbdbaec6a4", "native_name": null, "head_office_country": "Hungary", "id": "ff1754756bf64805831e8bb4c762109a", "activity_industry_forums": "None", "contact_country": 99, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Budapest", "info_members": "", "head": "78d06c33eef140bb996ab3d36ac294cd", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Damjanich utca 51 ", "activity_inter_groups": "None", "acronym": "K-Monitor", "activity_eu_legislative": "Public procurement, access to information, copyright, anti-corruption, whistleblowing", "registration_date": "2016-06-15T11:00:43.648000", "activity_relevant_comm": "k-monitor.hu\r\nredflags.eu\r\nk.blog.hu", "head_office_post_code": "1071", "goals": "K-Monitor is an anti-corruption grass root NGO founded in 2007. K-Monitor strives against corruption and promotes the transparency of public spending in Hungary. K-Monitor operates open data websites, conducts research and advocates for legal reform. With the contribution of our researches, analyses and recommendations, we aim to challenge and overcome the social indifference to corruption, to raise awareness and disseminate knowledge. We truly believe that information technology can contribute to a more open, more transparent and more democratic way of governing. Therefore K-Monitor develops databases and online tools by which public expenses become trackable, and decision makers can be hold accountable.\r\nPrinciples of our operation are openness, independence and a critical approach.", "members": 1, "last_update_date": "2016-06-15T11:01:31.597000", "members_fte": 0.25, "head_office_phone": "36 17895005", "members_25": 1, "web_site_url": "http://k-monitor.hu", "sub_category": 31, "activity_other": null, "name": "K-Monitor K\u00f6zhaszn\u00fa Egyes\u00fclet", "created_at": "2016-06-17T02:04:41.460045", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1754756bf64805831e8bb4c762109a", "identification_code": "745636122335-90", "legal_status": "public benefit assiciation", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-10-15T00:50:17.979238", "entity": "068450584cd44111b84e342ff687d122", "number_of_natural_persons": null, "legal": "0e3d7caca9d34f01891a740bde3f91b0", "native_name": null, "head_office_country": "United States", "id": "ff1152a3aa88470388abb9d823c78a3d", "activity_industry_forums": "None", "contact_country": 234, "head_office_postbox": null, "networking": "U.S. Chamber of Commerce", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": "DC Bar Association, Missouri Bar Association", "head_office_town": "Washinghton DC", "info_members": "", "head": "1c3ebb576bba4e1abba16bcdf6e7363b", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "1150 Connecticut Avenue NW 12th Floor 12th Floor", "activity_inter_groups": "None", "acronym": "NAMI", "activity_eu_legislative": "Food safety, trade, food labeling", "registration_date": "2015-10-14T15:06:35.057000", "activity_relevant_comm": "Nothing in the EU to date.", "head_office_post_code": "22101", "goals": "NAMI represents the North American meat industry. Our goal is to be the voice of that industry on public policy issues.", "members": 1, "last_update_date": "2015-10-14T15:07:37.490000", "members_fte": 0.25, "head_office_phone": "1 2025874200", "members_25": 1, "web_site_url": "http://meatinstitute.org", "sub_category": 25, "activity_other": null, "name": "North American Meat Institute", "created_at": "2015-10-15T00:50:17.984658", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1152a3aa88470388abb9d823c78a3d", "identification_code": "863092419193-72", "legal_status": "501(c)(6) under U.S. law trade association", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-09T01:49:38.223999", "entity": "7614fa2ab8db4b7db6a7e5f9fa306793", "number_of_natural_persons": null, "legal": "d942401f93b84f98848b89a649d2e9b5", "native_name": null, "head_office_country": "Spain", "id": "ff0fb4adff974d2aa5b69dae56b23639", "activity_industry_forums": "None", "contact_country": 209, "head_office_postbox": null, "networking": "Deloitte Espa\u00f1a es miembro del Instituto de Censores Jurados de Cuentas de Espa\u00f1a.", "members_75": null, "main_category": 1, "members_50": 2, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": "Estamos sujetos a un C\u00f3digo de Conducta interno de nuestra empresa.", "head_office_town": "Madrid", "info_members": "", "head": "6f47b0aa751a49a59be60e8d06db0144", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Pza. Pablo Ruiz Picasso, 1, ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Contabilidad y Auditor\u00eda\r\nCorporate reporting y gobierno Corporativo\r\nCapital Markets Union\r\nData security, cyber security y protection of business privacy\r\nTax \r\nTrade", "registration_date": "2015-03-06T10:58:07.343000", "activity_relevant_comm": "Deloitte S.L. realiza actos a nivel nacional de las implicaciones de las pol\u00edticas europeas para las empresas espa\u00f1olas; estos actos son, fundamentalmente relativos a regulaci\u00f3n financiera.", "head_office_post_code": null, "goals": "Realizaci\u00f3n de auditor\u00edas de cuentas econ\u00f3micas, financieras, inform\u00e1ticas, de transacciones y saldos en internet, de gesti\u00f3n y operativas para cualquier persona f\u00edsica o jur\u00eddica.\r\nRealizaci\u00f3n de auditor\u00edas y asesor\u00edas medioambientales y consultor\u00eda de gesti\u00f3n de patrimonio y proyectos inmobiliarios, as\u00ed como auditor\u00edas y evaluaciones externas de sistemas de prevenci\u00f3n de riesgos laborales.\r\nRealizaci\u00f3n de consultor\u00edas, asesoramientos, estudios sectoriales o empresariales sobre temas econ\u00f3micos, financieros, contables, sectoriales y de gesti\u00f3n de empresas y, en general, sobre todos aquellos relacionados con la informaci\u00f3n, organizaci\u00f3n y planificaci\u00f3n empresarial y de instituciones, incluidos lo servicios de consultor\u00eda y asesoramiento relativos al dise\u00f1o y mejora de los procesos de gesti\u00f3n, an\u00e1lisis y estructura de costes, valoraci\u00f3n de puestos de trabajo, gesti\u00f3n de recursos humanos, planificaci\u00f3n estrat\u00e9gica, gesti\u00f3n de calidad, gesti\u00f3n medioambiental, mejora del conocimiento organizativo, dise\u00f1o e implementaci\u00f3n de sistemas de informaci\u00f3n, gesti\u00f3n y control de tesorer\u00eda y derivados financieros, exteriorizaci\u00f3n de los departamentos de auditor\u00eda interna y mejora de su funcionamiento, an\u00e1lisis sobre la viabilidad de las empresas, gesti\u00f3n del riesgo inform\u00e1tico y an\u00e1lisis de seguridad en el tratamiento informatizado de datos. o en el tratamiento de informaci\u00f3n en internet y en su transmisi\u00f3n y comunicaci\u00f3n, dise\u00f1o de sistemas de control interno y para el control de riesgos de todo tipo y an\u00e1lisis financieros.\r\nRealizaci\u00f3n de actividades de formaci\u00f3n empresarial y profesional.\r\nPrestaci\u00f3n de servicios en el \u00e1mbito de las Tecnolog\u00edas de la informaci\u00f3n y las Comunicaciones.", "members": 2, "last_update_date": "2016-03-08T10:30:27.376000", "members_fte": 1.0, "head_office_phone": "34 915145000", "members_25": null, "web_site_url": "http://www.deloitte.es", "sub_category": 11, "activity_other": null, "name": "Deloitte, S.L.", "created_at": "2015-04-24T02:29:54.491452", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff0fb4adff974d2aa5b69dae56b23639", "identification_code": "727712916372-77", "legal_status": "Sociedad Limitada", "members_100": null, "head_office_lon": null, "structure_members": "Deloitte se refiere a Deloitte Touche Tohmatsu Limited, (private company limited by guarantee, de acuerdo con la legislaci\u00f3n del Reino Unido) y a su red de firmas miembro, cada una de las cuales es una entidad independiente. En www.deloitte.com/about se ofrece una descripci\u00f3n detallada de la estructura legal de Deloitte Touche Tohmatsu Limited y sus firmas miembro.", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "Our experts participate on as needed bases in the activities on various consultative boards within FoodDrinkEurope. \r\nThe positions are then communicated to the relevant part of the EU Commission.", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-02-23T02:22:42.262586", "entity": "81752ab16ef6415b8f9861232e0910a6", "number_of_natural_persons": null, "legal": "28df51c6a18a46c69de34b8e5a59f999", "native_name": null, "head_office_country": "Croatia", "id": "ff0cfa2add0f430d8b3d980ee89d9571", "activity_industry_forums": "None", "contact_country": 54, "head_office_postbox": null, "networking": "FoodDrinksEurope (http://www.fooddrinkeurope.eu/)\r\nCroatian Employers' Association (http://www.hup.hr)\r\nEurocommerce (http://www.eurocommerce.eu/)", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Zagreb", "info_members": "", "head": "bd190039cd2f4b1cbd62892aa15bf7d1", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Trg Dra\u017eena Petrovi\u0107a 3 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "High Level Forum for a Better Functioning Food Supply Chain\r\n\r\nEU Platform on Added Sugar\r\n\r\nRoadmap for Action of the Food Product Improvement", "registration_date": "2016-02-22T17:25:57.643000", "activity_relevant_comm": "None", "head_office_post_code": "10000", "goals": "The Agrokor Group is the largest privately owned company in Croatia and one of the leading regional companies with almost 60,000 employees and reported consolidated total revenues reaching HRK 49 billion. \r\n\r\nThe Agrokor Group's core businesses are the production and distribution of food and beverages and retail. Corporate members include Jamnica d.d., Croatia's largest producer of mineral water, Ledo d.d., Croatia\u2019s leading ice cream company, Zvijezda d.d., the biggest domestic producer of oil, margarine and mayonnaise, the largest Croatian meat industry PIK Vrbovec d.d., Croatia\u2019s leading agricultural and industrial company Belje, and leading largest retail chains Konzum d.d. and Poslovni sistemi Mercator d.d.\r\n\r\nThe leading positions of Agrokor's companies are reflected in their dominant market shares. Ledo dominates Croatia\u2019s ice cream market. Zvijezda enjoys the biggest share of the margarine and edible oils market, while Jamnica fronts Croatia\u2019s bottled water market. Konzum is Croatia\u2019s biggest retail chain and PIK Vrbovec is the leading meat company in the region. Since it was established 30 years ago, due to a clear business vision, a consistently applied company-wide strategy and well-planned investment projects, Agrokor has grown from a small family-owned company for the production and sale of flowers into the leading food industry and retail group in the region today. \r\n\r\nHaving achieved and strengthened its indisputable leadership in the domestic marketplace by staying ahead of changing market demands, Agrokor is now focused on making a step further in an attempt to realize its long-term strategic goal \u2013 becoming a major player throughout the region.", "members": 1, "last_update_date": "2016-02-22T17:26:43.984000", "members_fte": 0.25, "head_office_phone": "385 1 489 4111", "members_25": 1, "web_site_url": "http://www.agrokor.hr", "sub_category": 21, "activity_other": null, "name": "Agrokor d.d.", "created_at": "2016-02-23T02:22:42.269992", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff0cfa2add0f430d8b3d980ee89d9571", "identification_code": "656353020755-88", "legal_status": "Private Company", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "be_office_lat": null, "updated_at": "2016-07-09T02:07:53.609887", "entity": "f83b1695de83443980ec94b4dba61a34", "number_of_natural_persons": null, "legal": "88525dc2b8c54a48bd2ea6918cedf357", "native_name": null, "head_office_country": "Italy", "id": "ff091717a1254ae3876bed6b1042569b", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": "1", "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Law firms", "other_code_of_conduct": null, "head_office_town": "Milano", "info_members": "", "head": "88525dc2b8c54a48bd2ea6918cedf357", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Via Barozzi ", "be_office_post_code": "1000", "activity_inter_groups": "None", "acronym": "BE", "activity_eu_legislative": "Iniziative nel campo del diritto doganale e del diritto fiscale dell'Unione europea", "registration_date": "2016-06-03T18:28:30.515000", "activity_relevant_comm": "None", "head_office_post_code": "20122", "goals": "Studio legale", "members": 2, "last_update_date": "2016-07-08T10:47:26.957000", "members_fte": 0.5, "head_office_phone": "39 02771131", "be_office_town": "Bruxelles", "members_25": 2, "web_site_url": "http://www.belex.com", "sub_category": 12, "activity_other": null, "be_office_postbox": "40", "name": "Bonelli Erede Pappalardo", "be_office_street": "Square de Meeus ", "created_at": "2016-06-04T02:01:11.176016", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff091717a1254ae3876bed6b1042569b", "identification_code": "205283422093-55", "legal_status": "Associazione", "members_100": null, "be_office_phone": "32 25520070", "be_office_lon": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 50.8693821, "updated_at": "2016-04-07T00:34:47.370083", "entity": "fb4895a76cd84605be4c79a469edd40d", "number_of_natural_persons": 0, "legal": "24e8db86b4ac4bdaa00596d0dfab2f6b", "native_name": null, "head_office_country": "Belgium", "id": "ff04fc2f7330408a9b773b91b8272c86", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Brussels", "info_members": "", "head": "5b5587fb2bd24c618e7063c1ad838edd", "status": "inactive", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Avenue des Olympiades 2 ", "activity_inter_groups": "None", "acronym": "EFQM", "activity_eu_legislative": "Horizon 2020- \"Peer Learning for Innovation Agencies\"\r\nEFQM Framework for Innovation Agencies\r\nEuropean Commission\r\nEASME/DG ENTR", "registration_date": "2015-03-10T10:24:10.228000", "activity_relevant_comm": "None", "head_office_post_code": "1140", "goals": "EFQM is a not-for-profit membership foundation based in Brussels, Belgium. With around 450 members covering more than 55 countries and 50 sectors, we provide a unique platform for organisations to learn from each other and improve performance. EFQM is the custodian of the EFQM Excellence Model, a business model which is helping over 30,000 organisations around the globe to strive for Sustainable Excellence.", "members": 1, "last_update_date": "2015-11-27T11:33:41.380000", "members_fte": 0.25, "head_office_phone": "32 27753511", "members_25": 1, "web_site_url": "http://www.efqm.org/", "sub_category": 31, "activity_other": null, "name": "EFQM European Foundation for Quality Management", "created_at": "2015-04-24T02:17:54.703255", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff04fc2f7330408a9b773b91b8272c86", "identification_code": "409256516428-39", "legal_status": "PRIVATE FOUNDATION", "members_100": null, "head_office_lon": 4.4046716, "structure_members": "http://www.efqm.org/about-us/our-community/our-members", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-26T01:43:17.917951", "entity": "a8e3ccebeae64920945fdec5c3e833ff", "number_of_natural_persons": null, "legal": "72d60a38b9954adb9f237dbf2abc079d", "native_name": null, "head_office_country": "United States", "id": "fefa665da246486fa7b4d6f8fd7a3c5a", "activity_industry_forums": "None", "contact_country": 234, "head_office_postbox": null, "networking": "Intertanko, BIMCO", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Vienna", "info_members": "", "head": "2dcd8a7c3d234b9993a25c45420f6470", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "8619 Westwood Center Drive Suite 402 Suite 402", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "YCF Maritime promotes the EU shipping sector by offering EU flag solutions to shipowners which combine responsive and efficient customer service with in-depth technical expertise to ensure their vessels comply with EU and international regulatory requirements. \r\n\r\nYCF Maritime is a keen supporter of EU efforts to achieve a level global playing field for the European shipping industry. YCF Maritime is committed to the principle of a level-playing field within the EU, particularly regarding seafarer social security.\r\n\r\nKey organisations served by our group include EuroFlag Services, SeaNet Maritime Services, Liberian International Ship & Corporate Registry, EMA Manning Agency and EMTI.", "registration_date": "2015-04-17T10:16:37.333000", "activity_relevant_comm": "Concrete EU policy developments followed by YCF Maritime include the EU Review of Maritime Transport Strategy, Maritime Social Package, Recognized Organisations and Ship Emissions.", "head_office_post_code": "22182", "goals": "YCF Maritime is an international service provider with experience in a broad range of ocean shipping matters including vessel ownership, management and operations as well as seafarer training, the development of financial structures and regulatory administration and enforcement. Through its regional offices worldwide, YCF Maritime provides shipowners with comprehensive flag administration options on a global scale.", "members": 1, "last_update_date": "2016-03-24T16:27:57.827000", "members_fte": 0.25, "head_office_phone": "1703 2512406", "members_25": 1, "web_site_url": "http://www.ycfgroupllc.com/ycfmaritime.html", "sub_category": 21, "activity_other": null, "name": "YCF Maritime LLC", "created_at": "2015-04-24T02:21:04.322364", "uri": "http://api.lobbyfacts.eu/api/1/representative/fefa665da246486fa7b4d6f8fd7a3c5a", "identification_code": "128313216890-32", "legal_status": "Limited Liability Company", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-08T02:30:33.883110", "entity": "9a583b6ad41c49bcbb93db186b4408d3", "number_of_natural_persons": null, "legal": "2b89e910695c400a93951065b2a46a2a", "native_name": null, "head_office_country": "United Kingdom", "id": "feefe27755c74f6ca7df54e5d2b8b733", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "361ba97fdc614463bc751fb184bc7238", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "160 Queen Victoria Street ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Key financial markets EU initiatives impacting our clients and funds: \r\nEMIR (European Market Infrastructure Regulation), MiFIR (Markets in Financial Instruments Regulation), CRDIV (Capital Requirements Directive IV), \r\nCMU (Capital Markets Union), \r\nSFTR (The Securities Financing Transactions Regulation), \r\nMMFs (Money Market Fund Regulations), \r\nAIFMD (Alternative Investment Fund Managers Directive), \r\nUCITS (Undertakings for Collective Investments in Transferable Securities), and\r\nFTT (Financial Transaction Tax)", "registration_date": "2016-03-07T18:47:15.067000", "activity_relevant_comm": "None", "head_office_post_code": "EC4V 4LA", "goals": "Insight Investment is a leading global asset manager for institutional investors, particularly pension funds. Our investment management approach is focused on delivering solutions for our clients to provide greater certainty of financial outcome, and a large proportion of our assets is managed on behalf of pension funds in the form of liability risk management mandates, which positions us as one of the largest managers of European pension funds. We closely follow key financial market regulatory initiatives that would have an impact on our clients, and wish to positively engage in this process by providing a voice for European pension funds and other institutional clients.", "members": 1, "last_update_date": "2016-03-07T18:47:46.318000", "members_fte": 0.25, "head_office_phone": "44 207 163 0000", "members_25": 1, "web_site_url": "http://www.insightinvestment.com", "sub_category": 21, "activity_other": null, "name": "Insight Investment Management", "created_at": "2016-03-08T02:30:33.890643", "uri": "http://api.lobbyfacts.eu/api/1/representative/feefe27755c74f6ca7df54e5d2b8b733", "identification_code": "283171720947-78", "legal_status": "corporation", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 50.68241005, "updated_at": "2016-03-26T01:46:55.801398", "entity": "af42fc73d40e4bc4bef06e7482ee015d", "number_of_natural_persons": null, "legal": "a08398a128c243ac84d2f2bb92299987", "native_name": null, "head_office_country": "Germany", "id": "feed2f70644144b48b258eafe5efae0c", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": "The BfT is a corporate member of the German Association of the Chemical Industry (VCI) and of IFAH (International Federation for Animal Health), the global association of the animal health industry and the European Federation of Animal Health Industry (IFAH Europe).", "members_75": null, "main_category": 2, "members_50": 2, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": "Verbandsinterner Kodex", "head_office_town": "Bonn", "info_members": "National association which follows and contributes to relevant european development through involvement in the work of the european sector association.", "head": "a08398a128c243ac84d2f2bb92299987", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Schwertbergerstr., 14 ", "activity_inter_groups": "None", "acronym": "BfT", "activity_eu_legislative": "Review Veterinary Medicines Regulation\r\nReview Medicated Feed Directive\r\nAnimal Health Regulation\r\n[ VERORDNUNG zur \u00c4nderung der Verordnung (EG) Nr. 726/2004 (Bundesrats-Drucksache 418/14) und den weiteren zugeh\u00f6rigen Vorschl\u00e4gen VERORDNUNG des Europ\u00e4ischen Parlamentes und des Rates \u00fcber die Herstellung, das Inverkehrbringen und die Verwendung von Arzneifuttermitteln sowie zur Aufhebung der Richtlinie 90/167/EWG des Rates (Bundesrats-Drucksache 417/14) und Vorschlag f\u00fcr eine VERORDNUNG des Europ\u00e4ischen Parlaments und des Rates \u00fcber Tierarzneimittel (Bundesrats-Drucksache 420/14) ].", "registration_date": "2014-08-14T18:07:37.568000", "activity_relevant_comm": "Quarterly newsletter Tiergesundheit im Blickpunkt", "head_office_post_code": "53177", "goals": "BfT represents the leading manufacturers of veterinary medicines in Germany.The BfT is a corporate member of the German Association of the Chemical Industry (VCI) and of IFAH (International Federation for Animal Health), the global association of the animal health industry and the European Federation of Animal Health Industry (IFAH Europe). Activities include representing members' interests with legislators, government agencies and professional organizations, supporting high standards of animal health and in the entire food production, sharing information with member companies about relevant latest developments, and informing the public about animal health issues and products.", "members": 3, "last_update_date": "2016-03-23T15:04:20.288000", "members_fte": 1.25, "head_office_phone": "49228 318296", "members_25": 1, "web_site_url": "http://www.bft-online.de", "sub_category": 25, "activity_other": null, "name": "Bundesverband fuer Tiergesundheit", "created_at": "2015-04-24T02:23:50.056410", "uri": "http://api.lobbyfacts.eu/api/1/representative/feed2f70644144b48b258eafe5efae0c", "identification_code": "369699114231-49", "legal_status": "e.V. (Eingetragener Verein)", "members_100": null, "head_office_lon": 7.15161428929912, "structure_members": "http://www.bft-online.de/mitglieder/", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-17T02:10:27.679053", "entity": "f67d92acd4d54ce192d076051a8ceed4", "number_of_natural_persons": null, "legal": "57e1b8f4c48d4974afcbf9d5727c3732", "native_name": null, "head_office_country": "Denmark", "id": "feec5f95637641aa83f9fa5076cd259d", "activity_industry_forums": "None", "contact_country": 59, "head_office_postbox": null, "networking": "Member of the EURELECTRIC (delegated through the Danish Energy Association)", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Frederiksberg", "info_members": "", "head": "57e1b8f4c48d4974afcbf9d5727c3732", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Vodroffsvej 59, Frederiksberg C ", "activity_inter_groups": "None", "acronym": "DEA", "activity_eu_legislative": "The Alternative Fuels Infrastructure Directive\r\nCO2 Emisssions from Passenger Cars\r\nClean Power for Transport Initiative\r\nWLTP\r\nJuncker Investment Plan", "registration_date": "2014-11-04T08:35:59.078000", "activity_relevant_comm": "None", "head_office_post_code": "DK-1900", "goals": "The Danish Electric Vehicle Alliance works to promote a better political environment for mass roll out of Electric Vehicles, namely battery powered cars and plug in hybrid electric cars, both in Denmark and the EU.\r\n\r\nWe work through providing political incentives for first movers, promoting infrastructure for EV's and educating the public of the possibilities provided by the new electric technology.\r\n\r\nWe are (as of March 2016) four people in an legally autonomous organisation, physically situated within the Danish Energy Association. We represent 47 member companies, Danish and foreign, along every link of the EV value chain.", "members": 1, "last_update_date": "2016-03-10T11:11:03.952000", "members_fte": 0.25, "head_office_phone": "0045 35300491", "members_25": 1, "web_site_url": "http://www.danskelbilalliance.dk", "sub_category": 25, "activity_other": null, "name": "Danish Electric Vehicle Alliance", "created_at": "2015-04-24T02:30:39.870639", "uri": "http://api.lobbyfacts.eu/api/1/representative/feec5f95637641aa83f9fa5076cd259d", "identification_code": "583653114856-56", "legal_status": "Dansk Elbil Alliance", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-07-29T23:29:35.253216", "entity": "403f6e713ed24f529b2e77e909a8e56f", "number_of_natural_persons": 13, "legal": "15ce760f485642eaa70fe3e1e639c017", "native_name": null, "head_office_country": "Italy", "id": "fee73f7916f94c36b2f90c4e1b294a51", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "UNFCCC\r\nGEF\r\nECOSOC of United Nations\r\nUNODC", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "casoria", "info_members": "", "head": "15ce760f485642eaa70fe3e1e639c017", "status": "inactive", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Via E. Fermi, 18 ", "activity_inter_groups": "None", "acronym": "APK", "activity_eu_legislative": "Attivita nel settore dell'ambiente a livello comunitario", "registration_date": "2012-09-29T23:51:11.196000", "activity_relevant_comm": "None", "head_office_post_code": "80026", "goals": "Protection of the environment", "members": 2, "last_update_date": "2015-02-05T18:27:53.562000", "members_fte": 2.0, "head_office_phone": "377 9430541", "members_25": null, "web_site_url": null, "sub_category": 31, "activity_other": "Attivita'di divugazione delle politiche comunitarie nel campo dell'ambiente", "name": "Amigos do Protocolo de Kyoto", "created_at": "2015-04-24T02:08:08.971885", "uri": "http://api.lobbyfacts.eu/api/1/representative/fee73f7916f94c36b2f90c4e1b294a51", "identification_code": "82132839724-37", "legal_status": "ONLUS", "members_100": 2, "head_office_lon": null, "structure_members": "APK Italy(4),\r\nAPK Poland(3),\r\nAPK Hungary(2),\r\nAPK Brazil(4)", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-05-25T01:22:39.194553", "entity": "2188e813114a4dd6ad7e3e6e101a2b76", "number_of_natural_persons": null, "legal": "2d44c0cba0794197ac8315978742b9b5", "native_name": null, "head_office_country": "Netherlands", "id": "fedf6bda46184c118b81b1950746a169", "activity_industry_forums": "None", "contact_country": 155, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Bruinehaar", "info_members": "Taak bovenop reguliere werkzaamheden.", "head": "2d44c0cba0794197ac8315978742b9b5", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Driehoeksweg 9 ", "activity_inter_groups": "None", "acronym": "Pl. EDV", "activity_eu_legislative": "N2000 dossier en Vogel- en habitatrichtlijn.", "registration_date": "2015-05-20T21:53:23.653000", "activity_relevant_comm": "Zienswijzen insturen, inspraakprocedure`s benutten,\r\npolitici en pers informeren, contacten onderhouden en informatie uitwisselen met relevante organisatie`s.", "head_office_post_code": "7675 TA", "goals": "Het Platform Engbertsdijksvenen (EDV) behartigd de belangen van haar leden die grenzen aan het N2000 gebied het Engbertsdijksvenen.", "members": 4, "last_update_date": "2015-05-20T22:07:08.277000", "members_fte": 1.0, "head_office_phone": "31 620366362", "members_25": 4, "web_site_url": null, "sub_category": 21, "activity_other": null, "name": "Platform Engbertsdijksvenen", "created_at": "2015-05-24T21:45:42.617388", "uri": "http://api.lobbyfacts.eu/api/1/representative/fedf6bda46184c118b81b1950746a169", "identification_code": "020890017437-27", "legal_status": "geen", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-08-18T02:05:44.790468", "entity": "9e06d7fb83cb44588093ab4606de4b74", "number_of_natural_persons": null, "legal": "02b132016c10414581d14ba40423cb57", "native_name": null, "head_office_country": "Poland", "id": "fed7ebf4abe64ddaa22834b1e4776fd7", "activity_industry_forums": "None", "contact_country": 176, "head_office_postbox": null, "networking": "European Rail Freight Association http://www.erfarail.eu/home.asp", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "IGTL jest cz\u0142onkiem European Rail Freight Association, kt\u00f3re jest podmiotem wsp\u00f3\u0142pracuj\u0105cym z KE", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Warszawa", "info_members": "", "head": "02b132016c10414581d14ba40423cb57", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Aleje Jerozolimskie 125/127 ", "activity_inter_groups": "None", "acronym": "IGTL", "activity_eu_legislative": "polityka transportowa, polityka sp\u00f3jno\u015bci, czwarty pakiet kolejowy, TSI, interoperacyjno\u015b\u0107, jednolity europejski obszar kolejowy, sie\u0107 TEN-T, rozporz\u0105dzenie 913/2010 RFC, CEF, RID, CIM,", "registration_date": "2016-08-17T13:23:06.070000", "activity_relevant_comm": "IGTL wsp\u00f3\u0142pracuje z administracj\u0105 publiczn\u0105 (ministerstwa, Urz\u0105d Transportu Kolejowego, Transportowy Doz\u00f3r Techniczny), reprezentuj\u0105c stanowisko bran\u017cy w szeregu dyskusji na temat regulacji dotycz\u0105cych transportu kolejowego - jest podmiotem bior\u0105cym udzia\u0142 w konsultacjach publicznych w procesie legislacyjnym (ustawy, rozporz\u0105dzenia) oraz dokument\u00f3w i program\u00f3w rz\u0105dowych. IGTL wsp\u00f3\u0142pracuje z narodowym zarz\u0105dc\u0105 infrastruktury, m.in. poprzez udzia\u0142 w Forum Inwestycyjnym (Prezes Izby jest cz\u0142onkiem Prezydium Forum). Izba prowadzi dzia\u0142alno\u015b\u0107 szkoleniow\u0105 dla cz\u0142onk\u00f3w (seminaria, konferencje), obejmuje patronatem najwa\u017cniejsze wydarzenia kolejowe w Polsce i udziela merytorycznego wsparcia poprzez publikacj\u0119 stanowisk i udzia\u0142 przedstawicieli Izby jako prelegent\u00f3w, panelist\u00f3w, itd. Izba prowadzi r\u00f3wnie\u017c dzia\u0142alno\u015bci wydawnicz\u0105 oraz wsp\u00f3\u0142pracuje z bran\u017cowymi wydawcami i pras\u0105, dostarczaj\u0105c stanowisk merytorycznych do publikacji. Izba wsp\u00f3\u0142pracuje z innymi organizacjami bran\u017cowymi w zakresie opisanym powy\u017cej.", "head_office_post_code": "02-017", "goals": "Izba Gospodarcza Transportu L\u0105dowego (Land Transport Chamber of Commerce) jest organizacj\u0105 samorz\u0105du gospodarczego dzia\u0142aj\u0105c\u0105 od 1995r. na mocy Ustawy z 30 maja 1989r. o izbach gospodarczych. Izba pe\u0142ni rol\u0119 reprezentanta firm zwi\u0105zanych z transportem kolejowym wobec administracji pa\u0144stwowej oraz r\u00f3\u017cnego rodzaju organizacji krajowych i zagranicznych maj\u0105cych wp\u0142yw na dzia\u0142alno\u015b\u0107 tych przedsi\u0119biorstw. \r\nIzba skupia kilkadziesi\u0105t przedsi\u0119biorstw z ca\u0142ego kraju zwi\u0105zanych z bran\u017c\u0105 kolejow\u0105. Celem Izby jest przede wszystkim ochrona interes\u00f3w firm oraz wyst\u0119powanie do organ\u00f3w administracji pa\u0144stwowej i samorz\u0105dowej z wnioskami i opiniami w zakresie regulacji dotycz\u0105cych szeroko rozumianego transportu kolejowego.\r\nIGTL u\u0142atwia swoim cz\u0142onkom dost\u0119p do wiedzy o aktualnych procesach gospodarczych, szczeg\u00f3lnie tych dotycz\u0105cych transportu i infrastruktury kolejowej. Wsp\u00f3\u0142praca z Izb\u0105 daje cz\u0142onkom mo\u017cliwo\u015b\u0107 bezpo\u015bredniego wp\u0142ywu na kszta\u0142towanie warunk\u00f3w dzia\u0142alno\u015bci i rozwoju transportu kolejowego, a tak\u017ce integruje bran\u017c\u0119 kolejow\u0105.\r\nW IGTL funkcjonuj\u0105 trzy sekcje bran\u017cowe: Przewo\u017anik\u00f3w Kolejowych, Wagon\u00f3w i Spedycji, Budownictwa Kolejowego \r\nCz\u0142onkiem Izby mo\u017ce zosta\u0107 podmiot gospodarczy prowadz\u0105cy dzia\u0142alno\u015b\u0107 gospodarcz\u0105 zgodnie z zasadami etyki zawodowej, z wy\u0142\u0105czeniem os\u00f3b fizycznych prowadz\u0105cych tak\u0105 dzia\u0142alno\u015b\u0107 jako zaj\u0119cie uboczne.", "members": 8, "last_update_date": "2016-08-17T13:23:42.060000", "members_fte": 2.75, "head_office_phone": "48 6540942", "members_25": 7, "web_site_url": "http://www.igtl.pl", "sub_category": 25, "activity_other": null, "name": "Izba Gospodarcza Transportu L\u0105dowego", "created_at": "2016-08-18T02:05:44.797758", "uri": "http://api.lobbyfacts.eu/api/1/representative/fed7ebf4abe64ddaa22834b1e4776fd7", "identification_code": "501998723038-69", "legal_status": "izba gospodarcza", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-12-01T02:42:19.420436", "entity": "7abf0809a837474485cfcc035b933d5b", "number_of_natural_persons": null, "legal": "5eb772ccd2e04cde9ae9ba82a2b4f16f", "native_name": null, "head_office_country": "Italy", "id": "fed17c17924045649b1e30abb8afd3f3", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "U.C.E.E. Unione Camere Esperti Europei\r\nwww.ucee.be\r\n\r\nNAFOP National Association Fee Only Planner\r\nwww.nafop.org\r\n\r\nLAPET - Associazione Nazionale Tributaristi\r\nwww.iltributaristalapet.it", "members_75": 1, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": null, "head_office_town": "Laurenzana", "info_members": "Dott. Giuseppe Lettini", "head": "5eb772ccd2e04cde9ae9ba82a2b4f16f", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "III\u00b0 Vico Vittorio Emanuele 4 ", "activity_inter_groups": "None", "acronym": "Studio Lettini", "activity_eu_legislative": "FINANZIAMENTI EUROPEI\r\nFINANZIAMENTI NAZIONALI\r\nFINANZIAMENTI REGIONALI\r\nINTERNAZIONALIZZAZIONE\r\nSTART UP IMPRESE\r\n\r\nLe attivit\u00e0 che lo studio segue riguardano principalmente il supporto ai clienti nella presentazione di domande di finanziamento per i programmi Horizon 2020, Cosme, Creative Europe.\r\nLa normativa finanziamenti agevolati a favore di piccole medie e grandi imprese coinvolge tutti i settori, da quello industriale a quello turistico, commercio, servizi, agricoltura.\r\n\r\nL\u2019obiettivo \u00e8 lo sviluppo dell\u2019imprenditorialit\u00e0 come avvio d\u2019impresa e/o sviluppo d\u2019impresa", "registration_date": "2015-11-25T13:36:23.400000", "activity_relevant_comm": "Europrogetti e comunicazioni inerenti i bandi", "head_office_post_code": "85014", "goals": "Lo Studio Lettini, offre un servizio di consulenza altamente specializzato nel mondo della finanza pubblica e del controllo di gestione individuando le migliori soluzioni per le innumerevoli necessit\u00e0 finanziarie di ogni tipo di imprese, ente, ecc. Lo studio di consulenza permette e offre soluzioni ed assistenza all\u2019imprenditore o di chi ha un\u2019idea imprenditoriale, attraverso una attenta analisi delle esigenze aziendali, l\u2019individuazione del tipo di finanziamento ottimale, la definizione delle opportune soluzioni organizzative, la creazione del sistema di controllo interno, la compilazione del relativo dossier per una istruttoria in linea con i requisiti legislativi richiesti, \u00e8 sufficiente programmare un qualsiasi intervento aziendale perch\u00e8 l\u2019intervento di Studio Lettini possa far emergere sostanziali utilit\u00e0 per l\u2019impresa.", "members": 1, "last_update_date": "2015-11-30T17:01:26.337000", "members_fte": 0.75, "head_office_phone": "39 3899873276", "members_25": null, "web_site_url": "http://www.studiolettini.it", "sub_category": 13, "activity_other": "Consulenza in europrogettazione finalizzata al successo nella partecipazione ai bandi europei nella nuova programmazione 2014-2020.", "name": "Lettini Giuseppe", "created_at": "2015-12-01T02:42:19.427576", "uri": "http://api.lobbyfacts.eu/api/1/representative/fed17c17924045649b1e30abb8afd3f3", "identification_code": "731027919621-04", "legal_status": "Consulente autonomo", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-07-29T01:38:12.539457", "entity": "a402743e5808426db003a7f1948dbe99", "number_of_natural_persons": null, "legal": "1301c3d6c89347b1ab9fc84c383e847e", "native_name": null, "head_office_country": "Netherlands", "id": "fecde2aeabb843f4a8a55a4b3b92de50", "activity_industry_forums": "None", "contact_country": 155, "head_office_postbox": null, "networking": "cumula", "members_75": null, "main_category": 2, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Appingedam", "info_members": "", "head": "1301c3d6c89347b1ab9fc84c383e847e", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "1ste Industrieweg 16 ", "activity_inter_groups": "None", "acronym": "HW", "activity_eu_legislative": "Klimaat onderwerken, paludicultuur, natuurbeheer", "registration_date": "2015-07-27T17:07:14.809000", "activity_relevant_comm": "None", "head_office_post_code": "9902 AM", "goals": "Wij zijn een bedrijf met als core business the oogst van biomassa en een machinefabriek en we gaan richting een bedrijf in de biobased economie. In die zin bestaan we uit een bedrijf dat een loonbedrijf heeft in de natte gebieden, een machine fabriek en een consultancy.", "members": 3, "last_update_date": "2015-07-27T17:35:38.170000", "members_fte": 1.75, "head_office_phone": "316 36109878", "members_25": 1, "web_site_url": "http://hanzewetlands.com", "sub_category": 21, "activity_other": null, "name": "Hanze Wetlands", "created_at": "2015-07-28T01:16:50.660106", "uri": "http://api.lobbyfacts.eu/api/1/representative/fecde2aeabb843f4a8a55a4b3b92de50", "identification_code": "200438718349-72", "legal_status": "BV", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 50.8248068, "updated_at": "2016-03-26T01:19:06.631263", "entity": "e0bb8dab8e9e4bec9a05f9c6a9244b53", "number_of_natural_persons": 0, "legal": "3eba6f061ca649d0a4046654ee392dfe", "native_name": null, "head_office_country": "Belgium", "id": "fec76a9f6e224986b3edb9b89e8afad3", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": "WFTO-Europe is one of the five regional branches of the World Fair Trade Organization global network, the other four being: WFTO-Africa/COFTA (the Cooperation for Fair Trade in Africa), WFTO-Asia (World Fair Trade Organization - Asia), WFTO-LA (World Fair Trade Organization \u2013 Latin America) and WFTO Pacific Rim. Together, the five WFTO regional networks come together as regional chapters to represent over 450 members within 75 countries worldwide, that are committed 100% to Fair Trade and its principles.\r\n\r\nFor a detailed view on the WFTO global network, its members and structure, please visit WFTO global website at: http://www.wfto.com/ \r\n\r\nAt European level, WFTO-Europe is a member organization of the Fair Trade Advocacy Office (FTAO) in Brussels. The FTAO is a joint initiative of World Fair Trade Organization \u2013 Europe (WFTO-Europe), Fairtrade International (FLO) and the European Fair Trade Association (EFTA). Through these three networks the FTAO represents an estimate of 2.5 million Fair Trade producers and workers from 70 countries, 24 labelling initiatives, over 500 specialised Fair Trade importers, 4.000 World Shops and more than 100.000 volunteers. The Fair Trade Advocacy Office speaks out for Fair Trade and trade justice with the aim to improve the livelihoods of marginalised producers and workers, especially in the South. \r\n\r\nFor a detailed view on the FTAO\u2019s activities, please visit its website at: http://www.fairtrade-advocacy.org/\r\n\r\nWFTO-Europe is a member of the European inter-network of ethical and responsible initiatives (IRIS, www.irisnetwork.eu), a network create by European networks and organisations, aimed at promoting synergies between them, in order to implement solidarity economy initiatives and to fight against poverty and social exclusion, through a sustainable development and responsible economic approach. IRIS represents different families of responsible economic initiatives: responsible finance (FEBEA, INAISE), Fair Trade (WFTO-Europe), responsible consumption (ASECO), local partnerships between farmers and consumers (URGENCI) and Social Integration Enterprises (ENSIE), with the participation and support of institutional partners (Council of Europe and the Trento Autonomous Province, Italy).\r\n\r\nWFTO-Europe is also a member of the \"Federation of European & International associations based in Belgium\" (FAIB).", "members_75": null, "main_category": 3, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Bruxelles", "info_members": "", "head": "3eba6f061ca649d0a4046654ee392dfe", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Rue Washington, 40 ", "activity_inter_groups": "None", "acronym": "WFTO-Europe", "activity_eu_legislative": "WFTO-Europe has been following the EU directive on public procurement as well as the main communication and initiatives related to Fair Trade via the Fair Trade Advocacy Office (FTAO).", "registration_date": "2012-12-18T15:24:10.203000", "activity_relevant_comm": "WFTO-Europe is currently involved in one project at European level: \"Food Smart Cities for Development\".", "head_office_post_code": "1050", "goals": "WFTO-Europe, formerly known as IFAT Europe (International Federation for Alternative Trade), represents the European branch of the World Fair Trade Organization (WFTO). It is currently formed by 74 members from 15 countries, amongst them Fair Trade Organizations, Fair Trade Networks and Support Organizations.\r\n\r\nWFTO-Europe stands by WFTO global network\u2019s vision and mission.\r\n\r\nWFTO\u2019s vision: a world in which trade structures and practices have been transformed to work in favour of the poor and promote sustainable development and justice.\r\n \r\nWFTO\u2019s mission: to enable producers to improve their livelihoods and communities through Fair Trade. WFTO will advocate for Fair Trade, ensuring producer voices are heard. The interests of producers, especially small farmers and artisans, should be the main focus in all the policies, governance, structures and decision-making within the World Fair Trade Organization.\r\n\r\nIn its status of regional branch, WFTO-Europe has four strategic aims: \r\n\r\n1.\tSupport the growth and consolidation of WFTO global network.\r\n2.\tBe the reference for Fair Trade in Europe, its representative organ and its voice.\r\n3.\tProtect the noble values of Fair Trade and the 100% commitment to it.\r\n4.\tSupport Fair Trade policies and support the legality of the office.\r\n\r\nIn this respect, one of the most important initiatives of WFTO-Europe is that of facilitating a framework for producer assistance and product development, by:\r\n\r\n- Supporting the monitoring process and WFTO system;\r\n- Serving as a facilitator between members who want to work on producer assistance and product development in a structured and articulated way. Also by facilitating bilateral and multilateral work between them;\r\n- Facilitating and bridging other initiatives and actors working on these key issues (WFTO global and other regional offices, Fair Trade Organizations, other civil society organisations) and informing southern Fair Trade partners on market tendencies in a structured and articulated way. \r\n\r\n\r\nWFTO global network\u2019s aims at large, to which WFTO-Europe shall contribute from a regional level, are to improve the livelihoods of marginalized producers and workers, especially in the South. To change unfair structures of international trade, mainly by means of Fair Trade, to improve and co-ordinate the co-operation of its member organizations and to promote the interests of and provide services to its member organizations and individuals (Source: The Constitution of the World Fair Trade Organization)", "members": 2, "last_update_date": "2016-03-23T17:16:01.371000", "members_fte": 1.5, "head_office_phone": "32 2 640 63 86", "members_25": null, "web_site_url": "http://www.wfto-europe.org", "sub_category": 31, "activity_other": "Project with local authorities", "name": "World Fair Trade Organization - Europe", "created_at": "2015-04-24T01:57:44.867858", "uri": "http://api.lobbyfacts.eu/api/1/representative/fec76a9f6e224986b3edb9b89e8afad3", "identification_code": "725848610338-68", "legal_status": "ASBL - Association Sans But Lucratif (Non-profit association)", "members_100": 1, "head_office_lon": 4.36371042912679, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-10-30T01:56:56.246954", "entity": "7b46510f154947128c02d05bd79a3358", "number_of_natural_persons": null, "legal": "a42346118a234821a8de93818be55c95", "native_name": null, "head_office_country": "Switzerland", "id": "fec607c127414c259cbf2f7f86eb041c", "activity_industry_forums": "None", "contact_country": 215, "head_office_postbox": "CP246", "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "geneve", "info_members": "", "head": "4d7fa8f59ace457388b82ac625f9ef2d", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "maison de la paix, WBCSD chemin Eug\u00e8ne Rigot 2 chemin Eug\u00e8ne Rigot 2", "activity_inter_groups": "None", "acronym": "WBCSD", "activity_eu_legislative": "- Climate Change Strategy\r\n- CSR Strategy\r\n- Biodiversity Strategy\r\n- Sustainability Strategy\r\n- Water and Food and Forest Strategy\r\n- Sustainable City Strategy\r\n- Mobility Strategy", "registration_date": "2015-10-22T14:38:03.288000", "activity_relevant_comm": "WBCSD is directly involved with the EU Commission on above topics via direct meetings and workshops. \r\nIndirectly the organisation is represented by associated organisations such as Econsense or IETA.\r\nIndirectly the organisation is also represented by its about 200 member companies.", "head_office_post_code": "1211", "goals": "The World Business Council for Sustainable Development (WBCSD) is a CEO-led organization of forward-thinking companies that galvanizes the global business community to create a sustainable future for business, society and the environment. Through its members, the Council applies its respected thought leadership and effective advocacy to generate constructive solutions and take shared action to drive business action on sustainability in the coming decade and beyond. The WBCSD aims to be the leading voice of business that will support companies in scaling up true value-added business solutions and in creating the conditions where more sustainable companies will succeed and be recognized. \r\n\r\nMembers work together across sectors, geographies and value chains to explore, develop and scale up business solutions to address the world\u2019s most pressing sustainability challenges. Through our work to change the rules of the game and drive measurable impact, WBCSD is emerging as the leading and most compelling sustainable development business voice with multilateral institutions such as the United Nations, World Bank, UNFCCC, as well as with global platforms like the UN Climate Summit and COP negotiations. \r\n\r\nThe WBCSD is unique because its output is developed and road tested by its members. Its comprehensive work program enables it to cover all aspects of sustainable development in business. To deal effectively with all issues the work program is divided into six Action2020 Clusters , sector and value chain projects, systems solutions and capacity building.\r\n\r\nWe also benefit from a Global Network of 65+ independent national and regional business councils and partner organizations, involving thousands of business leaders, two-thirds in developing countries and emerging economies.", "members": 1, "last_update_date": "2015-10-29T16:41:14.433000", "members_fte": 0.25, "head_office_phone": "41 228393100", "members_25": 1, "web_site_url": "http://www.wbcsd.org/home.aspx", "sub_category": 25, "activity_other": "WBCSD as a non-profit organisation represents the business voice of it's members based on solid scientific evidence to enhance and facilitate the understanding and direction setting between companies and policy making towards a sustainable society. It is important for policy makers to fully understand the actual potential of advanced business solutions as these are crucial for the successful implementation of policies and strategies mentioned above.", "name": "World Business Council For Sustainable Development", "created_at": "2015-10-23T00:55:45.123574", "uri": "http://api.lobbyfacts.eu/api/1/representative/fec607c127414c259cbf2f7f86eb041c", "identification_code": "074000219282-17", "legal_status": "association", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-05T02:28:51.723088", "entity": "7252c50b894d41e9bf6079782137f31f", "number_of_natural_persons": null, "legal": "7cf0eca1988e48ee9021a79332f3f7f9", "native_name": null, "head_office_country": "Belgium", "id": "fec5815bf76348d69521bc170db3d77c", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": "Ei ole.", "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": null, "head_office_town": "Bruxelles", "info_members": "", "head": "7cf0eca1988e48ee9021a79332f3f7f9", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Chauss\u00e9e de Charleroi 143, box 3 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "S\u00e4hk\u00f6isen viestinn\u00e4n s\u00e4\u00e4ntely, digitaaliset sis\u00e4markkinat.", "registration_date": "2016-03-04T14:27:41.702000", "activity_relevant_comm": "J\u00e4rjest\u00e4mme tapaamisia ja harjoitamme tiedonvaihtoa EU-vaikuttajien ja s\u00e4hk\u00f6isen viestinn\u00e4n alan yrityksen kesken.", "head_office_post_code": "B-1060", "goals": "Petri Lahesmaa Consulting on EU-vaikuttajaviestint\u00e4\u00e4n erikoistunut yritys. Toimialaamme on EU-vaikuttaminen, s\u00e4hk\u00f6isen viestinn\u00e4n s\u00e4\u00e4ntelyasiat ja EU-journalismi. Petri Lahesmaalla on yli 16 vuoden kokemus EU-vaikuttamisesta sek\u00e4 Brysseliss\u00e4 ett\u00e4 Suomessa.", "members": 1, "last_update_date": "2016-03-04T14:35:08.052000", "members_fte": 0.25, "head_office_phone": "32 0476909496", "members_25": 1, "web_site_url": null, "sub_category": 11, "activity_other": null, "name": "Petri Lahesmaa Consulting", "created_at": "2016-03-05T02:28:51.726617", "uri": "http://api.lobbyfacts.eu/api/1/representative/fec5815bf76348d69521bc170db3d77c", "identification_code": "344894120925-87", "legal_status": "Une entreprise personne physique", "members_100": null, "head_office_lon": null, "structure_members": "Ei ole.", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "be_office_lat": 50.84178695, "updated_at": "2016-03-09T00:56:50.059467", "entity": "44f5ad8112524b51a08db529e8753272", "number_of_natural_persons": null, "legal": "f4a66136f5634ec68be50672e3f2dfa4", "native_name": null, "head_office_country": "Denmark", "id": "feac8ce68d3142848d501f1bf11bf46a", "activity_industry_forums": "None", "contact_country": 59, "head_office_postbox": null, "networking": "European Energy Forum http://www.europeanenergyforum.eu/\r\nEurelectric http://www.eurelectric.org/\r\n\r\nThe Danish Energy Association also participates in a number of informal networks in Brussels.", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Frederiksberg C", "info_members": "", "head": "5bde983ce5cd4a8ea7d87b79ece7bbc0", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Rosen\u00f8rns All\u00e9, 9 ", "be_office_post_code": "1040", "activity_inter_groups": "None", "acronym": "DEA", "activity_eu_legislative": "Energy Union \r\n2030 governance\r\nETS reform\r\nRetail Energy Market: Action Plan\r\nCapacity Mechanisms", "registration_date": "2008-09-10T13:21:30.828000", "activity_relevant_comm": "None", "head_office_post_code": "1970", "goals": "The Danish Energy Association (Dansk Energi) is a commercial and professional organisation for Danish energy companies. It is managed and financed by its member companies, mainly the electricity companies, and works to secure for them the most free and favourable conditions for competition in order to ensure development, growth and business friendly environment in Denmark.\r\n\r\nThe Danish Energy Association represents the interests of its member companies and thus conducts regular contacts with government, authorities etc. nationally and within the EU.", "members": 2, "last_update_date": "2016-03-08T09:35:15.467000", "members_fte": 2.0, "head_office_phone": "45 35300400", "be_office_town": "Bruxelles", "members_25": null, "web_site_url": "http://www.danskenergi.dk", "sub_category": 25, "activity_other": "Energy, climate, transport and environmental policy.", "be_office_postbox": null, "name": "Danish Energy Association / Dansk Energi", "be_office_street": "Rue de la Loi 227 ", "created_at": "2015-04-24T01:47:43.770790", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/feac8ce68d3142848d501f1bf11bf46a", "identification_code": "1733114388-50", "legal_status": "Association", "members_100": 2, "be_office_phone": "32 491 25 30 23", "be_office_lon": 4.38526824209953, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative"}, {"activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-07-01T01:37:23.590560", "entity": "3ed6121ae7b54e19bcc1ce7371a0c218", "number_of_natural_persons": null, "legal": "9780c60b13234d82b65e1b32c10bbc08", "native_name": null, "head_office_country": "United Kingdom", "id": "fea393c1edda4541847f16497b8d35a8", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": "ENA is a member of EURELECTRIC, GEODE and Eurogas.", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "f5f91b124a08449ebefe428af0978bcf", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "6th Floor Dean Bradley House Dean Bradley House", "activity_inter_groups": "None", "acronym": "ENA", "activity_eu_legislative": "Single Energy Market and Future Market Design\r\nDSO/TSO Interface\r\nFlexibility services\r\nNetwork Tariffs\r\nInnovation\r\nFuture role for Gas\r\n2030 climate and energy framework\r\nRenewable Sources of Energy\r\nEnergy Efficiency\r\nLow carbon transport", "registration_date": "2015-07-22T15:58:48.209000", "activity_relevant_comm": "None", "head_office_post_code": "SW1P 2AF", "goals": "Energy Networks Association (ENA) is the voice of the networks, representing the electricity and gas transmission and distribution network operators in the UK and Ireland. Our members are diverse, from major international companies to independent network operators. \r\nENA is actively engaged with government, regulators and the EU Commission as well as producing a wide range of industry standards. The impact of regulation, the influence of European legislation, the challenge of new technologies and the importance of securing our energy future, all against the background of national low carbon targets, are just some issues ENA deals with.", "members": 1, "last_update_date": "2016-06-30T15:09:08.535000", "members_fte": 1.0, "head_office_phone": "44 02077065131", "members_25": null, "web_site_url": "http://www.energynetworks.org", "sub_category": 25, "activity_other": null, "name": "Energy Networks Association", "created_at": "2015-07-23T01:03:14.242168", "uri": "http://api.lobbyfacts.eu/api/1/representative/fea393c1edda4541847f16497b8d35a8", "identification_code": "247299118284-24", "legal_status": "Private Limited Company", "members_100": 1, "head_office_lon": null, "structure_members": "http://www.energynetworks.org/", "code_of_conduct": "European Commission's code of conduct for interest representative"}], "next": "http://api.lobbyfacts.eu/api/1/representative?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false} \ No newline at end of file +{ + "count": 12129, + "facets": {}, + "results": [ + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-04-21T00:36:51.167919Z", + "entity": "f68eebed3ca14d66aeb9be6e5680cdcd", + "number_of_natural_persons": null, + "legal": "8e8b73cc70d241e5bb32c8907cd042ba", + "native_name": null, + "head_office_country": "Denmark", + "id": "fffebd3272294bb0a38d0347b0e0c4df", + "activity_industry_forums": "None", + "contact_country": 59, + "head_office_postbox": null, + "networking": "The European Federation of Building and Woodworkers (EFBWW) is the European Industry Federation for the construction industry, the building materials industry, the wood and furniture industry and the forestry industry. The EFBWW has 76 affiliated unions in 34 countries and represents a total of 2,000,000 members, see\r\nhttp://www.efbww.org/default.asp?Language=EN", + "members_75": null, + "main_category": 2, + "members_50": 4, + "activity_expert_groups": "None", + "sub_category_title": "Trade unions and professional associations", + "other_code_of_conduct": null, + "head_office_town": "K\u00f8benhavn V", + "info_members": "", + "head": "8e8b73cc70d241e5bb32c8907cd042ba", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Kampmannsgade 4, 70300300 ", + "activity_inter_groups": "None", + "acronym": "BAT", + "activity_eu_legislative": "Policies in the fields of the construction industry, employment and labour market, posting of workers, migrant workers, energy savings, works councils, occupational health and safety", + "registration_date": "2012-09-19T14:07:17.947000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "1790", + "goals": "BAT coordinates and represents the member organisations' (3F, Blik & R\u00f8rarbejderforbundet, El-forbundet, HK/Privat, Malerforbundet, Dansk Metal og Teknisk Landsforbund) interests on working environment, co-determination, AS, Works Councils and EWC, industrial policy, housing policy and labour market polity , international work, posted workers, foreign companies and Greenland.", + "members": 4, + "last_update_date": "2016-04-12T08:34:24.029000Z", + "members_fte": 2.0, + "head_office_phone": "45 70300300", + "members_25": null, + "web_site_url": "http://www.batkartellet.dk", + "sub_category": 26, + "activity_other": "BAT coordinates the member organisations' interest on an european level through compilation and dialogue with the decision-makers. Further, BAT is the proponent for the Danish collective agreement model.", + "name": "Bygge-, Anl\u00e6gs- og Tr\u00e6kartellet", + "created_at": "2015-04-24T02:06:02.588289Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fffebd3272294bb0a38d0347b0e0c4df", + "identification_code": "18539199654-93", + "legal_status": "Faglig organisation (association; trade union federation)", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 45.5893459, + "updated_at": "2016-02-17T01:42:44.613826Z", + "entity": "c476460f5e8243a8b16b75ae1cfafa41", + "number_of_natural_persons": 390, + "legal": "e9918b3c28ed4f1197e97c17a59e4703", + "native_name": null, + "head_office_country": "Italy", + "id": "ffdb86d0032b4bdf8682ff4cc908bf48", + "activity_industry_forums": "None", + "contact_country": 108, + "head_office_postbox": null, + "networking": "* wikimedia.org\r\n* https://meta.wikimedia.org/wiki/Wikimedia_chapters\r\n* https://meta.wikimedia.org/wiki/EU_policy\r\n* frontieredigitali.it\r\n* beniculturaliaperti.it", + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Monza (MB)", + "info_members": "Only volunteer work, mostly by members Federico Leva and Lorenzo Losa.\r\n\r\nWe also contribute a small share of the costs for the Free Knowledge Advocacy Group EU representative in Brussels.", + "head": "e9918b3c28ed4f1197e97c17a59e4703", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "via Bergamo, 18 ", + "activity_inter_groups": "None", + "acronym": "WMI", + "activity_eu_legislative": "Net neutrality, InfoSoc directive; anything related to public domain, copyright, free knowledge, free/libre open source software, open data, cultural heritage, digital divide, wikis, collaboration and sharing on the internet.", + "registration_date": "2014-01-27T13:07:45.787000Z", + "activity_relevant_comm": "http://wiki.wikimedia.it/wiki/Consultazione_europea_sul_diritto_d%27autore", + "head_office_post_code": "20900", + "goals": "Wikimedia Italia persegue esclusivamente finalit\u00e0 di solidariet\u00e0 sociale nel campo della promozione della cultura. L'Associazione ha per obiettivo di contribuire attivamente a diffusione, miglioramento e avanzamento del sapere e della cultura promuovendo la produzione, raccolta e diffusione gratuita di contenuti liberi (Open Content) per incentivare le possibilit\u00e0 di accesso alla conoscenza e alla formazione. Sono definiti \"contenuti liberi\" nel senso inteso dall'associazione tutte le opere che sono state contrassegnate dai loro autori con una licenza che ne permetta l'elaborazione e/o la diffusione gratuita. In aggiunta a ci\u00f2 sar\u00e0 approfondita anche la conoscenza e la consapevolezza delle questioni sociali e filosofiche correlate.\r\n\r\nIn particolare Wikimedia Italia si d\u00e0 come obiettivo di promuovere e sostenere, direttamente o indirettamente, gli sviluppi, i trasferimenti, le traduzioni in lingua italiana dei progetti della Wikimedia Foundation, Inc.\r\n\r\nAnche se Wikimedia Italia \u00e8 soggetta alla legge italiana, i suoi obiettivi includono il sostegno ai progetti di Wikimedia Foundation, Inc. nel suo complesso e non solamente a quelli in lingua italiana. Wikimedia Italia non ha interesse a intervenire nella gestione dei siti di Wikimedia Foundation, Inc.\r\n\r\n----\r\n\r\n\"Wikimedia italiana\" has no profit purpose. It intends to operate in the field of the culture and knowledge. In order to actively contribute to the diffusion, the improvement and the progress of the knowledge and culture in the world, Wikimedia italiana aims at supporting the development of encyclopedias, quote collections, educational books and collections of other documents, information and electronic databases having the following characteristics:\r\n\r\n they are completely free\r\n they are available on-line through the internet technologies and their derivatives\r\n they have a content editable by the user\r\n they have a free content, that can be distributed freely under the conditions of licenses like the GNU Free Documentation License, issued by the Free Software Association Inc., and particularly by its European branch on the site http://www.fsfeurope.org/.\r\n\r\nParticularly, Wikimedia italiana intends to promote and support, directly and indirectly, the developments, the transfers, the translations in Italian language of the projects of the Wikimedia Foundation, Inc.\r\n\r\nEven though Wikimedia italiana is subject to the Italian laws, its purposes include the support to the projects of the Association on the whole, and not only to the ones in Italian language. The usage of the Italian language is functional to the work of the association but it does not mean a definition of the association purposes on a national basis.", + "members": 1, + "last_update_date": "2016-02-16T16:19:57.030000Z", + "members_fte": 0.25, + "head_office_phone": "39 0395962256", + "members_25": 1, + "web_site_url": "http://wikimedia.it/", + "sub_category": 31, + "activity_other": "* Joined the https://meta.wikimedia.org/wiki/EU_policy/Statement_of_Intent\r\n* Helped draft https://meta.wikimedia.org/wiki/European_Commission_copyright_consultation\r\n* Submitted http://wiki.wikimedia.it/wiki/Consultazione_europea_sul_diritto_d%27autore and partecipating in InfoSoc directive review debate.\r\n* Joined Italian activities by multiple organisations, like beniculturaliaperti.it and fotoliberebbcc.wordpress.com, aimed at free culture promotion in Italy, also with an EU-level scope.", + "name": "Associazione Wikimedia Italia", + "created_at": "2015-04-24T02:33:36.659656Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffdb86d0032b4bdf8682ff4cc908bf48", + "identification_code": "070762412733-39", + "legal_status": "Associazione di promozione sociale", + "members_100": null, + "head_office_lon": 9.289427, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-06-28T02:12:35.246192Z", + "entity": "2c67100610be42cd8f3573a08c677329", + "number_of_natural_persons": null, + "legal": "4cb1b6f7ae6944c1afc30fb37e0cb5e6", + "native_name": null, + "head_office_country": "Switzerland", + "id": "ffc66947e9214c91ad50ca1f21879084", + "activity_industry_forums": "None", + "contact_country": 215, + "head_office_postbox": null, + "networking": "Advanced Medical Technology Association (AdvaMed) - advamed.org; European Society for Radiotherapy and Oncology (ESTRO) - estro.org; European Coordination Committee of the Radiological Electromedical and Healthcare IT Industry (COCIR) - cocir.org; Global Diagnostic Imaging, Healthcare IT and Radiation Therapy Trade Association (DITTA) - globalditta.org; Union for International Cancer Control (UICC) - uicc.org", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Cham", + "info_members": "All Varian employees involved in activities described under heading 9 are based in Cham, Switzerland. Varian does maintain a small office in Belgium, but this office and all of its employees are entirely excluded from any activities described under heading 9, and is thus not applicable for the purpose of this registration.", + "head": "b6b2bc34195647919988bdc66a928041", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Varian Medical Systems International AG Hinterbergstrasse 14 Hinterbergstrasse 14", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "Varian Medical Systems primarily follows EU initiatives, policies and legislative files relating to public health and/or research and innovation (e.g., Horizon 2020).", + "registration_date": "2016-06-27T17:53:26.204000Z", + "activity_relevant_comm": "Horizon 2020; Europe 2020 Strategy", + "head_office_post_code": "6330", + "goals": "Varian's mission is to focus energy on saving lives. Varian pioneered the use of high-energy X-rays for cancer treatments and developed the first linear accelerators to deliver radiotherapy. Today, Varian is the world's leading supplier of radiotherapy treatment solutions, continually improving delivery systems and advancing the field with new technologies, such as radiosurgery and proton therapy.", + "members": 2, + "last_update_date": "2016-06-27T17:53:56.186000Z", + "members_fte": 0.5, + "head_office_phone": "41 417498844", + "members_25": 2, + "web_site_url": "http://varian.com", + "sub_category": 21, + "activity_other": "Varian Medical Systems is currently a member of the Innovative Medicines Initiative 2 (IMI2).", + "name": "Varian Medical Systems International AG", + "created_at": "2016-06-28T02:12:35.253532Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffc66947e9214c91ad50ca1f21879084", + "identification_code": "185216022477-29", + "legal_status": "public limited company", + "members_100": null, + "head_office_lon": null, + "structure_members": "N/A", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-05-18T01:55:12.188289Z", + "entity": "58e648b6c5f84e7385d918a130930e8e", + "number_of_natural_persons": null, + "legal": "3919868fa8014565a1d1c5a3a805178b", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "ffc559aded2d4379915fe024267d5399", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": null, + "networking": "ECCO\r\nESSO\r\nESO\r\nECPC\r\nESMO\r\nEPF\r\nUEG\r\nESDO", + "members_75": 1, + "main_category": 3, + "members_50": 3, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Salisbury", + "info_members": "", + "head": "a7b6d02d614b4e98a40e35a9246facd4", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "5 Deans Yard Phillips Lane Phillips Lane", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "Wo work with our 40 partner groups in Europe to support patients, raise awareness of colorectal cancer and to advocate for the best treatment care and screening across all EU countries", + "registration_date": "2016-05-16T18:01:23.910000Z", + "activity_relevant_comm": "White Paper on colorectal cancer treatment\r\nAnnual review\r\nMeetings in the EU Parliament \r\nCollaboration with other NGO and clinical stakeholders in Europe on health issues", + "head_office_post_code": "SP1 3YP", + "goals": "EuropaColon is committed to preventing deaths from colorectal cancer and improving the quality of life and support for those affected by the disease\r\n\r\nOur 4 Key Goals\r\nTo reduce the numbers of European citizens affected by colorectal cancer\r\nTo identify colorectal cancer at an early stage\r\nTo ensure access\r\nto best treatment and care for all European patients\r\nTo support novel and innovative research into colorectal cancer", + "members": 5, + "last_update_date": "2016-05-17T10:41:19.666000Z", + "members_fte": 3.25, + "head_office_phone": "44 1772333587", + "members_25": null, + "web_site_url": "http://www.europacolon.com", + "sub_category": 31, + "activity_other": "We are not involved in these groups at present", + "name": "Europacolon", + "created_at": "2016-05-17T01:52:12.447290Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffc559aded2d4379915fe024267d5399", + "identification_code": "509496521674-06", + "legal_status": "not for profit", + "members_100": 1, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "be_office_lat": null, + "updated_at": "2016-08-12T02:07:20.156460Z", + "entity": "1b95406c5f8c486fbad9295c26f6e201", + "number_of_natural_persons": null, + "legal": "4499ffdcc0744c59914a27084dbe7d22", + "native_name": null, + "head_office_country": "Italy", + "id": "ffb255f6e8004fe88b4593048bae9c6f", + "activity_industry_forums": "Nell'ambito della realizzazione di ETIS (European Tourism Indicator System) la Dott.ssa Bresciani, consulente specializzato nel Turismo ha partecipato a tutti i Forum sulla materia organizzati dalla Commissione dagli anni 2009 ed ha concluso l'iter partecipativo con la relazione tenuta presso la Commissione lo scorso Gennaio 2016 durante la premiazione per le 100 destinazioni di turismo europeo di cui ha fatto parte con l'Unione dei Comuni TERRAE ANIO IUBENSANAE come coordinatore del progetto.", + "contact_country": 108, + "head_office_postbox": "00027", + "networking": "www.lazio.coldiretti.it\r\nwww.confcooperative.it\r\nwww.jlag.com\r\nwww.festfoundation.eu\r\nwww.pm4esd.eu\r\nwww.ccitabel.com", + "members_75": null, + "main_category": 1, + "members_50": 100, + "activity_expert_groups": "None", + "sub_category_title": "Self-employed consultants", + "other_code_of_conduct": "nessuno", + "head_office_town": "ROVIANO", + "info_members": "La costruzione di PRESS il nuovo gruppo associativo di progettisti europei fa pensare ad un aumento del gruppo di interesse intorno al proponente MB&PARTNERS", + "head": "4499ffdcc0744c59914a27084dbe7d22", + "status": "inactive", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "Viale Alessandro Manzoni 13 13", + "be_office_post_code": null, + "activity_inter_groups": "None", + "acronym": "MB&P", + "activity_eu_legislative": "Le principali iniziative sono state nell'ambito del turismo in collaborazione con la attuale DG GROWTH con cui si \u00e8 percorso il cammino dei label territoriali ETIS sui piccoli comuni del Lazio. La societ\u00e0 ha anche partecipato a riunioni del Consiglio d'Europa sui Cammini e il Presidente \u00e8 divenuto Manager di Routes presso l'Istituto Culturale di Lussemburgo per il riconoscimento dei Cammini Certificati.\r\nIniziative sono state svolte di seminari relativi alle opportunit\u00e0 della Commissione per la convergenza tra turismo e agricoltura.\r\nNell'ambito formativo si \u00e8 ottenuta la certificazione PM4SD in Bruxelles per le certificazioni di Project Management e si sono organizzati seminari in Roma per il trasferimento di competenza e informazione sulle opportunit\u00e0 europee all'interno di Fondazione Italia Sostenibile per Azioni. \r\nAttualmente MB&PARTNERS \u00e8 proponente di una petizione europea per il riconoscimento della figura professionale del progettista europeo seguendo i regolamenti comunitari 1025/2012, la Direttiva 123/2006 sui Servizi e le attivit\u00e0 di controllo e sorveglianza, EQF (European Qualification Framework), Reg. CE n.765/2008 in materia di sorveglianza del mercato.", + "registration_date": "2016-07-26T07:50:53.829000Z", + "activity_relevant_comm": "MB&PARTNERS ha svolto attivit\u00e0 di comunicazione sia a livello locale , regionale e nazionale , che a livello internazionale. In ambito locale \u00e8 attiva con animazione territoriale per la conoscenza delle linee programmatiche europee di sviluppo dei territori rurali con attivit\u00e0 eventistiche per il miglior posizionamento dei temi. Con un evento di rilevanza europea \u00e8 stata la societ\u00e0 proponente dell'evento INCOUNTRY (www.incountry.eu), patrocinato dalla rappresentanza italiana della Commissione Europea. Il Presidente Dott.ssa Marina Bresciani ha partecipato al panel di ETIS (European Tourism Indicator System) come una tra le 100 destinazioni selezionate in Europa per il turismo sostenibile (marina bresciani-youtube-ETIS PANEL CONFERENCE). Il Presidente \u00e8 presente a tutti gli INFODAY sul turismo e alle discussioni correlate per il benessere e la qualit\u00e0 della vita con forti connotazioni e correlazioni con l'agricoltura (Coldiretti). Il Presidente \u00e8 attualmente anche rappresentante della Associazione Europea PRESS che ha realizzato il primo evento lo scorso 8 luglio per la certificazione degli skills del progettista europeo e i criteri di valutazione della figura professionale per una regolamentazione europea (pagina facebook PRESS - Progettisti Europei Associati).", + "head_office_post_code": "00027", + "goals": "MB&PARTNERS nasce dall'idea di creare un network di aziende e professionisti accomunati da un unico obiettivo, in cui ciascuno possa consolidare e condividere le proprie esperienze professionali maturate nel marketing territoriale, del turismo, strizzando l'occhio all'agricoltura, all'arte, alla cultura ed all'ambiente in generale.\r\nIl network non nasce come semplice aggregazione di aziende e professionisti che si occupano delle stesse cose, ma di entit\u00e0 che hanno effettivamente lavorato insieme, cooperato in progetti europei o nazionali o regionali, creato valore aggiunto per il proprio territorio ed abbiano, effettivamente, consolidato la propria collaborazione, collaudandola e fondandola sui risultati effettivamente raggiunti.\r\nMarina Bresciani \u00e8 l'elemento di coordinamento e raccordo tra le competenze verticali e specifiche dei singoli partner, grazie alle molteplici competenze sviluppate nel coordinare progetti integrati dal 2003 ad oggi. Lo spirito aggregativo e cooperativo nasce dalla qualit\u00e0 e solidit\u00e0 delle relazioni professionali che si sono create nel tempo tra i diversi soggetti coinvolti.", + "members": 100, + "last_update_date": "2016-07-26T08:01:19.825000Z", + "members_fte": 50.0, + "head_office_phone": "39 3274089916", + "be_office_town": "Bruxelles", + "members_25": null, + "web_site_url": "http://mbandpartners.it", + "sub_category": 13, + "activity_other": null, + "be_office_postbox": null, + "name": "MB&PARTNERS di BRESCIANI MARINA", + "be_office_street": "Rue de la Loi 26 ", + "created_at": "2016-07-27T02:05:12.456085Z", + "be_office_country": "Belgium", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffb255f6e8004fe88b4593048bae9c6f", + "identification_code": "346207322801-08", + "legal_status": "DITTA INDIVIDUALE", + "members_100": null, + "be_office_phone": "32 33185868", + "be_office_lon": null, + "head_office_lon": null, + "structure_members": "www.studiomorandini.net\r\nwww.italiaspa.org\r\nwww.unionegiovenzano.rm.it\r\nwww.comune.mentana.rm.it", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "Standing Committee on Agricultural Research (SCAR) Brusel, Belgicko\r\nInternational Committee for Animal Recording, Rome Italy (Medzin\u00e1rodn\u00e1 komisia pre evidenciu zvierat)\r\nInternational Committee on Food Microbiology and Hygiene (ICFMH) of International Union of Microbiological Societes (IUMS), Monells, \u0160panielsko (pracovn\u00edci NPPC \u2013 V\u00daP s\u00fa zodpovedn\u00ed za rie\u0161enie jednotliv\u00fdch oblast\u00ed potravin\u00e1rskej mikrobiol\u00f3gie pri zabezpe\u010dovan\u00ed bezpe\u010dnos\u0165 potrav\u00edn.", + "activity_high_level_groups": "Akt\u00edvna \u010dinnos\u0165 NPPC je v pracovnej skupine Rady EU pre medzin\u00e1rodn\u00e9 environment\u00e1lne z\u00e1le\u017eitosti \u2013 dezertifik\u00e1cia k problematike Dohovoru OSN o boji proti dezertifik\u00e1cii,\r\n\r\n\tEuropean Soil Bureau Network \u2013 Eur\u00f3psky \u00farad pre p\u00f4du, EK/JRC/IES/Ispra,(Zvy\u0161ovanie povedomia o p\u00f4de \u2013 pr\u00edprava podkladov, spracov\u00e1vanie p\u00f4dnych \u00fadajov)\r\n\r\nEuropean Commission, Directorate General for Health and Consumer Protection, Brusel, Belgicko\r\nNPPC \u2013 V\u00daP spolupracuje s komisiou v oblastiach zdravia a ochrany spotrebite\u013eov a zaober\u00e1 sa ochranou a zlep\u0161ovan\u00edm zdravia obyvate\u013eov, bezpe\u010dnos\u0165ou a ne\u0161kodnos\u0165ou potrav\u00edn,", + "head_office_lat": null, + "updated_at": "2016-08-31T02:17:50.588053Z", + "entity": "15af1f49221b4eafba575eca7e3d371e", + "number_of_natural_persons": null, + "legal": "6513b50e074640aaae1de8a9622abfa2", + "native_name": null, + "head_office_country": "Slovakia", + "id": "ffae9158758a410391d34d6831f01b86", + "activity_industry_forums": "Medzivl\u00e1dny technick\u00fd panel Glob\u00e1lneho partnerstva o p\u00f4de v r\u00e1mci FAO (ITPS-GSP FAO) \u2013 NPPC - V\u00daPOP akt\u00edvna spolupr\u00e1ca\r\n\r\nFarm Accountancy Data Network Committee (\u00da\u010das\u0165 na zasadnutiach v\u00fdboru FADN 3-4x ro\u010dne. Prerokovan\u00e9 s\u00fa: predpisy a nariadenia Eur\u00f3pskej Komisie, Rady a Parlamentu, s\u00favisiace s informa\u010dnou sie\u0165ou po\u013enohospod\u00e1rskeho \u00fa\u010dtovn\u00edctva E\u00da, form\u00e1t v\u00fdkazu pre zber d\u00e1t.)\r\n\r\nInternational Commission of Agricultural and Biosystems Engineering (CIGR), Brusel, Belgicko\r\nThe Organisation for Economic Co-operation and Development, Par\u00ed\u017e, Franc\u00fazsko (OECD)", + "contact_country": 201, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 4, + "members_50": null, + "activity_expert_groups": "DG SANTE - Health and Food Safety, Unit E2 Plant Health, WG Plant Genetic Resources, Brusel, Belgicko (Expertn\u00e1 pracovn\u00e1 skupina genetick\u00fdch zdrojov rastl\u00edn pri E\u00da).\r\n\r\nKomisia E\u00da COPA/COGECA pracovn\u00e1 skupina pre ovce, kozy, te\u013eacie a hov\u00e4dzie m\u00e4so, Brusel, Belgicko (Organiz\u00e1cia EU zastre\u0161uj\u00faca potravin\u00e1rske a po\u013enohospod\u00e1rske organiz\u00e1cie a zv\u00e4zy. NPPC-V\u00da\u017dV Nitra m\u00e1 \u010dlenov v pracovnej skupine Ovce a kozy (poradensk\u00e1 skupina te\u013eacie a hov\u00e4dzie m\u00e4so).\r\n\tEuropean Food Safety Authority (EFSA), Parma, Taliansko\r\n\r\nEuropean Federation of Animal Science (EAAP)\r\nR\u00edm, Taliansko", + "sub_category_title": "Think tanks and research institutions", + "other_code_of_conduct": null, + "head_office_town": "Lu\u017eianky", + "info_members": "", + "head": "6513b50e074640aaae1de8a9622abfa2", + "status": "active", + "main_category_title": "IV - Think tanks, research and academic institutions", + "head_office_street": "Hlohoveck\u00e1 2 ", + "activity_inter_groups": "European Regional Focal Point for ANGR (Eur\u00f3psky region\u00e1lny kontaktn\u00fd bod pre genetick\u00e9 \u017eivo\u010d\u00ed\u0161ne zdroje)\r\n\tEuropean Association for Research on Plant Breeding (EUCARPIA), Z\u00fcrich, \u0160vaj\u010diarsko (Eur\u00f3pska asoci\u00e1cia pre v\u00fdskum v \u0161\u013eachten\u00ed rastl\u00edn (V\u00daRV sa podie\u013ea na pr\u00e1ci viacer\u00fdch sekci\u00ed, najm\u00e4 GZ, krmov\u00edn a obiln\u00edn a zabezpe\u010duje pokusy s tritikale, pr\u00ednosom je mo\u017enos\u0165 z\u00edskavania najnov\u0161\u00edch inform\u00e1ci\u00ed v oblasti geneticko-\u0161\u013eachtite\u013esk\u00e9ho v\u00fdskumu)\r\n\r\nDAGENE (Dunamenti \u00c1llatfajt\u00e1k G\u00e9nmeg\u00f6rz\u00f6 Nemzetk\u00f6zi Egyes\u00fclete), Budape\u0161\u0165, Ma\u010farsko\r\nMedzin\u00e1rodn\u00e1 organiz\u00e1cia pre vini\u010d a v\u00edno v Par\u00ed\u017ei, O.I.V.", + "acronym": "NPPC", + "activity_eu_legislative": "V zmysle plnenia Nariadenia Eur\u00f3pskeho parlamentu a Rady \u010d. 1107/2009 o uv\u00e1dzan\u00ed pr\u00edpravkov na ochranu rastl\u00edn na trh a Smernice Eur\u00f3pskeho Parlamentu a Rady 2009/128/ES,ktorou sa ustanovuje r\u00e1mec pre \u010dinnos\u0165 Spolo\u010denstva na dosiahnutie trvalo udr\u017eate\u013en\u00e9ho pou\u017e\u00edvania pestic\u00eddov NPPC v s\u00fa\u010dasnosti rie\u0161i \u00falohu \u201eHodnotenie riz\u00edk pr\u00edpravkov na ochranu rastl\u00edn pre ope\u013eova\u010de a spravovanie toxikologicko-informa\u010dn\u00e9ho centra pre v\u010dely a pestic\u00eddy\u201c\r\n-\tSpracov\u00e1vaj\u00fa sa odborn\u00e9 stanovisk\u00e1 pre St\u00e1ly v\u00fdbor pre bezpe\u010dnos\u0165 potrav\u00edn pri EK oh\u013eadom rizika aplik\u00e1cie pr\u00edpravkov na ochranu rastl\u00edn", + "registration_date": "2016-08-23T14:54:09.690000Z", + "activity_relevant_comm": "V zmysle rozhodnutia EUR\u00d3PSKEHO PARLAMENTU A RADY \u010d. 529/2013/E\u00da z 21. m\u00e1ja 2013 o pravidl\u00e1ch zapo\u010d\u00edtavania pre emisie a z\u00e1chyty sklen\u00edkov\u00fdch plynov vypl\u00fdvaj\u00face z \u010dinnost\u00ed s\u00favisiacich s vyu\u017e\u00edvan\u00edm p\u00f4dy, so zmenami vo vyu\u017e\u00edvan\u00ed p\u00f4dy a s lesn\u00fdm hospod\u00e1rstvom a o inform\u00e1ci\u00e1ch t\u00fdkaj\u00facich sa opatren\u00ed s\u00favisiacich s t\u00fdmito \u010dinnos\u0165ami sa NPPC zaober\u00e1 sledovan\u00edm a inventariz\u00e1ciou emisi\u00ed z po\u013enohospod\u00e1rskej p\u00f4dy a zmien vyu\u017e\u00edvania p\u00f4dy ako aj anal\u00fdzou emisn\u00fdch faktorov a emisi\u00ed amoniaku a sklen\u00edkov\u00fdch plynov (CH4 , N2O) z chovu hospod\u00e1rskych zvierat\r\n\r\nV zmysle Smernice Eur\u00f3pskeho parlamentu a Rady 2009/28/ES o podpore obnovite\u013en\u00fdch zdrojov energie sa rie\u0161i \u00faloha \u201eVypracovanie krit\u00e9ri\u00ed udr\u017eate\u013en\u00e9ho vyu\u017e\u00edvania biomasy\u201c\r\n\r\nV r\u00e1mci programu programu HORIZONT 2020 je NPPC zapojen\u00e9 do rie\u0161enia projektu BIOSKOH\u2019s Innovation Stepping Stones for a novel European Second Generation BioEconomy. \r\nZ\u00e1merom projektu BIOSKOH je podpora rie\u0161en\u00ed pre unik\u00e1tne spracovanie a vyu\u017eitie fytomasy na v\u00fdrobu bioetanolu technol\u00f3giou druhej gener\u00e1cie.", + "head_office_post_code": "95141", + "goals": "The National Agricultural and Food Centre focuses on comprehensive research and gathering of knowledge in the sustainable use and protection of natural resources, especially soil and water resources for crop production and animal husbandry, quality and safety, innovation and competitiveness of food and non-food products of agricultural origin, productive and non-productive impact of agriculture on the environment and rural development and the transfer of knowledge from agricultural and food research to end users.", + "members": 10, + "last_update_date": "2016-08-23T15:15:53.294000Z", + "members_fte": 2.5, + "head_office_phone": "421 376546122", + "members_25": 10, + "web_site_url": "http://www.nppc.sk/index.php/sk/", + "sub_category": 41, + "activity_other": null, + "name": "N\u00e1rodn\u00e9 po\u013enohospod\u00e1rske a potravin\u00e1rske centrum", + "created_at": "2016-08-31T02:17:50.591701Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffae9158758a410391d34d6831f01b86", + "identification_code": "509308323113-13", + "legal_status": "\u0161t\u00e1tna pr\u00edspevkov\u00e1 organiz\u00e1cia", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-04-07T00:03:42.963618Z", + "entity": "4c94c490da1e48a6af5d409dad93d2cc", + "number_of_natural_persons": null, + "legal": "923468e984824eb0a525f369e8e03dca", + "native_name": null, + "head_office_country": "Italy", + "id": "ffaa55befc9b477bb35bd635bf458c3c", + "activity_industry_forums": "None", + "contact_country": 108, + "head_office_postbox": null, + "networking": "COPA : Committee of Professional Agricultural Organisations\r\nthrough Confagricoltura", + "members_75": null, + "main_category": 2, + "members_50": 2, + "activity_expert_groups": "None", + "sub_category_title": "Trade unions and professional associations", + "other_code_of_conduct": null, + "head_office_town": "BOLOGNA", + "info_members": "", + "head": "ba011dd23b5240af8f980775e88609a6", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "via del monte 10 ", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "PAC", + "registration_date": "2010-04-08T11:17:31.076000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "40126", + "goals": "Confagricoltura Emilia- Romagna is a regional branch of the national organisation representative of agricultural interests, which safeguards local farmer structures, all the associated members and every professional group, trade union and economic category linked to those members.", + "members": 2, + "last_update_date": "2016-04-06T16:35:51.728000Z", + "members_fte": 1.0, + "head_office_phone": "39 051 251866", + "members_25": null, + "web_site_url": "http://www.confagricoltura.org/it/", + "sub_category": 26, + "activity_other": "-Response to Consultations published by European Commission\r\n\r\n- Forwarding of position papers / statements to MEPS \r\n\r\n- Participation in the elaboration of agricultural position papers on the European level", + "name": "CONFAGRICOLTURA EMILIA-ROMAGNA", + "created_at": "2015-04-24T01:53:02.429922Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffaa55befc9b477bb35bd635bf458c3c", + "identification_code": "36395803420-35", + "legal_status": "ASSOCIAZIONE SINDACALE", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-02-11T02:56:07.336686Z", + "entity": "dd0024740d7141a0870688d2aaafe8f6", + "number_of_natural_persons": 12, + "legal": "1cde557356d944059919483fca786984", + "native_name": null, + "head_office_country": "Greece", + "id": "ffa463c6b2d24eb281d08ce34f369730", + "activity_industry_forums": "None", + "contact_country": 85, + "head_office_postbox": null, + "networking": "Member of the INGO network of the Council of Europe", + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Thessaloniki", + "info_members": "", + "head": "db7eb8bab6d347b68fea1312a38f3db0", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Krispou 9, Ano Poli Ano Poli", + "activity_inter_groups": "None", + "acronym": "CDRSEE", + "activity_eu_legislative": "DG for Neighbourhood and Enlargement Negotiations\r\nDG for Education and Culture\r\nDG for International Cooperation and Development\r\nDG for Justice and Consumers\r\nDG for Migration and Home Affairs", + "registration_date": "2016-02-10T15:31:14.791000Z", + "activity_relevant_comm": "Joint History Project -- The CDRSEE's flagship project, the JHP is an educational programme that aims to change the way history is taught in high schools across Southeast Europe. The programme, currently in its second phase, provides teachers with workbooks and training so they can offer coursework with multiple perspectives, encouraging students to consider the many aspects of an event and to think critically about information provided. There are currently four workbooks, in 11 languages, covering history up to the Second World War. The next two workbooks, which will address the Cold War and the Wars of the 1990s, are due to be published in July 2016 and launched in September 2016. The programme enjoys the support of nearly all the Ministries of Education across the region, and is considered the gold standard in history teaching.\r\n \r\nOkruzenje (Vicinities) -- The CDRSEE has done what no one thought possible just a few years ago -- created an informative, engaging talk show especially for the Western Balkans that deals with divisive issues in the region. The same programme is broadcast on 10 national television channels and scores of regional channels across the Western Balkans, including all the countries of the former Yugoslavia and Albania. The show, kicking off its fifth season, brings together guests from different countries and backgrounds on the same set. Okruzenje made history at the Western Balkans Summit Vienna 2015 in August when for the first time ever, the Prime Ministers of Albania and Serbia were both guests in a single studio, in this case advocating regional cooperation. \r\n\r\nNetucate -- The CDRSEE is partnering with EUROCLIO for a three-year project on education reform in Southeast Europe. The project leverages the \"Teaching for Learning\" methodology manual produced by the CDRSEE, providing teacher training and materials. Overall the project includes a major education evaluation, a pilot project and a project plan, as well as teacher training and a strengthening of the network of key actors, all focused on enhancing the education system to deal with a global, interactive society. The process will be followed via a special episode series of the \"Okruzenje\" TV talk show. The ultimate goal is educational reform in order to help sustain the democratisation process and enhance sensitivity and understanding, through reforms and changes in the formal school system.\r\n \r\nVicinities Europe -- Vicinities Europe has taken the proven Okruzenje (Vicinities) model and applied it to Europe, where there are certainly ample divisive issues. The idea surfaced from a presentation of Okruzenje in the European Parliament, where MEPs suggested widening the show to Europe, noting its power in fostering reconciliation and understanding among the people. Two pilot shows were produced in October 2015 -- one on the migrant and refugee crisis, and another on the future of the European idea. CIRCOM, the European Association of Regional Televisions, featured Vicinities Europe on its website and offered it to all of its members. So far, the shows have been broadcast in at least nine countries.", + "head_office_post_code": "54634", + "goals": "The Center for Democracy and Reconciliation in Southeast Europe is a non-governmental, non-profit organisation that seeks to foster democratic, pluralist, and peaceful societies in Southeast Europe. We advocate principles of social responsibility, sustainable development, and reconciliation among the peoples in the region. We accomplish these goals via media activities, educational programmes, seminars, publications, conferences, research projects, exchange programmes, and opinion polls.", + "members": 1, + "last_update_date": "2016-02-10T15:32:51.296000Z", + "members_fte": 0.25, + "head_office_phone": "30 2310960820", + "members_25": 1, + "web_site_url": "http://www.cdrsee.org", + "sub_category": 31, + "activity_other": null, + "name": "Stichting Center for Democracy and Reconciliation in Southeast Europe", + "created_at": "2016-02-11T02:56:07.343619Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffa463c6b2d24eb281d08ce34f369730", + "identification_code": "660781520586-28", + "legal_status": "Foundation non-governmental and non-profit", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-07-21T02:08:37.366704Z", + "entity": "8325771f162b45498135a098dfb51cb8", + "number_of_natural_persons": 39582, + "legal": "77b4e80e645c4eb88d42acae1f4fd430", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "ffa09f73d35640b788cf26e335b50d84", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 4, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Academic institutions", + "other_code_of_conduct": null, + "head_office_town": "London", + "info_members": "", + "head": "4d1f631078c3459689f9115858f83163", + "status": "active", + "main_category_title": "IV - Think tanks, research and academic institutions", + "head_office_street": "The Strand ", + "activity_inter_groups": "None", + "acronym": "KCL", + "activity_eu_legislative": "Contribution to consultation and written correspondence", + "registration_date": "2016-07-20T13:28:48.646000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "WC2R 2LS", + "goals": "King's College London is dedicated to the advancement of knowledge, learning and understanding in the service of society.\r\n\r\nThe college's mission is articulated in the College's Strategic Plan 2006 - 2016 (http://www.kcl.ac.uk/aboutkings/strategy/PDFs--Resources/2006-16StrategicPlan.pdf) and in the accompanying suite of linked strategies", + "members": 1, + "last_update_date": "2016-07-20T13:29:14.656000Z", + "members_fte": 0.25, + "head_office_phone": "44 78365454", + "members_25": 1, + "web_site_url": "http://www.kcl.ac.uk", + "sub_category": 42, + "activity_other": "Contribution to consultation and written correspondence", + "name": "King's College London", + "created_at": "2016-07-21T02:08:37.373983Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ffa09f73d35640b788cf26e335b50d84", + "identification_code": "335281522747-30", + "legal_status": "'Exempt' charity under Schedule 3 of the Charities Act 2011 for the purposes of UK charity legislation", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-06-18T01:59:10.877902Z", + "entity": "ea23cc779051402da25cfd080b2a83c4", + "number_of_natural_persons": null, + "legal": "7efa8b08a3d14ea9bce46dda642837da", + "native_name": null, + "head_office_country": "Germany", + "id": "ff95562e4f774e7ba0c4a8ee98403c18", + "activity_industry_forums": "None", + "contact_country": 82, + "head_office_postbox": null, + "networking": "B\u00f6rsenverein des Deutschen Buchhandels.\r\nhttp://www.boersenverein.de/de/portal/index.html", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Berlin", + "info_members": "", + "head": "7efa8b08a3d14ea9bce46dda642837da", + "status": "inactive", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Fredericiastrasse 8 ", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "Urheberrecht\r\nVerlagsrecht", + "registration_date": "2016-05-31T15:28:20.995000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "14050", + "goals": "Das Publizieren von B\u00fcchern. Schwerpunkte: Theater, Film und Literatur.", + "members": 3, + "last_update_date": "2016-05-31T15:30:48.897000Z", + "members_fte": 3.0, + "head_office_phone": "49 303021826", + "members_25": null, + "web_site_url": "http://www.alexander-verlag.com", + "sub_category": 21, + "activity_other": null, + "name": "Alexander Verlag Berlin", + "created_at": "2016-06-01T01:55:05.349179Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff95562e4f774e7ba0c4a8ee98403c18", + "identification_code": "052108522024-86", + "legal_status": "Einzelfirma", + "members_100": 3, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-17T01:39:21.520955Z", + "entity": "e736f0e4a6d149459c5a1da0d62af8ec", + "number_of_natural_persons": 1, + "legal": "55203a1b62914a8a8033a633b2a3a2a3", + "native_name": null, + "head_office_country": "Canada", + "id": "ff919bf968eb498bb7af62a1494a49d1", + "activity_industry_forums": "None", + "contact_country": 39, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 3, + "members_50": 1, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": "Michel Georges Abdelahad", + "head_office_town": "St-Jean-sur-Richelieu", + "info_members": "De 1989 \u00e0 2004, nous avons \u00e9t\u00e9 tr\u00e8s actif au Canada. Des raisons personnelles ont conduit un ancien organisme de charit\u00e9 canadien \u00e0 se retir\u00e9.\r\n\r\n( Les Habitations Organisationnelles Mondiales pour la Famille )\r\n\r\nMichel Abdelahad, fondateur et ex-pr\u00e9sident de cet organisme reprendra les activit\u00e9es.", + "head": "0ae64e61a73a431580ea1cb456740bdd", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "1392 Jacques-Cartier Sud ", + "activity_inter_groups": "None", + "acronym": "Michel Abdelahad", + "activity_eu_legislative": "Nous avons les m\u00eames buts que l'Union europ\u00e9enne ou les Nations Unies, soit: C\u2019est en 2000 au sommet du mill\u00e9naire organis\u00e9 par les Nations Unies que les Chefs d\u2019\u00c9tats de 189 pays et des gouvernements du monde entier, se sont mis d\u2019accord pour n\u2019\u00e9pargner aucun effort pour lib\u00e9rer leurs semblables, hommes, femmes et enfants des conditions abjectes et d\u00e9shumanisantes de l\u2019extr\u00eame pauvret\u00e9. L\u2019objectif de l\u2019Union europ\u00e9enne, avec plus de 80 millions de personnes menac\u00e9es de pauvret\u00e9, consistait \u00e0 sortir au moins 20 millions de personnes de la pauvret\u00e9 et de l\u2019exclusion sociale d\u2019ici l\u2019an 2020.", + "registration_date": "2012-04-06T18:28:15.430000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "J3B 6Y8", + "goals": "Une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage\r\n\r\nNotre projet vise \u00e0 garantir la s\u00e9curit\u00e9 de l\u2019habitation et de l\u2019alimentation de la famille vivant sous le seuil de pauvret\u00e9 \u00e0 la classe moyenne, telle garantie n\u2019\u00e9tant actuellement qu\u2019un avantage de la classes plus nantie. \r\n\r\nEn solvant les probl\u00e8mes de pauvret\u00e9, ce projet va cr\u00e9er un \u00e9quilibre entre ces classes. L\u2019une d\u00e9pendra de l\u2019autre, mais dans des conditions ou contextes diff\u00e9rents.\r\n\r\nL\u2019\u00e9quilibre ainsi cr\u00e9\u00e9 mettra un terme \u00e0 la lutte des classes et aux conflits qui, depuis trop longtemps,\r\nperdurent \u00e0 faire tant de victimes.\r\n\r\nNous consid\u00e9rons que nous avons tous un travail \u00e9galement valable, essentiel et indispensable dans la soci\u00e9t\u00e9. L\u2019habitation et l\u2019alimentation sont des besoins essentiels autant pour le plus bas salari\u00e9 que pour le plus nanti. Pourtant, ces besoins ne sont pas toujours ad\u00e9quatement\r\ncombl\u00e9s.\r\n\r\nLes travailleurs moins salari\u00e9s n\u2019auraient-ils pas droits \u00e0 aux m\u00eames avantages que leur employeur qui s\u2019enrichira \u00e0 leurs d\u00e9pends ?\r\n\r\nNotre projet cr\u00e9era cette \u00e9quilibre\r\n\r\nUne solution concr\u00e8te et r\u00e9aliste \u00e0 ce probl\u00e8me, c\u2019est l\u2019acc\u00e8s \u00e0 l\u2019habitation unifamiliale priv\u00e9e et l\u2019alimentation pour le travailleur soutien de famille bas salari\u00e9 ainsi que pour la classe moyenne. Ce projet a \u00e9t\u00e9 con\u00e7u pour r\u00e9tablir un \u00e9quilibre entres ces classes.\r\n\r\nLe 27 octobre 2014, nous avons fait parvenir une lettre \u00e0 Monsieur Martin Schultz, Pr\u00e9sident du Parlement europ\u00e9en. \u00c9tant canadiens, nous lui demandions dans notre correspondance, le processus afin d\u2019obtenir un ou une d\u00e9put\u00e9(e), dans le but de pr\u00e9senter officiellement notre projet aux membres de l\u2019Union europ\u00e9enne.", + "members": 1, + "last_update_date": "2016-03-15T12:32:49.855000Z", + "members_fte": 0.5, + "head_office_phone": "438 8376023", + "members_25": null, + "web_site_url": "http://www.michelabdelahad.ca", + "sub_category": 31, + "activity_other": "Nous avons fait parvenir une lettre de sensibilisation \u00e0 plus de 120 pays, \u00e0 des milliers de personnes dont des leaders, des administrateurs, des commer\u00e7ants, des industries.\r\n\r\nVoici la Lettre de sensibilisation:\r\n\r\nobjet:Le Projet , une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage\r\n\r\nMadame, Monsieur,\r\n \r\nCe projet, une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage, vise \u00e0 s\u00e9curiser l\u2019habitation et l\u2019alimentation pour la classe moyenne, une garantie qui n\u2019est actuellement qu\u2019un avantage de la classes plus nantie. \r\nNous consid\u00e9rons que, l'habitation et l'alimentation ne vont pas au m\u00e9rite, mais sont acquises et essentielles pour l'\u00eatre humain et nous y avons tous droit.\r\nEn apportant une solution aux probl\u00e8mes de pauvret\u00e9 dans le monde, ce projet cr\u00e9era un \u00e9quilibre entre ces classes. L\u2019une d\u00e9pendra de l\u2019autre, mais dans des conditions ou contextes diff\u00e9rents.\r\nL\u2019\u00e9quilibre ainsi cr\u00e9\u00e9 mettra un terme \u00e0 la lutte des classes, aux injustices et aux conflits qui, depuis trop longtemps, perdurent \u00e0 faire tant de victimes.\r\nNous consid\u00e9rons que nous avons tous un travail \u00e9galement valable, essentiel et indispensable dans la soci\u00e9t\u00e9. L\u2019habitation et l\u2019alimentation sont des besoins essentiels autant pour le plus bas salari\u00e9 que pour le plus nanti. Pourtant, ces besoins ne sont pas toujours ad\u00e9quatement combl\u00e9s.\r\nLes travailleurs moins salari\u00e9s n\u2019auraient-ils pas droits aux m\u00eames avantages que leur employeur qui s\u2019enrichira \u00e0 leurs d\u00e9pends ?\r\nNotre projet cr\u00e9era cet \u00e9quilibre. \r\nNous vous invitons \u00e0 venir visiter notre site internet au www.michelabdelahad.ca\r\nNous avons besoin de votre aide.\r\nAu plaisir de vous rencontrer.\r\nVeuillez, agr\u00e9er, Madame, Monsieur, l'expression de nos sentiments les meilleurs.\r\nMichel Abdelahad", + "name": "Michel Abdelahad", + "created_at": "2015-04-24T02:03:29.575210Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff919bf968eb498bb7af62a1494a49d1", + "identification_code": "90135938437-51", + "legal_status": "\u00c9tudiant / retrait\u00e9", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-08-18T02:05:39.164064Z", + "entity": "93355a2361e94cdca6c3109c22d5c021", + "number_of_natural_persons": null, + "legal": "b1ca1ea84ce34faa8cdc85a44adc6532", + "native_name": null, + "head_office_country": "Belgium", + "id": "ff8bf95428b24bfbb473f10d41580e0e", + "activity_industry_forums": "None", + "contact_country": 21, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "Sustainable Transport Forum\r\nMotorcycle Working Group", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Brussel", + "info_members": "", + "head": "ae93dd141fee4dd4b8e52c2ffd293e3e", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Boulevard de la Plaine 2 ", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "- Type-approval\r\n- Transport policy\r\n- Energy policy\r\n- Communication on decarbonization of transport\r\n- Review Transport Criteria Green Public Procurement", + "registration_date": "2016-08-17T15:32:40.727000Z", + "activity_relevant_comm": "- Coordinator European Alternative Fuels' Observatory\r\n- Partner in Solutions\r\n- Partner in REE4EU\r\n- Co-organizor EVS", + "head_office_post_code": "1050", + "goals": "AVERE \u2013 founded in 1978 - is a European network comprised of members including Users, NGO\u2019s, Associations, Interest groups, Public Bodies, Research & Development entities, Vehicle and Equipment Manufacturers, Electricity Utilities.\r\n\r\nIts main objective is to promote the use of electric mobility in order to achieve greener mobility for cities and countries.\r\n\r\nThe main activities to achieve these objectives are related to dissemination, networking, monitoring, participation in European and multilateral projects, lobbying, research and development, among other. In public policy, AVERE presents the electric drive industry\u2019s and R&D bodies\u2019 concerns to the European Commission.", + "members": 3, + "last_update_date": "2016-08-17T15:39:52.710000Z", + "members_fte": 0.75, + "head_office_phone": "32 477633923", + "members_25": 3, + "web_site_url": "http://www.avere.org", + "sub_category": 31, + "activity_other": null, + "name": "AVERE", + "created_at": "2016-08-18T02:05:39.168461Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff8bf95428b24bfbb473f10d41580e0e", + "identification_code": "269727723042-29", + "legal_status": "VZW", + "members_100": null, + "head_office_lon": null, + "structure_members": "All AVERE members can be found here:\r\n\r\nhttps://averelev.wordpress.com/avere-lev-task-force-participants/", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-05-20T01:56:04.459713Z", + "entity": "8483b8617edf495ba3a0c548efd0d036", + "number_of_natural_persons": 4, + "legal": "ba47d71f97c6415a95f7adb15969660c", + "native_name": null, + "head_office_country": "Belgium", + "id": "ff8b766c3874481596465f39a7374139", + "activity_industry_forums": "None", + "contact_country": 21, + "head_office_postbox": null, + "networking": null, + "members_75": 0, + "main_category": 3, + "members_50": 3, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Bruxelles", + "info_members": "", + "head": "4a9a2409fc7543b8ab2c7de45cbcbf25", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Boulevard Saint Lazare 11 ", + "activity_inter_groups": "None", + "acronym": "ABF", + "activity_eu_legislative": "EU activities in the field of education", + "registration_date": "2016-05-16T17:32:32.443000Z", + "activity_relevant_comm": "Erasmus+", + "head_office_post_code": "1210", + "goals": "Alphabet Formation, ABF, is a network of European organizations in the field of human capital development. This investment in knowledge, skills and competences will benefit individuals, institutions, organisations and society as a whole by contributing to growth and ensuring equity, prosperity and social inclusion in Europe and beyond.", + "members": 3, + "last_update_date": "2016-05-19T19:24:35.963000Z", + "members_fte": 1.5, + "head_office_phone": "32 488326305", + "members_25": 0, + "web_site_url": "http://www.alphabetformation.org", + "sub_category": 31, + "activity_other": null, + "name": "Alphabet Formation", + "created_at": "2016-05-17T01:52:14.441021Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff8b766c3874481596465f39a7374139", + "identification_code": "348324921710-79", + "legal_status": "ASBL", + "members_100": 0, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "Horizon H2020", + "head_office_lat": null, + "updated_at": "2016-09-18T20:36:33.419121Z", + "entity": "fb567d6ec94d40c7844a2bb9a324b727", + "number_of_natural_persons": null, + "legal": "c9244b6262854fe481ab829974aa01a4", + "native_name": null, + "head_office_country": "France", + "id": "ff893be893604f0e9959c6bb774a97e4", + "activity_industry_forums": "None", + "contact_country": 75, + "head_office_postbox": "34830", + "networking": null, + "members_75": null, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Professional consultancies", + "other_code_of_conduct": null, + "head_office_town": "CLAPIERS", + "info_members": "", + "head": "c9244b6262854fe481ab829974aa01a4", + "status": "active", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "45 all\u00e9e Yves Stourdz\u00e9 ", + "activity_inter_groups": "None", + "acronym": "IDATE", + "activity_eu_legislative": "MetisII\r\nEuro5G\r\nCreate-IOT\r\nMagicII\r\nFinancement FEDER", + "registration_date": "2016-09-09T15:48:56.517000Z", + "activity_relevant_comm": "None", + "head_office_post_code": null, + "goals": "IDATE DigiWorld, l\u2019un des instituts europ\u00e9ens de l\u2019\u00e9conomie num\u00e9rique les plus renomm\u00e9s, est sp\u00e9cialis\u00e9 sur les march\u00e9s t\u00e9l\u00e9coms, Internet, m\u00e9dias et les territoires num\u00e9riques. Depuis 1977, nos \u00e9quipes proposent des missions de conseil, des services de veille des march\u00e9s et un programme de d\u00e9bats et de rencontres afin de d\u00e9crypter les enjeux de l\u2019\u00e9conomie num\u00e9rique et d\u2019\u00e9clairer les d\u00e9cisions strat\u00e9giques de nos clients. Nous sommes fiers de travailler chaque ann\u00e9e avec plus de 400 d\u00e9cideurs publics et grandes entreprises qui renouvellent leur confiance dans nos services, au travers de nos trois lignes d\u2019activit\u00e9s :\r\n\u2022\tDigiWorld Research, une offre de prestations d\u2019\u00e9tudes et de conseil\r\n\u2022\tIDATE Consulting, un observatoire ind\u00e9pendant des march\u00e9s et de l\u2019innovation num\u00e9rique\r\n\u2022\tDigiWorld Institute, un think tank europ\u00e9en ouvert sur le monde", + "members": 13, + "last_update_date": "2016-09-09T15:52:37.466000Z", + "members_fte": 3.25, + "head_office_phone": "33 467144444", + "members_25": 13, + "web_site_url": "http://www.idate.org", + "sub_category": 11, + "activity_other": null, + "name": "Institut de l'Audiovisuel et des T\u00e9l\u00e9communications en Europe", + "created_at": "2016-09-18T20:36:33.426290Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff893be893604f0e9959c6bb774a97e4", + "identification_code": "713335923349-24", + "legal_status": "Association Loi 1901", + "members_100": null, + "head_office_lon": null, + "structure_members": "http://www.idate.org/en/Forum/Members/Members-List_42_.html", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 37.5197479, + "updated_at": "2016-03-26T01:50:56.435389Z", + "entity": "241e762235884644aad9cd2ca1b4e4d9", + "number_of_natural_persons": null, + "legal": "ddcefa2c6ed84403a79cf581ef8ae649", + "native_name": null, + "head_office_country": "Italy", + "id": "ff802d6280874fb08e132d662e46f18e", + "activity_industry_forums": "None", + "contact_country": 108, + "head_office_postbox": null, + "networking": null, + "members_75": 1, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "CATANIA", + "info_members": "", + "head": "af5aa34046b24aa79be61c468362d592", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "CORSO DELLE PROVINCE, 203 ", + "activity_inter_groups": "None", + "acronym": "FIPI", + "activity_eu_legislative": "Mobilit\u00e0 lavoratori", + "registration_date": "2015-01-01T13:14:34.261000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "95128", + "goals": "1) la rappresentanza sindacale degli associati, tutelandone gli interessi in tutte le sedi;\r\n2) la promozione dell\u2019attivit\u00e0 di formazione dei lavoratori autonomi e degli imprenditori, a tutela dei valori morali, civili e per la qualificazione;\r\n3) la rappresentanza e tutela dei lavoratori autonomi e delle imprese, nei rapporti con le istituzioni pubbliche e private, la Pubblica Amministrazione, le organizzazioni politiche, sociali, economiche a livello nazionale ed internazionale intervenendo anche attraverso le proprie organizzazioni territoriali e di settore per garantire la tutela e rappresentanza a tutti i livelli;\r\n4) la stipula, anche attraverso organizzazioni di settore, di accordi e contratti collettivi di lavoro fornendo la relativa assistenza alle associazioni territoriali e di settore interessato;\r\n5) l\u2019assistenza sociale e previdenziale di Patronato in Italia ed all\u2019estero, anche in convenzione;\r\n6) la rappresentanza, l\u2019assistenza e la consulenza di ogni aspetto dell\u2019attivit\u00e0 aziendale anche sotto i profili: contabile, amministrativo, legale, tecnico, tributario-fiscale, assicurativo-finanziario, sindacale e di consulenza del lavoro;\r\n7) la costituzione e la promozione di agenzie per l\u2019impiego secondo le norme vigenti, in attuazione del disposto di cui all\u2019art.78 della Legge n. 413 del 30.12.1991 e s.m.i,;\r\n8) la promozione ed assistenza alla creazione di nuove imprese con azioni specifiche, anche nel quadro degli appositi programmi della U.E.;\r\n9) la formazione professionale e continua dei lavoratori autonomi, degli imprenditori della piccola impresa, degli apprendisti, dei dipendenti e quanti operano nelle imprese o che intendano inserirsi nelle attivit\u00e0 aziendali, anche ai sensi del comma 3, art. 8 bis, D.lgs. 626/94 e s.m.i.;\r\n10) la costituzione, il potenziamento e l\u2019organizzazione anche sindacale di organismi economici, cooperativistici, mutualistici e consortili;\r\n11) attivit\u00e0 in materia di immigrazione e formazione interculturale con l\u2019obiettivo di elaborare strategie progettuali che permettano alla comunit\u00e0 locale di relazionarsi in maniera consapevole, aperta e dialogica con il fenomeno migratorio, contribuendo alla formazione di una societ\u00e0 multiculturale retta dalla valorizzazione delle differenze in un contesto di civile e pacifica convivenza.", + "members": 2, + "last_update_date": "2016-03-23T12:09:35.589000Z", + "members_fte": 1.75, + "head_office_phone": "095 449778", + "members_25": null, + "web_site_url": "http://www.fipi.it", + "sub_category": 31, + "activity_other": "Mobilit\u00e0 di persone a scopo lavorativo all'interno della Comunit\u00e0 europea.", + "name": "FEDERAZIONE ITALIANA PICCOLE IMPRESE", + "created_at": "2015-04-24T02:26:23.530723Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff802d6280874fb08e132d662e46f18e", + "identification_code": "681912015411-37", + "legal_status": "ASSOCIAZIONE", + "members_100": 1, + "head_office_lon": 15.0910225, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-04-07T00:37:19.553399Z", + "entity": "a6ec27aa087f4d17afcd58832b92d3a7", + "number_of_natural_persons": 51, + "legal": "2dbc3ce9673b4989b73632e346f8dbf2", + "native_name": null, + "head_office_country": "Ireland", + "id": "ff724deeeaf8408a9ff65a58e605d552", + "activity_industry_forums": "None", + "contact_country": 105, + "head_office_postbox": null, + "networking": "Health and Environment Alliance\r\nInternational Society of Doctors for the Environment\r\nInternational Physicians for the Prevention of Nuclear War\r\nInternational Campaign to Abolish Nuclear Weapons\r\nIrish Environmental Network\r\nIrish Environmental Pillar", + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Bandon", + "info_members": "All persons are volunteers (Unpaid)", + "head": "2dbc3ce9673b4989b73632e346f8dbf2", + "status": "inactive", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Castlebernard ", + "activity_inter_groups": "None", + "acronym": "IDEA", + "activity_eu_legislative": "We are involved in many EU environmental issues through our affiliation to the Health and Environment Alliance (HEAL) based in Brussels, and with UN (UNEP) issues, mainly Climate Change, through the International Society of Doctors for the Environment (ISDE).", + "registration_date": "2015-03-31T19:35:05.471000Z", + "activity_relevant_comm": "Letters and articles in the lay and medical press, speaking on local and national radio and on TV when the opportunity arises. Attending various relevant meetings.", + "head_office_post_code": "xxxxx", + "goals": "To highlight the risks of environmental degradation and loss of biodiversity to human health including chemical contamination of the biosphere and climate change to medical professionals, the public and government. To advocate for a better and more sustainable way of life by holding public meetings, writing in lay and medical press/journals, speaking at public meetings, liasing with other NGOs, official organisations and government departments, the EU and the UN.", + "members": 10, + "last_update_date": "2015-04-20T19:17:38.830000Z", + "members_fte": 2.5, + "head_office_phone": "353 23 8844697", + "members_25": 10, + "web_site_url": "http://www.ideaireland.org", + "sub_category": 31, + "activity_other": null, + "name": "Irish Doctors Environmental Association", + "created_at": "2015-04-24T02:20:30.597430Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff724deeeaf8408a9ff65a58e605d552", + "identification_code": "115584716819-62", + "legal_status": "Registered charity", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 52.5151735, + "updated_at": "2016-05-20T00:29:19.114087Z", + "entity": "19db79249b454902a639066e1ec8b07c", + "number_of_natural_persons": null, + "legal": "d5f231312f2644a5b7c8e6983f983ee1", + "native_name": null, + "head_office_country": "Germany", + "id": "ff6ce8c03aee44788ce83a6544cdbb4c", + "activity_industry_forums": "None", + "contact_country": 82, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "MDEG\r\nBorderline Classification Group", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": null, + "head_office_town": "Berlin", + "info_members": "", + "head": "3cd888fb06694df0b59bdfaf9559a27f", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Werderscher Markt 15 ", + "activity_inter_groups": "None", + "acronym": "EUROM", + "activity_eu_legislative": "Medical Devices Regulation\r\nTTIP\r\nUDI\r\nREACH and RoHS", + "registration_date": "2013-09-27T10:09:10.979000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "10117", + "goals": "The object of EUROM is to represent the joint interests of the precision mechanical and optical industries and to promote cooperation amongst the members.\r\n\r\nMembers of EUROM are the professional organizations which represent the precision mechanical and optical industries in their respective countries (member states of the EU).", + "members": 2, + "last_update_date": "2016-05-19T12:57:55.693000Z", + "members_fte": 0.5, + "head_office_phone": "49 3041402156", + "members_25": 2, + "web_site_url": "http://eurom.org/", + "sub_category": 25, + "activity_other": null, + "name": "European Federation of Precision, Mechanical and Optical Industries", + "created_at": "2015-04-24T02:04:35.541629Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff6ce8c03aee44788ce83a6544cdbb4c", + "identification_code": "585778511937-68", + "legal_status": "nicht-rechtsf\u00e4higer Verein im Sinne des \u00a7 54 BGB", + "members_100": null, + "head_office_lon": 13.3971302, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-04-07T01:00:14.924104Z", + "entity": "abf0273d6186405bac6432a67fd01921", + "number_of_natural_persons": 3, + "legal": "09a75790dd0e4bbfa6b1d043f2cf38ed", + "native_name": null, + "head_office_country": "Netherlands", + "id": "ff6ba0bcb497410fa406c9794206bf37", + "activity_industry_forums": "None", + "contact_country": 177, + "head_office_postbox": "1000-119", + "networking": "ECNAIS is active in an informal platform called European Meeting of Independent Education. EMIE is an informal platform that binds together, once a year all organizations with similar purposes.", + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": "Ana Sofia Fialho Coelho dos Reis", + "head_office_town": "Den Haag", + "info_members": "The members of the Company shall be such persons nominated pursuant to the principles of the following named bodies (together referred to as \u201cthe Constituent Associations\u201d) shall so long as they remain in membership have the right to nominate a member for election of the Company. \r\n\r\nIn addition such other National Associations of Independent Schools as the Management Committee shall from time to time approve may each nominate 1 person as a member of the Company.", + "head": "90fdf56cff874f0bb8a213be45db6d2c", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Bezuidenhoutseweg, 251-253 32-1E 32-1E", + "activity_inter_groups": "None", + "acronym": "ECNAIS", + "activity_eu_legislative": "Collaboration between national associations of Independent Schools. \r\n\r\nTo function as a network of National Associations To exchange ideas and information. To hold meetings at which to discuss new initiatives in order to strength the European dimension in independent schools. \r\nTo provide information about European education and to disseminate more knowledge about different educational systems. To assist the establishment of E.U. educational projects. \r\nTo organize in service training for headmasters and teachers. To promote participation in international teacher\u00b4s training progammes. To help mobility and network for teachers, students and educational personnel. \r\n\r\nCoordination of National Associations of Independent Schools. To monitor the changing trends towards the Independent Schools in the different European countries. To monitor the political environment with regard to the Independent Schools in European countries. \r\nTo discuss different educational solutions. To audit both governmental and parliamentary documents. To support EU education organisations. To promote understanding of the rights of pluralism in the national systems of education. \r\n\r\nTo be a Forum for working together to establish a common understanding of freedom of education as well as of parental choice. To illuminate public opinion and the EU instances regarding freedom of education and freedom of parental choice. To promote understanding of the rights of parental choice. \r\nTo promote understanding of the vital role of independent schools in a modern democratic society. To further the interest of a all kinds of independent education whose principles conform to those set out in the Universal Declaration of Human Rights. \r\n\r\nTo be a source of contacts for other European countries (Western, Central and Eastern Europe). To be a meeting point with other National Associations of Independent Schools that share the same principles of freedom of education and freedom of parental choice. \r\nTo make agreed representation to the Council of Europe, the European Parliament and the European Union authorities.", + "registration_date": "2015-01-16T17:29:52.689000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "2594 AM", + "goals": "ECNAIS is a non-political, non-confessional, international association for collaboration between national associations of independent schools in European countries. \r\n\r\nECNAIS Supports and pursues the values embedded in a democratic approach to pluralism in the national educational systems, and the respect of the parental choice. \r\nPROMOTES the interests of all kinds of Independent education, confessional and lay, whose principles conform to those set out in the Universal Declaration of Human rights. \r\nDEVELOPS political statements that promote the understanding of the values of the independent sector, and improve their acceptance and financial support in national legislation. \r\nTARGETS policy makers at an international level by representing the Independent sector at the Council of Europe, the European Parliament, The Commission of the European Union and other international organisations, on matters of common concern, based on an agreed programme. ASSISTS current and potential members in their efforts to promote the understanding of the value of a democratic attitude in a plural society.", + "members": 1, + "last_update_date": "2016-04-06T12:42:40.840000Z", + "members_fte": 0.25, + "head_office_phone": "31 70 3315252", + "members_25": 1, + "web_site_url": "http://www.ecnais.org", + "sub_category": 31, + "activity_other": "ECNAIS is a non-political, non-confessional, international association for collaboration between national associations of independent schools in European countries.\r\n\r\nECNAIS is recognized by the Council of Europe and the European Union Commission as a non-government organisation with consultavie status.\r\nIts principal objects are:\r\n\r\n-To bring together national associations of independent schools in European countries.\r\n-To assist its members in promoting understanding of the rights of pluralism in the national systems, of education and of parental choice of education for their children and of the vital role of independent schools in a modern democratic society.\r\n-To further the interests of all kinds of independent education, confessional and lay, whose principles conform to those set out in the Universal Declaration of Human Rights.\r\n- When so requested, to make agreed representation to the Council of Europe, the European Parliament, the European Union Commission and other international organisations on matters of joint concern.", + "name": "European Council of National Associations of Independent Schools", + "created_at": "2015-04-24T02:33:38.686042Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff6ba0bcb497410fa406c9794206bf37", + "identification_code": "153452315640-05", + "legal_status": "Company limited by guarantee", + "members_100": null, + "head_office_lon": null, + "structure_members": "Association of Independent Schools in the Netherlands(2),\r\nF\u00f6rderverband Freier Schulen(1),\r\nAssociation of Private Schools of Bohemia Moravia and Silesia(1),\r\nBulgarian Association of Private Schools(1),\r\nDanish Council for International Cooperation for Independent Schools(2),\r\nAssiociation of Private Schools in Finland(1),\r\nFoudation pour l'ecole(1),\r\nAssociation of Hungarian Independent Schools(1),\r\nFederation of Independent Schools(1),\r\nNational Forum of Non-public Education(1),\r\nPortuguese Association of Independent Schools(2),\r\nEducati\u00f3n Y Gesti\u00f3n/ Escuelas Catolicas(1),\r\nNational Union for the Development of Private Pre-University Education(1),\r\nFOMENTO Education Centers(1),\r\nAssociation of Catholic Schoolboards(1),\r\nVerus(1),\r\nTurkish Private Schools' Association(1),\r\nUkrainian Association of Private Educational Istitutes(1),\r\nStichting Rijdende School(1),\r\nHellenic Private Schools Association(1),\r\nElternlobby(1)", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-26T01:30:01.606285Z", + "entity": "50c6580582f94a34af348a115a00ae2b", + "number_of_natural_persons": null, + "legal": "a7ffe3422509435fbb15f365747978f8", + "native_name": null, + "head_office_country": "Ireland", + "id": "ff698260d45047178a5e8775547815bc", + "activity_industry_forums": "None", + "contact_country": 105, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Dublin", + "info_members": "", + "head": "2382bd341af34ef786218727e8e6c46b", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Old Central Terminal Building, 1st Floor Dublin Airport Dublin Airport", + "activity_inter_groups": "None", + "acronym": "daa", + "activity_eu_legislative": "Air Passenger Rights, Slots, Aviation Security, General Aviation Policy; Environmental Issues, Energy Union, Infrastructure Development", + "registration_date": "2012-04-27T11:56:55.661000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "N/A", + "goals": "To influence the formulation or implementation of policy and decision making processes of the EU Institutions", + "members": 25, + "last_update_date": "2016-03-24T12:49:27.922000Z", + "members_fte": 6.25, + "head_office_phone": "353 1 8141111", + "members_25": 25, + "web_site_url": "http://www.daa.ie/gns/home.aspx", + "sub_category": 21, + "activity_other": "Engagement on Airport Package", + "name": "daa plc", + "created_at": "2015-04-24T02:07:49.792070Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff698260d45047178a5e8775547815bc", + "identification_code": "64031768679-71", + "legal_status": "Operating", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "Participation in BEPA until 2009", + "activity_high_level_groups": "None", + "head_office_lat": 50.01643435, + "updated_at": "2016-03-09T01:52:57.476417Z", + "entity": "40d6d5612dce4849a8422da8868f0570", + "number_of_natural_persons": 9, + "legal": "0ce76701cd904ea082793e5af8572015", + "native_name": null, + "head_office_country": "Germany", + "id": "ff5e850d10a34a8d9e0b6772f68050b2", + "activity_industry_forums": "None", + "contact_country": 82, + "head_office_postbox": "no", + "networking": "SGI Europe Buddhist Association e.V. is a member of Soka Gakkai International, domiciled in Tokyo, Japan", + "members_75": null, + "main_category": 5, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Organisations representing churches and religious communities", + "other_code_of_conduct": null, + "head_office_town": "M\u00f6rfelden-Walldorf", + "info_members": "Matthias Gr\u00f6ninger (chairperson)\r\nHideaki Takahashi (vice (deputy) chairperson)\r\nRobert Samuels (treasurer)\r\nSuzanne Pritchard (member of the board of directors)\r\nJo\u04eblle Troeder (member of the board of directors)\r\nKazuo Fujii (member of the board of directors)", + "head": "9a6e6bafa8a2494fa169854ef3c6757f", + "status": "active", + "main_category_title": "V - Organisations representing churches and religious communities", + "head_office_street": "Nordendstrasse, 38 ", + "activity_inter_groups": "None", + "acronym": "SGI EBA", + "activity_eu_legislative": "We are active in the fields of peace-building through culture and education based on the humanistic principles of Nichiren Buddhism as practised within the SGI movement", + "registration_date": "2014-06-18T14:44:23.915000Z", + "activity_relevant_comm": "We remain open to involvement in activities and projects", + "head_office_post_code": "64546", + "goals": "We are the European branch of the Soka Gakkai International (SGI) a lay Buddhist movement linking together approximately 140,000 members across Europe. (see www.sgi.org for more information).", + "members": 2, + "last_update_date": "2016-03-08T17:23:38.377000Z", + "members_fte": 0.5, + "head_office_phone": "49 610540910", + "members_25": 2, + "web_site_url": null, + "sub_category": 51, + "activity_other": "Our various constituent national organisations are active in interfaith activities and projects aimed at developing tolerance, understanding and cohesion", + "name": "SGI Europe Buddhist Association", + "created_at": "2015-04-24T02:31:28.178188Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff5e850d10a34a8d9e0b6772f68050b2", + "identification_code": "828340313721-55", + "legal_status": "registered association at district court Darmstadt registration number: VR 83170", + "members_100": null, + "head_office_lon": 8.58259536432507, + "structure_members": "http://www.sgi.org/about-us/sgi-facts/sgi-organizations-registered-constituent.html", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-06-04T01:34:25.606548Z", + "entity": "5de9a6d9a53747f6975b9a445620cba3", + "number_of_natural_persons": null, + "legal": "496705ef71014783a6550f088671bb28", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "ff5de8e3812e48caa9147bed2f17c2d3", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": null, + "networking": "Innovate Finance, innovatefinance.com\r\n\r\nFuture 50, futurefifty.com", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "London", + "info_members": "", + "head": "04ac790fa23b4605b043b5fe65caf051", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "186 - 188 City Road London London", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "PSD, AMLD, EMD.", + "registration_date": "2015-06-30T12:34:39.762000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "EC1V 2NT", + "goals": "We\u2019re making the world a bit better by helping to make the financial system fair.\r\n\r\nWhen you transfer money internationally, banks and brokers often hide the real cost so you end up paying more in fees than you thought you were going to.\r\nSometimes this is because of the mark-up they put on the exchange rate or because there are additional fees that they just don\u2019t tell you about upfront.\r\n\r\nAt TransferWise, we\u2019re always completely transparent about the total charge and we make that as low as we can. TransferWise is the cheapest and fairest way of transferring money internationally. We\u2019re making sure that it\u2019s our customers that benefit and not the banking system.", + "members": 2, + "last_update_date": "2016-06-03T14:25:12.105000Z", + "members_fte": 1.25, + "head_office_phone": "44 207 250 3119", + "members_25": 1, + "web_site_url": "http://transferwise.com", + "sub_category": 21, + "activity_other": null, + "name": "TransferWise Ltd", + "created_at": "2015-07-07T00:57:02.084724Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff5de8e3812e48caa9147bed2f17c2d3", + "identification_code": "843309518020-96", + "legal_status": "Corporation", + "members_100": 1, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 41.3989444, + "updated_at": "2015-07-07T00:54:39.651407Z", + "entity": "b710ed84a0714ee6bc51f5802ba6f3d8", + "number_of_natural_persons": null, + "legal": "c008150a897b47e4923badc9114a49f0", + "native_name": null, + "head_office_country": "Spain", + "id": "ff4ffaee340a4512af726094b4ef145d", + "activity_industry_forums": "None", + "contact_country": 209, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Professional consultancies", + "other_code_of_conduct": null, + "head_office_town": "BARCELONA", + "info_members": "", + "head": "c008150a897b47e4923badc9114a49f0", + "status": "inactive", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "LLACUNA 22 ", + "activity_inter_groups": "None", + "acronym": "ENERTIKA", + "activity_eu_legislative": "eficiencia energ\u00e9tica", + "registration_date": "2015-06-12T11:49:46.342000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "08005", + "goals": "Presentar nuestra organizaci\u00f3n.", + "members": 2, + "last_update_date": "2015-06-12T12:04:57.328000Z", + "members_fte": 0.5, + "head_office_phone": "34 030000718", + "members_25": 2, + "web_site_url": "http://WWW.ENERTIKA.COM", + "sub_category": 11, + "activity_other": null, + "name": "INGENIERIA Y SERVICIOS DE EFICIENCIA ENERGETICA S.L.", + "created_at": "2015-06-13T00:49:44.804466Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff4ffaee340a4512af726094b4ef145d", + "identification_code": "580103617803-87", + "legal_status": "SOCIEDAD LIMITADA", + "members_100": null, + "head_office_lon": 2.2017422, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2015-09-30T00:50:25.823162Z", + "entity": "eafd9fd5011c4e9194f1c60a8ae53c5c", + "number_of_natural_persons": null, + "legal": "3cd636d80d5a405e8464dc3f13939169", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "ff3f0e3bc4824efaad758a4b11912dd7", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": null, + "networking": null, + "members_75": 1, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "IAS was until summer 2015 member of the EU Alcohol and Health Forum", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "London", + "info_members": "", + "head": "bab6f1f9af8746ce98bacebaabaef791", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Alliance House, 12 Caxton Street, London ", + "activity_inter_groups": "None", + "acronym": "IAS", + "activity_eu_legislative": "IAS is actively involved at the European level regarding alcohol policies, such as the EU Alcohol Strategy, information to consumers, taxation, marketing and AVMSD, road safety.", + "registration_date": "2015-09-29T13:43:09.123000Z", + "activity_relevant_comm": "IAS is member of the European Alcohol Policy Alliance (Eurocare) and holds one board seat in Eurocare. IAS is involved in European projects and conferences on alcohol policies.", + "head_office_post_code": "SW1H 0QS", + "goals": "Our main work is based around helping to bridge the gap between the scientific evidence on alcohol and the wider public. We want to make all of this evidence accessible to anyone with an interest in alcohol - politicians, reporters, health professionals, students, youth workers and others - and to advocate for effective responses that will reduce the toll of alcohol in society.", + "members": 2, + "last_update_date": "2015-09-29T13:43:39.428000Z", + "members_fte": 1.0, + "head_office_phone": "44 2072224001", + "members_25": 1, + "web_site_url": "http://www.ias.org.uk", + "sub_category": 31, + "activity_other": null, + "name": "Institute of Alcohol Studies (UK)", + "created_at": "2015-09-30T00:50:25.830572Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3f0e3bc4824efaad758a4b11912dd7", + "identification_code": "150480218577-06", + "legal_status": "charity", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-06-23T02:00:02.214006Z", + "entity": "14ac306c727745d4ad0c65b940d53322", + "number_of_natural_persons": 8, + "legal": "aa3f7ce935604bdab7b28d94d1553129", + "native_name": null, + "head_office_country": "Poland", + "id": "ff3e2e39d8424ab198a14c1ed74b92fc", + "activity_industry_forums": "None", + "contact_country": 176, + "head_office_postbox": null, + "networking": "Sie\u0107 Szk\u00f3\u0142 Nauk Politycznych Rady Europy\r\nhttp://www.schoolsofpoliticalstudies.eu/list-of-schools.aspx", + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Warszawa", + "info_members": "", + "head": "b4065d1f8823493092c8a2f7a970cdde", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Oleandr\u00f3w 6 ", + "activity_inter_groups": "None", + "acronym": "EAD", + "activity_eu_legislative": "EU Global Strategy on Foreign and Security Policy", + "registration_date": "2016-06-20T10:41:54.877000Z", + "activity_relevant_comm": "Wsp\u00f3lna Polityka Zagraniczna i Bezpiecze\u0144stwa, aktywno\u015b\u0107 Europejskiej S\u0142u\u017cby Dzia\u0142a\u0144 Zewn\u0119trznych, EU Public Diplomacy, Europejska Polityka S\u0105siedztwa, Partnerstwo Wschodnie", + "head_office_post_code": "00-629", + "goals": "Celem Fundacji jest:\r\na) Kszta\u0142cenie m\u0142odych os\u00f3b zainteresowanych prac\u0105 w administracji krajowej i\r\nzagranicznej ze szczeg\u00f3lnym uwzgl\u0119dnieniem dyplomacji;\r\nb) Promowanie pozytywnego wizerunku Polski w kraju i za granic\u0105;\r\nc) Promowanie wiedzy z zakresu stosunk\u00f3w mi\u0119dzynarodowych;\r\nd) Dzia\u0142alno\u015b\u0107 na rzecz wsp\u00f3\u0142pracy mi\u0119dzynarodowej; \r\n\r\n\r\nFundacja realizuje swoje cele poprzez:\r\na) prowadzenie systematycznych zaj\u0119\u0107 edukacyjnych w charakterze studi\u00f3w;\r\nb) wspieranie i organizowanie kurs\u00f3w, szkole\u0144, seminari\u00f3w, warsztat\u00f3w tematycznych;\r\nc) organizowanie wyk\u0142ad\u00f3w, seminari\u00f3w i konferencji s\u0142u\u017c\u0105cych przekazywaniu wiedzy, gromadzeniu danych i informacji z zakresu dzia\u0142alno\u015bci Fundacji;\r\nd) inicjowanie i wspieranie program\u00f3w szkolenia specjalist\u00f3w r\u00f3\u017cnych dziedzin dla powstaj\u0105cych i rozwijaj\u0105cych si\u0119 instytucji rynku, demokracji i samorz\u0105du lokalnego;\r\ne) inicjowanie i wspieranie program\u00f3w badawczych maj\u0105cych dostarczy\u0107 wiedzy na temat zjawisk spo\u0142ecznych, ekonomicznych i politycznych, w zakresie o\u015bwiaty, kultury, ochrony \u015brodowiska oraz ochrony zdrowia i pomocy spo\u0142ecznej;\r\nf) inicjowanie i wspieranie program\u00f3w i przedsi\u0119wzi\u0119\u0107 podejmowanych przez plac\u00f3wki prowadz\u0105ce dzia\u0142alno\u015b\u0107 naukow\u0105, naukowo-techniczn\u0105, o\u015bwiatow\u0105, kulturaln\u0105\r\n(tak\u017ce kultury fizycznej i sportu), ochrony \u015brodowiska, dobroczynno\u015bci, ochrony zdrowia i pomocy spo\u0142ecznej oraz rehabilitacji zawodowej i spo\u0142ecznej inwalid\u00f3w;\r\ng) inicjowanie i wspieranie kontakt\u00f3w mi\u0119dzynarodowych, s\u0142u\u017c\u0105cych nawi\u0105zywaniu wsp\u00f3\u0142pracy na rzecz rozwoju demokracji, rynku, nauki, kultury, sztuki i o\u015bwiaty oraz\r\nwymiany informacji;\r\nh) Inicjowanie i wspieranie program\u00f3w informacyjnych, s\u0142u\u017c\u0105cych krzewieniu wiedzy na temat mechanizm\u00f3w rynkowych, instytucji demokracji, praw obywatelskich, a tak\u017ce propagowaniu postawy obywatelskiej oraz ekonomicznej samodzielno\u015bci i inicjatywy;\r\ni) wsp\u00f3\u0142prac\u0119 z w\u0142adzami samorz\u0105dowymi, rz\u0105dowymi i organizacjami pozarz\u0105dowymi w zakresie wymienionym w celach dzia\u0142ania Fundacji;\r\nj) organizowanie i koordynowanie pilota\u017cowych program\u00f3w badawczych oraz pracy grup ekspert\u00f3w;\r\nk) wspomaganie spo\u0142ecznych inicjatyw zbie\u017cnych z celami Fundacji;\r\nl) dzia\u0142ania na rzecz interes\u00f3w grup marginalizowanych spo\u0142ecznie; \r\nm) organizowanie i finansowanie bada\u0144 dotycz\u0105cych tworzenia i stosowania prawa;\r\nn) wsp\u00f3\u0142prac\u0119 z osobami, instytucjami krajowymi oraz zagranicznymi prowadz\u0105cymi dzia\u0142alno\u015b\u0107 w zakresie obj\u0119tym dzia\u0142alno\u015bci\u0105 Fundacji; \r\n\r\nOpr\u00f3cz realizacji inicjowanych przez siebie przedsi\u0119wzi\u0119\u0107, Fundacja wsp\u00f3\u0142dzia\u0142a z innymi instytucjami, organizacjami i osobami dla osi\u0105gania wsp\u00f3lnych cel\u00f3w\r\nstatutowych. Wsp\u00f3\u0142dzia\u0142anie to mo\u017ce mie\u0107 charakter wsparcia organizacyjnego, cz\u0119\u015bciowego lub ca\u0142kowitego finansowania przedsi\u0119wzi\u0119cia albo pomocy w uzyskaniu\r\nniezb\u0119dnych funduszy z innych \u017ar\u00f3de\u0142.", + "members": 1, + "last_update_date": "2016-06-22T10:16:21.966000Z", + "members_fte": 0.25, + "head_office_phone": "48 22 205 06 18", + "members_25": 1, + "web_site_url": "http://diplomats.pl/", + "sub_category": 31, + "activity_other": null, + "name": "Europejska Akademia Dyplomacji", + "created_at": "2016-06-21T02:01:15.432879Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3e2e39d8424ab198a14c1ed74b92fc", + "identification_code": "397716222322-37", + "legal_status": "Fundacja", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-09T01:47:07.392731Z", + "entity": "e1f1e5abffaf4f109f38d141ab6191d9", + "number_of_natural_persons": 33, + "legal": "75619ec6640248049fe0c5d325c6e2d0", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "ff3d3f236e4747af9fc50ff58ddb4377", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": "1376", + "networking": "Religious Liberty Partnership", + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Luton", + "info_members": "Vicki Salkin, Advocacy and Development Manager", + "head": "234619020a0847b9be2d14b8b0b4a707", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "PO Box 1376 ", + "activity_inter_groups": "Contact with the Intergroup on Freedom of Religion and Belief and Religious Tolerance, and attendance at hearings and other activities hosted by this Intergroup.", + "acronym": "MEC", + "activity_eu_legislative": "Activities of the EEAS, and the Foreign Affairs and Human Rights Committees, with a special focus on freedom of religion and belief.", + "registration_date": "2014-05-20T13:25:59.855000Z", + "activity_relevant_comm": "Policy implementation of EU Guidelines on the promotion and protection of freedom of religion or belief.", + "head_office_post_code": "LU1 9PP", + "goals": "Middle East Concern is a coalition of Christian organisations and individuals that promotes religious freedom in the Middle East and North Africa region, with a special focus on the Christian communities.", + "members": 1, + "last_update_date": "2016-03-08T10:33:23.289000Z", + "members_fte": 0.25, + "head_office_phone": "44 7408 884 202", + "members_25": 1, + "web_site_url": "http://www.meconcern.org", + "sub_category": 31, + "activity_other": "Engagement with MEPs and the European External Action Service to assist victims in individual cases of Freedom of Religion or Belief violations, and to address underlying causes of these violations in the Middle East and North Africa region.\r\n\r\nParticipation in European Parliament hearings, consultations and other meetings in Brussels relevant to our mandate.", + "name": "Middle East Concern", + "created_at": "2015-04-24T02:28:02.887563Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3d3f236e4747af9fc50ff58ddb4377", + "identification_code": "814728213659-93", + "legal_status": "Not for profit / NGO", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 53.1389846, + "be_office_lat": 50.84595215, + "updated_at": "2016-08-31T01:28:06.743898Z", + "entity": "7486afe72dcd45dc9ed4331ac4b87b84", + "number_of_natural_persons": null, + "legal": "7e9d854f81624abfb77aa212a7a7a9f3", + "native_name": null, + "head_office_country": "Germany", + "id": "ff3855a7d5c54d27947ce7773f6b3357", + "activity_industry_forums": "None", + "contact_country": 82, + "head_office_postbox": null, + "networking": "EWE ist aufgrund seiner Struktur Mitglied in zahlreichen Verb\u00e4nden und Foren, wie u.a. dem Bundesverband der Energie- und Wasserwirtschaft (bdew), dem Verband kommunaler Unternehmen (VKU), dem Bundesverband Breitbandkommunikation (BREKO), dem European Energy Forum (EEF) oder der European Federation of Energy Traders (EFET). \u00dcber die Mitgliedschaften im VKU und bdew, ist EWE im Rahmen des Europ\u00e4ischen Dachverbandes der lokalen und regionalen Energieunternehmen (CEDEC) sowie EURELECTRIC aktiv. Die Mitgliedschaften unterst\u00fctzen die Arbeit der EWE auf Ebene der Europ\u00e4ischen Union.", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "Task Force Smart Grid (EG 3)", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Oldenburg", + "info_members": "Sebastian Schulte-Derne, Beauftragter Br\u00fcssel\r\nDr. Eberhard Meller (Senior Counselor, part-time)", + "head": "61d6249ecf2e4d1cadcc5a37599949e6", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Tirpitzstra\u00dfe, 39 ", + "be_office_post_code": "1040", + "activity_inter_groups": "None", + "acronym": "EWE AG", + "activity_eu_legislative": "Dossiers v.a. der EU-Energiepolitik, u.a. der Rahmen f\u00fcr die Klima- und Energiepolitik 2030, der Vorschlag zur Einrichtung und Anwendung einer Marktstabilit\u00e4tsreserve f\u00fcr das EU-System f\u00fcr den Handel mit Treibhausgasemissionszertifikaten; die Richtlinie \u00fcber M\u00e4rkte f\u00fcr Finanzinstrumente; die Verordnung \u00fcber die Integrit\u00e4t und Transparenz des Energiegro\u00dfhandelsmarktes (REMIT) sowie die Richtlinie \u00fcber den Aufbau der Infrastruktur f\u00fcr alternative Kraftstoffe.", + "registration_date": "2012-02-06T15:22:29.163000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "26122", + "goals": "Als innovativer Dienstleister mit regionaler Ausrichtung ist EWE in den Gesch\u00e4ftsbereichen Energie, Telekommunikation und Informationstechnologie aktiv. \r\n\r\nDie Vereinigung dieser drei Felder unter einem Dach erm\u00f6glicht es dem Konzern intelligente Energiesysteme zu entwickeln und zu betreiben. Durch eine Reihe von innovativen Produkten f\u00fcr Privat- und Gesch\u00e4ftskunden gestaltet EWE auf diese Weise die Energieversorgung der Zukunft mit gr\u00f6\u00dftm\u00f6glicher Nachhaltigkeit, Effizienz und Zuverl\u00e4ssigkeit. \r\n\r\nMit mehr als 9.000 Mitarbeitern und \u00fcber acht Milliarden Euro Umsatz geh\u00f6rt EWE zu den gro\u00dfen Energieunternehmen in Deutschland. Der Konzern mit Hauptsitz im nieders\u00e4chsischen Oldenburg befindet sich \u00fcberwiegend in kommunaler Hand. Er beliefert im Nordwesten Deutschlands, in Brandenburg und auf R\u00fcgen sowie international in Teilen Polens und der T\u00fcrkei rund 1,5 Millionen Kunden mit Strom und Gas sowie rund 700.000 Kunden mit Telekommunikationsdienstleistungen. Hierf\u00fcr betreiben verschiedene Unternehmen der EWE-Gruppe mehr als 180.000 Kilometer Energie- und Telekommunikationsnetze.", + "members": 2, + "last_update_date": "2016-08-30T09:56:43.802000Z", + "members_fte": 2.0, + "head_office_phone": "49 0441 480500", + "be_office_town": "Br\u00fcssel", + "members_25": null, + "web_site_url": "http://www.ewe.com", + "sub_category": 21, + "activity_other": null, + "be_office_postbox": null, + "name": "EWE Aktiengesellschaft", + "be_office_street": "Avenue de Cortenbergh 172 ", + "created_at": "2015-05-07T21:24:27.391519Z", + "be_office_country": "Belgium", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3855a7d5c54d27947ce7773f6b3357", + "identification_code": "00741337988-18", + "legal_status": "Aktiengesellschaft", + "members_100": 2, + "be_office_phone": "32 27438110", + "be_office_lon": 4.39140462709525, + "head_office_lon": 8.1962705, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 52.2070386, + "updated_at": "2016-07-22T01:38:25.249158Z", + "entity": "3ba2dd6a9fa8476287958f7e5c9fe427", + "number_of_natural_persons": null, + "legal": "bb554fda058e4557b86b4aa85f1dee23", + "native_name": null, + "head_office_country": "Poland", + "id": "ff2e01dcb4264779be6aad1d601392b7", + "activity_industry_forums": "None", + "contact_country": 176, + "head_office_postbox": null, + "networking": "Stowarzyszenie Kreatywna Polska www.kreatywnapolska.pl", + "members_75": null, + "main_category": 2, + "members_50": 1, + "activity_expert_groups": "None", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": null, + "head_office_town": "Warszawa", + "info_members": "", + "head": "bb554fda058e4557b86b4aa85f1dee23", + "status": "inactive", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "St\u0119pi\u0144ska 22/30 ", + "activity_inter_groups": "None", + "acronym": "Sygna\u0142", + "activity_eu_legislative": "1. Digital Single Market Strategy\r\n2. Przegl\u0105d Dyrektywy Audiowizualnej\r\n3. Reforma Prawa Autorskiego", + "registration_date": "2015-07-20T14:21:47.515000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "00-739", + "goals": "Stowarzyszenie Sygna\u0142 dzia\u0142a na rzecz poszanowania w\u0142asno\u015bci intelektualnej, praw nadawc\u00f3w, dystrybutor\u00f3w, licencjodawc\u00f3w oraz odbiorc\u00f3w program\u00f3w telewizyjnych i innych tre\u015bci multimedialnych. Jego pocz\u0105tki si\u0119gaj\u0105 2001 roku. Obecnie w sk\u0142ad Stowarzyszenia wchodz\u0105 22 firmy dzia\u0142aj\u0105ce w bran\u017cy medi\u00f3w i telekomunikacji.\r\n\r\nSygna\u0142 skupia swoje dzia\u0142ania wok\u00f3\u0142 propagowania konieczno\u015bci efektywnej ochrony w\u0142asno\u015bci intelektualnej. Realizuje swoje cele poprzez organizacj\u0119 szkole\u0144 i warsztat\u00f3w (w tym dla firm cz\u0142onkowskich oraz organ\u00f3w \u015bcigania), prowadzenie kampanii edukacyjnych, przygotowywanie raport\u00f3w, bada\u0144 i stanowisk na tematy zwi\u0105zane z ochron\u0105 w\u0142asno\u015bci intelektualnej.", + "members": 3, + "last_update_date": "2015-07-20T14:23:51.987000Z", + "members_fte": 1.0, + "head_office_phone": "48 22 848 51 29", + "members_25": 2, + "web_site_url": "http://sygnal.org.pl", + "sub_category": 25, + "activity_other": null, + "name": "Stowarzyszenie Sygna\u0142", + "created_at": "2015-07-21T01:03:37.663899Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2e01dcb4264779be6aad1d601392b7", + "identification_code": "208598218249-90", + "legal_status": "Stowarzyszenie", + "members_100": null, + "head_office_lon": 21.0375624, + "structure_members": "A+E Networks\r\nBBC Worldwide Polska\r\nCyfrowy Polsat\r\nDiscovery Polska\r\nFOX International Channels Poland\r\nHBO Polska\r\nIrdeto\r\nITI Neovision\r\nKino Polska TV\r\nMTG World Ltd\r\nMultimedia Polska\r\nNAGRA\r\nGrupa Onet\r\nSony Pictures Television\r\nTelewizja Polsat\r\nTurner Broadcasting System Poland\r\nTVN\r\nUniversal Networks International\r\nViacom International Media Networks Northern Europe\r\nThe Walt Disney Company (Polska)\r\nZPR Media", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-06-01T01:18:27.242764Z", + "entity": "83e2a7225e074cda8317a50c35512eb0", + "number_of_natural_persons": null, + "legal": "7461491a69334e6f9b4c31663a0a1512", + "native_name": null, + "head_office_country": "Belgium", + "id": "ff2dcae924f245828146c2bb86178fde", + "activity_industry_forums": "None", + "contact_country": 21, + "head_office_postbox": null, + "networking": "NEANT", + "members_75": null, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Self-employed consultants", + "other_code_of_conduct": "Code de conduite de la Sophrologie", + "head_office_town": "BEUZET", + "info_members": "NEANT", + "head": "7461491a69334e6f9b4c31663a0a1512", + "status": "inactive", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "12 A rue des Taillettes ", + "activity_inter_groups": "None", + "acronym": "JYL", + "activity_eu_legislative": "NEANT", + "registration_date": "2014-04-23T14:00:43.123000Z", + "activity_relevant_comm": "NEANT", + "head_office_post_code": "5030", + "goals": "- Pr\u00e9vention des risques fiscaux transnationaux infra et extra europ\u00e9ens\r\n- Exercice des principes de subsidiarit\u00e9 dans les rapports transnationaux sociaux infra et extra europ\u00e9ens", + "members": 1, + "last_update_date": "2015-04-30T17:25:18.573000Z", + "members_fte": 1.0, + "head_office_phone": "32 478693508", + "members_25": null, + "web_site_url": null, + "sub_category": 13, + "activity_other": "NEANT", + "name": "Jacques Y. LEIBOVITCH", + "created_at": "2015-05-07T21:41:48.375353Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2dcae924f245828146c2bb86178fde", + "identification_code": "520259613506-88", + "legal_status": "ind\u00e9pendant", + "members_100": 1, + "head_office_lon": null, + "structure_members": "NEANT", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-01-23T02:47:18.371076Z", + "entity": "dcb5ab6757054a2ba6dab325168c035f", + "number_of_natural_persons": null, + "legal": "e1faea297e1049c4a965b66fec482503", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "ff2c0482fa3f45f2a7f6b111849f11a9", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Self-employed consultants", + "other_code_of_conduct": null, + "head_office_town": "London", + "info_members": "", + "head": "e1faea297e1049c4a965b66fec482503", + "status": "inactive", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "Suite 177 372 Old street 372 Old street", + "activity_inter_groups": "The years I have been lobbying I have mostly followed the ITREE committee", + "acronym": null, + "activity_eu_legislative": "Contribute with input to different committees as ITRE, INTA and the Commission.", + "registration_date": "2015-12-02T12:13:12.207000Z", + "activity_relevant_comm": "Somerco have handed out several draft proposals to the MEPs in the European Parliament and also the Commission. See the list below:\r\nDraft proposals Enhance the competitiveness of EU member states \r\nPart 1 \u2013 Designated tax to science Enhance the competitiveness of EU member states \r\nPart 2 \u2013 Strategy to support the software industry Enhance the competitiveness of EU member states \r\nPart 3 \u2013 Actions to support women in ICT Enhance the competitiveness of EU member states \r\nPart 4 \u2013 Going abroad\u2013Competitive assets Enhance the competitiveness of EU member states \r\nPart 5 \u2013 Business incubators, financial recycling and incentives into reward Enhance the competitiveness of EU member states \r\nPart 6 \u2013 Standardization as a tool to increase competitiveness Enhance the competitiveness of EU member states \r\nPart 7 \u2013 Different types of innovations Enhance the competitiveness of EU member states \r\nPart 8 \u2013 Open source from science to society Enhance the competitiveness of EU member states \r\nPart 9 \u2013 Crowd sourcing and crowd funding Enhance the competitiveness of EU member states \r\nPart 10 \u2013 Green VAT for business Enhance the competitiveness of EU member states \r\nPart 11 \u2013 Keep talent in Europe Enhance the competitiveness of EU member states \r\nPart 12 \u2013 Research leftovers Enhance the competitiveness of EU member states \r\nPart 13 \u2013 Science Parks - Specializations Enhance the competitiveness of EU member states \r\nPart 14 \u2013 Patent trolls Enhance the competitiveness of EU member states \r\nPart 15 \u2013 Science e - Parks Enhance the competitiveness of EU member states \r\nPart 16 \u2013 Expansion options Enhance the competitiveness of EU member states \r\nPart 17 \u2013 The locally developed infrastructure Enhance the competitiveness of EU member states \r\nPart 18 \u2013 Treaty (Knowledge transfer) Enhance the competitiveness of EU member states \r\nPart 19 \u2013 Different types of infrastructure Enhance the competitiveness of EU member states \r\nPart 20 \u2013 Build infrastructure Enhance the competitiveness of EU member states \r\nPart 21 \u2013 Energy infrastructure (elsewhere) (In progress) \r\nEnhance the competitiveness of EU member states \r\nPart 22 \u2013 Quick market entry (Medical) Enhance the competitiveness of EU member states \r\nPart 23 \u2013 Innovation, Commercialization, Growth Enhance the competitiveness of EU member states \r\nPart 24 \u2013 External energy dependencies Enhance the competitiveness of EU member states \r\nPart 25 \u2013 Old innovations Enhance the competitiveness of EU member states \r\nPart 26 \u2013 The non-IP Parks Enhance the competitiveness of EU member states \r\nPart 27 \u2013 Digital inequality into prosperous society Enhance the competitiveness of EU member states \r\nPart 28 \u2013 Digital Magna Carta \u2013 exemptions in privacy Enhance the competitiveness of EU member states \r\nPart 29 \u2013 The networked subsidiarity (In progress) Enhance the competitiveness of EU member states \r\nPart 30 \u2013 Artic route (counterbalance) Enhance the competitiveness of EU member states \r\nOverview \u2013 Old and new key areas in order to increase the competitiveness of the industry (In progress) \r\nInput on threats against information society.", + "head_office_post_code": "EC1V 9LT", + "goals": "Somerco aims to help companies, governmental organisations and persons to succeed with increasing trade. It will create job growth. We do this online and offline.", + "members": 1, + "last_update_date": "2015-12-02T13:05:30.145000Z", + "members_fte": 0.25, + "head_office_phone": "44 7733824711", + "members_25": 1, + "web_site_url": null, + "sub_category": 13, + "activity_other": "I do not know if theer was a mistake doen when it was time for a renewal. Somerco has been registered in the Transparency register a few years before.", + "name": "Somerco", + "created_at": "2015-12-03T02:37:11.313688Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2c0482fa3f45f2a7f6b111849f11a9", + "identification_code": "035508519773-34", + "legal_status": "Limitied company", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "Analysis, monitoring, communicating with DGs officers or theme related sub-sections (e.g. Executive Agencies) or external national services which are commisioned through the European Commission, related to the above mentioned policy fields in relation to the aforementioned ICCM program initiative.", + "head_office_lat": null, + "updated_at": "2016-08-02T02:02:57.823297Z", + "entity": "7a85467a724b420a9943dedced251363", + "number_of_natural_persons": null, + "legal": "bea73ab6ec8c4ae3863da0a781add3ed", + "native_name": null, + "head_office_country": "Germany", + "id": "ff1ddb8bfd7149b6888de10daaac1839", + "activity_industry_forums": "None", + "contact_country": 82, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Self-employed consultants", + "other_code_of_conduct": null, + "head_office_town": "Berlin", + "info_members": "The operational workload including research, communication, administration and further tasks generated through engagement for European Union themes and affairs, should be basically considered as a contribution of the private sector and as such must be basically compensated. In particular, if the workload is rendered by smallest market participants.", + "head": "bea73ab6ec8c4ae3863da0a781add3ed", + "status": "active", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "Borsigstr. 9 ", + "activity_inter_groups": "None", + "acronym": "gmjw", + "activity_eu_legislative": "Culture and Education; Entrepreneurship; External Relations; Neighbouring Policies; Sustainable Development; Coherency; Internal Markets; Research;", + "registration_date": "2016-06-26T20:35:55.739000Z", + "activity_relevant_comm": "Program initiative for Intercivilizational / Intercultural Dialogue, Development and Cooperation (ICCM)\r\n\r\n(in development)", + "head_office_post_code": null, + "goals": "gmjw consulting is dedicated to the diversity of cultures and creativity as the central root and expression of human abilities, social interrelations, identity, intercultural dialogue and exchange, and as a key driving factor for development, progress, wealth, community building, civil societies and stability.\r\n\r\ngmjw consulting develops, contributes and carries out operational and strategic value for content, individuals, projects, organisations and frameworks, in particular - but not limited - for smaller organisations, small business and single professionals.\r\n\r\ngmjw consulting supports the encouragement and promotion of cultural entrepreneurship through strategic and operational contributions such as,\r\n\r\n- assistance and support by accompanied consultancy and mentorship,\r\n- project-oriented or temporarily aligned services and mandates,\r\n- contributions and research for the development and improvement of sector and segment specific policy and advocacy frameworks, and\r\n- commitment for cooperation, networking and community building.", + "members": 1, + "last_update_date": "2016-08-01T10:16:17.440000Z", + "members_fte": 1.0, + "head_office_phone": "49 3020008400", + "members_25": null, + "web_site_url": "http://www.gmjw.net", + "sub_category": 13, + "activity_other": "I am not sure which other group may be right to be selected. As so far, I have dealt only with groups as described above.", + "name": "gmjw consulting - Martin JW Hannemann", + "created_at": "2016-06-28T02:12:32.449916Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1ddb8bfd7149b6888de10daaac1839", + "identification_code": "176405522467-72", + "legal_status": "Sole entrepreneur", + "members_100": 1, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-06-17T02:04:41.455253Z", + "entity": "fa393bf592b94f44ac194ad7275d1227", + "number_of_natural_persons": 15, + "legal": "bf45cc3122db432e98f7dbfbdbaec6a4", + "native_name": null, + "head_office_country": "Hungary", + "id": "ff1754756bf64805831e8bb4c762109a", + "activity_industry_forums": "None", + "contact_country": 99, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Budapest", + "info_members": "", + "head": "78d06c33eef140bb996ab3d36ac294cd", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Damjanich utca 51 ", + "activity_inter_groups": "None", + "acronym": "K-Monitor", + "activity_eu_legislative": "Public procurement, access to information, copyright, anti-corruption, whistleblowing", + "registration_date": "2016-06-15T11:00:43.648000Z", + "activity_relevant_comm": "k-monitor.hu\r\nredflags.eu\r\nk.blog.hu", + "head_office_post_code": "1071", + "goals": "K-Monitor is an anti-corruption grass root NGO founded in 2007. K-Monitor strives against corruption and promotes the transparency of public spending in Hungary. K-Monitor operates open data websites, conducts research and advocates for legal reform. With the contribution of our researches, analyses and recommendations, we aim to challenge and overcome the social indifference to corruption, to raise awareness and disseminate knowledge. We truly believe that information technology can contribute to a more open, more transparent and more democratic way of governing. Therefore K-Monitor develops databases and online tools by which public expenses become trackable, and decision makers can be hold accountable.\r\nPrinciples of our operation are openness, independence and a critical approach.", + "members": 1, + "last_update_date": "2016-06-15T11:01:31.597000Z", + "members_fte": 0.25, + "head_office_phone": "36 17895005", + "members_25": 1, + "web_site_url": "http://k-monitor.hu", + "sub_category": 31, + "activity_other": null, + "name": "K-Monitor K\u00f6zhaszn\u00fa Egyes\u00fclet", + "created_at": "2016-06-17T02:04:41.460045Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1754756bf64805831e8bb4c762109a", + "identification_code": "745636122335-90", + "legal_status": "public benefit assiciation", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2015-10-15T00:50:17.979238Z", + "entity": "068450584cd44111b84e342ff687d122", + "number_of_natural_persons": null, + "legal": "0e3d7caca9d34f01891a740bde3f91b0", + "native_name": null, + "head_office_country": "United States", + "id": "ff1152a3aa88470388abb9d823c78a3d", + "activity_industry_forums": "None", + "contact_country": 234, + "head_office_postbox": null, + "networking": "U.S. Chamber of Commerce", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": "DC Bar Association, Missouri Bar Association", + "head_office_town": "Washinghton DC", + "info_members": "", + "head": "1c3ebb576bba4e1abba16bcdf6e7363b", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "1150 Connecticut Avenue NW 12th Floor 12th Floor", + "activity_inter_groups": "None", + "acronym": "NAMI", + "activity_eu_legislative": "Food safety, trade, food labeling", + "registration_date": "2015-10-14T15:06:35.057000Z", + "activity_relevant_comm": "Nothing in the EU to date.", + "head_office_post_code": "22101", + "goals": "NAMI represents the North American meat industry. Our goal is to be the voice of that industry on public policy issues.", + "members": 1, + "last_update_date": "2015-10-14T15:07:37.490000Z", + "members_fte": 0.25, + "head_office_phone": "1 2025874200", + "members_25": 1, + "web_site_url": "http://meatinstitute.org", + "sub_category": 25, + "activity_other": null, + "name": "North American Meat Institute", + "created_at": "2015-10-15T00:50:17.984658Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1152a3aa88470388abb9d823c78a3d", + "identification_code": "863092419193-72", + "legal_status": "501(c)(6) under U.S. law trade association", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-09T01:49:38.223999Z", + "entity": "7614fa2ab8db4b7db6a7e5f9fa306793", + "number_of_natural_persons": null, + "legal": "d942401f93b84f98848b89a649d2e9b5", + "native_name": null, + "head_office_country": "Spain", + "id": "ff0fb4adff974d2aa5b69dae56b23639", + "activity_industry_forums": "None", + "contact_country": 209, + "head_office_postbox": null, + "networking": "Deloitte Espa\u00f1a es miembro del Instituto de Censores Jurados de Cuentas de Espa\u00f1a.", + "members_75": null, + "main_category": 1, + "members_50": 2, + "activity_expert_groups": "None", + "sub_category_title": "Professional consultancies", + "other_code_of_conduct": "Estamos sujetos a un C\u00f3digo de Conducta interno de nuestra empresa.", + "head_office_town": "Madrid", + "info_members": "", + "head": "6f47b0aa751a49a59be60e8d06db0144", + "status": "active", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "Pza. Pablo Ruiz Picasso, 1, ", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "Contabilidad y Auditor\u00eda\r\nCorporate reporting y gobierno Corporativo\r\nCapital Markets Union\r\nData security, cyber security y protection of business privacy\r\nTax \r\nTrade", + "registration_date": "2015-03-06T10:58:07.343000Z", + "activity_relevant_comm": "Deloitte S.L. realiza actos a nivel nacional de las implicaciones de las pol\u00edticas europeas para las empresas espa\u00f1olas; estos actos son, fundamentalmente relativos a regulaci\u00f3n financiera.", + "head_office_post_code": null, + "goals": "Realizaci\u00f3n de auditor\u00edas de cuentas econ\u00f3micas, financieras, inform\u00e1ticas, de transacciones y saldos en internet, de gesti\u00f3n y operativas para cualquier persona f\u00edsica o jur\u00eddica.\r\nRealizaci\u00f3n de auditor\u00edas y asesor\u00edas medioambientales y consultor\u00eda de gesti\u00f3n de patrimonio y proyectos inmobiliarios, as\u00ed como auditor\u00edas y evaluaciones externas de sistemas de prevenci\u00f3n de riesgos laborales.\r\nRealizaci\u00f3n de consultor\u00edas, asesoramientos, estudios sectoriales o empresariales sobre temas econ\u00f3micos, financieros, contables, sectoriales y de gesti\u00f3n de empresas y, en general, sobre todos aquellos relacionados con la informaci\u00f3n, organizaci\u00f3n y planificaci\u00f3n empresarial y de instituciones, incluidos lo servicios de consultor\u00eda y asesoramiento relativos al dise\u00f1o y mejora de los procesos de gesti\u00f3n, an\u00e1lisis y estructura de costes, valoraci\u00f3n de puestos de trabajo, gesti\u00f3n de recursos humanos, planificaci\u00f3n estrat\u00e9gica, gesti\u00f3n de calidad, gesti\u00f3n medioambiental, mejora del conocimiento organizativo, dise\u00f1o e implementaci\u00f3n de sistemas de informaci\u00f3n, gesti\u00f3n y control de tesorer\u00eda y derivados financieros, exteriorizaci\u00f3n de los departamentos de auditor\u00eda interna y mejora de su funcionamiento, an\u00e1lisis sobre la viabilidad de las empresas, gesti\u00f3n del riesgo inform\u00e1tico y an\u00e1lisis de seguridad en el tratamiento informatizado de datos. o en el tratamiento de informaci\u00f3n en internet y en su transmisi\u00f3n y comunicaci\u00f3n, dise\u00f1o de sistemas de control interno y para el control de riesgos de todo tipo y an\u00e1lisis financieros.\r\nRealizaci\u00f3n de actividades de formaci\u00f3n empresarial y profesional.\r\nPrestaci\u00f3n de servicios en el \u00e1mbito de las Tecnolog\u00edas de la informaci\u00f3n y las Comunicaciones.", + "members": 2, + "last_update_date": "2016-03-08T10:30:27.376000Z", + "members_fte": 1.0, + "head_office_phone": "34 915145000", + "members_25": null, + "web_site_url": "http://www.deloitte.es", + "sub_category": 11, + "activity_other": null, + "name": "Deloitte, S.L.", + "created_at": "2015-04-24T02:29:54.491452Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff0fb4adff974d2aa5b69dae56b23639", + "identification_code": "727712916372-77", + "legal_status": "Sociedad Limitada", + "members_100": null, + "head_office_lon": null, + "structure_members": "Deloitte se refiere a Deloitte Touche Tohmatsu Limited, (private company limited by guarantee, de acuerdo con la legislaci\u00f3n del Reino Unido) y a su red de firmas miembro, cada una de las cuales es una entidad independiente. En www.deloitte.com/about se ofrece una descripci\u00f3n detallada de la estructura legal de Deloitte Touche Tohmatsu Limited y sus firmas miembro.", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "Our experts participate on as needed bases in the activities on various consultative boards within FoodDrinkEurope. \r\nThe positions are then communicated to the relevant part of the EU Commission.", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-02-23T02:22:42.262586Z", + "entity": "81752ab16ef6415b8f9861232e0910a6", + "number_of_natural_persons": null, + "legal": "28df51c6a18a46c69de34b8e5a59f999", + "native_name": null, + "head_office_country": "Croatia", + "id": "ff0cfa2add0f430d8b3d980ee89d9571", + "activity_industry_forums": "None", + "contact_country": 54, + "head_office_postbox": null, + "networking": "FoodDrinksEurope (http://www.fooddrinkeurope.eu/)\r\nCroatian Employers' Association (http://www.hup.hr)\r\nEurocommerce (http://www.eurocommerce.eu/)", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Zagreb", + "info_members": "", + "head": "bd190039cd2f4b1cbd62892aa15bf7d1", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Trg Dra\u017eena Petrovi\u0107a 3 ", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "High Level Forum for a Better Functioning Food Supply Chain\r\n\r\nEU Platform on Added Sugar\r\n\r\nRoadmap for Action of the Food Product Improvement", + "registration_date": "2016-02-22T17:25:57.643000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "10000", + "goals": "The Agrokor Group is the largest privately owned company in Croatia and one of the leading regional companies with almost 60,000 employees and reported consolidated total revenues reaching HRK 49 billion. \r\n\r\nThe Agrokor Group's core businesses are the production and distribution of food and beverages and retail. Corporate members include Jamnica d.d., Croatia's largest producer of mineral water, Ledo d.d., Croatia\u2019s leading ice cream company, Zvijezda d.d., the biggest domestic producer of oil, margarine and mayonnaise, the largest Croatian meat industry PIK Vrbovec d.d., Croatia\u2019s leading agricultural and industrial company Belje, and leading largest retail chains Konzum d.d. and Poslovni sistemi Mercator d.d.\r\n\r\nThe leading positions of Agrokor's companies are reflected in their dominant market shares. Ledo dominates Croatia\u2019s ice cream market. Zvijezda enjoys the biggest share of the margarine and edible oils market, while Jamnica fronts Croatia\u2019s bottled water market. Konzum is Croatia\u2019s biggest retail chain and PIK Vrbovec is the leading meat company in the region. Since it was established 30 years ago, due to a clear business vision, a consistently applied company-wide strategy and well-planned investment projects, Agrokor has grown from a small family-owned company for the production and sale of flowers into the leading food industry and retail group in the region today. \r\n\r\nHaving achieved and strengthened its indisputable leadership in the domestic marketplace by staying ahead of changing market demands, Agrokor is now focused on making a step further in an attempt to realize its long-term strategic goal \u2013 becoming a major player throughout the region.", + "members": 1, + "last_update_date": "2016-02-22T17:26:43.984000Z", + "members_fte": 0.25, + "head_office_phone": "385 1 489 4111", + "members_25": 1, + "web_site_url": "http://www.agrokor.hr", + "sub_category": 21, + "activity_other": null, + "name": "Agrokor d.d.", + "created_at": "2016-02-23T02:22:42.269992Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff0cfa2add0f430d8b3d980ee89d9571", + "identification_code": "656353020755-88", + "legal_status": "Private Company", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "be_office_lat": null, + "updated_at": "2016-07-09T02:07:53.609887Z", + "entity": "f83b1695de83443980ec94b4dba61a34", + "number_of_natural_persons": null, + "legal": "88525dc2b8c54a48bd2ea6918cedf357", + "native_name": null, + "head_office_country": "Italy", + "id": "ff091717a1254ae3876bed6b1042569b", + "activity_industry_forums": "None", + "contact_country": 108, + "head_office_postbox": "1", + "networking": null, + "members_75": null, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Law firms", + "other_code_of_conduct": null, + "head_office_town": "Milano", + "info_members": "", + "head": "88525dc2b8c54a48bd2ea6918cedf357", + "status": "active", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "Via Barozzi ", + "be_office_post_code": "1000", + "activity_inter_groups": "None", + "acronym": "BE", + "activity_eu_legislative": "Iniziative nel campo del diritto doganale e del diritto fiscale dell'Unione europea", + "registration_date": "2016-06-03T18:28:30.515000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "20122", + "goals": "Studio legale", + "members": 2, + "last_update_date": "2016-07-08T10:47:26.957000Z", + "members_fte": 0.5, + "head_office_phone": "39 02771131", + "be_office_town": "Bruxelles", + "members_25": 2, + "web_site_url": "http://www.belex.com", + "sub_category": 12, + "activity_other": null, + "be_office_postbox": "40", + "name": "Bonelli Erede Pappalardo", + "be_office_street": "Square de Meeus ", + "created_at": "2016-06-04T02:01:11.176016Z", + "be_office_country": "Belgium", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff091717a1254ae3876bed6b1042569b", + "identification_code": "205283422093-55", + "legal_status": "Associazione", + "members_100": null, + "be_office_phone": "32 25520070", + "be_office_lon": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 50.8693821, + "updated_at": "2016-04-07T00:34:47.370083Z", + "entity": "fb4895a76cd84605be4c79a469edd40d", + "number_of_natural_persons": 0, + "legal": "24e8db86b4ac4bdaa00596d0dfab2f6b", + "native_name": null, + "head_office_country": "Belgium", + "id": "ff04fc2f7330408a9b773b91b8272c86", + "activity_industry_forums": "None", + "contact_country": 21, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Brussels", + "info_members": "", + "head": "5b5587fb2bd24c618e7063c1ad838edd", + "status": "inactive", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Avenue des Olympiades 2 ", + "activity_inter_groups": "None", + "acronym": "EFQM", + "activity_eu_legislative": "Horizon 2020- \"Peer Learning for Innovation Agencies\"\r\nEFQM Framework for Innovation Agencies\r\nEuropean Commission\r\nEASME/DG ENTR", + "registration_date": "2015-03-10T10:24:10.228000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "1140", + "goals": "EFQM is a not-for-profit membership foundation based in Brussels, Belgium. With around 450 members covering more than 55 countries and 50 sectors, we provide a unique platform for organisations to learn from each other and improve performance. EFQM is the custodian of the EFQM Excellence Model, a business model which is helping over 30,000 organisations around the globe to strive for Sustainable Excellence.", + "members": 1, + "last_update_date": "2015-11-27T11:33:41.380000Z", + "members_fte": 0.25, + "head_office_phone": "32 27753511", + "members_25": 1, + "web_site_url": "http://www.efqm.org/", + "sub_category": 31, + "activity_other": null, + "name": "EFQM European Foundation for Quality Management", + "created_at": "2015-04-24T02:17:54.703255Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/ff04fc2f7330408a9b773b91b8272c86", + "identification_code": "409256516428-39", + "legal_status": "PRIVATE FOUNDATION", + "members_100": null, + "head_office_lon": 4.4046716, + "structure_members": "http://www.efqm.org/about-us/our-community/our-members", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-26T01:43:17.917951Z", + "entity": "a8e3ccebeae64920945fdec5c3e833ff", + "number_of_natural_persons": null, + "legal": "72d60a38b9954adb9f237dbf2abc079d", + "native_name": null, + "head_office_country": "United States", + "id": "fefa665da246486fa7b4d6f8fd7a3c5a", + "activity_industry_forums": "None", + "contact_country": 234, + "head_office_postbox": null, + "networking": "Intertanko, BIMCO", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Vienna", + "info_members": "", + "head": "2dcd8a7c3d234b9993a25c45420f6470", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "8619 Westwood Center Drive Suite 402 Suite 402", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "YCF Maritime promotes the EU shipping sector by offering EU flag solutions to shipowners which combine responsive and efficient customer service with in-depth technical expertise to ensure their vessels comply with EU and international regulatory requirements. \r\n\r\nYCF Maritime is a keen supporter of EU efforts to achieve a level global playing field for the European shipping industry. YCF Maritime is committed to the principle of a level-playing field within the EU, particularly regarding seafarer social security.\r\n\r\nKey organisations served by our group include EuroFlag Services, SeaNet Maritime Services, Liberian International Ship & Corporate Registry, EMA Manning Agency and EMTI.", + "registration_date": "2015-04-17T10:16:37.333000Z", + "activity_relevant_comm": "Concrete EU policy developments followed by YCF Maritime include the EU Review of Maritime Transport Strategy, Maritime Social Package, Recognized Organisations and Ship Emissions.", + "head_office_post_code": "22182", + "goals": "YCF Maritime is an international service provider with experience in a broad range of ocean shipping matters including vessel ownership, management and operations as well as seafarer training, the development of financial structures and regulatory administration and enforcement. Through its regional offices worldwide, YCF Maritime provides shipowners with comprehensive flag administration options on a global scale.", + "members": 1, + "last_update_date": "2016-03-24T16:27:57.827000Z", + "members_fte": 0.25, + "head_office_phone": "1703 2512406", + "members_25": 1, + "web_site_url": "http://www.ycfgroupllc.com/ycfmaritime.html", + "sub_category": 21, + "activity_other": null, + "name": "YCF Maritime LLC", + "created_at": "2015-04-24T02:21:04.322364Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fefa665da246486fa7b4d6f8fd7a3c5a", + "identification_code": "128313216890-32", + "legal_status": "Limited Liability Company", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-08T02:30:33.883110Z", + "entity": "9a583b6ad41c49bcbb93db186b4408d3", + "number_of_natural_persons": null, + "legal": "2b89e910695c400a93951065b2a46a2a", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "feefe27755c74f6ca7df54e5d2b8b733", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "London", + "info_members": "", + "head": "361ba97fdc614463bc751fb184bc7238", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "160 Queen Victoria Street ", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "Key financial markets EU initiatives impacting our clients and funds: \r\nEMIR (European Market Infrastructure Regulation), MiFIR (Markets in Financial Instruments Regulation), CRDIV (Capital Requirements Directive IV), \r\nCMU (Capital Markets Union), \r\nSFTR (The Securities Financing Transactions Regulation), \r\nMMFs (Money Market Fund Regulations), \r\nAIFMD (Alternative Investment Fund Managers Directive), \r\nUCITS (Undertakings for Collective Investments in Transferable Securities), and\r\nFTT (Financial Transaction Tax)", + "registration_date": "2016-03-07T18:47:15.067000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "EC4V 4LA", + "goals": "Insight Investment is a leading global asset manager for institutional investors, particularly pension funds. Our investment management approach is focused on delivering solutions for our clients to provide greater certainty of financial outcome, and a large proportion of our assets is managed on behalf of pension funds in the form of liability risk management mandates, which positions us as one of the largest managers of European pension funds. We closely follow key financial market regulatory initiatives that would have an impact on our clients, and wish to positively engage in this process by providing a voice for European pension funds and other institutional clients.", + "members": 1, + "last_update_date": "2016-03-07T18:47:46.318000Z", + "members_fte": 0.25, + "head_office_phone": "44 207 163 0000", + "members_25": 1, + "web_site_url": "http://www.insightinvestment.com", + "sub_category": 21, + "activity_other": null, + "name": "Insight Investment Management", + "created_at": "2016-03-08T02:30:33.890643Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/feefe27755c74f6ca7df54e5d2b8b733", + "identification_code": "283171720947-78", + "legal_status": "corporation", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 50.68241005, + "updated_at": "2016-03-26T01:46:55.801398Z", + "entity": "af42fc73d40e4bc4bef06e7482ee015d", + "number_of_natural_persons": null, + "legal": "a08398a128c243ac84d2f2bb92299987", + "native_name": null, + "head_office_country": "Germany", + "id": "feed2f70644144b48b258eafe5efae0c", + "activity_industry_forums": "None", + "contact_country": 82, + "head_office_postbox": null, + "networking": "The BfT is a corporate member of the German Association of the Chemical Industry (VCI) and of IFAH (International Federation for Animal Health), the global association of the animal health industry and the European Federation of Animal Health Industry (IFAH Europe).", + "members_75": null, + "main_category": 2, + "members_50": 2, + "activity_expert_groups": "None", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": "Verbandsinterner Kodex", + "head_office_town": "Bonn", + "info_members": "National association which follows and contributes to relevant european development through involvement in the work of the european sector association.", + "head": "a08398a128c243ac84d2f2bb92299987", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Schwertbergerstr., 14 ", + "activity_inter_groups": "None", + "acronym": "BfT", + "activity_eu_legislative": "Review Veterinary Medicines Regulation\r\nReview Medicated Feed Directive\r\nAnimal Health Regulation\r\n[ VERORDNUNG zur \u00c4nderung der Verordnung (EG) Nr. 726/2004 (Bundesrats-Drucksache 418/14) und den weiteren zugeh\u00f6rigen Vorschl\u00e4gen VERORDNUNG des Europ\u00e4ischen Parlamentes und des Rates \u00fcber die Herstellung, das Inverkehrbringen und die Verwendung von Arzneifuttermitteln sowie zur Aufhebung der Richtlinie 90/167/EWG des Rates (Bundesrats-Drucksache 417/14) und Vorschlag f\u00fcr eine VERORDNUNG des Europ\u00e4ischen Parlaments und des Rates \u00fcber Tierarzneimittel (Bundesrats-Drucksache 420/14) ].", + "registration_date": "2014-08-14T18:07:37.568000Z", + "activity_relevant_comm": "Quarterly newsletter Tiergesundheit im Blickpunkt", + "head_office_post_code": "53177", + "goals": "BfT represents the leading manufacturers of veterinary medicines in Germany.The BfT is a corporate member of the German Association of the Chemical Industry (VCI) and of IFAH (International Federation for Animal Health), the global association of the animal health industry and the European Federation of Animal Health Industry (IFAH Europe). Activities include representing members' interests with legislators, government agencies and professional organizations, supporting high standards of animal health and in the entire food production, sharing information with member companies about relevant latest developments, and informing the public about animal health issues and products.", + "members": 3, + "last_update_date": "2016-03-23T15:04:20.288000Z", + "members_fte": 1.25, + "head_office_phone": "49228 318296", + "members_25": 1, + "web_site_url": "http://www.bft-online.de", + "sub_category": 25, + "activity_other": null, + "name": "Bundesverband fuer Tiergesundheit", + "created_at": "2015-04-24T02:23:50.056410Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/feed2f70644144b48b258eafe5efae0c", + "identification_code": "369699114231-49", + "legal_status": "e.V. (Eingetragener Verein)", + "members_100": null, + "head_office_lon": 7.15161428929912, + "structure_members": "http://www.bft-online.de/mitglieder/", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-17T02:10:27.679053Z", + "entity": "f67d92acd4d54ce192d076051a8ceed4", + "number_of_natural_persons": null, + "legal": "57e1b8f4c48d4974afcbf9d5727c3732", + "native_name": null, + "head_office_country": "Denmark", + "id": "feec5f95637641aa83f9fa5076cd259d", + "activity_industry_forums": "None", + "contact_country": 59, + "head_office_postbox": null, + "networking": "Member of the EURELECTRIC (delegated through the Danish Energy Association)", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": null, + "head_office_town": "Frederiksberg", + "info_members": "", + "head": "57e1b8f4c48d4974afcbf9d5727c3732", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Vodroffsvej 59, Frederiksberg C ", + "activity_inter_groups": "None", + "acronym": "DEA", + "activity_eu_legislative": "The Alternative Fuels Infrastructure Directive\r\nCO2 Emisssions from Passenger Cars\r\nClean Power for Transport Initiative\r\nWLTP\r\nJuncker Investment Plan", + "registration_date": "2014-11-04T08:35:59.078000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "DK-1900", + "goals": "The Danish Electric Vehicle Alliance works to promote a better political environment for mass roll out of Electric Vehicles, namely battery powered cars and plug in hybrid electric cars, both in Denmark and the EU.\r\n\r\nWe work through providing political incentives for first movers, promoting infrastructure for EV's and educating the public of the possibilities provided by the new electric technology.\r\n\r\nWe are (as of March 2016) four people in an legally autonomous organisation, physically situated within the Danish Energy Association. We represent 47 member companies, Danish and foreign, along every link of the EV value chain.", + "members": 1, + "last_update_date": "2016-03-10T11:11:03.952000Z", + "members_fte": 0.25, + "head_office_phone": "0045 35300491", + "members_25": 1, + "web_site_url": "http://www.danskelbilalliance.dk", + "sub_category": 25, + "activity_other": null, + "name": "Danish Electric Vehicle Alliance", + "created_at": "2015-04-24T02:30:39.870639Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/feec5f95637641aa83f9fa5076cd259d", + "identification_code": "583653114856-56", + "legal_status": "Dansk Elbil Alliance", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2015-07-29T23:29:35.253216Z", + "entity": "403f6e713ed24f529b2e77e909a8e56f", + "number_of_natural_persons": 13, + "legal": "15ce760f485642eaa70fe3e1e639c017", + "native_name": null, + "head_office_country": "Italy", + "id": "fee73f7916f94c36b2f90c4e1b294a51", + "activity_industry_forums": "None", + "contact_country": 108, + "head_office_postbox": null, + "networking": "UNFCCC\r\nGEF\r\nECOSOC of United Nations\r\nUNODC", + "members_75": null, + "main_category": 3, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "casoria", + "info_members": "", + "head": "15ce760f485642eaa70fe3e1e639c017", + "status": "inactive", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Via E. Fermi, 18 ", + "activity_inter_groups": "None", + "acronym": "APK", + "activity_eu_legislative": "Attivita nel settore dell'ambiente a livello comunitario", + "registration_date": "2012-09-29T23:51:11.196000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "80026", + "goals": "Protection of the environment", + "members": 2, + "last_update_date": "2015-02-05T18:27:53.562000Z", + "members_fte": 2.0, + "head_office_phone": "377 9430541", + "members_25": null, + "web_site_url": null, + "sub_category": 31, + "activity_other": "Attivita'di divugazione delle politiche comunitarie nel campo dell'ambiente", + "name": "Amigos do Protocolo de Kyoto", + "created_at": "2015-04-24T02:08:08.971885Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fee73f7916f94c36b2f90c4e1b294a51", + "identification_code": "82132839724-37", + "legal_status": "ONLUS", + "members_100": 2, + "head_office_lon": null, + "structure_members": "APK Italy(4),\r\nAPK Poland(3),\r\nAPK Hungary(2),\r\nAPK Brazil(4)", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-05-25T01:22:39.194553Z", + "entity": "2188e813114a4dd6ad7e3e6e101a2b76", + "number_of_natural_persons": null, + "legal": "2d44c0cba0794197ac8315978742b9b5", + "native_name": null, + "head_office_country": "Netherlands", + "id": "fedf6bda46184c118b81b1950746a169", + "activity_industry_forums": "None", + "contact_country": 155, + "head_office_postbox": null, + "networking": null, + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Bruinehaar", + "info_members": "Taak bovenop reguliere werkzaamheden.", + "head": "2d44c0cba0794197ac8315978742b9b5", + "status": "inactive", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Driehoeksweg 9 ", + "activity_inter_groups": "None", + "acronym": "Pl. EDV", + "activity_eu_legislative": "N2000 dossier en Vogel- en habitatrichtlijn.", + "registration_date": "2015-05-20T21:53:23.653000Z", + "activity_relevant_comm": "Zienswijzen insturen, inspraakprocedure`s benutten,\r\npolitici en pers informeren, contacten onderhouden en informatie uitwisselen met relevante organisatie`s.", + "head_office_post_code": "7675 TA", + "goals": "Het Platform Engbertsdijksvenen (EDV) behartigd de belangen van haar leden die grenzen aan het N2000 gebied het Engbertsdijksvenen.", + "members": 4, + "last_update_date": "2015-05-20T22:07:08.277000Z", + "members_fte": 1.0, + "head_office_phone": "31 620366362", + "members_25": 4, + "web_site_url": null, + "sub_category": 21, + "activity_other": null, + "name": "Platform Engbertsdijksvenen", + "created_at": "2015-05-24T21:45:42.617388Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fedf6bda46184c118b81b1950746a169", + "identification_code": "020890017437-27", + "legal_status": "geen", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-08-18T02:05:44.790468Z", + "entity": "9e06d7fb83cb44588093ab4606de4b74", + "number_of_natural_persons": null, + "legal": "02b132016c10414581d14ba40423cb57", + "native_name": null, + "head_office_country": "Poland", + "id": "fed7ebf4abe64ddaa22834b1e4776fd7", + "activity_industry_forums": "None", + "contact_country": 176, + "head_office_postbox": null, + "networking": "European Rail Freight Association http://www.erfarail.eu/home.asp", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "IGTL jest cz\u0142onkiem European Rail Freight Association, kt\u00f3re jest podmiotem wsp\u00f3\u0142pracuj\u0105cym z KE", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": null, + "head_office_town": "Warszawa", + "info_members": "", + "head": "02b132016c10414581d14ba40423cb57", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Aleje Jerozolimskie 125/127 ", + "activity_inter_groups": "None", + "acronym": "IGTL", + "activity_eu_legislative": "polityka transportowa, polityka sp\u00f3jno\u015bci, czwarty pakiet kolejowy, TSI, interoperacyjno\u015b\u0107, jednolity europejski obszar kolejowy, sie\u0107 TEN-T, rozporz\u0105dzenie 913/2010 RFC, CEF, RID, CIM,", + "registration_date": "2016-08-17T13:23:06.070000Z", + "activity_relevant_comm": "IGTL wsp\u00f3\u0142pracuje z administracj\u0105 publiczn\u0105 (ministerstwa, Urz\u0105d Transportu Kolejowego, Transportowy Doz\u00f3r Techniczny), reprezentuj\u0105c stanowisko bran\u017cy w szeregu dyskusji na temat regulacji dotycz\u0105cych transportu kolejowego - jest podmiotem bior\u0105cym udzia\u0142 w konsultacjach publicznych w procesie legislacyjnym (ustawy, rozporz\u0105dzenia) oraz dokument\u00f3w i program\u00f3w rz\u0105dowych. IGTL wsp\u00f3\u0142pracuje z narodowym zarz\u0105dc\u0105 infrastruktury, m.in. poprzez udzia\u0142 w Forum Inwestycyjnym (Prezes Izby jest cz\u0142onkiem Prezydium Forum). Izba prowadzi dzia\u0142alno\u015b\u0107 szkoleniow\u0105 dla cz\u0142onk\u00f3w (seminaria, konferencje), obejmuje patronatem najwa\u017cniejsze wydarzenia kolejowe w Polsce i udziela merytorycznego wsparcia poprzez publikacj\u0119 stanowisk i udzia\u0142 przedstawicieli Izby jako prelegent\u00f3w, panelist\u00f3w, itd. Izba prowadzi r\u00f3wnie\u017c dzia\u0142alno\u015bci wydawnicz\u0105 oraz wsp\u00f3\u0142pracuje z bran\u017cowymi wydawcami i pras\u0105, dostarczaj\u0105c stanowisk merytorycznych do publikacji. Izba wsp\u00f3\u0142pracuje z innymi organizacjami bran\u017cowymi w zakresie opisanym powy\u017cej.", + "head_office_post_code": "02-017", + "goals": "Izba Gospodarcza Transportu L\u0105dowego (Land Transport Chamber of Commerce) jest organizacj\u0105 samorz\u0105du gospodarczego dzia\u0142aj\u0105c\u0105 od 1995r. na mocy Ustawy z 30 maja 1989r. o izbach gospodarczych. Izba pe\u0142ni rol\u0119 reprezentanta firm zwi\u0105zanych z transportem kolejowym wobec administracji pa\u0144stwowej oraz r\u00f3\u017cnego rodzaju organizacji krajowych i zagranicznych maj\u0105cych wp\u0142yw na dzia\u0142alno\u015b\u0107 tych przedsi\u0119biorstw. \r\nIzba skupia kilkadziesi\u0105t przedsi\u0119biorstw z ca\u0142ego kraju zwi\u0105zanych z bran\u017c\u0105 kolejow\u0105. Celem Izby jest przede wszystkim ochrona interes\u00f3w firm oraz wyst\u0119powanie do organ\u00f3w administracji pa\u0144stwowej i samorz\u0105dowej z wnioskami i opiniami w zakresie regulacji dotycz\u0105cych szeroko rozumianego transportu kolejowego.\r\nIGTL u\u0142atwia swoim cz\u0142onkom dost\u0119p do wiedzy o aktualnych procesach gospodarczych, szczeg\u00f3lnie tych dotycz\u0105cych transportu i infrastruktury kolejowej. Wsp\u00f3\u0142praca z Izb\u0105 daje cz\u0142onkom mo\u017cliwo\u015b\u0107 bezpo\u015bredniego wp\u0142ywu na kszta\u0142towanie warunk\u00f3w dzia\u0142alno\u015bci i rozwoju transportu kolejowego, a tak\u017ce integruje bran\u017c\u0119 kolejow\u0105.\r\nW IGTL funkcjonuj\u0105 trzy sekcje bran\u017cowe: Przewo\u017anik\u00f3w Kolejowych, Wagon\u00f3w i Spedycji, Budownictwa Kolejowego \r\nCz\u0142onkiem Izby mo\u017ce zosta\u0107 podmiot gospodarczy prowadz\u0105cy dzia\u0142alno\u015b\u0107 gospodarcz\u0105 zgodnie z zasadami etyki zawodowej, z wy\u0142\u0105czeniem os\u00f3b fizycznych prowadz\u0105cych tak\u0105 dzia\u0142alno\u015b\u0107 jako zaj\u0119cie uboczne.", + "members": 8, + "last_update_date": "2016-08-17T13:23:42.060000Z", + "members_fte": 2.75, + "head_office_phone": "48 6540942", + "members_25": 7, + "web_site_url": "http://www.igtl.pl", + "sub_category": 25, + "activity_other": null, + "name": "Izba Gospodarcza Transportu L\u0105dowego", + "created_at": "2016-08-18T02:05:44.797758Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fed7ebf4abe64ddaa22834b1e4776fd7", + "identification_code": "501998723038-69", + "legal_status": "izba gospodarcza", + "members_100": 1, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2015-12-01T02:42:19.420436Z", + "entity": "7abf0809a837474485cfcc035b933d5b", + "number_of_natural_persons": null, + "legal": "5eb772ccd2e04cde9ae9ba82a2b4f16f", + "native_name": null, + "head_office_country": "Italy", + "id": "fed17c17924045649b1e30abb8afd3f3", + "activity_industry_forums": "None", + "contact_country": 108, + "head_office_postbox": null, + "networking": "U.C.E.E. Unione Camere Esperti Europei\r\nwww.ucee.be\r\n\r\nNAFOP National Association Fee Only Planner\r\nwww.nafop.org\r\n\r\nLAPET - Associazione Nazionale Tributaristi\r\nwww.iltributaristalapet.it", + "members_75": 1, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Self-employed consultants", + "other_code_of_conduct": null, + "head_office_town": "Laurenzana", + "info_members": "Dott. Giuseppe Lettini", + "head": "5eb772ccd2e04cde9ae9ba82a2b4f16f", + "status": "active", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "III\u00b0 Vico Vittorio Emanuele 4 ", + "activity_inter_groups": "None", + "acronym": "Studio Lettini", + "activity_eu_legislative": "FINANZIAMENTI EUROPEI\r\nFINANZIAMENTI NAZIONALI\r\nFINANZIAMENTI REGIONALI\r\nINTERNAZIONALIZZAZIONE\r\nSTART UP IMPRESE\r\n\r\nLe attivit\u00e0 che lo studio segue riguardano principalmente il supporto ai clienti nella presentazione di domande di finanziamento per i programmi Horizon 2020, Cosme, Creative Europe.\r\nLa normativa finanziamenti agevolati a favore di piccole medie e grandi imprese coinvolge tutti i settori, da quello industriale a quello turistico, commercio, servizi, agricoltura.\r\n\r\nL\u2019obiettivo \u00e8 lo sviluppo dell\u2019imprenditorialit\u00e0 come avvio d\u2019impresa e/o sviluppo d\u2019impresa", + "registration_date": "2015-11-25T13:36:23.400000Z", + "activity_relevant_comm": "Europrogetti e comunicazioni inerenti i bandi", + "head_office_post_code": "85014", + "goals": "Lo Studio Lettini, offre un servizio di consulenza altamente specializzato nel mondo della finanza pubblica e del controllo di gestione individuando le migliori soluzioni per le innumerevoli necessit\u00e0 finanziarie di ogni tipo di imprese, ente, ecc. Lo studio di consulenza permette e offre soluzioni ed assistenza all\u2019imprenditore o di chi ha un\u2019idea imprenditoriale, attraverso una attenta analisi delle esigenze aziendali, l\u2019individuazione del tipo di finanziamento ottimale, la definizione delle opportune soluzioni organizzative, la creazione del sistema di controllo interno, la compilazione del relativo dossier per una istruttoria in linea con i requisiti legislativi richiesti, \u00e8 sufficiente programmare un qualsiasi intervento aziendale perch\u00e8 l\u2019intervento di Studio Lettini possa far emergere sostanziali utilit\u00e0 per l\u2019impresa.", + "members": 1, + "last_update_date": "2015-11-30T17:01:26.337000Z", + "members_fte": 0.75, + "head_office_phone": "39 3899873276", + "members_25": null, + "web_site_url": "http://www.studiolettini.it", + "sub_category": 13, + "activity_other": "Consulenza in europrogettazione finalizzata al successo nella partecipazione ai bandi europei nella nuova programmazione 2014-2020.", + "name": "Lettini Giuseppe", + "created_at": "2015-12-01T02:42:19.427576Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fed17c17924045649b1e30abb8afd3f3", + "identification_code": "731027919621-04", + "legal_status": "Consulente autonomo", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-07-29T01:38:12.539457Z", + "entity": "a402743e5808426db003a7f1948dbe99", + "number_of_natural_persons": null, + "legal": "1301c3d6c89347b1ab9fc84c383e847e", + "native_name": null, + "head_office_country": "Netherlands", + "id": "fecde2aeabb843f4a8a55a4b3b92de50", + "activity_industry_forums": "None", + "contact_country": 155, + "head_office_postbox": null, + "networking": "cumula", + "members_75": null, + "main_category": 2, + "members_50": 1, + "activity_expert_groups": "None", + "sub_category_title": "Companies & groups", + "other_code_of_conduct": null, + "head_office_town": "Appingedam", + "info_members": "", + "head": "1301c3d6c89347b1ab9fc84c383e847e", + "status": "inactive", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "1ste Industrieweg 16 ", + "activity_inter_groups": "None", + "acronym": "HW", + "activity_eu_legislative": "Klimaat onderwerken, paludicultuur, natuurbeheer", + "registration_date": "2015-07-27T17:07:14.809000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "9902 AM", + "goals": "Wij zijn een bedrijf met als core business the oogst van biomassa en een machinefabriek en we gaan richting een bedrijf in de biobased economie. In die zin bestaan we uit een bedrijf dat een loonbedrijf heeft in de natte gebieden, een machine fabriek en een consultancy.", + "members": 3, + "last_update_date": "2015-07-27T17:35:38.170000Z", + "members_fte": 1.75, + "head_office_phone": "316 36109878", + "members_25": 1, + "web_site_url": "http://hanzewetlands.com", + "sub_category": 21, + "activity_other": null, + "name": "Hanze Wetlands", + "created_at": "2015-07-28T01:16:50.660106Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fecde2aeabb843f4a8a55a4b3b92de50", + "identification_code": "200438718349-72", + "legal_status": "BV", + "members_100": 1, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": 50.8248068, + "updated_at": "2016-03-26T01:19:06.631263Z", + "entity": "e0bb8dab8e9e4bec9a05f9c6a9244b53", + "number_of_natural_persons": 0, + "legal": "3eba6f061ca649d0a4046654ee392dfe", + "native_name": null, + "head_office_country": "Belgium", + "id": "fec76a9f6e224986b3edb9b89e8afad3", + "activity_industry_forums": "None", + "contact_country": 21, + "head_office_postbox": null, + "networking": "WFTO-Europe is one of the five regional branches of the World Fair Trade Organization global network, the other four being: WFTO-Africa/COFTA (the Cooperation for Fair Trade in Africa), WFTO-Asia (World Fair Trade Organization - Asia), WFTO-LA (World Fair Trade Organization \u2013 Latin America) and WFTO Pacific Rim. Together, the five WFTO regional networks come together as regional chapters to represent over 450 members within 75 countries worldwide, that are committed 100% to Fair Trade and its principles.\r\n\r\nFor a detailed view on the WFTO global network, its members and structure, please visit WFTO global website at: http://www.wfto.com/ \r\n\r\nAt European level, WFTO-Europe is a member organization of the Fair Trade Advocacy Office (FTAO) in Brussels. The FTAO is a joint initiative of World Fair Trade Organization \u2013 Europe (WFTO-Europe), Fairtrade International (FLO) and the European Fair Trade Association (EFTA). Through these three networks the FTAO represents an estimate of 2.5 million Fair Trade producers and workers from 70 countries, 24 labelling initiatives, over 500 specialised Fair Trade importers, 4.000 World Shops and more than 100.000 volunteers. The Fair Trade Advocacy Office speaks out for Fair Trade and trade justice with the aim to improve the livelihoods of marginalised producers and workers, especially in the South. \r\n\r\nFor a detailed view on the FTAO\u2019s activities, please visit its website at: http://www.fairtrade-advocacy.org/\r\n\r\nWFTO-Europe is a member of the European inter-network of ethical and responsible initiatives (IRIS, www.irisnetwork.eu), a network create by European networks and organisations, aimed at promoting synergies between them, in order to implement solidarity economy initiatives and to fight against poverty and social exclusion, through a sustainable development and responsible economic approach. IRIS represents different families of responsible economic initiatives: responsible finance (FEBEA, INAISE), Fair Trade (WFTO-Europe), responsible consumption (ASECO), local partnerships between farmers and consumers (URGENCI) and Social Integration Enterprises (ENSIE), with the participation and support of institutional partners (Council of Europe and the Trento Autonomous Province, Italy).\r\n\r\nWFTO-Europe is also a member of the \"Federation of European & International associations based in Belgium\" (FAIB).", + "members_75": null, + "main_category": 3, + "members_50": 1, + "activity_expert_groups": "None", + "sub_category_title": "Non-governmental organisations, platforms and networks and similar", + "other_code_of_conduct": null, + "head_office_town": "Bruxelles", + "info_members": "", + "head": "3eba6f061ca649d0a4046654ee392dfe", + "status": "active", + "main_category_title": "III - Non-governmental organisations", + "head_office_street": "Rue Washington, 40 ", + "activity_inter_groups": "None", + "acronym": "WFTO-Europe", + "activity_eu_legislative": "WFTO-Europe has been following the EU directive on public procurement as well as the main communication and initiatives related to Fair Trade via the Fair Trade Advocacy Office (FTAO).", + "registration_date": "2012-12-18T15:24:10.203000Z", + "activity_relevant_comm": "WFTO-Europe is currently involved in one project at European level: \"Food Smart Cities for Development\".", + "head_office_post_code": "1050", + "goals": "WFTO-Europe, formerly known as IFAT Europe (International Federation for Alternative Trade), represents the European branch of the World Fair Trade Organization (WFTO). It is currently formed by 74 members from 15 countries, amongst them Fair Trade Organizations, Fair Trade Networks and Support Organizations.\r\n\r\nWFTO-Europe stands by WFTO global network\u2019s vision and mission.\r\n\r\nWFTO\u2019s vision: a world in which trade structures and practices have been transformed to work in favour of the poor and promote sustainable development and justice.\r\n \r\nWFTO\u2019s mission: to enable producers to improve their livelihoods and communities through Fair Trade. WFTO will advocate for Fair Trade, ensuring producer voices are heard. The interests of producers, especially small farmers and artisans, should be the main focus in all the policies, governance, structures and decision-making within the World Fair Trade Organization.\r\n\r\nIn its status of regional branch, WFTO-Europe has four strategic aims: \r\n\r\n1.\tSupport the growth and consolidation of WFTO global network.\r\n2.\tBe the reference for Fair Trade in Europe, its representative organ and its voice.\r\n3.\tProtect the noble values of Fair Trade and the 100% commitment to it.\r\n4.\tSupport Fair Trade policies and support the legality of the office.\r\n\r\nIn this respect, one of the most important initiatives of WFTO-Europe is that of facilitating a framework for producer assistance and product development, by:\r\n\r\n- Supporting the monitoring process and WFTO system;\r\n- Serving as a facilitator between members who want to work on producer assistance and product development in a structured and articulated way. Also by facilitating bilateral and multilateral work between them;\r\n- Facilitating and bridging other initiatives and actors working on these key issues (WFTO global and other regional offices, Fair Trade Organizations, other civil society organisations) and informing southern Fair Trade partners on market tendencies in a structured and articulated way. \r\n\r\n\r\nWFTO global network\u2019s aims at large, to which WFTO-Europe shall contribute from a regional level, are to improve the livelihoods of marginalized producers and workers, especially in the South. To change unfair structures of international trade, mainly by means of Fair Trade, to improve and co-ordinate the co-operation of its member organizations and to promote the interests of and provide services to its member organizations and individuals (Source: The Constitution of the World Fair Trade Organization)", + "members": 2, + "last_update_date": "2016-03-23T17:16:01.371000Z", + "members_fte": 1.5, + "head_office_phone": "32 2 640 63 86", + "members_25": null, + "web_site_url": "http://www.wfto-europe.org", + "sub_category": 31, + "activity_other": "Project with local authorities", + "name": "World Fair Trade Organization - Europe", + "created_at": "2015-04-24T01:57:44.867858Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fec76a9f6e224986b3edb9b89e8afad3", + "identification_code": "725848610338-68", + "legal_status": "ASBL - Association Sans But Lucratif (Non-profit association)", + "members_100": 1, + "head_office_lon": 4.36371042912679, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2015-10-30T01:56:56.246954Z", + "entity": "7b46510f154947128c02d05bd79a3358", + "number_of_natural_persons": null, + "legal": "a42346118a234821a8de93818be55c95", + "native_name": null, + "head_office_country": "Switzerland", + "id": "fec607c127414c259cbf2f7f86eb041c", + "activity_industry_forums": "None", + "contact_country": 215, + "head_office_postbox": "CP246", + "networking": null, + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": null, + "head_office_town": "geneve", + "info_members": "", + "head": "4d7fa8f59ace457388b82ac625f9ef2d", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "maison de la paix, WBCSD chemin Eug\u00e8ne Rigot 2 chemin Eug\u00e8ne Rigot 2", + "activity_inter_groups": "None", + "acronym": "WBCSD", + "activity_eu_legislative": "- Climate Change Strategy\r\n- CSR Strategy\r\n- Biodiversity Strategy\r\n- Sustainability Strategy\r\n- Water and Food and Forest Strategy\r\n- Sustainable City Strategy\r\n- Mobility Strategy", + "registration_date": "2015-10-22T14:38:03.288000Z", + "activity_relevant_comm": "WBCSD is directly involved with the EU Commission on above topics via direct meetings and workshops. \r\nIndirectly the organisation is represented by associated organisations such as Econsense or IETA.\r\nIndirectly the organisation is also represented by its about 200 member companies.", + "head_office_post_code": "1211", + "goals": "The World Business Council for Sustainable Development (WBCSD) is a CEO-led organization of forward-thinking companies that galvanizes the global business community to create a sustainable future for business, society and the environment. Through its members, the Council applies its respected thought leadership and effective advocacy to generate constructive solutions and take shared action to drive business action on sustainability in the coming decade and beyond. The WBCSD aims to be the leading voice of business that will support companies in scaling up true value-added business solutions and in creating the conditions where more sustainable companies will succeed and be recognized. \r\n\r\nMembers work together across sectors, geographies and value chains to explore, develop and scale up business solutions to address the world\u2019s most pressing sustainability challenges. Through our work to change the rules of the game and drive measurable impact, WBCSD is emerging as the leading and most compelling sustainable development business voice with multilateral institutions such as the United Nations, World Bank, UNFCCC, as well as with global platforms like the UN Climate Summit and COP negotiations. \r\n\r\nThe WBCSD is unique because its output is developed and road tested by its members. Its comprehensive work program enables it to cover all aspects of sustainable development in business. To deal effectively with all issues the work program is divided into six Action2020 Clusters , sector and value chain projects, systems solutions and capacity building.\r\n\r\nWe also benefit from a Global Network of 65+ independent national and regional business councils and partner organizations, involving thousands of business leaders, two-thirds in developing countries and emerging economies.", + "members": 1, + "last_update_date": "2015-10-29T16:41:14.433000Z", + "members_fte": 0.25, + "head_office_phone": "41 228393100", + "members_25": 1, + "web_site_url": "http://www.wbcsd.org/home.aspx", + "sub_category": 25, + "activity_other": "WBCSD as a non-profit organisation represents the business voice of it's members based on solid scientific evidence to enhance and facilitate the understanding and direction setting between companies and policy making towards a sustainable society. It is important for policy makers to fully understand the actual potential of advanced business solutions as these are crucial for the successful implementation of policies and strategies mentioned above.", + "name": "World Business Council For Sustainable Development", + "created_at": "2015-10-23T00:55:45.123574Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fec607c127414c259cbf2f7f86eb041c", + "identification_code": "074000219282-17", + "legal_status": "association", + "members_100": null, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-03-05T02:28:51.723088Z", + "entity": "7252c50b894d41e9bf6079782137f31f", + "number_of_natural_persons": null, + "legal": "7cf0eca1988e48ee9021a79332f3f7f9", + "native_name": null, + "head_office_country": "Belgium", + "id": "fec5815bf76348d69521bc170db3d77c", + "activity_industry_forums": "None", + "contact_country": 21, + "head_office_postbox": null, + "networking": "Ei ole.", + "members_75": null, + "main_category": 1, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Professional consultancies", + "other_code_of_conduct": null, + "head_office_town": "Bruxelles", + "info_members": "", + "head": "7cf0eca1988e48ee9021a79332f3f7f9", + "status": "active", + "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", + "head_office_street": "Chauss\u00e9e de Charleroi 143, box 3 ", + "activity_inter_groups": "None", + "acronym": null, + "activity_eu_legislative": "S\u00e4hk\u00f6isen viestinn\u00e4n s\u00e4\u00e4ntely, digitaaliset sis\u00e4markkinat.", + "registration_date": "2016-03-04T14:27:41.702000Z", + "activity_relevant_comm": "J\u00e4rjest\u00e4mme tapaamisia ja harjoitamme tiedonvaihtoa EU-vaikuttajien ja s\u00e4hk\u00f6isen viestinn\u00e4n alan yrityksen kesken.", + "head_office_post_code": "B-1060", + "goals": "Petri Lahesmaa Consulting on EU-vaikuttajaviestint\u00e4\u00e4n erikoistunut yritys. Toimialaamme on EU-vaikuttaminen, s\u00e4hk\u00f6isen viestinn\u00e4n s\u00e4\u00e4ntelyasiat ja EU-journalismi. Petri Lahesmaalla on yli 16 vuoden kokemus EU-vaikuttamisesta sek\u00e4 Brysseliss\u00e4 ett\u00e4 Suomessa.", + "members": 1, + "last_update_date": "2016-03-04T14:35:08.052000Z", + "members_fte": 0.25, + "head_office_phone": "32 0476909496", + "members_25": 1, + "web_site_url": null, + "sub_category": 11, + "activity_other": null, + "name": "Petri Lahesmaa Consulting", + "created_at": "2016-03-05T02:28:51.726617Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fec5815bf76348d69521bc170db3d77c", + "identification_code": "344894120925-87", + "legal_status": "Une entreprise personne physique", + "members_100": null, + "head_office_lon": null, + "structure_members": "Ei ole.", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "be_office_lat": 50.84178695, + "updated_at": "2016-03-09T00:56:50.059467Z", + "entity": "44f5ad8112524b51a08db529e8753272", + "number_of_natural_persons": null, + "legal": "f4a66136f5634ec68be50672e3f2dfa4", + "native_name": null, + "head_office_country": "Denmark", + "id": "feac8ce68d3142848d501f1bf11bf46a", + "activity_industry_forums": "None", + "contact_country": 59, + "head_office_postbox": null, + "networking": "European Energy Forum http://www.europeanenergyforum.eu/\r\nEurelectric http://www.eurelectric.org/\r\n\r\nThe Danish Energy Association also participates in a number of informal networks in Brussels.", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": null, + "head_office_town": "Frederiksberg C", + "info_members": "", + "head": "5bde983ce5cd4a8ea7d87b79ece7bbc0", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "Rosen\u00f8rns All\u00e9, 9 ", + "be_office_post_code": "1040", + "activity_inter_groups": "None", + "acronym": "DEA", + "activity_eu_legislative": "Energy Union \r\n2030 governance\r\nETS reform\r\nRetail Energy Market: Action Plan\r\nCapacity Mechanisms", + "registration_date": "2008-09-10T13:21:30.828000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "1970", + "goals": "The Danish Energy Association (Dansk Energi) is a commercial and professional organisation for Danish energy companies. It is managed and financed by its member companies, mainly the electricity companies, and works to secure for them the most free and favourable conditions for competition in order to ensure development, growth and business friendly environment in Denmark.\r\n\r\nThe Danish Energy Association represents the interests of its member companies and thus conducts regular contacts with government, authorities etc. nationally and within the EU.", + "members": 2, + "last_update_date": "2016-03-08T09:35:15.467000Z", + "members_fte": 2.0, + "head_office_phone": "45 35300400", + "be_office_town": "Bruxelles", + "members_25": null, + "web_site_url": "http://www.danskenergi.dk", + "sub_category": 25, + "activity_other": "Energy, climate, transport and environmental policy.", + "be_office_postbox": null, + "name": "Danish Energy Association / Dansk Energi", + "be_office_street": "Rue de la Loi 227 ", + "created_at": "2015-04-24T01:47:43.770790Z", + "be_office_country": "Belgium", + "uri": "http://api.lobbyfacts.eu/api/1/representative/feac8ce68d3142848d501f1bf11bf46a", + "identification_code": "1733114388-50", + "legal_status": "Association", + "members_100": 2, + "be_office_phone": "32 491 25 30 23", + "be_office_lon": 4.38526824209953, + "head_office_lon": null, + "structure_members": "", + "code_of_conduct": "European Commission's code of conduct for interest representative" + }, + { + "activity_consult_committees": "None", + "activity_high_level_groups": "None", + "head_office_lat": null, + "updated_at": "2016-07-01T01:37:23.590560Z", + "entity": "3ed6121ae7b54e19bcc1ce7371a0c218", + "number_of_natural_persons": null, + "legal": "9780c60b13234d82b65e1b32c10bbc08", + "native_name": null, + "head_office_country": "United Kingdom", + "id": "fea393c1edda4541847f16497b8d35a8", + "activity_industry_forums": "None", + "contact_country": 233, + "head_office_postbox": null, + "networking": "ENA is a member of EURELECTRIC, GEODE and Eurogas.", + "members_75": null, + "main_category": 2, + "members_50": null, + "activity_expert_groups": "None", + "sub_category_title": "Trade and business organisations", + "other_code_of_conduct": null, + "head_office_town": "London", + "info_members": "", + "head": "f5f91b124a08449ebefe428af0978bcf", + "status": "active", + "main_category_title": "II - In-house lobbyists and trade/professional associations", + "head_office_street": "6th Floor Dean Bradley House Dean Bradley House", + "activity_inter_groups": "None", + "acronym": "ENA", + "activity_eu_legislative": "Single Energy Market and Future Market Design\r\nDSO/TSO Interface\r\nFlexibility services\r\nNetwork Tariffs\r\nInnovation\r\nFuture role for Gas\r\n2030 climate and energy framework\r\nRenewable Sources of Energy\r\nEnergy Efficiency\r\nLow carbon transport", + "registration_date": "2015-07-22T15:58:48.209000Z", + "activity_relevant_comm": "None", + "head_office_post_code": "SW1P 2AF", + "goals": "Energy Networks Association (ENA) is the voice of the networks, representing the electricity and gas transmission and distribution network operators in the UK and Ireland. Our members are diverse, from major international companies to independent network operators. \r\nENA is actively engaged with government, regulators and the EU Commission as well as producing a wide range of industry standards. The impact of regulation, the influence of European legislation, the challenge of new technologies and the importance of securing our energy future, all against the background of national low carbon targets, are just some issues ENA deals with.", + "members": 1, + "last_update_date": "2016-06-30T15:09:08.535000Z", + "members_fte": 1.0, + "head_office_phone": "44 02077065131", + "members_25": null, + "web_site_url": "http://www.energynetworks.org", + "sub_category": 25, + "activity_other": null, + "name": "Energy Networks Association", + "created_at": "2015-07-23T01:03:14.242168Z", + "uri": "http://api.lobbyfacts.eu/api/1/representative/fea393c1edda4541847f16497b8d35a8", + "identification_code": "247299118284-24", + "legal_status": "Private Limited Company", + "members_100": 1, + "head_office_lon": null, + "structure_members": "http://www.energynetworks.org/", + "code_of_conduct": "European Commission's code of conduct for interest representative" + } + ], + "next": "http://api.lobbyfacts.eu/api/1/representative?limit=50&offset=50", + "limit": 50, + "offset": 0, + "previous": false +} diff --git a/test/inputs/json/misc/77392.json b/test/inputs/json/misc/77392.json index e702f5249..ec2c58d27 100644 --- a/test/inputs/json/misc/77392.json +++ b/test/inputs/json/misc/77392.json @@ -1,202 +1,2401 @@ -[{"designation":"419880 (2011 AH37)","discovery_date":"2011-01-07T00:00:00.000","h_mag":"19.7","i_deg":"9.65","moid_au":"0.035","orbit_class":"Apollo","period_yr":"4.06","pha":"Y","q_au_1":"0.84","q_au_2":"4.26"} -,{"designation":"419624 (2010 SO16)","discovery_date":"2010-09-17T00:00:00.000","h_mag":"20.5","i_deg":"14.52","moid_au":"0.028","orbit_class":"Apollo","period_yr":"1","pha":"Y","q_au_1":"0.93","q_au_2":"1.08"} -,{"designation":"414772 (2010 OC103)","discovery_date":"2010-07-28T00:00:00.000","h_mag":"19","i_deg":"23.11","moid_au":"0.333","orbit_class":"Apollo","period_yr":"1.31","pha":"N","q_au_1":"0.39","q_au_2":"2"} -,{"designation":"414746 (2010 EH20)","discovery_date":"2010-03-06T00:00:00.000","h_mag":"18","i_deg":"23.89","moid_au":"0.268","orbit_class":"Amor","period_yr":"4.24","pha":"N","q_au_1":"1.25","q_au_2":"3.99"} -,{"designation":"407324 (2010 OB101)","discovery_date":"2010-07-18T00:00:00.000","h_mag":"20.7","i_deg":"9.12","moid_au":"0.111","orbit_class":"Apollo","period_yr":"2.06","pha":"N","q_au_1":"0.77","q_au_2":"2.46"} -,{"designation":"398188 (2010 LE15)","discovery_date":"2010-06-03T00:00:00.000","h_mag":"19.5","i_deg":"13.25","moid_au":"0.024","orbit_class":"Aten","period_yr":"0.8","pha":"Y","q_au_1":"0.63","q_au_2":"1.1"} -,{"designation":"395207 (2010 HQ80)","discovery_date":"2010-04-25T00:00:00.000","h_mag":"19.6","i_deg":"27.85","moid_au":"0.007","orbit_class":"Apollo","period_yr":"1.96","pha":"Y","q_au_1":"0.8","q_au_2":"2.34"} -,{"designation":"386847 (2010 LR33)","discovery_date":"2010-06-06T00:00:00.000","h_mag":"18","i_deg":"5.84","moid_au":"0.029","orbit_class":"Apollo","period_yr":"2.2","pha":"Y","q_au_1":"0.91","q_au_2":"2.48"} -,{"designation":"381989 (2010 HR80)","discovery_date":"2010-04-28T00:00:00.000","h_mag":"19.9","i_deg":"26.71","moid_au":"0.104","orbit_class":"Apollo","period_yr":"1.56","pha":"N","q_au_1":"0.68","q_au_2":"2.02"} -,{"designation":"369454 (2010 NZ1)","discovery_date":"2010-07-09T00:00:00.000","h_mag":"19.4","i_deg":"32.78","moid_au":"0.275","orbit_class":"Apollo","period_yr":"1.61","pha":"N","q_au_1":"0.49","q_au_2":"2.26"} -,{"designation":"365449 (2010 NJ1)","discovery_date":"2010-07-03T00:00:00.000","h_mag":"20.3","i_deg":"11.23","moid_au":"0.155","orbit_class":"Aten","period_yr":"0.95","pha":"N","q_au_1":"0.44","q_au_2":"1.49"} -,{"designation":"365424 (2010 KX7)","discovery_date":"2010-05-16T00:00:00.000","h_mag":"21.9","i_deg":"21.49","moid_au":"0.034","orbit_class":"Aten","period_yr":"0.98","pha":"Y","q_au_1":"0.82","q_au_2":"1.16"} -,{"designation":"356394 (2010 QD2)","discovery_date":"2010-08-21T00:00:00.000","h_mag":"17.4","i_deg":"10.64","moid_au":"0.061","orbit_class":"Apollo","period_yr":"2.85","pha":"N","q_au_1":"0.43","q_au_2":"3.59"} -,{"designation":"(2015 HF11)","discovery_date":"2015-04-17T00:00:00.000","h_mag":"19.2","i_deg":"34.89","moid_au":"0.225","orbit_class":"Amor","period_yr":"2.99","pha":"N","q_au_1":"1.22","q_au_2":"2.93"} -,{"designation":"(2015 GK50)","discovery_date":"2015-04-05T00:00:00.000","h_mag":"20.5","i_deg":"19.07","moid_au":"0.237","orbit_class":"Amor","period_yr":"5.39","pha":"N","q_au_1":"1.03","q_au_2":"5.12"} -,{"designation":"(2015 GJ46)","discovery_date":"2015-04-11T00:00:00.000","h_mag":"19.3","i_deg":"18.22","moid_au":"0.238","orbit_class":"Apollo","period_yr":"4.85","pha":"N","q_au_1":"0.67","q_au_2":"5.06"} -,{"designation":"(2015 FT344)","discovery_date":"2015-03-23T00:00:00.000","h_mag":"20.5","i_deg":"12.55","moid_au":"0.203","orbit_class":"Amor","period_yr":"4.07","pha":"N","q_au_1":"1.09","q_au_2":"4.01"} -,{"designation":"(2015 FD341)","discovery_date":"2015-03-27T00:00:00.000","h_mag":"18","i_deg":"20.55","moid_au":"0.124","orbit_class":"Aten","period_yr":"0.93","pha":"N","q_au_1":"0.31","q_au_2":"1.6"} -,{"designation":"(2015 FU332)","discovery_date":"2015-03-31T00:00:00.000","h_mag":"17.3","i_deg":"36.11","moid_au":"0.269","orbit_class":"Apollo","period_yr":"4.27","pha":"N","q_au_1":"0.67","q_au_2":"4.59"} -,{"designation":"(2015 FE120)","discovery_date":"2015-03-23T00:00:00.000","h_mag":"21.1","i_deg":"22.8","moid_au":"0.013","orbit_class":"Apollo","period_yr":"3.38","pha":"Y","q_au_1":"1.01","q_au_2":"3.49"} -,{"designation":"(2015 FY117)","discovery_date":"2015-03-20T00:00:00.000","h_mag":"21.2","i_deg":"24.33","moid_au":"0.15","orbit_class":"Amor","period_yr":"2.87","pha":"N","q_au_1":"1.14","q_au_2":"2.9"} -,{"designation":"(2015 DX198)","discovery_date":"2015-02-17T00:00:00.000","h_mag":"22.1","i_deg":"11.05","moid_au":"0.074","orbit_class":"Amor","period_yr":"2.1","pha":"N","q_au_1":"1.02","q_au_2":"2.25"} -,{"designation":"(2015 BY516)","discovery_date":"2015-01-30T00:00:00.000","h_mag":"22.3","i_deg":"12.71","moid_au":"0.139","orbit_class":"Apollo","period_yr":"3.66","pha":"N","q_au_1":"0.97","q_au_2":"3.77"} -,{"designation":"(2015 AK280)","discovery_date":"2015-01-15T00:00:00.000","h_mag":"21.8","i_deg":"11.37","moid_au":"0.049","orbit_class":"Apollo","period_yr":"4.33","pha":"Y","q_au_1":"0.79","q_au_2":"4.53"} -,{"designation":"(2015 AY245)","discovery_date":"2015-01-14T00:00:00.000","h_mag":"21.2","i_deg":"13.59","moid_au":"0.019","orbit_class":"Apollo","period_yr":"1.2","pha":"Y","q_au_1":"1","q_au_2":"1.25"} -,{"designation":"(2015 AC17)","discovery_date":"2015-01-03T00:00:00.000","h_mag":"19.9","i_deg":"29.25","moid_au":"0.238","orbit_class":"Amor","period_yr":"3.39","pha":"N","q_au_1":"1.22","q_au_2":"3.29"} -,{"designation":"(2014 YR43)","discovery_date":"2014-12-26T00:00:00.000","h_mag":"19.5","i_deg":"26.46","moid_au":"0.303","orbit_class":"Apollo","period_yr":"3.92","pha":"N","q_au_1":"0.97","q_au_2":"4"} -,{"designation":"(2014 YS14)","discovery_date":"2014-12-24T00:00:00.000","h_mag":"21.1","i_deg":"18.29","moid_au":"0.127","orbit_class":"Apollo","period_yr":"3.87","pha":"N","q_au_1":"0.84","q_au_2":"4.09"} -,{"designation":"(2014 XX31)","discovery_date":"2014-12-11T00:00:00.000","h_mag":"17.5","i_deg":"35.78","moid_au":"0.475","orbit_class":"Apollo","period_yr":"4.73","pha":"N","q_au_1":"0.36","q_au_2":"5.28"} -,{"designation":"(2014 XX7)","discovery_date":"2014-12-10T00:00:00.000","h_mag":"19.7","i_deg":"36.71","moid_au":"0.183","orbit_class":"Amor","period_yr":"4.94","pha":"N","q_au_1":"1.17","q_au_2":"4.64"} -,{"designation":"(2014 XQ7)","discovery_date":"2014-12-06T00:00:00.000","h_mag":"20.6","i_deg":"31.05","moid_au":"0.312","orbit_class":"Apollo","period_yr":"4.32","pha":"N","q_au_1":"0.66","q_au_2":"4.65"} -,{"designation":"(2014 VP35)","discovery_date":"2014-11-14T00:00:00.000","h_mag":"23.3","i_deg":"9.17","moid_au":"0.026","orbit_class":"Apollo","period_yr":"1.78","pha":"N","q_au_1":"0.95","q_au_2":"1.98"} -,{"designation":"(2014 UH210)","discovery_date":"2014-10-20T00:00:00.000","h_mag":"21.1","i_deg":"22.06","moid_au":"0.099","orbit_class":"Apollo","period_yr":"4.11","pha":"N","q_au_1":"0.89","q_au_2":"4.25"} -,{"designation":"(2014 UF206)","discovery_date":"2014-10-31T00:00:00.000","h_mag":"18.8","i_deg":"48.05","moid_au":"0.136","orbit_class":"Amor","period_yr":"3.78","pha":"N","q_au_1":"1.11","q_au_2":"3.74"} -,{"designation":"(2014 UG176)","discovery_date":"2014-10-25T00:00:00.000","h_mag":"21.5","i_deg":"16.3","moid_au":"0.16","orbit_class":"Apollo","period_yr":"4.44","pha":"N","q_au_1":"0.78","q_au_2":"4.62"} -,{"designation":"(2014 TJ64)","discovery_date":"2014-10-07T00:00:00.000","h_mag":"21.2","i_deg":"14.91","moid_au":"0.154","orbit_class":"Amor","period_yr":"4.24","pha":"N","q_au_1":"1.05","q_au_2":"4.19"} -,{"designation":"(2014 TF64)","discovery_date":"2014-10-05T00:00:00.000","h_mag":"20.1","i_deg":"52.66","moid_au":"0.131","orbit_class":"Apollo","period_yr":"2.05","pha":"N","q_au_1":"0.94","q_au_2":"2.29"} -,{"designation":"(2014 TW57)","discovery_date":"2014-10-10T00:00:00.000","h_mag":"20.1","i_deg":"6.75","moid_au":"0.062","orbit_class":"Apollo","period_yr":"3.21","pha":"N","q_au_1":"0.57","q_au_2":"3.78"} -,{"designation":"(2014 SR339)","discovery_date":"2014-09-30T00:00:00.000","h_mag":"18.6","i_deg":"29.79","moid_au":"0.036","orbit_class":"Apollo","period_yr":"1.48","pha":"Y","q_au_1":"0.9","q_au_2":"1.69"} -,{"designation":"(2014 RH12)","discovery_date":"2014-09-03T00:00:00.000","h_mag":"23.5","i_deg":"7.23","moid_au":"0.045","orbit_class":"Apollo","period_yr":"3.22","pha":"N","q_au_1":"1.01","q_au_2":"3.35"} -,{"designation":"(2014 QK433)","discovery_date":"2014-08-28T00:00:00.000","h_mag":"18.2","i_deg":"39.22","moid_au":"0.18","orbit_class":"Amor","period_yr":"5.16","pha":"N","q_au_1":"1.19","q_au_2":"4.78"} -,{"designation":"(2014 PP69)","discovery_date":"2014-08-05T00:00:00.000","h_mag":"20","i_deg":"93.63","moid_au":"1.617","orbit_class":"Amor","period_yr":"99.82","pha":"N","q_au_1":"1.25","q_au_2":"41.78"} -,{"designation":"(2014 PF68)","discovery_date":"2014-08-15T00:00:00.000","h_mag":"18.2","i_deg":"22.75","moid_au":"0.17","orbit_class":"Amor","period_yr":"4.81","pha":"N","q_au_1":"1.17","q_au_2":"4.53"} -,{"designation":"(2014 PC68)","discovery_date":"2014-08-08T00:00:00.000","h_mag":"20.4","i_deg":"40.68","moid_au":"0.104","orbit_class":"Amor","period_yr":"1.87","pha":"N","q_au_1":"1.09","q_au_2":"1.95"} -,{"designation":"(2014 OZ1)","discovery_date":"2014-07-20T00:00:00.000","h_mag":"21","i_deg":"18","moid_au":"0.231","orbit_class":"Amor","period_yr":"2.24","pha":"N","q_au_1":"1.08","q_au_2":"2.35"} -,{"designation":"(2014 OY1)","discovery_date":"2014-07-21T00:00:00.000","h_mag":"19.1","i_deg":"23.01","moid_au":"0.042","orbit_class":"Apollo","period_yr":"4.14","pha":"Y","q_au_1":"0.97","q_au_2":"4.19"} -,{"designation":"(2014 NM64)","discovery_date":"2014-07-11T00:00:00.000","h_mag":"22.6","i_deg":"28.78","moid_au":"0.051","orbit_class":"Amor","period_yr":"4.79","pha":"N","q_au_1":"1.06","q_au_2":"4.62"} -,{"designation":"(2014 NE64)","discovery_date":"2014-07-07T00:00:00.000","h_mag":"18.8","i_deg":"41.63","moid_au":"0.39","orbit_class":"Amor","period_yr":"3.06","pha":"N","q_au_1":"1.2","q_au_2":"3.01"} -,{"designation":"(2014 NC64)","discovery_date":"2014-07-13T00:00:00.000","h_mag":"20.2","i_deg":"22.68","moid_au":"0.196","orbit_class":"Apollo","period_yr":"3.23","pha":"N","q_au_1":"0.8","q_au_2":"3.57"} -,{"designation":"(2014 NF3)","discovery_date":"2014-07-01T00:00:00.000","h_mag":"20.8","i_deg":"13.53","moid_au":"0.215","orbit_class":"Apollo","period_yr":"1.48","pha":"N","q_au_1":"0.66","q_au_2":"1.94"} -,{"designation":"C/2014 N3 (NEOWISE)","discovery_date":"2014-07-04T00:00:00.000","i_deg":"61.63","moid_au":"2.888","orbit_class":"Comet","period_yr":"745640.58","pha":"n/a","q_au_1":"3.88","q_au_2":"16441.51"} -,{"designation":"(2014 MQ18)","discovery_date":"2014-06-22T00:00:00.000","h_mag":"15.6","i_deg":"35.09","moid_au":"0.192","orbit_class":"Amor","period_yr":"4.93","pha":"N","q_au_1":"1.16","q_au_2":"4.63"} -,{"designation":"(2014 LQ25)","discovery_date":"2014-06-08T00:00:00.000","h_mag":"20","i_deg":"33.57","moid_au":"0.099","orbit_class":"Apollo","period_yr":"2.88","pha":"N","q_au_1":"0.65","q_au_2":"3.39"} -,{"designation":"P/2014 L2 (NEOWISE)","discovery_date":"2014-06-07T00:00:00.000","i_deg":"5.18","moid_au":"1.224","orbit_class":"Jupiter-family Comet","period_yr":"15.91","pha":"n/a","q_au_1":"2.23","q_au_2":"10.42"} -,{"designation":"(2014 JN57)","discovery_date":"2014-05-11T00:00:00.000","h_mag":"20.6","i_deg":"28.59","moid_au":"0.051","orbit_class":"Amor","period_yr":"1.39","pha":"N","q_au_1":"1.03","q_au_2":"1.45"} -,{"designation":"(2014 JH57)","discovery_date":"2014-05-10T00:00:00.000","h_mag":"16.2","i_deg":"26.54","moid_au":"0.418","orbit_class":"Apollo","period_yr":"6.13","pha":"N","q_au_1":"0.43","q_au_2":"6.27"} -,{"designation":"(2014 JL25)","discovery_date":"2014-05-04T00:00:00.000","h_mag":"23","i_deg":"15.75","moid_au":"0.012","orbit_class":"Apollo","period_yr":"4.94","pha":"N","q_au_1":"1","q_au_2":"4.8"} -,{"designation":"(2014 HJ129)","discovery_date":"2014-04-24T00:00:00.000","h_mag":"21.1","i_deg":"8.44","moid_au":"0.212","orbit_class":"Amor","period_yr":"4.16","pha":"N","q_au_1":"1.13","q_au_2":"4.04"} -,{"designation":"(2014 HQ124)","discovery_date":"2014-04-23T00:00:00.000","h_mag":"18.9","i_deg":"26.37","moid_au":"0.007","orbit_class":"Aten","period_yr":"0.78","pha":"Y","q_au_1":"0.63","q_au_2":"1.07"} -,{"designation":"(2014 EQ49)","discovery_date":"2014-03-15T00:00:00.000","h_mag":"21.8","i_deg":"15.18","moid_au":"0.026","orbit_class":"Apollo","period_yr":"1.23","pha":"Y","q_au_1":"0.91","q_au_2":"1.39"} -,{"designation":"(2014 EN45)","discovery_date":"2014-03-06T00:00:00.000","h_mag":"21.2","i_deg":"14.03","moid_au":"0.156","orbit_class":"Amor","period_yr":"3.82","pha":"N","q_au_1":"1.06","q_au_2":"3.83"} -,{"designation":"(2014 ED)","discovery_date":"2014-03-01T00:00:00.000","h_mag":"19.3","i_deg":"21.77","moid_au":"0.365","orbit_class":"Apollo","period_yr":"1.92","pha":"N","q_au_1":"0.56","q_au_2":"2.53"} -,{"designation":"(2014 CF14)","discovery_date":"2014-02-07T00:00:00.000","h_mag":"18.1","i_deg":"29.41","moid_au":"0.149","orbit_class":"Apollo","period_yr":"2.83","pha":"N","q_au_1":"0.82","q_au_2":"3.17"} -,{"designation":"(2014 CY4)","discovery_date":"2014-02-04T00:00:00.000","h_mag":"21.1","i_deg":"15.02","moid_au":"0.042","orbit_class":"Apollo","period_yr":"4.32","pha":"Y","q_au_1":"0.48","q_au_2":"4.82"} -,{"designation":"C/2014 C3 (NEOWISE)","discovery_date":"2014-02-14T00:00:00.000","i_deg":"151.78","moid_au":"0.866","orbit_class":"Comet","period_yr":"1128.89","pha":"n/a","q_au_1":"1.86","q_au_2":"214.97"} -,{"designation":"(2014 BE63)","discovery_date":"2014-01-23T00:00:00.000","h_mag":"23.2","i_deg":"8.59","moid_au":"0.133","orbit_class":"Apollo","period_yr":"3.08","pha":"N","q_au_1":"0.75","q_au_2":"3.48"} -,{"designation":"(2014 BG60)","discovery_date":"2014-01-25T00:00:00.000","h_mag":"20.1","i_deg":"8.61","moid_au":"0.227","orbit_class":"Amor","period_yr":"5.27","pha":"N","q_au_1":"1.17","q_au_2":"4.89"} -,{"designation":"(2014 AA53)","discovery_date":"2014-01-13T00:00:00.000","h_mag":"19.8","i_deg":"12.45","moid_au":"0.14","orbit_class":"Apollo","period_yr":"3.66","pha":"N","q_au_1":"0.78","q_au_2":"3.97"} -,{"designation":"(2014 AQ46)","discovery_date":"2014-01-02T00:00:00.000","h_mag":"20.1","i_deg":"24.6","moid_au":"0.205","orbit_class":"Amor","period_yr":"3.75","pha":"N","q_au_1":"1.13","q_au_2":"3.7"} -,{"designation":"(2013 YP139)","discovery_date":"2013-12-29T00:00:00.000","h_mag":"21.6","i_deg":"0.82","moid_au":"0.004","orbit_class":"Apollo","period_yr":"3.73","pha":"Y","q_au_1":"0.76","q_au_2":"4.05"} -,{"designation":"(2011 BN59)","discovery_date":"2011-01-29T00:00:00.000","h_mag":"20.4","i_deg":"20.32","moid_au":"0.326","orbit_class":"Amor","period_yr":"5.36","pha":"N","q_au_1":"1.16","q_au_2":"4.97"} -,{"designation":"(2011 BY24)","discovery_date":"2011-01-24T00:00:00.000","h_mag":"22.6","i_deg":"13.95","moid_au":"0.017","orbit_class":"Apollo","period_yr":"2.6","pha":"N","q_au_1":"0.96","q_au_2":"2.83"} -,{"designation":"(2010 YD3)","discovery_date":"2010-12-26T00:00:00.000","h_mag":"20","i_deg":"24.61","moid_au":"0.195","orbit_class":"Amor","period_yr":"4.14","pha":"N","q_au_1":"1.11","q_au_2":"4.05"} -,{"designation":"(2010 YC1)","discovery_date":"2010-12-21T00:00:00.000","h_mag":"21.3","i_deg":"17.66","moid_au":"0.163","orbit_class":"Apollo","period_yr":"1.68","pha":"N","q_au_1":"0.83","q_au_2":"2"} -,{"designation":"(2010 XY82)","discovery_date":"2010-12-14T00:00:00.000","h_mag":"19.1","i_deg":"26.73","moid_au":"0.294","orbit_class":"Amor","period_yr":"3.24","pha":"N","q_au_1":"1.12","q_au_2":"3.26"} -,{"designation":"(2010 XP69)","discovery_date":"2010-12-08T00:00:00.000","h_mag":"21.4","i_deg":"14.6","moid_au":"0.015","orbit_class":"Apollo","period_yr":"1.88","pha":"Y","q_au_1":"1","q_au_2":"2.05"} -,{"designation":"(2010 XZ67)","discovery_date":"2010-12-10T00:00:00.000","h_mag":"19.7","i_deg":"11.84","moid_au":"0.063","orbit_class":"Amor","period_yr":"2.96","pha":"N","q_au_1":"1.04","q_au_2":"3.08"} -,{"designation":"(2010 WE9)","discovery_date":"2010-11-23T00:00:00.000","h_mag":"20","i_deg":"42.12","moid_au":"0.256","orbit_class":"Amor","period_yr":"1.94","pha":"N","q_au_1":"1.17","q_au_2":"1.94"} -,{"designation":"(2010 UB8)","discovery_date":"2010-10-27T00:00:00.000","h_mag":"19.7","i_deg":"30.97","moid_au":"0.194","orbit_class":"Amor","period_yr":"5.15","pha":"N","q_au_1":"1.11","q_au_2":"4.85"} -,{"designation":"(2010 UY6)","discovery_date":"2010-10-23T00:00:00.000","h_mag":"20.1","i_deg":"19.98","moid_au":"0.062","orbit_class":"Amor","period_yr":"4.34","pha":"N","q_au_1":"1.04","q_au_2":"4.28"} -,{"designation":"(2010 TK7)","discovery_date":"2010-10-01T00:00:00.000","h_mag":"20.8","i_deg":"20.89","moid_au":"0.087","orbit_class":"Aten","period_yr":"1","pha":"N","q_au_1":"0.81","q_au_2":"1.19"} -,{"designation":"(2010 QA5)","discovery_date":"2010-08-29T00:00:00.000","h_mag":"22.5","i_deg":"33.45","moid_au":"0.065","orbit_class":"Amor","period_yr":"4.97","pha":"N","q_au_1":"1.07","q_au_2":"4.76"} -,{"designation":"(2010 QE2)","discovery_date":"2010-08-25T00:00:00.000","h_mag":"17.2","i_deg":"64.75","moid_au":"0.056","orbit_class":"Apollo","period_yr":"6.19","pha":"N","q_au_1":"0.88","q_au_2":"5.86"} -,{"designation":"(2010 PY75)","discovery_date":"2010-08-15T00:00:00.000","h_mag":"18.7","i_deg":"31.29","moid_au":"0.243","orbit_class":"Apollo","period_yr":"4.34","pha":"N","q_au_1":"0.6","q_au_2":"4.72"} -,{"designation":"(2010 PU66)","discovery_date":"2010-08-03T00:00:00.000","h_mag":"22.1","i_deg":"18.09","moid_au":"0.148","orbit_class":"Apollo","period_yr":"1.81","pha":"N","q_au_1":"0.91","q_au_2":"2.07"} -,{"designation":"(2010 PW58)","discovery_date":"2010-08-05T00:00:00.000","h_mag":"21.3","i_deg":"14.24","moid_au":"0.021","orbit_class":"Aten","period_yr":"0.84","pha":"Y","q_au_1":"0.7","q_au_2":"1.08"} -,{"designation":"(2010 PP58)","discovery_date":"2010-08-05T00:00:00.000","h_mag":"22.1","i_deg":"4.55","moid_au":"0.014","orbit_class":"Apollo","period_yr":"2.81","pha":"N","q_au_1":"0.99","q_au_2":"3"} -,{"designation":"(2010 PM58)","discovery_date":"2010-08-01T00:00:00.000","h_mag":"20.9","i_deg":"13.6","moid_au":"0.096","orbit_class":"Apollo","period_yr":"1.61","pha":"N","q_au_1":"0.74","q_au_2":"2"} -,{"designation":"P/2010 P4 (WISE)","discovery_date":"2010-08-06T00:00:00.000","i_deg":"24.1","moid_au":"0.854","orbit_class":"Jupiter-family Comet","period_yr":"7.13","pha":"n/a","q_au_1":"1.86","q_au_2":"5.55"} -,{"designation":"(2010 OK126)","discovery_date":"2010-07-30T00:00:00.000","h_mag":"20.7","i_deg":"52.56","moid_au":"0.149","orbit_class":"Amor","period_yr":"2.74","pha":"N","q_au_1":"1.08","q_au_2":"2.83"} -,{"designation":"(2010 OH126)","discovery_date":"2010-07-31T00:00:00.000","h_mag":"21.4","i_deg":"14.38","moid_au":"0.068","orbit_class":"Apollo","period_yr":"2.62","pha":"N","q_au_1":"0.95","q_au_2":"2.85"} -,{"designation":"(2010 ON101)","discovery_date":"2010-07-30T00:00:00.000","h_mag":"20.2","i_deg":"9.31","moid_au":"0.044","orbit_class":"Apollo","period_yr":"2.08","pha":"Y","q_au_1":"0.96","q_au_2":"2.3"} -,{"designation":"(2010 OL101)","discovery_date":"2010-07-27T00:00:00.000","h_mag":"20.4","i_deg":"26.11","moid_au":"0.298","orbit_class":"Amor","period_yr":"4.22","pha":"N","q_au_1":"1.05","q_au_2":"4.17"} -,{"designation":"(2010 OF101)","discovery_date":"2010-07-23T00:00:00.000","h_mag":"19.6","i_deg":"23.37","moid_au":"0.062","orbit_class":"Aten","period_yr":"0.93","pha":"N","q_au_1":"0.64","q_au_2":"1.26"} -,{"designation":"(2010 OD101)","discovery_date":"2010-07-23T00:00:00.000","h_mag":"20.7","i_deg":"15.39","moid_au":"0.19","orbit_class":"Amor","period_yr":"2.06","pha":"N","q_au_1":"1.04","q_au_2":"2.2"} -,{"designation":"(2010 OC101)","discovery_date":"2010-07-22T00:00:00.000","h_mag":"20.7","i_deg":"13.6","moid_au":"0.092","orbit_class":"Apollo","period_yr":"1.35","pha":"N","q_au_1":"0.94","q_au_2":"1.5"} -,{"designation":"(2010 OL100)","discovery_date":"2010-07-28T00:00:00.000","h_mag":"19.6","i_deg":"22.16","moid_au":"0.129","orbit_class":"Apollo","period_yr":"3.4","pha":"N","q_au_1":"0.78","q_au_2":"3.74"} -,{"designation":"(2010 OE22)","discovery_date":"2010-07-17T00:00:00.000","h_mag":"21.3","i_deg":"14.32","moid_au":"0.178","orbit_class":"Apollo","period_yr":"4.28","pha":"N","q_au_1":"0.97","q_au_2":"4.31"} -,{"designation":"(2010 NY65)","discovery_date":"2010-07-14T00:00:00.000","h_mag":"21.4","i_deg":"11.74","moid_au":"0.017","orbit_class":"Aten","period_yr":"1","pha":"Y","q_au_1":"0.63","q_au_2":"1.37"} -,{"designation":"(2010 NG3)","discovery_date":"2010-07-08T00:00:00.000","h_mag":"17.2","i_deg":"26.96","moid_au":"0.127","orbit_class":"Amor","period_yr":"4.2","pha":"N","q_au_1":"1.13","q_au_2":"4.08"} -,{"designation":"(2010 NB2)","discovery_date":"2010-07-10T00:00:00.000","h_mag":"20.3","i_deg":"28.66","moid_au":"0.102","orbit_class":"Apollo","period_yr":"3.01","pha":"N","q_au_1":"0.5","q_au_2":"3.67"} -,{"designation":"(2010 NU1)","discovery_date":"2010-07-06T00:00:00.000","h_mag":"21.2","i_deg":"34.58","moid_au":"0.336","orbit_class":"Apollo","period_yr":"3.74","pha":"N","q_au_1":"0.48","q_au_2":"4.33"} -,{"designation":"(2010 NT1)","discovery_date":"2010-07-04T00:00:00.000","h_mag":"19.4","i_deg":"39.52","moid_au":"0.208","orbit_class":"Amor","period_yr":"1.76","pha":"N","q_au_1":"1.14","q_au_2":"1.78"} -,{"designation":"(2010 NG1)","discovery_date":"2010-07-02T00:00:00.000","h_mag":"20.4","i_deg":"24.74","moid_au":"0.081","orbit_class":"Aten","period_yr":"0.78","pha":"N","q_au_1":"0.57","q_au_2":"1.13"} -,{"designation":"P/2010 N1 (WISE)","discovery_date":"2010-07-05T00:00:00.000","i_deg":"12.88","moid_au":"0.491","orbit_class":"Jupiter-family Comet","period_yr":"5.74","pha":"n/a","q_au_1":"1.49","q_au_2":"4.92"} -,{"designation":"(2010 MA113)","discovery_date":"2010-06-25T00:00:00.000","h_mag":"19.2","i_deg":"39.85","moid_au":"0.081","orbit_class":"Apollo","period_yr":"3.46","pha":"N","q_au_1":"0.89","q_au_2":"3.68"} -,{"designation":"(2010 MZ112)","discovery_date":"2010-06-23T00:00:00.000","h_mag":"19.8","i_deg":"30.18","moid_au":"0.221","orbit_class":"Apollo","period_yr":"2.36","pha":"N","q_au_1":"0.49","q_au_2":"3.06"} -,{"designation":"(2010 MY112)","discovery_date":"2010-06-23T00:00:00.000","h_mag":"21","i_deg":"38.49","moid_au":"0.156","orbit_class":"Apollo","period_yr":"1.1","pha":"N","q_au_1":"0.8","q_au_2":"1.33"} -,{"designation":"(2010 MU112)","discovery_date":"2010-06-30T00:00:00.000","h_mag":"20.7","i_deg":"48.02","moid_au":"0.0002","orbit_class":"Apollo","period_yr":"2.33","pha":"Y","q_au_1":"0.81","q_au_2":"2.71"} -,{"designation":"(2010 MU111)","discovery_date":"2010-06-23T00:00:00.000","h_mag":"18.7","i_deg":"41.53","moid_au":"0.059","orbit_class":"Apollo","period_yr":"3.7","pha":"N","q_au_1":"0.92","q_au_2":"3.86"} -,{"designation":"(2010 MR87)","discovery_date":"2010-06-22T00:00:00.000","h_mag":"19.5","i_deg":"34.98","moid_au":"0.15","orbit_class":"Amor","period_yr":"2.28","pha":"N","q_au_1":"1.06","q_au_2":"2.41"} -,{"designation":"(2010 LU134)","discovery_date":"2010-06-14T00:00:00.000","h_mag":"19.5","i_deg":"27.39","moid_au":"0.146","orbit_class":"Apollo","period_yr":"2.61","pha":"N","q_au_1":"0.86","q_au_2":"2.93"} -,{"designation":"(2010 LV108)","discovery_date":"2010-06-14T00:00:00.000","h_mag":"22.6","i_deg":"5.43","moid_au":"0.006","orbit_class":"Apollo","period_yr":"4.64","pha":"N","q_au_1":"1.01","q_au_2":"4.55"} -,{"designation":"(2010 LU108)","discovery_date":"2010-06-15T00:00:00.000","h_mag":"20","i_deg":"9.51","moid_au":"0.126","orbit_class":"Apollo","period_yr":"3.35","pha":"N","q_au_1":"0.41","q_au_2":"4.08"} -,{"designation":"(2010 LT108)","discovery_date":"2010-06-13T00:00:00.000","h_mag":"19.7","i_deg":"31.87","moid_au":"0.138","orbit_class":"Apollo","period_yr":"1.57","pha":"N","q_au_1":"0.85","q_au_2":"1.85"} -,{"designation":"(2010 LO97)","discovery_date":"2010-06-13T00:00:00.000","h_mag":"18.7","i_deg":"21.65","moid_au":"0.233","orbit_class":"Amor","period_yr":"4.14","pha":"N","q_au_1":"1.22","q_au_2":"3.94"} -,{"designation":"(2010 LF86)","discovery_date":"2010-06-11T00:00:00.000","h_mag":"17.2","i_deg":"13.55","moid_au":"0.318","orbit_class":"Amor","period_yr":"3.73","pha":"N","q_au_1":"1.3","q_au_2":"3.51"} -,{"designation":"(2010 LR68)","discovery_date":"2010-06-08T00:00:00.000","h_mag":"18.3","i_deg":"4.58","moid_au":"0.216","orbit_class":"Amor","period_yr":"5.29","pha":"N","q_au_1":"1.19","q_au_2":"4.88"} -,{"designation":"(2010 LL68)","discovery_date":"2010-06-12T00:00:00.000","h_mag":"22.9","i_deg":"10.48","moid_au":"0.139","orbit_class":"Apollo","period_yr":"2.99","pha":"N","q_au_1":"0.98","q_au_2":"3.16"} -,{"designation":"(2010 LK68)","discovery_date":"2010-06-12T00:00:00.000","h_mag":"22.5","i_deg":"22.08","moid_au":"0.025","orbit_class":"Apollo","period_yr":"1.27","pha":"N","q_au_1":"0.61","q_au_2":"1.73"} -,{"designation":"(2010 LJ68)","discovery_date":"2010-06-11T00:00:00.000","h_mag":"22.7","i_deg":"17.01","moid_au":"0.031","orbit_class":"Apollo","period_yr":"2.32","pha":"N","q_au_1":"0.97","q_au_2":"2.54"} -,{"designation":"(2010 LG64)","discovery_date":"2010-06-05T00:00:00.000","h_mag":"20.2","i_deg":"42.28","moid_au":"0.043","orbit_class":"Amor","period_yr":"4.36","pha":"Y","q_au_1":"1.04","q_au_2":"4.3"} -,{"designation":"(2010 LF64)","discovery_date":"2010-06-03T00:00:00.000","h_mag":"21.6","i_deg":"18.54","moid_au":"0.192","orbit_class":"Amor","period_yr":"1.59","pha":"N","q_au_1":"1.13","q_au_2":"1.59"} -,{"designation":"(2010 LJ61)","discovery_date":"2010-06-08T00:00:00.000","h_mag":"20.9","i_deg":"10.24","moid_au":"0.054","orbit_class":"Apollo","period_yr":"1.12","pha":"N","q_au_1":"0.57","q_au_2":"1.59"} -,{"designation":"(2010 LQ33)","discovery_date":"2010-06-04T00:00:00.000","h_mag":"19.3","i_deg":"24.63","moid_au":"0.228","orbit_class":"Amor","period_yr":"3.42","pha":"N","q_au_1":"1.23","q_au_2":"3.31"} -,{"designation":"(2010 LM14)","discovery_date":"2010-06-02T00:00:00.000","h_mag":"21.5","i_deg":"25.92","moid_au":"0.312","orbit_class":"Apollo","period_yr":"1.17","pha":"N","q_au_1":"0.69","q_au_2":"1.53"} -,{"designation":"(2010 LH14)","discovery_date":"2010-06-02T00:00:00.000","h_mag":"22","i_deg":"4.66","moid_au":"0.054","orbit_class":"Apollo","period_yr":"3.26","pha":"N","q_au_1":"0.93","q_au_2":"3.46"} -,{"designation":"C/2010 L5 (WISE)","discovery_date":"2010-06-14T00:00:00.000","i_deg":"147.05","moid_au":"0.114","orbit_class":"Halley-type Comet*","period_yr":"23.56","pha":"n/a","q_au_1":"0.79","q_au_2":"15.64"} -,{"designation":"C/2010 L4 (WISE)","discovery_date":"2010-06-15T00:00:00.000","i_deg":"102.82","moid_au":"2.53","orbit_class":"Comet","period_yr":"716.78","pha":"n/a","q_au_1":"2.83","q_au_2":"157.36"} -,{"designation":"245P/WISE","discovery_date":"2010-06-02T00:00:00.000","i_deg":"21.09","moid_au":"1.172","orbit_class":"Jupiter-family Comet","period_yr":"8.04","pha":"n/a","q_au_1":"2.14","q_au_2":"5.88"} -,{"designation":"(2010 KY127)","discovery_date":"2010-05-31T00:00:00.000","h_mag":"17","i_deg":"60.29","moid_au":"0.703","orbit_class":"Apollo","period_yr":"3.95","pha":"N","q_au_1":"0.3","q_au_2":"4.7"} -,{"designation":"(2010 KK127)","discovery_date":"2010-05-21T00:00:00.000","h_mag":"20.7","i_deg":"6.94","moid_au":"0.282","orbit_class":"Amor","period_yr":"3.33","pha":"N","q_au_1":"1.28","q_au_2":"3.18"} -,{"designation":"(2010 KZ117)","discovery_date":"2010-05-18T00:00:00.000","h_mag":"19.2","i_deg":"33.17","moid_au":"0.166","orbit_class":"Amor","period_yr":"3.42","pha":"N","q_au_1":"1.1","q_au_2":"3.43"} -,{"designation":"(2010 KB61)","discovery_date":"2010-05-26T00:00:00.000","h_mag":"20.5","i_deg":"44.6","moid_au":"0.051","orbit_class":"Apollo","period_yr":"1.44","pha":"N","q_au_1":"0.98","q_au_2":"1.57"} -,{"designation":"(2010 KY39)","discovery_date":"2010-05-18T00:00:00.000","h_mag":"20.1","i_deg":"25.51","moid_au":"0.303","orbit_class":"Amor","period_yr":"2.3","pha":"N","q_au_1":"1.05","q_au_2":"2.43"} -,{"designation":"C/2010 KW7 (WISE)","discovery_date":"2010-05-16T00:00:00.000","i_deg":"147.06","moid_au":"1.625","orbit_class":"Comet","period_yr":"997.65","pha":"n/a","q_au_1":"2.57","q_au_2":"197.11"} -,{"designation":"317P/WISE","discovery_date":"2010-05-27T00:00:00.000","i_deg":"10.65","moid_au":"0.204","orbit_class":"Jupiter-family Comet","period_yr":"5.01","pha":"n/a","q_au_1":"1.2","q_au_2":"4.65"} -,{"designation":"(2010 KH)","discovery_date":"2010-05-16T00:00:00.000","h_mag":"19.4","i_deg":"14.57","moid_au":"0.367","orbit_class":"Amor","period_yr":"4.59","pha":"N","q_au_1":"1.24","q_au_2":"4.28"} -,{"designation":"(2010 JM151)","discovery_date":"2010-05-14T00:00:00.000","h_mag":"19.6","i_deg":"16.65","moid_au":"0.111","orbit_class":"Apollo","period_yr":"2.21","pha":"N","q_au_1":"0.88","q_au_2":"2.52"} -,{"designation":"(2010 JH87)","discovery_date":"2010-05-11T00:00:00.000","h_mag":"19.6","i_deg":"43.78","moid_au":"0.221","orbit_class":"Apollo","period_yr":"1.91","pha":"N","q_au_1":"0.71","q_au_2":"2.37"} -,{"designation":"(2010 JG87)","discovery_date":"2010-05-11T00:00:00.000","h_mag":"19.1","i_deg":"16.91","moid_au":"0.209","orbit_class":"Apollo","period_yr":"4.59","pha":"N","q_au_1":"0.14","q_au_2":"5.38"} -,{"designation":"(2010 JF87)","discovery_date":"2010-05-11T00:00:00.000","h_mag":"19.2","i_deg":"24.93","moid_au":"0.053","orbit_class":"Apollo","period_yr":"3.8","pha":"N","q_au_1":"0.92","q_au_2":"3.95"} -,{"designation":"(2010 JE87)","discovery_date":"2010-05-10T00:00:00.000","h_mag":"20.8","i_deg":"16.92","moid_au":"0.035","orbit_class":"Aten","period_yr":"0.86","pha":"Y","q_au_1":"0.51","q_au_2":"1.3"} -,{"designation":"(2010 JD87)","discovery_date":"2010-05-07T00:00:00.000","h_mag":"19.2","i_deg":"24.6","moid_au":"0.283","orbit_class":"Apollo","period_yr":"1.71","pha":"N","q_au_1":"0.51","q_au_2":"2.34"} -,{"designation":"P/2010 JC81 (WISE)","discovery_date":"2010-05-10T00:00:00.000","i_deg":"38.69","moid_au":"0.828","orbit_class":"Halley-type Comet*","period_yr":"23.19","pha":"n/a","q_au_1":"1.81","q_au_2":"14.46"} -,{"designation":"(2010 JA43)","discovery_date":"2010-05-04T00:00:00.000","h_mag":"20.9","i_deg":"36.46","moid_au":"0.186","orbit_class":"Amor","period_yr":"2.23","pha":"N","q_au_1":"1.03","q_au_2":"2.38"} -,{"designation":"(2010 JN33)","discovery_date":"2010-05-03T00:00:00.000","h_mag":"20.4","i_deg":"53.15","moid_au":"0.257","orbit_class":"Amor","period_yr":"1.94","pha":"N","q_au_1":"1.11","q_au_2":"2"} -,{"designation":"C/2010 J4 (WISE)","discovery_date":"2010-05-12T00:00:00.000","i_deg":"162.3","moid_au":"0.307","orbit_class":"Parabolic Comet","pha":"n/a","q_au_1":"1.09"} -,{"designation":"(2010 HZ108)","discovery_date":"2010-04-25T00:00:00.000","h_mag":"20.9","i_deg":"22.88","moid_au":"0.108","orbit_class":"Apollo","period_yr":"1.39","pha":"N","q_au_1":"0.99","q_au_2":"1.51"} -,{"designation":"(2010 HX107)","discovery_date":"2010-04-20T00:00:00.000","h_mag":"23.6","i_deg":"3.36","moid_au":"0.014","orbit_class":"Aten","period_yr":"0.72","pha":"N","q_au_1":"0.56","q_au_2":"1.04"} -,{"designation":"(2010 HZ104)","discovery_date":"2010-04-23T00:00:00.000","h_mag":"22.5","i_deg":"20.24","moid_au":"0.029","orbit_class":"Apollo","period_yr":"3.37","pha":"N","q_au_1":"0.97","q_au_2":"3.52"} -,{"designation":"(2010 HW81)","discovery_date":"2010-04-25T00:00:00.000","h_mag":"21.4","i_deg":"12.77","moid_au":"0.117","orbit_class":"Apollo","period_yr":"1.33","pha":"N","q_au_1":"0.33","q_au_2":"2.1"} -,{"designation":"(2010 HD33)","discovery_date":"2010-04-20T00:00:00.000","h_mag":"18.3","i_deg":"24.43","moid_au":"0.372","orbit_class":"Amor","period_yr":"4.24","pha":"N","q_au_1":"1.27","q_au_2":"3.97"} -,{"designation":"(2010 GV147)","discovery_date":"2010-04-14T00:00:00.000","h_mag":"18.5","i_deg":"44.05","moid_au":"0.316","orbit_class":"Aten","period_yr":"0.94","pha":"N","q_au_1":"0.33","q_au_2":"1.59"} -,{"designation":"(2010 GR75)","discovery_date":"2010-04-13T00:00:00.000","h_mag":"19.6","i_deg":"17.78","moid_au":"0.299","orbit_class":"Apollo","period_yr":"2.27","pha":"N","q_au_1":"0.63","q_au_2":"2.82"} -,{"designation":"(2010 GQ75)","discovery_date":"2010-04-12T00:00:00.000","h_mag":"20.2","i_deg":"43.23","moid_au":"0.598","orbit_class":"Apollo","period_yr":"3.79","pha":"N","q_au_1":"0.33","q_au_2":"4.53"} -,{"designation":"(2010 GP67)","discovery_date":"2010-04-11T00:00:00.000","h_mag":"22.3","i_deg":"13.27","moid_au":"0.018","orbit_class":"Apollo","period_yr":"1.18","pha":"N","q_au_1":"0.99","q_au_2":"1.23"} -,{"designation":"(2010 GH65)","discovery_date":"2010-04-10T00:00:00.000","h_mag":"18.8","i_deg":"21.04","moid_au":"0.15","orbit_class":"Amor","period_yr":"4.45","pha":"N","q_au_1":"1.05","q_au_2":"4.36"} -,{"designation":"(2010 GX62)","discovery_date":"2010-04-10T00:00:00.000","h_mag":"20","i_deg":"21.66","moid_au":"0.013","orbit_class":"Apollo","period_yr":"5.07","pha":"Y","q_au_1":"0.87","q_au_2":"5.03"} -,{"designation":"(2010 GW62)","discovery_date":"2010-04-09T00:00:00.000","h_mag":"19.4","i_deg":"32.43","moid_au":"0.44","orbit_class":"Apollo","period_yr":"1.43","pha":"N","q_au_1":"0.54","q_au_2":"2"} -,{"designation":"(2010 GF25)","discovery_date":"2010-04-02T00:00:00.000","h_mag":"19.1","i_deg":"38.49","moid_au":"0.399","orbit_class":"Apollo","period_yr":"1.7","pha":"N","q_au_1":"0.37","q_au_2":"2.47"} -,{"designation":"(2010 GE25)","discovery_date":"2010-04-01T00:00:00.000","h_mag":"20","i_deg":"21.66","moid_au":"0.22","orbit_class":"Amor","period_yr":"2.97","pha":"N","q_au_1":"1.1","q_au_2":"3.03"} -,{"designation":"(2010 GK23)","discovery_date":"2010-04-05T00:00:00.000","h_mag":"19.7","i_deg":"34.77","moid_au":"0.097","orbit_class":"Apollo","period_yr":"4.32","pha":"N","q_au_1":"0.87","q_au_2":"4.43"} -,{"designation":"C/2010 G3 (WISE)","discovery_date":"2010-04-14T00:00:00.000","i_deg":"108.27","moid_au":"4.492","orbit_class":"Comet","period_yr":"135070.2","pha":"n/a","q_au_1":"4.91","q_au_2":"5260.08"} -,{"designation":"C/2010 FB87 (WISE-Garradd)","discovery_date":"2010-03-28T00:00:00.000","i_deg":"107.63","moid_au":"2.538","orbit_class":"Comet","period_yr":"5176.82","pha":"n/a","q_au_1":"2.84","q_au_2":"595.66"} -,{"designation":"(2010 FJ81)","discovery_date":"2010-03-31T00:00:00.000","h_mag":"20.8","i_deg":"42.54","moid_au":"0.128","orbit_class":"Amor","period_yr":"6.82","pha":"N","q_au_1":"1.14","q_au_2":"6.06"} -,{"designation":"(2010 FH81)","discovery_date":"2010-03-31T00:00:00.000","h_mag":"21.6","i_deg":"16.79","moid_au":"0.034","orbit_class":"Apollo","period_yr":"1.36","pha":"Y","q_au_1":"0.97","q_au_2":"1.48"} -,{"designation":"(2010 FG81)","discovery_date":"2010-03-26T00:00:00.000","h_mag":"23.3","i_deg":"7.97","moid_au":"0.019","orbit_class":"Apollo","period_yr":"2.14","pha":"N","q_au_1":"1.01","q_au_2":"2.31"} -,{"designation":"(2010 FC81)","discovery_date":"2010-03-30T00:00:00.000","h_mag":"21.8","i_deg":"1.68","moid_au":"0.027","orbit_class":"Apollo","period_yr":"4.38","pha":"Y","q_au_1":"1.01","q_au_2":"4.35"} -,{"designation":"(2010 FB81)","discovery_date":"2010-03-30T00:00:00.000","h_mag":"21.4","i_deg":"9.48","moid_au":"0.096","orbit_class":"Amor","period_yr":"4.14","pha":"N","q_au_1":"1.02","q_au_2":"4.14"} -,{"designation":"(2010 FA81)","discovery_date":"2010-03-29T00:00:00.000","h_mag":"22.3","i_deg":"15.48","moid_au":"0.035","orbit_class":"Apollo","period_yr":"1.31","pha":"N","q_au_1":"1.01","q_au_2":"1.38"} -,{"designation":"(2010 FZ80)","discovery_date":"2010-03-28T00:00:00.000","h_mag":"20.3","i_deg":"27.34","moid_au":"0.297","orbit_class":"Apollo","period_yr":"4.56","pha":"N","q_au_1":"0.7","q_au_2":"4.8"} -,{"designation":"(2010 FY80)","discovery_date":"2010-03-28T00:00:00.000","h_mag":"19.7","i_deg":"18.81","moid_au":"0.14","orbit_class":"Amor","period_yr":"4.42","pha":"N","q_au_1":"1.05","q_au_2":"4.35"} -,{"designation":"(2010 FX80)","discovery_date":"2010-03-27T00:00:00.000","h_mag":"20.6","i_deg":"36.96","moid_au":"0.535","orbit_class":"Amor","period_yr":"3.19","pha":"N","q_au_1":"1.18","q_au_2":"3.15"} -,{"designation":"(2010 EX119)","discovery_date":"2010-03-13T00:00:00.000","h_mag":"19.4","i_deg":"15.57","moid_au":"0.159","orbit_class":"Apollo","period_yr":"2.63","pha":"N","q_au_1":"0.77","q_au_2":"3.04"} -,{"designation":"(2010 EN44)","discovery_date":"2010-03-12T00:00:00.000","h_mag":"24.3","i_deg":"10.18","moid_au":"0.023","orbit_class":"Apollo","period_yr":"1.22","pha":"N","q_au_1":"0.96","q_au_2":"1.33"} -,{"designation":"(2010 EX11)","discovery_date":"2010-03-03T00:00:00.000","h_mag":"24.1","i_deg":"9.75","moid_au":"0.029","orbit_class":"Aten","period_yr":"0.93","pha":"N","q_au_1":"0.85","q_au_2":"1.06"} -,{"designation":"C/2010 E3 (WISE)","discovery_date":"2010-03-05T00:00:00.000","i_deg":"96.48","moid_au":"1.546","orbit_class":"Parabolic Comet","pha":"n/a","q_au_1":"2.27"} -,{"designation":"(2010 DJ77)","discovery_date":"2010-02-20T00:00:00.000","h_mag":"21.6","i_deg":"24.98","moid_au":"0.05","orbit_class":"Aten","period_yr":"0.93","pha":"Y","q_au_1":"0.75","q_au_2":"1.16"} -,{"designation":"(2010 DH77)","discovery_date":"2010-02-19T00:00:00.000","h_mag":"21.8","i_deg":"34.38","moid_au":"0.146","orbit_class":"Apollo","period_yr":"5.9","pha":"N","q_au_1":"0.95","q_au_2":"5.58"} -,{"designation":"(2010 DG77)","discovery_date":"2010-02-19T00:00:00.000","h_mag":"21.4","i_deg":"14.81","moid_au":"0.009","orbit_class":"Apollo","period_yr":"3.02","pha":"Y","q_au_1":"0.96","q_au_2":"3.22"} -,{"designation":"(2010 DM56)","discovery_date":"2010-02-19T00:00:00.000","h_mag":"19.9","i_deg":"25.61","moid_au":"0.006","orbit_class":"Apollo","period_yr":"1.49","pha":"Y","q_au_1":"0.92","q_au_2":"1.69"} -,{"designation":"(2010 DJ56)","discovery_date":"2010-02-23T00:00:00.000","h_mag":"19.3","i_deg":"34.84","moid_au":"0.028","orbit_class":"Apollo","period_yr":"1.4","pha":"Y","q_au_1":"0.94","q_au_2":"1.56"} -,{"designation":"(2010 DH56)","discovery_date":"2010-02-20T00:00:00.000","h_mag":"20.3","i_deg":"33.67","moid_au":"0.333","orbit_class":"Apollo","period_yr":"3.35","pha":"N","q_au_1":"0.97","q_au_2":"3.51"} -,{"designation":"C/2010 DG56 (WISE)","discovery_date":"2010-02-18T00:00:00.000","i_deg":"160.42","moid_au":"0.65","orbit_class":"Comet","period_yr":"555.03","pha":"n/a","q_au_1":"1.59","q_au_2":"133.48"} -,{"designation":"(2010 DK34)","discovery_date":"2010-02-20T00:00:00.000","h_mag":"20.4","i_deg":"27.34","moid_au":"0.333","orbit_class":"Apollo","period_yr":"4.54","pha":"N","q_au_1":"0.65","q_au_2":"4.83"} -,{"designation":"(2010 DM21)","discovery_date":"2010-02-16T00:00:00.000","h_mag":"20.2","i_deg":"21.15","moid_au":"0.26","orbit_class":"Apollo","period_yr":"4.85","pha":"N","q_au_1":"0.98","q_au_2":"4.74"} -,{"designation":"C/2010 D4 (WISE)","discovery_date":"2010-02-28T00:00:00.000","i_deg":"105.66","moid_au":"6.373","orbit_class":"Comet","period_yr":"520.06","pha":"n/a","q_au_1":"7.15","q_au_2":"122.19"} -,{"designation":"C/2010 D3 (WISE)","discovery_date":"2010-02-26T00:00:00.000","i_deg":"76.39","moid_au":"3.586","orbit_class":"Comet","period_yr":"1254179.62","pha":"n/a","q_au_1":"4.25","q_au_2":"23255.11"} -,{"designation":"P/2010 D2 (WISE)","discovery_date":"2010-02-25T00:00:00.000","i_deg":"57.18","moid_au":"2.945","orbit_class":"Jupiter-family Comet*","period_yr":"17.3","pha":"n/a","q_au_1":"3.66","q_au_2":"9.72"} -,{"designation":"P/2010 D1 (WISE)","discovery_date":"2010-02-17T00:00:00.000","i_deg":"9.65","moid_au":"1.683","orbit_class":"Jupiter-family Comet","period_yr":"8.45","pha":"n/a","q_au_1":"2.67","q_au_2":"5.63"} -,{"designation":"(2010 CN141)","discovery_date":"2010-02-14T00:00:00.000","h_mag":"22.4","i_deg":"23.8","moid_au":"0.06","orbit_class":"Apollo","period_yr":"1.87","pha":"N","q_au_1":"0.91","q_au_2":"2.12"} -,{"designation":"(2010 CP140)","discovery_date":"2010-02-13T00:00:00.000","h_mag":"19.5","i_deg":"14.47","moid_au":"0.097","orbit_class":"Apollo","period_yr":"2.62","pha":"N","q_au_1":"0.88","q_au_2":"2.92"} -,{"designation":"(2010 CC55)","discovery_date":"2010-02-11T00:00:00.000","h_mag":"22.5","i_deg":"6.78","moid_au":"0.079","orbit_class":"Apollo","period_yr":"1.92","pha":"N","q_au_1":"0.82","q_au_2":"2.27"} -,{"designation":"(2010 CA55)","discovery_date":"2010-02-05T00:00:00.000","h_mag":"21.3","i_deg":"58.85","moid_au":"0.151","orbit_class":"Apollo","period_yr":"12.13","pha":"N","q_au_1":"0.67","q_au_2":"9.89"} -,{"designation":"(2010 CH18)","discovery_date":"2010-02-09T00:00:00.000","h_mag":"19","i_deg":"27.15","moid_au":"0.333","orbit_class":"Amor","period_yr":"4.21","pha":"N","q_au_1":"1.12","q_au_2":"4.09"} -,{"designation":"(2010 CG18)","discovery_date":"2010-02-06T00:00:00.000","h_mag":"20.8","i_deg":"10.15","moid_au":"0.13","orbit_class":"Amor","period_yr":"1.73","pha":"N","q_au_1":"1.11","q_au_2":"1.76"} -,{"designation":"(2010 CO1)","discovery_date":"2010-02-01T00:00:00.000","h_mag":"21.5","i_deg":"24.03","moid_au":"0.023","orbit_class":"Apollo","period_yr":"1.02","pha":"Y","q_au_1":"0.79","q_au_2":"1.23"} -,{"designation":"P/2010 B2 (WISE)","discovery_date":"2010-01-22T00:00:00.000","i_deg":"8.93","moid_au":"0.63","orbit_class":"Encke-type Comet","period_yr":"5.49","pha":"n/a","q_au_1":"1.62","q_au_2":"4.6"} -,{"designation":"(2010 AU118)","discovery_date":"2010-01-13T00:00:00.000","h_mag":"17.7","i_deg":"43.73","moid_au":"0.147","orbit_class":"Amor","period_yr":"2.06","pha":"N","q_au_1":"1.13","q_au_2":"2.12"} -,{"designation":"(2010 AG79)","discovery_date":"2010-01-13T00:00:00.000","h_mag":"19.9","i_deg":"32.96","moid_au":"0.244","orbit_class":"Amor","period_yr":"4.95","pha":"N","q_au_1":"1.22","q_au_2":"4.59"} -,{"designation":"(2010 AB78)","discovery_date":"2010-01-12T00:00:00.000","h_mag":"18.3","i_deg":"33.26","moid_au":"0.206","orbit_class":"Amor","period_yr":"3.38","pha":"N","q_au_1":"1.02","q_au_2":"3.49"}] +[ + { + "designation": "419880 (2011 AH37)", + "discovery_date": "2011-01-07T00:00:00.000Z", + "h_mag": "19.7", + "i_deg": "9.65", + "moid_au": "0.035", + "orbit_class": "Apollo", + "period_yr": "4.06", + "pha": "Y", + "q_au_1": "0.84", + "q_au_2": "4.26" + }, + { + "designation": "419624 (2010 SO16)", + "discovery_date": "2010-09-17T00:00:00.000Z", + "h_mag": "20.5", + "i_deg": "14.52", + "moid_au": "0.028", + "orbit_class": "Apollo", + "period_yr": "1", + "pha": "Y", + "q_au_1": "0.93", + "q_au_2": "1.08" + }, + { + "designation": "414772 (2010 OC103)", + "discovery_date": "2010-07-28T00:00:00.000Z", + "h_mag": "19", + "i_deg": "23.11", + "moid_au": "0.333", + "orbit_class": "Apollo", + "period_yr": "1.31", + "pha": "N", + "q_au_1": "0.39", + "q_au_2": "2" + }, + { + "designation": "414746 (2010 EH20)", + "discovery_date": "2010-03-06T00:00:00.000Z", + "h_mag": "18", + "i_deg": "23.89", + "moid_au": "0.268", + "orbit_class": "Amor", + "period_yr": "4.24", + "pha": "N", + "q_au_1": "1.25", + "q_au_2": "3.99" + }, + { + "designation": "407324 (2010 OB101)", + "discovery_date": "2010-07-18T00:00:00.000Z", + "h_mag": "20.7", + "i_deg": "9.12", + "moid_au": "0.111", + "orbit_class": "Apollo", + "period_yr": "2.06", + "pha": "N", + "q_au_1": "0.77", + "q_au_2": "2.46" + }, + { + "designation": "398188 (2010 LE15)", + "discovery_date": "2010-06-03T00:00:00.000Z", + "h_mag": "19.5", + "i_deg": "13.25", + "moid_au": "0.024", + "orbit_class": "Aten", + "period_yr": "0.8", + "pha": "Y", + "q_au_1": "0.63", + "q_au_2": "1.1" + }, + { + "designation": "395207 (2010 HQ80)", + "discovery_date": "2010-04-25T00:00:00.000Z", + "h_mag": "19.6", + "i_deg": "27.85", + "moid_au": "0.007", + "orbit_class": "Apollo", + "period_yr": "1.96", + "pha": "Y", + "q_au_1": "0.8", + "q_au_2": "2.34" + }, + { + "designation": "386847 (2010 LR33)", + "discovery_date": "2010-06-06T00:00:00.000Z", + "h_mag": "18", + "i_deg": "5.84", + "moid_au": "0.029", + "orbit_class": "Apollo", + "period_yr": "2.2", + "pha": "Y", + "q_au_1": "0.91", + "q_au_2": "2.48" + }, + { + "designation": "381989 (2010 HR80)", + "discovery_date": "2010-04-28T00:00:00.000Z", + "h_mag": "19.9", + "i_deg": "26.71", + "moid_au": "0.104", + "orbit_class": "Apollo", + "period_yr": "1.56", + "pha": "N", + "q_au_1": "0.68", + "q_au_2": "2.02" + }, + { + "designation": "369454 (2010 NZ1)", + "discovery_date": "2010-07-09T00:00:00.000Z", + "h_mag": "19.4", + "i_deg": "32.78", + "moid_au": "0.275", + "orbit_class": "Apollo", + "period_yr": "1.61", + "pha": "N", + "q_au_1": "0.49", + "q_au_2": "2.26" + }, + { + "designation": "365449 (2010 NJ1)", + "discovery_date": "2010-07-03T00:00:00.000Z", + "h_mag": "20.3", + "i_deg": "11.23", + "moid_au": "0.155", + "orbit_class": "Aten", + "period_yr": "0.95", + "pha": "N", + "q_au_1": "0.44", + "q_au_2": "1.49" + }, + { + "designation": "365424 (2010 KX7)", + "discovery_date": "2010-05-16T00:00:00.000Z", + "h_mag": "21.9", + "i_deg": "21.49", + "moid_au": "0.034", + "orbit_class": "Aten", + "period_yr": "0.98", + "pha": "Y", + "q_au_1": "0.82", + "q_au_2": "1.16" + }, + { + "designation": "356394 (2010 QD2)", + "discovery_date": "2010-08-21T00:00:00.000Z", + "h_mag": "17.4", + "i_deg": "10.64", + "moid_au": "0.061", + "orbit_class": "Apollo", + "period_yr": "2.85", + "pha": "N", + "q_au_1": "0.43", + "q_au_2": "3.59" + }, + { + "designation": "(2015 HF11)", + "discovery_date": "2015-04-17T00:00:00.000Z", + "h_mag": "19.2", + "i_deg": "34.89", + "moid_au": "0.225", + "orbit_class": "Amor", + "period_yr": "2.99", + "pha": "N", + "q_au_1": "1.22", + "q_au_2": "2.93" + }, + { + "designation": "(2015 GK50)", + "discovery_date": "2015-04-05T00:00:00.000Z", + "h_mag": "20.5", + "i_deg": "19.07", + "moid_au": "0.237", + "orbit_class": "Amor", + "period_yr": "5.39", + "pha": "N", + "q_au_1": "1.03", + "q_au_2": "5.12" + }, + { + "designation": "(2015 GJ46)", + "discovery_date": "2015-04-11T00:00:00.000Z", + "h_mag": "19.3", + "i_deg": "18.22", + "moid_au": "0.238", + "orbit_class": "Apollo", + "period_yr": "4.85", + "pha": "N", + "q_au_1": "0.67", + "q_au_2": "5.06" + }, + { + "designation": "(2015 FT344)", + "discovery_date": "2015-03-23T00:00:00.000Z", + "h_mag": "20.5", + "i_deg": "12.55", + "moid_au": "0.203", + "orbit_class": "Amor", + "period_yr": "4.07", + "pha": "N", + "q_au_1": "1.09", + "q_au_2": "4.01" + }, + { + "designation": "(2015 FD341)", + "discovery_date": "2015-03-27T00:00:00.000Z", + "h_mag": "18", + "i_deg": "20.55", + "moid_au": "0.124", + "orbit_class": "Aten", + "period_yr": "0.93", + "pha": "N", + "q_au_1": "0.31", + "q_au_2": "1.6" + }, + { + "designation": "(2015 FU332)", + "discovery_date": "2015-03-31T00:00:00.000Z", + "h_mag": "17.3", + "i_deg": "36.11", + "moid_au": "0.269", + "orbit_class": "Apollo", + "period_yr": "4.27", + "pha": "N", + "q_au_1": "0.67", + "q_au_2": "4.59" + }, + { + "designation": "(2015 FE120)", + "discovery_date": "2015-03-23T00:00:00.000Z", + "h_mag": "21.1", + "i_deg": "22.8", + "moid_au": "0.013", + "orbit_class": "Apollo", + "period_yr": "3.38", + "pha": "Y", + "q_au_1": "1.01", + "q_au_2": "3.49" + }, + { + "designation": "(2015 FY117)", + "discovery_date": "2015-03-20T00:00:00.000Z", + "h_mag": "21.2", + "i_deg": "24.33", + "moid_au": "0.15", + "orbit_class": "Amor", + "period_yr": "2.87", + "pha": "N", + "q_au_1": "1.14", + "q_au_2": "2.9" + }, + { + "designation": "(2015 DX198)", + "discovery_date": "2015-02-17T00:00:00.000Z", + "h_mag": "22.1", + "i_deg": "11.05", + "moid_au": "0.074", + "orbit_class": "Amor", + "period_yr": "2.1", + "pha": "N", + "q_au_1": "1.02", + "q_au_2": "2.25" + }, + { + "designation": "(2015 BY516)", + "discovery_date": "2015-01-30T00:00:00.000Z", + "h_mag": "22.3", + "i_deg": "12.71", + "moid_au": "0.139", + "orbit_class": "Apollo", + "period_yr": "3.66", + "pha": "N", + "q_au_1": "0.97", + "q_au_2": "3.77" + }, + { + "designation": "(2015 AK280)", + "discovery_date": "2015-01-15T00:00:00.000Z", + "h_mag": "21.8", + "i_deg": "11.37", + "moid_au": "0.049", + "orbit_class": "Apollo", + "period_yr": "4.33", + "pha": "Y", + "q_au_1": "0.79", + "q_au_2": "4.53" + }, + { + "designation": "(2015 AY245)", + "discovery_date": "2015-01-14T00:00:00.000Z", + "h_mag": "21.2", + "i_deg": "13.59", + "moid_au": "0.019", + "orbit_class": "Apollo", + "period_yr": "1.2", + "pha": "Y", + "q_au_1": "1", + "q_au_2": "1.25" + }, + { + "designation": "(2015 AC17)", + "discovery_date": "2015-01-03T00:00:00.000Z", + "h_mag": "19.9", + "i_deg": "29.25", + "moid_au": "0.238", + "orbit_class": "Amor", + "period_yr": "3.39", + "pha": "N", + "q_au_1": "1.22", + "q_au_2": "3.29" + }, + { + "designation": "(2014 YR43)", + "discovery_date": "2014-12-26T00:00:00.000Z", + "h_mag": "19.5", + "i_deg": "26.46", + "moid_au": "0.303", + "orbit_class": "Apollo", + "period_yr": "3.92", + "pha": "N", + "q_au_1": "0.97", + "q_au_2": "4" + }, + { + "designation": "(2014 YS14)", + "discovery_date": "2014-12-24T00:00:00.000Z", + "h_mag": "21.1", + "i_deg": "18.29", + "moid_au": "0.127", + "orbit_class": "Apollo", + "period_yr": "3.87", + "pha": "N", + "q_au_1": "0.84", + "q_au_2": "4.09" + }, + { + "designation": "(2014 XX31)", + "discovery_date": "2014-12-11T00:00:00.000Z", + "h_mag": "17.5", + "i_deg": "35.78", + "moid_au": "0.475", + "orbit_class": "Apollo", + "period_yr": "4.73", + "pha": "N", + "q_au_1": "0.36", + "q_au_2": "5.28" + }, + { + "designation": "(2014 XX7)", + "discovery_date": "2014-12-10T00:00:00.000Z", + "h_mag": "19.7", + "i_deg": "36.71", + "moid_au": "0.183", + "orbit_class": "Amor", + "period_yr": "4.94", + "pha": "N", + "q_au_1": "1.17", + "q_au_2": "4.64" + }, + { + "designation": "(2014 XQ7)", + "discovery_date": "2014-12-06T00:00:00.000Z", + "h_mag": "20.6", + "i_deg": "31.05", + "moid_au": "0.312", + "orbit_class": "Apollo", + "period_yr": "4.32", + "pha": "N", + "q_au_1": "0.66", + "q_au_2": "4.65" + }, + { + "designation": "(2014 VP35)", + "discovery_date": "2014-11-14T00:00:00.000Z", + "h_mag": "23.3", + "i_deg": "9.17", + "moid_au": "0.026", + "orbit_class": "Apollo", + "period_yr": "1.78", + "pha": "N", + "q_au_1": "0.95", + "q_au_2": "1.98" + }, + { + "designation": "(2014 UH210)", + "discovery_date": "2014-10-20T00:00:00.000Z", + "h_mag": "21.1", + "i_deg": "22.06", + "moid_au": "0.099", + "orbit_class": "Apollo", + "period_yr": "4.11", + "pha": "N", + "q_au_1": "0.89", + "q_au_2": "4.25" + }, + { + "designation": "(2014 UF206)", + "discovery_date": "2014-10-31T00:00:00.000Z", + "h_mag": "18.8", + "i_deg": "48.05", + "moid_au": "0.136", + "orbit_class": "Amor", + "period_yr": "3.78", + "pha": "N", + "q_au_1": "1.11", + "q_au_2": "3.74" + }, + { + "designation": "(2014 UG176)", + "discovery_date": "2014-10-25T00:00:00.000Z", + "h_mag": "21.5", + "i_deg": "16.3", + "moid_au": "0.16", + "orbit_class": "Apollo", + "period_yr": "4.44", + "pha": "N", + "q_au_1": "0.78", + "q_au_2": "4.62" + }, + { + "designation": "(2014 TJ64)", + "discovery_date": "2014-10-07T00:00:00.000Z", + "h_mag": "21.2", + "i_deg": "14.91", + "moid_au": "0.154", + "orbit_class": "Amor", + "period_yr": "4.24", + "pha": "N", + "q_au_1": "1.05", + "q_au_2": "4.19" + }, + { + "designation": "(2014 TF64)", + "discovery_date": "2014-10-05T00:00:00.000Z", + "h_mag": "20.1", + "i_deg": "52.66", + "moid_au": "0.131", + "orbit_class": "Apollo", + "period_yr": "2.05", + "pha": "N", + "q_au_1": "0.94", + "q_au_2": "2.29" + }, + { + "designation": "(2014 TW57)", + "discovery_date": "2014-10-10T00:00:00.000Z", + "h_mag": "20.1", + "i_deg": "6.75", + "moid_au": "0.062", + "orbit_class": "Apollo", + "period_yr": "3.21", + "pha": "N", + "q_au_1": "0.57", + "q_au_2": "3.78" + }, + { + "designation": "(2014 SR339)", + "discovery_date": "2014-09-30T00:00:00.000Z", + "h_mag": "18.6", + "i_deg": "29.79", + "moid_au": "0.036", + "orbit_class": "Apollo", + "period_yr": "1.48", + "pha": "Y", + "q_au_1": "0.9", + "q_au_2": "1.69" + }, + { + "designation": "(2014 RH12)", + "discovery_date": "2014-09-03T00:00:00.000Z", + "h_mag": "23.5", + "i_deg": "7.23", + "moid_au": "0.045", + "orbit_class": "Apollo", + "period_yr": "3.22", + "pha": "N", + "q_au_1": "1.01", + "q_au_2": "3.35" + }, + { + "designation": "(2014 QK433)", + "discovery_date": "2014-08-28T00:00:00.000Z", + "h_mag": "18.2", + "i_deg": "39.22", + "moid_au": "0.18", + "orbit_class": "Amor", + "period_yr": "5.16", + "pha": "N", + "q_au_1": "1.19", + "q_au_2": "4.78" + }, + { + "designation": "(2014 PP69)", + "discovery_date": "2014-08-05T00:00:00.000Z", + "h_mag": "20", + "i_deg": "93.63", + "moid_au": "1.617", + "orbit_class": "Amor", + "period_yr": "99.82", + "pha": "N", + "q_au_1": "1.25", + "q_au_2": "41.78" + }, + { + "designation": "(2014 PF68)", + "discovery_date": "2014-08-15T00:00:00.000Z", + "h_mag": "18.2", + "i_deg": "22.75", + "moid_au": "0.17", + "orbit_class": "Amor", + "period_yr": "4.81", + "pha": "N", + "q_au_1": "1.17", + "q_au_2": "4.53" + }, + { + "designation": "(2014 PC68)", + "discovery_date": "2014-08-08T00:00:00.000Z", + "h_mag": "20.4", + "i_deg": "40.68", + "moid_au": "0.104", + "orbit_class": "Amor", + "period_yr": "1.87", + "pha": "N", + "q_au_1": "1.09", + "q_au_2": "1.95" + }, + { + "designation": "(2014 OZ1)", + "discovery_date": "2014-07-20T00:00:00.000Z", + "h_mag": "21", + "i_deg": "18", + "moid_au": "0.231", + "orbit_class": "Amor", + "period_yr": "2.24", + "pha": "N", + "q_au_1": "1.08", + "q_au_2": "2.35" + }, + { + "designation": "(2014 OY1)", + "discovery_date": "2014-07-21T00:00:00.000Z", + "h_mag": "19.1", + "i_deg": "23.01", + "moid_au": "0.042", + "orbit_class": "Apollo", + "period_yr": "4.14", + "pha": "Y", + "q_au_1": "0.97", + "q_au_2": "4.19" + }, + { + "designation": "(2014 NM64)", + "discovery_date": "2014-07-11T00:00:00.000Z", + "h_mag": "22.6", + "i_deg": "28.78", + "moid_au": "0.051", + "orbit_class": "Amor", + "period_yr": "4.79", + "pha": "N", + "q_au_1": "1.06", + "q_au_2": "4.62" + }, + { + "designation": "(2014 NE64)", + "discovery_date": "2014-07-07T00:00:00.000Z", + "h_mag": "18.8", + "i_deg": "41.63", + "moid_au": "0.39", + "orbit_class": "Amor", + "period_yr": "3.06", + "pha": "N", + "q_au_1": "1.2", + "q_au_2": "3.01" + }, + { + "designation": "(2014 NC64)", + "discovery_date": "2014-07-13T00:00:00.000Z", + "h_mag": "20.2", + "i_deg": "22.68", + "moid_au": "0.196", + "orbit_class": "Apollo", + "period_yr": "3.23", + "pha": "N", + "q_au_1": "0.8", + "q_au_2": "3.57" + }, + { + "designation": "(2014 NF3)", + "discovery_date": "2014-07-01T00:00:00.000Z", + "h_mag": "20.8", + "i_deg": "13.53", + "moid_au": "0.215", + "orbit_class": "Apollo", + "period_yr": "1.48", + "pha": "N", + "q_au_1": "0.66", + "q_au_2": "1.94" + }, + { + "designation": "C/2014 N3 (NEOWISE)", + "discovery_date": "2014-07-04T00:00:00.000Z", + "i_deg": "61.63", + "moid_au": "2.888", + "orbit_class": "Comet", + "period_yr": "745640.58", + "pha": "n/a", + "q_au_1": "3.88", + "q_au_2": "16441.51" + }, + { + "designation": "(2014 MQ18)", + "discovery_date": "2014-06-22T00:00:00.000Z", + "h_mag": "15.6", + "i_deg": "35.09", + "moid_au": "0.192", + "orbit_class": "Amor", + "period_yr": "4.93", + "pha": "N", + "q_au_1": "1.16", + "q_au_2": "4.63" + }, + { + "designation": "(2014 LQ25)", + "discovery_date": "2014-06-08T00:00:00.000Z", + "h_mag": "20", + "i_deg": "33.57", + "moid_au": "0.099", + "orbit_class": "Apollo", + "period_yr": "2.88", + "pha": "N", + "q_au_1": "0.65", + "q_au_2": "3.39" + }, + { + "designation": "P/2014 L2 (NEOWISE)", + "discovery_date": "2014-06-07T00:00:00.000Z", + "i_deg": "5.18", + "moid_au": "1.224", + "orbit_class": "Jupiter-family Comet", + "period_yr": "15.91", + "pha": "n/a", + "q_au_1": "2.23", + "q_au_2": "10.42" + }, + { + "designation": "(2014 JN57)", + "discovery_date": "2014-05-11T00:00:00.000Z", + "h_mag": "20.6", + "i_deg": "28.59", + "moid_au": "0.051", + "orbit_class": "Amor", + "period_yr": "1.39", + "pha": "N", + "q_au_1": "1.03", + "q_au_2": "1.45" + }, + { + "designation": "(2014 JH57)", + "discovery_date": "2014-05-10T00:00:00.000Z", + "h_mag": "16.2", + "i_deg": "26.54", + "moid_au": "0.418", + "orbit_class": "Apollo", + "period_yr": "6.13", + "pha": "N", + "q_au_1": "0.43", + "q_au_2": "6.27" + }, + { + "designation": "(2014 JL25)", + "discovery_date": "2014-05-04T00:00:00.000Z", + "h_mag": "23", + "i_deg": "15.75", + "moid_au": "0.012", + "orbit_class": "Apollo", + "period_yr": "4.94", + "pha": "N", + "q_au_1": "1", + "q_au_2": "4.8" + }, + { + "designation": "(2014 HJ129)", + "discovery_date": "2014-04-24T00:00:00.000Z", + "h_mag": "21.1", + "i_deg": "8.44", + "moid_au": "0.212", + "orbit_class": "Amor", + "period_yr": "4.16", + "pha": "N", + "q_au_1": "1.13", + "q_au_2": "4.04" + }, + { + "designation": "(2014 HQ124)", + "discovery_date": "2014-04-23T00:00:00.000Z", + "h_mag": "18.9", + "i_deg": "26.37", + "moid_au": "0.007", + "orbit_class": "Aten", + "period_yr": "0.78", + "pha": "Y", + "q_au_1": "0.63", + "q_au_2": "1.07" + }, + { + "designation": "(2014 EQ49)", + "discovery_date": "2014-03-15T00:00:00.000Z", + "h_mag": "21.8", + "i_deg": "15.18", + "moid_au": "0.026", + "orbit_class": "Apollo", + "period_yr": "1.23", + "pha": "Y", + "q_au_1": "0.91", + "q_au_2": "1.39" + }, + { + "designation": "(2014 EN45)", + "discovery_date": "2014-03-06T00:00:00.000Z", + "h_mag": "21.2", + "i_deg": "14.03", + "moid_au": "0.156", + "orbit_class": "Amor", + "period_yr": "3.82", + "pha": "N", + "q_au_1": "1.06", + "q_au_2": "3.83" + }, + { + "designation": "(2014 ED)", + "discovery_date": "2014-03-01T00:00:00.000Z", + "h_mag": "19.3", + "i_deg": "21.77", + "moid_au": "0.365", + "orbit_class": "Apollo", + "period_yr": "1.92", + "pha": "N", + "q_au_1": "0.56", + "q_au_2": "2.53" + }, + { + "designation": "(2014 CF14)", + "discovery_date": "2014-02-07T00:00:00.000Z", + "h_mag": "18.1", + "i_deg": "29.41", + "moid_au": "0.149", + "orbit_class": "Apollo", + "period_yr": "2.83", + "pha": "N", + "q_au_1": "0.82", + "q_au_2": "3.17" + }, + { + "designation": "(2014 CY4)", + "discovery_date": "2014-02-04T00:00:00.000Z", + "h_mag": "21.1", + "i_deg": "15.02", + "moid_au": "0.042", + "orbit_class": "Apollo", + "period_yr": "4.32", + "pha": "Y", + "q_au_1": "0.48", + "q_au_2": "4.82" + }, + { + "designation": "C/2014 C3 (NEOWISE)", + "discovery_date": "2014-02-14T00:00:00.000Z", + "i_deg": "151.78", + "moid_au": "0.866", + "orbit_class": "Comet", + "period_yr": "1128.89", + "pha": "n/a", + "q_au_1": "1.86", + "q_au_2": "214.97" + }, + { + "designation": "(2014 BE63)", + "discovery_date": "2014-01-23T00:00:00.000Z", + "h_mag": "23.2", + "i_deg": "8.59", + "moid_au": "0.133", + "orbit_class": "Apollo", + "period_yr": "3.08", + "pha": "N", + "q_au_1": "0.75", + "q_au_2": "3.48" + }, + { + "designation": "(2014 BG60)", + "discovery_date": "2014-01-25T00:00:00.000Z", + "h_mag": "20.1", + "i_deg": "8.61", + "moid_au": "0.227", + "orbit_class": "Amor", + "period_yr": "5.27", + "pha": "N", + "q_au_1": "1.17", + "q_au_2": "4.89" + }, + { + "designation": "(2014 AA53)", + "discovery_date": "2014-01-13T00:00:00.000Z", + "h_mag": "19.8", + "i_deg": "12.45", + "moid_au": "0.14", + "orbit_class": "Apollo", + "period_yr": "3.66", + "pha": "N", + "q_au_1": "0.78", + "q_au_2": "3.97" + }, + { + "designation": "(2014 AQ46)", + "discovery_date": "2014-01-02T00:00:00.000Z", + "h_mag": "20.1", + "i_deg": "24.6", + "moid_au": "0.205", + "orbit_class": "Amor", + "period_yr": "3.75", + "pha": "N", + "q_au_1": "1.13", + "q_au_2": "3.7" + }, + { + "designation": "(2013 YP139)", + "discovery_date": "2013-12-29T00:00:00.000Z", + "h_mag": "21.6", + "i_deg": "0.82", + "moid_au": "0.004", + "orbit_class": "Apollo", + "period_yr": "3.73", + "pha": "Y", + "q_au_1": "0.76", + "q_au_2": "4.05" + }, + { + "designation": "(2011 BN59)", + "discovery_date": "2011-01-29T00:00:00.000Z", + "h_mag": "20.4", + "i_deg": "20.32", + "moid_au": "0.326", + "orbit_class": "Amor", + "period_yr": "5.36", + "pha": "N", + "q_au_1": "1.16", + "q_au_2": "4.97" + }, + { + "designation": "(2011 BY24)", + "discovery_date": "2011-01-24T00:00:00.000Z", + "h_mag": "22.6", + "i_deg": "13.95", + "moid_au": "0.017", + "orbit_class": "Apollo", + "period_yr": "2.6", + "pha": "N", + "q_au_1": "0.96", + "q_au_2": "2.83" + }, + { + "designation": "(2010 YD3)", + "discovery_date": "2010-12-26T00:00:00.000Z", + "h_mag": "20", + "i_deg": "24.61", + "moid_au": "0.195", + "orbit_class": "Amor", + "period_yr": "4.14", + "pha": "N", + "q_au_1": "1.11", + "q_au_2": "4.05" + }, + { + "designation": "(2010 YC1)", + "discovery_date": "2010-12-21T00:00:00.000Z", + "h_mag": "21.3", + "i_deg": "17.66", + "moid_au": "0.163", + "orbit_class": "Apollo", + "period_yr": "1.68", + "pha": "N", + "q_au_1": "0.83", + "q_au_2": "2" + }, + { + "designation": "(2010 XY82)", + "discovery_date": "2010-12-14T00:00:00.000Z", + "h_mag": "19.1", + "i_deg": "26.73", + "moid_au": "0.294", + "orbit_class": "Amor", + "period_yr": "3.24", + "pha": "N", + "q_au_1": "1.12", + "q_au_2": "3.26" + }, + { + "designation": "(2010 XP69)", + "discovery_date": "2010-12-08T00:00:00.000Z", + "h_mag": "21.4", + "i_deg": "14.6", + "moid_au": "0.015", + "orbit_class": "Apollo", + "period_yr": "1.88", + "pha": "Y", + "q_au_1": "1", + "q_au_2": "2.05" + }, + { + "designation": "(2010 XZ67)", + "discovery_date": "2010-12-10T00:00:00.000Z", + "h_mag": "19.7", + "i_deg": "11.84", + "moid_au": "0.063", + "orbit_class": "Amor", + "period_yr": "2.96", + "pha": "N", + "q_au_1": "1.04", + "q_au_2": "3.08" + }, + { + "designation": "(2010 WE9)", + "discovery_date": "2010-11-23T00:00:00.000Z", + "h_mag": "20", + "i_deg": "42.12", + "moid_au": "0.256", + "orbit_class": "Amor", + "period_yr": "1.94", + "pha": "N", + "q_au_1": "1.17", + "q_au_2": "1.94" + }, + { + "designation": "(2010 UB8)", + "discovery_date": "2010-10-27T00:00:00.000Z", + "h_mag": "19.7", + "i_deg": "30.97", + "moid_au": "0.194", + "orbit_class": "Amor", + "period_yr": "5.15", + "pha": "N", + "q_au_1": "1.11", + "q_au_2": "4.85" + }, + { + "designation": "(2010 UY6)", + "discovery_date": "2010-10-23T00:00:00.000Z", + "h_mag": "20.1", + "i_deg": "19.98", + "moid_au": "0.062", + "orbit_class": "Amor", + "period_yr": "4.34", + "pha": "N", + "q_au_1": "1.04", + "q_au_2": "4.28" + }, + { + "designation": "(2010 TK7)", + "discovery_date": "2010-10-01T00:00:00.000Z", + "h_mag": "20.8", + "i_deg": "20.89", + "moid_au": "0.087", + "orbit_class": "Aten", + "period_yr": "1", + "pha": "N", + "q_au_1": "0.81", + "q_au_2": "1.19" + }, + { + "designation": "(2010 QA5)", + "discovery_date": "2010-08-29T00:00:00.000Z", + "h_mag": "22.5", + "i_deg": "33.45", + "moid_au": "0.065", + "orbit_class": "Amor", + "period_yr": "4.97", + "pha": "N", + "q_au_1": "1.07", + "q_au_2": "4.76" + }, + { + "designation": "(2010 QE2)", + "discovery_date": "2010-08-25T00:00:00.000Z", + "h_mag": "17.2", + "i_deg": "64.75", + "moid_au": "0.056", + "orbit_class": "Apollo", + "period_yr": "6.19", + "pha": "N", + "q_au_1": "0.88", + "q_au_2": "5.86" + }, + { + "designation": "(2010 PY75)", + "discovery_date": "2010-08-15T00:00:00.000Z", + "h_mag": "18.7", + "i_deg": "31.29", + "moid_au": "0.243", + "orbit_class": "Apollo", + "period_yr": "4.34", + "pha": "N", + "q_au_1": "0.6", + "q_au_2": "4.72" + }, + { + "designation": "(2010 PU66)", + "discovery_date": "2010-08-03T00:00:00.000Z", + "h_mag": "22.1", + "i_deg": "18.09", + "moid_au": "0.148", + "orbit_class": "Apollo", + "period_yr": "1.81", + "pha": "N", + "q_au_1": "0.91", + "q_au_2": "2.07" + }, + { + "designation": "(2010 PW58)", + "discovery_date": "2010-08-05T00:00:00.000Z", + "h_mag": "21.3", + "i_deg": "14.24", + "moid_au": "0.021", + "orbit_class": "Aten", + "period_yr": "0.84", + "pha": "Y", + "q_au_1": "0.7", + "q_au_2": "1.08" + }, + { + "designation": "(2010 PP58)", + "discovery_date": "2010-08-05T00:00:00.000Z", + "h_mag": "22.1", + "i_deg": "4.55", + "moid_au": "0.014", + "orbit_class": "Apollo", + "period_yr": "2.81", + "pha": "N", + "q_au_1": "0.99", + "q_au_2": "3" + }, + { + "designation": "(2010 PM58)", + "discovery_date": "2010-08-01T00:00:00.000Z", + "h_mag": "20.9", + "i_deg": "13.6", + "moid_au": "0.096", + "orbit_class": "Apollo", + "period_yr": "1.61", + "pha": "N", + "q_au_1": "0.74", + "q_au_2": "2" + }, + { + "designation": "P/2010 P4 (WISE)", + "discovery_date": "2010-08-06T00:00:00.000Z", + "i_deg": "24.1", + "moid_au": "0.854", + "orbit_class": "Jupiter-family Comet", + "period_yr": "7.13", + "pha": "n/a", + "q_au_1": "1.86", + "q_au_2": "5.55" + }, + { + "designation": "(2010 OK126)", + "discovery_date": "2010-07-30T00:00:00.000Z", + "h_mag": "20.7", + "i_deg": "52.56", + "moid_au": "0.149", + "orbit_class": "Amor", + "period_yr": "2.74", + "pha": "N", + "q_au_1": "1.08", + "q_au_2": "2.83" + }, + { + "designation": "(2010 OH126)", + "discovery_date": "2010-07-31T00:00:00.000Z", + "h_mag": "21.4", + "i_deg": "14.38", + "moid_au": "0.068", + "orbit_class": "Apollo", + "period_yr": "2.62", + "pha": "N", + "q_au_1": "0.95", + "q_au_2": "2.85" + }, + { + "designation": "(2010 ON101)", + "discovery_date": "2010-07-30T00:00:00.000Z", + "h_mag": "20.2", + "i_deg": "9.31", + "moid_au": "0.044", + "orbit_class": "Apollo", + "period_yr": "2.08", + "pha": "Y", + "q_au_1": "0.96", + "q_au_2": "2.3" + }, + { + "designation": "(2010 OL101)", + "discovery_date": "2010-07-27T00:00:00.000Z", + "h_mag": "20.4", + "i_deg": "26.11", + "moid_au": "0.298", + "orbit_class": "Amor", + "period_yr": "4.22", + "pha": "N", + "q_au_1": "1.05", + "q_au_2": "4.17" + }, + { + "designation": "(2010 OF101)", + "discovery_date": "2010-07-23T00:00:00.000Z", + "h_mag": "19.6", + "i_deg": "23.37", + "moid_au": "0.062", + "orbit_class": "Aten", + "period_yr": "0.93", + "pha": "N", + "q_au_1": "0.64", + "q_au_2": "1.26" + }, + { + "designation": "(2010 OD101)", + "discovery_date": "2010-07-23T00:00:00.000Z", + "h_mag": "20.7", + "i_deg": "15.39", + "moid_au": "0.19", + "orbit_class": "Amor", + "period_yr": "2.06", + "pha": "N", + "q_au_1": "1.04", + "q_au_2": "2.2" + }, + { + "designation": "(2010 OC101)", + "discovery_date": "2010-07-22T00:00:00.000Z", + "h_mag": "20.7", + "i_deg": "13.6", + "moid_au": "0.092", + "orbit_class": "Apollo", + "period_yr": "1.35", + "pha": "N", + "q_au_1": "0.94", + "q_au_2": "1.5" + }, + { + "designation": "(2010 OL100)", + "discovery_date": "2010-07-28T00:00:00.000Z", + "h_mag": "19.6", + "i_deg": "22.16", + "moid_au": "0.129", + "orbit_class": "Apollo", + "period_yr": "3.4", + "pha": "N", + "q_au_1": "0.78", + "q_au_2": "3.74" + }, + { + "designation": "(2010 OE22)", + "discovery_date": "2010-07-17T00:00:00.000Z", + "h_mag": "21.3", + "i_deg": "14.32", + "moid_au": "0.178", + "orbit_class": "Apollo", + "period_yr": "4.28", + "pha": "N", + "q_au_1": "0.97", + "q_au_2": "4.31" + }, + { + "designation": "(2010 NY65)", + "discovery_date": "2010-07-14T00:00:00.000Z", + "h_mag": "21.4", + "i_deg": "11.74", + "moid_au": "0.017", + "orbit_class": "Aten", + "period_yr": "1", + "pha": "Y", + "q_au_1": "0.63", + "q_au_2": "1.37" + }, + { + "designation": "(2010 NG3)", + "discovery_date": "2010-07-08T00:00:00.000Z", + "h_mag": "17.2", + "i_deg": "26.96", + "moid_au": "0.127", + "orbit_class": "Amor", + "period_yr": "4.2", + "pha": "N", + "q_au_1": "1.13", + "q_au_2": "4.08" + }, + { + "designation": "(2010 NB2)", + "discovery_date": "2010-07-10T00:00:00.000Z", + "h_mag": "20.3", + "i_deg": "28.66", + "moid_au": "0.102", + "orbit_class": "Apollo", + "period_yr": "3.01", + "pha": "N", + "q_au_1": "0.5", + "q_au_2": "3.67" + }, + { + "designation": "(2010 NU1)", + "discovery_date": "2010-07-06T00:00:00.000Z", + "h_mag": "21.2", + "i_deg": "34.58", + "moid_au": "0.336", + "orbit_class": "Apollo", + "period_yr": "3.74", + "pha": "N", + "q_au_1": "0.48", + "q_au_2": "4.33" + }, + { + "designation": "(2010 NT1)", + "discovery_date": "2010-07-04T00:00:00.000Z", + "h_mag": "19.4", + "i_deg": "39.52", + "moid_au": "0.208", + "orbit_class": "Amor", + "period_yr": "1.76", + "pha": "N", + "q_au_1": "1.14", + "q_au_2": "1.78" + }, + { + "designation": "(2010 NG1)", + "discovery_date": "2010-07-02T00:00:00.000Z", + "h_mag": "20.4", + "i_deg": "24.74", + "moid_au": "0.081", + "orbit_class": "Aten", + "period_yr": "0.78", + "pha": "N", + "q_au_1": "0.57", + "q_au_2": "1.13" + }, + { + "designation": "P/2010 N1 (WISE)", + "discovery_date": "2010-07-05T00:00:00.000Z", + "i_deg": "12.88", + "moid_au": "0.491", + "orbit_class": "Jupiter-family Comet", + "period_yr": "5.74", + "pha": "n/a", + "q_au_1": "1.49", + "q_au_2": "4.92" + }, + { + "designation": "(2010 MA113)", + "discovery_date": "2010-06-25T00:00:00.000Z", + "h_mag": "19.2", + "i_deg": "39.85", + "moid_au": "0.081", + "orbit_class": "Apollo", + "period_yr": "3.46", + "pha": "N", + "q_au_1": "0.89", + "q_au_2": "3.68" + }, + { + "designation": "(2010 MZ112)", + "discovery_date": "2010-06-23T00:00:00.000Z", + "h_mag": "19.8", + "i_deg": "30.18", + "moid_au": "0.221", + "orbit_class": "Apollo", + "period_yr": "2.36", + "pha": "N", + "q_au_1": "0.49", + "q_au_2": "3.06" + }, + { + "designation": "(2010 MY112)", + "discovery_date": "2010-06-23T00:00:00.000Z", + "h_mag": "21", + "i_deg": "38.49", + "moid_au": "0.156", + "orbit_class": "Apollo", + "period_yr": "1.1", + "pha": "N", + "q_au_1": "0.8", + "q_au_2": "1.33" + }, + { + "designation": "(2010 MU112)", + "discovery_date": "2010-06-30T00:00:00.000Z", + "h_mag": "20.7", + "i_deg": "48.02", + "moid_au": "0.0002", + "orbit_class": "Apollo", + "period_yr": "2.33", + "pha": "Y", + "q_au_1": "0.81", + "q_au_2": "2.71" + }, + { + "designation": "(2010 MU111)", + "discovery_date": "2010-06-23T00:00:00.000Z", + "h_mag": "18.7", + "i_deg": "41.53", + "moid_au": "0.059", + "orbit_class": "Apollo", + "period_yr": "3.7", + "pha": "N", + "q_au_1": "0.92", + "q_au_2": "3.86" + }, + { + "designation": "(2010 MR87)", + "discovery_date": "2010-06-22T00:00:00.000Z", + "h_mag": "19.5", + "i_deg": "34.98", + "moid_au": "0.15", + "orbit_class": "Amor", + "period_yr": "2.28", + "pha": "N", + "q_au_1": "1.06", + "q_au_2": "2.41" + }, + { + "designation": "(2010 LU134)", + "discovery_date": "2010-06-14T00:00:00.000Z", + "h_mag": "19.5", + "i_deg": "27.39", + "moid_au": "0.146", + "orbit_class": "Apollo", + "period_yr": "2.61", + "pha": "N", + "q_au_1": "0.86", + "q_au_2": "2.93" + }, + { + "designation": "(2010 LV108)", + "discovery_date": "2010-06-14T00:00:00.000Z", + "h_mag": "22.6", + "i_deg": "5.43", + "moid_au": "0.006", + "orbit_class": "Apollo", + "period_yr": "4.64", + "pha": "N", + "q_au_1": "1.01", + "q_au_2": "4.55" + }, + { + "designation": "(2010 LU108)", + "discovery_date": "2010-06-15T00:00:00.000Z", + "h_mag": "20", + "i_deg": "9.51", + "moid_au": "0.126", + "orbit_class": "Apollo", + "period_yr": "3.35", + "pha": "N", + "q_au_1": "0.41", + "q_au_2": "4.08" + }, + { + "designation": "(2010 LT108)", + "discovery_date": "2010-06-13T00:00:00.000Z", + "h_mag": "19.7", + "i_deg": "31.87", + "moid_au": "0.138", + "orbit_class": "Apollo", + "period_yr": "1.57", + "pha": "N", + "q_au_1": "0.85", + "q_au_2": "1.85" + }, + { + "designation": "(2010 LO97)", + "discovery_date": "2010-06-13T00:00:00.000Z", + "h_mag": "18.7", + "i_deg": "21.65", + "moid_au": "0.233", + "orbit_class": "Amor", + "period_yr": "4.14", + "pha": "N", + "q_au_1": "1.22", + "q_au_2": "3.94" + }, + { + "designation": "(2010 LF86)", + "discovery_date": "2010-06-11T00:00:00.000Z", + "h_mag": "17.2", + "i_deg": "13.55", + "moid_au": "0.318", + "orbit_class": "Amor", + "period_yr": "3.73", + "pha": "N", + "q_au_1": "1.3", + "q_au_2": "3.51" + }, + { + "designation": "(2010 LR68)", + "discovery_date": "2010-06-08T00:00:00.000Z", + "h_mag": "18.3", + "i_deg": "4.58", + "moid_au": "0.216", + "orbit_class": "Amor", + "period_yr": "5.29", + "pha": "N", + "q_au_1": "1.19", + "q_au_2": "4.88" + }, + { + "designation": "(2010 LL68)", + "discovery_date": "2010-06-12T00:00:00.000Z", + "h_mag": "22.9", + "i_deg": "10.48", + "moid_au": "0.139", + "orbit_class": "Apollo", + "period_yr": "2.99", + "pha": "N", + "q_au_1": "0.98", + "q_au_2": "3.16" + }, + { + "designation": "(2010 LK68)", + "discovery_date": "2010-06-12T00:00:00.000Z", + "h_mag": "22.5", + "i_deg": "22.08", + "moid_au": "0.025", + "orbit_class": "Apollo", + "period_yr": "1.27", + "pha": "N", + "q_au_1": "0.61", + "q_au_2": "1.73" + }, + { + "designation": "(2010 LJ68)", + "discovery_date": "2010-06-11T00:00:00.000Z", + "h_mag": "22.7", + "i_deg": "17.01", + "moid_au": "0.031", + "orbit_class": "Apollo", + "period_yr": "2.32", + "pha": "N", + "q_au_1": "0.97", + "q_au_2": "2.54" + }, + { + "designation": "(2010 LG64)", + "discovery_date": "2010-06-05T00:00:00.000Z", + "h_mag": "20.2", + "i_deg": "42.28", + "moid_au": "0.043", + "orbit_class": "Amor", + "period_yr": "4.36", + "pha": "Y", + "q_au_1": "1.04", + "q_au_2": "4.3" + }, + { + "designation": "(2010 LF64)", + "discovery_date": "2010-06-03T00:00:00.000Z", + "h_mag": "21.6", + "i_deg": "18.54", + "moid_au": "0.192", + "orbit_class": "Amor", + "period_yr": "1.59", + "pha": "N", + "q_au_1": "1.13", + "q_au_2": "1.59" + }, + { + "designation": "(2010 LJ61)", + "discovery_date": "2010-06-08T00:00:00.000Z", + "h_mag": "20.9", + "i_deg": "10.24", + "moid_au": "0.054", + "orbit_class": "Apollo", + "period_yr": "1.12", + "pha": "N", + "q_au_1": "0.57", + "q_au_2": "1.59" + }, + { + "designation": "(2010 LQ33)", + "discovery_date": "2010-06-04T00:00:00.000Z", + "h_mag": "19.3", + "i_deg": "24.63", + "moid_au": "0.228", + "orbit_class": "Amor", + "period_yr": "3.42", + "pha": "N", + "q_au_1": "1.23", + "q_au_2": "3.31" + }, + { + "designation": "(2010 LM14)", + "discovery_date": "2010-06-02T00:00:00.000Z", + "h_mag": "21.5", + "i_deg": "25.92", + "moid_au": "0.312", + "orbit_class": "Apollo", + "period_yr": "1.17", + "pha": "N", + "q_au_1": "0.69", + "q_au_2": "1.53" + }, + { + "designation": "(2010 LH14)", + "discovery_date": "2010-06-02T00:00:00.000Z", + "h_mag": "22", + "i_deg": "4.66", + "moid_au": "0.054", + "orbit_class": "Apollo", + "period_yr": "3.26", + "pha": "N", + "q_au_1": "0.93", + "q_au_2": "3.46" + }, + { + "designation": "C/2010 L5 (WISE)", + "discovery_date": "2010-06-14T00:00:00.000Z", + "i_deg": "147.05", + "moid_au": "0.114", + "orbit_class": "Halley-type Comet*", + "period_yr": "23.56", + "pha": "n/a", + "q_au_1": "0.79", + "q_au_2": "15.64" + }, + { + "designation": "C/2010 L4 (WISE)", + "discovery_date": "2010-06-15T00:00:00.000Z", + "i_deg": "102.82", + "moid_au": "2.53", + "orbit_class": "Comet", + "period_yr": "716.78", + "pha": "n/a", + "q_au_1": "2.83", + "q_au_2": "157.36" + }, + { + "designation": "245P/WISE", + "discovery_date": "2010-06-02T00:00:00.000Z", + "i_deg": "21.09", + "moid_au": "1.172", + "orbit_class": "Jupiter-family Comet", + "period_yr": "8.04", + "pha": "n/a", + "q_au_1": "2.14", + "q_au_2": "5.88" + }, + { + "designation": "(2010 KY127)", + "discovery_date": "2010-05-31T00:00:00.000Z", + "h_mag": "17", + "i_deg": "60.29", + "moid_au": "0.703", + "orbit_class": "Apollo", + "period_yr": "3.95", + "pha": "N", + "q_au_1": "0.3", + "q_au_2": "4.7" + }, + { + "designation": "(2010 KK127)", + "discovery_date": "2010-05-21T00:00:00.000Z", + "h_mag": "20.7", + "i_deg": "6.94", + "moid_au": "0.282", + "orbit_class": "Amor", + "period_yr": "3.33", + "pha": "N", + "q_au_1": "1.28", + "q_au_2": "3.18" + }, + { + "designation": "(2010 KZ117)", + "discovery_date": "2010-05-18T00:00:00.000Z", + "h_mag": "19.2", + "i_deg": "33.17", + "moid_au": "0.166", + "orbit_class": "Amor", + "period_yr": "3.42", + "pha": "N", + "q_au_1": "1.1", + "q_au_2": "3.43" + }, + { + "designation": "(2010 KB61)", + "discovery_date": "2010-05-26T00:00:00.000Z", + "h_mag": "20.5", + "i_deg": "44.6", + "moid_au": "0.051", + "orbit_class": "Apollo", + "period_yr": "1.44", + "pha": "N", + "q_au_1": "0.98", + "q_au_2": "1.57" + }, + { + "designation": "(2010 KY39)", + "discovery_date": "2010-05-18T00:00:00.000Z", + "h_mag": "20.1", + "i_deg": "25.51", + "moid_au": "0.303", + "orbit_class": "Amor", + "period_yr": "2.3", + "pha": "N", + "q_au_1": "1.05", + "q_au_2": "2.43" + }, + { + "designation": "C/2010 KW7 (WISE)", + "discovery_date": "2010-05-16T00:00:00.000Z", + "i_deg": "147.06", + "moid_au": "1.625", + "orbit_class": "Comet", + "period_yr": "997.65", + "pha": "n/a", + "q_au_1": "2.57", + "q_au_2": "197.11" + }, + { + "designation": "317P/WISE", + "discovery_date": "2010-05-27T00:00:00.000Z", + "i_deg": "10.65", + "moid_au": "0.204", + "orbit_class": "Jupiter-family Comet", + "period_yr": "5.01", + "pha": "n/a", + "q_au_1": "1.2", + "q_au_2": "4.65" + }, + { + "designation": "(2010 KH)", + "discovery_date": "2010-05-16T00:00:00.000Z", + "h_mag": "19.4", + "i_deg": "14.57", + "moid_au": "0.367", + "orbit_class": "Amor", + "period_yr": "4.59", + "pha": "N", + "q_au_1": "1.24", + "q_au_2": "4.28" + }, + { + "designation": "(2010 JM151)", + "discovery_date": "2010-05-14T00:00:00.000Z", + "h_mag": "19.6", + "i_deg": "16.65", + "moid_au": "0.111", + "orbit_class": "Apollo", + "period_yr": "2.21", + "pha": "N", + "q_au_1": "0.88", + "q_au_2": "2.52" + }, + { + "designation": "(2010 JH87)", + "discovery_date": "2010-05-11T00:00:00.000Z", + "h_mag": "19.6", + "i_deg": "43.78", + "moid_au": "0.221", + "orbit_class": "Apollo", + "period_yr": "1.91", + "pha": "N", + "q_au_1": "0.71", + "q_au_2": "2.37" + }, + { + "designation": "(2010 JG87)", + "discovery_date": "2010-05-11T00:00:00.000Z", + "h_mag": "19.1", + "i_deg": "16.91", + "moid_au": "0.209", + "orbit_class": "Apollo", + "period_yr": "4.59", + "pha": "N", + "q_au_1": "0.14", + "q_au_2": "5.38" + }, + { + "designation": "(2010 JF87)", + "discovery_date": "2010-05-11T00:00:00.000Z", + "h_mag": "19.2", + "i_deg": "24.93", + "moid_au": "0.053", + "orbit_class": "Apollo", + "period_yr": "3.8", + "pha": "N", + "q_au_1": "0.92", + "q_au_2": "3.95" + }, + { + "designation": "(2010 JE87)", + "discovery_date": "2010-05-10T00:00:00.000Z", + "h_mag": "20.8", + "i_deg": "16.92", + "moid_au": "0.035", + "orbit_class": "Aten", + "period_yr": "0.86", + "pha": "Y", + "q_au_1": "0.51", + "q_au_2": "1.3" + }, + { + "designation": "(2010 JD87)", + "discovery_date": "2010-05-07T00:00:00.000Z", + "h_mag": "19.2", + "i_deg": "24.6", + "moid_au": "0.283", + "orbit_class": "Apollo", + "period_yr": "1.71", + "pha": "N", + "q_au_1": "0.51", + "q_au_2": "2.34" + }, + { + "designation": "P/2010 JC81 (WISE)", + "discovery_date": "2010-05-10T00:00:00.000Z", + "i_deg": "38.69", + "moid_au": "0.828", + "orbit_class": "Halley-type Comet*", + "period_yr": "23.19", + "pha": "n/a", + "q_au_1": "1.81", + "q_au_2": "14.46" + }, + { + "designation": "(2010 JA43)", + "discovery_date": "2010-05-04T00:00:00.000Z", + "h_mag": "20.9", + "i_deg": "36.46", + "moid_au": "0.186", + "orbit_class": "Amor", + "period_yr": "2.23", + "pha": "N", + "q_au_1": "1.03", + "q_au_2": "2.38" + }, + { + "designation": "(2010 JN33)", + "discovery_date": "2010-05-03T00:00:00.000Z", + "h_mag": "20.4", + "i_deg": "53.15", + "moid_au": "0.257", + "orbit_class": "Amor", + "period_yr": "1.94", + "pha": "N", + "q_au_1": "1.11", + "q_au_2": "2" + }, + { + "designation": "C/2010 J4 (WISE)", + "discovery_date": "2010-05-12T00:00:00.000Z", + "i_deg": "162.3", + "moid_au": "0.307", + "orbit_class": "Parabolic Comet", + "pha": "n/a", + "q_au_1": "1.09" + }, + { + "designation": "(2010 HZ108)", + "discovery_date": "2010-04-25T00:00:00.000Z", + "h_mag": "20.9", + "i_deg": "22.88", + "moid_au": "0.108", + "orbit_class": "Apollo", + "period_yr": "1.39", + "pha": "N", + "q_au_1": "0.99", + "q_au_2": "1.51" + }, + { + "designation": "(2010 HX107)", + "discovery_date": "2010-04-20T00:00:00.000Z", + "h_mag": "23.6", + "i_deg": "3.36", + "moid_au": "0.014", + "orbit_class": "Aten", + "period_yr": "0.72", + "pha": "N", + "q_au_1": "0.56", + "q_au_2": "1.04" + }, + { + "designation": "(2010 HZ104)", + "discovery_date": "2010-04-23T00:00:00.000Z", + "h_mag": "22.5", + "i_deg": "20.24", + "moid_au": "0.029", + "orbit_class": "Apollo", + "period_yr": "3.37", + "pha": "N", + "q_au_1": "0.97", + "q_au_2": "3.52" + }, + { + "designation": "(2010 HW81)", + "discovery_date": "2010-04-25T00:00:00.000Z", + "h_mag": "21.4", + "i_deg": "12.77", + "moid_au": "0.117", + "orbit_class": "Apollo", + "period_yr": "1.33", + "pha": "N", + "q_au_1": "0.33", + "q_au_2": "2.1" + }, + { + "designation": "(2010 HD33)", + "discovery_date": "2010-04-20T00:00:00.000Z", + "h_mag": "18.3", + "i_deg": "24.43", + "moid_au": "0.372", + "orbit_class": "Amor", + "period_yr": "4.24", + "pha": "N", + "q_au_1": "1.27", + "q_au_2": "3.97" + }, + { + "designation": "(2010 GV147)", + "discovery_date": "2010-04-14T00:00:00.000Z", + "h_mag": "18.5", + "i_deg": "44.05", + "moid_au": "0.316", + "orbit_class": "Aten", + "period_yr": "0.94", + "pha": "N", + "q_au_1": "0.33", + "q_au_2": "1.59" + }, + { + "designation": "(2010 GR75)", + "discovery_date": "2010-04-13T00:00:00.000Z", + "h_mag": "19.6", + "i_deg": "17.78", + "moid_au": "0.299", + "orbit_class": "Apollo", + "period_yr": "2.27", + "pha": "N", + "q_au_1": "0.63", + "q_au_2": "2.82" + }, + { + "designation": "(2010 GQ75)", + "discovery_date": "2010-04-12T00:00:00.000Z", + "h_mag": "20.2", + "i_deg": "43.23", + "moid_au": "0.598", + "orbit_class": "Apollo", + "period_yr": "3.79", + "pha": "N", + "q_au_1": "0.33", + "q_au_2": "4.53" + }, + { + "designation": "(2010 GP67)", + "discovery_date": "2010-04-11T00:00:00.000Z", + "h_mag": "22.3", + "i_deg": "13.27", + "moid_au": "0.018", + "orbit_class": "Apollo", + "period_yr": "1.18", + "pha": "N", + "q_au_1": "0.99", + "q_au_2": "1.23" + }, + { + "designation": "(2010 GH65)", + "discovery_date": "2010-04-10T00:00:00.000Z", + "h_mag": "18.8", + "i_deg": "21.04", + "moid_au": "0.15", + "orbit_class": "Amor", + "period_yr": "4.45", + "pha": "N", + "q_au_1": "1.05", + "q_au_2": "4.36" + }, + { + "designation": "(2010 GX62)", + "discovery_date": "2010-04-10T00:00:00.000Z", + "h_mag": "20", + "i_deg": "21.66", + "moid_au": "0.013", + "orbit_class": "Apollo", + "period_yr": "5.07", + "pha": "Y", + "q_au_1": "0.87", + "q_au_2": "5.03" + }, + { + "designation": "(2010 GW62)", + "discovery_date": "2010-04-09T00:00:00.000Z", + "h_mag": "19.4", + "i_deg": "32.43", + "moid_au": "0.44", + "orbit_class": "Apollo", + "period_yr": "1.43", + "pha": "N", + "q_au_1": "0.54", + "q_au_2": "2" + }, + { + "designation": "(2010 GF25)", + "discovery_date": "2010-04-02T00:00:00.000Z", + "h_mag": "19.1", + "i_deg": "38.49", + "moid_au": "0.399", + "orbit_class": "Apollo", + "period_yr": "1.7", + "pha": "N", + "q_au_1": "0.37", + "q_au_2": "2.47" + }, + { + "designation": "(2010 GE25)", + "discovery_date": "2010-04-01T00:00:00.000Z", + "h_mag": "20", + "i_deg": "21.66", + "moid_au": "0.22", + "orbit_class": "Amor", + "period_yr": "2.97", + "pha": "N", + "q_au_1": "1.1", + "q_au_2": "3.03" + }, + { + "designation": "(2010 GK23)", + "discovery_date": "2010-04-05T00:00:00.000Z", + "h_mag": "19.7", + "i_deg": "34.77", + "moid_au": "0.097", + "orbit_class": "Apollo", + "period_yr": "4.32", + "pha": "N", + "q_au_1": "0.87", + "q_au_2": "4.43" + }, + { + "designation": "C/2010 G3 (WISE)", + "discovery_date": "2010-04-14T00:00:00.000Z", + "i_deg": "108.27", + "moid_au": "4.492", + "orbit_class": "Comet", + "period_yr": "135070.2", + "pha": "n/a", + "q_au_1": "4.91", + "q_au_2": "5260.08" + }, + { + "designation": "C/2010 FB87 (WISE-Garradd)", + "discovery_date": "2010-03-28T00:00:00.000Z", + "i_deg": "107.63", + "moid_au": "2.538", + "orbit_class": "Comet", + "period_yr": "5176.82", + "pha": "n/a", + "q_au_1": "2.84", + "q_au_2": "595.66" + }, + { + "designation": "(2010 FJ81)", + "discovery_date": "2010-03-31T00:00:00.000Z", + "h_mag": "20.8", + "i_deg": "42.54", + "moid_au": "0.128", + "orbit_class": "Amor", + "period_yr": "6.82", + "pha": "N", + "q_au_1": "1.14", + "q_au_2": "6.06" + }, + { + "designation": "(2010 FH81)", + "discovery_date": "2010-03-31T00:00:00.000Z", + "h_mag": "21.6", + "i_deg": "16.79", + "moid_au": "0.034", + "orbit_class": "Apollo", + "period_yr": "1.36", + "pha": "Y", + "q_au_1": "0.97", + "q_au_2": "1.48" + }, + { + "designation": "(2010 FG81)", + "discovery_date": "2010-03-26T00:00:00.000Z", + "h_mag": "23.3", + "i_deg": "7.97", + "moid_au": "0.019", + "orbit_class": "Apollo", + "period_yr": "2.14", + "pha": "N", + "q_au_1": "1.01", + "q_au_2": "2.31" + }, + { + "designation": "(2010 FC81)", + "discovery_date": "2010-03-30T00:00:00.000Z", + "h_mag": "21.8", + "i_deg": "1.68", + "moid_au": "0.027", + "orbit_class": "Apollo", + "period_yr": "4.38", + "pha": "Y", + "q_au_1": "1.01", + "q_au_2": "4.35" + }, + { + "designation": "(2010 FB81)", + "discovery_date": "2010-03-30T00:00:00.000Z", + "h_mag": "21.4", + "i_deg": "9.48", + "moid_au": "0.096", + "orbit_class": "Amor", + "period_yr": "4.14", + "pha": "N", + "q_au_1": "1.02", + "q_au_2": "4.14" + }, + { + "designation": "(2010 FA81)", + "discovery_date": "2010-03-29T00:00:00.000Z", + "h_mag": "22.3", + "i_deg": "15.48", + "moid_au": "0.035", + "orbit_class": "Apollo", + "period_yr": "1.31", + "pha": "N", + "q_au_1": "1.01", + "q_au_2": "1.38" + }, + { + "designation": "(2010 FZ80)", + "discovery_date": "2010-03-28T00:00:00.000Z", + "h_mag": "20.3", + "i_deg": "27.34", + "moid_au": "0.297", + "orbit_class": "Apollo", + "period_yr": "4.56", + "pha": "N", + "q_au_1": "0.7", + "q_au_2": "4.8" + }, + { + "designation": "(2010 FY80)", + "discovery_date": "2010-03-28T00:00:00.000Z", + "h_mag": "19.7", + "i_deg": "18.81", + "moid_au": "0.14", + "orbit_class": "Amor", + "period_yr": "4.42", + "pha": "N", + "q_au_1": "1.05", + "q_au_2": "4.35" + }, + { + "designation": "(2010 FX80)", + "discovery_date": "2010-03-27T00:00:00.000Z", + "h_mag": "20.6", + "i_deg": "36.96", + "moid_au": "0.535", + "orbit_class": "Amor", + "period_yr": "3.19", + "pha": "N", + "q_au_1": "1.18", + "q_au_2": "3.15" + }, + { + "designation": "(2010 EX119)", + "discovery_date": "2010-03-13T00:00:00.000Z", + "h_mag": "19.4", + "i_deg": "15.57", + "moid_au": "0.159", + "orbit_class": "Apollo", + "period_yr": "2.63", + "pha": "N", + "q_au_1": "0.77", + "q_au_2": "3.04" + }, + { + "designation": "(2010 EN44)", + "discovery_date": "2010-03-12T00:00:00.000Z", + "h_mag": "24.3", + "i_deg": "10.18", + "moid_au": "0.023", + "orbit_class": "Apollo", + "period_yr": "1.22", + "pha": "N", + "q_au_1": "0.96", + "q_au_2": "1.33" + }, + { + "designation": "(2010 EX11)", + "discovery_date": "2010-03-03T00:00:00.000Z", + "h_mag": "24.1", + "i_deg": "9.75", + "moid_au": "0.029", + "orbit_class": "Aten", + "period_yr": "0.93", + "pha": "N", + "q_au_1": "0.85", + "q_au_2": "1.06" + }, + { + "designation": "C/2010 E3 (WISE)", + "discovery_date": "2010-03-05T00:00:00.000Z", + "i_deg": "96.48", + "moid_au": "1.546", + "orbit_class": "Parabolic Comet", + "pha": "n/a", + "q_au_1": "2.27" + }, + { + "designation": "(2010 DJ77)", + "discovery_date": "2010-02-20T00:00:00.000Z", + "h_mag": "21.6", + "i_deg": "24.98", + "moid_au": "0.05", + "orbit_class": "Aten", + "period_yr": "0.93", + "pha": "Y", + "q_au_1": "0.75", + "q_au_2": "1.16" + }, + { + "designation": "(2010 DH77)", + "discovery_date": "2010-02-19T00:00:00.000Z", + "h_mag": "21.8", + "i_deg": "34.38", + "moid_au": "0.146", + "orbit_class": "Apollo", + "period_yr": "5.9", + "pha": "N", + "q_au_1": "0.95", + "q_au_2": "5.58" + }, + { + "designation": "(2010 DG77)", + "discovery_date": "2010-02-19T00:00:00.000Z", + "h_mag": "21.4", + "i_deg": "14.81", + "moid_au": "0.009", + "orbit_class": "Apollo", + "period_yr": "3.02", + "pha": "Y", + "q_au_1": "0.96", + "q_au_2": "3.22" + }, + { + "designation": "(2010 DM56)", + "discovery_date": "2010-02-19T00:00:00.000Z", + "h_mag": "19.9", + "i_deg": "25.61", + "moid_au": "0.006", + "orbit_class": "Apollo", + "period_yr": "1.49", + "pha": "Y", + "q_au_1": "0.92", + "q_au_2": "1.69" + }, + { + "designation": "(2010 DJ56)", + "discovery_date": "2010-02-23T00:00:00.000Z", + "h_mag": "19.3", + "i_deg": "34.84", + "moid_au": "0.028", + "orbit_class": "Apollo", + "period_yr": "1.4", + "pha": "Y", + "q_au_1": "0.94", + "q_au_2": "1.56" + }, + { + "designation": "(2010 DH56)", + "discovery_date": "2010-02-20T00:00:00.000Z", + "h_mag": "20.3", + "i_deg": "33.67", + "moid_au": "0.333", + "orbit_class": "Apollo", + "period_yr": "3.35", + "pha": "N", + "q_au_1": "0.97", + "q_au_2": "3.51" + }, + { + "designation": "C/2010 DG56 (WISE)", + "discovery_date": "2010-02-18T00:00:00.000Z", + "i_deg": "160.42", + "moid_au": "0.65", + "orbit_class": "Comet", + "period_yr": "555.03", + "pha": "n/a", + "q_au_1": "1.59", + "q_au_2": "133.48" + }, + { + "designation": "(2010 DK34)", + "discovery_date": "2010-02-20T00:00:00.000Z", + "h_mag": "20.4", + "i_deg": "27.34", + "moid_au": "0.333", + "orbit_class": "Apollo", + "period_yr": "4.54", + "pha": "N", + "q_au_1": "0.65", + "q_au_2": "4.83" + }, + { + "designation": "(2010 DM21)", + "discovery_date": "2010-02-16T00:00:00.000Z", + "h_mag": "20.2", + "i_deg": "21.15", + "moid_au": "0.26", + "orbit_class": "Apollo", + "period_yr": "4.85", + "pha": "N", + "q_au_1": "0.98", + "q_au_2": "4.74" + }, + { + "designation": "C/2010 D4 (WISE)", + "discovery_date": "2010-02-28T00:00:00.000Z", + "i_deg": "105.66", + "moid_au": "6.373", + "orbit_class": "Comet", + "period_yr": "520.06", + "pha": "n/a", + "q_au_1": "7.15", + "q_au_2": "122.19" + }, + { + "designation": "C/2010 D3 (WISE)", + "discovery_date": "2010-02-26T00:00:00.000Z", + "i_deg": "76.39", + "moid_au": "3.586", + "orbit_class": "Comet", + "period_yr": "1254179.62", + "pha": "n/a", + "q_au_1": "4.25", + "q_au_2": "23255.11" + }, + { + "designation": "P/2010 D2 (WISE)", + "discovery_date": "2010-02-25T00:00:00.000Z", + "i_deg": "57.18", + "moid_au": "2.945", + "orbit_class": "Jupiter-family Comet*", + "period_yr": "17.3", + "pha": "n/a", + "q_au_1": "3.66", + "q_au_2": "9.72" + }, + { + "designation": "P/2010 D1 (WISE)", + "discovery_date": "2010-02-17T00:00:00.000Z", + "i_deg": "9.65", + "moid_au": "1.683", + "orbit_class": "Jupiter-family Comet", + "period_yr": "8.45", + "pha": "n/a", + "q_au_1": "2.67", + "q_au_2": "5.63" + }, + { + "designation": "(2010 CN141)", + "discovery_date": "2010-02-14T00:00:00.000Z", + "h_mag": "22.4", + "i_deg": "23.8", + "moid_au": "0.06", + "orbit_class": "Apollo", + "period_yr": "1.87", + "pha": "N", + "q_au_1": "0.91", + "q_au_2": "2.12" + }, + { + "designation": "(2010 CP140)", + "discovery_date": "2010-02-13T00:00:00.000Z", + "h_mag": "19.5", + "i_deg": "14.47", + "moid_au": "0.097", + "orbit_class": "Apollo", + "period_yr": "2.62", + "pha": "N", + "q_au_1": "0.88", + "q_au_2": "2.92" + }, + { + "designation": "(2010 CC55)", + "discovery_date": "2010-02-11T00:00:00.000Z", + "h_mag": "22.5", + "i_deg": "6.78", + "moid_au": "0.079", + "orbit_class": "Apollo", + "period_yr": "1.92", + "pha": "N", + "q_au_1": "0.82", + "q_au_2": "2.27" + }, + { + "designation": "(2010 CA55)", + "discovery_date": "2010-02-05T00:00:00.000Z", + "h_mag": "21.3", + "i_deg": "58.85", + "moid_au": "0.151", + "orbit_class": "Apollo", + "period_yr": "12.13", + "pha": "N", + "q_au_1": "0.67", + "q_au_2": "9.89" + }, + { + "designation": "(2010 CH18)", + "discovery_date": "2010-02-09T00:00:00.000Z", + "h_mag": "19", + "i_deg": "27.15", + "moid_au": "0.333", + "orbit_class": "Amor", + "period_yr": "4.21", + "pha": "N", + "q_au_1": "1.12", + "q_au_2": "4.09" + }, + { + "designation": "(2010 CG18)", + "discovery_date": "2010-02-06T00:00:00.000Z", + "h_mag": "20.8", + "i_deg": "10.15", + "moid_au": "0.13", + "orbit_class": "Amor", + "period_yr": "1.73", + "pha": "N", + "q_au_1": "1.11", + "q_au_2": "1.76" + }, + { + "designation": "(2010 CO1)", + "discovery_date": "2010-02-01T00:00:00.000Z", + "h_mag": "21.5", + "i_deg": "24.03", + "moid_au": "0.023", + "orbit_class": "Apollo", + "period_yr": "1.02", + "pha": "Y", + "q_au_1": "0.79", + "q_au_2": "1.23" + }, + { + "designation": "P/2010 B2 (WISE)", + "discovery_date": "2010-01-22T00:00:00.000Z", + "i_deg": "8.93", + "moid_au": "0.63", + "orbit_class": "Encke-type Comet", + "period_yr": "5.49", + "pha": "n/a", + "q_au_1": "1.62", + "q_au_2": "4.6" + }, + { + "designation": "(2010 AU118)", + "discovery_date": "2010-01-13T00:00:00.000Z", + "h_mag": "17.7", + "i_deg": "43.73", + "moid_au": "0.147", + "orbit_class": "Amor", + "period_yr": "2.06", + "pha": "N", + "q_au_1": "1.13", + "q_au_2": "2.12" + }, + { + "designation": "(2010 AG79)", + "discovery_date": "2010-01-13T00:00:00.000Z", + "h_mag": "19.9", + "i_deg": "32.96", + "moid_au": "0.244", + "orbit_class": "Amor", + "period_yr": "4.95", + "pha": "N", + "q_au_1": "1.22", + "q_au_2": "4.59" + }, + { + "designation": "(2010 AB78)", + "discovery_date": "2010-01-12T00:00:00.000Z", + "h_mag": "18.3", + "i_deg": "33.26", + "moid_au": "0.206", + "orbit_class": "Amor", + "period_yr": "3.38", + "pha": "N", + "q_au_1": "1.02", + "q_au_2": "3.49" + } +] diff --git a/test/inputs/json/misc/80aff.json b/test/inputs/json/misc/80aff.json index e4d7219fe..b7a284651 100644 --- a/test/inputs/json/misc/80aff.json +++ b/test/inputs/json/misc/80aff.json @@ -1 +1,235 @@ -{"count": 25, "facets": {}, "results": [{"name": "Other public or mixed entities, created by law whose purpose is to act in the public interest", "parent": 6, "items": 264, "created_at": "2015-06-20T23:47:50.629565", "updated_at": "2015-06-20T23:47:50.629571", "uri": "http://api.lobbyfacts.eu/api/1/category/66", "id": 66}, {"name": "Transnational associations and networks of public regional or other sub-national authorities", "parent": 6, "items": 86, "created_at": "2015-06-20T23:52:01.435197", "updated_at": "2015-06-20T23:52:01.435209", "uri": "http://api.lobbyfacts.eu/api/1/category/65", "id": 65}, {"name": "Other sub-national public authorities", "parent": 6, "items": 131, "created_at": "2015-06-20T23:45:21.341529", "updated_at": "2015-06-20T23:45:21.341540", "uri": "http://api.lobbyfacts.eu/api/1/category/64", "id": 64}, {"name": "Regional structures", "parent": 6, "items": 139, "created_at": "2015-06-20T23:46:06.687738", "updated_at": "2015-06-20T23:46:06.687750", "uri": "http://api.lobbyfacts.eu/api/1/category/63", "id": 63}, {"name": "Other public or mixed entities, etc.", "parent": 6, "items": 1, "created_at": "2015-04-24T01:48:38.622659", "updated_at": "2015-06-08T21:59:49.003576", "uri": "http://api.lobbyfacts.eu/api/1/category/62", "id": 62}, {"name": "Local, regional and municipal authorities (at sub-national level)", "parent": 6, "items": 2, "created_at": "2015-04-24T01:46:58.298572", "updated_at": "2015-06-08T21:48:45.111744", "uri": "http://api.lobbyfacts.eu/api/1/category/61", "id": 61}, {"name": "Organisations representing churches and religious communities", "parent": 5, "items": 62, "created_at": "2015-04-24T01:53:24.257993", "updated_at": "2015-04-24T01:53:24.258004", "uri": "http://api.lobbyfacts.eu/api/1/category/51", "id": 51}, {"name": "Academic institutions", "parent": 4, "items": 315, "created_at": "2015-04-24T01:49:12.530337", "updated_at": "2015-04-24T01:49:12.530348", "uri": "http://api.lobbyfacts.eu/api/1/category/42", "id": 42}, {"name": "Think tanks and research institutions", "parent": 4, "items": 606, "created_at": "2015-04-24T01:47:16.228011", "updated_at": "2015-04-24T01:47:16.228017", "uri": "http://api.lobbyfacts.eu/api/1/category/41", "id": 41}, {"name": "Non-governmental organisations, platforms and networks and similar", "parent": 3, "items": 3120, "created_at": "2015-04-24T01:46:51.539328", "updated_at": "2015-04-24T01:46:51.539333", "uri": "http://api.lobbyfacts.eu/api/1/category/31", "id": 31}, {"name": "Other in house lobbyists", "parent": 2, "items": 368, "created_at": "2015-06-20T23:45:13.999259", "updated_at": "2015-06-20T23:45:13.999266", "uri": "http://api.lobbyfacts.eu/api/1/category/27", "id": 27}, {"name": "Trade unions and professional associations", "parent": 2, "items": 783, "created_at": "2015-06-20T23:45:15.961411", "updated_at": "2015-06-20T23:45:15.961422", "uri": "http://api.lobbyfacts.eu/api/1/category/26", "id": 26}, {"name": "Trade and business organisations", "parent": 2, "items": 2477, "created_at": "2015-06-20T23:45:10.255417", "updated_at": "2015-06-20T23:45:10.255424", "uri": "http://api.lobbyfacts.eu/api/1/category/25", "id": 25}, {"name": "Other similar organisations", "parent": 2, "items": 2, "created_at": "2015-04-24T01:46:54.547344", "updated_at": "2015-06-08T21:59:29.739023", "uri": "http://api.lobbyfacts.eu/api/1/category/24", "id": 24}, {"name": "Trade, business & professional associations", "parent": 2, "items": 2, "created_at": "2015-04-24T01:46:52.124504", "updated_at": "2015-06-08T22:00:51.075491", "uri": "http://api.lobbyfacts.eu/api/1/category/22", "id": 22}, {"name": "Companies & groups", "parent": 2, "items": 2166, "created_at": "2015-04-24T01:46:51.879074", "updated_at": "2015-04-24T01:46:51.879079", "uri": "http://api.lobbyfacts.eu/api/1/category/21", "id": 21}, {"name": "Self-employed consultants", "parent": 1, "items": 483, "created_at": "2015-04-24T01:46:56.610098", "updated_at": "2015-04-24T01:46:56.610103", "uri": "http://api.lobbyfacts.eu/api/1/category/13", "id": 13}, {"name": "Law firms", "parent": 1, "items": 163, "created_at": "2015-04-24T01:47:16.905163", "updated_at": "2015-04-24T01:47:16.905173", "uri": "http://api.lobbyfacts.eu/api/1/category/12", "id": 12}, {"name": "Professional consultancies", "parent": 1, "items": 852, "created_at": "2015-04-24T01:46:54.278376", "updated_at": "2015-04-24T01:46:54.278380", "uri": "http://api.lobbyfacts.eu/api/1/category/11", "id": 11}, {"name": "VI - Organisations representing local, regional and municipal authorities, other public or mixed entities, etc.", "parent": null, "items": 623, "created_at": "2015-04-24T01:46:58.289906", "updated_at": "2015-04-24T01:46:58.289912", "uri": "http://api.lobbyfacts.eu/api/1/category/6", "id": 6}, {"name": "V - Organisations representing churches and religious communities", "parent": null, "items": 62, "created_at": "2015-04-24T01:53:24.174057", "updated_at": "2015-04-24T01:53:24.174068", "uri": "http://api.lobbyfacts.eu/api/1/category/5", "id": 5}, {"name": "IV - Think tanks, research and academic institutions", "parent": null, "items": 921, "created_at": "2015-04-24T01:47:16.221072", "updated_at": "2015-04-24T01:47:16.221083", "uri": "http://api.lobbyfacts.eu/api/1/category/4", "id": 4}, {"name": "III - Non-governmental organisations", "parent": null, "items": 3120, "created_at": "2015-04-24T01:46:51.534790", "updated_at": "2015-04-24T01:46:51.534797", "uri": "http://api.lobbyfacts.eu/api/1/category/3", "id": 3}, {"name": "II - In-house lobbyists and trade/professional associations", "parent": null, "items": 5799, "created_at": "2015-04-24T01:46:51.875300", "updated_at": "2015-06-08T22:00:51.062663", "uri": "http://api.lobbyfacts.eu/api/1/category/2", "id": 2}, {"name": "I - Professional consultancies/law firms/self-employed consultants", "parent": null, "items": 1498, "created_at": "2015-04-24T01:46:54.274270", "updated_at": "2015-04-24T01:46:54.274275", "uri": "http://api.lobbyfacts.eu/api/1/category/1", "id": 1}], "next": false, "limit": 50, "offset": 0, "previous": false} \ No newline at end of file +{ + "count": 25, + "facets": {}, + "results": [ + { + "name": "Other public or mixed entities, created by law whose purpose is to act in the public interest", + "parent": 6, + "items": 264, + "created_at": "2015-06-20T23:47:50.629565Z", + "updated_at": "2015-06-20T23:47:50.629571Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/66", + "id": 66 + }, + { + "name": "Transnational associations and networks of public regional or other sub-national authorities", + "parent": 6, + "items": 86, + "created_at": "2015-06-20T23:52:01.435197Z", + "updated_at": "2015-06-20T23:52:01.435209Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/65", + "id": 65 + }, + { + "name": "Other sub-national public authorities", + "parent": 6, + "items": 131, + "created_at": "2015-06-20T23:45:21.341529Z", + "updated_at": "2015-06-20T23:45:21.341540Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/64", + "id": 64 + }, + { + "name": "Regional structures", + "parent": 6, + "items": 139, + "created_at": "2015-06-20T23:46:06.687738Z", + "updated_at": "2015-06-20T23:46:06.687750Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/63", + "id": 63 + }, + { + "name": "Other public or mixed entities, etc.", + "parent": 6, + "items": 1, + "created_at": "2015-04-24T01:48:38.622659Z", + "updated_at": "2015-06-08T21:59:49.003576Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/62", + "id": 62 + }, + { + "name": "Local, regional and municipal authorities (at sub-national level)", + "parent": 6, + "items": 2, + "created_at": "2015-04-24T01:46:58.298572Z", + "updated_at": "2015-06-08T21:48:45.111744Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/61", + "id": 61 + }, + { + "name": "Organisations representing churches and religious communities", + "parent": 5, + "items": 62, + "created_at": "2015-04-24T01:53:24.257993Z", + "updated_at": "2015-04-24T01:53:24.258004Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/51", + "id": 51 + }, + { + "name": "Academic institutions", + "parent": 4, + "items": 315, + "created_at": "2015-04-24T01:49:12.530337Z", + "updated_at": "2015-04-24T01:49:12.530348Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/42", + "id": 42 + }, + { + "name": "Think tanks and research institutions", + "parent": 4, + "items": 606, + "created_at": "2015-04-24T01:47:16.228011Z", + "updated_at": "2015-04-24T01:47:16.228017Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/41", + "id": 41 + }, + { + "name": "Non-governmental organisations, platforms and networks and similar", + "parent": 3, + "items": 3120, + "created_at": "2015-04-24T01:46:51.539328Z", + "updated_at": "2015-04-24T01:46:51.539333Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/31", + "id": 31 + }, + { + "name": "Other in house lobbyists", + "parent": 2, + "items": 368, + "created_at": "2015-06-20T23:45:13.999259Z", + "updated_at": "2015-06-20T23:45:13.999266Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/27", + "id": 27 + }, + { + "name": "Trade unions and professional associations", + "parent": 2, + "items": 783, + "created_at": "2015-06-20T23:45:15.961411Z", + "updated_at": "2015-06-20T23:45:15.961422Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/26", + "id": 26 + }, + { + "name": "Trade and business organisations", + "parent": 2, + "items": 2477, + "created_at": "2015-06-20T23:45:10.255417Z", + "updated_at": "2015-06-20T23:45:10.255424Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/25", + "id": 25 + }, + { + "name": "Other similar organisations", + "parent": 2, + "items": 2, + "created_at": "2015-04-24T01:46:54.547344Z", + "updated_at": "2015-06-08T21:59:29.739023Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/24", + "id": 24 + }, + { + "name": "Trade, business & professional associations", + "parent": 2, + "items": 2, + "created_at": "2015-04-24T01:46:52.124504Z", + "updated_at": "2015-06-08T22:00:51.075491Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/22", + "id": 22 + }, + { + "name": "Companies & groups", + "parent": 2, + "items": 2166, + "created_at": "2015-04-24T01:46:51.879074Z", + "updated_at": "2015-04-24T01:46:51.879079Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/21", + "id": 21 + }, + { + "name": "Self-employed consultants", + "parent": 1, + "items": 483, + "created_at": "2015-04-24T01:46:56.610098Z", + "updated_at": "2015-04-24T01:46:56.610103Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/13", + "id": 13 + }, + { + "name": "Law firms", + "parent": 1, + "items": 163, + "created_at": "2015-04-24T01:47:16.905163Z", + "updated_at": "2015-04-24T01:47:16.905173Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/12", + "id": 12 + }, + { + "name": "Professional consultancies", + "parent": 1, + "items": 852, + "created_at": "2015-04-24T01:46:54.278376Z", + "updated_at": "2015-04-24T01:46:54.278380Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/11", + "id": 11 + }, + { + "name": "VI - Organisations representing local, regional and municipal authorities, other public or mixed entities, etc.", + "parent": null, + "items": 623, + "created_at": "2015-04-24T01:46:58.289906Z", + "updated_at": "2015-04-24T01:46:58.289912Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/6", + "id": 6 + }, + { + "name": "V - Organisations representing churches and religious communities", + "parent": null, + "items": 62, + "created_at": "2015-04-24T01:53:24.174057Z", + "updated_at": "2015-04-24T01:53:24.174068Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/5", + "id": 5 + }, + { + "name": "IV - Think tanks, research and academic institutions", + "parent": null, + "items": 921, + "created_at": "2015-04-24T01:47:16.221072Z", + "updated_at": "2015-04-24T01:47:16.221083Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/4", + "id": 4 + }, + { + "name": "III - Non-governmental organisations", + "parent": null, + "items": 3120, + "created_at": "2015-04-24T01:46:51.534790Z", + "updated_at": "2015-04-24T01:46:51.534797Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/3", + "id": 3 + }, + { + "name": "II - In-house lobbyists and trade/professional associations", + "parent": null, + "items": 5799, + "created_at": "2015-04-24T01:46:51.875300Z", + "updated_at": "2015-06-08T22:00:51.062663Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/2", + "id": 2 + }, + { + "name": "I - Professional consultancies/law firms/self-employed consultants", + "parent": null, + "items": 1498, + "created_at": "2015-04-24T01:46:54.274270Z", + "updated_at": "2015-04-24T01:46:54.274275Z", + "uri": "http://api.lobbyfacts.eu/api/1/category/1", + "id": 1 + } + ], + "next": false, + "limit": 50, + "offset": 0, + "previous": false +} diff --git a/test/inputs/json/misc/9ac3b.json b/test/inputs/json/misc/9ac3b.json index b135e8d2b..edb224684 100644 --- a/test/inputs/json/misc/9ac3b.json +++ b/test/inputs/json/misc/9ac3b.json @@ -1 +1,660 @@ -{"count": 36713, "facets": {}, "results": [{"status": "inactive", "first_name": "Lasse Hamilton", "last_name": "Heidemann", "name": "Lasse Hamilton Heidemann", "title": null, "created_at": "2015-12-05T00:52:13.534368", "uri": "http://api.lobbyfacts.eu/api/1/person/ffff1e3de5aa4db8ace7dcb080a4c2e0", "updated_at": "2016-02-04T01:11:29.396185", "entity": "ba0821d8786b4764b4e83d48a62f155e", "position": null, "id": "ffff1e3de5aa4db8ace7dcb080a4c2e0"}, {"status": "inactive", "first_name": "Peter H.P.", "last_name": "Sierat", "name": "Mr Peter H.P. Sierat", "title": "Mr", "created_at": "2015-04-24T01:49:19.714706", "uri": "http://api.lobbyfacts.eu/api/1/person/fffdcd840ce74712ab96125b3c8a29f2", "updated_at": "2016-04-02T00:00:39.433543", "entity": "cb57ae8983dc4ceaba72e7befd59b255", "position": "Algemeen directeur", "id": "fffdcd840ce74712ab96125b3c8a29f2"}, {"status": "inactive", "first_name": "Aleksandra", "last_name": "Kluczka", "name": "Ms Aleksandra Kluczka", "title": "Ms", "created_at": "2015-04-24T02:13:06.918194", "uri": "http://api.lobbyfacts.eu/api/1/person/fffd214acfab4df39770a3cb1cd2a16e", "updated_at": "2015-08-04T23:02:51.578546", "entity": "edc26b7e632146039f0cb3c673d9e5b5", "position": null, "id": "fffd214acfab4df39770a3cb1cd2a16e"}, {"status": "active", "first_name": "Nicholas", "last_name": "Cook", "name": "Mr Nicholas Cook", "title": "Mr", "created_at": "2016-04-28T01:46:54.088777", "uri": "http://api.lobbyfacts.eu/api/1/person/fffba075e7244af5beaf4cb4df492d0c", "updated_at": "2016-04-28T01:46:54.086259", "entity": "2bd41f5a042a4584afe2e2faf7f99d9b", "position": null, "id": "fffba075e7244af5beaf4cb4df492d0c"}, {"status": "active", "first_name": "LORIS", "last_name": "BORGHI", "name": " LORIS BORGHI", "title": null, "created_at": "2016-04-24T01:46:22.432444", "uri": "http://api.lobbyfacts.eu/api/1/person/fff6a7c563db4260833e4a0a5132e06d", "updated_at": "2016-04-24T01:46:22.430054", "entity": "9b890aa4ae8c41c2993408018216ffea", "position": "RETTORE", "id": "fff6a7c563db4260833e4a0a5132e06d"}, {"status": "active", "first_name": "Mary", "last_name": "Booth", "name": "Ms Mary Booth", "title": "Ms", "created_at": "2016-05-06T01:50:28.394132", "uri": "http://api.lobbyfacts.eu/api/1/person/fff42bf8b9bf4553a22a2e54dc060e7b", "updated_at": "2016-05-06T01:50:28.390872", "entity": "4a58ff1f55804c45961de16e03caf8f2", "position": "President", "id": "fff42bf8b9bf4553a22a2e54dc060e7b"}, {"status": "active", "first_name": "Zolt\u00e1n", "last_name": "Dub\u00e9czi ", "name": " Zolt\u00e1n Dub\u00e9czi ", "title": null, "created_at": "2015-04-24T02:33:55.473918", "uri": "http://api.lobbyfacts.eu/api/1/person/fff1ba1aeb93455a9d58d4e8d30106ef", "updated_at": "2015-06-09T00:33:29.597458", "entity": "1604b87b837849e494c502955d9890a6", "position": "f\u0151ttitk\u00e1r", "id": "fff1ba1aeb93455a9d58d4e8d30106ef"}, {"status": "active", "first_name": "Andreas", "last_name": "von Bonin", "name": "Mr Andreas von Bonin", "title": "Mr", "created_at": "2015-10-29T01:59:20.041336", "uri": "http://api.lobbyfacts.eu/api/1/person/fff0688a62b147ce8d4d9e41a8bdf88b", "updated_at": "2015-10-29T01:59:20.040060", "entity": "a944c83d1fe84cabaeff9b672d0d1234", "position": "Partner", "id": "fff0688a62b147ce8d4d9e41a8bdf88b"}, {"status": "active", "first_name": "Jeff", "last_name": "RUPP", "name": "Mr Jeff RUPP", "title": "Mr", "created_at": "2015-04-24T01:55:31.635859", "uri": "http://api.lobbyfacts.eu/api/1/person/ffeb9e9a626945be9b3b24430559d1c9", "updated_at": "2016-08-24T00:25:06.902891", "entity": "4135e9a4a93142eda69d7e9a5cd37c7a", "position": null, "id": "ffeb9e9a626945be9b3b24430559d1c9"}, {"status": "inactive", "first_name": "Marisa", "last_name": "PLOWDEN", "name": "Ms Marisa PLOWDEN", "title": "Ms", "created_at": "2015-08-04T23:38:47.343642", "uri": "http://api.lobbyfacts.eu/api/1/person/ffeb6dc0543a4bdd9c8a785878604da4", "updated_at": "2016-07-29T01:21:54.336544", "entity": "109aaeca90e641b5b0aa218489390222", "position": null, "id": "ffeb6dc0543a4bdd9c8a785878604da4"}, {"status": "active", "first_name": "GOKHAN", "last_name": "BACIK", "name": "Mr GOKHAN BACIK", "title": "Mr", "created_at": "2016-05-29T01:44:59.830189", "uri": "http://api.lobbyfacts.eu/api/1/person/ffe7118837644097bf3c7cf9b9a752c2", "updated_at": "2016-05-29T01:44:59.827812", "entity": "80bbcad3abbc4694a9e35ecc2a8c2179", "position": null, "id": "ffe7118837644097bf3c7cf9b9a752c2"}, {"status": "inactive", "first_name": "Felix", "last_name": "N\u00d6LLER", "name": "Mr Felix N\u00d6LLER", "title": "Mr", "created_at": "2015-08-04T23:30:24.961182", "uri": "http://api.lobbyfacts.eu/api/1/person/ffe39da57ca34c1392974adf5e54cafa", "updated_at": "2015-10-10T00:36:18.906681", "entity": "a38ef74b754a48dcbbfc299e7133472d", "position": null, "id": "ffe39da57ca34c1392974adf5e54cafa"}, {"status": "active", "first_name": "Eric", "last_name": "D\u00e9robert", "name": "Mr Eric D\u00e9robert", "title": "Mr", "created_at": "2016-08-17T01:39:23.665156", "uri": "http://api.lobbyfacts.eu/api/1/person/ffe0b90193684df1a476bfa5e66bc749", "updated_at": "2016-08-17T01:39:23.662897", "entity": "c4e869c531244404abc24f29940de02b", "position": "Pr\u00e9sident", "id": "ffe0b90193684df1a476bfa5e66bc749"}, {"status": "inactive", "first_name": "Xavier", "last_name": "OUSMANE", "name": "Mr Xavier OUSMANE", "title": "Mr", "created_at": "2015-08-04T23:08:26.512050", "uri": "http://api.lobbyfacts.eu/api/1/person/ffdfdf683bac461db2ce125578ef7bf7", "updated_at": "2015-08-30T00:39:28.994682", "entity": "7d9169adde8549ab8a1f0264324d2f1f", "position": null, "id": "ffdfdf683bac461db2ce125578ef7bf7"}, {"status": "active", "first_name": "Tuomo", "last_name": "Kantola", "name": " Tuomo Kantola", "title": null, "created_at": "2016-05-05T02:03:20.848748", "uri": "http://api.lobbyfacts.eu/api/1/person/ffdbd345128d4b32a39f658bb84396da", "updated_at": "2016-05-05T02:03:20.847098", "entity": "47101ad36df340569b9b528b70c5110c", "position": "Toimitusjohtaja", "id": "ffdbd345128d4b32a39f658bb84396da"}, {"status": "active", "first_name": "Anette", "last_name": "HAUFF", "name": "Ms Anette HAUFF", "title": "Ms", "created_at": "2015-08-04T23:29:07.346512", "uri": "http://api.lobbyfacts.eu/api/1/person/ffda7773348f48c2bcb77860a077a231", "updated_at": "2015-08-04T23:29:07.345174", "entity": "2d0354d4776f47c7a5a7453ddbdf2931", "position": null, "id": "ffda7773348f48c2bcb77860a077a231"}, {"status": "inactive", "first_name": "Andrew", "last_name": "CURTIS", "name": "Mr Andrew CURTIS", "title": "Mr", "created_at": "2015-08-04T22:37:37.630107", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd97d5fa9ce411eb8e7f2c16fa032b3", "updated_at": "2015-10-07T23:42:05.080487", "entity": "d15936f25d7449998b977b318738077d", "position": null, "id": "ffd97d5fa9ce411eb8e7f2c16fa032b3"}, {"status": "active", "first_name": "Dr. Alexander", "last_name": "Dix", "name": "Mr Dr. Alexander Dix", "title": "Mr", "created_at": "2016-07-26T02:14:12.400224", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd84a5aadd54a4c9bfa4b054a0a1e5f", "updated_at": "2016-07-26T02:14:12.397991", "entity": "1b4df2f9ead14d7cb0f7216aa2b60dcd", "position": "Stellv. Vorsitzender des Vorstandes", "id": "ffd84a5aadd54a4c9bfa4b054a0a1e5f"}, {"status": "inactive", "first_name": "Arba", "last_name": "Berdica", "name": "Ms Arba Berdica", "title": "Ms", "created_at": "2015-04-24T01:58:46.630945", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd7a7fa1a784d379eb85fd3afb4d117", "updated_at": "2015-07-18T00:05:04.548621", "entity": "c4788736ce5e43f1bc9c8a6a172de9e8", "position": null, "id": "ffd7a7fa1a784d379eb85fd3afb4d117"}, {"status": "active", "first_name": "Robin", "last_name": "Russel", "name": "Mr Robin Russel", "title": "Mr", "created_at": "2015-08-19T00:33:16.773778", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd3e53acfc748a7a1077438ff717151", "updated_at": "2015-08-19T00:33:16.771268", "entity": "51a591f54fb042de953747c255043166", "position": "Operations Director", "id": "ffd3e53acfc748a7a1077438ff717151"}, {"status": "active", "first_name": "Johan", "last_name": "Cloet", "name": "Mr Johan Cloet", "title": "Mr", "created_at": "2015-05-07T21:39:13.187263", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd36cd3a12645179da466ac331153be", "updated_at": "2015-06-09T00:45:34.466401", "entity": "6337b4c5b7124a8ea66536039f7da31d", "position": "Secretary General", "id": "ffd36cd3a12645179da466ac331153be"}, {"status": "active", "first_name": "Lluis", "last_name": "Prat", "name": " Lluis Prat", "title": null, "created_at": "2015-04-24T01:55:37.402043", "uri": "http://api.lobbyfacts.eu/api/1/person/ffcdeb423b28446abcef873c69df242a", "updated_at": "2015-04-28T00:19:34.269864", "entity": "22b145c522cd45b7b9738c1811979c8b", "position": "Secretario", "id": "ffcdeb423b28446abcef873c69df242a"}, {"status": "inactive", "first_name": "STEFAN", "last_name": "KESSLER", "name": "Mr STEFAN KESSLER", "title": "Mr", "created_at": "2015-04-24T02:04:46.096101", "uri": "http://api.lobbyfacts.eu/api/1/person/ffcd441aac3943af8df364f808fccca7", "updated_at": "2015-06-11T00:02:44.145074", "entity": "2567eb47f2144d2885553aaddba6f6e7", "position": null, "id": "ffcd441aac3943af8df364f808fccca7"}, {"status": "active", "first_name": "SANJA", "last_name": "UDOVI\u0106", "name": "Ms SANJA UDOVI\u0106", "title": "Ms", "created_at": "2015-05-24T21:47:17.221327", "uri": "http://api.lobbyfacts.eu/api/1/person/ffccdacbcda64e88b0e08b3950dab345", "updated_at": "2015-06-09T00:52:28.305503", "entity": "60cab7ab53074f8083d6f98c35519495", "position": "OP\u0106INSKA NA\u010cELNICA", "id": "ffccdacbcda64e88b0e08b3950dab345"}, {"status": "active", "first_name": "Lara", "last_name": "LIBRA", "name": "Ms Lara LIBRA", "title": "Ms", "created_at": "2016-02-04T02:54:18.561397", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc74311698745138f9c2b774719c350", "updated_at": "2016-02-04T02:54:18.558910", "entity": "a999107a28d947978d93516c807ec438", "position": null, "id": "ffc74311698745138f9c2b774719c350"}, {"status": "active", "first_name": "Elena", "last_name": "Botanina", "name": "Ms Elena Botanina", "title": "Ms", "created_at": "2016-06-22T01:07:40.350135", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc662accdcd4b07816707d9fb04eb2a", "updated_at": "2016-06-22T01:07:40.347819", "entity": "9bc4005ee22f4667ad2290c70764b805", "position": null, "id": "ffc662accdcd4b07816707d9fb04eb2a"}, {"status": "active", "first_name": "Aneta", "last_name": "JERSKA", "name": "Ms Aneta JERSKA", "title": "Ms", "created_at": "2015-10-22T23:59:47.627842", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc5d0ef59e84ce2b0f2ae2e1ccea313", "updated_at": "2015-10-22T23:59:47.624821", "entity": "09f054eea8cf4dc782ee327dd3f0d8dc", "position": null, "id": "ffc5d0ef59e84ce2b0f2ae2e1ccea313"}, {"status": "inactive", "first_name": "Pol", "last_name": "MINGUET", "name": "Mr Pol MINGUET", "title": "Mr", "created_at": "2015-08-04T22:57:53.507633", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc52b9ad3e5421aa9767f79dd81f16b", "updated_at": "2015-09-22T23:54:42.438604", "entity": "535990e5a5734e7eb21ef8e9a9f2817b", "position": null, "id": "ffc52b9ad3e5421aa9767f79dd81f16b"}, {"status": "active", "first_name": "Delphine", "last_name": "BERNET", "name": "Ms Delphine BERNET", "title": "Ms", "created_at": "2015-04-24T02:14:49.294913", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc449a814a34ff6b24a3ef0286ae408", "updated_at": "2015-06-24T00:11:55.106709", "entity": "5860724e63a14155a970f77cc06bf635", "position": null, "id": "ffc449a814a34ff6b24a3ef0286ae408"}, {"status": "inactive", "first_name": "Lopo", "last_name": "Carvalho", "name": "Lopo Carvalho", "title": null, "created_at": "2016-04-02T00:58:30.912493", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc39c72b4234b7f8de7eb9bb5eca7f1", "updated_at": "2016-08-24T01:14:30.276826", "entity": "5906d5fed679487e99e3e2cf01899772", "position": null, "id": "ffc39c72b4234b7f8de7eb9bb5eca7f1"}, {"status": "active", "first_name": "Akiko", "last_name": "HART", "name": "Ms Akiko HART", "title": "Ms", "created_at": "2016-01-17T01:45:27.658433", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbf098231044d94b413a5f72639689a", "updated_at": "2016-01-17T01:45:27.655462", "entity": "ee4202812abf464c95f71e1f373cca8d", "position": null, "id": "ffbf098231044d94b413a5f72639689a"}, {"status": "inactive", "first_name": "Ramboux", "last_name": "Sandrine", "name": "Ms Ramboux Sandrine", "title": "Ms", "created_at": "2015-04-24T02:23:17.433266", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbe6a6aeacd4698af31cc64e168ce39", "updated_at": "2016-04-07T00:40:36.117992", "entity": "c1ef9815d5c140288fb45a0e93dff6db", "position": "CEO", "id": "ffbe6a6aeacd4698af31cc64e168ce39"}, {"status": "inactive", "first_name": "John", "last_name": "PHELAN", "name": "Mr John PHELAN", "title": "Mr", "created_at": "2015-08-04T23:29:45.048949", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbd37a0eaa6403180260e1a3cb017f5", "updated_at": "2015-11-07T01:32:01.840063", "entity": "41d618e2f1444e4883db0fbef5846066", "position": null, "id": "ffbd37a0eaa6403180260e1a3cb017f5"}, {"status": "active", "first_name": "Jaume", "last_name": "LOFFREDO", "name": "Mr Jaume LOFFREDO", "title": "Mr", "created_at": "2015-08-04T22:40:07.789281", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbbb2ca525947e4ac31b64d7d8be7a0", "updated_at": "2015-10-22T23:42:31.973853", "entity": "6c31c3a458c64e93b1638bf1e35fd848", "position": null, "id": "ffbbb2ca525947e4ac31b64d7d8be7a0"}, {"status": "active", "first_name": "Lewis", "last_name": "Shand Smith", "name": "Mr Lewis Shand Smith", "title": "Mr", "created_at": "2015-04-24T02:32:11.561600", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb8eea4552c4cd6abb9cf8a9f573a71", "updated_at": "2015-06-09T00:30:54.799976", "entity": "102412cbe67d41cf84ed88e86f10d815", "position": "Chair", "id": "ffb8eea4552c4cd6abb9cf8a9f573a71"}, {"status": "active", "first_name": "Tim", "last_name": "Bennett", "name": "Mr Tim Bennett", "title": "Mr", "created_at": "2015-04-24T01:54:36.629902", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb7a6d39627443d95ed632d9f0dc0c0", "updated_at": "2015-04-28T00:18:46.384414", "entity": "c7c13947af6b4de29768f7fa7d599ed6", "position": "Director-General", "id": "ffb7a6d39627443d95ed632d9f0dc0c0"}, {"status": "active", "first_name": "Sebastiaan", "last_name": "BATELAAN", "name": "Mr Sebastiaan BATELAAN", "title": "Mr", "created_at": "2015-08-04T23:37:05.175116", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb61a20a245419bb6c4c0a4a03775d1", "updated_at": "2015-11-28T02:04:31.505728", "entity": "2f0a65caf3624120a9bb30d266efba9d", "position": null, "id": "ffb61a20a245419bb6c4c0a4a03775d1"}, {"status": "inactive", "first_name": "Alasdair", "last_name": "MacEwen", "name": "Mr Alasdair MacEwen", "title": "Mr", "created_at": "2015-04-24T02:16:04.683196", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb5c78b29814171b88746f29ef74ff9", "updated_at": "2016-04-06T00:31:20.357145", "entity": "5c956df07e39444a964d932c195082cf", "position": "Director", "id": "ffb5c78b29814171b88746f29ef74ff9"}, {"status": "inactive", "first_name": "Kent", "last_name": "Petersen", "name": " Kent Petersen", "title": null, "created_at": "2015-04-24T02:09:00.428688", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb4d698762e434a969973ea69db8fa6", "updated_at": "2016-03-17T01:44:57.433271", "entity": "4164877ce9e94921a3f8a3d64c88fe17", "position": "President", "id": "ffb4d698762e434a969973ea69db8fa6"}, {"status": "inactive", "first_name": "Els", "last_name": "HOUTMAN", "name": "Ms Els HOUTMAN", "title": "Ms", "created_at": "2015-08-04T22:47:56.385202", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb4b038bb69483281545844d6924cbd", "updated_at": "2015-08-18T23:34:05.187214", "entity": "b44a02c444464af38a1526a62ff8a9ef", "position": null, "id": "ffb4b038bb69483281545844d6924cbd"}, {"status": "inactive", "first_name": "Pavel", "last_name": "GLUKHOV", "name": "Mr Pavel GLUKHOV", "title": "Mr", "created_at": "2015-08-04T23:31:04.785752", "uri": "http://api.lobbyfacts.eu/api/1/person/ffae269019c44f4d87395fd35362d17a", "updated_at": "2016-05-13T01:07:55.713761", "entity": "ca09b6a0a36841cba747d57a76d8639a", "position": null, "id": "ffae269019c44f4d87395fd35362d17a"}, {"status": "active", "first_name": "Catherine ", "last_name": "Easton", "name": "Ms Catherine Easton", "title": "Ms", "created_at": "2015-09-03T01:23:20.605354", "uri": "http://api.lobbyfacts.eu/api/1/person/ffabd37094c24626a6901a03799c35d2", "updated_at": "2016-09-18T20:05:20.747376", "entity": "bed56c6310c6497b8c456b9244c2a427", "position": "Chair, BILETA ", "id": "ffabd37094c24626a6901a03799c35d2"}, {"status": "active", "first_name": "Dirk", "last_name": "VAEL", "name": "Mr Dirk VAEL", "title": "Mr", "created_at": "2015-05-07T21:26:27.027951", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa976414f1e4ec49f7b5be55c70ee54", "updated_at": "2016-05-10T01:08:32.817372", "entity": "769c08a682054fb5a978b8f4b617e19d", "position": "Secretary General", "id": "ffa976414f1e4ec49f7b5be55c70ee54"}, {"status": "inactive", "first_name": "Blandine", "last_name": "Maindiaux", "name": "Ms Blandine Maindiaux", "title": "Ms", "created_at": "2016-01-09T01:03:07.270560", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa7f3e3c3aa46dba03705a3ba329196", "updated_at": "2016-02-04T01:18:06.006069", "entity": "9a0fc49278be43d4bbc8219f618ac471", "position": null, "id": "ffa7f3e3c3aa46dba03705a3ba329196"}, {"status": "inactive", "first_name": "Cristian", "last_name": "Samoilovich", "name": "Mr Cristian Samoilovich", "title": "Mr", "created_at": "2015-11-21T01:53:32.203734", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa4ce554ea2479ab755fc785c2e74ae", "updated_at": "2016-02-04T02:11:19.989290", "entity": "2ed1f68fe47d455f8822ceeee1359e54", "position": null, "id": "ffa4ce554ea2479ab755fc785c2e74ae"}, {"status": "active", "first_name": "Marta", "last_name": "Marin Sanchez", "name": " Marta Marin Sanchez", "title": null, "created_at": "2015-04-24T02:24:37.850717", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa348b217f546f7b3caba28e01648ea", "updated_at": "2016-04-21T00:57:11.406963", "entity": "4234e7e3ecc94a4687f373e26b19d29a", "position": "Delegada de Euskadi para la Union europea", "id": "ffa348b217f546f7b3caba28e01648ea"}, {"status": "inactive", "first_name": "adele", "last_name": "CORNAGLIA", "name": "Ms adele CORNAGLIA", "title": "Ms", "created_at": "2016-02-04T02:32:43.740368", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9fc768c14c4a09a5e1a0c226293852", "updated_at": "2016-07-21T01:26:12.330350", "entity": "1274bd478d274c2e9d4accdea9f2384c", "position": null, "id": "ff9fc768c14c4a09a5e1a0c226293852"}, {"status": "active", "first_name": "Koen", "last_name": "COPPENHOLLE", "name": "Mr Koen COPPENHOLLE", "title": "Mr", "created_at": "2015-08-04T23:35:27.018355", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9e50bc9719467584315d72376151eb", "updated_at": "2015-11-15T01:39:20.818298", "entity": "f790c12d66904722ae8d98fc124cc4cd", "position": null, "id": "ff9e50bc9719467584315d72376151eb"}, {"status": "active", "first_name": "Adrian", "last_name": "Burder", "name": "Mr Adrian Burder", "title": "Mr", "created_at": "2015-04-24T02:32:15.189726", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9df9f32dba442caa42a4dddad0e1a8", "updated_at": "2015-06-09T00:31:01.344949", "entity": "01dcda1360ff43198ce5ca4696bf46eb", "position": "CEO of founding member Dogs Trust", "id": "ff9df9f32dba442caa42a4dddad0e1a8"}, {"status": "active", "first_name": "Michael", "last_name": "Tscherny", "name": "Mr Michael Tscherny", "title": "Mr", "created_at": "2015-05-07T21:14:09.536326", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9a9f2982b44af6b22c345e217fa277", "updated_at": "2015-05-07T21:14:09.535088", "entity": "fc4ff63acd4b4342b962f55b9c680827", "position": "Partner", "id": "ff9a9f2982b44af6b22c345e217fa277"}], "next": "http://api.lobbyfacts.eu/api/1/person?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false} \ No newline at end of file +{ + "count": 36713, + "facets": {}, + "results": [ + { + "status": "inactive", + "first_name": "Lasse Hamilton", + "last_name": "Heidemann", + "name": "Lasse Hamilton Heidemann", + "title": null, + "created_at": "2015-12-05T00:52:13.534368Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffff1e3de5aa4db8ace7dcb080a4c2e0", + "updated_at": "2016-02-04T01:11:29.396185Z", + "entity": "ba0821d8786b4764b4e83d48a62f155e", + "position": null, + "id": "ffff1e3de5aa4db8ace7dcb080a4c2e0" + }, + { + "status": "inactive", + "first_name": "Peter H.P.", + "last_name": "Sierat", + "name": "Mr Peter H.P. Sierat", + "title": "Mr", + "created_at": "2015-04-24T01:49:19.714706Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/fffdcd840ce74712ab96125b3c8a29f2", + "updated_at": "2016-04-02T00:00:39.433543Z", + "entity": "cb57ae8983dc4ceaba72e7befd59b255", + "position": "Algemeen directeur", + "id": "fffdcd840ce74712ab96125b3c8a29f2" + }, + { + "status": "inactive", + "first_name": "Aleksandra", + "last_name": "Kluczka", + "name": "Ms Aleksandra Kluczka", + "title": "Ms", + "created_at": "2015-04-24T02:13:06.918194Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/fffd214acfab4df39770a3cb1cd2a16e", + "updated_at": "2015-08-04T23:02:51.578546Z", + "entity": "edc26b7e632146039f0cb3c673d9e5b5", + "position": null, + "id": "fffd214acfab4df39770a3cb1cd2a16e" + }, + { + "status": "active", + "first_name": "Nicholas", + "last_name": "Cook", + "name": "Mr Nicholas Cook", + "title": "Mr", + "created_at": "2016-04-28T01:46:54.088777Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/fffba075e7244af5beaf4cb4df492d0c", + "updated_at": "2016-04-28T01:46:54.086259Z", + "entity": "2bd41f5a042a4584afe2e2faf7f99d9b", + "position": null, + "id": "fffba075e7244af5beaf4cb4df492d0c" + }, + { + "status": "active", + "first_name": "LORIS", + "last_name": "BORGHI", + "name": " LORIS BORGHI", + "title": null, + "created_at": "2016-04-24T01:46:22.432444Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/fff6a7c563db4260833e4a0a5132e06d", + "updated_at": "2016-04-24T01:46:22.430054Z", + "entity": "9b890aa4ae8c41c2993408018216ffea", + "position": "RETTORE", + "id": "fff6a7c563db4260833e4a0a5132e06d" + }, + { + "status": "active", + "first_name": "Mary", + "last_name": "Booth", + "name": "Ms Mary Booth", + "title": "Ms", + "created_at": "2016-05-06T01:50:28.394132Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/fff42bf8b9bf4553a22a2e54dc060e7b", + "updated_at": "2016-05-06T01:50:28.390872Z", + "entity": "4a58ff1f55804c45961de16e03caf8f2", + "position": "President", + "id": "fff42bf8b9bf4553a22a2e54dc060e7b" + }, + { + "status": "active", + "first_name": "Zolt\u00e1n", + "last_name": "Dub\u00e9czi ", + "name": " Zolt\u00e1n Dub\u00e9czi ", + "title": null, + "created_at": "2015-04-24T02:33:55.473918Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/fff1ba1aeb93455a9d58d4e8d30106ef", + "updated_at": "2015-06-09T00:33:29.597458Z", + "entity": "1604b87b837849e494c502955d9890a6", + "position": "f\u0151ttitk\u00e1r", + "id": "fff1ba1aeb93455a9d58d4e8d30106ef" + }, + { + "status": "active", + "first_name": "Andreas", + "last_name": "von Bonin", + "name": "Mr Andreas von Bonin", + "title": "Mr", + "created_at": "2015-10-29T01:59:20.041336Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/fff0688a62b147ce8d4d9e41a8bdf88b", + "updated_at": "2015-10-29T01:59:20.040060Z", + "entity": "a944c83d1fe84cabaeff9b672d0d1234", + "position": "Partner", + "id": "fff0688a62b147ce8d4d9e41a8bdf88b" + }, + { + "status": "active", + "first_name": "Jeff", + "last_name": "RUPP", + "name": "Mr Jeff RUPP", + "title": "Mr", + "created_at": "2015-04-24T01:55:31.635859Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffeb9e9a626945be9b3b24430559d1c9", + "updated_at": "2016-08-24T00:25:06.902891Z", + "entity": "4135e9a4a93142eda69d7e9a5cd37c7a", + "position": null, + "id": "ffeb9e9a626945be9b3b24430559d1c9" + }, + { + "status": "inactive", + "first_name": "Marisa", + "last_name": "PLOWDEN", + "name": "Ms Marisa PLOWDEN", + "title": "Ms", + "created_at": "2015-08-04T23:38:47.343642Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffeb6dc0543a4bdd9c8a785878604da4", + "updated_at": "2016-07-29T01:21:54.336544Z", + "entity": "109aaeca90e641b5b0aa218489390222", + "position": null, + "id": "ffeb6dc0543a4bdd9c8a785878604da4" + }, + { + "status": "active", + "first_name": "GOKHAN", + "last_name": "BACIK", + "name": "Mr GOKHAN BACIK", + "title": "Mr", + "created_at": "2016-05-29T01:44:59.830189Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffe7118837644097bf3c7cf9b9a752c2", + "updated_at": "2016-05-29T01:44:59.827812Z", + "entity": "80bbcad3abbc4694a9e35ecc2a8c2179", + "position": null, + "id": "ffe7118837644097bf3c7cf9b9a752c2" + }, + { + "status": "inactive", + "first_name": "Felix", + "last_name": "N\u00d6LLER", + "name": "Mr Felix N\u00d6LLER", + "title": "Mr", + "created_at": "2015-08-04T23:30:24.961182Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffe39da57ca34c1392974adf5e54cafa", + "updated_at": "2015-10-10T00:36:18.906681Z", + "entity": "a38ef74b754a48dcbbfc299e7133472d", + "position": null, + "id": "ffe39da57ca34c1392974adf5e54cafa" + }, + { + "status": "active", + "first_name": "Eric", + "last_name": "D\u00e9robert", + "name": "Mr Eric D\u00e9robert", + "title": "Mr", + "created_at": "2016-08-17T01:39:23.665156Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffe0b90193684df1a476bfa5e66bc749", + "updated_at": "2016-08-17T01:39:23.662897Z", + "entity": "c4e869c531244404abc24f29940de02b", + "position": "Pr\u00e9sident", + "id": "ffe0b90193684df1a476bfa5e66bc749" + }, + { + "status": "inactive", + "first_name": "Xavier", + "last_name": "OUSMANE", + "name": "Mr Xavier OUSMANE", + "title": "Mr", + "created_at": "2015-08-04T23:08:26.512050Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffdfdf683bac461db2ce125578ef7bf7", + "updated_at": "2015-08-30T00:39:28.994682Z", + "entity": "7d9169adde8549ab8a1f0264324d2f1f", + "position": null, + "id": "ffdfdf683bac461db2ce125578ef7bf7" + }, + { + "status": "active", + "first_name": "Tuomo", + "last_name": "Kantola", + "name": " Tuomo Kantola", + "title": null, + "created_at": "2016-05-05T02:03:20.848748Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffdbd345128d4b32a39f658bb84396da", + "updated_at": "2016-05-05T02:03:20.847098Z", + "entity": "47101ad36df340569b9b528b70c5110c", + "position": "Toimitusjohtaja", + "id": "ffdbd345128d4b32a39f658bb84396da" + }, + { + "status": "active", + "first_name": "Anette", + "last_name": "HAUFF", + "name": "Ms Anette HAUFF", + "title": "Ms", + "created_at": "2015-08-04T23:29:07.346512Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffda7773348f48c2bcb77860a077a231", + "updated_at": "2015-08-04T23:29:07.345174Z", + "entity": "2d0354d4776f47c7a5a7453ddbdf2931", + "position": null, + "id": "ffda7773348f48c2bcb77860a077a231" + }, + { + "status": "inactive", + "first_name": "Andrew", + "last_name": "CURTIS", + "name": "Mr Andrew CURTIS", + "title": "Mr", + "created_at": "2015-08-04T22:37:37.630107Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffd97d5fa9ce411eb8e7f2c16fa032b3", + "updated_at": "2015-10-07T23:42:05.080487Z", + "entity": "d15936f25d7449998b977b318738077d", + "position": null, + "id": "ffd97d5fa9ce411eb8e7f2c16fa032b3" + }, + { + "status": "active", + "first_name": "Dr. Alexander", + "last_name": "Dix", + "name": "Mr Dr. Alexander Dix", + "title": "Mr", + "created_at": "2016-07-26T02:14:12.400224Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffd84a5aadd54a4c9bfa4b054a0a1e5f", + "updated_at": "2016-07-26T02:14:12.397991Z", + "entity": "1b4df2f9ead14d7cb0f7216aa2b60dcd", + "position": "Stellv. Vorsitzender des Vorstandes", + "id": "ffd84a5aadd54a4c9bfa4b054a0a1e5f" + }, + { + "status": "inactive", + "first_name": "Arba", + "last_name": "Berdica", + "name": "Ms Arba Berdica", + "title": "Ms", + "created_at": "2015-04-24T01:58:46.630945Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffd7a7fa1a784d379eb85fd3afb4d117", + "updated_at": "2015-07-18T00:05:04.548621Z", + "entity": "c4788736ce5e43f1bc9c8a6a172de9e8", + "position": null, + "id": "ffd7a7fa1a784d379eb85fd3afb4d117" + }, + { + "status": "active", + "first_name": "Robin", + "last_name": "Russel", + "name": "Mr Robin Russel", + "title": "Mr", + "created_at": "2015-08-19T00:33:16.773778Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffd3e53acfc748a7a1077438ff717151", + "updated_at": "2015-08-19T00:33:16.771268Z", + "entity": "51a591f54fb042de953747c255043166", + "position": "Operations Director", + "id": "ffd3e53acfc748a7a1077438ff717151" + }, + { + "status": "active", + "first_name": "Johan", + "last_name": "Cloet", + "name": "Mr Johan Cloet", + "title": "Mr", + "created_at": "2015-05-07T21:39:13.187263Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffd36cd3a12645179da466ac331153be", + "updated_at": "2015-06-09T00:45:34.466401Z", + "entity": "6337b4c5b7124a8ea66536039f7da31d", + "position": "Secretary General", + "id": "ffd36cd3a12645179da466ac331153be" + }, + { + "status": "active", + "first_name": "Lluis", + "last_name": "Prat", + "name": " Lluis Prat", + "title": null, + "created_at": "2015-04-24T01:55:37.402043Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffcdeb423b28446abcef873c69df242a", + "updated_at": "2015-04-28T00:19:34.269864Z", + "entity": "22b145c522cd45b7b9738c1811979c8b", + "position": "Secretario", + "id": "ffcdeb423b28446abcef873c69df242a" + }, + { + "status": "inactive", + "first_name": "STEFAN", + "last_name": "KESSLER", + "name": "Mr STEFAN KESSLER", + "title": "Mr", + "created_at": "2015-04-24T02:04:46.096101Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffcd441aac3943af8df364f808fccca7", + "updated_at": "2015-06-11T00:02:44.145074Z", + "entity": "2567eb47f2144d2885553aaddba6f6e7", + "position": null, + "id": "ffcd441aac3943af8df364f808fccca7" + }, + { + "status": "active", + "first_name": "SANJA", + "last_name": "UDOVI\u0106", + "name": "Ms SANJA UDOVI\u0106", + "title": "Ms", + "created_at": "2015-05-24T21:47:17.221327Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffccdacbcda64e88b0e08b3950dab345", + "updated_at": "2015-06-09T00:52:28.305503Z", + "entity": "60cab7ab53074f8083d6f98c35519495", + "position": "OP\u0106INSKA NA\u010cELNICA", + "id": "ffccdacbcda64e88b0e08b3950dab345" + }, + { + "status": "active", + "first_name": "Lara", + "last_name": "LIBRA", + "name": "Ms Lara LIBRA", + "title": "Ms", + "created_at": "2016-02-04T02:54:18.561397Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffc74311698745138f9c2b774719c350", + "updated_at": "2016-02-04T02:54:18.558910Z", + "entity": "a999107a28d947978d93516c807ec438", + "position": null, + "id": "ffc74311698745138f9c2b774719c350" + }, + { + "status": "active", + "first_name": "Elena", + "last_name": "Botanina", + "name": "Ms Elena Botanina", + "title": "Ms", + "created_at": "2016-06-22T01:07:40.350135Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffc662accdcd4b07816707d9fb04eb2a", + "updated_at": "2016-06-22T01:07:40.347819Z", + "entity": "9bc4005ee22f4667ad2290c70764b805", + "position": null, + "id": "ffc662accdcd4b07816707d9fb04eb2a" + }, + { + "status": "active", + "first_name": "Aneta", + "last_name": "JERSKA", + "name": "Ms Aneta JERSKA", + "title": "Ms", + "created_at": "2015-10-22T23:59:47.627842Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffc5d0ef59e84ce2b0f2ae2e1ccea313", + "updated_at": "2015-10-22T23:59:47.624821Z", + "entity": "09f054eea8cf4dc782ee327dd3f0d8dc", + "position": null, + "id": "ffc5d0ef59e84ce2b0f2ae2e1ccea313" + }, + { + "status": "inactive", + "first_name": "Pol", + "last_name": "MINGUET", + "name": "Mr Pol MINGUET", + "title": "Mr", + "created_at": "2015-08-04T22:57:53.507633Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffc52b9ad3e5421aa9767f79dd81f16b", + "updated_at": "2015-09-22T23:54:42.438604Z", + "entity": "535990e5a5734e7eb21ef8e9a9f2817b", + "position": null, + "id": "ffc52b9ad3e5421aa9767f79dd81f16b" + }, + { + "status": "active", + "first_name": "Delphine", + "last_name": "BERNET", + "name": "Ms Delphine BERNET", + "title": "Ms", + "created_at": "2015-04-24T02:14:49.294913Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffc449a814a34ff6b24a3ef0286ae408", + "updated_at": "2015-06-24T00:11:55.106709Z", + "entity": "5860724e63a14155a970f77cc06bf635", + "position": null, + "id": "ffc449a814a34ff6b24a3ef0286ae408" + }, + { + "status": "inactive", + "first_name": "Lopo", + "last_name": "Carvalho", + "name": "Lopo Carvalho", + "title": null, + "created_at": "2016-04-02T00:58:30.912493Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffc39c72b4234b7f8de7eb9bb5eca7f1", + "updated_at": "2016-08-24T01:14:30.276826Z", + "entity": "5906d5fed679487e99e3e2cf01899772", + "position": null, + "id": "ffc39c72b4234b7f8de7eb9bb5eca7f1" + }, + { + "status": "active", + "first_name": "Akiko", + "last_name": "HART", + "name": "Ms Akiko HART", + "title": "Ms", + "created_at": "2016-01-17T01:45:27.658433Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffbf098231044d94b413a5f72639689a", + "updated_at": "2016-01-17T01:45:27.655462Z", + "entity": "ee4202812abf464c95f71e1f373cca8d", + "position": null, + "id": "ffbf098231044d94b413a5f72639689a" + }, + { + "status": "inactive", + "first_name": "Ramboux", + "last_name": "Sandrine", + "name": "Ms Ramboux Sandrine", + "title": "Ms", + "created_at": "2015-04-24T02:23:17.433266Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffbe6a6aeacd4698af31cc64e168ce39", + "updated_at": "2016-04-07T00:40:36.117992Z", + "entity": "c1ef9815d5c140288fb45a0e93dff6db", + "position": "CEO", + "id": "ffbe6a6aeacd4698af31cc64e168ce39" + }, + { + "status": "inactive", + "first_name": "John", + "last_name": "PHELAN", + "name": "Mr John PHELAN", + "title": "Mr", + "created_at": "2015-08-04T23:29:45.048949Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffbd37a0eaa6403180260e1a3cb017f5", + "updated_at": "2015-11-07T01:32:01.840063Z", + "entity": "41d618e2f1444e4883db0fbef5846066", + "position": null, + "id": "ffbd37a0eaa6403180260e1a3cb017f5" + }, + { + "status": "active", + "first_name": "Jaume", + "last_name": "LOFFREDO", + "name": "Mr Jaume LOFFREDO", + "title": "Mr", + "created_at": "2015-08-04T22:40:07.789281Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffbbb2ca525947e4ac31b64d7d8be7a0", + "updated_at": "2015-10-22T23:42:31.973853Z", + "entity": "6c31c3a458c64e93b1638bf1e35fd848", + "position": null, + "id": "ffbbb2ca525947e4ac31b64d7d8be7a0" + }, + { + "status": "active", + "first_name": "Lewis", + "last_name": "Shand Smith", + "name": "Mr Lewis Shand Smith", + "title": "Mr", + "created_at": "2015-04-24T02:32:11.561600Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffb8eea4552c4cd6abb9cf8a9f573a71", + "updated_at": "2015-06-09T00:30:54.799976Z", + "entity": "102412cbe67d41cf84ed88e86f10d815", + "position": "Chair", + "id": "ffb8eea4552c4cd6abb9cf8a9f573a71" + }, + { + "status": "active", + "first_name": "Tim", + "last_name": "Bennett", + "name": "Mr Tim Bennett", + "title": "Mr", + "created_at": "2015-04-24T01:54:36.629902Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffb7a6d39627443d95ed632d9f0dc0c0", + "updated_at": "2015-04-28T00:18:46.384414Z", + "entity": "c7c13947af6b4de29768f7fa7d599ed6", + "position": "Director-General", + "id": "ffb7a6d39627443d95ed632d9f0dc0c0" + }, + { + "status": "active", + "first_name": "Sebastiaan", + "last_name": "BATELAAN", + "name": "Mr Sebastiaan BATELAAN", + "title": "Mr", + "created_at": "2015-08-04T23:37:05.175116Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffb61a20a245419bb6c4c0a4a03775d1", + "updated_at": "2015-11-28T02:04:31.505728Z", + "entity": "2f0a65caf3624120a9bb30d266efba9d", + "position": null, + "id": "ffb61a20a245419bb6c4c0a4a03775d1" + }, + { + "status": "inactive", + "first_name": "Alasdair", + "last_name": "MacEwen", + "name": "Mr Alasdair MacEwen", + "title": "Mr", + "created_at": "2015-04-24T02:16:04.683196Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffb5c78b29814171b88746f29ef74ff9", + "updated_at": "2016-04-06T00:31:20.357145Z", + "entity": "5c956df07e39444a964d932c195082cf", + "position": "Director", + "id": "ffb5c78b29814171b88746f29ef74ff9" + }, + { + "status": "inactive", + "first_name": "Kent", + "last_name": "Petersen", + "name": " Kent Petersen", + "title": null, + "created_at": "2015-04-24T02:09:00.428688Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffb4d698762e434a969973ea69db8fa6", + "updated_at": "2016-03-17T01:44:57.433271Z", + "entity": "4164877ce9e94921a3f8a3d64c88fe17", + "position": "President", + "id": "ffb4d698762e434a969973ea69db8fa6" + }, + { + "status": "inactive", + "first_name": "Els", + "last_name": "HOUTMAN", + "name": "Ms Els HOUTMAN", + "title": "Ms", + "created_at": "2015-08-04T22:47:56.385202Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffb4b038bb69483281545844d6924cbd", + "updated_at": "2015-08-18T23:34:05.187214Z", + "entity": "b44a02c444464af38a1526a62ff8a9ef", + "position": null, + "id": "ffb4b038bb69483281545844d6924cbd" + }, + { + "status": "inactive", + "first_name": "Pavel", + "last_name": "GLUKHOV", + "name": "Mr Pavel GLUKHOV", + "title": "Mr", + "created_at": "2015-08-04T23:31:04.785752Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffae269019c44f4d87395fd35362d17a", + "updated_at": "2016-05-13T01:07:55.713761Z", + "entity": "ca09b6a0a36841cba747d57a76d8639a", + "position": null, + "id": "ffae269019c44f4d87395fd35362d17a" + }, + { + "status": "active", + "first_name": "Catherine ", + "last_name": "Easton", + "name": "Ms Catherine Easton", + "title": "Ms", + "created_at": "2015-09-03T01:23:20.605354Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffabd37094c24626a6901a03799c35d2", + "updated_at": "2016-09-18T20:05:20.747376Z", + "entity": "bed56c6310c6497b8c456b9244c2a427", + "position": "Chair, BILETA ", + "id": "ffabd37094c24626a6901a03799c35d2" + }, + { + "status": "active", + "first_name": "Dirk", + "last_name": "VAEL", + "name": "Mr Dirk VAEL", + "title": "Mr", + "created_at": "2015-05-07T21:26:27.027951Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffa976414f1e4ec49f7b5be55c70ee54", + "updated_at": "2016-05-10T01:08:32.817372Z", + "entity": "769c08a682054fb5a978b8f4b617e19d", + "position": "Secretary General", + "id": "ffa976414f1e4ec49f7b5be55c70ee54" + }, + { + "status": "inactive", + "first_name": "Blandine", + "last_name": "Maindiaux", + "name": "Ms Blandine Maindiaux", + "title": "Ms", + "created_at": "2016-01-09T01:03:07.270560Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffa7f3e3c3aa46dba03705a3ba329196", + "updated_at": "2016-02-04T01:18:06.006069Z", + "entity": "9a0fc49278be43d4bbc8219f618ac471", + "position": null, + "id": "ffa7f3e3c3aa46dba03705a3ba329196" + }, + { + "status": "inactive", + "first_name": "Cristian", + "last_name": "Samoilovich", + "name": "Mr Cristian Samoilovich", + "title": "Mr", + "created_at": "2015-11-21T01:53:32.203734Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffa4ce554ea2479ab755fc785c2e74ae", + "updated_at": "2016-02-04T02:11:19.989290Z", + "entity": "2ed1f68fe47d455f8822ceeee1359e54", + "position": null, + "id": "ffa4ce554ea2479ab755fc785c2e74ae" + }, + { + "status": "active", + "first_name": "Marta", + "last_name": "Marin Sanchez", + "name": " Marta Marin Sanchez", + "title": null, + "created_at": "2015-04-24T02:24:37.850717Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ffa348b217f546f7b3caba28e01648ea", + "updated_at": "2016-04-21T00:57:11.406963Z", + "entity": "4234e7e3ecc94a4687f373e26b19d29a", + "position": "Delegada de Euskadi para la Union europea", + "id": "ffa348b217f546f7b3caba28e01648ea" + }, + { + "status": "inactive", + "first_name": "adele", + "last_name": "CORNAGLIA", + "name": "Ms adele CORNAGLIA", + "title": "Ms", + "created_at": "2016-02-04T02:32:43.740368Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ff9fc768c14c4a09a5e1a0c226293852", + "updated_at": "2016-07-21T01:26:12.330350Z", + "entity": "1274bd478d274c2e9d4accdea9f2384c", + "position": null, + "id": "ff9fc768c14c4a09a5e1a0c226293852" + }, + { + "status": "active", + "first_name": "Koen", + "last_name": "COPPENHOLLE", + "name": "Mr Koen COPPENHOLLE", + "title": "Mr", + "created_at": "2015-08-04T23:35:27.018355Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ff9e50bc9719467584315d72376151eb", + "updated_at": "2015-11-15T01:39:20.818298Z", + "entity": "f790c12d66904722ae8d98fc124cc4cd", + "position": null, + "id": "ff9e50bc9719467584315d72376151eb" + }, + { + "status": "active", + "first_name": "Adrian", + "last_name": "Burder", + "name": "Mr Adrian Burder", + "title": "Mr", + "created_at": "2015-04-24T02:32:15.189726Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ff9df9f32dba442caa42a4dddad0e1a8", + "updated_at": "2015-06-09T00:31:01.344949Z", + "entity": "01dcda1360ff43198ce5ca4696bf46eb", + "position": "CEO of founding member Dogs Trust", + "id": "ff9df9f32dba442caa42a4dddad0e1a8" + }, + { + "status": "active", + "first_name": "Michael", + "last_name": "Tscherny", + "name": "Mr Michael Tscherny", + "title": "Mr", + "created_at": "2015-05-07T21:14:09.536326Z", + "uri": "http://api.lobbyfacts.eu/api/1/person/ff9a9f2982b44af6b22c345e217fa277", + "updated_at": "2015-05-07T21:14:09.535088Z", + "entity": "fc4ff63acd4b4342b962f55b9c680827", + "position": "Partner", + "id": "ff9a9f2982b44af6b22c345e217fa277" + } + ], + "next": "http://api.lobbyfacts.eu/api/1/person?limit=50&offset=50", + "limit": 50, + "offset": 0, + "previous": false +} diff --git a/test/inputs/json/misc/b4865.json b/test/inputs/json/misc/b4865.json index 053f3f4af..ff33b5f57 100644 --- a/test/inputs/json/misc/b4865.json +++ b/test/inputs/json/misc/b4865.json @@ -1,1000 +1,12204 @@ -[{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.08333,50.775]},"id":"1","mass":"21","name":"Aachen","nametype":"Valid","recclass":"L5","reclat":"50.775000","reclong":"6.083330","year":"1880-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.23333,56.18333]},"id":"2","mass":"720","name":"Aarhus","nametype":"Valid","recclass":"H6","reclat":"56.183330","reclong":"10.233330","year":"1951-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-113,54.21667]},"id":"6","mass":"107000","name":"Abee","nametype":"Valid","recclass":"EH4","reclat":"54.216670","reclong":"-113.000000","year":"1952-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.9,16.88333]},"id":"10","mass":"1914","name":"Acapulco","nametype":"Valid","recclass":"Acapulcoite","reclat":"16.883330","reclong":"-99.900000","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-64.95,-33.16667]},"id":"370","mass":"780","name":"Achiras","nametype":"Valid","recclass":"L6","reclat":"-33.166670","reclong":"-64.950000","year":"1902-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[71.8,32.1]},"id":"379","mass":"4239","name":"Adhi Kot","nametype":"Valid","recclass":"EH4","reclat":"32.100000","reclong":"71.800000","year":"1919-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[95.16667,44.83333]},"id":"390","mass":"910","name":"Adzhi-Bogdo (stone)","nametype":"Valid","recclass":"LL3-6","reclat":"44.833330","reclong":"95.166670","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.61667,44.21667]},"id":"392","mass":"30000","name":"Agen","nametype":"Valid","recclass":"H5","reclat":"44.216670","reclong":"0.616670","year":"1814-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-65.23333,-31.6]},"id":"398","mass":"1620","name":"Aguada","nametype":"Valid","recclass":"L6","reclat":"-31.600000","reclong":"-65.233330","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-64.55,-30.86667]},"id":"417","mass":"1440","name":"Aguila Blanca","nametype":"Valid","recclass":"L","reclat":"-30.866670","reclong":"-64.550000","year":"1920-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-9.57028,16.39806]},"id":"423","mass":"1000","name":"Aioun el Atrouss","nametype":"Valid","recclass":"Diogenite-pm","reclat":"16.398060","reclong":"-9.570280","year":"1974-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.38333,19.08333]},"id":"424","mass":"24000","name":"Aïr","nametype":"Valid","recclass":"L6","reclat":"19.083330","reclong":"8.383330","year":"1925-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[2.33333,50.66667]},"id":"425","name":"Aire-sur-la-Lys","nametype":"Valid","recclass":"Unknown","reclat":"50.666670","reclong":"2.333330","year":"1769-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.05,29.51667]},"id":"426","mass":"779","name":"Akaba","nametype":"Valid","recclass":"L6","reclat":"29.516670","reclong":"35.050000","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.95,29.71667]},"id":"427","mass":"1800","name":"Akbarpur","nametype":"Valid","recclass":"H4","reclat":"29.716670","reclong":"77.950000","year":"1838-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.43333,8.91667]},"id":"432","mass":"3000","name":"Akwanga","nametype":"Valid","recclass":"H","reclat":"8.916670","reclong":"8.433330","year":"1959-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[42.81667,39.91667]},"id":"433","mass":"50000","name":"Akyumak","nametype":"Valid","recclass":"Iron, IVA","reclat":"39.916670","reclong":"42.816670","year":"1981-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[39.51667,24.41667]},"id":"446","mass":"160","name":"Al Rais","nametype":"Valid","recclass":"CR2-an","reclat":"24.416670","reclong":"39.516670","year":"1957-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[28.96,13.66033]},"id":"447","mass":"700","name":"Al Zarnkh","nametype":"Valid","recclass":"LL5","reclat":"13.660330","reclong":"28.960000","year":"2001-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[4.08333,44.11667]},"id":"448","mass":"6000","name":"Alais","nametype":"Valid","recclass":"CI1","reclat":"44.116670","reclong":"4.083330","year":"1806-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.01667,44.65]},"id":"453","mass":"2000","name":"Albareto","nametype":"Valid","recclass":"L/LL4","reclat":"44.650000","reclong":"11.016670","year":"1766-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.66667,2]},"id":"454","mass":"625","name":"Alberta","nametype":"Valid","recclass":"L","reclat":"2.000000","reclong":"22.666670","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.01533,45.82133]},"id":"458","mass":"252","name":"Alby sur Chéran","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"45.821330","reclong":"6.015330","year":"2002-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.78333,51.78333]},"id":"461","mass":"700","name":"Aldsworth","nametype":"Valid","recclass":"LL5","reclat":"51.783330","reclong":"-1.783330","year":"1835-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.13333,36.23333]},"id":"462","mass":"3200","name":"Aleppo","nametype":"Valid","recclass":"L6","reclat":"36.233330","reclong":"37.133330","year":"1873-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.75,44.88333]},"id":"463","mass":"908","name":"Alessandria","nametype":"Valid","recclass":"H5","reclat":"44.883330","reclong":"8.750000","year":"1860-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.81667,50.95]},"id":"465","mass":"9251","name":"Alexandrovsky","nametype":"Valid","recclass":"H4","reclat":"50.950000","reclong":"31.816670","year":"1900-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.15,45.26667]},"id":"466","mass":"228000","name":"Alfianello","nametype":"Valid","recclass":"L6","reclat":"45.266670","reclong":"10.150000","year":"1883-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"50",":@computed_region_nnqa_25f4":"429","fall":"Fell","geolocation":{"type":"Point","coordinates":[-85.88333,42.53333]},"id":"2276","mass":"32000","name":"Allegan","nametype":"Valid","recclass":"H5","reclat":"42.533330","reclong":"-85.883330","year":"1899-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-105.31667,26.96667]},"id":"2278","mass":"2000000","name":"Allende","nametype":"Valid","recclass":"CV3","reclat":"26.966670","reclong":"-105.316670","year":"1969-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[32.41275,20.74575]},"id":"48915","mass":"3950","name":"Almahata Sitta","nametype":"Valid","recclass":"Ureilite-an","reclat":"20.745750","reclong":"32.412750","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[44.21556,35.27333]},"id":"2284","mass":"6000","name":"Alta'ameem","nametype":"Valid","recclass":"LL5","reclat":"35.273330","reclong":"44.215560","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.25,27.66667]},"id":"2290","mass":"6400","name":"Ambapur Nagla","nametype":"Valid","recclass":"H5","reclat":"27.666670","reclong":"78.250000","year":"1895-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[85.56667,26.58333]},"id":"2294","mass":"2700","name":"Andhara","nametype":"Valid","recclass":"Stone-uncl","reclat":"26.583330","reclong":"85.566670","year":"1880-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"49",":@computed_region_nnqa_25f4":"1723","fall":"Fell","geolocation":{"type":"Point","coordinates":[-70.75,44.61667]},"id":"2295","mass":"3200","name":"Andover","nametype":"Valid","recclass":"L6","reclat":"44.616670","reclong":"-70.750000","year":"1898-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.5,48.7]},"id":"2296","mass":"600","name":"Andreevka","nametype":"Valid","recclass":"L3","reclat":"48.700000","reclong":"37.500000","year":"1969-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.86667,20.88333]},"id":"2298","mass":"17900","name":"Andura","nametype":"Valid","recclass":"H6","reclat":"20.883330","reclong":"76.866670","year":"1939-01-01T00:00:00.000"} -,{"fall":"Found","geolocation":{"type":"Point","coordinates":[0,0]},"id":"50693","mass":"256.8","name":"Northwest Africa 5815","nametype":"Valid","recclass":"L5","reclat":"0.000000","reclong":"0.000000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.55,47.46667]},"id":"2301","name":"Angers","nametype":"Valid","recclass":"L6","reclat":"47.466670","reclong":"-0.550000","year":"1822-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-44.31667,-22.96667]},"id":"2302","mass":"1500","name":"Angra dos Reis (stone)","nametype":"Valid","recclass":"Angrite","reclat":"-22.966670","reclong":"-44.316670","year":"1869-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[39.71667,9.53333]},"id":"2304","mass":"6500","name":"Ankober","nametype":"Valid","recclass":"H4","reclat":"9.533330","reclong":"39.716670","year":"1942-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[105.18333,25.15]},"id":"2305","mass":"2500","name":"Anlong","nametype":"Valid","recclass":"H5","reclat":"25.150000","reclong":"105.183330","year":"1971-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[140.78556,40.81056]},"id":"2313","mass":"320","name":"Aomori","nametype":"Valid","recclass":"L6","reclat":"40.810560","reclong":"140.785560","year":"1984-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-2.71667,53.58333]},"id":"2318","mass":"15000","name":"Appley Bridge","nametype":"Valid","recclass":"LL6","reclat":"53.583330","reclong":"-2.716670","year":"1914-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.38333,43.86667]},"id":"2320","mass":"3200","name":"Apt","nametype":"Valid","recclass":"L6","reclat":"43.866670","reclong":"5.383330","year":"1803-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-66,-33]},"id":"2325","mass":"810","name":"Arbol Solo","nametype":"Valid","recclass":"H5","reclat":"-33.000000","reclong":"-66.000000","year":"1954-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"18",":@computed_region_nnqa_25f4":"2697","fall":"Fell","geolocation":{"type":"Point","coordinates":[-94.3,38.5]},"id":"2329","mass":"5070","name":"Archie","nametype":"Valid","recclass":"H6","reclat":"38.500000","reclong":"-94.300000","year":"1932-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-60.66667,-31.41667]},"id":"2340","mass":"7450","name":"Arroyo Aguiar","nametype":"Valid","recclass":"H5","reclat":"-31.416670","reclong":"-60.666670","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.03333,42.45]},"id":"2345","mass":"41","name":"Asco","nametype":"Valid","recclass":"H6","reclat":"42.450000","reclong":"9.033330","year":"1805-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"774","fall":"Fell","geolocation":{"type":"Point","coordinates":[-97.01,31.805]},"id":"48954","mass":"9500","name":"Ash Creek","nametype":"Valid","recclass":"L6","reclat":"31.805000","reclong":"-97.010000","year":"2009-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.3,52.05]},"id":"2346","mass":"1300","name":"Ashdon","nametype":"Valid","recclass":"L6","reclat":"52.050000","reclong":"0.300000","year":"1923-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.55,43.03333]},"id":"2353","mass":"2000","name":"Assisi","nametype":"Valid","recclass":"H5","reclat":"43.033330","reclong":"12.550000","year":"1886-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[80.625,25.25417]},"id":"4883","mass":"1280","name":"Atarra","nametype":"Valid","recclass":"L4","reclat":"25.254170","reclong":"80.625000","year":"1920-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-103.66667,20.06667]},"id":"4884","mass":"94.2","name":"Atemajac","nametype":"Valid","recclass":"L6","reclat":"20.066670","reclong":"-103.666670","year":"1896-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"29",":@computed_region_nnqa_25f4":"3134","fall":"Fell","geolocation":{"type":"Point","coordinates":[-87,34.75]},"id":"4885","mass":"265","name":"Athens","nametype":"Valid","recclass":"LL6","reclat":"34.750000","reclong":"-87.000000","year":"1933-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"20",":@computed_region_nnqa_25f4":"602","fall":"Fell","geolocation":{"type":"Point","coordinates":[-96.15,34.31667]},"id":"4888","mass":"1384.2","name":"Atoka","nametype":"Valid","recclass":"L6","reclat":"34.316670","reclong":"-96.150000","year":"1945-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.16667,44.38333]},"id":"4893","mass":"800","name":"Aubres","nametype":"Valid","recclass":"Aubrite","reclat":"44.383330","reclong":"5.166670","year":"1836-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.66667,36.16667]},"id":"4899","mass":"50000","name":"Aumale","nametype":"Valid","recclass":"L6","reclat":"36.166670","reclong":"3.666670","year":"1865-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.23333,44.33333]},"id":"4900","mass":"2000","name":"Aumieres","nametype":"Valid","recclass":"L6","reclat":"44.333330","reclong":"3.233330","year":"1842-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.58333,43.08333]},"id":"4903","mass":"50000","name":"Ausson","nametype":"Valid","recclass":"L5","reclat":"43.083330","reclong":"0.583330","year":"1858-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-49.95083,-21.46028]},"id":"4905","mass":"9330","name":"Avanhandava","nametype":"Valid","recclass":"H4","reclat":"-21.460280","reclong":"-49.950830","year":"1952-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.5,46]},"id":"4906","mass":"1230","name":"Avce","nametype":"Valid","recclass":"Iron, IIAB","reclat":"46.000000","reclong":"13.500000","year":"1908-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-103.5,25]},"id":"4907","mass":"146","name":"Avilez","nametype":"Valid","recclass":"H","reclat":"25.000000","reclong":"-103.500000","year":"1855-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[32.83333,2.71667]},"id":"4910","mass":"134","name":"Awere","nametype":"Valid","recclass":"L4","reclat":"2.716670","reclong":"32.833330","year":"1968-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"11",":@computed_region_nnqa_25f4":"1989","fall":"Fell","geolocation":{"type":"Point","coordinates":[-108,36.8]},"id":"4913","mass":"2830","name":"Aztec","nametype":"Valid","recclass":"L6","reclat":"36.800000","reclong":"-108.000000","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[38,48.6]},"id":"4917","mass":"18000","name":"Bachmut","nametype":"Valid","recclass":"L6","reclat":"48.600000","reclong":"38.000000","year":"1814-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.5,28.48333]},"id":"4922","mass":"10322","name":"Bahjoi","nametype":"Valid","recclass":"Iron, IAB-sLL","reclat":"28.483330","reclong":"78.500000","year":"1934-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"2373","fall":"Fell","geolocation":{"type":"Point","coordinates":[-82.48333,35.96667]},"id":"4925","mass":"3700","name":"Bald Mountain","nametype":"Valid","recclass":"L4","reclat":"35.966670","reclong":"-82.483330","year":"1929-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"32",":@computed_region_nnqa_25f4":"495","fall":"Fell","geolocation":{"type":"Point","coordinates":[-88.66667,34.5]},"id":"4926","mass":"345","name":"Baldwyn","nametype":"Valid","recclass":"L6","reclat":"34.500000","reclong":"-88.666670","year":"1922-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.38333,5.38333]},"id":"4928","mass":"1000","name":"Bali","nametype":"Valid","recclass":"CV3","reclat":"5.383330","reclong":"16.383330","year":"1907-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[101.18333,16.66667]},"id":"4934","mass":"16700","name":"Ban Rong Du","nametype":"Valid","recclass":"Iron, ungrouped","reclat":"16.666670","reclong":"101.183330","year":"1993-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[107.6,-6.91667]},"id":"4935","mass":"11500","name":"Bandong","nametype":"Valid","recclass":"LL6","reclat":"-6.916670","reclong":"107.600000","year":"1871-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.33333,27.7]},"id":"4936","mass":"15000","name":"Bansur","nametype":"Valid","recclass":"L6","reclat":"27.700000","reclong":"76.333330","year":"1892-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.2,30.4]},"id":"4937","mass":"14","name":"Banswal","nametype":"Valid","recclass":"L5","reclat":"30.400000","reclong":"78.200000","year":"1913-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[106,-6.33333]},"id":"4938","mass":"629","name":"Banten","nametype":"Valid","recclass":"CM2","reclat":"-6.333330","reclong":"106.000000","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.05,43.95]},"id":"4942","mass":"6400","name":"Barbotan","nametype":"Valid","recclass":"H5","reclat":"43.950000","reclong":"-0.050000","year":"1790-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[2.16667,41.36667]},"id":"4944","name":"Barcelona (stone)","nametype":"Valid","recclass":"OC","reclat":"41.366670","reclong":"2.166670","year":"1704-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-2.5,42.38333]},"id":"4946","mass":"3200","name":"Barea","nametype":"Valid","recclass":"Mesosiderite-A1","reclat":"42.383330","reclong":"-2.500000","year":"1842-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.08333,52.73333]},"id":"4947","mass":"23.2","name":"Barnaul","nametype":"Valid","recclass":"H5","reclat":"52.733330","reclong":"84.083330","year":"1904-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.1,52]},"id":"4948","mass":"17","name":"Barntrup","nametype":"Valid","recclass":"LL4","reclat":"52.000000","reclong":"9.100000","year":"1886-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.8,31.61667]},"id":"4949","mass":"4500","name":"Baroti","nametype":"Valid","recclass":"L6","reclat":"31.616670","reclong":"76.800000","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.33972,52.56528]},"id":"4954","mass":"44000","name":"Barwell","nametype":"Valid","recclass":"L5","reclat":"52.565280","reclong":"-1.339720","year":"1965-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-5.9,15.78333]},"id":"44876","mass":"29560","name":"Bassikounou","nametype":"Valid","recclass":"H5","reclat":"15.783330","reclong":"-5.900000","year":"2006-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[20.93583,52.03333]},"id":"4957","mass":"15500","name":"Baszkówka","nametype":"Valid","recclass":"L5","reclat":"52.033330","reclong":"20.935830","year":"1994-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"21",":@computed_region_nnqa_25f4":"662","fall":"Fell","geolocation":{"type":"Point","coordinates":[-98.31667,45.41667]},"id":"4974","mass":"21000","name":"Bath","nametype":"Valid","recclass":"H4","reclat":"45.416670","reclong":"-98.316670","year":"1892-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"36",":@computed_region_nnqa_25f4":"1921","fall":"Fell","geolocation":{"type":"Point","coordinates":[-83.75,38.25]},"id":"4975","mass":"86000","name":"Bath Furnace","nametype":"Valid","recclass":"L6","reclat":"38.250000","reclong":"-83.750000","year":"1902-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"10",":@computed_region_nnqa_25f4":"2397","fall":"Fell","geolocation":{"type":"Point","coordinates":[-117.18913,40.66813]},"id":"56133","mass":"2900","name":"Battle Mountain","nametype":"Valid","recclass":"L6","reclat":"40.668130","reclong":"-117.189130","year":"2012-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.18333,11.08333]},"id":"4976","mass":"1557","name":"Bawku","nametype":"Valid","recclass":"LL5","reclat":"11.083330","reclong":"-0.183330","year":"1989-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"18",":@computed_region_nnqa_25f4":"2216","fall":"Fell","geolocation":{"type":"Point","coordinates":[-93.5,36.75]},"id":"4977","mass":"611","name":"Baxter","nametype":"Valid","recclass":"L6","reclat":"36.750000","reclong":"-93.500000","year":"1916-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"17",":@computed_region_nnqa_25f4":"1285","fall":"Fell","geolocation":{"type":"Point","coordinates":[-101.2,39.8]},"id":"4984","mass":"16000","name":"Beardsley","nametype":"Valid","recclass":"H5","reclat":"39.800000","reclong":"-101.200000","year":"1929-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-117.33333,51.16667]},"id":"4986","mass":"14000","name":"Beaver Creek","nametype":"Valid","recclass":"H5","reclat":"51.166670","reclong":"-117.333330","year":"1893-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-4.1,53.01667]},"id":"4993","mass":"794","name":"Beddgelert","nametype":"Valid","recclass":"H5","reclat":"53.016670","reclong":"-4.100000","year":"1949-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"1978","fall":"Fell","geolocation":{"type":"Point","coordinates":[-96.46667,33.6]},"id":"5005","mass":"375","name":"Bells","nametype":"Valid","recclass":"C2-ung","reclat":"33.600000","reclong":"-96.466670","year":"1961-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-64.86667,-32.33333]},"id":"5009","name":"Belville","nametype":"Valid","recclass":"OC","reclat":"-32.333330","reclong":"-64.866670","year":"1937-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.91667,25.36667]},"id":"5011","mass":"3700","name":"Benares (a)","nametype":"Valid","recclass":"LL4","reclat":"25.366670","reclong":"82.916670","year":"1798-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-8.15,32.25]},"id":"30443","mass":"25000","name":"Benguerir","nametype":"Valid","recclass":"LL6","reclat":"32.250000","reclong":"-8.150000","year":"2004-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.8,32.86667]},"id":"5018","mass":"19000","name":"Beni M'hira","nametype":"Valid","recclass":"L6","reclat":"32.866670","reclong":"10.800000","year":"2001-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"34",":@computed_region_nnqa_25f4":"1869","fall":"Fell","geolocation":{"type":"Point","coordinates":[-89.15,39.08333]},"id":"5021","mass":"1770.5","name":"Benld","nametype":"Valid","recclass":"H6","reclat":"39.083330","reclong":"-89.150000","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[28.41667,-26.16667]},"id":"5023","mass":"3880","name":"Benoni","nametype":"Valid","recclass":"H6","reclat":"-26.166670","reclong":"28.416670","year":"1943-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7,30]},"id":"5024","mass":"45000","name":"Bensour","nametype":"Valid","recclass":"LL6","reclat":"30.000000","reclong":"-7.000000","year":"2002-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-67.55,45.95]},"id":"5026","mass":"2840","name":"Benton","nametype":"Valid","recclass":"LL6","reclat":"45.950000","reclong":"-67.550000","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-58.32833,-31.91]},"id":"48975","mass":"270","name":"Berduc","nametype":"Valid","recclass":"L6","reclat":"-31.910000","reclong":"-58.328330","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.65,11.65]},"id":"5028","mass":"18000","name":"Béréba","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"11.650000","reclong":"-3.650000","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.8,41.68333]},"id":"5029","mass":"1440","name":"Berlanguillas","nametype":"Valid","recclass":"L6","reclat":"41.683330","reclong":"-3.800000","year":"1811-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"9",":@computed_region_nnqa_25f4":"1072","fall":"Fell","geolocation":{"type":"Point","coordinates":[-105.02325,40.30583]},"id":"47355","mass":"960","name":"Berthoud","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"40.305830","reclong":"-105.023250","year":"2004-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"47",":@computed_region_nnqa_25f4":"2030","fall":"Fell","geolocation":{"type":"Point","coordinates":[-73.83333,42.53333]},"id":"5032","mass":"13.9","name":"Bethlehem","nametype":"Valid","recclass":"H","reclat":"42.533330","reclong":"-73.833330","year":"1859-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.23333,43.21667]},"id":"5034","mass":"2000","name":"Beuste","nametype":"Valid","recclass":"L5","reclat":"43.216670","reclong":"-0.233330","year":"1859-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.5,33.88333]},"id":"5035","mass":"1100","name":"Beyrout","nametype":"Valid","recclass":"LL3.8","reclat":"33.883330","reclong":"35.500000","year":"1921-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[74.83333,20.88333]},"id":"5037","mass":"18","name":"Bhagur","nametype":"Valid","recclass":"L6","reclat":"20.883330","reclong":"74.833330","year":"1877-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[73.11528,26.50833]},"id":"36591","mass":"678","name":"Bhawad","nametype":"Valid","recclass":"LL6","reclat":"26.508330","reclong":"73.115280","year":"2002-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[71.46667,20.83333]},"id":"5039","mass":"100","name":"Bherai","nametype":"Valid","recclass":"L6","reclat":"20.833330","reclong":"71.466670","year":"1893-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[90.65,22.68333]},"id":"5040","mass":"1047","name":"Bhola","nametype":"Valid","recclass":"LL3-6","reclat":"22.683330","reclong":"90.650000","year":"1940-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[86.9,22.08333]},"id":"5041","mass":"2500","name":"Bholghati","nametype":"Valid","recclass":"Howardite","reclat":"22.083330","reclong":"86.900000","year":"1905-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[23.2,53.1]},"id":"5042","mass":"4000","name":"Bialystok","nametype":"Valid","recclass":"Eucrite-pmict","reclat":"53.100000","reclong":"23.200000","year":"1827-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.16667,50.13333]},"id":"5043","mass":"1900","name":"Bielokrynitschie","nametype":"Valid","recclass":"H4","reclat":"50.133330","reclong":"27.166670","year":"1887-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.08333,12.45]},"id":"5045","mass":"25000","name":"Bilanga","nametype":"Valid","recclass":"Diogenite","reclat":"12.450000","reclong":"-0.083330","year":"1999-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.67639,-33.15639]},"id":"5051","mass":"488.1","name":"Binningup","nametype":"Valid","recclass":"H5","reclat":"-33.156390","reclong":"115.676390","year":"1984-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.3,13.76667]},"id":"5056","mass":"560","name":"Birni N'konni","nametype":"Valid","recclass":"H4","reclat":"13.766670","reclong":"5.300000","year":"1923-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"33",":@computed_region_nnqa_25f4":"657","fall":"Fell","geolocation":{"type":"Point","coordinates":[-80.28333,34.16667]},"id":"5059","mass":"6000","name":"Bishopville","nametype":"Valid","recclass":"Aubrite","reclat":"34.166670","reclong":"-80.283330","year":"1843-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.6,25.38333]},"id":"5060","mass":"1039","name":"Bishunpur","nametype":"Valid","recclass":"LL3.15","reclat":"25.383330","reclong":"82.600000","year":"1895-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.16667,49.78333]},"id":"5063","mass":"1850","name":"Bjelaja Zerkov","nametype":"Valid","recclass":"H6","reclat":"49.783330","reclong":"30.166670","year":"1796-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25.8,60.4]},"id":"5064","mass":"330000","name":"Bjurböle","nametype":"Valid","recclass":"L/LL4","reclat":"60.400000","reclong":"25.800000","year":"1899-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"48",":@computed_region_nnqa_25f4":"2495","fall":"Fell","geolocation":{"type":"Point","coordinates":[-78.08333,40.91667]},"id":"5065","mass":"705","name":"Black Moshannan Park","nametype":"Valid","recclass":"L5","reclat":"40.916670","reclong":"-78.083330","year":"1941-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"20",":@computed_region_nnqa_25f4":"2164","fall":"Fell","geolocation":{"type":"Point","coordinates":[-97.33333,36.83333]},"id":"5068","mass":"2381","name":"Blackwell","nametype":"Valid","recclass":"L5","reclat":"36.833330","reclong":"-97.333330","year":"1906-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"3063","fall":"Fell","geolocation":{"type":"Point","coordinates":[-98.83333,31.83333]},"id":"5071","mass":"5100","name":"Blanket","nametype":"Valid","recclass":"L6","reclat":"31.833330","reclong":"-98.833330","year":"1909-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.63333,49.36667]},"id":"5072","mass":"470","name":"Blansko","nametype":"Valid","recclass":"H6","reclat":"49.366670","reclong":"16.633330","year":"1833-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"34",":@computed_region_nnqa_25f4":"1795","fall":"Fell","geolocation":{"type":"Point","coordinates":[-89.00417,40.48]},"id":"5076","mass":"67.8","name":"Bloomington","nametype":"Valid","recclass":"LL6","reclat":"40.480000","reclong":"-89.004170","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.83333,33.83333]},"id":"5090","mass":"7500","name":"Bo Xian","nametype":"Valid","recclass":"LL3.9","reclat":"33.833330","reclong":"115.833330","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-102,23]},"id":"5093","mass":"56","name":"Bocas","nametype":"Valid","recclass":"L6","reclat":"23.000000","reclong":"-102.000000","year":"1804-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.7,12.5]},"id":"5097","mass":"8800","name":"Bogou","nametype":"Valid","recclass":"Iron, IAB-MG","reclat":"12.500000","reclong":"0.700000","year":"1962-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[131.63333,44.55]},"id":"5098","mass":"256000","name":"Boguslavka","nametype":"Valid","recclass":"Iron, IIAB","reclat":"44.550000","reclong":"131.633330","year":"1916-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.05,44.86667]},"id":"5110","mass":"1676","name":"Borgo San Donino","nametype":"Valid","recclass":"LL6","reclat":"44.866670","reclong":"10.050000","year":"1808-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.03333,21.95]},"id":"5111","mass":"8600","name":"Bori","nametype":"Valid","recclass":"L6","reclat":"21.950000","reclong":"78.033330","year":"1894-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[52.48333,54.23333]},"id":"5112","mass":"1342","name":"Boriskino","nametype":"Valid","recclass":"CM2","reclat":"54.233330","reclong":"52.483330","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[24.28333,48.15]},"id":"5113","mass":"7000","name":"Borkut","nametype":"Valid","recclass":"L5","reclat":"48.150000","reclong":"24.283330","year":"1852-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.86667,55.46667]},"id":"5114","mass":"500","name":"Borodino","nametype":"Valid","recclass":"H5","reclat":"55.466670","reclong":"35.866670","year":"1812-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.88333,51.33333]},"id":"5117","mass":"614","name":"Botschetschki","nametype":"Valid","recclass":"L4","reclat":"51.333330","reclong":"33.883330","year":"1823-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-11.3715,17.71067]},"id":"57168","mass":"190","name":"Boumdeid (2003)","nametype":"Valid","recclass":"L6","reclat":"17.710670","reclong":"-11.371500","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-11.34133,17.17493]},"id":"57167","mass":"3599","name":"Boumdeid (2011)","nametype":"Valid","recclass":"L6","reclat":"17.174930","reclong":"-11.341330","year":"2011-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6.33333,54.56667]},"id":"5121","mass":"5460","name":"Bovedy","nametype":"Valid","recclass":"L3","reclat":"54.566670","reclong":"-6.333330","year":"1969-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"48",":@computed_region_nnqa_25f4":"2455","fall":"Fell","geolocation":{"type":"Point","coordinates":[-80.08333,40.5]},"id":"5128","mass":"762","name":"Bradford Woods","nametype":"Valid","recclass":"L","reclat":"40.500000","reclong":"-80.083330","year":"1886-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.3,50.6]},"id":"5133","mass":"39000","name":"Braunau","nametype":"Valid","recclass":"Iron, IIAB","reclat":"50.600000","reclong":"16.300000","year":"1847-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.18361,50.66694]},"id":"5134","mass":"1500","name":"Breitscheid","nametype":"Valid","recclass":"H5","reclat":"50.666940","reclong":"8.183610","year":"1956-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.1,53.4]},"id":"5135","mass":"7250","name":"Bremervörde","nametype":"Valid","recclass":"H/L3.9","reclat":"53.400000","reclong":"9.100000","year":"1855-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[59.31667,52.13333]},"id":"5140","mass":"219","name":"Brient","nametype":"Valid","recclass":"Eucrite-pmict","reclat":"52.133330","reclong":"59.316670","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-112.88333,53.9]},"id":"5156","mass":"303000","name":"Bruderheim","nametype":"Valid","recclass":"L6","reclat":"53.900000","reclong":"-112.883330","year":"1960-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[64.60035,39.77978]},"id":"30448","mass":"5300","name":"Bukhara","nametype":"Valid","recclass":"CV3","reclat":"39.779780","reclong":"64.600350","year":"2001-01-01T00:00:00.000"} -,{"fall":"Fell","id":"5163","mass":"2250","name":"Bulls Run","nametype":"Valid","recclass":"Iron?","year":"1964-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[129.19,-31.35]},"id":"48653","mass":"324","name":"Bunburra Rockhole","nametype":"Valid","recclass":"Eucrite","reclat":"-31.350000","reclong":"129.190000","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.58333,10.01667]},"id":"5165","mass":"357","name":"Bununu","nametype":"Valid","recclass":"Howardite","reclat":"10.016670","reclong":"9.583330","year":"1942-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[48,5]},"id":"5169","mass":"120000","name":"Bur-Gheluai","nametype":"Valid","recclass":"H5","reclat":"5.000000","reclong":"48.000000","year":"1919-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"36",":@computed_region_nnqa_25f4":"256","fall":"Fell","geolocation":{"type":"Point","coordinates":[-82.23722,37.62194]},"id":"5175","mass":"1504","name":"Burnwell","nametype":"Valid","recclass":"H4-an","reclat":"37.621940","reclong":"-82.237220","year":"1990-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29.23333,40.2]},"id":"5177","mass":"25000","name":"Bursa","nametype":"Valid","recclass":"L6","reclat":"40.200000","reclong":"29.233330","year":"1946-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25.78333,46.45]},"id":"5178","mass":"5000","name":"Buschhof","nametype":"Valid","recclass":"L6","reclat":"46.450000","reclong":"25.783330","year":"1863-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.83333,26.78333]},"id":"5181","mass":"1500","name":"Bustee","nametype":"Valid","recclass":"Aubrite","reclat":"26.783330","reclong":"82.833330","year":"1852-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.08333,27.08333]},"id":"5183","mass":"29000","name":"Butsura","nametype":"Valid","recclass":"H6","reclat":"27.083330","reclong":"84.083330","year":"1861-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-109.84817,52.996]},"id":"48654","mass":"41000","name":"Buzzard Coulee","nametype":"Valid","recclass":"H4","reclat":"52.996000","reclong":"-109.848170","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.16667,37.98333]},"id":"5185","mass":"25000","name":"Cabezo de Mayo","nametype":"Valid","recclass":"L/LL6","reclat":"37.983330","reclong":"-1.166670","year":"1870-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"15",":@computed_region_nnqa_25f4":"1029","fall":"Fell","geolocation":{"type":"Point","coordinates":[-93.5,35.5]},"id":"5186","mass":"48500","name":"Cabin Creek","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"35.500000","reclong":"-93.500000","year":"1886-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[20.33333,43.83889]},"id":"5187","mass":"212","name":"Cacak","nametype":"Valid","recclass":"OC","reclat":"43.838890","reclong":"20.333330","year":"1919-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-76.51,3.405]},"id":"45976","mass":"478","name":"Cali","nametype":"Valid","recclass":"H/L4","reclat":"3.405000","reclong":"-76.510000","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[122.33333,11.75]},"id":"5200","mass":"2400","name":"Calivo","nametype":"Valid","recclass":"Stone-uncl","reclat":"11.750000","reclong":"122.333330","year":"1916-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-40.16667,-7.03333]},"id":"5249","mass":"23680","name":"Campos Sales","nametype":"Valid","recclass":"L5","reclat":"-7.033330","reclong":"-40.166670","year":"1991-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.6,39.8]},"id":"5250","mass":"4000","name":"Çanakkale","nametype":"Valid","recclass":"L6","reclat":"39.800000","reclong":"26.600000","year":"1964-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.66667,41.25]},"id":"5251","mass":"945","name":"Cañellas","nametype":"Valid","recclass":"H4","reclat":"41.250000","reclong":"1.666670","year":"1861-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-5.15,43.38333]},"id":"5252","mass":"34000","name":"Cangas de Onis","nametype":"Valid","recclass":"H5","reclat":"43.383330","reclong":"-5.150000","year":"1866-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"9",":@computed_region_nnqa_25f4":"1448","fall":"Fell","geolocation":{"type":"Point","coordinates":[-105.24139,38.47028]},"id":"5253","mass":"1400","name":"Canon City","nametype":"Valid","recclass":"H6","reclat":"38.470280","reclong":"-105.241390","year":"1973-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"18",":@computed_region_nnqa_25f4":"2695","fall":"Fell","geolocation":{"type":"Point","coordinates":[-89.58333,37.26667]},"id":"5260","mass":"2300","name":"Cape Girardeau","nametype":"Valid","recclass":"H6","reclat":"37.266670","reclong":"-89.583330","year":"1846-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-64.55,-30.88333]},"id":"5264","mass":"750","name":"Capilla del Monte","nametype":"Valid","recclass":"H6","reclat":"-30.883330","reclong":"-64.550000","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-69.04389,-16.66444]},"id":"45817","mass":"342","name":"Carancas","nametype":"Valid","recclass":"H4-5","reclat":"-16.664440","reclong":"-69.043890","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27,38.5]},"id":"5265","mass":"8","name":"Caratash","nametype":"Valid","recclass":"LL6","reclat":"38.500000","reclong":"27.000000","year":"1902-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"648","fall":"Fell","geolocation":{"type":"Point","coordinates":[-78.06667,36.08333]},"id":"5291","mass":"7300","name":"Castalia","nametype":"Valid","recclass":"H5","reclat":"36.083330","reclong":"-78.066670","year":"1874-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.5,43.35]},"id":"5292","name":"Castel Berardenga","nametype":"Valid","recclass":"Stone-uncl","reclat":"43.350000","reclong":"11.500000","year":"1791-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"49",":@computed_region_nnqa_25f4":"414","fall":"Fell","geolocation":{"type":"Point","coordinates":[-68.75,44.38333]},"id":"5293","mass":"94","name":"Castine","nametype":"Valid","recclass":"L6","reclat":"44.383330","reclong":"-68.750000","year":"1848-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.2,39.8]},"id":"5295","mass":"15000","name":"Castrovillari","nametype":"Valid","recclass":"Stone-uncl","reclat":"39.800000","reclong":"16.200000","year":"1583-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"637","fall":"Fell","geolocation":{"type":"Point","coordinates":[-79.25,36.5]},"id":"5296","mass":"1360","name":"Caswell County","nametype":"Valid","recclass":"OC","reclat":"36.500000","reclong":"-79.250000","year":"1810-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-105.23333,26.46667]},"id":"5306","mass":"1025","name":"Ceniceros","nametype":"Valid","recclass":"L3.7","reclat":"26.466670","reclong":"-105.233330","year":"1988-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"21",":@computed_region_nnqa_25f4":"2684","fall":"Fell","geolocation":{"type":"Point","coordinates":[-96.91667,43.2]},"id":"5307","mass":"45.6","name":"Centerville","nametype":"Valid","recclass":"H5","reclat":"43.200000","reclong":"-96.916670","year":"1956-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.3,45.08333]},"id":"5308","mass":"6460","name":"Cereseto","nametype":"Valid","recclass":"H5","reclat":"45.083330","reclong":"8.300000","year":"1840-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[109.31667,28.53333]},"id":"5313","mass":"3700","name":"Chadong","nametype":"Valid","recclass":"L6","reclat":"28.533330","reclong":"109.316670","year":"1998-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[81.66667,25.36667]},"id":"5314","mass":"0.5","name":"Chail","nametype":"Valid","recclass":"H6","reclat":"25.366670","reclong":"81.666670","year":"1814-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[83.48333,25.85]},"id":"5315","mass":"8200","name":"Chainpur","nametype":"Valid","recclass":"LL3.4","reclat":"25.850000","reclong":"83.483330","year":"1907-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-58.05,-30.78333]},"id":"5316","mass":"18300","name":"Chajari","nametype":"Valid","recclass":"L5","reclat":"-30.783330","reclong":"-58.050000","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.01667,20.26667]},"id":"5320","mass":"8800","name":"Chandakapur","nametype":"Valid","recclass":"L5","reclat":"20.266670","reclong":"76.016670","year":"1838-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[79.05,27.28333]},"id":"5321","mass":"1100","name":"Chandpur","nametype":"Valid","recclass":"L6","reclat":"27.283330","reclong":"79.050000","year":"1885-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.75,29.08333]},"id":"5322","mass":"1810","name":"Changde","nametype":"Valid","recclass":"H5","reclat":"29.083330","reclong":"111.750000","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.05,46.68333]},"id":"5325","mass":"31500","name":"Chantonnay","nametype":"Valid","recclass":"L6","reclat":"46.683330","reclong":"1.050000","year":"1812-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"39",":@computed_region_nnqa_25f4":"2007","fall":"Fell","geolocation":{"type":"Point","coordinates":[-87.33333,36.16667]},"id":"5328","mass":"4300","name":"Charlotte","nametype":"Valid","recclass":"Iron, IVA","reclat":"36.166670","reclong":"-87.333330","year":"1835-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.56667,47.93333]},"id":"5329","mass":"27000","name":"Charsonville","nametype":"Valid","recclass":"H6","reclat":"47.933330","reclong":"1.566670","year":"1810-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.5,29.48333]},"id":"5330","mass":"12000","name":"Charwallas","nametype":"Valid","recclass":"H6","reclat":"29.483330","reclong":"75.500000","year":"1834-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.36667,47.71667]},"id":"5331","mass":"4000","name":"Chassigny","nametype":"Valid","recclass":"Martian (chassignite)","reclat":"47.716670","reclong":"5.366670","year":"1815-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[2.91667,47.93333]},"id":"5332","mass":"30000","name":"Château-Renard","nametype":"Valid","recclass":"L6","reclat":"47.933330","reclong":"2.916670","year":"1841-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7.46667,41.93333]},"id":"5334","mass":"2945","name":"Chaves","nametype":"Valid","recclass":"Howardite","reclat":"41.933330","reclong":"-7.466670","year":"1925-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[32.5,-3.66667]},"id":"5338","mass":"2936","name":"Chela","nametype":"Valid","recclass":"H4","reclat":"-3.666670","reclong":"32.500000","year":"1988-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[61.11667,54.81667]},"id":"57165","mass":"100000","name":"Chelyabinsk","nametype":"Valid","recclass":"LL5","reclat":"54.816670","reclong":"61.116670","year":"2013-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-5.01472,23.69639]},"id":"47347","mass":"100000","name":"Chergach ","nametype":"Valid","recclass":"H5","reclat":"23.696390","reclong":"-5.014720","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.1,53.7]},"id":"5339","mass":"6000","name":"Chernyi Bor","nametype":"Valid","recclass":"H4","reclat":"53.700000","reclong":"30.100000","year":"1964-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"33",":@computed_region_nnqa_25f4":"2582","fall":"Fell","geolocation":{"type":"Point","coordinates":[-81.88333,35.03333]},"id":"5340","mass":"8400","name":"Cherokee Springs","nametype":"Valid","recclass":"LL6","reclat":"35.033330","reclong":"-81.883330","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.81667,46.55]},"id":"5341","mass":"705","name":"Chervettaz","nametype":"Valid","recclass":"L5","reclat":"46.550000","reclong":"6.816670","year":"1901-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[34,50.83333]},"id":"5342","mass":"1700","name":"Chervony Kut","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"50.833330","reclong":"34.000000","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.5,14.5]},"id":"5344","mass":"72","name":"Chetrinahatti","nametype":"Valid","recclass":"Stone-uncl","reclat":"14.500000","reclong":"76.500000","year":"1880-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[101.63333,17.9]},"id":"5345","mass":"367","name":"Chiang Khan","nametype":"Valid","recclass":"H6","reclat":"17.900000","reclong":"101.633330","year":"1981-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"48",":@computed_region_nnqa_25f4":"2459","fall":"Fell","geolocation":{"type":"Point","coordinates":[-79.73333,40.93333]},"id":"5349","mass":"303","name":"Chicora","nametype":"Valid","recclass":"LL6","reclat":"40.933330","reclong":"-79.733330","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.395,-10.05944]},"id":"5355","mass":"3920","name":"Chisenga","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"-10.059440","reclong":"33.395000","year":"1988-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.96667,-17.35]},"id":"5356","name":"Chitado","nametype":"Valid","recclass":"L6","reclat":"-17.350000","reclong":"13.966670","year":"1966-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.97667,47.47083]},"id":"5357","mass":"4000","name":"Chitenay","nametype":"Valid","recclass":"L6","reclat":"47.470830","reclong":"0.976670","year":"1978-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[108.1,-6.95]},"id":"5364","mass":"1600","name":"Cilimus","nametype":"Valid","recclass":"L5","reclat":"-6.950000","reclong":"108.100000","year":"1979-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"31",":@computed_region_nnqa_25f4":"67","fall":"Fell","geolocation":{"type":"Point","coordinates":[-81.87278,32.1025]},"id":"5374","mass":"1455","name":"Claxton","nametype":"Valid","recclass":"L6","reclat":"32.102500","reclong":"-81.872780","year":"1984-01-01T00:00:00.000"} -,{"fall":"Fell","id":"5383","mass":"48.6","name":"Clohars","nametype":"Valid","recclass":"L4","year":"1822-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"41",":@computed_region_nnqa_25f4":"877","fall":"Fell","geolocation":{"type":"Point","coordinates":[-90.28333,44.9]},"id":"5395","mass":"104000","name":"Colby (Wisconsin)","nametype":"Valid","recclass":"L6","reclat":"44.900000","reclong":"-90.283330","year":"1917-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[19.38333,-33.13333]},"id":"5397","mass":"5200","name":"Cold Bokkeveld","nametype":"Valid","recclass":"CM2","reclat":"-33.133330","reclong":"19.383330","year":"1838-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"50",":@computed_region_nnqa_25f4":"356","fall":"Fell","geolocation":{"type":"Point","coordinates":[-84.50778,43.76111]},"id":"5401","mass":"469","name":"Coleman","nametype":"Valid","recclass":"L6","reclat":"43.761110","reclong":"-84.507780","year":"1994-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.61667,42.53333]},"id":"5403","mass":"5000","name":"Collescipoli","nametype":"Valid","recclass":"H5","reclat":"42.533330","reclong":"12.616670","year":"1890-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-47.55,-19.85]},"id":"5418","mass":"20350","name":"Conquista","nametype":"Valid","recclass":"H4","reclat":"-19.850000","reclong":"-47.550000","year":"1965-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-100.86667,21.16667]},"id":"5451","mass":"1200","name":"Cosina","nametype":"Valid","recclass":"H5","reclat":"21.166670","reclong":"-100.866670","year":"1844-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.26667,10.2]},"id":"5465","mass":"1460","name":"Cranganore","nametype":"Valid","recclass":"L6","reclat":"10.200000","reclong":"76.266670","year":"1917-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"20",":@computed_region_nnqa_25f4":"2201","fall":"Fell","geolocation":{"type":"Point","coordinates":[-97.58333,35.95]},"id":"5470","mass":"78.400000000000006","name":"Crescent","nametype":"Valid","recclass":"CM2","reclat":"35.950000","reclong":"-97.583330","year":"1936-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.3,-27.7]},"id":"5474","mass":"3650","name":"Cronstad","nametype":"Valid","recclass":"H5","reclat":"-27.700000","reclong":"27.300000","year":"1877-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"2332","fall":"Fell","geolocation":{"type":"Point","coordinates":[-78.13333,35.63333]},"id":"5476","mass":"167","name":"Cross Roads","nametype":"Valid","recclass":"H5","reclat":"35.633330","reclong":"-78.133330","year":"1892-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6.21667,54.61667]},"id":"5477","mass":"4255","name":"Crumlin","nametype":"Valid","recclass":"L5","reclat":"54.616670","reclong":"-6.216670","year":"1902-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"36",":@computed_region_nnqa_25f4":"1426","fall":"Fell","geolocation":{"type":"Point","coordinates":[-84.35,36.83333]},"id":"5496","mass":"17000","name":"Cumberland Falls","nametype":"Valid","recclass":"Aubrite","reclat":"36.833330","reclong":"-84.350000","year":"1919-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"36",":@computed_region_nnqa_25f4":"244","fall":"Fell","geolocation":{"type":"Point","coordinates":[-84.25,38.4]},"id":"5500","mass":"6000","name":"Cynthiana","nametype":"Valid","recclass":"L/LL4","reclat":"38.400000","reclong":"-84.250000","year":"1877-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.83333,35.61667]},"id":"5504","mass":"18000","name":"Dahmani","nametype":"Valid","recclass":"LL6","reclat":"35.616670","reclong":"8.833330","year":"1981-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[83.96667,26.91667]},"id":"5511","mass":"5650","name":"Dandapur","nametype":"Valid","recclass":"L6","reclat":"26.916670","reclong":"83.966670","year":"1878-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[24.56667,-28.2]},"id":"5513","mass":"1064","name":"Daniel's Kuil","nametype":"Valid","recclass":"EL6","reclat":"-28.200000","reclong":"24.566670","year":"1868-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"29",":@computed_region_nnqa_25f4":"103","fall":"Fell","geolocation":{"type":"Point","coordinates":[-87.06667,34.4]},"id":"5514","mass":"2000","name":"Danville","nametype":"Valid","recclass":"L6","reclat":"34.400000","reclong":"-87.066670","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.65,49.86667]},"id":"6603","mass":"100","name":"Darmstadt","nametype":"Valid","recclass":"H5","reclat":"49.866670","reclong":"8.650000","year":"1804-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[59.685,41.98444]},"id":"6604","mass":"7000","name":"Dashoguz","nametype":"Valid","recclass":"H5","reclat":"41.984440","reclong":"59.685000","year":"1998-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-79.95756,-1.87089]},"id":"51559","mass":"6580","name":"Daule","nametype":"Valid","recclass":"L5","reclat":"-1.870890","reclong":"-79.957560","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-80,43]},"id":"6621","mass":"340","name":"De Cewsville","nametype":"Valid","recclass":"H6","reclat":"43.000000","reclong":"-80.000000","year":"1887-01-01T00:00:00.000"} -,{":@computed_region_nnqa_25f4":"2491","fall":"Fell","geolocation":{"type":"Point","coordinates":[-74,40.25]},"id":"6634","mass":"28","name":"Deal","nametype":"Valid","recclass":"L6","reclat":"40.250000","reclong":"-74.000000","year":"1829-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.25,28.56667]},"id":"6642","mass":"0.8","name":"Delhi","nametype":"Valid","recclass":"L5","reclat":"28.566670","reclong":"77.250000","year":"1897-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.76667,51.46667]},"id":"6649","mass":"16400","name":"Demina","nametype":"Valid","recclass":"L6","reclat":"51.466670","reclong":"84.766670","year":"1911-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"9",":@computed_region_nnqa_25f4":"1444","fall":"Fell","geolocation":{"type":"Point","coordinates":[-104.93056,39.7825]},"id":"6660","mass":"230","name":"Denver","nametype":"Valid","recclass":"L6","reclat":"39.782500","reclong":"-104.930560","year":"1967-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[93.86667,26.68333]},"id":"6664","mass":"12500","name":"Dergaon","nametype":"Valid","recclass":"H5","reclat":"26.683330","reclong":"93.866670","year":"2001-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[73.61667,25.73333]},"id":"6693","mass":"25400","name":"Desuri","nametype":"Valid","recclass":"H6","reclat":"25.733330","reclong":"73.616670","year":"1962-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[81,19]},"id":"6694","mass":"12000","name":"Devgaon","nametype":"Valid","recclass":"H3.8","reclat":"19.000000","reclong":"81.000000","year":"2001-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.525,24.225]},"id":"6696","mass":"1140","name":"Devri-Khera","nametype":"Valid","recclass":"L6","reclat":"24.225000","reclong":"76.525000","year":"1994-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[71.42722,22.37778]},"id":"6698","mass":"45000","name":"Dhajala","nametype":"Valid","recclass":"H3.8","reclat":"22.377780","reclong":"71.427220","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.6,14.88333]},"id":"6699","mass":"1800","name":"Dharwar","nametype":"Valid","recclass":"OC","reclat":"14.883330","reclong":"75.600000","year":"1848-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.46667,32.23333]},"id":"7640","mass":"32000","name":"Dhurmsala","nametype":"Valid","recclass":"LL6","reclat":"32.233330","reclong":"76.466670","year":"1860-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.32997,37.35172]},"id":"47350","mass":"3396","name":"Didim","nametype":"Valid","recclass":"H3-5","reclat":"37.351720","reclong":"27.329970","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[18.56667,-33.75]},"id":"7642","mass":"1000","name":"Diep River","nametype":"Valid","recclass":"L6","reclat":"-33.750000","reclong":"18.566670","year":"1906-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-60.46667,-31.88333]},"id":"7649","mass":"400","name":"Distrito Quebracho","nametype":"Valid","recclass":"H4","reclat":"-31.883330","reclong":"-60.466670","year":"1957-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.5,-7.5]},"id":"7652","mass":"166000","name":"Djati-Pengilon","nametype":"Valid","recclass":"H6","reclat":"-7.500000","reclong":"111.500000","year":"1884-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.05,12.73333]},"id":"7656","mass":"3950","name":"Djermaia","nametype":"Valid","recclass":"H","reclat":"12.733330","reclong":"15.050000","year":"1961-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.55,36.95]},"id":"7657","mass":"10000","name":"Djoumine","nametype":"Valid","recclass":"H5-6","reclat":"36.950000","reclong":"9.550000","year":"1999-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[90.33333,23.5]},"id":"7658","mass":"3840","name":"Dokachi","nametype":"Valid","recclass":"H5","reclat":"23.500000","reclong":"90.333330","year":"1903-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25.3,50.75]},"id":"7659","mass":"1600","name":"Dolgovoli","nametype":"Valid","recclass":"L6","reclat":"50.750000","reclong":"25.300000","year":"1864-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29,40]},"id":"7661","mass":"438","name":"Domanitch","nametype":"Valid","recclass":"L5","reclat":"40.000000","reclong":"29.000000","year":"1907-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[119.03333,45.5]},"id":"7706","mass":"128800","name":"Dong Ujimqin Qi","nametype":"Valid","recclass":"Mesosiderite","reclat":"45.500000","reclong":"119.033330","year":"1995-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.45,21.86667]},"id":"7707","mass":"230","name":"Donga Kohrod","nametype":"Valid","recclass":"H6","reclat":"21.866670","reclong":"82.450000","year":"1899-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[120.78333,32.91667]},"id":"7708","mass":"5500","name":"Dongtai","nametype":"Valid","recclass":"LL6","reclat":"32.916670","reclong":"120.783330","year":"1970-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[112.3,51.2]},"id":"7718","mass":"3891","name":"Doroninsk","nametype":"Valid","recclass":"H5-7","reclat":"51.200000","reclong":"112.300000","year":"1805-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.16667,13.05]},"id":"7722","mass":"1250","name":"Dosso","nametype":"Valid","recclass":"L6","reclat":"13.050000","reclong":"3.166670","year":"1962-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6.3,32.33333]},"id":"7723","mass":"1161","name":"Douar Mghila","nametype":"Valid","recclass":"LL6","reclat":"32.333330","reclong":"-6.300000","year":"1932-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.91667,-13.66667]},"id":"7725","mass":"642","name":"Dowa","nametype":"Valid","recclass":"Stone-uncl","reclat":"-13.666670","reclong":"33.916670","year":"1976-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"39",":@computed_region_nnqa_25f4":"2115","fall":"Fell","geolocation":{"type":"Point","coordinates":[-86.5,36.4]},"id":"7728","mass":"5000","name":"Drake Creek","nametype":"Valid","recclass":"L6","reclat":"36.400000","reclong":"-86.500000","year":"1827-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-82.26,42.52]},"id":"7731","mass":"47700","name":"Dresden (Ontario)","nametype":"Valid","recclass":"H6","reclat":"42.520000","reclong":"-82.260000","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[18.44167,42.45833]},"id":"7736","mass":"1900","name":"Dubrovnik","nametype":"Valid","recclass":"L3-6","reclat":"42.458330","reclong":"18.441670","year":"1951-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[152.83333,-31.66667]},"id":"7743","mass":"30","name":"Dunbogan","nametype":"Valid","recclass":"L6","reclat":"-31.666670","reclong":"152.833330","year":"1999-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-8.03333,52.55]},"id":"7745","mass":"2270","name":"Dundrum","nametype":"Valid","recclass":"H5","reclat":"52.550000","reclong":"-8.033330","year":"1865-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[128.25,43.33333]},"id":"7749","name":"Dunhua","nametype":"Valid","recclass":"Stone-uncl","reclat":"43.333330","reclong":"128.250000","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.63333,30.3]},"id":"7750","mass":"13200","name":"Durala","nametype":"Valid","recclass":"L6","reclat":"30.300000","reclong":"76.633330","year":"1815-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[39.5,-4]},"id":"7752","mass":"577","name":"Duruma","nametype":"Valid","recclass":"L6","reclat":"-4.000000","reclong":"39.500000","year":"1853-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[127.26667,33.43333]},"id":"7754","mass":"2117","name":"Duwun","nametype":"Valid","recclass":"L6","reclat":"33.433330","reclong":"127.266670","year":"1943-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.31667,-27.2]},"id":"7755","mass":"3230","name":"Dwaleni","nametype":"Valid","recclass":"H4-6","reclat":"-27.200000","reclong":"31.316670","year":"1970-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82,26.25]},"id":"7757","mass":"300","name":"Dyalpur","nametype":"Valid","recclass":"Ureilite","reclat":"26.250000","reclong":"82.000000","year":"1872-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[151,-3]},"id":"7758","mass":"188","name":"Dyarrl Island","nametype":"Valid","recclass":"Mesosiderite-A1","reclat":"-3.000000","reclong":"151.000000","year":"1933-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"19",":@computed_region_nnqa_25f4":"462","fall":"Fell","geolocation":{"type":"Point","coordinates":[-96.47167,40.78167]},"id":"7760","mass":"10000","name":"Eagle","nametype":"Valid","recclass":"EL6","reclat":"40.781670","reclong":"-96.471670","year":"1947-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.83333,-17.3]},"id":"7774","mass":"2400","name":"Ehole","nametype":"Valid","recclass":"H5","reclat":"-17.300000","reclong":"15.833330","year":"1961-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.21667,48.9]},"id":"7775","mass":"3000","name":"Eichstädt","nametype":"Valid","recclass":"H5","reclat":"48.900000","reclong":"11.216670","year":"1785-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13,56.03333]},"id":"7776","mass":"3336","name":"Ekeby","nametype":"Valid","recclass":"H4","reclat":"56.033330","reclong":"13.000000","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.78333,28.26667]},"id":"7777","mass":"840","name":"Ekh Khera","nametype":"Valid","recclass":"H6","reclat":"28.266670","reclong":"78.783330","year":"1916-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.25,34.41667]},"id":"7807","mass":"10000","name":"El Idrissia","nametype":"Valid","recclass":"L6","reclat":"34.416670","reclong":"3.250000","year":"1989-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-97.37,25.37]},"id":"45977","mass":"17226","name":"El Paso de Aguila","nametype":"Valid","recclass":"H5","reclat":"25.370000","reclong":"-97.370000","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-103.05167,19.96722]},"id":"7819","mass":"5000","name":"El Tigre","nametype":"Valid","recclass":"L6","reclat":"19.967220","reclong":"-103.051670","year":"1993-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"9",":@computed_region_nnqa_25f4":"88","fall":"Fell","geolocation":{"type":"Point","coordinates":[-104.58817,39.24667]},"id":"7822","mass":"680.5","name":"Elbert","nametype":"Valid","recclass":"LL6","reclat":"39.246670","reclong":"-104.588170","year":"1998-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.73333,50.18333]},"id":"7823","mass":"107000","name":"Elbogen","nametype":"Valid","recclass":"Iron, IID","reclat":"50.183330","reclong":"12.733330","year":"1400-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.66667,47.83333]},"id":"7824","mass":"54640","name":"Elenovka","nametype":"Valid","recclass":"L5","reclat":"47.833330","reclong":"37.666670","year":"1951-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[4,51.75]},"id":"10019","mass":"1470","name":"Ellemeet","nametype":"Valid","recclass":"Diogenite","reclat":"51.750000","reclong":"4.000000","year":"1925-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[151.61667,-29.46667]},"id":"10033","mass":"127","name":"Emmaville","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"-29.466670","reclong":"151.616670","year":"1900-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[109.5,30.3]},"id":"10038","mass":"8000","name":"Enshi","nametype":"Valid","recclass":"H5","reclat":"30.300000","reclong":"109.500000","year":"1974-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7.35,47.86667]},"id":"10039","mass":"127000","name":"Ensisheim","nametype":"Valid","recclass":"LL6","reclat":"47.866670","reclong":"7.350000","year":"1492-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.46667,48.18333]},"id":"10041","mass":"277","name":"Épinal","nametype":"Valid","recclass":"H5","reclat":"48.183330","reclong":"6.466670","year":"1822-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[81.89167,19.03333]},"id":"10042","mass":"113","name":"Erakot","nametype":"Valid","recclass":"CM2","reclat":"19.033330","reclong":"81.891670","year":"1940-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[44.5,40.3]},"id":"10043","mass":"107.2","name":"Erevan","nametype":"Valid","recclass":"Howardite","reclat":"40.300000","reclong":"44.500000","year":"1911-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[44.16667,1.16667]},"id":"10044","mass":"20000","name":"Ergheo","nametype":"Valid","recclass":"L5","reclat":"1.166670","reclong":"44.166670","year":"1889-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.25,52.21667]},"id":"10049","mass":"2250","name":"Erxleben","nametype":"Valid","recclass":"H6","reclat":"52.216670","reclong":"11.250000","year":"1812-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.1,46.25]},"id":"10051","mass":"1500","name":"Esnandes","nametype":"Valid","recclass":"L6","reclat":"46.250000","reclong":"-1.100000","year":"1837-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.83333,2.88333]},"id":"10055","mass":"500","name":"Essebi","nametype":"Valid","recclass":"C2-ung","reclat":"2.883330","reclong":"30.833330","year":"1957-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"16",":@computed_region_nnqa_25f4":"277","fall":"Fell","geolocation":{"type":"Point","coordinates":[-94.83333,43.41667]},"id":"10059","mass":"320000","name":"Estherville","nametype":"Valid","recclass":"Mesosiderite-A3/4","reclat":"43.416670","reclong":"-94.833330","year":"1879-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"17",":@computed_region_nnqa_25f4":"1300","fall":"Fell","geolocation":{"type":"Point","coordinates":[-97.03333,39.75]},"id":"10074","mass":"89400","name":"Farmington","nametype":"Valid","recclass":"L5","reclat":"39.750000","reclong":"-97.033330","year":"1890-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"2439","fall":"Fell","geolocation":{"type":"Point","coordinates":[-77.53333,35.55]},"id":"10075","mass":"56000","name":"Farmville","nametype":"Valid","recclass":"H4","reclat":"35.550000","reclong":"-77.533330","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[2.81667,44.38333]},"id":"10078","mass":"1500","name":"Favars","nametype":"Valid","recclass":"H5","reclat":"44.383330","reclong":"2.816670","year":"1844-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"15",":@computed_region_nnqa_25f4":"70","fall":"Fell","geolocation":{"type":"Point","coordinates":[-94.16667,36.05]},"id":"10079","mass":"2360","name":"Fayetteville","nametype":"Valid","recclass":"H4","reclat":"36.050000","reclong":"-94.166670","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.45,36.88333]},"id":"10080","mass":"380","name":"Feid Chair","nametype":"Valid","recclass":"H4","reclat":"36.883330","reclong":"8.450000","year":"1875-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"29",":@computed_region_nnqa_25f4":"1631","fall":"Fell","geolocation":{"type":"Point","coordinates":[-87.16667,32.53333]},"id":"10081","mass":"3200","name":"Felix","nametype":"Valid","recclass":"CO3.3","reclat":"32.533330","reclong":"-87.166670","year":"1900-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[116.75,34.6]},"id":"10086","mass":"82","name":"Fenghsien-Ku","nametype":"Valid","recclass":"H5","reclat":"34.600000","reclong":"116.750000","year":"1924-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"2331","fall":"Fell","geolocation":{"type":"Point","coordinates":[-81.41667,36.1]},"id":"10088","mass":"220","name":"Ferguson","nametype":"Valid","recclass":"OC","reclat":"36.100000","reclong":"-81.416670","year":"1889-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.75333,43.18111]},"id":"10091","mass":"10200","name":"Fermo","nametype":"Valid","recclass":"H3-5","reclat":"43.181110","reclong":"13.753330","year":"1996-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"1",":@computed_region_nnqa_25f4":"385","fall":"Fell","geolocation":{"type":"Point","coordinates":[-96.85,47.81667]},"id":"10107","mass":"17600","name":"Fisher","nametype":"Valid","recclass":"L6","reclat":"47.816670","reclong":"-96.850000","year":"1894-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"807","fall":"Fell","geolocation":{"type":"Point","coordinates":[-97.76667,30.83333]},"id":"10111","mass":"3640","name":"Florence","nametype":"Valid","recclass":"H3","reclat":"30.833330","reclong":"-97.766670","year":"1922-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"16",":@computed_region_nnqa_25f4":"1785","fall":"Fell","geolocation":{"type":"Point","coordinates":[-93.66667,43.25]},"id":"10119","mass":"152000","name":"Forest City","nametype":"Valid","recclass":"H5","reclat":"43.250000","reclong":"-93.666670","year":"1890-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[146.85833,-33.35]},"id":"10120","mass":"26000","name":"Forest Vale","nametype":"Valid","recclass":"H4","reclat":"-33.350000","reclong":"146.858330","year":"1942-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"40",":@computed_region_nnqa_25f4":"2839","fall":"Fell","geolocation":{"type":"Point","coordinates":[-78.08333,36.78333]},"id":"10123","mass":"6067","name":"Forksville","nametype":"Valid","recclass":"L6","reclat":"36.783330","reclong":"-78.083330","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7.31667,50.95]},"id":"10163","mass":"240","name":"Forsbach","nametype":"Valid","recclass":"H6","reclat":"50.950000","reclong":"7.316670","year":"1900-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"31",":@computed_region_nnqa_25f4":"1470","fall":"Fell","geolocation":{"type":"Point","coordinates":[-83.96667,33.01667]},"id":"10164","mass":"16300","name":"Forsyth","nametype":"Valid","recclass":"L6","reclat":"33.016670","reclong":"-83.966670","year":"1829-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7,28.25]},"id":"10166","name":"Fort Flatters","nametype":"Valid","recclass":"Stone-uncl","reclat":"28.250000","reclong":"7.000000","year":"1944-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"29",":@computed_region_nnqa_25f4":"99","fall":"Fell","geolocation":{"type":"Point","coordinates":[-87.83333,34.48333]},"id":"10177","mass":"650","name":"Frankfort (stone)","nametype":"Valid","recclass":"Howardite","reclat":"34.483330","reclong":"-87.833330","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[113.56694,31.47556]},"id":"52412","mass":"23000","name":"Fuhe","nametype":"Valid","recclass":"L5","reclat":"31.475560","reclong":"113.566940","year":"1945-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[130.2,33.18333]},"id":"10836","mass":"11620","name":"Fukutomi","nametype":"Valid","recclass":"L5","reclat":"33.183330","reclong":"130.200000","year":"1882-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.33333,55.33333]},"id":"10838","name":"Fünen","nametype":"Valid","recclass":"Stone-uncl","reclat":"55.333330","reclong":"10.333330","year":"1654-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[80.81667,25.95]},"id":"10839","mass":"4000","name":"Futtehpur","nametype":"Valid","recclass":"L6","reclat":"25.950000","reclong":"80.816670","year":"1822-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.9,32.9]},"id":"10840","mass":"2500","name":"Fuyang","nametype":"Valid","recclass":"Stone-uncl","reclat":"32.900000","reclong":"115.900000","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.4,44.3]},"id":"10846","mass":"132.69999999999999","name":"Galapian","nametype":"Valid","recclass":"H6","reclat":"44.300000","reclong":"0.400000","year":"1826-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.43333,7.05]},"id":"10848","mass":"36.1","name":"Galim (a)","nametype":"Valid","recclass":"LL6","reclat":"7.050000","reclong":"12.433330","year":"1952-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.43333,7.05]},"id":"10849","mass":"28","name":"Galim (b)","nametype":"Valid","recclass":"EH3/4-an","reclat":"7.050000","reclong":"12.433330","year":"1952-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.78333,51.68333]},"id":"10850","mass":"5000","name":"Galkiv","nametype":"Valid","recclass":"H4","reclat":"51.683330","reclong":"30.783330","year":"1995-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[68.53333,27.35]},"id":"10851","mass":"6400","name":"Gambat","nametype":"Valid","recclass":"L6","reclat":"27.350000","reclong":"68.533330","year":"1897-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-2.18333,11.65]},"id":"10854","name":"Gao-Guenie","nametype":"Valid","recclass":"H5","reclat":"11.650000","reclong":"-2.183330","year":"1960-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[68.53333,27.88333]},"id":"10860","mass":"380","name":"Garhi Yasin","nametype":"Valid","recclass":"Iron, IIE","reclat":"27.883330","reclong":"68.533330","year":"1917-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"13",":@computed_region_nnqa_25f4":"2985","fall":"Fell","geolocation":{"type":"Point","coordinates":[-112.13333,41.68333]},"id":"10861","mass":"102","name":"Garland","nametype":"Valid","recclass":"Diogenite-pm","reclat":"41.683330","reclong":"-112.133330","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.03333,12.85]},"id":"44882","mass":"4162","name":"Gashua","nametype":"Valid","recclass":"L6","reclat":"12.850000","reclong":"11.033330","year":"1984-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-2.04167,14.15083]},"id":"10866","name":"Gasseltepaoua","nametype":"Valid","recclass":"H5","reclat":"14.150830","reclong":"-2.041670","year":"2000-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.91667,12.91667]},"id":"10870","mass":"725","name":"Geidam","nametype":"Valid","recclass":"H5","reclat":"12.916670","reclong":"11.916670","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[136.88333,35.53333]},"id":"10914","mass":"14290","name":"Gifu","nametype":"Valid","recclass":"L6","reclat":"35.533330","reclong":"136.883330","year":"1909-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.56667,37.31667]},"id":"10917","mass":"18000","name":"Girgenti","nametype":"Valid","recclass":"L6","reclat":"37.316670","reclong":"13.566670","year":"1853-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.91667,9.6]},"id":"10919","mass":"480","name":"Git-Git","nametype":"Valid","recclass":"L6","reclat":"9.600000","reclong":"9.916670","year":"1947-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.86667,52.2]},"id":"10923","mass":"670","name":"Glanerbrug","nametype":"Valid","recclass":"L/LL5","reclat":"52.200000","reclong":"6.866670","year":"1990-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[107.7,-7.25]},"id":"10924","mass":"1303","name":"Glanggang","nametype":"Valid","recclass":"H5-6","reclat":"-7.250000","reclong":"107.700000","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.61667,57.35]},"id":"10926","mass":"152000","name":"Glasatovo","nametype":"Valid","recclass":"H4","reclat":"57.350000","reclong":"37.616670","year":"1918-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.3,52.45972]},"id":"10930","mass":"767","name":"Glatton","nametype":"Valid","recclass":"L6","reclat":"52.459720","reclong":"-0.300000","year":"1991-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.76667,50.66667]},"id":"10936","mass":"1750","name":"Gnadenfrei","nametype":"Valid","recclass":"H5","reclat":"50.666670","reclong":"16.766670","year":"1879-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[89.05,24.23333]},"id":"10948","mass":"1600","name":"Gopalpur","nametype":"Valid","recclass":"H6","reclat":"24.233330","reclong":"89.050000","year":"1865-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[38.08333,48.28333]},"id":"10949","mass":"3618","name":"Gorlovka","nametype":"Valid","recclass":"H3.7","reclat":"48.283330","reclong":"38.083330","year":"1974-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[2.25,42.9]},"id":"10956","mass":"9000","name":"Granes","nametype":"Valid","recclass":"L6","reclat":"42.900000","reclong":"2.250000","year":"1964-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11,60.66667]},"id":"11196","mass":"45.5","name":"Grefsheim","nametype":"Valid","recclass":"L5","reclat":"60.666670","reclong":"11.000000","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-79.61667,43.2]},"id":"50911","mass":"215","name":"Grimsby","nametype":"Valid","recclass":"H5","reclat":"43.200000","reclong":"-79.616670","year":"2009-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[45.38333,43.66667]},"id":"11206","mass":"3500","name":"Grosnaja","nametype":"Valid","recclass":"CV3","reclat":"43.666670","reclong":"45.383330","year":"1861-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[18.71667,49.26667]},"id":"11207","mass":"10500","name":"Gross-Divina","nametype":"Valid","recclass":"H5","reclat":"49.266670","reclong":"18.716670","year":"1837-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.58333,46.35]},"id":"11208","mass":"8000","name":"Grossliebenthal","nametype":"Valid","recclass":"L6","reclat":"46.350000","reclong":"30.583330","year":"1881-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.5,51.93333]},"id":"11426","mass":"1000","name":"Grüneberg","nametype":"Valid","recclass":"H4","reclat":"51.933330","reclong":"15.500000","year":"1841-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.63333,52.86667]},"id":"11429","mass":"690","name":"Grzempach","nametype":"Valid","recclass":"H5","reclat":"52.866670","reclong":"16.633330","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-58.61667,-33]},"id":"11432","mass":"22000","name":"Gualeguaychú","nametype":"Valid","recclass":"H6","reclat":"-33.000000","reclong":"-58.616670","year":"1932-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[122.76389,39.80417]},"id":"11435","mass":"2910","name":"Guangmingshan","nametype":"Valid","recclass":"H5","reclat":"39.804170","reclong":"122.763890","year":"1996-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[105,24.1]},"id":"11436","name":"Guangnan","nametype":"Valid","recclass":"L6","reclat":"24.100000","reclong":"105.000000","year":"1983-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[118.4,37.1]},"id":"11437","mass":"1900","name":"Guangrao","nametype":"Valid","recclass":"L6","reclat":"37.100000","reclong":"118.400000","year":"1980-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6.01667,38.73333]},"id":"11439","mass":"39000","name":"Guareña","nametype":"Valid","recclass":"H6","reclat":"38.733330","reclong":"-6.016670","year":"1892-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[20.23333,43.76667]},"id":"11440","mass":"1915","name":"Guêa","nametype":"Valid","recclass":"Stone-uncl","reclat":"43.766670","reclong":"20.233330","year":"1891-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.68333,13.5]},"id":"11442","mass":"288","name":"Guibga","nametype":"Valid","recclass":"L5","reclat":"13.500000","reclong":"-0.683330","year":"1972-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.98333,9.91667]},"id":"11443","mass":"968","name":"Guidder","nametype":"Valid","recclass":"LL5","reclat":"9.916670","reclong":"13.983330","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.05,22.98333]},"id":"11448","mass":"2449","name":"Gujargaon","nametype":"Valid","recclass":"H5","reclat":"22.983330","reclong":"76.050000","year":"1982-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.65833,11.49167]},"id":"11449","mass":"100000","name":"Gujba","nametype":"Valid","recclass":"CBa","reclat":"11.491670","reclong":"11.658330","year":"1984-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[24.7,42.9]},"id":"11450","mass":"5700","name":"Gumoschnik","nametype":"Valid","recclass":"H5","reclat":"42.900000","reclong":"24.700000","year":"1904-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.56667,13.78333]},"id":"11464","mass":"28","name":"Gurram Konda","nametype":"Valid","recclass":"L6","reclat":"13.783330","reclong":"78.566670","year":"1814-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[42.41667,9.36667]},"id":"11465","mass":"34650","name":"Gursum","nametype":"Valid","recclass":"H4/5","reclat":"9.366670","reclong":"42.416670","year":"1981-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.38333,51.91667]},"id":"11466","mass":"1000","name":"Gütersloh","nametype":"Valid","recclass":"H3/4","reclat":"51.916670","reclong":"8.383330","year":"1851-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[127.5,35]},"id":"11467","mass":"1320","name":"Gyokukei","nametype":"Valid","recclass":"OC","reclat":"35.000000","reclong":"127.500000","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[139.33333,35.65]},"id":"11468","mass":"0.2","name":"Hachi-oji","nametype":"Valid","recclass":"H?","reclat":"35.650000","reclong":"139.333330","year":"1817-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.73333,50.31667]},"id":"11472","mass":"9000","name":"Hainaut","nametype":"Valid","recclass":"H3-6","reclat":"50.316670","reclong":"3.733330","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.23333,57.81667]},"id":"11479","mass":"1456","name":"Hallingeberg","nametype":"Valid","recclass":"L3.4","reclat":"57.816670","reclong":"16.233330","year":"1944-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"35",":@computed_region_nnqa_25f4":"1205","fall":"Fell","geolocation":{"type":"Point","coordinates":[-86.6,41.38333]},"id":"11485","mass":"3710","name":"Hamlet","nametype":"Valid","recclass":"LL4","reclat":"41.383330","reclong":"-86.600000","year":"1959-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.53333,26.8]},"id":"11824","mass":"1000","name":"Haraiya","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"26.800000","reclong":"82.533330","year":"1878-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.78333,28.38333]},"id":"11829","mass":"315","name":"Haripura","nametype":"Valid","recclass":"CM2","reclat":"28.383330","reclong":"75.783330","year":"1921-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"2025","fall":"Fell","geolocation":{"type":"Point","coordinates":[-94.51167,32.675]},"id":"11830","mass":"8360","name":"Harleton","nametype":"Valid","recclass":"L6","reclat":"32.675000","reclong":"-94.511670","year":"1961-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"35",":@computed_region_nnqa_25f4":"1855","fall":"Fell","geolocation":{"type":"Point","coordinates":[-86.16667,38.25]},"id":"11842","mass":"680","name":"Harrison County","nametype":"Valid","recclass":"L6","reclat":"38.250000","reclong":"-86.166670","year":"1859-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[136.70033,35.2945]},"id":"11848","mass":"1110.5999999999999","name":"Hashima","nametype":"Valid","recclass":"H4","reclat":"35.294500","reclong":"136.700330","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.81667,28.95]},"id":"11852","mass":"1250","name":"Hassi-Jekna","nametype":"Valid","recclass":"Iron, IAB-sHL","reclat":"28.950000","reclong":"0.816670","year":"1890-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.51667,51.65]},"id":"11855","mass":"29000","name":"Hatford","nametype":"Valid","recclass":"Stone-uncl","reclat":"51.650000","reclong":"-1.516670","year":"1628-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.06194,60.24556]},"id":"11859","mass":"1544","name":"Haverö","nametype":"Valid","recclass":"Ureilite","reclat":"60.245560","reclong":"22.061940","year":"1971-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.78333,55.46667]},"id":"11869","mass":"3500","name":"Hedeskoga","nametype":"Valid","recclass":"H5","reclat":"55.466670","reclong":"13.783330","year":"1922-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.66667,27.33333]},"id":"11870","mass":"6100","name":"Hedjaz","nametype":"Valid","recclass":"L3.7-6","reclat":"27.333330","reclong":"35.666670","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-84.1,10]},"id":"11875","mass":"1000","name":"Heredia","nametype":"Valid","recclass":"H5","reclat":"10.000000","reclong":"-84.100000","year":"1857-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[17.66667,59.85]},"id":"11878","mass":"20000","name":"Hessle","nametype":"Valid","recclass":"H5","reclat":"59.850000","reclong":"17.666670","year":"1869-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[130.43333,33.6]},"id":"11883","mass":"750","name":"Higashi-koen","nametype":"Valid","recclass":"H5","reclat":"33.600000","reclong":"130.433330","year":"1897-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-4.23333,55.9]},"id":"11884","mass":"4500","name":"High Possil","nametype":"Valid","recclass":"L6","reclat":"55.900000","reclong":"-4.233330","year":"1804-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[132.38333,34.45]},"id":"11889","mass":"414","name":"Hiroshima","nametype":"Valid","recclass":"H5","reclat":"34.450000","reclong":"132.383330","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.47278,1.345]},"id":"44714","mass":"167.7","name":"Hoima","nametype":"Valid","recclass":"H6","reclat":"1.345000","reclong":"31.472780","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.2,64.43333]},"id":"11893","mass":"305.5","name":"Hökmark","nametype":"Valid","recclass":"L4","reclat":"64.433330","reclong":"21.200000","year":"1954-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"7",":@computed_region_nnqa_25f4":"990","fall":"Fell","geolocation":{"type":"Point","coordinates":[-110.18333,34.9]},"id":"11894","mass":"220000","name":"Holbrook","nametype":"Valid","recclass":"L/LL6","reclat":"34.900000","reclong":"-110.183330","year":"1912-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[38.41667,9.06667]},"id":"11895","mass":"1415","name":"Holetta","nametype":"Valid","recclass":"Stone-uncl","reclat":"9.066670","reclong":"38.416670","year":"1923-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"16",":@computed_region_nnqa_25f4":"284","fall":"Fell","geolocation":{"type":"Point","coordinates":[-91.86667,41.8]},"id":"11901","mass":"230000","name":"Homestead","nametype":"Valid","recclass":"L5","reclat":"41.800000","reclong":"-91.866670","year":"1875-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"4",":@computed_region_nnqa_25f4":"1657","fall":"Fell","geolocation":{"type":"Point","coordinates":[-157.86667,21.3]},"id":"11904","mass":"2420","name":"Honolulu","nametype":"Valid","recclass":"L5","reclat":"21.300000","reclong":"-157.866670","year":"1825-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.5,35.66667]},"id":"11913","mass":"180","name":"Hotse","nametype":"Valid","recclass":"L6","reclat":"35.666670","reclong":"115.500000","year":"1956-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"17",":@computed_region_nnqa_25f4":"1293","fall":"Fell","geolocation":{"type":"Point","coordinates":[-100.45,39.35]},"id":"11915","mass":"266.10000000000002","name":"Hoxie","nametype":"Valid","recclass":"OC","reclat":"39.350000","reclong":"-100.450000","year":"1963-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.33333,46.1]},"id":"11916","mass":"49000","name":"Hraschina","nametype":"Valid","recclass":"Iron, IID","reclat":"46.100000","reclong":"16.333330","year":"1751-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[106.63241,26.46469]},"id":"54719","mass":"1600","name":"Huaxi","nametype":"Valid","recclass":"H5","reclat":"26.464690","reclong":"106.632410","year":"2010-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.91667,50.3]},"id":"11986","mass":"112","name":"Hungen","nametype":"Valid","recclass":"H6","reclat":"50.300000","reclong":"8.916670","year":"1877-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.68333,61.18333]},"id":"11989","mass":"14000","name":"Hvittis","nametype":"Valid","recclass":"EL6","reclat":"61.183330","reclong":"22.683330","year":"1901-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7.7,52.28333]},"id":"11992","mass":"2000","name":"Ibbenbüren","nametype":"Valid","recclass":"Diogenite","reclat":"52.283330","reclong":"7.700000","year":"1870-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-45,-20]},"id":"11993","mass":"2500","name":"Ibitira","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"-20.000000","reclong":"-45.000000","year":"1957-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35,38]},"id":"11994","name":"Ibrisim","nametype":"Valid","recclass":"OC","reclat":"38.000000","reclong":"35.000000","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.93333,58.2]},"id":"11995","mass":"3973","name":"Ichkala","nametype":"Valid","recclass":"H6","reclat":"58.200000","reclong":"82.933330","year":"1936-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[28.33333,-32.1]},"id":"12000","mass":"3457","name":"Idutywa","nametype":"Valid","recclass":"H5","reclat":"-32.100000","reclong":"28.333330","year":"1956-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-51.83333,-23.2]},"id":"12003","mass":"1200","name":"Iguaracu","nametype":"Valid","recclass":"H5","reclat":"-23.200000","reclong":"-51.833330","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[145.36667,-6.03333]},"id":"12004","mass":"7330","name":"Ijopega","nametype":"Valid","recclass":"H6","reclat":"-6.033330","reclong":"145.366670","year":"1975-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[46.66667,39.75]},"id":"12027","mass":"27000","name":"Indarch","nametype":"Valid","recclass":"EH4","reclat":"39.750000","reclong":"46.666670","year":"1891-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"18",":@computed_region_nnqa_25f4":"525","fall":"Fell","geolocation":{"type":"Point","coordinates":[-94.4,39.08333]},"id":"12028","mass":"880","name":"Independence","nametype":"Valid","recclass":"L6","reclat":"39.083330","reclong":"-94.400000","year":"1917-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[112,41]},"id":"12037","mass":"3000","name":"Inner Mongolia","nametype":"Valid","recclass":"L6","reclat":"41.000000","reclong":"112.000000","year":"1963-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-111.3375,53.415]},"id":"12039","mass":"4576","name":"Innisfree","nametype":"Valid","recclass":"L5","reclat":"53.415000","reclong":"-111.337500","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-54.5,-25.5]},"id":"12043","mass":"7000","name":"Ipiranga","nametype":"Valid","recclass":"H6","reclat":"-25.500000","reclong":"-54.500000","year":"1972-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.8,-8.93333]},"id":"12049","mass":"1300","name":"Ishinga","nametype":"Valid","recclass":"H","reclat":"-8.933330","reclong":"33.800000","year":"1954-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-57.95,-31.18333]},"id":"12053","mass":"3050","name":"Isthilart","nametype":"Valid","recclass":"H5","reclat":"-31.183330","reclong":"-57.950000","year":"1928-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-44.33333,-3.4]},"id":"12056","mass":"2024","name":"Itapicuru-Mirim","nametype":"Valid","recclass":"H5","reclat":"-3.400000","reclong":"-44.333330","year":"1879-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-12.95217,26.59083]},"id":"12058","mass":"4720","name":"Itqiy","nametype":"Valid","recclass":"EH7-an","reclat":"26.590830","reclong":"-12.952170","year":"1990-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[32.43333,-8.41667]},"id":"12063","mass":"704.5","name":"Ivuna","nametype":"Valid","recclass":"CI1","reclat":"-8.416670","reclong":"32.433330","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.9,-32.5]},"id":"12065","mass":"48000","name":"Jackalsfontein","nametype":"Valid","recclass":"L6","reclat":"-32.500000","reclong":"21.900000","year":"1903-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[68.41667,26.75]},"id":"12067","mass":"973","name":"Jajh deh Kot Lalu","nametype":"Valid","recclass":"EL6","reclat":"26.750000","reclong":"68.416670","year":"1926-01-01T00:00:00.000"} -,{"fall":"Fell","id":"12068","mass":"700","name":"Jalanash","nametype":"Valid","recclass":"Ureilite","year":"1990-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75,31]},"id":"12069","mass":"1967","name":"Jalandhar","nametype":"Valid","recclass":"Iron","reclat":"31.000000","reclong":"75.000000","year":"1621-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.33333,18.75]},"id":"12072","mass":"22","name":"Jamkheir","nametype":"Valid","recclass":"H6","reclat":"18.750000","reclong":"75.333330","year":"1866-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[105.8,39.7]},"id":"12074","mass":"20500","name":"Jartai","nametype":"Valid","recclass":"L6","reclat":"39.700000","reclong":"105.800000","year":"1979-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[20.44167,43.83333]},"id":"12078","mass":"34000","name":"Jelica","nametype":"Valid","recclass":"LL6","reclat":"43.833330","reclong":"20.441670","year":"1889-01-01T00:00:00.000"} -,{"fall":"Fell","id":"12079","mass":"450","name":"Jemlapur","nametype":"Valid","recclass":"L6","year":"1901-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.05217,46.42137]},"id":"51589","mass":"3667","name":"Jesenice","nametype":"Valid","recclass":"L6","reclat":"46.421370","reclong":"14.052170","year":"2009-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[72.38333,31.3]},"id":"12085","mass":"5900","name":"Jhung","nametype":"Valid","recclass":"L5","reclat":"31.300000","reclong":"72.383330","year":"1873-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[104.91667,31.91667]},"id":"12086","mass":"222","name":"Jiange","nametype":"Valid","recclass":"H5","reclat":"31.916670","reclong":"104.916670","year":"1964-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[109.5,30.80833]},"id":"12087","mass":"600000","name":"Jianshi","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"30.808330","reclong":"109.500000","year":"1890-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[126.16667,44.05]},"id":"12171","mass":"4000000","name":"Jilin","nametype":"Valid","recclass":"H5","reclat":"44.050000","reclong":"126.166670","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[70.31333,22.68]},"id":"47362","mass":"100","name":"Jodiya","nametype":"Valid","recclass":"L5","reclat":"22.680000","reclong":"70.313330","year":"2006-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[24.4,55.7]},"id":"12173","mass":"30","name":"Jodzie","nametype":"Valid","recclass":"Howardite","reclat":"55.700000","reclong":"24.400000","year":"1877-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"9",":@computed_region_nnqa_25f4":"1072","fall":"Fell","geolocation":{"type":"Point","coordinates":[-104.9,40.35]},"id":"12198","mass":"40300","name":"Johnstown","nametype":"Valid","recclass":"Diogenite","reclat":"40.350000","reclong":"-104.900000","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.83333,-11.85]},"id":"12199","mass":"483","name":"Jolomba","nametype":"Valid","recclass":"LL6","reclat":"-11.850000","reclong":"15.833330","year":"1974-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.45,45.43333]},"id":"12202","mass":"5000","name":"Jonzac","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"45.433330","reclong":"-0.450000","year":"1819-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.41667,35.5]},"id":"12203","mass":"100000","name":"Juancheng","nametype":"Valid","recclass":"H5","reclat":"35.500000","reclong":"115.416670","year":"1997-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.8,12.85]},"id":"12207","mass":"680","name":"Judesegeri","nametype":"Valid","recclass":"H6","reclat":"12.850000","reclong":"76.800000","year":"1876-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.2,-7.71667]},"id":"12209","mass":"32490","name":"Jumapalo","nametype":"Valid","recclass":"L6","reclat":"-7.716670","reclong":"111.200000","year":"1984-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[118.8,35.2]},"id":"12210","mass":"950","name":"Junan","nametype":"Valid","recclass":"L6","reclat":"35.200000","reclong":"118.800000","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7.27,38.74028]},"id":"12213","mass":"25250","name":"Juromenha","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"38.740280","reclong":"-7.270000","year":"1968-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[4.3,44.71667]},"id":"12214","mass":"91000","name":"Juvinas","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"44.716670","reclong":"4.300000","year":"1821-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.3,47.35]},"id":"12218","mass":"3000","name":"Kaba","nametype":"Valid","recclass":"CV3","reclat":"47.350000","reclong":"21.300000","year":"1857-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.21667,11.85]},"id":"12220","mass":"13400","name":"Kabo","nametype":"Valid","recclass":"H4","reclat":"11.850000","reclong":"8.216670","year":"1971-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.33333,27.08333]},"id":"12221","mass":"89","name":"Kadonah","nametype":"Valid","recclass":"H6","reclat":"27.083330","reclong":"78.333330","year":"1822-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[79.96667,27.25]},"id":"12222","mass":"230","name":"Kaee","nametype":"Valid","recclass":"H5","reclat":"27.250000","reclong":"79.966670","year":"1838-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.83333,49.86667]},"id":"12227","mass":"1900","name":"Kagarlyk","nametype":"Valid","recclass":"L6","reclat":"49.866670","reclong":"30.833330","year":"1908-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[48.3,15]},"id":"12228","mass":"2000","name":"Kaidun","nametype":"Valid","recclass":"CR2","reclat":"15.000000","reclong":"48.300000","year":"1980-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[53.25,55.43333]},"id":"12229","mass":"200000","name":"Kainsaz","nametype":"Valid","recclass":"CO3.2","reclat":"55.433330","reclong":"53.250000","year":"1937-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.51667,12.38333]},"id":"12230","mass":"350","name":"Kakangari","nametype":"Valid","recclass":"K3","reclat":"12.383330","reclong":"78.516670","year":"1890-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.66667,45.13333]},"id":"12231","mass":"577","name":"Kakowa","nametype":"Valid","recclass":"L6","reclat":"45.133330","reclong":"21.666670","year":"1858-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29.5,-6.83333]},"id":"12232","mass":"950","name":"Kalaba","nametype":"Valid","recclass":"H4","reclat":"-6.833330","reclong":"29.500000","year":"1951-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[73.98333,17.83333]},"id":"12236","mass":"4500","name":"Kalumbi","nametype":"Valid","recclass":"L6","reclat":"17.833330","reclong":"73.983330","year":"1879-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[81.46667,26.03333]},"id":"12238","mass":"2770","name":"Kamalpur","nametype":"Valid","recclass":"L6","reclat":"26.033330","reclong":"81.466670","year":"1942-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[139.95667,36.04167]},"id":"12240","mass":"448","name":"Kamiomi","nametype":"Valid","recclass":"H5","reclat":"36.041670","reclong":"139.956670","year":"1913-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.8,14.18333]},"id":"12241","mass":"1293","name":"Kamsagar","nametype":"Valid","recclass":"L6","reclat":"14.183330","reclong":"75.800000","year":"1902-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[65.78333,31.6]},"id":"12243","mass":"299","name":"Kandahar (Afghanistan)","nametype":"Valid","recclass":"L6","reclat":"31.600000","reclong":"65.783330","year":"1959-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.5,-7]},"id":"12245","mass":"1630","name":"Kangean","nametype":"Valid","recclass":"H5","reclat":"-7.000000","reclong":"115.500000","year":"1908-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.3,32.08333]},"id":"12246","mass":"400","name":"Kangra Valley","nametype":"Valid","recclass":"H5","reclat":"32.083330","reclong":"76.300000","year":"1897-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.63333,4.7]},"id":"12251","mass":"11355","name":"Kapoeta","nametype":"Valid","recclass":"Howardite","reclat":"4.700000","reclong":"33.633330","year":"1942-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[73.22329,20.33916]},"id":"47357","mass":"1600","name":"Kaprada","nametype":"Valid","recclass":"L5/6","reclat":"20.339160","reclong":"73.223290","year":"2004-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[73.36667,42.45]},"id":"12253","mass":"3500","name":"Kaptal-Aryk","nametype":"Valid","recclass":"L6","reclat":"42.450000","reclong":"73.366670","year":"1937-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[81.01667,47.21667]},"id":"12256","mass":"3000","name":"Karakol","nametype":"Valid","recclass":"LL6","reclat":"47.216670","reclong":"81.016670","year":"1840-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.58333,-3.5]},"id":"12258","mass":"2220","name":"Karatu","nametype":"Valid","recclass":"LL6","reclat":"-3.500000","reclong":"35.583330","year":"1963-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7.15,12.9]},"id":"12260","mass":"180","name":"Karewar","nametype":"Valid","recclass":"L6","reclat":"12.900000","reclong":"7.150000","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[67.16667,27.8]},"id":"12262","mass":"22000","name":"Karkh","nametype":"Valid","recclass":"L6","reclat":"27.800000","reclong":"67.166670","year":"1905-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[71.6,31.58333]},"id":"12263","mass":"2950","name":"Karloowala","nametype":"Valid","recclass":"L6","reclat":"31.583330","reclong":"71.600000","year":"1955-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[139.91667,-35.08333]},"id":"12264","mass":"41730","name":"Karoonda","nametype":"Valid","recclass":"CK4","reclat":"-35.083330","reclong":"139.916670","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[136.76667,35.36667]},"id":"12266","mass":"710","name":"Kasamatsu","nametype":"Valid","recclass":"H","reclat":"35.366670","reclong":"136.766670","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.58333,29.58333]},"id":"30740","mass":"16820","name":"Kasauli","nametype":"Valid","recclass":"H4","reclat":"29.583330","reclong":"77.583330","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.08333,11.33333]},"id":"35465","mass":"1500","name":"Katagum","nametype":"Valid","recclass":"L6","reclat":"11.333330","reclong":"10.083330","year":"1999-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.81333,25.14333]},"id":"47351","mass":"6800","name":"Kavarpura","nametype":"Valid","recclass":"Iron, IIE-an","reclat":"25.143330","reclong":"75.813330","year":"2006-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.78,39.26333]},"id":"12268","mass":"85000","name":"Kayakent","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"39.263330","reclong":"31.780000","year":"1961-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[112.01667,-7.75]},"id":"12270","mass":"3300","name":"Kediri","nametype":"Valid","recclass":"L4","reclat":"-7.750000","reclong":"112.016670","year":"1940-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29.41822,36.54194]},"id":"53654","mass":"5760","name":"Kemer","nametype":"Valid","recclass":"L4","reclat":"36.541940","reclong":"29.418220","year":"2008-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"3190","fall":"Fell","geolocation":{"type":"Point","coordinates":[-96,29.45]},"id":"12275","mass":"6937","name":"Kendleton","nametype":"Valid","recclass":"L4","reclat":"29.450000","reclong":"-96.000000","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[86.70278,20.4625]},"id":"12276","mass":"6669.2","name":"Kendrapara","nametype":"Valid","recclass":"H4-5","reclat":"20.462500","reclong":"86.702780","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.3,48.4]},"id":"12282","mass":"5000","name":"Kerilis","nametype":"Valid","recclass":"H5","reclat":"48.400000","reclong":"-3.300000","year":"1874-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.08333,48.11667]},"id":"12284","mass":"80000","name":"Kernouve","nametype":"Valid","recclass":"H6","reclat":"48.116670","reclong":"-3.083330","year":"1869-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[141.61667,38.98333]},"id":"12286","mass":"135000","name":"Kesen","nametype":"Valid","recclass":"H4","reclat":"38.983330","reclong":"141.616670","year":"1850-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[72.3,29.53333]},"id":"12288","mass":"13600","name":"Khairpur","nametype":"Valid","recclass":"EL6","reclat":"29.533330","reclong":"72.300000","year":"1873-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[83.11667,25.55]},"id":"12289","mass":"3698","name":"Khanpur","nametype":"Valid","recclass":"LL5","reclat":"25.550000","reclong":"83.116670","year":"1932-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.075,50.625]},"id":"12291","mass":"1500","name":"Kharkov","nametype":"Valid","recclass":"L6","reclat":"50.625000","reclong":"35.075000","year":"1787-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.88333,26.95]},"id":"12294","mass":"450","name":"Kheragur","nametype":"Valid","recclass":"L6","reclat":"26.950000","reclong":"77.883330","year":"1860-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.81667,28.01667]},"id":"12296","mass":"100","name":"Khetri","nametype":"Valid","recclass":"H6","reclat":"28.016670","reclong":"75.816670","year":"1867-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.33333,56.75]},"id":"12297","mass":"6109","name":"Khmelevka","nametype":"Valid","recclass":"L5","reclat":"56.750000","reclong":"75.333330","year":"1929-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[81.53333,25.1]},"id":"12298","mass":"9700","name":"Khohar","nametype":"Valid","recclass":"L3.6","reclat":"25.100000","reclong":"81.533330","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[36,16]},"id":"12299","mass":"3200","name":"Khor Temiki","nametype":"Valid","recclass":"Aubrite","reclat":"16.000000","reclong":"36.000000","year":"1932-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[28,14]},"id":"12300","mass":"100000","name":"Kidairat","nametype":"Valid","recclass":"H6","reclat":"14.000000","reclong":"28.000000","year":"1983-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.15,54.4]},"id":"12301","mass":"737.6","name":"Kiel","nametype":"Valid","recclass":"L6","reclat":"54.400000","reclong":"10.150000","year":"1962-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-11.33333,16.58333]},"id":"12303","mass":"1500","name":"Kiffa","nametype":"Valid","recclass":"H5","reclat":"16.583330","reclong":"-11.333330","year":"1970-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[138.38333,36.85]},"id":"12305","mass":"331","name":"Kijima (1906)","nametype":"Valid","recclass":"Stone-uncl","reclat":"36.850000","reclong":"138.383330","year":"1906-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[34,55]},"id":"12306","mass":"195","name":"Kikino","nametype":"Valid","recclass":"H6","reclat":"55.000000","reclong":"34.000000","year":"1809-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.8,12.76667]},"id":"12307","mass":"19000","name":"Kilabo","nametype":"Valid","recclass":"LL6","reclat":"12.766670","reclong":"9.800000","year":"2002-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"41",":@computed_region_nnqa_25f4":"2971","fall":"Fell","geolocation":{"type":"Point","coordinates":[-89.6,43.58333]},"id":"12308","mass":"772","name":"Kilbourn","nametype":"Valid","recclass":"H5","reclat":"43.583330","reclong":"-89.600000","year":"1911-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7.66667,54.66667]},"id":"12309","mass":"140","name":"Killeter","nametype":"Valid","recclass":"H6","reclat":"54.666670","reclong":"-7.666670","year":"1844-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[24.68333,11.63333]},"id":"12316","mass":"67.400000000000006","name":"Kingai","nametype":"Valid","recclass":"H6","reclat":"11.633330","reclong":"24.683330","year":"1967-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"2018","fall":"Fell","geolocation":{"type":"Point","coordinates":[-95.95,30.75]},"id":"12321","mass":"97.7","name":"Kirbyville","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"30.750000","reclong":"-95.950000","year":"1906-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.30833,48.16667]},"id":"12325","mass":"1550","name":"Kisvarsány","nametype":"Valid","recclass":"L6","reclat":"48.166670","reclong":"22.308330","year":"1914-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-80.38333,43.38333]},"id":"12326","mass":"202.6","name":"Kitchener","nametype":"Valid","recclass":"L6","reclat":"43.383330","reclong":"-80.383330","year":"1998-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.8,51.6]},"id":"12332","mass":"3250","name":"Klein-Wenden","nametype":"Valid","recclass":"H6","reclat":"51.600000","reclong":"10.800000","year":"1843-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.4,48.9]},"id":"12335","mass":"500000","name":"Knyahinya","nametype":"Valid","recclass":"L/LL5","reclat":"48.900000","reclong":"22.400000","year":"1866-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[135.16667,34.73333]},"id":"12336","mass":"136","name":"Kobe","nametype":"Valid","recclass":"CK4","reclat":"34.733330","reclong":"135.166670","year":"1999-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[133.95,34.3]},"id":"12342","mass":"11510","name":"Kokubunji","nametype":"Valid","recclass":"L6","reclat":"34.300000","reclong":"133.950000","year":"1986-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[139.75,35.73333]},"id":"12343","mass":"238","name":"Komagome","nametype":"Valid","recclass":"Iron","reclat":"35.733330","reclong":"139.750000","year":"1926-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.16667,42.51667]},"id":"12344","mass":"90","name":"Konovo","nametype":"Valid","recclass":"LL5","reclat":"42.516670","reclong":"26.166670","year":"1931-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.17633,48.76367]},"id":"53810","mass":"4300","name":"Košice","nametype":"Valid","recclass":"H5","reclat":"48.763670","reclong":"21.176330","year":"2010-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7.46472,49.32694]},"id":"12353","mass":"16500","name":"Krähenberg","nametype":"Valid","recclass":"LL5","reclat":"49.326940","reclong":"7.464720","year":"1869-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[40.9,54.03333]},"id":"12355","mass":"2440","name":"Krasnoi-Ugol","nametype":"Valid","recclass":"L6","reclat":"54.033330","reclong":"40.900000","year":"1829-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[56.08333,54.33333]},"id":"12357","mass":"4000","name":"Krasnyi Klyuch","nametype":"Valid","recclass":"H5","reclat":"54.333330","reclong":"56.083330","year":"1946-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77,56.8]},"id":"12363","mass":"845.2","name":"Krutikha","nametype":"Valid","recclass":"OC","reclat":"56.800000","reclong":"77.000000","year":"1906-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.76667,47.83333]},"id":"12364","mass":"50000","name":"Krymka","nametype":"Valid","recclass":"LL3.2","reclat":"47.833330","reclong":"30.766670","year":"1946-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.7,51.15]},"id":"12368","mass":"2250","name":"Kukschin","nametype":"Valid","recclass":"L6","reclat":"51.150000","reclong":"31.700000","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[66.80222,30.73111]},"id":"12369","mass":"453.6","name":"Kulak","nametype":"Valid","recclass":"L5","reclat":"30.731110","reclong":"66.802220","year":"1961-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.5,50.75]},"id":"12370","mass":"6000","name":"Kuleschovka","nametype":"Valid","recclass":"L6","reclat":"50.750000","reclong":"33.500000","year":"1811-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[45,41.11667]},"id":"12373","mass":"3719","name":"Kulp","nametype":"Valid","recclass":"H6","reclat":"41.116670","reclong":"45.000000","year":"1906-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[61.36667,55.78333]},"id":"12377","mass":"200000","name":"Kunashak","nametype":"Valid","recclass":"L6","reclat":"55.783330","reclong":"61.366670","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[59.2,42.25]},"id":"12379","mass":"1100000","name":"Kunya-Urgench","nametype":"Valid","recclass":"H5","reclat":"42.250000","reclong":"59.200000","year":"1998-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[138.38333,37.05]},"id":"12381","mass":"4460","name":"Kushiike","nametype":"Valid","recclass":"OC","reclat":"37.050000","reclong":"138.383330","year":"1920-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.38333,29.68333]},"id":"12382","mass":"5","name":"Kusiali","nametype":"Valid","recclass":"L6","reclat":"29.683330","reclong":"78.383330","year":"1860-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[39.3,44.51667]},"id":"12383","mass":"23","name":"Kutais","nametype":"Valid","recclass":"H5","reclat":"44.516670","reclong":"39.300000","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.03333,10.83333]},"id":"12384","mass":"45000","name":"Kuttippuram","nametype":"Valid","recclass":"L6","reclat":"10.833330","reclong":"76.033330","year":"1914-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.33333,55.2]},"id":"12385","mass":"4047","name":"Kuznetzovo","nametype":"Valid","recclass":"L6","reclat":"55.200000","reclong":"75.333330","year":"1932-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[130.63333,32.03333]},"id":"12390","mass":"45000","name":"Kyushu","nametype":"Valid","recclass":"L6","reclat":"32.033330","reclong":"130.633330","year":"1886-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.75,47.08333]},"id":"12392","mass":"2800","name":"La Bécasse","nametype":"Valid","recclass":"L6","reclat":"47.083330","reclong":"1.750000","year":"1879-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-101.28333,20.66667]},"id":"12394","mass":"399","name":"La Charca","nametype":"Valid","recclass":"OC","reclat":"20.666670","reclong":"-101.283330","year":"1878-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-61.53333,-37.33333]},"id":"12395","mass":"2000","name":"La Colina","nametype":"Valid","recclass":"H5","reclat":"-37.333330","reclong":"-61.533330","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-58.16667,-31.23333]},"id":"12396","mass":"45000","name":"La Criolla","nametype":"Valid","recclass":"L6","reclat":"-31.233330","reclong":"-58.166670","year":"1985-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.58333,44.28333]},"id":"12408","mass":"3833","name":"Laborel","nametype":"Valid","recclass":"H5","reclat":"44.283330","reclong":"5.583330","year":"1871-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.71667,26.78333]},"id":"12433","mass":"900","name":"Lahrauli","nametype":"Valid","recclass":"Ureilite","reclat":"26.783330","reclong":"82.716670","year":"1955-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.63333,48.76667]},"id":"12434","mass":"37000","name":"L'Aigle","nametype":"Valid","recclass":"L6","reclat":"48.766670","reclong":"0.633330","year":"1803-01-01T00:00:00.000"} -,{"fall":"Found","id":"32531","mass":"9.6","name":"Cumulus Hills 04075","nametype":"Valid","recclass":"Pallasite","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.03333,21.86667]},"id":"12435","mass":"212.5","name":"Lakangaon","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"21.866670","reclong":"76.033330","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.56667,24.45]},"id":"12451","mass":"372","name":"Lalitpur","nametype":"Valid","recclass":"L6","reclat":"24.450000","reclong":"78.566670","year":"1887-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.06667,47.7]},"id":"12455","mass":"51700","name":"Lancé","nametype":"Valid","recclass":"CO3.5","reclat":"47.700000","reclong":"1.066670","year":"1872-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.11667,43.75]},"id":"12456","mass":"7000","name":"Lancon","nametype":"Valid","recclass":"H6","reclat":"43.750000","reclong":"5.116670","year":"1897-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.73333,58.85]},"id":"12461","mass":"2300","name":"Långhalsen","nametype":"Valid","recclass":"L6","reclat":"58.850000","reclong":"16.733330","year":"1947-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[126.19611,46.24167]},"id":"12464","mass":"1282","name":"Lanxi","nametype":"Valid","recclass":"L6","reclat":"46.241670","reclong":"126.196110","year":"1986-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.23333,47.75]},"id":"12465","mass":"7000","name":"Lanzenkirchen","nametype":"Valid","recclass":"L4","reclat":"47.750000","reclong":"16.233330","year":"1925-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.16667,33.13333]},"id":"12466","mass":"14250","name":"Laochenzhen","nametype":"Valid","recclass":"H5","reclat":"33.133330","reclong":"115.166670","year":"1987-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.11667,51.9]},"id":"12740","mass":"1060","name":"Launton","nametype":"Valid","recclass":"L6","reclat":"51.900000","reclong":"-1.116670","year":"1830-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[51.56667,52.45]},"id":"12743","mass":"800","name":"Lavrentievka","nametype":"Valid","recclass":"L6","reclat":"52.450000","reclong":"51.566670","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.43333,47.16667]},"id":"12748","mass":"3000","name":"Le Pressoir","nametype":"Valid","recclass":"H5","reclat":"47.166670","reclong":"0.433330","year":"1845-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.86667,48.53333]},"id":"12749","mass":"780","name":"Le Teilleul","nametype":"Valid","recclass":"Howardite","reclat":"48.533330","reclong":"-0.866670","year":"1845-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"20",":@computed_region_nnqa_25f4":"608","fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.33333,35.88333]},"id":"12755","mass":"51500","name":"Leedey","nametype":"Valid","recclass":"L6","reclat":"35.883330","reclong":"-99.333330","year":"1943-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[28.36667,-25.66667]},"id":"12756","mass":"460","name":"Leeuwfontein","nametype":"Valid","recclass":"L6","reclat":"-25.666670","reclong":"28.366670","year":"1912-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6.96667,52.66667]},"id":"12759","mass":"271.39999999999998","name":"Leighlinbridge","nametype":"Valid","recclass":"L6","reclat":"52.666670","reclong":"-6.966670","year":"1999-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"29",":@computed_region_nnqa_25f4":"1585","fall":"Fell","geolocation":{"type":"Point","coordinates":[-87.5,34.58333]},"id":"12760","mass":"877","name":"Leighton","nametype":"Valid","recclass":"H5","reclat":"34.583330","reclong":"-87.500000","year":"1907-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[32.85,52.26667]},"id":"12765","mass":"700","name":"Leonovka","nametype":"Valid","recclass":"L6","reclat":"52.266670","reclong":"32.850000","year":"1900-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.25,48.35]},"id":"12769","mass":"125","name":"Les Ormes","nametype":"Valid","recclass":"L6","reclat":"48.350000","reclong":"3.250000","year":"1857-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[4.73333,50.36667]},"id":"12772","mass":"2000","name":"Lesves","nametype":"Valid","recclass":"L6","reclat":"50.366670","reclong":"4.733330","year":"1896-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.18333,-26.15]},"id":"14646","mass":"4000","name":"Lichtenberg","nametype":"Valid","recclass":"H6","reclat":"-26.150000","reclong":"26.183330","year":"1973-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.86667,56.65]},"id":"14650","mass":"6862","name":"Lillaverke","nametype":"Valid","recclass":"H5","reclat":"56.650000","reclong":"15.866670","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-8.78333,52.56667]},"id":"14652","mass":"50000","name":"Limerick","nametype":"Valid","recclass":"H5","reclat":"52.566670","reclong":"-8.783330","year":"1813-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.9,52.75]},"id":"14655","mass":"1862","name":"Linum","nametype":"Valid","recclass":"L6","reclat":"52.750000","reclong":"12.900000","year":"1854-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[118.98333,31.63333]},"id":"14659","mass":"498","name":"Lishui","nametype":"Valid","recclass":"L5","reclat":"31.633330","reclong":"118.983330","year":"1978-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.85,50.2]},"id":"14661","mass":"12800","name":"Lissa","nametype":"Valid","recclass":"L6","reclat":"50.200000","reclong":"14.850000","year":"1808-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"18",":@computed_region_nnqa_25f4":"2171","fall":"Fell","geolocation":{"type":"Point","coordinates":[-92.08333,37.91667]},"id":"14664","mass":"491","name":"Little Piney","nametype":"Valid","recclass":"L5","reclat":"37.916670","reclong":"-92.083330","year":"1839-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.43333,56]},"id":"14670","mass":"5213","name":"Lixna","nametype":"Valid","recclass":"H4","reclat":"56.000000","reclong":"26.433330","year":"1820-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[71.8,29.53333]},"id":"14675","mass":"1000","name":"Lodran","nametype":"Valid","recclass":"Lodranite","reclat":"29.533330","reclong":"71.800000","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[72.62667,26.96556]},"id":"14678","mass":"40000","name":"Lohawat","nametype":"Valid","recclass":"Howardite","reclat":"26.965560","reclong":"72.626670","year":"1994-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"40",":@computed_region_nnqa_25f4":"2770","fall":"Fell","geolocation":{"type":"Point","coordinates":[-77.21163,38.70066]},"id":"52843","mass":"329.7","name":"Lorton","nametype":"Valid","recclass":"L6","reclat":"38.700660","reclong":"-77.211630","year":"2010-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.83333,38]},"id":"14708","mass":"25","name":"Los Martinez","nametype":"Valid","recclass":"L6","reclat":"38.000000","reclong":"-0.833330","year":"1894-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"20",":@computed_region_nnqa_25f4":"2711","fall":"Fell","geolocation":{"type":"Point","coordinates":[-95.15,36.00833]},"id":"14711","mass":"17000","name":"Lost City","nametype":"Valid","recclass":"H5","reclat":"36.008330","reclong":"-95.150000","year":"1970-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"36",":@computed_region_nnqa_25f4":"1327","fall":"Fell","geolocation":{"type":"Point","coordinates":[-85.75,38.25]},"id":"14716","mass":"1300","name":"Louisville","nametype":"Valid","recclass":"L6","reclat":"38.250000","reclong":"-85.750000","year":"1977-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[19.91667,52]},"id":"14718","mass":"59000","name":"Łowicz","nametype":"Valid","recclass":"Mesosiderite-A3","reclat":"52.000000","reclong":"19.916670","year":"1935-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.15,24.95]},"id":"14721","mass":"9241","name":"Lua","nametype":"Valid","recclass":"L5","reclat":"24.950000","reclong":"75.150000","year":"1926-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.48333,47.85]},"id":"14724","mass":"3500","name":"Lucé","nametype":"Valid","recclass":"L6","reclat":"47.850000","reclong":"0.483330","year":"1768-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"31",":@computed_region_nnqa_25f4":"1567","fall":"Fell","geolocation":{"type":"Point","coordinates":[-84.76667,32.03333]},"id":"14753","mass":"340","name":"Lumpkin","nametype":"Valid","recclass":"L6","reclat":"32.033330","reclong":"-84.766670","year":"1869-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[103.3,24.8]},"id":"14754","mass":"2520","name":"Lunan","nametype":"Valid","recclass":"H6","reclat":"24.800000","reclong":"103.300000","year":"1980-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.03333,56.21667]},"id":"14755","mass":"11000","name":"Lundsgård","nametype":"Valid","recclass":"L6","reclat":"56.216670","reclong":"13.033330","year":"1889-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.7,61.2]},"id":"14756","mass":"885","name":"Luotolax","nametype":"Valid","recclass":"Howardite","reclat":"61.200000","reclong":"27.700000","year":"1813-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5,46.21667]},"id":"14757","mass":"14000","name":"Luponnas","nametype":"Valid","recclass":"H3-5","reclat":"46.216670","reclong":"5.000000","year":"1753-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29.43333,-7.21667]},"id":"14759","name":"Lusaka","nametype":"Valid","recclass":"Unknown","reclat":"-7.216670","reclong":"29.433330","year":"1951-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[97,19]},"id":"14764","mass":"540","name":"Mabwe-Khoywa","nametype":"Valid","recclass":"L5","reclat":"19.000000","reclong":"97.000000","year":"1937-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-36.66667,-5.2]},"id":"15370","mass":"1500","name":"Macau","nametype":"Valid","recclass":"H5","reclat":"-5.200000","reclong":"-36.666670","year":"1836-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.24222,-15.21222]},"id":"15371","mass":"93200","name":"Machinga","nametype":"Valid","recclass":"L6","reclat":"-15.212220","reclong":"35.242220","year":"1981-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.95,-28.83333]},"id":"15372","mass":"1995","name":"Macibini","nametype":"Valid","recclass":"Eucrite-pmict","reclat":"-28.833330","reclong":"31.950000","year":"1936-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[86.36667,25.91667]},"id":"15379","mass":"1000","name":"Madhipura","nametype":"Valid","recclass":"L","reclat":"25.916670","reclong":"86.366670","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.53333,-7.75]},"id":"15380","mass":"400","name":"Madiun","nametype":"Valid","recclass":"L6","reclat":"-7.750000","reclong":"111.533330","year":"1935-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.71667,40.41667]},"id":"15382","mass":"400","name":"Madrid","nametype":"Valid","recclass":"L6","reclat":"40.416670","reclong":"-3.716670","year":"1896-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-49.93333,-26.16667]},"id":"15383","mass":"600","name":"Mafra","nametype":"Valid","recclass":"L3-4","reclat":"-26.166670","reclong":"-49.933330","year":"1941-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.51667,37.86667]},"id":"15386","mass":"5000","name":"Magnesia","nametype":"Valid","recclass":"Iron, IAB-sHL","reclat":"37.866670","reclong":"27.516670","year":"1899-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.65,-19.48333]},"id":"15387","mass":"666.6","name":"Magombedze","nametype":"Valid","recclass":"H3-5","reclat":"-19.483330","reclong":"31.650000","year":"1990-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[95.78333,27.66667]},"id":"47361","mass":"70500","name":"Mahadevpur","nametype":"Valid","recclass":"H4/5","reclat":"27.666670","reclong":"95.783330","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.38333,12.83333]},"id":"30751","mass":"4629","name":"Maigatari-Danduma","nametype":"Valid","recclass":"H5/6","reclat":"12.833330","reclong":"9.383330","year":"2004-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"11",":@computed_region_nnqa_25f4":"611","fall":"Fell","geolocation":{"type":"Point","coordinates":[-104,32.21667]},"id":"15393","mass":"150","name":"Malaga","nametype":"Valid","recclass":"OC","reclat":"32.216670","reclong":"-104.000000","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.75,9.5]},"id":"15394","mass":"2000","name":"Malakal","nametype":"Valid","recclass":"L5","reclat":"9.500000","reclong":"31.750000","year":"1970-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.51667,-3.13333]},"id":"15395","mass":"470","name":"Malampaka","nametype":"Valid","recclass":"H","reclat":"-3.133330","reclong":"33.516670","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-63.23333,-28.93333]},"id":"15397","name":"Malotas","nametype":"Valid","recclass":"H5","reclat":"-28.933330","reclong":"-63.233330","year":"1931-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.76667,-29.45]},"id":"15400","mass":"807","name":"Malvern","nametype":"Valid","recclass":"Eucrite-pmict","reclat":"-29.450000","reclong":"26.766670","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[62.08333,45.21667]},"id":"15401","mass":"1000","name":"Mamra Springs","nametype":"Valid","recclass":"L6","reclat":"45.216670","reclong":"62.083330","year":"1927-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[86.7,23.05]},"id":"15402","mass":"1700","name":"Manbhoom","nametype":"Valid","recclass":"LL6","reclat":"23.050000","reclong":"86.700000","year":"1863-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.1,20.96667]},"id":"15403","mass":"50","name":"Manegaon","nametype":"Valid","recclass":"Diogenite","reclat":"20.966670","reclong":"76.100000","year":"1843-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.6,-17.65]},"id":"15405","mass":"22300","name":"Mangwendi","nametype":"Valid","recclass":"LL6","reclat":"-17.650000","reclong":"31.600000","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[44.63333,45.81667]},"id":"15409","mass":"3555","name":"Manych","nametype":"Valid","recclass":"LL3.4","reclat":"45.816670","reclong":"44.633330","year":"1951-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[72.08333,34.23333]},"id":"15414","mass":"4500","name":"Mardan","nametype":"Valid","recclass":"H5","reclat":"34.233330","reclong":"72.083330","year":"1948-01-01T00:00:00.000"} -,{"fall":"Fell","id":"15418","mass":"114","name":"Maria Linden","nametype":"Valid","recclass":"L4","year":"1925-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"19",":@computed_region_nnqa_25f4":"471","fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.38333,42.71667]},"id":"15419","mass":"340","name":"Mariaville","nametype":"Valid","recclass":"Iron","reclat":"42.716670","reclong":"-99.383330","year":"1898-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.46745,54.76183]},"id":"48973","mass":"25.81","name":"Maribo","nametype":"Valid","recclass":"CM2","reclat":"54.761830","reclong":"11.467450","year":"2009-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29.25,4.66667]},"id":"15421","mass":"3200","name":"Maridi","nametype":"Valid","recclass":"H6","reclat":"4.666670","reclong":"29.250000","year":"1941-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-49.93333,-22.25]},"id":"15422","mass":"2500","name":"Marilia","nametype":"Valid","recclass":"H4","reclat":"-22.250000","reclong":"-49.933330","year":"1971-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"16",":@computed_region_nnqa_25f4":"287","fall":"Fell","geolocation":{"type":"Point","coordinates":[-91.6,41.9]},"id":"15424","mass":"28400","name":"Marion (Iowa)","nametype":"Valid","recclass":"L6","reclat":"41.900000","reclong":"-91.600000","year":"1847-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.5,61.5]},"id":"15426","mass":"45000","name":"Marjalahti","nametype":"Valid","recclass":"Pallasite, PMG","reclat":"61.500000","reclong":"30.500000","year":"1902-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.15,44.5]},"id":"15429","mass":"3000","name":"Marmande","nametype":"Valid","recclass":"L5","reclat":"44.500000","reclong":"0.150000","year":"1848-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[48.1,-14.2]},"id":"15430","mass":"6000","name":"Maromandia","nametype":"Valid","recclass":"L6","reclat":"-14.200000","reclong":"48.100000","year":"2002-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"39",":@computed_region_nnqa_25f4":"2740","fall":"Fell","geolocation":{"type":"Point","coordinates":[-84.1,35.8]},"id":"15436","mass":"1443","name":"Maryville","nametype":"Valid","recclass":"L6","reclat":"35.800000","reclong":"-84.100000","year":"1983-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.86667,45.36667]},"id":"15438","mass":"1000","name":"Mascombes","nametype":"Valid","recclass":"L6","reclat":"45.366670","reclong":"1.866670","year":"1836-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0,0]},"id":"53653","mass":"24.54","name":"Mason Gully","nametype":"Valid","recclass":"H5","reclat":"0.000000","reclong":"0.000000","year":"2010-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.61667,48.13333]},"id":"15443","mass":"1600","name":"Mässing","nametype":"Valid","recclass":"Howardite","reclat":"48.133330","reclong":"12.616670","year":"1803-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.13333,48.18333]},"id":"15446","mass":"19000","name":"Mauerkirchen","nametype":"Valid","recclass":"L6","reclat":"48.183330","reclong":"13.133330","year":"1768-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[57,-20]},"id":"15447","mass":"220","name":"Mauritius","nametype":"Valid","recclass":"L6","reclat":"-20.000000","reclong":"57.000000","year":"1801-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.08333,8.96667]},"id":"15451","mass":"4850","name":"Mayo Belwa","nametype":"Valid","recclass":"Aubrite","reclat":"8.966670","reclong":"12.083330","year":"1974-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-101.68333,24.68333]},"id":"15453","mass":"4000","name":"Mazapil","nametype":"Valid","recclass":"Iron, IAB-sLL","reclat":"24.683330","reclong":"-101.683330","year":"1885-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30,-1.21667]},"id":"15454","mass":"4975","name":"Maziba","nametype":"Valid","recclass":"L6","reclat":"-1.216670","reclong":"30.000000","year":"1942-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[34.16667,1.06667]},"id":"15455","mass":"150000","name":"Mbale","nametype":"Valid","recclass":"L5/6","reclat":"1.066670","reclong":"34.166670","year":"1992-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-67.5,-27.25]},"id":"15467","mass":"31","name":"Medanitos","nametype":"Valid","recclass":"Eucrite-cm","reclat":"-27.250000","reclong":"-67.500000","year":"1953-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.8,29.01667]},"id":"15469","mass":"22","name":"Meerut","nametype":"Valid","recclass":"H5","reclat":"29.016670","reclong":"77.800000","year":"1861-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[106.88333,-6.23333]},"id":"15470","mass":"24750","name":"Meester-Cornelis","nametype":"Valid","recclass":"H5","reclat":"-6.233330","reclong":"106.883330","year":"1915-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.15,53.18333]},"id":"15485","mass":"10500","name":"Menow","nametype":"Valid","recclass":"H4","reclat":"53.183330","reclong":"13.150000","year":"1862-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7.21817,46.81867]},"id":"15486","mass":"28.9","name":"Menziswyl","nametype":"Valid","recclass":"L5","reclat":"46.818670","reclong":"7.218170","year":"1903-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.06667,55.05]},"id":"15489","mass":"4000","name":"Mern","nametype":"Valid","recclass":"L6","reclat":"55.050000","reclong":"12.066670","year":"1878-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.66667,0]},"id":"15491","mass":"6000","name":"Meru","nametype":"Valid","recclass":"LL6","reclat":"0.000000","reclong":"37.666670","year":"1945-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[81.98333,25.48333]},"id":"15492","mass":"71400","name":"Merua","nametype":"Valid","recclass":"H5","reclat":"25.483330","reclong":"81.983330","year":"1920-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.56667,38.18333]},"id":"15495","mass":"2405","name":"Messina","nametype":"Valid","recclass":"L5","reclat":"38.183330","reclong":"15.566670","year":"1955-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.1,50.58333]},"id":"16626","mass":"870","name":"Meuselbach","nametype":"Valid","recclass":"L6","reclat":"50.583330","reclong":"11.100000","year":"1897-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.25,45.76667]},"id":"16627","mass":"1300","name":"Mezel","nametype":"Valid","recclass":"L6","reclat":"45.766670","reclong":"3.250000","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25.73333,46.5]},"id":"16628","mass":"22700","name":"Mezö-Madaras","nametype":"Valid","recclass":"L3.7","reclat":"46.500000","reclong":"25.733330","year":"1852-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[83.61667,25.9]},"id":"16629","mass":"350","name":"Mhow","nametype":"Valid","recclass":"L6","reclat":"25.900000","reclong":"83.616670","year":"1827-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.7,34.8]},"id":"16631","mass":"1100","name":"Mianchi","nametype":"Valid","recclass":"H5","reclat":"34.800000","reclong":"111.700000","year":"1980-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.16667,54.56667]},"id":"16632","mass":"1600","name":"Middlesbrough","nametype":"Valid","recclass":"L6","reclat":"54.566670","reclong":"-1.166670","year":"1881-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"41",":@computed_region_nnqa_25f4":"2996","fall":"Fell","geolocation":{"type":"Point","coordinates":[-90.36556,42.9075]},"id":"52090","mass":"3584","name":"Mifflin","nametype":"Valid","recclass":"L5","reclat":"42.907500","reclong":"-90.365560","year":"2010-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.96667,48.06667]},"id":"16634","mass":"8000","name":"Mighei","nametype":"Valid","recclass":"CM2","reclat":"48.066670","reclong":"30.966670","year":"1889-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[133.22,35.56833]},"id":"16635","mass":"6380","name":"Mihonoseki","nametype":"Valid","recclass":"L6","reclat":"35.568330","reclong":"133.220000","year":"1992-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[17.53333,46.23333]},"id":"16636","mass":"224.2","name":"Mike","nametype":"Valid","recclass":"L6","reclat":"46.233330","reclong":"17.533330","year":"1944-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.1,46.18333]},"id":"16640","mass":"10000","name":"Milena","nametype":"Valid","recclass":"L6","reclat":"46.183330","reclong":"16.100000","year":"1842-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[120.36667,-26.45]},"id":"16643","mass":"330000","name":"Millbillillie","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"-26.450000","reclong":"120.366670","year":"1960-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"15",":@computed_region_nnqa_25f4":"11","fall":"Fell","geolocation":{"type":"Point","coordinates":[-92.05,35.4]},"id":"16645","mass":"16700","name":"Miller (Arkansas)","nametype":"Valid","recclass":"H5","reclat":"35.400000","reclong":"-92.050000","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[136.93333,35.07833]},"id":"16692","mass":"1040","name":"Minamino","nametype":"Valid","recclass":"L","reclat":"35.078330","reclong":"136.933330","year":"1632-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.7,37.28333]},"id":"16696","mass":"42","name":"Mineo","nametype":"Valid","recclass":"Pallasite","reclat":"37.283330","reclong":"14.700000","year":"1826-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[120.66667,32.33333]},"id":"16697","mass":"5500","name":"Min-Fan-Zhun","nametype":"Valid","recclass":"LL6","reclat":"32.333330","reclong":"120.666670","year":"1952-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.6,47.7]},"id":"16700","mass":"550","name":"Minnichhof","nametype":"Valid","recclass":"OC","reclat":"47.700000","reclong":"16.600000","year":"1905-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[83.25,25.68333]},"id":"16701","mass":"8510","name":"Mirzapur","nametype":"Valid","recclass":"L5","reclat":"25.683330","reclong":"83.250000","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[23,56.66667]},"id":"16703","mass":"5800","name":"Misshof","nametype":"Valid","recclass":"H5","reclat":"56.666670","reclong":"23.000000","year":"1890-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.93333,61.73333]},"id":"16707","mass":"100.7","name":"Mjelleim","nametype":"Valid","recclass":"H","reclat":"61.733330","reclong":"5.933330","year":"1898-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[24.03333,46.8]},"id":"16709","mass":"300000","name":"Mocs","nametype":"Valid","recclass":"L5-6","reclat":"46.800000","reclong":"24.033330","year":"1882-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"17",":@computed_region_nnqa_25f4":"1290","fall":"Fell","geolocation":{"type":"Point","coordinates":[-101.1,38.5]},"id":"16711","mass":"35000","name":"Modoc (1905)","nametype":"Valid","recclass":"L6","reclat":"38.500000","reclong":"-101.100000","year":"1905-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[174.4,-39.63333]},"id":"16713","mass":"4500","name":"Mokoia","nametype":"Valid","recclass":"CV3","reclat":"-39.633330","reclong":"174.400000","year":"1908-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.16667,38.11667]},"id":"16715","mass":"144000","name":"Molina","nametype":"Valid","recclass":"H5","reclat":"38.116670","reclong":"-1.166670","year":"1858-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.46667,-31.25]},"id":"16717","mass":"150","name":"Molteno","nametype":"Valid","recclass":"Howardite","reclat":"-31.250000","reclong":"26.466670","year":"1953-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"2957","fall":"Fell","geolocation":{"type":"Point","coordinates":[-102.85833,31.60833]},"id":"16719","mass":"2587","name":"Monahans (1998)","nametype":"Valid","recclass":"H5","reclat":"31.608330","reclong":"-102.858330","year":"1998-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"636","fall":"Fell","geolocation":{"type":"Point","coordinates":[-80.5,35.25]},"id":"16720","mass":"8600","name":"Monroe","nametype":"Valid","recclass":"H4","reclat":"35.250000","reclong":"-80.500000","year":"1849-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-8.25,38.01667]},"id":"16725","mass":"4885","name":"Monte das Fortes","nametype":"Valid","recclass":"L5","reclat":"38.016670","reclong":"-8.250000","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.35,43.26667]},"id":"16726","mass":"3130","name":"Monte Milone","nametype":"Valid","recclass":"L5","reclat":"43.266670","reclong":"13.350000","year":"1846-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.9625,43.39056]},"id":"16727","mass":"149000","name":"Montferré","nametype":"Valid","recclass":"H5","reclat":"43.390560","reclong":"1.962500","year":"1923-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.58333,47.63333]},"id":"16729","mass":"500","name":"Montlivault","nametype":"Valid","recclass":"L6","reclat":"47.633330","reclong":"1.583330","year":"1838-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.35,-15.96667]},"id":"16733","name":"Monze","nametype":"Valid","recclass":"L6","reclat":"-15.966670","reclong":"27.350000","year":"1950-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"2431","fall":"Fell","geolocation":{"type":"Point","coordinates":[-79.38333,35.41667]},"id":"16736","mass":"1880","name":"Moore County","nametype":"Valid","recclass":"Eucrite-cm","reclat":"35.416670","reclong":"-79.383330","year":"1913-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-8.33333,52.45]},"id":"16737","mass":"3520","name":"Mooresfort","nametype":"Valid","recclass":"H5","reclat":"52.450000","reclong":"-8.333330","year":"1810-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[145.6,-40.975]},"id":"16738","mass":"8887.5","name":"Moorleah","nametype":"Valid","recclass":"L6","reclat":"-40.975000","reclong":"145.600000","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.83333,28.78333]},"id":"16740","mass":"70","name":"Moradabad","nametype":"Valid","recclass":"L6","reclat":"28.783330","reclong":"78.833330","year":"1808-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[18.53333,49.6]},"id":"16742","mass":"633","name":"Morávka","nametype":"Valid","recclass":"H5","reclat":"49.600000","reclong":"18.533330","year":"2000-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.13333,44.6]},"id":"16747","mass":"1300","name":"Mornans","nametype":"Valid","recclass":"H5","reclat":"44.600000","reclong":"5.133330","year":"1875-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.7,59.43333]},"id":"36592","mass":"3763","name":"Moss","nametype":"Valid","recclass":"CO3.6","reclat":"59.433330","reclong":"10.700000","year":"2006-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.33333,26.83333]},"id":"16759","mass":"1500","name":"Moti-ka-nagla","nametype":"Valid","recclass":"H6","reclat":"26.833330","reclong":"77.333330","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.5,45.2]},"id":"16762","mass":"9150","name":"Motta di Conti","nametype":"Valid","recclass":"H4","reclat":"45.200000","reclong":"8.500000","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[141.7,-29.8]},"id":"16766","mass":"11300","name":"Mount Browne","nametype":"Valid","recclass":"H6","reclat":"-29.800000","reclong":"141.700000","year":"1902-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[4.8,18.7]},"id":"16804","mass":"110000","name":"Mount Tazerzait","nametype":"Valid","recclass":"L5","reclat":"18.700000","reclong":"4.800000","year":"1991-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.86667,44.08333]},"id":"16805","mass":"17000","name":"Mount Vaisi","nametype":"Valid","recclass":"Stone-uncl","reclat":"44.083330","reclong":"6.866670","year":"1637-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.5,-11.5]},"id":"16820","mass":"1100","name":"Mtola","nametype":"Valid","recclass":"Stone-uncl","reclat":"-11.500000","reclong":"33.500000","year":"1944-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.01667,12.63333]},"id":"16841","mass":"4400","name":"Muddoor","nametype":"Valid","recclass":"L5","reclat":"12.633330","reclong":"77.016670","year":"1865-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[80.83333,9.33333]},"id":"16851","mass":"25.5","name":"Mulletiwu","nametype":"Valid","recclass":"L","reclat":"9.333330","reclong":"80.833330","year":"1795-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[90.21667,24.5]},"id":"16874","mass":"4703","name":"Muraid","nametype":"Valid","recclass":"L6","reclat":"24.500000","reclong":"90.216670","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[145.2,-36.61667]},"id":"16875","mass":"100000","name":"Murchison","nametype":"Valid","recclass":"CM2","reclat":"-36.616670","reclong":"145.200000","year":"1969-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"36",":@computed_region_nnqa_25f4":"237","fall":"Fell","geolocation":{"type":"Point","coordinates":[-88.1,36.6]},"id":"16882","mass":"12600","name":"Murray","nametype":"Valid","recclass":"CM2","reclat":"36.600000","reclong":"-88.100000","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[85.53333,26.13333]},"id":"16885","mass":"1245","name":"Muzaffarpur","nametype":"Valid","recclass":"Iron, IAB-sHL","reclat":"26.133330","reclong":"85.533330","year":"1964-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[72.63333,23.05]},"id":"16887","name":"Myhee Caunta","nametype":"Valid","recclass":"OC","reclat":"23.050000","reclong":"72.633330","year":"1842-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1,12]},"id":"16889","mass":"8165","name":"Nadiabondi","nametype":"Valid","recclass":"H5","reclat":"12.000000","reclong":"1.000000","year":"1956-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[140.06167,38.12167]},"id":"16890","mass":"1810","name":"Nagai","nametype":"Valid","recclass":"L6","reclat":"38.121670","reclong":"140.061670","year":"1922-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.21667,26.98333]},"id":"16892","mass":"20","name":"Nagaria","nametype":"Valid","recclass":"Eucrite-cm","reclat":"26.983330","reclong":"78.216670","year":"1875-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[19.5,49.16667]},"id":"16893","mass":"6100","name":"Nagy-Borové","nametype":"Valid","recclass":"L5","reclat":"49.166670","reclong":"19.500000","year":"1895-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.35,31.31667]},"id":"16898","mass":"10000","name":"Nakhla","nametype":"Valid","recclass":"Martian (nakhlite)","reclat":"31.316670","reclong":"30.350000","year":"1911-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[100.08333,13.73333]},"id":"16899","mass":"23200","name":"Nakhon Pathom","nametype":"Valid","recclass":"L6","reclat":"13.733330","reclong":"100.083330","year":"1923-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[79.2,12.28333]},"id":"16902","mass":"4500","name":"Nammianthal","nametype":"Valid","recclass":"H5","reclat":"12.283330","reclong":"79.200000","year":"1886-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[103.5,35.66667]},"id":"16903","mass":"52900","name":"Nan Yang Pao","nametype":"Valid","recclass":"L6","reclat":"35.666670","reclong":"103.500000","year":"1917-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"45",":@computed_region_nnqa_25f4":"419","fall":"Fell","geolocation":{"type":"Point","coordinates":[-77.16667,38.41667]},"id":"16904","mass":"7500","name":"Nanjemoy","nametype":"Valid","recclass":"H6","reclat":"38.416670","reclong":"-77.166670","year":"1825-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[121.8,32.11667]},"id":"16907","mass":"529","name":"Nantong","nametype":"Valid","recclass":"H6","reclat":"32.116670","reclong":"121.800000","year":"1984-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77,19.25]},"id":"16908","mass":"17000","name":"Naoki","nametype":"Valid","recclass":"H6","reclat":"19.250000","reclong":"77.000000","year":"1928-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[51.5,33.75]},"id":"16909","mass":"2700","name":"Naragh","nametype":"Valid","recclass":"H6","reclat":"33.750000","reclong":"51.500000","year":"1974-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[150.68889,-34.05]},"id":"16912","mass":"367.5","name":"Narellan","nametype":"Valid","recclass":"L6","reclat":"-34.050000","reclong":"150.688890","year":"1928-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.51667,42.51667]},"id":"16914","name":"Narni","nametype":"Valid","recclass":"Stone-uncl","reclat":"42.516670","reclong":"12.516670","year":"0921-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[165.9,-21.73333]},"id":"16922","mass":"347","name":"Nassirah","nametype":"Valid","recclass":"H4","reclat":"-21.733330","reclong":"165.900000","year":"1936-01-01T00:00:00.000"} -,{"fall":"Fell","id":"16923","mass":"1.4","name":"Natal","nametype":"Valid","recclass":"Stone-uncl","year":"1973-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[83.66667,21.25]},"id":"16927","mass":"105","name":"Nawapali","nametype":"Valid","recclass":"CM2","reclat":"21.250000","reclong":"83.666670","year":"1890-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[136.46528,36.44917]},"id":"16934","mass":"420","name":"Neagari","nametype":"Valid","recclass":"L6","reclat":"36.449170","reclong":"136.465280","year":"1995-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[83.48333,18.68333]},"id":"16935","mass":"4500","name":"Nedagolla","nametype":"Valid","recclass":"Iron, ungrouped","reclat":"18.683330","reclong":"83.483330","year":"1870-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.33333,9.5]},"id":"16941","mass":"2450","name":"Nejo","nametype":"Valid","recclass":"L6","reclat":"9.500000","reclong":"35.333330","year":"1970-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.5,56.5]},"id":"16945","mass":"10250","name":"Nerft","nametype":"Valid","recclass":"L6","reclat":"56.500000","reclong":"21.500000","year":"1864-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.80833,47.525]},"id":"16950","mass":"6189","name":"Neuschwanstein","nametype":"Valid","recclass":"EL6","reclat":"47.525000","reclong":"10.808330","year":"2002-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"38",":@computed_region_nnqa_25f4":"2615","fall":"Fell","geolocation":{"type":"Point","coordinates":[-81.76667,40]},"id":"16953","mass":"230000","name":"New Concord","nametype":"Valid","recclass":"L6","reclat":"40.000000","reclong":"-81.766670","year":"1860-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.68333,15.36667]},"id":"16954","mass":"12000","name":"New Halfa","nametype":"Valid","recclass":"L4","reclat":"15.366670","reclong":"35.683330","year":"1994-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"22",":@computed_region_nnqa_25f4":"1667","fall":"Fell","geolocation":{"type":"Point","coordinates":[-90.10976,29.94718]},"id":"16960","mass":"19256","name":"New Orleans","nametype":"Valid","recclass":"H5","reclat":"29.947180","reclong":"-90.109760","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.41667,-7.45]},"id":"16966","mass":"1393","name":"Ngawi","nametype":"Valid","recclass":"LL3.6","reclat":"-7.450000","reclong":"111.416670","year":"1883-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-4.38333,13.85]},"id":"16968","mass":"37500","name":"N'Goureyma","nametype":"Valid","recclass":"Iron, ungrouped","reclat":"13.850000","reclong":"-4.383330","year":"1900-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.43333,49.03333]},"id":"16970","name":"Nicorps","nametype":"Valid","recclass":"Stone-uncl","reclat":"49.033330","reclong":"-1.433330","year":"1750-01-01T00:00:00.000"} -,{"fall":"Fell","id":"16974","mass":"3.3","name":"Niger (L6)","nametype":"Valid","recclass":"L6","year":"1967-01-01T00:00:00.000"} -,{"fall":"Fell","id":"16975","mass":"3.3","name":"Niger (LL6)","nametype":"Valid","recclass":"LL6","year":"1967-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.63333,52.45]},"id":"16976","mass":"3996","name":"Nikolaevka","nametype":"Valid","recclass":"H4","reclat":"52.450000","reclong":"78.633330","year":"1935-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.33333,56.11667]},"id":"16977","mass":"6000","name":"Nikolskoe","nametype":"Valid","recclass":"L4","reclat":"56.116670","reclong":"37.333330","year":"1954-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[121.48333,29.86667]},"id":"16980","mass":"14250","name":"Ningbo","nametype":"Valid","recclass":"Iron, IVA","reclat":"29.866670","reclong":"121.483330","year":"1975-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[105.90667,32.925]},"id":"16981","mass":"4610","name":"Ningqiang","nametype":"Valid","recclass":"C3-ung","reclat":"32.925000","reclong":"105.906670","year":"1983-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[131.56667,34.2]},"id":"16982","mass":"467","name":"Nio","nametype":"Valid","recclass":"H3-4","reclat":"34.200000","reclong":"131.566670","year":"1897-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[30.7,-28.56667]},"id":"16983","mass":"17200","name":"N'Kandhla","nametype":"Valid","recclass":"Iron, IID","reclat":"-28.566670","reclong":"30.700000","year":"1912-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"49",":@computed_region_nnqa_25f4":"1683","fall":"Fell","geolocation":{"type":"Point","coordinates":[-69.48333,44.08333]},"id":"16984","mass":"2300","name":"Nobleborough","nametype":"Valid","recclass":"Eucrite-pmict","reclat":"44.083330","reclong":"-69.483330","year":"1823-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"35",":@computed_region_nnqa_25f4":"2238","fall":"Fell","geolocation":{"type":"Point","coordinates":[-86.055,40.08528]},"id":"16985","mass":"483.7","name":"Noblesville","nametype":"Valid","recclass":"H4-6","reclat":"40.085280","reclong":"-86.055000","year":"1991-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[130.75,33.725]},"id":"16988","mass":"472","name":"Nogata","nametype":"Valid","recclass":"L6","reclat":"33.725000","reclong":"130.750000","year":"0861-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-59.83333,-32.36667]},"id":"16989","mass":"4000","name":"Nogoya","nametype":"Valid","recclass":"CM2","reclat":"-32.366670","reclong":"-59.833330","year":"1879-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"15",":@computed_region_nnqa_25f4":"10","fall":"Fell","geolocation":{"type":"Point","coordinates":[-92.26667,36.21667]},"id":"16994","mass":"1050","name":"Norfork","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"36.216670","reclong":"-92.266670","year":"1918-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"17",":@computed_region_nnqa_25f4":"1252","fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.86667,39.68333]},"id":"17922","mass":"1100000","name":"Norton County","nametype":"Valid","recclass":"Aubrite","reclat":"39.683330","reclong":"-99.866670","year":"1948-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.52722,45.29167]},"id":"17930","mass":"177","name":"Noventa Vicentina","nametype":"Valid","recclass":"H4","reclat":"45.291670","reclong":"11.527220","year":"1971-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[46,54.81667]},"id":"17933","mass":"1900","name":"Novo-Urei","nametype":"Valid","recclass":"Ureilite","reclat":"54.816670","reclong":"46.000000","year":"1886-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[31.33333,58.55]},"id":"17934","name":"Novy-Ergi","nametype":"Valid","recclass":"Stone-uncl","reclat":"58.550000","reclong":"31.333330","year":"1662-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22,56]},"id":"17935","mass":"1001","name":"Novy-Projekt","nametype":"Valid","recclass":"OC","reclat":"56.000000","reclong":"22.000000","year":"1908-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[102.46667,42.91667]},"id":"17936","mass":"250","name":"Noyan-Bogdo","nametype":"Valid","recclass":"L6","reclat":"42.916670","reclong":"102.466670","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-102.13333,24.3]},"id":"17938","mass":"50000","name":"Nuevo Mercurio","nametype":"Valid","recclass":"H5","reclat":"24.300000","reclong":"-102.133330","year":"1978-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.75,41.63333]},"id":"17959","mass":"5000","name":"Nulles","nametype":"Valid","recclass":"H6","reclat":"41.633330","reclong":"0.750000","year":"1851-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[141.86667,43.33333]},"id":"17960","mass":"363","name":"Numakai","nametype":"Valid","recclass":"H4","reclat":"43.333330","reclong":"141.866670","year":"1925-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[94.91667,21.20833]},"id":"17969","mass":"737.6","name":"Nyaung","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"21.208330","reclong":"94.916670","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.025,47.55]},"id":"17970","mass":"1100","name":"Nyirábrany","nametype":"Valid","recclass":"LL5","reclat":"47.550000","reclong":"22.025000","year":"1914-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[55.26667,57.78333]},"id":"17979","mass":"500000","name":"Ochansk","nametype":"Valid","recclass":"H4","reclat":"57.783330","reclong":"55.266670","year":"1887-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.05,52.28333]},"id":"17988","mass":"1400","name":"Oesede","nametype":"Valid","recclass":"H5","reclat":"52.283330","reclong":"8.050000","year":"1927-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[23,58.5]},"id":"17989","mass":"6000","name":"Oesel","nametype":"Valid","recclass":"L6","reclat":"58.500000","reclong":"23.000000","year":"1855-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.03333,47.88333]},"id":"17990","mass":"3750","name":"Ofehértó","nametype":"Valid","recclass":"L6","reclat":"47.883330","reclong":"22.033330","year":"1900-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[130.2,33.28333]},"id":"17994","mass":"14360","name":"Ogi","nametype":"Valid","recclass":"H6","reclat":"33.283330","reclong":"130.200000","year":"1741-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[23.58333,46.06667]},"id":"17995","mass":"16250","name":"Ohaba","nametype":"Valid","recclass":"H5","reclat":"46.066670","reclong":"23.583330","year":"1857-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.5,6.75]},"id":"17996","mass":"7700","name":"Ohuma","nametype":"Valid","recclass":"L5","reclat":"6.750000","reclong":"8.500000","year":"1963-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-5.4,38.18333]},"id":"17997","mass":"5850","name":"Ojuelos Altos","nametype":"Valid","recclass":"L6","reclat":"38.183330","reclong":"-5.400000","year":"1926-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[139.21667,36.18333]},"id":"17998","mass":"194","name":"Okabe","nametype":"Valid","recclass":"H5","reclat":"36.183330","reclong":"139.216670","year":"1958-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[135.2,35.08333]},"id":"18000","mass":"4742","name":"Okano","nametype":"Valid","recclass":"Iron, IIAB","reclat":"35.083330","reclong":"135.200000","year":"1904-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25.5,50.83333]},"id":"18002","mass":"12000","name":"Okniny","nametype":"Valid","recclass":"LL6","reclat":"50.833330","reclong":"25.500000","year":"1834-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8.16667,52.95]},"id":"18009","mass":"16570","name":"Oldenburg (1930)","nametype":"Valid","recclass":"L6","reclat":"52.950000","reclong":"8.166670","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.03333,39]},"id":"18012","name":"Oliva-Gandia","nametype":"Valid","recclass":"Stone-uncl","reclat":"39.000000","reclong":"-0.033330","year":"1520-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7.06667,38.71667]},"id":"18013","mass":"150000","name":"Olivenza","nametype":"Valid","recclass":"LL5","reclat":"38.716670","reclong":"-7.066670","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-2.1,39.56667]},"id":"18015","mass":"40000","name":"Olmedilla de Alarcón","nametype":"Valid","recclass":"H5","reclat":"39.566670","reclong":"-2.100000","year":"1929-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[161.80833,64.02]},"id":"18019","mass":"250000","name":"Omolon","nametype":"Valid","recclass":"Pallasite, PMG","reclat":"64.020000","reclong":"161.808330","year":"1981-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.38333,43.88333]},"id":"18026","mass":"14000","name":"Orgueil","nametype":"Valid","recclass":"CI1","reclat":"43.883330","reclong":"1.383330","year":"1864-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"30",":@computed_region_nnqa_25f4":"1078","fall":"Fell","geolocation":{"type":"Point","coordinates":[-81.36222,28.5475]},"id":"34489","mass":"180","name":"Orlando","nametype":"Valid","recclass":"Eucrite","reclat":"28.547500","reclong":"-81.362220","year":"2004-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.15,47.11667]},"id":"18030","mass":"6000","name":"Ornans","nametype":"Valid","recclass":"CO3.4","reclat":"47.116670","reclong":"6.150000","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[8,48.5]},"id":"18033","mass":"4500","name":"Ortenau","nametype":"Valid","recclass":"Stone-uncl","reclat":"48.500000","reclong":"8.000000","year":"1671-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.93333,42.13333]},"id":"18034","mass":"3400","name":"Orvinio","nametype":"Valid","recclass":"H6","reclat":"42.133330","reclong":"12.933330","year":"1872-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.4,58.88333]},"id":"18042","mass":"246","name":"Oterøy","nametype":"Valid","recclass":"L6","reclat":"58.883330","reclong":"9.400000","year":"1928-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[140.35,38.4]},"id":"18045","mass":"6510","name":"Otomi","nametype":"Valid","recclass":"H","reclat":"38.400000","reclong":"140.350000","year":"1867-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"17",":@computed_region_nnqa_25f4":"1947","fall":"Fell","geolocation":{"type":"Point","coordinates":[-95.21667,38.6]},"id":"18046","mass":"840","name":"Ottawa","nametype":"Valid","recclass":"LL6","reclat":"38.600000","reclong":"-95.216670","year":"1896-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.08,12.9]},"id":"56729","mass":"4440","name":"Ouadangou","nametype":"Valid","recclass":"L5","reclat":"12.900000","reclong":"0.080000","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6.57717,30.18]},"id":"18050","mass":"1215.5","name":"Oued el Hadjar","nametype":"Valid","recclass":"LL6","reclat":"30.180000","reclong":"-6.577170","year":"1986-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-13.1,24.3]},"id":"31282","mass":"17000","name":"Oum Dreyga","nametype":"Valid","recclass":"H3-5","reclat":"24.300000","reclong":"-13.100000","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-8.28,37.60833]},"id":"18052","mass":"20000","name":"Ourique","nametype":"Valid","recclass":"H4","reclat":"37.608330","reclong":"-8.280000","year":"1998-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16,-18]},"id":"18055","mass":"121.5","name":"Ovambo","nametype":"Valid","recclass":"L6","reclat":"-18.000000","reclong":"16.000000","year":"1900-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-5.86667,43.4]},"id":"18058","mass":"205","name":"Oviedo","nametype":"Valid","recclass":"H5","reclat":"43.400000","reclong":"-5.866670","year":"1856-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[28.83333,51.33333]},"id":"18062","name":"Owrucz","nametype":"Valid","recclass":"OC","reclat":"51.333330","reclong":"28.833330","year":"1775-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.3,21.05]},"id":"18068","mass":"3400","name":"Pacula","nametype":"Valid","recclass":"L6","reclat":"21.050000","reclong":"-99.300000","year":"1881-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25,55.66667]},"id":"18069","mass":"3858","name":"Padvarninkai","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"55.666670","reclong":"25.000000","year":"1929-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[120.45583,17.74333]},"id":"18072","mass":"515","name":"Paitan","nametype":"Valid","recclass":"H6","reclat":"17.743330","reclong":"120.455830","year":"1910-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"32",":@computed_region_nnqa_25f4":"503","fall":"Fell","geolocation":{"type":"Point","coordinates":[-89.71667,32.31667]},"id":"18073","name":"Palahatchie","nametype":"Valid","recclass":"OC","reclat":"32.316670","reclong":"-89.716670","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-65.1,-23.11667]},"id":"18074","mass":"1430","name":"Palca de Aparzo","nametype":"Valid","recclass":"L5","reclat":"-23.116670","reclong":"-65.100000","year":"1988-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[118.61667,43.48333]},"id":"18077","mass":"18000","name":"Palinshih","nametype":"Valid","recclass":"Iron","reclat":"43.483330","reclong":"118.616670","year":"1914-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"18",":@computed_region_nnqa_25f4":"2122","fall":"Fell","geolocation":{"type":"Point","coordinates":[-91.5,39.8]},"id":"18079","mass":"135","name":"Palmyra","nametype":"Valid","recclass":"L3","reclat":"39.800000","reclong":"-91.500000","year":"1926-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"4",":@computed_region_nnqa_25f4":"1657","fall":"Fell","geolocation":{"type":"Point","coordinates":[-157.78333,21.3]},"id":"18082","mass":"682","name":"Palolo Valley","nametype":"Valid","recclass":"H5","reclat":"21.300000","reclong":"-157.783330","year":"1949-01-01T00:00:00.000"} -,{"fall":"Found","id":"32591","mass":"69.5","name":"Dominion Range 03239","nametype":"Valid","recclass":"L6","year":"2002-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[120.7,15.08333]},"id":"18093","mass":"10500","name":"Pampanga","nametype":"Valid","recclass":"L5","reclat":"15.083330","reclong":"120.700000","year":"1859-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[124.28333,8.06667]},"id":"18098","mass":"2130","name":"Pantar","nametype":"Valid","recclass":"H5","reclat":"8.066670","reclong":"124.283330","year":"1938-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"15",":@computed_region_nnqa_25f4":"1023","fall":"Fell","geolocation":{"type":"Point","coordinates":[-90.5,36.06667]},"id":"18101","mass":"408000","name":"Paragould","nametype":"Valid","recclass":"LL5","reclat":"36.066670","reclong":"-90.500000","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-40.7,-6.23333]},"id":"18102","mass":"2000","name":"Parambu","nametype":"Valid","recclass":"LL5","reclat":"-6.233330","reclong":"-40.700000","year":"1967-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-51.66667,-19.13333]},"id":"18103","mass":"100000","name":"Paranaiba","nametype":"Valid","recclass":"L6","reclat":"-19.133330","reclong":"-51.666670","year":"1956-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"34",":@computed_region_nnqa_25f4":"1863","fall":"Fell","geolocation":{"type":"Point","coordinates":[-87.67917,41.48472]},"id":"18106","mass":"18000","name":"Park Forest","nametype":"Valid","recclass":"L5","reclat":"41.484720","reclong":"-87.679170","year":"2003-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.35,9.23333]},"id":"18108","mass":"77600","name":"Parnallee","nametype":"Valid","recclass":"LL3.6","reclat":"9.233330","reclong":"78.350000","year":"1857-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[85.4,26.2]},"id":"18109","mass":"800","name":"Parsa","nametype":"Valid","recclass":"EH3","reclat":"26.200000","reclong":"85.400000","year":"1942-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"11",":@computed_region_nnqa_25f4":"1994","fall":"Fell","geolocation":{"type":"Point","coordinates":[-103.4,36.21667]},"id":"18110","mass":"5100","name":"Pasamonte","nametype":"Valid","recclass":"Eucrite-pmict","reclat":"36.216670","reclong":"-103.400000","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.05,20.93694]},"id":"18112","mass":"4375","name":"Patora","nametype":"Valid","recclass":"H6","reclat":"20.936940","reclong":"82.050000","year":"1969-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-48.56667,-19.53333]},"id":"18116","mass":"2121","name":"Patrimonio","nametype":"Valid","recclass":"L6","reclat":"-19.533330","reclong":"-48.566670","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.96667,38.13333]},"id":"18118","mass":"12","name":"Patti","nametype":"Valid","recclass":"Iron","reclat":"38.133330","reclong":"14.966670","year":"1922-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[91.18333,23.15]},"id":"18171","mass":"37350","name":"Patwar","nametype":"Valid","recclass":"Mesosiderite-A1","reclat":"23.150000","reclong":"91.183330","year":"1935-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25.51667,43.46667]},"id":"18173","mass":"2968","name":"Pavel","nametype":"Valid","recclass":"H5","reclat":"43.466670","reclong":"25.516670","year":"1966-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[77.03333,52.3]},"id":"18175","mass":"142.5","name":"Pavlodar (stone)","nametype":"Valid","recclass":"H5","reclat":"52.300000","reclong":"77.033330","year":"1938-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.98333,48.53333]},"id":"18176","mass":"40000","name":"Pavlograd","nametype":"Valid","recclass":"L6","reclat":"48.533330","reclong":"35.983330","year":"1826-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[43,52.03333]},"id":"18177","mass":"2000","name":"Pavlovka","nametype":"Valid","recclass":"Howardite","reclat":"52.033330","reclong":"43.000000","year":"1882-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.54217,11.33367]},"id":"18179","name":"Pê","nametype":"Valid","recclass":"L6","reclat":"11.333670","reclong":"-3.542170","year":"1989-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-117.93333,56.13333]},"id":"18180","mass":"45760","name":"Peace River","nametype":"Valid","recclass":"L6","reclat":"56.133330","reclong":"-117.933330","year":"1963-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.25,51.66667]},"id":"18181","mass":"117.8","name":"Peckelsheim","nametype":"Valid","recclass":"Diogenite-pm","reclat":"51.666670","reclong":"9.250000","year":"1953-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"47",":@computed_region_nnqa_25f4":"2185","fall":"Fell","geolocation":{"type":"Point","coordinates":[-73.91667,41.28333]},"id":"18782","mass":"12570","name":"Peekskill","nametype":"Valid","recclass":"H6","reclat":"41.283330","reclong":"-73.916670","year":"1992-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"3062","fall":"Fell","geolocation":{"type":"Point","coordinates":[-103.11667,30.125]},"id":"18786","mass":"70000","name":"Peña Blanca Spring","nametype":"Valid","recclass":"Aubrite","reclat":"30.125000","reclong":"-103.116670","year":"1946-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.5,-10.66667]},"id":"18792","mass":"165","name":"Peramiho","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"-10.666670","reclong":"35.500000","year":"1899-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[91,23.325]},"id":"18793","mass":"23474","name":"Perpeti","nametype":"Valid","recclass":"L6","reclat":"23.325000","reclong":"91.000000","year":"1935-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.43333,56.4]},"id":"18797","mass":"2","name":"Perth","nametype":"Valid","recclass":"LL5","reclat":"56.400000","reclong":"-3.433330","year":"1830-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[39.43333,56.63333]},"id":"18798","mass":"66000","name":"Pervomaisky","nametype":"Valid","recclass":"L6","reclat":"56.633330","reclong":"39.433330","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[66.08333,55.5]},"id":"18799","mass":"3393","name":"Pesyanoe","nametype":"Valid","recclass":"Aubrite","reclat":"55.500000","reclong":"66.083330","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.42,14.052]},"id":"18800","mass":"189","name":"Pétèlkolé","nametype":"Valid","recclass":"H5","reclat":"14.052000","reclong":"0.420000","year":"1995-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"39",":@computed_region_nnqa_25f4":"2017","fall":"Fell","geolocation":{"type":"Point","coordinates":[-86.63333,35.3]},"id":"18801","mass":"1800","name":"Petersburg","nametype":"Valid","recclass":"Eucrite-pmict","reclat":"35.300000","reclong":"-86.633330","year":"1855-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7.33333,53.53333]},"id":"18804","name":"Pettiswood","nametype":"Valid","recclass":"Stone-uncl","reclat":"53.533330","reclong":"-7.333330","year":"1779-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"17",":@computed_region_nnqa_25f4":"1255","fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.25,40]},"id":"18808","mass":"57900","name":"Phillips County (stone)","nametype":"Valid","recclass":"L6","reclat":"40.000000","reclong":"-99.250000","year":"1901-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[108.58333,11.25]},"id":"18809","mass":"500","name":"Phu Hong","nametype":"Valid","recclass":"H4","reclat":"11.250000","reclong":"108.583330","year":"1887-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[105.48333,12]},"id":"18811","mass":"7800","name":"Phum Sambo","nametype":"Valid","recclass":"H4","reclat":"12.000000","reclong":"105.483330","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[108.1,15.71667]},"id":"18812","mass":"11000","name":"Phuoc-Binh","nametype":"Valid","recclass":"L5","reclat":"15.716670","reclong":"108.100000","year":"1941-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.50222,44.24417]},"id":"18813","mass":"13.1","name":"Piancaldoli","nametype":"Valid","recclass":"LL3.4","reclat":"44.244170","reclong":"11.502220","year":"1968-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6.23333,41.36667]},"id":"18816","name":"Picote","nametype":"Valid","recclass":"Stone-uncl","reclat":"41.366670","reclong":"-6.233330","year":"1843-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[25.73333,58.66667]},"id":"18822","mass":"23250","name":"Pillistfer","nametype":"Valid","recclass":"EL6","reclat":"58.666670","reclong":"25.733330","year":"1863-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[73.94167,26.03472]},"id":"18831","mass":"42000","name":"Piplia Kalan","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"26.034720","reclong":"73.941670","year":"1996-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[18.71667,-32.86667]},"id":"18832","mass":"37","name":"Piquetberg","nametype":"Valid","recclass":"H","reclat":"-32.866670","reclong":"18.716670","year":"1881-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[88.45,25.8]},"id":"18834","mass":"842","name":"Pirgunje","nametype":"Valid","recclass":"L6","reclat":"25.800000","reclong":"88.450000","year":"1882-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76,29.58333]},"id":"18835","mass":"1161","name":"Pirthalla","nametype":"Valid","recclass":"H6","reclat":"29.583330","reclong":"76.000000","year":"1884-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"31",":@computed_region_nnqa_25f4":"207","fall":"Fell","geolocation":{"type":"Point","coordinates":[-83.51667,31.95]},"id":"18837","mass":"3760","name":"Pitts","nametype":"Valid","recclass":"Iron, IAB-ung","reclat":"31.950000","reclong":"-83.516670","year":"1921-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"2018","fall":"Fell","geolocation":{"type":"Point","coordinates":[-96.11667,30.7]},"id":"18846","mass":"2085","name":"Plantersville","nametype":"Valid","recclass":"H6","reclat":"30.700000","reclong":"-96.116670","year":"1930-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.70972,45.275]},"id":"51706","mass":"6913","name":"Pleşcoi","nametype":"Valid","recclass":"L5-6","reclat":"45.275000","reclong":"26.709720","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.11667,50.53333]},"id":"18849","mass":"39","name":"Ploschkovitz","nametype":"Valid","recclass":"L5","reclat":"50.533330","reclong":"14.116670","year":"1723-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[104.91667,11.58333]},"id":"18851","mass":"96","name":"Pnompehn","nametype":"Valid","recclass":"L6","reclat":"11.583330","reclong":"104.916670","year":"1868-01-01T00:00:00.000"} -,{"fall":"Found","id":"32592","mass":"290.89999999999998","name":"Dominion Range 03240","nametype":"Valid","recclass":"LL5","year":"2002-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[12.13333,50.93333]},"id":"18853","mass":"3000","name":"Pohlitz","nametype":"Valid","recclass":"L5","reclat":"50.933330","reclong":"12.133330","year":"1819-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.66667,26.71667]},"id":"18858","mass":"350","name":"Pokhra","nametype":"Valid","recclass":"H5","reclat":"26.716670","reclong":"82.666670","year":"1866-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.015,66.34833]},"id":"18860","mass":"253.6","name":"Pollen","nametype":"Valid","recclass":"CM2","reclat":"66.348330","reclong":"14.015000","year":"1942-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-4.31944,53.03639]},"id":"18865","mass":"157","name":"Pontlyfni","nametype":"Valid","recclass":"Winonaite","reclat":"53.036390","reclong":"-4.319440","year":"1931-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"11",":@computed_region_nnqa_25f4":"1987","fall":"Fell","geolocation":{"type":"Point","coordinates":[-103.295,34.175]},"id":"18874","mass":"71400","name":"Portales Valley","nametype":"Valid","recclass":"H6","reclat":"34.175000","reclong":"-103.295000","year":"1998-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-8,38.5]},"id":"18876","mass":"4500","name":"Portugal","nametype":"Valid","recclass":"Stone-uncl","reclat":"38.500000","reclong":"-8.000000","year":"1796-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[118.5,31.41667]},"id":"18879","mass":"665","name":"Po-wang Chen","nametype":"Valid","recclass":"LL","reclat":"31.416670","reclong":"118.500000","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13.94083,48.3025]},"id":"18883","mass":"2125","name":"Prambachkirchen","nametype":"Valid","recclass":"L6","reclat":"48.302500","reclong":"13.940830","year":"1932-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.03333,49.66667]},"id":"18887","mass":"5555","name":"Pribram","nametype":"Valid","recclass":"H5","reclat":"49.666670","reclong":"14.033330","year":"1959-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"38",":@computed_region_nnqa_25f4":"2566","fall":"Fell","geolocation":{"type":"Point","coordinates":[-83.85,39.11667]},"id":"18888","mass":"900","name":"Pricetown","nametype":"Valid","recclass":"L6","reclat":"39.116670","reclong":"-83.850000","year":"1893-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.51667,39.35]},"id":"45984","mass":"500","name":"Puerto Lápice","nametype":"Valid","recclass":"Eucrite-br","reclat":"39.350000","reclong":"-3.516670","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[75.18333,23.36667]},"id":"18899","mass":"560","name":"Pulsora","nametype":"Valid","recclass":"H5","reclat":"23.366670","reclong":"75.183330","year":"1863-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.26667,52.76667]},"id":"18901","mass":"250000","name":"Pultusk","nametype":"Valid","recclass":"H5","reclat":"52.766670","reclong":"21.266670","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.95,13.33333]},"id":"18902","mass":"100","name":"Punganaru","nametype":"Valid","recclass":"Stone-uncl","reclat":"13.333330","reclong":"78.950000","year":"1811-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-53.05,-29.03333]},"id":"18905","mass":"300000","name":"Putinga","nametype":"Valid","recclass":"L6","reclat":"-29.033330","reclong":"-53.050000","year":"1937-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[121.5,32.08333]},"id":"18907","mass":"1275","name":"Qidong","nametype":"Valid","recclass":"L/LL5","reclat":"32.083330","reclong":"121.500000","year":"1982-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[106.46667,26.53333]},"id":"18908","mass":"2600","name":"Qingzhen","nametype":"Valid","recclass":"EH3","reclat":"26.533330","reclong":"106.466670","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[28.7,-30.11667]},"id":"22357","mass":"7000","name":"Queen's Mercy","nametype":"Valid","recclass":"H6","reclat":"-30.116670","reclong":"28.700000","year":"1925-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[95.18333,17.76667]},"id":"22358","mass":"6045","name":"Quenggouk","nametype":"Valid","recclass":"H4","reclat":"17.766670","reclong":"95.183330","year":"1857-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.66667,39]},"id":"22360","mass":"10750","name":"Quesa","nametype":"Valid","recclass":"Iron, IAB-ung","reclat":"39.000000","reclong":"-0.666670","year":"1898-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[126.13333,44.61667]},"id":"22361","mass":"17450","name":"Quija","nametype":"Valid","recclass":"H","reclat":"44.616670","reclong":"126.133330","year":"1990-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.25,46.6]},"id":"22363","mass":"65","name":"Quincay","nametype":"Valid","recclass":"L6","reclat":"46.600000","reclong":"0.250000","year":"1851-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-65.45,-26.66667]},"id":"22368","mass":"5000","name":"Raco","nametype":"Valid","recclass":"H5","reclat":"-26.666670","reclong":"-65.450000","year":"1957-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.465,27.72528]},"id":"22371","mass":"10200","name":"Raghunathpura","nametype":"Valid","recclass":"Iron, IIAB","reclat":"27.725280","reclong":"76.465000","year":"1986-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[70.2,28.225]},"id":"31302","mass":"67225","name":"Rahimyar Khan","nametype":"Valid","recclass":"L5","reclat":"28.225000","reclong":"70.200000","year":"1983-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.03333,52.98333]},"id":"22376","mass":"9000","name":"Rakovka","nametype":"Valid","recclass":"L6","reclat":"52.983330","reclong":"37.033330","year":"1878-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.9,26.45]},"id":"22384","mass":"3766","name":"Ramnagar","nametype":"Valid","recclass":"L6","reclat":"26.450000","reclong":"82.900000","year":"1940-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[87.76667,24.16667]},"id":"22385","mass":"100","name":"Rampurhat","nametype":"Valid","recclass":"LL","reclat":"24.166670","reclong":"87.766670","year":"1916-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[6.93333,51.88333]},"id":"22386","mass":"4682","name":"Ramsdorf","nametype":"Valid","recclass":"L6","reclat":"51.883330","reclong":"6.933330","year":"1958-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[87.08333,23.98333]},"id":"22387","mass":"290.39999999999998","name":"Ranchapur","nametype":"Valid","recclass":"H4","reclat":"23.983330","reclong":"87.083330","year":"1917-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-100.81667,19.86667]},"id":"22390","mass":"300","name":"Rancho de la Presa","nametype":"Valid","recclass":"H5","reclat":"19.866670","reclong":"-100.816670","year":"1899-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[72.01667,25.38333]},"id":"22392","mass":"3224.5","name":"Rangala","nametype":"Valid","recclass":"L6","reclat":"25.383330","reclong":"72.016670","year":"1937-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[115.7,38.2]},"id":"22394","mass":"4910","name":"Raoyang","nametype":"Valid","recclass":"L6","reclat":"38.200000","reclong":"115.700000","year":"1919-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[50.15,26.66667]},"id":"22395","mass":"6.1","name":"Ras Tanura","nametype":"Valid","recclass":"H6","reclat":"26.666670","reclong":"50.150000","year":"1961-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.53333,43.5]},"id":"22396","mass":"24700","name":"Rasgrad","nametype":"Valid","recclass":"Stone-uncl","reclat":"43.500000","reclong":"26.533330","year":"1740-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[17.98333,52.2]},"id":"22398","mass":"910","name":"Ratyn","nametype":"Valid","recclass":"Stone-uncl","reclat":"52.200000","reclong":"17.983330","year":"1880-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"8",":@computed_region_nnqa_25f4":"1391","fall":"Fell","geolocation":{"type":"Point","coordinates":[-119.75812,38.13742]},"id":"53502","mass":"18.41","name":"Red Canyon Lake","nametype":"Valid","recclass":"H5","reclat":"38.137420","reclong":"-119.758120","year":"2007-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-5.33333,42.475]},"id":"22584","mass":"17300","name":"Reliegos","nametype":"Valid","recclass":"L5","reclat":"42.475000","reclong":"-5.333330","year":"1947-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.36667,-6.73333]},"id":"22585","mass":"10000","name":"Rembang","nametype":"Valid","recclass":"Iron, IVA","reclat":"-6.733330","reclong":"111.366670","year":"1919-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.28333,44.76667]},"id":"22586","mass":"1000","name":"Renazzo","nametype":"Valid","recclass":"CR2","reclat":"44.766670","reclong":"11.283330","year":"1824-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-65.28333,-32.75]},"id":"22587","mass":"300","name":"Renca","nametype":"Valid","recclass":"L5","reclat":"-32.750000","reclong":"-65.283330","year":"1925-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[116.13333,38.66667]},"id":"22589","mass":"355","name":"Renqiu","nametype":"Valid","recclass":"L6","reclat":"38.666670","reclong":"116.133330","year":"1916-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[45.66667,48.6]},"id":"22590","mass":"7000","name":"Repeev Khutor","nametype":"Valid","recclass":"Iron, IIF","reclat":"48.600000","reclong":"45.666670","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-118.95,51.33333]},"id":"22592","mass":"1","name":"Revelstoke","nametype":"Valid","recclass":"CI1","reclat":"51.333330","reclong":"-118.950000","year":"1965-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[76.66667,28.2]},"id":"22593","mass":"3332","name":"Rewari","nametype":"Valid","recclass":"L6","reclat":"28.200000","reclong":"76.666670","year":"1929-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"37",":@computed_region_nnqa_25f4":"2388","fall":"Fell","geolocation":{"type":"Point","coordinates":[-83.03333,35.03333]},"id":"22597","mass":"668","name":"Rich Mountain","nametype":"Valid","recclass":"L6","reclat":"35.033330","reclong":"-83.033330","year":"1903-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-66.15,-44.11667]},"id":"24140","mass":"20000","name":"Uzcudun","nametype":"Valid","recclass":"L","reclat":"-44.116670","reclong":"-66.150000","year":"1948-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"3",":@computed_region_nnqa_25f4":"569","fall":"Fell","geolocation":{"type":"Point","coordinates":[-102.31667,46.88333]},"id":"22599","mass":"90000","name":"Richardton","nametype":"Valid","recclass":"H5","reclat":"46.883330","reclong":"-102.316670","year":"1918-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"23",":@computed_region_nnqa_25f4":"2885","fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.03333,31.25]},"id":"22602","mass":"1900","name":"Richland Springs","nametype":"Valid","recclass":"OC","reclat":"31.250000","reclong":"-99.033330","year":"1980-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"40",":@computed_region_nnqa_25f4":"2764","fall":"Fell","geolocation":{"type":"Point","coordinates":[-77.5,37.46667]},"id":"22603","mass":"1800","name":"Richmond","nametype":"Valid","recclass":"LL5","reclat":"37.466670","reclong":"-77.500000","year":"1828-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-49.8,-26.1]},"id":"22611","mass":"1310","name":"Rio Negro","nametype":"Valid","recclass":"L4","reclat":"-26.100000","reclong":"-49.800000","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.51667,45.48333]},"id":"22614","mass":"103.3","name":"Rivolta de Bassi","nametype":"Valid","recclass":"Stone-uncl","reclat":"45.483330","reclong":"9.516670","year":"1491-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"35",":@computed_region_nnqa_25f4":"150","fall":"Fell","geolocation":{"type":"Point","coordinates":[-86.28333,41.08333]},"id":"22637","mass":"340","name":"Rochester","nametype":"Valid","recclass":"H6","reclat":"41.083330","reclong":"-86.283330","year":"1876-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[150.51667,-23.38333]},"id":"22640","mass":"1641","name":"Rockhampton","nametype":"Valid","recclass":"Stone-uncl","reclat":"-23.383330","reclong":"150.516670","year":"1895-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.55,42.3]},"id":"22641","mass":"400","name":"Roda","nametype":"Valid","recclass":"Diogenite","reclat":"42.300000","reclong":"0.550000","year":"1871-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.8,50.35]},"id":"22642","mass":"2900","name":"Rodach","nametype":"Valid","recclass":"Stone-uncl","reclat":"50.350000","reclong":"10.800000","year":"1775-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"50",":@computed_region_nnqa_25f4":"361","fall":"Fell","geolocation":{"type":"Point","coordinates":[-83.95,44.51667]},"id":"22766","mass":"10600","name":"Rose City","nametype":"Valid","recclass":"H5","reclat":"44.516670","reclong":"-83.950000","year":"1921-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-2.51667,52.76667]},"id":"22773","mass":"3500","name":"Rowton","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"52.766670","reclong":"-2.516670","year":"1876-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29.83333,-1.45]},"id":"22780","mass":"465.5","name":"Ruhobobo","nametype":"Valid","recclass":"L6","reclat":"-1.450000","reclong":"29.833330","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[36.53333,0.26667]},"id":"22782","mass":"67","name":"Rumuruti","nametype":"Valid","recclass":"R3.8-6","reclat":"0.266670","reclong":"36.533330","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[38.76667,-10.26667]},"id":"22783","mass":"6000","name":"Rupota","nametype":"Valid","recclass":"L4-6","reclat":"-10.266670","reclong":"38.766670","year":"1949-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[34.5,51.13333]},"id":"22791","mass":"13000","name":"Ryechki","nametype":"Valid","recclass":"L5","reclat":"51.133330","reclong":"34.500000","year":"1914-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.08333,27.43333]},"id":"22792","mass":"1250","name":"Sabetmahet","nametype":"Valid","recclass":"H5","reclat":"27.433330","reclong":"82.083330","year":"1855-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[91.66667,23.08333]},"id":"22793","mass":"478","name":"Sabrum","nametype":"Valid","recclass":"LL6","reclat":"23.083330","reclong":"91.666670","year":"1999-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.88333,51.53333]},"id":"22796","name":"Sagan","nametype":"Valid","recclass":"Stone-uncl","reclat":"51.533330","reclong":"14.883330","year":"1636-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.38333,43.73333]},"id":"23101","mass":"14000","name":"Saint-Sauveur","nametype":"Valid","recclass":"EH5","reclat":"43.733330","reclong":"1.383330","year":"1914-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.23333,45.3]},"id":"23102","mass":"271000","name":"Saint-Séverin","nametype":"Valid","recclass":"LL6","reclat":"45.300000","reclong":"0.233330","year":"1966-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[136.3,35.66667]},"id":"23103","mass":"4180","name":"Sakauchi","nametype":"Valid","recclass":"Iron","reclat":"35.666670","reclong":"136.300000","year":"1913-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"12",":@computed_region_nnqa_25f4":"2409","fall":"Fell","geolocation":{"type":"Point","coordinates":[-122.96944,44.97917]},"id":"23107","mass":"61.4","name":"Salem","nametype":"Valid","recclass":"L6","reclat":"44.979170","reclong":"-122.969440","year":"1981-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[4.63333,46.05]},"id":"23111","mass":"9000","name":"Salles","nametype":"Valid","recclass":"L5","reclat":"46.050000","reclong":"4.633330","year":"1798-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.05,52.75]},"id":"23114","mass":"43","name":"Salzwedel","nametype":"Valid","recclass":"LL5","reclat":"52.750000","reclong":"11.050000","year":"1985-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[74.86667,25.66667]},"id":"23115","mass":"2462","name":"Samelia","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"25.666670","reclong":"74.866670","year":"1921-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"8",":@computed_region_nnqa_25f4":"1174","fall":"Fell","geolocation":{"type":"Point","coordinates":[-117.6625,33.48472]},"id":"23128","mass":"56","name":"San Juan Capistrano","nametype":"Valid","recclass":"H6","reclat":"33.484720","reclong":"-117.662500","year":"1973-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[13,43.66667]},"id":"31315","mass":"237","name":"San Michele","nametype":"Valid","recclass":"L6","reclat":"43.666670","reclong":"13.000000","year":"2002-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-71.4,-31.01667]},"id":"23130","mass":"282","name":"San Pedro de Quiles","nametype":"Valid","recclass":"L6","reclat":"-31.016670","reclong":"-71.400000","year":"1956-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-100.65,19.76667]},"id":"34063","mass":"460","name":"San Pedro Jacuaro","nametype":"Valid","recclass":"LL6","reclat":"19.766670","reclong":"-100.650000","year":"1968-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-51.86667,-29.2]},"id":"23161","mass":"400","name":"Santa Barbara","nametype":"Valid","recclass":"L4","reclat":"-29.200000","reclong":"-51.866670","year":"1873-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-99.33333,24.16667]},"id":"23164","mass":"60","name":"Santa Cruz","nametype":"Valid","recclass":"CM2","reclat":"24.166670","reclong":"-99.333330","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-61.7,-33.9]},"id":"23165","mass":"5500","name":"Santa Isabel","nametype":"Valid","recclass":"L6","reclat":"-33.900000","reclong":"-61.700000","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-68.489444,-31.535556]},"id":"50909","mass":"4000","name":"Santa Lucia (2008)","nametype":"Valid","recclass":"L6","reclat":"-31.535556","reclong":"-68.489444","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-49.38056,-20.81]},"id":"23171","mass":"927","name":"São Jose do Rio Preto","nametype":"Valid","recclass":"H4","reclat":"-20.810000","reclong":"-49.380560","year":"1962-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[46.55,52.55]},"id":"23176","mass":"200000","name":"Saratov","nametype":"Valid","recclass":"L4","reclat":"52.550000","reclong":"46.550000","year":"1918-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[137.78333,34.71667]},"id":"23187","mass":"695","name":"Sasagase","nametype":"Valid","recclass":"H","reclat":"34.716670","reclong":"137.783330","year":"1688-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.85,43.15]},"id":"23188","mass":"4000","name":"Sauguis","nametype":"Valid","recclass":"L6","reclat":"43.150000","reclong":"-0.850000","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[29.86667,47.21667]},"id":"23190","mass":"2500","name":"Savtschenskoje","nametype":"Valid","recclass":"LL4","reclat":"47.216670","reclong":"29.866670","year":"1894-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[139.4,35.86667]},"id":"23192","mass":"430","name":"Sayama","nametype":"Valid","recclass":"CM2","reclat":"35.866670","reclong":"139.400000","year":"1986-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[17.56667,49.23333]},"id":"23455","mass":"412","name":"Sazovice","nametype":"Valid","recclass":"L5","reclat":"49.233330","reclong":"17.566670","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.05,53.35]},"id":"23457","mass":"7000","name":"Schellin","nametype":"Valid","recclass":"L","reclat":"53.350000","reclong":"15.050000","year":"1715-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"47",":@computed_region_nnqa_25f4":"2142","fall":"Fell","geolocation":{"type":"Point","coordinates":[-73.95028,42.86083]},"id":"23458","mass":"283.3","name":"Schenectady","nametype":"Valid","recclass":"H5","reclat":"42.860830","reclong":"-73.950280","year":"1968-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.46667,48.11667]},"id":"23460","mass":"8000","name":"Schönenberg","nametype":"Valid","recclass":"L6","reclat":"48.116670","reclong":"10.466670","year":"1846-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"49",":@computed_region_nnqa_25f4":"1727","fall":"Fell","geolocation":{"type":"Point","coordinates":[-69.2,44.36667]},"id":"23472","mass":"5400","name":"Searsmont","nametype":"Valid","recclass":"H5","reclat":"44.366670","reclong":"-69.200000","year":"1871-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.13333,38.3]},"id":"23473","mass":"240","name":"Sediköy","nametype":"Valid","recclass":"L6","reclat":"38.300000","reclong":"27.133330","year":"1917-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.78333,26.75]},"id":"23476","mass":"6930","name":"Segowlie","nametype":"Valid","recclass":"LL6","reclat":"26.750000","reclong":"84.783330","year":"1853-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[107.33333,-7.23333]},"id":"23481","mass":"1590","name":"Selakopi","nametype":"Valid","recclass":"H5","reclat":"-7.233330","reclong":"107.333330","year":"1939-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[4.98333,22.83333]},"id":"23483","mass":"150","name":"Seldebourak","nametype":"Valid","recclass":"H5","reclat":"22.833330","reclong":"4.983330","year":"1947-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[79,22.25]},"id":"23487","mass":"691","name":"Semarkona","nametype":"Valid","recclass":"LL3.00","reclat":"22.250000","reclong":"79.000000","year":"1940-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-0.05,41.71667]},"id":"23495","mass":"4000","name":"Sena","nametype":"Valid","recclass":"H4","reclat":"41.716670","reclong":"-0.050000","year":"1773-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[140.51167,39.43833]},"id":"23496","mass":"866","name":"Senboku","nametype":"Valid","recclass":"H6","reclat":"39.438330","reclong":"140.511670","year":"1993-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[79.50083,21.68389]},"id":"23500","mass":"20000","name":"Seoni","nametype":"Valid","recclass":"H6","reclat":"21.683890","reclong":"79.500830","year":"1966-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[23.56667,41.05]},"id":"23501","mass":"8500","name":"Seres","nametype":"Valid","recclass":"H4","reclat":"41.050000","reclong":"23.566670","year":"1818-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-36.76667,-8.38333]},"id":"23502","mass":"1800","name":"Serra de Magé","nametype":"Valid","recclass":"Eucrite-cm","reclat":"-8.383330","reclong":"-36.766670","year":"1923-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-44.21667,-19.46667]},"id":"23504","mass":"350","name":"Sete Lagoas","nametype":"Valid","recclass":"H4","reclat":"-19.466670","reclong":"-44.216670","year":"1908-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-6,37.41667]},"id":"23508","mass":"180","name":"Sevilla","nametype":"Valid","recclass":"LL4","reclat":"37.416670","reclong":"-6.000000","year":"1862-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[36.6,50.61667]},"id":"23509","mass":"101000","name":"Sevrukovo","nametype":"Valid","recclass":"L5","reclat":"50.616670","reclong":"36.600000","year":"1874-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.71667,34.75]},"id":"23512","mass":"7000","name":"Sfax","nametype":"Valid","recclass":"L6","reclat":"34.750000","reclong":"10.716670","year":"1989-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[87.3,23.1]},"id":"23521","mass":"4000","name":"Shalka","nametype":"Valid","recclass":"Diogenite","reclat":"23.100000","reclong":"87.300000","year":"1850-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"40",":@computed_region_nnqa_25f4":"921","fall":"Fell","geolocation":{"type":"Point","coordinates":[-76.7,37.83333]},"id":"23525","mass":"1265","name":"Sharps","nametype":"Valid","recclass":"H3.4","reclat":"37.833330","reclong":"-76.700000","year":"1921-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-80.16667,44.05]},"id":"23529","mass":"18600","name":"Shelburne","nametype":"Valid","recclass":"L5","reclat":"44.050000","reclong":"-80.166670","year":"1904-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.83333,24.55]},"id":"23530","mass":"5000","name":"Shergotty","nametype":"Valid","recclass":"Martian (shergottite)","reclat":"24.550000","reclong":"84.833330","year":"1865-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[120.06667,33.65]},"id":"23531","mass":"605","name":"Sheyang","nametype":"Valid","recclass":"L6","reclat":"33.650000","reclong":"120.066670","year":"1976-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[87.5775,25.85]},"id":"23534","mass":"3679.7","name":"Shikarpur","nametype":"Valid","recclass":"L6","reclat":"25.850000","reclong":"87.577500","year":"1921-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[125.66667,43.5]},"id":"23582","mass":"3900","name":"Shuangyang","nametype":"Valid","recclass":"H5","reclat":"43.500000","reclong":"125.666670","year":"1971-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[74.83333,33.71667]},"id":"23583","mass":"5000","name":"Shupiyan","nametype":"Valid","recclass":"H6","reclat":"33.716670","reclong":"74.833330","year":"1912-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[90.16667,24.33333]},"id":"23584","mass":"3200","name":"Shytal","nametype":"Valid","recclass":"L6","reclat":"24.333330","reclong":"90.166670","year":"1863-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[11.6,43.11667]},"id":"23586","mass":"3700","name":"Siena","nametype":"Valid","recclass":"LL5","reclat":"43.116670","reclong":"11.600000","year":"1794-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[134.65333,46.16]},"id":"23593","mass":"23000000","name":"Sikhote-Alin","nametype":"Valid","recclass":"Iron, IIAB","reclat":"46.160000","reclong":"134.653330","year":"1947-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-101.38333,20.93333]},"id":"23594","mass":"1710","name":"Silao","nametype":"Valid","recclass":"H5","reclat":"20.933330","reclong":"-101.383330","year":"1995-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.26667,44.11667]},"id":"55584","mass":"0.15","name":"Silistra","nametype":"Valid","recclass":"Achondrite-ung","reclat":"44.116670","reclong":"27.266670","year":"1917-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[7.53333,49.98333]},"id":"23603","mass":"1222","name":"Simmern","nametype":"Valid","recclass":"H5","reclat":"49.983330","reclong":"7.533330","year":"1920-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[32.48333,30.9]},"id":"23606","mass":"1455","name":"Sinai","nametype":"Valid","recclass":"L6","reclat":"30.900000","reclong":"32.483330","year":"1916-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[69.55,26.21667]},"id":"23611","mass":"8400","name":"Sindhri","nametype":"Valid","recclass":"H5","reclat":"26.216670","reclong":"69.550000","year":"1901-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.2,39.3]},"id":"23613","mass":"2000","name":"Sinnai","nametype":"Valid","recclass":"H6","reclat":"39.300000","reclong":"9.200000","year":"1956-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"19",":@computed_region_nnqa_25f4":"2351","fall":"Fell","geolocation":{"type":"Point","coordinates":[-103.66667,42.58333]},"id":"23614","mass":"4100","name":"Sioux County","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"42.583330","reclong":"-103.666670","year":"1933-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[82.58333,20.91667]},"id":"23616","mass":"1600","name":"Sitathali","nametype":"Valid","recclass":"H5","reclat":"20.916670","reclong":"82.583330","year":"1875-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[36.13583,39.82467]},"id":"23617","mass":"40000","name":"Sivas","nametype":"Valid","recclass":"H6","reclat":"39.824670","reclong":"36.135830","year":"1989-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[119.86667,32.43333]},"id":"23619","mass":"630","name":"Sixiangkou","nametype":"Valid","recclass":"L5","reclat":"32.433330","reclong":"119.866670","year":"1989-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.86667,59.73333]},"id":"23621","mass":"850","name":"Ski","nametype":"Valid","recclass":"L6","reclat":"59.733330","reclong":"10.866670","year":"1848-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.6,45.68333]},"id":"23626","mass":"1708","name":"Slavetic","nametype":"Valid","recclass":"H5","reclat":"45.683330","reclong":"15.600000","year":"1868-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35,55]},"id":"23645","mass":"2750","name":"Slobodka","nametype":"Valid","recclass":"L4","reclat":"55.000000","reclong":"35.000000","year":"1818-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.06667,27.13333]},"id":"23660","mass":"72.900000000000006","name":"Soheria","nametype":"Valid","recclass":"OC","reclat":"27.133330","reclong":"84.066670","year":"1960-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[21.86667,43.66667]},"id":"23661","mass":"80000","name":"Soko-Banja","nametype":"Valid","recclass":"LL4","reclat":"43.666670","reclong":"21.866670","year":"1877-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.73333,47.36667]},"id":"23663","mass":"54","name":"Sologne","nametype":"Valid","recclass":"H5","reclat":"47.366670","reclong":"1.733330","year":"1860-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[22.005,54.00883]},"id":"53829","mass":"1066","name":"Sołtmany","nametype":"Valid","recclass":"L6","reclat":"54.008830","reclong":"22.005000","year":"2011-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[135.33333,35.16667]},"id":"23667","mass":"17100","name":"Sone","nametype":"Valid","recclass":"H5","reclat":"35.166670","reclong":"135.333330","year":"1866-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[125,45.25]},"id":"23668","mass":"36900","name":"Songyuan","nametype":"Valid","recclass":"L6","reclat":"45.250000","reclong":"125.000000","year":"1993-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[23.5,44.41667]},"id":"23670","mass":"958","name":"Sopot","nametype":"Valid","recclass":"OC","reclat":"44.416670","reclong":"23.500000","year":"1927-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[33.63333,1.7]},"id":"23671","mass":"2050","name":"Soroti","nametype":"Valid","recclass":"Iron, ungrouped","reclat":"1.700000","reclong":"33.633330","year":"1945-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[0.05,44.75]},"id":"23081","mass":"360","name":"St. Caprais-de-Quinsac","nametype":"Valid","recclass":"L6","reclat":"44.750000","reclong":"0.050000","year":"1883-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.5,46.95]},"id":"23082","mass":"5500","name":"St. Christophe-la-Chartreuse","nametype":"Valid","recclass":"L6","reclat":"46.950000","reclong":"-1.500000","year":"1841-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.75,51.05]},"id":"23083","mass":"700","name":"St. Denis Westrem","nametype":"Valid","recclass":"L6","reclat":"51.050000","reclong":"3.750000","year":"1855-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-1.15,48.01667]},"id":"23087","mass":"4000","name":"St. Germain-du-Pinel","nametype":"Valid","recclass":"H6","reclat":"48.016670","reclong":"-1.150000","year":"1890-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"18",":@computed_region_nnqa_25f4":"2223","fall":"Fell","geolocation":{"type":"Point","coordinates":[-90.23333,38.7]},"id":"23089","mass":"1000","name":"St. Louis","nametype":"Valid","recclass":"H4","reclat":"38.700000","reclong":"-90.233330","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.41667,-32.01667]},"id":"23090","mass":"13780","name":"St. Mark's","nametype":"Valid","recclass":"EH5","reclat":"-32.016670","reclong":"27.416670","year":"1903-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"45",":@computed_region_nnqa_25f4":"424","fall":"Fell","geolocation":{"type":"Point","coordinates":[-76.38333,38.16667]},"id":"23091","mass":"24.3","name":"St. Mary's County","nametype":"Valid","recclass":"LL3.3","reclat":"38.166670","reclong":"-76.383330","year":"1919-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3.93333,48.45]},"id":"23092","mass":"8300","name":"St. Mesmin","nametype":"Valid","recclass":"LL6","reclat":"48.450000","reclong":"3.933330","year":"1866-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.2,61.65]},"id":"23093","mass":"17000","name":"St. Michel","nametype":"Valid","recclass":"L6","reclat":"61.650000","reclong":"27.200000","year":"1910-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[2.95,43.43333]},"id":"23097","mass":"134.30000000000001","name":"St.-Chinian","nametype":"Valid","recclass":"L6","reclat":"43.433330","reclong":"2.950000","year":"1959-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.95,59.93333]},"id":"23712","mass":"34000","name":"Ställdalen","nametype":"Valid","recclass":"H5","reclat":"59.933330","reclong":"14.950000","year":"1876-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[15.56667,49.28333]},"id":"23713","mass":"52000","name":"Stannern","nametype":"Valid","recclass":"Eucrite-mmict","reclat":"49.283330","reclong":"15.566670","year":"1808-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[41.98333,45.05]},"id":"23717","mass":"1500","name":"Stavropol","nametype":"Valid","recclass":"L6","reclat":"45.050000","reclong":"41.983330","year":"1857-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[3,50.76667]},"id":"23099","mass":"4960","name":"Ste. Marguerite","nametype":"Valid","recclass":"H4","reclat":"50.766670","reclong":"3.000000","year":"1962-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[55.98333,53.66667]},"id":"23724","mass":"325000","name":"Sterlitamak","nametype":"Valid","recclass":"Iron, IIIAB","reclat":"53.666670","reclong":"55.983330","year":"1990-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[9.05,52.53333]},"id":"23726","name":"Stolzenau","nametype":"Valid","recclass":"Stone-uncl","reclat":"52.533330","reclong":"9.050000","year":"1647-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"24",":@computed_region_nnqa_25f4":"1040","fall":"Fell","geolocation":{"type":"Point","coordinates":[-73.13333,41.2]},"id":"23728","mass":"50","name":"Stratford","nametype":"Valid","recclass":"L6","reclat":"41.200000","reclong":"-73.133330","year":"1974-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.25,56.58333]},"id":"23729","mass":"13400","name":"Strathmore","nametype":"Valid","recclass":"L6","reclat":"56.583330","reclong":"-3.250000","year":"1917-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-3.95,50.38333]},"id":"23732","mass":"10400","name":"Stretchleigh","nametype":"Valid","recclass":"Stone-uncl","reclat":"50.383330","reclong":"-3.950000","year":"1623-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-72.97806,45.96861]},"id":"23733","mass":"25400","name":"St-Robert","nametype":"Valid","recclass":"H5","reclat":"45.968610","reclong":"-72.978060","year":"1994-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"15",":@computed_region_nnqa_25f4":"955","fall":"Fell","geolocation":{"type":"Point","coordinates":[-90.66667,36.48333]},"id":"23736","mass":"3500","name":"Success","nametype":"Valid","recclass":"L6","reclat":"36.483330","reclong":"-90.666670","year":"1924-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[16.26333,50.53806]},"id":"23737","mass":"815.3","name":"Suchy Dul","nametype":"Valid","recclass":"L6","reclat":"50.538060","reclong":"16.263330","year":"1969-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[113.46667,31.61667]},"id":"23738","mass":"260000","name":"Suizhou","nametype":"Valid","recclass":"L6","reclat":"31.616670","reclong":"113.466670","year":"1986-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[78.03333,12.66667]},"id":"48951","mass":"110000","name":"Sulagiri","nametype":"Valid","recclass":"LL6","reclat":"12.666670","reclong":"78.033330","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.28333,25.93333]},"id":"23741","mass":"1710.5","name":"Sultanpur","nametype":"Valid","recclass":"L/LL6","reclat":"25.933330","reclong":"84.283330","year":"1916-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[133.16667,44.86667]},"id":"23745","mass":"637","name":"Sungach","nametype":"Valid","recclass":"H5","reclat":"44.866670","reclong":"133.166670","year":"1935-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[84.21667,26.71667]},"id":"23760","mass":"7235","name":"Supuhee","nametype":"Valid","recclass":"H6","reclat":"26.716670","reclong":"84.216670","year":"1865-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"8",":@computed_region_nnqa_25f4":"1187","fall":"Fell","geolocation":{"type":"Point","coordinates":[-120.90806,38.80389]},"id":"55529","mass":"992.5","name":"Sutter's Mill","nametype":"Valid","recclass":"C","reclat":"38.803890","reclong":"-120.908060","year":"2012-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"29",":@computed_region_nnqa_25f4":"1637","fall":"Fell","geolocation":{"type":"Point","coordinates":[-86.2945,33.18836]},"id":"23773","mass":"5560","name":"Sylacauga","nametype":"Valid","recclass":"H4","reclat":"33.188360","reclong":"-86.294500","year":"1954-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[14.65,49.4]},"id":"23776","mass":"7540","name":"Tabor","nametype":"Valid","recclass":"H5","reclat":"49.400000","reclong":"14.650000","year":"1753-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[5.41667,36.18333]},"id":"23778","mass":"9000","name":"Tadjera","nametype":"Valid","recclass":"L5","reclat":"36.183330","reclong":"5.416670","year":"1867-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-134.20139,59.70444]},"id":"23782","mass":"10000","name":"Tagish Lake","nametype":"Valid","recclass":"C2-ung","reclat":"59.704440","reclong":"-134.201390","year":"2000-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[137.305,34.72]},"id":"23784","mass":"1000","name":"Tahara","nametype":"Valid","recclass":"H4/5","reclat":"34.720000","reclong":"137.305000","year":"1991-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[134.9,35.38333]},"id":"23789","mass":"720","name":"Takenouchi","nametype":"Valid","recclass":"H5","reclat":"35.383330","reclong":"134.900000","year":"1880-01-01T00:00:00.000"} -,{"fall":"Fell","id":"23791","mass":"1421","name":"Talampaya","nametype":"Valid","recclass":"Eucrite-cm","year":"1995-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[112.76667,-7.75]},"id":"23795","mass":"10500","name":"Tambakwatu","nametype":"Valid","recclass":"L6","reclat":"-7.750000","reclong":"112.766670","year":"1975-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7.015,31.16333]},"id":"48691","mass":"100000","name":"Tamdakht","nametype":"Valid","recclass":"H5","reclat":"31.163330","reclong":"-7.015000","year":"2008-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[136.23333,35.43333]},"id":"23801","mass":"905","name":"Tané","nametype":"Valid","recclass":"L5","reclat":"35.433330","reclong":"136.233330","year":"1918-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[122.9,45.4]},"id":"23873","mass":"3850","name":"Taonan","nametype":"Valid","recclass":"L5","reclat":"45.400000","reclong":"122.900000","year":"1965-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[10.41667,32.95]},"id":"23884","mass":"12000","name":"Tatahouine","nametype":"Valid","recclass":"Diogenite","reclat":"32.950000","reclong":"10.416670","year":"1931-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[43.73333,19.38333]},"id":"23885","mass":"2500","name":"Tathlith","nametype":"Valid","recclass":"L6","reclat":"19.383330","reclong":"43.733330","year":"1967-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[44.45,35.13333]},"id":"23887","mass":"6000","name":"Tauk","nametype":"Valid","recclass":"L6","reclat":"35.133330","reclong":"44.450000","year":"1929-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[23.5,46.71667]},"id":"23888","mass":"21000","name":"Tauti","nametype":"Valid","recclass":"L6","reclat":"46.716670","reclong":"23.500000","year":"1937-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[142.95,-25.73333]},"id":"23897","mass":"160000","name":"Tenham","nametype":"Valid","recclass":"L6","reclat":"-25.733330","reclong":"142.950000","year":"1879-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[26.95,58.03333]},"id":"23898","mass":"28500","name":"Tennasilm","nametype":"Valid","recclass":"L4","reclat":"58.033330","reclong":"26.950000","year":"1872-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[70.6,33.4]},"id":"23908","mass":"342","name":"Thal","nametype":"Valid","recclass":"H6","reclat":"33.400000","reclong":"70.600000","year":"1950-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[37.15028,-1.00278]},"id":"54493","mass":"14200","name":"Thika","nametype":"Valid","recclass":"L6","reclat":"-1.002780","reclong":"37.150280","year":"2011-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[27.58333,-29.33333]},"id":"23976","mass":"45300","name":"Thuathe","nametype":"Valid","recclass":"H4/5","reclat":"-29.333330","reclong":"27.583330","year":"2002-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[118.99,32.94667]},"id":"23984","mass":"2232","name":"Tianzhang","nametype":"Valid","recclass":"H5","reclat":"32.946670","reclong":"118.990000","year":"1986-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[17.11667,49.6]},"id":"23989","mass":"28000","name":"Tieschitz","nametype":"Valid","recclass":"H/L3.6","reclat":"49.600000","reclong":"17.116670","year":"1878-01-01T00:00:00.000"} -,{":@computed_region_cbhk_fwbd":"34",":@computed_region_nnqa_25f4":"1762","fall":"Fell","geolocation":{"type":"Point","coordinates":[-89.68333,38.2]},"id":"23998","mass":"74800","name":"Tilden","nametype":"Valid","recclass":"L6","reclat":"38.200000","reclong":"-89.683330","year":"1927-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[1.53333,14.25]},"id":"23999","mass":"3000","name":"Tillaberi","nametype":"Valid","recclass":"L6","reclat":"14.250000","reclong":"1.533330","year":"1970-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[35.2,54.5]},"id":"24004","mass":"65500","name":"Timochin","nametype":"Valid","recclass":"H5","reclat":"54.500000","reclong":"35.200000","year":"1807-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[79.41667,13.63333]},"id":"24009","mass":"230","name":"Tirupati","nametype":"Valid","recclass":"H6","reclat":"13.633330","reclong":"79.416670","year":"1934-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[-7.61123,29.48195]},"id":"54823","mass":"7000","name":"Tissint","nametype":"Valid","recclass":"Martian (shergottite)","reclat":"29.481950","reclong":"-7.611230","year":"2011-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[111.53333,-7.08333]},"id":"24011","mass":"20000","name":"Tjabe","nametype":"Valid","recclass":"H6","reclat":"-7.083330","reclong":"111.533330","year":"1869-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[106.58333,-6.66667]},"id":"24012","mass":"16500","name":"Tjerebon","nametype":"Valid","recclass":"L5","reclat":"-6.666670","reclong":"106.583330","year":"1922-01-01T00:00:00.000"} -,{"fall":"Fell","geolocation":{"type":"Point","coordinates":[34.76667,47.85]},"id":"24019","mass":"600","name":"Tomakovka","nametype":"Valid","recclass":"LL6","reclat":"47.850000","reclong":"34.766670","year":"1905-01-01T00:00:00.000"}] +[ + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.08333, 50.775] }, + "id": "1", + "mass": "21", + "name": "Aachen", + "nametype": "Valid", + "recclass": "L5", + "reclat": "50.775000", + "reclong": "6.083330", + "year": "1880-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.23333, 56.18333] }, + "id": "2", + "mass": "720", + "name": "Aarhus", + "nametype": "Valid", + "recclass": "H6", + "reclat": "56.183330", + "reclong": "10.233330", + "year": "1951-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-113, 54.21667] }, + "id": "6", + "mass": "107000", + "name": "Abee", + "nametype": "Valid", + "recclass": "EH4", + "reclat": "54.216670", + "reclong": "-113.000000", + "year": "1952-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.9, 16.88333] }, + "id": "10", + "mass": "1914", + "name": "Acapulco", + "nametype": "Valid", + "recclass": "Acapulcoite", + "reclat": "16.883330", + "reclong": "-99.900000", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-64.95, -33.16667] }, + "id": "370", + "mass": "780", + "name": "Achiras", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-33.166670", + "reclong": "-64.950000", + "year": "1902-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [71.8, 32.1] }, + "id": "379", + "mass": "4239", + "name": "Adhi Kot", + "nametype": "Valid", + "recclass": "EH4", + "reclat": "32.100000", + "reclong": "71.800000", + "year": "1919-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [95.16667, 44.83333] }, + "id": "390", + "mass": "910", + "name": "Adzhi-Bogdo (stone)", + "nametype": "Valid", + "recclass": "LL3-6", + "reclat": "44.833330", + "reclong": "95.166670", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.61667, 44.21667] }, + "id": "392", + "mass": "30000", + "name": "Agen", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.216670", + "reclong": "0.616670", + "year": "1814-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-65.23333, -31.6] }, + "id": "398", + "mass": "1620", + "name": "Aguada", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-31.600000", + "reclong": "-65.233330", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-64.55, -30.86667] }, + "id": "417", + "mass": "1440", + "name": "Aguila Blanca", + "nametype": "Valid", + "recclass": "L", + "reclat": "-30.866670", + "reclong": "-64.550000", + "year": "1920-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-9.57028, 16.39806] }, + "id": "423", + "mass": "1000", + "name": "Aioun el Atrouss", + "nametype": "Valid", + "recclass": "Diogenite-pm", + "reclat": "16.398060", + "reclong": "-9.570280", + "year": "1974-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.38333, 19.08333] }, + "id": "424", + "mass": "24000", + "name": "Aïr", + "nametype": "Valid", + "recclass": "L6", + "reclat": "19.083330", + "reclong": "8.383330", + "year": "1925-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [2.33333, 50.66667] }, + "id": "425", + "name": "Aire-sur-la-Lys", + "nametype": "Valid", + "recclass": "Unknown", + "reclat": "50.666670", + "reclong": "2.333330", + "year": "1769-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.05, 29.51667] }, + "id": "426", + "mass": "779", + "name": "Akaba", + "nametype": "Valid", + "recclass": "L6", + "reclat": "29.516670", + "reclong": "35.050000", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.95, 29.71667] }, + "id": "427", + "mass": "1800", + "name": "Akbarpur", + "nametype": "Valid", + "recclass": "H4", + "reclat": "29.716670", + "reclong": "77.950000", + "year": "1838-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.43333, 8.91667] }, + "id": "432", + "mass": "3000", + "name": "Akwanga", + "nametype": "Valid", + "recclass": "H", + "reclat": "8.916670", + "reclong": "8.433330", + "year": "1959-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [42.81667, 39.91667] }, + "id": "433", + "mass": "50000", + "name": "Akyumak", + "nametype": "Valid", + "recclass": "Iron, IVA", + "reclat": "39.916670", + "reclong": "42.816670", + "year": "1981-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [39.51667, 24.41667] }, + "id": "446", + "mass": "160", + "name": "Al Rais", + "nametype": "Valid", + "recclass": "CR2-an", + "reclat": "24.416670", + "reclong": "39.516670", + "year": "1957-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [28.96, 13.66033] }, + "id": "447", + "mass": "700", + "name": "Al Zarnkh", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "13.660330", + "reclong": "28.960000", + "year": "2001-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [4.08333, 44.11667] }, + "id": "448", + "mass": "6000", + "name": "Alais", + "nametype": "Valid", + "recclass": "CI1", + "reclat": "44.116670", + "reclong": "4.083330", + "year": "1806-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.01667, 44.65] }, + "id": "453", + "mass": "2000", + "name": "Albareto", + "nametype": "Valid", + "recclass": "L/LL4", + "reclat": "44.650000", + "reclong": "11.016670", + "year": "1766-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.66667, 2] }, + "id": "454", + "mass": "625", + "name": "Alberta", + "nametype": "Valid", + "recclass": "L", + "reclat": "2.000000", + "reclong": "22.666670", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.01533, 45.82133] }, + "id": "458", + "mass": "252", + "name": "Alby sur Chéran", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "45.821330", + "reclong": "6.015330", + "year": "2002-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.78333, 51.78333] }, + "id": "461", + "mass": "700", + "name": "Aldsworth", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "51.783330", + "reclong": "-1.783330", + "year": "1835-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.13333, 36.23333] }, + "id": "462", + "mass": "3200", + "name": "Aleppo", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.233330", + "reclong": "37.133330", + "year": "1873-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.75, 44.88333] }, + "id": "463", + "mass": "908", + "name": "Alessandria", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.883330", + "reclong": "8.750000", + "year": "1860-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.81667, 50.95] }, + "id": "465", + "mass": "9251", + "name": "Alexandrovsky", + "nametype": "Valid", + "recclass": "H4", + "reclat": "50.950000", + "reclong": "31.816670", + "year": "1900-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.15, 45.26667] }, + "id": "466", + "mass": "228000", + "name": "Alfianello", + "nametype": "Valid", + "recclass": "L6", + "reclat": "45.266670", + "reclong": "10.150000", + "year": "1883-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "50", + ":@computed_region_nnqa_25f4": "429", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-85.88333, 42.53333] }, + "id": "2276", + "mass": "32000", + "name": "Allegan", + "nametype": "Valid", + "recclass": "H5", + "reclat": "42.533330", + "reclong": "-85.883330", + "year": "1899-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-105.31667, 26.96667] }, + "id": "2278", + "mass": "2000000", + "name": "Allende", + "nametype": "Valid", + "recclass": "CV3", + "reclat": "26.966670", + "reclong": "-105.316670", + "year": "1969-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [32.41275, 20.74575] }, + "id": "48915", + "mass": "3950", + "name": "Almahata Sitta", + "nametype": "Valid", + "recclass": "Ureilite-an", + "reclat": "20.745750", + "reclong": "32.412750", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [44.21556, 35.27333] }, + "id": "2284", + "mass": "6000", + "name": "Alta'ameem", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "35.273330", + "reclong": "44.215560", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.25, 27.66667] }, + "id": "2290", + "mass": "6400", + "name": "Ambapur Nagla", + "nametype": "Valid", + "recclass": "H5", + "reclat": "27.666670", + "reclong": "78.250000", + "year": "1895-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [85.56667, 26.58333] }, + "id": "2294", + "mass": "2700", + "name": "Andhara", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "26.583330", + "reclong": "85.566670", + "year": "1880-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "49", + ":@computed_region_nnqa_25f4": "1723", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-70.75, 44.61667] }, + "id": "2295", + "mass": "3200", + "name": "Andover", + "nametype": "Valid", + "recclass": "L6", + "reclat": "44.616670", + "reclong": "-70.750000", + "year": "1898-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.5, 48.7] }, + "id": "2296", + "mass": "600", + "name": "Andreevka", + "nametype": "Valid", + "recclass": "L3", + "reclat": "48.700000", + "reclong": "37.500000", + "year": "1969-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.86667, 20.88333] }, + "id": "2298", + "mass": "17900", + "name": "Andura", + "nametype": "Valid", + "recclass": "H6", + "reclat": "20.883330", + "reclong": "76.866670", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Found", + "geolocation": { "type": "Point", "coordinates": [0, 0] }, + "id": "50693", + "mass": "256.8", + "name": "Northwest Africa 5815", + "nametype": "Valid", + "recclass": "L5", + "reclat": "0.000000", + "reclong": "0.000000" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.55, 47.46667] }, + "id": "2301", + "name": "Angers", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.466670", + "reclong": "-0.550000", + "year": "1822-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-44.31667, -22.96667] }, + "id": "2302", + "mass": "1500", + "name": "Angra dos Reis (stone)", + "nametype": "Valid", + "recclass": "Angrite", + "reclat": "-22.966670", + "reclong": "-44.316670", + "year": "1869-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [39.71667, 9.53333] }, + "id": "2304", + "mass": "6500", + "name": "Ankober", + "nametype": "Valid", + "recclass": "H4", + "reclat": "9.533330", + "reclong": "39.716670", + "year": "1942-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [105.18333, 25.15] }, + "id": "2305", + "mass": "2500", + "name": "Anlong", + "nametype": "Valid", + "recclass": "H5", + "reclat": "25.150000", + "reclong": "105.183330", + "year": "1971-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [140.78556, 40.81056] }, + "id": "2313", + "mass": "320", + "name": "Aomori", + "nametype": "Valid", + "recclass": "L6", + "reclat": "40.810560", + "reclong": "140.785560", + "year": "1984-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-2.71667, 53.58333] }, + "id": "2318", + "mass": "15000", + "name": "Appley Bridge", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "53.583330", + "reclong": "-2.716670", + "year": "1914-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.38333, 43.86667] }, + "id": "2320", + "mass": "3200", + "name": "Apt", + "nametype": "Valid", + "recclass": "L6", + "reclat": "43.866670", + "reclong": "5.383330", + "year": "1803-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-66, -33] }, + "id": "2325", + "mass": "810", + "name": "Arbol Solo", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-33.000000", + "reclong": "-66.000000", + "year": "1954-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "18", + ":@computed_region_nnqa_25f4": "2697", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-94.3, 38.5] }, + "id": "2329", + "mass": "5070", + "name": "Archie", + "nametype": "Valid", + "recclass": "H6", + "reclat": "38.500000", + "reclong": "-94.300000", + "year": "1932-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-60.66667, -31.41667] }, + "id": "2340", + "mass": "7450", + "name": "Arroyo Aguiar", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-31.416670", + "reclong": "-60.666670", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.03333, 42.45] }, + "id": "2345", + "mass": "41", + "name": "Asco", + "nametype": "Valid", + "recclass": "H6", + "reclat": "42.450000", + "reclong": "9.033330", + "year": "1805-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "774", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-97.01, 31.805] }, + "id": "48954", + "mass": "9500", + "name": "Ash Creek", + "nametype": "Valid", + "recclass": "L6", + "reclat": "31.805000", + "reclong": "-97.010000", + "year": "2009-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.3, 52.05] }, + "id": "2346", + "mass": "1300", + "name": "Ashdon", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.050000", + "reclong": "0.300000", + "year": "1923-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.55, 43.03333] }, + "id": "2353", + "mass": "2000", + "name": "Assisi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.033330", + "reclong": "12.550000", + "year": "1886-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [80.625, 25.25417] }, + "id": "4883", + "mass": "1280", + "name": "Atarra", + "nametype": "Valid", + "recclass": "L4", + "reclat": "25.254170", + "reclong": "80.625000", + "year": "1920-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-103.66667, 20.06667] }, + "id": "4884", + "mass": "94.2", + "name": "Atemajac", + "nametype": "Valid", + "recclass": "L6", + "reclat": "20.066670", + "reclong": "-103.666670", + "year": "1896-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "29", + ":@computed_region_nnqa_25f4": "3134", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-87, 34.75] }, + "id": "4885", + "mass": "265", + "name": "Athens", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "34.750000", + "reclong": "-87.000000", + "year": "1933-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "20", + ":@computed_region_nnqa_25f4": "602", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-96.15, 34.31667] }, + "id": "4888", + "mass": "1384.2", + "name": "Atoka", + "nametype": "Valid", + "recclass": "L6", + "reclat": "34.316670", + "reclong": "-96.150000", + "year": "1945-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.16667, 44.38333] }, + "id": "4893", + "mass": "800", + "name": "Aubres", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "44.383330", + "reclong": "5.166670", + "year": "1836-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.66667, 36.16667] }, + "id": "4899", + "mass": "50000", + "name": "Aumale", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.166670", + "reclong": "3.666670", + "year": "1865-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.23333, 44.33333] }, + "id": "4900", + "mass": "2000", + "name": "Aumieres", + "nametype": "Valid", + "recclass": "L6", + "reclat": "44.333330", + "reclong": "3.233330", + "year": "1842-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.58333, 43.08333] }, + "id": "4903", + "mass": "50000", + "name": "Ausson", + "nametype": "Valid", + "recclass": "L5", + "reclat": "43.083330", + "reclong": "0.583330", + "year": "1858-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-49.95083, -21.46028] }, + "id": "4905", + "mass": "9330", + "name": "Avanhandava", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-21.460280", + "reclong": "-49.950830", + "year": "1952-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.5, 46] }, + "id": "4906", + "mass": "1230", + "name": "Avce", + "nametype": "Valid", + "recclass": "Iron, IIAB", + "reclat": "46.000000", + "reclong": "13.500000", + "year": "1908-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-103.5, 25] }, + "id": "4907", + "mass": "146", + "name": "Avilez", + "nametype": "Valid", + "recclass": "H", + "reclat": "25.000000", + "reclong": "-103.500000", + "year": "1855-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [32.83333, 2.71667] }, + "id": "4910", + "mass": "134", + "name": "Awere", + "nametype": "Valid", + "recclass": "L4", + "reclat": "2.716670", + "reclong": "32.833330", + "year": "1968-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "11", + ":@computed_region_nnqa_25f4": "1989", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-108, 36.8] }, + "id": "4913", + "mass": "2830", + "name": "Aztec", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.800000", + "reclong": "-108.000000", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [38, 48.6] }, + "id": "4917", + "mass": "18000", + "name": "Bachmut", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.600000", + "reclong": "38.000000", + "year": "1814-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.5, 28.48333] }, + "id": "4922", + "mass": "10322", + "name": "Bahjoi", + "nametype": "Valid", + "recclass": "Iron, IAB-sLL", + "reclat": "28.483330", + "reclong": "78.500000", + "year": "1934-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "2373", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-82.48333, 35.96667] }, + "id": "4925", + "mass": "3700", + "name": "Bald Mountain", + "nametype": "Valid", + "recclass": "L4", + "reclat": "35.966670", + "reclong": "-82.483330", + "year": "1929-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "32", + ":@computed_region_nnqa_25f4": "495", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-88.66667, 34.5] }, + "id": "4926", + "mass": "345", + "name": "Baldwyn", + "nametype": "Valid", + "recclass": "L6", + "reclat": "34.500000", + "reclong": "-88.666670", + "year": "1922-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.38333, 5.38333] }, + "id": "4928", + "mass": "1000", + "name": "Bali", + "nametype": "Valid", + "recclass": "CV3", + "reclat": "5.383330", + "reclong": "16.383330", + "year": "1907-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [101.18333, 16.66667] }, + "id": "4934", + "mass": "16700", + "name": "Ban Rong Du", + "nametype": "Valid", + "recclass": "Iron, ungrouped", + "reclat": "16.666670", + "reclong": "101.183330", + "year": "1993-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [107.6, -6.91667] }, + "id": "4935", + "mass": "11500", + "name": "Bandong", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "-6.916670", + "reclong": "107.600000", + "year": "1871-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.33333, 27.7] }, + "id": "4936", + "mass": "15000", + "name": "Bansur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "27.700000", + "reclong": "76.333330", + "year": "1892-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.2, 30.4] }, + "id": "4937", + "mass": "14", + "name": "Banswal", + "nametype": "Valid", + "recclass": "L5", + "reclat": "30.400000", + "reclong": "78.200000", + "year": "1913-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [106, -6.33333] }, + "id": "4938", + "mass": "629", + "name": "Banten", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "-6.333330", + "reclong": "106.000000", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.05, 43.95] }, + "id": "4942", + "mass": "6400", + "name": "Barbotan", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.950000", + "reclong": "-0.050000", + "year": "1790-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [2.16667, 41.36667] }, + "id": "4944", + "name": "Barcelona (stone)", + "nametype": "Valid", + "recclass": "OC", + "reclat": "41.366670", + "reclong": "2.166670", + "year": "1704-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-2.5, 42.38333] }, + "id": "4946", + "mass": "3200", + "name": "Barea", + "nametype": "Valid", + "recclass": "Mesosiderite-A1", + "reclat": "42.383330", + "reclong": "-2.500000", + "year": "1842-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.08333, 52.73333] }, + "id": "4947", + "mass": "23.2", + "name": "Barnaul", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.733330", + "reclong": "84.083330", + "year": "1904-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.1, 52] }, + "id": "4948", + "mass": "17", + "name": "Barntrup", + "nametype": "Valid", + "recclass": "LL4", + "reclat": "52.000000", + "reclong": "9.100000", + "year": "1886-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.8, 31.61667] }, + "id": "4949", + "mass": "4500", + "name": "Baroti", + "nametype": "Valid", + "recclass": "L6", + "reclat": "31.616670", + "reclong": "76.800000", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.33972, 52.56528] }, + "id": "4954", + "mass": "44000", + "name": "Barwell", + "nametype": "Valid", + "recclass": "L5", + "reclat": "52.565280", + "reclong": "-1.339720", + "year": "1965-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-5.9, 15.78333] }, + "id": "44876", + "mass": "29560", + "name": "Bassikounou", + "nametype": "Valid", + "recclass": "H5", + "reclat": "15.783330", + "reclong": "-5.900000", + "year": "2006-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [20.93583, 52.03333] }, + "id": "4957", + "mass": "15500", + "name": "Baszkówka", + "nametype": "Valid", + "recclass": "L5", + "reclat": "52.033330", + "reclong": "20.935830", + "year": "1994-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "21", + ":@computed_region_nnqa_25f4": "662", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-98.31667, 45.41667] }, + "id": "4974", + "mass": "21000", + "name": "Bath", + "nametype": "Valid", + "recclass": "H4", + "reclat": "45.416670", + "reclong": "-98.316670", + "year": "1892-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "36", + ":@computed_region_nnqa_25f4": "1921", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-83.75, 38.25] }, + "id": "4975", + "mass": "86000", + "name": "Bath Furnace", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.250000", + "reclong": "-83.750000", + "year": "1902-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "10", + ":@computed_region_nnqa_25f4": "2397", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-117.18913, 40.66813] }, + "id": "56133", + "mass": "2900", + "name": "Battle Mountain", + "nametype": "Valid", + "recclass": "L6", + "reclat": "40.668130", + "reclong": "-117.189130", + "year": "2012-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.18333, 11.08333] }, + "id": "4976", + "mass": "1557", + "name": "Bawku", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "11.083330", + "reclong": "-0.183330", + "year": "1989-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "18", + ":@computed_region_nnqa_25f4": "2216", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-93.5, 36.75] }, + "id": "4977", + "mass": "611", + "name": "Baxter", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.750000", + "reclong": "-93.500000", + "year": "1916-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "17", + ":@computed_region_nnqa_25f4": "1285", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-101.2, 39.8] }, + "id": "4984", + "mass": "16000", + "name": "Beardsley", + "nametype": "Valid", + "recclass": "H5", + "reclat": "39.800000", + "reclong": "-101.200000", + "year": "1929-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-117.33333, 51.16667] }, + "id": "4986", + "mass": "14000", + "name": "Beaver Creek", + "nametype": "Valid", + "recclass": "H5", + "reclat": "51.166670", + "reclong": "-117.333330", + "year": "1893-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-4.1, 53.01667] }, + "id": "4993", + "mass": "794", + "name": "Beddgelert", + "nametype": "Valid", + "recclass": "H5", + "reclat": "53.016670", + "reclong": "-4.100000", + "year": "1949-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "1978", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-96.46667, 33.6] }, + "id": "5005", + "mass": "375", + "name": "Bells", + "nametype": "Valid", + "recclass": "C2-ung", + "reclat": "33.600000", + "reclong": "-96.466670", + "year": "1961-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-64.86667, -32.33333] }, + "id": "5009", + "name": "Belville", + "nametype": "Valid", + "recclass": "OC", + "reclat": "-32.333330", + "reclong": "-64.866670", + "year": "1937-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.91667, 25.36667] }, + "id": "5011", + "mass": "3700", + "name": "Benares (a)", + "nametype": "Valid", + "recclass": "LL4", + "reclat": "25.366670", + "reclong": "82.916670", + "year": "1798-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-8.15, 32.25] }, + "id": "30443", + "mass": "25000", + "name": "Benguerir", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "32.250000", + "reclong": "-8.150000", + "year": "2004-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.8, 32.86667] }, + "id": "5018", + "mass": "19000", + "name": "Beni M'hira", + "nametype": "Valid", + "recclass": "L6", + "reclat": "32.866670", + "reclong": "10.800000", + "year": "2001-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "34", + ":@computed_region_nnqa_25f4": "1869", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-89.15, 39.08333] }, + "id": "5021", + "mass": "1770.5", + "name": "Benld", + "nametype": "Valid", + "recclass": "H6", + "reclat": "39.083330", + "reclong": "-89.150000", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [28.41667, -26.16667] }, + "id": "5023", + "mass": "3880", + "name": "Benoni", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-26.166670", + "reclong": "28.416670", + "year": "1943-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7, 30] }, + "id": "5024", + "mass": "45000", + "name": "Bensour", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "30.000000", + "reclong": "-7.000000", + "year": "2002-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-67.55, 45.95] }, + "id": "5026", + "mass": "2840", + "name": "Benton", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "45.950000", + "reclong": "-67.550000", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-58.32833, -31.91] }, + "id": "48975", + "mass": "270", + "name": "Berduc", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-31.910000", + "reclong": "-58.328330", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.65, 11.65] }, + "id": "5028", + "mass": "18000", + "name": "Béréba", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "11.650000", + "reclong": "-3.650000", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.8, 41.68333] }, + "id": "5029", + "mass": "1440", + "name": "Berlanguillas", + "nametype": "Valid", + "recclass": "L6", + "reclat": "41.683330", + "reclong": "-3.800000", + "year": "1811-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "9", + ":@computed_region_nnqa_25f4": "1072", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-105.02325, 40.30583] }, + "id": "47355", + "mass": "960", + "name": "Berthoud", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "40.305830", + "reclong": "-105.023250", + "year": "2004-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "47", + ":@computed_region_nnqa_25f4": "2030", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-73.83333, 42.53333] }, + "id": "5032", + "mass": "13.9", + "name": "Bethlehem", + "nametype": "Valid", + "recclass": "H", + "reclat": "42.533330", + "reclong": "-73.833330", + "year": "1859-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.23333, 43.21667] }, + "id": "5034", + "mass": "2000", + "name": "Beuste", + "nametype": "Valid", + "recclass": "L5", + "reclat": "43.216670", + "reclong": "-0.233330", + "year": "1859-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.5, 33.88333] }, + "id": "5035", + "mass": "1100", + "name": "Beyrout", + "nametype": "Valid", + "recclass": "LL3.8", + "reclat": "33.883330", + "reclong": "35.500000", + "year": "1921-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [74.83333, 20.88333] }, + "id": "5037", + "mass": "18", + "name": "Bhagur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "20.883330", + "reclong": "74.833330", + "year": "1877-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [73.11528, 26.50833] }, + "id": "36591", + "mass": "678", + "name": "Bhawad", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "26.508330", + "reclong": "73.115280", + "year": "2002-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [71.46667, 20.83333] }, + "id": "5039", + "mass": "100", + "name": "Bherai", + "nametype": "Valid", + "recclass": "L6", + "reclat": "20.833330", + "reclong": "71.466670", + "year": "1893-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [90.65, 22.68333] }, + "id": "5040", + "mass": "1047", + "name": "Bhola", + "nametype": "Valid", + "recclass": "LL3-6", + "reclat": "22.683330", + "reclong": "90.650000", + "year": "1940-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [86.9, 22.08333] }, + "id": "5041", + "mass": "2500", + "name": "Bholghati", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "22.083330", + "reclong": "86.900000", + "year": "1905-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [23.2, 53.1] }, + "id": "5042", + "mass": "4000", + "name": "Bialystok", + "nametype": "Valid", + "recclass": "Eucrite-pmict", + "reclat": "53.100000", + "reclong": "23.200000", + "year": "1827-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.16667, 50.13333] }, + "id": "5043", + "mass": "1900", + "name": "Bielokrynitschie", + "nametype": "Valid", + "recclass": "H4", + "reclat": "50.133330", + "reclong": "27.166670", + "year": "1887-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.08333, 12.45] }, + "id": "5045", + "mass": "25000", + "name": "Bilanga", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "12.450000", + "reclong": "-0.083330", + "year": "1999-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.67639, -33.15639] }, + "id": "5051", + "mass": "488.1", + "name": "Binningup", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-33.156390", + "reclong": "115.676390", + "year": "1984-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.3, 13.76667] }, + "id": "5056", + "mass": "560", + "name": "Birni N'konni", + "nametype": "Valid", + "recclass": "H4", + "reclat": "13.766670", + "reclong": "5.300000", + "year": "1923-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "33", + ":@computed_region_nnqa_25f4": "657", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-80.28333, 34.16667] }, + "id": "5059", + "mass": "6000", + "name": "Bishopville", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "34.166670", + "reclong": "-80.283330", + "year": "1843-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.6, 25.38333] }, + "id": "5060", + "mass": "1039", + "name": "Bishunpur", + "nametype": "Valid", + "recclass": "LL3.15", + "reclat": "25.383330", + "reclong": "82.600000", + "year": "1895-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.16667, 49.78333] }, + "id": "5063", + "mass": "1850", + "name": "Bjelaja Zerkov", + "nametype": "Valid", + "recclass": "H6", + "reclat": "49.783330", + "reclong": "30.166670", + "year": "1796-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25.8, 60.4] }, + "id": "5064", + "mass": "330000", + "name": "Bjurböle", + "nametype": "Valid", + "recclass": "L/LL4", + "reclat": "60.400000", + "reclong": "25.800000", + "year": "1899-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "48", + ":@computed_region_nnqa_25f4": "2495", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-78.08333, 40.91667] }, + "id": "5065", + "mass": "705", + "name": "Black Moshannan Park", + "nametype": "Valid", + "recclass": "L5", + "reclat": "40.916670", + "reclong": "-78.083330", + "year": "1941-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "20", + ":@computed_region_nnqa_25f4": "2164", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-97.33333, 36.83333] }, + "id": "5068", + "mass": "2381", + "name": "Blackwell", + "nametype": "Valid", + "recclass": "L5", + "reclat": "36.833330", + "reclong": "-97.333330", + "year": "1906-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "3063", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-98.83333, 31.83333] }, + "id": "5071", + "mass": "5100", + "name": "Blanket", + "nametype": "Valid", + "recclass": "L6", + "reclat": "31.833330", + "reclong": "-98.833330", + "year": "1909-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.63333, 49.36667] }, + "id": "5072", + "mass": "470", + "name": "Blansko", + "nametype": "Valid", + "recclass": "H6", + "reclat": "49.366670", + "reclong": "16.633330", + "year": "1833-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "34", + ":@computed_region_nnqa_25f4": "1795", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-89.00417, 40.48] }, + "id": "5076", + "mass": "67.8", + "name": "Bloomington", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "40.480000", + "reclong": "-89.004170", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.83333, 33.83333] }, + "id": "5090", + "mass": "7500", + "name": "Bo Xian", + "nametype": "Valid", + "recclass": "LL3.9", + "reclat": "33.833330", + "reclong": "115.833330", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-102, 23] }, + "id": "5093", + "mass": "56", + "name": "Bocas", + "nametype": "Valid", + "recclass": "L6", + "reclat": "23.000000", + "reclong": "-102.000000", + "year": "1804-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.7, 12.5] }, + "id": "5097", + "mass": "8800", + "name": "Bogou", + "nametype": "Valid", + "recclass": "Iron, IAB-MG", + "reclat": "12.500000", + "reclong": "0.700000", + "year": "1962-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [131.63333, 44.55] }, + "id": "5098", + "mass": "256000", + "name": "Boguslavka", + "nametype": "Valid", + "recclass": "Iron, IIAB", + "reclat": "44.550000", + "reclong": "131.633330", + "year": "1916-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.05, 44.86667] }, + "id": "5110", + "mass": "1676", + "name": "Borgo San Donino", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "44.866670", + "reclong": "10.050000", + "year": "1808-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.03333, 21.95] }, + "id": "5111", + "mass": "8600", + "name": "Bori", + "nametype": "Valid", + "recclass": "L6", + "reclat": "21.950000", + "reclong": "78.033330", + "year": "1894-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [52.48333, 54.23333] }, + "id": "5112", + "mass": "1342", + "name": "Boriskino", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "54.233330", + "reclong": "52.483330", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [24.28333, 48.15] }, + "id": "5113", + "mass": "7000", + "name": "Borkut", + "nametype": "Valid", + "recclass": "L5", + "reclat": "48.150000", + "reclong": "24.283330", + "year": "1852-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.86667, 55.46667] }, + "id": "5114", + "mass": "500", + "name": "Borodino", + "nametype": "Valid", + "recclass": "H5", + "reclat": "55.466670", + "reclong": "35.866670", + "year": "1812-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.88333, 51.33333] }, + "id": "5117", + "mass": "614", + "name": "Botschetschki", + "nametype": "Valid", + "recclass": "L4", + "reclat": "51.333330", + "reclong": "33.883330", + "year": "1823-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-11.3715, 17.71067] }, + "id": "57168", + "mass": "190", + "name": "Boumdeid (2003)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "17.710670", + "reclong": "-11.371500", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-11.34133, 17.17493] }, + "id": "57167", + "mass": "3599", + "name": "Boumdeid (2011)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "17.174930", + "reclong": "-11.341330", + "year": "2011-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6.33333, 54.56667] }, + "id": "5121", + "mass": "5460", + "name": "Bovedy", + "nametype": "Valid", + "recclass": "L3", + "reclat": "54.566670", + "reclong": "-6.333330", + "year": "1969-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "48", + ":@computed_region_nnqa_25f4": "2455", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-80.08333, 40.5] }, + "id": "5128", + "mass": "762", + "name": "Bradford Woods", + "nametype": "Valid", + "recclass": "L", + "reclat": "40.500000", + "reclong": "-80.083330", + "year": "1886-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.3, 50.6] }, + "id": "5133", + "mass": "39000", + "name": "Braunau", + "nametype": "Valid", + "recclass": "Iron, IIAB", + "reclat": "50.600000", + "reclong": "16.300000", + "year": "1847-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.18361, 50.66694] }, + "id": "5134", + "mass": "1500", + "name": "Breitscheid", + "nametype": "Valid", + "recclass": "H5", + "reclat": "50.666940", + "reclong": "8.183610", + "year": "1956-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.1, 53.4] }, + "id": "5135", + "mass": "7250", + "name": "Bremervörde", + "nametype": "Valid", + "recclass": "H/L3.9", + "reclat": "53.400000", + "reclong": "9.100000", + "year": "1855-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [59.31667, 52.13333] }, + "id": "5140", + "mass": "219", + "name": "Brient", + "nametype": "Valid", + "recclass": "Eucrite-pmict", + "reclat": "52.133330", + "reclong": "59.316670", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-112.88333, 53.9] }, + "id": "5156", + "mass": "303000", + "name": "Bruderheim", + "nametype": "Valid", + "recclass": "L6", + "reclat": "53.900000", + "reclong": "-112.883330", + "year": "1960-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [64.60035, 39.77978] }, + "id": "30448", + "mass": "5300", + "name": "Bukhara", + "nametype": "Valid", + "recclass": "CV3", + "reclat": "39.779780", + "reclong": "64.600350", + "year": "2001-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "5163", + "mass": "2250", + "name": "Bulls Run", + "nametype": "Valid", + "recclass": "Iron?", + "year": "1964-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [129.19, -31.35] }, + "id": "48653", + "mass": "324", + "name": "Bunburra Rockhole", + "nametype": "Valid", + "recclass": "Eucrite", + "reclat": "-31.350000", + "reclong": "129.190000", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.58333, 10.01667] }, + "id": "5165", + "mass": "357", + "name": "Bununu", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "10.016670", + "reclong": "9.583330", + "year": "1942-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [48, 5] }, + "id": "5169", + "mass": "120000", + "name": "Bur-Gheluai", + "nametype": "Valid", + "recclass": "H5", + "reclat": "5.000000", + "reclong": "48.000000", + "year": "1919-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "36", + ":@computed_region_nnqa_25f4": "256", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-82.23722, 37.62194] }, + "id": "5175", + "mass": "1504", + "name": "Burnwell", + "nametype": "Valid", + "recclass": "H4-an", + "reclat": "37.621940", + "reclong": "-82.237220", + "year": "1990-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29.23333, 40.2] }, + "id": "5177", + "mass": "25000", + "name": "Bursa", + "nametype": "Valid", + "recclass": "L6", + "reclat": "40.200000", + "reclong": "29.233330", + "year": "1946-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25.78333, 46.45] }, + "id": "5178", + "mass": "5000", + "name": "Buschhof", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.450000", + "reclong": "25.783330", + "year": "1863-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.83333, 26.78333] }, + "id": "5181", + "mass": "1500", + "name": "Bustee", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "26.783330", + "reclong": "82.833330", + "year": "1852-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.08333, 27.08333] }, + "id": "5183", + "mass": "29000", + "name": "Butsura", + "nametype": "Valid", + "recclass": "H6", + "reclat": "27.083330", + "reclong": "84.083330", + "year": "1861-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-109.84817, 52.996] }, + "id": "48654", + "mass": "41000", + "name": "Buzzard Coulee", + "nametype": "Valid", + "recclass": "H4", + "reclat": "52.996000", + "reclong": "-109.848170", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.16667, 37.98333] }, + "id": "5185", + "mass": "25000", + "name": "Cabezo de Mayo", + "nametype": "Valid", + "recclass": "L/LL6", + "reclat": "37.983330", + "reclong": "-1.166670", + "year": "1870-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "15", + ":@computed_region_nnqa_25f4": "1029", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-93.5, 35.5] }, + "id": "5186", + "mass": "48500", + "name": "Cabin Creek", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "35.500000", + "reclong": "-93.500000", + "year": "1886-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [20.33333, 43.83889] }, + "id": "5187", + "mass": "212", + "name": "Cacak", + "nametype": "Valid", + "recclass": "OC", + "reclat": "43.838890", + "reclong": "20.333330", + "year": "1919-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-76.51, 3.405] }, + "id": "45976", + "mass": "478", + "name": "Cali", + "nametype": "Valid", + "recclass": "H/L4", + "reclat": "3.405000", + "reclong": "-76.510000", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [122.33333, 11.75] }, + "id": "5200", + "mass": "2400", + "name": "Calivo", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "11.750000", + "reclong": "122.333330", + "year": "1916-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-40.16667, -7.03333] }, + "id": "5249", + "mass": "23680", + "name": "Campos Sales", + "nametype": "Valid", + "recclass": "L5", + "reclat": "-7.033330", + "reclong": "-40.166670", + "year": "1991-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.6, 39.8] }, + "id": "5250", + "mass": "4000", + "name": "Çanakkale", + "nametype": "Valid", + "recclass": "L6", + "reclat": "39.800000", + "reclong": "26.600000", + "year": "1964-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.66667, 41.25] }, + "id": "5251", + "mass": "945", + "name": "Cañellas", + "nametype": "Valid", + "recclass": "H4", + "reclat": "41.250000", + "reclong": "1.666670", + "year": "1861-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-5.15, 43.38333] }, + "id": "5252", + "mass": "34000", + "name": "Cangas de Onis", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.383330", + "reclong": "-5.150000", + "year": "1866-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "9", + ":@computed_region_nnqa_25f4": "1448", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-105.24139, 38.47028] }, + "id": "5253", + "mass": "1400", + "name": "Canon City", + "nametype": "Valid", + "recclass": "H6", + "reclat": "38.470280", + "reclong": "-105.241390", + "year": "1973-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "18", + ":@computed_region_nnqa_25f4": "2695", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-89.58333, 37.26667] }, + "id": "5260", + "mass": "2300", + "name": "Cape Girardeau", + "nametype": "Valid", + "recclass": "H6", + "reclat": "37.266670", + "reclong": "-89.583330", + "year": "1846-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-64.55, -30.88333] }, + "id": "5264", + "mass": "750", + "name": "Capilla del Monte", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-30.883330", + "reclong": "-64.550000", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-69.04389, -16.66444] }, + "id": "45817", + "mass": "342", + "name": "Carancas", + "nametype": "Valid", + "recclass": "H4-5", + "reclat": "-16.664440", + "reclong": "-69.043890", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27, 38.5] }, + "id": "5265", + "mass": "8", + "name": "Caratash", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "38.500000", + "reclong": "27.000000", + "year": "1902-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "648", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-78.06667, 36.08333] }, + "id": "5291", + "mass": "7300", + "name": "Castalia", + "nametype": "Valid", + "recclass": "H5", + "reclat": "36.083330", + "reclong": "-78.066670", + "year": "1874-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.5, 43.35] }, + "id": "5292", + "name": "Castel Berardenga", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "43.350000", + "reclong": "11.500000", + "year": "1791-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "49", + ":@computed_region_nnqa_25f4": "414", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-68.75, 44.38333] }, + "id": "5293", + "mass": "94", + "name": "Castine", + "nametype": "Valid", + "recclass": "L6", + "reclat": "44.383330", + "reclong": "-68.750000", + "year": "1848-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.2, 39.8] }, + "id": "5295", + "mass": "15000", + "name": "Castrovillari", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "39.800000", + "reclong": "16.200000", + "year": "1583-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "637", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-79.25, 36.5] }, + "id": "5296", + "mass": "1360", + "name": "Caswell County", + "nametype": "Valid", + "recclass": "OC", + "reclat": "36.500000", + "reclong": "-79.250000", + "year": "1810-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-105.23333, 26.46667] }, + "id": "5306", + "mass": "1025", + "name": "Ceniceros", + "nametype": "Valid", + "recclass": "L3.7", + "reclat": "26.466670", + "reclong": "-105.233330", + "year": "1988-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "21", + ":@computed_region_nnqa_25f4": "2684", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-96.91667, 43.2] }, + "id": "5307", + "mass": "45.6", + "name": "Centerville", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.200000", + "reclong": "-96.916670", + "year": "1956-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.3, 45.08333] }, + "id": "5308", + "mass": "6460", + "name": "Cereseto", + "nametype": "Valid", + "recclass": "H5", + "reclat": "45.083330", + "reclong": "8.300000", + "year": "1840-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [109.31667, 28.53333] }, + "id": "5313", + "mass": "3700", + "name": "Chadong", + "nametype": "Valid", + "recclass": "L6", + "reclat": "28.533330", + "reclong": "109.316670", + "year": "1998-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [81.66667, 25.36667] }, + "id": "5314", + "mass": "0.5", + "name": "Chail", + "nametype": "Valid", + "recclass": "H6", + "reclat": "25.366670", + "reclong": "81.666670", + "year": "1814-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [83.48333, 25.85] }, + "id": "5315", + "mass": "8200", + "name": "Chainpur", + "nametype": "Valid", + "recclass": "LL3.4", + "reclat": "25.850000", + "reclong": "83.483330", + "year": "1907-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-58.05, -30.78333] }, + "id": "5316", + "mass": "18300", + "name": "Chajari", + "nametype": "Valid", + "recclass": "L5", + "reclat": "-30.783330", + "reclong": "-58.050000", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.01667, 20.26667] }, + "id": "5320", + "mass": "8800", + "name": "Chandakapur", + "nametype": "Valid", + "recclass": "L5", + "reclat": "20.266670", + "reclong": "76.016670", + "year": "1838-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [79.05, 27.28333] }, + "id": "5321", + "mass": "1100", + "name": "Chandpur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "27.283330", + "reclong": "79.050000", + "year": "1885-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.75, 29.08333] }, + "id": "5322", + "mass": "1810", + "name": "Changde", + "nametype": "Valid", + "recclass": "H5", + "reclat": "29.083330", + "reclong": "111.750000", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.05, 46.68333] }, + "id": "5325", + "mass": "31500", + "name": "Chantonnay", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.683330", + "reclong": "1.050000", + "year": "1812-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "39", + ":@computed_region_nnqa_25f4": "2007", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-87.33333, 36.16667] }, + "id": "5328", + "mass": "4300", + "name": "Charlotte", + "nametype": "Valid", + "recclass": "Iron, IVA", + "reclat": "36.166670", + "reclong": "-87.333330", + "year": "1835-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.56667, 47.93333] }, + "id": "5329", + "mass": "27000", + "name": "Charsonville", + "nametype": "Valid", + "recclass": "H6", + "reclat": "47.933330", + "reclong": "1.566670", + "year": "1810-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.5, 29.48333] }, + "id": "5330", + "mass": "12000", + "name": "Charwallas", + "nametype": "Valid", + "recclass": "H6", + "reclat": "29.483330", + "reclong": "75.500000", + "year": "1834-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.36667, 47.71667] }, + "id": "5331", + "mass": "4000", + "name": "Chassigny", + "nametype": "Valid", + "recclass": "Martian (chassignite)", + "reclat": "47.716670", + "reclong": "5.366670", + "year": "1815-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [2.91667, 47.93333] }, + "id": "5332", + "mass": "30000", + "name": "Château-Renard", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.933330", + "reclong": "2.916670", + "year": "1841-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7.46667, 41.93333] }, + "id": "5334", + "mass": "2945", + "name": "Chaves", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "41.933330", + "reclong": "-7.466670", + "year": "1925-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [32.5, -3.66667] }, + "id": "5338", + "mass": "2936", + "name": "Chela", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-3.666670", + "reclong": "32.500000", + "year": "1988-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [61.11667, 54.81667] }, + "id": "57165", + "mass": "100000", + "name": "Chelyabinsk", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "54.816670", + "reclong": "61.116670", + "year": "2013-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-5.01472, 23.69639] }, + "id": "47347", + "mass": "100000", + "name": "Chergach ", + "nametype": "Valid", + "recclass": "H5", + "reclat": "23.696390", + "reclong": "-5.014720", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.1, 53.7] }, + "id": "5339", + "mass": "6000", + "name": "Chernyi Bor", + "nametype": "Valid", + "recclass": "H4", + "reclat": "53.700000", + "reclong": "30.100000", + "year": "1964-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "33", + ":@computed_region_nnqa_25f4": "2582", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-81.88333, 35.03333] }, + "id": "5340", + "mass": "8400", + "name": "Cherokee Springs", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "35.033330", + "reclong": "-81.883330", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.81667, 46.55] }, + "id": "5341", + "mass": "705", + "name": "Chervettaz", + "nametype": "Valid", + "recclass": "L5", + "reclat": "46.550000", + "reclong": "6.816670", + "year": "1901-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [34, 50.83333] }, + "id": "5342", + "mass": "1700", + "name": "Chervony Kut", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "50.833330", + "reclong": "34.000000", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.5, 14.5] }, + "id": "5344", + "mass": "72", + "name": "Chetrinahatti", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "14.500000", + "reclong": "76.500000", + "year": "1880-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [101.63333, 17.9] }, + "id": "5345", + "mass": "367", + "name": "Chiang Khan", + "nametype": "Valid", + "recclass": "H6", + "reclat": "17.900000", + "reclong": "101.633330", + "year": "1981-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "48", + ":@computed_region_nnqa_25f4": "2459", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-79.73333, 40.93333] }, + "id": "5349", + "mass": "303", + "name": "Chicora", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "40.933330", + "reclong": "-79.733330", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.395, -10.05944] }, + "id": "5355", + "mass": "3920", + "name": "Chisenga", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "-10.059440", + "reclong": "33.395000", + "year": "1988-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.96667, -17.35] }, + "id": "5356", + "name": "Chitado", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-17.350000", + "reclong": "13.966670", + "year": "1966-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.97667, 47.47083] }, + "id": "5357", + "mass": "4000", + "name": "Chitenay", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.470830", + "reclong": "0.976670", + "year": "1978-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [108.1, -6.95] }, + "id": "5364", + "mass": "1600", + "name": "Cilimus", + "nametype": "Valid", + "recclass": "L5", + "reclat": "-6.950000", + "reclong": "108.100000", + "year": "1979-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "31", + ":@computed_region_nnqa_25f4": "67", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-81.87278, 32.1025] }, + "id": "5374", + "mass": "1455", + "name": "Claxton", + "nametype": "Valid", + "recclass": "L6", + "reclat": "32.102500", + "reclong": "-81.872780", + "year": "1984-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "5383", + "mass": "48.6", + "name": "Clohars", + "nametype": "Valid", + "recclass": "L4", + "year": "1822-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "41", + ":@computed_region_nnqa_25f4": "877", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-90.28333, 44.9] }, + "id": "5395", + "mass": "104000", + "name": "Colby (Wisconsin)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "44.900000", + "reclong": "-90.283330", + "year": "1917-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [19.38333, -33.13333] }, + "id": "5397", + "mass": "5200", + "name": "Cold Bokkeveld", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "-33.133330", + "reclong": "19.383330", + "year": "1838-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "50", + ":@computed_region_nnqa_25f4": "356", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-84.50778, 43.76111] }, + "id": "5401", + "mass": "469", + "name": "Coleman", + "nametype": "Valid", + "recclass": "L6", + "reclat": "43.761110", + "reclong": "-84.507780", + "year": "1994-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.61667, 42.53333] }, + "id": "5403", + "mass": "5000", + "name": "Collescipoli", + "nametype": "Valid", + "recclass": "H5", + "reclat": "42.533330", + "reclong": "12.616670", + "year": "1890-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-47.55, -19.85] }, + "id": "5418", + "mass": "20350", + "name": "Conquista", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-19.850000", + "reclong": "-47.550000", + "year": "1965-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-100.86667, 21.16667] }, + "id": "5451", + "mass": "1200", + "name": "Cosina", + "nametype": "Valid", + "recclass": "H5", + "reclat": "21.166670", + "reclong": "-100.866670", + "year": "1844-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.26667, 10.2] }, + "id": "5465", + "mass": "1460", + "name": "Cranganore", + "nametype": "Valid", + "recclass": "L6", + "reclat": "10.200000", + "reclong": "76.266670", + "year": "1917-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "20", + ":@computed_region_nnqa_25f4": "2201", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-97.58333, 35.95] }, + "id": "5470", + "mass": "78.400000000000006", + "name": "Crescent", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "35.950000", + "reclong": "-97.583330", + "year": "1936-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.3, -27.7] }, + "id": "5474", + "mass": "3650", + "name": "Cronstad", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-27.700000", + "reclong": "27.300000", + "year": "1877-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "2332", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-78.13333, 35.63333] }, + "id": "5476", + "mass": "167", + "name": "Cross Roads", + "nametype": "Valid", + "recclass": "H5", + "reclat": "35.633330", + "reclong": "-78.133330", + "year": "1892-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6.21667, 54.61667] }, + "id": "5477", + "mass": "4255", + "name": "Crumlin", + "nametype": "Valid", + "recclass": "L5", + "reclat": "54.616670", + "reclong": "-6.216670", + "year": "1902-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "36", + ":@computed_region_nnqa_25f4": "1426", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-84.35, 36.83333] }, + "id": "5496", + "mass": "17000", + "name": "Cumberland Falls", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "36.833330", + "reclong": "-84.350000", + "year": "1919-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "36", + ":@computed_region_nnqa_25f4": "244", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-84.25, 38.4] }, + "id": "5500", + "mass": "6000", + "name": "Cynthiana", + "nametype": "Valid", + "recclass": "L/LL4", + "reclat": "38.400000", + "reclong": "-84.250000", + "year": "1877-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.83333, 35.61667] }, + "id": "5504", + "mass": "18000", + "name": "Dahmani", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "35.616670", + "reclong": "8.833330", + "year": "1981-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [83.96667, 26.91667] }, + "id": "5511", + "mass": "5650", + "name": "Dandapur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "26.916670", + "reclong": "83.966670", + "year": "1878-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [24.56667, -28.2] }, + "id": "5513", + "mass": "1064", + "name": "Daniel's Kuil", + "nametype": "Valid", + "recclass": "EL6", + "reclat": "-28.200000", + "reclong": "24.566670", + "year": "1868-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "29", + ":@computed_region_nnqa_25f4": "103", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-87.06667, 34.4] }, + "id": "5514", + "mass": "2000", + "name": "Danville", + "nametype": "Valid", + "recclass": "L6", + "reclat": "34.400000", + "reclong": "-87.066670", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.65, 49.86667] }, + "id": "6603", + "mass": "100", + "name": "Darmstadt", + "nametype": "Valid", + "recclass": "H5", + "reclat": "49.866670", + "reclong": "8.650000", + "year": "1804-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [59.685, 41.98444] }, + "id": "6604", + "mass": "7000", + "name": "Dashoguz", + "nametype": "Valid", + "recclass": "H5", + "reclat": "41.984440", + "reclong": "59.685000", + "year": "1998-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-79.95756, -1.87089] }, + "id": "51559", + "mass": "6580", + "name": "Daule", + "nametype": "Valid", + "recclass": "L5", + "reclat": "-1.870890", + "reclong": "-79.957560", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-80, 43] }, + "id": "6621", + "mass": "340", + "name": "De Cewsville", + "nametype": "Valid", + "recclass": "H6", + "reclat": "43.000000", + "reclong": "-80.000000", + "year": "1887-01-01T00:00:00.000Z" + }, + { + ":@computed_region_nnqa_25f4": "2491", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-74, 40.25] }, + "id": "6634", + "mass": "28", + "name": "Deal", + "nametype": "Valid", + "recclass": "L6", + "reclat": "40.250000", + "reclong": "-74.000000", + "year": "1829-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.25, 28.56667] }, + "id": "6642", + "mass": "0.8", + "name": "Delhi", + "nametype": "Valid", + "recclass": "L5", + "reclat": "28.566670", + "reclong": "77.250000", + "year": "1897-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.76667, 51.46667] }, + "id": "6649", + "mass": "16400", + "name": "Demina", + "nametype": "Valid", + "recclass": "L6", + "reclat": "51.466670", + "reclong": "84.766670", + "year": "1911-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "9", + ":@computed_region_nnqa_25f4": "1444", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-104.93056, 39.7825] }, + "id": "6660", + "mass": "230", + "name": "Denver", + "nametype": "Valid", + "recclass": "L6", + "reclat": "39.782500", + "reclong": "-104.930560", + "year": "1967-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [93.86667, 26.68333] }, + "id": "6664", + "mass": "12500", + "name": "Dergaon", + "nametype": "Valid", + "recclass": "H5", + "reclat": "26.683330", + "reclong": "93.866670", + "year": "2001-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [73.61667, 25.73333] }, + "id": "6693", + "mass": "25400", + "name": "Desuri", + "nametype": "Valid", + "recclass": "H6", + "reclat": "25.733330", + "reclong": "73.616670", + "year": "1962-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [81, 19] }, + "id": "6694", + "mass": "12000", + "name": "Devgaon", + "nametype": "Valid", + "recclass": "H3.8", + "reclat": "19.000000", + "reclong": "81.000000", + "year": "2001-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.525, 24.225] }, + "id": "6696", + "mass": "1140", + "name": "Devri-Khera", + "nametype": "Valid", + "recclass": "L6", + "reclat": "24.225000", + "reclong": "76.525000", + "year": "1994-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [71.42722, 22.37778] }, + "id": "6698", + "mass": "45000", + "name": "Dhajala", + "nametype": "Valid", + "recclass": "H3.8", + "reclat": "22.377780", + "reclong": "71.427220", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.6, 14.88333] }, + "id": "6699", + "mass": "1800", + "name": "Dharwar", + "nametype": "Valid", + "recclass": "OC", + "reclat": "14.883330", + "reclong": "75.600000", + "year": "1848-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.46667, 32.23333] }, + "id": "7640", + "mass": "32000", + "name": "Dhurmsala", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "32.233330", + "reclong": "76.466670", + "year": "1860-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.32997, 37.35172] }, + "id": "47350", + "mass": "3396", + "name": "Didim", + "nametype": "Valid", + "recclass": "H3-5", + "reclat": "37.351720", + "reclong": "27.329970", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [18.56667, -33.75] }, + "id": "7642", + "mass": "1000", + "name": "Diep River", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-33.750000", + "reclong": "18.566670", + "year": "1906-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-60.46667, -31.88333] }, + "id": "7649", + "mass": "400", + "name": "Distrito Quebracho", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-31.883330", + "reclong": "-60.466670", + "year": "1957-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.5, -7.5] }, + "id": "7652", + "mass": "166000", + "name": "Djati-Pengilon", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-7.500000", + "reclong": "111.500000", + "year": "1884-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.05, 12.73333] }, + "id": "7656", + "mass": "3950", + "name": "Djermaia", + "nametype": "Valid", + "recclass": "H", + "reclat": "12.733330", + "reclong": "15.050000", + "year": "1961-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.55, 36.95] }, + "id": "7657", + "mass": "10000", + "name": "Djoumine", + "nametype": "Valid", + "recclass": "H5-6", + "reclat": "36.950000", + "reclong": "9.550000", + "year": "1999-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [90.33333, 23.5] }, + "id": "7658", + "mass": "3840", + "name": "Dokachi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "23.500000", + "reclong": "90.333330", + "year": "1903-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25.3, 50.75] }, + "id": "7659", + "mass": "1600", + "name": "Dolgovoli", + "nametype": "Valid", + "recclass": "L6", + "reclat": "50.750000", + "reclong": "25.300000", + "year": "1864-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29, 40] }, + "id": "7661", + "mass": "438", + "name": "Domanitch", + "nametype": "Valid", + "recclass": "L5", + "reclat": "40.000000", + "reclong": "29.000000", + "year": "1907-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [119.03333, 45.5] }, + "id": "7706", + "mass": "128800", + "name": "Dong Ujimqin Qi", + "nametype": "Valid", + "recclass": "Mesosiderite", + "reclat": "45.500000", + "reclong": "119.033330", + "year": "1995-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.45, 21.86667] }, + "id": "7707", + "mass": "230", + "name": "Donga Kohrod", + "nametype": "Valid", + "recclass": "H6", + "reclat": "21.866670", + "reclong": "82.450000", + "year": "1899-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [120.78333, 32.91667] }, + "id": "7708", + "mass": "5500", + "name": "Dongtai", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "32.916670", + "reclong": "120.783330", + "year": "1970-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [112.3, 51.2] }, + "id": "7718", + "mass": "3891", + "name": "Doroninsk", + "nametype": "Valid", + "recclass": "H5-7", + "reclat": "51.200000", + "reclong": "112.300000", + "year": "1805-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.16667, 13.05] }, + "id": "7722", + "mass": "1250", + "name": "Dosso", + "nametype": "Valid", + "recclass": "L6", + "reclat": "13.050000", + "reclong": "3.166670", + "year": "1962-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6.3, 32.33333] }, + "id": "7723", + "mass": "1161", + "name": "Douar Mghila", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "32.333330", + "reclong": "-6.300000", + "year": "1932-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.91667, -13.66667] }, + "id": "7725", + "mass": "642", + "name": "Dowa", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "-13.666670", + "reclong": "33.916670", + "year": "1976-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "39", + ":@computed_region_nnqa_25f4": "2115", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-86.5, 36.4] }, + "id": "7728", + "mass": "5000", + "name": "Drake Creek", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.400000", + "reclong": "-86.500000", + "year": "1827-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-82.26, 42.52] }, + "id": "7731", + "mass": "47700", + "name": "Dresden (Ontario)", + "nametype": "Valid", + "recclass": "H6", + "reclat": "42.520000", + "reclong": "-82.260000", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [18.44167, 42.45833] }, + "id": "7736", + "mass": "1900", + "name": "Dubrovnik", + "nametype": "Valid", + "recclass": "L3-6", + "reclat": "42.458330", + "reclong": "18.441670", + "year": "1951-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [152.83333, -31.66667] }, + "id": "7743", + "mass": "30", + "name": "Dunbogan", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-31.666670", + "reclong": "152.833330", + "year": "1999-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-8.03333, 52.55] }, + "id": "7745", + "mass": "2270", + "name": "Dundrum", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.550000", + "reclong": "-8.033330", + "year": "1865-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [128.25, 43.33333] }, + "id": "7749", + "name": "Dunhua", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "43.333330", + "reclong": "128.250000", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.63333, 30.3] }, + "id": "7750", + "mass": "13200", + "name": "Durala", + "nametype": "Valid", + "recclass": "L6", + "reclat": "30.300000", + "reclong": "76.633330", + "year": "1815-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [39.5, -4] }, + "id": "7752", + "mass": "577", + "name": "Duruma", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-4.000000", + "reclong": "39.500000", + "year": "1853-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [127.26667, 33.43333] }, + "id": "7754", + "mass": "2117", + "name": "Duwun", + "nametype": "Valid", + "recclass": "L6", + "reclat": "33.433330", + "reclong": "127.266670", + "year": "1943-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.31667, -27.2] }, + "id": "7755", + "mass": "3230", + "name": "Dwaleni", + "nametype": "Valid", + "recclass": "H4-6", + "reclat": "-27.200000", + "reclong": "31.316670", + "year": "1970-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82, 26.25] }, + "id": "7757", + "mass": "300", + "name": "Dyalpur", + "nametype": "Valid", + "recclass": "Ureilite", + "reclat": "26.250000", + "reclong": "82.000000", + "year": "1872-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [151, -3] }, + "id": "7758", + "mass": "188", + "name": "Dyarrl Island", + "nametype": "Valid", + "recclass": "Mesosiderite-A1", + "reclat": "-3.000000", + "reclong": "151.000000", + "year": "1933-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "19", + ":@computed_region_nnqa_25f4": "462", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-96.47167, 40.78167] }, + "id": "7760", + "mass": "10000", + "name": "Eagle", + "nametype": "Valid", + "recclass": "EL6", + "reclat": "40.781670", + "reclong": "-96.471670", + "year": "1947-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.83333, -17.3] }, + "id": "7774", + "mass": "2400", + "name": "Ehole", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-17.300000", + "reclong": "15.833330", + "year": "1961-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.21667, 48.9] }, + "id": "7775", + "mass": "3000", + "name": "Eichstädt", + "nametype": "Valid", + "recclass": "H5", + "reclat": "48.900000", + "reclong": "11.216670", + "year": "1785-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13, 56.03333] }, + "id": "7776", + "mass": "3336", + "name": "Ekeby", + "nametype": "Valid", + "recclass": "H4", + "reclat": "56.033330", + "reclong": "13.000000", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.78333, 28.26667] }, + "id": "7777", + "mass": "840", + "name": "Ekh Khera", + "nametype": "Valid", + "recclass": "H6", + "reclat": "28.266670", + "reclong": "78.783330", + "year": "1916-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.25, 34.41667] }, + "id": "7807", + "mass": "10000", + "name": "El Idrissia", + "nametype": "Valid", + "recclass": "L6", + "reclat": "34.416670", + "reclong": "3.250000", + "year": "1989-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-97.37, 25.37] }, + "id": "45977", + "mass": "17226", + "name": "El Paso de Aguila", + "nametype": "Valid", + "recclass": "H5", + "reclat": "25.370000", + "reclong": "-97.370000", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-103.05167, 19.96722] }, + "id": "7819", + "mass": "5000", + "name": "El Tigre", + "nametype": "Valid", + "recclass": "L6", + "reclat": "19.967220", + "reclong": "-103.051670", + "year": "1993-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "9", + ":@computed_region_nnqa_25f4": "88", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-104.58817, 39.24667] }, + "id": "7822", + "mass": "680.5", + "name": "Elbert", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "39.246670", + "reclong": "-104.588170", + "year": "1998-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.73333, 50.18333] }, + "id": "7823", + "mass": "107000", + "name": "Elbogen", + "nametype": "Valid", + "recclass": "Iron, IID", + "reclat": "50.183330", + "reclong": "12.733330", + "year": "1400-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.66667, 47.83333] }, + "id": "7824", + "mass": "54640", + "name": "Elenovka", + "nametype": "Valid", + "recclass": "L5", + "reclat": "47.833330", + "reclong": "37.666670", + "year": "1951-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [4, 51.75] }, + "id": "10019", + "mass": "1470", + "name": "Ellemeet", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "51.750000", + "reclong": "4.000000", + "year": "1925-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [151.61667, -29.46667] }, + "id": "10033", + "mass": "127", + "name": "Emmaville", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "-29.466670", + "reclong": "151.616670", + "year": "1900-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [109.5, 30.3] }, + "id": "10038", + "mass": "8000", + "name": "Enshi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "30.300000", + "reclong": "109.500000", + "year": "1974-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7.35, 47.86667] }, + "id": "10039", + "mass": "127000", + "name": "Ensisheim", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "47.866670", + "reclong": "7.350000", + "year": "1492-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.46667, 48.18333] }, + "id": "10041", + "mass": "277", + "name": "Épinal", + "nametype": "Valid", + "recclass": "H5", + "reclat": "48.183330", + "reclong": "6.466670", + "year": "1822-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [81.89167, 19.03333] }, + "id": "10042", + "mass": "113", + "name": "Erakot", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "19.033330", + "reclong": "81.891670", + "year": "1940-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [44.5, 40.3] }, + "id": "10043", + "mass": "107.2", + "name": "Erevan", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "40.300000", + "reclong": "44.500000", + "year": "1911-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [44.16667, 1.16667] }, + "id": "10044", + "mass": "20000", + "name": "Ergheo", + "nametype": "Valid", + "recclass": "L5", + "reclat": "1.166670", + "reclong": "44.166670", + "year": "1889-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.25, 52.21667] }, + "id": "10049", + "mass": "2250", + "name": "Erxleben", + "nametype": "Valid", + "recclass": "H6", + "reclat": "52.216670", + "reclong": "11.250000", + "year": "1812-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.1, 46.25] }, + "id": "10051", + "mass": "1500", + "name": "Esnandes", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.250000", + "reclong": "-1.100000", + "year": "1837-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.83333, 2.88333] }, + "id": "10055", + "mass": "500", + "name": "Essebi", + "nametype": "Valid", + "recclass": "C2-ung", + "reclat": "2.883330", + "reclong": "30.833330", + "year": "1957-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "16", + ":@computed_region_nnqa_25f4": "277", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-94.83333, 43.41667] }, + "id": "10059", + "mass": "320000", + "name": "Estherville", + "nametype": "Valid", + "recclass": "Mesosiderite-A3/4", + "reclat": "43.416670", + "reclong": "-94.833330", + "year": "1879-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "17", + ":@computed_region_nnqa_25f4": "1300", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-97.03333, 39.75] }, + "id": "10074", + "mass": "89400", + "name": "Farmington", + "nametype": "Valid", + "recclass": "L5", + "reclat": "39.750000", + "reclong": "-97.033330", + "year": "1890-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "2439", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-77.53333, 35.55] }, + "id": "10075", + "mass": "56000", + "name": "Farmville", + "nametype": "Valid", + "recclass": "H4", + "reclat": "35.550000", + "reclong": "-77.533330", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [2.81667, 44.38333] }, + "id": "10078", + "mass": "1500", + "name": "Favars", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.383330", + "reclong": "2.816670", + "year": "1844-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "15", + ":@computed_region_nnqa_25f4": "70", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-94.16667, 36.05] }, + "id": "10079", + "mass": "2360", + "name": "Fayetteville", + "nametype": "Valid", + "recclass": "H4", + "reclat": "36.050000", + "reclong": "-94.166670", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.45, 36.88333] }, + "id": "10080", + "mass": "380", + "name": "Feid Chair", + "nametype": "Valid", + "recclass": "H4", + "reclat": "36.883330", + "reclong": "8.450000", + "year": "1875-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "29", + ":@computed_region_nnqa_25f4": "1631", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-87.16667, 32.53333] }, + "id": "10081", + "mass": "3200", + "name": "Felix", + "nametype": "Valid", + "recclass": "CO3.3", + "reclat": "32.533330", + "reclong": "-87.166670", + "year": "1900-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [116.75, 34.6] }, + "id": "10086", + "mass": "82", + "name": "Fenghsien-Ku", + "nametype": "Valid", + "recclass": "H5", + "reclat": "34.600000", + "reclong": "116.750000", + "year": "1924-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "2331", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-81.41667, 36.1] }, + "id": "10088", + "mass": "220", + "name": "Ferguson", + "nametype": "Valid", + "recclass": "OC", + "reclat": "36.100000", + "reclong": "-81.416670", + "year": "1889-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.75333, 43.18111] }, + "id": "10091", + "mass": "10200", + "name": "Fermo", + "nametype": "Valid", + "recclass": "H3-5", + "reclat": "43.181110", + "reclong": "13.753330", + "year": "1996-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "1", + ":@computed_region_nnqa_25f4": "385", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-96.85, 47.81667] }, + "id": "10107", + "mass": "17600", + "name": "Fisher", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.816670", + "reclong": "-96.850000", + "year": "1894-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "807", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-97.76667, 30.83333] }, + "id": "10111", + "mass": "3640", + "name": "Florence", + "nametype": "Valid", + "recclass": "H3", + "reclat": "30.833330", + "reclong": "-97.766670", + "year": "1922-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "16", + ":@computed_region_nnqa_25f4": "1785", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-93.66667, 43.25] }, + "id": "10119", + "mass": "152000", + "name": "Forest City", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.250000", + "reclong": "-93.666670", + "year": "1890-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [146.85833, -33.35] }, + "id": "10120", + "mass": "26000", + "name": "Forest Vale", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-33.350000", + "reclong": "146.858330", + "year": "1942-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "40", + ":@computed_region_nnqa_25f4": "2839", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-78.08333, 36.78333] }, + "id": "10123", + "mass": "6067", + "name": "Forksville", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.783330", + "reclong": "-78.083330", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7.31667, 50.95] }, + "id": "10163", + "mass": "240", + "name": "Forsbach", + "nametype": "Valid", + "recclass": "H6", + "reclat": "50.950000", + "reclong": "7.316670", + "year": "1900-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "31", + ":@computed_region_nnqa_25f4": "1470", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-83.96667, 33.01667] }, + "id": "10164", + "mass": "16300", + "name": "Forsyth", + "nametype": "Valid", + "recclass": "L6", + "reclat": "33.016670", + "reclong": "-83.966670", + "year": "1829-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7, 28.25] }, + "id": "10166", + "name": "Fort Flatters", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "28.250000", + "reclong": "7.000000", + "year": "1944-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "29", + ":@computed_region_nnqa_25f4": "99", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-87.83333, 34.48333] }, + "id": "10177", + "mass": "650", + "name": "Frankfort (stone)", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "34.483330", + "reclong": "-87.833330", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [113.56694, 31.47556] }, + "id": "52412", + "mass": "23000", + "name": "Fuhe", + "nametype": "Valid", + "recclass": "L5", + "reclat": "31.475560", + "reclong": "113.566940", + "year": "1945-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [130.2, 33.18333] }, + "id": "10836", + "mass": "11620", + "name": "Fukutomi", + "nametype": "Valid", + "recclass": "L5", + "reclat": "33.183330", + "reclong": "130.200000", + "year": "1882-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.33333, 55.33333] }, + "id": "10838", + "name": "Fünen", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "55.333330", + "reclong": "10.333330", + "year": "1654-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [80.81667, 25.95] }, + "id": "10839", + "mass": "4000", + "name": "Futtehpur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "25.950000", + "reclong": "80.816670", + "year": "1822-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.9, 32.9] }, + "id": "10840", + "mass": "2500", + "name": "Fuyang", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "32.900000", + "reclong": "115.900000", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.4, 44.3] }, + "id": "10846", + "mass": "132.69999999999999", + "name": "Galapian", + "nametype": "Valid", + "recclass": "H6", + "reclat": "44.300000", + "reclong": "0.400000", + "year": "1826-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.43333, 7.05] }, + "id": "10848", + "mass": "36.1", + "name": "Galim (a)", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "7.050000", + "reclong": "12.433330", + "year": "1952-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.43333, 7.05] }, + "id": "10849", + "mass": "28", + "name": "Galim (b)", + "nametype": "Valid", + "recclass": "EH3/4-an", + "reclat": "7.050000", + "reclong": "12.433330", + "year": "1952-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.78333, 51.68333] }, + "id": "10850", + "mass": "5000", + "name": "Galkiv", + "nametype": "Valid", + "recclass": "H4", + "reclat": "51.683330", + "reclong": "30.783330", + "year": "1995-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [68.53333, 27.35] }, + "id": "10851", + "mass": "6400", + "name": "Gambat", + "nametype": "Valid", + "recclass": "L6", + "reclat": "27.350000", + "reclong": "68.533330", + "year": "1897-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-2.18333, 11.65] }, + "id": "10854", + "name": "Gao-Guenie", + "nametype": "Valid", + "recclass": "H5", + "reclat": "11.650000", + "reclong": "-2.183330", + "year": "1960-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [68.53333, 27.88333] }, + "id": "10860", + "mass": "380", + "name": "Garhi Yasin", + "nametype": "Valid", + "recclass": "Iron, IIE", + "reclat": "27.883330", + "reclong": "68.533330", + "year": "1917-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "13", + ":@computed_region_nnqa_25f4": "2985", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-112.13333, 41.68333] }, + "id": "10861", + "mass": "102", + "name": "Garland", + "nametype": "Valid", + "recclass": "Diogenite-pm", + "reclat": "41.683330", + "reclong": "-112.133330", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.03333, 12.85] }, + "id": "44882", + "mass": "4162", + "name": "Gashua", + "nametype": "Valid", + "recclass": "L6", + "reclat": "12.850000", + "reclong": "11.033330", + "year": "1984-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-2.04167, 14.15083] }, + "id": "10866", + "name": "Gasseltepaoua", + "nametype": "Valid", + "recclass": "H5", + "reclat": "14.150830", + "reclong": "-2.041670", + "year": "2000-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.91667, 12.91667] }, + "id": "10870", + "mass": "725", + "name": "Geidam", + "nametype": "Valid", + "recclass": "H5", + "reclat": "12.916670", + "reclong": "11.916670", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [136.88333, 35.53333] }, + "id": "10914", + "mass": "14290", + "name": "Gifu", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.533330", + "reclong": "136.883330", + "year": "1909-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.56667, 37.31667] }, + "id": "10917", + "mass": "18000", + "name": "Girgenti", + "nametype": "Valid", + "recclass": "L6", + "reclat": "37.316670", + "reclong": "13.566670", + "year": "1853-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.91667, 9.6] }, + "id": "10919", + "mass": "480", + "name": "Git-Git", + "nametype": "Valid", + "recclass": "L6", + "reclat": "9.600000", + "reclong": "9.916670", + "year": "1947-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.86667, 52.2] }, + "id": "10923", + "mass": "670", + "name": "Glanerbrug", + "nametype": "Valid", + "recclass": "L/LL5", + "reclat": "52.200000", + "reclong": "6.866670", + "year": "1990-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [107.7, -7.25] }, + "id": "10924", + "mass": "1303", + "name": "Glanggang", + "nametype": "Valid", + "recclass": "H5-6", + "reclat": "-7.250000", + "reclong": "107.700000", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.61667, 57.35] }, + "id": "10926", + "mass": "152000", + "name": "Glasatovo", + "nametype": "Valid", + "recclass": "H4", + "reclat": "57.350000", + "reclong": "37.616670", + "year": "1918-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.3, 52.45972] }, + "id": "10930", + "mass": "767", + "name": "Glatton", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.459720", + "reclong": "-0.300000", + "year": "1991-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.76667, 50.66667] }, + "id": "10936", + "mass": "1750", + "name": "Gnadenfrei", + "nametype": "Valid", + "recclass": "H5", + "reclat": "50.666670", + "reclong": "16.766670", + "year": "1879-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [89.05, 24.23333] }, + "id": "10948", + "mass": "1600", + "name": "Gopalpur", + "nametype": "Valid", + "recclass": "H6", + "reclat": "24.233330", + "reclong": "89.050000", + "year": "1865-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [38.08333, 48.28333] }, + "id": "10949", + "mass": "3618", + "name": "Gorlovka", + "nametype": "Valid", + "recclass": "H3.7", + "reclat": "48.283330", + "reclong": "38.083330", + "year": "1974-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [2.25, 42.9] }, + "id": "10956", + "mass": "9000", + "name": "Granes", + "nametype": "Valid", + "recclass": "L6", + "reclat": "42.900000", + "reclong": "2.250000", + "year": "1964-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11, 60.66667] }, + "id": "11196", + "mass": "45.5", + "name": "Grefsheim", + "nametype": "Valid", + "recclass": "L5", + "reclat": "60.666670", + "reclong": "11.000000", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-79.61667, 43.2] }, + "id": "50911", + "mass": "215", + "name": "Grimsby", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.200000", + "reclong": "-79.616670", + "year": "2009-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [45.38333, 43.66667] }, + "id": "11206", + "mass": "3500", + "name": "Grosnaja", + "nametype": "Valid", + "recclass": "CV3", + "reclat": "43.666670", + "reclong": "45.383330", + "year": "1861-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [18.71667, 49.26667] }, + "id": "11207", + "mass": "10500", + "name": "Gross-Divina", + "nametype": "Valid", + "recclass": "H5", + "reclat": "49.266670", + "reclong": "18.716670", + "year": "1837-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.58333, 46.35] }, + "id": "11208", + "mass": "8000", + "name": "Grossliebenthal", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.350000", + "reclong": "30.583330", + "year": "1881-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.5, 51.93333] }, + "id": "11426", + "mass": "1000", + "name": "Grüneberg", + "nametype": "Valid", + "recclass": "H4", + "reclat": "51.933330", + "reclong": "15.500000", + "year": "1841-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.63333, 52.86667] }, + "id": "11429", + "mass": "690", + "name": "Grzempach", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.866670", + "reclong": "16.633330", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-58.61667, -33] }, + "id": "11432", + "mass": "22000", + "name": "Gualeguaychú", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-33.000000", + "reclong": "-58.616670", + "year": "1932-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [122.76389, 39.80417] }, + "id": "11435", + "mass": "2910", + "name": "Guangmingshan", + "nametype": "Valid", + "recclass": "H5", + "reclat": "39.804170", + "reclong": "122.763890", + "year": "1996-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [105, 24.1] }, + "id": "11436", + "name": "Guangnan", + "nametype": "Valid", + "recclass": "L6", + "reclat": "24.100000", + "reclong": "105.000000", + "year": "1983-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [118.4, 37.1] }, + "id": "11437", + "mass": "1900", + "name": "Guangrao", + "nametype": "Valid", + "recclass": "L6", + "reclat": "37.100000", + "reclong": "118.400000", + "year": "1980-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6.01667, 38.73333] }, + "id": "11439", + "mass": "39000", + "name": "Guareña", + "nametype": "Valid", + "recclass": "H6", + "reclat": "38.733330", + "reclong": "-6.016670", + "year": "1892-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [20.23333, 43.76667] }, + "id": "11440", + "mass": "1915", + "name": "Guêa", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "43.766670", + "reclong": "20.233330", + "year": "1891-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.68333, 13.5] }, + "id": "11442", + "mass": "288", + "name": "Guibga", + "nametype": "Valid", + "recclass": "L5", + "reclat": "13.500000", + "reclong": "-0.683330", + "year": "1972-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.98333, 9.91667] }, + "id": "11443", + "mass": "968", + "name": "Guidder", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "9.916670", + "reclong": "13.983330", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.05, 22.98333] }, + "id": "11448", + "mass": "2449", + "name": "Gujargaon", + "nametype": "Valid", + "recclass": "H5", + "reclat": "22.983330", + "reclong": "76.050000", + "year": "1982-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.65833, 11.49167] }, + "id": "11449", + "mass": "100000", + "name": "Gujba", + "nametype": "Valid", + "recclass": "CBa", + "reclat": "11.491670", + "reclong": "11.658330", + "year": "1984-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [24.7, 42.9] }, + "id": "11450", + "mass": "5700", + "name": "Gumoschnik", + "nametype": "Valid", + "recclass": "H5", + "reclat": "42.900000", + "reclong": "24.700000", + "year": "1904-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.56667, 13.78333] }, + "id": "11464", + "mass": "28", + "name": "Gurram Konda", + "nametype": "Valid", + "recclass": "L6", + "reclat": "13.783330", + "reclong": "78.566670", + "year": "1814-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [42.41667, 9.36667] }, + "id": "11465", + "mass": "34650", + "name": "Gursum", + "nametype": "Valid", + "recclass": "H4/5", + "reclat": "9.366670", + "reclong": "42.416670", + "year": "1981-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.38333, 51.91667] }, + "id": "11466", + "mass": "1000", + "name": "Gütersloh", + "nametype": "Valid", + "recclass": "H3/4", + "reclat": "51.916670", + "reclong": "8.383330", + "year": "1851-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [127.5, 35] }, + "id": "11467", + "mass": "1320", + "name": "Gyokukei", + "nametype": "Valid", + "recclass": "OC", + "reclat": "35.000000", + "reclong": "127.500000", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [139.33333, 35.65] }, + "id": "11468", + "mass": "0.2", + "name": "Hachi-oji", + "nametype": "Valid", + "recclass": "H?", + "reclat": "35.650000", + "reclong": "139.333330", + "year": "1817-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.73333, 50.31667] }, + "id": "11472", + "mass": "9000", + "name": "Hainaut", + "nametype": "Valid", + "recclass": "H3-6", + "reclat": "50.316670", + "reclong": "3.733330", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.23333, 57.81667] }, + "id": "11479", + "mass": "1456", + "name": "Hallingeberg", + "nametype": "Valid", + "recclass": "L3.4", + "reclat": "57.816670", + "reclong": "16.233330", + "year": "1944-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "35", + ":@computed_region_nnqa_25f4": "1205", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-86.6, 41.38333] }, + "id": "11485", + "mass": "3710", + "name": "Hamlet", + "nametype": "Valid", + "recclass": "LL4", + "reclat": "41.383330", + "reclong": "-86.600000", + "year": "1959-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.53333, 26.8] }, + "id": "11824", + "mass": "1000", + "name": "Haraiya", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "26.800000", + "reclong": "82.533330", + "year": "1878-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.78333, 28.38333] }, + "id": "11829", + "mass": "315", + "name": "Haripura", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "28.383330", + "reclong": "75.783330", + "year": "1921-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "2025", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-94.51167, 32.675] }, + "id": "11830", + "mass": "8360", + "name": "Harleton", + "nametype": "Valid", + "recclass": "L6", + "reclat": "32.675000", + "reclong": "-94.511670", + "year": "1961-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "35", + ":@computed_region_nnqa_25f4": "1855", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-86.16667, 38.25] }, + "id": "11842", + "mass": "680", + "name": "Harrison County", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.250000", + "reclong": "-86.166670", + "year": "1859-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [136.70033, 35.2945] }, + "id": "11848", + "mass": "1110.5999999999999", + "name": "Hashima", + "nametype": "Valid", + "recclass": "H4", + "reclat": "35.294500", + "reclong": "136.700330", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.81667, 28.95] }, + "id": "11852", + "mass": "1250", + "name": "Hassi-Jekna", + "nametype": "Valid", + "recclass": "Iron, IAB-sHL", + "reclat": "28.950000", + "reclong": "0.816670", + "year": "1890-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.51667, 51.65] }, + "id": "11855", + "mass": "29000", + "name": "Hatford", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "51.650000", + "reclong": "-1.516670", + "year": "1628-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.06194, 60.24556] }, + "id": "11859", + "mass": "1544", + "name": "Haverö", + "nametype": "Valid", + "recclass": "Ureilite", + "reclat": "60.245560", + "reclong": "22.061940", + "year": "1971-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.78333, 55.46667] }, + "id": "11869", + "mass": "3500", + "name": "Hedeskoga", + "nametype": "Valid", + "recclass": "H5", + "reclat": "55.466670", + "reclong": "13.783330", + "year": "1922-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.66667, 27.33333] }, + "id": "11870", + "mass": "6100", + "name": "Hedjaz", + "nametype": "Valid", + "recclass": "L3.7-6", + "reclat": "27.333330", + "reclong": "35.666670", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-84.1, 10] }, + "id": "11875", + "mass": "1000", + "name": "Heredia", + "nametype": "Valid", + "recclass": "H5", + "reclat": "10.000000", + "reclong": "-84.100000", + "year": "1857-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [17.66667, 59.85] }, + "id": "11878", + "mass": "20000", + "name": "Hessle", + "nametype": "Valid", + "recclass": "H5", + "reclat": "59.850000", + "reclong": "17.666670", + "year": "1869-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [130.43333, 33.6] }, + "id": "11883", + "mass": "750", + "name": "Higashi-koen", + "nametype": "Valid", + "recclass": "H5", + "reclat": "33.600000", + "reclong": "130.433330", + "year": "1897-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-4.23333, 55.9] }, + "id": "11884", + "mass": "4500", + "name": "High Possil", + "nametype": "Valid", + "recclass": "L6", + "reclat": "55.900000", + "reclong": "-4.233330", + "year": "1804-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [132.38333, 34.45] }, + "id": "11889", + "mass": "414", + "name": "Hiroshima", + "nametype": "Valid", + "recclass": "H5", + "reclat": "34.450000", + "reclong": "132.383330", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.47278, 1.345] }, + "id": "44714", + "mass": "167.7", + "name": "Hoima", + "nametype": "Valid", + "recclass": "H6", + "reclat": "1.345000", + "reclong": "31.472780", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.2, 64.43333] }, + "id": "11893", + "mass": "305.5", + "name": "Hökmark", + "nametype": "Valid", + "recclass": "L4", + "reclat": "64.433330", + "reclong": "21.200000", + "year": "1954-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "7", + ":@computed_region_nnqa_25f4": "990", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-110.18333, 34.9] }, + "id": "11894", + "mass": "220000", + "name": "Holbrook", + "nametype": "Valid", + "recclass": "L/LL6", + "reclat": "34.900000", + "reclong": "-110.183330", + "year": "1912-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [38.41667, 9.06667] }, + "id": "11895", + "mass": "1415", + "name": "Holetta", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "9.066670", + "reclong": "38.416670", + "year": "1923-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "16", + ":@computed_region_nnqa_25f4": "284", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-91.86667, 41.8] }, + "id": "11901", + "mass": "230000", + "name": "Homestead", + "nametype": "Valid", + "recclass": "L5", + "reclat": "41.800000", + "reclong": "-91.866670", + "year": "1875-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "4", + ":@computed_region_nnqa_25f4": "1657", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-157.86667, 21.3] }, + "id": "11904", + "mass": "2420", + "name": "Honolulu", + "nametype": "Valid", + "recclass": "L5", + "reclat": "21.300000", + "reclong": "-157.866670", + "year": "1825-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.5, 35.66667] }, + "id": "11913", + "mass": "180", + "name": "Hotse", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.666670", + "reclong": "115.500000", + "year": "1956-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "17", + ":@computed_region_nnqa_25f4": "1293", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-100.45, 39.35] }, + "id": "11915", + "mass": "266.10000000000002", + "name": "Hoxie", + "nametype": "Valid", + "recclass": "OC", + "reclat": "39.350000", + "reclong": "-100.450000", + "year": "1963-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.33333, 46.1] }, + "id": "11916", + "mass": "49000", + "name": "Hraschina", + "nametype": "Valid", + "recclass": "Iron, IID", + "reclat": "46.100000", + "reclong": "16.333330", + "year": "1751-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [106.63241, 26.46469] }, + "id": "54719", + "mass": "1600", + "name": "Huaxi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "26.464690", + "reclong": "106.632410", + "year": "2010-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.91667, 50.3] }, + "id": "11986", + "mass": "112", + "name": "Hungen", + "nametype": "Valid", + "recclass": "H6", + "reclat": "50.300000", + "reclong": "8.916670", + "year": "1877-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.68333, 61.18333] }, + "id": "11989", + "mass": "14000", + "name": "Hvittis", + "nametype": "Valid", + "recclass": "EL6", + "reclat": "61.183330", + "reclong": "22.683330", + "year": "1901-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7.7, 52.28333] }, + "id": "11992", + "mass": "2000", + "name": "Ibbenbüren", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "52.283330", + "reclong": "7.700000", + "year": "1870-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-45, -20] }, + "id": "11993", + "mass": "2500", + "name": "Ibitira", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "-20.000000", + "reclong": "-45.000000", + "year": "1957-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35, 38] }, + "id": "11994", + "name": "Ibrisim", + "nametype": "Valid", + "recclass": "OC", + "reclat": "38.000000", + "reclong": "35.000000", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.93333, 58.2] }, + "id": "11995", + "mass": "3973", + "name": "Ichkala", + "nametype": "Valid", + "recclass": "H6", + "reclat": "58.200000", + "reclong": "82.933330", + "year": "1936-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [28.33333, -32.1] }, + "id": "12000", + "mass": "3457", + "name": "Idutywa", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-32.100000", + "reclong": "28.333330", + "year": "1956-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-51.83333, -23.2] }, + "id": "12003", + "mass": "1200", + "name": "Iguaracu", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-23.200000", + "reclong": "-51.833330", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [145.36667, -6.03333] }, + "id": "12004", + "mass": "7330", + "name": "Ijopega", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-6.033330", + "reclong": "145.366670", + "year": "1975-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [46.66667, 39.75] }, + "id": "12027", + "mass": "27000", + "name": "Indarch", + "nametype": "Valid", + "recclass": "EH4", + "reclat": "39.750000", + "reclong": "46.666670", + "year": "1891-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "18", + ":@computed_region_nnqa_25f4": "525", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-94.4, 39.08333] }, + "id": "12028", + "mass": "880", + "name": "Independence", + "nametype": "Valid", + "recclass": "L6", + "reclat": "39.083330", + "reclong": "-94.400000", + "year": "1917-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [112, 41] }, + "id": "12037", + "mass": "3000", + "name": "Inner Mongolia", + "nametype": "Valid", + "recclass": "L6", + "reclat": "41.000000", + "reclong": "112.000000", + "year": "1963-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-111.3375, 53.415] }, + "id": "12039", + "mass": "4576", + "name": "Innisfree", + "nametype": "Valid", + "recclass": "L5", + "reclat": "53.415000", + "reclong": "-111.337500", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-54.5, -25.5] }, + "id": "12043", + "mass": "7000", + "name": "Ipiranga", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-25.500000", + "reclong": "-54.500000", + "year": "1972-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.8, -8.93333] }, + "id": "12049", + "mass": "1300", + "name": "Ishinga", + "nametype": "Valid", + "recclass": "H", + "reclat": "-8.933330", + "reclong": "33.800000", + "year": "1954-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-57.95, -31.18333] }, + "id": "12053", + "mass": "3050", + "name": "Isthilart", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-31.183330", + "reclong": "-57.950000", + "year": "1928-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-44.33333, -3.4] }, + "id": "12056", + "mass": "2024", + "name": "Itapicuru-Mirim", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-3.400000", + "reclong": "-44.333330", + "year": "1879-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-12.95217, 26.59083] }, + "id": "12058", + "mass": "4720", + "name": "Itqiy", + "nametype": "Valid", + "recclass": "EH7-an", + "reclat": "26.590830", + "reclong": "-12.952170", + "year": "1990-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [32.43333, -8.41667] }, + "id": "12063", + "mass": "704.5", + "name": "Ivuna", + "nametype": "Valid", + "recclass": "CI1", + "reclat": "-8.416670", + "reclong": "32.433330", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.9, -32.5] }, + "id": "12065", + "mass": "48000", + "name": "Jackalsfontein", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-32.500000", + "reclong": "21.900000", + "year": "1903-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [68.41667, 26.75] }, + "id": "12067", + "mass": "973", + "name": "Jajh deh Kot Lalu", + "nametype": "Valid", + "recclass": "EL6", + "reclat": "26.750000", + "reclong": "68.416670", + "year": "1926-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "12068", + "mass": "700", + "name": "Jalanash", + "nametype": "Valid", + "recclass": "Ureilite", + "year": "1990-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75, 31] }, + "id": "12069", + "mass": "1967", + "name": "Jalandhar", + "nametype": "Valid", + "recclass": "Iron", + "reclat": "31.000000", + "reclong": "75.000000", + "year": "1621-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.33333, 18.75] }, + "id": "12072", + "mass": "22", + "name": "Jamkheir", + "nametype": "Valid", + "recclass": "H6", + "reclat": "18.750000", + "reclong": "75.333330", + "year": "1866-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [105.8, 39.7] }, + "id": "12074", + "mass": "20500", + "name": "Jartai", + "nametype": "Valid", + "recclass": "L6", + "reclat": "39.700000", + "reclong": "105.800000", + "year": "1979-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [20.44167, 43.83333] }, + "id": "12078", + "mass": "34000", + "name": "Jelica", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "43.833330", + "reclong": "20.441670", + "year": "1889-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "12079", + "mass": "450", + "name": "Jemlapur", + "nametype": "Valid", + "recclass": "L6", + "year": "1901-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.05217, 46.42137] }, + "id": "51589", + "mass": "3667", + "name": "Jesenice", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.421370", + "reclong": "14.052170", + "year": "2009-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [72.38333, 31.3] }, + "id": "12085", + "mass": "5900", + "name": "Jhung", + "nametype": "Valid", + "recclass": "L5", + "reclat": "31.300000", + "reclong": "72.383330", + "year": "1873-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [104.91667, 31.91667] }, + "id": "12086", + "mass": "222", + "name": "Jiange", + "nametype": "Valid", + "recclass": "H5", + "reclat": "31.916670", + "reclong": "104.916670", + "year": "1964-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [109.5, 30.80833] }, + "id": "12087", + "mass": "600000", + "name": "Jianshi", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "30.808330", + "reclong": "109.500000", + "year": "1890-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [126.16667, 44.05] }, + "id": "12171", + "mass": "4000000", + "name": "Jilin", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.050000", + "reclong": "126.166670", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [70.31333, 22.68] }, + "id": "47362", + "mass": "100", + "name": "Jodiya", + "nametype": "Valid", + "recclass": "L5", + "reclat": "22.680000", + "reclong": "70.313330", + "year": "2006-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [24.4, 55.7] }, + "id": "12173", + "mass": "30", + "name": "Jodzie", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "55.700000", + "reclong": "24.400000", + "year": "1877-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "9", + ":@computed_region_nnqa_25f4": "1072", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-104.9, 40.35] }, + "id": "12198", + "mass": "40300", + "name": "Johnstown", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "40.350000", + "reclong": "-104.900000", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.83333, -11.85] }, + "id": "12199", + "mass": "483", + "name": "Jolomba", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "-11.850000", + "reclong": "15.833330", + "year": "1974-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.45, 45.43333] }, + "id": "12202", + "mass": "5000", + "name": "Jonzac", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "45.433330", + "reclong": "-0.450000", + "year": "1819-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.41667, 35.5] }, + "id": "12203", + "mass": "100000", + "name": "Juancheng", + "nametype": "Valid", + "recclass": "H5", + "reclat": "35.500000", + "reclong": "115.416670", + "year": "1997-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.8, 12.85] }, + "id": "12207", + "mass": "680", + "name": "Judesegeri", + "nametype": "Valid", + "recclass": "H6", + "reclat": "12.850000", + "reclong": "76.800000", + "year": "1876-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.2, -7.71667] }, + "id": "12209", + "mass": "32490", + "name": "Jumapalo", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-7.716670", + "reclong": "111.200000", + "year": "1984-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [118.8, 35.2] }, + "id": "12210", + "mass": "950", + "name": "Junan", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.200000", + "reclong": "118.800000", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7.27, 38.74028] }, + "id": "12213", + "mass": "25250", + "name": "Juromenha", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "38.740280", + "reclong": "-7.270000", + "year": "1968-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [4.3, 44.71667] }, + "id": "12214", + "mass": "91000", + "name": "Juvinas", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "44.716670", + "reclong": "4.300000", + "year": "1821-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.3, 47.35] }, + "id": "12218", + "mass": "3000", + "name": "Kaba", + "nametype": "Valid", + "recclass": "CV3", + "reclat": "47.350000", + "reclong": "21.300000", + "year": "1857-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.21667, 11.85] }, + "id": "12220", + "mass": "13400", + "name": "Kabo", + "nametype": "Valid", + "recclass": "H4", + "reclat": "11.850000", + "reclong": "8.216670", + "year": "1971-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.33333, 27.08333] }, + "id": "12221", + "mass": "89", + "name": "Kadonah", + "nametype": "Valid", + "recclass": "H6", + "reclat": "27.083330", + "reclong": "78.333330", + "year": "1822-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [79.96667, 27.25] }, + "id": "12222", + "mass": "230", + "name": "Kaee", + "nametype": "Valid", + "recclass": "H5", + "reclat": "27.250000", + "reclong": "79.966670", + "year": "1838-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.83333, 49.86667] }, + "id": "12227", + "mass": "1900", + "name": "Kagarlyk", + "nametype": "Valid", + "recclass": "L6", + "reclat": "49.866670", + "reclong": "30.833330", + "year": "1908-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [48.3, 15] }, + "id": "12228", + "mass": "2000", + "name": "Kaidun", + "nametype": "Valid", + "recclass": "CR2", + "reclat": "15.000000", + "reclong": "48.300000", + "year": "1980-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [53.25, 55.43333] }, + "id": "12229", + "mass": "200000", + "name": "Kainsaz", + "nametype": "Valid", + "recclass": "CO3.2", + "reclat": "55.433330", + "reclong": "53.250000", + "year": "1937-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.51667, 12.38333] }, + "id": "12230", + "mass": "350", + "name": "Kakangari", + "nametype": "Valid", + "recclass": "K3", + "reclat": "12.383330", + "reclong": "78.516670", + "year": "1890-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.66667, 45.13333] }, + "id": "12231", + "mass": "577", + "name": "Kakowa", + "nametype": "Valid", + "recclass": "L6", + "reclat": "45.133330", + "reclong": "21.666670", + "year": "1858-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29.5, -6.83333] }, + "id": "12232", + "mass": "950", + "name": "Kalaba", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-6.833330", + "reclong": "29.500000", + "year": "1951-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [73.98333, 17.83333] }, + "id": "12236", + "mass": "4500", + "name": "Kalumbi", + "nametype": "Valid", + "recclass": "L6", + "reclat": "17.833330", + "reclong": "73.983330", + "year": "1879-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [81.46667, 26.03333] }, + "id": "12238", + "mass": "2770", + "name": "Kamalpur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "26.033330", + "reclong": "81.466670", + "year": "1942-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [139.95667, 36.04167] }, + "id": "12240", + "mass": "448", + "name": "Kamiomi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "36.041670", + "reclong": "139.956670", + "year": "1913-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.8, 14.18333] }, + "id": "12241", + "mass": "1293", + "name": "Kamsagar", + "nametype": "Valid", + "recclass": "L6", + "reclat": "14.183330", + "reclong": "75.800000", + "year": "1902-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [65.78333, 31.6] }, + "id": "12243", + "mass": "299", + "name": "Kandahar (Afghanistan)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "31.600000", + "reclong": "65.783330", + "year": "1959-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.5, -7] }, + "id": "12245", + "mass": "1630", + "name": "Kangean", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-7.000000", + "reclong": "115.500000", + "year": "1908-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.3, 32.08333] }, + "id": "12246", + "mass": "400", + "name": "Kangra Valley", + "nametype": "Valid", + "recclass": "H5", + "reclat": "32.083330", + "reclong": "76.300000", + "year": "1897-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.63333, 4.7] }, + "id": "12251", + "mass": "11355", + "name": "Kapoeta", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "4.700000", + "reclong": "33.633330", + "year": "1942-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [73.22329, 20.33916] }, + "id": "47357", + "mass": "1600", + "name": "Kaprada", + "nametype": "Valid", + "recclass": "L5/6", + "reclat": "20.339160", + "reclong": "73.223290", + "year": "2004-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [73.36667, 42.45] }, + "id": "12253", + "mass": "3500", + "name": "Kaptal-Aryk", + "nametype": "Valid", + "recclass": "L6", + "reclat": "42.450000", + "reclong": "73.366670", + "year": "1937-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [81.01667, 47.21667] }, + "id": "12256", + "mass": "3000", + "name": "Karakol", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "47.216670", + "reclong": "81.016670", + "year": "1840-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.58333, -3.5] }, + "id": "12258", + "mass": "2220", + "name": "Karatu", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "-3.500000", + "reclong": "35.583330", + "year": "1963-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7.15, 12.9] }, + "id": "12260", + "mass": "180", + "name": "Karewar", + "nametype": "Valid", + "recclass": "L6", + "reclat": "12.900000", + "reclong": "7.150000", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [67.16667, 27.8] }, + "id": "12262", + "mass": "22000", + "name": "Karkh", + "nametype": "Valid", + "recclass": "L6", + "reclat": "27.800000", + "reclong": "67.166670", + "year": "1905-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [71.6, 31.58333] }, + "id": "12263", + "mass": "2950", + "name": "Karloowala", + "nametype": "Valid", + "recclass": "L6", + "reclat": "31.583330", + "reclong": "71.600000", + "year": "1955-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [139.91667, -35.08333] }, + "id": "12264", + "mass": "41730", + "name": "Karoonda", + "nametype": "Valid", + "recclass": "CK4", + "reclat": "-35.083330", + "reclong": "139.916670", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [136.76667, 35.36667] }, + "id": "12266", + "mass": "710", + "name": "Kasamatsu", + "nametype": "Valid", + "recclass": "H", + "reclat": "35.366670", + "reclong": "136.766670", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.58333, 29.58333] }, + "id": "30740", + "mass": "16820", + "name": "Kasauli", + "nametype": "Valid", + "recclass": "H4", + "reclat": "29.583330", + "reclong": "77.583330", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.08333, 11.33333] }, + "id": "35465", + "mass": "1500", + "name": "Katagum", + "nametype": "Valid", + "recclass": "L6", + "reclat": "11.333330", + "reclong": "10.083330", + "year": "1999-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.81333, 25.14333] }, + "id": "47351", + "mass": "6800", + "name": "Kavarpura", + "nametype": "Valid", + "recclass": "Iron, IIE-an", + "reclat": "25.143330", + "reclong": "75.813330", + "year": "2006-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.78, 39.26333] }, + "id": "12268", + "mass": "85000", + "name": "Kayakent", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "39.263330", + "reclong": "31.780000", + "year": "1961-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [112.01667, -7.75] }, + "id": "12270", + "mass": "3300", + "name": "Kediri", + "nametype": "Valid", + "recclass": "L4", + "reclat": "-7.750000", + "reclong": "112.016670", + "year": "1940-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29.41822, 36.54194] }, + "id": "53654", + "mass": "5760", + "name": "Kemer", + "nametype": "Valid", + "recclass": "L4", + "reclat": "36.541940", + "reclong": "29.418220", + "year": "2008-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "3190", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-96, 29.45] }, + "id": "12275", + "mass": "6937", + "name": "Kendleton", + "nametype": "Valid", + "recclass": "L4", + "reclat": "29.450000", + "reclong": "-96.000000", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [86.70278, 20.4625] }, + "id": "12276", + "mass": "6669.2", + "name": "Kendrapara", + "nametype": "Valid", + "recclass": "H4-5", + "reclat": "20.462500", + "reclong": "86.702780", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.3, 48.4] }, + "id": "12282", + "mass": "5000", + "name": "Kerilis", + "nametype": "Valid", + "recclass": "H5", + "reclat": "48.400000", + "reclong": "-3.300000", + "year": "1874-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.08333, 48.11667] }, + "id": "12284", + "mass": "80000", + "name": "Kernouve", + "nametype": "Valid", + "recclass": "H6", + "reclat": "48.116670", + "reclong": "-3.083330", + "year": "1869-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [141.61667, 38.98333] }, + "id": "12286", + "mass": "135000", + "name": "Kesen", + "nametype": "Valid", + "recclass": "H4", + "reclat": "38.983330", + "reclong": "141.616670", + "year": "1850-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [72.3, 29.53333] }, + "id": "12288", + "mass": "13600", + "name": "Khairpur", + "nametype": "Valid", + "recclass": "EL6", + "reclat": "29.533330", + "reclong": "72.300000", + "year": "1873-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [83.11667, 25.55] }, + "id": "12289", + "mass": "3698", + "name": "Khanpur", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "25.550000", + "reclong": "83.116670", + "year": "1932-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.075, 50.625] }, + "id": "12291", + "mass": "1500", + "name": "Kharkov", + "nametype": "Valid", + "recclass": "L6", + "reclat": "50.625000", + "reclong": "35.075000", + "year": "1787-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.88333, 26.95] }, + "id": "12294", + "mass": "450", + "name": "Kheragur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "26.950000", + "reclong": "77.883330", + "year": "1860-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.81667, 28.01667] }, + "id": "12296", + "mass": "100", + "name": "Khetri", + "nametype": "Valid", + "recclass": "H6", + "reclat": "28.016670", + "reclong": "75.816670", + "year": "1867-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.33333, 56.75] }, + "id": "12297", + "mass": "6109", + "name": "Khmelevka", + "nametype": "Valid", + "recclass": "L5", + "reclat": "56.750000", + "reclong": "75.333330", + "year": "1929-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [81.53333, 25.1] }, + "id": "12298", + "mass": "9700", + "name": "Khohar", + "nametype": "Valid", + "recclass": "L3.6", + "reclat": "25.100000", + "reclong": "81.533330", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [36, 16] }, + "id": "12299", + "mass": "3200", + "name": "Khor Temiki", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "16.000000", + "reclong": "36.000000", + "year": "1932-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [28, 14] }, + "id": "12300", + "mass": "100000", + "name": "Kidairat", + "nametype": "Valid", + "recclass": "H6", + "reclat": "14.000000", + "reclong": "28.000000", + "year": "1983-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.15, 54.4] }, + "id": "12301", + "mass": "737.6", + "name": "Kiel", + "nametype": "Valid", + "recclass": "L6", + "reclat": "54.400000", + "reclong": "10.150000", + "year": "1962-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-11.33333, 16.58333] }, + "id": "12303", + "mass": "1500", + "name": "Kiffa", + "nametype": "Valid", + "recclass": "H5", + "reclat": "16.583330", + "reclong": "-11.333330", + "year": "1970-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [138.38333, 36.85] }, + "id": "12305", + "mass": "331", + "name": "Kijima (1906)", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "36.850000", + "reclong": "138.383330", + "year": "1906-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [34, 55] }, + "id": "12306", + "mass": "195", + "name": "Kikino", + "nametype": "Valid", + "recclass": "H6", + "reclat": "55.000000", + "reclong": "34.000000", + "year": "1809-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.8, 12.76667] }, + "id": "12307", + "mass": "19000", + "name": "Kilabo", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "12.766670", + "reclong": "9.800000", + "year": "2002-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "41", + ":@computed_region_nnqa_25f4": "2971", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-89.6, 43.58333] }, + "id": "12308", + "mass": "772", + "name": "Kilbourn", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.583330", + "reclong": "-89.600000", + "year": "1911-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7.66667, 54.66667] }, + "id": "12309", + "mass": "140", + "name": "Killeter", + "nametype": "Valid", + "recclass": "H6", + "reclat": "54.666670", + "reclong": "-7.666670", + "year": "1844-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [24.68333, 11.63333] }, + "id": "12316", + "mass": "67.400000000000006", + "name": "Kingai", + "nametype": "Valid", + "recclass": "H6", + "reclat": "11.633330", + "reclong": "24.683330", + "year": "1967-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "2018", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-95.95, 30.75] }, + "id": "12321", + "mass": "97.7", + "name": "Kirbyville", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "30.750000", + "reclong": "-95.950000", + "year": "1906-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.30833, 48.16667] }, + "id": "12325", + "mass": "1550", + "name": "Kisvarsány", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.166670", + "reclong": "22.308330", + "year": "1914-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-80.38333, 43.38333] }, + "id": "12326", + "mass": "202.6", + "name": "Kitchener", + "nametype": "Valid", + "recclass": "L6", + "reclat": "43.383330", + "reclong": "-80.383330", + "year": "1998-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.8, 51.6] }, + "id": "12332", + "mass": "3250", + "name": "Klein-Wenden", + "nametype": "Valid", + "recclass": "H6", + "reclat": "51.600000", + "reclong": "10.800000", + "year": "1843-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.4, 48.9] }, + "id": "12335", + "mass": "500000", + "name": "Knyahinya", + "nametype": "Valid", + "recclass": "L/LL5", + "reclat": "48.900000", + "reclong": "22.400000", + "year": "1866-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [135.16667, 34.73333] }, + "id": "12336", + "mass": "136", + "name": "Kobe", + "nametype": "Valid", + "recclass": "CK4", + "reclat": "34.733330", + "reclong": "135.166670", + "year": "1999-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [133.95, 34.3] }, + "id": "12342", + "mass": "11510", + "name": "Kokubunji", + "nametype": "Valid", + "recclass": "L6", + "reclat": "34.300000", + "reclong": "133.950000", + "year": "1986-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [139.75, 35.73333] }, + "id": "12343", + "mass": "238", + "name": "Komagome", + "nametype": "Valid", + "recclass": "Iron", + "reclat": "35.733330", + "reclong": "139.750000", + "year": "1926-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.16667, 42.51667] }, + "id": "12344", + "mass": "90", + "name": "Konovo", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "42.516670", + "reclong": "26.166670", + "year": "1931-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.17633, 48.76367] }, + "id": "53810", + "mass": "4300", + "name": "Košice", + "nametype": "Valid", + "recclass": "H5", + "reclat": "48.763670", + "reclong": "21.176330", + "year": "2010-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7.46472, 49.32694] }, + "id": "12353", + "mass": "16500", + "name": "Krähenberg", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "49.326940", + "reclong": "7.464720", + "year": "1869-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [40.9, 54.03333] }, + "id": "12355", + "mass": "2440", + "name": "Krasnoi-Ugol", + "nametype": "Valid", + "recclass": "L6", + "reclat": "54.033330", + "reclong": "40.900000", + "year": "1829-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [56.08333, 54.33333] }, + "id": "12357", + "mass": "4000", + "name": "Krasnyi Klyuch", + "nametype": "Valid", + "recclass": "H5", + "reclat": "54.333330", + "reclong": "56.083330", + "year": "1946-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77, 56.8] }, + "id": "12363", + "mass": "845.2", + "name": "Krutikha", + "nametype": "Valid", + "recclass": "OC", + "reclat": "56.800000", + "reclong": "77.000000", + "year": "1906-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.76667, 47.83333] }, + "id": "12364", + "mass": "50000", + "name": "Krymka", + "nametype": "Valid", + "recclass": "LL3.2", + "reclat": "47.833330", + "reclong": "30.766670", + "year": "1946-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.7, 51.15] }, + "id": "12368", + "mass": "2250", + "name": "Kukschin", + "nametype": "Valid", + "recclass": "L6", + "reclat": "51.150000", + "reclong": "31.700000", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [66.80222, 30.73111] }, + "id": "12369", + "mass": "453.6", + "name": "Kulak", + "nametype": "Valid", + "recclass": "L5", + "reclat": "30.731110", + "reclong": "66.802220", + "year": "1961-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.5, 50.75] }, + "id": "12370", + "mass": "6000", + "name": "Kuleschovka", + "nametype": "Valid", + "recclass": "L6", + "reclat": "50.750000", + "reclong": "33.500000", + "year": "1811-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [45, 41.11667] }, + "id": "12373", + "mass": "3719", + "name": "Kulp", + "nametype": "Valid", + "recclass": "H6", + "reclat": "41.116670", + "reclong": "45.000000", + "year": "1906-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [61.36667, 55.78333] }, + "id": "12377", + "mass": "200000", + "name": "Kunashak", + "nametype": "Valid", + "recclass": "L6", + "reclat": "55.783330", + "reclong": "61.366670", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [59.2, 42.25] }, + "id": "12379", + "mass": "1100000", + "name": "Kunya-Urgench", + "nametype": "Valid", + "recclass": "H5", + "reclat": "42.250000", + "reclong": "59.200000", + "year": "1998-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [138.38333, 37.05] }, + "id": "12381", + "mass": "4460", + "name": "Kushiike", + "nametype": "Valid", + "recclass": "OC", + "reclat": "37.050000", + "reclong": "138.383330", + "year": "1920-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.38333, 29.68333] }, + "id": "12382", + "mass": "5", + "name": "Kusiali", + "nametype": "Valid", + "recclass": "L6", + "reclat": "29.683330", + "reclong": "78.383330", + "year": "1860-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [39.3, 44.51667] }, + "id": "12383", + "mass": "23", + "name": "Kutais", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.516670", + "reclong": "39.300000", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.03333, 10.83333] }, + "id": "12384", + "mass": "45000", + "name": "Kuttippuram", + "nametype": "Valid", + "recclass": "L6", + "reclat": "10.833330", + "reclong": "76.033330", + "year": "1914-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.33333, 55.2] }, + "id": "12385", + "mass": "4047", + "name": "Kuznetzovo", + "nametype": "Valid", + "recclass": "L6", + "reclat": "55.200000", + "reclong": "75.333330", + "year": "1932-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [130.63333, 32.03333] }, + "id": "12390", + "mass": "45000", + "name": "Kyushu", + "nametype": "Valid", + "recclass": "L6", + "reclat": "32.033330", + "reclong": "130.633330", + "year": "1886-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.75, 47.08333] }, + "id": "12392", + "mass": "2800", + "name": "La Bécasse", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.083330", + "reclong": "1.750000", + "year": "1879-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-101.28333, 20.66667] }, + "id": "12394", + "mass": "399", + "name": "La Charca", + "nametype": "Valid", + "recclass": "OC", + "reclat": "20.666670", + "reclong": "-101.283330", + "year": "1878-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-61.53333, -37.33333] }, + "id": "12395", + "mass": "2000", + "name": "La Colina", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-37.333330", + "reclong": "-61.533330", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-58.16667, -31.23333] }, + "id": "12396", + "mass": "45000", + "name": "La Criolla", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-31.233330", + "reclong": "-58.166670", + "year": "1985-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.58333, 44.28333] }, + "id": "12408", + "mass": "3833", + "name": "Laborel", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.283330", + "reclong": "5.583330", + "year": "1871-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.71667, 26.78333] }, + "id": "12433", + "mass": "900", + "name": "Lahrauli", + "nametype": "Valid", + "recclass": "Ureilite", + "reclat": "26.783330", + "reclong": "82.716670", + "year": "1955-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.63333, 48.76667] }, + "id": "12434", + "mass": "37000", + "name": "L'Aigle", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.766670", + "reclong": "0.633330", + "year": "1803-01-01T00:00:00.000Z" + }, + { + "fall": "Found", + "id": "32531", + "mass": "9.6", + "name": "Cumulus Hills 04075", + "nametype": "Valid", + "recclass": "Pallasite", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.03333, 21.86667] }, + "id": "12435", + "mass": "212.5", + "name": "Lakangaon", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "21.866670", + "reclong": "76.033330", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.56667, 24.45] }, + "id": "12451", + "mass": "372", + "name": "Lalitpur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "24.450000", + "reclong": "78.566670", + "year": "1887-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.06667, 47.7] }, + "id": "12455", + "mass": "51700", + "name": "Lancé", + "nametype": "Valid", + "recclass": "CO3.5", + "reclat": "47.700000", + "reclong": "1.066670", + "year": "1872-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.11667, 43.75] }, + "id": "12456", + "mass": "7000", + "name": "Lancon", + "nametype": "Valid", + "recclass": "H6", + "reclat": "43.750000", + "reclong": "5.116670", + "year": "1897-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.73333, 58.85] }, + "id": "12461", + "mass": "2300", + "name": "Långhalsen", + "nametype": "Valid", + "recclass": "L6", + "reclat": "58.850000", + "reclong": "16.733330", + "year": "1947-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [126.19611, 46.24167] }, + "id": "12464", + "mass": "1282", + "name": "Lanxi", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.241670", + "reclong": "126.196110", + "year": "1986-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.23333, 47.75] }, + "id": "12465", + "mass": "7000", + "name": "Lanzenkirchen", + "nametype": "Valid", + "recclass": "L4", + "reclat": "47.750000", + "reclong": "16.233330", + "year": "1925-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.16667, 33.13333] }, + "id": "12466", + "mass": "14250", + "name": "Laochenzhen", + "nametype": "Valid", + "recclass": "H5", + "reclat": "33.133330", + "reclong": "115.166670", + "year": "1987-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.11667, 51.9] }, + "id": "12740", + "mass": "1060", + "name": "Launton", + "nametype": "Valid", + "recclass": "L6", + "reclat": "51.900000", + "reclong": "-1.116670", + "year": "1830-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [51.56667, 52.45] }, + "id": "12743", + "mass": "800", + "name": "Lavrentievka", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.450000", + "reclong": "51.566670", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.43333, 47.16667] }, + "id": "12748", + "mass": "3000", + "name": "Le Pressoir", + "nametype": "Valid", + "recclass": "H5", + "reclat": "47.166670", + "reclong": "0.433330", + "year": "1845-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.86667, 48.53333] }, + "id": "12749", + "mass": "780", + "name": "Le Teilleul", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "48.533330", + "reclong": "-0.866670", + "year": "1845-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "20", + ":@computed_region_nnqa_25f4": "608", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.33333, 35.88333] }, + "id": "12755", + "mass": "51500", + "name": "Leedey", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.883330", + "reclong": "-99.333330", + "year": "1943-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [28.36667, -25.66667] }, + "id": "12756", + "mass": "460", + "name": "Leeuwfontein", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-25.666670", + "reclong": "28.366670", + "year": "1912-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6.96667, 52.66667] }, + "id": "12759", + "mass": "271.39999999999998", + "name": "Leighlinbridge", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.666670", + "reclong": "-6.966670", + "year": "1999-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "29", + ":@computed_region_nnqa_25f4": "1585", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-87.5, 34.58333] }, + "id": "12760", + "mass": "877", + "name": "Leighton", + "nametype": "Valid", + "recclass": "H5", + "reclat": "34.583330", + "reclong": "-87.500000", + "year": "1907-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [32.85, 52.26667] }, + "id": "12765", + "mass": "700", + "name": "Leonovka", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.266670", + "reclong": "32.850000", + "year": "1900-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.25, 48.35] }, + "id": "12769", + "mass": "125", + "name": "Les Ormes", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.350000", + "reclong": "3.250000", + "year": "1857-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [4.73333, 50.36667] }, + "id": "12772", + "mass": "2000", + "name": "Lesves", + "nametype": "Valid", + "recclass": "L6", + "reclat": "50.366670", + "reclong": "4.733330", + "year": "1896-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.18333, -26.15] }, + "id": "14646", + "mass": "4000", + "name": "Lichtenberg", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-26.150000", + "reclong": "26.183330", + "year": "1973-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.86667, 56.65] }, + "id": "14650", + "mass": "6862", + "name": "Lillaverke", + "nametype": "Valid", + "recclass": "H5", + "reclat": "56.650000", + "reclong": "15.866670", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-8.78333, 52.56667] }, + "id": "14652", + "mass": "50000", + "name": "Limerick", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.566670", + "reclong": "-8.783330", + "year": "1813-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.9, 52.75] }, + "id": "14655", + "mass": "1862", + "name": "Linum", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.750000", + "reclong": "12.900000", + "year": "1854-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [118.98333, 31.63333] }, + "id": "14659", + "mass": "498", + "name": "Lishui", + "nametype": "Valid", + "recclass": "L5", + "reclat": "31.633330", + "reclong": "118.983330", + "year": "1978-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.85, 50.2] }, + "id": "14661", + "mass": "12800", + "name": "Lissa", + "nametype": "Valid", + "recclass": "L6", + "reclat": "50.200000", + "reclong": "14.850000", + "year": "1808-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "18", + ":@computed_region_nnqa_25f4": "2171", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-92.08333, 37.91667] }, + "id": "14664", + "mass": "491", + "name": "Little Piney", + "nametype": "Valid", + "recclass": "L5", + "reclat": "37.916670", + "reclong": "-92.083330", + "year": "1839-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.43333, 56] }, + "id": "14670", + "mass": "5213", + "name": "Lixna", + "nametype": "Valid", + "recclass": "H4", + "reclat": "56.000000", + "reclong": "26.433330", + "year": "1820-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [71.8, 29.53333] }, + "id": "14675", + "mass": "1000", + "name": "Lodran", + "nametype": "Valid", + "recclass": "Lodranite", + "reclat": "29.533330", + "reclong": "71.800000", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [72.62667, 26.96556] }, + "id": "14678", + "mass": "40000", + "name": "Lohawat", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "26.965560", + "reclong": "72.626670", + "year": "1994-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "40", + ":@computed_region_nnqa_25f4": "2770", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-77.21163, 38.70066] }, + "id": "52843", + "mass": "329.7", + "name": "Lorton", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.700660", + "reclong": "-77.211630", + "year": "2010-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.83333, 38] }, + "id": "14708", + "mass": "25", + "name": "Los Martinez", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.000000", + "reclong": "-0.833330", + "year": "1894-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "20", + ":@computed_region_nnqa_25f4": "2711", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-95.15, 36.00833] }, + "id": "14711", + "mass": "17000", + "name": "Lost City", + "nametype": "Valid", + "recclass": "H5", + "reclat": "36.008330", + "reclong": "-95.150000", + "year": "1970-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "36", + ":@computed_region_nnqa_25f4": "1327", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-85.75, 38.25] }, + "id": "14716", + "mass": "1300", + "name": "Louisville", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.250000", + "reclong": "-85.750000", + "year": "1977-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [19.91667, 52] }, + "id": "14718", + "mass": "59000", + "name": "Łowicz", + "nametype": "Valid", + "recclass": "Mesosiderite-A3", + "reclat": "52.000000", + "reclong": "19.916670", + "year": "1935-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.15, 24.95] }, + "id": "14721", + "mass": "9241", + "name": "Lua", + "nametype": "Valid", + "recclass": "L5", + "reclat": "24.950000", + "reclong": "75.150000", + "year": "1926-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.48333, 47.85] }, + "id": "14724", + "mass": "3500", + "name": "Lucé", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.850000", + "reclong": "0.483330", + "year": "1768-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "31", + ":@computed_region_nnqa_25f4": "1567", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-84.76667, 32.03333] }, + "id": "14753", + "mass": "340", + "name": "Lumpkin", + "nametype": "Valid", + "recclass": "L6", + "reclat": "32.033330", + "reclong": "-84.766670", + "year": "1869-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [103.3, 24.8] }, + "id": "14754", + "mass": "2520", + "name": "Lunan", + "nametype": "Valid", + "recclass": "H6", + "reclat": "24.800000", + "reclong": "103.300000", + "year": "1980-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.03333, 56.21667] }, + "id": "14755", + "mass": "11000", + "name": "Lundsgård", + "nametype": "Valid", + "recclass": "L6", + "reclat": "56.216670", + "reclong": "13.033330", + "year": "1889-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.7, 61.2] }, + "id": "14756", + "mass": "885", + "name": "Luotolax", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "61.200000", + "reclong": "27.700000", + "year": "1813-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5, 46.21667] }, + "id": "14757", + "mass": "14000", + "name": "Luponnas", + "nametype": "Valid", + "recclass": "H3-5", + "reclat": "46.216670", + "reclong": "5.000000", + "year": "1753-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29.43333, -7.21667] }, + "id": "14759", + "name": "Lusaka", + "nametype": "Valid", + "recclass": "Unknown", + "reclat": "-7.216670", + "reclong": "29.433330", + "year": "1951-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [97, 19] }, + "id": "14764", + "mass": "540", + "name": "Mabwe-Khoywa", + "nametype": "Valid", + "recclass": "L5", + "reclat": "19.000000", + "reclong": "97.000000", + "year": "1937-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-36.66667, -5.2] }, + "id": "15370", + "mass": "1500", + "name": "Macau", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-5.200000", + "reclong": "-36.666670", + "year": "1836-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.24222, -15.21222] }, + "id": "15371", + "mass": "93200", + "name": "Machinga", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-15.212220", + "reclong": "35.242220", + "year": "1981-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.95, -28.83333] }, + "id": "15372", + "mass": "1995", + "name": "Macibini", + "nametype": "Valid", + "recclass": "Eucrite-pmict", + "reclat": "-28.833330", + "reclong": "31.950000", + "year": "1936-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [86.36667, 25.91667] }, + "id": "15379", + "mass": "1000", + "name": "Madhipura", + "nametype": "Valid", + "recclass": "L", + "reclat": "25.916670", + "reclong": "86.366670", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.53333, -7.75] }, + "id": "15380", + "mass": "400", + "name": "Madiun", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-7.750000", + "reclong": "111.533330", + "year": "1935-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.71667, 40.41667] }, + "id": "15382", + "mass": "400", + "name": "Madrid", + "nametype": "Valid", + "recclass": "L6", + "reclat": "40.416670", + "reclong": "-3.716670", + "year": "1896-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-49.93333, -26.16667] }, + "id": "15383", + "mass": "600", + "name": "Mafra", + "nametype": "Valid", + "recclass": "L3-4", + "reclat": "-26.166670", + "reclong": "-49.933330", + "year": "1941-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.51667, 37.86667] }, + "id": "15386", + "mass": "5000", + "name": "Magnesia", + "nametype": "Valid", + "recclass": "Iron, IAB-sHL", + "reclat": "37.866670", + "reclong": "27.516670", + "year": "1899-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.65, -19.48333] }, + "id": "15387", + "mass": "666.6", + "name": "Magombedze", + "nametype": "Valid", + "recclass": "H3-5", + "reclat": "-19.483330", + "reclong": "31.650000", + "year": "1990-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [95.78333, 27.66667] }, + "id": "47361", + "mass": "70500", + "name": "Mahadevpur", + "nametype": "Valid", + "recclass": "H4/5", + "reclat": "27.666670", + "reclong": "95.783330", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.38333, 12.83333] }, + "id": "30751", + "mass": "4629", + "name": "Maigatari-Danduma", + "nametype": "Valid", + "recclass": "H5/6", + "reclat": "12.833330", + "reclong": "9.383330", + "year": "2004-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "11", + ":@computed_region_nnqa_25f4": "611", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-104, 32.21667] }, + "id": "15393", + "mass": "150", + "name": "Malaga", + "nametype": "Valid", + "recclass": "OC", + "reclat": "32.216670", + "reclong": "-104.000000", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.75, 9.5] }, + "id": "15394", + "mass": "2000", + "name": "Malakal", + "nametype": "Valid", + "recclass": "L5", + "reclat": "9.500000", + "reclong": "31.750000", + "year": "1970-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.51667, -3.13333] }, + "id": "15395", + "mass": "470", + "name": "Malampaka", + "nametype": "Valid", + "recclass": "H", + "reclat": "-3.133330", + "reclong": "33.516670", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-63.23333, -28.93333] }, + "id": "15397", + "name": "Malotas", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-28.933330", + "reclong": "-63.233330", + "year": "1931-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.76667, -29.45] }, + "id": "15400", + "mass": "807", + "name": "Malvern", + "nametype": "Valid", + "recclass": "Eucrite-pmict", + "reclat": "-29.450000", + "reclong": "26.766670", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [62.08333, 45.21667] }, + "id": "15401", + "mass": "1000", + "name": "Mamra Springs", + "nametype": "Valid", + "recclass": "L6", + "reclat": "45.216670", + "reclong": "62.083330", + "year": "1927-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [86.7, 23.05] }, + "id": "15402", + "mass": "1700", + "name": "Manbhoom", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "23.050000", + "reclong": "86.700000", + "year": "1863-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.1, 20.96667] }, + "id": "15403", + "mass": "50", + "name": "Manegaon", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "20.966670", + "reclong": "76.100000", + "year": "1843-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.6, -17.65] }, + "id": "15405", + "mass": "22300", + "name": "Mangwendi", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "-17.650000", + "reclong": "31.600000", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [44.63333, 45.81667] }, + "id": "15409", + "mass": "3555", + "name": "Manych", + "nametype": "Valid", + "recclass": "LL3.4", + "reclat": "45.816670", + "reclong": "44.633330", + "year": "1951-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [72.08333, 34.23333] }, + "id": "15414", + "mass": "4500", + "name": "Mardan", + "nametype": "Valid", + "recclass": "H5", + "reclat": "34.233330", + "reclong": "72.083330", + "year": "1948-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "15418", + "mass": "114", + "name": "Maria Linden", + "nametype": "Valid", + "recclass": "L4", + "year": "1925-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "19", + ":@computed_region_nnqa_25f4": "471", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.38333, 42.71667] }, + "id": "15419", + "mass": "340", + "name": "Mariaville", + "nametype": "Valid", + "recclass": "Iron", + "reclat": "42.716670", + "reclong": "-99.383330", + "year": "1898-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.46745, 54.76183] }, + "id": "48973", + "mass": "25.81", + "name": "Maribo", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "54.761830", + "reclong": "11.467450", + "year": "2009-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29.25, 4.66667] }, + "id": "15421", + "mass": "3200", + "name": "Maridi", + "nametype": "Valid", + "recclass": "H6", + "reclat": "4.666670", + "reclong": "29.250000", + "year": "1941-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-49.93333, -22.25] }, + "id": "15422", + "mass": "2500", + "name": "Marilia", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-22.250000", + "reclong": "-49.933330", + "year": "1971-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "16", + ":@computed_region_nnqa_25f4": "287", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-91.6, 41.9] }, + "id": "15424", + "mass": "28400", + "name": "Marion (Iowa)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "41.900000", + "reclong": "-91.600000", + "year": "1847-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.5, 61.5] }, + "id": "15426", + "mass": "45000", + "name": "Marjalahti", + "nametype": "Valid", + "recclass": "Pallasite, PMG", + "reclat": "61.500000", + "reclong": "30.500000", + "year": "1902-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.15, 44.5] }, + "id": "15429", + "mass": "3000", + "name": "Marmande", + "nametype": "Valid", + "recclass": "L5", + "reclat": "44.500000", + "reclong": "0.150000", + "year": "1848-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [48.1, -14.2] }, + "id": "15430", + "mass": "6000", + "name": "Maromandia", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-14.200000", + "reclong": "48.100000", + "year": "2002-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "39", + ":@computed_region_nnqa_25f4": "2740", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-84.1, 35.8] }, + "id": "15436", + "mass": "1443", + "name": "Maryville", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.800000", + "reclong": "-84.100000", + "year": "1983-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.86667, 45.36667] }, + "id": "15438", + "mass": "1000", + "name": "Mascombes", + "nametype": "Valid", + "recclass": "L6", + "reclat": "45.366670", + "reclong": "1.866670", + "year": "1836-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0, 0] }, + "id": "53653", + "mass": "24.54", + "name": "Mason Gully", + "nametype": "Valid", + "recclass": "H5", + "reclat": "0.000000", + "reclong": "0.000000", + "year": "2010-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.61667, 48.13333] }, + "id": "15443", + "mass": "1600", + "name": "Mässing", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "48.133330", + "reclong": "12.616670", + "year": "1803-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.13333, 48.18333] }, + "id": "15446", + "mass": "19000", + "name": "Mauerkirchen", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.183330", + "reclong": "13.133330", + "year": "1768-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [57, -20] }, + "id": "15447", + "mass": "220", + "name": "Mauritius", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-20.000000", + "reclong": "57.000000", + "year": "1801-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.08333, 8.96667] }, + "id": "15451", + "mass": "4850", + "name": "Mayo Belwa", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "8.966670", + "reclong": "12.083330", + "year": "1974-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-101.68333, 24.68333] }, + "id": "15453", + "mass": "4000", + "name": "Mazapil", + "nametype": "Valid", + "recclass": "Iron, IAB-sLL", + "reclat": "24.683330", + "reclong": "-101.683330", + "year": "1885-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30, -1.21667] }, + "id": "15454", + "mass": "4975", + "name": "Maziba", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-1.216670", + "reclong": "30.000000", + "year": "1942-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [34.16667, 1.06667] }, + "id": "15455", + "mass": "150000", + "name": "Mbale", + "nametype": "Valid", + "recclass": "L5/6", + "reclat": "1.066670", + "reclong": "34.166670", + "year": "1992-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-67.5, -27.25] }, + "id": "15467", + "mass": "31", + "name": "Medanitos", + "nametype": "Valid", + "recclass": "Eucrite-cm", + "reclat": "-27.250000", + "reclong": "-67.500000", + "year": "1953-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.8, 29.01667] }, + "id": "15469", + "mass": "22", + "name": "Meerut", + "nametype": "Valid", + "recclass": "H5", + "reclat": "29.016670", + "reclong": "77.800000", + "year": "1861-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [106.88333, -6.23333] }, + "id": "15470", + "mass": "24750", + "name": "Meester-Cornelis", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-6.233330", + "reclong": "106.883330", + "year": "1915-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.15, 53.18333] }, + "id": "15485", + "mass": "10500", + "name": "Menow", + "nametype": "Valid", + "recclass": "H4", + "reclat": "53.183330", + "reclong": "13.150000", + "year": "1862-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7.21817, 46.81867] }, + "id": "15486", + "mass": "28.9", + "name": "Menziswyl", + "nametype": "Valid", + "recclass": "L5", + "reclat": "46.818670", + "reclong": "7.218170", + "year": "1903-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.06667, 55.05] }, + "id": "15489", + "mass": "4000", + "name": "Mern", + "nametype": "Valid", + "recclass": "L6", + "reclat": "55.050000", + "reclong": "12.066670", + "year": "1878-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.66667, 0] }, + "id": "15491", + "mass": "6000", + "name": "Meru", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "0.000000", + "reclong": "37.666670", + "year": "1945-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [81.98333, 25.48333] }, + "id": "15492", + "mass": "71400", + "name": "Merua", + "nametype": "Valid", + "recclass": "H5", + "reclat": "25.483330", + "reclong": "81.983330", + "year": "1920-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.56667, 38.18333] }, + "id": "15495", + "mass": "2405", + "name": "Messina", + "nametype": "Valid", + "recclass": "L5", + "reclat": "38.183330", + "reclong": "15.566670", + "year": "1955-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.1, 50.58333] }, + "id": "16626", + "mass": "870", + "name": "Meuselbach", + "nametype": "Valid", + "recclass": "L6", + "reclat": "50.583330", + "reclong": "11.100000", + "year": "1897-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.25, 45.76667] }, + "id": "16627", + "mass": "1300", + "name": "Mezel", + "nametype": "Valid", + "recclass": "L6", + "reclat": "45.766670", + "reclong": "3.250000", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25.73333, 46.5] }, + "id": "16628", + "mass": "22700", + "name": "Mezö-Madaras", + "nametype": "Valid", + "recclass": "L3.7", + "reclat": "46.500000", + "reclong": "25.733330", + "year": "1852-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [83.61667, 25.9] }, + "id": "16629", + "mass": "350", + "name": "Mhow", + "nametype": "Valid", + "recclass": "L6", + "reclat": "25.900000", + "reclong": "83.616670", + "year": "1827-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.7, 34.8] }, + "id": "16631", + "mass": "1100", + "name": "Mianchi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "34.800000", + "reclong": "111.700000", + "year": "1980-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.16667, 54.56667] }, + "id": "16632", + "mass": "1600", + "name": "Middlesbrough", + "nametype": "Valid", + "recclass": "L6", + "reclat": "54.566670", + "reclong": "-1.166670", + "year": "1881-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "41", + ":@computed_region_nnqa_25f4": "2996", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-90.36556, 42.9075] }, + "id": "52090", + "mass": "3584", + "name": "Mifflin", + "nametype": "Valid", + "recclass": "L5", + "reclat": "42.907500", + "reclong": "-90.365560", + "year": "2010-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.96667, 48.06667] }, + "id": "16634", + "mass": "8000", + "name": "Mighei", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "48.066670", + "reclong": "30.966670", + "year": "1889-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [133.22, 35.56833] }, + "id": "16635", + "mass": "6380", + "name": "Mihonoseki", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.568330", + "reclong": "133.220000", + "year": "1992-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [17.53333, 46.23333] }, + "id": "16636", + "mass": "224.2", + "name": "Mike", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.233330", + "reclong": "17.533330", + "year": "1944-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.1, 46.18333] }, + "id": "16640", + "mass": "10000", + "name": "Milena", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.183330", + "reclong": "16.100000", + "year": "1842-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [120.36667, -26.45] }, + "id": "16643", + "mass": "330000", + "name": "Millbillillie", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "-26.450000", + "reclong": "120.366670", + "year": "1960-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "15", + ":@computed_region_nnqa_25f4": "11", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-92.05, 35.4] }, + "id": "16645", + "mass": "16700", + "name": "Miller (Arkansas)", + "nametype": "Valid", + "recclass": "H5", + "reclat": "35.400000", + "reclong": "-92.050000", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [136.93333, 35.07833] }, + "id": "16692", + "mass": "1040", + "name": "Minamino", + "nametype": "Valid", + "recclass": "L", + "reclat": "35.078330", + "reclong": "136.933330", + "year": "1632-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.7, 37.28333] }, + "id": "16696", + "mass": "42", + "name": "Mineo", + "nametype": "Valid", + "recclass": "Pallasite", + "reclat": "37.283330", + "reclong": "14.700000", + "year": "1826-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [120.66667, 32.33333] }, + "id": "16697", + "mass": "5500", + "name": "Min-Fan-Zhun", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "32.333330", + "reclong": "120.666670", + "year": "1952-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.6, 47.7] }, + "id": "16700", + "mass": "550", + "name": "Minnichhof", + "nametype": "Valid", + "recclass": "OC", + "reclat": "47.700000", + "reclong": "16.600000", + "year": "1905-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [83.25, 25.68333] }, + "id": "16701", + "mass": "8510", + "name": "Mirzapur", + "nametype": "Valid", + "recclass": "L5", + "reclat": "25.683330", + "reclong": "83.250000", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [23, 56.66667] }, + "id": "16703", + "mass": "5800", + "name": "Misshof", + "nametype": "Valid", + "recclass": "H5", + "reclat": "56.666670", + "reclong": "23.000000", + "year": "1890-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.93333, 61.73333] }, + "id": "16707", + "mass": "100.7", + "name": "Mjelleim", + "nametype": "Valid", + "recclass": "H", + "reclat": "61.733330", + "reclong": "5.933330", + "year": "1898-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [24.03333, 46.8] }, + "id": "16709", + "mass": "300000", + "name": "Mocs", + "nametype": "Valid", + "recclass": "L5-6", + "reclat": "46.800000", + "reclong": "24.033330", + "year": "1882-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "17", + ":@computed_region_nnqa_25f4": "1290", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-101.1, 38.5] }, + "id": "16711", + "mass": "35000", + "name": "Modoc (1905)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.500000", + "reclong": "-101.100000", + "year": "1905-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [174.4, -39.63333] }, + "id": "16713", + "mass": "4500", + "name": "Mokoia", + "nametype": "Valid", + "recclass": "CV3", + "reclat": "-39.633330", + "reclong": "174.400000", + "year": "1908-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.16667, 38.11667] }, + "id": "16715", + "mass": "144000", + "name": "Molina", + "nametype": "Valid", + "recclass": "H5", + "reclat": "38.116670", + "reclong": "-1.166670", + "year": "1858-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.46667, -31.25] }, + "id": "16717", + "mass": "150", + "name": "Molteno", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "-31.250000", + "reclong": "26.466670", + "year": "1953-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "2957", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-102.85833, 31.60833] }, + "id": "16719", + "mass": "2587", + "name": "Monahans (1998)", + "nametype": "Valid", + "recclass": "H5", + "reclat": "31.608330", + "reclong": "-102.858330", + "year": "1998-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "636", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-80.5, 35.25] }, + "id": "16720", + "mass": "8600", + "name": "Monroe", + "nametype": "Valid", + "recclass": "H4", + "reclat": "35.250000", + "reclong": "-80.500000", + "year": "1849-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-8.25, 38.01667] }, + "id": "16725", + "mass": "4885", + "name": "Monte das Fortes", + "nametype": "Valid", + "recclass": "L5", + "reclat": "38.016670", + "reclong": "-8.250000", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.35, 43.26667] }, + "id": "16726", + "mass": "3130", + "name": "Monte Milone", + "nametype": "Valid", + "recclass": "L5", + "reclat": "43.266670", + "reclong": "13.350000", + "year": "1846-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.9625, 43.39056] }, + "id": "16727", + "mass": "149000", + "name": "Montferré", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.390560", + "reclong": "1.962500", + "year": "1923-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.58333, 47.63333] }, + "id": "16729", + "mass": "500", + "name": "Montlivault", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.633330", + "reclong": "1.583330", + "year": "1838-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.35, -15.96667] }, + "id": "16733", + "name": "Monze", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-15.966670", + "reclong": "27.350000", + "year": "1950-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "2431", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-79.38333, 35.41667] }, + "id": "16736", + "mass": "1880", + "name": "Moore County", + "nametype": "Valid", + "recclass": "Eucrite-cm", + "reclat": "35.416670", + "reclong": "-79.383330", + "year": "1913-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-8.33333, 52.45] }, + "id": "16737", + "mass": "3520", + "name": "Mooresfort", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.450000", + "reclong": "-8.333330", + "year": "1810-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [145.6, -40.975] }, + "id": "16738", + "mass": "8887.5", + "name": "Moorleah", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-40.975000", + "reclong": "145.600000", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.83333, 28.78333] }, + "id": "16740", + "mass": "70", + "name": "Moradabad", + "nametype": "Valid", + "recclass": "L6", + "reclat": "28.783330", + "reclong": "78.833330", + "year": "1808-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [18.53333, 49.6] }, + "id": "16742", + "mass": "633", + "name": "Morávka", + "nametype": "Valid", + "recclass": "H5", + "reclat": "49.600000", + "reclong": "18.533330", + "year": "2000-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.13333, 44.6] }, + "id": "16747", + "mass": "1300", + "name": "Mornans", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.600000", + "reclong": "5.133330", + "year": "1875-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.7, 59.43333] }, + "id": "36592", + "mass": "3763", + "name": "Moss", + "nametype": "Valid", + "recclass": "CO3.6", + "reclat": "59.433330", + "reclong": "10.700000", + "year": "2006-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.33333, 26.83333] }, + "id": "16759", + "mass": "1500", + "name": "Moti-ka-nagla", + "nametype": "Valid", + "recclass": "H6", + "reclat": "26.833330", + "reclong": "77.333330", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.5, 45.2] }, + "id": "16762", + "mass": "9150", + "name": "Motta di Conti", + "nametype": "Valid", + "recclass": "H4", + "reclat": "45.200000", + "reclong": "8.500000", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [141.7, -29.8] }, + "id": "16766", + "mass": "11300", + "name": "Mount Browne", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-29.800000", + "reclong": "141.700000", + "year": "1902-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [4.8, 18.7] }, + "id": "16804", + "mass": "110000", + "name": "Mount Tazerzait", + "nametype": "Valid", + "recclass": "L5", + "reclat": "18.700000", + "reclong": "4.800000", + "year": "1991-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.86667, 44.08333] }, + "id": "16805", + "mass": "17000", + "name": "Mount Vaisi", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "44.083330", + "reclong": "6.866670", + "year": "1637-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.5, -11.5] }, + "id": "16820", + "mass": "1100", + "name": "Mtola", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "-11.500000", + "reclong": "33.500000", + "year": "1944-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.01667, 12.63333] }, + "id": "16841", + "mass": "4400", + "name": "Muddoor", + "nametype": "Valid", + "recclass": "L5", + "reclat": "12.633330", + "reclong": "77.016670", + "year": "1865-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [80.83333, 9.33333] }, + "id": "16851", + "mass": "25.5", + "name": "Mulletiwu", + "nametype": "Valid", + "recclass": "L", + "reclat": "9.333330", + "reclong": "80.833330", + "year": "1795-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [90.21667, 24.5] }, + "id": "16874", + "mass": "4703", + "name": "Muraid", + "nametype": "Valid", + "recclass": "L6", + "reclat": "24.500000", + "reclong": "90.216670", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [145.2, -36.61667] }, + "id": "16875", + "mass": "100000", + "name": "Murchison", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "-36.616670", + "reclong": "145.200000", + "year": "1969-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "36", + ":@computed_region_nnqa_25f4": "237", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-88.1, 36.6] }, + "id": "16882", + "mass": "12600", + "name": "Murray", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "36.600000", + "reclong": "-88.100000", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [85.53333, 26.13333] }, + "id": "16885", + "mass": "1245", + "name": "Muzaffarpur", + "nametype": "Valid", + "recclass": "Iron, IAB-sHL", + "reclat": "26.133330", + "reclong": "85.533330", + "year": "1964-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [72.63333, 23.05] }, + "id": "16887", + "name": "Myhee Caunta", + "nametype": "Valid", + "recclass": "OC", + "reclat": "23.050000", + "reclong": "72.633330", + "year": "1842-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1, 12] }, + "id": "16889", + "mass": "8165", + "name": "Nadiabondi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "12.000000", + "reclong": "1.000000", + "year": "1956-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [140.06167, 38.12167] }, + "id": "16890", + "mass": "1810", + "name": "Nagai", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.121670", + "reclong": "140.061670", + "year": "1922-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.21667, 26.98333] }, + "id": "16892", + "mass": "20", + "name": "Nagaria", + "nametype": "Valid", + "recclass": "Eucrite-cm", + "reclat": "26.983330", + "reclong": "78.216670", + "year": "1875-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [19.5, 49.16667] }, + "id": "16893", + "mass": "6100", + "name": "Nagy-Borové", + "nametype": "Valid", + "recclass": "L5", + "reclat": "49.166670", + "reclong": "19.500000", + "year": "1895-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.35, 31.31667] }, + "id": "16898", + "mass": "10000", + "name": "Nakhla", + "nametype": "Valid", + "recclass": "Martian (nakhlite)", + "reclat": "31.316670", + "reclong": "30.350000", + "year": "1911-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [100.08333, 13.73333] }, + "id": "16899", + "mass": "23200", + "name": "Nakhon Pathom", + "nametype": "Valid", + "recclass": "L6", + "reclat": "13.733330", + "reclong": "100.083330", + "year": "1923-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [79.2, 12.28333] }, + "id": "16902", + "mass": "4500", + "name": "Nammianthal", + "nametype": "Valid", + "recclass": "H5", + "reclat": "12.283330", + "reclong": "79.200000", + "year": "1886-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [103.5, 35.66667] }, + "id": "16903", + "mass": "52900", + "name": "Nan Yang Pao", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.666670", + "reclong": "103.500000", + "year": "1917-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "45", + ":@computed_region_nnqa_25f4": "419", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-77.16667, 38.41667] }, + "id": "16904", + "mass": "7500", + "name": "Nanjemoy", + "nametype": "Valid", + "recclass": "H6", + "reclat": "38.416670", + "reclong": "-77.166670", + "year": "1825-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [121.8, 32.11667] }, + "id": "16907", + "mass": "529", + "name": "Nantong", + "nametype": "Valid", + "recclass": "H6", + "reclat": "32.116670", + "reclong": "121.800000", + "year": "1984-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77, 19.25] }, + "id": "16908", + "mass": "17000", + "name": "Naoki", + "nametype": "Valid", + "recclass": "H6", + "reclat": "19.250000", + "reclong": "77.000000", + "year": "1928-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [51.5, 33.75] }, + "id": "16909", + "mass": "2700", + "name": "Naragh", + "nametype": "Valid", + "recclass": "H6", + "reclat": "33.750000", + "reclong": "51.500000", + "year": "1974-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [150.68889, -34.05] }, + "id": "16912", + "mass": "367.5", + "name": "Narellan", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-34.050000", + "reclong": "150.688890", + "year": "1928-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.51667, 42.51667] }, + "id": "16914", + "name": "Narni", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "42.516670", + "reclong": "12.516670", + "year": "0921-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [165.9, -21.73333] }, + "id": "16922", + "mass": "347", + "name": "Nassirah", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-21.733330", + "reclong": "165.900000", + "year": "1936-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "16923", + "mass": "1.4", + "name": "Natal", + "nametype": "Valid", + "recclass": "Stone-uncl", + "year": "1973-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [83.66667, 21.25] }, + "id": "16927", + "mass": "105", + "name": "Nawapali", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "21.250000", + "reclong": "83.666670", + "year": "1890-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [136.46528, 36.44917] }, + "id": "16934", + "mass": "420", + "name": "Neagari", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.449170", + "reclong": "136.465280", + "year": "1995-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [83.48333, 18.68333] }, + "id": "16935", + "mass": "4500", + "name": "Nedagolla", + "nametype": "Valid", + "recclass": "Iron, ungrouped", + "reclat": "18.683330", + "reclong": "83.483330", + "year": "1870-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.33333, 9.5] }, + "id": "16941", + "mass": "2450", + "name": "Nejo", + "nametype": "Valid", + "recclass": "L6", + "reclat": "9.500000", + "reclong": "35.333330", + "year": "1970-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.5, 56.5] }, + "id": "16945", + "mass": "10250", + "name": "Nerft", + "nametype": "Valid", + "recclass": "L6", + "reclat": "56.500000", + "reclong": "21.500000", + "year": "1864-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.80833, 47.525] }, + "id": "16950", + "mass": "6189", + "name": "Neuschwanstein", + "nametype": "Valid", + "recclass": "EL6", + "reclat": "47.525000", + "reclong": "10.808330", + "year": "2002-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "38", + ":@computed_region_nnqa_25f4": "2615", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-81.76667, 40] }, + "id": "16953", + "mass": "230000", + "name": "New Concord", + "nametype": "Valid", + "recclass": "L6", + "reclat": "40.000000", + "reclong": "-81.766670", + "year": "1860-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.68333, 15.36667] }, + "id": "16954", + "mass": "12000", + "name": "New Halfa", + "nametype": "Valid", + "recclass": "L4", + "reclat": "15.366670", + "reclong": "35.683330", + "year": "1994-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "22", + ":@computed_region_nnqa_25f4": "1667", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-90.10976, 29.94718] }, + "id": "16960", + "mass": "19256", + "name": "New Orleans", + "nametype": "Valid", + "recclass": "H5", + "reclat": "29.947180", + "reclong": "-90.109760", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.41667, -7.45] }, + "id": "16966", + "mass": "1393", + "name": "Ngawi", + "nametype": "Valid", + "recclass": "LL3.6", + "reclat": "-7.450000", + "reclong": "111.416670", + "year": "1883-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-4.38333, 13.85] }, + "id": "16968", + "mass": "37500", + "name": "N'Goureyma", + "nametype": "Valid", + "recclass": "Iron, ungrouped", + "reclat": "13.850000", + "reclong": "-4.383330", + "year": "1900-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.43333, 49.03333] }, + "id": "16970", + "name": "Nicorps", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "49.033330", + "reclong": "-1.433330", + "year": "1750-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "16974", + "mass": "3.3", + "name": "Niger (L6)", + "nametype": "Valid", + "recclass": "L6", + "year": "1967-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "16975", + "mass": "3.3", + "name": "Niger (LL6)", + "nametype": "Valid", + "recclass": "LL6", + "year": "1967-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.63333, 52.45] }, + "id": "16976", + "mass": "3996", + "name": "Nikolaevka", + "nametype": "Valid", + "recclass": "H4", + "reclat": "52.450000", + "reclong": "78.633330", + "year": "1935-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.33333, 56.11667] }, + "id": "16977", + "mass": "6000", + "name": "Nikolskoe", + "nametype": "Valid", + "recclass": "L4", + "reclat": "56.116670", + "reclong": "37.333330", + "year": "1954-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [121.48333, 29.86667] }, + "id": "16980", + "mass": "14250", + "name": "Ningbo", + "nametype": "Valid", + "recclass": "Iron, IVA", + "reclat": "29.866670", + "reclong": "121.483330", + "year": "1975-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [105.90667, 32.925] }, + "id": "16981", + "mass": "4610", + "name": "Ningqiang", + "nametype": "Valid", + "recclass": "C3-ung", + "reclat": "32.925000", + "reclong": "105.906670", + "year": "1983-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [131.56667, 34.2] }, + "id": "16982", + "mass": "467", + "name": "Nio", + "nametype": "Valid", + "recclass": "H3-4", + "reclat": "34.200000", + "reclong": "131.566670", + "year": "1897-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [30.7, -28.56667] }, + "id": "16983", + "mass": "17200", + "name": "N'Kandhla", + "nametype": "Valid", + "recclass": "Iron, IID", + "reclat": "-28.566670", + "reclong": "30.700000", + "year": "1912-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "49", + ":@computed_region_nnqa_25f4": "1683", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-69.48333, 44.08333] }, + "id": "16984", + "mass": "2300", + "name": "Nobleborough", + "nametype": "Valid", + "recclass": "Eucrite-pmict", + "reclat": "44.083330", + "reclong": "-69.483330", + "year": "1823-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "35", + ":@computed_region_nnqa_25f4": "2238", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-86.055, 40.08528] }, + "id": "16985", + "mass": "483.7", + "name": "Noblesville", + "nametype": "Valid", + "recclass": "H4-6", + "reclat": "40.085280", + "reclong": "-86.055000", + "year": "1991-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [130.75, 33.725] }, + "id": "16988", + "mass": "472", + "name": "Nogata", + "nametype": "Valid", + "recclass": "L6", + "reclat": "33.725000", + "reclong": "130.750000", + "year": "0861-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-59.83333, -32.36667] }, + "id": "16989", + "mass": "4000", + "name": "Nogoya", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "-32.366670", + "reclong": "-59.833330", + "year": "1879-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "15", + ":@computed_region_nnqa_25f4": "10", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-92.26667, 36.21667] }, + "id": "16994", + "mass": "1050", + "name": "Norfork", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "36.216670", + "reclong": "-92.266670", + "year": "1918-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "17", + ":@computed_region_nnqa_25f4": "1252", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.86667, 39.68333] }, + "id": "17922", + "mass": "1100000", + "name": "Norton County", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "39.683330", + "reclong": "-99.866670", + "year": "1948-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.52722, 45.29167] }, + "id": "17930", + "mass": "177", + "name": "Noventa Vicentina", + "nametype": "Valid", + "recclass": "H4", + "reclat": "45.291670", + "reclong": "11.527220", + "year": "1971-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [46, 54.81667] }, + "id": "17933", + "mass": "1900", + "name": "Novo-Urei", + "nametype": "Valid", + "recclass": "Ureilite", + "reclat": "54.816670", + "reclong": "46.000000", + "year": "1886-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [31.33333, 58.55] }, + "id": "17934", + "name": "Novy-Ergi", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "58.550000", + "reclong": "31.333330", + "year": "1662-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22, 56] }, + "id": "17935", + "mass": "1001", + "name": "Novy-Projekt", + "nametype": "Valid", + "recclass": "OC", + "reclat": "56.000000", + "reclong": "22.000000", + "year": "1908-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [102.46667, 42.91667] }, + "id": "17936", + "mass": "250", + "name": "Noyan-Bogdo", + "nametype": "Valid", + "recclass": "L6", + "reclat": "42.916670", + "reclong": "102.466670", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-102.13333, 24.3] }, + "id": "17938", + "mass": "50000", + "name": "Nuevo Mercurio", + "nametype": "Valid", + "recclass": "H5", + "reclat": "24.300000", + "reclong": "-102.133330", + "year": "1978-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.75, 41.63333] }, + "id": "17959", + "mass": "5000", + "name": "Nulles", + "nametype": "Valid", + "recclass": "H6", + "reclat": "41.633330", + "reclong": "0.750000", + "year": "1851-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [141.86667, 43.33333] }, + "id": "17960", + "mass": "363", + "name": "Numakai", + "nametype": "Valid", + "recclass": "H4", + "reclat": "43.333330", + "reclong": "141.866670", + "year": "1925-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [94.91667, 21.20833] }, + "id": "17969", + "mass": "737.6", + "name": "Nyaung", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "21.208330", + "reclong": "94.916670", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.025, 47.55] }, + "id": "17970", + "mass": "1100", + "name": "Nyirábrany", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "47.550000", + "reclong": "22.025000", + "year": "1914-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [55.26667, 57.78333] }, + "id": "17979", + "mass": "500000", + "name": "Ochansk", + "nametype": "Valid", + "recclass": "H4", + "reclat": "57.783330", + "reclong": "55.266670", + "year": "1887-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.05, 52.28333] }, + "id": "17988", + "mass": "1400", + "name": "Oesede", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.283330", + "reclong": "8.050000", + "year": "1927-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [23, 58.5] }, + "id": "17989", + "mass": "6000", + "name": "Oesel", + "nametype": "Valid", + "recclass": "L6", + "reclat": "58.500000", + "reclong": "23.000000", + "year": "1855-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.03333, 47.88333] }, + "id": "17990", + "mass": "3750", + "name": "Ofehértó", + "nametype": "Valid", + "recclass": "L6", + "reclat": "47.883330", + "reclong": "22.033330", + "year": "1900-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [130.2, 33.28333] }, + "id": "17994", + "mass": "14360", + "name": "Ogi", + "nametype": "Valid", + "recclass": "H6", + "reclat": "33.283330", + "reclong": "130.200000", + "year": "1741-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [23.58333, 46.06667] }, + "id": "17995", + "mass": "16250", + "name": "Ohaba", + "nametype": "Valid", + "recclass": "H5", + "reclat": "46.066670", + "reclong": "23.583330", + "year": "1857-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.5, 6.75] }, + "id": "17996", + "mass": "7700", + "name": "Ohuma", + "nametype": "Valid", + "recclass": "L5", + "reclat": "6.750000", + "reclong": "8.500000", + "year": "1963-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-5.4, 38.18333] }, + "id": "17997", + "mass": "5850", + "name": "Ojuelos Altos", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.183330", + "reclong": "-5.400000", + "year": "1926-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [139.21667, 36.18333] }, + "id": "17998", + "mass": "194", + "name": "Okabe", + "nametype": "Valid", + "recclass": "H5", + "reclat": "36.183330", + "reclong": "139.216670", + "year": "1958-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [135.2, 35.08333] }, + "id": "18000", + "mass": "4742", + "name": "Okano", + "nametype": "Valid", + "recclass": "Iron, IIAB", + "reclat": "35.083330", + "reclong": "135.200000", + "year": "1904-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25.5, 50.83333] }, + "id": "18002", + "mass": "12000", + "name": "Okniny", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "50.833330", + "reclong": "25.500000", + "year": "1834-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8.16667, 52.95] }, + "id": "18009", + "mass": "16570", + "name": "Oldenburg (1930)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.950000", + "reclong": "8.166670", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.03333, 39] }, + "id": "18012", + "name": "Oliva-Gandia", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "39.000000", + "reclong": "-0.033330", + "year": "1520-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7.06667, 38.71667] }, + "id": "18013", + "mass": "150000", + "name": "Olivenza", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "38.716670", + "reclong": "-7.066670", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-2.1, 39.56667] }, + "id": "18015", + "mass": "40000", + "name": "Olmedilla de Alarcón", + "nametype": "Valid", + "recclass": "H5", + "reclat": "39.566670", + "reclong": "-2.100000", + "year": "1929-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [161.80833, 64.02] }, + "id": "18019", + "mass": "250000", + "name": "Omolon", + "nametype": "Valid", + "recclass": "Pallasite, PMG", + "reclat": "64.020000", + "reclong": "161.808330", + "year": "1981-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.38333, 43.88333] }, + "id": "18026", + "mass": "14000", + "name": "Orgueil", + "nametype": "Valid", + "recclass": "CI1", + "reclat": "43.883330", + "reclong": "1.383330", + "year": "1864-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "30", + ":@computed_region_nnqa_25f4": "1078", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-81.36222, 28.5475] }, + "id": "34489", + "mass": "180", + "name": "Orlando", + "nametype": "Valid", + "recclass": "Eucrite", + "reclat": "28.547500", + "reclong": "-81.362220", + "year": "2004-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.15, 47.11667] }, + "id": "18030", + "mass": "6000", + "name": "Ornans", + "nametype": "Valid", + "recclass": "CO3.4", + "reclat": "47.116670", + "reclong": "6.150000", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [8, 48.5] }, + "id": "18033", + "mass": "4500", + "name": "Ortenau", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "48.500000", + "reclong": "8.000000", + "year": "1671-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.93333, 42.13333] }, + "id": "18034", + "mass": "3400", + "name": "Orvinio", + "nametype": "Valid", + "recclass": "H6", + "reclat": "42.133330", + "reclong": "12.933330", + "year": "1872-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.4, 58.88333] }, + "id": "18042", + "mass": "246", + "name": "Oterøy", + "nametype": "Valid", + "recclass": "L6", + "reclat": "58.883330", + "reclong": "9.400000", + "year": "1928-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [140.35, 38.4] }, + "id": "18045", + "mass": "6510", + "name": "Otomi", + "nametype": "Valid", + "recclass": "H", + "reclat": "38.400000", + "reclong": "140.350000", + "year": "1867-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "17", + ":@computed_region_nnqa_25f4": "1947", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-95.21667, 38.6] }, + "id": "18046", + "mass": "840", + "name": "Ottawa", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "38.600000", + "reclong": "-95.216670", + "year": "1896-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.08, 12.9] }, + "id": "56729", + "mass": "4440", + "name": "Ouadangou", + "nametype": "Valid", + "recclass": "L5", + "reclat": "12.900000", + "reclong": "0.080000", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6.57717, 30.18] }, + "id": "18050", + "mass": "1215.5", + "name": "Oued el Hadjar", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "30.180000", + "reclong": "-6.577170", + "year": "1986-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-13.1, 24.3] }, + "id": "31282", + "mass": "17000", + "name": "Oum Dreyga", + "nametype": "Valid", + "recclass": "H3-5", + "reclat": "24.300000", + "reclong": "-13.100000", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-8.28, 37.60833] }, + "id": "18052", + "mass": "20000", + "name": "Ourique", + "nametype": "Valid", + "recclass": "H4", + "reclat": "37.608330", + "reclong": "-8.280000", + "year": "1998-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16, -18] }, + "id": "18055", + "mass": "121.5", + "name": "Ovambo", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-18.000000", + "reclong": "16.000000", + "year": "1900-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-5.86667, 43.4] }, + "id": "18058", + "mass": "205", + "name": "Oviedo", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.400000", + "reclong": "-5.866670", + "year": "1856-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [28.83333, 51.33333] }, + "id": "18062", + "name": "Owrucz", + "nametype": "Valid", + "recclass": "OC", + "reclat": "51.333330", + "reclong": "28.833330", + "year": "1775-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.3, 21.05] }, + "id": "18068", + "mass": "3400", + "name": "Pacula", + "nametype": "Valid", + "recclass": "L6", + "reclat": "21.050000", + "reclong": "-99.300000", + "year": "1881-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25, 55.66667] }, + "id": "18069", + "mass": "3858", + "name": "Padvarninkai", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "55.666670", + "reclong": "25.000000", + "year": "1929-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [120.45583, 17.74333] }, + "id": "18072", + "mass": "515", + "name": "Paitan", + "nametype": "Valid", + "recclass": "H6", + "reclat": "17.743330", + "reclong": "120.455830", + "year": "1910-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "32", + ":@computed_region_nnqa_25f4": "503", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-89.71667, 32.31667] }, + "id": "18073", + "name": "Palahatchie", + "nametype": "Valid", + "recclass": "OC", + "reclat": "32.316670", + "reclong": "-89.716670", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-65.1, -23.11667] }, + "id": "18074", + "mass": "1430", + "name": "Palca de Aparzo", + "nametype": "Valid", + "recclass": "L5", + "reclat": "-23.116670", + "reclong": "-65.100000", + "year": "1988-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [118.61667, 43.48333] }, + "id": "18077", + "mass": "18000", + "name": "Palinshih", + "nametype": "Valid", + "recclass": "Iron", + "reclat": "43.483330", + "reclong": "118.616670", + "year": "1914-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "18", + ":@computed_region_nnqa_25f4": "2122", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-91.5, 39.8] }, + "id": "18079", + "mass": "135", + "name": "Palmyra", + "nametype": "Valid", + "recclass": "L3", + "reclat": "39.800000", + "reclong": "-91.500000", + "year": "1926-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "4", + ":@computed_region_nnqa_25f4": "1657", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-157.78333, 21.3] }, + "id": "18082", + "mass": "682", + "name": "Palolo Valley", + "nametype": "Valid", + "recclass": "H5", + "reclat": "21.300000", + "reclong": "-157.783330", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Found", + "id": "32591", + "mass": "69.5", + "name": "Dominion Range 03239", + "nametype": "Valid", + "recclass": "L6", + "year": "2002-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [120.7, 15.08333] }, + "id": "18093", + "mass": "10500", + "name": "Pampanga", + "nametype": "Valid", + "recclass": "L5", + "reclat": "15.083330", + "reclong": "120.700000", + "year": "1859-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [124.28333, 8.06667] }, + "id": "18098", + "mass": "2130", + "name": "Pantar", + "nametype": "Valid", + "recclass": "H5", + "reclat": "8.066670", + "reclong": "124.283330", + "year": "1938-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "15", + ":@computed_region_nnqa_25f4": "1023", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-90.5, 36.06667] }, + "id": "18101", + "mass": "408000", + "name": "Paragould", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "36.066670", + "reclong": "-90.500000", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-40.7, -6.23333] }, + "id": "18102", + "mass": "2000", + "name": "Parambu", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "-6.233330", + "reclong": "-40.700000", + "year": "1967-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-51.66667, -19.13333] }, + "id": "18103", + "mass": "100000", + "name": "Paranaiba", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-19.133330", + "reclong": "-51.666670", + "year": "1956-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "34", + ":@computed_region_nnqa_25f4": "1863", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-87.67917, 41.48472] }, + "id": "18106", + "mass": "18000", + "name": "Park Forest", + "nametype": "Valid", + "recclass": "L5", + "reclat": "41.484720", + "reclong": "-87.679170", + "year": "2003-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.35, 9.23333] }, + "id": "18108", + "mass": "77600", + "name": "Parnallee", + "nametype": "Valid", + "recclass": "LL3.6", + "reclat": "9.233330", + "reclong": "78.350000", + "year": "1857-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [85.4, 26.2] }, + "id": "18109", + "mass": "800", + "name": "Parsa", + "nametype": "Valid", + "recclass": "EH3", + "reclat": "26.200000", + "reclong": "85.400000", + "year": "1942-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "11", + ":@computed_region_nnqa_25f4": "1994", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-103.4, 36.21667] }, + "id": "18110", + "mass": "5100", + "name": "Pasamonte", + "nametype": "Valid", + "recclass": "Eucrite-pmict", + "reclat": "36.216670", + "reclong": "-103.400000", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.05, 20.93694] }, + "id": "18112", + "mass": "4375", + "name": "Patora", + "nametype": "Valid", + "recclass": "H6", + "reclat": "20.936940", + "reclong": "82.050000", + "year": "1969-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-48.56667, -19.53333] }, + "id": "18116", + "mass": "2121", + "name": "Patrimonio", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-19.533330", + "reclong": "-48.566670", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.96667, 38.13333] }, + "id": "18118", + "mass": "12", + "name": "Patti", + "nametype": "Valid", + "recclass": "Iron", + "reclat": "38.133330", + "reclong": "14.966670", + "year": "1922-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [91.18333, 23.15] }, + "id": "18171", + "mass": "37350", + "name": "Patwar", + "nametype": "Valid", + "recclass": "Mesosiderite-A1", + "reclat": "23.150000", + "reclong": "91.183330", + "year": "1935-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25.51667, 43.46667] }, + "id": "18173", + "mass": "2968", + "name": "Pavel", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.466670", + "reclong": "25.516670", + "year": "1966-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [77.03333, 52.3] }, + "id": "18175", + "mass": "142.5", + "name": "Pavlodar (stone)", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.300000", + "reclong": "77.033330", + "year": "1938-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.98333, 48.53333] }, + "id": "18176", + "mass": "40000", + "name": "Pavlograd", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.533330", + "reclong": "35.983330", + "year": "1826-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [43, 52.03333] }, + "id": "18177", + "mass": "2000", + "name": "Pavlovka", + "nametype": "Valid", + "recclass": "Howardite", + "reclat": "52.033330", + "reclong": "43.000000", + "year": "1882-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.54217, 11.33367] }, + "id": "18179", + "name": "Pê", + "nametype": "Valid", + "recclass": "L6", + "reclat": "11.333670", + "reclong": "-3.542170", + "year": "1989-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-117.93333, 56.13333] }, + "id": "18180", + "mass": "45760", + "name": "Peace River", + "nametype": "Valid", + "recclass": "L6", + "reclat": "56.133330", + "reclong": "-117.933330", + "year": "1963-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.25, 51.66667] }, + "id": "18181", + "mass": "117.8", + "name": "Peckelsheim", + "nametype": "Valid", + "recclass": "Diogenite-pm", + "reclat": "51.666670", + "reclong": "9.250000", + "year": "1953-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "47", + ":@computed_region_nnqa_25f4": "2185", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-73.91667, 41.28333] }, + "id": "18782", + "mass": "12570", + "name": "Peekskill", + "nametype": "Valid", + "recclass": "H6", + "reclat": "41.283330", + "reclong": "-73.916670", + "year": "1992-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "3062", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-103.11667, 30.125] }, + "id": "18786", + "mass": "70000", + "name": "Peña Blanca Spring", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "30.125000", + "reclong": "-103.116670", + "year": "1946-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.5, -10.66667] }, + "id": "18792", + "mass": "165", + "name": "Peramiho", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "-10.666670", + "reclong": "35.500000", + "year": "1899-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [91, 23.325] }, + "id": "18793", + "mass": "23474", + "name": "Perpeti", + "nametype": "Valid", + "recclass": "L6", + "reclat": "23.325000", + "reclong": "91.000000", + "year": "1935-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.43333, 56.4] }, + "id": "18797", + "mass": "2", + "name": "Perth", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "56.400000", + "reclong": "-3.433330", + "year": "1830-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [39.43333, 56.63333] }, + "id": "18798", + "mass": "66000", + "name": "Pervomaisky", + "nametype": "Valid", + "recclass": "L6", + "reclat": "56.633330", + "reclong": "39.433330", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [66.08333, 55.5] }, + "id": "18799", + "mass": "3393", + "name": "Pesyanoe", + "nametype": "Valid", + "recclass": "Aubrite", + "reclat": "55.500000", + "reclong": "66.083330", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.42, 14.052] }, + "id": "18800", + "mass": "189", + "name": "Pétèlkolé", + "nametype": "Valid", + "recclass": "H5", + "reclat": "14.052000", + "reclong": "0.420000", + "year": "1995-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "39", + ":@computed_region_nnqa_25f4": "2017", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-86.63333, 35.3] }, + "id": "18801", + "mass": "1800", + "name": "Petersburg", + "nametype": "Valid", + "recclass": "Eucrite-pmict", + "reclat": "35.300000", + "reclong": "-86.633330", + "year": "1855-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7.33333, 53.53333] }, + "id": "18804", + "name": "Pettiswood", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "53.533330", + "reclong": "-7.333330", + "year": "1779-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "17", + ":@computed_region_nnqa_25f4": "1255", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.25, 40] }, + "id": "18808", + "mass": "57900", + "name": "Phillips County (stone)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "40.000000", + "reclong": "-99.250000", + "year": "1901-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [108.58333, 11.25] }, + "id": "18809", + "mass": "500", + "name": "Phu Hong", + "nametype": "Valid", + "recclass": "H4", + "reclat": "11.250000", + "reclong": "108.583330", + "year": "1887-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [105.48333, 12] }, + "id": "18811", + "mass": "7800", + "name": "Phum Sambo", + "nametype": "Valid", + "recclass": "H4", + "reclat": "12.000000", + "reclong": "105.483330", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [108.1, 15.71667] }, + "id": "18812", + "mass": "11000", + "name": "Phuoc-Binh", + "nametype": "Valid", + "recclass": "L5", + "reclat": "15.716670", + "reclong": "108.100000", + "year": "1941-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.50222, 44.24417] }, + "id": "18813", + "mass": "13.1", + "name": "Piancaldoli", + "nametype": "Valid", + "recclass": "LL3.4", + "reclat": "44.244170", + "reclong": "11.502220", + "year": "1968-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6.23333, 41.36667] }, + "id": "18816", + "name": "Picote", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "41.366670", + "reclong": "-6.233330", + "year": "1843-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [25.73333, 58.66667] }, + "id": "18822", + "mass": "23250", + "name": "Pillistfer", + "nametype": "Valid", + "recclass": "EL6", + "reclat": "58.666670", + "reclong": "25.733330", + "year": "1863-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [73.94167, 26.03472] }, + "id": "18831", + "mass": "42000", + "name": "Piplia Kalan", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "26.034720", + "reclong": "73.941670", + "year": "1996-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [18.71667, -32.86667] }, + "id": "18832", + "mass": "37", + "name": "Piquetberg", + "nametype": "Valid", + "recclass": "H", + "reclat": "-32.866670", + "reclong": "18.716670", + "year": "1881-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [88.45, 25.8] }, + "id": "18834", + "mass": "842", + "name": "Pirgunje", + "nametype": "Valid", + "recclass": "L6", + "reclat": "25.800000", + "reclong": "88.450000", + "year": "1882-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76, 29.58333] }, + "id": "18835", + "mass": "1161", + "name": "Pirthalla", + "nametype": "Valid", + "recclass": "H6", + "reclat": "29.583330", + "reclong": "76.000000", + "year": "1884-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "31", + ":@computed_region_nnqa_25f4": "207", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-83.51667, 31.95] }, + "id": "18837", + "mass": "3760", + "name": "Pitts", + "nametype": "Valid", + "recclass": "Iron, IAB-ung", + "reclat": "31.950000", + "reclong": "-83.516670", + "year": "1921-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "2018", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-96.11667, 30.7] }, + "id": "18846", + "mass": "2085", + "name": "Plantersville", + "nametype": "Valid", + "recclass": "H6", + "reclat": "30.700000", + "reclong": "-96.116670", + "year": "1930-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.70972, 45.275] }, + "id": "51706", + "mass": "6913", + "name": "Pleşcoi", + "nametype": "Valid", + "recclass": "L5-6", + "reclat": "45.275000", + "reclong": "26.709720", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.11667, 50.53333] }, + "id": "18849", + "mass": "39", + "name": "Ploschkovitz", + "nametype": "Valid", + "recclass": "L5", + "reclat": "50.533330", + "reclong": "14.116670", + "year": "1723-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [104.91667, 11.58333] }, + "id": "18851", + "mass": "96", + "name": "Pnompehn", + "nametype": "Valid", + "recclass": "L6", + "reclat": "11.583330", + "reclong": "104.916670", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Found", + "id": "32592", + "mass": "290.89999999999998", + "name": "Dominion Range 03240", + "nametype": "Valid", + "recclass": "LL5", + "year": "2002-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [12.13333, 50.93333] }, + "id": "18853", + "mass": "3000", + "name": "Pohlitz", + "nametype": "Valid", + "recclass": "L5", + "reclat": "50.933330", + "reclong": "12.133330", + "year": "1819-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.66667, 26.71667] }, + "id": "18858", + "mass": "350", + "name": "Pokhra", + "nametype": "Valid", + "recclass": "H5", + "reclat": "26.716670", + "reclong": "82.666670", + "year": "1866-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.015, 66.34833] }, + "id": "18860", + "mass": "253.6", + "name": "Pollen", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "66.348330", + "reclong": "14.015000", + "year": "1942-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-4.31944, 53.03639] }, + "id": "18865", + "mass": "157", + "name": "Pontlyfni", + "nametype": "Valid", + "recclass": "Winonaite", + "reclat": "53.036390", + "reclong": "-4.319440", + "year": "1931-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "11", + ":@computed_region_nnqa_25f4": "1987", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-103.295, 34.175] }, + "id": "18874", + "mass": "71400", + "name": "Portales Valley", + "nametype": "Valid", + "recclass": "H6", + "reclat": "34.175000", + "reclong": "-103.295000", + "year": "1998-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-8, 38.5] }, + "id": "18876", + "mass": "4500", + "name": "Portugal", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "38.500000", + "reclong": "-8.000000", + "year": "1796-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [118.5, 31.41667] }, + "id": "18879", + "mass": "665", + "name": "Po-wang Chen", + "nametype": "Valid", + "recclass": "LL", + "reclat": "31.416670", + "reclong": "118.500000", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13.94083, 48.3025] }, + "id": "18883", + "mass": "2125", + "name": "Prambachkirchen", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.302500", + "reclong": "13.940830", + "year": "1932-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.03333, 49.66667] }, + "id": "18887", + "mass": "5555", + "name": "Pribram", + "nametype": "Valid", + "recclass": "H5", + "reclat": "49.666670", + "reclong": "14.033330", + "year": "1959-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "38", + ":@computed_region_nnqa_25f4": "2566", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-83.85, 39.11667] }, + "id": "18888", + "mass": "900", + "name": "Pricetown", + "nametype": "Valid", + "recclass": "L6", + "reclat": "39.116670", + "reclong": "-83.850000", + "year": "1893-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.51667, 39.35] }, + "id": "45984", + "mass": "500", + "name": "Puerto Lápice", + "nametype": "Valid", + "recclass": "Eucrite-br", + "reclat": "39.350000", + "reclong": "-3.516670", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [75.18333, 23.36667] }, + "id": "18899", + "mass": "560", + "name": "Pulsora", + "nametype": "Valid", + "recclass": "H5", + "reclat": "23.366670", + "reclong": "75.183330", + "year": "1863-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.26667, 52.76667] }, + "id": "18901", + "mass": "250000", + "name": "Pultusk", + "nametype": "Valid", + "recclass": "H5", + "reclat": "52.766670", + "reclong": "21.266670", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.95, 13.33333] }, + "id": "18902", + "mass": "100", + "name": "Punganaru", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "13.333330", + "reclong": "78.950000", + "year": "1811-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-53.05, -29.03333] }, + "id": "18905", + "mass": "300000", + "name": "Putinga", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-29.033330", + "reclong": "-53.050000", + "year": "1937-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [121.5, 32.08333] }, + "id": "18907", + "mass": "1275", + "name": "Qidong", + "nametype": "Valid", + "recclass": "L/LL5", + "reclat": "32.083330", + "reclong": "121.500000", + "year": "1982-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [106.46667, 26.53333] }, + "id": "18908", + "mass": "2600", + "name": "Qingzhen", + "nametype": "Valid", + "recclass": "EH3", + "reclat": "26.533330", + "reclong": "106.466670", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [28.7, -30.11667] }, + "id": "22357", + "mass": "7000", + "name": "Queen's Mercy", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-30.116670", + "reclong": "28.700000", + "year": "1925-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [95.18333, 17.76667] }, + "id": "22358", + "mass": "6045", + "name": "Quenggouk", + "nametype": "Valid", + "recclass": "H4", + "reclat": "17.766670", + "reclong": "95.183330", + "year": "1857-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.66667, 39] }, + "id": "22360", + "mass": "10750", + "name": "Quesa", + "nametype": "Valid", + "recclass": "Iron, IAB-ung", + "reclat": "39.000000", + "reclong": "-0.666670", + "year": "1898-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [126.13333, 44.61667] }, + "id": "22361", + "mass": "17450", + "name": "Quija", + "nametype": "Valid", + "recclass": "H", + "reclat": "44.616670", + "reclong": "126.133330", + "year": "1990-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.25, 46.6] }, + "id": "22363", + "mass": "65", + "name": "Quincay", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.600000", + "reclong": "0.250000", + "year": "1851-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-65.45, -26.66667] }, + "id": "22368", + "mass": "5000", + "name": "Raco", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-26.666670", + "reclong": "-65.450000", + "year": "1957-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.465, 27.72528] }, + "id": "22371", + "mass": "10200", + "name": "Raghunathpura", + "nametype": "Valid", + "recclass": "Iron, IIAB", + "reclat": "27.725280", + "reclong": "76.465000", + "year": "1986-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [70.2, 28.225] }, + "id": "31302", + "mass": "67225", + "name": "Rahimyar Khan", + "nametype": "Valid", + "recclass": "L5", + "reclat": "28.225000", + "reclong": "70.200000", + "year": "1983-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.03333, 52.98333] }, + "id": "22376", + "mass": "9000", + "name": "Rakovka", + "nametype": "Valid", + "recclass": "L6", + "reclat": "52.983330", + "reclong": "37.033330", + "year": "1878-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.9, 26.45] }, + "id": "22384", + "mass": "3766", + "name": "Ramnagar", + "nametype": "Valid", + "recclass": "L6", + "reclat": "26.450000", + "reclong": "82.900000", + "year": "1940-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [87.76667, 24.16667] }, + "id": "22385", + "mass": "100", + "name": "Rampurhat", + "nametype": "Valid", + "recclass": "LL", + "reclat": "24.166670", + "reclong": "87.766670", + "year": "1916-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [6.93333, 51.88333] }, + "id": "22386", + "mass": "4682", + "name": "Ramsdorf", + "nametype": "Valid", + "recclass": "L6", + "reclat": "51.883330", + "reclong": "6.933330", + "year": "1958-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [87.08333, 23.98333] }, + "id": "22387", + "mass": "290.39999999999998", + "name": "Ranchapur", + "nametype": "Valid", + "recclass": "H4", + "reclat": "23.983330", + "reclong": "87.083330", + "year": "1917-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-100.81667, 19.86667] }, + "id": "22390", + "mass": "300", + "name": "Rancho de la Presa", + "nametype": "Valid", + "recclass": "H5", + "reclat": "19.866670", + "reclong": "-100.816670", + "year": "1899-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [72.01667, 25.38333] }, + "id": "22392", + "mass": "3224.5", + "name": "Rangala", + "nametype": "Valid", + "recclass": "L6", + "reclat": "25.383330", + "reclong": "72.016670", + "year": "1937-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [115.7, 38.2] }, + "id": "22394", + "mass": "4910", + "name": "Raoyang", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.200000", + "reclong": "115.700000", + "year": "1919-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [50.15, 26.66667] }, + "id": "22395", + "mass": "6.1", + "name": "Ras Tanura", + "nametype": "Valid", + "recclass": "H6", + "reclat": "26.666670", + "reclong": "50.150000", + "year": "1961-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.53333, 43.5] }, + "id": "22396", + "mass": "24700", + "name": "Rasgrad", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "43.500000", + "reclong": "26.533330", + "year": "1740-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [17.98333, 52.2] }, + "id": "22398", + "mass": "910", + "name": "Ratyn", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "52.200000", + "reclong": "17.983330", + "year": "1880-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "8", + ":@computed_region_nnqa_25f4": "1391", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-119.75812, 38.13742] }, + "id": "53502", + "mass": "18.41", + "name": "Red Canyon Lake", + "nametype": "Valid", + "recclass": "H5", + "reclat": "38.137420", + "reclong": "-119.758120", + "year": "2007-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-5.33333, 42.475] }, + "id": "22584", + "mass": "17300", + "name": "Reliegos", + "nametype": "Valid", + "recclass": "L5", + "reclat": "42.475000", + "reclong": "-5.333330", + "year": "1947-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.36667, -6.73333] }, + "id": "22585", + "mass": "10000", + "name": "Rembang", + "nametype": "Valid", + "recclass": "Iron, IVA", + "reclat": "-6.733330", + "reclong": "111.366670", + "year": "1919-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.28333, 44.76667] }, + "id": "22586", + "mass": "1000", + "name": "Renazzo", + "nametype": "Valid", + "recclass": "CR2", + "reclat": "44.766670", + "reclong": "11.283330", + "year": "1824-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-65.28333, -32.75] }, + "id": "22587", + "mass": "300", + "name": "Renca", + "nametype": "Valid", + "recclass": "L5", + "reclat": "-32.750000", + "reclong": "-65.283330", + "year": "1925-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [116.13333, 38.66667] }, + "id": "22589", + "mass": "355", + "name": "Renqiu", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.666670", + "reclong": "116.133330", + "year": "1916-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [45.66667, 48.6] }, + "id": "22590", + "mass": "7000", + "name": "Repeev Khutor", + "nametype": "Valid", + "recclass": "Iron, IIF", + "reclat": "48.600000", + "reclong": "45.666670", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-118.95, 51.33333] }, + "id": "22592", + "mass": "1", + "name": "Revelstoke", + "nametype": "Valid", + "recclass": "CI1", + "reclat": "51.333330", + "reclong": "-118.950000", + "year": "1965-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [76.66667, 28.2] }, + "id": "22593", + "mass": "3332", + "name": "Rewari", + "nametype": "Valid", + "recclass": "L6", + "reclat": "28.200000", + "reclong": "76.666670", + "year": "1929-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "37", + ":@computed_region_nnqa_25f4": "2388", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-83.03333, 35.03333] }, + "id": "22597", + "mass": "668", + "name": "Rich Mountain", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.033330", + "reclong": "-83.033330", + "year": "1903-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-66.15, -44.11667] }, + "id": "24140", + "mass": "20000", + "name": "Uzcudun", + "nametype": "Valid", + "recclass": "L", + "reclat": "-44.116670", + "reclong": "-66.150000", + "year": "1948-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "3", + ":@computed_region_nnqa_25f4": "569", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-102.31667, 46.88333] }, + "id": "22599", + "mass": "90000", + "name": "Richardton", + "nametype": "Valid", + "recclass": "H5", + "reclat": "46.883330", + "reclong": "-102.316670", + "year": "1918-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "23", + ":@computed_region_nnqa_25f4": "2885", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.03333, 31.25] }, + "id": "22602", + "mass": "1900", + "name": "Richland Springs", + "nametype": "Valid", + "recclass": "OC", + "reclat": "31.250000", + "reclong": "-99.033330", + "year": "1980-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "40", + ":@computed_region_nnqa_25f4": "2764", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-77.5, 37.46667] }, + "id": "22603", + "mass": "1800", + "name": "Richmond", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "37.466670", + "reclong": "-77.500000", + "year": "1828-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-49.8, -26.1] }, + "id": "22611", + "mass": "1310", + "name": "Rio Negro", + "nametype": "Valid", + "recclass": "L4", + "reclat": "-26.100000", + "reclong": "-49.800000", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.51667, 45.48333] }, + "id": "22614", + "mass": "103.3", + "name": "Rivolta de Bassi", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "45.483330", + "reclong": "9.516670", + "year": "1491-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "35", + ":@computed_region_nnqa_25f4": "150", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-86.28333, 41.08333] }, + "id": "22637", + "mass": "340", + "name": "Rochester", + "nametype": "Valid", + "recclass": "H6", + "reclat": "41.083330", + "reclong": "-86.283330", + "year": "1876-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [150.51667, -23.38333] }, + "id": "22640", + "mass": "1641", + "name": "Rockhampton", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "-23.383330", + "reclong": "150.516670", + "year": "1895-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.55, 42.3] }, + "id": "22641", + "mass": "400", + "name": "Roda", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "42.300000", + "reclong": "0.550000", + "year": "1871-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.8, 50.35] }, + "id": "22642", + "mass": "2900", + "name": "Rodach", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "50.350000", + "reclong": "10.800000", + "year": "1775-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "50", + ":@computed_region_nnqa_25f4": "361", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-83.95, 44.51667] }, + "id": "22766", + "mass": "10600", + "name": "Rose City", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.516670", + "reclong": "-83.950000", + "year": "1921-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-2.51667, 52.76667] }, + "id": "22773", + "mass": "3500", + "name": "Rowton", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "52.766670", + "reclong": "-2.516670", + "year": "1876-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29.83333, -1.45] }, + "id": "22780", + "mass": "465.5", + "name": "Ruhobobo", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-1.450000", + "reclong": "29.833330", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [36.53333, 0.26667] }, + "id": "22782", + "mass": "67", + "name": "Rumuruti", + "nametype": "Valid", + "recclass": "R3.8-6", + "reclat": "0.266670", + "reclong": "36.533330", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [38.76667, -10.26667] }, + "id": "22783", + "mass": "6000", + "name": "Rupota", + "nametype": "Valid", + "recclass": "L4-6", + "reclat": "-10.266670", + "reclong": "38.766670", + "year": "1949-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [34.5, 51.13333] }, + "id": "22791", + "mass": "13000", + "name": "Ryechki", + "nametype": "Valid", + "recclass": "L5", + "reclat": "51.133330", + "reclong": "34.500000", + "year": "1914-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.08333, 27.43333] }, + "id": "22792", + "mass": "1250", + "name": "Sabetmahet", + "nametype": "Valid", + "recclass": "H5", + "reclat": "27.433330", + "reclong": "82.083330", + "year": "1855-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [91.66667, 23.08333] }, + "id": "22793", + "mass": "478", + "name": "Sabrum", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "23.083330", + "reclong": "91.666670", + "year": "1999-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.88333, 51.53333] }, + "id": "22796", + "name": "Sagan", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "51.533330", + "reclong": "14.883330", + "year": "1636-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.38333, 43.73333] }, + "id": "23101", + "mass": "14000", + "name": "Saint-Sauveur", + "nametype": "Valid", + "recclass": "EH5", + "reclat": "43.733330", + "reclong": "1.383330", + "year": "1914-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.23333, 45.3] }, + "id": "23102", + "mass": "271000", + "name": "Saint-Séverin", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "45.300000", + "reclong": "0.233330", + "year": "1966-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [136.3, 35.66667] }, + "id": "23103", + "mass": "4180", + "name": "Sakauchi", + "nametype": "Valid", + "recclass": "Iron", + "reclat": "35.666670", + "reclong": "136.300000", + "year": "1913-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "12", + ":@computed_region_nnqa_25f4": "2409", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-122.96944, 44.97917] }, + "id": "23107", + "mass": "61.4", + "name": "Salem", + "nametype": "Valid", + "recclass": "L6", + "reclat": "44.979170", + "reclong": "-122.969440", + "year": "1981-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [4.63333, 46.05] }, + "id": "23111", + "mass": "9000", + "name": "Salles", + "nametype": "Valid", + "recclass": "L5", + "reclat": "46.050000", + "reclong": "4.633330", + "year": "1798-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.05, 52.75] }, + "id": "23114", + "mass": "43", + "name": "Salzwedel", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "52.750000", + "reclong": "11.050000", + "year": "1985-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [74.86667, 25.66667] }, + "id": "23115", + "mass": "2462", + "name": "Samelia", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "25.666670", + "reclong": "74.866670", + "year": "1921-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "8", + ":@computed_region_nnqa_25f4": "1174", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-117.6625, 33.48472] }, + "id": "23128", + "mass": "56", + "name": "San Juan Capistrano", + "nametype": "Valid", + "recclass": "H6", + "reclat": "33.484720", + "reclong": "-117.662500", + "year": "1973-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [13, 43.66667] }, + "id": "31315", + "mass": "237", + "name": "San Michele", + "nametype": "Valid", + "recclass": "L6", + "reclat": "43.666670", + "reclong": "13.000000", + "year": "2002-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-71.4, -31.01667] }, + "id": "23130", + "mass": "282", + "name": "San Pedro de Quiles", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-31.016670", + "reclong": "-71.400000", + "year": "1956-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-100.65, 19.76667] }, + "id": "34063", + "mass": "460", + "name": "San Pedro Jacuaro", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "19.766670", + "reclong": "-100.650000", + "year": "1968-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-51.86667, -29.2] }, + "id": "23161", + "mass": "400", + "name": "Santa Barbara", + "nametype": "Valid", + "recclass": "L4", + "reclat": "-29.200000", + "reclong": "-51.866670", + "year": "1873-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-99.33333, 24.16667] }, + "id": "23164", + "mass": "60", + "name": "Santa Cruz", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "24.166670", + "reclong": "-99.333330", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-61.7, -33.9] }, + "id": "23165", + "mass": "5500", + "name": "Santa Isabel", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-33.900000", + "reclong": "-61.700000", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-68.489444, -31.535556] }, + "id": "50909", + "mass": "4000", + "name": "Santa Lucia (2008)", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-31.535556", + "reclong": "-68.489444", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-49.38056, -20.81] }, + "id": "23171", + "mass": "927", + "name": "São Jose do Rio Preto", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-20.810000", + "reclong": "-49.380560", + "year": "1962-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [46.55, 52.55] }, + "id": "23176", + "mass": "200000", + "name": "Saratov", + "nametype": "Valid", + "recclass": "L4", + "reclat": "52.550000", + "reclong": "46.550000", + "year": "1918-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [137.78333, 34.71667] }, + "id": "23187", + "mass": "695", + "name": "Sasagase", + "nametype": "Valid", + "recclass": "H", + "reclat": "34.716670", + "reclong": "137.783330", + "year": "1688-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.85, 43.15] }, + "id": "23188", + "mass": "4000", + "name": "Sauguis", + "nametype": "Valid", + "recclass": "L6", + "reclat": "43.150000", + "reclong": "-0.850000", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [29.86667, 47.21667] }, + "id": "23190", + "mass": "2500", + "name": "Savtschenskoje", + "nametype": "Valid", + "recclass": "LL4", + "reclat": "47.216670", + "reclong": "29.866670", + "year": "1894-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [139.4, 35.86667] }, + "id": "23192", + "mass": "430", + "name": "Sayama", + "nametype": "Valid", + "recclass": "CM2", + "reclat": "35.866670", + "reclong": "139.400000", + "year": "1986-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [17.56667, 49.23333] }, + "id": "23455", + "mass": "412", + "name": "Sazovice", + "nametype": "Valid", + "recclass": "L5", + "reclat": "49.233330", + "reclong": "17.566670", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.05, 53.35] }, + "id": "23457", + "mass": "7000", + "name": "Schellin", + "nametype": "Valid", + "recclass": "L", + "reclat": "53.350000", + "reclong": "15.050000", + "year": "1715-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "47", + ":@computed_region_nnqa_25f4": "2142", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-73.95028, 42.86083] }, + "id": "23458", + "mass": "283.3", + "name": "Schenectady", + "nametype": "Valid", + "recclass": "H5", + "reclat": "42.860830", + "reclong": "-73.950280", + "year": "1968-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.46667, 48.11667] }, + "id": "23460", + "mass": "8000", + "name": "Schönenberg", + "nametype": "Valid", + "recclass": "L6", + "reclat": "48.116670", + "reclong": "10.466670", + "year": "1846-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "49", + ":@computed_region_nnqa_25f4": "1727", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-69.2, 44.36667] }, + "id": "23472", + "mass": "5400", + "name": "Searsmont", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.366670", + "reclong": "-69.200000", + "year": "1871-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.13333, 38.3] }, + "id": "23473", + "mass": "240", + "name": "Sediköy", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.300000", + "reclong": "27.133330", + "year": "1917-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.78333, 26.75] }, + "id": "23476", + "mass": "6930", + "name": "Segowlie", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "26.750000", + "reclong": "84.783330", + "year": "1853-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [107.33333, -7.23333] }, + "id": "23481", + "mass": "1590", + "name": "Selakopi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "-7.233330", + "reclong": "107.333330", + "year": "1939-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [4.98333, 22.83333] }, + "id": "23483", + "mass": "150", + "name": "Seldebourak", + "nametype": "Valid", + "recclass": "H5", + "reclat": "22.833330", + "reclong": "4.983330", + "year": "1947-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [79, 22.25] }, + "id": "23487", + "mass": "691", + "name": "Semarkona", + "nametype": "Valid", + "recclass": "LL3.00", + "reclat": "22.250000", + "reclong": "79.000000", + "year": "1940-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-0.05, 41.71667] }, + "id": "23495", + "mass": "4000", + "name": "Sena", + "nametype": "Valid", + "recclass": "H4", + "reclat": "41.716670", + "reclong": "-0.050000", + "year": "1773-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [140.51167, 39.43833] }, + "id": "23496", + "mass": "866", + "name": "Senboku", + "nametype": "Valid", + "recclass": "H6", + "reclat": "39.438330", + "reclong": "140.511670", + "year": "1993-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [79.50083, 21.68389] }, + "id": "23500", + "mass": "20000", + "name": "Seoni", + "nametype": "Valid", + "recclass": "H6", + "reclat": "21.683890", + "reclong": "79.500830", + "year": "1966-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [23.56667, 41.05] }, + "id": "23501", + "mass": "8500", + "name": "Seres", + "nametype": "Valid", + "recclass": "H4", + "reclat": "41.050000", + "reclong": "23.566670", + "year": "1818-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-36.76667, -8.38333] }, + "id": "23502", + "mass": "1800", + "name": "Serra de Magé", + "nametype": "Valid", + "recclass": "Eucrite-cm", + "reclat": "-8.383330", + "reclong": "-36.766670", + "year": "1923-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-44.21667, -19.46667] }, + "id": "23504", + "mass": "350", + "name": "Sete Lagoas", + "nametype": "Valid", + "recclass": "H4", + "reclat": "-19.466670", + "reclong": "-44.216670", + "year": "1908-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-6, 37.41667] }, + "id": "23508", + "mass": "180", + "name": "Sevilla", + "nametype": "Valid", + "recclass": "LL4", + "reclat": "37.416670", + "reclong": "-6.000000", + "year": "1862-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [36.6, 50.61667] }, + "id": "23509", + "mass": "101000", + "name": "Sevrukovo", + "nametype": "Valid", + "recclass": "L5", + "reclat": "50.616670", + "reclong": "36.600000", + "year": "1874-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.71667, 34.75] }, + "id": "23512", + "mass": "7000", + "name": "Sfax", + "nametype": "Valid", + "recclass": "L6", + "reclat": "34.750000", + "reclong": "10.716670", + "year": "1989-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [87.3, 23.1] }, + "id": "23521", + "mass": "4000", + "name": "Shalka", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "23.100000", + "reclong": "87.300000", + "year": "1850-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "40", + ":@computed_region_nnqa_25f4": "921", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-76.7, 37.83333] }, + "id": "23525", + "mass": "1265", + "name": "Sharps", + "nametype": "Valid", + "recclass": "H3.4", + "reclat": "37.833330", + "reclong": "-76.700000", + "year": "1921-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-80.16667, 44.05] }, + "id": "23529", + "mass": "18600", + "name": "Shelburne", + "nametype": "Valid", + "recclass": "L5", + "reclat": "44.050000", + "reclong": "-80.166670", + "year": "1904-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.83333, 24.55] }, + "id": "23530", + "mass": "5000", + "name": "Shergotty", + "nametype": "Valid", + "recclass": "Martian (shergottite)", + "reclat": "24.550000", + "reclong": "84.833330", + "year": "1865-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [120.06667, 33.65] }, + "id": "23531", + "mass": "605", + "name": "Sheyang", + "nametype": "Valid", + "recclass": "L6", + "reclat": "33.650000", + "reclong": "120.066670", + "year": "1976-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [87.5775, 25.85] }, + "id": "23534", + "mass": "3679.7", + "name": "Shikarpur", + "nametype": "Valid", + "recclass": "L6", + "reclat": "25.850000", + "reclong": "87.577500", + "year": "1921-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [125.66667, 43.5] }, + "id": "23582", + "mass": "3900", + "name": "Shuangyang", + "nametype": "Valid", + "recclass": "H5", + "reclat": "43.500000", + "reclong": "125.666670", + "year": "1971-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [74.83333, 33.71667] }, + "id": "23583", + "mass": "5000", + "name": "Shupiyan", + "nametype": "Valid", + "recclass": "H6", + "reclat": "33.716670", + "reclong": "74.833330", + "year": "1912-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [90.16667, 24.33333] }, + "id": "23584", + "mass": "3200", + "name": "Shytal", + "nametype": "Valid", + "recclass": "L6", + "reclat": "24.333330", + "reclong": "90.166670", + "year": "1863-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [11.6, 43.11667] }, + "id": "23586", + "mass": "3700", + "name": "Siena", + "nametype": "Valid", + "recclass": "LL5", + "reclat": "43.116670", + "reclong": "11.600000", + "year": "1794-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [134.65333, 46.16] }, + "id": "23593", + "mass": "23000000", + "name": "Sikhote-Alin", + "nametype": "Valid", + "recclass": "Iron, IIAB", + "reclat": "46.160000", + "reclong": "134.653330", + "year": "1947-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-101.38333, 20.93333] }, + "id": "23594", + "mass": "1710", + "name": "Silao", + "nametype": "Valid", + "recclass": "H5", + "reclat": "20.933330", + "reclong": "-101.383330", + "year": "1995-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.26667, 44.11667] }, + "id": "55584", + "mass": "0.15", + "name": "Silistra", + "nametype": "Valid", + "recclass": "Achondrite-ung", + "reclat": "44.116670", + "reclong": "27.266670", + "year": "1917-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [7.53333, 49.98333] }, + "id": "23603", + "mass": "1222", + "name": "Simmern", + "nametype": "Valid", + "recclass": "H5", + "reclat": "49.983330", + "reclong": "7.533330", + "year": "1920-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [32.48333, 30.9] }, + "id": "23606", + "mass": "1455", + "name": "Sinai", + "nametype": "Valid", + "recclass": "L6", + "reclat": "30.900000", + "reclong": "32.483330", + "year": "1916-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [69.55, 26.21667] }, + "id": "23611", + "mass": "8400", + "name": "Sindhri", + "nametype": "Valid", + "recclass": "H5", + "reclat": "26.216670", + "reclong": "69.550000", + "year": "1901-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.2, 39.3] }, + "id": "23613", + "mass": "2000", + "name": "Sinnai", + "nametype": "Valid", + "recclass": "H6", + "reclat": "39.300000", + "reclong": "9.200000", + "year": "1956-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "19", + ":@computed_region_nnqa_25f4": "2351", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-103.66667, 42.58333] }, + "id": "23614", + "mass": "4100", + "name": "Sioux County", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "42.583330", + "reclong": "-103.666670", + "year": "1933-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [82.58333, 20.91667] }, + "id": "23616", + "mass": "1600", + "name": "Sitathali", + "nametype": "Valid", + "recclass": "H5", + "reclat": "20.916670", + "reclong": "82.583330", + "year": "1875-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [36.13583, 39.82467] }, + "id": "23617", + "mass": "40000", + "name": "Sivas", + "nametype": "Valid", + "recclass": "H6", + "reclat": "39.824670", + "reclong": "36.135830", + "year": "1989-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [119.86667, 32.43333] }, + "id": "23619", + "mass": "630", + "name": "Sixiangkou", + "nametype": "Valid", + "recclass": "L5", + "reclat": "32.433330", + "reclong": "119.866670", + "year": "1989-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.86667, 59.73333] }, + "id": "23621", + "mass": "850", + "name": "Ski", + "nametype": "Valid", + "recclass": "L6", + "reclat": "59.733330", + "reclong": "10.866670", + "year": "1848-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.6, 45.68333] }, + "id": "23626", + "mass": "1708", + "name": "Slavetic", + "nametype": "Valid", + "recclass": "H5", + "reclat": "45.683330", + "reclong": "15.600000", + "year": "1868-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35, 55] }, + "id": "23645", + "mass": "2750", + "name": "Slobodka", + "nametype": "Valid", + "recclass": "L4", + "reclat": "55.000000", + "reclong": "35.000000", + "year": "1818-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.06667, 27.13333] }, + "id": "23660", + "mass": "72.900000000000006", + "name": "Soheria", + "nametype": "Valid", + "recclass": "OC", + "reclat": "27.133330", + "reclong": "84.066670", + "year": "1960-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [21.86667, 43.66667] }, + "id": "23661", + "mass": "80000", + "name": "Soko-Banja", + "nametype": "Valid", + "recclass": "LL4", + "reclat": "43.666670", + "reclong": "21.866670", + "year": "1877-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.73333, 47.36667] }, + "id": "23663", + "mass": "54", + "name": "Sologne", + "nametype": "Valid", + "recclass": "H5", + "reclat": "47.366670", + "reclong": "1.733330", + "year": "1860-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [22.005, 54.00883] }, + "id": "53829", + "mass": "1066", + "name": "Sołtmany", + "nametype": "Valid", + "recclass": "L6", + "reclat": "54.008830", + "reclong": "22.005000", + "year": "2011-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [135.33333, 35.16667] }, + "id": "23667", + "mass": "17100", + "name": "Sone", + "nametype": "Valid", + "recclass": "H5", + "reclat": "35.166670", + "reclong": "135.333330", + "year": "1866-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [125, 45.25] }, + "id": "23668", + "mass": "36900", + "name": "Songyuan", + "nametype": "Valid", + "recclass": "L6", + "reclat": "45.250000", + "reclong": "125.000000", + "year": "1993-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [23.5, 44.41667] }, + "id": "23670", + "mass": "958", + "name": "Sopot", + "nametype": "Valid", + "recclass": "OC", + "reclat": "44.416670", + "reclong": "23.500000", + "year": "1927-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [33.63333, 1.7] }, + "id": "23671", + "mass": "2050", + "name": "Soroti", + "nametype": "Valid", + "recclass": "Iron, ungrouped", + "reclat": "1.700000", + "reclong": "33.633330", + "year": "1945-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [0.05, 44.75] }, + "id": "23081", + "mass": "360", + "name": "St. Caprais-de-Quinsac", + "nametype": "Valid", + "recclass": "L6", + "reclat": "44.750000", + "reclong": "0.050000", + "year": "1883-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.5, 46.95] }, + "id": "23082", + "mass": "5500", + "name": "St. Christophe-la-Chartreuse", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.950000", + "reclong": "-1.500000", + "year": "1841-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.75, 51.05] }, + "id": "23083", + "mass": "700", + "name": "St. Denis Westrem", + "nametype": "Valid", + "recclass": "L6", + "reclat": "51.050000", + "reclong": "3.750000", + "year": "1855-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-1.15, 48.01667] }, + "id": "23087", + "mass": "4000", + "name": "St. Germain-du-Pinel", + "nametype": "Valid", + "recclass": "H6", + "reclat": "48.016670", + "reclong": "-1.150000", + "year": "1890-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "18", + ":@computed_region_nnqa_25f4": "2223", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-90.23333, 38.7] }, + "id": "23089", + "mass": "1000", + "name": "St. Louis", + "nametype": "Valid", + "recclass": "H4", + "reclat": "38.700000", + "reclong": "-90.233330", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.41667, -32.01667] }, + "id": "23090", + "mass": "13780", + "name": "St. Mark's", + "nametype": "Valid", + "recclass": "EH5", + "reclat": "-32.016670", + "reclong": "27.416670", + "year": "1903-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "45", + ":@computed_region_nnqa_25f4": "424", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-76.38333, 38.16667] }, + "id": "23091", + "mass": "24.3", + "name": "St. Mary's County", + "nametype": "Valid", + "recclass": "LL3.3", + "reclat": "38.166670", + "reclong": "-76.383330", + "year": "1919-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3.93333, 48.45] }, + "id": "23092", + "mass": "8300", + "name": "St. Mesmin", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "48.450000", + "reclong": "3.933330", + "year": "1866-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.2, 61.65] }, + "id": "23093", + "mass": "17000", + "name": "St. Michel", + "nametype": "Valid", + "recclass": "L6", + "reclat": "61.650000", + "reclong": "27.200000", + "year": "1910-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [2.95, 43.43333] }, + "id": "23097", + "mass": "134.30000000000001", + "name": "St.-Chinian", + "nametype": "Valid", + "recclass": "L6", + "reclat": "43.433330", + "reclong": "2.950000", + "year": "1959-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.95, 59.93333] }, + "id": "23712", + "mass": "34000", + "name": "Ställdalen", + "nametype": "Valid", + "recclass": "H5", + "reclat": "59.933330", + "reclong": "14.950000", + "year": "1876-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [15.56667, 49.28333] }, + "id": "23713", + "mass": "52000", + "name": "Stannern", + "nametype": "Valid", + "recclass": "Eucrite-mmict", + "reclat": "49.283330", + "reclong": "15.566670", + "year": "1808-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [41.98333, 45.05] }, + "id": "23717", + "mass": "1500", + "name": "Stavropol", + "nametype": "Valid", + "recclass": "L6", + "reclat": "45.050000", + "reclong": "41.983330", + "year": "1857-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [3, 50.76667] }, + "id": "23099", + "mass": "4960", + "name": "Ste. Marguerite", + "nametype": "Valid", + "recclass": "H4", + "reclat": "50.766670", + "reclong": "3.000000", + "year": "1962-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [55.98333, 53.66667] }, + "id": "23724", + "mass": "325000", + "name": "Sterlitamak", + "nametype": "Valid", + "recclass": "Iron, IIIAB", + "reclat": "53.666670", + "reclong": "55.983330", + "year": "1990-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [9.05, 52.53333] }, + "id": "23726", + "name": "Stolzenau", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "52.533330", + "reclong": "9.050000", + "year": "1647-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "24", + ":@computed_region_nnqa_25f4": "1040", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-73.13333, 41.2] }, + "id": "23728", + "mass": "50", + "name": "Stratford", + "nametype": "Valid", + "recclass": "L6", + "reclat": "41.200000", + "reclong": "-73.133330", + "year": "1974-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.25, 56.58333] }, + "id": "23729", + "mass": "13400", + "name": "Strathmore", + "nametype": "Valid", + "recclass": "L6", + "reclat": "56.583330", + "reclong": "-3.250000", + "year": "1917-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-3.95, 50.38333] }, + "id": "23732", + "mass": "10400", + "name": "Stretchleigh", + "nametype": "Valid", + "recclass": "Stone-uncl", + "reclat": "50.383330", + "reclong": "-3.950000", + "year": "1623-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-72.97806, 45.96861] }, + "id": "23733", + "mass": "25400", + "name": "St-Robert", + "nametype": "Valid", + "recclass": "H5", + "reclat": "45.968610", + "reclong": "-72.978060", + "year": "1994-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "15", + ":@computed_region_nnqa_25f4": "955", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-90.66667, 36.48333] }, + "id": "23736", + "mass": "3500", + "name": "Success", + "nametype": "Valid", + "recclass": "L6", + "reclat": "36.483330", + "reclong": "-90.666670", + "year": "1924-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [16.26333, 50.53806] }, + "id": "23737", + "mass": "815.3", + "name": "Suchy Dul", + "nametype": "Valid", + "recclass": "L6", + "reclat": "50.538060", + "reclong": "16.263330", + "year": "1969-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [113.46667, 31.61667] }, + "id": "23738", + "mass": "260000", + "name": "Suizhou", + "nametype": "Valid", + "recclass": "L6", + "reclat": "31.616670", + "reclong": "113.466670", + "year": "1986-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [78.03333, 12.66667] }, + "id": "48951", + "mass": "110000", + "name": "Sulagiri", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "12.666670", + "reclong": "78.033330", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.28333, 25.93333] }, + "id": "23741", + "mass": "1710.5", + "name": "Sultanpur", + "nametype": "Valid", + "recclass": "L/LL6", + "reclat": "25.933330", + "reclong": "84.283330", + "year": "1916-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [133.16667, 44.86667] }, + "id": "23745", + "mass": "637", + "name": "Sungach", + "nametype": "Valid", + "recclass": "H5", + "reclat": "44.866670", + "reclong": "133.166670", + "year": "1935-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [84.21667, 26.71667] }, + "id": "23760", + "mass": "7235", + "name": "Supuhee", + "nametype": "Valid", + "recclass": "H6", + "reclat": "26.716670", + "reclong": "84.216670", + "year": "1865-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "8", + ":@computed_region_nnqa_25f4": "1187", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-120.90806, 38.80389] }, + "id": "55529", + "mass": "992.5", + "name": "Sutter's Mill", + "nametype": "Valid", + "recclass": "C", + "reclat": "38.803890", + "reclong": "-120.908060", + "year": "2012-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "29", + ":@computed_region_nnqa_25f4": "1637", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-86.2945, 33.18836] }, + "id": "23773", + "mass": "5560", + "name": "Sylacauga", + "nametype": "Valid", + "recclass": "H4", + "reclat": "33.188360", + "reclong": "-86.294500", + "year": "1954-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [14.65, 49.4] }, + "id": "23776", + "mass": "7540", + "name": "Tabor", + "nametype": "Valid", + "recclass": "H5", + "reclat": "49.400000", + "reclong": "14.650000", + "year": "1753-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [5.41667, 36.18333] }, + "id": "23778", + "mass": "9000", + "name": "Tadjera", + "nametype": "Valid", + "recclass": "L5", + "reclat": "36.183330", + "reclong": "5.416670", + "year": "1867-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-134.20139, 59.70444] }, + "id": "23782", + "mass": "10000", + "name": "Tagish Lake", + "nametype": "Valid", + "recclass": "C2-ung", + "reclat": "59.704440", + "reclong": "-134.201390", + "year": "2000-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [137.305, 34.72] }, + "id": "23784", + "mass": "1000", + "name": "Tahara", + "nametype": "Valid", + "recclass": "H4/5", + "reclat": "34.720000", + "reclong": "137.305000", + "year": "1991-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [134.9, 35.38333] }, + "id": "23789", + "mass": "720", + "name": "Takenouchi", + "nametype": "Valid", + "recclass": "H5", + "reclat": "35.383330", + "reclong": "134.900000", + "year": "1880-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "id": "23791", + "mass": "1421", + "name": "Talampaya", + "nametype": "Valid", + "recclass": "Eucrite-cm", + "year": "1995-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [112.76667, -7.75] }, + "id": "23795", + "mass": "10500", + "name": "Tambakwatu", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-7.750000", + "reclong": "112.766670", + "year": "1975-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7.015, 31.16333] }, + "id": "48691", + "mass": "100000", + "name": "Tamdakht", + "nametype": "Valid", + "recclass": "H5", + "reclat": "31.163330", + "reclong": "-7.015000", + "year": "2008-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [136.23333, 35.43333] }, + "id": "23801", + "mass": "905", + "name": "Tané", + "nametype": "Valid", + "recclass": "L5", + "reclat": "35.433330", + "reclong": "136.233330", + "year": "1918-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [122.9, 45.4] }, + "id": "23873", + "mass": "3850", + "name": "Taonan", + "nametype": "Valid", + "recclass": "L5", + "reclat": "45.400000", + "reclong": "122.900000", + "year": "1965-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [10.41667, 32.95] }, + "id": "23884", + "mass": "12000", + "name": "Tatahouine", + "nametype": "Valid", + "recclass": "Diogenite", + "reclat": "32.950000", + "reclong": "10.416670", + "year": "1931-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [43.73333, 19.38333] }, + "id": "23885", + "mass": "2500", + "name": "Tathlith", + "nametype": "Valid", + "recclass": "L6", + "reclat": "19.383330", + "reclong": "43.733330", + "year": "1967-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [44.45, 35.13333] }, + "id": "23887", + "mass": "6000", + "name": "Tauk", + "nametype": "Valid", + "recclass": "L6", + "reclat": "35.133330", + "reclong": "44.450000", + "year": "1929-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [23.5, 46.71667] }, + "id": "23888", + "mass": "21000", + "name": "Tauti", + "nametype": "Valid", + "recclass": "L6", + "reclat": "46.716670", + "reclong": "23.500000", + "year": "1937-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [142.95, -25.73333] }, + "id": "23897", + "mass": "160000", + "name": "Tenham", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-25.733330", + "reclong": "142.950000", + "year": "1879-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [26.95, 58.03333] }, + "id": "23898", + "mass": "28500", + "name": "Tennasilm", + "nametype": "Valid", + "recclass": "L4", + "reclat": "58.033330", + "reclong": "26.950000", + "year": "1872-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [70.6, 33.4] }, + "id": "23908", + "mass": "342", + "name": "Thal", + "nametype": "Valid", + "recclass": "H6", + "reclat": "33.400000", + "reclong": "70.600000", + "year": "1950-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [37.15028, -1.00278] }, + "id": "54493", + "mass": "14200", + "name": "Thika", + "nametype": "Valid", + "recclass": "L6", + "reclat": "-1.002780", + "reclong": "37.150280", + "year": "2011-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [27.58333, -29.33333] }, + "id": "23976", + "mass": "45300", + "name": "Thuathe", + "nametype": "Valid", + "recclass": "H4/5", + "reclat": "-29.333330", + "reclong": "27.583330", + "year": "2002-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [118.99, 32.94667] }, + "id": "23984", + "mass": "2232", + "name": "Tianzhang", + "nametype": "Valid", + "recclass": "H5", + "reclat": "32.946670", + "reclong": "118.990000", + "year": "1986-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [17.11667, 49.6] }, + "id": "23989", + "mass": "28000", + "name": "Tieschitz", + "nametype": "Valid", + "recclass": "H/L3.6", + "reclat": "49.600000", + "reclong": "17.116670", + "year": "1878-01-01T00:00:00.000Z" + }, + { + ":@computed_region_cbhk_fwbd": "34", + ":@computed_region_nnqa_25f4": "1762", + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-89.68333, 38.2] }, + "id": "23998", + "mass": "74800", + "name": "Tilden", + "nametype": "Valid", + "recclass": "L6", + "reclat": "38.200000", + "reclong": "-89.683330", + "year": "1927-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [1.53333, 14.25] }, + "id": "23999", + "mass": "3000", + "name": "Tillaberi", + "nametype": "Valid", + "recclass": "L6", + "reclat": "14.250000", + "reclong": "1.533330", + "year": "1970-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [35.2, 54.5] }, + "id": "24004", + "mass": "65500", + "name": "Timochin", + "nametype": "Valid", + "recclass": "H5", + "reclat": "54.500000", + "reclong": "35.200000", + "year": "1807-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [79.41667, 13.63333] }, + "id": "24009", + "mass": "230", + "name": "Tirupati", + "nametype": "Valid", + "recclass": "H6", + "reclat": "13.633330", + "reclong": "79.416670", + "year": "1934-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [-7.61123, 29.48195] }, + "id": "54823", + "mass": "7000", + "name": "Tissint", + "nametype": "Valid", + "recclass": "Martian (shergottite)", + "reclat": "29.481950", + "reclong": "-7.611230", + "year": "2011-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [111.53333, -7.08333] }, + "id": "24011", + "mass": "20000", + "name": "Tjabe", + "nametype": "Valid", + "recclass": "H6", + "reclat": "-7.083330", + "reclong": "111.533330", + "year": "1869-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [106.58333, -6.66667] }, + "id": "24012", + "mass": "16500", + "name": "Tjerebon", + "nametype": "Valid", + "recclass": "L5", + "reclat": "-6.666670", + "reclong": "106.583330", + "year": "1922-01-01T00:00:00.000Z" + }, + { + "fall": "Fell", + "geolocation": { "type": "Point", "coordinates": [34.76667, 47.85] }, + "id": "24019", + "mass": "600", + "name": "Tomakovka", + "nametype": "Valid", + "recclass": "LL6", + "reclat": "47.850000", + "reclong": "34.766670", + "year": "1905-01-01T00:00:00.000Z" + } +] diff --git a/test/inputs/json/misc/d23d5.json b/test/inputs/json/misc/d23d5.json index f1a1cc748..a29416c8b 100644 --- a/test/inputs/json/misc/d23d5.json +++ b/test/inputs/json/misc/d23d5.json @@ -1 +1,410 @@ -{"count": 49140, "facets": {}, "results": [{"name": "Mr Giampiero Reggidori", "acronym": null, "created_at": "2016-08-10T02:08:59.817023", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffff4d12eef74252b51812e9ce1713de", "updated_at": "2016-08-10T02:08:59.815655", "id": "ffff4d12eef74252b51812e9ce1713de"}, {"name": "Istituto Diplomatico Internazionale", "acronym": "I D I", "created_at": "2015-04-24T01:57:50.571116", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffe798a051d4b228ae612b431ca064a", "updated_at": "2015-04-24T01:57:50.570385", "id": "fffe798a051d4b228ae612b431ca064a"}, {"name": "Ms Dragica Pilipovic Chaffey", "acronym": null, "created_at": "2016-02-03T02:50:46.244113", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffd45719a79476c8ef0366685e99a74", "updated_at": "2016-02-03T02:50:46.242658", "id": "fffd45719a79476c8ef0366685e99a74"}, {"name": "Mr Alex Gorsky", "acronym": null, "created_at": "2015-04-24T01:48:58.565673", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffcf9db4c424ba38fd5e812dd8aeaac", "updated_at": "2015-04-24T01:48:58.564945", "id": "fffcf9db4c424ba38fd5e812dd8aeaac"}, {"name": "Mr Gregory Francis ", "acronym": null, "created_at": "2015-04-24T02:23:58.791310", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffce2ef05014cfdaf322f13ee3d9db0", "updated_at": "2015-04-24T02:23:58.790188", "id": "fffce2ef05014cfdaf322f13ee3d9db0"}, {"name": "Ms Larisa Pircalabelu", "acronym": null, "created_at": "2016-07-21T01:23:59.142183", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffc8702608445c9a8793517f4534fb1", "updated_at": "2016-07-21T01:23:59.141433", "id": "fffc8702608445c9a8793517f4534fb1"}, {"name": "Mr Alexander Kneepkens", "acronym": null, "created_at": "2015-05-07T21:34:40.869573", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff720deb12f4b1fb0f149469d15b5e5", "updated_at": "2015-05-07T21:34:40.868283", "id": "fff720deb12f4b1fb0f149469d15b5e5"}, {"name": "Mr Marco Digioia", "acronym": null, "created_at": "2015-04-24T01:53:59.129907", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff48726498240688ff6db5c7611a70c", "updated_at": "2015-04-24T01:53:59.129280", "id": "fff48726498240688ff6db5c7611a70c"}, {"name": "Ms Adela BRUSOVA", "acronym": null, "created_at": "2015-04-24T02:03:33.932156", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff1decf9c744ea09e540504ad514763", "updated_at": "2015-04-24T02:03:33.931445", "id": "fff1decf9c744ea09e540504ad514763"}, {"name": "Ms Anja Ingenrieth", "acronym": null, "created_at": "2015-05-07T21:14:28.711779", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff1538c8ea349d18866a8f98c862ff8", "updated_at": "2015-05-07T21:14:28.710327", "id": "fff1538c8ea349d18866a8f98c862ff8"}, {"name": "Mr Dimitrios Lyridis", "acronym": null, "created_at": "2016-05-08T01:49:49.437857", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff11d63c1334292bf8a4780e68c8cfe", "updated_at": "2016-05-08T01:49:49.436442", "id": "fff11d63c1334292bf8a4780e68c8cfe"}, {"name": "Ms Rosanna Lewis", "acronym": null, "created_at": "2016-03-18T01:36:59.675522", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff0a5c1b9494f989e85ef7c2b9f5ac5", "updated_at": "2016-03-18T01:36:59.673429", "id": "fff0a5c1b9494f989e85ef7c2b9f5ac5"}, {"name": "Mr Pascal Montredon", "acronym": null, "created_at": "2016-05-05T01:19:54.860443", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffee3e4971634c929b8b61b24fb2f08a", "updated_at": "2016-05-05T01:19:54.859001", "id": "ffee3e4971634c929b8b61b24fb2f08a"}, {"name": "Mr Jelmen HAAZE", "acronym": null, "created_at": "2015-10-30T00:39:35.770055", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffeba603bb3947c7a43a4c086031b3aa", "updated_at": "2015-10-30T00:39:35.768633", "id": "ffeba603bb3947c7a43a4c086031b3aa"}, {"name": "Mr Flavio BURLIZZI", "acronym": null, "created_at": "2015-08-04T22:57:51.011270", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffeae77f2b894a33b881ec2b79e29117", "updated_at": "2015-08-04T22:57:51.009831", "id": "ffeae77f2b894a33b881ec2b79e29117"}, {"name": "Ms Tomoyo Sekiguchi ", "acronym": null, "created_at": "2016-03-09T02:38:11.880805", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe968703bb44040b61bce6494c59a97", "updated_at": "2016-03-09T02:38:11.878442", "id": "ffe968703bb44040b61bce6494c59a97"}, {"name": "Conseil G\u00e9n\u00e9ral du Gard", "acronym": null, "created_at": "2016-03-17T03:00:04.766562", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe8919709ac4830ad71b625294b7382", "updated_at": "2016-03-17T03:00:04.765137", "id": "ffe8919709ac4830ad71b625294b7382"}, {"name": "EUROPEAN FEDERATION OF BUILDING AND WOODWORKERS", "acronym": "EFBWW", "created_at": "2015-05-07T21:26:53.280572", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe7eff4d34b4d7b97239846b8964fbe", "updated_at": "2015-05-07T21:26:53.279783", "id": "ffe7eff4d34b4d7b97239846b8964fbe"}, {"name": "Think Tank EUROPA", "acronym": "TTE", "created_at": "2015-04-24T02:24:58.732688", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe6fffd4f1e4dbf8ff26ffa80f132c6", "updated_at": "2015-04-24T02:24:58.731979", "id": "ffe6fffd4f1e4dbf8ff26ffa80f132c6"}, {"name": "Ms Willig Caren", "acronym": null, "created_at": "2015-12-10T02:00:11.666098", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe54c713fc04c03bf8aca713f9ad2e8", "updated_at": "2015-12-10T02:00:11.665101", "id": "ffe54c713fc04c03bf8aca713f9ad2e8"}, {"name": "Solum", "acronym": null, "created_at": "2015-05-07T21:30:52.601629", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe3e1c97a4f445ab1dd1e4c60bc18cf", "updated_at": "2015-05-07T21:30:52.600789", "id": "ffe3e1c97a4f445ab1dd1e4c60bc18cf"}, {"name": "EUBrasil", "acronym": null, "created_at": "2015-04-24T02:06:02.774935", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe37e4dd46042a0bf0654695f0ad0ae", "updated_at": "2015-04-24T02:06:02.773344", "id": "ffe37e4dd46042a0bf0654695f0ad0ae"}, {"name": "Mr Thorsten Dr. Diercks", "acronym": null, "created_at": "2015-05-07T21:21:26.956745", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe3548dcf8c48a9b4fa39d530a9fd0e", "updated_at": "2015-05-07T21:21:26.955469", "id": "ffe3548dcf8c48a9b4fa39d530a9fd0e"}, {"name": "Airbus Aeronautics", "acronym": null, "created_at": "2016-04-05T00:12:27.592570", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe23c57f5d34e55b63580fa92eef387", "updated_at": "2016-04-05T00:12:27.590570", "id": "ffe23c57f5d34e55b63580fa92eef387"}, {"name": "Ms Elisa Briga", "acronym": null, "created_at": "2015-04-24T01:57:23.904841", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe18d1d8713464bbbf7c1e81887c68b", "updated_at": "2015-04-24T01:57:23.904057", "id": "ffe18d1d8713464bbbf7c1e81887c68b"}, {"name": "Ms Roza Maria Strevinioti", "acronym": null, "created_at": "2015-04-24T02:00:42.086250", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe06b4f2f2c4b6faebdf361bb9b4ac1", "updated_at": "2015-04-24T02:00:42.084916", "id": "ffe06b4f2f2c4b6faebdf361bb9b4ac1"}, {"name": "Association for the International Collective Management of Audiovisual Works", "acronym": "AGICOA", "created_at": "2015-11-14T02:02:49.268803", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffddc42b48c641b2b9781be1123df0e5", "updated_at": "2015-11-14T02:02:49.267949", "id": "ffddc42b48c641b2b9781be1123df0e5"}, {"name": "Mr Joachim BERNEY", "acronym": null, "created_at": "2015-08-04T23:44:49.425906", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdda474c46e47698baa4d5afbc99977", "updated_at": "2015-08-04T23:44:49.424473", "id": "ffdda474c46e47698baa4d5afbc99977"}, {"name": "Mr John Barradell", "acronym": null, "created_at": "2015-10-15T00:50:12.091403", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdd6e406d494529821a8bdee1be4b33", "updated_at": "2015-10-15T00:50:12.089971", "id": "ffdd6e406d494529821a8bdee1be4b33"}, {"name": "Osterreichische Post AG", "acronym": null, "created_at": "2016-04-21T01:17:40.241168", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdcb1ae5ba74431aa24fa630b339e18", "updated_at": "2016-04-21T01:17:40.240405", "id": "ffdcb1ae5ba74431aa24fa630b339e18"}, {"name": "Mr Tom Nysted", "acronym": null, "created_at": "2015-04-24T02:15:04.802512", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdb8caab0284102b7177dd75d4922a8", "updated_at": "2015-04-24T02:15:04.801810", "id": "ffdb8caab0284102b7177dd75d4922a8"}, {"name": "Mr Jaime BERNIS", "acronym": null, "created_at": "2015-09-16T23:38:29.717737", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffda5015f466463aad395c55eb98d234", "updated_at": "2015-09-16T23:38:29.716938", "id": "ffda5015f466463aad395c55eb98d234"}, {"name": "Mr David McKenna", "acronym": null, "created_at": "2015-04-24T02:02:52.877702", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd990efd8c341b78aa0101b67b9477f", "updated_at": "2015-04-24T02:02:52.876918", "id": "ffd990efd8c341b78aa0101b67b9477f"}, {"name": "Instituto para la Producci\u00f3n Sostenible", "acronym": null, "created_at": "2015-05-07T21:39:59.552249", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd783eb6a9a4e43883b05dc4f211e01", "updated_at": "2015-05-07T21:39:59.551454", "id": "ffd783eb6a9a4e43883b05dc4f211e01"}, {"name": "Associazione Nazionale Consorzi Gestione e Tutela del Territorio e Acque irrigue", "acronym": "ANBI", "created_at": "2016-07-06T02:05:14.587863", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd67dd940974fff8dc870ddc0839205", "updated_at": "2016-07-06T02:05:14.586583", "id": "ffd67dd940974fff8dc870ddc0839205"}, {"name": "Open Internet Project", "acronym": "OIP", "created_at": "2015-04-24T02:30:51.174761", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd5e14900b64b1a9dd4a79748b1221e", "updated_at": "2015-04-24T02:30:51.173582", "id": "ffd5e14900b64b1a9dd4a79748b1221e"}, {"name": "MEADOW VALE FOODS LIMITED", "acronym": null, "created_at": "2016-05-07T01:57:58.384964", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd33a5c282d4b59b962b08b9383c823", "updated_at": "2016-05-07T01:57:58.383522", "id": "ffd33a5c282d4b59b962b08b9383c823"}, {"name": "Ms Costanza BUFALINI", "acronym": null, "created_at": "2015-05-07T21:17:08.207441", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcf912c4bf349bc8777cdd382dbeb77", "updated_at": "2015-05-07T21:17:08.206097", "id": "ffcf912c4bf349bc8777cdd382dbeb77"}, {"name": "Ms VILLARINO PILAR", "acronym": null, "created_at": "2016-05-18T01:55:35.885694", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcf6d726f9d4f2a865d4f9fffb80747", "updated_at": "2016-05-18T01:55:35.884374", "id": "ffcf6d726f9d4f2a865d4f9fffb80747"}, {"name": "Ms Claire Wilson-Leary", "acronym": null, "created_at": "2016-08-24T01:09:24.395536", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcbde4c9fff4951b1fd532ea5c3761d", "updated_at": "2016-08-24T01:09:24.394197", "id": "ffcbde4c9fff4951b1fd532ea5c3761d"}, {"name": "BlackBerry", "acronym": "BlackBerry", "created_at": "2015-04-24T02:07:17.565441", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcbcdf1eec342ed9287cfc9dc5ed71d", "updated_at": "2015-04-24T02:07:17.564649", "id": "ffcbcdf1eec342ed9287cfc9dc5ed71d"}, {"name": "Hewlett-Packard Company", "acronym": null, "created_at": "2015-04-24T01:48:14.159850", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcb47bb0ee44ac0a3597ba822be1d36", "updated_at": "2015-04-24T01:48:14.158413", "id": "ffcb47bb0ee44ac0a3597ba822be1d36"}, {"name": "Slovensk\u00e1 po\u0161ta, a. s.", "acronym": null, "created_at": "2016-04-21T01:17:40.762874", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffca0afa625f4d3bb5c87eb4c6d7e9af", "updated_at": "2016-04-21T01:17:40.762126", "id": "ffca0afa625f4d3bb5c87eb4c6d7e9af"}, {"name": "ADAS UK Limited", "acronym": null, "created_at": "2015-04-24T02:27:26.106588", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc8242abb324f3ba18bbf76fefb6284", "updated_at": "2015-04-24T02:27:26.105885", "id": "ffc8242abb324f3ba18bbf76fefb6284"}, {"name": "Ms Sandrell SULTANA", "acronym": null, "created_at": "2015-08-04T22:33:54.008095", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc7e169388b47c2bf38ba17931f77e6", "updated_at": "2015-08-04T22:33:54.006715", "id": "ffc7e169388b47c2bf38ba17931f77e6"}, {"name": "Europ\u00e4ischer Kartellverband christlicher Studentenverb\u00e4nde", "acronym": "EKV", "created_at": "2015-05-07T21:30:10.558170", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc781ee1d4041a1a6dc391f7f93b8b4", "updated_at": "2015-05-07T21:30:10.556740", "id": "ffc781ee1d4041a1a6dc391f7f93b8b4"}, {"name": "Mr Zden\u011bk Vermouzek", "acronym": null, "created_at": "2016-09-04T02:09:52.477933", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc654bd22e34ef0a77c5fbb0f6aec17", "updated_at": "2016-09-04T02:09:52.475693", "id": "ffc654bd22e34ef0a77c5fbb0f6aec17"}, {"name": "Ms Ana MINGO", "acronym": null, "created_at": "2015-08-04T23:30:45.426863", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc636f187cc4601b14f19d857092fc5", "updated_at": "2015-08-04T23:30:45.425384", "id": "ffc636f187cc4601b14f19d857092fc5"}, {"name": "Mr Carlton DEAL", "acronym": null, "created_at": "2015-08-04T22:55:14.129970", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc5d109563948389eadfd45ddf17112", "updated_at": "2015-08-04T22:55:14.128531", "id": "ffc5d109563948389eadfd45ddf17112"}, {"name": "Ms Diana Popa", "acronym": null, "created_at": "2015-04-24T02:09:48.888939", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc4b62de478477d8b25f1d593e99467", "updated_at": "2015-04-24T02:09:48.888213", "id": "ffc4b62de478477d8b25f1d593e99467"}], "next": "http://api.lobbyfacts.eu/api/1/entity?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false} \ No newline at end of file +{ + "count": 49140, + "facets": {}, + "results": [ + { + "name": "Mr Giampiero Reggidori", + "acronym": null, + "created_at": "2016-08-10T02:08:59.817023Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffff4d12eef74252b51812e9ce1713de", + "updated_at": "2016-08-10T02:08:59.815655Z", + "id": "ffff4d12eef74252b51812e9ce1713de" + }, + { + "name": "Istituto Diplomatico Internazionale", + "acronym": "I D I", + "created_at": "2015-04-24T01:57:50.571116Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fffe798a051d4b228ae612b431ca064a", + "updated_at": "2015-04-24T01:57:50.570385Z", + "id": "fffe798a051d4b228ae612b431ca064a" + }, + { + "name": "Ms Dragica Pilipovic Chaffey", + "acronym": null, + "created_at": "2016-02-03T02:50:46.244113Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fffd45719a79476c8ef0366685e99a74", + "updated_at": "2016-02-03T02:50:46.242658Z", + "id": "fffd45719a79476c8ef0366685e99a74" + }, + { + "name": "Mr Alex Gorsky", + "acronym": null, + "created_at": "2015-04-24T01:48:58.565673Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fffcf9db4c424ba38fd5e812dd8aeaac", + "updated_at": "2015-04-24T01:48:58.564945Z", + "id": "fffcf9db4c424ba38fd5e812dd8aeaac" + }, + { + "name": "Mr Gregory Francis ", + "acronym": null, + "created_at": "2015-04-24T02:23:58.791310Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fffce2ef05014cfdaf322f13ee3d9db0", + "updated_at": "2015-04-24T02:23:58.790188Z", + "id": "fffce2ef05014cfdaf322f13ee3d9db0" + }, + { + "name": "Ms Larisa Pircalabelu", + "acronym": null, + "created_at": "2016-07-21T01:23:59.142183Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fffc8702608445c9a8793517f4534fb1", + "updated_at": "2016-07-21T01:23:59.141433Z", + "id": "fffc8702608445c9a8793517f4534fb1" + }, + { + "name": "Mr Alexander Kneepkens", + "acronym": null, + "created_at": "2015-05-07T21:34:40.869573Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fff720deb12f4b1fb0f149469d15b5e5", + "updated_at": "2015-05-07T21:34:40.868283Z", + "id": "fff720deb12f4b1fb0f149469d15b5e5" + }, + { + "name": "Mr Marco Digioia", + "acronym": null, + "created_at": "2015-04-24T01:53:59.129907Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fff48726498240688ff6db5c7611a70c", + "updated_at": "2015-04-24T01:53:59.129280Z", + "id": "fff48726498240688ff6db5c7611a70c" + }, + { + "name": "Ms Adela BRUSOVA", + "acronym": null, + "created_at": "2015-04-24T02:03:33.932156Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fff1decf9c744ea09e540504ad514763", + "updated_at": "2015-04-24T02:03:33.931445Z", + "id": "fff1decf9c744ea09e540504ad514763" + }, + { + "name": "Ms Anja Ingenrieth", + "acronym": null, + "created_at": "2015-05-07T21:14:28.711779Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fff1538c8ea349d18866a8f98c862ff8", + "updated_at": "2015-05-07T21:14:28.710327Z", + "id": "fff1538c8ea349d18866a8f98c862ff8" + }, + { + "name": "Mr Dimitrios Lyridis", + "acronym": null, + "created_at": "2016-05-08T01:49:49.437857Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fff11d63c1334292bf8a4780e68c8cfe", + "updated_at": "2016-05-08T01:49:49.436442Z", + "id": "fff11d63c1334292bf8a4780e68c8cfe" + }, + { + "name": "Ms Rosanna Lewis", + "acronym": null, + "created_at": "2016-03-18T01:36:59.675522Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/fff0a5c1b9494f989e85ef7c2b9f5ac5", + "updated_at": "2016-03-18T01:36:59.673429Z", + "id": "fff0a5c1b9494f989e85ef7c2b9f5ac5" + }, + { + "name": "Mr Pascal Montredon", + "acronym": null, + "created_at": "2016-05-05T01:19:54.860443Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffee3e4971634c929b8b61b24fb2f08a", + "updated_at": "2016-05-05T01:19:54.859001Z", + "id": "ffee3e4971634c929b8b61b24fb2f08a" + }, + { + "name": "Mr Jelmen HAAZE", + "acronym": null, + "created_at": "2015-10-30T00:39:35.770055Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffeba603bb3947c7a43a4c086031b3aa", + "updated_at": "2015-10-30T00:39:35.768633Z", + "id": "ffeba603bb3947c7a43a4c086031b3aa" + }, + { + "name": "Mr Flavio BURLIZZI", + "acronym": null, + "created_at": "2015-08-04T22:57:51.011270Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffeae77f2b894a33b881ec2b79e29117", + "updated_at": "2015-08-04T22:57:51.009831Z", + "id": "ffeae77f2b894a33b881ec2b79e29117" + }, + { + "name": "Ms Tomoyo Sekiguchi ", + "acronym": null, + "created_at": "2016-03-09T02:38:11.880805Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe968703bb44040b61bce6494c59a97", + "updated_at": "2016-03-09T02:38:11.878442Z", + "id": "ffe968703bb44040b61bce6494c59a97" + }, + { + "name": "Conseil G\u00e9n\u00e9ral du Gard", + "acronym": null, + "created_at": "2016-03-17T03:00:04.766562Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe8919709ac4830ad71b625294b7382", + "updated_at": "2016-03-17T03:00:04.765137Z", + "id": "ffe8919709ac4830ad71b625294b7382" + }, + { + "name": "EUROPEAN FEDERATION OF BUILDING AND WOODWORKERS", + "acronym": "EFBWW", + "created_at": "2015-05-07T21:26:53.280572Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe7eff4d34b4d7b97239846b8964fbe", + "updated_at": "2015-05-07T21:26:53.279783Z", + "id": "ffe7eff4d34b4d7b97239846b8964fbe" + }, + { + "name": "Think Tank EUROPA", + "acronym": "TTE", + "created_at": "2015-04-24T02:24:58.732688Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe6fffd4f1e4dbf8ff26ffa80f132c6", + "updated_at": "2015-04-24T02:24:58.731979Z", + "id": "ffe6fffd4f1e4dbf8ff26ffa80f132c6" + }, + { + "name": "Ms Willig Caren", + "acronym": null, + "created_at": "2015-12-10T02:00:11.666098Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe54c713fc04c03bf8aca713f9ad2e8", + "updated_at": "2015-12-10T02:00:11.665101Z", + "id": "ffe54c713fc04c03bf8aca713f9ad2e8" + }, + { + "name": "Solum", + "acronym": null, + "created_at": "2015-05-07T21:30:52.601629Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe3e1c97a4f445ab1dd1e4c60bc18cf", + "updated_at": "2015-05-07T21:30:52.600789Z", + "id": "ffe3e1c97a4f445ab1dd1e4c60bc18cf" + }, + { + "name": "EUBrasil", + "acronym": null, + "created_at": "2015-04-24T02:06:02.774935Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe37e4dd46042a0bf0654695f0ad0ae", + "updated_at": "2015-04-24T02:06:02.773344Z", + "id": "ffe37e4dd46042a0bf0654695f0ad0ae" + }, + { + "name": "Mr Thorsten Dr. Diercks", + "acronym": null, + "created_at": "2015-05-07T21:21:26.956745Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe3548dcf8c48a9b4fa39d530a9fd0e", + "updated_at": "2015-05-07T21:21:26.955469Z", + "id": "ffe3548dcf8c48a9b4fa39d530a9fd0e" + }, + { + "name": "Airbus Aeronautics", + "acronym": null, + "created_at": "2016-04-05T00:12:27.592570Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe23c57f5d34e55b63580fa92eef387", + "updated_at": "2016-04-05T00:12:27.590570Z", + "id": "ffe23c57f5d34e55b63580fa92eef387" + }, + { + "name": "Ms Elisa Briga", + "acronym": null, + "created_at": "2015-04-24T01:57:23.904841Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe18d1d8713464bbbf7c1e81887c68b", + "updated_at": "2015-04-24T01:57:23.904057Z", + "id": "ffe18d1d8713464bbbf7c1e81887c68b" + }, + { + "name": "Ms Roza Maria Strevinioti", + "acronym": null, + "created_at": "2015-04-24T02:00:42.086250Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe06b4f2f2c4b6faebdf361bb9b4ac1", + "updated_at": "2015-04-24T02:00:42.084916Z", + "id": "ffe06b4f2f2c4b6faebdf361bb9b4ac1" + }, + { + "name": "Association for the International Collective Management of Audiovisual Works", + "acronym": "AGICOA", + "created_at": "2015-11-14T02:02:49.268803Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffddc42b48c641b2b9781be1123df0e5", + "updated_at": "2015-11-14T02:02:49.267949Z", + "id": "ffddc42b48c641b2b9781be1123df0e5" + }, + { + "name": "Mr Joachim BERNEY", + "acronym": null, + "created_at": "2015-08-04T23:44:49.425906Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdda474c46e47698baa4d5afbc99977", + "updated_at": "2015-08-04T23:44:49.424473Z", + "id": "ffdda474c46e47698baa4d5afbc99977" + }, + { + "name": "Mr John Barradell", + "acronym": null, + "created_at": "2015-10-15T00:50:12.091403Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdd6e406d494529821a8bdee1be4b33", + "updated_at": "2015-10-15T00:50:12.089971Z", + "id": "ffdd6e406d494529821a8bdee1be4b33" + }, + { + "name": "Osterreichische Post AG", + "acronym": null, + "created_at": "2016-04-21T01:17:40.241168Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdcb1ae5ba74431aa24fa630b339e18", + "updated_at": "2016-04-21T01:17:40.240405Z", + "id": "ffdcb1ae5ba74431aa24fa630b339e18" + }, + { + "name": "Mr Tom Nysted", + "acronym": null, + "created_at": "2015-04-24T02:15:04.802512Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdb8caab0284102b7177dd75d4922a8", + "updated_at": "2015-04-24T02:15:04.801810Z", + "id": "ffdb8caab0284102b7177dd75d4922a8" + }, + { + "name": "Mr Jaime BERNIS", + "acronym": null, + "created_at": "2015-09-16T23:38:29.717737Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffda5015f466463aad395c55eb98d234", + "updated_at": "2015-09-16T23:38:29.716938Z", + "id": "ffda5015f466463aad395c55eb98d234" + }, + { + "name": "Mr David McKenna", + "acronym": null, + "created_at": "2015-04-24T02:02:52.877702Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd990efd8c341b78aa0101b67b9477f", + "updated_at": "2015-04-24T02:02:52.876918Z", + "id": "ffd990efd8c341b78aa0101b67b9477f" + }, + { + "name": "Instituto para la Producci\u00f3n Sostenible", + "acronym": null, + "created_at": "2015-05-07T21:39:59.552249Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd783eb6a9a4e43883b05dc4f211e01", + "updated_at": "2015-05-07T21:39:59.551454Z", + "id": "ffd783eb6a9a4e43883b05dc4f211e01" + }, + { + "name": "Associazione Nazionale Consorzi Gestione e Tutela del Territorio e Acque irrigue", + "acronym": "ANBI", + "created_at": "2016-07-06T02:05:14.587863Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd67dd940974fff8dc870ddc0839205", + "updated_at": "2016-07-06T02:05:14.586583Z", + "id": "ffd67dd940974fff8dc870ddc0839205" + }, + { + "name": "Open Internet Project", + "acronym": "OIP", + "created_at": "2015-04-24T02:30:51.174761Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd5e14900b64b1a9dd4a79748b1221e", + "updated_at": "2015-04-24T02:30:51.173582Z", + "id": "ffd5e14900b64b1a9dd4a79748b1221e" + }, + { + "name": "MEADOW VALE FOODS LIMITED", + "acronym": null, + "created_at": "2016-05-07T01:57:58.384964Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd33a5c282d4b59b962b08b9383c823", + "updated_at": "2016-05-07T01:57:58.383522Z", + "id": "ffd33a5c282d4b59b962b08b9383c823" + }, + { + "name": "Ms Costanza BUFALINI", + "acronym": null, + "created_at": "2015-05-07T21:17:08.207441Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcf912c4bf349bc8777cdd382dbeb77", + "updated_at": "2015-05-07T21:17:08.206097Z", + "id": "ffcf912c4bf349bc8777cdd382dbeb77" + }, + { + "name": "Ms VILLARINO PILAR", + "acronym": null, + "created_at": "2016-05-18T01:55:35.885694Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcf6d726f9d4f2a865d4f9fffb80747", + "updated_at": "2016-05-18T01:55:35.884374Z", + "id": "ffcf6d726f9d4f2a865d4f9fffb80747" + }, + { + "name": "Ms Claire Wilson-Leary", + "acronym": null, + "created_at": "2016-08-24T01:09:24.395536Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcbde4c9fff4951b1fd532ea5c3761d", + "updated_at": "2016-08-24T01:09:24.394197Z", + "id": "ffcbde4c9fff4951b1fd532ea5c3761d" + }, + { + "name": "BlackBerry", + "acronym": "BlackBerry", + "created_at": "2015-04-24T02:07:17.565441Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcbcdf1eec342ed9287cfc9dc5ed71d", + "updated_at": "2015-04-24T02:07:17.564649Z", + "id": "ffcbcdf1eec342ed9287cfc9dc5ed71d" + }, + { + "name": "Hewlett-Packard Company", + "acronym": null, + "created_at": "2015-04-24T01:48:14.159850Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcb47bb0ee44ac0a3597ba822be1d36", + "updated_at": "2015-04-24T01:48:14.158413Z", + "id": "ffcb47bb0ee44ac0a3597ba822be1d36" + }, + { + "name": "Slovensk\u00e1 po\u0161ta, a. s.", + "acronym": null, + "created_at": "2016-04-21T01:17:40.762874Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffca0afa625f4d3bb5c87eb4c6d7e9af", + "updated_at": "2016-04-21T01:17:40.762126Z", + "id": "ffca0afa625f4d3bb5c87eb4c6d7e9af" + }, + { + "name": "ADAS UK Limited", + "acronym": null, + "created_at": "2015-04-24T02:27:26.106588Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc8242abb324f3ba18bbf76fefb6284", + "updated_at": "2015-04-24T02:27:26.105885Z", + "id": "ffc8242abb324f3ba18bbf76fefb6284" + }, + { + "name": "Ms Sandrell SULTANA", + "acronym": null, + "created_at": "2015-08-04T22:33:54.008095Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc7e169388b47c2bf38ba17931f77e6", + "updated_at": "2015-08-04T22:33:54.006715Z", + "id": "ffc7e169388b47c2bf38ba17931f77e6" + }, + { + "name": "Europ\u00e4ischer Kartellverband christlicher Studentenverb\u00e4nde", + "acronym": "EKV", + "created_at": "2015-05-07T21:30:10.558170Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc781ee1d4041a1a6dc391f7f93b8b4", + "updated_at": "2015-05-07T21:30:10.556740Z", + "id": "ffc781ee1d4041a1a6dc391f7f93b8b4" + }, + { + "name": "Mr Zden\u011bk Vermouzek", + "acronym": null, + "created_at": "2016-09-04T02:09:52.477933Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc654bd22e34ef0a77c5fbb0f6aec17", + "updated_at": "2016-09-04T02:09:52.475693Z", + "id": "ffc654bd22e34ef0a77c5fbb0f6aec17" + }, + { + "name": "Ms Ana MINGO", + "acronym": null, + "created_at": "2015-08-04T23:30:45.426863Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc636f187cc4601b14f19d857092fc5", + "updated_at": "2015-08-04T23:30:45.425384Z", + "id": "ffc636f187cc4601b14f19d857092fc5" + }, + { + "name": "Mr Carlton DEAL", + "acronym": null, + "created_at": "2015-08-04T22:55:14.129970Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc5d109563948389eadfd45ddf17112", + "updated_at": "2015-08-04T22:55:14.128531Z", + "id": "ffc5d109563948389eadfd45ddf17112" + }, + { + "name": "Ms Diana Popa", + "acronym": null, + "created_at": "2015-04-24T02:09:48.888939Z", + "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc4b62de478477d8b25f1d593e99467", + "updated_at": "2015-04-24T02:09:48.888213Z", + "id": "ffc4b62de478477d8b25f1d593e99467" + } + ], + "next": "http://api.lobbyfacts.eu/api/1/entity?limit=50&offset=50", + "limit": 50, + "offset": 0, + "previous": false +} diff --git a/test/inputs/json/samples/null-safe.json b/test/inputs/json/samples/null-safe.json index 2151c10a7..77ba06a39 100644 --- a/test/inputs/json/samples/null-safe.json +++ b/test/inputs/json/samples/null-safe.json @@ -8,7 +8,7 @@ "city": "江苏苏州", "country": "中国" }, - "created_at": "2015-04-24T01:46:50.459583" + "created_at": "2015-04-24T01:46:50.459583Z" }, { "name": "David", diff --git a/test/inputs/schema/date-time.1.json b/test/inputs/schema/date-time.1.json index e4e95c99e..14551f9c6 100644 --- a/test/inputs/schema/date-time.1.json +++ b/test/inputs/schema/date-time.1.json @@ -1,7 +1,7 @@ { - "date": "1985-04-12", - "time": "23:20:50.52Z", - "date-time": "2018-08-13T21:31:01+00:00", - "union-array": ["1985-04-12", "23:20:50.52Z"], - "complex-union-array": ["2018-08-13T21:31:01+00:00", "foo", 123] + "date": "1985-04-12", + "time": "23:20:50.52Z", + "date-time": "2018-08-13T21:31:01+01:00", + "union-array": ["1985-04-12", "23:20:50.52Z"], + "complex-union-array": ["2018-08-13T21:31:01+00:10", "foo", 123] } diff --git a/test/languages.ts b/test/languages.ts index 222559d18..a524636cb 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -386,7 +386,16 @@ export const GoLanguage: Language = { "nst-test-suite.json", // can't differenciate empty array and nothing for optional empty array // (omitempty). - "github-events.json" + "github-events.json", + // files contains datetime filed with contain non rfc3339 format value + "f6a65.json", + "e0ac7.json", + "c3303.json", + "7681c.json", + "437e7.json", + "127a1.json", + "26b49.json", + "0cffa.json" ], skipMiscJSON: false, skipSchema: [ From cab3d94302406dfc85f5c4f02aa7197b141d8a35 Mon Sep 17 00:00:00 2001 From: Kris West Date: Wed, 14 Feb 2024 14:28:18 +0000 Subject: [PATCH 24/99] fix: Typescript zod (and effect) language uses block scoped variables before they've been declared (#2419) * Fixing code generation for zod, ensuring that referenced types are defined before they are referenced * Apply suggestions from code review adding a warning to Typescript Zod generator on (unlikely) exceeeding max num passes when determining output order + correcting a comment typo --------- Co-authored-by: David Siegel --- .../src/language/TypeScriptZod.ts | 158 +++++++++++++++--- 1 file changed, 131 insertions(+), 27 deletions(-) diff --git a/packages/quicktype-core/src/language/TypeScriptZod.ts b/packages/quicktype-core/src/language/TypeScriptZod.ts index d57e56439..b2197624a 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod.ts @@ -6,7 +6,17 @@ import { RenderContext } from "../Renderer"; import { BooleanOption, Option, OptionValues, getOptionValues } from "../RendererOptions"; import { Sourcelike } from "../Source"; import { TargetLanguage } from "../TargetLanguage"; -import { ClassProperty, EnumType, ObjectType, PrimitiveStringTypeKind, TransformedStringTypeKind, Type } from "../Type"; +import { + ArrayType, + ClassProperty, + ClassType, + EnumType, + ObjectType, + PrimitiveStringTypeKind, + SetOperationType, + TransformedStringTypeKind, + Type +} from "../Type"; import { matchType } from "../TypeUtils"; import { AcronymStyleOptions, acronymStyle } from "../support/Acronyms"; import { @@ -187,6 +197,52 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { } } + /** Static function that extracts underlying type refs for types that form part of the + * definition of the passed type - used to ensure that these appear in generated source + * before types that reference them. + * + * Primitive types don't need defining and enums are output before other types, hence, + * these are ignored. + */ + static extractUnderlyingTyperefs(type: Type): number[] { + let typeRefs: number[] = []; + //Ignore enums and primitives + if (!type.isPrimitive() && type.kind != "enum") { + //need to extract constituent types for unions and intersections (which both extend SetOperationType) + //and can ignore the union/intersection itself + if (type instanceof SetOperationType) { + (type as SetOperationType).members.forEach(member => { + //recurse as the underlying type could itself be a union, instersection or array etc. + typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(member)); + }); + } + + //need to extract additional properties for object, class and map types (which all extend ObjectType) + if (type instanceof ObjectType) { + const addType = (type as ObjectType).getAdditionalProperties(); + if (addType) { + //recurse as the underlying type could itself be a union, instersection or array etc. + typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(addType)); + } + } + + //need to extract items types for ArrayType + if (type instanceof ArrayType) { + const itemsType = (type as ArrayType).items; + if (itemsType) { + //recurse as the underlying type could itself be a union, instersection or array etc. + typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(itemsType)); + } + } + + //Finally return the reference to a class as that will need to be defined (where objects, maps, unions, intersections and arrays do not) + if (type instanceof ClassType) { + typeRefs.push(type.typeRef); + } + } + return typeRefs; + } + protected emitSchemas(): void { this.ensureBlankLine(); @@ -194,42 +250,90 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { this.emitEnum(u, enumName); }); + // All children must be defined before this type to avoid forward references in generated code + // Build a model that will tell us if a referenced type has been defined then make multiple + // passes over the defined objects to put them into the correct order for output in the + // generated sourcecode + const order: number[] = []; - const mapKey: Name[] = []; - const mapValue: Sourcelike[][] = []; - this.forEachObject("none", (type: ObjectType, name: Name) => { - mapKey.push(name); - mapValue.push(this.gatherSource(() => this.emitObject(name, type))); - }); + const mapType: ObjectType[] = []; + const mapTypeRef: number[] = []; + const mapName: Name[] = []; + const mapChildTypeRefs: number[][] = []; - mapKey.forEach((_, index) => { - // assume first - let ordinal = 0; + this.forEachObject("none", (type: ObjectType, name: Name) => { + mapType.push(type); + mapTypeRef.push(type.typeRef); + mapName.push(name); - // pull out all names - const source = mapValue[index]; - const names = source.filter(value => value as Name); + const children = type.getChildren(); + let childTypeRefs: number[] = []; - // must be behind all these names - for (let i = 0; i < names.length; i++) { - const depName = names[i]; + children.forEach(child => { + childTypeRefs = childTypeRefs.concat(TypeScriptZodRenderer.extractUnderlyingTyperefs(child)); + }); + mapChildTypeRefs.push(childTypeRefs); + }); - // find this name's ordinal, if it has already been added - for (let j = 0; j < order.length; j++) { - const depIndex = order[j]; - if (mapKey[depIndex] === depName) { - // this is the index of the dependency, so make sure we come after it - ordinal = Math.max(ordinal, depIndex + 1); + //Items to process on this pass + let indices: number[] = []; + mapType.forEach((_, index) => { + indices.push(index); + }); + //items to process on the next pass + let deferredIndices: number[] = []; + + //defensive: make sure we don't loop forever, even complex sets shouldn't require many passes + const MAX_PASSES = 999; + let passNum = 0; + do { + indices.forEach(index => { + // must be behind all these children + const childTypeRefs = mapChildTypeRefs[index]; + let foundAllChildren = true; + + childTypeRefs.forEach(childRef => { + //defensive: first check if there is a definition for the referenced type (there should be) + if (mapTypeRef.indexOf(childRef) > -1) { + let found = false; + // find this childs's ordinal, if it has already been added + //faster to go through what we've defined so far than all definitions + for (let j = 0; j < order.length; j++) { + const childIndex = order[j]; + if (mapTypeRef[childIndex] === childRef) { + found = true; + break; + } + } + foundAllChildren = foundAllChildren && found; + } else { + console.error( + "A child type reference was not found amongst all Object definitions! TypeRef: " + childRef + ); } + }); + + if (foundAllChildren) { + // insert index into order as we are safe to define this type + order.push(index); + } else { + //defer to a subsequent pass as we need to define other types + deferredIndices.push(index); } + }); + indices = deferredIndices; + deferredIndices = []; + passNum++; + + if (passNum > MAX_PASSES) { + //giving up + order.push(...deferredIndices); + console.warn("Exceeded maximum number of passes when determining output order, output may contain forward references"); } - - // insert index - order.splice(ordinal, 0, index); - }); + } while (indices.length > 0 && passNum <= MAX_PASSES); // now emit ordered source - order.forEach(i => this.emitGatheredSource(mapValue[i])); + order.forEach(i => this.emitGatheredSource(this.gatherSource(() => this.emitObject(mapName[i], mapType[i])))); } protected emitSourceStructure(): void { From ac1429f4d5e4634a233a555b21e0924e623e1f91 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Wed, 14 Feb 2024 14:31:43 +0000 Subject: [PATCH 25/99] style: format code with Prettier (#2503) This commit fixes the style issues introduced in f440afd according to the output from Prettier. Details: None Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- packages/quicktype-core/src/input/JSONSchemaInput.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/input/JSONSchemaInput.ts b/packages/quicktype-core/src/input/JSONSchemaInput.ts index 21827c467..8fc74e6dd 100644 --- a/packages/quicktype-core/src/input/JSONSchemaInput.ts +++ b/packages/quicktype-core/src/input/JSONSchemaInput.ts @@ -226,7 +226,7 @@ export class Ref { get name(): string { const path = Array.from(this.path); - for (; ;) { + for (;;) { const e = path.pop(); if (e === undefined || e.kind === PathElementKind.Root) { let name = this.addressURI !== undefined ? this.addressURI.filename() : ""; @@ -399,7 +399,7 @@ class Canonizer { private readonly _map = new EqualityMap(); private readonly _schemaAddressesAdded = new Set(); - constructor(private readonly _ctx: RunContext) { } + constructor(private readonly _ctx: RunContext) {} private addIDs(schema: any, loc: Location) { if (schema === null) return; @@ -536,7 +536,7 @@ class Resolver { private readonly _ctx: RunContext, private readonly _store: JSONSchemaStore, private readonly _canonizer: Canonizer - ) { } + ) {} private async tryResolveVirtualRef( fetchBase: Location, @@ -548,7 +548,7 @@ class Resolver { // we don't know its $id mapping yet, which means we don't know where we // will end up. What we do if we encounter a new schema is add all its // IDs first, and then try to canonize again. - for (; ;) { + for (;;) { const loc = this._canonizer.canonize(fetchBase, virtualRef); const canonical = loc.canonicalRef; assert(canonical.hasAddress, "Canonical ref can't be resolved without an address"); From bb5f03357df2ccf3bc2c263d07d59e7f357d443c Mon Sep 17 00:00:00 2001 From: Daniel Bretzigheimer Date: Wed, 14 Feb 2024 15:34:23 +0100 Subject: [PATCH 26/99] fix: enum property overriding when using $ref #2319 (#2326) Co-authored-by: David Siegel --- packages/quicktype-core/src/attributes/StringTypes.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/quicktype-core/src/attributes/StringTypes.ts b/packages/quicktype-core/src/attributes/StringTypes.ts index 63ea20db9..c14d7d58d 100644 --- a/packages/quicktype-core/src/attributes/StringTypes.ts +++ b/packages/quicktype-core/src/attributes/StringTypes.ts @@ -77,9 +77,14 @@ export class StringTypes { } else if (other.cases !== undefined) { const thisCases = cases; const otherCases = other.cases; - cases = mapMap(setIntersect(thisCases.keys(), new Set(otherCases.keys())).entries(), k => - Math.min(defined(thisCases.get(k)), defined(otherCases.get(k))) - ); + + const intersects = setIntersect(thisCases.keys(), new Set(otherCases.keys())); + const entries = intersects.size > 0 ? intersects.entries() : new Set(thisCases.keys()).entries(); + cases = mapMap(entries, k => { + const thisValue = defined(thisCases.get(k)); + const otherValue = otherCases.get(k) ?? Math.min(); + return Math.min(thisValue, otherValue); + }); } transformations = setIntersect(transformations, other.transformations); From 916cd94a9d4fdeab870b6a12f42ad43ebaedf314 Mon Sep 17 00:00:00 2001 From: Adam724 <32963828+Adam724@users.noreply.github.com> Date: Wed, 14 Feb 2024 20:15:25 -0500 Subject: [PATCH 27/99] Fix omit empty (#2505) * Add omit-empty to usable options * run Prettier --- packages/quicktype-core/src/language/Golang.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index c9fc9009f..fb3c7b8f7 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -27,7 +27,11 @@ export const goOptions = { packageName: new StringOption("package", "Generated package name", "NAME", "main"), multiFileOutput: new BooleanOption("multi-file-output", "Renders each top-level object in its own Go file", false), fieldTags: new StringOption("field-tags", "list of tags which should be generated for fields", "TAGS", "json"), - omitEmpty: new BooleanOption("omit-empty", "If set, all non-required objects will be tagged with ,omitempty", false) + omitEmpty: new BooleanOption( + "omit-empty", + 'If set, all non-required objects will be tagged with ",omitempty"', + false + ) }; export class GoTargetLanguage extends TargetLanguage { @@ -38,9 +42,9 @@ export class GoTargetLanguage extends TargetLanguage { protected getOptions(): Option[] { return [ goOptions.justTypes, + goOptions.justTypesAndPackage, goOptions.packageName, goOptions.multiFileOutput, - goOptions.justTypesAndPackage, goOptions.fieldTags, goOptions.omitEmpty ]; @@ -95,8 +99,9 @@ function isValueType(t: Type): boolean { return primitiveValueTypeKinds.indexOf(kind) >= 0 || kind === "class" || kind === "enum" || kind === "date-time"; } -function canOmitEmpty(cp: ClassProperty): boolean { +function canOmitEmpty(cp: ClassProperty, omitEmptyOption: boolean): boolean { if (!cp.isOptional) return false; + if (omitEmptyOption) return true; const t = cp.type; return ["union", "null", "any"].indexOf(t.kind) < 0; } @@ -285,7 +290,7 @@ export class GoRenderer extends ConvenienceRenderer { const docStrings = description !== undefined && description.length > 0 ? description.map(d => "// " + d) : []; const goType = this.propertyGoType(p); - const omitEmpty = canOmitEmpty(p) || this._options.omitEmpty ? ",omitempty" : []; + const omitEmpty = canOmitEmpty(p, this._options.omitEmpty) ? ",omitempty" : []; docStrings.forEach(doc => columns.push([doc])); const tags = this._options.fieldTags From 0b5924db1d3858d6f4abe5923cce53b2f4e581aa Mon Sep 17 00:00:00 2001 From: black-desk Date: Fri, 1 Mar 2024 15:25:23 +0800 Subject: [PATCH 28/99] C++: force include for types in vector and map (#2403) Related: #2402 Signed-off-by: black-desk Co-authored-by: David Siegel --- packages/quicktype-core/src/language/CPlusPlus.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus.ts b/packages/quicktype-core/src/language/CPlusPlus.ts index 03cdf6285..5adff56d2 100644 --- a/packages/quicktype-core/src/language/CPlusPlus.ts +++ b/packages/quicktype-core/src/language/CPlusPlus.ts @@ -1078,7 +1078,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { const result: TypeRecord[] = []; const recur = (forceInclude: boolean, isVariant: boolean, l: number, t: Type) => { if (t instanceof ArrayType) { - recur(forceInclude, isVariant, l + 1, t.items); + recur(true, isVariant, l + 1, t.items); } else if (t instanceof ClassType) { result.push({ name: this.nameForNamedType(t), @@ -1088,7 +1088,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { forceInclude }); } else if (t instanceof MapType) { - recur(forceInclude, isVariant, l + 1, t.values); + recur(true, isVariant, l + 1, t.values); } else if (t instanceof EnumType) { result.push({ name: this.nameForNamedType(t), From 99d4dcac0151d216315000919af14d8b6b53712b Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Sat, 9 Mar 2024 08:08:28 -0600 Subject: [PATCH 29/99] Fix Bug with Go time package imports (#2528) --- packages/quicktype-core/src/language/Golang.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index fb3c7b8f7..f74c0097f 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -307,7 +307,7 @@ export class GoRenderer extends ConvenienceRenderer { this.emitPackageDefinitons( false, - usedTypes.has("time.Time") || usedTypes.has("*,time.Time") ? new Set(["time"]) : undefined + usedTypes.has("time.Time") || usedTypes.has("*,time.Time") || usedTypes.has("[],time.Time") ? new Set(["time"]) : undefined ); this.emitDescription(this.descriptionForType(c)); this.emitStruct(className, columns); From d30035642b8139d4e06ac2faed2a668a56b3b0ff Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Mon, 18 Mar 2024 13:52:51 -0500 Subject: [PATCH 30/99] Fix Bug with misplaced Go time imports (#2531) --- packages/quicktype-core/src/language/Golang.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index f74c0097f..847bb075d 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -307,7 +307,9 @@ export class GoRenderer extends ConvenienceRenderer { this.emitPackageDefinitons( false, - usedTypes.has("time.Time") || usedTypes.has("*,time.Time") || usedTypes.has("[],time.Time") ? new Set(["time"]) : undefined + usedTypes.has("time.Time") || usedTypes.has("*,time.Time") || usedTypes.has("[],time.Time") + ? new Set(["time"]) + : undefined ); this.emitDescription(this.descriptionForType(c)); this.emitStruct(className, columns); @@ -648,6 +650,7 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, const mapping: Map = new Map(); mapping.set("time.Time", "time"); mapping.set("*,time.Time", "time"); + mapping.set("[],time.Time", "time"); this.forEachClassProperty(c, "none", (_name, _jsonName, p) => { const goType = this.propertyGoType(p); From 648282dededff7b11dcd45a101cee1dc3dd7288b Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 30 Mar 2024 10:59:34 -0700 Subject: [PATCH 31/99] add prettierignore (#2541) --- .prettierignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..24d3c3b54 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +test/runs +test/inputs From 36fb7faf8ac3f0ff42fc61a66414d0674f75eb52 Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 31 Mar 2024 07:00:28 +1300 Subject: [PATCH 32/99] update for latest @effect/schema (#2537) * update for latest @effect/schema * update typescript * drop suspend where possible * use .literal instead of .enums * simplify * track enums * only walk object names --- .../src/language/TypeScriptEffectSchema.ts | 80 +++++++++++-------- .../fixtures/typescript-effect-schema/main.ts | 4 +- .../package-lock.json | 44 +++++----- .../typescript-effect-schema/package.json | 4 +- 4 files changed, 74 insertions(+), 58 deletions(-) diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts index 18d5d2c30..22a1b9bdd 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts @@ -1,5 +1,5 @@ import { arrayIntercalate } from "collection-utils"; -import { ClassProperty, EnumType, ObjectType, Type } from "../Type"; +import { ArrayType, ClassProperty, EnumType, MapType, ObjectType, Type } from "../Type"; import { matchType } from "../TypeUtils"; import { funPrefixNamer, Name, Namer } from "../Naming"; import { RenderContext } from "../Renderer"; @@ -108,9 +108,15 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { return p.isOptional ? ["S.optional(", typeMap, ")"] : typeMap; } + emittedObjects = new Set(); + typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { - if (["class", "object", "enum"].indexOf(t.kind) >= 0) { - return ["S.lazy(() => ", this.nameForNamedType(t), ")"]; + if (t.kind === "class" || t.kind === "object" || t.kind === "enum") { + const name = this.nameForNamedType(t); + if (this.emittedObjects.has(name)) { + return [name]; + } + return ["S.suspend(() => ", name, ")"]; } const match = matchType( @@ -144,50 +150,60 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { } private emitObject(name: Name, t: ObjectType) { + this.emittedObjects.add(name); this.ensureBlankLine(); - if (this._options.justSchema) { - this.emitLine("\nexport const ", name, " = S.struct({"); - } else { - this.emitLine("\nconst ", name, "_ = S.struct({"); - } + this.emitLine("\nexport class ", name, " extends S.Class<", name, '>("', name, '")({'); this.indent(() => { this.forEachClassProperty(t, "none", (_, jsonName, property) => { this.emitLine(`"${utf16StringEscape(jsonName)}"`, ": ", this.typeMapTypeForProperty(property), ","); }); }); - this.emitLine("});"); - if (!this._options.justSchema) { - this.emitLine("export interface ", name, " extends S.Schema.To {}"); - this.emitLine( - "export const ", - name, - ": S.Schema, ", - name, - "> = ", - name, - "_;" - ); - } + this.emitLine("}) {}"); } private emitEnum(e: EnumType, enumName: Name): void { + this.emittedObjects.add(enumName); this.ensureBlankLine(); this.emitDescription(this.descriptionForType(e)); - this.emitLine("\nexport const ", enumName, " = ", "S.enums({"); + this.emitLine("\nexport const ", enumName, " = ", "S.literal("); this.indent(() => this.forEachEnumCase(e, "none", (_, jsonName) => { - const name = stringEscape(jsonName); - this.emitLine('"', name, '": "', name, '",'); + this.emitLine('"', stringEscape(jsonName), '",'); }) ); - this.emitLine("});"); + this.emitLine(");"); if (!this._options.justSchema) { - this.emitLine("export type ", enumName, " = S.Schema.To;"); + this.emitLine("export type ", enumName, " = S.Schema.Type;"); } } + protected walkObjectNames(type: ObjectType) { + const names: Array = []; + + const recurse = (type: Type) => { + if (type.kind === "object" || type.kind === "class") { + names.push(this.nameForNamedType(type)); + this.forEachClassProperty(type as ObjectType, "none", (_, __, prop) => { + recurse(prop.type); + }); + } else if (type instanceof ArrayType) { + recurse(type.items); + } else if (type instanceof MapType) { + recurse(type.values); + } else if (type instanceof EnumType) { + for (const t of type.getChildren()) { + recurse(t); + } + } + }; + + this.forEachClassProperty(type, "none", (_, __, prop) => { + recurse(prop.type); + }); + + return names; + } + protected emitSchemas(): void { this.ensureBlankLine(); @@ -197,10 +213,10 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { const order: number[] = []; const mapKey: Name[] = []; - const mapValue: Sourcelike[][] = []; + const mapValue: ObjectType[] = []; this.forEachObject("none", (type: ObjectType, name: Name) => { mapKey.push(name); - mapValue.push(this.gatherSource(() => this.emitObject(name, type))); + mapValue.push(type); }); mapKey.forEach((_, index) => { @@ -209,7 +225,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { // pull out all names const source = mapValue[index]; - const names = source.filter(value => value as Name); + const names = this.walkObjectNames(source); // must be behind all these names for (let i = 0; i < names.length; i++) { @@ -230,7 +246,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { }); // now emit ordered source - order.forEach(i => this.emitGatheredSource(mapValue[i])); + order.forEach(i => this.emitGatheredSource(this.gatherSource(() => this.emitObject(mapKey[i], mapValue[i])))); } protected emitSourceStructure(): void { diff --git a/test/fixtures/typescript-effect-schema/main.ts b/test/fixtures/typescript-effect-schema/main.ts index 538914b6e..9894cc4e5 100644 --- a/test/fixtures/typescript-effect-schema/main.ts +++ b/test/fixtures/typescript-effect-schema/main.ts @@ -25,11 +25,11 @@ if (!schema) { let backToJson: string; if (Array.isArray(value)) { const parsedValue = value.map(v => { - return Schema.parseSync(schema)(v); + return Schema.decodeUnknownSync(schema)(v); }); backToJson = JSON.stringify(parsedValue, null, 2); } else { - const parsedValue = Schema.parseSync(schema)(value); + const parsedValue = Schema.decodeUnknownSync(schema)(value); backToJson = JSON.stringify(parsedValue, null, 2); } diff --git a/test/fixtures/typescript-effect-schema/package-lock.json b/test/fixtures/typescript-effect-schema/package-lock.json index b94bf5c38..8a4b5c16f 100644 --- a/test/fixtures/typescript-effect-schema/package-lock.json +++ b/test/fixtures/typescript-effect-schema/package-lock.json @@ -9,19 +9,19 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@effect/schema": "^0.47.1" + "@effect/schema": "^0.64.10" }, "devDependencies": { "tsx": "^3.12.2", - "typescript": "^4.3.5" + "typescript": "^5.0.0" } }, "node_modules/@effect/schema": { - "version": "0.47.1", - "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.47.1.tgz", - "integrity": "sha512-aqh6U1Faqqi+iMENdCt3Wp/sYZH9QJLJPKUycOllzcjFmOnNlb9Yiw58LNhzLSoAqNOTUtHjx31EHk/P7h8tuQ==", + "version": "0.64.10", + "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.64.10.tgz", + "integrity": "sha512-V8eatG6dS30smzgmapR9EkyGUhXE7vVZFUiKDNSvp1AumNPjwIKjM8TW/Y/hA4HNm49RV+kgyyGcsI0Mu7owJA==", "peerDependencies": { - "effect": "2.0.0-next.54", + "effect": "^2.4.10", "fast-check": "^3.13.2" } }, @@ -94,9 +94,9 @@ "dev": true }, "node_modules/effect": { - "version": "2.0.0-next.54", - "resolved": "https://registry.npmjs.org/effect/-/effect-2.0.0-next.54.tgz", - "integrity": "sha512-qROhKMxlm6fpa90YRfWSgKeelDfhaDq2igPK+pIKupGehiCnZH4vd2qrY71HVZ10qZgXxh0VXpGyDQxJC+EQqw==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/effect/-/effect-2.4.10.tgz", + "integrity": "sha512-gWymyTJRCB1tZvwDkMhB3maHEMSddwl84yiB9kZfY+VEK0qL7B9lAUAij5rmBgGfeoZWpdEc5ycnf9VWXOtQRw==", "peer": true }, "node_modules/esbuild": { @@ -554,24 +554,24 @@ } }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } } }, "dependencies": { "@effect/schema": { - "version": "0.47.1", - "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.47.1.tgz", - "integrity": "sha512-aqh6U1Faqqi+iMENdCt3Wp/sYZH9QJLJPKUycOllzcjFmOnNlb9Yiw58LNhzLSoAqNOTUtHjx31EHk/P7h8tuQ==", + "version": "0.64.10", + "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.64.10.tgz", + "integrity": "sha512-V8eatG6dS30smzgmapR9EkyGUhXE7vVZFUiKDNSvp1AumNPjwIKjM8TW/Y/hA4HNm49RV+kgyyGcsI0Mu7owJA==", "requires": {} }, "@esbuild-kit/cjs-loader": { @@ -625,9 +625,9 @@ "dev": true }, "effect": { - "version": "2.0.0-next.54", - "resolved": "https://registry.npmjs.org/effect/-/effect-2.0.0-next.54.tgz", - "integrity": "sha512-qROhKMxlm6fpa90YRfWSgKeelDfhaDq2igPK+pIKupGehiCnZH4vd2qrY71HVZ10qZgXxh0VXpGyDQxJC+EQqw==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/effect/-/effect-2.4.10.tgz", + "integrity": "sha512-gWymyTJRCB1tZvwDkMhB3maHEMSddwl84yiB9kZfY+VEK0qL7B9lAUAij5rmBgGfeoZWpdEc5ycnf9VWXOtQRw==", "peer": true }, "esbuild": { @@ -857,9 +857,9 @@ } }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "dev": true } } diff --git a/test/fixtures/typescript-effect-schema/package.json b/test/fixtures/typescript-effect-schema/package.json index 059f9656a..42466e940 100644 --- a/test/fixtures/typescript-effect-schema/package.json +++ b/test/fixtures/typescript-effect-schema/package.json @@ -10,9 +10,9 @@ "license": "Apache-2.0", "devDependencies": { "tsx": "^3.12.2", - "typescript": "^4.3.5" + "typescript": "^5.0.0" }, "dependencies": { - "@effect/schema": "^0.47.1" + "@effect/schema": "^0.64.10" } } From 562bb54052159ef66bc509401756adf1e42321b3 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 30 Mar 2024 11:04:55 -0700 Subject: [PATCH 33/99] Add GH Issue and PR Templates (#2520) * add bug templates * add feature request issue template * move to singular PR template --- .github/ISSUE_TEMPLATE/bug_report.md | 48 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 5 +++ .github/ISSUE_TEMPLATE/feature_request.md | 33 ++++++++++++++++ .github/pull_request_template.md | 23 +++++++++++ 4 files changed, 109 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/pull_request_template.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..a42e14702 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,48 @@ +--- +name: New Bug Report +about: Use this template for reporting new bugs. +title: "[BUG]: bug description here" +labels: bug +--- + + + +## Issue Type + + +## Context (Environment, Version, Language) + + +Input Format: +Output Language: + + + +CLI, npm, or app.quicktype.io: +Version: + +## Description + + + +## Input Data + + + +## Expected Behaviour / Output + + +## Current Behaviour / Output + + +## Steps to Reproduce + + +1. +2. +3. +4. + +## Possible Solution + + diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..dd39e6d26 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +# contact_links: +# - name: GitHub Community Support +# url: https://github.com/orgs/community/discussions +# about: Please ask and answer questions here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..bad3daebb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,33 @@ +--- +name: Feature Request +about: Use this template for requesting new features. +title: "[FEATURE]: feature description here" +labels: enhancement +--- + + + +## Context (Input, Language) + + +Input Format: +Output Language: + +## Description + + + +## Current Behaviour / Output + + +## Proposed Behaviour / Output + + +## Solution + + +## Alternatives + + +## Context + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..0e624cecf --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,23 @@ +## Description + + +## Related Issue + + + + +## Motivation and Context + + + +## Previous Behaviour / Output + + +## New Behaviour / Output + + +## How Has This Been Tested? + + + +## Screenshots (if appropriate): From f287a5d490f5e27443825a7c98243594dd859afe Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 08:06:34 -1000 Subject: [PATCH 34/99] style: format code with Prettier (#2542) This commit fixes the style issues introduced in 562bb54 according to the output from Prettier. Details: None Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug_report.md | 18 +++++++++++++----- .github/ISSUE_TEMPLATE/feature_request.md | 11 +++++++++-- .github/pull_request_template.md | 6 ++++++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a42e14702..997807e90 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,41 +8,49 @@ labels: bug ## Issue Type + ## Context (Environment, Version, Language) + -Input Format: -Output Language: +Input Format: +Output Language: -CLI, npm, or app.quicktype.io: -Version: +CLI, npm, or app.quicktype.io: +Version: ## Description + ## Input Data + ## Expected Behaviour / Output + ## Current Behaviour / Output + ## Steps to Reproduce + + 1. 2. 3. 4. ## Possible Solution - + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bad3daebb..5aab66de0 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,26 +8,33 @@ labels: enhancement ## Context (Input, Language) + -Input Format: -Output Language: +Input Format: +Output Language: ## Description + ## Current Behaviour / Output + ## Proposed Behaviour / Output + ## Solution + ## Alternatives + ## Context + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0e624cecf..86eeba010 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,22 +1,28 @@ ## Description + ## Related Issue + ## Motivation and Context + ## Previous Behaviour / Output + ## New Behaviour / Output + ## How Has This Been Tested? + From d4fb094a9071ff293e5e705a36748cb1c0b2444e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 08:08:24 -1000 Subject: [PATCH 35/99] build(deps): bump readable-stream and @types/readable-stream (#2514) Bumps [readable-stream](https://github.com/nodejs/readable-stream) and [@types/readable-stream](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/readable-stream). These dependencies needed to be updated together. Updates `readable-stream` from 4.4.2 to 4.5.2 - [Release notes](https://github.com/nodejs/readable-stream/releases) - [Commits](https://github.com/nodejs/readable-stream/compare/v4.4.2...v4.5.2) Updates `@types/readable-stream` from 2.3.15 to 4.0.10 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/readable-stream) --- updated-dependencies: - dependency-name: readable-stream dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: "@types/readable-stream" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 37 ++++++++++++++-------------- package.json | 2 +- packages/quicktype-core/package.json | 4 +-- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index ad7704b81..1728337ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ ], "dependencies": { "@glideapps/ts-necessities": "^2.1.3", + "@types/readable-stream": "^4.0.10", "chalk": "^4.1.2", "collection-utils": "^1.0.1", "command-line-args": "^5.2.1", @@ -26,7 +27,7 @@ "quicktype-core": "20.0.12", "quicktype-graphql-input": "20.0.2", "quicktype-typescript-input": "20.0.2", - "readable-stream": "^4.4.2", + "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", "typescript": "4.9.5" @@ -257,10 +258,9 @@ "dev": true }, "node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", - "dev": true, + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", + "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -1635,9 +1635,9 @@ "link": true }, "node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -2359,7 +2359,7 @@ "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", - "readable-stream": "4.4.2", + "readable-stream": "4.5.2", "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", @@ -2371,7 +2371,7 @@ "@types/node": "18.14.0", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", - "@types/readable-stream": "2.3.15", + "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", "@types/yaml": "^1.9.7", "tslint": "^6.1.3", @@ -2672,10 +2672,9 @@ "dev": true }, "@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", - "dev": true, + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", + "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", "requires": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -3696,7 +3695,7 @@ "@types/node": "18.14.0", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", - "@types/readable-stream": "2.3.15", + "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.19", "@types/yaml": "^1.9.7", @@ -3708,7 +3707,7 @@ "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", - "readable-stream": "4.4.2", + "readable-stream": "4.5.2", "tslint": "^6.1.3", "typescript": "4.9.5", "unicode-properties": "^1.4.1", @@ -3822,9 +3821,9 @@ } }, "readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "requires": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", diff --git a/package.json b/package.json index 70e7cecef..f0bd3848e 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "quicktype-core": "20.0.12", "quicktype-graphql-input": "20.0.2", "quicktype-typescript-input": "20.0.2", - "readable-stream": "^4.4.2", + "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", "typescript": "4.9.5" diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 1ca3eb970..607770c05 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -22,7 +22,7 @@ "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", - "readable-stream": "4.4.2", + "readable-stream": "4.5.2", "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", @@ -34,7 +34,7 @@ "@types/node": "18.14.0", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", - "@types/readable-stream": "2.3.15", + "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", "@types/yaml": "^1.9.7", "tslint": "^6.1.3", From b25ab3a2132cb5626c82fc5918dff9e5c230446f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 08:08:41 -1000 Subject: [PATCH 36/99] build(deps): bump @types/urijs from 1.19.19 to 1.19.25 (#2513) Bumps [@types/urijs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/urijs) from 1.19.19 to 1.19.25. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/urijs) --- updated-dependencies: - dependency-name: "@types/urijs" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++++++++--------- package.json | 2 +- packages/quicktype-core/package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1728337ac..0fe079499 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "@types/semver": "^7.5.0", "@types/shelljs": "^0.8.12", "@types/stream-json": "^1.7.3", - "@types/urijs": "^1.19.19", + "@types/urijs": "^1.19.25", "ajv": "^5.5.2", "deep-equal": "^2.2.2", "exit": "^0.1.2", @@ -308,9 +308,9 @@ "dev": true }, "node_modules/@types/urijs": { - "version": "1.19.19", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", - "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" + "version": "1.19.25", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", + "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" }, "node_modules/@types/yaml": { "version": "1.9.7", @@ -2350,7 +2350,7 @@ "license": "Apache-2.0", "dependencies": { "@glideapps/ts-necessities": "2.1.3", - "@types/urijs": "^1.19.19", + "@types/urijs": "^1.19.25", "browser-or-node": "^2.1.1", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", @@ -2722,9 +2722,9 @@ "dev": true }, "@types/urijs": { - "version": "1.19.19", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", - "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" + "version": "1.19.25", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", + "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" }, "@types/yaml": { "version": "1.9.7", @@ -3697,7 +3697,7 @@ "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", - "@types/urijs": "^1.19.19", + "@types/urijs": "^1.19.25", "@types/yaml": "^1.9.7", "browser-or-node": "^2.1.1", "collection-utils": "^1.0.1", diff --git a/package.json b/package.json index f0bd3848e..385202491 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@types/semver": "^7.5.0", "@types/shelljs": "^0.8.12", "@types/stream-json": "^1.7.3", - "@types/urijs": "^1.19.19", + "@types/urijs": "^1.19.25", "ajv": "^5.5.2", "deep-equal": "^2.2.2", "exit": "^0.1.2", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 607770c05..348d00883 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@glideapps/ts-necessities": "2.1.3", - "@types/urijs": "^1.19.19", + "@types/urijs": "^1.19.25", "browser-or-node": "^2.1.1", "collection-utils": "^1.0.1", "is-url": "^1.2.4", From 37229c3fa45aca25b4dac91c42b9c01cb8d31dcb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 08:08:58 -1000 Subject: [PATCH 37/99] build(deps-dev): bump @types/browser-or-node from 1.3.0 to 1.3.2 (#2512) Bumps [@types/browser-or-node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/browser-or-node) from 1.3.0 to 1.3.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/browser-or-node) --- updated-dependencies: - dependency-name: "@types/browser-or-node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- packages/quicktype-core/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0fe079499..58320fa77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -180,9 +180,9 @@ "dev": true }, "node_modules/@types/browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-MVetr65IR7RdJbUxVHsaPFaXAO8fi89zv1g8L/mHygh1Q7xnnK02XZLwfMh57FOpTO6gtnagoPMQ/UOFfctXRQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", + "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", "dev": true }, "node_modules/@types/command-line-args": { @@ -2366,7 +2366,7 @@ "yaml": "^2.3.1" }, "devDependencies": { - "@types/browser-or-node": "^1.3.0", + "@types/browser-or-node": "^1.3.2", "@types/js-base64": "^3.3.1", "@types/node": "18.14.0", "@types/pako": "^1.0.0", @@ -2595,9 +2595,9 @@ "dev": true }, "@types/browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-MVetr65IR7RdJbUxVHsaPFaXAO8fi89zv1g8L/mHygh1Q7xnnK02XZLwfMh57FOpTO6gtnagoPMQ/UOFfctXRQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", + "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", "dev": true }, "@types/command-line-args": { @@ -3690,7 +3690,7 @@ "version": "file:packages/quicktype-core", "requires": { "@glideapps/ts-necessities": "2.1.3", - "@types/browser-or-node": "^1.3.0", + "@types/browser-or-node": "^1.3.2", "@types/js-base64": "^3.3.1", "@types/node": "18.14.0", "@types/pako": "^1.0.0", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 348d00883..0550516ff 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -29,7 +29,7 @@ "yaml": "^2.3.1" }, "devDependencies": { - "@types/browser-or-node": "^1.3.0", + "@types/browser-or-node": "^1.3.2", "@types/js-base64": "^3.3.1", "@types/node": "18.14.0", "@types/pako": "^1.0.0", From 0d974b41fa87149e4befeb255c9945fc544c2987 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 08:09:08 -1000 Subject: [PATCH 38/99] build(deps-dev): bump ts-node from 10.9.1 to 10.9.2 (#2511) Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.9.1 to 10.9.2. - [Release notes](https://github.com/TypeStrong/ts-node/releases) - [Changelog](https://github.com/TypeStrong/ts-node/blob/main/development-docs/release-template.md) - [Commits](https://github.com/TypeStrong/ts-node/compare/v10.9.1...v10.9.2) --- updated-dependencies: - dependency-name: ts-node dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 58320fa77..06154c3d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "tslint": "^6.1.3", "watch": "^1.0.2" }, @@ -1937,9 +1937,9 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -4052,9 +4052,9 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", diff --git a/package.json b/package.json index 385202491..32092e0c7 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "tslint": "^6.1.3", "watch": "^1.0.2" }, From a92aa3333290a46864e33302aa9e46f12da26337 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 30 Mar 2024 17:45:47 -0700 Subject: [PATCH 39/99] Add readonly option for TypeScript Language (#2534) --- .../src/language/TypeScriptFlow.ts | 16 +++++++++++++--- test/languages.ts | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/language/TypeScriptFlow.ts b/packages/quicktype-core/src/language/TypeScriptFlow.ts index 0c5750006..f21202056 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow.ts @@ -27,7 +27,8 @@ export const tsFlowOptions = Object.assign({}, javaScriptOptions, { "prefer-const-values", "Use string instead of enum for string enums with single value", false - ) + ), + readonly: new BooleanOption("readonly", "Use readonly type members", false) }); const tsFlowTypeAnnotations = { @@ -52,7 +53,8 @@ export abstract class TypeScriptFlowBaseTargetLanguage extends JavaScriptTargetL tsFlowOptions.rawType, tsFlowOptions.preferUnions, tsFlowOptions.preferTypes, - tsFlowOptions.preferConstValues + tsFlowOptions.preferConstValues, + tsFlowOptions.readonly ]; } @@ -167,8 +169,16 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { protected emitClassBlockBody(c: ClassType): void { this.emitPropertyTable(c, (name, _jsonName, p) => { const t = p.type; + + let propertyName: Sourcelike = name; + propertyName = modifySource(quotePropertyName, name); + + if (this._tsFlowOptions.readonly) { + propertyName = modifySource(_propertyName => "readonly " + _propertyName, propertyName); + } + return [ - [modifySource(quotePropertyName, name), p.isOptional ? "?" : "", ": "], + [propertyName, p.isOptional ? "?" : "", ": "], [this.sourceFor(t).source, ";"] ]; }); diff --git a/test/languages.ts b/test/languages.ts index a524636cb..791485867 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -784,7 +784,8 @@ export const TypeScriptLanguage: Language = { { "declare-unions": "true" }, ["pokedex.json", { "prefer-types": "true" }], { "acronym-style": "pascal" }, - { converters: "all-objects" } + { converters: "all-objects" }, + { readonly: "true" } ], sourceFiles: ["src/language/TypeScript.ts"] }; From 4c525816ac32ef4381f53b9e4a8944db1303df62 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Tue, 9 Apr 2024 09:18:18 -0700 Subject: [PATCH 40/99] Confirming djsiegel@gmail.com ownership of glideapps/quicktype for VS Marketplace (tracking: bc72cb2e) From a4a05d5879114576d3ccb032fa702d808c255552 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Sat, 13 Apr 2024 10:32:41 -0700 Subject: [PATCH 41/99] Import VS Code extension from glideapps/quicktype-vscode (#2559) * Import VS Code extension from glideapps/quicktype-vscode * Unused * Publish script token Try to publish Don't ship so much with VS Code extension Try again Avoid colliison with workspace publish One step Come on Move esbuild to top Now do typescript input Publishing VS Code Simpler wip We're bundling this wip no deps debug Success! --- .github/workflows/master.yaml | 1 + .nvmrc | 2 +- PACKAGES.md | 36 - package-lock.json | 9649 +++++++++++++++-- package.json | 6 +- packages/quicktype-vscode/.gitignore | 1 + packages/quicktype-vscode/.vscodeignore | 5 + packages/quicktype-vscode/LICENSE | 201 + packages/quicktype-vscode/README.md | 32 + .../media/demo-interactive.gif | Bin 0 -> 694209 bytes packages/quicktype-vscode/media/demo.gif | Bin 0 -> 844839 bytes packages/quicktype-vscode/media/icon.png | Bin 0 -> 14084 bytes packages/quicktype-vscode/package.json | 163 + .../quicktype-vscode/quicktype-23.0.122.vsix | Bin 0 -> 4169917 bytes packages/quicktype-vscode/src/extension.ts | 460 + packages/quicktype-vscode/tsconfig.json | 22 + script/publish.sh | 39 +- 17 files changed, 9497 insertions(+), 1120 deletions(-) delete mode 100644 PACKAGES.md create mode 100644 packages/quicktype-vscode/.gitignore create mode 100644 packages/quicktype-vscode/.vscodeignore create mode 100644 packages/quicktype-vscode/LICENSE create mode 100644 packages/quicktype-vscode/README.md create mode 100644 packages/quicktype-vscode/media/demo-interactive.gif create mode 100644 packages/quicktype-vscode/media/demo.gif create mode 100644 packages/quicktype-vscode/media/icon.png create mode 100644 packages/quicktype-vscode/package.json create mode 100644 packages/quicktype-vscode/quicktype-23.0.122.vsix create mode 100644 packages/quicktype-vscode/src/extension.ts create mode 100644 packages/quicktype-vscode/tsconfig.json diff --git a/.github/workflows/master.yaml b/.github/workflows/master.yaml index 852ae762d..5fa9ed17c 100644 --- a/.github/workflows/master.yaml +++ b/.github/workflows/master.yaml @@ -13,3 +13,4 @@ jobs: - run: npm run pub env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }} diff --git a/.nvmrc b/.nvmrc index 9dfef4721..6aab9b43f 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.12.0 +v18.18.0 diff --git a/PACKAGES.md b/PACKAGES.md deleted file mode 100644 index 59ab3a0ef..000000000 --- a/PACKAGES.md +++ /dev/null @@ -1,36 +0,0 @@ -# The packages - -* `quicktype-core`: This is the engine of quicktype. It takes JSON, JSON Schema, and GraphQL input and produces output in a variety of programming languages. We're trying to keep this lean in terms of download size so that it can be embedded, such as in [quicktype-playground](https://github.com/quicktype/quicktype-playground). - -* `quicktype-typescript-input`: This is a bit of code that allows TypeScript code to be fed as input to `quicktype-core`, by transforming it to JSON Schema with [typescript-json-schema](https://github.com/YousefED/typescript-json-schema). It depends on `quicktype-core`. - -* `quicktype-graphql-input`: This is the GraphQL input module. It's split off into a separate package because it's not used in the web UI and `quicktype-playgrounds`, and it uses the moderately sized `graphql` dependency. - -* `quicktype`: This is the command line interface for quicktype. It's a monolithic package that doesn't depend on the other packages, but contains all their code directly. This is mainly for ease of development. Packages that want to use quicktype's CLI interface, such as [json-to-azure-node-schema](https://github.com/json-helpers/json-to-azure-node-schema) will have to use this package. - -# Module resolution - -`quicktype-typescript-input` and `quicktype-graphql-input` have to work both as their own packages, depending on the `quicktype-core` package, as well as part of `quicktype`, referring to the files in the local `src/quicktype-core` directory. - -In addition, since those two input packages depend on `quicktype-core`, we would have to first build `quicktype-core`, publish it, and then build the input packages, depending on the just published `quicktype-core`. This is bad for development, since we couldn't do modifications to all packages without publishing, if we want to test independent of the `quicktype` package. The same goes for CI. Therefore, the two have to build as packages depending on the local `build/quicktype-core` package, but have to be published depending on the proper `quicktype-core` NPM package. We solve this the following way: - -* All packages, including `quicktype-typescript-input` and `quicktype-graphql-input`, import files with local paths, such as `"../quicktype-core"`. This seems the only way to make VSCode's TypeScript integration, as well as `ts-node` happy. Unfortunately, since local paths can's use `tsc`'s path mapping, we have to rewrite those paths _before_ compiling, which is done in `build/quicktype-*-input/build.ts`: it copies all the sources, rewrites them, compiles, and then deletes the copied sources again. - -* Depending on whether we build the input packages, or publish them, their `package.json`s will have to refer to either the local `quicktype-core` package, or the NPM one. This is also done by the build script, which replaces the dependency with the right one for the job. - -## Issues - -Module resolution in Node is such that if a package is not found in the local `node_modules` directory, it goes up the directory hierarchy and tries every `node_modules` directory it finds. We have a `node_modules` in the root directory of our repo, so a subpackage build will fall back to that if it can't find a package locally. The main consequence of that seems to be that the build won't catch missing dependencies in those packages if they're present in the root package. Moving the root `package.json` to `build/quicktype` screws with lots of tooling. - -# Building - -The root `quicktype` package does everything from its `package.json`. - -The other packages each have a `build.js` in their `build/PACKAGE` directory. It is required to build the root package before building the others, because it will install the `semver` package which the build script for the other packages depend on. It's also required to build `quicktype-core` before building the ones that depend on it. This is how to build everything: - -```shell -npm install -( cd build/quicktype-core ; node build.js ) -( cd build/quicktype-typescript-input ; node build.js ) -( cd build/quicktype-graphql-input ; node build.js ) -``` diff --git a/package-lock.json b/package-lock.json index 06154c3d6..3a575b26e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,11 +11,11 @@ "workspaces": [ "./packages/quicktype-core", "./packages/quicktype-graphql-input", - "./packages/quicktype-typescript-input" + "./packages/quicktype-typescript-input", + "./packages/quicktype-vscode" ], "dependencies": { "@glideapps/ts-necessities": "^2.1.3", - "@types/readable-stream": "^4.0.10", "chalk": "^4.1.2", "collection-utils": "^1.0.1", "command-line-args": "^5.2.1", @@ -47,6 +47,7 @@ "@types/urijs": "^1.19.25", "ajv": "^5.5.2", "deep-equal": "^2.2.2", + "esbuild": "^0.20.2", "exit": "^0.1.2", "prettier": "^3.0.1", "promise-timeout": "^1.3.0", @@ -80,6 +81,21 @@ "node": ">=12.17" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -91,655 +107,3800 @@ "node": ">=12" } }, - "node_modules/@glideapps/ts-necessities": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.3.tgz", - "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==" - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@mark.probst/typescript-json-schema": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", - "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/node": "^16.9.2", - "glob": "^7.1.7", - "path-equal": "^1.1.2", - "safe-stable-stringify": "^2.2.0", - "ts-node": "^10.9.1", - "typescript": "4.9.4", - "yargs": "^17.1.1" - }, - "bin": { - "typescript-json-schema": "bin/typescript-json-schema" + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/@types/node": { - "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4.2.0" + "node": ">=12" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "node_modules/@tsconfig/node18": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-1.0.1.tgz", - "integrity": "sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==", - "dev": true - }, - "node_modules/@types/browser-or-node": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", - "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", - "dev": true - }, - "node_modules/@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/graphql": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.11.8.tgz", - "integrity": "sha512-xGWx4kx9JKlqxDrZA12gw5qi2lvxPNLxnQQcoTXVX83MuGcXcpb7TADatGyGW51GaaXQOQTbjw3x4HuL3ULBaA==", - "dev": true - }, - "node_modules/@types/js-base64": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", - "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", - "deprecated": "This is a stub types definition. js-base64 provides its own type definitions, so you do not need this installed.", + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "js-base64": "*" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", - "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@types/pako": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", - "integrity": "sha1-6q6DZNG391LiY7w/1o3+yY5hNsU=", - "dev": true + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@types/pluralize": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.30.tgz", - "integrity": "sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA==", - "dev": true + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@types/readable-stream": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", - "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@types/shelljs": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.12.tgz", - "integrity": "sha512-ZA8U81/gldY+rR5zl/7HSHrG2KDfEb3lzG6uCUDhW1DTQE9yC/VBQ45fXnXq8f3CgInfhZmjtdu/WOUlrXRQUg==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "@types/glob": "~7.2.0", - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/stream-chain": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", - "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/stream-json": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.3.tgz", - "integrity": "sha512-Jqsyq5VPOTWorvEmzWhEWH5tJnHA+bB8vt/Zzb11vSDj8esfSHDMj2rbVjP0mfJQzl3YBJSXBBq08iiyaBK3KA==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@types/node": "*", - "@types/stream-chain": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/unicode-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/unicode-properties/-/unicode-properties-1.3.0.tgz", - "integrity": "sha512-kDVlxpdkCfgvzfXcglkr7j4OSMjCEEo/Jloj4tFuldYZpQ9Uypy7FGXPhNstoj4eGvhddwuu5n0EfI+XdWVoVA==", - "dev": true - }, - "node_modules/@types/urijs": { - "version": "1.19.25", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", - "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@types/yaml": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz", - "integrity": "sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==", - "deprecated": "This is a stub types definition. yaml provides its own type definitions, so you do not need this installed.", + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "yaml": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.5" + "node": ">=12" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, "engines": { - "node": ">=6" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/@eslint/eslintrc/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/browser-or-node": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.2.1.tgz", - "integrity": "sha512-sVIA0cysIED0nbmNOm7sZzKfgN1rpFmrqvLZaFWspaBAftfQcezlC81G6j6U2RJf4Lh66zFxrCeOsvkUXIcPWg==" + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "node_modules/@glideapps/ts-necessities": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.3.tgz", + "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.10.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "engines": { + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "dependencies": { - "chalk": "^4.1.2" - }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mark.probst/typescript-json-schema": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", + "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/node": "^16.9.2", + "glob": "^7.1.7", + "path-equal": "^1.1.2", + "safe-stable-stringify": "^2.2.0", + "ts-node": "^10.9.1", + "typescript": "4.9.4", + "yargs": "^17.1.1" + }, + "bin": { + "typescript-json-schema": "bin/typescript-json-schema" + } + }, + "node_modules/@mark.probst/typescript-json-schema/node_modules/@types/node": { + "version": "16.18.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", + "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" + }, + "node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "node_modules/@tsconfig/node18": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-1.0.1.tgz", + "integrity": "sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==", + "dev": true + }, + "node_modules/@types/browser-or-node": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", + "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", + "dev": true + }, + "node_modules/@types/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "dev": true + }, + "node_modules/@types/command-line-usage": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", + "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graphql": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.11.8.tgz", + "integrity": "sha512-xGWx4kx9JKlqxDrZA12gw5qi2lvxPNLxnQQcoTXVX83MuGcXcpb7TADatGyGW51GaaXQOQTbjw3x4HuL3ULBaA==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/js-base64": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", + "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", + "deprecated": "This is a stub types definition. js-base64 provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "js-base64": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" + }, + "node_modules/@types/node-persist": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/node-persist/-/node-persist-3.1.8.tgz", + "integrity": "sha512-QLidg6/SadZYPrTKxtxL1A85XBoQlG40bhoMdhu6DH6+eNCMr2j+RGfFZ9I9+IY8W/PDwQonJ+iBWD62jZjMfg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pako": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", + "integrity": "sha1-6q6DZNG391LiY7w/1o3+yY5hNsU=", + "dev": true + }, + "node_modules/@types/pluralize": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.30.tgz", + "integrity": "sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA==", + "dev": true + }, + "node_modules/@types/readable-stream": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", + "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/shelljs": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.12.tgz", + "integrity": "sha512-ZA8U81/gldY+rR5zl/7HSHrG2KDfEb3lzG6uCUDhW1DTQE9yC/VBQ45fXnXq8f3CgInfhZmjtdu/WOUlrXRQUg==", + "dev": true, + "dependencies": { + "@types/glob": "~7.2.0", + "@types/node": "*" + } + }, + "node_modules/@types/stream-chain": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", + "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stream-json": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.3.tgz", + "integrity": "sha512-Jqsyq5VPOTWorvEmzWhEWH5tJnHA+bB8vt/Zzb11vSDj8esfSHDMj2rbVjP0mfJQzl3YBJSXBBq08iiyaBK3KA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/stream-chain": "*" + } + }, + "node_modules/@types/unicode-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/unicode-properties/-/unicode-properties-1.3.0.tgz", + "integrity": "sha512-kDVlxpdkCfgvzfXcglkr7j4OSMjCEEo/Jloj4tFuldYZpQ9Uypy7FGXPhNstoj4eGvhddwuu5n0EfI+XdWVoVA==", + "dev": true + }, + "node_modules/@types/urijs": { + "version": "1.19.25", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", + "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" + }, + "node_modules/@types/vscode": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.88.0.tgz", + "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", + "dev": true + }, + "node_modules/@types/yaml": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz", + "integrity": "sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==", + "deprecated": "This is a stub types definition. yaml provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "yaml": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", + "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/type-utils": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", + "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", + "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vscode/test-cli": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.6.tgz", + "integrity": "sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==", + "dev": true, + "dependencies": { + "@types/mocha": "^10.0.2", + "c8": "^9.1.0", + "chokidar": "^3.5.3", + "enhanced-resolve": "^5.15.0", + "glob": "^10.3.10", + "minimatch": "^9.0.3", + "mocha": "^10.2.0", + "supports-color": "^9.4.0", + "yargs": "^17.7.2" + }, + "bin": { + "vscode-test": "out/bin.mjs" + } + }, + "node_modules/@vscode/test-cli/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vscode/test-cli/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/test-cli/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/test-cli/node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@vscode/test-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", + "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vscode/vsce": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.25.0.tgz", + "integrity": "sha512-VXMCGUaP6wKBadA7vFQdsksxkBAMoh4ecZgXBwauZMASAgnwYesHyLnqIyWYeRwjy2uEpitHvz/1w5ENnR30pg==", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^6.2.1", + "form-data": "^4.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 16" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/browser-or-node": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.2.1.tgz", + "integrity": "sha512-sVIA0cysIED0nbmNOm7sZzKfgN1rpFmrqvLZaFWspaBAftfQcezlC81G6j6U2RJf4Lh66zFxrCeOsvkUXIcPWg==" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/c8": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", + "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=14.14.0" + } + }, + "node_modules/c8/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/cockatiel": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", + "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/collection-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", + "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", + "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", + "dependencies": { + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^3.0.0", + "typical": "^7.1.1" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dependencies": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exec-sh": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", + "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", + "dev": true, + "dependencies": { + "merge": "^1.1.3" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphql": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", + "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", + "dependencies": { + "iterall": "1.1.3" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/internal-slot": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/collection-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", - "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/command-line-usage": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", - "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^3.0.0", - "typical": "^7.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12.20.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { - "node": ">=12.17" + "node": ">=8" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "engines": { - "node": ">=12.17" + "node": ">=8" } }, - "node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { - "node-fetch": "^2.6.12" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -748,735 +3909,807 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { - "node": ">=0.3.1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" + "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.8.x" + "node": ">=8" } }, - "node_modules/exec-sh": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { - "merge": "^1.1.3" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "node_modules/iterall": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", + "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "node_modules/js-base64": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "dependencies": { - "array-back": "^3.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "dependencies": { - "is-callable": "^1.1.3" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/graphql": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", - "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, "dependencies": { - "iterall": "1.1.3" + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" + "json-buffer": "3.0.1" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "immediate": "~3.0.5" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "uc.micro": "^1.0.1" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.assignwith": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "vlq": "^0.2.2" } }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "semver": "^7.5.3" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true + "node_modules/make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/is-bigint": { + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/merge-source-map": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "source-map": "^0.5.6" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.6" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" - }, + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "minimist": "^1.2.6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/mocha": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 8.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/iterall": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", - "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" - }, - "node_modules/js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assignwith": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" - }, - "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.57.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", + "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", "dev": true, + "optional": true, "dependencies": { - "minimist": "^1.2.6" + "semver": "^7.3.5" }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "engines": { - "node": "*" + "node": ">=10" } }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, "node_modules/node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -1496,10 +4729,39 @@ } } }, + "node_modules/node-persist": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", + "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1556,16 +4818,127 @@ "wrappy": "1" } }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-equal": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1574,12 +4947,72 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", @@ -1588,6 +5021,42 @@ "node": ">=4" } }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "dev": true, + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prettier": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", @@ -1622,6 +5091,65 @@ "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", "dev": true }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quicktype": { + "resolved": "packages/quicktype-vscode", + "link": true + }, "node_modules/quicktype-core": { "resolved": "packages/quicktype-core", "link": true @@ -1634,6 +5162,66 @@ "resolved": "packages/quicktype-typescript-input", "link": true }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/readable-stream": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", @@ -1676,6 +5264,18 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -1717,9 +5317,65 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dependencies": { + "path-parse": "^1.0.5" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "path-parse": "^1.0.5" + "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { @@ -1740,10 +5396,16 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true + }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -1755,6 +5417,64 @@ "node": ">=10" } }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -1773,25 +5493,191 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "node_modules/static-eval": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", + "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "dependencies": { + "escodegen": "^2.1.0" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/static-module": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "dependencies": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/static-module/node_modules/object-inspect": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==" + }, + "node_modules/static-module/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -1867,6 +5753,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1878,6 +5779,31 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1926,16 +5852,146 @@ "node": ">=12.17" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "node_modules/tiny-inflate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -1974,19 +6030,8 @@ "optional": true }, "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "optional": true + } } }, "node_modules/tslib": { @@ -2087,6 +6132,68 @@ "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -2107,6 +6214,18 @@ "node": ">=8" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, "node_modules/unicode-properties": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", @@ -2130,11 +6249,40 @@ "tiny-inflate": "^1.0.0" } }, + "node_modules/unicode-trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", + "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/urijs": { "version": "1.19.11", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -2145,6 +6293,35 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" + }, "node_modules/watch": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", @@ -2180,6 +6357,21 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -2231,6 +6423,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -2244,6 +6444,12 @@ "node": ">=12.17" } }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -2260,6 +6466,51 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2290,6 +6541,36 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -2337,6 +6618,40 @@ "node": ">=12" } }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -2345,6 +6660,18 @@ "node": ">=6" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/quicktype-core": { "version": "18.0.15", "license": "Apache-2.0", @@ -2490,6 +6817,55 @@ "engines": { "node": ">= 6" } + }, + "packages/quicktype-vscode": { + "name": "quicktype", + "version": "23.0.122", + "dependencies": { + "node-persist": "^4.0.1", + "quicktype-core": "file:../quicktype-core", + "quicktype-typescript-input": "file:../quicktype-typescript-input", + "unicode-properties": "github:quicktype/unicode-properties#dist" + }, + "devDependencies": { + "@types/mocha": "^10.0.6", + "@types/node": "18.x", + "@types/node-persist": "^3.1.8", + "@types/readable-stream": "^4.0.10", + "@types/vscode": "^1.87.0", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", + "@vscode/test-cli": "^0.0.6", + "@vscode/test-electron": "^2.3.9", + "@vscode/vsce": "^2.25.0", + "eslint": "^8.56.0", + "typescript": "^5.3.3" + }, + "engines": { + "vscode": "^1.87.0" + } + }, + "packages/quicktype-vscode/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/quicktype-vscode/node_modules/unicode-properties": { + "version": "1.1.0", + "resolved": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", + "license": "MIT", + "dependencies": { + "brfs": "^1.4.0", + "unicode-trie": "^0.3.0" + } } }, "dependencies": { @@ -2509,6 +6885,18 @@ } } }, + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2517,11 +6905,345 @@ "@jridgewell/trace-mapping": "0.3.9" } }, + "@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, "@glideapps/ts-necessities": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.3.tgz", "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==" }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -2568,6 +7290,45 @@ } } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -2628,6 +7389,12 @@ "integrity": "sha512-xGWx4kx9JKlqxDrZA12gw5qi2lvxPNLxnQQcoTXVX83MuGcXcpb7TADatGyGW51GaaXQOQTbjw3x4HuL3ULBaA==", "dev": true }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, "@types/js-base64": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", @@ -2638,9 +7405,9 @@ } }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/lodash": { "version": "4.14.197", @@ -2654,11 +7421,26 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, + "@types/mocha": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "dev": true + }, "@types/node": { "version": "18.14.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" }, + "@types/node-persist": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/node-persist/-/node-persist-3.1.8.tgz", + "integrity": "sha512-QLidg6/SadZYPrTKxtxL1A85XBoQlG40bhoMdhu6DH6+eNCMr2j+RGfFZ9I9+IY8W/PDwQonJ+iBWD62jZjMfg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/pako": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", @@ -2675,15 +7457,16 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", + "dev": true, "requires": { "@types/node": "*", "safe-buffer": "~5.1.1" } }, "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "@types/shelljs": { @@ -2726,6 +7509,12 @@ "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" }, + "@types/vscode": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.88.0.tgz", + "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", + "dev": true + }, "@types/yaml": { "version": "1.9.7", "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz", @@ -2735,6 +7524,266 @@ "yaml": "*" } }, + "@typescript-eslint/eslint-plugin": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", + "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/type-utils": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/parser": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", + "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", + "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/types": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@vscode/test-cli": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.6.tgz", + "integrity": "sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==", + "dev": true, + "requires": { + "@types/mocha": "^10.0.2", + "c8": "^9.1.0", + "chokidar": "^3.5.3", + "enhanced-resolve": "^5.15.0", + "glob": "^10.3.10", + "minimatch": "^9.0.3", + "mocha": "^10.2.0", + "supports-color": "^9.4.0", + "yargs": "^17.7.2" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + } + } + }, + "@vscode/test-electron": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", + "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + } + }, + "@vscode/vsce": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.25.0.tgz", + "integrity": "sha512-VXMCGUaP6wKBadA7vFQdsksxkBAMoh4ecZgXBwauZMASAgnwYesHyLnqIyWYeRwjy2uEpitHvz/1w5ENnR30pg==", + "dev": true, + "requires": { + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^6.2.1", + "form-data": "^4.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + } + } + }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -2743,11 +7792,32 @@ "event-target-shim": "^5.0.0" } }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -2760,6 +7830,12 @@ "json-schema-traverse": "^0.3.0" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -2774,6 +7850,16 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2803,12 +7889,34 @@ "is-array-buffer": "^3.0.1" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, + "azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "dev": true, + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2819,6 +7927,55 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "optional": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2828,11 +7985,37 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + } + }, "browser-or-node": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.2.1.tgz", "integrity": "sha512-sVIA0cysIED0nbmNOm7sZzKfgN1rpFmrqvLZaFWspaBAftfQcezlC81G6j6U2RJf4Lh66zFxrCeOsvkUXIcPWg==" }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -2842,22 +8025,89 @@ "ieee754": "^1.2.1" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, + "c8": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", + "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + } + } + }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2906,6 +8156,58 @@ "chalk": "^4.1.2" } }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2922,6 +8224,12 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "cockatiel": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", + "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==", + "dev": true + }, "collection-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", @@ -2949,6 +8257,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "command-line-args": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", @@ -2994,6 +8311,39 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -3012,6 +8362,61 @@ "node-fetch": "^2.6.12" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, "deep-equal": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", @@ -3046,6 +8451,29 @@ } } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -3056,11 +8484,109 @@ "object-keys": "^1.1.1" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "optional": true + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3074,6 +8600,47 @@ "iconv-lite": "^0.6.2" } }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, "es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -3099,6 +8666,37 @@ } } }, + "esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3110,11 +8708,221 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, + "escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "event-target-shim": { "version": "5.0.1", @@ -3141,18 +8949,100 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true + }, + "falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "find-replace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", @@ -3161,6 +9051,39 @@ "array-back": "^3.0.1" } }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -3170,16 +9093,50 @@ "is-callable": "^1.1.3" } }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "functions-have-names": { "version": "1.2.3", @@ -3193,17 +9150,25 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3217,6 +9182,38 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -3226,6 +9223,18 @@ "get-intrinsic": "^1.1.3" } }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "graphql": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", @@ -3238,7 +9247,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -3256,12 +9264,12 @@ "dev": true }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" } }, "has-proto": { @@ -3285,6 +9293,69 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -3298,6 +9369,34 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3308,9 +9407,16 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true }, "internal-slot": { "version": "1.0.4", @@ -3359,6 +9465,15 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -3384,17 +9499,38 @@ "has-tostringtag": "^1.0.0" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -3404,6 +9540,18 @@ "has-tostringtag": "^1.0.0" } }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -3465,6 +9613,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -3491,11 +9645,71 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "iterall": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "js-base64": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", @@ -3519,12 +9733,122 @@ } } }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -3540,6 +9864,22 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3549,17 +9889,126 @@ "yallist": "^4.0.0" } }, + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "requires": { + "vlq": "^0.2.2" + } + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, "make-error": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "merge": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3571,7 +10020,12 @@ "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true }, "mkdirp": { @@ -3583,11 +10037,217 @@ "minimist": "^1.2.6" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true + }, + "mocha": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node-abi": { + "version": "3.57.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", + "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", + "dev": true, + "optional": true, + "requires": { + "semver": "^7.3.5" + } + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, "node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -3596,10 +10256,30 @@ "whatwg-url": "^5.0.0" } }, + "node-persist": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", + "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true }, "object-is": { @@ -3638,25 +10318,149 @@ "wrappy": "1" } }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "requires": { + "semver": "^5.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, "path-equal": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true + } + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pluralize": { @@ -3664,6 +10468,33 @@ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" }, + "prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "prettier": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", @@ -3686,6 +10517,75 @@ "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", "dev": true }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quicktype": { + "version": "file:packages/quicktype-vscode", + "requires": { + "@types/mocha": "^10.0.6", + "@types/node": "18.x", + "@types/node-persist": "^3.1.8", + "@types/readable-stream": "^4.0.10", + "@types/vscode": "^1.87.0", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", + "@vscode/test-cli": "^0.0.6", + "@vscode/test-electron": "^2.3.9", + "@vscode/vsce": "^2.25.0", + "eslint": "^8.56.0", + "node-persist": "^4.0.1", + "quicktype-core": "file:../quicktype-core", + "quicktype-typescript-input": "file:../quicktype-typescript-input", + "typescript": "^5.3.3", + "unicode-properties": "github:quicktype/unicode-properties#dist" + }, + "dependencies": { + "typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true + }, + "unicode-properties": { + "version": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", + "from": "unicode-properties@github:quicktype/unicode-properties#dist", + "requires": { + "brfs": "^1.4.0", + "unicode-trie": "^0.3.0" + } + } + } + }, "quicktype-core": { "version": "file:packages/quicktype-core", "requires": { @@ -3820,6 +10720,56 @@ } } }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, "readable-stream": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", @@ -3847,6 +10797,15 @@ } } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -3876,11 +10835,40 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, "requires": { "path-parse": "^1.0.5" } }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3891,20 +10879,75 @@ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz", "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "shebang-regex": "^3.0.0" } }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -3917,22 +10960,133 @@ } }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "optional": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, + "optional": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "static-eval": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", + "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "requires": { + "escodegen": "^2.1.0" + }, + "dependencies": { + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, + "static-module": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "requires": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "object-inspect": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==" + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, "stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -3998,6 +11152,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4006,6 +11171,21 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -4041,16 +11221,127 @@ } } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, "tiny-inflate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" }, + "tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "requires": {} + }, "ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -4069,13 +11360,6 @@ "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" - }, - "dependencies": { - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - } } }, "tslib": { @@ -4159,6 +11443,53 @@ "tslib": "^1.8.1" } }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dev": true, + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -4169,6 +11500,18 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, "unicode-properties": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", @@ -4194,11 +11537,42 @@ } } }, + "unicode-trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", + "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "urijs": { "version": "1.19.11", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4209,6 +11583,34 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, + "v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" + }, "watch": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", @@ -4238,6 +11640,15 @@ "webidl-conversions": "^3.0.0" } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -4277,6 +11688,11 @@ "is-typed-array": "^1.1.10" } }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -4287,6 +11703,12 @@ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==" }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -4315,11 +11737,63 @@ } } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -4355,10 +11829,47 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } + }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 32092e0c7..3786edc66 100644 --- a/package.json +++ b/package.json @@ -13,13 +13,14 @@ "build": "npm run build --workspaces --if-present && tsc", "test": "script/test", "start": "script/watch", - "clean": "rm -rf dist node_modules *~ packages/*/{dist,node_modules}", + "clean": "rm -rf dist node_modules *~ packages/*/{dist,node_modules,out}", "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/index.js" }, "workspaces": [ "./packages/quicktype-core", "./packages/quicktype-graphql-input", - "./packages/quicktype-typescript-input" + "./packages/quicktype-typescript-input", + "./packages/quicktype-vscode" ], "dependencies": { "@glideapps/ts-necessities": "^2.1.3", @@ -51,6 +52,7 @@ "@types/urijs": "^1.19.25", "ajv": "^5.5.2", "deep-equal": "^2.2.2", + "esbuild": "^0.20.2", "exit": "^0.1.2", "prettier": "^3.0.1", "promise-timeout": "^1.3.0", diff --git a/packages/quicktype-vscode/.gitignore b/packages/quicktype-vscode/.gitignore new file mode 100644 index 000000000..c585e1938 --- /dev/null +++ b/packages/quicktype-vscode/.gitignore @@ -0,0 +1 @@ +out \ No newline at end of file diff --git a/packages/quicktype-vscode/.vscodeignore b/packages/quicktype-vscode/.vscodeignore new file mode 100644 index 000000000..a92fd112a --- /dev/null +++ b/packages/quicktype-vscode/.vscodeignore @@ -0,0 +1,5 @@ +.vscode +node_modules +out/ +src/ +tsconfig.json \ No newline at end of file diff --git a/packages/quicktype-vscode/LICENSE b/packages/quicktype-vscode/LICENSE new file mode 100644 index 000000000..8dada3eda --- /dev/null +++ b/packages/quicktype-vscode/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/quicktype-vscode/README.md b/packages/quicktype-vscode/README.md new file mode 100644 index 000000000..652fb05fa --- /dev/null +++ b/packages/quicktype-vscode/README.md @@ -0,0 +1,32 @@ +**Supports** `C (cJSON)`, `C#`, `C++`, `Crystal`, `Dart`, `Elm`, `Flow`, `Go`, `Haskell`, `JSON Schema`, `Java`, `JavaScript`, `JavaScript PropTypes`, `Kotlin`, `Objective-C`, `PHP`, `Pike`, `Python`, `Ruby`, `Rust`, `Scala3`, `Smithy`, `Swift`, `TypeScript`, `TypeScript Effect Schema` and `TypeScript Zod` + +- Interactively generate types and (de-)serialization code from JSON, JSON Schema, and TypeScript +- Paste JSON/JSON Schema/TypeScript as code + +![](https://raw.githubusercontent.com/quicktype/quicktype-vscode/master/media/demo-interactive.gif) + +`quicktype` infers types from sample JSON data, then outputs strongly typed models and serializers for working with that data in your desired programming language. For more explanation, read [A first look at quicktype](http://blog.quicktype.io/first-look/). + +In any JSON file, use the command "Open quicktype for JSON" to summon quicktype, which will generate types from the JSON. Invoke "Change quicktype's target language" to pick a different language. There are similar "Open quicktype" commands for JSON Schema and TypeScript. + +Another way to use quicktype is to copy JSON into the clipboard and invoke "Paste JSON as code/types": + +![](https://raw.githubusercontent.com/quicktype/quicktype-vscode/master/media/demo.gif) + +For a more powerful experience, including custom options and the ability to generate code from multiple JSON samples, try [quicktype.io](https://app.quicktype.io). + +## Installing + +This extension is available for free in the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items/quicktype.quicktype) + +## Customization + +- `quicktype.justTypes`: Generate only types, or also produce (de)serialization code when using "Open quicktype". When using "Paste", you can pick between the commands for "types" and "code", without having to set this option. + +- `quicktype.inferMaps`, `quicktype.inferEnums`, `quicktype.inferDateTimes`, `quicktype.inferUuids`, `quicktype.inferBoolStrings`, `quicktype.inferIntegerStrings`: Tell quicktype whether it should try to infer those types from the input JSON. This is not a precise science, so sometimes the guess will be wrong, which is why you can turn them off through these options. Also, quicktype doesn't support dates, UUIDs and stringified integers/booleans in all target languages yet. + +## Contribute! + +quicktype is an open source project, and we're always happy about contributors. If you can think of a way to improve [this extension](https://github.com/quicktype/quicktype-vscode), or [quicktype](https://github.com/quicktype/quicktype), please consider contributing, especially if you know TypeScript. Code is only one way to contribute, though: we're particularly short on documentation. We'd also love to hear your feedback - come [talk to us on Slack](http://slack.quicktype.io)! + +If you find a bug, please [report it on GitHub](https://github.com/quicktype/quicktype-vscode/issues). diff --git a/packages/quicktype-vscode/media/demo-interactive.gif b/packages/quicktype-vscode/media/demo-interactive.gif new file mode 100644 index 0000000000000000000000000000000000000000..d748f7895341e37a515f76a0a206399981b9cb34 GIT binary patch literal 694209 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%0ALcD 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

Y( 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 z zlhG9&4g#GH65XUA9iNCz?X=FgsY)j40U!XvLFfV7X#d2wNd(pb0~|03tq_(*@C+Pa z#W`%z*)@a+zRtP5#69SPJO#kI1;-_5h-!>Oz@)>GFa|9Q6FXdj<26fPL_<|YLL|)9 zx`2`#-W8RcM&q#tQ5XeMyu(|J0y|)XA&A8TaSl?5MOfSfHLOKBGy-GA3pJ<%B3REj zq#j!(P-hLsY4C;P+(gqf0%A1cJK#c*2u2u{-o1uJ2H)_jV0YY5p!yERT!r+3$_`)Iy1IcK zV_Qa)3K=9wpx`_30wQFCoc)bAyyHg*r)UAf;E6<>OrSmt#$(`xJ~V|;W7|s*B#YQ?*OEZ*1Pb7&NMi6i+$tZk7F$hyUWaUk?V?1C8FK}le)E?4Y zLpJyiLj43TG=eicLo+-BJNQqBZ2t>8yhQ}HWh9XTFz^c_A%dFJUphomGkC)uzJuM} zs3Bm6z!e2H$l)l8g)m4`M}Z3~0z)`lhS%6#GyqV_?Pw1*LS^2mWacSl>gh@O;yF}@ z5^Cah1dYWV<23#UE!@m9`XUOZLpkUHFQ`M7h}_3qUnHQ4gv3fcIAAVCLSC@LE3}_}*26c%YU0q#INV&toTq=5Yk>Zz zfTHU)y`+q-hpN!mO7J%+WU4I6 zj#TjZn$En3OTnyoYy@f2EXdUx#t_+pq(d0W=8>(K4}Qc0O<=&7&U8hCF}(tg;H#q4 zMKBW0xteRbQmwjLZ8WKvlI4}X@>MyM6%v!i zA!Yoa8%xB4F$4fNoRrvIIV`Lf2qz=~D0MRxkEm zulAZQ_X^5M1OOTonbojDHF&3SES&NpFYzWX`>wD1iqyijuljn-FpR?=6x9$ImE8mY z`F3OWcJKdMF92_^00W@_A25|=f;d0{IIILbCCEJNLIC*d`=+l2%kKqOFa~e125;6L zs6raNlZWa9GT6d1ATR+3unMOz3lFdhqp<4$kDjc-8hC;T!{&#UgDs%K{AO?ubMOy$ za1al%58s9+eE$JB5LNzWV}_jrHN1`tmqZkw4h&cE3cv6bTQPJQaExf}>1=UxdGU#P zF&FQNChS4(?kiKOhM(yTFZjY6-zc!1RGYlztN9y1sRJ+EnGhE-5c_c-|FIxLksb_# zYZe*M(k7n7L&V?+{WZd@Vw3DplrI3>SH%OBQc6OK#LMkw7JqUJYcUpwGAK6_HE`$+ zyM%v%XuuUoPRJNSrbXpF7P8dCXJu^ZbjVGtid|q!>0N`@(A{)Io~lG1NL+&+c?I4H z!#UVqhw$A`%w=1oXz59Z<5ujzX2U>n#>IR^F{cGL7_&}{gE3FD=ygR5JtiO%@gTEv zAir}GS^uj3HnIO2O3(dVM^p%o^u+^)&V4>$BlsjWlm)dsoF@$=F>GKX#07W8(%v)z z{Ly4Y2V_a$9SAmS`@x8WR3LwPYWN_HEP(`)Y~Vo_6TR^!M28NSdJ^9p=>fjNM*xf= zO`}U!d++!+dR;cI!obU1ZY$rX#_@vbQI_y zqBm4eJ+Pvztl|J2shAwawd}+>7(z(8B70y6TeQU_rgc3;<&->z!9IqP%*8uk5GcV) zh$K)}tI%CM5R70@hcrSoOl7AmMN>S*IZ*ODG)ptI^EyAaV@EbT!v@bTNNmpLqd11E zj{oOy%H}sj1An|jG#G+XJqu`{NZM5pNC*(=?2p>;&qv_GB+Xw(O`_a*1d+f9NPdLh z;Il_;GGR&QQ%+|I7fNU0>>Pfg=zvq{cTmvbB7kws4EL z+z`1?ggd7=WKXtat2pJ695%YdJ<#*(+%riC=RJ-BuZVV1j5arT#Is1wDJ2k(!2k9! z;G8}LMLGlpNxVuvPm(^2_B{?xEHVTj2t!9G;%1-Hi-ZI*;GB+^#M?~7C=g_Fi(d}$ zCX@?YnNy80qyy8ALq;xm+N{m4peNGq^mu=_c=vf0`?O$-BH7s&URY}+_9EJF>InK z&U83D5Wc}5FSO|}GV&z|9#(fcPUxJid&8>$bLxeI01=P@$=xduJ5#jyin}0@ z_D=`ED#$`+$KXe}Hc0%%my&{yG>#>kwh(C&M=<2zq>d(~gWmW=ulgmWd;ef(6YajV zwYWCIIoXLf#46Ez14!uj|K$>r#FA8i#HJdP*YJX0encf92CT|b2Ub#wEOsH}2u%Aq zpBJ4N>$%16xt^3aY_0?<031n?j&Ix(TeI=Wsub1e#AxislfYhmgDe8=2tI)xG`Gfc zd<4rw>@L$%S4af22R*bmJJGYRJiA0%v;-_HY@I*xB=b*{^Vb*s(3d^hpZ#)3yLq?7D%b+nQ~lM;ecW4p-J`3=uW|r{ytDVc z+53Ik1HRhx>Ct1D(lht4gL3s5*_BU#0O+uQBIu ze(an7>_hv^<{JBNgmVmAd)O>9;_OfH+DpMqv31PnUv|(oKS0!br|+FWf(8o?On6Ws zLWd0@GL*QG;=_p+D@M$CQ6ol=9YJywxsl|@ktR!qOnFizN|!BRvXr@!=F6G&zP&rA zljlyKJ%M@~_me2lpWXzPE4tLE&T%=JE-hEHA+~er>gfxxb^mKWefIy@ zHS2h6CVd%d6v>bwUNe0ugc$W=qUxrW>H=hxQ4B$39FRtN#ioK@iKG!k46%@wcN%f5 zzzIS8P{adCG|*pea3vpO4fiu#H@E1 zJcpgBuoAvqrByk6OSEig*j(OanrfA9_4yt zrx`=)BIcP$*g=FC>vjVV-*U>iWR!A>vrbQ8+y5&FO|H5^(>!cW@&%EEt^p(*hZ`|O z!dDCd#E@4>$=E-Ac=33YcsS&*kVb86kehdSK_ul%1PZ5OKoDuBo^wXgxR7EBVz3a4 z^(kkRV;HLE(}tSirDu;{h4Yo5bIur-f?U?PSBR`dsF6!N_Jtr?GzR1qsxQ$P5wHy@ zgqnBW;hJW=UX0ttxm&CoM!D_A`)<1Twi~LRu7Sf4!Sw({k4uUYswhB;;V+z~kW!N< zYzu({5W@i}q)R3L{%I6hq&m?mtjy%fE3gP1OSCrM3V9r03L#~xW(x78o&bx9hZcJ4 z$)*rfo$;@p3!_mdo=YO(7x{W{DTJ4J0{^Tml1RK!$F6s1LF5{BIxZ(0Lxj0Kl60^s zM8db&5niv5!_Uw5QtQEZ?dGG2=R#_F9n96f5NX64cI*-lXVmT;uxp0>8W9d}AOaEX zi3F%#p}lu>FIvm8;IpK4!3ttfgBj%D2R9hP+qA1UfC5A`MnMW};0rnII!-!h28U>% zYdY&f*Ez0n30(Lh64;0i3E2T2Al8KxG*pkX3ih7(oGAeHImdlMlAl-LftL5s**1~M~bC<$v|NmQ<)Hkrlfd-O@&y{C>&D{*eRwS9c#op zP02i%F;7461l8HhQpf(i(?PgEL|M|ui*Xb}b!4d+JndBvVVI1PdU?ke{ZcBlyaHyW z;*ev?0!a?h0yL|Hl`qOd4R~P;o~GO=S>P9stTC{pcmbgYMc6@^zI3KBrRhy=np4wI zt6jj*!zg~*ze^OtIpC^}asRLdjBosOi0X3TZkEcRNR(|9PGX_Hypuxj1Tk6#%S!1I zrjLa+>|qYUqCjZT2!l+DWswj_e%PiD#iUUn*dm5P*cQiv)UF(cu$`L1XHtO}k{vJ#*zz*AwWaNCbJ;naSnC{cI0q?Yk)_S;L~%f2+&P*72VW#EDMX1zAuwBv zW;CK4jR1yGp3;=hg$_ic%L>Bc^Odj^G%&0a%sNAAzSsFxo@M!lAx067X5h0CrZUSV z8gUJ7j6$vcOo;I8(*F!>;P)NP1I9RLQHXE|!;a^`g&}+t3B1Gww3nz8Eeyd?U>Jfp z7%PTlIBMWwGiFqpvJ+<}=_lm~2anW| zjd5Kw+R^5wO}t4au!>Vnw*TMdEv1gs^UO!ekyul4@s688N$41-P z?sm9)ga16?$OhcsE_c0igYIQH$2az#_qY!p8$Lq2+6j;Mwud8s&2sY+=hMVUKau8@ z&$;Dyu5-;}e)Gf*z~w=od6b+Z8-Rb3=?jmI)2lx9Q>n*OQonlHx4t3CVLj?`e|v0z zhagYP{p`VmqHu%rOlexv*v+2&u$O)L%13_lq5pj8Gk^NdCp*f)8eWz&tn;D|efPo7 zdGUXL{N6Wz_{pDszIiwMryK7ut^t4f$DjW5w}1Wde}Dbwpa1*!fBymS{{%1q32*=n zumBP802MF+8E^p|umK_P0VOa3DR2TUumUmg0yQuLIZy*1560gs>01R&K0V@CB7H z37OCZn-B&$BI=&PN~TaKe8dW=P&o>MU$C$XtFQ|BMIbPk*pOu;iedoE3%*!^dTGqAQN07dtm7x$R``-C>q`&0HSg#7lIuuWGCu@eg1^B z2JZFh;Tj&K9vmf$62c_8DIL_oBp;$2XvT^P!eN3)j~3$e2!c?ck{uGl8~@fu9QzS4 z!O;|vttt8njiAj(oaWtr5e_uB03W*6v8yYAtBb`Hc#^%)}a~<={46u8o)sxezO`FVmE7( zAbis`8v-0uvlSBIAX0NR!Q>poMBKn@5t1S!Gh@&e1TL_l5elIYxW;C_Gd#zW!Z1=U zXn`s_ge+J`q$u)QDDr2HK_EyhJV~J}T;^x6LN5I2tm0wAhDtxeAs*sk6vA_3>fv47 zLZ#Gd9ER#=sG%c4@*^qqLWPAUje{5TAYdjgT)-@23I}tt1K}KhE9elDAW;78BB1U`kG<{M=c@iyvbVhCT9ZF$F^Pm*UA`y6$ zMq7bNt05ko6GxqMMoU2;qBIYRG!MG;H0xnWX|xkMp&nvXMiW6y37p+^P*m~zFYpC6 zsa<;MQUM83LOP@y1auKlS|k*tJC~(dN*YN)kVd7YySrIBL`qb8FW=wq{&nYf=g!=j z^XHj4JNr2^pL3q`JnvT+vgV!4V2JHgLPkIvBa^cJ{3nWTzSqT+KmMNbY>y*Mc-f&l;IqtQfKK0D^RrwO!&fg&cs|^A`)V=nE<)E>0XbVFj#TRa?qjo>_QnoA0U`ps~ z7G*)hWWnb&AUBee?cW=<$a zC3AguW41_oTxuvXAi^xsMzLpZ^xM$nXPfu~Yp$YLS70^MGZ&`&L?ZX^uuQhat_2N- z=JNR#(KFFnO#J2>{rO;@D@*iIcU>DFVJHh(EekD>zoDi@jHvb?gnA3+ej#K9fEpb9 zG#oEs$!kNf^jKVQ%lUqJ;zg^#PtCo(rl`iPGR%i4)s(7a55BtF@#3^ZSom?1Jp2aR zFSE|nn#|YA4li-#@_9t@L{zxu8%;?r!>3bY*_sE-?81E>SHxq4hR zvL^USrua(O;rP8F;cXEXyIQ`?3H5+#K6P{MEPaQ^#oYB4%p8tP?Ob<;2`Gr$o{$n$ zx3?kc9_Z(@yFC7mC?01+MpN?!cWqJX5#;jCwSBx;FTYpHrrK7exyxadD}NTE=f}JmmZ2i8yE<{Cs{44gpKst};mE5G*@+K39JTjYrVzTX} zrt3!Dvkep1htsQeV+QuywC@7O`P{2x98a}QMBp+m?3>S2*4s1(*5cN`(eztzkiHAX#?G?n>2&xZb|k5`H5b*`ueIQGsht;3$)TUTMTy9b>;I&qA&vq3 z@tCt^0&BYbG50QCy`%Tf`IJ4F5B*~~$isP+(TM<&9#qb@mh3S1eCoceKpSKDs=jD4 zt!Fe64_(ts+4Ue>rLPO>JWKFO^vEz40ez=SyN~f+i03XJ9NbfNI*OOd{Kw>-%)_zG zQ7xh+JE4iD4m?lcTCYd_NUjCvMSS~1_bAP{xt8gZunC1H7py&CYD(pgydPv%yyt@o z9L4sjmL>fwb?d5n)mN&gzp2iu8jH)X7qLxePdrD1sTc1valf}@ds-Oq$&%@W|2Etk zF@F2`vSkri+nx7n{1ZiX8((^nY&It1mxh2cJLN^5O@(;}!a&NWkVSC+_4uw1b&>$0 zR=&0-GQhp`a~%zumhSVH_3jYHVi)b%vGDR)I(u%xX?FFQq+FdkuCGSi z1@LP@nk)0_X{WIYHQ3z`L6>f^baQ#7bAAIO^zFM>+;~_DYVJfgvZwn3S8zmYmGK2))(y5V4 zb<3|cHJb8~OSR_~cQRqPHRiBSkXFgNEWK(}(Q~&A$(ny;wTB@(vx3{fnpu?oEOKO&I94TT# zxslggmf2r%HMAr(Tx8NngcBO&ZyJ&mKb0CemtyWGG&}Ph0ZEU%L1#g(M~4)W8JI(GkDk=Hl1>a%g z>#5bnDNE+ZliqOo*cWzLVeiM*2`M&2=gg`fko4bSl47TF;PrjbJl?Z7p5`})&+_9~ zbe@+>m8OsVRuq&Z0EKZI8w|kZr#1=besg}$bzD&HXIDLw$Eby2?sKwa|1|I8V069v(dvvD56sTm=;Zr* zW3!R9^5=RPBzyF;ay89zeD;LaC;ssy0iswQDX`jKa7@`QvCgsj@>~D17Uuxtb5=fW zB#LlKSe=cQ+w$ymS>o3z{7Hd8Hk(tMjpjdHMi9b5(Y^nkW3Z8xk}}(0PDj!=6~#|k z_n@a8tAEMN9dRel%3_wv5yf-ezRU9QCfS?TEf=2yQu0jaW>t5;baK~{B5(i-AcVZX zFwM4w>ki+%$)Un9Q`4S2({1FGgk@-zc}FxRf-{I2({J-h1y7KtTjLE}C*bWAU}^Iv zUKd$YLZs$;PZG!6FB*QH>wNe!rle;8QRxlwo3an(PHzbQvrNx{?;?3#pmDetV@EA; zTkkyVraAdbK34dCQ$WO9h4*Q*O&G&eqYXDx2b$REMV9y1`_pAF8lPUL)9^j7dfAcA z?DLIp{;Svw0dityYi$JlIsGh&DJyJAKXm_jfK+=W zuF!IdrmA1a*jjH*u-_^hNy&9-@tINFDE;&xJFVl*YfAsQwUvc~?A1mE!T&HPp zeUrpKc<@T8k@k_XxZHX%eZx0nn{_EmRq@*1l$ZzFM*oaMNM(BQEUuIiNOm;U6HjwA z@ga$B82 zw~XJ;bTMPE-8m+HpiH|vBqra|F~Gg8NJuIYFXct9@^CL~NPKTcUk7l}Nt+>K)uJE! z*saP^RX?Wbd7RENq9B%iXf~oK8%0wyX1FVFh2Ws3fB#zQcr;j*Jv`bK#t&+KuO=O? z+CY;zEOBKRvS{$w`M4m@eW>CaFRyV21*=h20lehR7ge>!#lCUqYJMgxz_;yoL zTG2*0z+2T$TZ*ua5m6>#+YWU{Srt}MMd;G*K2&F~;48%szg~P#)XN>;L97<2;EZ~T=DyPIyF?RB-GbB|E0P;DI|Fyag@12G3C(M+4~ZOp zaTyWEN4tzl5lPpM$}no3jy0p^$KKgM{O~-4_R8y+H4}WY8K0ijY zxjGzlAILZy_TH2?9<~vUNFKM-$@-ctKK+n7>l9t%U^SXR0ukKnDNK;6$B$^3+Q9=0b-%>XP2VKqOb06A%=h zaa3yU#sFdi*ZuGwUGopeb-m?~kAl`?f^p(1(!;B*1TrC7{3I%Pfz_Bof_AkJ4CwKf zskKNB$1tT*cG5SV3XJ`_7_mijaxZX+J$o-qqYS z*3a-w;jFMa=HEW+e%x{r>pI!Vw|~T@fgoyHz&kx;?y=85UQU(T=o^c1E?8$;_3V*o zi5FU?di7?UU0RlST+ozqu=ZjHDR-i7`Zbp$eYr5s(>w%|bd?K#FxR2^j50A}vf!?C zU!RWq`=mTybMY3vZg%o`=9ibX8>V-FOoD_e);q;+-K|8KFZXLD+q_TusAbea42#B4wHqt-=z6Qi-X; zm-$R@g!VXjC^Is_e|T$;Kchy74QkUx${b8fjeAO_AAg{EPH+UY-MR6`v)#Uc&9V5x&;$P9a4w{2^{A$q> zo};Bz@ycnm$4b*5zI~l2J9tyZyY$n}<31U_?Jc9i&n1f%QFhN5E!q<2PYbjj%{|r+ zoEJz|{`Jq){dTJu0q_c&Pv$Zu7VNc zitwY5yAG?Q>%r|6IUs(ECnUtIXB{NUPH1Om-1FWiZQReCgEbs1C^2;%%%YW%jL{b4 zuRME5vyUTQOIf_kMDd$iTTyuLWt$J7CD znW_lG{nsXd2DQj7!BC2;O@+sAMxwqskhv-3AwKl(?eEMUrtNAZTEJDn z&gc%)wj@Mi%>LzR0jJ-t%DaZKkNB6kPc!Mex!G+&6f5|RvKnZhenU3cX(+OXhp2|5ZNo9) z;St5*QN7_YJK=HAhx{5Aa`RI>`5pppp&0cI6;+cO^}RT%ZYQc48r{Sl-KZMtYXz zV~=NJ4^`u~P;lNc##_b1C)~qs9P_oxbdm=l%L6vTbgBWHpoJU}MA6-r=MOW=q|;QE|!u_F&nOStUhA%T-Gc{!Cs7OV6iIJ!ls#D^C9$;Zezxe%YH|eV(>snNh)$P5>Z(UF}DZ z19h+eQ28dMxKH4#ct#(6x?5i+e__1qZf5MAtWoi-FSc1DYDQD^SvN|~^SfD-u&t=}rWhKsIzn{mco|p6o zdUsynUyW!;U>^To-h+98`cZ*e>s+@{f!NW^+n`Lz{(R}Zd|BcG`TGS5>IF)61uBsR zY9$34{RLWk1zPEFo%@CQk-7G2h0h}kjT$h|N(xQ;^G)^&&Akh(IX+q2eR>`FiJhVF zP5&pkJ%*Rb=u70*FEQz>E*wY^v?QnIuK6^SA?C8T*jH1e?k5vM z%&cBpJeIEtAJ^>vZv|N9F3*1p5_ZjXuB9^-W*w1#V6Oimp(aYYX5GpbzB{dZ7vBF~ zzSQU$@@;6~d&SBR)&WA6TM}wD)CbP{au6x7)Q#oTxJmb{-W*7cA|Ae_54T5h6rxzP z8fteZivJ@>G<^LzQ)xMnt<`v|0N1(vyrmCsNvPHk5?1Y|y5sfNZalAsnd*OUbGdCM zX#05!?9A4V9vJiU%nBHAwvVIbD+yOD=MtFjKbPf+rJv+fXlGuPZcW@$5JJ z_{R99vA%_On<1%+N{usd>b#5L^6$XmkIVLqB9#;0OOqyO&BDFh5OP;;#RX-}w{_GS zdS5D2uF79}Aq_uCx zT(WTGbbae1qChPnGNm=a@m}71>NVIn#VTHbM2zA%pLm!T!Zv(2f7Y>&J8gd|T7Y1% zL-pRnC?VJiMHSJY=f&AmJ4L(K{0%{!_g*`Qvm2W(duV=dIsK{L6YHGUjEx7;H{*&Q z7TE7|S07aS7(G(D(X<>9UN*ASY@<-i?vo~Tv{W6uN_sJ3a%C_*BEE011?QZCx?anb zcs|0)`2Nh-k#%l%AwMOW(kH({e0I^co+C*L0G#&}#)*Z=VJ@szF~@2^WCc!1`m`%uU;QMu+ze4gaU+gGzm-@x$(HS9?CBov-FN-lRFVb~d zakm`~F&1R`IfHknogz*b1u@WZDrNju5UD*I5i5c2@*)RElv<7@TX4P-Acq|mbVfw+ zkkMpAASnEaB8TsqEl}brH&QM10bu1P=-i1N;j0N}4aeoN^Hq@x_vazPQmjGf1#*&Aj_ls70S0uxoG7eDwI44a>frRn; z|2ZjRPe83{1WxNn`eTv+#dgXvJtdl40+_GK?+8c5P+>4(Ot-YY?f68O^idnM_wIV! zl_%HrC$R|cBL&*6j%{kPF?^k1o&uB4ECwg_Fy)YpGf}_}cb8&M*g(QHn2ZcQc_Uv| zLm$dUGFPCi)~iP0Ev)q_Rg-qSE!)+KUHpx`zUmB>;J<<-MM>Zq`GbdPspXEGCxV}} zW5%QuqNyTFa+G9|xys(HC0o z4%+jOO%1V2v(CJ68Y(L~X4ocQUV6o8C&sBp;fHz@w4Mf4dAv6^Uf6?*ff{kDMhHBU zaZSdE?DJ4fHF`HalB&MyesFgR_5EsCq*3EbGG9CV4mprja+61KE8Z}vIo^gasMPSE ze3!H`N1QBUIA4hv!Ur$B#!@0!L<@S_;x*_@-O3CS`_n_B(rsb8xfphL{~>HaMvn&T zVmU-u858&{G$^HDWBYzFsvPPhXhA#1w57YOou-1dRz8TcR>Vjl9@Ywj0p*KK46>7YabDC<7_^wmakFCB zLjocS9apD~@V$jX8LNOH?y~of^~iiRpG2)(qE{K(3|*df(vf6s@CM4q|MfR;%`VX7 zA$t_7s#{92Dc7$+$}!gE{jYB+=0xG0k>p+MDix3GG{0Zk-1Pp_ekq1eibp}wqkFCq zaJ4Y@_Y`nLzH0n?lmUiMy;KRXwZ=S}V}v|p7q`iar>NRoxi`&+1!Xuh<)?N^e^FC$ zR(w*H-peI+|dSQ*(uV+q(NSmT)&`)>QI>cM?|_^Z$t9J3e>s=w41mJ8ig*ArM2v7qe_{h3RwTJX*dF}I>T zOK51&?0Om80Wv=F^i6a0~rHg5c{d*b@o-otm} z50z^>r|HSt6!-)t(<7XD`7j9HysC8gug%zB=cCTG`|62sL&2UD7v{E*q2n_*vn)@u zhdnSqWG6rN|A(yhn?G#X*vh;)>s=Xit?lsL7yEHOs-txx`Q+16%GVdOBR8h5>z4=r zZZ2CPc>JM9o?nbD%WC(79~U#MNt?3x>#;c5tJM+zsLcL9j3qyA{#C>;#;shg(gotV z{AJqULTv$*@f=-T0iAipz=KQcT}EPN&&=H?Xcrc2r>N7|kf9*swl zvT}zXas`K?A`)yPKG?FHaiLX;L-lqdvd$v%kdXzwjA7y7txlxvqokkfB3p3*IlU2l z=4diKxaScG-YoFODXN;A3OpOJE(gCQ)}Pg||EVNzwq-BRfpS+x(?4>pE2bjxjF=3M znDUI7PK_ycj>MdWN6m&uAtR2T!xIEaPgEjc=42X9aMj${{W=<}P#B+R_)iylngS?S;bU^jL%PvF654<5s#E{!EJC**;R6l zQ3SXSd4r<5P^AL#kYSFaT2_h8TH~N?NnLI5xeltxqL^n9F(|L(7e+xXxNzJ~OdNOY zND=%t{m6k0wtYqpUX3Nojorb~Xr6!IdX4y92@AqO{$Zm^aHOdSXni2{!e~kd7I9Ds z>j03Y;vjfAN?btPHc9Nhjc znQ44#2?A<71#b$3s8zx~U{e+v z&+2n>%8uYCa>O<`NOev+J`iSs$Pk``m$T)h;($^xsskL*td&IY9KL`BPVwZ+I_ELj zVezdbcO!K!bKnPTB=tNbxFh&kYo5S-5zeC-RWY?1=K|Jlyqm5}_du z@0570TQENgUt=Tj)CF?|!EFHGmfQ0~JdEc)8J&N6%TV-kmBj2k`4!KHvF+?PM(K}; zQ~ma6KJF5G210OV@mSah*Cr1UrJ>_&&jz8Df zflJd7#p>yMsZnD6#bgi3`~#^cDr40M;#ZBbr!KPABg&@J%NW*3_R_L<=@XiFvbjE! z8}DJEdLJbyO7MYXLpb2P;Ab-c*a8Ps^-8?J6-vMo&2T`g68O^#%HM$yzIiNJTOmZR z;J13^$I;Av1}d2}#9u(gmlxoV=~N2ml@#`rDn_4#)8T)K^MNGbdMD)5^c1jjH5Yp! zl%fn8RPnL_F(LN}d|dJXub1qUUh}@8Mq;7Hd@OloC;3TK(P2^1Z?52n_frJb^UZ@G zBMqrGY-C53z)fB9T_*X`Rx_lClP zbefCaxUh>`K#)u$r`BjSuJQuz!uZAJs1Oze_mimlDghVzT>CST`u^vS|2(P38sOJC zu_>Rws-{)zXyoZjlv($bWjB`Pl$PcBl+Ac&vqWSU4`j=E!vC~_u}<)#H1b$)$}7P} zH*+#OWB3W6!X_PtZzb#OD}1S*X91vVI{I*>TbLdR)3<|zFROXI$N?|FU!2p`8{m-i zJdss$wIh;mVucs@%8Cy!@&|j%uUngO2>59rqGTTaOt0YMQSMJw<*Sg!;Kn?BdhF#{ z)ZT19*>OQxWz>s?#9)Ogye_=_=p)oQ=d75+VXp=;SVPIwHltePe!q4V8SWbhWQqok zOGcd)>z1$qtnF8`&?|qSL)w_Y?{q&C@<; zgZIu-7CIpGFF!z!`+3a+51rt9b%-mre#{sxiC*%)6HMWV7%&Q&5p3($Z0pG!R41r) zlc?==pxr-`Q3>krAH3Z!@@xkJLp9QitNK|_Xp%~qoitgN&f%MaK=09>J*i&b!C|k( zVLtPQmGp+gFQK)lk)QjF3eU-?-UR+e7~-J z;YlL{n0ohk${$HHd8cCBb|yS#C!SnSDEMJqkdum8ld8>=a!Zph#5}l>aKLSxn&}ja zX$SxSc-B1id}+$$dg>+fw3+lYLkvla)3j~Yw5{V9VriP<*Yr@(O9H{LeL>*t+N65S zjAmJw0s!EXHKSBE6U;mtN;VsIJrgcHi;0i}b?ORR~^iK8HX4xV02HH?vyR z+uR0!EjUltfJg@beJbZ}`&H7V(dgWXfhER9+cd~v)R5oOAajG5Bwam!&>&t89F#hR z9fe?zz(vmBGBZkW&~o+CveWgvHN`^lF-a^As?8U4FdI9rzHlYow$8*DD?d+lzEm(f zlW+tMOJ#32UF1H7NJT95ldbwO!K2ORi!SD1(YF%5b< z_d#-h`Tao+9W_9`5}F_g9LWLhw2~UJ)%y$7KW+mXVK;os;SKm4U?CQ!9vHPU1g{$1 zDfW`AmjnA9!Lf4S_!g)u7MiLJu9t%t0U8sWwi~dZveB8}mE`|?5di?ekIM2L>45+_ z$Q_oYI{zh7E##6g~D*(1K6#vViZXJ8w;uvTQ+TjyH;l2 zU_n_&a9=DGED!M;g|9I0iXUuy@sQ_}!y=BzjE>+5qm}A8T}G9eM#FH2QJB#ZO$h*E ze?ar9<%0^~r;E%HwZoQq&{i=4xux9FF&jo(&yqfjj-D7{8wS_IO;o zKpk{0}Q^^#aTC| zv!Q<1ek9rbLkI{K`?G8Lv}YMk9gC#Z4*h8cfeS>Dy`dyKKh+%hlWo7YBn0=n1{DU9 z7%>C<54O9Ef|DH%>Gp0Pji65O-$pk}5#`thHqdh)@_^if)f^!23QRgK$>s21c^U3- z1j{F*CD=Xu=XiU^!YF0W-`O3#3_8jWB6oM%B}=U(TRl%=y$JS{|1AgphlSDVKy;{o z8DXIkZD2nqcvlW^yz=*_k%NKrrE9qZ(~_MlIr53v-vR!cPAiZL!OQu|-%nO{mEcr4 zPQb4}s8m)c0}vZ84^K^h3^xu_HRELhe~v=j1Icl^iK?hZcR*5&{r+6V&3VecuK+9x z`>TK+fR(#^Y5q&30w^d8cSW24#$LaYwXwQ6PAmYL{4g;};y#~*j~Bf&x>4Jkgl8z+ zExa(*JdM}k0RUvOul^m6#J}P(&Aam4q8ki&{bH>1{ON1$Y)QYrzzcm_-8_XDS|x7- z9xZqE0e-Z1^%SziAfH7f1-R7r#kk@g=+e*uRc$%+p^zT;3h?cka7Ux>!>{?TRh7Uq z=;I0v(I0EgZha5rngYB@8YdSjc3*a*m;MSdc|ij^Vt%rBU&XJaJ@9^Ece4(9zA>1r zmH0OL!u8Emnb8kzG9NdG`5L@qV|mP_=)PyepTYtD+tT=2%<=4;kFTfGR%6Bk4;JQ& z)3x!^%Wht}Lyh{k+f#av^tok4%Z9V@P&4R!Kzr!9Uk#mH>F z`;kvrw|~d~fI?6XL}le9e^sk*|Db;QWINGq@;yJDQ?XBZU0*p-l>$W>W4r>Tj_|`S zgq|-(+|7W`SqZ6^RMm}qS3uE2FCKct?CuLZ>0u>;R;#kdD8BE#6GMtqWzR4<=}E}c zq*T9O5nZjyQMK`CfU6NWq4BWe&TW}+K=Jn=M+XH}D|p2fp)I~%;G&&1nV^y7Iqs#R zBXhm)G9rhkrq)#;QA)z=DnYDIN0qKK`Nov*y19<4@N}I%)#Bf*eX1k$i+WP$F|&xl zQzfP3$@kh?kUFMUOJm9?>lj0o7w^7`eBW=VsnLGr1N!^iJOthUBYTla)W{;)+If;p?B{7`$ku6LhfK32d1K4?ks(b%8S1-$B`16_B zs{4>YK>*t>QNrW)6HJQ9QS)P))Ys(`s9Y?~5uFNC{bzam4|UrGA48V=SPezx8Fojy z(?5~E=G26-mZ4}B@T6P?x%AS%fEopYYRkO^YCem#70G|x#tAEQcI|>2pL;wluws(%H<5Uq z^Pb&`mlJzum+0=h_p4%D{#R#KRFc&n#NB6K>-2ABI=w`+`OA1o59gX*q@84cAs{OB z5`^8MS_(*jc*%aVd+|Z;N^aD4Lt3rxqvp5Ugzk~8xjP7{Os59c10s6mVn91))CVmy|zVLHyEfRp8C@gOUJjb*0p!0`bo{elHl;X6&y<92gY+o(C@ zhoikkq*H`!C*XGYf{66wp#uFk_OM6$)-K*vDwkG47@aFihF`yxR!&#rv^Jj5XbZw+ zGTFjRaJinoydgq^sR@o^ZB(yJURW)%lkfzuvs&EAra3QfZ)&n*)>(@NEOC1G+-(^o{D}eN#yDF1sF@y0bL9TzL zxum!rh-n{6{q!`}{dE-cL!nn_Fj{+o|LCB{m z37-mqa5?-H)VQ2pmWyxWb!6v@=QqxoaSp$^E+r$7&Gn(W>1|TJLUA{29z_5L{jBS= zPsonX$pNY-oPLsO0G62q+XFpk(_M@d_Hz>N%@Y?t4bn!8Fg(o zZ($QX($waVI@ADZD@SF4=rGwb3Ot5ZO_~h{)L6Hv=8rq4K6WLE_if<72^+-7TLJUq=HK;qz zY@QCj!mSrPb0tLT@=RTLTn}8vGH3A0%KsydIx5+Q~nlnhW|KFdID10~M#X zOY-7nL!Lo86=Rcdj z>r_KiE)AKqt(Hv*cfbAZOfvQh@JS9sshcZ^+z<}q-ZDX|TKG~HR~7pHONk5DxpGkG z+S8;!0RU$v8Fwr|c41P1wS0ZX2oo3bq}+C(Z#jK{xm^3id7gr z5a4K}sCuKoqFv0PM-j?ke`l5MVpdt?%MPT@M4#2-Ymc!X!xV7}0dfdH@7x85^*$o3 zE?CV_$*wjZxc8m(h7jj~Gm7&uISZ#hxW6eTr40`eyPN9tf|398xTuWSr)&UN1cBd} zzHs8C^Quz5G_jmn+XT59&6esss}|10TEMJ{6r_F;0EDTh2g9U=8WE*bU3m~D_nb)P zus+t%PX)t?hFdB-V#)$PLs^TN*9nW-7Doujm~EVHB^y93?rlicR!4`)P@+Cpr(v)R zf$K5DwXF||zZ}~I%i;IhQG9U0l3`<6P-c^@-EBxp@y62RILE+HQKB3=56)ZIru5uT z=X$PL`}``mdJ&;GU(dnrhp{auEmL#*eNh~dGyjSUIsJAAWi0=f$p zXg0o-^G2%8<&CmSCp$}yNPfZ48ySR0t>kfl;zLBJ#+@F$HD_#(K2N#e;=K~Eo$VI= zeKyyD*6_dk))P&0qut_;dp;SL%f2Q$Uy!5Dr({MB?NsZYF{6HO8S@yKcbVtGJPo${ zlSd(YN&?R1?@VoIJo>sCW!x+B(`H3ge1=o9|E5o<&)4LBo1bfOpW~YnbWibF zextBo{V!`jfR%Pumc#uA9m|nXh`8DOGJE03(y@1ukCMl7dbX_paePnH=DS3<4v(9o z?4q+KIlR~S_Q`(XxrWrnQm*U%dIRQ-lr!>qoChEBB)#YQSJfZ)$=gn$lX`sfLC6SG z3;qtR(I}eof|w>CGx!#^j*v{sC4HZ1#WF$Htx^8!w!M{u;Zt$??eJU#wbApC3-<>#T>y{LK`gMuMW`Pe3-u( z+RhC9RuyI~hYk>IH5TL5mVR| zm=zS17cXxU*!;c@a=QbO-%*4O(k>5>u9SXwg(Pyd1y$^{s`7ObpO$Ny6^}4{ zN5q*}kXW5?o*>w!GR&w>!8#D+B?odol1~w9=M7cjqbBC@O_Xs8^+$%tBzBobi-lj5 zYcydr7dxpMX)No|h5(4cB*Z`wY~uuBC9S-Y43`(~R7>h)Op}@}ZZamom^9rU%68N$ zJp&TY*PggyLzR%-*@C16f?(}bw7(n}Rmt%Th4!li8>D`Ez8~Qf*oFeC{>WF7NQ*4# zReGtY8bOq$h-){~4E4e(E{uj+Nm3Af0pooHK{ny6`gLfpS+r4j6rlG9gHMbj>Vdst zpPhl)uAE}GuA;qoud}9Fnn53e7{J%4=xU&%y#dn#1UAVN`^$yt3!;rwne7G9`f{K= zbCABOI_pNnL*AOe0`(wjX|cYpl1cU0C|QI!f(jOx7DYlG**q^NN;V-d=;bhd}*3|^ibhr z|AckyzYHbSX`yyQWVq3d=k)=B-)p@>C9yGHv%ybnfr^2^%fw{32z(0rv}l~PYBHLw znc|T6E~T(M^_{0`#UXg5Bc^w~gtVsFAJT+A%7q!rg?Tm=6kb7?7BOC_=o|`+6-vfl zZdA$uY~0)8Ux`sbqu=6)jVnRcC=4K7##j{`y9%+c%>S9sWUCwIk_uM54wq=2SmPT8 zO~uJT$F6tKDxRS)Rbk#vQd&}%cG^e8&67~>cd%3TNZnSCaQ$^lx0atZ&#NboGT!ldxPKP!8`(q0z-&B*wl+iWqkwH?V+F%c7r7D(SX2?Ks!0uPg$EldHgL^ zASoSA-^6)O6J|N9VDD+9ucd21hEUlFF}sg~I8P;^=KZlDis7SvfQ2Mapm_NFJzT1_ zEg>*Mm)j3m;bfR|ru!g}NG#CM*h!4}POv^va86nnn^?F|F^4Yz@a71^eFWv7TH-&8 zhC5ED@6hA3gb8jive-}nq25ewU)Z2xxFTkQljxBXRJD`FW46OX7t9)J+TS*t)H>EQ zs^=Fz=2$sr2>21F3kHRPsM9gIilAqypt{ty1QAd|SBLSA5!=!r`!5Vf7KQR1QhTG7 z0MxvnC-4_~-t-z;$*gnq3j-xf2iOvxj7M=L$H0d`cD7+^Q^3D_5WGj-tGZ<4I&4G& z|Cn#@qV9VW+Z{q~R0#V{8vM`r_0m%hZoS9uK)p98MU%@ zCni>GHrzbM5fCVmN*~F3W zlMy-A%}b7A3jHc8`Jq>+6S{o z5`Nbro)!T;lLOi9l$wfxo>hYUtXfS4(a(gzNEuMRFl&(s$WVrNPzG&SEE6XM(ym17 z&k`3DINa@2C{i5FWDBKH9}V5NzU{Ip32()ly$xP@8~lpR#*+3`xnr;(BD+ZXU~n9Q z6HT)r4_S%bN|7^5Iuinj1#^Y(C5sV?jlObf$#2rm;T8*i5FVU{MRNiIxx$Hr$;%Sz zw$f8c0k|zkTrekqP)9dH35(NpkbO4aT9Q9JuUbJ51B^sOS9X>XdPIfD9kmIPHSJ*h zpn|1|6i-I&Ql^iVTquHbtD@%(+ZChvK9DD94&M#?vFQ@y#^~IR7-=>;o}Fcat(dTk z#V*K@c#1kOrF1QVrL2}WnLnv`*&KF=K5-3O|k70`_SDc?3+gw zzaP@2a=-d5D?7CcJe7Ye#E%c3G?xBp+dRWb8Ex0y@98T3y&jM{IUxv179sUf1^2Tf z{ZSxBhghl-WgW<$9mJmnz;Edp7nygALIDx$8Zsn?ky}18vb74{1raeCFu!7}%1VrW z??)s5dqTGpkyAax5^pX?-O2;|3suciA7X5{B43ZdL{vz!&VijCZq^8lg4<*g4q__?N!PVasq^}-3y$r91&kVG2ZB|z(4Je+FSou7W z4*z~ws`SU_Wu8ytikJG-CC?SH$(Pq}A$~ak=DVmUK5p~|XT?Ll4k68sB{PM`ixc{R zAX~8~xBE1H;WSnQjA#A^77Cp+R1Nb0T0{=Zcb|>5hwIhNE;-79Tm>P<#b94K^xIZU z;XlZacXE*Nz!DpcPd#Xa|u)CDs>GHj#WzbXxX%Ak5(Jg>eDBnX6LFsYnSfYyLIvE z&CB=i-oSnZ_bm)~Fk=71gbyoD%s2pK$ekeXgZ$4Q8%IYEayBRn&acj*H*Z!3%b>Aa z2Jubo%#T&IqpycuX7#e)JX_F2&ofnxbMN0rcXdN{s@pVE%&eKZWsao1Q?TTP+Bf>( zHcrp18+6y&UTcS_?pf>Rkl8_({Y)D~cKRUef}LSsKWYrUKi~b3EnNRTzG&uzH(PDY z?j58Iga!$S z&OrqFW7~lvCb(dOAw3x3gzQ*|p@tlK$Vxe+)pw+ko3%AYDSeD_50X(PDJ7LtT3IEQ zS8AChms@(-C7AzS2Jla0kSReX8RuY=#V?Dwxt21sG-OON4aK(>Y-Q1Ro?-4q*pPc^ zA=4F8yUbz{EQl@`3P*wYqYNvY%u#cpA!c3XFWV+G%Xapt8<$ z)zq|*KGuZN&z!g5dXTQKR@mz)zcLi;u*GV{46^qq%PhF*G&V0@ZD|zG7{567CcXSJ z_OHJI?>lh61Osfa!2Jf$Pnq)sun#^;kU_>LQkI1!d*hzkY>cqU=JAZT&2`W`#~oF& zd7VuI3n%{^u>uV$#x#QpGB9h%iY@&aG*3FD>0=HnwulVacN%pZTgdr!lb+BV`83Qy?xl0|Iu$bGPIW<= zqEpBz;iq48pYE0-EC)>(Vc8#}O`|Dm|FcWmu)G~NEOR&QR*}+QOdz9&a$=8{|L#?IY-&1PdW{qMBYyg zEvs`ysF*diUC*K74lALQ%*r{Z{KN`u#wbTtZ&A6(%s%rN`cKKp^b?LasoKU}P2fCfF_(;?!a26_%j2J^tdk6plG zAKQ2pN7hpna~ww>+i>8ql4YQvF%KOHc?q;O5)*M`!ywk+#5vU0pQM~+c|Oq~2R#VF z!sVzRB$+50>X=p~bV4heIhA=yP;vcOTLp*w?#e{89iUs>(7s1HIF?#VaWtz;x z>JflC&>;(BxRNFSPzo+(j7~=}4oNt}oKuA29?5ToBWMv$qM{%p>0}|n70CZn zgoimg;~IVZfyY&(EJfw|U3BEqF+d9PAM)4*D+FT0(~^6Hp$BND;6yb2 zW~1NC0~xlk1xYT0j839rVZn6GLjvhOVKI~xpP)ZgT^U{Wt1*38M-CSVfQQ63pF&k~n!vv!Y zdNgD~0UXm$?;=#15Ot=6*(g8aA(*7fD~$iD2SvPk(y^A2tYR!HTFH+XNLVVjxy)UzbITRo)r5vx4hMbE_u^C-t~&Nz2!wOd(9ijWXAUtlhrJKk*nYQ@^`;dQYd5?>f7QDc(?{G zFoK1fU;=+ptNZF|Yj1jB1yh*87M}2h%i7k3_P4|S^)QG(EMmJxR!aZ(9WjbStl|{2 z__!IaFot8iU>U=B#x^EPZW*)N7xS3LJ-+deYy4XmBbOiC>IaKgtmGs!IkP3!(utQW zvYupdrX+_A#1)oMs9;STPV*Gn|Ed<}wE09qQng zWBBn0CS+pGXWnptSH}z`3|c;?vjrOTfn+RGnbD4Jw3MEVq$szpA8@%ecPI-})hQZD z_=rR!LJew;ZAl!NK&U3Fa0EJR$sbXW2Bafne7^+O$!sKX+-h1slRi!{W#-;e%xqa|%6N&{9Anh7X99wCQ2q~ai{ zkV6w5@d$%-;}N}B2DJZ?@Cfyy;Rbp59eAgYM}#2^kMQ`ByuBH53}O(Ou+BUt!3#hb z!fdvff@5W&2SDhHAF$|!LAC*j)f7SxlE}0sSS_VE%n{&~)iPxIKqe*hAs1Olgg*R1 z*IbZ6>iXbEIKYmUX#ijkgxNK@(;jTK1H0`OZ8Kor4CBy&qqK4eL&xP{om4!c38_d$ zL#jdYh&!7eO<>5w8PfN^%K=IcmqRLeXBa|!n<4m!!XE!*!G%5iBOgO}0xr5Rg$Ui; zE~;QcEHps`jSwOY4QYMWxqt>)bb<2?@wQImpc!HJ7|@V`HCzoMiMmGARN}}2yOZP& zIOIZ0`}Q~VogRJU3cNl9cby~pP*6F@fz_LgdWbVCbVKS5~otq zk7A1_M93OMxCcIf03&k%KpXwIIcc21A{;~<450npgRAk*G(3T+SVIu7o5~@HDjWe2 z2$S?76l7#UWJE|TXx~4?0vYs!E=UX+WPuVi%NU^@@2w!)vEbST8?hyZu^||~=!=4N z1H^@a$o)gJrG@yJh2ec%82rQe8QNH6Tw~y#L1_O%nFR$9+(SMPK|y$)H2ed%oy-<| z!5VzQsR4I(Xq7_uaHGzD9UuUS_QJi1;$w5CDp8t`?`)x@C zTHzF6hZN$26!wEX^xyyC9B25$7JLF9mczpQgC?W_A?(45Ji#8G182mal>C7s45H~k zT}6?J6oA7!T%A5dOeuh!z68cL06-m_T@%9L8@eDhUL%dcU0}$ag}FtAJ%S4@10)`V zI08^X@IxvLAz2t6I?zKH$N@vV<2}%W$Bq9SJOah!Rh|g}K`Ye5AK+X*9DyguVi1_h z&6PtsWKBO1!W5uGJ;Z|6xWf@dK{Lt&0DOWzhy&2Q9v|pKEbawAh#NMlneTB%0Azs) zl7W0!of0TP#aM|o3<2jM$@3MWO#mXXry16lKGS zV^N|YQF7lwkV8^7f!;;sR90ciDIG$%0stJr695H196=WV024Id|BV>{0DvU0PaKSy z7i?m||O1ya9i4gD?OC-2A0*;v{ie$xf0+PY$Q_k)roW**ru7E+}V~XqkX@ zLz_ruWoD-}ZYOq*g*FZbH*)7~4%j?c!f0w|cg|QzN+)|3r+cc{adt*>z9)UQr}WKQ zdXA@lqUU~!Ct$>2Va#BE<|ls^sDF+Hk=bW`E~tV+mSidCH8d!L4kC39V`E4dfgWgv zZs>si)_3Yfcyg#&V1tHssDYB(dQPZ>uBeJuNqio~eEwU6wkV5k$&u+-nW%$GVJM8r zR6Qu>iJEAM2I-jrC|?LDk?Q{gHYgZ9%%f)#SUki7(vZcM#RF6w29J_dW0XU#VWXIl z8DjisI%Jfhr9(W3OX=NFTF&I*f(x{!{*NYxRjCRR8e1ao<0-UPO zj3U(FMVpjt+Lthbs%fP)R6!Jk;?h9ph(y9&CW${>LL)>1L>|c>EP|sUnvrz|G(>{g zs6rJm!8Dpf6>z}=Mk+2$YNd{b9D2(?xWg&fLRZX6YTcAwxQBZrsfZ4#u=>`A(nW~! zmOk`>9khZS*nwG*D1u4cVl>-XDIr-{1J2n=6g zhoYTb{DE4Y#lG<>L%9D#5GX}ha;rRi>tM*?m~7CMn#w#V12o9PY@x%WC`iUK^0z}X5d57O@h{Rs_-;|Swh3k0i8cI z!X^L$Edat}vYcaDhd)dLGz?NX+hB>rq%^tzc=IlPGf?3)_ zBk=3O1czM&>?*KAgSe0~5XJGN1S$x_f)o%ktb#aLgDn(M@kzVGE zje#SegCjU=aV`I;g>_;>kR0DN0ZokV-~Gv2@Pj`X0xfL95lG%Yq@h`0>ru$V6EK}7 z>_NS@9vbqSxcVO}e!@J+9yD}8qWwd<;)CcFkTn1SDY))0i0dB20Tjr>C}N)Gah~Tv zfiA?s6pRJg1!7>R;89G&6vzV*=)^(P+cqD&}5-ik>eV{_|V5|aXtRZe}W?j)3CANWI9(7zZk_0#KO)DWSq`*n>^10y7Nj1nMgbb+-#t*C5TgSV&g&DVri8RAzpyJq%tI7>0yZ$DQtVq=xbG$h zK_`E*{_#Tr+JpXir0g6-r$80nSci9T3Ri#HdE-G*Frlt2L$Dt`fJ2jVFgzm3*_sLn@8Zy@49%LatJSjp$s!-*E_?{> zW-PIFoTC4AD)lx?9MHiY`i~SQT`rg2KWxJ&KA}9-D`yxPAa+Lce!&-*q0Oa%+On-e z({lb5gey#eE1*IBx|m8hkW>AG8aISRpo0!&-BR&`Pq>gZIM4^hMqs$>b?Px5@3B?8 ziILU?lAhF0>PuI5?l;~6NHqla0Z=L^MLFIBwFOUDl zGuDA(knckBfkA}i0D|H@%(W3o;h5ZYUhg$ESAnN8Oqpy(J=laP1dTDx(yFM>HQ55Q zbWO zTxqJDcwP8I9C-F&sF9oKgKQQCVxEPXqBvtPrepq#lCM-y?!_O7Z;CEixV_|ar+IT9 zMRY^xnu~@wl&hh=CpQ2CFkFLQ;RE$zWgO0Sf3D_?2fB<8`W9t%UTk%+dTxz_kvPNx zk`ubXWH}h&11X5jnnuQ(XS$llTALRqK5x3FA5?`d`c(^hsdwm&lSPhmsE?DntIv3u zgSxDTI`uj5tlzq(<0qt>`m67He;T@7AiA%gI(jvJrG21VN^UoO|kR3w-0)%GsLP_n7ne4J9GgNJk+;$`>=bYY-9hrNX!;(CEs;0 z2Rg%!MJPjcNPD!~C$k$AIQVHPAgbzwB<%7#!uPpbkqIZvmK&q)UGM{$rq+T4b-S;7 zuWKi;n}x7@RRD}ZA6$_lRM;7W2D_hpiSlb4Vn{!1gDJp>J$zF#aECR_mI31i#G(g6 zC@w5Gkk1ls&S*`=OHaZV{RRFzU|o@Qv_*58PG9!B(btET%>z{hz(_3%IP}IWY?5lM zp-JG5F`&XR6z+P2f-q#nPDsZl-7%S%>A0gj#>c&og*)=p*cCMd-4z%sPBq+LJfx>+ z0E9w1a6_@|1B=vOA8{0CaL~=y$c(s89jQjtLp^&UeLzWrTY&$AliYji1o-Gt{^Xma zpOcBFtO6|PVmNp6*(e1Zn}Qq*&#Tmgr~p-J_dS>Pi#iyVX+gUi+I3^}U}+eD4Vgg)pCr{!B#_Ei>$TR*OkI+=_VS&&dQ)b?rU zgG&+6h$Qt=Z%_x3|4ztBO4Nzm<9_|G8Qs4<7gfXNvlc-3JM&B5zkdG;9!!YPAVY-> z7e<6Q@nJ=W7bRNEh>;>kjU6|J1Ud3!NslK*Y7EdXK+BZ|1EAV>@F2fwrdX|7caYU7 zQ>Hkfn`g|_DNe}_%G-77R5F9gU>P*#lxD-KSFL8nx>f&cSFT^Zh6OuTY+15r&89`W zR&86hT-l{9=a%lLF^bZOG3KbuaCdh}|9?@p_0JsaJ2#K-8!uiU>~&sHrQIPu`a zk(X2)8S!D~&7nV+9-aDh>(#5qB|8`Ub+7mu4eLJMJ9+cv(?)j5(s=vi$BVyrAD=#a z`}6P1PaY3+y88G5)bBq5^Bd5>0uc;pCB@Eb5IqMWd{Dv&tJAJ5?k3ETLJc|G&_k=1 zBQU@NM@&$}6G=qT#1xBzZ8O@00FCkiRy(H0GQq45kY>vpVjBHcR zHR+twtq{ljlFU5A+|y4z+jB7`82K#p&prV~R8bvWva`-d9gXzIH@S+lFmOHrr=fa2 zaikSUL6uZgvYK2lQA1BX6xBslrBX}IxSVevyT%|0p+4+rWsFi%?UhwuS0&L*Cr2$d z)MJemjMAbrjE5fd%*1af20?GeJor6v0{#(p8^N z6sgwSdBd%jT#vr(R^M&;?RHtLnhi`JY5V_a#SV0;t#;pq`(^T<^#ZWBT#4zum*N~> zMJZMh`>C}cT|dcG-ia+PndFl(8ulfIS#G%HN#(L`;9m@ic8ma`z2{|@c{cCci%qT= zWuS*14&9Q}buS)-e~IUxdd5)XpFa91+G?S({xaX5x!&1p^#08%V7dmz7TbetwnNje z+3s4fQlGq<=&XaDo9K)~+StZ=BBopJx&g0J<+cfTyKuI`u4?SV4R74Xp9A+>a=Rn% z^=OZhu3YoKIrn>O#zA*n^n(&_Xz|fe54}6M`|g}_*EgTMM!Z4NTXxuSzx~g_Q}12% z#!Elw^xuj1{V&LKe_eOwnKwGN=9B-A9r`^#H@^7mMGgL+;jQnU!hW&=r%u)v%H`9O z_&H}E&tzk#pM`KkiJx`mS26z9)K6!h>G_v_zy6{ZK!nso9RaY-LEiBWb-ZsPjlmB; z%2AMB`J)R^h(+aiR}(srK`i)CLSC}skA75zA8c3z9}+3FGFAbNT|{LgHMIYsDUiYsW%#5T8@b;^Siy`;3b22i1j*$xlDXo{3R}KG zh^}^}sAb4uM31gkc8$Gui=FDRe)wIem>QDzdD4`VdPy#mVKr?ERfeec%1x^0=N2`cq7-ca>DBfus ze`Jy$OVLJI#-@IqH!RXA;4MA>qe3_z@0+;KLN!*oG}wAs&<6on)lFAavAq*~+!%R}~h$f^W z6$PnAO-0H|dNctcAVr9DsVfJafm9Bu@JmVlAPHNb!6CJr2rd&c4LGnd4w^`VK>CQ^ ze@L|;?ihkJ@DcxoJ;;I!d-%sPw-E(N97GdPpam$PaF1bTVhdBy#1#Hv4Io%T6+_^a zI{@GXUUY%IAz34G5n4Bu1)ypM`Gyi25(_dML=si=rudivV;U!dEdJ00ALxRQpzLCy z%;+F&tMWsD>J%0~)P^;pf;}mNEoRY~Sysk?(do!R4j`n-DzlP`Cj5dPuOvqk)(6t} zH9^Y<8R=MJDGhS~L683cs#S2=5L@iw51t6ZdjFvbH1xwAbdG8e&Vh|TJYgTUV04Cw zaE~?mA_{dl$QmgtkXB3s!)IuPIi}E$KLEKOg8qj&f?yk4gxV{cI6@HWOebkZrXbkJ zLPDaUglhkkqnwF#pO9SYsBywRUhn14@dB z5dE*Oc0#NX3T+i69`i6oH&{=RXqy5Z)Go}JJQ!h@8c2m9c_Vj-J!?jCxsAEF@(8loGrpa=D; zE7s`q-U1(%f)iA$AI!nFs$v(Aq9K0hCrn`#)(0!3PM@fbD+D6arYsHHBBGk3Y|LhT z%m!O#s5$5%q?%y5XhI*t;0`^i{q7Ki^uZ3f>>$Wt51Zh*2+@=kjEj4L5%vro1iHqGD|Y($Tl(ryfM5|JQVqd^4J$HI2rLa; z#va0`^qi!1IN}*T!JMMclPm*4m;)SHa{Ib3BEAnLTaqN8p^QGlfwWJ>SmI19G9!DE zJTUSnebRf9@f(dYCuPz~#L*$h5h*JMCzJ9$E(t1yrh0_(Du*&Kf|6gZAuGL-RQSqN zobo86vMgN%fM&8Euz@VovMnKFCy50sZc&6(mm2A8$UvS)WBJODRB0|^}f(`&F5oTkM z3JHX^p((6^DmY>qRv{TC2^==U$@1|c>cK@a3E4!`F@x(RAtEMMgOohxAM7Gz64XG} zl14_VGgb*TGQ%RIDw#^-8a}}f#^4jAK_vD7#U4{WR?Hx%$(sLY0-Uy~o4)Dx#Ay-8 z$(+zBJ*~nS+6gS)DV_{s7jB^}5{fEzVHUjNwX8}Rc48is!4^;}DiUg;8VWeQQaJVE zS)xU+?qO~Epzx$)IjLi$!b}bx0h&Ncq)5sPVF3}Esv*Pyt_b1e4vZJ#Xe&J72M=N# zS|JxQK@swz96Uh{?7$PY(NgIz1w^J_{j??ih0OBsS?EkYN@+!pW{M8Jdk1U?CceK_&{Kw|YxJZ8d8m(;z0( zHQ41M>>v^Wq%v>h?Fyo%qN@pf>sYA^Ln}h8RN)A;p&BTo~8 z8mPbyhQSXUA@_1Y4HO|4J~TjABt!xr4`|Nj4noFg%*K=e$KdrJg09DY%sSHoA5Nh@ zk%1H9R4Pzm9iYKghx8O`YYY8VQ{L$zp)@$Rt_`~mZN@<9nuAN3vrG*l3`oyo4T9{- zVwprS)edcn+yM@3QY_}QA)+B${$WmQ!VmBfE1QH28s#8tEtzs{*LrRCY7ZgIlScS~ zw45lRY?CAK!5CNpwQeClePY>MixrX~9*{x#ZgoUChd>p=KxgB)7J^z3YeXJ2MIsa? znjrr|>ZK-hGg#3AE%8EKBNJLoAE;pr5Ta!ZB1HeS_CAIs9b}FsUW^NKjtu&M=TI}p z8X{kZZXwXZ`2Y%O8-nSwBA+nUDqiavSYZ~zP#JQ<7Id@f&Veq4Qc4Bm$_|2B#woVI6L8Q{hcr z`_^)v=S0GvH%N&0yU`t2@k>>me8;8 z>I_WQEu`@1pn)c?5EjC49#{btjBGc>=L&tn3YByzp417?01ZhOB2AYq-0*BlAr9$u zOUt7h?vT6I&Jero8tpKrLP+9h@zFG42#x>_f?$fQ0RT47D|CShu%M3pB6$CS78HRd zh(QgoKn>8P z9*%$_Bi5m&SX5d!iu1B48-gTFQkMTE?^Btz{o#h9L6>QQpI8BFpCZcGgdcEonge+)GC3?_Gbk#$h$hxKh!bs&GdZ=mOZU(@ z%R;IjY8n8b?Ytu#JV6mM1w8-H!V>T{F%WVybb*6DVji*}7qXyIRl^!kL9u1;6l`d7 zMZz4U_8?+Nr&R?RPGJ_5VHb+nH8Qy**wc^}ntu)&KoHcFK<0{HPDB*?K!|lD&aEG1 z$FhxsAN;p8HkvfX!A}nr3l1m~v{WRf5hkR`Ag-Y$>R=HL=o*q65@t+8U274*${(_z z8nOVa8Uh+(>njvnu}3Q?`XTx5L6S5DN%hDbtQzHdnV@VV0Fu-epg~QOR2dGc6_Zqk z4#FC`;jwtAA8LpiPD?(o0)4mJAaK(b@H@kx>YiZ?7; zd=TvFv0wqNw5rB$JjZE{3Rum*Z`3P}0Sg+U zQ2X>xP3agsK^k&F5k6%eJRtzIbk^Ei3F^SGI-&KlpbvCG=l($)J}A%k{Il)>vm$Z` zXmBI~ARS5?@`8dNkU=Jn&520st|WUKCutU}A$^}3H&3CRgm@NeNRu-x85AkXjKRp1 zEYFQ$6;^?@HbU8$_0vOLD&W(6GwdiTomG=>e{NkLJ}b0F8!2O&M8FmzsHGLic1F(D z&8ADb#tXcv3nc$QOvFg+AB@q3E>t>S;Rw)x5IXrYo_)mFiyvSi6GkBlw#eGCUEBLX z6__9vG=T_us56j!6t;l$%st!pfFJ(A3!VWKo}fap?2X8tAQ$v1T-9I< zBw<|VAs0Nsw-LgGSwgVYDHfz)eFFQjvf!LD0r%915d0tti{dBRsY%DEvR4vr-0pbkL7VZmoaj`AP-U73n9|FJu zEpY9nq3!?Az^8gjFFfra)P9+85!3qN;-JaLNG&X$!4I&Y>ntG>X(AJRn;0<49=sfQ z2Q@Ncp~cX%AE>t<0^1-mfedht*l9$_zyas=snIQt`U)b_8zP2?YT1S&C&t$x#P<|z z;T#SrCw3te-e=Sg4C-p|_(lRMB*Jr7q4$5E)S<3aqdt?9uGf>Yv{j^6CCH-oI6+z) zL5Ov`xNL0;BDO*M+j8Ojx81%=GEwKTD24 z{uBR)#bAJ$Gy`bs7vRl6NQ?eSszXp08G_i9TvNi4pi+eg`z?LSlqo(===%9HRgE93 zYX9(^(l*fDs(nh8!5XLx)jwpY?)@`%YiYP$sQSq}#nl?BeQ%jr#Y)gD)Th>{F1?#~ zZ{NRJSuq<3cc8UUddWt8>do!o%bYiR?hN{~=+LA`n+DCU^uKbdPwN}=>vF3xtyN#E zeY)SHM+)gRX+;klJ-ihN*)n}PZU#hgrZ9%astjf%6#>YWBg2G3OEFr6AC)@ zxTVZ0>&(N-E&8yv4?aP5l}tVT7_--1;OJvaC}bHk%RkoOwNP4?srXMlbfFWEHOx2( zrIbrP<`0%^#Ul?Z$p|#hDZ3;yVv5rMum_iVikKpwd)E19pMd&F=%9uQil{;H1gcLu zhX%@zLh+yjTRi`?Qc6AO*r5ocg?5CEr;n=i$Q}CJLy#PDpmR?u3N6zFt4XEkP7n{B zn9mTu`140{5J^N)8U)!hgspnkdh0*7Jb}(UT?qT@L>2Wz$P_xpqM1KYY?S{fKlPk( zU_a3Y+m9w*0OQM(3;A=#6K-*d%O?Twqf1EzWunMG<0!~e}JH}%MhDX4JNrYW4* z63RW|plr%2Xd1JzEv$6&&o&{WvQiqAkBSMBoF_6Gq^x z4x~@vO{B7!cmF`-)E`G20f()&>~UUp{mf%xcga1D#^zlN0R$jGpmYCu=KstS2LMBO zanr(Q5P>RaXAA)V02`%lA9gS40mm8uctVgw$$3VNA6Q_aMkxwWqXzROlSD<`1L3ng z6<8o#@PCMU>#st(WbtmH{D_KTq>&orEuZgf+2uVT?bxNH^@RW5zyk}kBl;le^Nx<_ zLw^h5Q=|e2lC&ghAm#u7ffhKb2tsgz{`*t~C8#IvKu{eQq~Jf|AwLU>@F3X0;0O~! z4;0Y@egs*e2?@fTQE{#(FZ@RUo${vveuQ0lIw6BB_U5Rr@YM=};=!G7#dkse$mB^g=C zOe%^|j?&~MKRKdMfzp$flwhO|qL1~B5`AZ6RBC%y`0cp7K2AFhNsHdZI0v`mAR^|5-*r&IBg|HK#fax=w^D z6rBlW=t30<$wzh4p{GQsC>wfEhiWvV95qxs0eMS+iq!v~BpsYpOMR4M;)iatMD6M~B99p~t%C)v>t4%V=u8^x$mA9~cHO4FN#0%uY)>dt8f;2thS zs#Rs;Iv@mqmg8_w1p|P)sCHD41a%KiaY>LT2F0Cf4QW~%1lPC9)va`GYg_%n)?3=r zu5qO+Fl<>?wAQt+e4T4y2WwcuDmJlPz*4FB_uxCAMU;{Z&;F>kK#2v12 z%Zgkl{?sdJZUGQ@EyW|aTJibi2y1gy%Oz2?X1oyTM3U0829}M9L zOL)Q*uCRqKjNuGxIKpz+a7_xK2M2}N!z3=TiD{yXnkb>c2&Ty*db{Ei%Xr2#uCa}8 zjN=^Zc*i{Mv5$WYVBrDm$0ba6`pA2Q^MtRC7)(4fZ9OQdodCOex zvX?Q8$>B z2plL-pT2kX-W^Q1P~kg*5F<*QNU@^Dix@L%+{m$`$B!UGiX2I>p-F@e8KOL?vSrGb zEMcyk=`yBGnlfwRys5Ki&YUEJ3Kd%KV?TZU>eY*(Q~Nbk2AjyU-c?1^+l&kDa>O zQMs#M&z?2<+`Zwy-#tG*efhcDTm4ILTsd{@#B5Ow$D-!kdkCIF->12~oJ}G6CR8DDSl~`V>WtLoS>1CH-eko>{WR7WO znP{H5rG9J*rDmFNzA0yvNJ8YzIO(XfS8@8Vla4nh)d`W4`VeZUl7%9A=s$@vx@e=2 zJ}RlAlsZ~zq?b-=>86-+s%fX7eky9FqZ+)+s%e|BivN`Atgh19>aD6` zD(FDhj5E%ULQZ5_Lgj=r)~*A^sqCE0F6(Tw&^{||wA4<^WUSbFRPDCbs)=j>*o0F~ zI>Z4MKt1}Xa}G8ON>uB+xZ0ZQyz;gaAY0V&$QyrqjW^@&dC^h&q_b|I1OXxt!u`@* zaLoqijPuSn_iXdeIyd@}fgy7jG|)T)ZL+WIjJEP%33_uZL55UJ^3@(=t##I1Z+&KI z1UV^klVkrQtl7z0x!AR2Pvv#j%YKUu%IBzDk#Xr_b4j}c$^RTc(nkjl_~1SZUO3@M zAFjBe#Vr{&(e7eepyLrCI^N8eF6Ow|Z=ArcQn z@py074!7;N->&?7X(`tHXM|NN?Iv?=lvC7O0%%Ue$Tp$7sW{y+!1 zN6}7bVWU(4{}#Fc&T4X%s>u6DC%;22%{xvT-(d8h2SZG4AXTH??nc5~6`S>Ofzg2L8 zP<)~k=@&&RPEk@E@l^28RuINHkW&Oy;6NNTM)BxRf5?;E7}0n@0EUi?4!j5$MOQ@% z&hK=od)Os97(0Q?PKbasp&$cE$S=tec+P_!K@>S9=0OP}k6a`dMM%B0@z9bvS2+Bcvvzy?wUGHj$ODa*4 zZDtcw87JAcG}-Wf@Z99`2KdQg0<)ao#2pdKQU5nm<`0SLV%JMnS-@x-^pyyOWZEQv0)E;M>!$}mRthY^;!3>)ZcqWTzG(t|d2p-yEg%?3s&!TdB^ zQO&BUrkTM~CM9ax3;;KSD$}x(^{iYPSlg@?GPG)KpZ&ZD-U7>M$4lPwn)kfuO|N>_%ii|7 z_r36quY4`*Phn;DW!F)ze)roL>tyG@(*dx515DrnFND7x=@kZ73(3~L_BIHPu!OHt zp9cAPBM{^yksRC*~v_Pa+9YlprK6Y zKo{D|haR+{7ma8}E4tB;ezc?$O=-5Ej4#$R7rFup4sD=A8=d}is6p*%Qj5COqfRxd zSAFVMoBGwNc6F>_&1zc9y4JJKHLiDk>t5UX*Shv~uz}5MVhg+2!%jA`mwoJJ8~fSH zc6PL(&1`B*yV}#vHnz8Y?Pg=+9O^*qJ@cpIm1^VM=uWq~*Uj#ByZhbnj<>w$P49Z! z``-A@x4!qy?|%FH-vAG|zz0t7f*X9^mqu53?u(6XTl?YKc6h`g&TWcIyy6qjIL0@A z@s3;k;~MvP$U)9=l8e0LBmd9!x6`5Ur~TO*2ambTXHN5)+x+G@&$-Tb&hwtPn-rU{ zL^a0kTY#=B}XHB+Sh*e0HB>m2!ULekJ{{9yn+HA^}-9@@Pt3S;uFvK z!8;!DkI(kXTkhwCxHjIeC`2Skfe1t70^PZ2gf>FY_R^dF^r%n0>R0df)L%LtL?^M) zu@UTH7=jd^*2X0eA&pMcVie%GJLHGI_{cY&_{T3k@{P~@hr7M`${+Rfou7PW>!KV% z5<9#(-|2G?;}zA&1^+5vhe|`N{`}}qzxq?(`t`eC-gpoL7!I^>FEZfC*@T4Y+`^)+^^gd0u6CW9M#`FbeHf4d%yz((ryD z7=j`=f+Sdi1NVBFb~m#ZY?fdNwMGh&Uqn0U`)Hl zkPX)mZ`BY9um4jBLU(Rzs11fN3}ASPn3##0xQQp|Bd}LY6d@e^6b|7)4a!yx!|;K7 zxQc$rhkw|LtoVwu=!&$sbw-F-^amJA$cenzi@x}az?g3dXAnh|S=jIepErxKSc|aO zjLPVY%=nDb7>(FAc}ZwZNx=?B5CByWjNbT-;24fzh=QQ_Pv{a3Ob`I&um+trjm!9s z&2`H>=7k|cSO9?6l`Sd9IE4_PpS{h$Z9&<_CM z3-xdWaQ}b^ljdlZ7HK`XlRn9lLK&1q36w_plSny~N4aF=7<&Yf1&go-M8FIFhzq!& z4_}}pRgevhzzrjrl3y8?CJB~fDV8W{mSlOBWx1AW*_LU!8Tput6`>AapeI9c1Z49h zwD1Z=nUsC0lzzFCe>s?fS(t%&n1Gp>gjr|^xjI#F6z?zumhwfi@Ct5;mYB(wZ<(2w zshOO)nVuP%ojIDI8DJ~9GW9?U{@4%ipd^6s4{%^tOA-k-shEaon~1rXxVf9U*_*fN zo4NU$!l@QbX)f5%2wy-Du^F3s5EyH44G7^3cZUn#U>GwI03>-JpShi)S(@I-oumn# z-~ZX2;#r=W8J7uJ67_HlRp1Q+5u0lOoB!|*N01Hm@Ct^od7bABz{#7#>7T(Fpa43c zLKXo3*`Ek{pdHqjPxB71u#Ezt2LS*FNfZEIa0%x?4Y!vN@34Ewfe`Gl7cL>9;Ypq* zTB0aAo+)acD|(_T`l2CunigS*ZA$^rBX_uQA(v#`lS9@oE0I8=im*#00=nBDA`a2|F8zWkPiBge}zE{ zqyQ7)Ua z?BEN&FbbCdspSw4(clYC$P2y@4ONPzp4zFPdZnRirKI|)q8b(qszF{x4HF3nfFKLB z5DAU&4G1v`qkt3VfC!CX2!^1m&!7*ZkcPe52&9mwe0ryQimb3k2$!%DxX`91@uqQ_tk24@4!f)m>#TdKoe*2Gr0J&> z!4CoO2?-$yl5iW|a0!JlvZFw*P(cmC5Ekk{3kX54^7^jv8nZ4dvoMPq=l@c(|Cy>3 z;ST}e2rZKdlE4|RB^(yputgiOMk}#LyR=H%wEh*X7QwOakO`hZvoCwKR-3gmyR|rr zwOk8ixxfpXP>vOm1wN||-VhB;o3w0;v~Ih$Z|k&i+qME02=fM$yWYFKm;Z^Ko58m?A--c4 zB$=_Vg+abAX1)NXz6X{ZWVVu`J01?kywaP$_`AQ)8y2V=z5MI0_N<+CP+Z@)i~lmhWS3FC#4!Qs6-OA zLl4-(K487pZ_7Mj_hBGly!Tk3s2$b|Q{K8a&7f zsTho`7>Rlru|w@&wg{-FKnoEMNx?*3it86rMDbF8*Mf;G4>P1VJ7n)Y=4d@u`e9gF zcc9K~fHrwR!5UlXEGO>;qr-lDAZ{csV=(4ryz9e6w0G7PIPzWy^L7gv=Bn1{?4v2i z(EZk^VgPDN53ccAU3t`4S;u6>+T_Yas%RkVFmo$v>jZ6Y*L}{wFedt>f93tvaFaJ? zt2bs}+(_Trcz?$9Q^$1AOJ9ycfa+<&b{z5#;kwun)C}+JY{kj^ip1Y9GixuC*yytx z`uJ7MSTS1(yW%s?Ytt{@)1)MGvMSLbL!H=INLx}Nb9Ui zL>JlmELG*aaOS)o^C)IK0*rkJ6u89vIw$M1Am2HsXi(j#&{VD8Q@a*_^nyvbKCgW~ zuiLq3^?6P{RYz`p!32HYv~$5siI{Uz&oydMsB+O}a?zS($pmo$owon0&(b%MU!FF< zybRvs8(`Nz{t9GSvOoV7EV9hIy-0m9=)Jz|zP{vfz6{9t^;@Ae%wRbc%H{T17F1e_ zbncF2`5h;+l4r0|_ID`|YdHj_kMaz4Q{`QnFv$h6F>Yi!)m_yvu~rQE*^IN zru(!(Z@3X5f~6Zb*C*nuXt_2SSH-XYZr6TIVGO;)9yxjj4K5N>=ubD&#u}{eUh(HG zJlb_QiUpobWZ~R_`~d9b=t{7^hPNuP?+PQ{zo6p^rTWT?MRk?I@ZhNP_m$T{=IivZ zFy@@f!jBJ|N*tR!hQOX2+%;q1%O8|{W8j838t)mZru?3yE30hPo-`!u2s*X`HXdOy zXZC{)&aZV$+_(IEK+TdpGPnkR0RW7?qVhKeE|wmcckKve9u!sWu+Q#b)&l7>ksDx! zj6d$)t6)&3XD|2Qo)`nY|4c=z?1hn@^@yGoPVT`%8T#Vuz>fz%a@CB@ceHFWzxZM| zqo0==o|Ik8|9ZnNdBa)vol2|Rz=K=q^F11I4>Z*yb!%?pF9cd zT|TnCc+R?fsoEQ|?H>Ddxh#5hlXZ?TjlE;r?OJ((mVJTIeTg=GQKobS>v#3u=z7Wa z5+UFc{oVDu%}X+}-w;Evj_)u*>p5KP4ZhtK!Ss!M`c*%y7CGednp^CacX|l>-8hT# zHS6@P==9EDMJ$0TX&d0QK_*<`mXd60APh^_{vC`sVjJLsy|=7D9Ce}QmI-pJ z54r!Dew7{P19N3;e_a`Ug%Sx9HapLNl0sUT#hMLihnuid7;K=%QUBF!i`IX^Qu-{X|CXOi?^)elDeeLGPN;!B7_1N=}-w^nR z>G@&xZ=rA8idfyzUw{_Z}qi35<oLgcN8w9k)rr&`LfrBXLx4w}4Ao z=zhRS8M4yBr9wsM95=}m-&Y3tU^l>AuPRMOgQLbp65TK-M^kvGrXaV2F~su?I*i=< z33p*yRG9@&Q%#$PM^jr@vr$ur#EG*}xxf67u#kJ7N8N}6!FAr)iv-H~j-~k}$=!`= zHz}1s2};l@_R-X`D$V3swJINU{cO{&`C|qtH|Z(`=~M?-_eX4 zGlDPK$(pzG3n%W<^`73>LuC%`6d}pxM~tD#+OiZwEQWeRmix)umf-hl_Q-U#R+IuV z+u#(fw&UPz^X20aSpPPNi39o%tXaTF&TgSQ(e_t*NlXu#1PObFFd`5pVMvq0LTM-o zh)6Xwr@CJ{EJcFS0|5(EcYKs4v3#v#*3ZZK;kqBB)p3n+9n!+U*#jEew7LqkXO;B! z2z@U(#SwwqxWTcP;80_Uh^Ze{W|LIT`z?~BsZ?z^PP^;|oc4GZJ{0HNmrG09T*Fa$ zIA4oATw+~ka>#NINKQL0%P;ozJS}dDI+@_C7Ci|SL*F9x(ML7j`MCkpo~2F1AVcB0 zf;1GjiGfYR1d`?mCa9Pb3v*UO6I2oz`j{?(D?xCdGh~A@BDyZw#~T(VEdqboBhgUF zXWuUcqaf2VND~8bAiFaL3h_$}M_15)w@h{)$$w{g2P=|XigZ>51C-pV@VVRyp}5&W z1!Yi?hJ+2#V>$>fH}2#4Z>{pAJz~t7P?6LD1_V6$BHWDOuo_B+=_z|V>I%Mq3uHst z02~oc1*}9TVel&p2azQP%APjCyTtp;odR7amho07d5lR_iEEYQ(BWq`ePC2cfQHQVt?zcW%>i6v)?sYhYqWHO5N# zixUks1@H@lgw8Lux2m+ zLAEv&k^P7=ms?40uVBo8ibXuflTQ%Rg7}eFX8iN7q$0k|ub&(U84?QZd6>ATQU9vN z{tW>|O}P&W^{zuN~0>1TM#rdY{`K6xUG^lQY6XsROdo~@AD0WL^1P8HSX zO;S+4B06XMVKuo7U%pP(?s$P&@OXEc;(dY5v?L3*k5pLOoLcI-AFTEck>b1>)FxZi zL0}#!-+-x3={exB4@A|UE)RGoam_9bU`@*9UDxi$FJk-0FvY-6q2GZHf%}p7&b!8x zU_!(`0xxO{p?-Og(YCgK3Jbu!Rm)I`3}7mQY02=f=>PLt3l8WoaSwLurV>tR6zU?#bGT`j^!}62Dixy0L!H3!U61V7WM$zmsDeLOA z^N$EHg;NU5B=^Oiujp1+!I}9D(~irqcn(l=l|tmZoOaq| z%-jHePdqK%w@RgF_Sml^>PO{q&uu~PopV$>Ej63Jj@!%GX&Tz(=u*-DT5h{9CCd*N z;kM9^EL8bIVcINfw6Z)X&082-d6s%)LLfc5lqnTLn0yUv_qF9|YRo*bsrOu60Omyh zq%3snIq-f_XeylVw07ZIT^~30R8AYA;&DJ*9&z2cTOv*wBZ>nNcY| z$5`vb;djA#v^TQeRDR1mr9H!_7j=pCC`WTO{Xnc!>lm(WoR29bceE^PrP!uVye)D0 zXZ=3QtqUZ*9ZDq6nXql2jF6N7jtf!M`GjexvX-ms{aK^{xw+bF{f27Tdx^tO-x$dl zuTFg8wF}D95eB&yIhj+JB*d&d!7>$CNb;7{E@tkM9C>xWnmA^9ZJ##8e&X__(q-sP-{{n9`E zvtqQ@YIFAM$LY0&*y3;cqf4S!T?r~AYALC*^{8Tt4YA&E6&0C&>+E3(Z{{_k>{)qvWfG~kx3$hGlI1M z#NN=)rqM+EQcCBILr~TP0f5u5LlEPm6jVBSBqg~O2e`~6TY4lGjVr)#;nHas8w4Q@ z5%6OmWIc9l`xl2=1oN}ruiADv&aElE7PCV(HkjO_s+&Ibt=vYY!pp;kAn0JP}_a2@`l(gnRRDC{$T^>r)xKz7*N#l2T@siF8 zN)f}OOyV|_pA{(0eIe2%D5mtmp1{y<0Xg#pg+#^C{y^!)xFO$Xx_+w6)l#Hnrm!Ke zke|WA3-*Yc;fM)!#B~ns0R$1|;={7WK-V*hz@u~&-O{p-;aS|txxG>xY$0W)c0cB_ zd`~1v_RPI`#XC6ot~`|GdAWLz&~NmNcKmr?j6)%^7Vt$@^gj0E){dFw?ZNh8WHVfa z+9iWs6AE2xLw`BoTecDQ%h3~W5Md*N^K>VI z<3b>#xywW$aedh~oJ!@~5@f5&bMQD7@QRhf-S_s9k8x+_tBVAv-aO5J*j5APLbr8zX^sMcuNp#y^X!vJoSJinZ5eZ0A1Z)Ih9ijM0IO+rIy2@&(A_8>znM!E0aBdtEa!Zb7&#{)>2&**-e7J0rY8 zcB2d_d=KGE-Y?G6|hNw9nt*hfd)T`#^3{%=WR=~sO_p47p~ zO$sfx~4(MvTn{v|BE|W z=MiC0qJG)n`p}@BE`!FowE?8{>-r+X24m^xF@gCtm$h{%!+jFAaf3Pj*YzVj!(;Rf zOpkR&rH%bX!}axzkFzThgdkAk>~^8yP3FceLJ!%GCa0N@v;B=nm(8bj6^aEq%B1&T zi{29+qgNIqc4RgJJ3!^)p&7DbDATpBjNHA6F z3haR~{Dm=G!K?sB%DV3sRMP!SLcWYG16!GtdQDVH)m5zf!c)1n4nte`0WGL7LXcQN+)q*H# zLAo4RvU`Q-nlL(d90S3Fw(XmLkz?2Z9Q}^KMI4YVvEf9~l`V`>T=Vuqt(=T-%mL$X zOBoGBxIaxLe-vvGAjvllJ@1QH6HsW!%-fp{z1%~fe%qpXFt**+@x=<|&Iw95BE~?W zf3}9N|D9gYi!d1#no%FEO%9B!h<4e}g)QR`xIqN*BZiFRI#Q8?*guD+YRk(54QH}> zwRX+4wvD7F6XN4e^^|&A;1f70Cp+3!VMZZPSd%5KD*#d49x=Q?Hd1(1>eGsB7;~3N zo-|ZbF!N;1^=y0gl(G(S+t;zq4A^MG6>^3rGe++ecT=r&bS;9d0EN;yA-T*zsqm#Z z&qC8Ox$-&^h$ZwVp+qs?nXxEB$CRf~a)LfK%HUohjGeyx}+JhC`4@OC;=m~@9hPJ_@d3ns{`+BUut6Zn^JdieeD3kY@ zm(9W;&a#ybmB3C0a!GpnR*dhv@4u(hZxHKC^{Kr3XdCG!OH`tyU#3Gt<%6k+X6dm+0J5|--wXsW@G zf~ORQlpCHjo_8O9J6F^=gIibVx+Cu1RJ7L98&c0>WV_(L z-3!^>o2Fm3zeRRT(u&ig=oYB>jC|hmKy4q3a56?x#DAbCbESQ6Z!BaJAC?_VURVrI zAOD>FM3Ez1!(@|0o;r7{J?*NEAHUE0y?bP}MIg_qMd8$ui8PNg%&Fx5J895_GY{K? z+asFVx48&{-?g>q@@Y$UO6Iq&AXNU_+)0g)M7eerB@^SU_SGe8D7Uq5&Hd3P13WTN{s^WWZ>xDVL@&*d0|_Df%d;Ko zEAH_83rp?vF4*ICTKQ#v%Kj~+d??qX@>nU$n zVoEr4e{p&KcC$N69wNxiz4g069v+3}NbP-^!jfa*H8x99o=jW9eXo$hJYjc{D`f1A zdxH>hI3m23t2$%AeKoZXHdHy;^EW)&hi+C=+CQtPp27MV{+L%i1y;U z+UWH|W&8Bfa=F+4gZNvFx4_-OY_>x6r}h1I_g7f!VSOiaMHk^iM1USHy^wCmR0!9= z>^)#3KUD={J$CJ8XV-3Ljq2Dfez;KY5I6$^(mT^jv#dMt|U-NPKfJYo1AS&rmE(>Kq1z) z{UWcbjDnIrgv8EY3-Tf`%$%k&J;Ah?9AHfK*!mD|M`VV3cbssmczvn`nvfaJ@=7d_ zutO#8yl3qIo>f%sAfb~rc4E8K&yo&ZYCRcll&t<3ZODGj#G?AaSjWZ0$;t%l6wjd| z*EHYhi&Ic&!kQIBx1FN8Hhf7j}l zzru;|u9zqKKtbj8uMeLWtmmaVZrHa?NVr+llm%d9P45>1;6&XQL%t|IZG%y(_;+Ob zwnM5k#uSDW`>lWT9@w{c@*bvpWqBN$rXX2(_#{`+CBntL%^y1&fPQ}EDs<2dWfU(iWECS!p}oEejU%p^^mvc>-Jb;SB^!)ub&{gHw&*18-F*&0DtIuE?@2Z5h}*b z7@fr4eFt-8eJ6w8=Ich5R`JCv$bo00Z`rd6)!x{axg7|KhD%`ghvzmyMi1-5E2{}X zLm>+TALQP2f+R}<9PZEM~kw^kOrF-a!BT5 z5}mM}-gE|KiHp!6!?YqpKjR=AcI4KO>`we-pyY1OJ;5M7N<4<4J}lOBjRr**R%|e9 z0ajOPi6k4NR!o9RzWE?MS>~uP#x=wQD@7fZfm9E}Qoj$=0Tz+G0uMucS(a>n0g1I@ zKT%fS^n;j4#V4F`^&CnqmVULfwwqQhT4XA8S{^yUJi&Bn{UGvfdU!T8PWAx(2q}HM zFt!EfU$s?D6&5}$RwjSBW5<|;op{g$MDkOH4@Qg2cX8}CB|3*V-`5R@To{5+vp07_ zT19!PLW0Yb(`RPDwVhQ~wW}-VW6A9+BH? ze|(#}es@;8U8C}>XqCoMYOs02d2hhLrS_byXE=LluHWuA_ueg5`;dItM$%^Pkp6J_ z8Cv9`lcn|(U9g8e?rosZa?)yQ9~Y zs8So^1}4){;v`B-ps5w$P{ltnCiJg;Rq_* zfF#6yNSu`eB}gBIfM*WEoE|I@DG}G6e911^iw4_1kwBb!4**kOC`IO>HDIRk1cUYS z^*-IM&Zj@P6|?Y~zYAc|@ialAjH$)@)|-YOCOgb?6Y)cqJCJ0vfzmL&S5|!HhUnOP zxTUlgLm$vbTuL%1urOQg$<2d(NFbwWGdd+B+I}$A^{1{=A~AyrIKu_6x~WH);3Tw5 zen=n8zVoq0MOB_W9~sG~!~xxsJTLhk6a0}_q))mdkla=+lpUoPBk*WkDddQGUSxMM z5k6-V;_KD3d*K@AzasPp)qh`}M5-zdc0b8cU2VV&XxWiB8)hN7*xwgp&ddZjdy%&^ zdBre6t1sQYk`sUc0;1i7eL<54t&<-wySKnyUb9W@qP#&+$o$aCvLSHS0c%P{YLi$?&V7`T88VSm*L%Bpnb?Y z8d5q=w*e}Odud77tLi624gf`z6S;)RE+!)RRez+l4;;gGSci(%hQ^dy(2fKJbB#|H zAej_qXAM9UHeEOutGhHqD8Vf|(6T*lVP-&`sxDHHY_&zi!`)}S{8OSSs*e0faO6rLJxeu6%7*Xm{7io7IGNmHwM)?NTHug zsZ-!FyFjESKI9yU!CBeDUV zEhVjE9`g`oxrK&Z(vZ;1z|EaJw~{)~@lVHiN=B4?hWB4Sl?IX(^y^(G68=eaIU;50 z%j53aNp8%X*P&XJ)SI`+7l#K>xPKJri42wPa|=rnjZ2cl$`?%D5xiJ%YNRqdhM~ah z$5Di6trBX+Nm21k?R0C~yrdm{>N=u{0TByMIRh@HRRkTn;nnqLbtENPura6t4 z?Y@TPS8d0y8fts85rtBsdz!v9@(%^tSzlGVU|Bi}K9B9m35?SFzm?p$5#M!aYgA z7_0_zv2qNo9H+%sPBS+{vrQWm>9(X`35!5jIwgq`@1fx$3py6@MS6>Grh-QlseN;B3rtYF|{;_m4O4$&n4N<=iNU(BWYz07Ox2kGlt_4261tNI6lB}v@lkT zSyt=>Qm>s5WulJE9T0pZ2J)j<=sn1&+5xlBCG6G{I7AAgC|{j?W#WA=%Gk zamHnR#^cO9EDhoihU4G|aY(|A_*M)TF^^YOj60r{!p7RLs0*nI&bJ#;}gTST_oq*Xh#th?A%yObBZthRf+tb1BjdwQ(GqrRqB^wtK_sdvmr2+v*2bwnyLUM=;w{O!ZST+n=oJKSgZM zRn^Z;Y=2FwuM^mKTi9N^?4G1SuLsqy7u9bMY>>BVh_szxi{e*+)VXAZc~Y!O2i!O} zJDgYzoXizmH5|Nl4ZKke!Z&tAyBb6{b|k+Vq)>KXYz;7l9XY!OxtJZLx&}q8#w389 zuYnzP+8!tqgtp0!e#nk-S%dM&{!WZNYY$#A~8<2jbOtAEr5o z`fJ659Y_wZiBBDfZ#hUVImjO!$RV}l_?#4Eb!3091<)K%9AqiEIH`$msMO`CsT^sP z>u3~iXzc1}-5hECIBC5csMy$U_jYDJ*egZ#)5Vol&jhPn$uMO*GUszL)!zuf_h>BC zF`qgDJ_NAN->@RxzCP8lPuFokZaDC{IN9ns`MB7{oH#*TTnhDEexVEsToqFFyvnz{ z+FX2o^=RvG{OVi+ZcYO8!NRHag0Z)PUQS$2wd>m_!NQmG!kh36w)Q3|?WQN8Bn%JSu+! zRPY;B$#~T08r9f%)cG3K#duU8uo^}~1d5HCMm$>I8nx_rwA~uD{djbo?!`iRbW`qQ zl6mxs8}+JrJ{t|`Jjx3AgaP8P%+S@KN#_Nx;>-1(KqPc*jWBzY zzEBJ*-i(nNO34U(7WsuRhc831q#)N1qqWqs33N&k8sU!6q%-T6ri{@#TE#Rzo3Vv( zr*Bi)qCpQCgye>u`O@*El_^Qbb44oI@|yCC-xo`?i}ltcew6>Jf+n3O<$qcIuK6~c zW)PWNxzYqpIx8tG*{rv?9j>fLrc`fq`9n~q6qarMbA@r>q&jqJRfeO;__CN=9rwoL zxYUO_bnCxPXNbAI(a+dz_Y@TiWaQgMR(reMWpA$&1oBDL`_J{ke7+G|*Q>`$s4g$6 z_~vH`myVMkw^Aften)^ex*Qi6Z2lZSMB1>eKmk*YU2&&dzAh2*GgYO^LSvCCP%2cuT&-2s5_i$BOI#_u?ep|0L0? zhBwAk|2^Xv6M`*25))2Yq_ZCmO*+&3(AWF@HQC5kPTRYH0eMzv8J>KC9|p4@Jzk86 z&@97w>N{PA+gSKvmM78OmUcccc#%J(=2i*73E920R;R@PKTqI>5930m;}JA0@ANV&p}Dfsc=Sz6uk#%NtL zpr>bDZRV+g;WHZrLZg&F!2$TS7U?mTFEyn>lg_S@mCY+%ci*%&Bn8I!;SlVVL{3PB zDr&D_i7(r4ekojbUi3BQ$?w`bO*I2TiP@Xsf)r|cfMg%m%b%vwtNSrm|JDp(@hLiV z!ru#$o%^U8Qkj%$TU!;x4EpL1b{_Rj=)|QZ8$ zz;z+Cmk8Mqy6Qtxe!1?av+KASy!+Xka*<}RLp_JAL)Tb zWCwJ>4YMDCP)lF!{P54n-Z)2k(LFJP$QHloFBFQnJ9GNNM~ z0L>Ya%LbEhHrG%1Z8ehAn7Zi9CldZ`1Os6x`O$HRJkj>#<*H1JOGktP~cq5U&?yp{{H6Z?5sgCB}0 zcn${@1#f@OL=|yQH}_BEvi#_p2zgigo}#`tKDoJphJX0yxP4k;#tt)`;AGRpG&&VF z3_H9}LinJ*^9A1gM6u}OsQ$Dsm=)k(F3scb{>g=iI}^xaA+a<%6U5jMetuUhNhd!W zp~vlp>S6)n8k-HZUC1Xw|1MLFKN|_15=IY&b-^&I#ledo{}OAp|0UKy+$YAKG>7MnMXwZl6A&1MLNMy7 z26|qA!zI6Fq54H8hTx+o+MinJc>$Grg#LH6uL{ZZCT&rF>S!m^xtzw#z&f*Vv zhGLZHXY)Z^82W;ksvVvx+0r3;%9fgCTJ@&uf{mw|)q1^-ukyUsziZ9s^9-1p&UKqD zx9fZq_-xl(U2k{RnVK&Rx;y#) zQQXMvgwq!B=S9#|wdDDwWPqZ@Q9G$Hh0tqnKgkMd$x;N1=>ZF3B{9Ai#K|I-n#Cvo zXqM)_#J!8rScbR%q|pJd@{1p)W_~Ayz70qlX#yqp{<{2Xv%y~PC~%v*rqQP7 zc&;22=Yi!^W3nkp5V_Q_1%Oxtl?ITTCr z<;cq`B>u^Wi1PmXF<1k-j)a{7yS|r z^SBIt^xd31-{j9e5hRkv8FlSfE~r?uxERq0Wpd9N`?2uOnn6?mpw>q zFINNjb}!c>bk#366MUC1w=*(quXhXDcCYu#_+a$@_hsB=-u6$9wjo~Sl z#ZlyI0&ynD5&7JEF?`wlkkE30GO~TxX;;DYirX;FDXk_)u=s2XgX}$600VcGAiljE z1h+5{=}Aqf_)9J(#7S0??ES1S`HKN7{9G7-n-YJeW`IdUc92o;Izne6?|pTu`1mob z8yH9SqAWL>@W6(^j607g2%2}VnvJ&h{zCkZSPxytG%4g=I-7)T=)$@c&`-Zdk{gjA zx`_*`phTs4l+yE7#b3;!U}?aT3?-kH&VY#mkor5fA$*%V-k z=WinE5K%rs!a@|^&PIEa+%i$f>Ncvd?Q-qVghq7%Z`$nr+a|mf=PN@>>4bU0+|MGj z1FmAiN%On}x2C;yvPLWgTj{*yrL#i*VYw;CG#vlPs5N{i4m4M3PCz0W^~OyIpP8C^ z+F}PC_w}gjw9m78HeiwtJ)~I@gf;+HD=>Sri0`(}y3NImE|H`o>M%lS$c7m_l7c4K zq8v5y$zSOO`{ZU5{w3Dm1*J}AlU?r$DO|oQnvAKX6|v$l{7bCo4WYwr#4Eq6d}Un7 z!@e)!^`VmU8e1q5ye~yS`yW#LA3P%bmp%#npK>qD*pp&;)DSSA{9h&aGjUDDD*6AD zLS(r<)>yt&ZQLJ0qR>?FyWV2H%wW8!aHin;K;fx+ zt3L#Z_*0a7?PiO^rhJxSYu)~MDwoy9MC+~jh$3O6YekFmm-&3vMA1n>m(#_nFa24S zZLXhY;9NX5Cfl1YH+zCm$)<>#ds?@^$OR!YP1c7EMj&Wy{_J!*TWvKxmDy&!3v)08 zVUh0W_;Y(S{||+z>{@Ov2}!3!X=^BiDBJXL!>1c^{(|si*B{vBD^7DutYXE!hTta6K~dXgQ`t7kv1kK`DhF<4zs`r4Z!>u+u)}MR7Fg>_)(7 z!2H%<(FxqvXge~MqyDG`m&*!^FuEJ6$a}n(s3Ogv3HS*Q9n(=TFeeL;4*U{MLt!wo zz<%^Jk`&Ed6n>D#Rp+srZrQ|en7+NAFwVX>z!w#~qGGY9-pYOREn7^&B{wOIw(KY` z%9EE&gETz+8|#CBq(TT@;gNZUz3s_yMh5s9iXw^`Q_a;x$B_eof!y@Lttyav`TT}o zmZz01&_9~eqDD}5Ng<-bNlg#7)k$sN`_JTMt-Pma^)u3_i}@o&>DG;7rse02YkH@Z z1{3m37cG0q?b}uB=IIwrn|0;3?WaS35BLs#SzUHMJwWk9mq)i4-EXijcHMADivQH+ z6*awR_-FQg=%AOYJ{%dv+5sqqsCMv!_L;-bzt!fU&^nwxyP|HCIpxf8jHUnOW{hiC zv3}xTwK+2qrm~1QhIx6=UUuteXjZ1n# zllMzzp#~4j=EczuE2hmpO{FQu7}Z&8;*~VS66`W60`eM0FLO>R49H- z%XSpoMaxbc9jnJ~yt?S0-4yMZ)_sCYujWn9psB~hf>6WfqoU%N=aal<-?r1T{;B8F zhGE0MXHADO_g(3aRevsjB2Bkm_Th*LUk&5Oc3e-eU3T2e;9PKBER5T}o-dtd`P?tN zRd+tF`LX#v?b+FhK2^fKaqxCs&2_OYE#UaG&GH#RZbuL8y5F8IFa02Zj%>gmzMe@B zR;wP&kupk(DEFwq_eYUiPg8s!k&~wbaXX9=_)2;)%&&q7?np2B4G6EY8 z(M|~K}Y)7GJwf@9Zu?O zikmw!z@S$fq4V;2L_Q4FaDwf_P5+=!0ztGBaF5^w6WHxOGDP-(8Dj5mg;JXK+I?7UZZ^qPxR6nOR9>yhF-GD=4>r1``s3R~^1bXS>uP9&Dq1{rrm!*kBBGeL>~pL#_TL_v)|B4_+bQ90%8(#kj}N49~q{> z8}qr(!So<9`Pncn4U183dI`R=*_iit`N#+iGE!|VI{F%U^dhD5EMs%wP27cSAqHY{ z^7C;k&INq;7N4vl)OFhKirEoPIWhmced0e4{5X{RNP`ce4|r+(eL{r1FVy|A&^jE{z~B?c!%Q7_{MZR>c#w z$vBIm(t|YXq2yc{azu8;ATaLWSNr6x!2M*62WSV69_-j*b}*tIfri74`RLC}^m&W) zIBCY?f+RgnYS~4!{@om~>)3H|AXtySBtIfTH|0lB*-2SN(=(}C;Sl7cw6tJ~(Wo}WZvg^D(h`j82e6YIgetsrq?|H#yhR!&pi-Ot; zeAZX}C_*1N2GG=*9R_i}MO_c!H%GEGg$<}rk5DEGJBrZcdpnLXS3}o^4gqi)=jvv@ zo#fuNcAA1#AGrP&+@qH)NbRp=6vYmwhpyVD&02iW1}m7nYbA|Ed|rr z{$rn9xbMc1u?p-aiWx%7@^7}S2dQ?pty}M&Sp>JdQ{I}7^YcGFA6FFrQ;`p2{5>mM z+F(EG_%rwCBIR+a^)l=B?eA4D9Gmy`09iFuqUkn;=Ub5MqnoF$z~g)k-L~y#tKX(O zAGZA1x*qr3?0ld0^T~X8@4e5WZm+1=AUD_ZVvyU1!&u1M{jHxLJ)0&&Cjkv*rXkhIg+VJXRi?K+_xhwwx9>kcex+7pZfXd9AaE2 zzK}eoRssO9m~}Z))Ua3RcG0G|_k#b8xcdrfD(w0N9v~#4CiEgD^dd+{dM^Q~f=E@Q z2qGW|D7_>=LJx>E5kl`6iV6rw6N1vEOO;+kno7^%{pQS^@8UamXXe~xGLzZ+V&_@= zSH-Uqf;FDtn_DO~q^C0omVd52d-p#4=l**Z>}hC{|rYmRqENcl>$UX(O#J zvT}-p##To;V*`S6WLVi}fpxIfC$9bFJc*eVDCULjwOe8RLjf%oZ}%@;l~)vp)5tX* zt?cV5H9m1O4tIK$b44wz0iHEQnj9q@hPr8ORg45HH5R~J%XL^NjZl=0IMz!yJ&Efj z`uTCuvz2viA*H+V8OOzRa!(A+4eyrEGZf!=UvA`VXpu5BUMfdkaog(a_lz^k5_MM* zGqkAX!~fk$`G5MR{eO9z|F4Gne=h<5Q&Z;u^4tF}_xC@QsQ-uecU|qu0nC8^&Z6QM z)x(I?yp~z}@J{sq$fEL>dtbMN1T6~f`|)cAnWB&CLk(me4`$2z{hSkN*f7rKyJk@< zhn=-ih!j!I|5NSia>t6T-+2sv4XB#>&tU=0ofp+J_0|=YuD0*IS^S)ctB zc(gtLEz_~3MJ0lAlA>vUsUsSC!(^c8(PAId;zY=O*_D|R?0+^Sr*-!lGc^-vjf1bN zU4inmT9$X>PZRxa+_b!|cE5gb+~Hkl%li0pu|DdY*5rcQyFFdNSvL8s>1bm_F+wk_ z<(fsEY{*QemD|&vs#$3#zE!y0u^)ZLFO;8~*LL=IXQexz*xr7Ae)wyn&ouw@)zvvU zWGRx!w7D2X%AN&B0;S6xulrAsN5K&kQ$J#uA6s+8-td?nLBW-T3!{0`0=aemP*}3* zI_s`72VS$Nd{3pu6r2O)*D))}a)*J=DH>P8#mSoVip42`C~U z&2ca4x816cT}08Hs>T+Nr`7MYb z3j28NC_#Dn)*G+1+`rqubVfaH{%Z10YF^R(^j2iI<@1Ld)t{Q%Z*H)s*D)CIy_z`v z!hZhu+wafkU2n?t4@1xGTOkcU1Pf4B{=zyx^o+cl81IPfeaWm{o>l(mWc#ZRZedqf zG;b>l)jTrlHr2g=pr~$jTk@yy%p!osw}e^zjAT@}85$ncTi2TcrU{2%M~sa<4+z*~ z5xz>Qwa*}4&4O9hXjhIz50c-cPA2WkqmSr1f>#WC>H7J$OZz>PVRc> zc({qTMD+-|c`EYQIV`+1`q+NFW7wDMTiAw8C1-0}DwisLx+`42S07>{t$StUJS@9l z<80JPXOP#gO6ui|7`RBc9k#!)oE%o%wOohtO+frFH7Wz8v1*|^MW*V$ZGN=JWD^#& z7qALH6W1B4^a#LdUrCBWtOokbWf^^70Azi)q^o+|nQ;FE$y-aswd?J2YajOwZXsjG z4=b!43EF?keVhZCX_UBo%uCgc=##7;q53m&=iw0rYv=<^sd@Dy#`NYM_FJi3H-5r2 zgS!YSMC>CPmnA;H*Ee=LE>aZ!)H*(m5P&Q{4=e)C`xuolCjc|YAfinO&u=PZkuFaDT~37k7gba$5u*Ti0iXpkRAXj})fJdH$j-5ia`vy|OfQw|F<4 zEJ;?cVm?OSMWV2zsB(h&!6Yivi2Z@??xRE}=DIApQ?4P%-FASi48V(#k1u>V1z}w% zSBc}5g-1c3Dy1f2u)P|%Q3W?j$8>2LS2f?3evLK37A!~2s+R}IqpC%tb2xbPZh!4(H4&uRax_({ z$L2P^-=g|QkriTO$jfTPga11F3Fa`veEa<*Y$EJifb(9`xyVQQm9;c!s~HAHFifaA;j{+TpLEj z={irJ`N<2$#c^&4cD96qRKFV;_&$F39i4j`wMlYR9r6HMI*{%2wEU_iQHdR;U+tiD zA}g5V;(hEno10OP@iV=tg!{(fJgP!Q%arPLRsY)cV{duB3q~p!@#b`MeC-xFf)oxA zPE!*%v0&cV*j_+mz#Huqw9>XziWUMD*U2=;4n9C5)qY-?0_x?g>^# zr5LyzgnX8?=c~6hi9gXQNDC#G6fS&l`QhuUbdqt{Fa)lfSk+m1lPcA+3r~QWY zuD{YXVoh-)HXn9NTJ*(_N^LN9VF=$ano93I9+C=7}L0*900j>K8 zb>ctlob)gOGj;fk!JQd{{HBm>ZuFCDBDY9^*LTuM*z?irdec{%9MEN!lg~uEV%q4PVt9vgXBGd8_foP? zHa?EpZ=jod62c+7SB@Z%JeWb8>gJ<>9qGMakNpe+F({Mj@o3R-j8>Su3O+(a_FNS%(Csx@^P2-r+c zk4kx+5P76e6>HmHY!S2 z3LrVj+n=AAt88Z*2E5>-f78);wkfTzG&|*e)Ofxz1xom&F~0DZoZ=e)kUE*FqW#-u zarry^UDF&G%F^-g?H%#Yxa<+Tf4$!?54_z%AQ2{k&kWQK8Sb`Vk7(;UxbuGFZij9f z2mSf#)_+tK!M@|!=+T)we~^W~SaXAhsCUjEx2A>t`r-G|v1t9M5UREv1HD)>)>kI< zB_F;Tz8ERKI=#iR*xYf4W6q9v7B)(Q9%{JU3n83yiqaDQD)QzJraZo8Q6nsqKVSU4 zO}yND`T0!hxhS$M{`_e8^Ofe^f_*>YIbbtl>0g9kCsd{`Ld8m~9UMW;8bNasNy{1q zQ;4E3XG~fmXWb)+nWG5EX%n7m6f7L~1ES>aa%ZLZT50(R!?rELl;UC(*MXqYbQCe&c8lu(bCA zV{9-nR)iSa=@>iKSVx7}ht{zV0%M)rW1nDRT?nxr)3Hxk(GILoA8YipK(u!j`Z)$o zONM0HL`R;Wk*t{L^3ZHEFvc4EMT5ErPMtuU#(de2LQRMBT4OR4;xYr{)*nS!2*(&s z$Kg)m3In5yHsgw|SPf?64rQe-xwNmXy85-(J}H0o6yk2074|J zXh0P@p;iq%fAF-Q19@t35aH28HhTY-at10)++GqvHkz^bYg1kPo>o^5(}7diYP1a7`*A??N`sq9NYWAUr8kCQh!1W_J z#7GJ!jW_Z$&{{`a))G*if?;n7=-5FeeG2`71x`OHQm-q7$76{dR3gEq=Q!vdoT^oX zYH1&O0w|KEd`*l514OCJp1{@tMRHO!j{Edhv(T4MvZZHJh`3jm*y7m{=ubFRpczOg z3i=oTYL5h8pk6*;E3;QDdv06yV43P#t#z`=7!=C)jLVT%%8J@%D%_$Bj07(^(ng6w z<%zSehO&$A#DQNp!U6%Q-}iBcBUzwP=GPuD)#ify{vz5LO4Th0urkHAGbNM)D!+{_ z8G$lwGbIL9-rX)iEMs}uODWhrP4+!AnrW@0pn;NR`cjo2JwWerVAa7nyG;oylod2m zG~tnq-$#-Scv81)@-~}me$LcfXA#`pq}rRw`=yxnO*mhqg7zV0DkL>u$-I&nNi(_MdHdan_)Aqwx_*#xiS$-nX(}8)XMVNIBa~+4!PIQQ+^}S&!i~`*`4*8SR!2 zEyzb9Ia$Ai%uNcL)@=pU9Ct9GF9mzRc@9)giTO<_T53Z@{ zt65ZPnXzpteA=?q0^6ZT+ns6Ie-i)C4C)D>_@|M-1+Nh5gf`i+OfG%+1BV`0mS*om z=X`P%1cKkgEI=g*<|M)^)}^F;(j67r{qi4#9h{68mW?+k%R}^ zuaKy^Yp}Ui5(lZnot5+Yh&D1)H?oFy&S1)dJsMYpF`bQ?s1e>EkGdDi^JzLONqRNVzK*nTvmYd;lj zM?~SMw{l=2ImvPO))^RtvZ&>(=Y~hOm{IlaO?;p2M~Mo?o7+H*T$m1Jkw8_qSYjn@ zOZS`dKmY(tDMe`%*-{+R5}w-!g>LN%GGJar*dI< z`pGL`7yGobnrzes&@_9NOI*L;a{Y}$XwPN^O|=@rqsZ%k{sNaMUhoy<`~GDBbllbS{BOcRR^=~r_GcEz5@Upd}!EO2iOO$hoc#Ft~Y@{1|E0P{`O<6xfr0{ zgx>u6fg00P7RQdi;CUF;JZs*!N|Hx3qt(WNLobFf)WcC?!^k;?D&^W*yJ0=|gfoue zI6D6cpHz?n)WkIp>=MFgPprANACxvy)3D1M##>d3sd!Wb{8Q z>LpTdpi3}pO!)1XXxo_B{MfC_G2t3IF)82`QDs~7wA{P%=9bg(;G zI|;27Hm;L29*98ey&X51A2)LtzuOj*8ihOn0RF(oY*okPt~*Qk3CF<+C(cP1)yc;W zlkS(JO-ods^ON55lQ$ejpL>n^&2wzX(YX+4wIjtXF2}<-C!Q(*0f6c7n(>IR>Daf^ zF>TY)^V68Y>99en)+MS|0QD<}nM|*lcOl=8=Vo#*XBr42z%oXF*^~nbKpV%obJV17 zPCMr~i#MKfxITlTo2uvh(Nr_2egZ9bm}OvtcI2cYIk~WNH!gfY1u*R<$ zC7O9n2Ud0Q`L5A~?3s>s$n5aod?<0C!EgBoJ%QQs5eA@m=ELqbLMiwN_ABhi zp~F<81M`O@_RmX@WXUh|kd)u7icWkV#`Sr&tZ8zR$b`yg}{PhZWP@BvtT zYo3{F{x&Bxv2Lbtn$mfnB3}};*OurOT5uY;JfF18dTW;PAUk1+A^`w^UqPEYut#`E zxN>@(Bz2k@nED5_ITDj?u<$91DnTPxwH=c2hAPhtoDZi6^U1k_Q3c>3-xR6aMpg}z zXVb6{vpmK{9Mu&o^Fa+`G(LkgZ++N)(aCqQbQG#T3q5m)@}T!=mb?Z&eT1jI2!%xe0H613e;O^k z{9f|@d`TQxA$CxUJlq2xZ2DtCHto(E8FkAk7f)zZ#-uu1lvN$ZJMmH}5MP8DZL{dHA1Vo!`5^Rt; zbH8tFLp`yOz?7qhCJQM;*cLdsT?lOi-S1@_P-c-r_j7v4!{2KQP|tmeavEkboBazf zSPp=K?enSM?EZs;{h}z^7b9CV(~UHb&T{k5P=T698lZnz3NBNyN%SupEJUdj6y^i{ zf&-389@nb>9x_4`^rokO4j=w4h5SO^x_(^u%Gdzdj&s1l zyL=5K+39G1p^iae)X}E!Zo@ln8EN8)!ClhYhqcj$YJX72TXq={X-a>(C+o&F45*0* zBIJM$jT|765x^Y}`IgDF(ON_JC0@#_hElYOuGKvh}Pq5b7 zH^|Fn0yziq&Y$yM=P>`WeeX5X&cwd-5YQ6v3$)3ik+1Q|Z=<&h`EPL{DwGM?{0Njqt`nR-uf?NA$|C9X`7W+2_pRPD={M{X`CqDfi z9%lE_d*MUK%3n^7ll}RF*s}9ByQb$q+YYAdE?Q3yS0^eS=I6aVeX%q9Nv1F4eyd|n zz|l}uQO|~XxTkGr7?mUDM^0Dt=@`N%uhM9L>m0nVPC~|yuP?!~OKLWf!jc5T_jt@S zDfo(gw5U$mf7gE7&iR&aI+>dA!M@{wR(VfpWvJ)3m1W%*`iDkzdd#jpdvCYL3#9s3 zU*@LjvxJS;>GMQzq~WQ52czHeXIkFv2V}WOM+z3?)*FhxYm~ktmYHsFN8;m!w2@>V zV}p_Ou&j)+?387Lv3w@=h7s^)@sXDDPS25vYJS=dqGdcz=OH+k_omkHAD_{yLiN zJFC!_8Xa@Znt#dd&H4b%S30Dy?p~rWAG}X^A`zjG7pNU9{kS$aEZlPAt)EuL$w$YO zfo}qcv&dDNj~B}VnNcrko80maR;Pp`Brd+t=_4ygas>7Y44#y}Jk)<}T$-mulxr*% z>0SsT@6xY+^99yT@gzKBf3}yN%_!}*bcM6NZ-+Ih62>O)(^|`K!I{08uU~%IzpP?g zc~xT-oW&h6a1xF0R<9S|Hr_`RZu2-CINuLn$oA%v>0PLL>L00Me}h#bKbadjl)C8< zw53#0ti!)mB>3#P;*4Yu@>9MU!N60t&&m<9q{iLaNywo&^otW`LZ}fj>uRIJ1(O$C&Ppwrf=D6T`aKNZ)3|3>JmOde#b0~}QwM;#XS^=@f#EzY2)ms z`WQ7~5tv7DO;KRhW9L|DPi<;feBu_wIpw0C6qxs-Q{T z+@XC;dmrT1V-Ek}gA^Kfm+NoRW_AGfsn4GDD$oKMoR-K1(|n-cvuR}uZVs@0Z_?9j zp-X;V?8I3z4K)%=<$mnbqdun@uM@A!y-whhh5buOi6UXWf03-P50G!!)P8X3*o}`a zybdX?7b!+??T6nsdc@oy*u_A3Aa+bqdm^pzV}F*j=(Kf{0?74%sO?G;@RL$<+yrjT z0O86|fVE&6B1}dwW1@;5>MvFl$)tqLX%VmFOZ_OSWxGRY|8bFdn+UC0_9*^p9*Sse zctxgZA0(T};LTqD+;t1BQhLfLb*056cKm&&r$o7p#23v;zNN2w#@qg@_nF`KK2^p? z=(f49)Fd$jchC&F1S2x)kbd;E_fhV&8EqcPTkvYfQnWzut;9Q$eC8`r6e8hwsU2B8 zCOOz{4Ema2ofIq8W+4;*cn;(W_>9b6Nsbpf1+XLjpzmfYWtrFl(~0;()`blQ_bXCv z37R5?4#_)jZPDEFmjmKtBT7I1@QHSe8z}fcG3urNUN@#yN;FAlgLkNUX^r@E+1G6| zZpwL4&@UItCnC{bnSi;MunqMl3Ld}UT5dy`>YK-uv42{RIW~mBs%fMKwLvr=ygbRh zhwJ1DII!@l05=T>svqG5=E@z#O?7$?kouBE{^Ll|lQWVOfpk8r@}mCR?EZ{zCS3wZ zG;Tc8@C9CxmvNnq%y%v+0c8`%i`1w^!hij^#Y2h4ES-H3`dM%{BQ}9sW&T?fisFm$ zl{S|NfX{+wmHjFIGRxVto?O=^x(#E&{q#NfK~nG}Z6*opptX(P7eI3GK5xSt#W_Q~ z^v_|#kJJ>-xMzQDQbIzl<9TlFY#??`7>canSp;@2ZK8;U$~A(L2LQ>z{im*c_*i1< z^sd~GrZ$-#2iU-O&Agr77h;_#e8|Yue~|!WRVD|MV*DC;?Oyc@LO5P5#dGG0@L(v5 zhjVMzHLf=Gq<5mZ>jPHE%gi0dZ;f(3_R*r>$IDK6ujCzelRaEyuoT*yKxu3GAB%=P z35hm-mn}|NsC~MLFg@ccYIiQ}{>x>#eUF;Ev*^JA{N6nm+jp>8Q1OvIERb4R#3`}S z=7Q(lFELO3!)wCjDCD7s>5tiS&ie*Ieq&xVfp%j&1m&mqQobyeN-fQN3lu=5T=`qm z>CLix5okEtEYaM@m;tA8PPP}?z1_sDmo7s!P-3^1w%Z2dFUPOH+=S+^$|UZI`P;Hd zLdAQ7EGd4y60&Z{ahoitC*MW;<2MRM25B|PqiJ8&(eL7sC_Oe;V=tukVi@86vFPV)eB*Pb#=kPTO93pUPs%t>YiC%flRE>yjpvAMdt#Q1&cz zTc|j&w`k!{SOi6syNk39!Bpy;2~TsW*ka6xL>2#r3PSN+cpN+!yvTy0S**NmC!W|B^X{z1=&Y z_}0F7wI{S;e<6E1C&@>3rJnuu9BkzXBAufOQiyTU0GYt)BBseL@v*;Fz)u}xem%ul zG{sts;Me@rXg$?lEVoYWxB7_0NV!))k2@G$+Sx?f_zuvzkVqv0xdEUk4omtNi#+U( zIb)yo*zzs0CMC3EAL5+DEpMC00rDI$q}4s(Lx;TPfnsovBG!piEo~`OI9Vf%mlj!D{eBiwy z@LnHapUGSgGh>RqlJ;GDpoPwt0?EWiNsviaOt=Qf8p3B~9TSEJS?&uuSjPJ-bvn!T z_8oOWX5wq%z1QvHI=i<-9fj`4_PuV=G{%?@%yAtac(8?I?3GlET^8CQi=3LLgX?>e z7f#}3x`A)5!35~)i>#R0I*^3| zxn&@`l_YtEWmmCvgM1Yt-kXMp2f4UL*vfC^P>1$ z&V|bJbZWoV{Otdj^$#d|$(x|IxU`c0aE%KW!N$aX7?dFd0Li!Nt%;09@(0iG0E$)fC zOW=SdwEt3SG+p!h$X#5k49ug#}q>&rb&yXD1V*_0tj7SE(W*ZV1a#*fKUJ4NnZpb z#OqkiN<(Wwm_YE+T?eM|kR$%3-~D;hBuc@=ZVRO*Ox{Vt^1bt8Mo_e}S#r=cQp+8v z6B!LyWg@bLL8svsRnnLbvKRnU+L4n0Yq}@ zC{TF;=AAbOhXQ}`}sX|5_6eSwX!_nEpv4D2>0guuSY=C+&5>Plb7;z@6! zI+xHsglR$+2rx}H7l;nP7IgZcqo@HOCVqP{0)^e(uIWA(GY}19iA!WGxemBSnmk80 z)&&o7MSv*9`bk{WL-Acct}zbR3y;ols@L$ck>-gQ_38L)N6#2}8kWbeQTo$V&)rGA zXi%2!$Oym>H!q~l2sjvmayI_a3HZ@SLw03Au82ihLbO?bAnQhXLorBIEcvZzR0ILc z3#*4KWXr%w?{)y;tW;)^q_)`Ze?Dk~4sv5N`!E>V9D_7qjnSaTnP-{5i6nJ6Arp4Y zQ3sITF^l2RfR`~PlQ5;2r$+~?=n_#dUjpefddioPDAXIum+oJQRUEU`jj?73&O0>} z)R$mYOW|x?jmJxx;TW{edki-tzZfILSy<;OWY&J|fkVv@m2b3~V`;+sSB^}O+FxKr z1dx6n-Nb~^$CA}~Az#_V3P!@{nZD~wCO8_8itm#uM4}$OkBOJj;tiC8JLWurAjbfF zp#Z>>eYCJOh5Ws8aRdz;`Ba1gS+Vbu@vEhX6EXvL9NQnGAkFSX&$u83-EBTHX#~W0 zm-(e|55Np0&;x$$IzA=Z)#ZLS3_j+iF?-MYbCg*uWpoT%4!Bf@+$t-k?L;%T%|^2| zrnJQAQ}tMQ(_Qwup1vlgt4nb0JX+s+5g#xah52!ocrEI{%}XgF1>GgOAQo%bQF~nM zW8r(oqE#f_RdA0GQ*_S$_nrZXK=l zVOAs{>1ZsrAkiUYoLoc!?a%5uH&2257M~V_y?#1wa3w5@FWjNAUAt#sm1cv2p&d@T zpIDQ(!tZjAONJ_tdo?ZaJH!K6(R+gv4oNWoR(%So#qg!s2(yQO1FWKa7A+yDsHNFq zp3wQI>XS=w5+O-1InfJ%v?@od zXOVVrA|LLf)#3Iuw3OgUP^1Ye0vn?{>6j23tNS-g9L7^Ug059Yy>`dRoLE0qARVoD zF}m8C@tJSgL+N`&;}m^& zJ%EafQ30u+!!u$?ywqzcwcFCQ0u zsl^E^ASE!Q`PdjfK%@``rD7$XE$K$HM-8yv@LEFh0Z2_*F;N-jR-vEmlr(FVhZnFC z>=cpXsnj2+tEq>n5|(`WFf^^3=r9DnmW*D@dPnr{)zzO!&h#7P`47pr+%J8ZqD)*LQ$-GWuEnaZd$&G)acHmV-e~{)!q9kf z{yCh|BaC%>c{ldK$sv)2yMpkb`ex>Hd2Wd4%OiP~QqDhzeINW}7vJ1aJW}dAYJ2)z zF~v^^?WZAh?9qRC>+|b%v6eL#eci>Qztl%k5y#3Kei-v34GI4d4u7MKW5wSCOE}dZ z=d^R*+l2ZhJTIs%-Htn`BJaMY@msR##-m+Ma$}d#_h4E(SRQEWAN$YA4lK#6`NwKP ze^btm^08{$4Qdq~YQMB~G!pN=WtGSo0b6)eg($?3(m(ck-e4nZiINr1wZcA;fcOy% z%dN*AN&j=xi}zp5{7r)`JdJi5I5xQ-uf0ee?uc&NR|j~~k;-=HdHww6v-T~}iCgNe zj$C3yu0@VzY?M$EG0ftQw@BdFG`ZoQ-c|f~s||Rm=_K}Ha*_nCe#&qLTW%2dU&9E0 zxiYGkLorI_WYVmTNzWj!zOGn=vcydeuTJdAlfMGZyuWb`Shug@x92Sc9*8S zC;Mvmr*@wbEZyM{Kgsi`$O#MBS&sET9?M`m$1{p!?e`Jlk+~X%YvZ3-Anpi|gy%^*ABUv)6B`TRv|pRNYSMVEd^&qvGaXwTl?mV?CW_GW1R$6$;1 z7nA4lkHj{K!5f#?eq%EMc^B9I*Q5J(Vz;6_t#VJdo+`O@WUPoR`UyhAmWZ}-b9x%t zO=2J8GTkS9Ym3w5kNdwzk#h+_BOP8E!?Js=F_9h^0qSB>TcH82^_Ouy#((%9c;o&??UgBZ{G>u%|2Qke*2#})3f8v@zQ&l-bul7o>SEi zza<+h1NP=x{9bmoLI0^ocybiTK4~o$Q}~=LBk{nVtvapO`*ly*fx>63vJDN@P`pil z&SSHFHcs>_GM_#~1UbM{hAa;ZrGcm+kSZs)lp!91V!=CZu7!_%_-C{m?ssFXg~y@2GR z;YLxDNS!d-hU2R*5)C#=+0qSI7b9u@Cki%*qyR|4Q-D0S;pFYbNR}&e_D9x6Ih6+nvF8O}%=<2^)t$~V{ z8pI(7CUodsoC3EL%2E`oi*HIQY!v&^M#*F}t|{*1^7)Ne79NYBcfQCCH3&wzo4;x( zXZWY2&FzNM)(z<^5t&B>%8R+vIFH3_RksbL3^aY`&M9q8KVIZ5%;c_L)ul)PWDXruQaJQx4Dg~5DGm!HNRoPV$|_q**w?u0RAVT2a@zkXUvg- zK5pCz*^uqKq0YX3 z0f}4LgJCy1@54UvCVQsy^K3Zc;(|#lIZ9*DYQRE7G;3*={|aUm%lZX#Txi#1DkTw; z&8c>fVwK3lwfKo|VE;rfd>20Ruqz3l7;UlHRH> z+M7)f(eh2%t?puEluA}HO6>~g@AqAP6eE&C#!6T4Q&(v=M$a*hmgt(>_vE}GQ^UxY zGMog%)KW|fRgL2T?`dV0V++hf<0#+i=w=q`WC@w3;^HF3{W%Zy1@4o)7nTzXJsma5 zP&)08AULyBTN^MHb-&sn=;w41?6I+o1@+lThTrySnIke#m+3C%yA-t2i6RZpoWR0) z)eyzOIFp$G7h!9UGF3koQ{IW5%)b{7$D{&6-&~G^xPA#E)J4azX~zojyu|~g8fgG` z6#oDL>2XqUS2J0V>*e!-fsy+(Z}jxIhdr24N?k=b(4owqa!38`M}2*pMOb#a$tQj1%ETRs^5{vbCEywSx^I74s_bRLV zMbv*5WH@@4QOIhl_7NqDh$kQY%;@oOB03z+-e>qNoMLD_$HPC;vQl zZs5Dzb$#0htzaH^#|<)=;?r*8rQ8~avY8EL%!L#4&li8^H1G(c|Kfl^@rd-OKjF8j0}5s>SoYsrIWui3qZb#VgXl4$@naNQ%~nXY5U# z6l!=R4~HX2eY&$$!7b*=rw0q(P2C((BDda!5Msv)E&a5XG(4hCEcp6#Bs{HrUL2fSelbz}xbf)im zB(8^FPk7|jM9Bc!8f4iuDvx!Alm?Q#jT2pEob_c|#?ti+01E}Q$eCE~2uCeJu{L+Y zNz?Fvb1c1C8_((tDb1N#L*6fr9h+}TroQ3dbKg!u2ljI`-iK`;KDZPN)hVRwy(K>i z6i7Bow`91dK*|YROA$sCO@5R+`bQ`LJ`;|r<+mV$3Ux0xeG@*-WeUz@*nD?A$oR?N zUvE*A$phX{`$=2ZiRNJ+C6{0&rK4@OtSYIZK#cctySaa9?srHNUMb}s?=a@%s4EID z*QO7!21d1}l6$L9aJM4t^F32RPhaIu3TFPPIZxji5k)F+mGtqg`k*bd_?e!&ckywV zr+KRsvV1H5r|#HZ^kAfwU;Z=d-|+!PGJ2U#_vQDF1ioZVYF>t`>^}ZL5{Nec5VJ*K zjo2{&gFPT)ZWHd8hnv6E+SH_PpVVnQVgw`d=01c9x^Od>M60dxQpH_w%|zc&Nv}F^ zUqJend1Pn+yHRpWCQZ%y;z2Q{?d7R@gT=%OF%=)gecDIx7LJQo@%pknOcihgxs2qa zpzlQ#e08S?#Is<9V+c89|zOCfiT1Z@vATow2n zF@G?;oF3x7HteUvjY;PqXx9HhwJPe1%63YOpxRQk8Fn#)bVdw~T7Ii@c^#aF(_Po! z$iX^Qm&jm_af*OQ`D4_SVjr6r(x4}b^2L&>(VKrp-3%%Ta=^|W-T61=U335vg|&wU zba$Cody{*#09V>#SWWd!Kqt!s{?btdv>x^cd}@_ zA@kA{@kG(&z+n(4mS~*8Zk}f#kcE)SWaSimX$4qyQ0G{_zC2_3pdvmgzt#3KDHpoE zC{pU=b-o+GItWit#qH}7kn=Y_R4%FEY=%83kws=g&V??4f zt}S+)q|BkoNGMVPbO>#t6msAGIfzoTUUA>=?)>At_WI#<{>>j*9yU+JqDU0|u~EKt zH;j7m&2+w~x2xjwwba4M;L9#n?4;{x_n@5S78_bEn#6W&PP1^0A#V+k160JjGDLGZ z%nER8Im`t_-vo5fsYKZ>b<_Ei03=B+vvCF2_#FaC_9dzyh(wZoPKH;X5deU>AbmZ% zU9Hw5bcoLHg9P?*masw~-K4gvPOMS(z}e0L`Wy>2lxe~4xNFl}0w zC6NPCg}-(mx#u#c{Y)C7fv7H5)w+0?(m1Mpn@3`U5 zdK*G^eY$u*qs%?842^g4Ybp#%vzKOuza7-(Um^{b9#)i&&kxWpu`KX9-0(URiqy&} z0j@@PY`h#q32?YYunRYf2!v0%g=m#WBeQ~)z#%5Wv3l+`kL;pum7`w>V;=Clj1j($ zqCtboogLp?w{H?^H;*hgeeKJu9kdfB-TUV^yiaVr#;xND%j2%fQ)&m)Ye7+<3O7eG z>|bJe+IA6Yy*x>+B0=j(euuCjp}c?8J^k^Mqv9F#X@(MjvA8d&;4kBkeRRCiQ6Fa>7jUwB3g1(j8?P$SR$(-G z620YQUl_cs9UwqfG&@TxuHm@+S7Aa`$7E10)jk+%tHbYpoq5|WAgjecUi{{wlXt+js$j-fLz|yJS=5q*VW~*bl7wX% zSM!s!cH6_xzOeHGrJRctcPIbInvt*68)J`nQ&`cQQE?p+mAR$OJ*|0jI*L<)C9Rfd zJv12G%4EeM9V-|5woIp!;R2<~q3NmzQUhpw4j^F!W<0sj>5F{kidq1*;(*9ES?2QKGpH>KN4QayM+h;5Qvu4L{F+oPMEW#mvu~YV&!L!beEqg!S<+r4c9H z{2JZxL{7s%4nh#dse0?*ZsM!6 zT~~)l!xl%`VAIYkEk*Y(I)pYj9uEE6&5h`4pC9KQ>Es*h457_c_vus>?gs6}fRQ*` zBW+km&V|5ZLUy6=MdyAA&R1d2S7Wb7)t9k~zt00@p2rAK$uK03+}Q8l0ZqJC7!1LY z-i&;$$jBfX*(Y7uBbw{I7yG<<+k2I!!kux;kHYjOj78SZx|NWm`lP4 zabm=gKo+|9YNV6~mJ$3%*MfHnVuzrzix|*m3?-HCA+8!=>|LxSrNB{Ae14EaGOAf^ z2(4>yc643G#QF(33N|QP-Srk*<=aZ8T|KKz(1*(Ft0Z<)Ka{1BNul}8%-K1sk!A@k z6CF?P0gjO=^gN-vzxqaUuYq4mq0(X8rH0J(&299O+@a>lW5NtGnDZPglYzq@zH93t z;f(wVUgMdIlR3KVmWLN{{w3pN0q4B_={x?LB~+8|g#){a_v(=UZ4}O=sf)3Rl-*zQ zgToi9W+tORDg#z>B}clY8YXqz7d`84swg@So!#*G!{$RdkV`G1_XIRG?Jz|m2 zT!=DF?E%D^iRMOYEueN|LEs-`EXM*o5LXW?;wb2A2H8K9*lO2l8V!R_6fFO@Goc%X z;};%)UkG-o47^jDCS{D&Rwa-sg*LGJktlg;Ba&SV3S~GYK&q2bo|2MAhnfbgC6vr7 zs-7>5Wrb2$o!wJDsNe6z4<$Zh(pN3-i80p~-lBgmX{I`()wcWUmamqsqeZt)^t(<9 z9%@aN$Fh1;|I(2H?utm-6cPdCu~z_@ZA+fStN=+yv|8@kcSW?aPv;|gq+y{0BekaM zSBb|%^lEx58@ZaiX;2C!G%XhiqyO@cpW1&FVLX!S4671%wY%6C`yYZHzi$&tx~MYn z7q^O?lW!knHp6j@EhC{(hLo}{dE&~>#6bO?D85@?d0$N%W%pSBnn1v}%}nkAuBB~4 z!$Y@I;it`h+0t&f=RqVHjzKJ9JFKckdOn7FIo+{FsnHIPW?dSCJWsSaSpPlcNGsXY z4oK_u(35cA4RULJ?3pu=_X6mj*UK&J^J=^I6&uIB+1th6Kl*t#2F3b^C6IO1+D1Po zlLU0jg)*z{|9)_5?nP#~-<4cu(OE{mkz+`&e2L-uA21R9@HY^4=+|GDG%)-A^u5Vzg z3;EO(asGjUzA<0rcq>ulK6tY_-l?QZHeHyW_ty1o- zI==@<)Z`vX4y!ln<63(IUp=pyI?j#U@$2+wDx%UXjJ#^VS#hvRNO+$U4FxC(~w zQHh1}X>&LJgf$4Fz|GNL>LVxoJ=IRC)LNJ?oj6qCYd&wMl>&8(1aeI`5+a1F+yPlC zhGuaFM$%oI#(^r0m@ImY-IfVcw(5w>#CfGAJhwKQhDR-(HT9=X0+ZB(@vPL9{{@{u zV!uX@9YKB+8It5klO-Fn^H}cWNk@HJcJ#MJTTGiMZ|20gQ)kbT0saLLI+SRDegX6a zMRjkXK69t4)iY*LpT2smhVAR;PyZP`e%4N*Jqc=^iUaT&>R-aFjE{^>^kM zXvvyGpH6L>HEPwbTd#Jl&uCHGMh^x+rF9{{X{K1MTGx=(DO096p_^yS)G1EM8p_*s z>Qu6W1rN6Mxt(Ws?%%zK2S2`}%8)F@clM~BSQ2)!NC!>5s9bSx6cBaQS9s2GJh>O~fxbP>ua zrL3~WE2G3RLCX}wOiL@X43o+)$rKaJF=;!BN!*e|(#LJU>Y(9lF7eN<9JCsh>2KljYE&rLP$l+Kkr4VBYTMKx(j zCY`J_Qc791RMl5oHIvK7yj<1QSYf?YS6g4KZB0^vEj8F-g_WpIi|#Cz*kzTS^G~2~ zjds^ud8O7`Y4u@rF-NhzcG_;i{r1*pn`PGAa?$1YV z)o`oj*V}%@1vs`@CI71x#eLQrqcpktu%neRN)h*WQgaM)%l^lJyQ8 zJAP64AaFceXN)m;)-Z0#RJfss_4z~*&u*^S=%SInbWNC< ze%a|vKb9zDoAfccpH}QZ$1~5K?z-t2^WAUXq;W3$Xqw5clHkD%cCjCYlY00QcZojR z?6mRb6=QwB_S)~h@r$~mslBWEmxD?kBY=|c`P*^8Ym_G76A&=cV!5t#pq^eh5xuL}Eco+8HWfv*z+s3w>b<9^! z-uSikYFp8IkpEI1dE=!Ab8oSO2VVQ^jRkf4@3|jUa_Y&S-u&ZZ)!Z@8&#&J7@{M*q z{Q1Fuoc4%pub=+?c^clf;@bzm_XUuEp<&)%oF_m97I1*rx*qZP7eW2K?0yT$p9C>D z!HJBIfeS=m13@?$_3edyAM{`dJ4hw@X^@2(3{?dia={kP5J&yU1~|^;zoLvS7xan@ zKhCj_*Jy|x{rHe#__2;8jtN8y3Sv6;aY8AkP(cS2OaiH>ya1@<9ZYFR0N$YvBi02( z8{$Vfk|HpFbO8#npxguh*Bd&J;Uf4@f_og|kA6giA8c3z9}-~_Yj9$a=vas~)Y7<# zh(j5TRR0Dw7J?6D_)aALI0Z8<=|UR52ZsNUp-9?A$$p^Y6V=F*7ki?QJ#Iu5l2`~K zs&IrwK!g#oq(dYd(TjfwDHjtFQX?9X3y#c08=T4q5Jb5r4%TCgeVNBT>}W{7NMaFn zfkYy%sUUZ7LLA9SiZWIK4YEXrk&QG3boikR<5UAMO-u|cm;p}{W^sy{%g~DuwlWjR zB_Y=%9pB%tHw-t;69|N(M44q7)Fh<~122j$vrT9HA&G zQ~&${&#|1MCLNK-DcY>^B^lH(uzU_~`p(G5+GwIrSVWJsz(GOM9O ztv;*~Jsu&4JEWo^sgOex9`T5SbmI}dSjIsA0aqdRg02U#>mBB!k4JvVY{M2eBa{my2 zn8K8fQ3fZVVG39nV-_F^$34bzk9wkTo>jaInBKN9xcDRJfaDyNJUbr zu~@tYlpalxi(TbHViU`uadwqMD(1tOKS;tBXz+_d>(bD-Oal%yiGwE6Fq&#A`5&lF ziaUlN4SYml53=CG9{vH+ZA3v54bcP?XaNc++ykST*uoSvF@=9v0|=H-#SkLq4gh$8 z7hUl2U}mD>uHp=iwn5!NzM+JL#DWYBkp${!ibG}y+R%vzi9a;K2b16dX$Au6Ml}nFpQ3W*gSRdC$ z2emaj1Sot#52nPowShqHEdbyN9>NCzzVL-L0ALaB<_Empq2@R^z5n0VPAx&ye3$@0 zBMSS3-$~CA4~T?A39Ix68?vy|#?jP0i(aK99KDfdiew(A2y5j#{f`H48lHKqDr9E? zYEfTg9_c7GsY7z=`=mM|t1c2;n;=bDM}*f4$@Q+~(2o|EG$O&i$RD=;1t$2oA%Aeh zWivZ%I+z0hl5lsH&)|tOcsJV)srx^+5#O0aBMNC~h(TL%j&r0V0MCcFyy=bQe)K!v zK@j5gGxGNIM)z5UiJW3Mk;2*|emG)vZ$}U27VJW5| z6ch<8Fzzj^AryEcDdJ%sOrab0&n`sH6wsmM7z4iK3*{)Rf&Z*%F0g1pJV#+dryuSi z9w0`-#^e#iVi{tuA#|`q>@O934lY^@9q1tpyw!O8w1>cTE5#PFejpcU%j57Z2#+=0p(A`Z~NKuDp<&_Mp; zZrY##9Oi)wB%$h3OCOX$&G3vS6sXVs$BvX>5n;j~V&SC{?;aShAEF@(7NQ%nU=g89 zB4)zlw9`33MN(>_OAqu5{2C@kk$v(bXD)9RHND2|{cdt1+Z1!WzPDE25yM z{y`Rw0062@wW0t3)a(zOt{?R6Amjl6yzd~U;RzgqA6x+dj^GJ!NVcHi2r{7`?4b*W z007_s9j3v@;BMah;Sa_U4VXgTgh(06F(dLJzC4A4_@WqeDW#O4qz1#iPJ@{sWF0av zH&7`lJmgVEV-F^*CFyD9_@d?NN%!!A9!l~rY;Z2_Atm7=ClLgC=As`$hcKpW{`TxI z_+cphBQOHsCKDqbqDMhS3J`SZ?=Yn!Vj&AwiVm`1;Ks@xfIu5_5f>|B7s)bItSk-E z#U65r{!k?<6XO{^fu}w&<>;b}SOi*9&?W8iApcgdDOzwZQSdFGp_dK=FZ+^T5OFBZ zvN6YUJk0Vj9dm*(QZN(KGBHzNVA3ySaxh;7F*CD4+$kwQ(|A@$GEs9fH6k*f<{DD- zHFbz60O&ILGBjy(QvMPy0@H)Ap*DSUFc-5)UQ;!R(m2)FFsD}sxh$y3o zG(OR=r+AGgf{anI+Jy<;Y{d337v96#9SnSw(*M zVU9@ejw-?*RH--oh!3g>CkCmI7Q!4Fi5WTq8XAclhDpC3?UFKSIU)2Pj#FgZ%!;ZsukaF`_9SGd39$E}7{to=E`bg5u(W z4zMW^SYw;I36Hj+I;_Du4r3ZtAsN)^Gw=e`jxsRnfl=T|`Clp&m9s5+vkj_M!;LL77$^y7D611ixBQE%XlG~ zFv1gHq9Mki6>=dH6u~{p!4uTL4*xuXMak+}lmIB^;S;XwEwrl?xXZijD7?l?AN;|* z$lw#wD=FHm9B_kNqku#m!@lTCE-LRB5;QX8=^v0`77hc{O3^Kn3KpWl7ci#@kPp0QG72c7HhN+s5fCsJ)Ibq(Ax@_>HpnFa@?h`^uOSG{&=5@t6fJ1~0rDO#(oWPP z@Zl7W6d5>yShE8a)&Uw=ffgykk`gQxpY~mf$}2_nF-estSZ^UpCiC9IRXg-n4s4*v}EB8+t*qJd@p!B`uDAN;^5ixWlzfDDFWArQ`^7OvqQ zP5=o|E^stZ_#wYc$*T-BG4R0{SfRge0WemvS2=A(}%2YLEYYfXVO(P@|{!AaJVGQKrZYf&!xj{j^v+>8F{o^B z$7=ooWoXt$*w#K^6)t>@9>C!|=k^F6Z40!K{i+Wl_<WRc1dlG1vPzC(h$SRA*+e3;ax1eSL}MqvU|~~F zVIw8N9*#gP#}*e!xl;mIl&keBBSS9fQlOI}os}UO?w2sK5T5IpU&8Ys#`Aq9Hl^eF zd``2XHCi<<`dl)ard5-gXEUZz8l+JUc4fDE>KUeu`i<_CZ*;n*OYNpJC8wF1EGzS< zf4ZvUd8PZIr4{Iu!89HLcQvA~NmfmI1ZBy;1W4&oYwq7D|pi>^V#A)(ONRKOO& zw*UMg3#uUtY-=H)p};s|ySE#^lA|9k@E+3XT{Kmi+~KqdqM@^jDFR?qZ2=m3byJmr ztNH;!ZDAHBup72wlKO#>sDZ!KnIdwS#Sa3>mAoOW;TkqoovpzZ)>|QnUsfEU89X0@*F%FZhyxt0ru=AjW9M;ssl`$l09CP5Vd zL4z&A&j*3IwgMK63$_d$(G~r0_(2x*V9`xN6?V0xw&Bndozv%m5%d5KqQKvtTu~?D z7_eX=uoYURb)SyG6Qm&*6oFpm!4m?2RSV9?m7or|s}uMy3;IA867L_x;f|D@+5hS5 z9@=Xm>|qE3u`mK49q#)3l7k&#ycg|X%?(Ohq(elPhqGic@`LHAl57y z#A(!w0n<25*^OZpRsp~OgX20j-se3#gp{e)>^aWeEiN#M5?&wZ%f9B@g9f`yXtya) zrWJ5kOm-L8N{qy6OvX-3FXW8Q?Cc*Z(vZ@0L|@?u(0~x$88$+`&U}m?U?CGmAqr** z0xImmh99EaC4x2-f1M5V#vL=fs;H@EaAEXXa-SC*W(=F08;u-t^3;5R(z!4%c;lYW)t?c2| zDcD+pA{PEkNBaSV`(e5dA`{5q@GL%1C=DDEAF94xAMy(wl49He;$Odi%4Q9mhU(rt zW2{!Ox+TyWt5del=_A;1SEzpaj4}J??^Lya`jnv}DG=qri^^bKT>pu2l}3&pL5lpx zirGM8w|3r|cN3;il|)|_O=&bK(xpR{Hf4JBsnn=comPdK^xf2#>a2RjnsUr9nEKG! zQM46oQ*3G55`FY&CA}tc>NZJrahaU2{oDl+sBFr=d_>Uwn--)b8h=}~O-sX9rC-2; z=Mg%xCJJO_iyJ?lx8=*4FGuKH9m?-aE0UZUJ5G~2%{^CzPZQ;LE)y1M0yBMDYRQpO zaadjkIF3BIa&7$ryb%a#(LYIb2I?X+5Sx-~N(>MDo^oYB@Z`gX$Hxg>KYymG@nba- z-zjYZ-L2a9y(Qq2$P)hJ30^q6pwf>#H(7(qKL6>&UNr-?RR11%)}#lXfg>TPphxSq z_ufbS@Dx!f7)BVLH}{xFVu~oPsA7vOzUX3%FwW>AJ2d`N&W$qaBNmFSjG^O=*90kJ zKX9cqS1a^@L(hr*=ryA`K`3a;6#d{+SU=VT(T^=@Fec43Xrxq*Rxe6PrIpG+p`IpV zdI_eOjD2#>IpqZK-8|{ssMLXN&c`wMjdMXgHIHKMP?Lw;Jl;Ed^j<~&orihGmtr(WB(F4!=qp3*zyEA z^K>zD%&+xB$P~cF;-o)O)aDgG^_=l&KSDp&k0xFK8KE}sOzk1o5B zl!+q$jFVDu7hS{;Kg88T(xrCy(Oe(UB?1y8N@PI?b^^tsL@O<}Y9*2Qm~zS~s0b60 zDXiFX3OEA!v&$)_FgGkKrl4Y&yQXkrODOkHU%|F{njtYGJ=sLQ3 zFWS?(>e2YqIz_NAxSs9!?2-{gJ5@g8Hbd+|Wb{Q!PyO`P-)N(YIbL5Lk7Im4MnBbn z--qSguQ=rSDR$FD`vTDuM*DJjr%(KMk%%TiXpHyA5l6uB7hCKhPGjoFJY1!s{Bg#B zT^Iro009Ja2#|pPm`5A{Fa$3!2P9`80>@r-h9Lj|0EL+#pv3eKap(aKYXE>J2Ev#r zrHC4SzycQ3P>PgLLk%~yoNlNPK7ruFhE%|U-t1;6L|KI&0eD+Vbdd$Hsf8aGLm0wd z;xwoPz*`pyR#F0RBDxJE9!*q90O&@yF8|)+V*1cW0L+NStsU$iZ%m3wPGb%LFp7-< zGngO!)ki@7Q6FaFOIHF3uz0Kyk@{kbAOT4aqR@kjNTQ@$@RXJVO6QMn91ma4h?K73 zi;+W_M?JS3vk*>@!$np4r7w?Z z%w*0edo$V|GM}lU^g(l)>N7`{sJXi%@aC5XghL|$afBCQ(?xHjC7#OY7JqzVBzzns zDIeKRcp}mt$rzZv`jN(W#&e(g?58{XVb84;OrHNFs7fs6PlNIkHAvCN6%*PoX0~%4 zqlm;Lsd}ybbpNCx6)7`SP$Nc)2PN&s#Kk-RbP727p1hS)MF`E zuL{<$ezcslYz|YE+SH_~^{i`6D_hSR(5eg+sR%=BKM-oyw&wM%Ztd$UFey-79BHTa}rrdkq)D1~wkp8~1|zu7aeRW6fD9o37D3xjVpc}ifvi7PnG$}mVG(@TWRQT7 ziA)URJI?Tgb;W5}!)iCXB>zh6iWaL&aD2ji0uisblNj=~3 zM=q>8U4b;`MrJcvkvQ@P=Mt8zNHnXyuG3n6NkTeCp+h1()h}6;!4srdg5mzLi3wZx zv>Xm@hZCICxO!!-{@lkWzV{2Gd;)KJ#cNyP5*fWr1z}+Nus-ksghdX-4`cX*C)9A^ zW&|-Z4RZ@W)&Y}0e9Fd10W2*Aa*Y7!q7I92(lzQ(hrsoN8oyc3BBYU`a8PFvx_bte zFFX(6{)5Y29tM_wQNcx!Y7vjxo2SC#jA6jYAL|gvCe+psQUH3pgywFc|KZ*8fcJXf zu){BUG?06YVKp92@Bc541fEpL;Sn3ubQ3VWB4{w;2!=oen4yu0%QXVbsvt%o^w5j% zKtm6JFcfw5tfKj*WFCtW2%i3ti%h8D6J4H%Ct86GMJQq)_O-5e{NaggctR0y2I#cy zpavj)C%}SzDj5GkxH|MA3yCnG75V_hQi($emJ>%7OqP^+WT6hZphFIwp@c=~qHz5f zhY|#WV0`?o7j!6&Is^BK)m)?;^|;eYlvbOx1VT6%_Jb#Kkxvh69K@*YxV}^y71qX6 zEGzlZK1%VyeZID+aDmBsQ}Ku;0Y}3gCDubg&MSR5k&!6Hz%@$ z)jctWeHcZ_8+VGgkJFq|^&>jqmV$zcd#XoeLRBQngy6md3BC105~cD+7XFT%d9b@5 zp_;5D$~_~0Xo3%uRgpNruuWN591LYpkfBe1XvikoJd36tkE-1dJA8si zgn`n#7YLME%;J;y0B9czZ871WVk>E z`VbEPmj8dHB5;Pm439?=3)WWn00x8h5)!yU9#?lvmVp{4Vpu_9H`NbfaS@MJ4GSX; z3*}<`1Y^F|1YuwosW1>Sb`>>-b#Br%b=D{Ua0ZEx8c;AAQBXksB6Ug;4`$~G1K|uq zCJ@vhc0!>j8#I0?gawA-2YpZvzJLWOr+iDcfpv3PGu0f=v3Jrz9o8W@>!uz4Wgdw~ z9st-6vCw!9SX`2)9-)#Fmlq?vMIsV7Xut#p)%FkJ@Ik0Yh^aSHs|OyfcRjBs5TyV< z-@_}%bbIOpYWmOwO2Q;g@_T#M7~o+|+fW;+u^L??9dSSh=a3HP5D(v>htn5vD3S?^ zr~iHC(S4>TeriB|XV(ws*AK^l1y#o=?bmHHC4aHNVh%=mqCzT{gDTJA6`}GA^)L)0 z5erf^3S2*d71SfGO#ER~fT07vV7=gAyZCGE~7BIkY{g0W>Ia277Q1 z)&Kw}XbVsP4)q`lhT(Kx^Il594^p=h<6sBVG7iIb5lM&~TT_chQ4hQ(4RjNQ#9O&2 zKJL>G@FPF;BM0pRgD>I=B9u5)0{|D68ecF%k}wdKF+xwkC}UZcr zHADrEA`V5gelVm4s3~?&cqLQV59J^Ul2AjGCJ@}lSnzi#uml!P6JHmh3sO*$SiwXn zfiO)36Hb#a%DF1fVlY=!oJJuJLy$xGXr20aoqp7TP4R*Im{cjKQ;`G{^uSveL7tIO z56E>9s!)ytaR$GjNJ*g&8TSv)SrxVg2YSFo%~78Ju!`;E56d7D!3k4*88M~X-* zm!$pV52LW7D4_~k|~^7G+Y@frW;D8WBMW;Dvo6e9wBO`YTBmep_@sB zPEnerbZVzail-g6okh`|d0H`kN)@67sDtWO3%Z+c>ZXZ`sDy^5A6kfPs;H4VrZ-xr zgj%UzYN>bnac$A0n#wOwnyI0RseVPNiz=z7YN}DysEZ1zsfwzo7yqZqVPH=Y5A{Gs ze{>G}kPdPeNVp+IQ<1B?Dyo-Cte%=+dzut|I;wvfp7d~@5EYyL;t!F4rAHAD$m&<( zFbR`o73H9Xmnw*E^o0cmBT%$&(GwEPa0(tW56a-KNX8=Uu|X=5uIuWm_xh^Gw5rM^ zUgXsZ#P$hc*-Nb&BkR=!?d2jYx+3}GBKR-_$(JIw5QN|XRVrl*uUH(W5~~WPdm^GnYNl2svcS3^L9Ma_2zrnUFa!&T&shtSbw@Tf76IyQN#b{~!x`fCyb+8h2MtS&$3+c7k-I zisyiJ&8NJpB8cOlVx7@7jqm#bE$wASm6!;;03(!1!Lk5ao`2M&;@eI3#1SS zknj?q00qr}2}EEywlD-}zzYbf4>`AUJqJjdFhGQm3HWdX=wJ>*YYniVxRJcLy41MF#E1jY2Yqm2 z5G#q)bh*9P51_n>_(PUEV5!I*02UafI@!&1)_mK zrqUP}fy$*|L8IigwuN>(0~w5DO;G0wQSb$@OA_2B%Q|?3$~U%`LTLg=D!Vl!Mln4T z5<4lv9@oGMv!Eaa;mDAjB6=dpRXxezQUA%kbjjiIXc)>%m0Pg6HxNm(Bu(Obau6j` zV#-=V1a*>%=cNg@EIU9T8oB_?1@s5D9DL#758ePH^FRcIAPHPx#Mhh#>rf|sCd>{k zyi$fke}?<^HhN6*7O&++WQBmu#X6p--w58|~B_mIgb zm{SP(K?@l&F-S7^0Cg*oGlJ17lJF1M5WMxt4}`D>V$_ko;0vh@(--jvG_27Qi4uhH zu)TRfzwie`@Ef!-63L)7^#CUEvi}8>APmCrL4D%Veli6Lku*yqlKguH6I~9m&==a| z51_y$*DM`7tqDEj4pE@T_5cJ(L@OGcpyLGa)Plk9S&6wqMC8f}|a0aYV8N;3vZ#t}zf@eXFhL~LLw_n;j7 z5IBpl2w9+ai)s(rG~_}q_8S`YbvgBE z5BEgE^PKe#LVr`WYO7_h_g!D9c2D#`Z}f~5TfuIffs5t>6gj{g}3F5;7(Hf9Ro1%DHSTf>C zjTspR=oi4{OPDVSo?BF>&aZy+7Tqh@?^-E;i-y_!rLd>baFXgQLf21Mou@nh`SWD6 z6v3cFZz_DI^wT|pT3acUlt@yaqu+GxGuqZ4m{0uzfsxj>=e9CD6_T=3P*$0vf$a_! zT$u1-!-)|uR@|8JW5L#cW z``e@k(6D~~U;)yT32Z-A&KT*zRnVU*J(0F7;-{(?L2;1&eXQ0NUm-n{eygfG4-vY5 zymAePg#S?%AtHzx{r;zxtzv&_JpU^;%#)(4{hDRM;>is1nvgm~lEKp*I!a8!H+auYjV$s`wo_#$W< zDpE2@Oef1E^Gub-Ow-IY(NyzIHsN$LPCChar%jdAsT0qVLi>laRzCTpDLMH(2^&M_ z6ce?K9tk6rN1C`tA4r=>B^9=uj01{S7(wG7eqhODlqeP%=nNuA!2}3&^l^oVSTq@8 zk^g@PNuwZJ`_bgnjOO724QRSRYp zPjtbeu4g>KB9~959mo|R#!7VEg%U*YAD4Qnhr(a{VdIwwe}N>Cd6WRBA7+&3$FNMu z2uv3;2!e#xg6au?jzn_u7hr+;p`(ws7A^>qJQPy}4sZ^`2Mlxq`6ZA~2-{={J3Ily zk?_i>h8r-bc+WHgan?C!o_F@SXTvIU>@uL+(x)?mS{cKRQtarf=%Y%5+Ai683Pati z30g*u#pF4nuE6*SfRH^vJtO6OhLDDzGZrbR?S8Bw;vRptxayBvjgq@5bASMc?fPHd=uOTA~I+SP< z5=ZEu!;yPA1do|4GEE5*j57+LkAe2p=N&q-IGtA6|Dk;!f3#>NBY%P?K6HZf6TAX&!H#~)I_D8mmm3N?Sv^QBLpUG&>m-+lH8iigg0;y1LP&IVFCo`1j@ z!}0a02^;W}6KWa~fF^`N4sx(mLAGWnYa}Eh^B}|#))0lfond*#(nj6J!ZupftrXh` z!anq|tCG0l32aGQT{PGa4(f^yW@DH;5@J7rV5=dSNLhT;#gUZ!K@#tKAOA~27ZZzN z%pX}8ODyV;1!g>PLK33bVIc8_gS|mvv?>@__9d~V1Z*m7NZC>Nu!wV{;~ep5j6M`I z4={k?7jT@%8|cD*A5IQ)@|NyQ=y;HXD0!2eSwP<+iyn4rQv zWKqz8Y(sns!HYe?pa_SELww-D)evAtK#UR*hZ)_dMgxdZXtGI99z{t!Cix5g)ng1- z`GogAN+v|TluwVigFYtpj|HOR9;q%f2L#}QP_h%@PUhe*y0Hj>OvZbWz=Ko z;}28V2Q*405OXkr3+ftb8UoOqU&vz!B+_n2%yDl5O#DS-@isRtyK(4lM@<_|~coLxp1$N$)hV+m^LNprxkgfdWc zF8?u#EdY?rXeKw2%T;c27pa&=7VT(bpzat7!Wrt;wrG|_WH*}dU4qaf4BwRlMfJhJ z1`-AuTo}R;_^^+8bO8WB00gUec?4}FjtfVC0v7-|l{4THI&l~R0G{w1X7SfEssO+d z;1GrUYT}pwh(lbavLpcbK_Ro%u0r_X2P|NL3VxMbGAlO~{$K%SxrqWAm|GCg9kwC- zcn7HZfxd^VNo;cBM?D5o4>`pn04E6mUfl%bM6qNb579@HOETn)oMTLy2m(b5%h4;7 zRLdRZa+doszd6;<%WtYjtH#`r0dDzC^w0=BOxWf(^Z$uK8Nn+to#e2AG{hfqs6(2B zoDqkyM;|>tpFV(`<9{Ie%!XbFKd@XTBTjQ_x_E7+wfN%ZV!9uE&UB|W?P*X4%`%}* zE_X@&>Bfko3#L4Et5JQ}IbS(I?vxEH)al``1&QA8Te+_F_XB*Yp=JvL|-Q4FMCc51=jj6wVZgQjh(=iTROQ=n3 zhge(Q)uuPR?fq_irv%J~5_7)ko#uM```+^&c);fr=_9H;-3wQE!x>KMa2saa4j+xV zA5QU$XS^kcCAh#n-f@r{T;v5O`ALk8CuEo0+W*WBImsWwQU$NzTwpGse2jVW2Q&fZ=Cga zBl_uMKlsKIUUZ{yC>Pl@5I=a~hfMtIAK}OZ4>Lz}yrW&=Jr~T+dj^hAIPM;TBK#$V zzB5NP;SP_fCAXW?2*^)3?>4V_N%)}-U@zSuny(Xua>2v^ZlVmH$V7EU=7(H7lQ!6Rh(!{IM2>;0!Ypwyo1O15$`c zsT7{5luIcSfA|$y=z_BG8cQGsF8`>5?>PfBXojg$h%g+(HK`jt{0B#bL`n1qO0>i& zm_zDAI7thDL;w{sA`A*y1V!TqHrOj9B#3@^2M*B&4v7agP=a{SKW}ite?XX=fTvhX z41XX5KTr%=5FeMZE`|DqaVP_lK|pKF!37+(LVBdO=!5^NB<0G$tm%hw3?;>w2D6%u z61pXVu!U0WC37GGib}>lyR0pMf-mTTxM0VAa7R@FfVzlBE4xNSg0*G}05UiSY_NiC z5s}YREg`&@fnbA9(1&Npf-Fb_C19m2$c8LngJ^KVaZmz+Kp28}$kpN~UI>$ZaEF58 zhh`ifDxf}7tVubXx!4nt+5b~BKN$%BvA^D{H{jC;dT4?LVxUwQ2;oB$TL6MJ$VXP` zn^KsEI4CNAhyqE7hq79qy7`1}7>9L893Ys=s{9_T)XFD#!<$qSSaXSuP%ScGKf>sT zai9Y!02MkI3wucfdjX_=aSb|1`5P~sZJP=+T+qjL}t3d2W0peRjX zf-iuB*b<0=u}2uJ%`do3g2>I?>`l#_njLhPfd~L8$c0|04kww1PpAieC``7nCVe=D zja;IX3BrGfkVT+0-v6mWfiOwxv`*}_JcYoAC@94;8JSjS4(k~RaqxrSVu)!_7Mfhk z{!~kNt3xum!vI1wlj@A)1C53Zwm;l8nzE^a$f=!D2%iEfGLZ)W_ym0rhv%4wEtmvh z5C*;Y12pi3Vvw?ea8LLo6Ay9;{_#){7104H(G#^v0M!RnL^^_Sm^uiaF(3?bNG;Hl z#l=#Bh#AJ$dLFb0m{I_eRXogLG?*ZLEznC06>SV&h@&#tzkk?-hq|K}9D=e*PR=Y- z$M8&r0L{smuIefXrHKe|TrTeduYM3O@-naSO0U9@g(#S>Okf;1fP*T4f`5UAK#hYV zcn%nPPZtCLNB?D&fA|;@k1&Kr_yZyU2YZMDJ!k|%7=rxRnS9;Xe*M>g9oT}6SDjf-#2T_h z>xCT|27!o&bD%X_i?fo*1-a|ikLrhM!&Q>KRg+yG0bLUU1z8bk(37PTafpOV@Qs4t zhEa$FQvVo-T#MP6)eD=&S)F}Zu*=Z|aaf~;SES9xp()dQJzA&DxyobNlD*NXm0F=? z2wu$-t6jFM9XQUbTCl~F%6nR}OJzKYRIEaObr0d$Pt=q7r+M7&S zlUUiiMKiml+rEuCqD7FhE!?*~TzS>T&1_r4ZCqE2T6z20T(A-%qOp3IRrC?Ec(^G( zA-;ICpMF>eehACI#aq*Tw5(kSUp?J95!Q_QBxEgJln4;now~7AuCF@^aK)K^S-a)I z3}sjaWeA07fd*wzhG;knYfy$+&FPo{3x0k=S};27@UH zQNblW4MK>UkO>t?m7^1X! z0$k{VDd3(_Sj10p1vKCXO_+qbkp^2B0yN--Qqh$a9Eh}m0$rFYu_kMQNS0-37FF5; zFW?12kc8Y&L`HlcUYG=4hy$wn2fV?RTj`rvfQBs~iER+mkNt-;fC5qg1y<3A#9nNw zil8pt1F>mKcmdOSk!X9t7uDI9e)*Sx`OU%*V7sWofhpHk5a51*gjVUO7 zN7pM)59L;tc zWe~7}Ku543Axu7u0N94PiJQ5(%Byf!!pWOO1b`{v61Lf^C|EIgq40aK2OEY9ST;i@IArq3DYQTp`T!?Y_10Zmr-#vqf@$@c`$GXXe{%VFG zXv>#KqNxBqCxRj=DlIWe4BHM2;3f!J+--yLZ6KM=b0~*w77RF@418b(KQ4%QFa=hq zhIu#z`?CjAn1!A&22KEXWXRxYV1-rKhXuYn5Br7)-)>FrZby>9rXdIgjnin#Bz@SV zPWmLRN$*q>78t5JU6_S2!MFEuiw9Z{E(e8HEUl%Yo<=2x<_zg!HU}e z?5Rj`qsERLKY9!aa-_(TBu|=5iE^dNknCEPYl%|dn3^^F?Q>+amCTmcda~@-tqIYB z^uiF8gRY=HIYd)|gw_SXkSD+T;X5*wNw0tY{r~^~CrYV*nuh#R2B1_wTWAXYfmBdj zoFM?7^uk93T|aA2yn+==)+{7~aXt}Lbp!wtPX%Q~8NwvfL|bb~o(15A%OZmQ&P?e? zke@0zW1*mv8n*F2erLXfl|(S}=FZdB2LAxC=%2d)zJCJ`UXb6r)&?u;L#~`)a^}hf zHvboWx^jK>s5@uQFFAJU%e`m!4*h%dcM`$tTSp%G#b4duuMZDjethuu=ijf7f4~0z z^#6kw&wl9uc0h^00LUMJ^`OI@fB9vHje!h8NRM*#^g|tm^XU^$MS3Mz4|3N1<6(i{ z#Zym#Ac_d#bqW$xoO7B4vDAU*-9w%%xk!i45ZWZSVnt{C63;!+)kEWVzV#EFlD+{I zk}gU>31uBk21TWnRbu&%Eumf6WtLxh877!xR`e1|F_D?3l|QN3rcC$%!IzkGjv2?4 zYPtdiB8_wbMU5Yw!PA#ZE;(X>{G9VnIqd(ObKQauLi(trhBDYsijh)^DTJDGI_ajK zLi&!O>U5eZsN`W|s;Zx^nw&qQ{K=}UrOryCXte?eO(c;7aH(>tfP*QaOVU}ao5vcP zEV9cg+bo%8ri7-m&9XTyv)5XiEw&U5OKhvBej6^XCzjoz3}229Y6KvyWDR{cFW|p+7djl!386HFiX&qB(1`8R{OBT2~+%V0RIFG9KZqG zt8Tv?^Xsw5A(ISp$D*=IYRMmOnkvg9oBZ<15AGW?b{P*_vCb1!cBO_K*jIB*_SjXc6978^pItWB z0Sv))+jE-@T-5589((Sp6S}ePzr!AU z?Z6K&{O-jgf4uUY>6HCh!O_oFNTsXu})g zFo!zaArE`#!yf`sguV-6w^&HTBMvJd001HR1O*8I0RSul0001=1CIg#2>$@H1sF)M zpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%Jjl-BI)WcBhTKSUZV?G*~X@#B)A_3LQ#xDA0>Xi&pHZbYs$_5uq|gnT{dUrdYFT-O9Bq!>I|& z9R=&Ptl6_@FOs!-c5PalZfnMUOSi7wyLdIu&C9p1-@kwVCBxbfr2DV9#oobPgn*BrXe_&h*$iOmc~hj<;K?}^oUJO9kSk$m&>=+mor z{B8Zf@4Ce=^wLtk`}_D4PS4N3zry`8bzx98#3}WKLd0MMAVq7;w4i?wruSfk6s80p zO{xF}3_}1u*j`r`HZ%!L&@{ARg(#+|;)+Fm$YMhRIfPA40uDsYi#X;OVn%r6h~k6< z2?rB>HtmPVKrR-PB#Z|E*(6EcI9bqi-e9vMK~gpqqd`<+8NikY9q1*OK9-r5i|u7; z(UNAi+0}Mz4z%4u`$f~0nhcp|5Sl?b6BM6ux+&;p4qZ9up#k`UQ57~l!;qct4KyP} zH3ncPT~-#P=S3mndC-jxF^bWoh?ZK{oC|G(kf-{Ynj)*8PXCDzsR_|q6Q~cOdJ(7t z!Kx6XPa0HAL_mV6)t1J(s_e4Nnq_OVLOl!Zw7ThfkhKCdVxE%rvK@amO3y ztWV86_w4h}2eJI}&@Oun^wCHst+38FH*K`iP)99wvqTGBG|N+Gt@YMrI?Xi4T!$_8 z*!)>-cFR_it@he%7x(qoZO1M5+?`d8_T6+ZJF!oD5C7D6-T?pIl;AKCo{`r$Cl2`H zj5mJQ*>Fcz& zRL?MI69-z~}@~pS(l1saB00YShtv zF8^5HP$uFpPf+lgD`Y+0+KKBK0c)oZAFLuU@S19Tr@VlGw4wxVF ztuG;hdm#&#^^5N9u6NZ?geN?4LG=+N77#H6O#i?^5FsMu9|;NoA}p~Fe#pWQh%kf% z-`6{R@GgA%z{M+YQ9@o2(26_rk4#R*$ zF(OLDfrwo6!yb(21wIT>jecxn68jjQB7LWi5{i(31L=qH&c;R-ow1TJ`-B?ofI%zf z!VY%$gu`fZ$;+uC6Ykp}J`fR$b@UE{!Lwo~i5Cw?;zE1{`3K?HqndWVXzsIFoY%0aYa}P&wcgiVi$18^^ zDH+nlbb2l~>*$^$zyXd@tOFdoliopOX#a_Yd`=fWOh_TLp^!~TP#^pNN<99-4}37f zkG|_>H-YiUEQ$~zU=$)it z+-I16%p*gFAO#V{5s5+|;uZTCUHAsF)`3`&nG4zF82=~Licr-iv^dLM>k2XsQp6H) zJ&W%G%MWs5#GK~jYkJnnm4^k7v5J)q^w<}G(AlJvkTu9g=Nj40#?7RYn}F3p z+Sji3wzK{1ZjU?M=PviKXIJWHA@S06t~EIOY{3#PPJ>Avc&{6tn-K zqU7J`fQH=mRio9M6N3??{J`)n8sd@c$wA z@_#_{cv3b>GskyICV&dKfDG7x4)}l&xE{Zk7xHx%6&QgS7#o2Veh63`YLnp>jFb88tW)4W@(5M-jnfD#YW0 z6Oj$d)GRJ#gzcwc648ScCLR*h3D<`aWwwK)6L~w=a}SYOjAdmNA#+w&g+M2J4rX%x{TSGP0Wmv@0! zJzkNBbN}dCZtEh#cm^G(Shqw_4Em4FPA!NXa64Un(>E|Asm^YqydeQL? zqc{e#k&JvnjS-QFZMYRs_%tF`N{c5-1>p+2xH(YaOuv{Fr8W`8D1gm4j!FTF&BJs} zxOBmm7LHht31<`Kb7f%Y6N7j@TzC*@2#>xOYE#yR{g^Nl=#FE^FoAxsohd6k_O+EqRcA_<59dM&v}0 zW&c={&xC^pIA)$_hO*caUZ{&L7L!JKlz`z~CdZQiiIh(Hlu#L!MNyL2mXT6S-5SqQHov3R~Cj0|2J!Zc$P^9lkW5(!vKSBS(j>)36&)YcFA30 zX4|TAYZMJ{Tr7PGdn8gQ_jkh;}iI`jCe@)SshsO_k>6n&;AA-n#aA}#G*_qS@ zlOWlJMEQVU>6xZ^nw?pT9as~$7?3#$d|;VAV~KS^iJG=~o9(ihANgdaxM~uq7@4U$ zVu+KYiJQiGoKusTGntKi6PvB~R>H`X(y5qMS49NT46Tql=dcfLC5ubRkH}dj#{a-q zTGtZ56JpVcLW=|u{*Vhg#FemAgq9$UBT0X1pbf7S0I8QdxpQmbnG*5=pSoySQB|5G z>6#WnoC7fnb%mEO5ldW_5#2d+(D_ynkqKk)36d}dTxp>LQ4etCq4p^aMHme`qy{?V zpZ_Tv^#>EmCzOK&Ljt^fI;050CMmMBpLvZ5CC`33y*N40YDEr`lA>`4muhD zB-#(D@C%O+qyy0nkFcZW_z(0@rH}AxS-PWa^-AvJ4Ol>;{@@3q1Ps5>5B}f@&NL4@ z^a;cxN$#l#zhIyE`3;^xQ2*c$YS5$g;0fr^JI~-}*pLgkkO`lVer~D=iT^r+x@n66 z5N?L?s4?RS7iWza5e7|=3aQWpftsVeAO}rw5A@IkcOa^r8mKzDV+0WfcL1e#&^wx% z3XkBa0YIgpI;uq)267;zH`))p+6%5)S?=>z#4rX|lnH$h0EoJ$YA_J3wT7-N$3~GRI-~Y6&?t=@Q1hc>7 z3(Fb+p1?`YFa`!B4p@MxD@v)(xrMSxovS%RGa{fC5eC1Y52Y%u!pf`ust=?32#=r- z2-~T0AO~R(0O-IE%b=-pV2)I~GhvW;Su3i}6s7#IRRJKjWb3KcS+|LTtQbTKcAyWL zaBI){K1M4`)Nr(W!>3e0v|k#ouY?a&fDX9O2f@P&KdTGU=nGU(2Y#Rile?lBQGSsz z5Xwgqr;vL~xDj&D3jL}L2b&80aJ2;MwFi3-8A}iJ01osJRN6qc1JSw^n+U*qqgU&r zav+SktGm4`QN7~~SP-$9;0Py6xOK`qE!z*lW3=2v5PVtLZh2dInJ} z4OAcv{g4T@1`MWGS^QwMMil__P_y+=4t}<+SyPetuVc@E@`v?d7O9~qRn;HP*AO{1{1gtv7P2i)! z6UJkF2N)E_YupbR+XQPoM;>$yNsI+{U_i|Py4*7mF#n4MRDcCPiw#Lk1+@mbkc?{1 z3cHacxt8lYzMuw(T!+Ol$l!>9D43LNxSTy1gc~tB23pExM3@$F4|rri(Ag05a1VP! zwMM#SvOEw5^f0}gOGa7{vZPspT*wJgtit#X{eXh8L_81E!1ECA#tj)}sg-+L+g!pJV2sJ7wi0SzdsnEZFkqzY;0N=pH=-ki# zyfBwZlS@Z{i}=sfMXv^(&_AQJ^N7l0*qrrw7l;^-PpgO(og7M8oHnS?9NiMxK$jhD z77VQr7f4F(rw}m8ni{Q*e=*WCw`Bg%1yB%)JO3HdFj2pmkp=S{6ZPQIMNx4`gAFu2 zxjGziyo2vXbQ_U5?(h~j<1@@fKSA84uM-eIAZ#f!b z6w#t7kqiw{(h>pGO`!}*VGbAp*L2|zcA%mt;SXoP&qpmNwx^mIacGWVlg#PX1i=iV zc@x4AgNjWP5vO&IXc7Lf1$=#+2#pu{dM>0Z6NoJvu<#e3Z5FoC3biJ+6|o6N5Co>( z*Xki=6=4M{4I6m(osd?5II#*;osX}H61+iBtE&<001Z)4*{n@cxUCRZ(Kj|H5uLXf zS$q+OofFSJ6HAEJpmPR?S={$A)`=|?q5tijkqOv*!3m!j5k{R7iMG*=!f!`^i-(3+7nT-CT+l6@86s}K zO`hc%!Pb2dfc>1{f-=$MqUCIU8(yv(+}z{@-IZ&e)C7?VCN7T? zd4}EOoVDEM12Ml)=?^OU;1c027yq801u?AOw4M*KsGdOF{*+7S$q;@1luBFX7g68{ zTH~J8o)%}e{u>e8qUgPuOXbrKc(lS>67?|8G#KI z8c}~lkg?oJwmT*VO;o{;P__dhwrQIP{6G$ynzlDu@M^kA&_{n}x~FCu z0MPph!{7&XIu7gV2)RH+W&dgiE5EG1fCcN?2Q)ko)-VK90O*z}QzS9$rtVF;p6o(Z zqyn6=!7B#>x(sf7@yXi{a)8IFAP2z{rPkC<$BS$4a?dO_y7ko%8=Nc7zF9*$aQ~*xlY)C@XS>7ao$#IHOv9P^tURiVSs8A zleTvrtN-Ao8N0x)dPO^9oxP(Dx9SsI^)=Df_My;z?}nOeHS}FWq5tYxuXjIy_@eTLlzIy~0S6?oKm!jH z5Euj(WUxU8sk&ysR1SM2j3&^*E2(DGz|E^^p4i8`2S+5aL=#Q?rZ@ghWU)mTp)zho ztElrW#-(~;tdxe<<4MM#vKi(nACuDWMI(O|% zP(hKB@&C}H6cvg;M~Bi=$f+I$RI4s3#WYh*H|3P545z%SQ!g1kFj7SKi>e+`S7o&+ ze*VEuDTSU=FTlBAjp|IJ+9GvNp5BQkoqdAhN1b@w%TB%GzWb+~Pf&vu*Ifr?sxGCB z({(6kQQJ=<%P4I%Tye)GH>!AY@r1y*mI~vJr`F}EJx>(zgeJT`h15QLhte*ob3Lio zC|cA|!;zq(A-J`qLJg`O?bsrQ3T@(r_g-uBW!Rrw=%r~ctszYl(f;EDNfpDz4zw3 z(s_dVo7?8}c_c(~3_8f5J5u3^9>xUYshU(Cd&IM49)YY0jXdTFY;E3B)gMpLY3mu5 z{@GZOPgKpu6E)~H`Xx^!c{TuVKEZn9j@Ru6moe@+I)HC7Q3SxbJc&ufXvPqcpJIsb zIDm6z_r&UFJmG9~p3tp6D1UTOL=mh1DQ1{?0hBBJ)p>_F?zBY@pY#CAKmTWJh(Em? zPg=<)07dpe9l*dLqSOVzXZ#R`)%x}zMNq3rcUxct5#$d$1Rx%|pc!-!f+51>CI0}u zc+9Zqk%|ggWeugz`Z7o3j00tIXfjz64q=r}vK-k8L5zL>+P=3Fh%5k9+Ln zKe$maIQBywnIIVU_VdP-;7T>0$VDAcV~rt9A!QOoWl>DQm2#xgmA{FGfi~C=!axKv zX?fT(ttHLPj=13p@0~9%1W87=Hmki1Y&|bpLr~=fZ}; z+T7-66jKTM+~SF520#~Mpr$7rk)h>zryqORoF6nI3@rEzaL}~XKlaeEd0^oe|A5aw zEb$3zs^J&W^d~icc9(u&?H{_ZgB_#+Hl~@xj{^;WN)GCYKClHB9qmUnsL+ae*nyh* zJZRhC`OVJ3Arr5JX-s80qE-gr9qIBT%eu0`e-H+M-Ox)IjOUOS@^Y932>@ZFL63GZ zi(m7|#YjIx1$2CLAn|bB>$+7N%ka<-b?`_{ZlZ=iiY8jMg6AQL=Nc>&@)NJ}&eps~ zusTT1V43K{iv9sM3_&DDeuyJz(h~r9HZ&$GX~jRVO0fUkYCQwx$NxEov4;SFrmmS` zi9-=9P`avN3E;UouwzfnO8kRrmusP=-1b7{!O8_2mA!6#% zsCj9OWZG4;Vt#X=M=V8YtI3aNXtAIn3jj6Zc8+wMV;{a4t8I4D7HYvqNKql98@nn zc?3H2K^WBB!>1uh3~(KikcHHYZ2_Q&MKDr|fpi3)%^(R(l>f$(Rw{WW`oJzuoYBC4 zka7xcxkeB7p}!sWF>2f0uOjrJD%X%X2%YI-a+JIAoX3B`n zXe&?`9_eIvUa=a{1OS$ImIdHWRvRkb3P z^XDCrDsDWQzL7EwWIp`y4{cSxcDA>DO%q~_g+gqU4Rz>NrdklgwgRu_R3<3O0Fm3n zbh4EHT=0iqR^iKXC;s5*5v3S=Qm$dc=oA+$VmhUk7L{}dGKEK3VLZ|cg(`hu9r33} zed<-e`d2ER^{}5ZD+Q)vywa2}m!1X80=l>q2CkB)6g+F}a7hfxDxtZ~m&nDA5 zX!K5T{qi-{e57FG$I{3CP*!`C?PuTn;`&>ev?ql)wq3z$K}v z=?MS=gb-o^zzXz0l8L?#T$N|wi3SoJs(`@H6TuZkv87`{PT>df!-@#$z!$W^Kxq>L zgbM1rK_wZ72GT$jyp-6f=OYnAA-Y0z#7FdvK!n5B2X&xAY{;6cFda*D#Se6e1`GfhoI&AeDyz6Dj)98En+p9=9rTl$l|U50 zN(z z!WovsnKe0BoLPH>7zzN%p&a_Sod3*GyP)tKo(LW75s5fTo!V)g*YN~In}^w{o!iMB zMTnk8v4jq(8T$g9dHIBfAT8WsNhqNn1^Tyx6CHr58SX(Io_GdD$OP?~Mn4#Xp_Cn_ zH;^h9AmC!WAAqIf3n@C1c9r+w%rtBHns;t6+vgR%Tg0@=n2T@&#L&ge3y zPGCT+ILoL|&L$WZplSl4N|~aH&Z9C2rDCdKItr*7smh|NkK&1wWUS9znxOD1u<9e5 zkTSai9EsrvY+$0u3<_UR7>XjSj=`v6AQ)sq4e%V&ol!K&?1+5}3SJP>0B|#(S*z&6 z0`5!;K(eQ;>_O+m(ErriP;TG}bnrhljSA#M%O+@u4hjm#;Vqu(mn9%-(up;9*k2kNq}C^OFv>8=}6rra1)o{-5uf>6Pl&y3oGPvE)!?8&dmw;L@O zjhwRw^_c=4ifoc2+#oLo&9?_7mT?%=F|5avSyMIn8`!J^M{uOFd_b*02p7Y(7*op{ zt0f$}1LHud^H2zeFp3~cv`RHH)IhR9Q&eGWGA)`3*%+&wXrKVFvY;S^F{p-`z=Dt< zt^RTku+fND_#MJB7-}dQu!#>`C{@I&2l}Xo)0$F7I>m+n4QZ$cP2!1js)u(#4SjI4 zcz_5Vl7@FsBL6bg)S#FK0HCa0YD_-Df_&WBF`x<3 zDh-tA2U-v~HNeLGz}iJK34Cjfep-!lo4AD&#+N9K_^=0j!-Aa%H!2vnm&iA9;F_b| zSWA@Cj@7>qMN6Upk1R|I@=zJ{IEwao4}(IwP}~#aC=!*))kZm!P&|{y1-i(ax;?qv zuxylg*g;hpI~PO~eE{8}I9gfM+u!ho(~YT;B@Vc&5Ib#(x|1MH5INPgUE|~1s8Bq| zgFL60JpWYk#M>2K<73_7HQwX35;W9Cz|~#mH5oL;P+CCV=@p9NrQYks-Z{x#seoRw zU_=J#-s}}$x3gX)!Mosy!13J_LGcHdyHKN0#wpA~QdyafMbquQ3LoJ_qgb2DyO~HK zM50i^MpTM<7zYAVo3qK^Wl`S-Uc2HH3imMG4V)INxS3mo3lY&fzMIM*>4##N;Jb^j zrc2+cfKq~qBVDP%aQK84&RYjo693!0;CSETU{_&XTsqX4;t?6D z$p5Mc!@6K74rHHddW(Lj92RN}$8pG@IGl(K3W_WUi^Lqg*qna3%~l|-f8vK@fS!N2 z9q;%DVEBcRgq@8zN!6i@X*3^6h!6W%Bt>8eo`{Ca0%$^;@%Kr2YkZ~jS)%M3hP^&1G_#eIxt3t2%hpOf(V0N z;ER3WhY_j}UP9RyN(6qm%e-`|8^wYIMJa?rm$-4Wf1m|Ln9p%=A|kSyc%V$nB&;67 z1**E*F?b_}lP=MW4|9WClu+l_$pvW;4{vdrQ3a&VqzT$|BHK)+-1M2<>`ffDW&h`B z-=;VVvFPQlSf$hb*!>XZ<4e4D$=^I{jvi~lMC@GunKC6!up~^y}NQ$gNY%pX$lH* z^4YMZ0tdwc?~qUmrQZ1Z;sstm1PMK_DC-LBXny!;`m>^LK4Q2?4qP#5KE*W?MN#ok zQC({bq;gRVR^rjL1V`8>lTZV&Dj1c>1~u@5Vc;~b8VDsF2#P|flJGOkNTyEqgSRrL z){qE!l9ncA4}v}=bDRfEdYxejQ|Yo;KqAM9J`n_Nka1Aoww8o6rr?T+l>dt%X`!zggKJ9s-_E7{R}M7hC-Gzrh$kH z8ppy;*w%RJ{)%eJ42o}nAd`Tu07D6;j@9`J09x%45R+|8K}SXGLo+6plKKSst-dFg zA!SJ|$FhuK?FYRWmKfs)8so@i{f8Xmi$~B0goxIfk&CxDt$T2r$80DytA}A|2vT@j zUBIFxYYFa5EO~8+ed>qP`tDq?G&iFO-{A>DyUBimr^phI-Q*270tbGWx3m}uv_*+c z(}pj5Z3qp3jJ@0a)|4{>X)aB;JXps&MV!u zCiUaE)h0QD>n&g4a9s;|VT@sr61ECk@Pcax->tCrW#>Zxp5a}7#7c|`{MCvnCJNpS zv27e^`Hj9agm+-SmY927bSHT7E%?>*cV9k`exKiWR}qKz$N&314!TizUH0CqIFpP% z_>JfIj`wdDS@)8Q?aT9ck#An^HERMs`Bk5I=;-fE>As?f`I4vkn(x5_LX|s72S~Ab z=QtZ$CyM<&3MNcG=8YFOgm|WyhjOrO8vb{ce|gP&6m+!rr|^ZoqU-p_78thhU z{si??Y2a=ci-T+qh+qcfC1dX~z?Tvbg{0$I3xJ1Aod1aQ4nD3NySPX|UMR~Lg*sA%w9w)kD#?tRm-`2Z00EkLs+LPptAUxYc=B{l;5bi; zN(uDm>C-uh-~wb+r0AEx0Q`h)3~BNt%9JWsvTW({CCr#IXVR=`^CnK0{&Mo{DU;ty zpgxBZEo$^A(xg58)k!I-lTw`YnxOl)tcgH50eYp9vo8R>RFA^^>lYwZ6FI%YBnm*T zNvdUGQU&PuPhZ)80p>9r^KTDGU|3pt!U9elmj3{>MEYqpE|(fdxi;2QV`rF}J_7e( z`GkuKI>lp#<+2kxTIXC;5@J(>g^HR_0UoPSluMdQp#l7&a;-extb^v@> z)CeDAQa3&|AWfqFq&gurDt2=DaTEY?Xv7;c)yXAkj9KAo#z^x1tZ=SRU+2|^EIXd+ z+P(Yv=|kF1NY)H7g-B5ucp!oa%7mMON43=;gb_+OA%ztt$P`N11i+w$C{2Y>0r*jha`A8$j~d$a!<&(Mf!B{W zhVj!_a#-M&i5(>gl!;~mP$|%kJqq+>LjNxz8GvBFd?k=4&IO>$82j+G5o%|iRGc;^ zVR0=z0D$d9MV;sP zv0Rvb$hIb}Pu?4nyCTW{jWDbPA z-#$F?GR+e}nCAc(PdfUvI@K@z@G8(F=m^Vn0QX$AkMqT5m8?E+^^$#EchN}gJ-msm zDz`0*QQyrVx+3QgN4Siz9g?HBckNB|PJK;&EuOdWRpn zpaQ-2a?2i_LlTHogAeU-gerEin?n(vH+u(^Q#G+A;Iz=c&gso{)=ZtDqDQbyVwT;7 zgdg-g$uhTs7$~Z877`+wq#p4or$g^C z&S**WODUnKJl_Gahvudw?*M2@grX0K@`E3l(hW?%)X@OQV+fLCCr)#!)1sJSr#}7Z z?a=awu@nucMs0~Qo&d3yz4Zhb3U<0{v=(zUL3y(>`9x>Ks^6|a8%D_{dF*ufIEu!cP>ViPOZ zzCJaoFJUZHU9!>0(u}c+y)0%ktJ%$RwzHo7ENDY}Gs{Luf*zIZNl-cy+BNpH5$c_3 zohsV8;$>|%Q!Rq*($)?^Yqq|nD{f~ps^1dVCHf;=0EY1iAciV0!Tl#tX>^o30@SuG z!CG;%tJ9s7R6)-*r(@CDQ0=~cxE)LjX6^+KZ)Mfkq*bgqOST;cL1Z6g1Fo-AI;S}2z#RUE-X@9Ceo2;%thK=!yX$drwsAFjIrDtu;SEC@WBrmlM z)`^0wWd9afw@Eg#gqJ*IBgaI^`-QTT^*iP768Xwn&M$zoj3O~F*}^$Kvtg%!W~P1- zO*UgN*5Z8M4zEqc9CmI@=)5~TZ@9%wMisCstl~hExW6kd-$_I~=8)()Yl~hpq{A!e zqvANyt!lGC>Y<1%waUF%CiHci80JxD4a~X|wezx^VKA3@CPyxHne*#vDi0aI{T(r? z%hzQ~^Sak5F|(c{JcWqp5mz47z$7@BVnvv-M zdwk*|hw{F0 zx>W7<6e%qi2sC(dij;$@&HD(4k6(r7XUkc-hDLO<$K7*jH=F0y7J7<_o@_oV`r0W8 zI*ac-;t)q0=`?5OOvkEFo{06{CSfg1QXP{@Cup|`CHvJ`^6pQmw!R3biQ9h-V7Q|w z)F$!yORnZGGxP3wx_-H7T=?J??X_``z)ZvC^uKR)!MFa1^>9zxZh{#=J2l^RFBvC0pgY_VTECwKQA z_6`X>(vK2yB+Io(vFEP)@d)ImB>m@~`k(7U5A)+U?&1wL4;?+bkEEfy1 zmpR?WQmD)YF5r!U*Qsb94X)DwrGzf%+mD%wjQCd=5KgN7L)Rgn`+eS*{QpB3_zhmr zgODK^N(>=NIFIlQOMSstw8%s;G=y<@f(v?)bOc*Wj7bj4mB7)JC7hwB7}!Y=8>r~R zBP>H35l$+ciyVfAj68xI&_zgu0f)%ZP*p|Nbj2N{!m8O;Dzt)(^vD_A!5vJ;8Kr_Y z4B{Du0kVKZKYZ0A^a8Ma6|xXcSpeeFHJl;(VTyDZD9#_T@L}}`#4@;IXskrT)YCyI zf)ZgvF6crg$Opjq&0ctdBz!_>e1k6z5J>PtF(Ay$mB1P&HOIE0@|;KDb}7^ysC z@q7_KM1x4=0y;z^OiaaGoL~SnAwR%Voh(hVz(s*jA&R5|S_n{GEdPx>%E3dZ+Ofa| z8nNG3G0hqE%F^5eIi!NK++mGyMHoB+Q0T)~^#UDz1zrqctZ|7wvPfOX1&uspL@Enh zI1NZlMJjxiAF2fU2!$=R!a{7sA=!o+Km~93O(tE22^B}7P=Pe?gJ2MbVdxP3X`@}m zn@eN?P;%B6?L;Rq#SC`JhxEf+)QO5r1#ZZQ(iqD*y38mtNcbc~wQ<<7wBJHCkqHY~K+AE8U}(r;6EwjcoXOH)=Pa5e76cA`Oh@RfNiaQ1Oq#@R_(96pO}g-d zCCG-ha7$$PcxjPXm^GPTbM*OI15V% zX2%G`wFH1KWQlo>VMvI_Ii${fsKGUGkk_bA*yxaD;{WGL93j3H4;EynE&rXiUME@}>b8c4yUqm$+AF4RD?F-% zU5H&E8{Def?_|QD~5g>^KEg%we6)R5NAcP1jUkwEU zdMr?VNSn%&p_a-#rB>`TB#_b0u04W;-XDNI(sz}`&Ej80Y1BW^&IVFrNa#b#7Ux~u zLvQ)2UF<4Ys22Zera-ZfBM1~YtrP%8ErNlR$zs-hZmr{eNK)(^wq?bG(8Plw9@L3# zROG1F2G~|LVB3-&nf_|N!GwP4h8Ffhl5VE!mE44Q12D#|;0`X~7Os+tWApW`;o?>A zSYd*UEKEQi;w~=bR<7krK`5ae+6dR#+2&aYUt0@PomZBc#&OAsJ}3#N za0j0+1;Ye)c@(Fh#Jcq`UU4G^SN~Q3m;(`XC&z^z3d$P9?Ha3<+^PYvv_0IQ-6olR zniHGw7Jr$Q>7$%|aQ|kU-@@9HfiV{+91(|#EVMCBwHd=fCM@xZcG>bKTCSgsg0kS|4(LM2HUI%4#9Q1c@b+rnAV0E6Sh0Ntn%v=X zOPsVN`(2o!3W62$^@_Bv<%HfX^Hl$J?mXy7b}|Gj&DztaEBQ78FICh zUMXeU@MPm|=LU^u0{`};-Bri&vQi|oRx5~4PsnF;HfpD~YBMhB?iDm{w&~_BY_B$f zeRZcz2x8N=Zhs~=?6z;iFBy8~CeL>Gfh^?ycBd#HXuh`lz8~u$H*^E5u@!|rcqmZK zLwE8_Ib^p;cxY~CX6PV0cTrqJ6!L^Q3;_THfo7seOreB%zi(#GMDGUi zLB&Ho%oI4ygEZH~4Zg!Y5O_#v!WYDwCIEmPhpuF!H()g&hw#HND40xB2sU^ybhU&z z1Od{T#51s9TdRb5v0y!X_e%RqIYHYza6yzJ11ul|D&XIIA;T>wg+G`AGw8TU{J|8& zPIcQtDM2_APyZf9CB-t6m2E$7OYNsgIJv8gN{SN^{ zf+w(pM1X{Od4x2W#Wf5ArQgdxM1&-i0w!IAI%vc^5R4soLL@y=Sv&(_ZowzSnKI0R zGQa}MBm*=YdyUP5GT6c_*jt>(gE9yM%-I4g5UW2ZgEhdyvM0lQJbN-c#I}pWv3sLH zutGJk!UTteD_H+;NC^4mnjKxKlbNmFs+2(h@Xdou-xu}v^ty_%g*1_gc1m=3t`wm? zA%;NoPcCpru~ES%=mIve4HjI+e4eL|e1druj2%D;EsO!FlM6r4&vD2GeJBEEbONvL zk$z~yJa9)J5YTS$h(7!YMc@MfEN7C%L)e^yUf_c%tO7Lb0xBHIF06t$82v*aLo&=m z(m%vDoI)}v!zollj?aQIa6&Sif;RXAD|q`Zz`|~v0?`{oDC}xE_&hx6#x_*5K=8Sr zBL!j4Jr{k^bcczSPe^Zb8y?S@m7}1f_XCxH!yV1BmS~2abZf?R%sJEz{_ut!{KG3q zL*(oR#pwS+mTU=|ltrYFrg7A2Nn`@wY|KA=0|%J{5LCq^hXg*HLRFZ9DS(4KoWe%r zgDKRBjYqve7(+7j{w?@}*B^TTu!1&N11E%rIlz977mzz7e@nmv5YUdiQ*gf%x2KTz z*fBTlh3*%PN@I2@t4R5tUG#MY{y`(gSB!%sP{A1d%9G#?FgS-Zi~(NEv9?%7Lfkwy z)fPa^qw*`jKTDqi0P7PV;g|rK)TpVW2Ftww_^?Q0xY1InjRCk}0jJ9j!+Zd=@%yKb z;mVKrINj5S&lEaqq0j~JcdA+dWT#B^48V`oDx<7m`KzgH7Ex`}P%)&5Zl|^Y<~Zg2 z$dLcvMsq~8GE|0UYgw~r(WX_qmTgn4!Nq8@~mxxYsIUxz`Hz+t}|PXU{D)r|su1Na)P}0#L)!&vQLpSPEKl#1NN5 zYGXQkTIf#=!HxfT|LP1}4a0u21Nib=JAfxU?9Q!A$8a8&${RCz+{n*QDL<{KM`<Kle_lHf68^U`3moELsno{sM3(E48M1!n6Qv zNyD-UDXh@K3o(?dtFt!D(83N4tLH3>JS@?~6D!;cya48TEC5|3L(weE^dT<*&T9WO z4M+3L`p29g_Hn76R^F+{4?DWb1sr~`p+X~F#z1EtHD+^W49+sytv8ia>L<7wS@NTg zd$Q>*xiP?*ayD_W5RMv+F3JcsjvUcvx*K7{LaTrNNTW;8RzeM*Q<&ignNaqb=aggu zm=bY}M6QVU1NTac-2= z)?0DSl`+RY+9v?aa>eGf(1!bL*g4JmvDk9_z=8@if%AkSDje~(o=mX7!VZg~!L1)! z6w#@-VtI4+lhDqIh>CMxj0lT5w9;_BTE0_th~<# z-Q^Tcx?yM=R!&)k8HSL#g~eS^*(V-jOfh8@a(3zzKvwRu#+0JS(TURl1a+2#pBL@Vc;x7wL4pVI{7Ghax~_lz{G+RnU;g>&uiyUr4HMSFr19_H|Nn=^ zv-XXzE(465-nw@{_Yn<#0CeEe40xfb6%cipBVYm_7^?_=FM}QQ;0Hk%!ntHmge5d# z2{#D9%e}8>W*MN+5_duw&Tu0nTufJ3qL~!F1%?=0pjw{RmK64oLNBD@5s{cgB`y&! z`eWkr`k@aUNl|)As|Ph0hdh5=Ba2T|-JN{sLNU6Je=Yo>0=<|VqEi=wbktk%|U7ZhBC&5Bt`l3;+xPbd4GU0D@3OGoqy)=MeuQ3*lmpBY5FD0)%9O zx{4cC z=@w&bfd(mVMjt;)OEe%M2}vBUEaE^yDi;$>!raj?)cn~Q^7TpOtuQV`tkuz=iN+#o zGmZYp#a1A0HiWK60*bP>K1MlARsiCEC#F8+Wl9fabGTtrk7;oOEt z(;`$_zLFu!c*GriXWAzGG%VjJ#yUm%2&(F_w0A&lX&a^e4na9Lsu{q=+&5R!>8thFK!S=Vde zw9u{m2(}xUL|+4tjEm9&37!}Q5(r|^0K}pQgY(A~$e;@=Jm#SsrUM@yGYc!|q7q2B z%Or|WhgcvXn`N;^5XRTuU#J(4P3UP82-1sG7&#T_a9SJy;2WQ{SIKhl6?l)FG#}^WCB;1(J7DM9L@lcqY0&L!aYt3-W!FX6MIfXEAPA& zI-|D<(jZTqZTJi`io6~rPKB8bPxLkYAfF+-qXg-rh=VIPyI13rp?j$16^#0c?68(@85hPYui zX7R@v0Kf;etTF)i)Cg4>a#}!#R26XOrCDexOKb-~+ttSBN4ov(vk(FRQ>ZYSaRogx zd<2ZTvYjt_}Hu3U%;<8mNGdj%eBwpTGwdDzgWVWJg>plJG|wdX`Bb!3tWS z!##@45M_&_2t~kf0B(TY$hbEpd#sGxj z4)s{FMPNDFI{^BQ8{J4ZFf-j z7CHxs&gf`rKfrs`@$@4M5kK!o=p34Eocr*h0Xca@%@9&|ix_QU2r$N=pLA@x6rFBP zDKMfDf52tWeA(yB9+`u-vG~p^5z{>WH9)FlyYUdGL9jtD{mt3EbfUQ+RNO2p&#PTSIABu zzza^Stsg8xis+0)^nvW~OppH}a8BmyADm{Z_F-QL;-FrGAYKkU!l(91flXd-_7q_s zoB`$@!r16#C~nRxfP}BMf)8|!8?FE$M2r`Tz$1VSA-rL5o-XR9E&v1}3+{pFz%1+d zVe8Vu8bIrOWUCi?p)!_C8}y;cAh6Krh%5de%F+U;JP@DS@C~&>ALNi8=+F*z=GmmI z01fdFTT0CWAgyBLR@}^3Zi!fO>MZCCmXK_gnn1e{E&$pq6OF1Ra;pjY?4B~Q3D&M3 zy1^3fKr?d6U_S3Nn1v!JDy&{XBm$rq_$9$w&(l1D8{B0@Xf8N#FRvyH$dvFS=D`h+ z!03F1)-;2}2!a=`pa}nvAlax+*kElOtY8_rF6+4PuFOK36pxnTP6b1eo;D&B*N!1T zK@iP?9^x(&X-lXw5goHF6W1{S+7aN2CJuTG5h3WKE{Ooy;{IAFXABY`KPVwjgmsdp zMjXfB2<;yLkt-t`2;mITq92ZOL-ye)H$y6y zQZ4X-5ssh`6>=-NvMUwCiTGmi(54k5QK#afEXh*N76TiE0T^ORDqiO;nT8*r0TDuq zYPjpCjO;Cd3mpFqqc5$p5#;jB2r@AWb0hdJj7lmm^zAUcvUD7?LMA9M-momujbmkux}(^Esh2I_07qB11Z@^K_20LjDLZGRiE< z$alDNxfGLX#`9=41c$D3hWY^-qF@UA?}C(bLa+-Usq2l>6W*fcKFQ3Hgo_=T!!KW@ zGw=Zj?y@XslQGazB5$S@19TDt@XZ`lKU*_94}(G_bUO&IG3=lZVk!@CB_F^-Eg$>pbK#?Xz-6Cza!bC4LF7nelLqpwWR90Z>B?2HPq6=4k zA`wsw211YYl#WFbZGww>8fsIcHk*3=LAcc)G}G|(5y7$#xz3B zGD2t6LK7n#81N%9w1YOJmj*L1*wi}JY%cQz4aOC00>U)ol%rU@V@j9CcH;tAd&GR<_dXL7p(?b0Th(Ai=Wt0= zdcD(n1$coOxPcw`f!*g$T`Gdc6@qalSAuAUDAj^FxPv|TgFRS+FQkIcb&>y~=W2fw zgjIMgHh6_y_=RCOhGn=ga4YDIER5ah(Sq|HX@WR_f~pWG)x37 zZx%6XcUk#Yh+8v<#&<2uOzgS|KBd@0%xNpquMW0PR({w(6?icgbzhx0QxCR9U$lj{ zScbsTEaFs+Xhn*5bR%L%UltLGlV(VhSWKB!b(Qpq5ASu6bS%>%ZCh7%Pbqd|_lCk{}o~77G(J;eEn%+L)l5{0*kwrIZmM=YK#y#Xjpegf~X%Jq5eLij-(P}?dZFk8@VmAr9UDbwo{d7 zo3tU9w^@@PbSVJD=WINo6x!QEfO{)`>Oo$q(6(a9gjr3ELz)v=1lQ@F{tPYp`=8Td z8D1$2T3U5Ksu_0a6YPVj4=Td5+P!n7Iv0C|4wHn*n}z?tIj~`*IpljN!X>8qjGL|Z zv|Mm2!k{ub1bMNQePdLC?Xg3?yKFXM#=FyL96ZO1CQwv@RLx=!1WFPLil+l$zgoy+ zaT=jq`?MS8W^S0nF(hjGK@vP-FQh?FZAGY-f!x^8(1a={PD{3Eiy^{5xcb4TfT~!g z>Ji!;o>HL|PD?wU%C>ytsZv23SnH|s(l>hHr@-^jA+9ny&D}ytR%ndsuw|Ytr zNMw8Up&WCIAd2eH@oD`k@6O0!+3x@}8A8b_uhJi(7uw5LYGlUmR(iF4sz_wW;a%Rt z;L40_(lhX$QsL0`$WuL4=4u4w0^q({A-|q{4EW2xrbH2PK@AXszzht*`r$|d>`EN$ z6Cmu@Nq#Gzp@zm_FG7jCQRMOH%ql3|+Q@AcXa2|GywMFUikbjClKCSbPBY$}A@B?x z`+?39K?6yI+Vnf(w)7rK&^R3ZOp(P8TLGRXop78!(7=lzhGX;W8+6;o4+20PF1{2* z%}e$GA&9-dGVnzl;va~?Avg^S{$cK|0w4d(gw%u)vyuHQCbKM#ZbHPoFgja{IeZ)f zU`3`z7dipVWyQO!t>H3|C7}HdP-EGDJSE(D#yNxHH1;DNArVkR+fq>zxxVpi#2!IE z;vi4%U};Zgym{AV&Ny!)_}$L>JE+ugA8JG$(?cXlOO-ioU*(quOMW8zsZf#$L{7S zFX!*cDwx^lkDe2wimF(H+KN7w0HWW&egOi=X;m;`fJcuC>T8m!AH62%3ib;lO<}=- z{{l?ZMo{50ISC&|oLF&Szhz+(aSZ=ZEzBK(0t0a5=O^Jne`;C@wB#s2v@yV_{37Vd zj=FT`)&-Or zJNK^Ix*CTC;HEdQ;K76o8$OIU@!fI(9Ho0#a9$lp{4xdLtGMmNRR10|xfdYJBYmlw zXj>TOo;H~Y!?db*Phh=^((e7!7e>xKdZ`NXyFIX=969^CH9;t6rg4P-$WgrAIu$=~ z3Lo78J+all(mGuS01aHAz5uv&^G>*|$v%1>k8h_KU|B1D^h5{f#+hF7%i;gc-BXG_ zH)UeSKG$d!fHPzCql-}iU}OIjKiO2nRVm_Np^qn@@bpOlx?llXCLQvGP-Z5ch+>K= zuE=7GXa(hBj55whV~uF(GS)Q(jbYSfUnT!_BXPK;Xt*wr%a?nB#oiJuZAB}XrEr1T$R0B}Tcigl{giOj*>k(T6o$s6#YHt}_N?3x>PsO+QvessGD2@ZVmCgK>t z>06Z^@HS73Co=8i5th5I;@x|_^k!vW7|ebf5B|j>GZudNtj6P;B#{+lhgZ1TLqxK+ z8(O_W-v`(GM)TM7lAIyQc_qF9P=C40UjWZSJOAO&ZwBPg?K(2R2iC=a5j2$f!bUu> zW$=O=Op8C-H$3$L%|_-RLPZ>sIhzPbd)VvG3W0;d>#2}({CVL6S4f@|=1@Ekd?Dld zqZ0v{1&3GiVdnV9!)qOJhcI+u4f~fw`w6jwRIH*E=k|;MP$zx3>PH-gfCl^hZ;WP9 zpzRpAC<_0QQDVKT-uE2nz&9Rnd&V;3S;)653Nlrd8>Ass#F!Fs z5m)orgb4{~LpYYjg-3)=6mNJh6wZ)`o9ttFn219ovPFiV42}_#Xvt4r>4r-bB`C$X zyF<#dMyDuCI%bJWx0Is}%94cpZk3Nm(oc^Fv|}6hxIkjwZkU=2qy(9%lR&aCUUh7v z1d|CzHCoV`1f1X-otaChZIEE&45vBG!Wc)W1AV@khaEam$W)o*2{xIF4_g>dRw_}6 zofKj!f4E90mJ*fzyr&<77)yl^@rl_>9W##Fyyi8Lxjz8<52f{^=C=l@(wQChaWsurF|#@r?U|BTXyNKA#dy(a9(Ap3 zZL8Cu(FmxHZGK%msasQ4PE{?{H+StTS@McOgzeR4!z1js3hURzDt57qZR}bBD_F-$ zc5{&R*jt7=+01HovjxKjXFnU+p?wUqgsCiOw`N+!P$M&g9a~XP3)|SrHZD3UOttcP zw0VfMFy+`SwfdnC-w_O`0wZqJJ~p+~&X#V-CD=7!7#MR50RTZz)`{-v5Vq8>XZHW# zf@KO)k9gDrG6}&)GWH>scbvmF?-*~eH1P$wY61XY)GjI60@lUZwJrHo3v_WSmPjsl zz()0l=}?!DVSJ)Px59>T$$A!Z1mPYqd&Yu4Av@gVj~}^Ma4CFCQ?)vdntb60fFr{N zUM2(?us{YX6f%ud$h9Eu;6z3IVG3sCSRsFyLXvLN4_l-`xFN>qO-YOxi*Ykz7Mmny z9_-{l)>Nn(Q3QdnTqEQuF95mN)oMkY$p}}su*LX9Ca{2BvP`jv{^h=t2>SXa#!v zK@DD)s2rupMJ5z+V+8rb51-($C)nW$MQp_%x#0E8t}%>Ve*(S#7>6f(84?YtBii7Y zhbPov2TyFp+~^p{GZ5mBEigDC%9w>RU||t!C_@?RfFM4UVGCsx`X8*Q1}nNzQCCa> zf&vlpS@|fn6t^PVthuQIAb7V8=@>7nB3;gTE|@Bs%db z9c>zw79Gn!B)kvk{N^_oD#$Cwkc(XS0Ui3d1{FS`3r#r#3w9WW8iM}C=wSMULVLM0>~ z=cvbeZ32yC6ns4X*aa$}v5P|Yqa1v%7Y?`a$Q43bToVPNxGvLih;q{MG-s$M$7Sc; znH7o?UuXic^-naeIij5GDlAnF`zmHpuAXI`sysXLlTZ0u5@u;fq|y-rfkR%$CP*gw zAe065!xP9S(K$Y(9iG_XAGDALPZYK64(S5q0u308$;ZI@bDH#gbY)@S5cBAfEIL97x({C2Do3*)GWlrM7x<;C;99Wp(6An`U#p7aYGK5Ep`8NDfCbV3 zYX8s`IK&N>q6^a(0Qr!2d}VWUQE&ob4X9un_eV+fbaRjN8~OlgpJz&Qc!8HELuN&J zF|rV!;k2*lHTbOm#>WvPNru z1Z-1rJGxedT;T`=feSn`Daq4(T5(5U!4V|V5kS#(+*kjK$zuoX&=jjS4_E*a`lEg{ zffKE8bp$aFQBWqF<{$Of57rP0`;dS5=TrSK4NqV#|KM;QS5atmWO>wp8TgEzMl(5flm{5XW~aN6|-MAs}<{cK47C2;vK4P;O5b02lHL|3D2h zLxooOLqMSq_jnmecNKH;2WbFc{}2!QaB#h152wHk|6mM?*Jj=n2YV1haTr7YgovAz zc_KGOf%roJrFxjBW}+uxsq1U!4qzYVe?pZM@JAzCn|MtLN2K( zSwRI@peTEEAfqyT|3HO(a5?U91f?K3{lE&Qa0;eiWB)J>roaleFmM#43Pi9)|2JeG zH%vtaQ+bq3X=IxLIDm9^fZ7;97+0GKbVfN9oa#7oj3`^$iFAPl}hAsEwS19PGbs-m*xpeHj_V@o)`JS}^l~4b_>Z3v)|8Gfr}Pr(1&! z0u~oYsu;8a4#`3v+#(js&>N#f4~^O){4frrCKlEJ0C3=2kR_uk0u5XM1@hOYUGrj} zdN2mIWd)&N^ClQN0%d9;rY7PY2~qzaRN`C1(H1Nb20(%su>c8@u&c@94_DxbVxb8_ zDHttd7{;m=@m8av$}}NkSR=%&W~yZYkP)j@Y#}%pJu0AX(W;pd2Fr>P8qqCo!4gsm zr9NV(AET>9KnIXur}F@;d1edwd9DgY4;|wim!%f@`WF5W1$w7)o_aJhCKl#!Y0)Y$ z?8FZ$Ha*Eh7^;e(ZAuvQkO-;35Eao6j{q9v&=3Y;v2wtn?IBY1zz`kl5UG$H%PJBi zp%5th2s2X+so=6nvJ8(f98J)28u6=&R1c8A2a*u4Wiff%VzWfTvLkT^VNtV8qOl2a z4Ov9Aa_|U>gS1NP84M9DPmBK+_z-`Oc%}n`HdKnR9P z2dR)7A{!r3LM0YkBy@Wxcw3!qVzbYR9=NI`IO`dwQ5tf<5{bYM&XEc%v8ZJ6tBO+z zNT3Uo8?0jJ3SMv)x$z6M8UUq%x2K_~5RnRL<_~8OhGmf(y@0ZV8@llUx}{qX@s_$} z!L8M)$XhE+DmuZUr50ja#RZd2>r@cU0A2x*2icmNfjY5G zuoYU;9!EhW=q3LX`tZUbEDhiiT*d1UGO-(vI~M7&9>PH!%kjA^48ofsGsrp@@c^%- zfIj}v24oNbynqBc>>Kl%X9fYXzpzD*5C-UQ52=tOzj8vSTf6b{2t-#J=%vlv?9Cy} z&Ebr?0IMwXa0F|-$u?3;YH`o?j4@(a5aE!vsj9`aMHtSpB_CWR%c~_%VzLYIBrrE7 zPr}08uq86=BU?fpc)}z~!om!pB*Ss5#@q%)Aksxp5zTM~NT3BYY!;e82WQa@!$Bkn z!N_2ucSKUe1rY~8fV+2M(-6VagHqEFoe(*_(+Q!hUh6ezBP&y^&kCc-Y2jedWx=QH z5rjn#MzjAeVv*I0tQO4T8}}fo8nFx<`VjDZ7UP)~wg3f_fUF*2vLNgbVcidU!w+%L z$I3D-FGJTBLDzPD7UIANM_|@XP1vxtrfho_Tx=JSY%rz45VCq0{vZpJK))F*wVsi) zXEBV@92mo>vI^l2jZmToEH}-i7hzr4L8I8FJQ$>5t^v~v3{eU#W7@9`xND&e7Mlus zr!)M3+R%D6zn$8{jb#_y7RF87$qlX66`y#4!OCqTwcXr;vD$Ef+;%ZqchSJgm8r{Z z+diW!4Gi7mZ9dm6v5?58AT$Y3!}uE+XF5{T6N;-}jB*;bY!uvETWvQO+7P zV%z^OCnDa&UEmr)-`wio3(nw4Q#u`zI`d!{{hiniZs9{(GPZT$cQLJs!_R?{;4`}6 zBc2(;P2zV^F8z>dU%{}0LE&cc;wPTk$ROV`9v3WE5Ya#_xj@h74bV33R)`Jcg9NqV z(h2@h2h=;&q&(#Dec(+_7$8_8fI)tL1s5UC7WNJ0;l$ZnK1)|z5M8DagZ&mUP8MeF z<-db7mEAT5%T8&o7x9>#{ty6U{uWri7HAIV9n{uSlh0@oI(yFHc3cN`uHZ~A=(t2$ zMAI&PuHA{QD|oIJS`O)zZs|6n=NggemtHqYtuo!s>3T&NlFr|uZtADbBAdR$sLucD ztxl$-juw=D7_Svtv)<~repISn5W0@*ZS&;4Za%Pn7QFu4RxYGeqp!ez?8^Q%ye{l$ z5nPqCsuwd4MQs?>PAt*R>~~=e+YUCX{nP~^>t!lk)K#6WSEf;FSsKw@z8e7J6<$w@ zHtMhs^qvsV00dz%7q&26u;cCj9y|x8IDRqVS-e#Zloqo_VG41osCro)wqQLT82rHI z8Zi$krVuQ~VtPS;x4;Uwpb)F6cfj>J0B`a_Gp!lH50Y@nAa3x@0;m?TRda!J8c}AM zFn-{jtQZ<+bCz;yfoChtXY}@GFXpU8Wemw+3?M%|JzQ9PeDYC`G72j~D}VnO5Nm5P zwMPD<*so?xFVTAxC=~=jZIaMyX%=j~RuJP*3dL}2aH%QT=WNg>Z98slyPj<#5)$5~ z2&I5tarp`3rU>PBZt1peo^V3%_7!K~@bz|Yk&z70aBt-B70OT%_%I9iAP>nVk}D&XG}L)ve^W3R0HgqPLRS$G zf^E7r+x%e`;Et(}m?% zfUte~y^JH5uZt1Xu{zLAn~eE>3EIagwO0dCUJVu0UUVo%y|rR?T}m zzQg+dOXX|;OLFN71hzMm8b9h#1B-hCzy}Ly5VE8cehl&k3vhJ7D}a0e&@8gf0Ks0w?amb%7=nG&PG<0+EMHp*yDn=S>wDCq9b3CY=Iu`OKfC4#+>8GTy z1Ijp`io<588I4k^r=kQhCy0b(q6UlY0*I%q1TAqyAYAs^N}#XYQ_)O=<_mxyFY~G^ zOt0)<=bUuT5eOeDF0|?}fy^t#58vjA;>?8b$Bf2dLD)uXI4iaIH& zG$@`{;;F}v33CC5A8e?Qh9AAqna7VW$Fxfke!}|YQ}^x@2-$nMQR6IM)BtDNFTFeK zngk6*P{A+H*-n=M8Ef#5G#oPY9)33L$DdP%;m4Q|OB2nUNEx!_QiE0_^N-3Rig%afAomc}d%Y!n*lOfy#Lg3%TZ6x(>+b9WS+c2E>BT0IsnbvIFZ{>Ike6>c>#Vwy`V# zWKLnlmJlBuEn$Vs0UIHQEw=k^yz|z3Z@wAg)}a4RWeqMl>>6rPA(I;d_BiaQGiL}m z_~%Kv z*4&8&A#Z>Irkds3cON9;YmEOj!QZ!k@8>(x6{71xu2rP@S)?4p@CY@A5x)B+P=O0% zU;`cKqULENf)Au%1=|-u3uaJ*8;nT)g!CE=o+N}EBw-0nctRAW5Fs8^VGCU-zflpd zewmUXMn)Ks8@^D7`U9cu6mqzbc+Md?++qI_jd(;PCUGPaRH6;X!9KfvgEvj=;opdu zn{{yHiW$k_7BwT@I(N-#ScbuEJiG3O&C-}k1&Lx36SZD9ORHa=%9=t z{SaM4QnAU6=mHX5=|w z>N0N_^NJ${l8YPd?=@ivV*u!ZN~7GPAD2T2uQZ39RNNss4ndtn=&=w%AmJ^ypu#{eh&7Gmo)@u(7nJ|G!DRkZpty+#JtgrLf8abZ9+^1g4@!TRI{xhYe(hq3r{jc5Rxc@HlhlR zrv_jW?G%I-Mo|PwxB+PjsYe{Bn!1C47PzU=$80&f+O?*lt=1RLO&+4U4*D23P9j%LVPL^v5GXhJEngyRoa86jBKGDGAs zgd-SI!0i*J7AI28ip>8Ij~;!uKgsXFI1L4ylwPRJ>>K@N{T+LL94vX#NxkXSe24vYcqvYXJZ zeLnjk%6P&sh-v4H$g{~h^0Pu(r@S_Udv8-Th%pN^k3Ylc8r&q=j8qmqDR%|Oj>d35 zEXiR?OBlqV6$qCZQ{t0}G}Z@S@r+jbq!=^$(E^FJCuNC{9sA=7d}t?hbKTAz%cICg zZpa^y98AqdIRO7$)&@A}0S>2R`yk=?wnC~A263|7<>1(k%nd^GhuC5d>ULk9O;S#T zSRop_>*dY3lcB9`|E9_WQ9~9=tKUUi4x2GZu*Aa;2!XS+Tv6|qX>_so&`Zrn!U=~H_ zI1=tL4l7VM5xm~VB))6Acs2ySy^yg@|J>Fm>uDQ9Xp!o=F;jZ5)S9N(2I|GBde#Fo zpPgb+=c4|5;ER!&2r*-B6nt+YCCQ=5m$D|CaF%~WJE>51K1z2I?bKYe3ELNEKbGPA zpC|LW4LnutJDN>!xqRLV?gihmeIh=)l-gK{T`tZb-vK zD!z)4I~j={In0P_LaSKYLXjwkNEkjRv#GlZ0|a9TZVN2@?#fis}U(^dWsnw~k0fOFTnJd_`D{ z#TAl8T5Lp{(7nC^wz+GKN36xYk--{~CK19#ix?qY9Enl<2rF{4RzxOZ#GqdEMQNNy zWs*c{yhZ@?qG;5SWyD4kG8w0HCs*`6XWT|i+=w|d$7i%7a@4(Ul!!osMsJ))dK4o{ zsz-cOw`7bBdCW(36UGNZj&AZtg4~GDlZ{nCh*Z%CxG6}8S)@j~kHE4KYrK&KV+c{I z2tsp6j@+enoJeQXjeYD$7=actk)!}nGeV?|inI}d#7MlWh?gQs6G}t@%QKq9n}z@6 zhdRI-evkwjSrUd?nHX%anLG&Q6F=p9FcUKpIYbhpoI#_UO6J?NoYWw7q>X@rgc^aj za|_9<%#j9REUY;!8X2_9GPGGSw3ytL>FAZWT+336Nv^{zPU{~ddEBNEb+Te&g4$xbdr>5O60pt%`D3Cgi7rEObPAIa755MLms0;Pl`Ckg!lsyy%AM> zO$?2dTl^L5c?e(`B_nAFLaWgu1kM=jO@?^MLt9ZH9a3z(M;dXc+2~9n%|(bX(H9|} z5FN&IT+$eEQi}jc8&T5O08%RLQZH4(mi*H497z@0MluysbR5SV2~#v}Q#XCnk1$d= zozs#O#fY&|(!^7az*0J6Mvp|s*>FTU9aKWa6gGtjT58d|nFpJ6jWz!in_DW>CT&NE zQ3qn2QgJ-fAF7Uad`C=`)Mnh2Lv@J90RUlHh?&$yL9K{YrPPVAhu$%WdN7u+Ow$0E z)y**oSS>Si0DvI?f*?^;P#sppge1A}7ItW+pah92xrh3BhEIrA%#4UA@rPW9)=xkk zuB$h66xMm*f~ykoK)68QEgM5AyQLN zWu}Nk3p?lo0?LCJ;Zs&Mh?YT!V)%qiz!D!d98DC6@9~6}F)haFG{DS=1$hWfm;%w^ z2W3EokS#`cJcy7T*@IApCnzO+09JW@SpzMnemE!t2>`}0OL_krnTNWZj6_nVn30c( z3Y(}0T~Gu?Xoc;d2BU?nawvsda0$lHmVfYvxZsCe@C0`71VuPIYc*PFn2Bo`hNAt1 z?HC77pjou=gilZhtvwe{Py;*ggtM3jPk@YPNDUMrHf5LvWr&n{NQQ0b+riQhWw3>0 zC=hu_hP_P&SYQT$fCgKDg>Ep2z3p3s5EK=`2Y7{9<>3~`?F8a!C)e=QkqAYFNQYr1 z%fBc*Pas%%!_VS`%G~UW@pEIFojis24gT+Ye)uYV1--IkW&a?R2bI)*oIS3+*5!e`?cQ` z72P{=SjL;a3 z(lCZ(5C~%!V26kUuDr6%#b71+C3VzO1I;tv_>llmhnE<)+dxa;gu%UxUF;xXz4VT* z2#=T%wE&=&f8dAy2!QnlVa@=^ z1-}5v##}INrBDdnjHZarez=ltk_n>y4llV0H~|`&fZ=gL8L6F#`H+b=*^dB#6Hkzn zb65w|{R=DzMZ-WQKlqbC85Dgv6wBBKPGE_VrD75(ja|5fa6X4xMF@COGtG_HLN()x zAzhKwWrdi!(zzaiI0lr2pa8YZ0liososul6hgPT@WN8p(VHRicVQEQTK^}vfXb)}a zy9W7}aUl-k@Pj_Mhin*^xsaKvNf)yS0BZkemjlUUN6?3H&Wn062z&`3ve6I@L6mjy zhh0czgQ*6D2>@kSg>|S0XaHypVY1k2*#DtsbqP9L=7`iJUAkmipm`T5UnqxfRlVhkfXjNEU8{I2~bSor8EC zgpi%Kg5@(rZcbI4g=C0%_yQ|%3V#2v2RMKOCjM&kK5ya!3F@&P7vbTKaE9+epz(2y z!|{hn$enpmAIQRB*6yK8v>|@I5luyJ$>PS6J;!ly&DUNCYN#gH2Fw5MZvvliB9+sT zh*ApoQVGv++t~1jFj#oB#fvc0+`v~3Kk<$nRTM`<4_|SPRB?%zk!8eiKt0a@ho5y6 z@Edn=9$zyH559STaU3ZJHNM6HuMI9(@DT6uylHU;-xb(C!6ws(H7ccQo4wirRrJ~*4xm=HousYOb~Xfg93C>E<)4= zyK{t~vOoR@ZR)$VBto{#%VN8O5o+}6_(6k6r*)d;6eI*lxS@Wq7ljC?lJIqlcvnfk zbYjPpoupZXF0fpV4WWFJj3i3VEGgWosEc|8ZR+w9`>3`;EfG7Zq@YBWg1!emt2?N~ zn6jx#)G3~NGN7XNq3WqephBclDyDKOsA{KqfCP?8vi{fFLo4C-CTGBfjF#ThYhrx zO|^vGn5;v=tFKM^tS0|(wb6<-%^1I#_d(Ly?7j6Yl4{r79486t2;;abeNi5w_`^H1AJ4O?&*5& z+tI?=&*Ye^i5Vfcanq|iEU4Yk+l5@gv!Dq^e{Pny+-PJhCm0+dKe$7b{JwG(fNJ7! z*b0PYcp?El5klprevJ`AqHFJY$hrks9A_yG8ey#6{&q+mAYq1GQTZvMZs&-5PgF(# zplOJ^IQ&kmX zA=w2S<1eX?ccU~yXBxfJ=@=q)wQ$;<}_OoMXc-voxlV^6rO0Tnh$NUf09h6eK zM(=OVr!B0gjJAQNxnZcZxy9ki&RLof7*fO~k$9T=G^Sg?)mV{Jb^K%sLSETP8&qWY zH%SzGU1KRWtl4QUgxwul2bG|YMdCD=*C~OI-Q{YpR3|IH1zb;M#K+N@T!BO$B3leu z%^|mhuhcBOzCmZY`Sac1>CBCDt-7^p0-Et@C`b@uJqJ~US$cowzn;}fVRFDhj5DCW zoEZ<2Cfp;-Jj2;k!MluJBvBxCWZI;^Av2}TIW>_k=SAKPY)z;&yP(>?9JUltq}`nWtbklv>oyAF27Ie z4Qoc{C4=YondQenS{T(uaT*>3yLv~=NLlmD83C>`0l*5s2 zXtY-hS;?Gt?RF`1sz0BWb}qJsoRVm5N(5#}jgKKT^rYiDaqHax%w4O9ELZj-ysXn3 zhp8gSdF9CT6sKO6nMhArL-O=fo99#nAnxswEd=kIBxOA{a zNqSUA{uhOs1#_}vb1xr=lW=HEpS&h!d1ugHbI1$ju=5QlRWVSFUR-zz$o_GX6wq6T zNL7t^em8FW>AO+b_RGy2Dc3g8ayD&-NesW_RVlRTg)EKO8AzIJk^vi%ip?mzr7ZbE zfj`vqSBHU4AZ6!n=>~E@)GVMPrKQ9%V~noK$toafj<0Ae$m^#q@yoLFUtK3(kf=n5 zSTIbxPlxGFghzG8|M;JM`~6ciYT%kd>;lao0h0)}6s(zJ6(d4T#o^Lq&-Qg|2! z>8f!yQO*wuH%`z5HR=mu{*Iuhh6vh7j91ZXacX7sI>orZ&8-M)P$~v=CM~jTxP|)2 z5Y@s-zSCd@E>>AWWTGD2Cb$u&(A1|-xQXf04Af^?nJBAxna*ekYU~EtJW{B*#|LnD z=#%_oS*@E`acZ@7hj>Y4qg%~iH;?T0={XN2*$vQA9KZy*mv~YrX`y_GZYf3(dY{5h zIef!ynHO?A045P!tzzOD*-rQPgvi%4RKo8?EqF8XSFEb&CDR-e5uO(kkjK)V%L$Ct zCfOKS)9GDR>wVsiYmzE;RvjHRG)VJLSu-~=O&8e)M*kxzgDUyU;}K7#-`WWl%He2 zLp}b(%$ba$gAYx>t3hH@{G zv)wJ}x#HjBn&ZWPre{{zTdYWbk5AWs1Cfgrj8@M(E3ECbWgQ;LH2C9C5;pD-@(Za+Q93N+{ctTh4Me(zGw<`N%cJ=qQ$ey&@S&NxjQ7rJK| zkN@hG8?pJ&p@ZQp&#BP@AI{qL!AO?(=(OtfRCl>UehUXI*)D2f z0h2Wj%9Rrb*J4x z$j=S;e##0%XR?&(To8K=NK6A;uJnb4NFd2o^llM)j&)w2%bO*Vm)J>2lbA6!IJFZ4 zxKVnr6pqJ(J~-q|?MF#)x5T6{WML>Uzb8N`jiyCZNp;VpCCXC==021}JNylW-hB8c z6xzM}B}#moKe_}%Hb_cf10G4QcuEpdpiYs4GAt@ug7VUDUAFGm*R*35LiKN_Mr(s?lTSDyd&hA0mGu=p|J2ol|)SYg)fRV=QL=w;!xQ8PK8YboTy z_KiJg+)ro-0oB59-4%{#EemN*(RB#{@}=6Q$Gc%*B%2G=lH zi8>>V9^AyD?4(%qzNOVXu-9NWIqupKx9!8i`6?rb)N=)pu>`+6l@X-CEK2(_GW|0s zijVve5)2gqe6|Z*Mk-FoK`ADVeTPa&oR21IWAU~9MqQ`@p5}nP7$(XD;&lnbRxOq$ zX@d{52*jjlr8bGn!$~D!pS{&|Vt!!s9VGqapsD}-hZ|JL`s(v9BJU@)>7mfkMvcuk zb_(i}m?7BRtES7~fo8Ey%#hZFL##A^^)=mWiM3TU#KasMDa>G41Ze}DFvyJNGfxPgy~-@}d6IhUYsH471?8VPTSWw|6eeXz;RT51i9Zk+ zLDc4QRS0s0afJq}uT6U1YN+>jOUj5PuDI!k_aXy0yR}!4HGV#lr8X8_p7w)CO@8E2 zCoUnpERYtV#=lC_+!Riw%IxcB(8h20<-BCNv-NHlIrO>CinUluuqR54ymzae5}2QL zI88;6JQhL#ET9+^U6f=>CA4yzHEH=_;zTVuAk8))Ep~&Tw1xO2L@j$o@{72*U-Txd zR~Si&W4ZT@Ub&C~)yFk4H>5tD72<|viuY)Q-6Q0hnDPzvWtixTZ>pNN*JT0O$rbq7sE|+rPz)K6(t8;f{eGP zqma*#mwpbCJeMp&NC=7Fm-!(QnDq`8lAfWh7^)+!uZ3Ga(4=zEp5LDtY!nzv-|DPSm`fs}guW#2Ef5B=<@Sk&|6}HXI03_}Ua!X@l z{b@=Ia3->BnMQ@aZ2X#OCXI1716Ni=A`1~JR>XRuzDZ{P2L>eJLk1(#ZF3JS?)fMS z+6oyFwYj6DHcUdZRl+HCDjpaVLq%o0WO+>YX)(L3xVN3 zO}Q)0B6}ey6MBnEIycBE15vW@_pVam^kA6DHu4Wq3zG(2b9R`qGELzAppz8y9-lNs zG7|W8(UB8Md_m*Bn2>dY9NL2{#T&IKI`RS}Lk>iq4^HL>Z$%=qP}t*0w&%UtOji42fs81Z)}EZsJVO^WnO8fJI&iOB#TxrHrTy9pkV)de;VF3|m~GwJfa zD1VvkNE8;KJTh5mAI`1po3TOHY!zuy1qV9?sIom?yDFYUa<H-i)_APS)mHRn8T3OQnB6B14wz@U#;Ut#YCfIWMJ$FBWjge3r=8%) z{HC{)tFQje*K5c(T1$zV2y-A_g+0{^3=SL*_gTp3EGES20z;;xU7-ihRXcK#1L6gT zwN{iL6~_qd`Z=Z$UbTnuNkrgk4{=x_=)wAM0Ab})k@>ihGYyBqheOGlK=B@gbPJib zT!W#H^6ovLWU0s*UT4LTeh7J3P~V)k4LFXJ{ppZWG7~A5pWT>~MbQhGhA%&+cu)ta zo93PTO)PK3E+b7(G9m|5G>eq;+s%eLDii>nIu1pR!uUp<04-qxcJeF(5oD`X5pX0v zx86Wf%;t2Y=b~wypg|rQXJa5npc7{)7ROw=dc9aLH_&Xc=@>H(PqHCm>Fdtn)!^^Q zq2+mwL_bUgNKCFUvW%C~Q|MUL?EaA}ag^JI%W;v6jvKp7`=RH+;lw<cACCmj?T(Hq1m6WPCCA;Vug>=eWm6#HQhSLQal`Ui2gWs8eB$?S1qf6Rci zh|zW-%bsa_Y*%z|@Izms@}A5p=y|ug_{6ZdkZhR~SLp?smXLjhwoJb$QX}t+jT~sTifo)3xeAtPgABBB4`f*ka7>JM3!zSou}@;jvxE1a zTc<#DFoOwu>7Zy5DhwGR-c1P_2-AMk4F{B6$yJ6|QkmE224;K|jhr-wCwlq>M_Qbz zj7EgZ7GrvKsvk2`QCC zIJaD1l{&YAi~})ynFez|-paYj=DGNII0J}FzmB1*n^;cUPSA3OpkG!fr;=7U-t1Ie z#!}{>TlHz*yMi7XZU~pnS7qfSixR(Z^`1e7(p?yJ6Z2$V2=I6*GJ7d5xJq{MQM7s) z^f1DV%#=596*u_w>%5eXE(|d*1_AwQZ&Si2_=K)yp?Iy1VOyFx+G<(@8atD=!u-Hq zFP(erHU)lERw(UH+3_1$xVbk#atoiy#5ng-|32BNB}cJP-Hdr&MH*Se;Zb2FD2>BeHpmF3ks6#GozUn;J zCuQ>iEP^oNw&4-17`R|+`oxZfzOvN zdGmo}{?hHl<&ktI8uTBq=~B65>Vy({`*fQZam1!Rn=qU*=v#@xDlY|mMxH!=+xG(< z&Gz3?nKBqD#+sR1a}~>fb?;`vzQN2Cq%LH^WlK$VlB_Kw0&%?jj>ml2DTFa@zCBP z3IR|M{^g+|fXJZ@#k~QM=41KWZzY{~t ztzXOiJcBM>lg-ocPT}?z@%ogi*BQ}sFq2>XeC?Ze`SvHJ#1joqK+k{|6NXw|t{>21 z9lg^>t~uEg!!rS&3ZN!fc^h^FEzWBPnEWuIoIc*&34FuTHsYG^k>MAA&>vxBcDT2S z&G_UpG0(FJ$BXL!W7Ylg?i%=ZztGe`MAKKb-jRIegQ=+AUE1cd*bkv;^dJycq@h3f z%qLTHbdV2I@-Qnh#sP5Cs1}YU!n7Py@e@B=feumKLYdAcW=fh|Rq&U=W|g-|g3_7> zO%iBKe%X#@9ja-Ls+pBHwv}1nLaphoGE%$!wpdsdy19RiZm`+XFs6f{&tP6MJutgpL1J*EW6PVHX zyte#EVI1Y|sGVHWu(D;dA|b7{v+BS_b|v`cxEqJVZ=%)qr{c+HG+|$G)zka&lOALS zpAVIbxV7AXq5b!bN_Zcbig}(d`9Q)@(wYkrBk@(P@5-#;_;%r ziV{3gt!J5J-)5XbR&Qx;N#R^&9XQSzVPErj8H0fE&mlkqAOP4?pAP{Jf-S<|HwV&x zJ_HRkl5ep7^C1}Fq3KFSdWCL;`g{nUYkUR5`~MySX132SNx1$w1abkR8P;FlNkpJi zC~7myggv-0QV2Ad4woSo5*8}9R?me8*E{?in`4|!)I^n14&bs`thalKs1yjNYILCZ z)`_=^#?TVxy|n+cYuY4~f%zz{4~W9R7*>s#xjx?BC=-H!ztp08Ltjyg05=;tY;WFq z_qeJf5U0TVO4%Be{AZ%mTYfB>!FKzwQ@}9DM%VUX?8H=TF}t_8*>))HXv6*#dFnC0 z*eNx40K~3E*x_AmDtV^M+Q8RWy3n8S^kwf&_w6}ZFP&BVukI1w!`1N=wUEz`cQ+>o z-@b)>dHMtR!(fUD&D(7x32nnRl0~m}H&P@}ST<8-2<}}59E6aA+uYy%n?^oA; z+~2Qh7hpU5= zF91|_cn^@s3Em50s)hG~1rOo<5P9~~0en5D(?Md}+S4I&-^0^k>KOL35&9gbvr*>C z+OskCw!^b=?qT-x3BCoV^GTtd+ViiX*N5ldBv3gnzR{Ry^GQ+R>Re1`{K+tXrTT=2 zFNktksy1U3O`s;ar%fdBYHvUqS6Z13*eb4yJxk_yS?2k1nR*T{MI05yObtH|Vub~e z20Ur}j5RiBMrUgPZ+=}Z@iW$(RmTIiYHvq2sckUPAYt&rAT28R??kPzadva_GI^V+ z2|~q>Bg4J5iAo*?G&L}+uvo9l-lX%wR!ve_)tHl0ew*HvCUShFZ^k}oSp1Xn^0_eK zVFS$>33IkDqQCuUUgm}93nWQP4ECR(%)8AgVyYg|{%@M|0`vGE!0hy=-^JNCK`ods z`rlFk_D+cS)bQ)5LE;kEanCCCwcp$V~kom8o4&PRKxm+R6w@PE8|$7%)op z(QI%vJw{-r?y6WQz)k^w#s zEJ2I6p7O%Wg&GN5n3I{-?!S^6*3d35Mwu(()s2+oSYsynhi6Dw5gy@)M8m#rj-?g( zjkqNPmBbh%eSFDFa@`Xn`uuf=G2*j{$iZS1sW1_xj|5sJu8;_BQ|1t!#jkA`gxr_R zXwh>fU$$?tw783n5y+6a%gBMJp_4--mIM{tgY3yW>bkL)elc%X_*6B%I5({0SGEs| zUvwx@En5<~M$t(;zMhDfh`{h>hDu>T34gY zl2Cl8p4oSfSgo-@2)sD^Q>mD-?BZL#!=W6S9q$4jJd58+7j0i~*Ewu$yWR%FH@fs9 zKFC?@*wg$_g9x?zZ#}^8_gt8sgC&Hmw-Q)m{WiME26Kqo*XYw zod^ww1JliS_5}vkbwGF&O%#cCaF9vQzAtfiR>%Y$;7e-0*laNhd*nQo@=!P*3T~2G zWHPC)94PzMX^&C_jRNS+-Y1~-A$(zeVNosPu;LULKH^l`)4Q>X^7#&o3 z#eG~iI1V&q1GqkL8CXad#5R$}9ygf_+48aVJIlsEZARhSK?{f-J`IMo0=jrAq_d$V zY_5M(8b^);M4#J9ozZ|upZR9$JBkFkqT8=G*ENv6F~Q`23x{FITavFy?VEvw;t1C44~S&%-11+E@@y#s$!C2)p|3n>@=U{*8asq` zpGEXoHS!aZ4sM}A=^boiW+|LiH$|T4wdX$OiwXNDfS}$_9AKq3K~fM%0;l4EKWH(} z4IUGy%?Q@fH6^6Kk26enoJ}0&0ygk>tUtcUT6+I4y z2yl+dpt7IqOcwC?YVDd&(3d`fU9~#({D8C~46#*8AM|m2%7+gx+%MTL! z6&#}twj%Lu50rwJpt#+X;M=XVoKw$WtG%4U&1;Ad8d{Apbt0vBx(NcXpQ6F0Y1i7- zrPC8it=Hjs*UcN^_7bRUqSv@}Sd87^B_A%Hjl+ zq`b?JB+>;rwalrZiUWNJb&D~wLV=R}XtL_4jiJB<9!JyJ=MDg1I-|DxHAc!5aJU() zl8Rn61+1ONAcKYNx+%K@03*75?mJ-~Zhw0RM{FQH5StIF_NvmZ241eFEvOx#$Q`So z;3@P!4XDpSp_VCB)eN-w9;|N=Kr+BO0S6E~B|L40+92;)ulq7R2d!MfwObGUeAQL1 zBA|3ZSbfNWSzb8hyA9X1&{Qb!9)j`OP4v;sv-et7xXt!)3Z)|y*rtx^qK+=y20~bk zMs)Yuhl6zivfr5?;Sl|^VqnV?cL*W^rmk6(lMtG>ndhz>hPW>>!Vb1GAXc6U;$lW_ zhEIr$34a5)BzA_{U zC}~N`Lsqqm*alFQB1Zn}Y&3lU7RojDuTbPgh^wp}d5UFcY4^Fwkg?J&v`*C z1o?o=HdOB?iAZ(n0Q^jRp9buOP%DI0hdcG4+U?};LRhug$wRq0uVA42Rq)A3U?C`a zxKdWVKd5peMYYuKeu}I)6o^wt-mS8trZs(<3^al|(-r;6x$pkjp46* zWdkjFm9HHFkYwinIbya2u|`X0LAJp6k5g$Ro7h>aX)46Al>Twg+FX)l9AX++Rw4s$DbM}|wo53G%3m~T5&Mxk zq;?2HVmKGCswxkZzhQ<9Q_RQ)@rSEBTQWlIP)s%fzDo9fE(<{ArEr2ppe6~R7*Gy! z$5M)`jrJ88Cq?0a86&#WtmFILaa;1ghJ5Bm8IKgG=*Q0Y)_2Xozw5y!8iX9W5q?0b zl_^H`$BT1oKX1!#>L9Fmdd>VqR zP=g1e)IU>$2d!}t1u!a>@O2n)WNdJgkuhW4Tr6-%l1ga_UOR&*thNRY>bIM%2HbvwbK4>5e8me?SWw``wg!Vim^_Lv0nN^ z#^xXv5k@}r~tTcQ+4#Ux`r@>7Lkd|?4OHYWI9P6D#MY37_!nT#l znmyDU?PM1_7!U+%M6F^(doS?1J{q_32V+(ns)?}hxvr~buZBaYt9mo4{!?*|H9FRU zn;Q}n<^$X>**Y+L-VL#_E89nXL&9BU5loVUL6#$fUkO6z_qb4Eek)L^U{k2C?ozp7 z|0%5d=PuZ%7-bpmUt*hm7Ax?R7|9@ zUORLP1`Yat3^_}bu|rFS3-Q6SevW53Oo1(Xl9!p2q@a;|_h|d681W_92o0#}`h6o6 z7?#wK>D$TzpB(*AokYEN7O}7Z3mQ`-l6R|^MG`0(c)b}5gIMg4C4EeXP^;w;>`K&u z(^%wrVz;FchvMy|RcJiID%w1;^`qIlg6y1y;%>{`cTIxL!DpBryX4ji(OCu2{WV=V zyRpcZQxQ+<+16+QdtIT3sL@Xn{XQazBim>`#aLG|xZ2%Oc|qc4H#t!gOoWI@rkkik zIK2nz*prooJOr*w0RJ=nPa8|G&tM)8)M$GhMYTiy2*nuh2?2}L4iBlAZU`gyJ<00x z!h?E*VetbYO{1D=7;4}O1PNrVZT*%|S5ja2yz=R-&_+M3#lKz-~ zmj*$X<|`wOrNb%I((&X9e^n7?t!g8dRI2eDZp*O(h30=$k^Pm?=E`pw>CunmiY?44 zZ#rt9lP4`K3U8bcWxW5YB5^@~Rgo;S`FgW{-bdDtwM&Io->QvkW~>28PSihN>}J>f z>>~eO)IZ+#VK5j2;hsXdyi?<2)&e`InHl(lG?= z@ON_4us9#p8{yW2qA%pa=n^7pUzR_3es^MkXY|i^MtnO&Rb6$8u83mG+0)dJUL7y} z!2S#V@!~)YwI0Jwl-urbRrdW8oAIO9%{lqPC0Z!fiqXmLhUF&abmzl8Q_03}Dqi8I zCn^<`)lhPCxz#WbBWyJsEby#~i07fMMIsH(Q$&Gv=^(DR^wR-n}0hzNUhAudZo&#Fi#qxt`?ij6PMHTs~y^x;tR~6~aQn0r?FpjUPNId;M?Ec$banU^>-a$Y4G}j?FwR*kvtJ8hY zlm1jmor85*bnEh#W?ILU2y@xze^e1(sAJ;@B^qk)0*^(MR{$db(^ZazESn21M;T$o&j>M+~?D1mo9A`E!IzZC2{|#A|Et{|FHd|ig24e z))E7{P*2KIa@PeOGCXll==I%ebrZiwk?vf4CC)}4a2{s&7Umu0dDJ=@W&VG)#S(*K!QkAelj`52DA2{GT7rF(^16c7c;c z_u^eIooxUXl%_@_#D-X6uUN71?_vjq)o$mvfACOV_F>HLL?Z;9p*;*YbE*GCFe?oF zjlirW)_#@3&!QGWi%~2Q02GV7sSAT776T>IyU`5b;keqrFJ|RZPyLSl7TIFOH*G{Q zqrfV24yzA#=h=Z2aFZ=ZGceL>I)ONLSh)ht1*Kn#Ut$UVpHd2}CuGfP>OM|?f&sH* z^zwlXgm_MK$8}&i(;zEta=@cqlvB|{3Ix~6cl@4G@>sG^S|4TijcLvyp(q~V zrr5k;p`jCTnGm{bEPh4_#?wn6$H&|kfyzUC!*2jcZ z;?#xrEw#*wY4tN(vc+TE_6pm$+D}l zZ6Zx>Y4JoNDCy;AWyte2kt-ufQ&LvBO9ku&c@5|B+(J8c(DFNn>Ae z_^A3D1L=rAwN3m{X$T@6)hOg^7Z;nBSH|I3LEjpb)Q$7915My`!EHrfqFaT2I!z}> zLnKyY#ZDE%i~XIPuNi*YQe%c$18Zm1EkVAF-?(5ty1DHPE6{NTFi;>Bj;KWFU%uyT zft}efcjnZen!Mou#fp?$9SrkMDMwV6=J8u>`gmw%FcfubbT0o$%D1&#ocv4W7|$~#VqxqQKmvdoLKbs$s5lb!Hz?yW4LEXs=id^yS?^tw+wd5wiWqj-vohugXBCuO6rY55O5>M5V5F53Y1q(XS{B>RJpMSChcQDemQ}ilz+dsg*y)@4AvwU@fDP%KPrIojy zMt6z$m7}tYDjx+Fizx0|VV!?)F4AubBs(0GQ`Pg!nAl`|*};l+Rij%T)V(1jFFox< zZH)+###hzP;8>|*$|>OgwX0M-rp2QpMj|Rg82QvcKF%XFHIPF2XKEOvjAZO8Uni+30|6HXQs?-zI>gIL`h| z!~}1LC%+}|NUBrp+)ch7ICTGZ*0Z}L^W$#5{cCHz@1)}}U#FCzQIR-fA&0{J?2NEg zg}Xpqzp4~u7IBp82*1>Z)S)%AN_8YhWygW9gBNfbML}%4ryRN3v0y3N*4yL&;jMYA zbsT(MjvtgNb#l0XM8kQ+%D$zzh~3CG8PPE|g z_ASvtBIO#EflD8^^(pqPNY%dDRqv)?rcVb^!Ko{S1;;B@y|ZE6`@Wqb^HmozjqUziK6NS)9JAp}G|33stJ25(z13(Pk61yMCw!R(({8 zf3c5A3Os7S=$2qtYtQ5K89^<1-24K({izi9GvwgYiR-}anpWH|AWrbO5vOo2m!Y&M zWnHxA$lLFeQ5W5GevZ?p%Y~)(vUS+Mp8DMn)-dO*@IRG10<3<2T4Tjd98TK2A)NHw zs9gE8z$*F&ul(Whn_c-}jJDa1SE`(Oo-HR*qwyV)kl~Q|k*(LzcRm&wlifMpF(e0T zP18<6!MO_TBV;j|1<^IaKw^1QI%XGC8t0`2+smDhPq?9+AO>#Y2pj*=P-0@=Eks ziVH-DoMUj}TlMkZP%pN9a=yAp= zF#NJ4#%3&oCyZDW9m)1?j^Un~-Y3|{ZHz8@j1Um0Yj}7;+0qy70-|9;ih1it*J7dh zZX^&50a_Z%{N7JGWm~sKKW3az2V$i!_Pp}bD*#i*rG3MG94`PJKiD~2oyIN-jGx%o zA9Xv#@82St4u!P(NO)ZdR@$ju5+=>YdW@hZ%?UB*!(RNR@j+gLqT)aR|7z4dTm1k1 ztoo1lFY@gDi~QsLBh=zR-HIi{zvinT^;arAYBfHVaxax=PXL6%W_ zn9=n6LjuotL=k`wg3SNT6#s1SYlE01hEph|pXbkio8m{C82T&* zV$mX4GPad-ggpP5;?>f7LMia(m6r}(Pxl{jza5`{BZRbcwf&r`g2>4#G3 zglPWd*4m|JyVhkRNB+7WZEhR+V3Ci<8XbP;`#%lU9pa-DHFOsx|g%{!67G*6GpoqRj}P%Ui!$<9lQX-DJnA`YVF?b#O31I~nT zJ%DLX2rBAvVB6`2ivKC%(D=gH_P0X1cdCz#a|ir2j=zg$KJIs|{Pi}8N$+=0cfY@s zaVBcKyM|-;xsZMN6L@kIw)8vYbI@kZ19Ce>U|t%-YS`>#4n;WlINCG}Qx5tzB&3jO zEvf>??}r1i4>UhK-JjXQ8vB>PdR&GEh$Nn!vtrGcV@QZNc5uYb(u85%XCv9QDwZNe z;{D}&V@bl-gh_IYc?34YFviSaMY*L+)8Sk_1|ChDs#!gi?ctJavtuAhrg?S;UIq%* zW=x(_y$pknJ_@yRf%Ck7I#&<1kFvW$o&C-`vS}G`C=Y_euC=~mg8SRQUinjVs%Ki z++(dy3A^3jON~c6u&*Eb|E;$cHJi7R!+jZ-=V0SH>;6E zE;nnjO!YVGiGt5le5yR>?PjK)%k5UKZT;hQZo(cNA(GDI?JW-4yIMRz10FR&smw@D8HGd$4G$RL!M%w1GJ>4u~6mrxH%&Oj3TFT z>WT01E1`p|2B-1*6YmMzMg}RDcL_6hD(uI*BfzHz;x5QHN9q6#g z@@cZ)L@DL<$gud`X-X)#j2iWMiYGlwja4qAB^n)(6FEyuO{8zXNrSvGE2DbVxT&yD zgQJWdnVvZSW&TDGJ$~As(LrK8YY>L3&4@wtdr3WP`5c{V@+@0+I*KsAvD)BBLBnEi zOWjTUWEptZ8A$|=**1IZiI4GT+pDwWk6oF-4f#skz5Z&u1c%2?Xr`A^i}~Ye#VGVmFBtmT=BN{ zR0Ls5{w+JRRqWc7q(&xd;0z)KwInJBw2zS>DegIG70-5PjvL+(&Pl5XHlgmry`e{; zZvn*RIfRuH)oG;N*sB`4>=K9_*<=hLg3TrRDu2mTYwjr2l%o*jR!_^SFq9-zk~S-} zmRmnphuRtk#URa#`Kb8b&0^1xW?#3% zV)*@=)^yoN){OT3%X&{tCvzfnGP>TGDm?~8jwr>YVgrGuoTyqGwuGgxE&|OzTPiKC z#|VR~FI!?%j_fqL4Cd13TWjAqJMIDLi}V6?VG^G>?0jo}{0g3LD|oDPi|B&UmJ@so zaISI6A^WjS>-%xyjf+>w!3r|+UgJRFwpHBNk2N2`uAawwzka1(53xR-ANcFMY7$JY zI(eFX{g1|^1VDW*;sbzqpOZKEAV7~qm^7FY$Q}8+Hxd;IKM~}< z28l;URSn8bTa``55yYy6oo?Tr5o7Nu+_E&4J^n)6=#2NwTj z%=q817&cwt@Pcu+<}VgIH5R8!WP3@s6raVd=GV5m(?4ee2`2)(mq?`uq2HDy3&>%m|t!j~cyLznHz zYR7|LD%nI0fSzz9BFYEBlZ}zLch7T6$NBcu8-~AF+&tj@i^a36f5jp*>HYFE7GEj< zD;9^M$-jsPog5|n#iFR;zhE&x=^rdIk%WUOWBy`M|7}Pp0`po_B~C1vBe9Que)y6< z^SU+m`ZE?YHH1k26BY$V|6+0b-?3Qq4;B>&lQKxEHnmK)nC8>fMRX{YwFS--qcm)m zzNgCI^#8>o-!jiL7Pok$#Vl7P(sTE=6@!gQERtO3d5e2Y3T!B$Tkj%u zFN!6GM{p(HMhURuaO(_RB$j59D$eqJ_1XjT6r8=@s{|*J5W~u7XRX3av#YBmQtPAk zQfjK7#>xYq-#OM++Vchu$!h!P)hT7S&oMYhbS0Mb|H0z_VDbM=ES9xjq@})rM^d5o zmdUXDr~9b`Gah4O8L@E{Ie(SXmJf_E8}p87pGAEvAW$fi;IfS?xaSnjC5ukTXFpUv zFIwd=CH!4U_`Hn!ar-?=ladEvR0Vl>c-$XMiU)adaT2Y;n+nTdy=E!&e(isUskdOI4N=HW7T7iV11K0}fo~iYZWWihpRt%b=xD>%wKP7%3RN+# z)hS(GoZ-D{dGB3oul0<@ueNnXm0mM+5SD~nb2x-3t<019 zwht2=7yJA>-~PEv2|eGX{x2L6y9UaC2}}Q*BZ7a6wb>bVC|7NC%Y*yZ5fM)$YATy} z4og#tRz5o-e{-To3W@pCc5+oTVv5c%t#=P7`-Xd5Js-j}gs=MVS`LP6zSYZi5&Ag2 zZZi2^Jqfd``%xmB!>Yo1U1yx7#c#9K$?rPy$rp*t$wrs`b-y(-+x!8B(QpW`4Q+x! zb6#RB0h!2p%-?1E8}1}BfNrLcUDR4;9Vd2_)vn77XI$XEQ$RWhLA0u1TfUVp%w`z{ z>fGgM)H#wwXqueyn{S=^^kF_mzP)E|A_7<3s6FuNgv-C?=?`#4CrPZRyfhT&c5?;7HP0`EkEvdT8+`Fouvf6df=ku+$>Bh6sZWdAuI44k^Zka z(KsuuSCpF=Jbn1m;A{hr4(lwl&sG`G{Yd*%?n!_rINzbEqax332+bhCV@{#GVAcO7 z-BfTtib+!RJ@m)BNWweqDBgK%W~n#T<&~;QoQi32&F)OkInf~*+r&fb=bR`NvccYq z;^&;GZ0vH?N>%O0PDnW-V?!vROq#PaP?JH6roUB~W6-@3%TkM|U9%^hs6?rXGy zC!dOut7ltou4-O4FW#}i4dDTT@LqeK1F&Q#^&woVyAv0{f@pmPAKc|@5@x;`hbgDg{BAXkh9Dgoi zP=7UZ*X`D?DF19@#Va~r)*#+F!RL&qw7Im5V~kTfV&j~B0NSR0K8whPojwbu-)^q{ z=PvdC)m^HLo=IU;(cmmSccP3@aCB5P;4GsUT+S@7Fs7M*mI+fXXVn`W)9pOVYDg?+ zw^bN7SU$^cpD5?_9UV8hJIm<-S8&HDOjwYf=Z+{>@aBw8*od6xO(jPk>hm9tNWk)W(al7q`1R=1x8S?;cK}S7 z1ghdxIO#<(NChTEG&U72a!~?Fg2^x`PRAQuyeFQ7$q9~4CkI@VQe##@?IBQcTlvyNSZlY-9w+hH5h^xZs zb!g3RM#ZqsW(y#f;d;hoTtM$yeI0b7QuG=d%-Q6$@Aq*iPC<4;mqI8Ey2q*^o8q{aG*1O|g`?ue<@8{WmzOK*5 z|2)s5I5>y$yZMIC`5O9JsvKgbUc`>oX=q%jc6ra<*QG>S0(Io%nb1h;UOqjzHmJk-_MS-xs3KTuxG9c+>pw=oC$?N|#~MQ0r+DcoTK*=E?@ zKAkiR`@vT$O~xocbz!sA2I)Y}Ny~g*b360c(o&lr$fb1(SMx-8e_f{8Oz*jKT04jy zwn#>m{*p%!k$8V_jY-I$TiqDZB+Oyirb*r_T8&5z9$e@2rWgpiQJbV=WzHu5xz8HH zmpLQ8!AHx9O84U`i-ELH{N-IrCf)gWp#W)?+4F8UE9KOgnu1?K0bi(`6LVuOPvG}S z#d^S%rH~}&c#5!7NmVLR0_+nz-L_JXv98)TRLndzErEw@AK4Am*iOLjV<(nPKa+aX zpQHTDS*q0fxTPKt3M|6)pLCG;y??sg8Q~P`X{c+x(i6{UHq~4d#=KzU##$y1> zl8#QL_ThLp2GhE@Uzt|9GgI?MlSL)VaPMu?b5!@~Jp;al7l9YUs;$DBWmcvU%#xs z=0lHpd2#YFwQ6%Qpt}}5&jO7l;@)Ev_AOJ#^9J47VB$h_Qzs4`n3*klEZIaDoq4yZ z6MgC@{g9~)SfLr2+q0EuKTq2mQ2u^_66dFFQFeDj6qHtbQKs9j3P8`0gss-1rl`^29U<3GiT5n=E( zB0>T^vA3QR0gfTQcLzgIG3=cMR~(ZPGj_*yU;MSi4|8jVG6soH&<4ofy;2WA@5DZ7 za!Yw&hbowRm}+Z^!2u+;aM&~}+Z%PJHfxt~HxtE(eqsW72ds0)VS*id*+6ia6iMR* zCHvwPqBKlNH9tE_X9l}FOUa{JncMWnfqWn{aG7YQ9ppjdan3GOkss|SBCy^4&XvFr z$*|g4h#AIOwi&*HL+tvYx;e`7{gYZ~ zOrU zdzK@J^vVHXA2CxCIzS3RGHr24u!m2@O!}X{d&9Rm_0+U8D#!Qz_IRmHPVD`G#;SXX zV~zdqKQ~s-Klj0AQ5`t5TX-38<=#-gj)R^{5D|wlXC0?uT|9+yu8M)hyUx%+-G#ws z_l~xBTKN-|77wcqcU(rnp%zcm9(9Xbo~qAJ-wwd}p41IJKhqm6wD>{;X$AAxkHOf~ zUKoiqtc(^7IFi1ft8FMF+eYUG6Or_qdv0mjcsyNBUlR{T1QVPTM;L?p z;7Vb(kG=M^u=;(X09MtEgw1^NP_kh))Q7TLg~V21bwQ{cJAuHWt2<2htpc1)#>u+V zMr+21ajUeLM#ii}{DIaE9PMPn+80rC!Ol_A^2Q*&vLb4mr8>(v%s#Z$S=2K1mHpg$ z)oUd*fP&@ zlm#S5S+rAr2F@IkhMNu;@^QNn15fd`)y>1J>w*)n;dAnjG)2XvE~gcyE` zJ~GUpI0@X+T%d-4#4i933?3&%34yw(c9BzJpFi2#Wg7SB&c$>G*fF{5;5amz;E@=}~|;Ic|RqtH?vDb&j9_^8#2 zwgaiivx#>o3${RfIRZPciBiiZP9rg^)Zj*TbUm1xlVPE zXN8%-t}b5xl;c5hrKp*$oZgyd9t#Qk3uyWMGy9&^5O`CyCnm&_Q#9Pi19jEFK7+MriFZE*{bL*AvGCpZ9ay+Fu0QkX>0MEYfQMeINbJp-+HDa z`hxb>!t>9^TOwjbVKHrAP7lgSEYG;wzJ2-hLGISQgPfMHAawAO?kw{rxzx9>d`Nk5 z#DssqiS+25b79-%Q1U1bBZ~r(WYaLZFmR!L<)KhP2qV&TjY8a8AVkC7y8`7G#h|w) z($xn{*DKG=oIL5l7I8A9&GRu;xF4@a$pOg&Zd|Aot4Z3r%~Xj&>$ZUDy7bh-s~_{t zdb*`^7_+MquK{4XrX;oU(rN@u*SDthQQrP72BXoAKo)_WTB2r#FnKj1- zn6BkXumIEb_@s?RiZ$F$Infz7rcu3Oo)Si1KnG0MkdQTD+fu-Ejd}km|(^+fx9V>~JqNh6A% z1@5yo7JJ9$Ee5PPq5j$dRlzsK9Jg|sQZe>hKPC3XJxkx%bxF(l&QX&<6?SDq=nAW& zWjmJ8AVZOd2Zl&op<=GC((;DuHG3iqcB7w&tv}A#t(oFa8 zU)x`abUTQ$;3;I0lubbNP!lSqj?Jb<2nKb5Q|wKc$V_TT6)FYNg<1$eHWz)N_upWo zI`$;It*EJ>Dhj&!yk;!jw3dUtOBLc`@rXO7PnNFdX0?k*NVIE;G+iEdwbKd-$dF0C z5oPPDjxALH%qN)oohekP1BLMnrAX%Bo2q&M{oc+7iA=D_@*k=agg=B(f)AK#O?fZgqeL&NrDoq8Yg$*oeVHV$n84t3S@LDoe(k9~nd-AjYz?yFcxM~}#HVNO(2 z?P?F@)$3tM(L-p|S!vr~GoNMOgWJ(GxWdQg@M5hBXY9FM;86D}bDH{jgpAvX-p><=%i^JcRKNidbT0o)n`yW0Xue=

1Y0w4R#wi^t0!gccXCXGxfS2fZ8$4|T64@ibV6F=#nmH$bp4|WPCwFaL;uBB2zfl(yXG~sdR2bh)eUFwca8+{j!A)Mo82y>> zbqXPt9#a8n^#Ji0?Ev~-NmPXLg0QkMDN(H3UP(fjc(@R?L9d&i1y35Zn0_8i5(t%6 zHe@f>_DLvpcVz>WDas3@2A~^J6Q;l@u4!9Fk{Tc)$bLa#HpC}%ViY-vokdr0f;4cFx zram`R-sJskEbyuU#1xMyWuG`ql2SUE(E&vTU+0fSG`MUEfRG_Ek+}F7TGU;7-_fXF{FR|PX~J=F(A_dc z@2H8~qmN}0xNv%GgghRBcInNM@*hvGfE2}5xRxmUBpi5k^?^g(HBScP?#T+ZA5ZQ{ zKKS2LDt{HJKm9vO<=>E+&DWwVwsa^{_|5A}?`57ONvzlz*SuJvTmlX5rD|K9!~eOW zfX$^m?Y#(>-B^)Hg7Xb!K%NHWbB8xPY(&b_!oza1h>=&eJjng$f&fwn7ULy|6 zt)X91A9=ehGzMeaJREu}?7RwP)XVj2I^JZ|a-YU*YdMLovC?`m-1emt(6aen(5fxu z+qQ%ZRIuKL3zuYG{N{v z(|KO9vbM_>S57^b!vg8IXv68w*XaW3Q_0hwcx1rL?@@?0u0&frgaMR_wLoE*z{b{O zND)A(Xx;PzC>8O(rW*+g9mEiez0r@5Bt^M5gmG+2cFamw*unAaokrVMiZuRg8;XzG zCNg|tq2(KLM6pEetRIr=HnMGXN@68#$ICZm%+T}Ka|7=3n@icD+r!kssYP1_P!@iz zB)@qB+oI%Ci#5&rn(*xyF8eufip;l7wj!x&!JUG%Y0sU4Y^-MXeC@=GQ}+ClD4~D0 zM5;eX{a=pM{|VLh(atsXb9x0yN*P)rsbZN-S4w}h{CLdWu&!L5JSCPbj;q;0IzXvJp{KwU1nfC;D75So>q}K**tN^pr{J0=aGt3I z$rMrbV49Q)({FJ7Xwm87RDnwAZ!n#Tqsa#IlPc#J4x`N$-JD!c2?^N>gTDTmwsW1Q z0c{RJ=}LN@^$j&{s+{Iz6|*fHzX1L+a*zY{F9N*f|CdJjx9eBZQj_oDPFrVr(&ljH zW#nKztiw$#=~VlC7&cL+UZhmz<8A|~xa|%>UcdAT6w;zp&o6B`d<(5Rbxw1DEvFxM zz@zdVaQ%|2noF(HZ40=9?XT#)H~uPuh-11*uwpeY8n}LC*SOwC0M{?$!I`J4L;2FX z4USFaTNAJm!S4PRV_+07OMHPG#S3QpV>o({0Ke{xO^e6(w#of@9IJeF769<9dS~we zfConL_rNGVZ?@SZ{v5b|xp0eV9c}d}pW%qKJ=)#4{xa|4>!aP5ACDJf;|yLtncWQp zj2q>LWki7(Vb+Ttn1bmUfu$ng0&|o`!R62hDPR;2xVc3UPPb5E7Qs}iQ*e*DRDU{x zy|F1JJg*sSq0KpL%c#MM@LY|Rp6XqV%R*8tc1O7QR&!++fQjsya(`sRaUvaETIKzd8ZK4aJcbend)naX8bVLFb77(Q)2K z=$ho$Z3P=NNkSBbYm&PNXkcY$9-mvca6|c^t>tmXcs5wB%6!Pqo;aK8n=St>cFhNF zAB%~cv;?GghPRi>WRHztX8Vfj8FTfe!foXc_x_2{;fQq35-=puU_76)0j9uQt{K`g zStKY>K9{Yb@`#-@bN?e;`!!s*u3smMR3@G&aZBr#y#`>*DYpq_H=Kb_H^vH7Y0krS zo-55%%{5f}H0-KPz_klsq*Oie1w~TEvI-!-?|q#3BaJxlGo!) za}xL!=2G+{H02W4G2R4L&bU~sCJ31Q2u;b8RLv!#aAVSllLGRTk%N20j_q7F`%yXa z#9}``n^3G*cn>(SD4)Vrvb9T6FX{1Q>6m`ppY*s~8ykt!R4ah%!*eGvv-n_u9)EZ2 zxY#3tq{l@p-W8@N{G`Y2KKs(B`noSSGbvXX-=5`JoH@}S$o-c3w%Kiacz(F;p3wWn z_D+9}p6YDTmF@)E>%*-NCnhppiRM9a%63O<0bfb=(UD#e(r(#U1WAJXLqe zh{8)aGpGjel~`Yw6IzK()JZ3e;$&&0x4zkpK^~#iXIpfi*&o1lr*d1GILX8lb9*V$ z@)V1&Dk+wa0aimhlJEWITC(zIADR?>^agsVmzLWlY6{ayYiX9KI)#!EfGtv)1g~o? z(>1p%_YNxkiDI^oGx3JWoAqs0Ip!9N?z|A=H4E_%ty)`!1h@v{IZ!$HXzr#b+ja^1 zx-EHWHlC%GD!`MJ7uiMmvc=eD06{8CTe$MYUBmE#WRUE z+u^%j-ry)F#0}hWlP&Uta!ZRSCvZ;YW;OGTzmwX+VN6c$WN+F-Pn z>!i|JwL){Mf3l&a0jAyn7rr;A(~QLRZ}!G*{WIyOAFKLt*bPwzre8Il)P$)znq9-v zX)CmbdwV*XoKe2%Q))zr3jAWR|8v?`6=D0|wXY;o-*$VD+ShO2f78B}eK0|?*gL;i zY&pxb-?gval66=Omn^oXPKU?mdge}{UIDpLDOH-YfEKRrM2%w?+4umdKC^APmPvXeabZ55CVz9Nj{Pe>Tt>MKJsu!&fgJA_d z;v)-ReO|p^b=b^JulxFCd{M1?Oxj% zIW#{Koi>b`w3N={Mwl>pNNuDo!+nws&y^^*1mL7@_jndK)cCKP#|Z1D6q<{if~R66 z(Cw0;9NWxm38E;GYl-|iz1Ne}S1j)*YfpC(-w{U-uma_2Z(AvRFvXmdB=EP}kh{SA z82Q+y(QYgm<=yH=HtA!1^)!!-?NOhTkL8lw8PaNf>hnEfE`n-p=axweL16-vIUfB8euWQ7z~4Tw~`_h3q#y$^jY5Tc+h= zJxtaHu?BmiH~2Tz6+ZWP zwOA$ZLv2JaU@?KVjNk)K);rbowU~jE(z#EVdT%daQr*+kO51rQCrCCo=&zqtfDsDg zxvr!UDe*dOsUFNlJ2z^DT9+omU?YJ-nJks~vG`bpO-T>q&_ua2r()V2;<#KyAnnxVo#ms5H|&H&x;JnnS?-cVpiHNDR;-{e`Lh zH!Tt`y;$G{dZ~=Tf6yZB6wkVtss-Nh{vm3;Y(a@~w*r-^XZ#SgBByp-{Q8QKOJWo_ zw;PnQ=E02~U7p(k6sNkrrT5$&sYL>a(KHPMtnbQ5Vl?8|_w|4PK#T%fB$`aYnmMF{ zVPWv0`FuAt*o#KBrQWV9^=6*&5a0%{ik2Gi2YOZBzZK-DYlA+2_F=J|&p-C2XcJ(b zPk5>P+{pA8^dV6>4>I4-;G~&iO{Goo-Uw8BJ3lZlR7oqS`Me% zpQa6g}E z1f{kOfa2#PYTE*aJMa|JGunz8(F-hkDZ*}hhrFT%_-=mU{*FVgR2yZ0MCW&V$L!E) z-#vuxM*m)&#XjcydI-8$9(>Yz*BmkD^~Iuk)|Z1TVm#KtIU*ppf-CG@^?zXj#2*y@ zzmMYo`H+-<6Se-)BK^=JT`;BA)Yw0F#dM?XGE}%loX&OQ{%$3el7o~?U1HUD8GaYp z-E!1;HWFOR3NLeLji$%7r>7zMwXZ4+uWIU@gS#qPInv^7nG3rqi}j*pQ+DTUF>a#?z8D3F0W@cRNy|*@2c27fn-vQ?v1j#XLr;Cqlot+8^*NbJ0E zrv31CjUQR%5<2UrR~V(vAJB13v9Oyu$Y0ciT^U?Ppx)}ZhEf|Wi(`hK=F`Q(!sCaE zdYOCjKhN%c1Z1H(|CQ7)9DKXq*Al|4a`93Gg>v%G>|WKVT-4by#X*Bwo7+zapZ^rs zih8_BEKw=}=!G05PxIj%uaI-JojN#R$?GIMnX2FGw>C$LYo`lq@{Jm>oB*ZI{g(Fh z-1+F!YJfjZ!AhbMaz^sUo%|JPd#fZYmH>yuh7dIwgJa}A2 z&E(_bHD6*NfJ;NVJJ*DT#A&Ya!{W6?LmCMoHpivj1n=&7!kxXfQHQ6_PQu$_ULOh_ zQb}AH97<%EPiiIfUFAtjO@)a?318>0MpH9Rr-?-f(c~vk`Hne8xTo zroyBZ=nfk}Krl+O!kY-Mw5f49`PfMxPY%kbl((uB`A60LuJNftTuE2NtX z2a}I&_3?Cp6(PQfiFx7{U@^eg7B!w+EM7u9HQNgUC$e!86!TFk4(RcYr^XIi-E`?w zzQ5v@_F}JuK1o`RDHai(s#3xm7pY_ocgq-pZt&$`4lTnp(qDcZveb{e-(?vl%#d=%7S1oqKy@>Ap7V%R9g}_g|Aa&Pup2p_U zVA07EoESD0n>kHm2G*ZCol6?m4_F)?{FQS*j%k?%$bPKw_7%3ox$eu1^dB_t^;0{! zAqs&^!K`08onZ6&&M`<|Jfk$$k90+KqEp6MdDG!cAqTukvL7Y}C1N?=?XkokIJ?c0 zZSZu%5vizrP7#_T;6RGh>0BZEg|orT(e;%UuYtv3|1&AayMZKName<5YEhCc9ZeJC z>bg8&s90g#mQlOeU1>1@G0NcH089)sQv+x2{PXR>;Q}#+)d#D+IfO)wts=*pUBKe7 zK%~!O+EZyUlbh3W_F)M)_tUBY*5~7`i3*buye zMr!+eMmoM6csYa^xj2wpBb(#Akc&eYcqQUbbKHMTbKJi?&I;q5?|p!>$`e|OySjp%4iUYOg{RprdK#_2f;Kr^yu=lQiMUH zAq<@Ks`1B}bxR#WZ78as*uo^e))fjKM>9Ncj7}QCjd0PAX80R{z0wR=wGq-P41~x@ zjWQvk7nA;$c5i#a>>4{`fjO2MOqSTUHrjNpko=iK_pR75D2WV&=s|%DYvW<03zU&) zSy*1Ar8d^5wTNcBNq!Bc9%zeWNj@N~AeCDiA0b}MfZ41djX0p7w<}Qnq@XCK%Nv*W zu83JEQW0X0NXmy6(o-n*Yh>~!l*p{JQI+@W8mq^objkAYV#*kUf>U$5n89}doIT}D zYtJsC?SWwiS{}x~B)|}e%}~-6t;-lSvf{rlqKYn|8Ih#T!gY-yQDJ{PZ3$=N)=Rcw z*F^WoUd-Q^&PM?Bx&0;RTPjxzknpOGq!w}eo$0*#KEOx@_uf#J;6Ip790?hBngOP>k#oXE%L(3QcX=}r5WMn504Y&CMt4nZ ze2O#zo17@66<>~+GS3@%?jfPCTKJi3AM$3x)jLy*RIo_1IDXCq6f7sa`_Ga7Ehmn& zFhHU>JzPoqc43GLTw~oHhvLE_?o+qWo771xha7^3^5ny-TU$Jnb)PyQ{ab&a@1M6c z^IsJDUQC==>Q#xMd@XXqNB?~6uiIR;u6&`T7$%wfASM$(m@XH^6qO9tj?Q}!hzF%Z zV+Fs$(mV(v-CK0#(x6N@C=59Y?8wFuL+%uFZf5WEDkmo+)9`&tO>@Mwb`8?bL|F z7-J|SHJ}!x3LA?+n3;j161p#gWgV9(*~md$Xmr7o5y6r>3O#bXM+vc(t2b`)$q`kn z({*B8h9ODrv-~cc_5+E4oc>BY0krtH(i+9+uju}mHDN%N?@hH|r8T!tF-OCx8Xaf- zP}fs`T3kY#>eTWa7HS>_v!Be3U!oGcc6&5W>WSN>aJq=?s_49dz|JJh2Fb_it@0I^ zy~L|RUUFZez%(AeZDdEHl1WUdkc%-Al_V6axXn6{1DVkwmws!$NHlQC%{P4(td$1v zal95i`L7#uRo}X-50o!YFATk{-0UuRgiY&zQg1cYmBi8WS+sFseY7a6HRpK^kVSJ_ z?h)zGo74TpHXC3dGd8cao*b=E8+l>y`Rst?d-R`y>~CM?`!9-0|AV;e?1|f>Rw|R8+)Yxrya&P5Xa(1#6*>qqYl6YVW?0Hi z9Yk<^_70R`o30h=+1^relUl5sw)CAebEDw`I4d{@fx=z1lo}B-Dk}uh5nasewUO$U zg~U{h)I{h@p|Ha~q5KY6QuDD;V;n~Ep4kpw|1qe!3?sz|?C!GU7@1mfp;{q%kErNj ztVh=>@riAZ`1ymlCwq*7A;)*G!4KmdRV)~0V7*9Gitw;xqM(qLFeJS7rgx1QrB6}H z*DWazhY2jtrlg@e1|>FHW6}c#GNtj9_z-3e6E;O5uW_=mtzz8T6T`K2?LDnnVp^1-fVS@s>1o=^Ol| zq7!`(4^cVc-}}sw*FTTHa{ZeW+K%r2t+`7z>>QC7e@mAPn6#zk9 zb(7&sI;+2)K_!*TK=3l7rGoAY=DTKvB_s%%BSFxhaQB&F^p_rE34Wpt!jl8%1rX}a(u9y&r&9-0dihX?(S!+8g)*dqsUlcPF(|{?8(|b4 zT-^~AKD>YW%>R$~ng729g8zG&|1%ZWumXegK!X;c`V?2)jTmtjJxcjT@p}c@dGT3r zR>K5w3LP#2gk|W54WyO>35BhGGmShcV+13c0HlWbYdO*h(vU z6{H1u6XJ}D8Cey(IQMy|+qWzz3wUFdeGzeaUyEqvDU>vWj*<&GOV~Bovn}$qc=p2<@2qW zz!0k}&rZQ0l$SBBG+4w zzqH;SM4C3otxBX~H`o4bKLjp&$|2Ecv0_4XEJH!xjDHDv*}SNQH7$GpA>@sWc2s(d z%(<%2=QHQ)C$VguriB4F&Xw_ZE$#3{Vkpje3Y~h)x&^g0AshNav#x^|oIXtqH{U%SU5Wc!gXyAw?T+!c)$Q!{bcGS-rGUa;u?HQn;ypo+)3FOA0||9hU1Q0Z}Gz$ zP=>+HDgL29pLqv^%-a`<;jwYE{lWoaq z!=`Moa+r+HZvjeIkI^^>C>CO7?k8-6=H2+eCc;aZ>LXw+cK$1CF%I{?y%GY8xD++XeLKdeaqwp63zB>tF5Z;upz^i z@{Q{rNqf_%it;Wu!ycs?4^g_T_7sc(YcbW{y}_n!U@gA4W7AUzti_PykLw-4T72iT zsMjK}7C$Nm##tekU#WeOGl>7Q&I;Dg$p5om?{LLvI!i-e)^~GH7eaaAk zduaQ}bmI#~H;kGdWS)HuV%VpmBbbyj3|Q#PA|>Tnc(}IlF_^BQ4mx8^WWD@aD%`0E z0Z;$B2VN4iJ^=7N_$$E2|HvkoCE8*V5io3RBx zM1@87R4z7)cI*QQw7l7y+`@RA_MxMvhShwtXx_r;nn>+kl< z4eQmqb0?JM&J{RlzWWX4wD=W{1+uHOXAMQPId${%U>T;2T7|`>x+VEhu(~P$4_Lrue zrOta7U8hw>O>XNWW%9TF5VU`Q@9$cFck6D}vdk6HP6`E)bi(V8aMsAiq?Q~RgrzV^ zYl6sI^U>Lwq_8guS~GMh;kyK0H6ivqcrJuVN!FENq27^Q0{VQ{jWH~5a1SnHd&8({ zsz<{`_W8oAw^WkF>bCl#wXc=W_LDoMddKyNn{WCHB7m?Q9oAUK3fGjmZNBP zfWc+$lUGtgB&N3(vz#?4D!Uzps(Y+4P$~Ayr@AGVsxY(bu_@tXjztcW_dsTa6}@Cu zsd5LcSniY$K=u)7tzWH}W87cEFl3-;8de-?%_>&B#~H)WQqsp0ae+8|phwBq@N2dQ zoY5z;+HuObUx`4}SAGHC<;3@wfsgYOb9-{E1A5r+y`NT6$~4%qINTE@LqJyza(^{1 z2SuXoRLFaP$9!-9G@^!nHC(44cY(ctpHxfyh}R^2f~BJU5vFk&%Kz45XR=cNDW262 zWy%1>ko`0#a^k~=kUguJ@G4b81$sY^hTL7RJES@y3(m++PD3lNBjYuR z2p2fXoPmG=DY00UFOI<-HIfX*brhF|H-`J+s6*sJaR)BE}N?EQ>( zEEAd;#dBDxjRE1C-EeyqE*XmtY8F2TCc-H|lb@v`NR1DnlPSQ|^64N&9E5T}3$Sd! zX`A?)JY)I8xK}k}5Exx#C{1QgJ92z7^gA^X3gU%?kxep;m;0+ZVS%tLn_z8}LVW>t zxEn4xyoTNQ9RqHsf*eKEA=HYxh+-n5TOjjLL~rt%K&8TK;c0*f8Du1V50jVJCqNP* zbl-%@He0!aoRaCt=V9Fd@Fh4xnHcFs6ct6sxdm~GSujOUR ziK(N0rTi8Ys`ik&knYdd_%6W2YIBUBC46h1o`))KQFYl{;$`?TL_ex1FX8Vm^T0Ad zzDiFFo%BCq>d}1=yzTO7>=r*M5K5wxiDz}JYS};XRcxjFQO-%$%0JL*mC0RplCZy) zL49oh!WASjfCu(c7TzC0s#91ZW*%770i7fe@maTJpp#_ce)d@%0DmuE2snuXbDxIT6Kfn2 zVD1xC*4xJf=Dy_0+k6th+$ZOb0hevRCx}qY<(I`~eH^bwL8)e8)gs29tR^8Xt0JkO9A;_w`MrFz;(2c_&Po{w{ui zvP!Qj&rMa0G% zSza9J-}V2vO1TSSyi@Z458#30^Kh8K@)@#xcsw9!3`weQV^_gG42dxz>x|571BL(v zLR)M}q0uYtXDOT9&Q!u3tf(R}_iL8>sWSeHq88#$YXiUYxwxm;?YDki?~*Jzf-cV2 z-<8*uUiJ>&XyHz1&z9FC{Gl=?a=}|uB)QCOJ?CdvXB!8ZG$5sRdoo_yp78lgsh#y| z;E56$Qfik`cz+MkJOGP7hWq;?x#fKb?PiH8L`C=hK(( zpq)mO05pUb;O58_G!4QrKQ#%)muoZ)A;$7D4JAhxGz+7Cabg-y*U|ulMWx!VM1qk~ z>70#QE79ED;8iI9A3paFpZotqhr6TZ?b8#qz&@5BDSBL2^Hr(`Dza>@=~%w}3U~3o zmxjEMTE#6V9f;gXopz^yLXRX*DB%j?v8uOd%jL`}C!9^hX+}0v{!=k&X z`3c-82mKg53cYtIHDl~lEa?fF6=XMD!yiJ6X_yuJ6b+F}EEC~VpI*tr2l3$^OpMZR zdNmV|l8aPIz?~g(tX@}RIZ)(TY|0f4=Mbq)l?=275j1M0gsi37R@{0bgXV>a={+G# tL`l4_{kV@)M+Zyzixh{%5WgVqf8t~VfjIwr)!~?+|G@{#|K10&{{};)OeX*U literal 0 HcmV?d00001 diff --git a/packages/quicktype-vscode/media/demo.gif b/packages/quicktype-vscode/media/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5f8acd2f9a7b0f99300fe4a845c83df609c5a84 GIT binary patch literal 844839 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≪>zL}JZjhdqUpUJdCM{`YG3kI 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≫faWLYy9H) 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 Oo;5K3@k)>Rzr{F56f7{35LWz4cadcU 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%0AEvdRZzr9>fxN zIh4m)KeA%J+pPXFtFv3aeS4xz<>o&o<^Rznb?$VYT2*Mo(-~o_6BHixOMy0GdA)To zLZ(kmKds-Y_s}X5XO(c#_cEE1bBPng9WL*8g}rfde4VBC^5?8oHysknQ4F5alPif2Qa8FpQ@&C9==hGR?(JPK`HQa$eK!0a5a5^T=+iV(v<9X8`-4=$vc z-5ky_5*cC6YqVcM51@` z>k7tj?ok$%ffF*`HMkrFR4yB`9$uF`L<80Gx~Sja~|8R=Cyna?@WCMycmMd*eCj%tJATK_@*h# zHh1hbzYTbKNbI0_GD4M7oODtt99Z;9H;iBzG|fZkP276fNCfnx2lX>ZFdaO#A(i3> zOAQFTLk!h#gNC^SFEz>gpKc&~|H{+Uj0ir=2pJQ3^xsDK!q1(fG3hDe(1}J!=hsoR z%#F|~^$Vu3X(EeB*o?w!{QoCtrvFm$YcbL0LG zkf7(oi3+ysO~{9qe8hEu-FzCiB_QGnIt#!Y~uNG8V!%6jpJaYmVc4x3BO zH@OKqjQPF&@FEA-EP0wDYIh^$^Shu-YuaYX!da}V3vkuFqskAuyxQC+hI_f6@R z=g?+#Gsi)JgOUL$18!yO=y@ySANrWSQq-o^mL0K4%ge)v?u9p2TweSCv1iU3A_Kq7HJR|uxO45S zHe~dU+ObshU;A@1z6t_eQ&veiLtztZ9s_e&o2V0$>NH~eQtxgOYKKkR@e~A&VC&qp zfub~>EE5GBplSLRO2whj!3u~zVh%j#0vjdfq05#Hj6EysE>BBYAl3tnEICoqzOMmana^5;&?mcdB4g+uJxOS zh|Z6FjXkO~jc>~mThN8Ovi?ShL3nrG1}6pz#FW z9ONTUnmyPLev}(L|Gq$+c3!x(-jxYx5S0m zSiQCa*VFmj{XWc(k3JSuEosf4C~^R}l5S;&@)J8oE6%o>na-#+*q&{@l;*C3-~{QssV5e%ha>0c*k~Bvn!aEP-l&~_v zE0qtKc2C$gQTc-D7dK-wQ~={oGX5mY7&xUgekOm&_iUY!{u2L28fTBD^^=Pp;80Y~ z4@tT4%%#rUARok#1=b%+H5re``B4FcsHr91uvgoet5qHBHlwq-sAY%cVui zQ!^G}v|k)xJ+gY}u^=H{D*xu*+c<3YGcrVC-Ut%B!-&2iop!V42P;bzO1IWBE&a{M z+z0QqbyYkAObd7bNgauIzNUVj$3AJ}=ac1sb9l>+J$s^#2A>D%lOlb3Qk+cH(t!;9SKRY3=VMb0V9m+9V^+0Bg%tM1CptHgr z*$akbqsF64FPf8WjGMJqaI?d2gHjTg8Lo29v`KGSno&~9uG~!@yRW-N)5<%#eS`Bf zo)DK=3mk%VGKPF{Q@f+s#4y@1VfeDuM<{o8UBFw_HYp<2i<@U8$_;9t=b| zM7;Gq!g5S7Yi}{n(7LK#F!rT%z7Qju&qLgs?FQTvp1Y(%lTAmT=H)F?bMfnC9sXMW zF9TYyF>!A!gk86oR{NVaD((Ra-b$gtaw}k`l*y%HY;RkZ;a zg~iFdl!4v=A@8xlPCOA_iVi0EG1qrOH8th-3&a7o^xuvkC4i*lI!OUm(dBvM?vGni z^P=JcpjY2vS~F~l)P$Q_PJb|xx)qLb)o@u48bTM2bmY7y;8?y04VGl!j8A#8BR=VI zLC#p`_2P8!_V&HLYFpVU9Oj+ORV*x#B3#Z!ZxzK}BUCYZZ3bNGqtv8Vsavi7gKNQWHz*>PVZzTVw|hCkP};y*FCa- zA&}MrY!9}a&UUiJ@-qg2uHW=?W)#u2{V5S4X$?EbH(^}P{aI8X*cF=`Hv4ODen_5- zBB*_Gk$886+= zw){dKOSs?~U1~`T^255JYX03RFQW4R@FunLtCO2&;CikXK zsZKEcw*>HEYw1*k&o>J=+bDGOX%y5OMSvxCa_8|y~a)<3Ya zfPz{X)NFmYEibouyk$=de_F{IyZS!M_m#xlTlKWbpvR`$>;45_z)YuoX=z{uN@1^c z{UE@b48b_9Jl25sH|i<2b*DEnJPk9qHHDWL4Ol(@HR{EY@|6xkFWQVK`fWyCoCLkEpZ}5<*5Bx1cD|XtHEn5eM52E5w^*WFbHldC)&+YFowwcp5e zt88VAXv)v;9tt9`n~z|H{ZNl--JoNGNqxjhCujEu+o0MTce)y&Xx8@$4YVG&m9(s% z>^XZG&@}q0c7Lr zA@Do2ssuUR9$)yMYMGq!TNgAfu#y}mHxg5oo%&O{EonhHw>D6&$#r7gn+m%pg+}4# zklmwF)*F?UHVnMsm+k)GJLU9kk81fsKv#{*#nvuh$>xD9J9N)AE!)X;sUdK}uwlR! zd~l=F(g8c7rRpeF;cS{L1}bk@_T?HM>r`33}WJsLK!7ifYr@Jq#uW|XAoDsyfq z=0ebqH`|{Bf@+e`kK=>5=&2&pm0=9n)J{z?}yJa?vBZaM&Q6M1_rr3RKAhC`Qg?Ttqw$Hj~8N#avS zZtaiUVHzE&9wr-)-nS4eM;F**Ux%hX*6S-sbsEh*w=WKI&3P@nVfR@psg;@Xl%v?KML}E-Kag%&v8vCJ z5(P=TVsEH}`PRvDjnVY3#}{nr-N??e;=BgU5^WBJ-+`FfMV)h$cStx5qcjUgw+Q%@I1LM4hRFE_W^ zUXwr7Lfhw)hht^6eObV& zb2jS;pD&_(fSkRXaCa@K+WR|Y}DYJI^^ZV5VnOpzZjo=ed6(TKpda6f*w|n z8EoFKCck~4I55G-EvTD&r8{f7XaBt^+d|gC#{iu^tK`z{0!Z+ve#ODVXtgjRVl4~$ zuyolt6_M0=m^pr6z(LQ>{`S!cz2|py858N$;0a9XA;j$|BXF#&b$ZQs48IrwJ64dC zJM!CG(3L7xQu%iKDUHd0GvwcXXqUr$?>dQw+y6OUq*LJ(Ul3b@Ao*z(892%Xr`7pF}k5TGp+P3 z@=Y1^;Q1R5lzYvv*WYM(a;oUlrVr?u$FpP+n zDK?U%&i|x*wNDA|=})ywf@tDBmZ4Qx4nfTXEErOzlqB(gh`I}}Cg1pf`~wCXHAXiw zx}|gI2BT|qBNCD-U7{ik7^6m~Fd8JJ1q9y2NRbi=1*8QH-;I7B+nnSYk~_4i^b4XEcAw@3P@5G4a&s|B(n5yC_eikX_MgtY z=4vcoKUn#6?z0F5kz6rmdid6Hv}96J@-`Htgiv-ZDTkGD%5%mt!2i9GI#!PP`^X{S zYCRyjFzD~Bpzm9$JDMtDsk_&1mFcS9XVWk1(v019{Oz1p*>3$Fo}#mSRQScblOPW! zeZ{{_C4YnfGFtqPCP~E71Lgz$YCiLvh$Xg;v(ZAt`2q%O`@8cKTWRY#A;cJl0P2)C z|MDr*?Ug&XGua+@x>gex#m2?QR~a!nN!|K4j~y4jrqMi1VV$sg-?*VXL#=LAp@mTE ziM~Y3T!4X8nF}xjc^1_;K0^@>WCZYpqedkA`EG)+szBb!RfboZnpnbjXvrpEl+U=U z4pB{m{Gwmop+e19m(q#jI5gdtWx&C)g={yDgi}6aqAI!GZ9e1`SyZp`H)&Dxu0}RJ z%OZ`e#})OT#c-xeiFAo!Cw_gTJSw(nN7KD6~ zXHeQw@W$$H`WcJwbh&79r@AG2QZKdI$*2xv%}WAff^y!MS3}-@R|WQyCT8$(+WWTG z4!`vo+BgbIy?*|oNH0H>@7XUuBBOQWaq5rn&8~XkW&;HO@6MjvzaOl2SdFR4l79Bi zg`#CX>#qLOuf zp3?33A17-VNOBlTK!{%Q_8FTcZx}B}>2`vCxeIfBm{!$v36;8LawJ=6yt<#i&=Wk` zd=v~QOrTHnadYLQ2Z8jk?#$WKX*?39IE!)@MTdYvwm-Wg+O+XX4Ki6C0kXnK0kbsU z(!un?Qi{BCl;5LrH$h2C2^INzu-1~>p=!7uI?gQ9iVFPy(|O(iG(ec_+y8^<8VUU| zU`8>A(Z-TNOc0OkGJjL)P$C;>K&3;bY$TOe6UU|3Tt1c|V*dZZbOu=u{{X$^8jT3r zDS$=#ljd@KF(QWaN+nZx+NcRj#UzHFsx1VuBY)_%xu6L^+P40#Ob=v*O+U{4(?_3= zEuJ4}M0p%_IoXHE}=B&(`9txLd&^+JO3A^yRcWurZ~2Bw_f9Vp#`uh^|j|M zyxWr?|D)c+yru?laP)JqO82O;LV9e*_04pfWvo8^HHh$)PX5vJAVy+LRoECDPt(SV z1>s*Cgq@7CV|6CE5OMpUC@!PMH#{%!C_Vz>h}{gxv%s9T`uM=ob3K;rLG^vRn7RRw zMs}UqI?pyy1IoSPN7g5@-D*?nU)dp|qm$6FXrxjDKyNBY<$IzOrP`}Y5m9XXhWwmP z!~|(=jtuiOLv8jkMAua*bw)3^wOnc#O5DyGzT#UGFbe2o1>DX4V3_XPzPD50=c24D zc8eoOM=aIiim12>wE(F#38beeC+)wWQOkstfMBC2VJP=nrt28bQh7!hA)Te!NbSEL zO(TjMe~`M50ce>C>FJ?xd`;CNdBQ!w+_e(Tvr`hlNX?tAP#hw3tw{jcO%q7PRY)V} z&NFxw5D%-mcyObn)zy4!owM@!(Z=`wXFSrcyjh=%f6HCZkc?wipx!XvkgP1XzIY)y{eWA`B)eI$yzv|E?*z+qLmbZ-WPHedIfl zj-P)8FLJVe{wz9}`}bT0L*JGZWF=LG*m#)8^3tH4eezFf;9pWj!05rJ<4k}j!!JZnx!l&?R?g#RpPoxI z$O$EN|G9zrq))JaSoIlAl{w70B=d+{klf=g2C0nd}*5d4jKUu zHuIF(LV9_A9mT(jKuKK3DHD+Z1h$6Pg<_?w!9t=Wx5g6WycB6x{X?BGWVwgOml*pjkQJ`hoqm7-k-0rv#C;E^NmE%l=Fi0 zMvK^x3>d!^jXw7dK~kB!rGr=oz$Lzkgg|wOm=hqE9W!P*$so{F7_1@2Q`o99D_hZ` z>atYMnHo%Mo;m`^&hdDBGb~>@7N(kA(eGcDU2Rw)60bMmqFQKh3Z$)Ym=uJa#?@mjk)^B(P0e0;=k}J4OZ1rUn;l4HH@c!(U>71OtzF>OGsE$ zY$h=~wX6Uriqh(ud4S7|7kKKaY+wgXmOZPGR_9h**qhquXyNZG_fmcAt&hn+sI02n zySpwr7y2!;_>NXJ+I4)cvSFfRtyM(pHqf$0*02oXE~Gm&HkjIAQ88O5h8(CdG;v~j z<N?; z7d2-a{Q4-kF;q}O)soYG_SeOm$L!St5+(6Q-})H1ez`=+B-O=|PYcB)e?1~tC)SEGH+lknL;+Uox|jPem;qd1Za6H_tm6?K21^!S zKRQO;GC&ni*2i6yK>>H%g%W~8tlF(&J zpkO%a4qQrG6KzU!rd~4;P!56B*gTHSB}f(bkOHiC*#Qxi_W+rL9(-bjQ?pI4sRmwM zhi+15pUur{sNP9P3955w-c^$YvuyP&w%qjLK1DL;M);cUbw zvx(RJRaWiT(B!Ghc0D99@EsPjY`$tlrWw)W@hR=C1_AETL?xD7-T;5GuwnI^Z;MgD z=0*Sr;Kg<5dC8Zbz#H7H-WJ1Kcr~#Z@Dy6dj&gDM-GY!FR!Lz`%*;;GlqQ(&cyaz& zWAoyyBsl_IIeMB?*zzho*?B!=*}Z&d^=8J*_t;Q?kLObL<=ll$r)>7J)tl?0BJG1K z=_yKJPz$PK!s8#_n-j&*@Hl=BPKo<))d<+OyJ zojCSTws0drw)$}&JH8SOCMwJaoLO@QiKC7Ye;MjMNB*hJ0gm&aPAQn2D9qAEwFXNU`ZD^>ulal> zaW1nX?qHAZlPbvs0oA)E?^CrHWJ-HteC&(w!h4}$9rhI5KSae8gL46YmEde2a;t8`14Z6 zBJ>Q<;B>-6%9$t$ZD=r={7%NLFJ}x=p;}wnQGB|A)mof+!BEFGGjuzMlqp);(u%5t zGKbf7OcttB7RH|&^R>+)S&>uyradqi+HP(mXrp?!!=85C!>2sPP{e&^$Pzv8AY2XI zc86MeIx=Xh`es4RvBvGQ80SUj^I**Dbz>J+3-TfRUvu{;tk7t4^GkPU&rxfwHsc_+ zxG)jBt%|@_e>3N8Q)409Bui7fb6ZnSNrCNn_AEn+Y%t6vt~a zEn+=klXMV0rgm9 z*xYt=u~cN-OB5bU0sl-9xcNB%8wTN(XB~!>05qO@=cl_o@{nzV`&#u*$v z{`j{L&8J}?S!g-3t6KDWGnniJrI&UwozgSmblN+EPb-v4uJ{V*iMJKam0;HCWK9(> zP9eIpA-|hLHiQYr{Ls1BN-lla*~k-)V+Pv=bs5z#KSI^pQcCB*+VijA6CIsldd;MW zx^maRNzmQd&=>9fffUDqNTs0R@Cc5o2SQ~*T&gcUWh==0gS5@%733;^%)hc`3eZdl z0YK|~{A=^2WhCCb?4eTZ{q{Imw#sJEVJV^RPnY7MDD+U_uFNS|>L*8s91k)uWVfH3M`xGb=SNSbK==**9d{IwO3&Vk`Ot5!A|APAI zx5u{T5-*}8jzAI$*W%DwG^BUwHJn;F@+hnc8lEPAVk-?V{2ERWjwlzdRJLz;H4^dh zJc9WFRQq#y@q*fqHOhs{LLFDy0_dY{yU-rS00mcCHpNIlp1Hp@MjkNJ~u{o>>OW6`9%~#l#={6I(@B)B9~xYtgM<=?INknqin8rRiL*lrh8fo zRa)!??DxL=?m#7!C2|^ryD{cTm8zwwA%FTHTvgt#_+M;&EL>?vY9?D9*uS5Jtgqa- z6JobC)41zwmv`w)Bl^Ya7{;HNbz&{1Jdbns=6g!e(&?J4$Ht}^@c zMY42)t(6`6)gp1_)x)8lII!Zdqr*s|8xcH&vmhTfu}Ng0Od)Lon&u{gV~Ap5Dbr`k z->*d+LzYK*kB6kVhKZxYO)o~uZJdFf_ks*1Rp8dYMm;-XGg9E=slH zg(obx!A?;U1KutDZ?VuG@Vi9A@vcI8e0Mj{-=QqT_J-sj8a{o6NnlP&jjkBWFdXyO zpgw@UpEabM*iCKSPR)bczwLe>>O1yALP_WZG^{X@itZ`%;zaw}@{)sk>(ZVY-o%Kg z&(|PZ=&7wnaBA*5UbyWZIPuNId%#0zPaSsb9IP#$v4!M0HsJJwf+#GgP}`Js(%u*} z4)UHV`x2yf^Z)xNgXg7es~_E4wE2rh>bHKNWM{<^1a*lY2#wU&zvxx08TPy8npRYY z9{Lc;k6&-eczxjHtWfk{If7|J9~~b-nq65l1Lh8+AnKQ0DZDA${8MkC#>r^9b3Z!U z9%@nBv!l8;)AQUE?rCE3%P34c4^VtZQ?*qN;dlph6 zHOA{V>cKU;H&MYjJG&40#tXIKrh2gkIq&;ejHcUyg43STd8B)~8O47}nlF40jYUIK zx^f~2pa54&RW4Q?en`Qz)S4fB4d)*UkXC;KV(>8q22#K9n=j*^I`f?ZK$pgOp~bwj z0BPDw#Cre&a(|^vAf}QE+4u74hpMO0DzAs;YMigX7B;?Y30rX z1e&f67%gx4(FMCK^ZC$ka<7~uL*b54jm&{&|BCOVQqRoYqcbW)0cxZf6@#dcdOv4RvmkmPyeo|o34-@XC0ITQM^#&+jta;hEFBvjp>jN5a1Z5*$y-`*^h3E7fNyP zapwmloA%BI*}AL~!%fcWhulOGf;(Wdhh+ef&P&zbC=`5pm+e=f0zafKN^Y#GJz8LD z3qg%GrcMNar0&q37%smce0=M?3~_pNcr+)+v%>>JJ${H%)K|y^>U|qIbzx8G?B0KMSXs2|S*3)`OFdh9F0g~We#Bs@xY9(DJO2)NoBtV# z1=N@kNgWIdC9H8A!^YnigC5kevPK<3K`@?oqzc2lJ&v#h%0(8rHo(4i;R8OxCxe|*V_4mN&^14gcSkJ`FMZ1o z`k~rnyo45z&day_Pl?q`X}r_Ft)+8`n+`B@VEQs_>}Dz*K>kum>u~&LLwb@|0|(C8 z!m-J)0JM(BwIss)EQZ5KNv26gAl$@|P{=_V#WA;MXl;AB7xKg=TgiWs1}H#uZP!Ed#C~<$rGlk z66MSdk@@g9^oU7~wNLfxXU1Ios%6(s{*fb}&ikiIbjZR;4;eeVU!=0@)9o=io({jZ z#lP1eX#@#KpbKIVW_z~sS z-LiZjg3)!2+C&Uc`0GH_u}Ici6mTQk;SXq#r#a&5oD?Gb(f&K_RA0+mjMWZ_awh83 z0uzlfOo^KW9T&qQ?+zx&f>N=Ss~vmL~~hvri5ncD?#UoJG6mxVPJS z6vwhOA|1SrrYxX*6IPzodE0qd?{6Z^%78|HO0Q4%1*ZeYo`Tpy#%msM@+ow;TX4m5 z&{zAZ#2zmPk=VRxjj0R!syMfW!a{-!T}h)fyqGU|#rwwt#H18{D%jY=juWbCa!Gl$ zab<#?ZW$)pD%&K#QJ&Kpj(2```fz&34O&>K>#plD8&|zFU0lLjn8)j<=wmPkG+#5O zO_{l@xXB4rdg7#6*Q$hSs5YAkd99_3!@`zV_dVGLSsR(Ltr*m%UfFmt zr)+dyls<`_Z7ehs7~58i_!*1}7?&L35;UdEmXq}npx@5RR}HT!81(S+Nck4=Nwu-z zah8o3B53BsrFlVaEB$iK`Cld+u#WmqvZq!=#p;maZshTZ@O1-{)!r8$Bj8Xclg|IH z`oZ#@{IS4*nE)`CsZrX5Lx_Wh-LZD;-Qjg@g-U(kzwwg00Ja3(dVTGr-Nte(VVAeM zuh_S@wEg?l*XuCG50=(Do3+hZ(;^dUsr5%|iLV?;VFGodH+6q+PCib@DG^I(M}lQl znKT&as26wy)~jORNQP7}4Woc5m=7|9)s1||12)Ct&KjX~Zy9-x0Icxp*L-%%eD)2} zjAh%?NggOyj*nPgvmtWGVTMLCNgaB>Jq?altG$C zJsU2gB}pzUshBPPHfA<$Ga^2QxB)AU)gxeO@WnuP5v{#!rECU~%2s}{ALaU$ndw43HcF0WIm8v2;fU*xSfOUJ~?J4B!;6AGL`L@EXHiF~BB+Y@{kE4c$3f za`UgZw&a?w*zPj~=B>0okPlrlyl@d&bl@&7#i%XUFq=ZLJ~h_& z+HHx?;<>7LHfe>oIcxsMW|r2L`|l+*mDKEh*<>LcEUT^i#q6-(T3XU$ANtO8&1ZDA z)hn#{-2XdnP((FU5V8GT$6D2Bb@d`Ynq0z}s=%fPqSO>FjVgg8E)bk8+82fnMAiu) z17|*nUnEe7sOFST&(z{DZOJH#1=587@Y|<`|@I@vgP1%Rid#x-?#6 zdVSa_DJ|I_-k{D)4>4e~raSE0;%#vm7Vc~k5uzN1ufynW0%`)S6G6~1_96cu2v=q!XbTI1 zSw}=O-Q?uN^=5Dln5RXref1>t*mKfm13bO0-#(IV7+uqi!@*1%HDx!MGV}%0lqL3_ zAWcVA{~4&yAcvZB&DU=n~!+Bn>Imktqv3MC$@n4Al>X2e$(p}bg5|W?3piQw~2`7gO zNnGTr4*SWoYZ#rahH_G1dfW(v(82M2$oYkFqtR)`v>e zM*<&B=>j!l^Fu`H9%zdHLPCciS_}|5zsu6xg$bDqeP)|*v4vzX zmz@hDOK9ChOBhx(g2q!MivYulal|fa*&4{cv^oG?oEUO+&BNWYJDvEfxgo|+{4lut z!{&4DEa$uAuGx3NBRIjVC@TT$qLF78U&})PG~+Xqvr6$orFb9ZAH0@<33HQ1naUOs z%W8*)S0vI5F-bt~F??K|Pjr~6DR3FI4!nO93peeRBq^Z(mGyN@RhAOi7OskmD#3*n zsL%FNwIX^(ISu{D4V{5}`sBZ1?6fyR4_j;&g6+zbRzHo_YAxx!7Aw9>!No~w+K(*^ zOVOi8GRXH=!}u+*AdYU<4e`Q3Jub|s0%;Q4Rt>}UI#r_o9dh}&U1Z0%&Z2!1wL`G_ zVP~J@md0DUf!qPHYk(jjeyCvoHeh^4 zRAAssw@*|?v#|oHV83M7#etz^Saf$H&o5YKe~g|BwHz6htSfbmZJNo}kkgq&X@rQZ z12vl)xrua2WI-7=j6h)HxTAlYbcX+4=CDa&LuYe?C#8DHBH1t48+B~Cu0E0=9Xr!h zHk>~kh|<|dh|S98{q(M{wM#h+c(sr(xL`LD+AS7gIP!E$=aXzhvbS{MD{V+^g-@NN zk3d8J#z-tmXZ+i3O_kffyL3X!D=_J!*TLnwadWy}XCn-s%Rjvmpr)?eN*8>Q*^u(7 zHv7|P7F;J`c0@fvH){5_bDc=@r@Bj*u|oKW4^h%Xw8@oJD(z1V?O-FmQ2Hfm+&DRl#^5bsU zp1#4iDz{T9Yx4>*RioN{XNKN^O*+o_Y_C>L{fYGZO14KpUUA?ZXtU0!ps;JKSx3xk z3Ct^Cl=^gxa>sj=bF7g~;x*64%Llo9_9Zc*e3;kH(Hc?jbQ)y@)xf5B^0jiX!vv#d z6vkj$4i4s2ETe;CV}$zT>VxDkxkD;3m{&xD`so&PSnCwVgn*;>jbR5MlAsg3re4@2 zKvV)7r3x2V9uAH@id$S8PJrV6CNX`ynhI^aH8%=w?W4CyqkX6{07t?$kS!B|uu3)x zmTw6Pu#DzWl#6S7sV-G{BeP0r-&N2|0*4Cje^DR5rps{9OA(-R2aWk>nvlN1@v9OB zrg&i+><3+1+OY(6KicJT?B>=>>)cWd3{%FL8@3j==nNhskWGq^tFjsMqflyl5anFC z+Z)C;A|}^>j+mkj@;htFm3?GJ)7_GJbh5ToZA*~vjm%y?Gpyuuc4lvhzPDQCGe-ga z^1g9O9F!kzj7^U)==C=X%4rBTN*3hc1HOoJ zGY-I1sU)~lXZ`w^K85>t^xy>o5=x%n5yZKroxc1mitonqA&+4pe+Un$VXf8!`r#=j zYM3TG{4taG2#%Q@Z*8x!-AX%28FY>DCnn9znb zyvB6QMH|uP7?9@}P-y=gPYq_#U2AJwLWih>)9b-u>e$iG%&o|oC+`<>{|clfnELEl zx683x7qGvt>9O%6bZixf9W3T3;XYh9gGf3o_PS=X; zE3k_0A2l(3xc-kZ&O8s(;sUPB^Rzz8&Bh$z$PL1PBWz4fOkCgu7BA^SqmDwMr70UI z`NCR^axRyZE@lgwwY5f3voxO|NL3>mFC3T)wM}<}lItOotN+gbR$C0|f9Z@ZpzdKr zbj0e8k|oJaopt~fG{KTJV7My}Jdh^7fbJBJqZhPa(*69|kzdb`d>Bh^9aVZwG>o;e zi9K{>xk>A5G%p^RG zuhW4=&c_5$Vx7dS^e<~IsLrZ)cQ&ujnE)H9b*XEnu6Qm$Wz+%O|1(|IKTD~-&XNCm zT%Wz-JW*k1I{z=2K0bQ23>Z|nI0{^Jre|z<@%OzAmeB5k9Hk2pzLHuHTw>iuRpf?< zwwu%eb>hT$Zsf+R{4M0pmgn9m!q{L_R{t(bgJMx_3AV;`brW>zx;8GIhH>4FZY-r~ zTIbu233Bh?pwd6sa=KHmF{vL)wOL^3hFaa8!ini#xYW$LXj9;Sb#482k!%ukyVt&x zj@&H5u&6xPF5cfMRF%=xYVx~yFjQKb(^YFj0bSA8{o1^3Nui%EJLgmB0f%k!yH0pX z35GC|oALtPAHAySCVRTv^o%9;fw*8J*RCN&z09Mn_$_Krp`GiGv&@?Ku?ia88X#Xg z92B&;7D3_lh>EGnp@zaX)`ATaKF`<&7oCg3y5TE#+ypdF)cAXO(chC&UU@;~zIJuh zxT?jf;XQ&c61U9^h;~9f4x-B7DtTkJg`;LZ7xK-Hd3?Kf57cmgE9WlSPy;)i=xZGw z@k$KYTTQT0&$pq~L_ra9ZC;?aKmM)io@W~0m#r8So;+vm{U?j)O|ISh(fNgErUXzUS3nTote4IQI0D)>0x?nVuD{4n?V6F+)lX8e(AWckKjck% zB3t}lwCF~~&_7$+_g&jOkTW2XDf>CPGvwmHL^0gMVT#9Z``Rs`6TgD86^U!1yy=<* z>;nNdpyhOu^K{ZtVJI0OL>U~?h;f^pqag1WCJ^$V6AUlp{Wpt~@ZmxAZ-lJpZT_SC}DETvN{M>A2L zhcoOyGI%i}FU{uKXYUVSgV)Hkobw%K=Qfx90c*v(x)}PVm>6tQ$RhC37^c8rFQgV+ zRE?r|{jFy@MgF03W32KiBGp-x?y`g7o2cS-%2)@T0!CS#l7jSj65t;od93o7`d3mc z1-)jW`r$SG9Scv&p@+;Ey}_p~iw|j)ey?}>i5Df31B7%F%+E1`$TKj{G!-olS5OZ3 z>*BtkcA>X-7)y5wr;=JvmsUaPpbPAGRk2TC_x;R>R%bXia!dT)tWBMecHH+xx3gUYL3&q)A`+1|Np% z`i)IkCFb7MKUCAa^+rqS%*-u1^=a-kgFmBbF8R8$(w-)s6tglW4hu5Ta5>KHpGD!K z&SQ%&GdvO*LAdd_?57?em#Tzut&|zcE}Y-}hvdkYt|wu4uVh{9TG;4wf5iR^WV~!4 z%GCyx+h~HUi3&5ZWWK#(rhO3izUnoe?{9xq3H`FE0+&k0OX!5x?vS+y+uNrB`OIld z9kQPuUQXgUghSOh_R?&f$#1(jj3kqdW?{#;l{(%ylB6K5JcCS}V@HQ%0BhX-ix{Ka z*nlfs$!o0YZrr#ivJ`YFwt%Md{2Mb!8}q8>DCy{ZTM9bm5jN0?dC! z_HQZwYgFN4>Qj@GFL)9#fE2_a;d#V6fT3cQT{g$k4Pwaydjc(VXSox=o4R7GJ6kUJL*pxWMt2Os<(bQFv{&CsD8w@*YQC(c=?xB0Npdh-Z-WJ`iXVB?41Z=^*z4y zaU4?pKbTJ3YT*31ZzP3VuE96YvoIZhJMdutr`+ze|M`Zb?$wDCpvv;|dxQM@-t#r@ zCWn0r&b*iEK|4jCBhDYqcbRM|az}<8t(NAl(48Um-i6;rM*ApddO#= z(V?BS7jzKtLUco?wtXz~c>8)ReKrd(7KT%H@myJ2uzhyoAM6sg19MvmI<8-I2^XIg zcD4S&T+Z)Uuu{zvDwz(7PgRHx<$fZR-XV}-q`H(Hz{pow^5U)D-de1!REJ>Po8Yj* z`_~}54p{U+cs1;W$*WGGf`_WH0?!H^7o2c%!%f7nCt1B>S_TY=w2E^5b%)M5GLeGn~tV^htI(XHM=jgj)m+vi#a z>V(A|WA(aNjdxQ2tsI|Ay=V=olMOjWQlc{D8AhevPQ#(MoZ|<4Mf}Y*rn%ony`)Df zGP(_^H5*#%!dS$6l{aP(z?lf)An?qdP6CEMJP6Jxl%9-L}dzHL($p!k)6 zPU(NT6FUTekezM&!x{tU840r|j$CQw);;0Y=d zU^#~h;b{6)(u)o5Y!UFyL|95An3(g!rb5J5XCic~ffwH~B>GDhmT!aNKk(QAgJAv<(THl5I0#T;pp93X0SgS;0vtDONERh2``|* zm|w3$+;GS>ylJlOo2KO3xt+JDZG;F16-m4n2H@9E@^$F*xnj~3=&^N^vope^&QXWX zBMJem@pQdqTzyekeKl{!oPpN-`1@6|9oQl9)v`#fop_)DU?Q{p@9? zyVr?yf6!FXRvGGiD@e@n3gos50v(pEl&fD;Hl#m)eusYPqtKIgD18ahEkRRpD$A(W6_@M9p|zaWm{D zaw}F*&rxeb`du~8*6k&3FeB*`kkEuR>>{{GI+C94>568O&d1Gjs?yg6pI+DOwA}mG zsPpkh-s2*A?NOFCYiOM#TQ8lt8?phP60pqLbuDz~IH02qr_*>v$oRcpy*ke3wbo3v ziv^9%+ox2#=i{uECUwclPTmwe7Ay97dD2WhJr(TASd^=!c7>sFR{j}7-m0OLt=+XF zvowazmd#SX?=Gf&=)IKTp+e&PpI6id{uiYGulc}lxGExWDz2{R;>_1lGvBl>n0Wow?7szVg~Z@gMwv>UC~APZ$nE+MrDObp zl850>gyghW%7JhAJH;qBG@Q0LTS*4Jgsmm%=Fo z;vm<0b@cN64fdbYy6>q097UFKlX-lUyKstw%4A?eR?JeO z|Jn>>km{q~wTLJTS@mu^sNt;QRt3^VbuG&7A6JcBqN3q{s`Eb?1#Whfj6wFPUB2>V zji-_PC#Cc$9i*VRb?STSUDnUoECt#hJDM)qE>5>JT=uwD7<9v|YJG=z<&nGF<9yj` z^jkr%URUT-YC!7#t@4V=6dh*&_s8_Qn(Sh{den*3AZMB^8~=;ItxKY&mUv}W{QkAm zsS7L9;=7ceOCNfrM#AB)5sWbRJWA_HS=~AMsfr=aRmuMUmft;oE>6_xy_kId3|)Tu z^Bu9sDK8->t)mwz_jV{r#d}lFmQImVc`||LKpvqD)u`j>8GibpIKB zI!)=$wpPrBNu5SYgb(oh7M1_uLQeO;&Wp3sy*C{^vbaAm>`#+Y_@(O#DH29NIWwts zv##5Wd&&@?VvyfR0)1&pwey0I`!$Wv9}=Ofq`&0D|7gGX-grLJ8l)%1(cKg|&`C7_ zLKY3<@6nh&{%B%2aGPdOdRb#g57lVM%q6t2`C^Pa)8tboWnLeWe>!?vAilSp9z9A_ zZ5-g8hKNU^p^y?j??kfUV*ajTgkRztE=D2jJH#60`NNf^`c=Tt0J$+?=Dl8WACl<6 zTNpKahZ!j55CaiI@zBKFc8Hdu(NxR>&UcWhZ1JfGu$D);g!Pg9viOoVVJ^Zn=3h~Y z0y~qx#EbFG^4%$GXIkesE(_U@2a*78l@IX3jaRv~VSoC^8%fs|wUoQqp!6C(%0zC! z%vS-jjWDwtVsnLS`&;U&?-~ zF%l51MTK#KX!0=t;~y^aQUVv;Q0Od^_!2tgZXUPA;@_}TRdTbR)v^DQQZIKu6d8S1 z7hwCbw$-VAJ@Kuz!X!l~L)R5Oa0{G{1MqCSUzwRqlgKt^BK+{67f`@HNyIVIH{Fm6 zO1jrg3R7k}>hHfNVah1TSh<^`BbusALt4`oBV6(kk-1rS@ct4t&&51bw!gb+Y7)`E2=sdSscJ^KmP@wm zW2XEQJ!~(YEsRWT0404n}P0BSF3n(pe zLXX*80y`iSnbOc>yuX`|2;$RJW|Y^c;v8h~9TMSXjR-!X*&h(3}77ud0KZ**Vfa*xn zC7BUbrx&Q*w~l+J*I06)XBY_w+myHr;Q=8T(!}i{ z-be$9MjP>qAzRs+qvf6BMh)msHUO8cf#?ikG1r;CR3m69W4rcy)OE_}I!YyzbPw?r zF-_t!cEbvxWO||{{`xT3l8K`PW*SLNn2ca2|HBI56a8JT+b@;YNt}lTKSYc}?krZFKe!KL7oH0uCgFa2oIS2n7NdyT52LXx!3)=XI zq@Ov~Mu~c~#IL!NR6-^-X@(AFnqvu7dlnu#{^Q{|h#d>0PvhZHml(1`SaafoS@=|J z4?S`;^|IXS4ejhRyQw_=2c|!axO=7Z0#dEmXIVNWS&Xi$$ba;Q5nu4^3fwejs|nQq zF>Z3%ucs%yIbS20JhC?fIw);uaru&Jqk!DNuV|*51t#J+(XV`5gA7{!C<_$C46N{> z$YWFJc8G)1Y~5x}xA-ak^4zcLj>9sbn(8gctXE>(D63H=D8p4gaiX;Y17jrl)0gCX z|C)sE>MXJAKaczZ>Y9{Dk`+yrZM$$tI(w~`OK{HxQ|V)b2F8S@PTHWwA7bN3q?)g_ zP$WE$^q@uV7EafDIOz|~GV$Q=f0t)q+FgEx^H?W}E`mgr(_V!vRj<<`GnI(cshP7J z!ShroLRMiaahe_VIeA5<>NFhy`l}*4YXsvzyv7|aHDg3>seK4!(LPcCEo+J{$~L_J za4k@c|5h%lS@qW0^A186;oYA4DKOn>C5=ZxCrJ6p7xB|&c{#1`OD}it-`Y=e{K>td z5-6vU(;B$k^5~|ds7oLIrgf{Q70%dlggl973sQf3ipElsvQWoujUV;5^3i>5W^2`B zJrC$8QkDzUbahrqy#;PCptT~H7q2SD-xGOFUJ~>rSpa7>!hM+_ugckG^E>`vCBUUF z2%d9}9+5Y=cG~#+68%+MMmW}3?v}~#R@>CEKa}S-mkKlfa(Xde%xD*PnGK@snmSpLj>^O%<=#^EdXo8*cznf}@sVSN1in0XhYQ5?_K2|M_=+ zke?)yI|>HU$EB49a@B3byR{;_T_h%5B(qW3-&{BqT9^O2Nayo(qb0yR{7Wx+J;_8z zVZ?pjXJo81a}hLi@PPbySqz);#O#JhvM$;?oiyVXmN@c zE5%DSn|H0fuYK@+zhKUTc`)XX=YEY7U27O61!sWiw$enDF;5?@T$M|Z)Os8r!ARh` zyEb+$xTHmT2k8?utIsq+V-mn)1@hxwM%xlzTLC157I6GpTGdu=Z$wT$Vx0ihVMWy_ z=vey7YLh6Uu~w6QXMEd|o^dK=QqGz_p(o=Z5f>;sxn#RT6wx~43KK?+x9QGjjy%pr z_cgmz-O1)fS}@Wa)h77BowG0zWXJcIMZFC?gW#8-NE_OZ8UDNOt9{eS#l?0aE8cF` zvU%BlqkcBW2rz}Ik>i^;-k7)6T6EqF`(8y7+e2omKY!$Z_;~}PueJ?c#$$w3iydfagR}IkQa~z>J2MoHG#@DG#ikIR zjEtOALBfSyGDZw(0bnp}@r+3}&6R{O3Elwf4&ugJNtA4Hy{?viaP;|i)?X^t;?xTR z)xvi^QlYg?(SZiK;!|03{OZ(LPbFtQT?*e?8*%TP8H{9!D*U)Tzm2;}U z9d$0Tk4%6gHaRNsjWE)Lc#NQ2IgxLIfPpLdL_&1vb(@X4%h?!K#GN_` zoN1ed>uMahDW(8C3aPJdUhhj~Mmi46QZBB^L84S{_QALoOR7{di2D$le zA#X@j6-k^L+j6x}59RhHo>UHz&7BQ&+8yn1-;(hB0mmxWdy}>G))nJ3ee`01SZL8T zD`htc(dJtPq@A8B_2Qzy2s}P79MX`n1T4FE#KN_vJ<=c^htK^vUJjp%V9_KJx!z7I zRa#a0A1U~X4C`pd?HO*gYIPH64(vbX0lWP_GeF}>U!;W^6tRz&ozpAzzFw$ofu!GC zMvrInq(1z+HhZi(QPxw#4p|UPYE9}4Vx0L?7h3(Ujg2umiADd@-X<-o^j4oiVQXwO z6Z@gZ2evx&FxzYu0%Y54D+U`!PEW_0~*Z7(FfDygnsanu56sWTFtxSpUHnn2xUUwVcGCla>d-ofW>y4uiFyK!cVMQ(@ zD*`nV5$L2mJ9$Ya!`g~^MiGMuG)rhSU?yFQOO`+h5I^b=2=0wB&P`D_KCj4e%iXP_ zC&6^~&Dg6HT`ZJWOfl-d&b{1J73(<<-6h7fURbE){TBL}#xb_#An8AtE@|05T}$84 zA?3gj?$VF6FY>()WpLX*4U3ivI!5}X?`DjgcIwvU2UEZ2u!k@C?I4D>bDpvdjw zCD#i~r={`N%C9V{`zpE3KF@jGq^NhZ-lM9(XS<@(%y)hMwBV}K=4Rz%zuCD`61}_5%%WJb&2bX>HR#05Y^vFa*Hp29zJ~!@^qP( zqWb%56EX1j#~1uy?@1)#!E3za5Hx;E#|e!7OT6zsP%rblWhM!EMq z9()Yth?c{pJ5?tc{43`c!|$?#=RhXMs-E(81Emm0O{RIp1r%^;y+0&NHoRrF6h9ch zN8I-;O7IRhVpa@_HC`>wW#1g;TuuS6SCEsqPWhmQV@XirNOA71V0pYsR4--qprnovcb_t~5_M!ZRf@Msx+6w7T%Uu!=V z@GHXrSRR72H!4Tak@6Jk=}3NVC3@SF2tv40UJ&teP>!(dKe^VlojBS*Lw;jwYy?Ho z5f*d-{-ZZmX~k#)EV8IkSOyHXvUSxb&S9zQ%u8C4B{`O_$aCRmFO5p&GDjZR3Y;@F zCD$sQi32}ZJEJjOuqDKftv^6rswKVh3Wt&9b*@f9909PRdq&#RCNKQzl+}6bTnj=2BZvWCFtjX9uHgw&U0zD870jqJd%Q51WQx@lw}!rNR!ciuq_v!*OGcMv zH9Vj&=yCq8Vrv(}V5+QJFqhF3{CH{MCljOF+zQQ%8GnX|>I`vZwj}!0!yiEL+G9+D zr~zZN`XXygCHE}_k5>){xfR@r`Vech72T4VTyZ6$_6DDCuRl;kcNN+vf9uB8-o`fB zz5d+PLp@LP5}eY&_FCpJ!2F`opm7$b%)2LRayMudY8Z4alm9gbf2;S}N#W&!kAZ z77Dl=^XJ8RX;QOC9@CFAc$^MiPBHt-)cNXU3Yv+wKgFgUQ$?$pU4ju+qU#rr4^4Q# zEXXd&v&}j3(qj8TI~liGYz*F>vB56l?4r}2W8NuZ_qL~Zyemte+u_xmeK?Yonbarz z%}etNNE2H&mQkfXpTrg)Mt;pUE(o0O;9YXI{ocE8WIlG^bq0RXS^F-}Gq_T4!!iOR zI5w4I%jrT@wM70zqtc$}(By|Kcoepd3dw;jhCFaU$?*|N8W6tczg$B4&QUsst;P>W{ zvT9m<$-hMDmvQE~)s*NytfzTwDw11qJOSeKIYwVkH|X7`B}E~ISl)jx>MQhyEV4%Cd&i(YvbSVp`W&=Cc;`<-#Fc* z6#YSt7bIx}q`@_tg3dLHeyw%=du(YE?2#dLn;g&muGMPW;ZXEPo9&lxUfe&OqF*<7 zORdojlzV8*t^HCCgW0o12)36m+O$LP8G&<6QHn^I{rEiljZJNnjf*dd73uLiQi<&t z8}686)Z7TJJNM#W|M~f|56BHkC~J4XGx&EbIn@T$K^yb+SjHc_2l^(m-$+*i_&Y9JYba}H_ol* zpuM`2HE08i0rYl?TS>v=&-rZ7q9m3V)ve034LyVJ8}_z zl>5^-ACc`ENTeAM)dJ?^A&8F+hYy3%TVDQ9$~PEU5PKzx5$B*RO>&7wGOSy08~D2~ z4;6W{pi9}0Ir}^&AfdL3-9&;cAQYy_9o((5ujoO6Icn!POwBU9_jIa|4qd~%9#Q2O zVJM|$QUTuL?e8}OrC5obc+l51sqT|Au)~@?ufYrl;LlpN)(M1B2j#Mj*Y1la`BfZ$ zhJ4)QWZ~+e$R#w{R@m{}>D?l{d8?-!UZWoHPFFink4NUKwMB9BNu z?*T$5_dnj3J~IAIv3WTGp!E>Ar^OCBq%I+_D<=T%ErIF@@c$#firF@kf#So2=#i37 z()g>Mgk*O3hXCN&KIb=2{HGzphhh-o`L1Y$j#GJp`l7@gjwE+|3WUStk%#U7q}V=( z5U~9Z0j4=-g+0mZXGJ@1&m+`kX=_Uwb?GG-MoFWMdcyrL+3nm~i{{<|63Z)yBuzkq z4VbvbA9}^VKSWP!OE$)fA2m#dIs$V;0#KC;k=jDMON0^+7`7q_BdkQ^B85`Cm@w$T zt)UdHE96OVaO=I8A2Q&@2eXA?$%j&`juEwcNwf`DH*#}J!MOJKxnDd|({XAld!Txx zA!;cjv5fu&Ou<)9Pv4qT{X}kmpTk}b@}dE7k23Mu{7wbAQi13wv{>wP1docZqBK-I zH3XQf$lMNqcOj$^C3Fa)W1^51GPXluyb{@Y0s#Dh^GL}Y~riUsW!AUa7uD8~!adtpTZ z7?Sn10*-{Keh;BSo&c*J^Zo%#^OUO^FoL`zUtXFP<$zgU7ice(LlTq8p zOi~XjPQbU&M)_cg-+xc>JS6s?BnA=VgJG?<(J$~x)If<#`3WZoU5MaP83+1{hn!R} zE;!T}p=Sp{wjzbY41Sd|zG0MB8j}^3eWlM}>^IDa1d*IBNyZf5Q!Sy|JD^B@^hUkW z8ogDSQ-V^(2_&}(9e@FXYq}c5G%6Vukvb4~IzG{U|HTvo6l1ri z>6Cga*YPXIW>D~!7*fKy^iOE6iC*!K>GB@~KR+1oGjP5e)7>dCziXEYJ?01*=RmeG z*a_7;T#?y$fOeu&ZG<)-`#9=FgJPPX1E?+PC_vfvk$Ic!-y5j;1Vj)q zslAwD&!v+0?Hp6Okc&eTq+*VL`fo1LfQ~Q&cR2`EC`opQ0Sz5^FO)LI*Gq$0v3VX+8OatKoT(kZX- zQ3`h21b0Da4r#6-0pEu-zS2Qwkhz~%73`llakFFy=shgPp=0UX1aur^Wl-fbuW3Iw zQ<;3va0uA}{xjriOIv_wj8s%W7R_2@yp=*iT$U4t_=`i+afMzoghHof@o!191U0neJfxZUt6G zeH)IZ2V9}v3iE8xBcEsw&wv_N{eVK+gMz!AT5VO@%T;ciRV0N3;O#7?KQ z?g03wb1*I_JJCy1ZI%DQ6Mu`#oJkXsp4mq=f-eo@B}FHqA?MQfW6iA+$!qzP zMAWPll;WgrlsDefW#6FG>6X8=`Kw+Lu5gs+z>>crQut%)ra7QLTf6Y~=a1vrf=Bm1 zx>beuBE=O`DGNP(*v7@+Uw1o=*Bs6)C-&II*rmkCh2+Ux1$OxPkP-n=pF_+1g<7Ni z;xbnoVo9Susz=x)q+)UiuXbNK!4hw^IAL8Hln)2FY*l&@LNBE89F0M%031QlYL%}n z90y>QWtaY%>iDfZY6|}UPxPua*-~DGRQ?F5DzL6}4Xpfb3%#(!yLdTTvcd~7u3i## zvwaQ0E>)qs1Or4Ju8sH#e}Pa(uxCOl5$DC&xpqy_<-m&&AnG=M_I|BhZeydto~)llsQx-X9QZdgtUvYSq4_lQ}j&!!pqESE6H;b zp!=weccDWdxVwxLNfu)(`7(e@*Y=X zy#CyJ8;Td{tM1&g^6{=VG!Xx|FX0kWRrY(RW4yVT?MfR8oO6~;KCLM;?wplQzYOUx z>%*m>uN4Rzr9>tu;I1nQA^>2O+1aEaa1y+rV)eBG#TZucJWi;H!-Q!Z3T=b4E zS$2&7?kJ*YIUgF0Rc`5`XuJPiVeqHNEFa1uI#KY)xK;LP#0}EQ&?m+;i3ab?Kpvgl zrV|&RT6qh-mL`1%BQ0&4i*FlS-|w0=tcx`nC;VNX^=JBg$3|QTI#6zOCqAN8yvEEpR@`dy2IG>B$}A4JhI8@OK7 z2Tdr};3r+p_^1?S7=y?guWx4{uKzRRKv~;XY*a~6+tJU{O8wDmci@`|XeE4HP(Snm!c!m(l4J~x4#<9Q|{qB~!=q1Z4I^PEE^bCeI)<#|!S;^OHR zy9SkiCq_0{VT+ig`P7BJlTxq@r{Ob@0V!f3-+r*iR7&xoA+6?>ZZMb)qWA2u^ zkeerYK|On{Na?c=z!sztI2adFXa+-bcMxxSht!Pb1%d}#ehtjitj6}{0YaLs>FF`hMx0JZ3@B>BeSDRHU&#+! zrvrO_{~n_q99t`1C$#SRAa*0Qd(su#ak%f8ayl}Z3$*R4Js-jb{O*g6XsRm))^%ZsBz zqI!Z5B3DGC5j+=$sp5U#f0g$V~-qFFlASoAz-W_8pKK1_CJA|9tyj z2lY*%X1xL?XVplAd5J|RwLxLM%-7h1TDvp;4~9`{xLVKzuE8_y{a0E3j}d;zHAsk6 z8gV6$6^gR+hytfDA|Kr#ns=DiF?30a*0Gj&1o4d6=arK&qgdXw0Gnbch;S-&)xyie z+Z!wsknf4Z+y$6cVle-WOlciD`L4?o~2#8OYJpWO9Ydb?-KkIw@5LL*>``qx47i(B|@9H=cc@jG7 z53D3*TB|ENRb-mSu^O>VjIdS>owv}$0s_4;-6t9S=-(p)y|vXfAO_1mBS-=6cx#T&CC?dWfh5hCJEHmomQ zx(}07+*&6J-*N!X3UTav_j}kueO|+ti^SjS>CcTXGiTon{`+@%(B%=tzBq&){+n@R zA1t0cY%bEjMpLhNNHPYnNbs1TXghW5y_<=2>!+^jbaTdt6klw)%6z$qXQ}IJnqsJ% z~ z%upZ#-9|$5j~mMV1p-@oVg)P1&V6`KTOJCWi)+S4{oZ?l--Fxx8A(mN_QSrC5Pz6ZzrNb0^Gf+YV3ot$IKA8S!!P zVM|9{_mME8Q$f#75m^k>FdcS1r@C)TUSqv=1Y?DI z!7f>^16I9^&^{1HOB_eAK5s)%-^7ek#i0R-;>Xz-LUV*~N+6e3md1aw`u=XtzxN>v zC)`bDL1VJTvS~{o*zS}?;)-|=2uUVjV2EjRb(Ha04BuG5>}N+@17pp?XJmy@rPj{f zUlJgX;KmWL3PTu#HBL)xWLl)pnxG&!AJt+KaSBgt=_yV{SR0?Hlf5Wo^&zx>mOeq{gOVu*3@H}sk$^nj zpbZyzn%+`5P>%wWWP?1~mur|U($T1+c|=(#E-j-Yjh+L6rTK8q#Ee3W$%Jc7NePb- z0aWA5air$QM=*$pAP>nFpmfRw%1SfC7UU_zqLbr@5cs=9G2nFVl0wz520GQ)8jbhz z0xaV&RhBrPciP-}>X-m#wDj-?EQQIGSH-fNY+v>@;{>p5iR;KB7`2CKwjX$*_eiQA z*sN0|h$c$^W5~8pvjKX;^ahUAa*ak&!bp}p-W!B6*MPLFXSgw_M_GUDJO{?(th6y4 zr-rH(Exd@7q#UM95i~-`Tz&^5p}3+jzF5yg{al^iz;PR7!)fNrM$E|hDZc*KA`Nu} z*2eLY4w-0C+RizHpcW?}6GRpzE6DuTe#Eex9JkGpY8f8-km)4SeEr~`*D=M%km(|Lb*VnYNcsW(BYh)tN5Dm*?87HEY>&6aTa$s`4@o#YG+*t#>)-#!8jF{(|R7UzB$-%VO zU@0aI&Ma{iY?7b*kJk^n%z`20hWk}G8cSDGKu6cd21^3B6jDH~A-fYnwWMz=<^hT& zM#c-F%Q^rN7APuASVkrc(HX}^l-7#aLsc1ddh1ok=7sM7nYp|H5LY_3!Gb~$~ z+26(R??Hhgvw@!(;96|f9+$@09nkzq$(OT4xRkZ|*Ag=9XbdU$*NsoH{b8AqAY z7fudIv@2Ngo!zYNZ_Ox*vUhg9Iscvnq4I#2Y8H0sUH4W+21Y_%Tmcg0fHJhevHQp2 z1_NV@G2iwUVP~2nEvpCA->1fU@sr#s9bll1hbiZ~zgrtQ3o+XdaRg?aAbJ4F+G|j_ zvHWe45OdHmLv$i^{3}!@P_E3zP|tvlRXM|}BGLjnql&iV&`cCY{Fb%n)BAs!C|h{4 zB`7%5)mS7hS}h^k2?b-H5Q1yb!Z3W@P~pXVo}HR9~}}{=L`Hebryy{hTwvIkl&yZTenaQj+jflR4lo z1^G&9S-Qj(C9=EC(!o0RPfilkg)Ce@i2q`}G z&c3V%FZ$>cDqtV%20{eMtb;aIiHVoUFeBvqP(tx;2?I6lJ9*_P4?URC+-z^v%}S`h zrGTV{S)S0|GoMNOmn*cTQ~a+@Hn8MH+iL7)8Lr%ks@bgHtl*EMWp11T{-hz% zMWhYF0BO@Jr-bH_V4TXjnspL~3%JowF~}{wXQ_@1^1{ejvuU#hIh4JJ!ZGY1u9#Z3 z7jm@v!>G^Us>sM_dLdLE)#1pus7r^cpIR_9A&lQzRM8B@Ko~)N4iTXvp(tSWWAw-( zE8@g(4P*itsTZnjQJtq;$*0)>P>hl0C|jb1QP`sF&>2~_A>G@e8}^dfBp06f^d|F^ zb_NPjEkm=@D(cD$LOS5I%c=rF(8>L`PC zc1t35JlG9*EP{9q@7L_y(@o0H5=Yulovk&MD~ybusqM1$k)ElXVwm%X!S*a5S2{+< zQ1DysX!8!LczJ^NT4>a_Au1tM(eBaCF`#^q0oO1_;}4=x0gZZ8DEXAK#2RmQrQrbs zaUcl8$DPQd7-J%DxF!Qg zMKh{2GD&|wt)7vdr39qYsoAgS5-$h>5_{lTVRp!w7=9+s9wW3FQ&#FGS8T;F>e1dc zM8sh6u;e|x85RIpu7dQ}Qypq}+HJ5JL3%30IF0)<{O3?R|0vl`s~LH%3DghR2k2>? z6h{>xpdmMP3pI8QNo)*gs$1z^K!+$S+YF15GXsQoM`azAnZ+uOk_q~cDsxvkC8HAS z0hN*)Yb4WZXog$~r~5dWD>9QQD$(LTg3=bPFtqbp%ZaCAKr_$exd*5+DV!fRt<8JT zkE5Y^Ryo-<`9U(6jUjQ^JW&vM7I~MIe6qfbk=8uS0DO>({}{4eL7Z%92lvG8t|1=D zNjqJI1eIFsJ`iqWS==&Z<_s6w8DX3x12H@De{XUWYh(L<&P=_*2;8T9W=0g0dtzes zQZsvC8Z9wN{$#q%)|dK8#b!l38~Scxm5H?1mSRcPqs4iaKlPU#F=wi?aSlUKlym=~ z5`8VpU?;{9Bj(^EdsP&g@K+GZ58&=dkwh&==Tm04Am|<=i_b8PsKWe-g@AxUOE^sH z;~98)qF^4TMVk`N(UtBtoJ}p98FEJ|nGq93r&FJvc#2AV%cyP=N3{0zKOUKMk|bNz z!Lpl?Gwb(GFlJ~~2uqkn3xziesr^qee*PdMtXx$>cl=Q7X2GgN<$w_ba+0ra9d1?L z{s=Ik!@B}iCC${B^F~O-(6BK3ZjzEXV0gXbt4);gVx+^aU#w}$MQ|5ah0yT&WqEKu zrIC>ON#oNi_+iuyVr$w}`9~?ygc~TrGXl#+y&w<44Ys~ERq!ji>LKL@k%&4MLOPwJ zx3?<-@4kBX1xkf?2mD=qYs3&Z6fL$^+vsa6K0`rMw=O}8T03Q|v^VJ^o(AC;%%MMgh?t(+JyfcEIu)37Ky5^6P-F}b&on{*+5;2}!72ayI1=|} z0!86OGDA}cJ6{+C-O7(|N7&j^rRVrAa(F{K1KOZG2GN~5k#-+y**gZ7xD1^Bg;tfCsj>lR7LB#lo?gWq zNxF|G2C3Qs-S;@_m5RTvTa6#C>NO8p!j?p zPoi%2KgNO%$r;K_3%fh)l7IHaicb{xL(k3;8P7d6A2??BZwJEn2fFmRC69AT28QNQO4Za_REHWq5!f4pdr2lEhQRImwD6|NV~L1(|EQi7 z@(5x6Z=Zi*H(7A5e`{Mq=Uj9bk_Jz$y4?$Ohz9){1r0a{5pFc3<*o-!u186%$K#Py zPp*iFeSRgYSoYwbk|iN`2AXEuwE8QaHrAbhw`HZ(sGAsoMkHH%B!%+2bz_S^3!60D zwHdo$V`z2lceo!a^;S=?NYZ?8q(eLR*S3_d&m)1GLIs;C68sM9yqVwp$7;7fakjmm zZ(F4}g?cc@9?`npz!Ikdr=a_Zi4qFcA1^#R z_a?Y*d_I$G^HR;g+_y&!y3u`uzYO-GB7P3E@t0@84qHw(1 zx!~EuTXa})%9}&eoekjrMszsZ=h=87LY3KuSle@c72QIKCGtcpC@|#fbr^BzV~Rw_ zR}`LiQY{!42HgIQmb?#N*Yz>Jx^kwzJ<7NhxMS110DV>=$6e|*vqyL(mZ3&-TiB;l5Wv|FyeU+xUHAIX?K3Mi-d!HFqdvIU zmtYCAe5Ng$eAAo zrE$CRtfTCzydD$VJ8U5ns+m(^g4FhydB<{^;nLsCO)FYOIjoGoa|xk&1&RWZv*MFm z9$ZtlvMF=3^t2ZiSzXqjTGS-Wn5_~PK6R#6S@9zGl!1^@Eb7XUbd(@jV`Qv=|ka832%{#5*b} z{2QQl>W?)#?|&e@WZ=nAPl`rELI_rPF$QLoru$INfECjM=dInMu)H+ckCt6(Y)IbT zPhvKgh)|-92&xTl@69**HlWedeh_VG-a@^1Ryh>S<`z1Z1v{6OU`Fev#xHpm-yi;VU=9` zk8TC_J3T(%Pj|O}yxAY_8iA_!7ZVHlBxm&?-wKQ#dQP%@6)`FE0Bn$wXh<|CK{yN- zm62)?e_aYBUV`!0fzn%62e&7msw}?z3;v*dc=lBz8S(DV6JhfpB3<~pW{_<8Rp~!; z-a}TQ>@!Dc00tXq2pPxP6;EJwXru%U>I@2D>^;;3F{2ZJ_)sv6;py5pX&&+vuiJ0s zC%fah#HjnqniQUV%dz6VcHXx@p%|qoamMiuU+ivDoqq{n27;@mb~AtqS)j zk(Vl^jIGu<2@-eO05O;%r5FkC*C#mkNa_t`>l2fOX9KHYD6kghwhR2-}F_4 zs?)bt2^Ft39|QBZ64k@-`-G+iOLE4{1zfNI(FQm}FUHVnX_apYH|6iehSQO^pox8A z!_yKhnAp$Mb9VgAq=`r3t2OP{1$t&Q_{+MA-Yw+%717`PHq0;K+Zt(d>0^NYunXPu|dA`4#st%HEGYs`x7z89Z zSQ#^P(T5GYg?FZ$uktyLo$ym&KtJQ?bs8S-vc+E@?#&AlR3Os1VOdfPtu_h(@wxuB zpl#=xTc5SF+zz4h1f^floUnEZDnQkG*!CqSHsBaMhS`Ik!~<}*d04`k8A%kjmeBjG zXLNEmE&3c*R@Z~lW|G`=n%hSw;O{oOq9)VvK3Ss$5>x2^NMjYI_GFiD2ed8?enu{>;?`@5uY`R$q`%Pu-e8CfKC2I zL4XCxHS8>{wA-h_+2ghCZ0%wZS!?&{e=yx@BBS-KD4-sh=f~0vtkIfq33SXR-ZBjZ zXrf`F)r$FBTH)NfN9&I_0^7Wb{62>WhA$$$!a@$&Thz{^S&n>l%!7=G1{jbssMYw; zC>36^Jj=4kd$0%kN1$x^w&k{5*~{A0!6jwhK~jrUyE$3bD#-r=~?r(JQCM zrJK4CS3KvsTf;?#gb4r!SS5NhmhdppIG#Spf_z7lA?)~oAS+~y!)ZD?cB9eFBL&C8 zF-(>b%QM-WoN$FDK-HFx&+{|A;)#1KZ6TFwx*dp-JnyI!Uy{+=B-R4{fUaoqlp=FP zgcE>`JZoF2Q*hb;31Xe1H1p9*p64e8>!hOE3UMT#hCiIS22mVuaRx6&`Y6lwIwtwe zztk+>gZRw+#p$bNol?RImNzs9aZTO&Dmu4mwse-8$+YwI3FX=x?wq; z{Eyg5nD{-BL0}aw{fW7DacZ{P%hQi_3Dj^}H{7|(Njt6BO*!9gb~NxA47OGJq>fBYy-e(|out_zk3C1>W}KMpKb zVa|2QsC$59fkvN(PXo7yWbeWV71cKR-Z*aC%W$LsvAFX!_RAoL1Y$s+4EGzcb{P^3 zA;1*gVx7IfTb-7k8Q2?8-G=E`d(;_&kx;C{pPUh+8}fko7sG05!K9LoVzZn=eDjE{ zHwiuZ`$Ir%jA}=;aqu@isSi1bn!T)t6^2#vv$x)$#UBi)!Yo%M>8B(X#MpNcx16!f zWYgaJn9G?sX}zF7B^Hrqmg<02{Cx@4X#>8tXi*|-0akcNZOdPGDbmR>&cn2v1$<;A`5x3+TO`|FOc!X2K$mu$*9ed{fVY*WU@vHDc zpuAi-^x)^hG+X+R%K>l8<;7v}t7AKwV|>%gv!!}BP(=)|NC7OO)PxoIiHh=@>Yo#% z$LHlxT`N3ufVA!7*^j|p8g8x*gw^-=@Bd-*?+p$auhxK$y3gDmYT05w(#7ZJt6PAjZ$0jX6R(DH@i>8ZmbA-Kv!yIjb>BNHJ zRxAxw7p+i1blQ-PSQ}u9lo#Z^zXC0 z8@Q3ic{PMwd>NOcD9CgccZ<~#<&W<{1{ZDT@bir9uVsJgW0*A>{JAeJpp_`07>C*u zCrgJ(5QtstE_9+pKv0`BhKLzPrm7->)(HSaF`!k1!y>mhrLEmi5gtr>7S1=-GCD!* z^Pa6geuE?TvE}u?c>qkNIoOuYI=)}PDSWk$$cJa1Dq4GlR*)SgfY^L{{Ezx^n^`d3c3a&KO2JnYszOoeY}bXvJN^f2hl(!s(k z*f^la7n=JG(9t<0Th0>$w~T}VCa$)4-~Evfp&|vEkUbc;-W#Voj%71$%72J?6`n3H z8jB*8{wj(goexVf!6g@h)d?_Zro<_HThmwy=JrsfLoXxeL77g&RYLyVlD?xDJgu0+ zkfT_qxTE;$mvxFTBD;|Ibrb50l5jWSsdh43UDNpRw8E0ouPyFqQ^FE&lE1l1H5^%Q zdnUKycn-Ccw87I_n=|~B)0tP3U&1mHQOVwk%w}+KH;v7-<70*!a2Cs*AC-+Py4^2|=@78q;c zPI*(K@=+Y8Oqxv3jZ@8gI%WUJRZ(mydq*&b-#0q~O=;pu>m6%u-$YT}LGik47FFqw zteIVG#aViZOb>chB~G+;CBLkyt`ZwwbC9c`SP(xP!P$y0JXNXrOL*EgZebP3qe`(j z){;&2L71D42JthA@RodUo5!CA`$O|iGwUrCWP&)PP$FbJdB6erKidHT+F{63giBy!7f^go7IL{9I@H;gF%%*r{xJg zS1Q|rG_FDPjW<@T;cBR2_JDT}Fbq-_8UiHv#%Blv_|{s=ZbQ{sq~mz2k)e+YnCvQ7 zWFML_rD$`pM5QSk;lf&;wSNx?{%+DT6@)crBme2a?NP$ZN}ek{S3c@dO?sFjlF-4^ zAyl=j1azRPjC`nbRN&>UA1p>0r3eRk#ububj<&|On8ak*lzgZGVVQ;VFO~_8jE^5y zjG)lx)s;Meb04j0ebLZ8vALDp7P)eUy zE)2_bX9wB*!>p)cXcJ>;3%bJgBRazAB|#Z94ce3hj1m;$Z^I>CInsWt6KscdpDl$C z%+mH%qp*f_k}Knqr)iKq>bgZH%(2Eg%+LXXb!xnpmsmA9_=i&|QIO7yvmyGeCUH^R z5yrLaMik1CFR_3bcpp`y^Vv%`_lJvQFezQq2~T2<;Q4N58+$P*wH~no<5VOK_^9(? z*<^j*uCj^jz(RMdOQH&%=arp9UOhey%>2AYcVuLSx*HUM&1MDlb{@Y!3Q-M4dyrTu zgkf0iW^Vs7)$gIfP)v^3yu(McgR5ln1i!F_K%0^KsAeGakU(QIf2NpZDD{|J`d><= z1fz&cY=P>r><*(AS1S4Bs&Z_-`CFL-Y3K*93Pyl2r>O$K61iudSz#F-6%t`0jFur9 zsgv9vWoTqaDV6Rz)SMk>B~~XhHQsC&!>$`V4|J(t{= z#EgXCAEY~8v5m*^T{)2f$nowOBfT3Y$phF`$1*|#U!peaa+>@DYJ3ieJ-h5 zgZ*dYv^aB&{|7t@OUy=awJpytOx3(qOiae~B5}jxnWmKpAX%&>I5UN=nuyLahL9wS zh{lSfF+BwE|2xdDUmRv8l=J_a!z>f=mPR>Wv87ZlRt0F^Kh^SoILvqDAdw_YY@~g~ zq~shk#d^w17^$N% z0)Z8tQ#c&jwyPbga$#m|I;hf6hjnkSM1fF1b94x%IUx=pkcb|_z0M*43VtG&`$7Zo zU73^CeLjr0xeHE@j;1LLqYe&9Cc^@FwwK^AJS<^I6EdU<>w7&cO>M`}czPB{%S*4| z`9VpXj#CtwYHUs2iI6bh>Llm3?@RN`C+X(KKkYIc zxsPyT>CUy}r@2n@0aXQn>S-*1AEvIH$S(KcX-N!I?OCZpTuDcn*70PF+LxYL4 zRuCDe^1whkwb3;7_8hFWXIJOo?0vx+()dPV@bes>eCf#J_DoEN}zQDnGdjZCCK&22Q(0n+9I6H_ZuN z7JhB~ecj)++AfnNRM@v-sHYb6eTup1&mDsn)g;q0&%u;e$r^ z)ePNklhb#+m6tc>@Bc&8UH>)tzJI_Uu)*ljjRQu9v~+H?beFV%fPhGeN^CH?y9SI7 zDG3E6MuSq)AgQE;pr{}>@6Y$XANQYd{dAt!alVe%lLJPVBSTH&f0iWPvrPx+h-4b? zP!i7?NT4=GGR-=wcr=!&0Qm00b^Y;%cpp1P^kt(XxdJzMsC}<)_N(5EH9c??r z`CE!uRc8imaF@vVSv9C1D*iOe7eov?2WzA}%{c%6Xj>;$LthO>(z{l_uH=OO(YBk3 z!*l0UsKp_9alYZpT&Em@--DuzmJ+~qPV}9c1PIRQg?&dkv~Q@h7tp{Tl0`vZ+K%^{ z!%^__k`xWeNFLeWqk-?9x!HAM4l91HE)qe{S3o8$q|(#5lM-uuT+zkyNcR zQ7Bul(G+h&9JHWgFfOliA_{64LBK@FMMIfl@sL};$WPz{335LW*kaY z8cFn<;CIr+T^p4u^9fp$X^G0Phy>1j3{X*9s01^Rz!;83;GA2kus53}$pcd$jr+_^ zasC(i`CA|f)zC7>(?i+;Q77GDoq3l*8jdtHVjky=^rmfv4tqtjZ>bE0<6l&Qgez1o z@`i&X%NT+_=Uan+YSz%>lEM2`DzBQ%a9O6%Oxh<_yt-Bo_&G9QNBP`NO{ow(X%xXe zLjLPr1;!2yK+BuN5YHFR=Xu40we0Mw^!~&ZLsS zQk*h1WEZWLzRE4ghX%tLh0oBx9MyEU2visoVZ(tLPBfhYEd7Jqg^l1}Yl zsd1n|PC7B{De92_6C_r*l5jOjbo&m=)i3Ww{8mZ4r6>9V zMO6qQR@J8kyt-!7BG2uWcmHf|7I#wz)q}`shK& zlkC$Z6Q*gT`pk7);YozaM}Mo^7U?f)_9r9dU5f+;t0zB?&+_8m%~!ffynDOm7WZ`W z8?V^PM{oTL{$Y8y$Xc(KeY=Yac{Za@68Acfvx(kFPR$v7lC#A4I(1HP^x%PnN9C;pUv#v+q{N^F9;>Faq+0U!+C zoNY*=aR>f^rlSPiYE&uW3MukaK!REwL^P#_(X4u3NS&+HOn-V5XYp!rNZy~MJ{Nq4 zzkf}V*b$=!pwHncsQ4W6V%tOCk9)3V@+7-sfR}@cIyHR28_HtN`p+KP_Pa?X1x$ob z3Yv9AGOLyy2n>rV!CCQKXX{5%0+`=mq<-p1*9M+#>X8D?r3 zT#)uSL|A5OHw?byu~fb|j}$`Gs+tg8e9)V?*;D<|r6Fbz-vclT2C&N+fz$eaelg^aWb z%fbN;4%$PcL%lXnWFj(KqoXlKFR8TzXPjTpX^u8MG-%W2U5r`YetFBOk_>&d?PpEc zL{z##eCuMN(**Rnbv0}-w^rZP1tEx}G9l425EmFnRk+>_FY4gZ9F*}I00}0%p`vY?{TQnqa)Dno;;0~_Go0Ma2xu;++oe|WfFxG{1sW~53!M+%Yy zVaEZhplAxlIXyv4a#*+LZyB2>}dQFW@w}8k{0-tx(Q36Q00Cfm?c0 zp)8X%!>8hb;b|tm_ zCi9Q}$v87nVqCILZ?<1!`Y=ND4#Q=d21dZNx;8QTW%?)KIWtV9QYM}%-`I4g#LeK| z4m`y7X&y5R8nTXt<%`_IGm7yz1K#W&jg4%*~o9#9AJ@XUQHb^q!1ED9bB z^(!rVjNvXdK6r{B(j6{#VM3iQYrD&ptx z5YzO3tm7;EO|s}~hDl!KXun$Rxr*^FLnF#~?x1YX`2YjAYKnCNUq}Ir(#)&O(G2|T7xwljY zM02c$sn|!8#Ja9z;!r+(hS>OK5Z_lmzZ)np7hlf!* z%#GRq>|KSVh4s(u0FQ$jA%HEI0p-1Oi@YuVi((%eH>s#fc7>y#^T4o1e&;_dP`w|-AW3U$)&Q*Z6> z>Q`CX>gf2Bv zX)j5+A*866#3a5j@_k6CsLp(={C`@mFXaE#a-rt`r{$7cBD~+Xmp*}MhP0I;D>qej zWiz8roPoDklYLCyixhHbGzEU-3Ic1I_`(}?`Kcn_t;SG&pAyf(oZ@A82*ablM;ON8rcp_VM60uUev<6q2mdwrCE`tw!RaMq)CvxCoGG5Jvy$TOxa61eIAfNou%X&bHDLWum-=<|*vsz{$BapvO+fWaAw6hwDJVH&Av+QC%}{t;qiZbS)`#9+Gw;Sce8{M=k~RevwXmouE!`1KMZ7 zJ{rGx$fTf$A<}`8C(sZD000VJSv8&m(OXnQW!uI0DRVp_K}Kz`o%p&Ze; z9C_`77m7`#ElcTa%cN96y5hB4*5%rXiaIZrwG!Wz-Yj1jW36?So9mad$X7bn1fCq! z^Wv#J*1I47u-Pno1@{m#jUqm$CHj;@QhU0h)88WCmn0VD#~&3un7ER&LBb%d^IP3+ z?iQiEIwCv&a_vo`Eq8ziI3QwJa?!!lpQyhyxFfC#!OhS>(k8Wh zTfNxu4spqjqA6jApG1Pl@asvE^VZP1jkx4m>b`GE@{(b40b!|Aa2h(Rc}+-oco?V; z3%_`Q(OuW=`k-Dy>j!zaS>lG@VF8;jJoeByJB@nYYYI#qSchuv0-PSAAi63VlJ=&D zmD|i#iOPGrt>q@tT|_egCnW@tMR2jx!Wi#axY9iDpPXd4G#R6o3(I0e4*=c;iHroo zM&h@0$k4YoLDd_pn|PMhy}(#e(ic+BS*L|!so>tJ3}Ba`!m35nlwFRB?#^v4M05l! zj@F1y+QZ-c7EVzJTOn;7$ z5h6dCc!!Vaud#YPDMX=FX<;K@g;sI5`6PZ&6Vww}`0f`S##rV~CEXP8&4ppaV-jp6 ziME+3Jk8pW)jC27@+H{RsN-m|DC;dQ?W_@M2BC!3=vQ_UW5TkCr2Cv@$gm}t$BUNE zVzx9@qqVXrQ|wC5_Id0pzoz`w4*GwL1zk)j8n?iBkcSr1sB6O2m7{R1a4`Z5Hm8ZK81a8w?6JA`P6LfNl12NNb$Lmyqk7?Z*LeVmPF`kYL?; zd4-%%fz%{7d?5^@0Xta_AP$FUT{ff-5CeuBz}e6k-;@FX9(tA^018%O*hUo!b1d*i_i$%qUmF@lBB8 z7b(H2J-a(B(40;W+3;A__i&?E>{8@2wa3x-UMl88kA|Qm0RiJbNrmG`oA>xy?^^i* zTpL}A^*=HzvN4Yt0Fb z7?HjqU;JL0-)H5>jAA9>E0+~{AC%pPXf~UlUdwN9y}u0E$t0!85C@GP6|!Kd?;MUn zVtdig?AoCjv%r*!DO6qr?#)#HAar>7B9!|Dm`?4(`(Tcp z#n&Iq?-f5_SJ?jXtAQd}b&BRb#lO>zlMj&%5J8$vcBH5pF)y}Jjg(iRzHU~$E2Wg& zNLQ+8sY#Gl`??XsV1!g3qIOK6(py zBNW*#&Dy-hNb#|>nid0jeo{_@61lrKB02mU=aUaYwJfgm5}zc~lZ9xQf9PKJ!@nqpFF z;w+3jsY{kLtifvaeD40zgBxV}(s4n3mbrKPZkx^1=aG_gMo$olW`1JbMkbWQQVUu} zYr@%U`Ub1CwtjYW&&>j~*(?UoUvH!xB8YevjX-o==L>R!89yyuQ7ElVAVX4?fphiI zXUj#5_tmm;>h9%&B1dG0!~Yy+q7b3yGptq>w5Gv_yOJ8uU3o5zUwtaKDmQtaWbq|i z_jm!GnXDn_QSSI&e_FmzNSa%)Q}E)J6MceBv5W^}$DL~4+RJ%04fEtXgd@gUzcky) zzwmDV5-tCoJDWRpYiB2#k5WB)@cq*dw_nXEbw#zmQ|VD?vic5k$Q`u|-iuK<=h?Qz zPtP;{%~hhwo~xf`szdeupyx$JmEWj=rs5@$Nr+2|c3?o-~9Wtg79ON{3nFtx>I2z zaA#+v%*D!DWPJo_S|oBp5G`omHiwExu5t-CMc1Q$B*y43)gQx&;7~X?q7$vqPuKXK zT78`=`A(f=KE5KgekI=RWq5kawr8n{=$J_lPH{!jcoFf?tM!w7jbx+H8R6S%B5A;u z@o7$D4AgQU`eadJbaI2D$g`Y(Y*?`YDEWPM37q4^iD)v@&|PGMh&zxc3b28?|LQD< z`7KI{80gGs^i2+|1f#Q4qZL3t&JOAT(i!uEEm(1xF1Sq*id-0lv?POItkklLl^)jD(Q^l*CC7_>W!i_ z(M}l%9uiYFEv0$r0U6ohpakND$Mx`O*#Dfl8?GYGsQY6qWhjjT7Lj}|S0n(H&3FM4 zN1MP7qJRw}&X2dWF`{_Abdu*t(GgQO1$!eX9KS&%Ir13(GofPx^d>MUM@&5kCR_J zUw0~E)DldH!Z%jjGD6HJfN6@FXdPsd1(6}!MhXY%onFptejY?@W1W*N0B9jd7H-sl z_lYN$0&oTFRZiAQc?5wo01#*+4zV0VH6u}CqZ-89cc0%1pHkZCY6+kP$~yw00?mVm z;iAhEZY~A=?QVBFFC2=0o+et+5qUWhG|DnmRCbu33Ji{jHX^a8mY+Vf58N?jf@yF7r2kp!Th@hWnV z0@nE`%EizF|Dp<8XD`b^MqIa$Ee$Ab>#_ zJ}vuthgzb^1SK0+&WOtciCk^)#e``!5tu~2Wy5M}m2cvn3zn8l(D35J` z?&=+we`6YpxRCJHJvewP`+LHe{d?MN?c+zULznrJL~XeRoaag8W-Zn#isiiwiDRzv z7H^=XE601Ujo*%7%2Tv!*G}($>L|4?FUx%M#65XIW=XZ^@?ptKX~*{5ntpFi_RBqv z1*Nb(#8c5uU6(I3xwC6{?9{n}H5Z_T-vdUEuBI2(e;SJa8k?1-8eh0YP+QpA{8pLy zyTVXh>z9J$9s>iE3j6{S(_S7O^)$xr><_<4LHsKCOTkJZM41gPMufVDoqw?}6Xq{V zv*-is;+*PMIqym|si_bF>JvcH-4ZczV&rwl_3dl9`4AwX0GKEe^HVoNDGg*0j*;O5 zDs8Z%9N5kIP#=6%HuBjOJ9_U(T;)>q)*iArIQbJM>K7DA<`k*c+oRdYw$J~ch)b!5 zCfJAkC*ne&Q@tYpe6z1TBLDs-lfm>c?L=Kg05|^jbdRb6pqO2PUfxxKccQ`ohuDoq zR=9S2(PGKtvg&!K)WBe5M{s@Q6xUO*Kq!m)pD5{Om9*QU-ja?};_}5tHOtf@2+=UV z7%7!x-)UTpcq=kIVfd#l&3HMTha?{oUXRb?XpJ&s1nN4l!9#d? zfYBIq4DE81w*!&b0Cs!hzF%-;`%IcNGt5vyf-FNt4cuoDoQ&k_doBPLL=*Xd1)dth ze}WWpo5_Aj>hfaX6lQgGXZmRqS^C`d#|uHf5`5K z;@FhK%wAfe~B823_d^%PU?FK6{TtHwoWwN1Et0hNsiUVfoswdIKGb~s-cyZ zz7-ZKX$9AC%Q}cc6{p?QhaXKs-Zb2?iz8t(2`|Nm$Vf_0l?A+m-KB~vvHiHjc)i1Az`j7b^aCDFn~f?o-tI~;VXeJfl>NOpYn_+qvC zFqQFPXsbwcgI>)W$?_EJJq^k6PYTd?hLPHO;PL9Dx3Mso(jo^cVR>hDM*las{(w;28~pZ zAqyS5=iGt3z{AxFq5p1@LA&b8@yYu-fNHBBp#-0p?lLgGC@!1P3-=FsmLT3RYT02^ND1Y!qJaZ7g#@%ilTTtBEBU=mT(H(H`}Er_|>vwOjBQTmZ3LxDcRL zLO&0pj7<2nk$788o$xQ>qe)|$qC_kEHhCiupuWiIIQ22|l(VCBS~-)&C5mdty^~Z- zO4~i@VJzsY78z3s0o*%xZM!?6Ou@)6S@ZOrS~oez1cAb$LK$AWQHiO3_|QNY5#Urx z#muaoioPn9x{S2;orz+83xxx1yp1bSlP^#-A}VNG_WiVc$+mozpP3aGeWVHgoxsZi z1Uv#K&F@5C+J5#xE6|X zwFNB?1UvT1AYq^LwB_fcf46&4S!U2JTa8*yJxeR4>l`Y3r`>HCkZI~a2q|@x&BLR6 zns5D_ZMp6xoin*L>E?oSiJ4M$C#Fy-YOuAE%6!w|J=R7s(v>lO(|Ub&xf7*aH`o#I z*8HKJMR#V(l{!mN$x83@cijZUQJG3WW5s^D)j^PS_&%2r1f({C*1U;tU1A%d16jhA zs!f@@r_otPskYql9V#*FE~~Q$OFcs+6eiY83*@|&)q%md1b5ISpmUnhx%eZ<-nDc? z+^xyRDzBJ;_cjF@6D8q{Italx4<27btbHp?`Qbbsc}4Jx3z!(Wrg5hH1sxx&1MUn% z|9P(*51BYQCj3T6Jba2W*&sVWrfq^^(<9O6sP#W|N&iD~kq!cr2>&%fKT3-KA-SYN zNHT%GTG7v9Kvk-+-b1lIL4QgR*$3(PK{Y7yRKDockMe&!E)v<>Ls6j0@2`&v)>we_ z+>EL!7#1`872naguE%;x9evyi_x^=|*-fVpbA{234#YTzzua5PIsInP8i9;7nz7G8 z7;NeFFjA#fY)7rwLA`iSslnYT5WI=x`yve=o9l=#h1L{jV6GBKZi`bu=&F&(DuD~L z*Z~>bzfpl<2Z35o&WL6K{?gLB&lCIu5)Mtcdkl=hJR%}p=QQ6**BXuNMSg#x>`@P4 zutv4pqKdns))LCrTeZPOgVsm~TOjt1$8B^MDOz5$A=?fMBYMKrIEv`!ql**~sceH+5J{n=`YV?!mKD*(4BnJ;RO^E}VO^fD9?h$<_Zcl7#FQsl#W#0kek?S_-+KFkg(q z2_I|i_|SVKLno1zD9euN^eh(=raF0Z&w$~o z!N9WsRAy017CVScEp0>RTT3uWtF*BzE5QYZ8;m52zjp&YBJEt}`q8xJ}oGqGs zh1_3YD3|ObmzYal!sB&Dkg2d9N)&$uf6uQ-4IYwXCVs)!3$?xr>#r-@ zYEVBcQSnXqHleX^j(+Z&Zi@!53K0$cJo=smR$?^JDyzGy9{MoT8+mOLnNXpm#YNGjbBm~_~QO6)Q72I!W=S5_t4zg?-iX;TdDP5G?&Dg>-4N&#xH)NZHRA)xfr zW%!zc4BQRqAt%n+>@#?oeNL54Flsu*HQT9RhE5>_xJM)IUwoXm$|_`a@V3DS&(BJn zo7d+>ky|>@6~26;n3*Egq{wJf+lkesAcC8Mm)W$;z>1zk$|{G}M29I-);zy0{S)Qh za!{KB!hhLc=AA8;yLNpVw=ufc^Wv;4jF|ZeftjIZP+(Ay_lcVW(MsU#bNg?6c`pN1 z`Ys=>brv1}il`??N?d)=?T9wHy0sgA{<88)_r83}ByBqRuTZMF^0ys2y8!`DgM6Zb z>Sq;P4!ar-7hk-&$_lcX9S2iN0|Xd9Oa4EFqMBNjgpqnH-J?}qc%_8#!+gQFc{BynMT ziBWh8TnAe0<5r+i1XB;Y)p%v*t%qSu3Wj(Y6f3x(} zd5LMNahb~dz_q3k z-p5tRC0WMHoq~@|;_->CThI09hh(Z|!J_SX}GNrE`JbY=Fmf@+y?JQ5jb1c*5p8c8ew zR$;Bi8bf%>0V-NTIXLR!$S2cyNiy{N47yL(6q<)6POh`TqRF_D5qY*i=@bOKWH!5I zMET-YN{o)?MUWoN7+Ye;vrh)9{9N{m@wC`N@mG2S+yP6d{^3G7DgRHBVL&xqQ-B`9 zJwOIo`Dc}T`;YSxLOm@yS((F7Vvr`raW?|t`DPc&pT8*N7aHj`V^1;&^bqnt5`KJAeJy|Hf5}I{lWnu! zvi3P>b+ahYLX$2d@Vg5rT>d-lPRv|%VE5XyNBZBA#P{vGZA&12^Per44!a+GdHMI| zmoBX*Ar()gBcK0JH{O80>}RjpoH2lC9~7XgHA^ALXy3EcxYEew?S7`Pxb!jrGs_X3 zt|_TIeHDT~F`AgWzPZE2U#w&aHq3@(dyvTW3@4c$^nG=d9k82A z4)_pMS}k>^3pW@q@nF~i3x8WT$y@`-lmg*8dqgsSkKf-aT?705YPfwDA3?Zoo8~Bo z1W7v7<-0^{YLSVm&rEEH^CUW&;jx`zOgR#UNVF&Zvu`864dsxpRqcpj z_9yq~f9Cjj_0zPt$MmJ(CCFv%DVy&NF$xnD$j+Z7g{+qG{t4#Za?v3c3(?m*C_&0} zJZ8pR;UsgODHyJ5^V~c8sJLU=*5XGbZ#+OO8$jJ-$EV`}fDV7yc}{uDRDn<~jp7t} zRy}U#bYR+a#r;tf7^95c%Fbcj8a#TCZ)%yuHu!{GCTx}>wo^lV7Z5|R)YL~^zUB6F zdxAP(hs6&*>I&K~l~hbCThNLw0EB1BGI;b0lcP|`rR5jV{xMQ0?<@hMkI%;3lv{;$ z9zLtpG@bh)E!*wy6K);LeSuK~>~T;D?oVQatEUtFTgyUY3H~r5dt`8q#L&S-n7TD2 z#fgtXBL&Fu4>BX8ph_)}=b~y%0w}D=D3>scR3lNHDG+d>QMcP?_X;&mCA_Rs5k|t2 z@@C7OYAR(E_hAHhBs!~jFVnF=zVD5uS#fifZa39je11I_vbUVH-&k^~zXQyhI9s5{ z$Ps#rG*UpFdO7=zpaX%RW&Gk(^e@4qo3va@PR_O_q+gvQ%edvJ24!<5;>bnph1IBB zR%3iOtqbMK(v(kIW3H62$K5LE*ef_?S|dL^O@R1`6`UDhiLfK8U0FNNidC|!ws;-i z)I!}}X(IJqACK~VSLlnOnYl=`H|w)kUUP6h0==H^ zrg$Zad?2;{C8^zM@bbHUIg9OH*225l%bJk-JS7rmI*Qv@g(8EEe;rRtue!cW`uL`f zuYD_G;FL-dO?p=6{9DShhrDRf`R~g1U+UZz1kb4seV8?OtxKO?TSj=ktqTE7Nb_&k z(e%uT9bx5=Vf%mLIgjwSsm2-01*64+yAN%@e!Lol(fj2u)UA@(#MOx?wOEZauTzXK zb$GD1B#yJ}?L|MBh*pv;)wZ$jsWu&B=NuoVhUgaNm~NTti4aYIj|ZdYJ%S#=UE* z@7KP&Jz`~_{$PywMVS+9t@%qdUVv~!Fs($-iWZMQ6W$=4el;i>?H5m4ilTRY(IG#Q zoh9$}*vQobC@j6zU)+I+ICL0<>JP+GH~n4XQT{!6h54Wveqd9JMu?@ZP5;B#s35#7 zt;}6TGcjAtJJP!B(VOwQdrpko*1CFkJDla|>RTRn^MPLHth;6c=;n&7wM!3&-;TK^ zx2EjkKoNhnHCR1NYY=*+wii#gMfoCU1oY)&oIqT;Ghk7j180pMhB*r{Kh@??Yffdi za-j^&Mr)Cjc5AA-5PK)1-=6*>3)FHFf=m-|+)|uVrODuiPTQm7+RUiMRW^!|~oIn85` zzbN|v)m8v6v25q#FZF%AM~9_3T1}?Ho^`(eJ4U5kHc9;;nPox&C%&h#otz~qF={BF zEb}GwjvZtP{u=%F1V=V+mhNIn;Aq+Bo)Mj334|8ds|sz1h80qB#38N?d*;+l^dN-O>nl7Sc z$kaGj(L*61OIjp;C;AnP@N4}T7jABsN{uMDBEd%^tl9hU$q;I))8_{hzOJd0MMX zHMq6KL?6*r@&-=9eo)mEJ=`l{!fqn^dMxJp(SN$G0$~%9!sEh8b;{PtA->Ib{PqUt zbseJuof2QV*Xs@TW!&i9U)2GQe%y~qFzu6urjb||$k*TsT~OV$@JT@=eiKZ~z*~J^{*9>IOhfT7RmMGp%H^n1o?Ec#1CyNC(``-8}ce z>daseRb-B>F8pIySE%7V3UwIc@WGAA@*G^1mE^ZqEX5fqe9^FIql|Zdo0JZyxEsHu zSNeIASdShiK(eJCSZ>jbtG2ZfnztQNasD?r@K2Uzw@P2FfQ(uVDcXZO(xTWEO?ki= zuOnS78kwO-kCW~||5HUunRBs&wqH%rI%8R^>5;B;_W*kRqNlK#(XvRRm|&r?LRRk5 z@Hs-a97W?>R;8p*I;+~m0z`_-DaI5oY7R8T$C;I3++Lx(*L%rXXPEU2PJsIkUNw#y zTq1-~mv>(k?!ggFV;!3B_8d_vI3tZE13Cae^cBRn5!|~p{G|zL;j$zB)otJiMzyKR zF2qPj7A5M-4fiE>UDGBTbPn5@a_ux$T`coZgDW-QGz@JiBetG}Zkep;$&s6xNG-t?#EB>&27yjKf-8u7p9q&jyIxL?FbslXW=DMmVh z97{%yAGH){v9B`J`7JeksWZQg^b45+Tf5ZW2)U(Os_zvNYBZ8*AX&$|B6;hkqkwL% zF1NH=s{Nw2kr>dH)g7v<$1g0J5vrF=(ys~g#=+{f^+!ev?@-;k*uj_mg2D*I|4?1> z<48VYl+Zrh)3{MS4_UDc1)X!MBN+jMOa)CqEh#hIvs~&NMs4p%Simja8xS*_ zR!KgG#XEgt4zEb|3#Nw8mi6_>2I3>LN!9mLhZrlkZM9j?x>e9iGd>`G?;kT&IN`hB zD>{qj;$VUHS4ZzTm@4pc$_Fi+J(6Af(reT_Um97J3)7ct=QVrGM{qB?i7k$V&XY;_$^P!En)dtOtt$pL{+Elr<{P_kdbw>ayF<=>$uL^XjP#^;yliY$a$ao`SrQn zYNmX=>|>R>x@u&M(eYB!F;ct!P3m!c>~Vj;@N+hc=ZSR7%k|3*c5?^Ivp>CCT&+G< z=u8|igxOioiZD&R%A2D1aS`)L;}^kNeAH^vNa{ao)XU_?l$B@uz-| zIlq?JdZ@$u%?)#Xu88ibX|x}s?WXtYtHafKk%2Lh#WC;3ZstRC;WfgQM5E)AIEL?W zbF0jC>s!k@i6TEpSXxj%m1I7 zJ=0rcM~C?;`Xoj5>5rk4D7H^@G%2 zx1I~Po|b@gtAATdEBGht)@-&`FCO)`sQb2t3-$s=}tvmNJq z`BRAa!+mUQ-6%!~~WUst)TvRDs`K##@FL$)p$Uui+n5vqOvwEcCk7 z*?Mn`7I-Z+c zr*!Yx4naB?r9t5Z8~&0A!$u5gLxs6?ELp{t&aITlE=H&8+*`v$ z0;lR}Nci?>gbM?1lp)S==XiSU06x}Ab|`Uq#zFP!){$|@y@rC-#}m7GR}R(7`E`&3 zpwP!!binqLtoFR*9zLgK_Mo3i0ms+MUUZCnKx^O>JL19c#VIe~PUbyY=T?LBXt;*; z56@%CmwiW@(>Td|xPLJ5Iy?&c8%9zCp?`4lP?(zVZO2He?Rc|Se;bse6}oNH02G@~ zZDHjCz_#N>w;>e=5+e7~deTj4zDkAe$$D4f{oHy$50|N6m&tPG)5P2z-L~yz%4{(L zjl5k#5@u<}?sCs;vmKP}hZO-Xq&ioma**dXa5WKFU~$J^I9A6J{nnn$#~k8oIBuSe zeOllmgmuxK3jPEDOm1H3&?B|f;EIpSUy|NdJpYh>+XTjL6zezq!vBXwOmONslq2-G zjgmHujDJ5}DKi@?W3|B*df`lmDwn{&Pm zq|lmAW!_Gd551I}d>Ioc;20rLp5R&C-$(W5EoXa;YKQB90!bZb zN!_0vr^IgrMJV;%nj4ql7K&8=g4-CfzKF&@+6x8ahO~!arYIigN#176ATg+w(DjMY zllXB$;PdXIAe~+jzd^J*t5-jCqrO-%)9~$+qh%$N#6d$V;i##IE`hr54T3%9UZ)bi zAI?<=1^m`|L@(1V*2PEI!twJ8a{fsl*$i41c`QO+((zsOUA#uRES|}G2>}9*j)s*h zOhvu`-6uYt60RhViA)mZi>mZS5QJlTBS0WdR`(PRRR9^Kn&g$?mMV&#MQ*ODiBk~Y1K3j>;iTJY~y z$-I_ifTQ>yYo$)?-+Ph%`pmL;e*qKlcgyZ@@pS701sA1TnDm+J=qon!zz&y2he7-Q z9Ok^|PZr)d4rd7mz=n}6xgwp4&C*(#kcb9bFzb%y_FyV+yIq>>`EvI?dX#-w&}D{v zefnzkO~>fbaOXC?a#2{wk8jhJn%%!oJua1}^9U1j>+SxWZ7u|@uKR9`l}fB6EB+Qr z|D-$!mlx<8QaBW9oyG5ZQ%P|DZkF|%1m^YOm(0=B0HrFK5iYSJKj|%Zkte!+MdTn> zrdXU)tc>mr>4_|T_N{~uC$shz|4^|WENPfMw#!eRt%b!{_B4!T`u}y9A8?Wjk2Tc! z!be!=(7HmpKlaCmzLy>Ly=$gz6d7;WIcXu=g#Boe+zt5gL3&@(`;FK>_EfKEaUgk2 zl~{OgO1;*4^Z|{sg2yPLUVdgc{S}#q?1}yL!R3@S}Vw&O|TW6^rk!6YFw3~bL-Godg#T|V4cn&oQwL5(`VJ>+as_GI&vr*{ri4pr9TS;@$u|`@8*7cA@TP6 zt&bm&CF>l+)?oDQ0{oH@^ZO5`9{?*(T>@EF3sR%bf3GEWwHj6lp2Sfd3L&u$eUe|rQkT-X_f%6x19-U9H_<=pj@S-^ze-Kg#0ZWZ zQf0>ukn}C7tK)4^pX5f%Nvn|t8E)~t>WC4a_yP27Eu+oAeN}uk5Myas>i8GP`H`I? zRukP~Sil%9d$LKCm{P_rDy9QH=p*~FioA>L?Rjk(a>U??(E||=*+uY(y*BYExw!ZN zrztV=DH4<{9FJ{y_~pSSk-Bnmrf7mzrVHlX8X6SYX1{k_KoPnXcLqr;+J4Na4Zt3m@K{^E_ zMHG<~6pIirdHFxjzV^X;?R~zE)>;Q^-M{bs{a^+wE9iclxS?%20{izU7MjX%aT#WX zA8tRckPu|-?G6%FqCJ713+JbAZl{)oEQYH%Qk_61OfJi?>UfE|2n(kXJfhCOc^9xm z;xYpSRF)C1X=PZvb0l<8C~(0j=u`NNl(Qa_P8fgFrwGLOkjn4@@>Rn{t5lK>;e zCmCBI)=9LR3m)dXSn{J+QH_B7mcVbq)QSIchFTNG;WV@)KReoZvf@9poQ;s!tbr)U zrHJfO^lzx<7}5#X6$V<=*A74(@9RAFMYW*k{>b5&;X)_{;6poe!UL6Exm zu?N@8O!2zBxCh9mr+>NgJ)UJQYv-$N!`tR*v6j%Z`|~ypQqKvc6}`c#efzAl>?gs^ zq3=R4?C@1&YjDmplT(v!#1#^J=MOfi0cg!ALk!@UlW7hd=^1iRA!Ft|(vv4Ox*a+e zbLZSvNzg|w5+63vLjnjckUiPUwa-La12z|^^A(8a*p+qiHp#KSNZ z2^raPzNo*C%%?1V)4fw@iy#<*7P+Fg4p_Yf!dXeJztVHmG)mKk=UIFyOQ?l8p*teu)uQrGsL?&vyy|QotxW&iLB<(v~P+(Am131%SxE1G=UbxGu5({2IpKgRH$s6WXnqw*i5(3YiPruM($rW+v`ru?xJAAKXqufcdu4Rn z5iAp<6k*HCKwWr_qCWE>WjMQ0pYlCqwULg4RIz@pUIjz7H{(szDMNj`bn-XU|1h1K zkC!O~z4L2;dD$^Y0asl%v<`@njvc{EF08PGK(H@!y+P!Cj@BN)i_F`bUQC$g-2Tq|AR*#cgpE2J-vSDV>V;6a(*BOg3XnY-lEid=h6;J zWNTRHB|xryRi=AYCJHD?P)7c$j2wW4zY3RI@WoB*SAtY+wnXteRK9=_*xZiHEjKE_ zt`yPmA2*5>SWCynljD!fBVsqtu>A~9-ycUwDE{*y+ra#uUp)e+Qnr^@<> zjCVGc?1Ie8NOk>!dz+U=Z(@O&Ga%g%zmp~XKhh{5b`48_RR7&Ys*tVl^n$D63;2mG zRL;YGP#fiRbLTIh zm_LZPOc~yAHIQPc6_(4?eu}B@o@;z8Gbtig{=JHg6PIbFGXE`V-gw(LA&#-GP2HMD zSv%?A&}z^~bzW+d8)|?@4sw9TGCw7DN^I9DW%8T(jCoDnQ2+|E@1d?b7P((wYRk;XD)~uqL~} zA{#{IY7Nf;+1R0QF4ddE zk*U-?U|%1iWA>d9Y&+I6&dG-W;3gm$m?!STCn|41srh+Kv8c;Xzn3FnjOU}0Aml>- z3M&DvfZInGK0QsL<}$U3`yc!B$<_h9^BZT@k}nG zwO6C`&m(g>lq~5n=2>12`6`Zm#%5;s7xFaPfRdWm;#^gCC<0=9`{IMIVhpJgj923e z=6c9Vh;*&UO4H8H8WwH~+Cx~5R$}dSZ*+6j8nK=)Mii3P zJa6gKf42|6Gjr8gL*2#BjY0M42>v5d3*o0F`LlSE%11X_ZnsZTe6uKnf#_{ES8)Jd zt>5J-HLUm?+O>gd>me^gl8|<#JY&FMc;8UBa*1_oii_7v1e+1zRQ7jr{b}Xsnw>Ie z%tC#!WYj7T`%CrV3$`{oKe*3JL4`jzQ5COYf4bDV&DlZXMNt*dAb-=^H7=f7A0Gb< z#6@L&CmiBOa_yhhP9-;LXaLHt`q^SGxo2K!|MbdOx_%RNxru5sPdquypF9_Q6HHc> zrOTVs=xWsTakKtO`vEmn*-J&k?2Te;mcrc&sO>LfQ)$kd+dV_oLaw@SYp{g1O|JP& zMKN7)X=j&AipBXFHnA0$D$E$baj*I6t1Uq*+NH*kC0Gt`f;_(UZFejP!l3|D-51DK zNuWan8-+!H!@XzV1WM@|QB;70Hp<+IE|mRpr+6Ky8TAUKSAI)*gmM2a%@%w($ClVY zC*M(~+iC4md#U?i)3g0o*ArW{)n6jwrtH_$mb*c)m4Nn_n@!?l8sITkaUe}6d3`kJ^>BOzB8=`ChM6F5dN()AX9mI(Bfwn#49*AF)OP zlIuyW9m@IgAosT%r8j>=8LX*FOCgH=Ub`4q0L{%8MG9vs%ByA94K|$~6f3r1Oz;y| zrF|rqfv}UARD3Tg$zIrf3*)*EYe*Qf*($h3h)Sc!<>f@P215<$^dz#dzYy8@EHO#@ zkSfoan?!D>!EBc;LuOxY8RhVvDBOhUXUP}Sg)~5_q_z^Gyt$=+n&2e8>IsrVk?0

>`1xt4G1BQC%DhR;DhK3kr#g?sP7V@CcMBxfh^Fxf}at9jQ z_4H>*p$(0L{!bmdb+Ti?vnPAxFn{`+N29N)jH|)|$P|9b3I{*B>t{$*Zb;Xw<@(lU z;T3d=1u*4DLjFYgr$R;jsWRVI^-K(hQA$S(aQQjw6uZUCf``s_BX-I?d&$sV= zTt{{Fs<-A;Klq`h8G3Q`Oxl>eE-U161F-+ws)X*5Ti6qs+4ZZx+ovp&+Hu1fe`d64+`LNC5!$+`dHNMIuB5+1{%{wo3O09_u#+Y1-nY zm$E}{j&(6=Xm|o6PEwW8+q{iqA&phmMJ`dS zex>?$5)uXzZ&<50YP1+i6mR^09cELGXajQtN>z27R{hG94RunLSu6OY?7kWmAX_Au zM1gzU(33$-<5RY@k(bR_42C8b*Wb2FFQ)#@YrtRnoTJ*ApwGQ;N}XB8#jS>vMc<)( z^`1sc25`rzFule#a*M%F+qKIjST)-u_3hT~L=w~8RJs1M!}%gv$x_(J?Qhr}g0?Cr zy@sBb^#ijaDmLRoVe)yquFA-X;W&yjBJ1jTdR{QMtjDz%uYLvD!#5Wz?={GbcUM^b zo7#!B`Jo1J>NPBwn;BNl(+QBC@PZMw+8-M9g6y6j`2TU3IZNaBETbkeVM*;`)NvdF zEkMIW^%7GR+J`iFR!a}i+`ytQGXySO9EN+D|<`-OLHZcK6}$A<^A2!u7-tc zi~yc~w3@Yr1!P3WxjUK&@cgGqI$~#VKPAOyQQfH|U^{`U^tU&)DznPw?1Qp9UsP3T zj3FA+l;!|EW&Iddm_ck5579Jb)W7=W(hS(Z$7;r@_PD1dmrw(1=H>P{R+iv5^|4Q0 zoi5529H_fC_iQJ+whYit)D(L72RLQB{rknxuIGq~rwMjQcttr(OC8s#!0GV0Qw<0G z+_uR`aub*KoME&q8W2y=+>0)F`!;nb^(@uv*>e)l!Lvn8Ph+N#hFbk%$B=qe5~BXN z#%4z~uUyr3MsB0ulzfQi-co(BPDFnb1jp5B#^#VeJm$TpS)cGZWtZCUnwE@xmGYV8 z);*zR@oVBXZFf1f=or2KFjQcUto)>rDkOfYX;ElZPIN})e;j5C$&V9IPqm{lJ@)yw z8l7iv;5C0tn%bUQaq)4FQj-+>57P>!1iW!+ZSI*l{Msa1!u9gA#3DD<7v6WT$F%te zcqEB@mxs1X0(akxl?ZHW_AdnNr`{#+PiV4o4=BlcFtmJN^guyk)l#=Pc(R;gka{iS zY3fbLr-mn!qRYuIAG+a_O;2PN<5rWi7t9Kn^jklM+-vC$CMoe<-gy2z#Fufr5i0=+S=%68SJ zEnYY+qjI!&9W6eNk%Nfb3}Zdg5J&Tcz#0auGO_zdHw@A6iqy)Q;IVCosiQwr)SD^u zh{bZr^x2T2(YqC|v+mRac-iJ6=d8B%m@|%X5|Yp?ve_S5{26IHW*7>?<8)-gajHb) zD3mBIegbWvOwm3v!7j8s5&5S)Av*jP(Zt8G_1h%H6O2$^0uhani5QRXHfCCEF;X|# zDoW5bF&H+2)TkaT|61Rb0l{n#k-P|(KShUL?3 zr3`jABPBwS24t&_5j%hyn<>(;Zl=p)Z7BY_&QP+N$8kZHc|_*RvnS9QPe(*BX-%vw zpTc9N!ZpwauL<4CXoLuxYmgzwhwovhYFtZ>Y25@>qEA0gs}4c{jU#xas!dgDhxQE0 zO-DRFzH<8b+k>O>1nk(uJ5h2V)p*p34I41Vw^Wr|XCzAgTLQScOrNVJgTufNs41&6 z%Q5Un7Ab_L1a-Gdz!@>xYO7P>oPH@SHjWbI3CqbLo=_Ic7d(t?l}Uw|o1`;tn+Nm^ z88MJO=xO^)+!l6@Z^=G8e=CZ|(5F-hi>o23SA1k$m&*Y;fEORss7MJXSMm7MKf+pT zIQwYG<<6$qWH#_oac0U$;W#29(pmSyHD4a%(B9V#IgV^GZBuv*Vzz;5f+kC51eDF# z+<1QoJjtkjP64pCwfu@-;rH-1-v;djH-(!`0kFtp-%LE|sG+z~#rKJ)?+DS&yQ?GpZ+S1kB{E2TDb|Q8V*)p>8puKLU zvMgJ5cLH$}*@%#QJ?$8)91}u!7^<08YClUGYp__QDJ7vh{~oc&5C&$S||cdG{cVu z(p%TQK~Fakh-C{Pw4YifP`@gzi6BFzd(>cF($J$kR>vMBQAcJQRcQv=fg1Sz6bZVl>9OSU`ua)+>>!fLiPYm->B`(m0sNpex5N zet$jxNMG6q_XgrFyvYb~pC_5H|6R>p4dn-NtVXOrnp}Gk;c$}q9Hxr+z={3JdXL^` z9Fjcx_de;sK<_F`m+C`FlG)EwSud}%I8yC12mXDq+AMVB{uJ5LR35@u$0$%Ax=Zrp zk;eLnL^OJB7Q>_bBz@v-FYNwP&Y^RyjdrUTQW*uDlepK6H;-1ZHu*CCM z-G63|KEP#PzdJ1>DUtf^Qg|rEb-K(#8u3Q+*M!zhzh8@dj7vW6^>E(v?z%h029yXQ z-dOU>w$N&i#oV_rjupP#-(P|T6)k_d2t3;@9tspsd$;v7HXuLh(Kp*~&)y&T$p2ZW z-?l628?D{A7?UNk0jVZ_B+d1!yi@vd%lFrN!L*;vNQ!T$;b(i-UjtIw(!!o{4P|Vw z(!Bik?xM-`!HMeP=c+on^RD4Phiu!|RQmEEeV#c7PaeouG0F2iOAGo&^4M$AY0<4W za1iK9@i+Bo@Q{<~{ahlKh||l*7XiJ$Et_AIt zo2?f#KB9*RobQEW$QJS*p}m9WWj9i^vo>m%R9RTou(ws>e@$&;K*Khw#h?}?4x#Z* zhpiGQzcPZqJ;k?&I|f#;MjjI9EGU z04$^h3kf@fSvqo&L}2}}cL`&8D$$4v`&j=nwDFRY-pK9C_ps%{UT0m&fJn<=#KsT6 zBoAVGM2{fHP%5u!na9V+W7yY)we>FU1&o+)N_zB!ykj7APO$m^@LAr%7!3}lD0b@sQd@p_2ty(H#3uPq&@KPECb-+2K z45LgiVpHsS**ZihxSch|91HeuN7K+F)Vht-C&B6j8v6cJ)&|A^YgG)2$`;7;%9sja ziwyBX2B9hUFs8NkDt(x=n=1%^CQN*cHV{sd*2cyx!KKuve7SGv4`;~lOU{+DR>)Nb zb0Z46%}c~-w4IeMD<75-JGieWy6EZc#51{EM4v-4>EokfCnA`ylhVw%>@n(RV!GV^ z>3~=}2kTg{1RbZ1CY87cJvTzAFDpNQ=mSkA&OGWb1ds_QX$Mffj^@h9H;5~LK*Y@; zm=L|v4X4YortwA$>)D%`-cZ-{WkFZC+UY5qkMAoYlC0RX9~J~}8>BrlPJ12+waMjj z0DxasSQ4R(NOvg?_vDW_EQtMF)C<1# zBt?}a@dNqkK@V2+c`MEko+d;$Kx`Tsp0;*ZXcPW*8Doj^FBRrC=Rg@M!h55MWFs`u zqgiR<9G9Xl-}PN`xQoB`unl#yY+_6VBB4D}Twl?5LZlORv*|dm`G#xM8YF2P0;%8i zP*HT;eYP34&5q`9xrBWxT9Gv6TE5c~6=s@5Ft7 zG}$YjYbsIuqm(M^#)~XU2y6g0=|t6(d4GnMTh;h{QVjEr^nD{KtFU*gVnUJ~!UZ=Z z8#ls4j$|nH`Fkf+MOJ-SDoPQbDi~jj0c3)n5+<;ch?jHD?G2Q6>!`{X>}!x%W&X>dP*LLIvNH0jl0fEZG8fH{ z%||wgW#4P7U0rN>5@mzN!k%8$2ww%fW{?}q3i+T~>j$p(=W(T(tBH`ojn&qO4m=f3 z^t(1?c614<*f)w{EQ{o+R}~AZnXXdK@_EJPDKwg_-( zSi7bUfk%YGBlg7x0-2Guwo>~gf_5;`iHT^=}dCSEc0)?KF4mf+$rLH z4>b)NL`T__u{~cGm-NV}`L_nIrXFk+#r`e?$1l>v&E_20jcNQy?0c>Kj1!^vvrR3Y znOBObG(f4IARl3qDsL10jGHFLjOq_hM^8sQU<7;z4Lwul)nY*CA~p2NWP1-{1qf5a zh1J6dh(;VS&Ct}!D)pe*yOO`n{IME~j8U!a(N+&DLPomYU8p%I!#mKOED|Oz$Y!9C zi8j-XMx}nMt~imy4|@}-4m($_dqLVYoXHMe<_Gu;J}3em!>;U{aExZiGwa-?R?!{F zJWix8$0Vw^M{4yEL;N6bh^UY#DiURjcMSUGY#ua?919bDRox&e4hRiz6iTzFsEF;! z_oyLy#EKE`g0lfYtWbm@%LC&a7z){mzHM+&_mN^f&DKG$4*J&G2MUBzst+E zvc@+2BAzIT4g5@5?u0%?*b>HIxe{YXT0q~;H2h6JhbY2Q)do_0IGhK7B0i=dGH)33 zKhV*Nq^i-;CLF+33LSu4#VOc%Ec2*4c1rZ z?$XxKGdsICtmd5;OQUjjVy39f0GxrEag&-od>-afs#~Kq;yNN$OvhR?(jPH?SBr`9 z*~o|Le3~SYPjnOhe6)E$Iv@yK@vMW8p#B3v3HiOTps8L;n_=VR;ksw(8U#?q0GMJ= zjx9`r{dC&d(#jD{HU46X(PrF@L#Y&}KWt9)QIFi#dAhcV=6`L|WWWs|76kt4puOt- zB=ek4MGtHePWNM<-oXgXNHE!0@B&c92Q23k$WlCGx?_h;|D8nhhMUnXQqw#~^QexJ z=`AIS80Df2mN(**$HS{~7LpY?$SLJ)v|PSf&(+N@8ke)E&KBr`U#j+xaszw4-#)nM z7?7Mqobh@cMH82pSw1?YJBNYwKC_~YW=u~D8Oy0))k^axlsHhZm(XIZEhU819c&EN zY@=e%n5`w?tT`=8fb;UdS>(Q7Q(9izr5LhnD)6gXU9P=8hfy?$(N0iFQPU=@MkaJ+ zZ*|#cbvcqU*t`5NFhH!AAM5TBx(X*BAm`yT5v;;3nDTmD^NP&IYF=W~uBz;eeEH+3cUKECrgJy4lBRMlfwk-AI{@-(KdtxN z?<&doxsu-qY8<_xS`6Cd53)w>W-0Dw9EFY@dA5hVA$vSGv@Efz$gJ}>Opc7-Z@Q_T zE3~+Qnpka5oK-M}jc&nIhVr#n2%JYJgU1+gp!t3Oqx}0z@a{vG{Yo-0Z8R$ohSV8uGuFV*xX>y8d4`;2y5S>-L4|~`8DVoZOIy{oI{5*i zyNJ>J3CGi0dz6W=Kc=zlc5Vn_)WOgNRK@8LSajsKJ47)*{`%qVP)vxmD1X3&Up=Cc zUqkDa`rOKLwK@265e>{jpSzrR9F3SXIv^XxT36r1&2*I+*it$FJMI+V;^0LzhOhW! zMp8zg2`>#kPhf&V^&cmJGv8 zLzIbq+tB&WZji<|W( z^#S3JrHV)&eCK|`%+8I_TRZiOoM0@UsE>fxRJr0rm>VLf?f+@N%DG>!=Ac)5rgX!M z@26Fh9w3aM-m~}`WoH#U(quHZ zWyBN|kxlBs?)UTcp@Mb#A$71&zM>AyLCn zK>v60FJ9LPg1`0KUE1NXGu+UoDYl9f-o>9Utk`a;9k-z#nush_tS4iY4V{dydj#s5 zXqn_&8+rTP-|OF~pZ~4va*x=gkfBxZN{QRvO9>jMlX3XbefpP6_dBPG+utt~QZyR- z7~A*uNAEqqy${l@;OO<)pBABm!2x?Wm;}NR>yp4PAL##o9cJZJwE4<`dN#LlOBZCi zS~E^?x6O$A++nxx<0PQ&{TSn4tv}`*wejbT!Q8%>wy?N>W zzYgy*Sym&?56Om z=@%y^kJ|g&ze2BX9p-O;il6(=gy-mPJ$Zlg1VBjbg$1fNG-5$iMqW5#Z@aPE(erCU zcFu+}!bXnECBksh^`v-mKE;bAVX3{>;|Zx+$#zirOZs*ky%#*^W+>;Y|9eR23zdDoG__{C-eCzE`GtQkj?1LSsH8 zYfiic6i&|DOFgk5wdA*2Ap;6Ntq^Rb#?MO|8v7g53#$`V7+bB+r`(8~DP`)#mbM9P z@Z<|QQ(!Lp;4iFDO%>%_Y*mDbHmaGK8oXo`l`HYj`Jz$sRnGC`?qr#^X&%+@;7Kxa zTa~GbB6x(h_~xH%paP zaopoC_UwXkeKhpyZ(z%(?C$crk3j<_@tJEOE&%70E#yMU^D$pQaaY%aW>rNu3r$&* zeT&!zvvCqYh4#Iaer58X8m_93>4L8J^X^vPW>>e6>b5`MwuVuSZ=)iFwOyA*<42In zji0o?KA~KW5qP|e1#d^f-`(#1mxipbmJ zXdd9A#FQRFscv(AuXaGM+aAK&`swqV9yV|zs{He0jH_P>l?%j9Lw17VBz1yy{N}jH zPmJbe=sF9IJ|A#&H2^V(n^aYDHs-E-y1v9WcDkcG(-@U_TJK9chP)YlZ7Sd~Zu^$| zsk(KT-Isz$$7t^nOv&y&jHmepVZC66RDnCjDx19E3B}X$C){ezi&RD5Ab4$;IwcDi zU;WR=2HFQ5D_Ua-tbpV_7Mm(({S=-uX&qwe*q_>Zsi5w?KdWWY85U#Y8OsM3Tq4)S zq)Gx)FY5w+lz3fJ&Vq!Ani#9#O^_A+cfVf!On0niB%{!ba4Efbom2US;A6)J7$wC5 zXDf3Gx6V3Msr?j=A~MF+j)nKm?CWX4Q@oDBXer)6hU|QgU5|YKOmU){+|fHpm=df$F{i_xNXWTU#}L8)P?2~L z$sDUx!=h+9N@bHpy(d(kR;~qSGI(opSGFg%D_Ps=;aAZ8M-F^W_R#7+!yymSa8>41 zQ6SSe%K67MYodKVwNAUrfyqLe@ePlW>oMgFHgYmOEX|{J*5~P8x6BanXo`@IJVzg? zCTs5&@~K3!=*anANC^>4kKTxe?|vqm=&m^vRZbV@LA|fMpgtnxLGA5yzjMh3R$Dkm zJ&!(wvz@){tnpW}Tu(PLtMDp9y#7#Z@&da;@Y;@^c9qc)Zq1wE!kuF_5uf}#sd^VF z_9b6(v`ThJx-*pFnd3|`l=I=LyH-$(fB%AZ#@!umS{YHb-97k+eIf>c{WjrhuDh1Z z&Wf*bP^4

PHc+0dx57#Kz#OIhULlYwV$=1{yh%=lUY#ZXrzXIQ?1>CpeD~sTciS zM2Eg{mIt!3mVEFQuxvzd&`rK~X&x+xNZF7ApoqUb0tjLBMJLFd`@SoY;$+J5JlJao z`f|5ljmkf03PqR_#<3`V%}~AniF!&O=Rx*C(dondIV<%#Ab8{@|MxheS>bZLe5}LW zY6oA(_a{1sAd(NkZ*pW@vzw*-2am$w_1EK+K1PYAQ+tSl-FBQ8k=h+Ly+L{L4HU4)QO@S z$#(|lt5vh5C=xo+D{{<_!(ED_sRbTX+zF>z+Vws1{|s2cx_Ylw*EOMaNmh zkjN>n7bf@*@NT+vjtG&+)B!Q@G(rXlrY=(cnw%qEkvAx^6C;=a7++{qj1fMXhewY?OduIvw(eZs}X3Dv=U;6 zo^%jX))C|T1ygau3*28DAMWGA&NnR#@L5ueczounUun8ajj#OPp7rLc~|6d#` zFX8w9FAjA)4$l5R9O`5e^r`jM|IML#P>*FIHBmgc=f%)-hp}9sJFu-VZG6;)1~^2quNF*;CaZ8fgiiKI>2HnS))nQThzm6 zFpzAZ`~7|g&FAh)dS9>|L~qB4<}X|B_dGi1v6}B|-=9uDr!COx?>J=3fEp0D6`VV~ zd@5-7b&KKRARNx zJz>8i6!X=WL#~~05N&)BYnpWh80RgQsln5@W4hyysj-~w7dp{N#i`k3k zwAs_(tN(+8bGDnE#V4VCvS(!LCxVt@S>Dv`r^;PQ>GPz)DK+ClCeGqL{o2MfxG7ik z<5^4Fd=9Xo@wcCMC(;G%09}`Yc)on8uDHxhh`kM8LK`J#j)^Vz5@pOEVNTw^hzky0 z5^|$>z9zQ>Fe~?N1{e@-xw89|5cP`-ov|}ohm}$U&gO>8X)HZWRRq>yW8^;W*OtY~ zY$IFhFzM(<09>`Sf8lzu@g)C-fkL*`3bTaio?2aG_n*ij#p#vpr^FmioPTPC@n>i@ z_wZ2aO1J(Bacy}9#Db+hm)W_=`hP{Gw0~>ckMAB0f4f*1O)fg$$K{Sm9vH_10nCG2 zYJr+8PAP>||SLYJyTl_eLrE(A$zL3AuBnsf| z{UZX<4L{cr^+PIEVprr?rdgMgljdY!eYf!|39oz6qR#YdO!f68@Vn-l>(YuI;UH4N zDdGyF><|5k3~^~RnbWW>GIlKuOABA%-y$RxT-3O-doajMEweegke0Jsp( z*Fq0$!?Tsfccd&1dAVxHMwE@|a4xbHCG}~d4^Cef4DS#0c}5BhEN-yAW)^*!vM@RA8-+AiTEvNrQyb;O6h-<;#4J3Cjs(?59A+`pPkDovcG1yR45s zx`q~d6>&PxfUmH&_ia`;2IaWYam1&Y`SWO{7SZ^~&w}I|Khd5&ChR2Qb{6&D%di*p zyz(`bES1(^z~h+FZ0;(TRVFolmU0c(^2#V5<{e1mcXAT)=*TS@2u(DK6q*W3=UXck zZlRLs{i~R9X@Lfe1eTnhM!+7+&WKa2B>6GxWF2eO?)@8y7qZzykgSYH?Fm6d_J|oq zZjXsdXKn@=+SzGKv8uAy*3s^5`!ty|#Itp@X^ut&EC96}#vBI~WA1XKD32;PI)kJ< z#XDt>=NLydu;gl7+HJ?frclMSGn9Vsx|3_HT<=~(6%3=0i0kHfETFY7puAC%dOB)%4Y{qs-3ew-W z94WosY48Yq%Z{FNLY7^)dt~pR)h7rNl#*0=E|E}qv@p4DI{roJN$DrH-T@%OBOpr( zryk^jS}w`Vhv>)u^83__KW+9W+AF>5y;1QgM>lkGZd=Ow)4=KBSDLXL&Fx=T!yp)6 zkVg>{K^h-zueOdgcb7G>EIqlls7_i(6Ud9b|H_}ft$NiotL%A!7* zH~eae#^>7+OME^j>jM6VNtV~Pfz+Kd?Ww+xUY#H0;rL?(6}OqsZm#VGdU66G4-5jDN7Xe2-W-_Ng2a|G;d- zI#(>`4%tV(w9Tb5@*l=$&sYskK1{z#5l#8nw5rJ!m0f?o-68Ky zIfDzuBh9ytbtIK8tf5+eByjohfrDY4pY;e0-d!*D;&a1=scB9TY3VI!Os!}A8WZYD zpl^)M1CD&BE3dMmjheZrks<@>1Sdx2{40xNP}VIqRMoHM6Rn*ghyDiU2e)?1EMn>&&m!e4Jk*H@l=d`6l!P|kF8 z8gZ+PG#O~GZ`<&BqmL5(3zxaC(#gF3`k-DUnjEbx{_xf3w~&t-Klvq_7}R8I{xQhd z(sddanXDV;AU!FxUET8i$5Q&6D7xL>#6l6HFX;VOSjTp9iua_oKIL;=j5B$>d|MVt z^CZ2gS*?HS5VsWIt!HIILD}RVZAD##8ImFvW+!>9a50w@6C?AUBmiV<-r1XOC!Y&T zPjEv%G1b~!lt}Jk`4{6`bno546!=knnrCCqrxBo}R0RIIxPap3CLzHYt`O}n>4&v? z7egHLLXzKPvU7*^vM&8Hsq)hcw*Aj0_5Xqf_sSQR#3~;p`aEH+`ao5fXyJ#{$v*c zSdwtrm)Q1=2)|Hcs#6;OF8R* z(2+K>F+zjSnOOf3a(4*8GoR!OHvU+Mq-RXU$XCpA53hG~;6jw)>RLl-@LJIrW3(Bq zO*|TtQDsfEtYk-@2$)g_x8Du%@=9(GU5(@$^&uMt0cO_jOmv0V6I)sbhWyGCX@CIw z&UpJG$!C#d!IA=+&RT@H5a1|u40*56(XE67wLC%c$x!=ErCK2d&Y-5Sa}W+fDG}@I z>~JOSLGT)7Y+olJO+b`K4WsA^S*8%|4dq?$9pN5ZbNO)?Cd>G40MR?RPhSW5Nju+B zhj{x+>Nol{09LCp3U+FZON0RKfdJQ4x_^v}y}t)`#kxKwc7Hj6lB-rw@P~#A2~n#V z)mj_bIFk}oN&=RQbZLx{YHG@y56r|XL7 z`&I}+iuO2W%!}VA;1-B!gWjnCCG_WKV(e1PEvIAbUrD%*OgeI)T)(WVCD*$cOW9pj z$7bfI|548Gk-qCv;5>jZb2`qZ9!oQ26CdEpo(BTH?T{7quqZf3WxcYQEwFi-TlB!u zdP{=RnAXwmgSAbKTdqmcs)%hbLutYdyYt&>rY-;2{#<;hbxvI`ShmNG-qyWFPe05t zj$t#uk+`slJq?#Nuv0!@~l7w`5|lDWOKHisN=HoSete zIM%_^ME$7*&Bn*#Hw+cXxiX3TGR^_1NRz^Xh(g->3?hrN-_p(*$BtDWE5`gQdx;Zx zYGP|=pRyy$XoKC?XsUieU2!gOm5>UJLe#r{n^6_(6xx!Kp0c8gG80%ed&t8tS-Gx1 z5qEx-y_K#m{_t?>RkdbF%}@ zRbH@KjUGq!#G2S&?sg#$$-T>yZZt{?9BZadvux{a(m!R#h16?=dB!WwLs2|*cv;q-C|I7f#0ulS;2)TiVv0u!L zcEW`E=*AI9?k#~VDoo*rdl#Pb5upwjhF-1|jThdk^l0)kPcts~iv}h?B&=fx%3un4 zWX;j%;#0kJ$6F6l3j>6ffxm@-A5wn(&#ny=ExFWk>xJWe?{5$ax zpE<2_WqUf(gtAC5o(&#YCeW)F7G2q{u%7Z*RN)M$KrblOvdF1-Ma9x^K5r52I*L zt(X8H-|5hUMvK%hVO@+=s3qWX?8Ahpp=3>V3L26xSFk>Vkpaq9X-T0b@oqx>=R3=f zAQ{iQW8@8G75v$PfO6Z-5^|y$+31iut)IGRB{CV zf&*@|cTfD!(+vH<>NUMfdXf|l`1!Q#@psM2^uXaWebPa=C~$O@%`~M5HVT|O3 zayIvjb?x{1c98~xR`dsLq!iN$)6$$rIuNhaxV=~ zP_7F6btBJ~;W`$(=8v0_ecTt9Qcxq{9ddTMgKA z1F?S5Gsp0SSD8^<(f#4QH2U|tDfiU=8mRkqT6uAI=i+C9yAe@zM(sBzVyVh6rC6x? zgDva&=mR*R3(6>W8j|_-T$lkd%*&*@s9Etz$AO z3KGdVxC zCZq>i5syvTq-_y>J=$7vp;4;T5X0CQnx)=Z+OnNq1L~)^5vXr%+cqXK28!FWIjFN8 z+$v#d6&ht#eWk1|Dyx0mk!IDx{oFBeZoR>xa~7wWq^Z@tUL=9q(B0jU|H|CXO+VdP zp_S_0=KU#xs-i*k+vQjguSyV;vkIxO#??VH#=^6Be5(hcs|z87&cxv!;kBpm-%;qv;2{yc zGjmMC3R2U+3l6Hz)!SuV5XH(Wf55DSz#yB#64N`+CS-QXc9v8_Wao1d|mm=u$dcXL_cdd#CY&hZh7FrRU3J~FnK!^wzPP95+sl$PU;DIidP=q_RGe-yR2}$7_YMm zQnLyTG|?5c=7ejwh>PZnTYBrj2ZLpd&a3AGkGxz%=A&Z=0^u?3unA3+3HCP#8mF*a zoR{e`?POE6pX+>^EREqT$*To7c_TeuKPplrE9mNc#YU*WElT`YCAh;ZTgbsKSNliv1>wZ7h%MXe3CaWYS}hRvcUIPy zBYDt(E&LHTWS7^6Juzf2+p|6G>&T7(PPfp3(#S)?z`;>2^$`pW&amz{AD&kJ?)7H2 z0hl`IvN_|k@CNiuX)X3U9R_=P8Y5HVvAo8R}Vs`ICQ*)a^kF$_;vhxmD+ z_@lrrxbpbJEbMgj?1Dx4ltlIDZjZb!?Ap=!dL#}^|4_xhb-ctQ3bWuetH*^^QHkq( ziPofv+EfrX6iFOOg#~f<)zAB?>h6F~Vn|fqGwL1yu__e+f&~p8M3_+FLWT_io>&!6#wvNI=9@OnDtBjh(A{td*6H?2(kOIu2}0^>z983Odml^X zv)d{`O~XzB;>EwOPJu%c0ySyNm`DH^Mk`(X%L5Wl#v+Ip0?RAt32>aFYc_*U^3XI9 zM(F^=+Hgb_o8BuPc1SW+PbfH(k%#g$kFVR10jMro&_j+8Lv9RS$L zrXw9~N(3F*GPwx=?qo|P4kN%(lAw2l%7q;+-zn!2f^1qM7j)tgYRfJGXimpY3W{!y zn}Vtg0Fb(D=aC(6f-e%Ag5<-d{o+__|CnKXG3XX042%Q8f^;Fs7^<3}l%TE}o$SoG z)}f;yBmPLzzSw*UGF4SqWwljTUxl@>$SR}NvV|~Q0)XA(a1oANV{Ir#+ThrukoB#{KeZmX3~L~4`80}pYjEe|PV(M|VV za^HnRL)kO}03+G#lja?ffCV^Ufd?kI;DWbpR#=57E2!2T4X&w5gCrw}VE`=q6JuMS zyeUlkE|xgr%Q!xhR+2%!jN*wM9y!kuEglr)l2guDW|&zHS>=eKl|&DMmf*Qu0H8pp z9X}vOI%%bsX1ZyGX4SaXTjiB;|5<|-t{Pc(6Q&p0*zB{KS+Td4Z(X71eNn}%haH<+ zx2t7#++>}myKcMh#@patxenVPi=Px(X{kG9*=CJVt~h3e6c3zZTL-$h*$-Js&dEm8{`)@{*^oE2wB^oPw?kXm{@1$3{BCP=6CMB+ z2E6@6&wdxgUjvh+P{W{%+=LsI9E_?a(Oj8jOtV2C(}q;P{b z#9Lm?K?h)1N`^E{Zr6(ZzU0N8^k<`6=hArUH}_?QSAV+wY> z!y5(Z7dw(+MKYGrjIfHsBT}(OKNUnYsaQph>{pjF8e|&kI0!A=K?%S3;U3CJ(Mn`d zih?8}Hm|5-A{DvF$HajTvEa;TEK!hE#DWoPlq3DVh7kP~aT@nHT0zKB532Ab5cOb2 zAf03ojEs?yuY_eR|H7++jD{eCAPoTY5DT3cj1I;+h_(o_hu@f~AbSvnEIc7Cg3u8F zg~-t_`H%=!XvQFg|M*QQ0YC>)utF5t#HMzFDGOF;lMcW6ra{t$2UyXf9-uIYJL*x8 zP|#u*2Dw8$ci|L*_z{o*-~%OoLWxEMVi&t$CPDaM&rlpB6bI#FLGG{%dnUA*AtHzs z-XV*F#Gw#{kYz|kI#Nlvf*>U&NGg29K!DXD9L;Ja9so(Nsu=kh-9|A#( zh5}$3garU4{;3j-=Ib3(EeLc_GFb*UScq`2L@cO+iIk+`5xCSQ!Fmx9Q?w%xs9;AX zdJ&IUc!D{uTtXs-(-Y)UBOd<(07+cwu`RX3#Ga@sO+}Z1@iS(yDAk zQrk$+WhJsXMuJPC97hl>(pUn(W8cA!YgjW5rzI0Ge&Xp*YedwfMzX-jS`TGx_qx`- zhg@@ghdYo%*HH$5ALHtdgu25W{iL;jxd6znv5C&IXs@1XHV;<4TFKBJ>V(5RaMh>xenHv&(G#WMFk=?0(MmljG$z z#&ZP+TKqTJ1aSl{pd8U=E;h6<<#x_>E;?LNkP(pFjX)rltA3}W9TPE*k!fNO4RNU7 zmWD|oT=Ns?;Hxfi=!r!U5}TG3gb78t0~4~&5Uz7o7>t6|C+`v7T{q$$Wj)9zsp9K~ zmf6>ZWh-6h3f96ZM7wy*BY+8PAB-TFAXmss*LS{n#uMz3t9V4@_pGBerqR$!lg5id z5|5Nf-8Yh$MK)H!6Lx4P8?HgFN4WD-lI+__-08+9JTZ$R0RS1mko{?CVg>1}|7WYP zmp$#Lc>CNJnIK(_l{@k1&Uwbc*V6#SC#F$WutNWn?*u?yvme*>l04XReJic&NsfEU zd=~;wuNG#En* z>Z-0kf&;gMyIvbCK)M6-8a80_r`;GUJTkW3@Pn5tFJ_xBHd{8fS}*luHvH-kOVEQ~ z(F2mmwnCDPUc$dC#KItHAsvZ>B|x--u^uCk1VZ=&$aw-u@RJ$psExUa|6eKuTDq8D z+5}#ijBha$%Wy+DRDxfU1UNh)G|C*12?S7}ggc-aN&tmBn4Um%pNnw>N^pejaRe+n zh&w<;X%U)B1Fg(UI)hjV_sGIf6vYzxAqyH90ScZ8;++K|p8kOy3F@5za+Ls5AlW&f z|ACuV+#RUU1917aZ|RwX=oc#-#bPu@#n{3o(woPr67~6>FI*WIik!shq3}5&WmHC0 zxtz#ZM8grE9&#a(fkwj+z+*JWbL@-0A)-@cMcI)>)xpJ7gq{du8?-4H2dYH~8lKpZ z8&gEbe+0-?A))sX9A~6PgZ!NCaT#tj$fzM1I8Yp^85s28oMv2~|BU&@$2kZ!49Jf3 z$P}?1e+(GfnU~#J$Ac&!evF+2az_f97OD}+A?liXTo--JMOECNRV>Gk79$&ox4a(PKt z)XCoQ%9LzLe2m3hd=<4!Nt-;&)oGozRmZxakUNDkG3n0(p= zO4Jp>@PknJ%7$PxcEA^n>Y|Ui%-am9G!h64>#RS(gjh?S|FGGES(v;L(I}gO3PmtH zgJ8G7n1o+Ylv~g`sL&&0vrd}hi#w330c(gxpoI)0h)?3Dz|fF&$PJ@nh10T4++FeIy_8j(!;c`SS(5je0jhuE+;I|x*`hSyApweW>Ycn~J*3wLq{a$rz$z)rq^ z1MPbXu%+ETTO=`~$g(W}aEPzUdK`1H26qrKz17czYi&D|a^QcTJ7DX%s z?ns7@0#Ae}1ahK^-7<(h$fR&8rCcezf&iM*AP8Y9mSi;?qLFti2tZpJ4PgfnGzu$0!7(BVe1oE%a0F3v zDwbe~qp~W^I0<~=iHJy(NVCHI{H%;RFeBU4NcF(l!zvWC2J^52p(3i-G6=3{3;I}3 zgK($5BZyxu2zip0T9Yeal~984K0DaE!CEVL@-MjxCBuTNwYpG0!ojyQh*Y&Ux=^a= zJk)T_p~@;igJ4vpag%1C17zUT(JC$7gQE7}19nY`I3R?Rcm+bpB!$SW<+80i@Ubt7 zF@G6YaTo*zL={z?!lt`9T_S`Hdjv9cBSHW>|AKgedrJj6I4zC9h~L@+MpIL+5Qb9X zRWQ8=>vRXeJ1e~lEVpxqMYyZ;Du^;0)?*7cR0062!(4m6Y4i_kTK+i ziJNfX_%n!Y;1G?vTfIdHybZNZd;)avTLPAe1tSQlSUSKcUE^V^yZWb3B45f)Rsirm z?Ofk`c+l_!rT4{I_BuA2ePID!TGQO$BxW8Uu>_ce13-&OSb5&0dx;h%Qg)SvqA4Ye zz|VycyGWH@c3{_-Scz1)Ko!;#|AHk5v6~C%fT=LK(dN{s-1Q<21_12M(xf;DDi{V~ z$lqYSuJ(O9_bc7{Er>Of5APc*%hg;#rV8x@yrM;`xzac>wb=U|yn`5pawvzyRpL(u zokto7Mumu>=*et88? zIK6>*CQ)z^zR8rqVf*PKU^AwL`wG2 z9*N;^`(8uS-b{qpY;DZ%5I@S5xke8^aSC_w8zLLB?Co20%vVfHkt}e>?8hhu$qDlD zxg7Ae`SDeL@gg4`&~9vqA@8Nco`z&`+fAPm${)#b%1&YxV2<*HJnv~VZ=y8vFV`U+ z2bKmW%jymi|1+OOF;5Hx0`oS%%o3la{DB`W8Y#bob2rEHk3{oyT=3eFEZ)xZKtEJE zH<8a2h0rXFZ=oC1R86QLbU%RB(PT7qpzYce^h<9MHDaTO;e$crCE4w>5yNQC7q zi0J)`=ZwzQWr*rT*&cQX?aVdqWC-uPQSls%@??d{J16zT^j{y5_e5n#n%z`DLpIvB zTv>wsYzW`-PlEtZA}`!UF;D^di^XlwB=n024Pujpb(wqizYyR|EHGd<_rw5Ee9^Sx6yb&7z3uS-;@Mqv3oO-+fS zgg!l}gHT%hJ&0n__jA{Iz(6UK6gs4di+5O)6dW#UfK;mbRCN~Bv5Re_QYuj0v{99o zORGXwI%>Lo`Na1Naz%*uOd5M>hB&~En34@^cm&k~ zfPQ7JfW;~`=GWxft$*eGffWgoFj$1$;#Iw54rweOg;+wE+9$2p>cv>3=2$Fg>X7YY z|B_XElSNsTjpQ}ED|cY|xEjy%&AaTID?VrhIpx`c@Y#C+TEgnJWDCOUYU`xMU zz^PWE3kj}+nd_aSm!qILyF>LY+_-Y*(yeRvF5bL)_ww!Q_b=eUf(H{WY?$h!|5$`z zVv42bFyw_#3JQ#~ttAH_wF<3SO5;ai!~YZLO7}gb_NYP6&%v0!C`LbNVTGO zsTLxXC7E)?cgYq?bPKb%z}yN4Qnol8z^IW60S$}va*5rZMPGh;3cy`GoKgjLFRI!p z)P+l%B8^!O6ihfd`M?3tU72b)>jQZQitD#QFP)WEWCa>{Ac6@hxFCZKI{2Vngv9bl z91tymNh*IR0U=*Y5EP&hm$8P!o3uS5-px+P=!p4^M;et9sL3I(~LRYQQ;>@)u_ZwU-btja{)pm5`i2VdMKiaD!M46jSe;l z0G6yK5FCyDk)NY-P1cTEodu|wZwoQ84X2Y5#||=Ry@V+MmT^kekEs%P7Hn{sqT50m zfh16fm`S-%F6{6DQGUhMhY&}>aYQ6^?`SCy9(lk-g)qVt3Rh46!ITp@J`I)TQ1_Up zT0L3`w4Qx($^_r4^9dBEI_K5nl^^W^wH*MH2@0&L5RFn!IWA>7Fu?^Id@#ZT^AXD` zk2uVTK#u^B3L}qHobXuS#AA&l$iyR>5}gf4BaNNB)6FKH%rX&;|B3(*Pl_A1x@U_3 zn2fT@OahP_0D@XnPASp7YT`EU$Rf+IKfWSL(MqDSF)O8*C<-gjyhAml(j??bHu3D{ z(Q;WX1j#U$yhPnF*S;kaIkdP<%T7wl;<%s6&9wtEiv@z-Qvzq1t4tPnw^pONb=UJHiW8yl4w`vQRscP^wxY;C!ZK zBA&fN4FJjHzQ;2Hy^4@)G8R(wXU|y_wsZoKZ5>2Z43qX;|2^GvPd)sPTMwC51BX2I zuO6YuooX6Uz@jK{f8-!jYNi3e@x*C={qs&B3fI5%#0fue$QFR~(4si#VL&grRXc`d zx)rjpg)V%df=IRyy9s1Zq5DuAHZcg2*>GkxqeCGIF+!TvXofU1A`pdGGXV6kGIZF4 zB#h%jBASR0gdidhX}FLhR;Cb}P@#dcSVSha$c8n#11Lgqha!rxLNvMqB^=R2EE=&w z^;rldKyej_a4}<_i5~hkClIZb2!@6{Bq9^3$kdn$Q^=cLL69fO>)jCmtYTy(e*_xf z{gG9dyd)+mDakv6@{#c=B`71~Nm8;BftGaTDo6QA|5Jr>RkVENEdfvnNk~G4aoA-P zIfITAF0z=$JSH*+Cc`a?F?5y@2Nrv{Odrl@j60hJHnWLMMl5rVTC8IY`9?)*GIN}j zv8IE%>BceA(Qa&HXB(x7PH;Bqn|i@cGV`g=ee#n*sT^hKmLN-0&a#q}Too>BSCs-!ZZ{ro6MLn_h*O|zb&izg4yS+kOovzjY~r_9J0 zQ+oChBKG9tG;f;H1F18d;oQ(W$w*E*Qe~bhg-H{Cy2Oz(wW&^hswiXG(E{PqF9W?Q zCZ&2&fXb3sj~pm29eT^I)-tOIqG(thiP5xX|J0$c zrBf`aIjI=Ub!HK#X4I=pcWTdQ+H{^f4I@1FT3B}ymWzySX=Al$PNm+pv!4B|AuD;j z(B|?l8r_R2Z7oC_D$&(~wzjsttw@(@I+o(rK$d;%6niV&;S$%FxoMsh zOGn${GPk+TeXhaaAc<8lOcMCigC$a-T}VOZiK*HRbi*s&@sgLhdWZ!k9?=*~2xJfq zdjxeC6PesZue|oXFMjh2(&S>o6;xRTcp)Ps{Svsq20ri$6QkQyuy?+tK`?|PEa3?! z3J#@sR>T;g-9Hq_BG#aAruYit5tF#K|BZRfLa2-0rw4~KaW=xNo)Lx$LmjSJ6 zCZq0ku3m_%(W?g$4@M;Q1O7O2hqD@=1bPQ()Rr;Tc-uLb*S8KP94kL7h? zGwV{9(t6d_cJeA&glWMXw;cit|4c-|N>+`IyQ}0rH&@;2(M4g^-0l`@y5mjIi`o*^ z_8#)J^IhXz%M=dP{>vU%!3r7wrP;)ec3^2}@MPB$or7gKQg3>whsU#=%uYDN2OC_& zzJ;Y8ud}{GPU3bvJ1YLu5;t6P2NgHE*W2V^|GRxJoAuE#mg3OPxWaXt9x?Q=hLLGM2J!!Q2vlYivXt!|tFaG^yX_{!yfKl}}L-t?~bC2ziU{PVB>{NDk^ ziViTMxk8Wa9|0C%{3QlNtU`L>p8+qymO9LM*_+BLLt7W}pWC-HBC(VgLXF zhMeDRAPMfDCAfl)DcZAKU~Rb{UThs-Aejp~3c|(U^3}y}3112B;Fek7gses!xSDpw zP73Z5rvb*>xt7Tt|6y#6pb}DAT_hoxl@=4mR#fpI78*>NxdJBi5TP+be^JOs^_gMR zR9t|Z4t89zF`wYwg&D#H8s1=0MP0*Xp&e$*c})nRwOj~_4yCD_r9mNFWt3N$6{W1( zETLYd86sOTQrcCNYM~t@nwsl5qUceg>**Zb#oZlt;)1kVEVx4S6d4Pi)MZhg;#C}6 zR9>*Pp|DL}vLW2Fp(1b{l}dddX0?>%eUtJTo5nevWX0moMI2wfp(h^WS)mf?-CoT# zqZ6`R>YdigncbARoHJ(Pr^Q^kMWb6OW8HNl>zN)|ts5t98#10_WE7tq3LVz{;%1Ry zFajOsCEiQb|6|fU9WmNsui4_p-Qrvv9OB8$E7Fu^Nu0C!B0YNDJ#rR0Hl!-OmJ?=5 zEU8^KX5w758@$opBTnQaMq1j%o}}r8-qD-wRbwF{A{DlkC8}gcwxmP8WI7t;3=)hw zW!&=tBR|5SJKf~r@nbLIBT#bOP|2e%E*V|$R!zzR%H~n z*6TUSM2;jlMx;4r66Y%B7}VPV@~b`aLS@O;-YOPCtdknXWG>gh)@fu9H>R4a#rVOHQSpX}kk!SSNVy zQyg5Nc8OuDU;=ugr~kPSAec>~OoLZI1TDD3nb-w-B+8}?T6pfKJ}rzTs8=jlfam5GM?SqgVw*JP;Vw1)C&FXJ7<>UMMoL$U-#6fI3EkIIM6{=fLd1!-ry-yy9%#Za@WF}71s!;TCs>b(?13Ka=q4=09_&Gd&;gJR z|3r~`f*uqClVXdvs7H7RL@4|XMBG6rB+j?pCjjsPCAbA8P(mR5%^qRJ-_$3SCJvh3 zLE`KJ!NG)PSSW_hDKbfde+A$lP^D=t==}`CjGBZo2n2Q90sx>*pSmXi=t7?wL!oej zFevK%I0B#cDTBsEB4h(KV5&0=iy~mEr|wEGP=jxb0yTV?DP$_DX2XZAjZfqWIl#fZ z06+#6kULxjR}@fxOsE3Y1LRB)02zl&@K1lhLANZBKRDYF(+5Q0}8rVjfR z2AABz9pnKo2!mUY%_#t?TcC|0VC#(nK()pJb@;+UET}O=LLN*4AH+e84g-nK|KJ{I zDydQfFzigGIzuo}LpQjDDP)5}jDo5HK)?dSGvKSgMkqw&$u9InJ={S(Ov87G%N+Cs z#ohrqsF5QSj!U4&uI|KlkVzm&5ChGGn0CugG{QZQ10VPSEzn6$6a^)uhg{@_mNl!+ zz7QO|nF{Fvg6aW=NXlXGf}a|KAuK3?ET}Nx4*=NDDF|xW0Dz4eN7V|1(!#`o(gmq@ zgC6Wbr(OdebSgCrLKR>tNu27ama4&0Ln;JpCWI=)Pz6^g!vpz*xQxlhhC(O+kWuVH zC`b@|WCZ|;Y~M76cL)yO?m~OGDvQl*U6?{Syu&rj?ap2<3nhkp!32Oo{|2QV>OvT8 z)Jm;;LM;IBLZAu+m#EOzYHg*;1uA$ds&>QJQo}U>Kow+a+6pXm6l}o0Ej45U+`>h< zkjXumY%y+T=7IqS12Bwj zHr(#n1}{U1Ds-^zslIJC2ro69FI9ktPfQRcIP4rS@9+S{Gz7vOtc$G9L{3obxxC4J z<^&0UuoQie1VNBMI07x)Et?jYM-)%()h6mN7zY4T#e%*mM1(DO?Wn$9!xH3f1siNOfJDHWYBm6`@RspgKExU4XHB!vWpZ=^|Ve9C7ZD`A{g;poxDR4KBi$rcgsAp25< zk8&;uT8yDF!XNMfdsT8_kc}@OEtd#{qRyy|T8I6V4cZI~C?{?FrfUFiN&JRrT#e z!BOahey}hG`A?O)Ls8r?;3~t!HnZeRPL!%)g#u^80dX86|K}>Qkx)i*25y3Z=JSE> zvp!EU>cEa@R7jP<4$(pem-H#RLNT;3F?BTU{m{?I9Mti#LvgM~yWK@TvCT1Te+VlJIQa|&vSNG;ZUVonya#X*r8sZp|s5-CA_kPLPl(XZvTHIa-TfWnvhS{~g= zD_UHy3AP+Tgd=FDHNg=maB&^|2s_}&U#B9|T{bN8|0OIIB;ySuW%8z0zaKt(byw$e z-a#ayr1e$ioN1ok6K3XUqGm~srfgER=q;i-)>|AT0xN)*O6ImVzIHVhH*t%lN7CkK zZ?$PRw}H;{Vhu5Z*bk!iCQ&x#VK$LOJ={D(rDhXk^wHWub~j>Xwqo|AWJaY=0cAYv z<8^;`XeZWk!(VBiwrM}%TqaCx1|o5%_U(Nna&sg(DpYW@ zfOF-1Hy~F#_g5EHbo=JOyw7>1$Ms06rk9$!^Hanv0S^+9yo#T3A_H~`j*4Qcmi0CtrU5# z0>d5*6pR76kAWLh!GjpV8mIwDuYn*4|3n=Kg1pN+5WhqnsKL7nf*N3fwfDQ}5W9uL zgnvH5n=M*n{O5m)4iuC@8MuKPFg&_Dh#Ii_9^gB?ySu!*yIj0)MXW&`0DvH@0l)h@ z$%hWMJGZviOk-5Yc};SHAh=vC{2?4f8N53kRDq2|{6N$}9ngW#3kDNRe7nDUMW_La zh5Qt>ivQ8U57hw{kWhuxfyaZq$d|m;BMiXXH&Q_aj#<)lDLv`Pyg+0@%~wPjT!BD5 zyg=;17%)7;yFuQOsNAPSTnK%|6TQ?+f%@tD9)NrrEQG~(yc)QB)l2=yzd_Ysz2Xnd z$)9!*YZrE4NMpoKxEsvEmwOqE{{bBU0NH;$0I2=vmqE`zJlw;@=hiP=ECJ8&eBXDx zybnIn>$^ZOfyUE;yBF!i^ZOpuLErCwy)QoSD@fKicU-&~ieX49!~u^<4P?l3UMzgW zw|yD(eI1;A+LuATG(2l)KU_dUh<-mL%qU(+{k&^D$g{gZSp2}dh1h2XK$JlPpiY@O006it0{}`HK?v!Taf6UzMT-|PW+bRa55hWY z4hm9((8!vHAF+5`lM>?+jW1!wlsS`TO`A7y=G3{9XHTC$fd&;ilxR_-N0Hi;B76NEHQ6nc#w@%&qed+I-jsW(U1RxTk@{e8+ie#xV&bD;P zG-ubooqKoh-@%6$zmrd_RF4=vdW294CpL6bCkt-4^>O3vsE-7x zqYgFHm`Wr;_E<1FkPci4CL_Rkhnw**%uvG(IqcBG4<-97mJwsA=#NxJ1YoSASfdX& z+_F$jA>3*M;E5R({}Rxs2-PrYHaY}Z!zAU93z9GiUxEUicd!G|$tR(VQpzc*l&q?) zC^~JvqqcMmiYl16h>j;3dZ@A`_BhTWus)gsrbOatXT>V%tkcdr@yrv$7AazFG#34A zO)@L?Bh)SK>JS8r0|ik{qgY3i~fO^GT?E6Un>aklL~>XE^i3X$aw zOj&K!)mLH7kWY+eC92lS=zzkd@8WPY)?a}QR@h-5TY^)IuH@1zN(Cj>*=M1RR$89| z{j=I;ZT)lFZMp5%+i&ZBU}ienEaeu85OI`+V5isLp`*yE2u&MuBe+&fRT zM=(iQpLcP7RvVq%Svk~1^pqmfS9sPZg988p(O zN~M$z3mRiaqis?MTbe;yPC`0N(wWG=61)gOagNJ)vCyt>yW-CGDzqIGtf!B)M#BFbnBzp0Ugv#JdA*?NO36I}_-{^&T|yQq7r4MIpihTN#)iBKu(&mbtWI7sH*Ujk&9`RO0# z6pi+%BjfzRa-JgQmV<>}1&JkKBa9yQ03DPNh++ge$mJBLJqb<_VQ{d7SS(VWt8|EU z;;Rco3KtjJ-L4`zDgy~M(u7MuVudZlgGT)2FR&RcNDV|zAwIGNh@@?JgdvRZd`3Yb z4iR6aA;d-EHZu&}O)mLaOYDXhz7mS6F*E$18o=^AA*tas>%_w zf+YaBBtB}~PzQD65Zu*aOd=#m8U8lKf|MbG7@@*m@&ZWW)Z}{db?Jxr)FOS(^9t`+2RvVzQ=NjROV0G@M)$x9N$ixUMb*x%|E@Jt zqb`-HO$7?4%JoyHPL--vjmfn-vremSm8(t#sZ?zf(yoq`tYtOpS<#wSwXT(|ZH*S1 zI#N0ANDM3pRH9q)x;8jSVimDig(UpN2lvp;Lv?VO)y_GSlCH5bhcuJUcBVSX)Dn_; zwQSq;5DQE=4HNiW1tTulS-T1JYC>7;QH18X#}dX!1%*t_q;px>stu=@FdbG>hmZ?C z^MMIPNELGBH}M&$4n8AXarY3W-wIcJP@qHKu;~-WK8Q0#%hLYzN0I#1p_dd{RA9Qh z1OpX9P#e44bSR6Y*{)Y z-huB5fX*SuaaerN(#MFW9jLEbXTJLiTrIx0#H6TL{l|5#*sV7A#6J50kh zP|r-sna)eZ)oEq33pI3GLTlp28b-uIvYV7*D&^uZQ5s}SbAe+A*P@#Kyv2@wzKAaP zg6?13LZ6$Cv}%HsF*qE^S4Hc{U?vP~OH(=yB`LNSH7&1Y5Byt7AVexGkt_go_AAp) z@OR+YNe?>g3H5ErKnju;+>x7)|JgIGKUw78j9fUEP&m2F#p_`+Qqpnwhz-%H5*-F9 zFeTYC0By#ZOG`8+(kKVPf&Q(`o+p{40e~g+0G~F;%UaqRO|>i{@PfD@niAm*!wk}* z+Zd!}bE$Y44xzq-v}Fud=np8h1^_tBC8-*zmD9B)l0+d0|8nzoFl(w{lKctjAVvG8 zqzTj@qQQ610U(Z`FMe8|K@p0wbU_rYqS{aWYFJg1tgou^^8Ag_l^Rk9h4XVQ zpp0?t-l7El=D7?J3wcz(sdT2{p_xQAgsFl4j~#aBjO+n1fg$m z!&s`q0u|6$Fz*08B_n3<17)uR%OwOI@KcPSKm<<=|03q(N-*{?A`V6Y0J!1d0D~|f;4c5puTPqeR-_O60Bj8Q;Qi#q{5a#;uqq?6?+M#)2Xm19I3o^v?=+|o zsie>e3xO2|VF+z74D*Bqkp--LLi0XqQ%;TnS1<&z#0($s1*?J%=%DtJO##hf_c{;) zKX3$Rj{`X`^Jp&)oInqpAP)TH@=%UnUIJaj@DcL_2YHa`vP$5dul{_{2ZeA5EfEuu z5dE@n3#0A{E0G5=kqRdf6(tcBN0Aei3KC(FP7E-r&P5S5ZxAn!7Eul(K&lb#5EoZa z1pkl^gRuq2WG9#&j&I$~*fXgv31|llYA{q?~I`Sw` zsu2|@BsH=ni(;?(>aPUlL{=dcHi$#$zzq(|WwO9V?u#e-rY0H!g^)rd^uXr+2eNcV z3_9$?bYf9z0&LEyq(nkNB+VtU5-2ijv*Jdy{y?(`A#QF`Ln1;V+~6!VZVBK_Cq_vo zpa5nXgXZGkY(j~7APaJA<8yEV=VSs%|BfvqASp;_Fe?dDChkB@x+1<%OujZGB0%XP zD$dq)!$6daA{wU2zGN-F1PUnP2}tU=vPBK++lwhLR% zOK~JdB&1*ux=Ui`fEe^pm|D}^6IN`|VhYvK#K-Q=ZrUOBgaytA?P~^@Dyo^Bf zz~xdR4)nm#dK8zqND5?BFp|SzaS(u_1>;SYRsM4ody%JMAFayBmJ zgUZqh#8l5{qxCQ%tf01QFU0&S3LBDHEXOL)k6_FzvT4bm>cI5z?> z0SDl$=Ox}WN)c7JM6DwF$`$;ILCLa0F(N`eD0XDWF*CvqK*?WVtqg}!HQM4JumlXt za4RaZB3iQ|+>^m5Z1@5rRe{Zs)?jih;&?^{(GoRRYogg6!RZF!5%d6cvQ#^w6CR_} zG9}^(#^ec1lTt4NO)H|5|GG~!(4sX$H6kry64VXd@Zt`X@FiB&BH&XnOyUsVhBdhf zP(PybVo8=VO;_R70|~(uFkub9q9!}!Z_uC@N#cWy0LY#dk1#?Zf~X*(t13SA#S+pY zAc5ps=?<0=CSVmImSAiO2_pm(W7VKw)e|G6k|L}~vFe~4(t$DKl`u1_6q2b|)lL%r zKo8=^N^ueZ!0r%i_8?e8Ar2wCa!gF4$wCEcOh;vRV3c#{(I>)3+CKsq8w7^FeWB=8#KmKNkl6HT)Az|j(W4O14{=dq zhtDaC#6BOSKYM8SrsF@yX4fjB*M6~}L+o}gLC z&oo1k3Ed79nUGoiwTA^W(QXkCnck{ zFKN|nR`Mjhc#Yuz6Jk;l1SJl-!X`gNCwDSMEut;YMI%&mY?KnRWFq)-qByT|jSYEI zh^{Ls!abZuW;p~uxYP{}^(-$#F6olXlroT+a*!p&PY?N%Eg~@iU|x?%4_v`yH6-mU z;<*Y3n=nQ+En*Lx3%URxaVo;OfTEADGDw7HQT|e5q(HLhATYiQ0D`$9I;JXr4V0Og zB6jP&|F{B6J0#pJg4J;2Ef6B0^4MkcE8JYdbu_{}&+~=&SUuVEiu5HpE_XVfhj$>$ zRsGbu0&@+TxS1oE4<6xyEFnPw;4?0$o-<>>9+Z553wEYSe5wFivss`p%~HMkKIH55((9?YW9c#ypOrEAD`9J_CBe z1Cq}&f<&|q>?oTbbD^xkBPy8Eo=B0^PWUP4>bty{k}hdud0c*Y9vPBh>evkOmK zl611~`jA12WMnoK>Q#qFR=r*zBHm?g`>7l0b(oH0G;fqWA!WG z`lED4Q*>rxEt+K4_p|*sp9cY-88Z(2Dp+AE+~h@Pt6)YT!a!<+j?@lKwMBix*d`*o zgKg$CaFmN0q(`p%%L+t*G`m(JM2#uJ3f=*3k(-1+!%^L1PKHji02(t;n=_JyGu0wD z+Ja_>=c5w)X0pWG+c$#uNP<9oPIy#$B=h&{_X8LX9ZW3Co~O06xKEbiX> zpfr+L5-$A()3+1zA~R;gFLTa{Z~fQUvY*wBR+E3RP75q&K z%K|XTMA4o^(Hc#C``fmWKK;5kc9boy`ejI^1@H9V2bc#7UAXx^iw?HXH}?vWKdhhK zEo7v;oP%+^cd}U2TuG=mQ}Dl-Uejd{TY0cXV)$siV5;~|9*Zmppi{SK>H!)pcRe0o}9vn%g4 zgy9z{Sr0zZ8d0epU$g|OTHV{Wz*V?Wyv&~YoqcuDp=Qnv7Ue#E(jhC$)4jf~<^?gi z^;8NrI?c`4Y$M?xrww_h98b-=f5{cx9e1*V`xE-QS6x8*J$D_e>0*#0E_l~oxrl6e zbLO~+(i5Ro`${6V*wZvWh|>3O0{nCgBeEz?7g9AOWA0SsAJw?`itxzdJD+e^0VvS; zZ1cdJB_Ltxqll}?t??>j6rtR3czTEvyxmhrl*3ZPTp5x_O| zz2DkFp67+mGxxnK$3$twl##td$s~)ItblqNrL-75?8vT5$v2*Z=C}B&eXMf^*&E^YRzMv`Xii z0+w&S^6>td5M0d)b(!Sc)w}Nqb^DqEL|$_N0!14zEoM)evGh*=VjoS54hilJ!4rZKzPsU)$>hyMkOS50JLwTl&! z#jB_Cgzt7oUO^;kri&y!S9^csW*aP6m~Q(o)9uaRoMV)yjS^<@{LbstRg3fhlUTE< zB}*Bq^zkNGExai_?+8!g+$yBBW6YRJP`~lklG}NcGsWngwN&fa=K4*yElC}i-wvKP z>{CORpiITwXd0XRLu%R9-N{^`yWaI!Jr|x>qf3^;-$(#Yf$5l^F;#|32H}@*y5Ng? zRGl7Kl+C`n=lHsf{YS>0I4=#o|6RnISu;JIDP9YvZy!q@m-9GNc=2DZh)rCig!DSQ z#rD7#&kJ70+?w`3=f`V3k7)1o|IKrs5l?Ye{8DM*x)&0sV!|G!7?*1V7%^05xu>SK z7Gqu>f3<4XJ!-agzfOR1IgUfgAI8^FvaoeCWJ!8c!%G)r9!%92#9$xJ@s>%6#{>Df<>KW)dB~&WE*%Rfy3P&Qz#)n^jx=mfc-_ z$zCnatTUn57$T>3*QJ9d&Wh3QwzC?C>Zqnh>`Tj_J?5aY8hec*j*C6F#%Pe0`iwjM zh6fB2%*@y@&cm(3N4R=!mZp3i50gX|0+)KfA5ptsLd@9W8)tFputI*%&5DB;HNZo>ADNifUh zD`C^np=c8pM?~JIN3JwU-jA?9L+p~b>kU^_=4|5c-^(vn0|in~1|72g<9s<1Eaq|e z9G(0iH>sgJ-?$87+<>YmGXCJu8 zR^IoHI#^;Dh67ikv`e&uyEx{{T?=Q6br+WH+JtT<-y5$J09e?OJ)uAEo4KX!m)i{r zBs{tnZDHE!q1!2c%FnwjwC7gSFjFW1Nt9VxSbTKW>)mb%v z=B;=29(K6>gVI;+sw%ZmE)Ifrl9AR<{}nv)bwcyA-8A&Z*q^)k07E`hgDpQ{l+#W89m6;rSHZh;sEY>#ki^m5f(oHN#h3 z8oX=zsPY-Thrj7IF9lzA{TIFa;EQJ&#SO61R1?gTPSuF=_fI0^p}sehlli%a|KQgw zA0Lh;t80n558U7zFYIN1;B8iyih(5Xd!|l0tW>j32|wIVh0Jhry($|dCSZ5$sa3dC zm<0Wjb-cI;w^!Qfr)Xl&veJG|b2Ey$%ol*Cdc-N%dg`7(!IPY z*)S@Jf@gCPR@9TH@b<*CeM~0yeQc1)wg%v=i4PN}3H_Kfp(^OF=t~^YGqXQ}xYz42dR$ z7_Dom75_7!`Uyf=Q`IjPm#&GHo;KuPLQd3DeP=XG^+e<5?4Xc$6mnZc^iN5;t| z$$q+v|Ba9vXv}*T4eteJKYs+_5(%Aj>E(hhl|fDU!$U_@Zw?|AtA+|Rm1lU*&*=Hf zsA`I}<}hWOymh%-&_MiDjSP8`eNs@P$U4|{L-_fu|;`8GOd8&=r!0;+5@Arqw`7MU?rm009 zn|trw1R0jNfVR`R^D2_^Yx`Oub+H3)lpEq!u#{jf_p9XNireq!<>s~^yJ|NWvMW<} zt%pLn!cvtmtyW$6dl>5KLc07(weclfWZ>iGM^~xX?8{vVK;b^#RrZc!y?T`KmuJys zmI;&n)BIuJtV9JTFz5ANe)N2TjwrPF{9$OZQm>_pK~{!$T_8^d5JIN0BU5;vc|fw+ zFCy)*YUn!stnidMweFlQ^1Jl)^euA9-Hy@ z==w&yWGB(Ow~|B143gItsv(&=H|FIn;oR_A$h?ZYBO8DhwnnC!oOvg7KL8ukW4l+E zFaivfZwb$1#%>%UxYU+R{E%LY4>hqPh~H~h^^yyBGR_>_ooyu%2k+cc6-5&BK0IaJ zNINu<_#8Ru_$>=ATZvLGhZ^v+F$u}2$<>6#B}U$5KNF)=Rz8JnhJw`6Lp#!Ml%Y6YeFm*(BoLVEEVcY$_57_)v|E z)wAXho%Q^CT+v056J|e8Z}Y3sHoVS=_gbSoK*KZ*Xs5}Zet$*Tf8@3nu}y!Y<8sad zOJ)1tT1u%Hi}b$(GLHz{O*8bI!yeMGKXgavdFShU{fbe0-Gr8e&R4G&I-*3ax2JEn z70;Sg*9GHMuaR_ZV1K0uiTN#tTlmz@SIYB>u%J z)C@iHwBXSV3!g0$!_Q9G2UN(J1x@|U2v~VcRRF@E1w{Kc#?L`tn4mxNBSIwWAr;Ar zX4Gtq67Y}S*bj%eQjOEM=O|OY7i0idd4XZK9#Et;&y037!j|y11%6hH6)!3Wpn_tuFh#+GeeQg1EEw>};I3{SE5~UPts#}wyd7+ieqsME0D;jNj4k7*b6JdCoVSPBBW>}B zHOWWqghX1`FhN zhJ?v78A?)BX846>uo%kI9~dzeW+}1Qkbh>8ku;n$#aeUSDGx}{A=Blxq$;p5wdE#4 zQF6nk+0K6Uj4!WjlM7V1YlzlkW}soSGgtlt0@H6SYQX@$j?VS@Z6I?isaG6PcmjST zrU@7@(Gqv!Sx9~u&j$G($zTW~kfh9U>7|m01OYy(E;S!MX}W!+;)MCTXsZwk4%;Zo z2m*p-i-~*?NTZ~G(vklS4fjpHj``Vyx@ZQvSoDo#buLM$DkW$|(Z?7_*5MLDjAHAu zkbz~7>$YOKvO@U^nQVSBo@C4CGkV!_xpxf9g2*$B?B(Z35eR$W=x3Vx$tN8n9`vfX zh(v|3kYL|UdZ`s3-VqV~IfdDwU?ixhCNadz5eP?y+>_vDIW@v$d4D59HXvoGPGQPb z60M-C8(*nZ%*sh^^Q#MGbUs6_C9EnaG&anNs@ z`D7^-K4)H(wLYIT74%+!b`QKh8Y8)-EdL8eg%sR7UNGiPQL6j(Fl?|0Z3u3P(iBLk zy6+^%z-pJbcfaVRT=mbY8Dl!5kT5`%dcocuQc;zSmG+!^C1YT?#JhW=+)w|jR;rc` z|5l_Hx#!!Mh$0+R2Xw1)LaWsss?mG|YS!QYAc!v!6~_R)zTf z;j~<=J0K7Am_j)$26$Q3OfUv4b<{m!Rf;zER&l7Nfcn_)F;{AN#EsucV{9<;C@Y0t zH44&ux(MR7-FgA8C`u(GE zv0K@1laPM~z7+?FD8jORqG~>kSEmbrGt-69feP}YI~+NVS5Pj7MS-EnIV63F*0b|f znd{Czb8*Amk02v2FqJS2h2q7D?D79ySQ- z3-lrk(L36q#VkzijP&C{`X_4oo}=*zW|TrgbYa85=ebsjN}$_02oE(=H8X=eb^QrG z2IDz|G1?%h0`c97r1n~ws}oUg2Z^u763EgE`Q>P1ZVfr3O_d%3@Q*7NulU>w6G8zf za1YhNmfJ3??xllOcc`%sk2@98{enPtTw3_Z2!40F_ue-X)GKQx3-87R`q+*g{f_G0zXyjeG-qN z$ugs&NWD(u+!9B6HC}HyvzEuYmyaanNREV_j-R0nmUw!rtU^;wOmq?QgO=$KhTg+n z@V2`y%@$Cyo;f3*DF*S(&$I7WAZ-LJ<-EAU54+_dtcSaDGcRL7W@nn#GisHU zb+gd-l7e7L>=X9v6PT{F8sg*ZjM{djoxqdraxYs;QB=6UXC7cW^l1@frvBTRzUaW^%%cIu#m&%!_%IWTU-Ylci8B=H_^xqI z>eD1INn~tQh!lPr%3E6W!b#?4yDY}HCAd4d24n9&U44ZJNJ8GQ7DJqh!XdY0DcgGA zGC>?=4p;)+Zq>|lkLBo0GZS!N7m4O<7QYcaxe;$IG0zCJqn{I{epLB~eAO>C)lChN zMsp3teof(M|E`HhB89|fb_uOE_(rg|dbt~ipyR0Un|e@v=M*Ph+)bio$YK4P{&g?6 zluA|CfP?HQuXjxGZBRQcDcH=L5edZ~)bo5ukMNY*Z7L5b6Z}@b{~KX>5HO-aaGp_D z7A_~z`y-HTX8cd((DiDZ$LeV}O}NLdcpbLe&ZyjjfGQi%f9p9)6$4M_ORYB_n73ZZ%{!y2+ z91lWgOYq0*4W;?-Mw%*L3f?$hpL5wzEVv&sB{A*7IQ?Jm8`r)HcP%y7MCB(O@738P zhbY3Z(mvQkRkpTJak5~nZb^H=YL`u;(;wB+nYDt!3Q6R8P3_v~gTDCtbj-D!k&1Lv ziuShm*XN&M>vZ4XD7CsQSf&z1-xW26-rRVb`e2n$b4}}m28Fnm?hMLF9@H< zdD=;g7_3qiP1V`43N;R@76>W>>G^^m_au7crNoFCM1>&|Z1?T;4&t0G9#wTz-sK6o z8?(v4I{{3P_PW&t;%(XLF{sz!wg;ExU8Ntzzvs-7*7%V?Qym#XCpsaIR$ST1n>~`D z&z$Y0BeViFTpq7}XH7)Qnl-*iWpOKW0=COi#cal4W~#2}NLnrZg34MmYD|-s2#JTr ztSd)54;x)bS={Y6dh}Rq^B5fl>4WBO=-}zM^9D?bl<;0BZ=Fs~97LqZb`;0ud0Bc` z$hg>L<Y+zq((3fKd2u%O1{ePWD9X?MtJcmkVpilrpif8=pT;%9b8%vJ1O@Pog3vvbWx0TR&Zms+c`Q;T=Ty(G6FO}>|TAC|OQ|6-(<$$$%!pvyKV+2lX# z(U1O(&iK~c$L6Qhi_#!`fmd*#!Q7@&9E3pxo8-GW%mZL$jg;{#S50M-^4?vU-_amq z{(l^*)BA-_+J!jh+4VYXhHeR^&)0TMI+xj4nXoYd@KTvUB|CSZjG^Bl8yf(F~ruVvg@yUFXG3j#|E0b^3jpt-ky2t4*))*6uZjiq?O1t$y=b zubkMABr`Nd_N<&bPGs@u*I2XI=P3%;?hAAl9cL@5?!-}vttLA!)tf$dvALB|Wm>PL z$kp(}u)(D9f_m0ytmE;t)oZZTq*FR8AmT0Jod99R|Fh+CLr{I^u^>AZMVb1q|pAUhTFB z@ei&d{+!BChDGYl3wF?*XdUy?%nt0eG`03ibDjH}7->sM)!gAUe3LC^Y$%#<68yun z|4I=#bfV7RG(jHq8(3Z`y}d6yG5hE6ml4kj)Yqnf(RtcNkz3n60Zb3HC&3h5Zbrd zp0%Nu)hVaPx=8)ZeJ}7Z;^%Kyqa6z##)_rJnU4{t6%0|ro7RkQYT9VW`jmn~QMeps zcV|c1>ywL58OB^mWjx`%;)6G_-FlgQW*@#n)SeG3qt$WGzI@i&7^~wd`|sy}->#O3 ztk}Fe07RQW)aCYS4Nor>9>U*bJcQ1;DxrnT-S1vm5h^@qRrxGv28P?j&3`Ib2)a%e zme%;sCO@ue{C54aCcWRS7?fr?_*kUx% zpzqg|tk?{(y$-*sT>W6l{IRZeS+LII$>>VSzU(b<&6C+szf zDGFqOhld|gO=yxlgEm?MIKT|u9^X%E<~o<3IAwIppH^^{H99fural;!Vh26?8CwzH zu|tqi@RNhcIw_U5q=(>7QY*2}0&3)mGF1z4a!Q}zmkxAHN?R#vMb&!fM3%C+BzR+7 z3dF}Do~cV5qtZ2{7HGj%a%?ZrD4Z@7A|5}tlnswSI7lQq%qZ>;rsPOWF?<-z&?z)3 z*}?LuaT-koi2D#fJK6EgC{OhDNtFI@dM&3SJ`p@5QOa0EP&vHX(|;i7L|-oKszf8F zRY_1QjMSVm^w8Ayq^i!xcX6pPHDpIforw;$b1By>=p?GQCr_J9a5~|VVrxvQkqX+5 zpDXgyPH3JaV0Z6$vKn-(&|&Yhu*p-b>OcNUSw?N`e$Al{X3FJOh0gC2>dBdtzx(Gi zJULX8)|##gs;cMeJ2bi@XE=ZC+X&J;G@J=H18@C!B7P3jU+n65{GF!E^MR+%I@IJr zLs0VtwgLTLirE0wOR2v0Pf`?%OAYj94Fo?y!ZS;qqO?3xyY;cupq6DFYg<#yCok8V ziwm#x#;V!vg{;)It-{|*w3j;H_cY8|9(T$YNLGV6sSN2}IlSF1Z~k=OC*tlq<0*Q{ z5;7VuZ4`(nkGJcG{4@2ysrBVQX5EXIC@%*RRJ&c*v~W`-gmNbV7bo2-{(aIL`AIxw zL#HqLZ&Ea3M7-D{ulq-}=)G+sRI~0-ff5sk{d@Er$C0KBgDse)wcTjT^R&^YPL6mE zytnw)e27jYwGcI=q>1?K54IdiIz(&4mej#@2+1b1+5-B;_tgo?N%XP1cKU`EV-oPp zID~lL;J|^ckH^mIl|bQiYApj*T&_}J+~zejI+`9w51^yhR6=}`dtbzq{w&h@^?td+ zk!DgO-XdY=CYfGhs4`TMFNtr(-4fPC@uJ50S*qPtqphKlUj;B)Rak6X7IK$@yvw%2%D$C_P8Q2&x}txP><`Z?BAH;9y;o}EIy9rh?W z9&2mEBy&M}6w&3V{Pqker=YaPIzM{Qz42u^D16eOBzSE$Z%SsRxr^<$yFuoqcW4Aq zAk$ZE>!<(YJHk?;x4PCDxPRfeRhzg&LhlW3@V(M|%nGmoOy#nynQ(hmvd<7h7K&Tf zLS3zQ0Q|I6KE|xEBQB6P`7riYU+_nEF5N4Xl0C=YiFP*KZui^wA6uy@R|b_QIT#2V zMM2M1xX8fGetdsJxQ_XtmXW&N|xJ#H6^(Y>NE9w8-{?q^Z zu>MecC9$2P@2qGEVMD#!x%Kmw(x`m)yy}#oYJVNyKhm2p<3VAAx{2|lxgSLgpWd`_ zCEJa9XP261Gu`_ydhF2Y%aP8;n*UG6nXBXLrOtFc_7&-Q!KI^U&w~rLJ9Y7|V77a5 zf0mk;OE|VXf4=X!Draq&tgO!jG+)T$XS)^G*r7%TdLoyctxf<2v1Y;-{#$tr?!{Bli97*G&eY; z1?KEcn#oqeun%QN4KAO&3gTAgu~u&47ccNtZn==>Em0PXL-02#3r{N-M3GzHO`Tcm z%|_GYGtJQB=%dT__<}MlB=ZmbzvT(df5+5Q? z1*(mH8S|X4nnk~fm1G)nDxaYMnuLogrbJVFjHLo#`ba#i-ZxTQC@a`3 zWB@V%01O0>0fGOQKT!VfQ*HoLfC$Cj|G{@+|pbq}=2gn*Fli?H&?UzmO+uRl#Z0^2Xs??yo>I|>K>e;*m>?dV^N_H(#j#MRu z16|P^W=&cfWG5lGLB()ZK8F{RTbv`=P`zd^X3}vJk@Bin!hL7?14%|+J@nwYcCeQU< zvAxnOt2o`yfw0H_v+2JNSm3kXMLiRPU#z zutMWD<<~9tb~5o)0$3}inwVw5H`U89K;d6XYNaoB*Q)8U7&)G6fPfn3-%t7x_W(G` zq|F6T?b3*m;tV7xY%3^(1PvUFz{Tb+UCsp*leM6D6*7RmM948R4PVpiNOL3EYcYdE zizOC>1`z9rl>nJPuoQCH)hrzOHHeM%!~1h74PQ7AI19-Ev&5#Chlh;esA|z=g{|yyx?Gcp_MHID@2yznK&v=vMQuP@s?G_43*em%X^* zb9|>W86SNKZNzS>c|S?I4`GR+mUra?C!763g$x?J6Gi^)SN#WM(l^U*VqC5qX$z3( z9AZgDZiYI(s_B(&td+bq47HxpOw`J%PiZ@{3zn(HH7+!kICfeG{noOqruR0($cu}ql>jDxUyi2|RJBaVj^l3~e5Ti{!hZQ! zO_n{U++IwLZnzVOhQ38Osw$g|t>o3}Wr6U%%0|#=#KP68#t0WH&McdtX4XtzAoCZ) zsHKX!oA4_mv}M>Fko{iXyE^VE`Sw0F>LoXU9p*pKZ(>SV9_b(inSsZ1e zt)tO_Wd;mIqs(+>ryLu^6feo$)EMgwv^Z-5ZUB|Y8wyq3Fb01CY^HNtea|i|f%o$B zHh&HLN_0KQz+%f2UynM_W^Yo=ZQ>IR{rz)#!>jiYTvN({%{h%}&O$s&ILoo@ym<7q z;0_wH7YehzndMBeMPxq?ylx9}a^cLFoZdxy=SQd70VF18yu*!ex;w#^hb9Z#%Sj$g z<-;>8SslUNMnwF=a8KalmeO4`&Uaw>S zVxegDTGOn)s~0l0So-Iz7EjY)kf>#n9@bt*&}}gCD^A=LKCd^R(PkIJ4(piii z;yt@j%|?6twCN2NFb;#>AXThpuuV_Sg6N%ZqeHf=?_$GI3 z7_J~tWw1Yq1~iS%_72WO5BJ5szyc+IRt;H^g^y1S#c~FO>1UaoB9c_G0(9kI4WWuJ zsam-cMzU1!SDnbDKww4)bzKJlE~aEOk9~QKb%syu0LV6NqIb!o0L-=$rTFrA1zq;o zq*#8L0Fm4L6(N!;EisPKH>CA`aYQ2s(p0BgTIz+GdUCI^fX!45H4jW~D?LKWRKPC` zYEnUNQ?D14QVG472zbDSIazoTPNuDB3ZUZ{$Pxy=a5Oh?n}C?gYTHB;djfsM0ohrf zTy);EX%p33ffbEB=+rB;Z9h9!hD@&hOeg||DJ%u~x5UXh*waKX4*&_VavCc!| zT(titFLvV2l~O2rUkygBk5frpK_tp47}6eC_tRznJ(AGfMj4Zw04EqmUqjg3HW7By zs1i*tOtUt=n6ATzo!Z9{@hkHm|4Nd+?1c5;-9oH`%0)3I(|0A(yz-Uur!bk;RSFzk z6$D17@Em&C73oJt7N1eMZtoccuh520B8&3bi@i#!-=<#6Rv@wqEhscTzIGFlD4@A+ z@Dt^muj6mac`H0ETHe*TVsL$$4G4(@3|P*}U;XCX+TUr$r0RNw>wFE|L*T-H=jTh5 zF%9xv1zmI@z6adHTmkQ#y?gV}P1Hxpe8fwI%_=2s;Gnk8=heSonTRoS9Y`R8WueWm zpV9Ad+*o-05wtT3lJ$uCA_~DAjgpDJ&KWRd*Q;=*H)R)^JLJT$|jW~`LWy=8-;A5z=#P}~_@3#R9%T$~3K3^s1W5wcH zT{PWI96;sZcLuTTCLHlunEZE$9JBxg9A`ZtSbqYxQ$pyr3#o)gIhQjvp`n^epxJUu zcRobKre*42!t*WmKpB?nTKPxw5XZOdnx{;02H=cSrUrXR!D#|(KJ!F0n?rf*>nlID zr*v#mF`$qr5D@^$Kw7;dlPs5F2a7EKC*mJCJPQO9doc|DiTDIOd9#Yk;A-T@%Sw?9uKl`R&_$PjWuVCBNx z1OkXltkvXPfE+Q|1^jt60Utmwluh40%w1QQ;Y1c55_Kn5Ox&jqdrX8r!odt2lBBsY z7T>{szMR`)&Tpvz4$4aY*=Q&d6bBG~jt9rJ1jnD)t*L7ARi-MR0!_B1FHi3|WnnrD zlI8hDZke&YR1@qNKo-WZ?NbHSMu|No2k;s>vQ%V<%W`lBU~38)eXlC@C+(Pyvl#qZ zfXSPXiZXsJqD0LAJQ~19)}Et9gdsxowd{OIc6ti#2-1M$w2DJQD}+tmnc~{_HE=aD zj9MJlAH(PSwTM#s?3|=TQGtUJm^4T1RL=CY_X(>M2WH`P z+R`4ldPoIGOb1(&XSvak6@?_G?h~m8$fW?j_r89n4g@?`+}VN1rG9565d|70NZau{Xll9#)~p>3C7 zI4>JegQ>7Y%)c*QdM|id7u>UO<9QqBU<^8OSWCS_{@`j3UOAxm3XGgeKqho(Qe3;d zc77&?kfZ+Dc$TP^_>`vc$5<@Zm8%7Kptz)UfaG(4T}JT@*$v{9CEV&G0`i~HIL zoU{qq-}C_x@!3Qg~V}QFbzvONJpn&-<RA_Q+X_uTs^ zj&h8m9OC-m^tZk$P7VdM5D(ho*mY$DTv>o0pKu7rYE_%y^jjc*3vZp}*6(8<{D{+M zJ+Duci;6(#m~!jyff$03Z1Z#mPyamHWNKiKH{4Mz005MZ5n1uYje?}2^1Z0Oy(qX} zhJgg&&L*b2tXuBcQBG+>gTaqIgYf-Fw3ufe65JI*4NG#( z$2mT)%-xf*$R2Hz**z6|M&hPOQXeOq1$A;Ju6Y)NVI zPaFKfEE$TB?nL<7-5l{ih-#y9uA;a(SUBu>P)7sM(E#ShRIUHI7z~`^{K){C`%r!% z>=ValC)-ijw$qDiXYKDp>jG>AlW&rtg{;ZHy5o;GAgw zCb7g>!|R$KJQXSN0hrmJElH{Z6feeVA4-fb>!2)Wt=qEDK{Mkz(+d6A63|bpCX;R| zS+yIo66I4~lC1Ixcb}gp0m;C9q@;W>1pfz7+1>8=U##1Y4ssE1F%N?4J0W2WIBq_8{#pi*dQ3#1f5 zU3m-9VHNc?;34lee?t!FPOgJU79^+~G9QX?mf-R`sU=53g0jS-2eROf;8%#z4N@I7 z8K@FKGwVAP{yxJ9>g_rxT<2?j96ii4h;gJxo<|qS=kzl;KE8&;o5%$EkpZ8rP?}j! zLD2$M!&2l|<=(`FKBphuV)7GiX)#)2U`h`jq7K6VIlUuEe%nAcS3>bKN-MvgkNKr%P9VU6;8pA20)LA&;}t6OEdVj za!gsScZ`O$5$Q20%vg^K{)P$)vcOBSmlUMb>*)5mc?BO7AdmvlvQysJ9B!L~2M`hF zb2L$-oRxp`a83vj?95Fv6>+Cg8OD^9DxhzR%3bLv%=T)VX)!vi!g}4^u4=(At*`(8 z0XD}`0Tg5)F$qo?Fvv-c(`7Y;Keh^hK!2Hw3>Zg)xR%_DA6Kg{fuchOkNVAzr}ef% zPc&~)A;UDILH!0{v`7|)fSfoZUb@}|`p~+)s=94pLkJR784fC0Z8$NJ@_r`wd|bP# zslF^l-OEk;@v5iqj2Vf#?l1PC5VA3e71TNZE;wDtBo-8lcv;S{G7VYMYs-%mY!^AlR%FVB>pP~XzB^w zmv(AB|B%g1 zt$}_39_&;LlpGv$oM)yaWARO5K21t^>W7FHS_^4mc^b;vRL&Hcg)Nx3s3)<8?pkW1 ztc;al00b1c1^;Rw{@wA?~gsBXml|j zuhKj(t$$-sjF+N0g5H53euSx7Gen%EkC3T8!pb3kj zC=w4Ng9A{nV19T=>+CVgjX`rE!*2h!JL&$+cj5V~R_vsKXk;DdhLVWSEyR*fN$KgML`LFYO@$YMXiZWEX6E zb>#N&{9dfgd5e$$?-5Y+$d(pxc?lu+n|_wQ7wtIKnD!mu0tv`cKeZ8G5@AS9mN-b| zJVn=;FN759B9MX9lv`#Y!aYXA`{Kj!I0%4Z+`W_vr0;lvl%#L@2`{+gX&4Qxu%&JN zchrFXHU5ycNET!+dQ7?X=j#AJ#TI<)?CAN|KbH?cb+)u$%cwIjzh3CU-Mo@f&j4+B?)c!K_;>r^U{5mh?y&2iDd0P4P)8-AFCk}ZNuXCm-Cr&xc?3D zd51~7Fy4Y&h+YBaKL33Py2!lp#h)x9zyQBQMnDX3L$^oz*`{*LG&G@`4#x$MA+KHT zsZB$d;M*rQdYDqS2-!TkrK&|npS1FC+Vsb<7=P9&mb(98q{w(ruT&n=HB{xa#SKtO z%}1>o3vdMPzfITrCBhPA{Y{(G7ZhC0{adGL zm^3>c1NdU0>G0wvUC!qwl++DK?V`L7@8~PK4)?_-f48S(#!qPmmgP2_G+95<&;C9; zTB9IR_3Q5TG?dw=Y0g$fFGV||Lw>G#6&u_x`YaAO%sS!9{##dDs;1LjIc%eRTGxhB zG33R>Oc?U!8i-Kvya@TQbyJDWX9TCg5wc4fFQO_EVl;Pfzu#fvKvI>tp|AYuiRrc* z{3Z`Qnd?~S)TC;1tBaTG;~@2+qbG0GQz|D}J{}~L*=`qQJ#mR^Ab%pUMkbPR`oUg8 z7Z5JHI8&96-KPVvd+g$3zOEc!ai&RL(}8J+eui&!H2tgh zSL`zH2X|d=|BrSpsjft5HZKR!I+s@`S$RIG4!(OY`U}q7D5vy8Eo}BY6BDyMNE;O3|RMHYg@X zy4Uax*e9yT9J-}EF<{Y9JWtvpI^|iIWjQ4WT(tn{8aQ5AGVbbW-5q0LP={owItkPl z1b;>cRBI;K|D$iWtr+DvsI3LoXmAW&4>t#gm15%l7AC`en<&0Q%!r1H56)dTXmT{f zl1G1TW~5b*mHTOEBIg~~UcdoK=El?Ot3ILeYbMH$uBG8Uf=t8WGnS2~PDwxCx^-J^$ zA_q*O^QknAl9*=^0FmQT7|aN4*+NbT!X%@}T7aG$S#sY(RWZDvC@*9MqB^ErcoziV zwMb2><_B|9Z!stUHW^`qDs1Mhsks8twBG~?J3 z-StXPzYR$vJOqR>TDokY2W@I1$YV zpKs%2jL|eLoz#qBG~x5*k8f*r!>yh#q*eL;!=2OiN*YPKt>ncbiXPuQf zupO2E5KrJ@$h6oWv145uLIL$9D!xoz1d0{nm5RKIVF0W)NE8zPqFipop0+Ix&=Dd8 zbAN9AkP1KmY@(_KEw%Rd#g&41jb0ljDNvrXD!BuNj<89I?%Cqs^H)atWc5Oq@IX;C>pKdfM3-eNL7SFP+Jfu}t-Ak%393TeOuL|C#8bGXj9TqK<4N1qY{lO%cUX@35rW&NZL}|W^=9nA zww5o54Qc1tf3ICQwg=O5H!-wY-x<(xxU`mTRR~iwQi&=CrYQlu3E)Y}BWtlw@MTg3 zwB+9S8olutU(K#H>)){KTJ;g_ibyL<^$GvgfT071ERo>B?G#a`c(X^8SONpUAcNT@ z8}rwYHlmbC`_EXrT|T)!tZOQk3EZSV~va9~zP; z+gn#W1~5};Pbk5{7nK9zV{)JKTV$HeRj5z|()V!$Ag`Pwm8U3wkK73vRE#;UV0dhK z(SLiP;&l}rpM>&@2C3OjK9nYb(vQO?LDCcd|FCu5-)y*nzYl`Mj2N|>AU3tdEU|a& zt#;8;6t&tK35mU_nz0qNTBE2Dd(^7hwO3n3wWS}e>wE7H_uO;tzwn&rJoEj2y$0cH zyf2{0MfXX=ubW(zG{)i?`prt@+Jhm@(0p`-?|(w2j0et)g%;Z83WM9i){&I5tf=_= z8;37GPFyNctym~uf&u;7dVDz)nWm0uJn7ITC~&X_-Ahx zXD8ZH0?GHlmi}erKDCRlzfsSbek>XDB=$~~g6|I@(=Hz&dxl$mUlyz1lOcY|M$C&` ztKKWU`MAPC*u4Xf&mao_YI9ejHxbW`tKkq1>-!X0C@oakj@B7`XpRcSHK){~vE3qoz9L zJljZmL4I{XLO}XN4S1>)Uk~EytBySyZ)e(3w{zk86wP&`ay1adTIga0^b34k88_7N zn+i2k%kOgAV|Tr|;b!=Q8sR66uX5UpvKP5UuDJ67@xjj6GlgPqO%1$v@o)U?>lg{T z&qz@>k%E6DQNQ%TBs^eqfLtCDc2Bp2+^2*x0e1B+R$Bx7JTX0eq$Ga>=6G2mgVD6> zAXCB77(!_DF^QHEVzvRLDrw|0cAy8*a4Vblhk`sYYJ`{R1L?XLb7dZsF5#{X!N;CW z&J84#pTe{pD>6n9JK{kBc&#A3?4U`A(N}q(XNJZ|a_9o45q%OJvE>P>OGNAiXI^dPb&Xf0LRgV!##=9a zA)n?-X}F9pDZnqL_E7>jKp12sS!L8g8NvyMP&34z$cOghraC}rjRKL&Sx@uDwMqpH zAA_TtQQg9}HjSM6Sjj)xo+YuhB^9BKaXPv{X8^!lw~T767){faPXjVJF*7rC()cvBdcD9E%;3fOTK&%>zf1&S|aiXSyM3_37; zJ8R8hCBN?j)kkpbSw2k^m@5{MMH^gyAS68gp%Xu~FKH8VMwhsdS`KEjpRbo()14B|!H6 z?A-^BZ+Q90ydFhEe3OQ_4=dM-WaWt@Oa#xtNC|hOBc$BKT#SDwa16OYKtI?GMQD6&DO2}J?c&tXEl7D-Gk_d89_Ithdx z`3^-A>O1u>@eN-JkbrlctV$vxO7D^HBD~1o41h}KliJ2*jBT?HJKu%ODrKK2^@@P| zACEr^w%c`A{v691pqrzU*6q^Y6~NHL?aLA{(* zUS#UwPq(?=Rf7lLFpT{)8h;AT>st*efAQ0v)Fa@1Ow{|3G()1LV-0?`X!`xX?f2KO z?p8{6f3ja&sb`=12qt%5&G(wT?h-a#Wp=9GT;7yj-_}~+v0U#JTHg(J+NX6Y@><`o zSU=iLH)~!0`f;5@0q89}_Kp1WW^$~KME?&nsA?neldV=k37H9N%LCfa7mkjqYEZd4 zNtFL>0`gA9$qmm>_L6*K1>5vD>Nd&4F@W|4uxRzHKUu|mgHn4HDbfGf1t^!LQ=w)7 zTG%kdl1Uc|^ClI4euI~4stm;S(`viS$9?_jp2FA?2SfFKD%4pxkp0=M6?j!rWYrPDXpz#`q0M9NC2_+aFmE+lAfaxwU9Vka*^rBg>wxTz@zG zvpV;lJNF%F$M?6^O+4cEMD1PfH4$}E_8w5cc^5W?wvu^vlDB*J{KW-%-vU4S$gYF| zzcTL!TiyPn@|vn4a|G!r=D8ovU64ZN7O`;O$knYBnJZtp|CHq*n*Sh1?jTnC0AqE4 z^*o3RIf#!tz~vlViZ<*s3N$V(c_gs0`y%=_lCV; z3y#-x$E#ISe#Iwq|9g8XM1Jp|*MANg7wNbEkOTBWfqH6tw(unGrKH9`xbMl#|JBwP z_I%K*BT8P9O|IdUqc8>s+zLE6Bmt)!MWz-7+<<;D5M+IAe5eeFLe65|{PM}tWi~CL z%UB{)StK)A#JsF|Ain%X<>Z0MG~Co{GJ3IJSKU-s7!)1QJ}<`CT7prxYp*$reSq%X+zke(I~HBAX)n_E_Z&tji+v zBSoz81-aV+w~GYuFLxYU=Od)E{D1_+P4GmoQBK+G3sP}H1+92LE%D)v)7C%kX20}l zcgp}!ocHPboP0nnktbKjE9iolpXx=U(}$yQhBfhx{Q>}gOt~)T!`GySaPQ9Ac-FqE zr(0xpy2SP|6?QT3-zEQxo)7ahDM9?+e5O=R0DwksV81^N5=P_Le)d=a`*(x?$%8NU zGni`^){;OPmSaA(xU@vSX);AnqhDx|-v-(BD21>p-oiQ0@BpiP2i%H|n_O(j{VE)c zQ#bNvdA>xB-4I9J!;qB2lF>L8csko!>!_|+-8WP7_Da9$#{z91t|Iq1Z$3S`NOYaj!t=EZ9E zf#UpOPXO)dy~jq9S=y#dPtbAu3|Vw=N-+=6Uk%D)hT#9^XEG#G2+zRx7MUwg`2o)U zIU7@0HOPxJ>e>cdRpv;;{q(`D5Sv!7~9Iqc}d|Ht_Xg ztdW;dT%UelEO^K{2^F1`x@0)sn^Y|OAx5GB#6kO;*n>njWJcXhzB^{_`_XbC_HIq+@*oC=@SNo)xO<;Rs&_E9fpU_Kjlb2kW7DqNN2szaI1sHKR2B7uQeQ=5d&D< zMnB2Lk%dV6I!49rDv+0Y#iYseEcpd*ZUoN#!cK|f_Ns`Sc0$h`)a0)0VX4oWy}f_8jgExmgNmv2V*ZM==&DGEIT#r z?T(QtH>$k-nQb7^dbbj!F%UbeRI~g|6?yVS#W^N)=DBxiY$pW>NlF3|^@0HUF<@#a z=b{7zp-)C`Mim?nABgj3=b6w=H!H*Yvtu*b(>Dsyr56Pj2hDD;pL{2F*LnZopDIv% za`yG`hro0R>c(X1b1pbruAeLAdvq=|pQ{frOwLE^71S!W^h~f13t8182Y9Z+v#V@h zy3CpF+ReW*Xs7BHKkOhfzB04=fBdc&{w~+TxLeYDVU3bIBN+nb4G%A+_9m>?xLICZ zN*_!UbTY+#{{+o+Vl2!2zWtH?y4ZYwuE95=YJa8k$&cf2|H+?h^v5&a@w-9>V(T*R zPfcDaoFB|q2{;=6Rs8jJx$W_H?l-$u-?xS{?>y@H&8-5+`KtFo#jD^K;C$rnqifZF zSE`%3cFYg5`Rc@G?uq7AQ?fI;2_oY-f+3Z0?0~POaWK$FI4F*_`J*}41LVaJyUl?- z4<4~xr4ya%Z03v-aV2cQ2-zf29DZ4*L)>Zg=@6`O-UV-(`oGY4YklV}D%A7#vk|*8 zu9$3QfW?I-vk6R-k_oJ0s>5Y7+n399Z3`x7r-bXKqd6&sn{>Fajr(P30b>eP0dyoM zx~R~82Fl_pk90JP2U2%C37{6hOYqykP?jZcHNj2Yc-)EX%%tde_6KOzEdz$xOQGu0 zAqpL#S70^VZEk_-;{t?77@0|fQ?W_uGdsq9>!^Ef#9z1>>00g zH{k9<1yo^28!V)>wG6#WRLT;4v3eO)ncxlrrBy0X%Fn}OC>_xt>*0M^=f*5_3+*B- zx%Xa<*-T;-@scKQAhp#UtbPp|T&(r-C+3?EDxMOkr`~Tw8kpX*v&-rhpjHVQ&DhY? z70$t7_oHt*=cgXpOg?awn;})yM}X!FMuE1VzdsRL*snsZzw_%e8CJ3~X=Z%isciA5 z>hj31Jzg>TZ6ug;2KpSTN*fg&Ti&cco!1ed%VH&BN4{XSxHwZx>zSOXp1KtL9m|lg zSPF}{ngEV)9iIb{-~E5c9o5)#@B*63x58}&dwQrQis5!~uzNx-+sT=8eG!vZ9{O;W zdoyrcr8rmd;RmGpDIH+4T2=_g&EDLGSsXh4RViE==b<=T@h{wIOOzkN9=@haXu01zqkXx)!&Z=nj*1zTU?`2`TuwX`@pCQ zsx~DeDYdk+x*{5mHTf=F=LSN6sVdBPLl>7((II9`vRd z5f?GP{A~)Grgqvu6OT?wmN|s#$R5#YUM5rwwZ;YiOQOr3wWx6D@9l3 z45y`~n545fYSk!*jA-HO7!=FDL5%+|2&CueqtG-$Oio>x&P@^gCS|w=W8p)8_Hy5% zoha(P)Kad!nq%+}LXB#rpyjObH~~bdb1aO-hT%RT*2%#P3qW3E0k!&86giOY#3o0> z>3F1#A)0Td+_|gqk;KKxeXH>-ZmB9vQXrXvsbVh7D|wrc`fztZKft zj2CLL=5&SQYn}KL-w+1AJIxxt$p4aar!+=9C`Z~6BPJN^LW%M z@z%^L9^+5WuUrOHj{YK(z|O?p*o+z71=5-Fd^0%Pc=IvD*C{M(7C_BlR>ZVr;8X2r z^goEJyq4x3ORj|Dd3kId53|u^5(l(O9K}VTN_}jIJS2}lwLKPi@lFiD`blBt8<0A| z$jUg-^!?|ITfvgyYqe-FK$VEfFH^T*naDtBmdXie<1DRnT`Oqg4!u2-_iv@|V++nn z0bc~~#NZcHDrSSF=AY7V=Ap5|Uat{yUv<0LMVWrqzgAgn`4k_3>Rdpy6R-LIfoUWM zBrE1ipFKuOCb<=GDUP@{NcBjjylC0t{LwzF`cE>=Ep!#e*fFB5DwUC0cawta7&R6@ zlw^SJ4n;|-#zacxXfej?loQ5Nb;oaCWy;LhxTIW?(^l}bE(ZN$XnVF1rEi zYX&xO$hebR2kXIDL>m}_?&*ZQkQB5S%`rH&Flx;$E3WXin`W=Pf-G|9!Tp=R!53a| zh<)7?#AG+&HL^s5tNl7<(C4x_E#nZ8dhybi%dKzad`T$-w_F5O|6H@aIObu&}!hA`**dyjAVZ2XRS7BzJ`Oo=xEN!kbndwN#6*Z^Ov+Dz*ZI{A| znl&YUFyzBWXJ{vqaee~`OVh8Tl2QE}n>f)TEkuM66@qa=*N8ugWCNbq0M~gKsPJY_ z?8iuNAGB$sX24489dfo#FF+!O*#{iud5=ouISNNONMq($TgFOiWg0)uH`j2V#wux# z$ZJ?BHw#9qYKqANde*vDU3Lk-`>D1yiNVZMUEi<)tZ-u#F8f%>GAAX^pw3@OZHegP z88H1mr#6%Pw#SPH)m&#AhtT%^WrVkE$qFz1i;m|VS~VB?oYxemjkA3AaCqi&MG?dx z|0z^J{LLsA=__iN>Z1GUq`f21j61)OBC2{}bvutAu}<1=Rb~8oX!;;SoV-8U(QaEL z8A=dz6T2-~aIh?7WxqI%D7SU**1M9MwfqTt%j@=M?51Lu7*t^Vd(WCG!g@x&Y7Oik z0K?SCbg@z*IdT944_6=@he@G=CvCeVCAjnuk z&(wH=c4D$YX8HG#u^D|G`7VWW+kbQ4hLn1u@;5?qh;!h6iB=nMqlgP;&pYo^D{c zG27gjGHLdu9Ohg7Q7_n=EWB1f#R!hbS6q)LD;Ju83`{u35{mH>C^sWh*O@V zz#BC#X|@nwqE6DYs{7U|+`^WYco$cTg}{LG7b3m9UaM}&(+pOuw@sC;O_J1Ez!W?P zVw8*4KQ=7S8RoW8j-8%+jtYB)FL$kljVeBlgNb+%M69zJ7WV})`Qw|^NZuLR^wU~! zX4$c*_i@t{1j1gvx^&w;7!Pj;zGO;0^VdVp_C*)Cy(0E85h?X1}M_Y@R1-SE8%f|9s5< zE8rk;5O&78T1e~;D2a&CHbE^KG>)%3_A!cDs|JGP&FJDu$WJ>6a`M>u?nTu@1u2FKy%(q#ss~L z4wf6NyCgD~YbX>{=Np%QQ6}X*F)F$ux&06&+?e87tKQ z^d1Vklp*#oLaceWP@<_}AN(wGwV8}>-l_|JY0muF;n@=A@%n->mMQOKP{Ml9HSUZ5nEPdTdWjYd0W5IBepu^>kPuJF4V8B`{J7I zT%60~I$xMflh7OiKTlCAZq-lt+UCA-Lml)9)syNF4wR)vj3;PZuH4kPsnw}S#aSMp zk=J}@{`H&CCFoZpt!CW7P|RHDmx!nCf!{PcM29?hh}$Gltmu0OXRf=81>?m2+y3|G zQ?#*?zyZtMY&DN4)NYP$qHG3xk)qZ~5eD5Uzo^QEzR<1MDZ_C^)8cq>ObbAbPIksy(IFS96J-eeJB*)${P1 zYZ;bP(b;~wZ=}n8X-QMa1)FUFstBEB9BS+W-$ZERQ3X&=G~)@k<~!Gq#w8@7z3NXp zp~+4k(8_l}ug%YxwoplUrUQmsFN>ixF(N?=wUO9}u$+?VzWS4!a_}fzkcx4Gm~&*9 zdxWCL?Sw7BZcx(=)6A1EG>I+ zov21yV=U@Z79y1?Ny<-y$_%I8TjI*4ZT1EwY#UCV4C#x>zD98tT5TQ;@((_F=J}H$ zn~KuR7-zg8OjIJqmK_DAgXt)bIn}TFzA%jlQpa@{G`0Svw^|!{uYB#8Q!VL2Q`hO@ z`F`vLN+0Yf`}KQ_bcV~|f4wA}XL?I=+LLk~%thAjoBSpbNOJ4#h@`O3Jay5-~5PbvQo5meRB4O`J@yZ z`Y*TvW!byH2qtlp$Y3ruYCH3vDlReXla>Zo(Fjg|uii1`1;Y}cxM+8R5$NWqEsi#n zeY|d!?;@@q&Kbz2)r|)#Rr3%@;%QOuZA5VVrJ^=BaPrGBX2x{{s{1 z?BpybT(+q0bv{6Gdj8b2Cph5WsGJ}JI1>BjUKoRZgyK-W=8E-mefg`la3EtBqY^xH z%TgcwK|JgWZ`b*{IX8&LCGXWsQ z-FZH0YWV05<=teaY4(TAsr-l%Z4cgHl>1NDHsmSt%>8;>Ip9-km&60@P;kJDFBiVv zjSWp8;*2A{lc_k4S~KflPdo1n*8eJpKJ7CYC@g}3>v9=;q?xP{vj$RslGeCNR;lfb zxOIHU)!8T@Q|nMKSG$_Xm%gNHLgyw^MK^d6FPZs&V365?mRTJ!egSCZC-mND*=pp4 z_jpRmX2z8%i_Zr6KsiT$QID7@qV6lk6t?;8+*{~6GCDXknHLc6=rmC4|8(VT;UM|( zWRSf8T=7+tD@#MMx3%Vri56WyrV1rgK+Ld%em*&O;WOuov}$UF0TdP856fDp^mA8< z-dg`{FmRjESYks-Sb`vCvL(jzS`{=OgE%sz)UPj_c}xO-zcGCHtMNSI4)*^wpQ-BMCuz%@Kv^t6S-dVrtR%3fp5OL} z2GUP=((kzVuomzqw2a^B)nAz1#zbjAoF-J3|6`@HgfB#hGAWbbZp5Tssm{NFR>)}X zw3;ENXY0JSXz9W2TSI7GtsVKE-FvEg_pf{Swz~J8^z1+XH%(*VVzI;>w?{5&mZb1{~mjdNQ!GAm_#Yf6)SSiYwv}AazlTQyIQVN zC^>h%n<{I$!FZOOWdsYEBh>tTMZ>1H!GMI&a{?$C_$}J~H#22@7UuPIb&_E?W|C=! zbN^(R3XOUklR}2OUZ#L)rA0@Ehe7WD>vwJ0E!MdqSJ_ny2$~eSrKP0jH6^^nLdWN$ z&8p}Mr2w^^LXQQn`AS^w_0cIY2bvVB0LF&&1ab8+Ny^Owh4IF+)i#c9V&5!7FSM3z zlAT#O&);ProD=)xp7;$@0pFAoRh0OfO9+@<2bYI?*ZpakcoZ>YDU9+iiBabpq z3lmpQP~kAqMG#0l^4-o?(W@x{Rnu|gii5^=& z-S;Ak6&Q85=kadp8jCWX4ioZf8>}cN!^0ifEu7 zI1%`QkfsQP3+09`pPKz2zbgr)9wNuc8cZLh16T~28}(|fRrxjMpA1KqRL^yvQ?-D4 zujfxv;Qa2E8p#>q(O+i&kKdI|^iGP~lP@g_WWnZM?T8#-xzd%AYSIMc@rw77cec^5 zx7e%_jRX}tPJD_l>P`0IjoSgiTK>@cnh?vZ z_m9bD6U*kexS0VumRiT%Zdlw(l$^5JPF6VnAHOS|?M}L$_|i_Msj;m`dNfVmR<=uu z?cNLThNZoi0aLd7g<;1_it?6ZljVroD5)kPpyslJC{-V-H{(2yP=WmAoZ?X2G?o7u z$*ni|MW<_Y1ds;H?*9)%9=Db+Kir8G8+?obv{Zg25M-K}3eA$UK>+FOI;NpR{>oOt#&EYqvIo=tkScd9p9@Li9nsjd0}}o)X7BNz z{G?H{-$;0SmNX7W%G$ICOU0Sgb#13IasbC^@t^P$?!vK<*9vr4va^Z%$K+8OqJ2~z z5M!^BUXB?ra)60$wiiJ#1340x*c1RQj{G5(O?2V)@t*(e+S&_Ps|$vm|7++_D`ki1)*BY8h==2;!xfP920hi

9fk*J|UgY}4gUL0*WZha_r;0xtInA*!xl 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

P9)LZq=z%{G3;_4Xpu(l7Vp5#=Cd>yh> zDYHK_TtFzw)Lu@Qd}d(rPeYY4ZKSa5uaQ z&LNE%hPjBU2pV#DZ|^)0co@Y{9Jwr3OsF0?a}Uz=Jbd;s6JM3G^PLAo zjWgIke3FkNMt;`Z!qil5DpOb+d@oHQRGNH#5N<9YMKBpcXnjpQ1}9q{E=vFf2z0C` zND%(&EH_x!K3pLOKEU`UPPr%kL>)Uc7%sm!OmFU@ppK?2eXV?Ej*t(jOeqQlA<-(j zpcs3AAPQAsEALu8YDo@DqHyEmZN|e_!CDB1k$Nqe z2FEZpZx{&HahFcPk`04aD0;@QT!-sSO+Tg?Ib4!1T55Trq5lJdvQOEu=#z}>`ZdB8 zHe7%D*!s@iVAH~RQo<0HW^Ocf|EoEI`AjF#m;m&N`6Udhz@c&E$x-C7)BD}XOfoFf zHO#;c2($Bs#ffHFwrcP1q1_(xR;SgZF15L2)nTRsYX$kjnlPAO2k>~#lbe5Pt zqqi&ZbpoGM`1jSU>eaqRs*1k-S`tOsO?R^gpz>9j>If@XXhsP|p|D$=?jEp<&{MCj zGBPav+9z@Uo*Da{l1X$SVQtb?bWV+FKvhK0U2l)fH`75C+J#R+o%;QRaUGZr?x_;D zk)+l?6|-=c)F~5dD&@D~kg{?_e2bF$Jb0`Kb@wzR;n6OgLW%0D7*Y+DO)?(xw#0R3 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 &Ke+)7N(?_RjyUKm2rQ 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 P4fzAlma&!*0i5|i-%5wV literal 0 HcmV?d00001 diff --git a/packages/quicktype-vscode/media/icon.png b/packages/quicktype-vscode/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..942c8f4ecaa896bae7c74e4d223403528177487e GIT binary patch literal 14084 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 literal 0 HcmV?d00001 diff --git a/packages/quicktype-vscode/package.json b/packages/quicktype-vscode/package.json new file mode 100644 index 000000000..8178a8353 --- /dev/null +++ b/packages/quicktype-vscode/package.json @@ -0,0 +1,163 @@ +{ + "name": "quicktype", + "displayName": "Paste JSON as Code", + "description": "Copy JSON, paste as Go, TypeScript, C#, C++ and more.", + "version": "23.0.122", + "publisher": "quicktype", + "icon": "media/icon.png", + "galleryBanner": { + "color": "#00212b", + "theme": "dark" + }, + "homepage": "https://quicktype.io", + "author": { + "name": "quicktype.io", + "email": "hello@quicktype.io" + }, + "bugs": { + "url": "https://github.com/quicktype/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/glideapps/quicktype" + }, + "engines": { + "vscode": "^1.87.0" + }, + "categories": [ + "Other" + ], + "keywords": [ + "json", + "converter" + ], + "markdown": "github", + "main": "dist/extension.js", + "vsce": { + "dependencies": false + }, + "contributes": { + "configuration": { + "type": "object", + "title": "quicktype", + "properties": { + "quicktype.justTypes": { + "type": "boolean", + "default": true, + "description": "Produce only types; no (de-)serialization code" + }, + "quicktype.inferMaps": { + "type": "boolean", + "default": true, + "description": "Infer maps when object keys look like map keys." + }, + "quicktype.inferEnums": { + "type": "boolean", + "default": true, + "description": "Infer enums when there aren't many different string values." + }, + "quicktype.inferDateTimes": { + "type": "boolean", + "default": true, + "description": "Use date-time types for strings that look like date-times." + }, + "quicktype.inferUuids": { + "type": "boolean", + "default": true, + "description": "Use UUID types for strings that look like UUIDs." + }, + "quicktype.inferIntegerStrings": { + "type": "boolean", + "default": true, + "description": "Convert stringified integers into integers, and back." + }, + "quicktype.inferBooleanStrings": { + "type": "boolean", + "default": true, + "description": "Convert stringified booleans into booleans, and back." + } + } + }, + "commands": [ + { + "command": "quicktype.pasteJSONAsTypes", + "title": "Paste JSON as Types" + }, + { + "command": "quicktype.pasteJSONAsTypesAndSerialization", + "title": "Paste JSON as Code" + }, + { + "command": "quicktype.pasteJSONSchemaAsTypes", + "title": "Paste JSON Schema as Types" + }, + { + "command": "quicktype.pasteJSONSchemaAsTypesAndSerialization", + "title": "Paste JSON Schema as Code" + }, + { + "command": "quicktype.pasteTypeScriptAsTypesAndSerialization", + "title": "Paste TypeScript as Code" + }, + { + "command": "quicktype.openForJSON", + "title": "Open quicktype for JSON" + }, + { + "command": "quicktype.openForJSONSchema", + "title": "Open quicktype for JSON Schema" + }, + { + "command": "quicktype.openForTypeScript", + "title": "Open quicktype for TypeScript" + }, + { + "command": "quicktype.changeTargetLanguage", + "title": "Set quicktype target language" + } + ], + "keybindings": [ + { + "command": "quicktype.pasteJSONAsTypesAndSerialization", + "key": "ctrl+shift+V", + "mac": "cmd+shift+V", + "when": "editorTextFocus && editorLangId != 'markdown'" + }, + { + "command": "quicktype.pasteJSONAsTypes", + "key": "ctrl+shift+alt+V", + "mac": "cmd+shift+alt+V", + "when": "editorTextFocus" + } + ] + }, + "scripts": { + "pub": "vsce publish -p $VSCE_TOKEN", + "package": "vsce package", + "build": "tsc -p ./", + "watch": "tsc -watch -p ./", + "test": "npm run build && node ./node_modules/vscode/bin/test", + "vscode:prepublish": "npm run esbuild-base -- --minify", + "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=dist/extension.js --external:vscode --format=cjs --platform=node", + "esbuild": "npm run esbuild-base -- --sourcemap", + "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch" + }, + "devDependencies": { + "@types/mocha": "^10.0.6", + "@types/node": "18.x", + "@types/node-persist": "^3.1.8", + "@types/readable-stream": "^4.0.10", + "@types/vscode": "^1.87.0", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", + "@vscode/test-cli": "^0.0.6", + "@vscode/test-electron": "^2.3.9", + "@vscode/vsce": "^2.25.0", + "eslint": "^8.56.0", + "typescript": "^5.3.3", + "node-persist": "^4.0.1", + "quicktype-core": "file:../quicktype-core", + "quicktype-typescript-input": "file:../quicktype-typescript-input", + "unicode-properties": "github:quicktype/unicode-properties#dist" + } +} diff --git a/packages/quicktype-vscode/quicktype-23.0.122.vsix b/packages/quicktype-vscode/quicktype-23.0.122.vsix new file mode 100644 index 0000000000000000000000000000000000000000..fe9193ec17d06fb39a6e255480091d5a55975dd4 GIT binary patch literal 4169917 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

rT6(0STKN<$j2K-0C(uOjWGG(G0_AdwG#g?>5 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

t@G(_7gE@SZ3=s6b(#l#aAbkLk=9&oIgu-OYu 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 j(;pzS02oBx#vg~-#}F&H3X`Mb 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�A3B;1WsBz=5f|5$W+5d(gv2+!) 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 @4Y!Hv4wX}jHF)Z0&MK?kM5}Ih09%uy&MX$ zokDDH{n9GzccaKB?fXTJ?Y^kb#dPZYsC%>J%$2(EqV4vktv7AGQQgspj5bA7XAT=die;)9 zlfzi%QDeS?x`mv*7Q$}wM(F9LUen~8Bitk}PYotUm&#O8N&`#IGq?W)J5DzfEhzvHHJCaIbewrMQ!ru;a^@Rj7p)6QKG zHJOoOJ6gGOpJQZQ4fu0h6`2o&@qwYJ?*>} zW6pr&Oo^S@B}{G_BXbhW&HM$uYzVd2v^p|^$g2vo-;lD~g(b(dzM0`(6$#Yr{N=;x6r>OMB>qio3LjF72U9dni1f z8oA;w`JppR?@}GQRENS3)Pf&>!Wk^oyEKMQv$#uU=+ufkBlS+LxKk_cG8+oj_Bub# zE6cuqQI9^a-x3*JVndhM(CHUn;3rEKk33FOA3cAFpV%m6W$oK*7pQCU8P4Cef$kMnq`IqgFi>Oc=e z$Fw2goZXlob*c=BQ63Dd^M#x-AIo}*VI9xnJBPJNbUR*gevhr3{4r~MoQ8;~cI-9P z+}EkWqyNogCo?50=1k~YkxN#Q_m#Hhm%~E$yUDleB5ZV`d6WwV`9DAZ>5e z*LvLVhB+|JkY;pbDysi5FwBjrrDFrokXdJ@Cyg+%tD2U|_&7ex1v90eCf%OZVSlBe zUfKm+r&g#H8XLQ@Q7%lE1yiWi3U~B&Q%t)ImoCGlP=h!A$#Cg1TnaD2t1gA5cSBzP zH-QW3DTRuEoc5#H9}llk^=5KXRXQc>E@7ohSm_d03fs9B{QK+v4lQlFMQz{yETH;! z<#Y8eXwh{~UH8=Y{r+IBO@qtCx6g%hT~EGemg|&4I9|nACPQ%gk4$T#nRLrnbUB(* zM~+>7Q$+0OZ&KJHZNn!gtoD`hx9QJ6GnJmC^P76pa`buCSdL%%G*vuh%n)Qnr!YSU zU$Q3jQL`dfe)MfQGc)=Wt2i2CHDS;2Xky7Fb3CUE((&5U3O-|YDrB%^yyr}jTc`ew zkI5Ok&n5W~OD=Er@Dd3=a_2ym}{S@Pvg@zk}O}( z_cN8l&@6w)UF0Oxzl?`;!o~;dVMqASYO>nJmxmTqx`+w<#VoS83An?4kN7m9-& zYp%<`T$pCp^E}QX5?hOonQG!LjN#M%n(@zQ+vE&d?95!Ls})}I2;K6e&{ttQjd*@1 zp5KY*7tT4CFVGrL`d*j5*QM_jYNWQ-(o{cf{ieMR-A>=>+JvhY~Leo_om&C zwEK}pMsoX|(0(Vh-wEw^Li?T2exZ6iw%pWXcAt82$$VWhUzf($&lQHbzcjusjjzzL zhm7l(59|J9jj}m=ZGB~a9bu;=^_Xd5ncsV8mf_b)_IDY6U2b2YgMOFTQJ2owrSo;^ zd|f)2L7w<^Igj_W+&*6QV&W1{uUeAD znA|7Q&dcv;IQ909=CIoI`b_x~!jjSi>S^4`>{TYan~lh^rPx2cF? z#ygdkWM(n-8=b%gVu~hASII$s-r~GXweQDNy5hhwIocGy7wp`WZ;;dI z0;#iF(v0o?{Zf;trgXEh#`C6Hja&b>%l~|yf8PQ(T?^{oa34lTrVND|sMX)F*;`Ak zYpQA~)g^d#shwSFXP3NLcuwvwrG_q%v#`Ng@&k3-I?G{)YxJ8=H4KZR-|W6&IxkbR zP+b;MLx;w&p^rHb*x(wLm24Y2!-hWQpd(j-rEyMyNbI9!s^^;Jjwu%Sp8G=PW-+r{ zrX9CehpkwR>Qwv--*=@Lq?m^l{x(7 zWUNm6+it&(M(kW|#k4w~(FYb?->F_XJ4Hqf6lJ!>+&7-9pD2(}po^-2SOG3sO*@H-tBb0d1J} zkMB7{X!pmdx0B>s^Rb)oISgN1JUSPTF3Gp>xSEgd@?#YH*wy-oZGIke$~NE!n*QAC z<(-K~XW~()xYYprj>64i(k8EQO2~Bx|JC{85p&0BopaFRjK9+@%EoaRTbU26 z^myqg1aY$(`>YC%PIpW@rS_d`fVoBawF@*q4C4_U>_J0Xu76PQsQJ!OPe1M@B`oD> zsO;EjEN)eoZCWnahWIW%-OXozoUvwm$F+UTC?3;gR+bLh=^(&6NV1NZnE$Zsrx+a1 zx7E(HM9`Itna?&C_NV#N-!FxW&IG1VQ?;gK0#kU~-*u_vo!d*H)@U33BkaTOrGJ)- zT2_DdYgGN*u5I<_@wvBo_UnuK+`_5d)V zYafkkE^|Icw@=RUZqexW5t{s%x_?a9KSDMiW6H;*{bP^ob9^o-u`$q}x@?siDJ+7X z_H(?DW}MpWoO8m>X%Z<>t&<4rKN-mLYp0S@P3*XfsW<;T8UJ3m-5A2v`JR36Bw!yC z$uUJ7w&~ioXlN3rV$~3)=%=Y@o6b`oQ{AIK%Gv*ar_R^$>T1>hGMb1V9UpN`2SgM2 z(!F20jo*yL_#CHX{FoWHma9hd*U^!T=k&TYiJQ(JwyW!m$EPzlET7MrLwr2vX?HP> zO@!qXd6(__w5h?pVwv*&+muK;#=D%RhTHK;)e`TRPR>Tz5R@;^TXPm z%NY7KrW-?-)3@t*J0j#s(K*&r&D8?m9@>v>%y;Hx`)FtiEWd~LAc3qurUJ#^^Zv-} zlzz+&2o)4+b;v)Qg$lp-r?TF5ll`+j{>|Up{b3o)KGtVEfjUp1LM?tSeCA~SJG)Bf z{`UJLHHv+#LO!;$KDM(yzjI2O_c!{x$L5dStdBA7V~krxZq~V2w`yCBaqDA7?QH!U z*H(dt)n?afn`<@SS#5T$2D#O+u^Q@DG3)g?XIPFspSN?p<{ZkgGeYS5SZ6x2_}lL3 zvLQ>tI5p3jp^Mef^${k~`F?e&lKsN2=kwS!OT$LBbc>%58>FOfvnS20bMA2tbDziD zoG|RoX#2TaJO{Qp{8-?vM~kS*{!!bUn@>xEW%`in^u_mcl}C$v(#-3t`OdhU;c!|+ z^htct`pmdFJ=Qxi7#LJ$Li6)E=T(O7rf)OLe%j7KjvxG<`|oW=uSfh&ub45DVTFZ+ z9M%~jOj|_9UFTCT%N3w+Qb_QkJ<4)J(;v9g`Iu}9Ugz|chmb}t zvIO%8GUXhkEk}n?{9qHke5b#+8P`naO#PD_<-}rcjZD9E*8W?^Z1NXVwo?P?)IbWg zG(#XAkWL4rP^&W+rUugKfD~Ri^EF5)XcbTNqfn7$u68xvm|N#6vou`ogYwHNbRiat zYrB&HJ9n(U;ykVfOCDLBM^@*K)oF!vzF3`NNMGj~U&Lpfix5l1)y~(N_ZADOkiy^j zT&}KwU`S_|Rp?M#UIarr!H{m6S?GxvNttPNn|@upFLXj%g>1As8?C+~L9o#(RMNf} zjgih+tMC#z>+1~B*!ZF}5@gS6_H#7Rw41Y^pO1lP%-Pa0I54YNeskW&eZo#;tkaKz zugpwX-(*+6P#E^PNIj-1^_gg#^n5mpp_BYOEmh_7cMDA#2{m8*89)R*glm==Hc2~E z(r`Be)ZFEvLp0`4?l z%XjLY%Y}Z(a8FJZwClr*ts&I@+I-p{VI`XiKRZwlvv3v>Ne3e2`o;I$b)FQ)S%Y`< znvsIA^nZC5M@bZ^WMnc3>*U;xn(C6`5sgJ{k`Sm#hq<-xVy5ddnQ1mT2dnoX%oV4? zq9<>!F{f+DL1xszZz}g{k;#{>^JVLN**aggZV#>#uPM}E_t_14GW$JFuEyfkSZu$e zi)M9BZJkqF=hRl{OR#skT6V5>P*;1WG;cc1o6fwg)4VCXr`2<(&6=i@x#?C^-Gr_1 zj-YUGD;)3x#q^BG+nqnsXV^@9qVVh*ZyNXZys3lR>(4QEFd4TM{z-S;-uGf#6mWbv zx=dlCeX7csKYh(Lee=U?ewUr_?`6o=4GL*#sT)(dd*?m52=>|+6*qPgSSbSkF>`|)JHC&SSv zWsh$P?LUN+PEzEh~hb6BVEk0vqgrDF2K^xAKm zv6R09`#mQ63QIe%murn=*H5EdtPlhMl8krCbE`3tl6m5tzE_>7Yx8+h&t3SU- zj?4VJ$KB43WZxOBxXJIEXR_s;M9Dv|Z*!Vr2-^%^WQY3PS|l}8Xt&$2wTapYi+AEf zg^v2n@*DI~c`)RN3h#b_0#Tpddh{5QdT&fE?AHecWa=WFYq)N0cMLjU`WX_+buD(ERTD$b$+@>d`W2-#`IXY?PBq3F+ zHyaB6cb)vTj$tt^RgQsRd}ka=m)=cow#hHGf%5cyK7@djZ|(G2JN`zv$=NSGrcJ>M z(Z^i(M~wGj?%EhT;iEOin(aZ%?AhkC8iuE%hK8cF&&~Uv0oVFs221%urrswhiFI@M zoTdtGdh8ypc1%sToj}VjFtgd*+21zHY|q&&%l9s?)LRbgT+BY7xNA5JtzU@Xl1&ylN6v-6ldO zQB`Ot_})94+xJiR{ksXZG^q+5{<|G=`~J8bd;fmtN9@nr>#UnR6~5sD12&j&zz^Ku z4v$OQ-&f2dNj(fS(&Vt!e#fIolge@K5*j`k&GqRMx1h4(JT<}1WMc1F!B68M%_qIu3TbRe=^s0GK1KD)~ za|UZpn`T*QI^1GqCR@ByMuL zs0d!S{+&T>Vd!a_^POGLT%|lL&pj~?na^V=t$TUs;*P;ss(zA;O1qpj&wSeTo(qfJ z9i0Qoom#UW2|sZ*OgxkM|98VZq%KO8nrRU@ z6TUv80Fxg5{!9+NfXfe0GDHWaS(E9+%NE`=K*}lgeY(+1?xH%UK$!bQN6R6mZ&+)F zyJS9)Sh8IxF1X+=-T)pc~i~cps-tF!nTb%7~LxiISk?&;^ z;QjrW+|T1aY!waLu*+1{(iS??-fjw6pO~jIJP&N8cC_Dt-!eMe$s}eMZPLp(Q-?{U z9Lm`Bw}_dB<7~yciFv($Az-ABj~$5bOm;ll#SouaY?;<@KG{l`Ka=GDnaKjyv0qzn z$8s4=%aUUIP_MCg?u14Jdq`5tH&dnGMgWp+tb|(GxvQm zyCx^M+bTM~yzkt)dfD2YtO~mc4?QnVL`Yz7`lB%oW5rT}>_sP$AG2M5NjFK?Yv&du zzXQpmK?tLZ7bX60Jm+*|n~4CssoPvkY<3?^q?m0k(_s5|Qrhoat^HuswAsM!Y$9p} zg_p)^|1PgTf97QgyfD+O&(Ipg&|#K7#8E=pSoKT>Om^;!Z{jzj^=4HwHvdE;f9mL7 z2FaYA0Md0|Cizi_aGLy@H%%#@ZQ6y!+^_AL_|XmWXH2>y?S*ssuoq}oGP+mzn)3Fi zz&Og$ZkuGxDDcx7wr(0ER>V9|GMs~|2OQ~X~SkeY1TfQdQF zUOP(9v{u#iiFvfu9P>T*&ZoW(jmSyr>@y2P7cFb88lRo)net?oJ?EPro$6fSj^o`8 zTE}rYa{lAa@%kP_&Z*|mzig`KEYWUyCmvY%J&(Fur`G zPkoAEc5+^(08`Gdh5s=Lp`bFi&;wk4``Om-oT^{U?NDtFnVEBQr)JoxA$4kog_mPi zXV%<3;6erM>f4a%=I@=L;3ok3`$Og-LeeQC_Lwoxx$ZspQ;rtg=5olrvWKgF z*J9}_ZZ7SKzhE+j9%1P+WkerS7g@5=l#z|&P3IHUd=UnCm=Zo_k2P20pE+3)g~~~s zJo*I@#6{*v(w!U@Hcd9-q8F_7k@%TK)WZb!F*BB@_?%oz(ZQU1B8ceKXUiWEDGcMx z6gNF%X_CVxW0!RO1VsTAN4ce7|eqfqvCiR?{e5AXfiJ2d5p2S8v&-f;A=`t z%qi>7BIbvPG)eWFWw7|!bPM;Db`H;jnN-+78wl7zVPetiw>fUi1^h5R%3RX)x>J%^0&&oksRpQI_%j8(~s{j4+2^^ZHnin3;*CT3S2->(}{`|l*ZYL|9r z7=Rbv3CVM#^Jl&Bn?cye>{LZ<9)|75WbJ&Q>BVCPC^34E4lOx+rx;4oDoQN=w9d(y zwZQE=xqT<)&X^k{?->g7v-sx&ZCHX{GWyQPq*pDf`Twapw_Qz^YGk zhyZP*%sN~k@c`JeP_OQu8!imU283k!-HH50RsNfcj`gpab*?-_MvNFEv1h`w!qHq* z-<$N-v_F?66OID7fv^nAQOssbuFu1H{P43ltHxY~bsAkbR=^cU z@?b?vagaa;6et0@aModl_H8C`>0tQ7bz+4gA6qUSf%5`f=g@RQB*lm&A#i0-QX9O0f(B~VbsDTCowbTU#T+=v!YpOS8^Sw&Ib1iVpn0fabhsA_0tU9OsrEFi@g zY8>E`fy_5bvC63$5Z3fCB4->XmxH!5oFeyRg<+?$iUgpQi?H(~N$LT}r?OVk_oB%# z=o>U*6&Jz5_gMipd=a0>1f~n(4XlF8{gm+je2caWad?9?)*y{F02#KZ7FLDfcFv~f zw0Ny0oEEPU!sYAJvKwu>DcQXTLeS)+G!v>!Ls;ekYhQwAu}pHbbjDtX}o| z>fSzzZo3iLH<(~e1;NO)8#3*NOncZ#+iEM|{dIJNmDHg>BO)yz%iv)(JymhG0`+O^4b|r!z>udVdRTC?qedkPP{OREb3g0`{YjxwOJXsgp0J~pgwkk48AJvE5h4C)RrKJpll#BvPlmV zmm5OB3?iqj5|R|P4Y)@XBP+4HDj6);_hLB!bc_XU8Z)db2@2M}N}b@4OH2^R`PMMh zW~Vr17iH5<%$v+gk)SxxS!lP*0*+g{wI^%`3BQF{a$fOXnwBI$8xTcv)I75=I>&`y zfp`$lm{?wBgyjwHYhR?0!My*(8*%tA((LvqPLDUUR}#{U3)C6Jm`I-_l6gF0^-NM@ zG|8aJGD^oTIvS}htA3VgvQX+?H^qtxaCCcCi+T3pb7IU5IBr;)9uwb6aBJl~tQSr1 z`n3H!&&Et3WMvB6nD*ec)_xm943xkIJ#bidnX>3c{itoK3>29PnShNf3;e>iX|`gb zgX`K`Ejy0fw*b)D)EO9+qV2>UE?RW zz?u`r>#*zyZN*kTI|8oRBrZfo_X(h~2ue?YO;fpoyDX8Md1WEcD3B`<1QlDkG9Dw` zYemFmVCevd7x9fBc+OyuGV}!nU~Y`;06n|r52E_?O)47-0h$av-cYuw+fx`tTcQFc zDR)E#q=*=KQ_+D&OQR4l{VQBD zuBhnx69%IEiiJ7UNp{M|zF7QLIdbFKDgQTgEbYudRL9dfQ&WPXp@1;SA~-85)+MM% zqd z1gVM5g1{CMji%rZf^>NkDwbS71TG0(A={O^$6qALWr?hPMIx(`Jc7Wg6qO+0K}rr# z9L0dky;Duuo3w zEpjtZcDAe3UtC1^+)(zKxOsMlAIP@Da&bKGhbafoTQy;j_nIoqs7Nz7b;5FnldGKE zxE9e2S4?+dIhH|-Or!}|PMkF?M=^{6>@b*oO~4Kz@lG&lo9dz{m?T9X%W!JNaBomF zs$G%nQ;U6E=CLJQej>r0u0>c5ho_J+@decHNwYZUPDcJqMWG#P5UR9`sfHWfsQq~8jOQwvP zwnh0V!jqS>1Z4CIBKOJ<5_fVSRfe;WFL4Ab=1nrm6_CT_U&wqVb!^;xnE#wycsZCD z(KO7kej9E}A!uXJTV!-fojT5PZO=epb0E0X_Gt6>Tng{Za67>)%F)BJBmO+pPDaev zNM;(u&<14MNCp^X>Lw15w9Z9yV&+S${@AhC{Nwf(kyzS4hY%)DJYHfBO#3zWBgz2X zPFR1Q?(O3#z1U()v*y(xgEq*Z!(Lb(3xXXMePPqwT`V4j9f>ZeZXyw5NZ{NOA5<%E z=%EdOb@;Pm^rt%4i7T4`x(qlmCyh@7?_RW#o%oVID@YTu2eVGaE2*2XEdUNSQuTDD zx`^?V?fbZ&@H)p)F3K8Kgiw|m3h?zN{koFySq~MO(RnG(Prw=gHx!E3a_KZz;?S~l?nhVCXSw|&90XU4_xsvJrTiVrI=|)RC;G5wlcL?nesimJNGPkUDyl}yD}HZ z8DtjJyC%A58jizo?O9Tp1f@4(05`rxlBg(7plaGzz6FrrY&1P|Qxhtgc|V@D_*?Q8 zt>~Q15N92BaRaVo>47ZLJefX|-LqrBhM1Ti6aG1M^9F-fSlThZdKw~mPv|%iKxY~- zrU4@s5td8Q4ib|kWgG@d)gZPt0SHJY8WWEZ1rEzmhrS}m5)Wl?49lG`Sth<#VzNx{ z+Q(;SK5f1WW=uHE4Tsfev<9>Jv&*Fwns($G_oP^l-~5#^jn%0^XKv7$Cm<_@G;M)3 zEkjeCq&u3Z-zTnISc&CE;#PymCe2##a|X13(FAUSR8cPl25yt=G%3%EVggbVIZI^i zsWb#l2q*^poS|7!Ak@o9LT6$mbtNvVl7ME#oL;{F$h8PM0RM@pSa^>?(Cl znz%T25z3I2JebHtG44T@aTUN{L^*h{@OH*}LD4;+0~Ig`V}`~R(BHW!$}YMRY6mGl z$zZy(@R3=0U1D&nXl2NdnOLDH(#^#9H(}3td)HH&{qwC?i&pe<@W)S(H;WqDXdnz3 zmIal?d509=AjLNZT!VzkpvDh-U^x$I=1fp5zWcn$HW!k4pTRij?u{x$)Axk*J}hE_ zy5+ZX!D%0stHbsq97Ps6E^}p`LV!jaH9@D~x)1B~b_lz}Z*TD1o2vJzp9sqts}M=N z5ke9oyRRZnfkR;vfd;8fc!M*N!r1|yvUD%NObaPt>(t^LyQ-xChC-SM+MuW;Gz*?R z2CP{2j-!f70T>pQoY}=7dC?uJd?+QA$6sCSNDxDcW&}pH7>rmF-XKVTkt@UitAzs- z$OJeF-0c~L`wU0AFDm*R1789U7Du{r2%iamUf0_0N&+Pg_H55s^C$ngk&I@ zT3~!AaGe)1R^PZwa7sJf-<4WWAus7QQ-z>uF;0Skp`bS0s0ToR#C8_)?h!Hi`N!;f zOy-%nQjmW1spJD@pR5h>`<$CWPiCfX@eE|LG#NmAW)%r}jpd<2Ca*M;QqEHW(DJc; ze$F*BDhFY==RRkDI~8~>^L*#$eh9b2*JT1Mq>OKnLC0wg z0&QtDIgq%dAoqtaO7&cXU??q6TC=G>P>kDfhrsMg3BMFx2^9hGGEM-ItvQYJvDi8sZ_4F1uKn>s_GwiuB z8R!m~_EyE>Stk+>Be`j)FFLMW5?Jk|v;*i)rC>b6a*$1O->jivXE92T4aHkm3Nevb z>jWfVuXnL7NR$Ayr#JC83Np_a*97qZ%u*;@q`Vjt$_TQw9)A9u{e&Q$in}ulJiQs ziHAL~oDvrdQ3@0BRT;?6SDlJX1ykq+I_VO!3qKUef}#}`!bn9lHuz!L$*3&qEWi&d z;SoqPOoefUY#w!OSydoSDlVK&8G~a}rvoyMe?tMeJ*=e+zB{G7yH-^YV;?XNm>RQ6 zpqUIzHEzmU&?MkJ&&Yb3$b?RD%|rG8r+gvC7GpAZdkVUZpN@|Ox3CMue~L1NDZDq; zM3L!botu>#tcpR8t3dJ;&2=igR5_DKkA8P}!oYBPuBKk{Ki!R4>V!C~Hh85^QIz`sn*m zdRA6V;DubQ9SGjnMvMYRze2=3R%;tk2-XR>u#0LZX~{0QF3#L4kUU`I2EIVtb2qpq zs*YlvGsb~K#WUpm8TK<_)pCIm;#(A$l^vXgff0zOR_ubZf`y_W_yG^0V-8hoDVsuE z0>K$XRDI~+4z!?L-qEvMOex9(ovb0r>ypySTHhBHAnd|~Dvneb*$5F+CF(434rPg< zbs+d$sWuBY;{?>KTq`&(h~iA~959asnm01uWx)}L(k8b=C7Hl!5@g;h06 zR(ceAo1kkIAHAwJhcI0wo>fT-)z45`8A>a8ph_O7`gH7Td;OJIRgJcKD;r9^E}{X3 zrb`jOjcBH*AS}Q<6R5e^e6pTrsiUYB&M0zXgbDu5tbOO`P!vxp9Nx)-6dFTAFUB_Gi%mh0sai>HhL4*^tlSy*J^ zI~7T)fyOI{q8R*}u}ERY7p9RnjQ1J$1{Rc}yX_Ho{P{h5I@2;`ghu))EX}gfESa1u zQBs6c4B-?*IK`;VH|qVv(gm2VD-ly9R167~uyluGoz0u(R++Rb>x_C#ctJhWZ0Ueb zE0c013R;O`RB^R1HCLu)6jw}*pYXe(n_(2)8U^P@nZHpA9QJ+~T7G`d-YljNCTG+# zjMr&IIm`&03Sy2!8g_yiZJ7{9VxtNefD`<*>I;~rUwBlB}S-R1VfTmT@1u>T4 zkiocsM6V-gWjC{ss8hfjC6#Dxs;s7Lb_YT1i)L@Udn03ja?>i6h%s~ep#n^DBT3{! z%qk|;r(I(J;TIv02;j8g-xXF;ULYplVYk^8>Jfaj5=t@^i?Lj8^sovVk~ek<5qy(D zYWVEnuU!Q>v~(EN%O$*rY9~bFOf0a2Ez{B&S(-%j)e#5Dkg|lYOO*T2+ZgB6h$1mL zlPnxqx9uS#1gQxrqcCKrf?D7sPo+Au{PbUMiEFf?G}oTC@3TQNi5d$~gjI}sLPK7~ zkXJG2%#0;a*y**~R6{f(A7OEAm_3JZ%F{WGV3-jPHL`|Q6qV-^OrOTYX;r}*PR9BQ zDHY>wg>BC>y&Vx*6$4{t#v}?efKiZTU}p^Sa1)aVwKGQ0!Aw+}jEutX$Wufk!_deG zI}<17Gv#F9x2(OO%&bUc&rGE%b0XF#W}L1`1+6_-GLJ=OC+w{H&#GLtKygfUBz9fw zxO7S*q7)M(&Mw_iz`0#s1u#4i&;?eVLdP}b;1B$r%wR26-ng2*ro%4>(y} zZQ&_k_L2f1+Ew9dFq{C2mgqzk>Pu3&D>NOr`vNZB%H0GrIjOfwvkg*u!f<=5R5b^5i= zu1PG_1lN@K22-i^nVd&pB`j?jgdj32hQNw}k2Yjh%=7|S^CGZfNUIpqDn^;JfyXjr zRtyG0Ltw?gpBgeNhQNv;uwn?T7}6@w?cm^;+J_c2%%yhu?Dc>xATu!0r%|M7qS-PU zr!j3B)28!j;EV~oKjcim-fG?0=GeK!cZNz-G2RVx%Jk9d!|qtJ0xUz2=m<*@3eKdn z0AVQ?_QG;IBIjWl;w(d4bQerHi}YrF@PZ*oN@3fC3miczrp0CSs;NEdvg!toVTz{%B-LxfzXIEwP(b@)3pgq3K|Mz zb^$Yy2=QMA>@$qqA zoMo>|3wWV438sduNt6X|)q>81v*K*%mu5i6vC7o*vIK?!m{3n9-kYf^u2gqrfw)P{ zI^62ziTzRv2{UkYfaev+Ai&|IvUZjLReW?OfaOB9F}!f;k;4(J0;ChE)^g);EKEdN zypVIMsfy6)*ITn2t;pWAAnGiJI!oA?Q?{oGmsv9uK1od7%4B*yo^#EPLAJ`t1UT0g zbc02^;oyXgGi*;GOu{t-?haX06~yu&m*~L4!H^khCbmEP(adYO8_xSJsK~DIS*xtUBH^ET}Qs z)5?J)-;@bJwN@|TEE%C#FlR!O1r}l_(;F?AatY@5goX>y)oe@cME z@mC7s*DPH10gTy|`XE#nmKG@DD>8UaAQcT0drJPmcS3>|R{PVgm`Pl;UaZrQdoy~b z@uk9YEZ-EGys(@B7z<)^VL1bnj#JyNyPmz|o)gE2V?8~qEt5ki{3yZQ$M}KZJnT8YdO4{_!<;zt@WB^Q({icZNCgAc2t|60G$nieZdly+ZmGTk#%qo5A zq#1a(z)TDk%Wx!bygQa?jBAJTf8^vdXV2LV=Qoud3GSXD3LtY^8?qy~Pm@FE~};EAcgwd4GYjrdk+E}SWf3vA>g@u)L= z?hcDU&OnV|c*!gZ3pL0^yy~LWM!wjZ303)P7J0UT*xZ$xYlBx^<9ka!nwa)|TVorT zk?m=N^<60y5%%}T^8ymfAbu1%1t-zy@!^F#qNp+)=rM3ttx6ckcGWvc{7K1Y)vBU* zCZTFj?nS%H$Vwgntsc6sqJF0X|+UAUp%O8+XErP%lEVQmn}? zn2XS0DUTq~#R&HxU`Ce!NmF*I`>Oa1)nDPIAjGuup`ZXU!YIf*>3GORyle%Xj;+dH zC2W9GZjVI5FL+Lg; zWRbi&#IPklrK7)Q`CYrBf$f@HJ2Pt44sT=YOqHFfvTyZuA2P_%nC@`jSam{-Y@oQ~ zad-*9!qTqXC5?(6r2xY!@^SRhK`&GU=nRJcN=Bm~cTy04C{$5rXk`*KKN-|%*%#F& zF)mOEy-PHYX3SKaZ!rvz3577(R=Kf&f26o8l`^EKGjb}Wz9Rb}@Z1EOO7tE+~0GL2$zoU$>r)ZE^%p&Ph zp_qzM5*)azJK*?(xG3Omk;sTO?r6-C1ClH`l!#VDSqSLxm0egfB|Dw zcOaZY?jRSbe5rN;YI~%r^TvQ6WIj~N;iwWw%gR6gn)OqA6-Q~Y2S zHg%Rj&kiha6u<4nQK$hl7&5|X7*9hEDwdCAV+dLuQraUPi_ll0{q`7T^!YpNk|#h z)dmfYHk5C6{!x^s0){Oz;t&S<=V( zYR}9&3x*z=vE51s*mhp_BOpytSveCj9@OLLTC z{-g^Zgv<{@<_EdvqxQKAG4Vs5Brf=2@BP2M1Jrj|Zp$X-k^)mhbihzl3On3chVPgs zl+rnv|Cl*e0ZPWu1Nb9R8XvBokdC7{<4b2sZ!^i680_d+BdnQFatKF{qwvXz%~kQ6 zLVjBm11}E~Q6eG3@C~LAOr+lrTcVPzH(R(v!CZ7*m2WF~l2v5DU7?RgBgzzDW=biu zq|$dO&57pXVaDXIPke*Fl7@QHO}h$OfY4F)x<6X68`iL6&kgSf$>oe9UKV~)1Ol5_ zFG&`OQ$Z}Y8?G({)tLhJOmTWsgK=!7ax$ z4gnvKxx~&5NEy4*M=SUPCp099593yWVBeH<-l}^*nC}*@u3?>H)z^7^Nb?fm)L4r0 zo8S+tq6BAly2V~Xl423nCeYHG{N4f=gpf=NpMD{~3bS5@k}*s762AV->MCp1A^^MK z%Zr4A@%lmU#Xg{>Xn4?jW!UPo#0}wp$mm^X)tkZXoh8l)C0B+}E37^)=t;dv@|L%N zzXu%$&T5oVD}zg3#W;;jAHER^-gq;bBlOlqX z0q7jeri$*Kl%AdKadc)K$|+^fmS#yB@zStd31{@ww23=&k`_AULg7-MKp{_+J>l$} zB!o_4IOm}SJxAdLoxmbbLJ=pN%5W^@mCWV}7Iaa}#IF=@NY>KXP z6zjJGclp?qpC!6W&gsBGKgc#6tkaHN^97v?z(QHc!2lpG8xb(Y!2mS^A$Pg#MM(NY z7FE-Eou!MD({x1L!es-*i6R!< zf?=Oz{j5Pbas2>Kho#j$0%^22Vgx4<;8P(J@`_Zp8{&3hX`g)GlkY1D6C(Cu6PBa+ z%I7^<77(^IAt71*8%PwxLp8#Orhvf32fz5>c=KWN>!w|NQ3PAU&dj3{Y(lUh{~DI# z`IHdS8m>rK?m%^Ttb8ugUDtj+uj}pdI6?+rkfBEqmNTR|h+KKXIIaP=c2+81kf0 zJvx+*zS3A%oWB*MkZ`rDxC2MB!B^FJLtajCQzkE#p+m?|g*TX`O_F3ny}@V*VmA}I z$U7+GRlI3n9>FcKxnQY>(LO&ReZA4$5-Zi(vlg8w~Tast|IW~ zJyc@9077#WuL}qw(0Li;U9PVE!Ag@jtr9X2_tU9>IL9)lR^C zp&~pi?Xu35HyH;5zHAq{NS0p)PrYf$3$sJm2~#C5Y)FZjT=Hwoi0>acqu-zAO%7bF z(-(_t%7nwt_0cs70ThFpl{42d6-ndwJ<~oY$7e(xGBCbeRkN>DB=~TEdD&PG8>t(J zI5Nqcte87EqihgGgGF+}r;f~4c^KbF58|*JS~aowkQFco{3kDI1EWN;(GZge%dt|U zAq-1T2us?E$$Wcip;^|r_TgAw7QlnBMEMnGljacU)5<|01Sp=blnbJ4Olc|Q8(B&rj7e-o^P4U;lZ_dU9y9q-piWth)c6_%T zAjHlB2%wPd;$;`=6YLdt(&e zC5TW2?fy0EU#=_9Ma(P@xyRg~MNAyRP2wXklZWM28Ja1-GS;;QNYRAnf&@A&k0VJe zKFv-C*(J=1WyK}uLuF`aV&PFtQr!kNRGel!-XP7Y2m*CeV zv3QZWm6`*Yc~eDU5*fv+^Kd6pgU3@#O0Gb6NX?^B#$|+9dWC@^jC^WNOJO*0n zX8mqhvabw4P;nVC@Yup%O@CzzO(HRECMhx#Awkd5-~uuQmXnC<^d9hn6JD^2HNd^Z z7OqGaOF*rXXsT(biSCn>8Rn}cx-H7l2B6l!+|{S{U2lvhh3Cg8q>tZ^-!zLX?g0vU z+7dx4qfEnK5VHHJMkXOdJ5g#1MFfM=#3Z0ajvy?#2HFx!;jlUu@Gj`HTdD%Iz?)}* z5hyIj(ymZUFccHQavt7^gzdl&hJA1^vku}uCbKf6M0PVmppsz3*NwHe5%V?y5Lt&C zscVDI-XO9!RE`Wf`>@>Rtw$F^C0e>;xWTO5Qj~fy^28~nLaUS%%!g3T%n6mNsE9c}>2=tlh z;!5ejz-YiU4dx9K3nV4;mbtegp-zEXR4u_mg(X4wLSUpHx&WXsqSJ?f%85QWzK~}D zF^4DcKuC#Mz;K)?j4p(w3fzlDYSpk7mQCC|r!19Ts=65GDX<3?SZB&kwFDz^*;R9< zzlt>;zzqx`g@LdYGLeq$e?43N(hhLBioJx%_toN(l2o#>CFe&DDdI5D8G z^>N{S+23j%Uj%5vGhPG)W?_d`xFdw%iz-r45?c~}d9rx|P{nA3I6);x@4!(v@I?w) z`Iwh3>DHiN;u#rhu7XIZFdr+PUV8b zaUb@WXH=P=a}aWDq^82MBiKRs?wvvxUmnt9_D3^?;FvFu4zpIN+&nrRAUDFY4_L{i zYr7Ued}JCOls-jSQjwuE)|aGxPFePW5DK=PlEJHxt|?-bxEB@CjX)OcB^eBJ#_hui`l`Uu&kxt9Zl(B{FMBPzZ$;mki zO2q^tNTQS)TBMvFB3bRjnTc9Ml$3e)oSI-4oQ8MC+5d^Hc(I>be{y{sKuh04m8sRY_r+uw)`In;F26jmWUg zWJ<4Ni;f!Shpr`O>BXVfjg)0ZBPv6wpECnwCNiH%1m#^J$KT8B?gwoQXv`uU;6ZC7 za7uAzSlS+JAIqu5G;J8j58+%#ZNbs6a;SR4YH3beB_)jVf-3{Ez^Z^ka9H*i3ISa% zkdR?n`rlj;Odv`PjyR`NTZU7 zcQ8PaAuQ*SaOkEmKzbKu4sti_TRvFzLP0Cwy0&$8VEsTdXbchpq9!~qeFx;Q!kO> zIf=h=27>Y={4*>j@mtjk+QR4Tl|})?c+9%eW&69EuUMn1zb4r&X3c32_tx z5rur!tAow8cmovBXNur6#qn84N0A?>^r-@P6B1E;EtmLz7*#Md9c#ge6FoY1tHjuEbK;LVIQ61P$cS6FSlhE+r@A z7F^|KBD+U$*r{yL#J5URivTR8E)ELJDH8D2_t_nM&e>~ApP!tSc6&hkGnY>Ou1p;CVvU>Su|J(E%uYz|g zs3-Wce2XF<1RpEB%o;9ht!DJ=n{q|Ms+BNO-9%~+K_)?_3e|WeTvVl(2DN=9v{RuG zub{&!;KmAFcqRN(rFIJJq>8F@CxN%!TI2rSX0N=;8$|j27B={{&4q6zZd8fTREWc? z&dfuZ;e%U_+p0*^&5-BG~|JH8lk)J%{x z!=M(wM@zg&2P>Vb0(g?AVd--j84~{9(V}+JyKj(TidU3#$|?n7)s!%ULh0aeVaYD45{ht1SyT%~MiJ45qI!{)qgL{VEPcxgu7~ais-11&bru+=3@o$lw;_$;&C! zHnc-01f(J{I0@ZcA_)WCb%|oMu!ZkKEm@IPC?Y8364}qrUs-QoD#NFuhI~-DB)G!; z+#t9mYRVyavcM1e*H_0ZU7 zoFBMSfheVbmnyK<6=v`Pzhz+_FUaN=m>~ns5}lNN>66=b(JnxY8i0dr&lI8x;tAiWL(RCOdRX zR+gh~EsKB)++w)76+Kp@m*pWGSl zWjPHq)`Iho_DB5Ib_xh^wHMq1CK+Eu(}>3}>cmCG^Mn;Zyk&%%GYGAGh@(Z0F8hEF z&7Eb}0if`p_!S2)i;sr}mTCO9;cALPvU9crT$gmbT&1zNzx#zHkr8XM*v_`Xpn$e+N3(NjA zQ78N%@K#CA zRN}^A59~NIapSP;&oT&LL0I--Foue&-rFnnQW*s*u-vfh2$(u1rzudrvt}S&1@Ck| zdD^U6b}EWQ(vI*N=RR!MH63{%l~sT9XlGT4>8Zbf#WQX^W)Fjts0T=HN^ zi#XPg=(<$WG?g5674I}T-?&sLqs)me@Q16~trzKiGasm$3pA(gKqTZgQ8$;Zd9I_{3sZeq{ zaq3EHsiOH&NjX(=-IdsVMRu+d!LLN>D|Z;bc{=Hf^IZ~js)_n7NmEg=S1Bi{lyX!e z>9K`9>37m^A*$aJ zxLWYU;fN{l;T6D6rHb7ej|g~D{N|h#T0$yTkaj8nmSPKMW<>=FWvL>uW93v2wvf4j z_baw@b@-S?duI5JhF5HOxrXGH;dv4pDS&_`P-qXM@_fjcRF zH|)4u!^bo38Ooso$x)$@t4IVC($-?Ck;Vr$ieellAZNX3_cIc{=y@l5;Y7T{j@C<} z*-1%#T2_cMPDfxL6lRnL5u+Y@`4wkE5`pmmLx>q9p|h@7QwjTj!)eiggKW z&T$6LM(abGtl(dS<%+BZos|LX+XWw_P*hZiv=q1q3QkZ_*;B)dhi#xV=mL=(Ee$Di z*ak|Yr8K@gb6sg!wzGZg*+^nj0UKL58+Epg8d}kb!opFQW8*yRNmWa0guW1SP}x%- zeLbvxQ~ARC?8GK;v}4Q3?}ia^4P=l3WEn>tSP3#t| zMeJ6kKjATIN9~qi4DdB#lVP9O@{ieO2YcW4G`34|2O;AKLJ-N|e?Yzbj! z7#vP%CsE;~F&y!LXbtQrJzEG2NNhMP+y3yup(dumm)6 zeIDiQ79>ub)QCeU=jMi(!mq#`qO>d^-nU z=J-n+gvvl@DmuA!dnBLP!i*1Gv;q#Tuvb(BWhwyDiY7%7ZyMs5W$)r``TgSWoi`Jf zhKUbT@Z`zOg{67o)fDg+1%JNyE283M1i93ADG+wpxWf`Hq;wNbZZBdk!M7-#vw*OG z1;nA_c9>Bdwwti*Lw>28oEa~QOkvnE@8DYJ5O6(X%OA5tGM+$m;Rt6t_4Z*oBUx_> z!ktW`L+j`eZF>>PC6Q2www>IgR|5QqWO|j@Jdsd|*j91MA$A41wpYp5!c_vhedsAfK_7S)jPErLU}=8!0c9m}KVWTe5X_*bajh7vn0$1=}V@sg4T zugq{26dC#rVL6I;SS%49H2&`wjqgkn&LSb~r;F6LB04<5GPg2vK{y+h3lfQ-yuo3; zaLBL2a#^1!(-nl|3Oxoa6on8<*wH6C!S+rd7nu>Kvcsu7bQlo*;o;G8l|@IV0{zC} zS4o@GUo$raHB$U$3q2!~0s`g{mhFeOGmWB_3*e+e9argFl{8c(^;AhNRne2shbn!m zN(Pgj6n`BHNwjn;TIpfO8K|;9@NLkSxE0Gy}O%bb|&!qWl_Auavl|UBN zKn|ui?8`mvQUj{02M2ut1-7#`4Vz!`o!`G^>j$z0kBLJ+9rl{7U7AGqpsU!GofJtB zD<`m<1(0T0@QT267HQGaEDEK-g<-IWN@-<10abJX%@Gb5z93kAF&4rfRt_5OA!axj z<`Ao^lmk`P*p;<GSNYHZ;iXvz`; zH6m6BcUGuOD@=j$d+g(MFjm9y`=ZH?uLhH@lL2y~eGa`v#RsV%nZllIaei0qc!!lp zPzAVvutJ6AsWJsrL=YEiiSajbFLzjS{a^e47zH>Zv{atuETa;GaIFLZtB8ph1!(e>piJ1Yf96AHdT-_<5{#$>CMp7Y6*PPW z?_PoBRq`BFkQD0vttD;2j+wWzRIMySs|br&fL2KIs#I49?l@AQjufa96mx=Njx4BC z0OE*)I&^wYXv_h|I)xjKXqN+tbs({x#Enh}8#tS zhMjX7LZL23RZy@l-r;n-b#V^V)*)kc!gUUGHY`s?OooN+{5s6{~~sb=Iw6c|4G;iC##t zhJy)qR<)k-=8-gY)WgCONn5~5NH~I2U>5xj7>B&RT+EIbr2{;61SlN=N~eIwv$UNk z$Iduq$j&)(f-cg5Po#RiD5gI>yWJ_N9u$hYujbHbz(+< z1spY?+K?NhpuQFnU@{@0qEKNCtn|}L53On&6qmcS!LDsSDkulP9x0-NHEhK)*WlD& zG?|M4*F}>772y<)J4y7g97~gdFwGG$aZne2=}~a}FPh1P%MY5<;m&a|oqpl+UuD*S zsIL4HN2T;$;1UBS9d=A&nHeMF(;^@lmOZ;HdkPzH=r^G!W|;g?qjFBXWkAstnZzod zHel5iXmkbiR1u1-1fwbds0!Sv5_YTwZ&~3fYNjgSrV4zi64Z*Rk?puSgtNjb6#qRz z#m;=<43p6WCVbZ6z{JlCI~FBX2hNsxPApI*;#n!ws_;A1A~H!P(jr1QGF*rQR$^t9 zKxQShS>dRzAh#<4$V&9A5}2&S&1#XH4({>Il7Z}VB_mwL(I|nwW^AVsH}Zh3v4xM= z_sOoVr^lIDwBA`>=(jzslbj0*nq{sTVM+DJt=;N_?wIVP+wC z05hU33Wret3hifD{tD9vz!F2}z(6+|bU(IGZwmOt7DYQL4_w3_Nh}dai7nFkCBUGe z2Qds+ae4STYJ?L*>vwy-yzhyjjd5zyd{UwAXkdh8`o;G_@xpPI9rxK`B6Wll9GBVo zWR9C0mWo1dl?G;ziG&>=qVS<%Jv2%HjB=1!f?TmhUyLt&>92fS`Uk;>I0JtLE63U_e$&1v(yl}m z>!~yFo2u&yl1?0!$Rx+u%@z^wGoVW5hK0Rp84uL4-U)yT?2t6Fz!G+Ix(%zBnh`{CBhfmIWtpY$Cd1?ExR~4 zrAY~aZzphoa8K>TjXJ3q#F#6vsrW6+wE$2+bycCdszNftCmMg{JWPoqL?+o7FO>pdJ#UrVShfL?FGdF#lF`Ol_r=ZqQgjt{9ehJ)8jm zI*b&kkq!;JV?js44?@f`>}cT|1P#zm8kCG-IRj(%rn8X-L|#5DXCN!E5x>}A1%N%s z5NQv~mQ$8AAZ{A;4PkN0Xjc$1)EmziI)*AreAarE(x|W}mX-k6htjBeX#dW3A~KXi zg{@e&AKK1498m5GAilzJYa}EKGj@g6p~4MV!P{2ww)K{(BJC5rZGD89DD(kpUr&Hb zC;bJWcV!V$FNMiS69Toi6X3xKcmNQ(0av$^S^b33>XcSANmrDQortxsQl+J3tx08h z&(d)MrF%W5b2P!xz0U>~hiurvUWA(b;EKj?hmU|V;yU(V~urbSboExiz-Lhg5_G!GhU?V zF1j1YeM7m!5IP9Up77utAY0Id3Cla@C~6Q*H76)Jnez^v_l7=B*vCV>vC~<>0-Me{pJJ9mZv+Jvue9&X6BZ!%>8q55^BPTf)vH z5+i$9HWNXn05&X#;_XuQNt;)H#JE#>cV*1uLiC(?O~`e9jIi+^JRan@HkKR1unGm!4TT^J?@HNqt=VZ1fW% zeQrY*N*gCe^-P~VC!qAS&z=(*c(%`;6JvK?pFJmz=^EmI4~Fo9N(UJUzohHNFbL(Q zKks%|e3R{b@e7B6*~F$@}3EaUs-$dK7sL3#U7TU0P|6==FB@WQ?tFMH`08W za>?HlpoC70Lxt#2Av)8PQ`qK+ZiM9%*(~$Fe1_ebw)|?#{2PHqDkZ{lcvCXxdqPC6 zf!=+N$H}7PS>lZADnlf2oCY)Mp7zQH5XPrM~Y+^6PtIOzvd{ z2&klRDk+>w3a667(HC?no!u0EA%zsS%}J95(LKPY_H3YU(AsWV+r6tU?|Z@q?tNy9 zZi4kU0eV$m-TQpUaJxM#tUHg!ZaUF?hU%Z$n;T)IxCceQ_%NMHe`g8dsG|DaUIFbJ zdCQxO#tq2%Mp!MD8qY1iN#dK5sjw&Z!rsG<*L71Y6*gfF%U{Q$F)aIR?6a}Y=#n=e z=dk`)|L_n0`nUi7|NQu;fAgRI+wVX9^?(1HzxmI9_xtO={Kwya`=|f#FY%v$`}_a? z&;RjH|LdRs^!I=NS3lmc`jw8!3h?6%nMdEv@0jr8jeSN}{_MHUJIut_wRY{dz$zDJ@1`j z(`Vzn_q5D=|Nfozk~U`Fi>T%Wbm;=Rv@sL!(24Fyqi#508xGh7|L>m1u)0HJup?d@ ze?5jB4*E{X&hF!E7vQ8Fi1$uu$=*0KaPRml=Nx15P9$un26x93-Wh^(l@rm z6%*8b3BsWb+T%nq$Ogs7#(cgppI?Bh(movN1WV#3$q#5-6S$ECa6Uof6p#KSkzQ0# zB5RSzKO~&_1QKXt(oa6#PXbSuAT~*4#uMqO1i~(%Wt4olsfm)Di~Qo1%4~?X?)f|IZ~r*zXRi6@MRU#H#a#1` znrr^?FXozm`QOKX{qax#{O|sL-Rx^EIsW-qH1V(1($}_@uWgHedyaqhwWZjW;=g%~ ze|!9k-!=Xo`^LB)BUFxm{ zL$&s6)Z=^&8OpCASTM}^t1aUNjkgq^C`=qyeIF*i>du$pZ|Eql^7LDc=UsiD8Bya z7}4CLt;Ty8Ens}N(XW^I2BV#hj=u9P$M=bUec<~^>z^E*bFxY{0XezeFv z-qRkPf3y{Y#;r#CjYAA9^zWIju9kA9gqGsFs#GmVd~d_v4)AW)X_!4 zj6ZN-^uAFMF-#o4jzJ|_)Yqtq7$eXaa>nSejs3RqhtZxa+~8r>Vff!T!R}+5kMSv9 zY?$$fF&xAv8D{)iF>#@^je%N|3F|3E(S8T$L!D3I? z!uHX1!?I;`-O*pMV=#&~7`E7kE!Z*i6laT%bJkUM{I!lQ6m}dtCWT=co;ZV#vu!ak zFbs_$W*Zb;FYxLyXfDm-v2b z+C2W67(`+&GX|6~xY!u-3d6x*aKZB17-+_OtK4VIaKr8^!_621Vk#M1(l|C&7h_Kb z>*`}b2}|Q2Z=?Dy%U{Raj($A`7Y4p(=;2ugC-Rtp3)66Xg<;oW$0WUv78BOl9`9t2 z7q()@_B^`Lp11MWJo@dP<9)_R5-o0z&an;~?|C0^o?&->$DItDu?5RtD_bgCVqn^7 zZo~Sp<62=8He+K?-^O`-bclGO-}^uO>*L7$d>om-4oBwCa%BGe|1X+x-^O}DY%K9o zL#rsPB7`v@yjR`1 z($1BJvl_NxJNCrtJX~9lyimU?D>2Pnc7jg z%gS9=?x}KY<*5332gZ)ZDUJ7G+@x`n#!WhJ#o5z2rGMUvvt!%lZ8vVFahAp(`#SgT z+;7)rPCla9VLAE1$q(-L;C>Ho?BK2sjy*X2@zzT<=*z;|+;DNOi*sF^>tdISvs@g1 zaeEi{akKvbK83CG&D{FqxXE+mp&FE#4a&^089R4}p{$()X%LnjS1mGzhpO*)jxbVK z4jl`!uodgrhV9rBt8;P-+beM$KiP3($L)H;Ix+dYm!bKcG(U*e!g2(S@Z4XO%SL5y zqp~;b8~JN!#Wjf38bpeXBHys={#1n9_BP8i`@FTnK?5@VZr~9Lk5D-;O_L0HST0SY zJS+ED+244Lw$Ha~{Ly#-8t7@-krVs+Mib-r>_F$piLK9l^w~a8glmYnH`v@78Q=!L zTUej3=VZt8^Drk@KDqMAl`kHN7Dv7~?6@ca9^2=Kzq$RJ+rK#pt?OE5w?Wvx!3`I7 zK7%y4bhh{VUhAi$1Cnm&Z8Z|g4XAV@#oR~)w3iHc_#@957>IyPH}tj|>E;G(x`9<_ z0Hzx$=>}jrEPK*ANFp?n2o2bD*x46AN;fhF4ZL(%PF%RP!s!doTR3syc8ZSTB6SWK zQ1pcTypj=Ze18rmfoDI46DW=v6h{rg&#-f>f-9h1=jWxLocrV^VD;rarT4oLm~W(# z8fm3QDyb2k5Bs^Nn^$nN`_1k*yYu0xhzk3;!22n0<|J70!ZvKj9@q;z9_$`q|EFE0 z_d6oDQ=gygyRq*Gr8KnQ!_LPit<|XCY#`MdNVNu`UxUyu>>LK}{OMJ9o{xHuK=RZ2 z?)ur=xF*vH3HY#_+&DQC%x$x8A>R^~9i4me`C0E#d%rz9GGm~(686N3g)$b_?`z=G z-^V&nz*KP`yu{R*lTI@~#x)zpeSIE`=>c?4LuaL-vl5m^y5C3Y%a|U* zKBInqK2mJSpIuJug}sLzS%wb0x}(7o_OttXJ>EeN-|KxP9msUpigj$qa`wb|N2;&G z)YpMkccN(>j=oMYWrw3L?18;r^16+GZ^=0pZha*bS~xZ%j?j?b}D!~ zvK4)49N8XssigPS3|w_s?yT`VjXUd{vUAnWUps&8JZ;xLT&17$ZVq-l+Psek$s2C- zd%ctUIJxS{?kDFxKVR|UfiEt7vHOTwhb?bB-OBv5_o%=D=hD~FeLKacof`bG;|;ES zVU%4vw6~r5{JhvvOQ^WH&@bueRLxo_vDoSSlP$~l&XwYu_ER^Mi{`s^p`Kw7VIi0b><*Y59- z)z^a?J-GhC^-r#R@=|CZ>-l)z_5IMq`k&W)a_IF!YC4kd9l_tQoc+=+oc&(sjyF5r zyny>1P&>8AVJp_L4LiRz3>0AvJHPn0t@F9IInKw=IehkwZwfjyY{#D13p;KR$MM;H zP!?!dwD;|9Q~IWFb-sqJe(uh=JL3V2d$iAK-j4ubONX$fBhei;V>z0Sy?LLPYV0^l z#=`Q)#;F?*)OeJ}qck3+ar%)02+OgZi*zo+AhPwxb+z}qZo@5HpC>waNe5@9mB9NR zmNU~zwsSUTbe=k@e_`42WXF-y=qLtu6bZv}`xiG(V?nbsEc@Kt?9C0*Hny9K4-c{L zOe)aFht1f6t=QSAcczeiogZi)USih0!tx&0u?;(}0q=X*70U_AGky8{`O*LDi1~Hk zZXKTZjwV%yExzxSV=H%Axy#B?mFw2eT{4mE_PI-YI`#Nd8>#+o#SgJ&H4@qWtmL0xpzlsalk9nQs$no@^_G3@+giFScdQdp&I?Z^AI zQhB}p`1u!4!r-6mnSg)1-ynUagEX8$3F!1R7i~S^5}>5iVQlPhIChH7JB8Pj{}z(&NB`G>R4eL_GzHi! zDX9)SpN=Z(u+O*q<5%UDy2a ze&<}`HnZG>%t%hbYgq1+ubcV0nXgMxY}gaaSsBkWBYB?m0UZgVu>6saOl54RO19_Y zb8n2@d9L;1=cm)<>zs?JpYOXa132)^1u*+}c=PJwJ6g|N@`_Vaz2Wqmcb zd)a2IDIb5W>~E!q{d`|j+520S-Anp35IFNXoOvDD@~{IBrLJ4>smsV8_cAiaVYyvi zacOy8o%dOIpA-mo3J1e(uR?_Vnvai8@N@mKP}1x9H6QT2-e^jvp0HC-*g0SbEH{dyTUkL>f0nzy-!BCVNw4km8W~ zRIIF->TrJbEq}k?vL4&~1_Rp|c9b}}_Ikfm<%>TbgHa8I>|Xi$m9Jm<`t|-i7;cL# z^8!@Qb=0OiYSSHJ+OXqX_L=gGF%bTou=80!mV~WX$Fd_0!#*9%82#+CAcCeg?1tU3 z`GpU5V@$LBMo{7>w}nd#FK&ksH!O#i`G{87ae(2%&H=_MH^-vLSQOdBp4s>N@eD-S z^OGK>zrUZx+FV%JtQzfxUkh_jSndbE*7(rWl82q6()arbjp5Q5F5%e?o3OLV8ZHlI z=N%f84i{L53#`Kh7WQ+~%!7uLYuD%D@oSAmkg*7|OFMGL`}37q1X0Hxc7A0?PEVt= zuk*QmxH!+C=p%d;cASv<^$xRc*d05+j}r%RW-%uY;savJ*z3#tAz;wzFl%+lc{?>} zVY$F(P2@Pej??SqbH{kNh#hrsrX74xr<^{lrgC5259{@FC<`XIeZ#Ult70F@JnM6x z?>%+Xc zzD_B42jJAAJ(^k|l;{vjbZW*svI1eb)`($0r+&YA8_IX0UGE4lbf_l6 z@>cl%l#PU)-;YX>PNhiL+1Mx)3Clg;__pEruFpYd`+Nn~os9v!jl5UyBkvVLb< zbK9x8?bO_MkcOQym#|uj_?so`)Zd29Sk6Oh=rfzuDTEH2J{#VsvA@}`-p35^EGs)- zxAS#7Ul%&+u-pl2+U}pA4XQAmy6R3{by&{8H>YMg>}-pjF~2kB_nFY@R8n^s8N>2a zeDlsX?|k$AS?o}L9hTika%+D+93ykTxhPG6lIwmf!h8Fh&WbIw(H+e02TkFiDIB=Y z2d*=mtQ}6)xIO+lGVGlUdnd!*scH^uSnb)d2bMFBv_>cO-buZO&CgA}-;<C-7dYDfAeqyrhoh*Atu`BHLa({Jd`Z_7}PIX(S zx~-E)4?9~c#ciFkwy<-21n}7bg@(;ocKl5LR5pj5lQtRjP6oYGm-rkw!jE&M{M|HBpQXTffj`wxu z&yM*e$m%EF{>f-h*>zZ-F9D^>u-vk-Ctv-v`58~5RMc>X<&VTPPrmnwM}PY4%Sujb zh(G)1j)oJrX^46ATb)F7Sgy{8qprE5E!L@S?$k1eo%J#Oygu*dse17|-!b0%iT8f8 zb~~B3DS!?;o8H9~a4`j3tkJGzHbVr^I)bzv>9erx_&^_gCc&;xR_kISxVB}EJn(dN z($1ZPbEnq1lXmXZu7#cbh;p?~kz|LOt5dYrNjrB+*E-4PPV%`^wAM*JcaqPY0`jo) z<59&HwtO~lE*5ei=sTr~ohr7lpQmAHzdqTo3mz=Zs2AA?ea)Hly2i-8Jv;Dauk(3b zGf_nyS*MOH?B`<;c%sZP?B_FFZ)VwNYU;YnY+v`s1G|^c-QA4K_vmep2LOvn*d3d( z1zWN6MsA#_nV z3>}@$4uNe)X}%+l)<0R^jwED9&#j~9*2(c2T|Q>96MJD*8RKu-<1BpzSQ}l_HZ5&w zi#>$`1qzg+!CitDO7S4UwKx>_;-ye1Zo%CWG`PFF1$UPaq`1SM_q+aUCv&nVSv|XF z@0oM&%r76MD_@oyAAhWpDy%nCiXnscO;?o9Bok3iw|{rluWb{QextMvG@{AP^+tB*==16@S% z&R}63Y#O<~k8<**+(sK^DT%EDLp|DT1`|DOB)cg?0hl8fYRC<~AJ~ z2j0(U)$tie@MSXb2}+E1hr~@qSek6otgk;{$xa94?SE0_E&0syxFd}BbG*xGBc1R# z&1hHDEpk~ffv*}7G*h7?I3tKpG42wWZXaS}J$I{jY|CeAfX`Kil{{O17V(9O;_?j6 zq@>Z%Hz=ZU1g|vNrewA#NvjYYIamDCov>NBFRXFb%(?lPUN!k%Gv%}Fe0de1baXQk z5s#S=g_iQ>qF!4byIe=i2 zlzHImo6_Iothcn%bBGRlDgUQV=)mGCmEw4IR_y!q8zH;*cIlXQ>E%L~6s8-ybMG2q z<<41iy?dUYzB#qyP$p1VC32hu`n-DNmva83gbt@mQ2U)Zp$a!sfMs{S;gc<7tL%B> zBh);S)$!-XKS39&f{%gQ^~0`~@w(=H_wyAFxqp_in@H@AWS`%pPKU5oS+!?5e_C_2 zsh*5*Yn%YZ(EE-W%uoD$eb>yJI^umcA5;4b4aS8WRyu}1^rZMN!dhY|@P;C*8%urM z4h{sIq>OeOuReKsMYo9bF9vOAlnLXv%x&-3SpoJusrGz=w|Q5VI!0>jMXyV9dqb|w zL~$3E(cX_v(Wx2^O#sWnQ_`n66R~*lf0<{~X$O8z{N6w(xRKaZ$5Ivd)d6NP$)z*@u(*(+HB}_s zd@J+pAw1R-HxkLc8J+5Sc+*-~ec7<9SI|91==C55Ju=&MrPsngD}51!#rNL}f*w)o zxmW#mj?vk$TCAsAd~td-5vce1?=`m*x}tmi3s*7Vr({Q<%Qcdo}8KBcG7k}Z*70lBd;*4oTf8?n|Y5{wkQ6I(J+ z-5h&{@5y=CuC0kLbv7L26SjVbqJ&&+qCaC1Nj!|jLY4b~<+|Blm5tU!bMG|WyQjhM zFA7865$`&cmQTR$_fz_b(En|IWh~irFi6!1dX!WMb0IC0;a|zHQ!X@dKI$)kHBZ0V zbqP*(Yd)foSeOiDbrY}(j&rk_)IV#8H1d=qG5OCpJ_Aw8HfAcf>otuGN&*HU0ml!5 z+FZQF2ZgsS`;dJddTp)&L?|z4UgpXuHh=%^2*u+11uBV)>uiC&FU=d3!(EPEk#=EN8p+i>lB zNQ7{|fJL;u(}P?qCmas(9Q3+04|A>6vPiIk!hkKV%gc@5jKH^tiDx8r-)5IfX+Rl> zvP#Jb+N)+EKlies#8ia4mBS%Rp$u-9gExIG4%zdb9BFpRty(&5kh4ZDw zL>fyC6XAe1JHOea;?3FgQwxmSKI-cnCyIPK=|77V0j}wdo~=G3kz#cwqlY&S+-wjw zFmS3#KMEeXQ-X9h;H4UVOZ@KxfEIE6tTfS$YWFE=NY!p(c5^MSlFb zP}X?04!M${o;eI%6-rrwqk19m`eiv)ODgyZAYB4$XebKtHLZ<;P`7VoaY(`rdaj@H zclt9W4w+c~Bx}xJk0v`x@GV5Fl+b$CsW6esPX{~$e}{q?c4v{0=YWdAz(43$G>*z| z;5E|0VE!7<;#Dt~Le~daKVaz>TLAy@$7(3fjJS_0}1YqXHBtO=*?I ziD@_S2S|m@!^umACQ&%}7FXW90-FTn-SDm@5|+D(OhVv-r%yMFQIv}p5r;DNu>1c! zy*maBe1$!>K7t!L4Pt|;DZqBKEbfCfWv{4uNeT|OgYG?RKpH61?LN&=9Y7Hu5d4^C zcLf)|_PmNf2{1M$2vQs$K|p!%i@uE_zSBYKqB1X=@^iOCcVN(802V2%=_slW?uBmE z`;&Rpp!@9yv%kx*^E>Y&xp|(NLjnxwy$4&0dhu>0UGC>h1p5PvZ;cP;CB;jRGH>gx zP5rtUfJxZnCbpYf-WCPm24c5X4^9JawMjmD9l~eCnnes>R1LjOLR<(g*CSyrydd}d z@A1EyP>Uny7wyGC%?S0tr&YUSnRmp;(gM2PZ<^8R^wR6{#9)fbrh*t8RKYLV$UYx zeKXT6ha0wYmDb({dv@wIUp&d_7cGQ5mDjB6f!ulJYuVxp(?^*d*l%d3YE9C;^;nN? z`8Qy9iBzl#@QB;;tROG5Cv={p4YvPyYI}3sh9A}J;<+M6KkNPhOwRoy4uju}dREYC zJJi-w#RjNkgFrz)Zjn8A%v6+nq$j8jd4`Uwd+J1m<>6`PSLRU@;xyc5Qt#79dh`<0 zR;Sv|sfWK|1MFG5pOT7V!L}qknR6g8oJ~~Q3nO&5O@KAS8eC#zcJ4OAjxODHUtV0w ziDmk!R~#B%SMy&+)&8KkT8AXFY_(wR*Ya&sd`3sBN>kWvcC`T6alpJF!`0qEUK|I-knM`B`$7m zdm>*uanVgjyG#04$+9iw5!vaS+jTOZHN|@>z>yCKj%EZ1IXXsrb~}lTd6TyC4^JSm^_G@mXxM$z)r!kXvo>g?=KhsZb#wYteTcY`iy8 zoZTp}cIVl);J!0%J(Ky&t=%8c%s;S+d>>Sju?4P8eSd)c<|^P>Sa8|qdg|%*rL3n& zV&;?4>Fq}G!`w0J&iBYcvi;LPjo#US<*W2N;U^d4*1omx5%90s_16!k*k<>Ei;Lt)O35oP_8}#xQgA2KrXWGb95Y?JKoB3xmSo1v(M#J}b zUY(^abDo`oh|!dhrX&`>t8(2;+vVBx2b1!^}3qni=n@5 zbH1lO+N8$*R^;q}CViLNZA*I!ZE_X$qC0G@>9-4@Jqf!X<##C4y=8OpApwHc;D)M+R9d0^u?Y}E^^k6(_PbP$kNnL4^4In* zbi4-TM<)L#ClmLJJqb-5QP*C!b>LgCcbJz)%qXY<6T^}7D)+@YZcJX)5$GF^cQCvt-uY-n-X)3Zl za#=A{6gxTrisM=D$k_DX%PLU1drJFpgX?2P-Kp2|j)~~)uEo=9jbW=cyH%PCFH>#p z$-wuX*_>@Qk{=*>(7DO-9C$+$B_aJQ=x4q zY$!$L%p`7mlhwCoKzaJ9N#+v9c>`CyXa+(MF|y@B)4O|01Ldg^(1#uBUP0hqgOGS( zyR)lTzm(K19DN47^yTAMM$`e``fpbuR|&xYn8_fr@}?1|wG~+MxCxy z?zP_k%2l%Z>7F?%cz+kVp0RVnBjIbvxzt*-vk#H?tLPC+k7w>4^j2_9dphb+T1lufZf#H3Fnti z)S9Cs1|ga5b}v@OZC3r*+GqEWD=&oRYR-6pkSxhJK<})lHOzF}#Ubfjdmduc7(^(! z&Fq1_BcE&r5yAa~b-adn@03vJ^Z`C1K5L#uvwHm37dSJx5|#PRzvhw(QiE;fnmr@v zyt!ld@7*)yS-oTZMmFWB+}9CEA^r>^MzO6F^|il0CHm_2+0pMIEk5nyRuJ_K2TQ%@hCBbRt=JT}lPS9PViSwu z12em5?G?H7N3p&3@`JwCPhpiqIcW%vak&Nv*po*`aG{U9Nu{6q7atx!V>n;n#Q9co zWo%u}K>Pgx-=_8K%J;eJ3hUqx#q?bIgvp}4XKw%O%B}A)FanUkB)HDJ0+Ni!d3@OM z0S7}<4(k-Kx?1Ojsbh}^u@eBBS4N|OYg{vIHnroz+@Xb3&t9he4(rXhZw*R|JAcwD zn-UY;2xRrPj{%+c;kNI2aBqKF-STAF`l_$=8*o~w^Q{l+11UEiRu%~abb5V5XL<4?qUe!4`f)&Fgt zKq@jG8Zj>_(Su?6=Es>X%~v|_yF?ybr59GQeQv#5JFhuu+m0A-z2ZOm1$XmB`WEC; z?e7KO-t}F55#-rc)SRTcp87B00t-}?PX+$$-o-;} z2BU=%80>u~34NfRd>j|q9ar2z>+(_xoj{7(vaVj&EM3uYRwX0}{;Z(huEXQ{@MJQ~ z8MM3h3Bj{F&a)fs;b)odJlBM$*o(Jpf;Vu16^fFqN(Q9gL~f2sGfYp&&gVt?3O+fB zBC;c03TP5)?q3Wa|1Zb-HRpC|b0VZ> z=+Sk)jVEyL7Iuyf^m2*nC4f^2ydqL>^Zk{Cnr;n0YO~|`q$3{q&V}gTo`#8w0_E?)^3-frUB5ppAVtwnaAcg|c4L7{qL3h&> z3dma?-|^EgL(*YwJ}8InNs0}%kJVuQYJk3xfapi6Ba8ay6w}KG<97$+7YF6oiVa7* zii>KP3L#{pI>u$m1Oeo}lIfOs6eD=nPuV6{* z;Daa0#3RY46v?p^$#?D44^QR#9|@lDMXd4A67mGTT|TgDArYB^mSlJFS38948sa3% z2QAV`cvlp#|5`N*Xt3eXyh)bIGCjATc$kNnPbqmGUStDrTm#-GK3^*b!Z$4%KW6Ih zd}D@F$#36kCJbJb6&yM+E^Oo3u0weki9ru;cuNn#zWl)&3TWv|ZEOaF_VR&mtI3t+ z&Y(QUMvTF$WF7vyuT>Qfe?;_*(KvZFE!$99!kTkDBcV|T>|I+Ngm~oPoQ`Gfb_z>)57!1n{e)mSU{b(-QPVvO{k30 zpM=4WATvA|S1`EUTuyWGAwlARp~p*AkW~iel9nP;IM3Y!gNK{$YkyQ>d}8T%wp(9W z1l!ny?GL~@wbQ>UIh?=wE&64g!NoyN^Pf(}^6EE&Q=r+$o02-iVQb*ov2L)2i`Sq8 z-{~i%Q)@>Y)3B}=si(RxA5qwPxbMR-dp0=g^2CYF9RvPpj;|eXi$u3CyX;_gPd9vQMd!TFL^JpPW`qi44)SMy;WBTS|1ZoR zsl@RB`PwLcjT*9q~^(gJl~$ zP~^nzBj-!a$dS|_#Z1+wv61d2g<-{(615QU%XR?DPj0r)xhgsC))j;VitH_T7n$P_ z_}MW5_<149H{dtz5cqdWyAS{InKZTd{oS8ZW_lq&^c-!5i*~;;_xICYGyHaMRzi1^ z8G8@&juGYEV0XSU(`XqkO6=@Qtne-T=9@3Dt9Z-$Rln>bXSgA9=D{s>5p#VbtFjw|nkq&UF&l8;a;2)hglWr=6Qw zWfRvt#n^zIf?M%vWRPWFcfHrj^4Za4BgIv?r@wO_eA=YacF0{S#d0z67^8Grmu&j0^Dg z^F1qmQZDfCa2+gL<~hHl^z_0{J!oGBw#$K62%k%#$|pe{O4y~%FkzWG|C)E6UJ~}` z7JU`K`=%iSk;T-ivB{C|%pwTraTK;u1E|o=o52*Sz=PueZA-bXsEN!UoZmL7yiBXjJwg zoi64(Qg&Z5cYqmmO-~9BRd-`hr`nbs=0^if#su$&Vp#Wq6shY6w7EK0U65z959Yf7 zMBTEi$T-^fG%@zJ;Gv0mvdRqcd>Z>92hdV-2m=OOjo3MgZ=CNUamfe&3-wS@pmq_I=zq`bU6)a4e5WeXac9LwN&c+ot3Pwc3Y>`c8}|V&&wwzA0(Tsu_ou z%SBxrq#_){49uo9!wm8#wdsQh<@j>dklG^|c=cbg!_#i7G z{`^hB$R=k`4cjdAPbq2l666b49vFQA{l=|}bz#Pkd>E1CrpI`>baw{WBN?V(??7CNTAbB0UqA^*U)pOW2(UTG5 z?#aiez&(&kGSU3k+|yc4z>Hc1PlHT097fw)rGosHpQ<_2Txot{Yw?j^z(B7GCa;i& z5PYC#OAHst$0y~oebJSac}k!E0fdzPFs+IMbK$JYtH>s&jNQTIx7UhX_ekR8dJEIb zl*1OrU+@_}>RJ?S-o?!AF(MLC4*Td<*VRhDcnn$O-v%|3u?jRlb>Rqnkj9!k&B8u? z80{+ZO2Q2$ar#MwC3*UfDeqPh*`%@D#Ufb37CgQEkBP@W6CskykJYtb&Om9+Xy}$ZtN|%Nu(MI^wQC>gXy;D^d|e?wU(& zZCBG5wrz28y>5L6!7pwAXs1Wi$h2Ml)A|A_qBFSqUx(z!*xum0lMdZ9M1&f@v5Zov zW6CWh(&~%I{H(=N+sKuvdD_%w9s!Khqq0&dY)|$X=&gf}fKoF9 zY``gn1y;IKJs|!<>7g9Nxc25{+9|D2Nb%s`foCaBZEuP)#Prl_$z{30pM$s}IXVe} zKP9kWE>OonY!Fhwxr)5Q?nVAc+Ja%aa#t03lO6f*`}F8Ga6l2^g1f{W$hHV%xe5p| z8;qL%*C&EI6UtB50;d5Jjz+|q~uH{pN=D>U<(#!Nq zw;+P8^T4!>M&I=4NxWi7NOtq$e7}{ zA%jj5|3Gugg5fLW2l&u&j^`%b?<}}}zdEz{fcta#O}fx_P@0n@C_N8UzjVX*e7pfb z;n(YUuCep^{&4CX8Q7f8QAfDo_Tz+y?v%ykv;HOo?%25mN?L@(7+;}gMV^it+p|+U z{(GK!n&DJdbA;nqo_%2THwf3U95D3o@KQQzb_c@#;$eg}Ra(zIzZB=31WdUli^m0D z!#Zwmy@3%P|9Cnfxb!)Mf4;t35UX9~KenM1Y^69-`m_o7vi*V`WF_#^*gl~nweZ#d z4v-=I$QulhS$>n7$`$D)GPS1|vChy)VYm2u2 zt!6q2^IJCeA75MzY6noHewlgPg<+#A4DXMo#P$Q*(xdAD6fj00FrDO2>)eeeXS#Cb znbVkZC7~Q29TWR}3I4@F=e~Yj4qQ^jkA*H3@verL4Bz$dC`1SeZZQ0p3O`exwJ0c4 z&7#8!nb=2zUOfyD)|!j|C|-Lq;wJPH=oE#AH5DEf2`bYvGFJq z+IF_=;Cyed=;0+)77x1Ge$U-mnM9?fNBOG4XcCmO9`rXvjBUO8xEMY=vDKo9tx z^ z=o8Hp^J7f7HceNWxiO_E=VP_SkN99zMP{e=W@^UYCf%Ah|5;pfrOL-&x>z-eqep0< zCAhIQxw&QYqq~%2QYQG8waOE$RKTE$mF-$S4~YohL;;8Y;0dF`g8=EW@pCW1Kv2Aa z8Zuu)#v&JwZ68SPDy}j+SrG6SdTte>^pJBvS!|2-&XtHyA8CcP>r%t6ubYK8igc+A zKwpHBjz6_$3%Tqu^j>1ZG|bUB2o-jx3(%) zMeuhr1M+&9lf*trNKR%xBS|^!m2~@iVNf6h@qB_%-QV76oTcK~JbFYkAQNqD8!;m? z4aCos7~qa+r+l3p8a@Si!yykuCgr_0{9@;H`&q?+&A-mWzw`%Zjt>2+p=HQ=I@Q@M zz{8>K-ooS;5E#h45|nqKZ}h9E6V6p$%ydxnR>+|!AP2Zsh?&v2(24hRzv!+pr4cSy zUR;P8PsH;<-k!KT{A~0UrXZN4=G3>(fD50AfYi)YYlS!*2Jqy~HEEC;v+uW%#>l zi}n({;S|ItZROZ)8qVlAI$q95aeXiu)619WxUGY!EQKN25V$XxKo+Z)oRdzDwpbB5 z;!uUhoLU)EA8hGXOWZMz-c{m0EYf>0{MQ~{Ctv3FJHPIf`zA(-hqThjshqpxl|%;PsMNTCa8GZU9A{mpQwz*ZK{`Izo)9 zu5uMenWi*R(Cq&c3KsV@goMo=0^=X=iRr`N^T~d^FKT{ityLcMdCh2^Ec93K=bdNY zDCH8cI6MZ0gw0#X{%r#6G2aNTh)43XsC7y3Vhp0yf7=nC28R-M6&C$VDTWt#lT(~< zlkrq3=745&vo}4RdPy&(PUN#^{@7}p){y+b%{j!FM|b$$e{PBQb#1=%RO%P7XVs!O zrk~Y-dtrZ*H2hD3lR{S{?1YBh2D9>|*v*KsW3RUPWcx#H#lx7_3`bpBxbu$?!o z6^&~bbvX&K)S=j?jT*qW#JIE8MO{KL7kc}K@f(TVFi*goMX=AM#2IxK80g#U7$v`p zoj$8m)b$mOY8ngC|M*injwYM19DLrh3J!Pc--8Hg5B!RKx+ezW+|9RV3pg->WE*Bu zIJUs zY`uNQx$m$H5TQmht0#)&lD&XO*MO9@sZ_2*I8X&z(ZbrOlc8x5XS$P#e7}DB(ZXYFpH4!oqgmYz1oBAM| zSb+B|gDX;?PtW!MYEF%KRm7i*_3Kc47M={os&*Sm^W?@%O`cI>=X+G=7S-W)Ek{G7 z02l1;g$t|w5n-!v|4XZP|90I_BEK*;C!_JXIYe=_IRoBsZrd6&{1qpIxZf*;@+#M^t+vzqV=@Y4_$`OoqZ@_-2IC^L{$NpkDJ#N@JMvU_ zwR8ye+O5&qJ04$0mT{*l}rkZzj8vEMduL;DLiI z*g`BR7RG=$u#%Hr660_kbWL~0N7lPaQ$g|G9*U0xD6YOTC~Z|ArLok+jks3kftWjQ z@InRx-eHs-^(VWROE$sU$-sRx}hikdLCOt5JQ&^iW7wk#n(mI&{ z$0(ol&d)>NcOzKpZf2PjYV*(H^ka4*T3C_SQ~DLg?Q!~r7Feoo?OTvY-9#bgSHknI z%KM>$O^6Y=rL*rfE%SW;1puRxSt1SLNI9KV{AmCUy}7YOKJGmJJHY6N7nCzIrKv90 zKX@g5LC-!ZWAV792Lu0B1bjfd^{BYR-;7r<6Qm)MGaSo%f?(t)E;GPC{@_NxrZT9w zzU+4_pquz61T|cDv2H8cDuP^$VReF0OmeL(JA?CQg*7o9APg?K6`QsyGPMeSJw zS+}ZIv9jKh7DWr`S1av2CQrMszk0Hko2{`p?Rn+7>c8SHCq(j71fS6MUV(>nUpq-~ zNO{a2wy0Xg%G=f^BKXuiB=qkI@4gN5>3Cem-7-&zHU@OVP4g$Ist9nCC%L$kZF>Z9 zm!2%di3|XBAtz`GF>RVu2jDW5m^MP~wUTU2r~Lr+fk}=evtVry@?!#CT4ga~nyMAB z7z;GN4gmv$A6rJc_~rkNwEdjy;n(+0jj*pe86o=(b`vnu)Spu)aZ5s%0{KcW`P9fj z4M*#hcb&YjrGbk=&n^Ikg|(rL?Vfqt-ky}uG_4zN2$< zSoIjK!CVo^=SSL6ZXA7x3<~Yb-f&zKBy0SFD|4k> zCa|`Q2^U#gK)adBSy;T1{8AmSU+9&N_jAfB^%Zu1YHq}llA_Z=sHI6kK!}Wv?v&B zpb#W$^b4(Y1g!UP;6TMipqi8H6C&Gx0wV^md=G7|_<53b!B}@a8Y4Mhghj&s+#yL% zEOlhQpQSPumYjKHJhT|?IM1($ z%J~BFzKIeVLMS1Wl-HDl`7wTDz86qiQv}cq$Ez*l{#wI$9yyX_na7Rchlcm~-v?d3Am(c{LSX@yjR@+=mak!8 zQHxuu|0>B=E^|REHs)CsF2^Ed6!1>NMK2UT$<}h4tJ;Z_tPbbnFsAMqB=YL-{x#(0 zEpG|}Rw+LDS2+@uYORxt^BVDs1b0N~RkNj~FINjbeT4^XeE@?9_tS*39xq+fw2V2; z8z!=wF851|hkg8imcK%Si0Lsu@KkeJ6u6^A880MrE<(`O~( z@C_eV4qY+$&uJM}G3{&m%NNRkQb>VrSF{=xS}b@<&A~ukcI*sog9u>8j$mKbVOgc{W=6i%R`hw1)$JF%iaLHnHFGI(fPe@l+II zINe%itZTRM^>C>x@1@$Pb$tJ|PbePIww9ONvgUZvXJnaY6HmU&KxF1eS=XCavb7g_ z5;GJ`V?#PL=Jkeb)~~irkozvxvm(XUtZ%#sFb>L0Q7i$x} zjWb~Wp7!F`+oDY--l{@3t5_mL?UC5C)L0D1*u#w81qy^0QlW8%eUxr;QST>04`b#- zXWZNCg0%-Gt;|8KOV#xab?A?aJoV16wnJ;hyOZf9L|NJ>GS!KO>~wj9YM+)S+A%x3 z_r11)s@iuG!^0!x3*n_A&OgH*j6DTV@IbD?2JbSWgPy}&e*^x7kEyv zsabvX4&&)9wsBhTC(xc{?ENThb>fStO5mT8OJC9P#>@vri@%k&8BL?b zwP03%l}LBbBwH$@N);Qm8K7`~Gm-iH$Oh+@ejbSAOr~O1R(4#aRiM`PH8VHc_Ia7b zWyyv;X`v<&f2XpDfSX^*>TJJ%<7I};s*mcO%JHcA%mO~)Rl|L=-!PMKsfGHd=QKko zyFa9LUdbV)GNNp0BeEw(!iZAT1)V+UdC5&;R99%a8zt+DZJ+-n<3vR{fIe{{|Jyhnc;IsZlb-&?w;hTRpU0ve&Ss_kDkWy_MTP%RNT&=gy;^lk zyI8qfkPeNneO<3!>>`qoG1Z!p{|3STWigQYvn+jD(7q9t-WAkV>p3O8xcvTQE`Nmj zcAUzDg_VVNT?b1>=0(Y1`#^~SEN^HTp5FM^b+}32gl(ejvqKTVQ89fdk*3`A%bHWJ zqDNXHEq$U_V+?XTceiYaQm8=go0Zx|n}%1A9};e|OzJa19AQa2IxSbce!Kl8XMctW zQ<>hJ(c=6fy%t#Qzinb`89A=;d|yJUK9>LL$6(eU?4%`#)sbe^KAVsHOhO(DOW|Rv z^)i{rdMb-ToJZNbPKw#kdt}zOR#oLrjpj`2%yh5+YDFHs+KTpx{Z2>X!(={ctgQ_d zRi_*EP zzbfZ1Hv=LGqM;iXDfF>*RU4GDpIFvKWJ81#pOVILlqmke^$k1GgliUNUN)V#B+j+v zeAuEpPOOVHp4iiMMLYf%p``1!Kl)dOW1u`9WFZ+RR!Vx@?tQ)jhk<6SuU|6o$u7Y0 zZJx$#pAL)|+GN~L8;iT$O*S65JEJ|&Q_Ag1 zv-lKkRnM6f+9H^Ya%|TD=8}{m`!4wRQh3uAddBexzSpK5>IG&D5T_GO<(Ua~T1-npr&t92bVPiZDY3|ugB6>Tuk6;(nRB#H^lY_kwRU9v z4T*I}ffqaHNWqKQGwY{cpl(J-Q;@C%57P%3o8NwU*nLjet$@yU%2-n;M%;>&z)ZHpTgK$*xP zmrN|dC(|Di!y^~pB4Hvr_Uy8@9=a0&;U;#JH^w%KBb(K2Z7=UH>W7mV6nz?xCSCPa zc9(CibaFERkCA8dDfT3~qPo5(g1jC|GbtWRAm#Zm>jd+cWoPv=gUq8LG(x1JH-?L| z(2g15sJmswKq);;o6PV#VFR(KN*e48tXJx=G-6$0AtICgdmah8w3zMB+v(KQ#cW?> zxb;{A7%F`)WFu98!KG&$GD8QlmG_96PV1YB;k)9N`@t~qeU9(Ic&ovxX1i)C){*(E z$zA8oCKWA|vD7!UvYH%I;t^rH_ihF@k!>Pkx*>;RPokm?c(ULU8Qw=<66{aqavw!iH@}$jRHEHqA%uJ|Ms$|fVoiIWH_=o;{S$npF zCEEf1lf|Eis{cb8HZadADT-_W!Z{~w{W6L8Iz?!1ip;#L1m)eDFsp6wPE%03p~Q}L zCQcZI6Fu~w|FC<10Bb3q$fnEa1`*w#SQet9eTw3xiw44qf?4-sHf3B8#H*@^rL8RO zof1dxe6{Sn5@MfEU1&mg>+Lna`e-xp%UBP++sg07M{SD6U85U{pL5BYMSJJxrI7^Z`}h|bu4}Xg|@hP;WM?g#bq21iQ&-!<-u-z%!f?r_CL__= zNWGFnsdr{ykSgynh$jwy9~S(30sF$#OW+&$6Hj7@Wm*^}|6Xm0fJD{YYh&=x%t&Lu!jR%unWZG+k$KwIiVX(! zQiHCxG}tBN^; zZ|?4wno=#wjL8@lts*d+3yrs}gv;Eu^}%QVf0IRG9$gVYAB!{2-pt*4Nv!BqGjxh9VNjd;6sQ@b=#i70tPjDDS#KQ$ z%p~V9OD*5$1Vs=%>*jek7Y#!-cb4T<2%WDJ^8eRD@&`23I~x3xz4I86kglPfs*XA; zbP3S!ra5z~*0egdtETBBG%$UKZ<<<-+qt2uGiXtBJpUu1#%Or8^}U~uGi9iNq(2Ku zI3ONRlg{H}!Lqf<^N=&ve4Bgtm#d;|nv|2mG^bZ<4R36S{$SP6=Rm1g>uk*?p4x{> z&tlcaxl38hlJ13JndM!%)>bbzA7&ECml57R-santw59i~h8o-`N{Mzivs#~;Ns5C- zS20{pU%$?iwgGXxNM6rh(X2v zky45|-&OFqO088QX_{-dttH2I1QXqD>nJYMYg*|FJsWIRcncY;<^q^{QF*EM{=ATg zs9bK3L+dSTs>fDi$Qr%*pb14Llp^oDR-JB%np;|WnM?WE>|)tn@YlmK`%%d_OWtMC zisyS6ZBC8hN+{aAHCZKz-NZl2?9i`o3Ny~d1Tjix{S8)PQBk~BVYj9{ znYAw78*HfrsTh0ZHDtc|-IPw4&L2Br8a&d8DFRM~+zNB$*xzZqc}#ObJ1pNnOnwg0 zXb{ytBIPrp%@&*_-$)IgYnxfB%OP$ZXkPIAw)FPQo$!T`KB=?hM$<^TUCYUN1!vMm z1xjkkMhc_y>+WaC!oPvT7P}|vUI}%XE9Pn3yzY!Td}=fOYLc9vReY}I|8?=tHy$43 zY%3*DE3LxJ?B4-Ix=j-_!e;mYNU;4)sXv&d*wypghGRn0ZA!05?DlNLBdMu$`M;g% zd5~A+RX?=F@|0Aow-FE2+q+<6pR^!oc^vv^R#-&TB^^(~<1U$CieBMJ90ZbAv7$*J zHEjG`dsMY{%slzkjn9{0elNy57|%)a$YV`)qXu76zq<815kh9=y^Nl3l_dcz&-G%s zhxL_kZ08S~rd9*voyZj9&sn{$%5U}kL*XZddnr3(cx}vYnLNQWGEle9^Hj$CepBL! z_`8Jo!tKfZXBO;@wQ7g2VHf?PdY;px|2n=iH_Gtlli{X}(=x!oUnQu9Po3%Ivirk=n(QU8+!IZicDltgJ}r5^4oV~6av>MXVF9wj}dnr^k_@Sion(3&w;df8d z_cC}}l@_>zRNHifM7C+WoSW%;lCIv*ALPdaOpTZ4jg!f<3)!j{ZtvGe^u=)`x4t@h zCJd)u&@s7`St{sD6)iHCpw)EQ|la8%oCEQ@@bQk8<)`ziagX`%v>f#8FM2gUti4fTbKj8 zKkwrgKXhF)`0}R*pYqqdmi-7YQDM2|Q&99uwzkH#Sj;mTYn)M#)!f6F${j3F`79`n zSf~shEvo@ZBdiw7R?Tk4_(yMbawkj)c|#rw{k+u+Dn86|f8)(KI<2e0mN%Q>E?p~O zVu|Ry%Is=`zX~aE$}d9HRG%yv0#?Xed=I6anW2K`&*E*4%FRi6|F9c^sswtazYX$q zti5ycH$74}5H~sIy+*>5Ro*V168*i&5_D5ywgnk=pn2wht84SM9lyj#DM$Of{}Uzk zs8ta}GBxn>!BGXF^KCDlx0%JZq+kZxQy-%0IqNIMW*1ay(Ia?9LbH2@?hX{bWGElH zAKrXXpF6ZqLb4ToDicpl&%+btjq#Rpm&N;r;AEC}90dr!^up2;7@8VX-Ey`*hXqG4 zNRT(kYUos;LSO!XQ(Hq19CklC>a+%BY$zs%6~@M3pReH#P&IXi{^u1V=2p|M`EIgY zTK;D2cZ8H!`tSDaoS(%dgUARSF?Ow9?i|8zUUB4vC&4T$O()q~GUI821^OKstaP@=^5&YNo?U@if+?pb?6O0IHUG?t zhO;u@IofPmx+D%((DxL+YQbkc*L?Pd^;WdI$-9^qESo=Y>KCN=f|T)jPZn(C7`!9v z#@l4!mlT$aFs-*U^<=#--Q}y6i#vZIDXU0w*OQ(ub8@__vF62t{|hhEL8&6Jtg@FY zJg&AXrzMc7wIfVR(uh4{Pn6YDL~&t@pP2H47h_FO#F%wY$u(kS7fe8uOiz*W_C&I* zYl%#)rNfPP(DbX^agOfxsr_B>Yvij~s}+q@4K=1MZ4KWe(q(K#8jnZh zX~=Dm%_1|W>fl)U?+rC!;|(=A&rKO{Q)J#mRMIOV3F0uivn1Kbsfx!U8%Ry;S7WrS z1SQMB%(ATK4$eb?^ofcTy-!Pzc$b|>wpi7Vw8?&%<0BuyjJTe$0z->LF!aC7Q1AJ! zVYQ-*R=mdl+BFSMVS6K0OXyUmeuh2IHpt>3HFj+=nQCv{VOwlPS?d{HNp9Ye((Wl) zM|CWbD4rDw*?iF(wuCRHIBxC{AN%>6GgIY8)+ZYn-(OY2 zR(V?$y?VvQUG;ZuR{I8>oGa=&Vm755Ss&pk1CJ1a^evrl zvtH6g7DrJdQ(z^fiIQo(o44HE?Vo;)dd+ev-jY8&f(98UF=gd4JE7*J2wK!uW%8J#?D>4#2 zsl4cECGxrCvtjOR_=NV@m3G#}32WA~ry@k#^-{fbcgS+`b7cX(!&hpt+KWIshaZtO z9c^3Kb+CT@zmqb*^jJ1Vl3zWI$3X7Zr}pA>$_487Pik-cjk@GylMp|pB_72k=u&#>ITfrLpJc(SDo!76waY{X6 zP%=FEl4I>Pb(8rJGCk#8Z!!ttEOJ?sI6z_*r*Yafs(AYu7?x~3UTx(1%3{r`dotRC ztX?B~qKuL!SH8athk`M&oH-DOKr=IoD{_Ya{^rb7B(~K%s^(4=9j!+T+)AFacwpoa ziSSHUAepVhd|Y>>eZuU{6woeK z2G3fYXGK1n0_`M5kyZ4}S-GB3yZ2h;DZyE$kG$>*-CR!ALoDy*`Hr|cG#ql#>a5zEcj%L^|>hRpBfeM!@r-m{v^35)7Tzllm z@lzdeiXlKoju)Fp3WvyWR`#87@E0B63xf3uv#aA72#X9owJj(uvN&7aBcCvds|V&T zAM)g-%1zC3p>t$198dF_*9kpo8aU0(!8%q{JtSF4^0y-w9T8Wzp}m^ zIWPjG2UE|NMs0RybhvW`h*{5j^?t>0icH|?sL??9LYH?jBDYpW1K)PK-K?^Wy)7r4 zFHqHqR1{RT8Xqljs_rNi{X%=}{0_5HR`y&gGEHdE3K1BUENb_fnwO@YuBq#3&H3=J zc0Sp(sySrhCBFRhIAlkk^hYg{mh|Nr^$4PQx*k^EO;tIYM4!?{Pp$*T2dPX^jl~x; z6SJm6bIf5eFJ7c|TXt?i`ccsC6qMiQ`3K~X_zpd zS_Uj!Db_~qzAE~Nwna4!1Yv9uKm7Zf|C2_b6^ZYuS_D}_zGRke?(>2THNI6Vu`a>c zWyL(+fkKLX*;$ZLXY;xs9;qr{<{BFqw==zk3_q1!JdKyAVxalz$aITIZxH~sPFZeG zMje~2ZyCmyi#!c&*ou1aIdQ`l4ZKw)lv;*8Q2Wrm9FjlCzhL!M^)<=W5??0q;xlA9 zqqfeGp?9w9WYjAK=|GW%QV~^Dlvq_ILSxNN8`TKB_|7s$_%#WKayquq$u<5M=(ARe zSq^8BDP7V_9t-rm8lis&|;{l^l2(vn}Et#{ZPx z^{D2^J7Ng@g@{|$&-(Mt|G8T1O5qc!Jxum}v8JkKXP3D>bwh@ReBiLY>_^iBGA6Q5 zwZBZbLX*U|`4D1vc9U&I-K(}bRojAU9!+ic2H9FUDrh>p0;+|oX}Xo-JnUyRZqsh0 zUGPxZ-B~+l0pRb<}EZ5Gc&rQ1{-CwvGQDSfv0 z<-q>-rjg zUy?Z+^gmsZz*+bXACv?N$zqS(8(D}|y?oV_Wu9rL&T^27ctzoHsKXKupPq$#kPpCX z%Pg5}G%mTvxv3sik(c2zh0RdxXhl9i$r1O9T(824lUt>N=0ZGKKN+RVGOuEWP1aTu zRi4M!TaZtl;ExH#P^Lv$+_k9jpLV;oP9>C%fGsj1uc&*Hp<$de%Y1IF>ldF;LaXjH zlb3E>5IWVA6&d23;}OB@Z2pKq@;+Xy&@=MP*Y!o-GK#S@?4IEP=_tCtA>CJ`+7{zq zjY*Aol+@h%@xSuD{;*v?NNzGF)?wX?OMB9a8r3CyZMg936GxTt^7)oMH1d%vi>}7s z{P!cSW1J(WC2-Owtf5*_<;KYFE~>Wc8Cqo4%hYN|idYlxRW2xs$#jH`dV1GtcHWUY z7rAge!52>uOUXRKKYB&}d||7zWGZ{L(K?CHSHwMJr|Z03bUP`}7-xBdswAd8Z>B)O zR3Dcb_YV;hp)Dh_#Z~vbxA;`7W>;@A;)ro;as8!ZYOXKzsIA9yMU1x@d6~4Vta<-& z5AO3ce-ApKidIYEB-%EQ(1%Ec7gH@G{)PhZM34}b{U!EW#G1xOf6A>t?0LlWO}=G& z2maoT8`R^ewsDV2ki*kinQK(mL^Amiu?YDOCGMO@FSA~CShkX68C z2S&*P?>x1LY~vRyGMbuQEVIyxb{9oFp|DPiSp6Kmi0a5#77^M-R^>VtEH?!&%CvZS z(2dnC?i8_u|QqzfUL5LqP)f^X{nlYuuNx*Xt0$BqCMmkS=Gxfiw53Z z)Or`a>8=qQXdAr9`#6Oe$@zlA4_ayUC~HAb(6vuKp;hR#MzIpdAzC8ty|asUYwRAC zH@pw|?UxMme8imMFF&K=EL%_d$9`^i{#Z3Sfo*v#Zj7HSre6h?6G+FGTtud+B$?s5$q*+>e%Ji1yl1kWyqhiM?uRyLvu(NyvMBt?b(iE`^nTJ=@>#4I)Q(5_{ zRo-vIMboq;YfsTdEJF>$Pt&^~>Cu@)9Wz?(X=%&z|E%Gn+%K`C9lWh6)Qmqd?pEGy2GQhieVdhT8X^_R(%NE64 zs8G^oaQJ5u)bT97ph9)lk<% zHej#@p#!e(i0tjK^_R@gH6~3Ce|ttId3OClH>^=Lo>~UASzjM9FHZLpR^JG%<|&Bu z_Q*mBo0j*AzO~?OsOT)KnArT3y%8BKVQ&v(HR1|JI5HapVShwMy<9A{*d;tiS<@xn zBh2wB8m6~%Jx+Q4k&kBuM%$ZqsDaGGn$)D&!5fsP1xkn;A%C)4L(_)bxu`dhtH7(8 zdT5S_d1{)NP_9p1qF1aM*&P{2L_TH6$V{6%sVqLYlFIsOG-|9TH6oDb2fz5{|I{<$ z+re58+%j)i_9MnEM#dhkx&&Lr1*J{nipZY$l4`!kM&I7v{yYBmmfhPH^%t=_M+OdS zMd#F9=6*?2Xzr5MtJ9>Nj@&tO|l4tCsaopQ~2eK^d<6(b)$Mxmy zzeHnt#27=$SHA*-u)?2YFzP(4y0NFf<@&NNa%9LrGrf_7yCz-1WD+wX(5T>-kVpD@ z83#3wIchFK59Q}0xNW6)mdhA^vUeW#S(ygn;ZeaS1~TnWGc>9gP8P+<|Ggr|p!3Ap z(js_|i0NHyo8TM^e{*?x^%eEhqDjxl2it>l;P1a~|Lcl7q!o1d9d&auR8JNo-qHQT z$Rt;7mw#y8ODg&kZi*?{2J$pyyk{6_7F#Qis11SVYOq@N$k!Dskn>gsgz+J7*3)`xt zUzKH1W%kw-^&Nc1!TaN3wNyU%#W(+_Y2%f2Oie7zB)5Fpu4^6MApRw4Ek#S@is#6C z$DdPhkrh>|l@3&la8=9XsoHXc_|)iq3nrPW%|?5f;}<43=Oi`G3HNETi={W4Su@Ry zgC)b1=ScD^kH`aA(>5}7TrR;)KjTaq_8SA+27*#m5+7WK=I$QEEz zjlgYXU%$L@bz6b)Idl5&AOGv0pZY=Z6WFvSj)kpNaNrcpHcGHZ!iCEz_9FAVyh9VP zDPHo>u04GD702F0Yc(@(vMZ;3E(RX8!&wez)Ss#-mxGkmZsZa5Uo4ix&T{f42hZpg z&yKN8Wo5pCPl-pWBFWa z1l}SKab_?U!mu*lm8{2lPLTnQmH}^VR->KOsbzT=Sq5M}c=u;yTkVnMLI#VPb>{u4 zUL=pe=&jx|S9PqLQ);~zO{GM2fl-XUuTkhTBHT6pCqn}V$}t!oiiwLGFpWeffm`9c_qruUsm ze+Q?Zd3T5~ciwt;e29#_aT&44s@jmMU1QZeY1*P|_6<3`Z<%tBh>Ea$;GqrL)wKC& zJ!-n6@)Q;@*n6+ga9DPKL{zXPc>*M zTA|c=e(2Ag|MRwMzwsk!4Bz%=;2@AVas(f&IAl~XUFr_r>*?nDDN|Jb+arZ-Hu$#d z{i;JuTIZ&OQM2vrr54ztH3X6s8BqEn&UqTK3mGHk;}A`HL$x6IMHXUt1p|iJC#F}1 zEYK0PDu)QL=u-}VF!Hq^GQ<0QM_s^+?Y(}zS(6(qxb2^eYkDG|svrD|$Z+HD2TG+K zVLCs#?yN639p1&M0=!_j$$M- zwdaQ?bNvdRH%FdlSHWSuO&AEXj_w&|owdd;S}c?lJgz;Wf9uLx7uVoe7-7Y!%zC{e zfAybl{!dbsmP&AaSfAxbWp_KJh^4#*v51Tne6GggtLAcv4Cja&s3PxjpR`JuULo69 zG*wMO!NOW(5Y>nG3m>mK!`CeshWWfWWahi(H}Q!AfmKJ`+fj8X1G^8F{KIv&tTs=k^i3NsAh#qSH^oURBg6 z75-z9wOg#)^XbAvXP36fShItOYiVIqwRD*}EL-4+_1P*U=b=1UiL7fi)QNYQ4pysb zmt4adVO?mATw3tvshoYP9Lypr-TtMe)3mIt+fl##46ktMWQi=|cwe9Tmn-z=oBz`w z=}q0iTw>*z;ofwg`#Wk_b)J%$*?8C9YzmKrtDO$0!6=uMNcVa)ZJ zHR9dDYYM$BxO1EL+jJ0UR=N3lmrkk}D%i0K@2|)uE8>$y6->eVF?amP^E880f2fXZ z>S`P2>elwi+~Z@8h>FN~XW<%?pxY@~&(~OxXdoKUNQgPMVJk`6 zSW_Zt3F~-z^Y>M6WzA8tjF+rIbCwe|{X6mYhyaKIUZR(JUKDK-iyY%=KFVm&5ow@K5Yx#P=Jga?fiE;GUlvjX#NpO`?R;-m2H&#(RS&Ht(W!*v7Y z$LaLo+hXreqGVTi=v#{XF0p#6wjX+XF@1s^x6eUM3d}J5~P7*Xe9O%RKI!)H|_WewgcZ@0eqxws1&_V1=z=Q@HpN|uY3WLc}Z z{EoPj`o{wY{sVHS*0>!JnPDl({Y$!aWT;TyA}?qJdKmcoKX?95i=0Wj^C33!kgM>d znN@vFFq1cNS8?E?(Pn+f;@d z<&oCN$~ehO^fg9F^b1`iR2s-;s^ztFbGvJT!JvqsKm_KVX( zSaV-)Th<*Wd*0k4gIBdqV7y)tTk$X1pf8UH~(j@?c$2ixBV5~4J3#c)@3-W zGcA6lvXCpD^ZE?7F&rSUwuYm!MO<1VuKgV>+!57hRlYY7vutOSr~TmH;lfHixQs1YQR~qs78dC$ku3=%t;<@ z+GIagPbWKNdip9#U?|r^j+WiwR0UAX@h*FOLD{2H)S` zG5#`0Re#TA$*N^N*CcGJgB-<}P4>7J(Otfe?l3JfQur@(R6AeH3NOP@w~-6RmodCu zk)^qNiX7EdBXUvX(!3*=8|wFptcHjm{&VyHIG*&CNZ61P4vP6&Vg*|od$P(@@D+&p zT<5K~m_Tr$)aMp{^!ly9E+1Bat|m*)=d@bcsKNT;yYHwhmS+_esVTU;*e9<~_U5_= zzHK&_r+sT5VLzzqEhmo6SMU+onamj#$|Wit ztUns9Gekv@a%c4O~FX1=-ki2f#`^pPK>6Iqj++Rk9` zw&tiUoy$+W5w?>!29B?}r?3oFChoDSM4t|tFoNfe|FT0i#l4Gs-Rabt_13)_)w||z zaE?XhlJ;z6=N0ytaq`5rXT%TxsdxNYmV!7yihdBU9U|a8rsxa9>rBZV@=(U-SLEx8 zWr+q?nTNGQ@jlF!B3h3Rmw4d9_OFw_FVk2{xv~Y9a;zI`|D7wISSvfE1SebY7@RSx zVtP?)CPOUhV(^fsJ#x|I)x2>jyzP2$y{u-cKE$T<(rP+bH7$*Ib0@uGWrohbR37cD zraf4QVPUZ@J)V(wDsqd%|F!O6>RaHR>xg>KA_H)~&9z6!0hsfSMK=P$=W*k3jx1%? zMU$7_whxxK?)DU&!>^uYsOHQQe?*@7Beb2r#s=22BZWWmw2o;=nUAQW5%Jig;s7FC z$xerB^gB?saeVkQ|7o}X-ecvztcOrMQT;9&8JsXJ*u`a5>qs)kf$uD{t_DvOk4ZH| zlHHor5vS{83CmCG5%CDS(JT%w5fuuuG57b zIpvB9M0GAu>?t>T=y&A^sU)4&xK)l{EE=E0Sdz+`#EQ;G?9tFbT&DFC2WC6rPH!@M zlTLZ_-K|-sp>W07(lCuTJA1>bw?kBSSW<%FCie4O$JjOzX$&S$^Sz3@b}PIL+ak7K z;Tm<@KJlM#{?CQQ;?jz~sj}IF+v*Xs7@kssA1UnBz*WV3@Ofq#?|B3hBMc5}N`<*k zPb8w{a3xHYkn46By^SxUqe^t^RGCINp_VkYYkUi?c4z`?KhKAsftOMqvm)WjzIpN4kSRyn3 zF8h_a=D>^1HFXW;B~tW?x-He6CF-_t$P9Dp9o1Xv{i|%5sJpQ%HJk}ePIU@f`d~Bb zPc+}1Juc8>@qt%xN3f<;Oy?Iym*^I>#f}g-wP-fmqu~s1HEPm%D;WQh3Yt{vC;oi* z%(^1(2M5H@SzzDA%q@?Iy70*GoD}SK72i?SOQP1O)>L^X9@t(i>fi`^2KR;etCehq z5zJMWwG+NWATO#vO0XgX%pXomLsGbCd!(^7ex%Q61u@YBhR%=u$MFh$sH($R7 zSw739GNp?wVWpT0)jH>aTZ7+JbHo`Qs&As7omsp`#;+V9anADKd!`cn8~@z=KdKvw z=tQ-5SAF{Cx*<<>4?GdDyD5jXuS+gqeU zTr@=nNMz%v5}JFZ9g`+MX-LML!@io%;=03#(Bg9|A`;X6qP^j{1gqzZcNsbPVhHN) z(-xWPk(a`b^^O|W?j-X(1%v1r74+ty4yQQ>N20j&u$xb>B=qN-|5J2PtbF|Tj6QDI zQN(+bOok*(iRgU}(`(BYk+tWlh^b zM%3N2z2%e7C3)CGBbGwv`Iy6~stB%8{qf+JJ!vD}n8f=|Y7LU?xH*s_A;ElZe4fF> zW(Us^@qS14xbZnd%7poF9WN;+S@cnutIFfw{Fndo|NZ;_{eS-P-~N~X_<#QWFaP%c z`gi~C?|=LE|N1}wkH7!@zx;>)cmDIg{r&sD{@?%YfBg4<`A`4p-#nI%P4V2y(z-vM zyCeV4i%&Yu#_sPYxj8cLYJ>J(@)D;!$jhh8kCw~2>E^TP*mAws8a1U)=Pdrc(60-Q zb>Yak>^f7r?%F@LhsrUi@P^&~l6|$woVfJeyx8IwHnfWcdBKS<^+K22uPdt8a1dYC z&6lga@Dp9SJ6yOgU;jT#Tf#={J1!PJci77tPuKty?!w{!RVhhDGImTHE~2!%d~_OHb=7tMwI~-hN%9 z|MRr))Db*x!ua+_D$jzuDhE#~Ob7d0zjcyXvba z4hrsqbMmX&_2t!kaXo$cGha2_uQlasb@-}ld~qgxDFJ_{{D};zzy?B?fJHqRlbP8Z>XAYpcyv;p*7A|eoo?P+paFihj`h8|SfXX9t@tr#`GJMO*uTijzbJO<0_8Hf6g}1j`Ms#>-~IMLlD+Jk z{oTIz7yG;PcTl4{QTO`~hW|gvRh0kAK3M=8t>srqs%yeYlo|(@^5rIL^SWhSZcx=X zTq$MUSHHFECL+IyL~qu&8?ExPzZ0&XrmV520#fpZTePhE*@d8dexqJ;!ytImqkJpp zVV~ap1lEjW7`E(=su{aguu+!v6nyOeYaNPFURq z+#0xXOZe?J=hq1fZ(35Og=#MkY^cF4WCCG)rOJt1w95%(LQ1@$`%2`Y;*^}< z&5w~f4Kb9Kx|Hc76O)vCg0F^B{)7(hCI#0bB8EE*m&iptyFo`<)FW6EF}_U>43eku zGYwyx7<{{D=Z?$)NjhC`XI&1#E!3)oMgVb5I% z#O|T1`sCSnzkO4d%Gj@evIoZi&UDgL`b9x>q)6|9)3~ccSsC)Hb?y5qoGGcT?a!8mjO^!*fX5$CjoT={HU?kA-BTO!SSHS~JgUGJea0NF~jj7F{9WJ;W6iyN_(BPHDVkq#a7QtQl_D@L8a0{t8z9>fxB$_yNvU!DHeo6*13{8IAOz=B;{g{ zeHH#BmM>W;tk*yh0n#}0p(#7b>pUs9o@db7k%p8|*nP56n9;hp+p7V_LO?M>FMkh! z8K@>O=6lj0f1rscjctHf5>_cKy@2{&p^*s)w#7>5^%S83>-DYUzsa;Mhaq*`Bc2|h zGFgNd(p1FMA@ag>11BOGyyaTJFGC@9 zjbIjHu@wCyT@?D?Tckh~s?sPyC$#Yy>Yb40%~;8_Yl?~NHOWafo?&2md9UVtQh}uH0p-fr! zw@suR0NXZne4HNj36F_Pb0gkVZzML237QBZE4&*CeX5AuR^(dJq`3kF@)lCm+f*Cg z&!~I00P$`t-O@bqOC=IhxD;`3Dw3ITVhV7q&>cs#OH>s>lgJrsnQUZw8UdO}y(Bq# zQU^y2J@m+FZVI86GpTtz#j;3UgaGOkJVIO_Vp2`JEkfCv*dt0OTH_UcUivgyQ%Xa>AroBiNV5!tzl&2L6`v`5 z^Or*WqKFW{jFMSL%oy3A6aFOa{{k2QAdFPdA8BdLWg|0w3l#RX0aUEQ#48}Zm0!Pk zxA(vPwC?h(w!pnoPQ;I--O?;M5btl{d&!!}LqsHbHx+h!Cdaee?L&7C^}mn+M71G9*z%5bKkTb;f+Rz1atkEJ7>srkxP_peNa#s`=~s3O zCkU%nsZAg$+6|3lS{_1^QnvrKDJ5s<93$3)vS62nL)9MXmP>$_oBTo1Q^Q>(T|y0n zL?s}rvN9)R(eDJN6c3q z_G~cpt^>emx5RONE3kpUCL`r=2WSM&X$XGHis=+_LX8_z;s`<=yU6>mb$Zl?H#UK= z8e4-jIES|Mu;+u%d8A|?pqI!iA|OY+=<(m;@{yvRH)`6`G>k|7tj7G|K*e~l0Dc>^ z2Ewsnfq`p|{s$l$qR1_PvIXwb$|~00k{r)~>SaRSnX!Fft3XPTNJ|sVF?@*(qyv|QtJHnHJu9!w*xrv6ZK>_$A~TIFN&v>om1IIqIF7JEV?q1Cjg zhjet)gl@9vXXZt|qFt@!X&h*g{2);j=xN|Ox03(s< zokD>K*#Zn)aq0m!5aGN4Ya{Qn8wNLAjc;HT z2AbV;ZJ|t$ctPk6BHajt);*!!Q(R;DJrt>1N-v}Z7@s-dm}Cox}?B1LdXz_lUKl#fgpxP;F;qwlRPAPC2dfV ztLp?x`fHQ+Y>(()e+UCLJBOe$tuAR#2sueW%ePHe#osvMb;x8Q1B@7lduCHcxT7{~ zDRg{VNKWCrz}OID0_$!mlSt))*=&-Bkfd!9OpOU?{~RF7|BtZC5x-@zli#9w0kj|u zBd?H$6Sf1-7~e#)php1@UmnJQWEb!uZT=JVuIxI&AzK~}AZ^nXhIlISF_DVf&8J$z z1M?19bOcsB?;E5PK_wN?O;sI&HMyV~U)X?}#($w)BN-&kDImUb{-M*14Bteox5W!W z!Qp=`qK9W=oo&ckof3^(UdlKW)@fbeggO8E_kM~4@m)P+_>rd7C_PfmS#oO+dEhiU zss3p92&g8|@qi3N19*HR0{-S5sc{elKfV$9dizw3;~OD^?D=gE==*qpkpm9xK#c=a z=k3TcMSk=e0;}Y)#g*F4BGz-#eWX1z0?NCkC00}p5Oo8#+3@lf--Z`tEdvj0hsZso z)}ahKP$GmVCIH|Av@Aeb%@K{D>ZWEwU+@EI@2l`%*fwwHl|6{H18}weqLr>0zw)q8 zaD6RxTkgSIH*{f}a1WevON|VE$O+t4Ws5AAxO+KofyRY)3}xA-LIT_k(N?H38)~fG zZXAkB4bGb`Zxc@i80<&_x7&p9jw-ZuTTX71^NX@wuUBenvV5<1>UVqz84@JwO;-7& zyo>x$Kz)2XAeZth0<-5W$U}Z-#Tv22AWYe`}w7U(c&> zHlGFp`VK)vz}0fjp`d(y0~7UI&h1;aBvM40#7}7tciKBb+g4kv+ZLnL?75-TX&(y} z*d>5WVmcwr+|pMlDQ@aAk!87oAKyaN7}|}HEd$NoHG_oWAcD5{h+t}wKq?p_+_Lf# za@P$FX6VY*WJimKpoOhzvOwB1z&kf!6(n*KO-HPdaOxnqutkn~WRK*%BM{8n+@dFu zwMB+7hMHGo}*={P%u}CrI7Aq#60jZwVAr8-Aq0A|`v; z^0GXch|EUNFvODlhcq;Wni4U{Zuz`L7A^E&>IIS2M&~s}E;a7vZSQv@IUTunF-`=p zHx0P=)$~r=4TB+QO(T^EXc7va-c(bSc{l6?G~TscAQIX1?ZmCTa!D*a_rkJ0QS|B$3`d{CV{89+SK07WxA;h7-h%|FqJ{Z5~61oWlXd&Ho z70!m}G##LEYxBQNLp_ALA>~W!oaS*khfV!Dw7_hN&PYLlxJOVjQZEr9TB(^f2mwBZ zT2G{kBdmOisEV(xTwB6b%)8ra$OklSS(}I>O_$cb$c1m&1<=+ezHZjOBf031QGj`F zSoI}DL*E?3=dY7qTMS(_W_=GAnFhLl}@ogz3IG@2%_EoAme#a4A&GgnzYTiWP&j}d(fiT5*^BL9N8 z-X_gcJ_9iSztJl6;CY zZtTrTE5n$5F5$gUe)0S4jG(m(~EpifRyp7x;@P7|r9-gY- z)i}~r6(0;A0(`bY_-+~mB8IMQVGCEC z6h^$YG?KK;r?n(oraHr?3T1>0&p;qax;ia*ksRu1sdhVzw(FX?nK^84Mz&;T4}L2G zpdra5eN{6TpR(krrXvh3*mP{6Se)1Vt~&dS7YDWV}}XmaT!3n{3I=4Guvc7Gk!5L-zZ|N z8oNo#T3q90-VFLU#6f9MAEJP?*H*Htku<_DD14CgG1XFzm!h3@E=8 z$`_-A*=D`OTR<<%{xVa7J2URjm(_?qNy;FbCKbg*6vN?FS9)_Ay3otADV~@+W8CL zEOcr}Gj@X~Dyo_}{yM2kE+O*?0wi=3C?Z3bbos`^Os>rQCnynlEnX|k!@NaM6~(dK zhi`I#msmdSSEHXR z!gDKon7RLT68I!j`VFa0h%!=9O>3LB;?N|*x@;=xP?(0ch4AQ>u)mV6-*UHn+D%W_ zulp+eA+>0H;NO#YQjC&j(6ki-t~LES5|5=}a6SC)6WI~*k+LebXvQxg_?7?JG_x{$ z5f{72_=Uc5OFYN|MGE916kkcaPX(0(jg3;8K8V{jeg0*fzS@Tr+Frg6^UpFyP zlRs~&GYy4QLy@!zD zsJzDQuRl@|Duyi$u&TY*f(B7=k`+YW=*WIlMP<)K*-gZ~MamEYY|+CRavN2-0R=R^ zng5-K30Z_NuxbBqD?-%~lvi?!6ur9H|Td2J+h>mWEh@yO94VYZ~5sv zoX>sJ5!;@hA5r5w|5;yF*EnA@erxj2;ilyOYY(=Rb-m>W-xYkCv>2rG;_T`Pqw(fT9-R}C$+eQx7`LtSX3h3$V zg`j@AUei5*e5oUG+G1n~NNa{??(CtLsZZZ#Y|pa|`Pe3Hc2?7l9T_jHm{rr{^EoDTZ#5cvn z@$LI6oF4U-sJI4E#;Zqe&_ak5GM~txM1(!Ga&Ox_6EBD(;`2wMJ#v8&Ax(Dxl-dX# z>s^KxVtMfSL*FgGH^hJ=M77J2pgh{t<&g|PSG#Gw_41URf1UCH=*`QM)oMAtZ1xef0=p7=n`Zk z4OZi3oEbS@74xo2j?!VvizBrzPy2V|NT_Ot*B#+|Xu}z_p<`Z=OSr|;ejD?&$MG&_T05WWQgb^hDkmLNO_zP}$srhJXtzwpg)dDm zO+>b2WtS}LQdJD0J)0T|1yzwREoQOV16^Ced zT|SGj0)uBO7Z z>5(J%qx!I=LvNa;n?A&*TdIkJ zn*2#^!_$_94t=HU%BG+p4%@8$EfTa%M6*dqFu2%d= zuEQ;N*qDv#;$@pZ&!hGeXw~y~R5sgByXiP5&6lHa=TK5@q=|VbLMG8|m=) zjdaCy<|p52OMCFvRI+NzZ1ef+6s3w}*mO3gKCJnP7s{uFfn0Ego8H;gnV|#n-y?xE zUCpNq{8M&)Q_zSPLO1l}Z9apnQ*(daGXBk@$cwmP|7?lds~KKmBua@^d|)I#5e0B} z!NGPkBwdBB=ItRAVUAFBBeJ=nY3-<4x?bS^iD++*VN_=t$`?n~ui-r|eG5}=lXQQ1_nXd`MYFD*~olJO3y z8p->v&!X#|2+bN=&Oyj*=tCK*uA35kb~u5EckrLpnosE;{&t9i9&7Ha@JDi&Z~5?B zB)=p7G01KFDDMB-#Fzt{!KS*^BVY4xmLKb=Lgn{@v?NV3-tySqs1b;)v3d9qwTVIK zt;W1ro_r_-bz2NI@mgPGlHalNz!zu%Sy?OZmQ>bjFx9ndEQbuQ7-@iOd{-1_GK3R_ z>Ab4H>qsj5oA(Z!M=%C5%%Ox;t(bS69lBgMfqbam?m-mDPDhwbq%(DYPu;Q;_2?wq zGIF7a~J&gwpVx8J;Kl$DT34g$QAUvMk~ zihhXYQ+hJOb8_#fQ)_&%dUN>a5Xcj5Il{Ohw=etq?i+?AG9TjWDK4Jk>n#+5^f=Ve zQ_pn(uRu`02;0j-T%bAK#QsRRBgYdt$jF+&x2$W#aO1Ti?Yy9n#eTE!nUrVy^BZr- zU7_?BmY;RAJ*uJwySvmQ7Ve9sGj8$LBF4ISYd><=eHBiRx{+54-77Mk)gy4c$1>O? zKekx&1)tnW>RGg5#d6^xim3*v&W*n)_FL~Zb;Epo>CV!Y2c-F^FH5B%g{EgUTht%l#D zwa79?S{mA6%8jcyH=@tYbGjuJ)Tx_nLsOe>#C>Y)Q(0y7sx|ZEE%S|ep%K$TquNOB zmVL83E*^h8YUef*8xLn&jd+XNg!nOJzn=*7!1_j3V^jRO7O>E#1bJk3LmeNXH(9dl zHC}7{()g>k;RA$55)(*Q$LZeHTN>u7ZhqxWsr}WwtSmnVHmo12@Vbw?PULQ7--PoA zpGq%q$6!#~7{d~H!*^@_DQyoGAVXEYX!4(Op7M=d?h&P7hY1W#Vz+jOAhE_~pfW;4 zx#S_&rl9)w_#^)zUm6Nx72&Qwt7d+F+CsC5ub{6Ze&hV>6xdQP4rzABY*1TvGdxe8 z)#BYfBgCA36W)GAAw@?039pOorz{`OybOQ;gc>(8;_|4Nf6DSCBUt1Aet4>wojN2; z$VIp4n7*nl<)boK+hj|7TIEKU8^m4QGQn=Owb`h zn~oA)#zRk2S-DC*CJiTv^?F#}x1=Lco1wpN=x(U-t{0#E#bdx==qD=6S9CnX*%;0M z{9bvFzdcO(Pnq)}i(VG0L4V4G5FjvG^H)~36Q*?Oa9J5!b3IdIL0>?2of00AHH0FN z%Nhh+%I7qG@G22*N7nP%V`V{IW&KSfFe5<%t9gnT{`*gV@l`easxt1LoVOrU zQJx+=A6=r;yC~GDHN&5@{iaQp<%=A!yKCY%nBtL>-XCX0XsC~FZ%44H9~L$M<+5ta zwBpQ2azGt#i63$CB*|JcH#S>#7OoXNwJ5mk!Da^P07ZO6isvUDrf>1pMaSh~{Je!Qq58-SFVTN_IOh)n5D#K2k4Ub|@rF)0vWXA>T6J}c&pw>7EgB^c{J3XcUeuN^ z9wQ9Qmgps5UDh_Qc$>C_RYnOub--;I-?#Iil2Xz`<(scG0m**Lb1g{eQR@Qx8noO*Yr%Qv5xbsmP?-X7aieOzLTYx4vf)}AszT7kO z8*e!zIbQG2vM|7qy;ov7a`o#bH>>|{srW2irAvqDf?{2|lhzG70$bF=jJavv^)Z#@ z_ujK-{;>S2EamFk@;O)hPu?kvam0P#wU(}pEg$TzF8lL8@i2r~dy(|5*V2WBNxlZ3 z%rCtr$IFBL#_k;T*Caz1c#C*RH z1xHFxO}VK!H#oW`6WA`nC%^KopJzp`tKqi^0d?8m%srIL{N#w4T5DQY@$V}5P2N(^ z>=yLtPy}6WR<~>;oL$@a6c)F`81&$cAzg`Ami>)MPnPAiIv(pnjd`TJMD^ANanzj2 z3QZb&V~@YKR8UzyDsMSr5D)+Qp$GrrjKR`0d5QM)>rc7yr!)MFc(*hBw1-Ihk#i~w zO~I=t>D9ae+FOVIJ3J?l*jv~o^4Tr(zis$GEuv1iyc(9CNEU9{yXz6`-@pI#7h|*B z5=B@Jy6f0QgnPcxq6?Na5{K)N8J?;VT!U+Tof`|Fo;>)%*@xOZa@vn3JsuFJj?7Vn;~NV0a!S`nT3Nuunl zaC+3(*do{$sjm)$9f|OWNY=OVyUqB?+MXx>bwxg({1y*Zj#pns$Bi>c`<=wys^QoR z%Vz$@=lppiw~S@mu)YrH!SXic6}#LcU*#B?hh^1?BL_b8wGGd2S=mC>c^&avytT{V z4Zl7dPlTLsL=5?#0r@Z>C?~w^+HZu6M)>hy}cT`p&1k$G4iku9*RS zQIok67N&J3RFNPEwCsJ};8oSGlk2 zj8z#|3w9@L39u{QPc?I5vz+ogQ(kDw0!=IF)RVh~GYH^rdBHk zhUxH~hpr`jBauL@86G2VXF%8vc}~1lbEqs2)n}}6Td;Vv%x8w(58 zx<%~i5j$B`a!0O{af>na#b1hq(~4(h{Fc)rzk-!w4aYFP@uTGQ{0r!;i0G}QO0GIq z_Vw2v(IQ#IhbyS#)D>m%h-{;Z(+*)z#HJ{J*Am3@O)L$ z!(gzbvDI56U?d`rSYcO%>GiJLSK(ZXbl^9;6~{Pv63J(038;jFfGJ^T?FfmYKIbKHl}s_{Q?h z)YjqfyQ*A7IXjMm4n^EyhC3mK9Bj!oVR!pCm11>s++rO^Wl#6Vm5<>%j;j@!Xydpg3%8&IW%+PcL{4j9zAC%3TW5c9 zc|KA|mX+7ydpw;Jc<-TCaky$*wlZ=^ z&*aD8@glQDczWO=AMZ#}!x_FKW%c1B5pay~<(oIC{xx7qYbJR!W0hz;^8?m&V0eo> z==eUq`zoCEV$xt!f9||uy(6YvR%ea;jAwSzw3tm738tN?2Y>23oiO}UKYq>M*{d1j zo3R!7_+(32ub)3ZTe4ETsYr>5_vcWxjO5~wuaomEA4cv=^>e8Cj$rm=)grIF^ujFu z7@S5~ehyDyr6YzP^$1&_e9?nf2HP0{@md~vCK2f2#i^>)3@<2xN;={n`nw;hnGb9{ z4;9ImBg89G{*1AT^Ggl)C7TqX_SYw$@^*BEzar8a>2o=#SF%;IWN(=z63uR zj#`mnUA!sc&P&w1RyyT%&0}&X%d>KvOTW^?zkB?ipe5#7Pv_?;xAy!+luIssJ%4ZG zr4yv=+E?MsZoPSKA6}w>*)oKU?^>28CL;ua)K=adrQG|Hpqi%7r zt}?jAutvtQJSA*5OM($+bY9{l)H4Z09Kdh}}YP*=LV>jv|tbRaq ziPW~VH1?#jJPK8|15WHv^E&)W3wq6Z9g#SER$cwQtGw3?pF!>NanJboTMxY(a_KeB zyczXVS@E(w3Yn;f+TR0D3wigNfiAP3XJn)K7&xrDPQCtpY`npr{^ICdL^ylPi}T{X z{GzX_Vlrd6vpT`(uA`@BWJRo`^33CE4ZVuQo$VT{-$ev1;&kt9$(O*gaf~5E(NaxDV(l zXs8E&1_q{V`~j;!FXHK6&_t*;9m0w?@{EkQ3(h@6P7H~7GhrM!~M!X;2Y$#Epha6eV6W=h@LO~?6tt&S!<KyG zlNW4QyGHC@#RLYm+*oKLae5DDuT`>R{e`?LJN8vL+4DNa^)2bE)(}~6qMWss{l5G3 zThCk8HK=u+mAJl}9<(Og*7uWP} zBH2j9dPB4oYpq8+DN199s@v4Fzjc+26bR0vq7{IWZhgUGO!wuF0kI zA0~0t=~*Z%ZWW_pAfKL;EeCv+&Ax>_%>LVBze~^l;t8KT^}IF1hYV8wO%JaXnK8ks9C6#joLu=iqE;n7f z$eK^rYpUYaSf>5RDhaVLVnu@RsFw-1pu(<~YC&<=D<8IY$*9X_;~J_zo%PY0XjR43 zQ70y2tKl`DTH_!e?p7$z>C$7huzW=Pdg*Rnx|_?&t_Kq>_;HCx{hzbHcwsAD-fU%`?1TONFWih}f7@XAUzju&^|Z1tHW*s@bJ&b8 zMCe_P7p9{1WSj9kKLLe7Aq_2(U08Jg7qf!p*IAY zwBFd>>LP`QDCvv?8u|Y|5$ivrL&e*di zTQaeNOwsFvGoN(arr!Li5;XNY&!!gu0(nb&H*XRwNwuZ-jA|X$(>e4eV9A)!q;tt@ zE#5CbYCie8x|qxIlT|{oN=`>UAuGzlLDA7rgP8vHq$XMK0U4yAmE?IYayyr)Qs#+} zNnWDGb%zwv1-$eKFa5#`+h>hE-L}6!v%RN&W&7X$^@cBqh~>;Ied4S0A>Gf5_p|azXIcn3t>9^$n5rR+oIsT&e6VRn7%RQNF8;%_ClD z-V*%MplEbAV5@7vLR`HWuHFFGbQj|PzR!(T1Xb8sS zY^|HuJfU!O)U}t+riD#t(equppUPUPh26JiY$Ll%v1QTaTrE#7oE{|1qEJ~@ z{dRKWG5;5!v-x31obk)ZiUWmS!XYSV-KJc5gp`3x^*qC6al za3-CGW>-%sDzBPtY34d+4rO_{y-^uNB@f8JmY~R1cSI?Vb_yK1U|Q)NnRWnxgAu%l(+ z$;E5Wt-1N1v%h%CW>3$>e5>Wrvn!h`C@<&wQi53G!9`ne=>lGm_Dgs0(wkZKW*ZTK zcM(pQvZ_Kp#V23xl3bR!1ApUsc!xZG&%#n8UU2EPzFW;j9QtS1O9t$vQid03!M3gU z%R5BGq5Eb*HZD4|i$>&9*)N;xo|Rqw<&}FtwM7pXWtm!V;9xN%eA9siGud>1iw*1b z!{2VPylYkXL+)A(JM`n1-B0nK{^FIc4IVN@(ehVin_U-qmAR}b%M-UmlutN1tYs4y z*`!N8y(g!8d+98zVE1=s;9%Dg?GJtw_MU~2xU8yNmotQxf5h^g)N^au|6OIwDhn6H zvhJ7lCKt!OtunMe7dEq{uVi7lY>-rSCV%hMTf88s56X9CAD$rjEALg+qIz434&Xmu zJ?DzIpuJBP!0-x4Ry> zKmErCulQj_ez_-U!j_dC4HwE1d*VIr$yG*|)+zuCH&pS4-qL#NVF^6--!SCJRLJp8 zJ&g0|%09PR-+%t}7vnvcx;SU@v2ryFN_Gucvf)k`?gZJAg#&Y`a8=0S`dZW7feX%I z>C{-fnq>`IUlm@+hox7j(O<6X^}7m}eRZs8I!$J>F5;ID^xf5+c3A5ncsG5f9`6xW#;CeP`Ba7aoi~`g zEd}CS1{98j0S(F<4T{=NBDo4<9G=&>}vxd>SLClu*>$)u#)Za5& z()tTtYUth}joM~=MTZ@-@uNDBe&=u0*`lQqwdHHuSK&m^z4WE>rn-2f+jFh9u;uc@ zBI0`M{+_aU-JOoP{*>bzmiuT&{;uNz^;+YrZ7#;c*p@#Z;DD|#Yx|q=Z#_L|!XDlO zM|y$z_U)#x*?(z#$a?wx{8E*vI)`89@a_Kjom>0{4R*chd2ICM8^66lBe!KOTh7>u zvY~p)!h^JQqv)J%dJ-GviaP(lZLFkq=G`Hwo{U_Pk2f~lqrQ@ltLFc=TVXRLA6B78WteIO^=Y(@qz)tCM!Rs9mp9jm5~H+@HViTBkbyq4Om=Ja)%2*Wt7~ z4!TYWz3z(X9&jh%&%yuMDG-%a6M^e{9qCN`&!3)@c;hnU!;#lLAkn{{2%+vRNxr?=qu%DR_mn5vc@ zl!Xr&p_=z;caPoO!`=PaZ1a1c*OuQ`e@B_ z)To5id**i!tJ*YYreW7?hkD!*{RQ`@4xM)3hB`2*>L_p6V`{v!6aV_7mW4m+z;>&T zxM7beoBiZjP(A!){M*m4zUsBGR{Dvvm|aMU+B%m!Cq_RE^b9;T17y|VqxmYzOXAiRYQYO&sXkjBtBJn$xx zYNCL$s+NAm+opN{G@;Yd)HHs&V%1MiIhk8&`*K2BjWz9rg3roW{s@7r9 zf-uK8-SvideRgF%;}Ebn+^RRVOL+3G64W8{%la04EGEnjZQl7U-ILPsymdTpoqk8x z72frIcYWVoZ+O|?Tf((2yX(bgPfCYo?D{ggJE8M`YUXXsdfT`+IR)KyKB*VDz zqiBx~iiCrP-Jk(F;Ph(VmU8L$6)T_5E0+5mcpyiE-l5_>)Y^tvwH#ix&dn$P^Ph2s zPj9EmTb>jr%X+7oah0e3i|M*gsJ62AeHH$zA}tpI$AV*OI;+z*XgXzfF^a$xv8V1W*LwTI{Hklj6C8x9f8ff4keS5jND%Q5u4rGL+w8eF|sd4|zn z#{7H>7D8589lXZgw6?r^58U-N+^y`cW^-km{>R2&t+6*GY@y!y2G!s6$TwY(jrUtK z-nab2!>X;DzP9(ig(uWC-$X_YPOOQQnhwf#1ech8SUo0mT^nuIMjy7}VQ7?L8@<;C zd)&s%*!y{8n>%~>*7m6X^rVQ$n(n-&cc#fPw)Kqt{ja4jc)@|FyfodEO@B?zc*8$4 z!wY?9CZF1~Y!6M+rbDyFzkm0HsH8#PL|#qTUVC9{e_4ZQzm_#)1;M@0ur@U;qYdw9 z!}nEVZ+j~#6@Z3=wBaCaRMgum%88ErMX%=--9!HKM?MN8T)har&v}eGG|PIETW!Db znMYy@?|(ImuPOuOrVgXt@tSt|%zDpnkLXWNiZ?^eKWsV7+>JByv7Z;4J=pWlr|r0* zYMkw_KD8wu9$#+P+1GW=cRohvadrA)ou+EdTRY$+Z}2v^bhwCI=&^R#<{I-Sb+S-s z?Qr!SmY_pwb={z~g1n3&NU;v;>F%dLn9U-a3WVq_&Zd!dNIf z)Sn|LppSLUs-&;y6^?FbpBEn+E~UHcYHX!*EmUCpE4n;cCDo>1SZgppl=UsRrq_2r z#ee_tsG)fwUOJAl&j0D|_8Qw~ju0jmCv%N``pU1H!G`n_Szs0DIu^$zDm)OaIPPk! zYNmz-BQY?|4ji)sQexnk9qOlp%EO?wJ?M82`VND7?4Wr!AmIn)yFsUWPzfLI(h5YZ zwvUY8EL>BnZ?Li|t%GJ+IUp>oEY;4@)W~qjjwauW^I>37u2<}xl`jfU&KC+dnu$?J zRP|P`DZ8;Ze|l0VHPj7qv*JTK@f;o)cyNFWS?lo<(FD7K)osd{P3n`AzQDXBcEA;jJstKM`xHXS zJ7KDFPE4m0D!!}?xg3HcfSD?LsB`LE`kvmN#1 zL&Z%eU{k-S8TOU$8e0wJ_ZsAX(-qj@`J3!teb?9;H>{g*&dqzT4Xdj6VWS}5sL7Y* zIq-tKOPjuuHo~a<$bMu+tk=+e4ZCc^{neJJXZiId8p8b9U}BqolN$3b!pkA6w$u%2 zOVyaC!3)xj(x^%`eTZfGC!g%oujCj+Vb6F4;?q|+mZ6Mj(>FTuH5N0z_gZ}Rq%`lz zvU~;=3UA1!>#f1SH{IOLJG^;YHjF*(6@`>n_F!HWRi?M;U~2lC8iahqf7>wJwvTJ{ zaYgW+wU4Xt;m_bSYcj*-f$%Y8meMtOxyNU);>)@~9(FnKT7G#WIN31sbZS0bZ+KTP zE6bNS@~tnw!hUpcsJ8Tr*h;rlzuA&XczFxI?cKMXFWq5}Yy4qt^U3@&lkIsXs>3(y z`(3qyQbSq(iMk#%c#X3Mu_{$N*#3@7yu1!b51C0FmtDtnSrtQGkbcZA^HcMD4>b|* zmfD8b!4vcT>AJ8x^mrfq5EYybkJRBF``8K{|M}CCGJ-(k1&!zfLIuNB*8DK$!#F2& ze>!cT?g_0=`5yePv9+OjGRf3I$5FkkZTKXw%xBB|icfi8DiIw|Z^xF|>6q7y`FDtQV$*6W(#)xZy1HOeOEz@LG{zK!@r@}H`2 zIt0t|i$3v@WG6oPldkpdgnZ0I~fKPv6j0H*|^(tZoBu+t9aImLElFMN~VmW|jTT zxNpn;zJ>aK%6!oaCDa8Z_p0MY9tk{xi!Ll5J?2sFgA zLzFs1wc|0v?f>`LlQJOxhx+5tzccjd40-z@$1>>6m4zfxiGGFs&r!LThWl{H2@hJU zL+?hpkUTxekjo`w9w2;(_xYp-HL=J}Jp2BsJ!Kas6}EYU=JMVy&xAh-g?^7}p*_=Jo$lDl!>{e_A^L_o ze{V3H)`jWKKX2*h`eu83+bY0+U;bpbKG}~?!&IXy>K2x1)mVHN6Ic19zAepAbZ2F0do@|YwwP7#&5uf(Anv3xpZNcWQXd?P1-fz%Q4My?!re4O|ktJyEmL@+? z^ZeLv_7MB>sXb6t6LHk|Ykc*KvS*lnv0Ie=?OEq()8W|EdD}IWP#%s-Q&UlDSWKI0 zPT4Oj|0ct8qejgiXcTrDcKW7Ur?qgzsoWiE4F@0Z2%E9`myY{}fvPOO8pnuk{hHww ze}iWK`;X>byX3oabl>bb-@W+Mk*M3YtT_Um8wq$*g) zHPrD?m47()Rrr(L;;m7r>2TCt4@H;v?s_X~Y!7lTGUQ#guB+d5NbG)z24CtRyaE~B z?%mRL5th5hleC&+HtRTbyDr5V^DTK?v{1WVjIKMQ%K&#;3^j8#V@uwzUW~Fn<;mRn z(s~}devPvER<`#kPvgE-r+KQ5S?@+!9;^;)>cHJQp+g1NSVx0>V(RW=D?5ML-w(RDw#xLXFIl&Lm^*MI>INdw5>|q-=x+H!bcCog!H-6o`WqaH3 z&}a>J>Ny=6zpSnbzXIdY^~Lw6?7?OGlkpyTlAj>x{{CN@cli{8LVw>g88g52mdAVJ zGkmLnzhwd;BsE32_1AKAt+;PZJezNO6AB^dSO;^eigHRG$^ zM00jn)5~VeNBv|E{L)vx#XIHcS+fTI&w=N2Q2!YsyYf!wz6xh{OAWCsFOf%NMIP4r z!A}@g^I?r1*7w>{zRvOA_2u1lEW%Njx5NIt?`u98yE zpcFYog~L-hJfQ;)XXr#86yeL}TYTMHw)q`7OljE{%h%Oc=t&%&ui^O`p3?z$Iw-{t zPx_!{H9Xe?L;Jw2ULG(17U#BX%z*D5@V#S+0v6w1{$$9{44IR%ylCfN_GZY{l!x5e z#mZ`8D8i&y7KTt?1D4eByl#*B>`57rx;1|{ZtRz}z34!1;J`UnTmFvu6+T9uvz+$8 zr#IC72P8n*-`?IZW8%RfLL8K5hZt~p)&~6T5P=R+=MWE;h5mKM;52IdF@_bSZu1SB zxBRwR}RSk^X)5q|`Py_G6o;Z617bUOi@Sn5aoNvp)5^ zGS4{br|$k~m7G?Q;*RoLG zutrdn6Z8CpVx5?WCl=ze_7I+M+)XN&6LNLJAxw45sYW@iQ)Pe0h7q)^ctpOPPQm;n ziyn?{-A@-x5nu5d+(^wF#xJ&uP}syTddIxymk4oPqO=G@E51X(VH%b8s}R# zGx_vsY|k^l!n(@1j~dpUMnRxG!Y+Q~sIIJt@32q*f)Yx5hCfQ2sB5w!xZiiJZWXCL zjo<9=I?7%)>sOO&ZT#MbMWigu+a;Bzzt5hOrvBTkfDP+NvnDngz71PK!+X#^P#oz9 z`-ovF2$W3>s0NYVZPg0vW1}6=;eI=eQ@^B60cjv>TGppHz4@qJZmN6pbZ@QB*X=SY zUBo5)T zHSAWmT6jf*uz7Q2|7J$^FQQa?n(8vv&2HW7R>|7lHuQHW5!aTspM2OXTp?r`0bv)8?4}6mrBjpn>(4-TgRE%v4wX$IkhFLc7s2sw)9;& zfw$-4{R(^D-)B!sZDV`c51m1sK5W+?)YD0ab+d=PoG&`4R@M0DtJB>WmoUcgfiGd3 z;j7ch8rM`nzWMa)({A3UmwXBtBKo^xgU5@6RV;zQUOte;H%#qgWPhBMT^xPfCb`e&V<%X7r0q zM-0{1L33?1(P-OM`@c`kyMdQu;N=*!*oH3tflq1B9DZ4`p~?%LwITB}YSA4Z2-r z#fI(^b@`zqb*RV>RrreUpz&dWupy17qoU+BWOW8))W8-sbUY1gQNwduF`ZaX+=}C6 z$OsLL4MUD-@Dgj@ckhWMZ6D5xm3UC}Cl=#NkGCUvJ8y5_dQ(bOHym$gLyfQOG9yBC zo6o9r{=Y#OZ)aEh`?x8~jzd`z9MB#{vyLAj1c2$r}C2Zk;NjQ)hSm z_+S&U!g0x3=;xX`ddj{Dm17zxS zTQDaJ-_C+%U8+|LqP0FX^GWn7p8cjm=UbFLtyzmdS=-ppC-LkO&vsUYPUk7r-GwWD z;ZIxm)5>01pW-&WCL-3ec|9wY^G{stxA2fGJY5S*+iF-7aeb79uGbw2JGXGsE0X0?2b{7{|i<@V>tO_0UJCtvu=FnPHpY*%+BQs)B)kFWcQH*U3_N>k9!KaRa z9z^ZIejGFYpN3hz>7i&8B^o{1id#jCs#Num@2hae#ZxtHij}5Xrz~reO|4zRs)^dv zDVl0XSy8a6)}*kYFSyCRHr>GuKV(xYX>ztrouyef8~&(fWo+~WEACURb2jLVG$_zU zf27fpYm`J9eyWDMyJ4eh_!b&w!X~rYFc8*QH0oMYy=gF|WksDc`(bB}$M&xN^Y^?| zL}?89_H?bE??jsURAn%IvWXBK$y*dmucTQw%NjdZR^Eo&r{+beVsIFqX8o-hktVd{ zTgCaEsP@Qw#;o%U9aJ`-iezOltm6&eX~WLfAS)XF(y}meyn1MdiVaz)CsmTJ(oy#3 zfnTq?(scG0_eAd#-BGqgOqoNd1bV-M5CAMO;EYj0Ou-fc74H!IH71XFH z+9vzSK1H?f>`f&8%~9Eddt*gwXLe6<|G*DmrmFqqTgIx`A2sxkI{3%&e>`it^=m%7Nq_(8FaEgq zump7cbzPTzhia%9dvh=0%j&p2J6vv!^IP`s?)~5<`iy*6>@V+uHLl~p>G<(FX1R_X zw5%}>y(@hX{&|gI2*Vbrx<^x>#-eG_6JLE`@f|$;nwe(oEzC9$Zm>5)kLRE$R8|F6 zMeL?RXEh)9M7ZKI{qKWr<4|K7sxw2zY{+8|Riv^$6ahO%Bh2lN+|xbi zFO(HKJAS-s15ek$Kr$#b4E=ExM}LgP)Ud3O5(7G7KvvXDte9FR0f$({%h^WU?L6=k zh84f;VMfH=vgbtEs;l={(Q)53j{j=j(U|@^LX7=o#nizrs)16Noit~swRrOU=T!uK z#r1j>d8t^H6%p&krRqLCQxli+9F6Xr66s1m4{B)&e;&ioFY|q?9r7ZcR0&sctpZl_qYksnRr6m!@h_jUTKy-JKi`D|q7xdpvauPHL4? zH{YaUIbW$P>kWU0&q@}8PScb(o^r*L`s9?sp0d_c=6T9RPYO*_#(T;z*Z4P&`)h{b z=d*j_{yzJQYi8L-Mccjcara_aD6|~I1s<*xzgoU)$!jgys-^RB>3m$eYnQ(A8h_*>e*0GsTKwci0cyFv z$LF`_18dFkfq;dVZfbK4-mK|uY$C6wa@TZBG}XNZ&E8Z7n|P|J4>nc52JP0wbTyOx z!y)VB!g|p#!!%WfrpnNuD_he$CO_Xq98Jc)VbyLthX(i6F!44>u!aYY``R*@v(4|{%jA?vl8!O^|B~BNci#M(Qorln^(VZt;c4sHf z{^EXw5gms45N#czJPe=psqdkn!jQCf7BF4+IX5fU^k^Pvt=Ubw9=N3;(&4`*szRU3} zh-J02j@PJTiR^ldYMUHq_Ux$Ck@X^Vnh0G-QjK#w=G{3knVq^&htllW+d4k6z7nCk z-+1gD%WkJ#+n>?Q@{7-3X1Lts#Oz}HZ#Xdj{^t*lTK6S2jk4ldwRoEH9mieAhT3tV zcl?SS8(zo#SdN%^IV)(8?)j=ch<{}aKC)pSc^>R}H7{P4=^-;&i%hdJBc5H|B-Rvjd&96Ls%kRoH>7pI{|8W(ShzrJ5bYp$5PetO; zp4R8{(_-@p{zLC{tq*UqryizaFdo*4fieFUp14lxZeH`G4kOE zv5Hkd?7OL$LwX-->$rJG(+3y**@f)^v)t&HSTicf&3Cba44lbjf9DX($7qTARh%0% zatnUjZ+T0MuAfmXFmO+mRZn*XM|2ZJsko&^I{X*BRRfF8peZomWQOWnS#iBe z_k=xGt*ddY+PXLt@^e7i3{|-S>oOo)2JFhf5IEG}Y7Ad(dz!grCz~1ZJ}iXZpYgb5 zX5T;m_fKb{{LjM~qf#_f8HOsupgT5jN0*fc@K2v3W5{ZEHP)RPtINw;V4ogg*`QzZ+RzO5<_G$^iT}l6E#+I*Dv{Y533js{SHIlM2%VJT!b>z7RNjI zYDbRcY3MU5n~J33#Qu>Pes1WRmkO zO!e33S?C|U_Fc6<`-`WiczPSmn+m%=--#)rEJQb~^-WAiooXKP28WpR7_p*q)pHC{ z6Mxk7v`)`y&D+wESiz@fbK+dBEk)wuN_5Rb=4HniuJ-0!&%`i3_w|2ER{NIHg6qYxgw$bM_Zc{1|gZ)8vyH{mc0G zyASt|SwRl``X?lt$kA1?(O{&l}V?VM1Fl-an zZo;Zfh`X{f4Bw0)4dem7vQ?j;-(5Rwu@g_@#E&s?#?EhW^1%{dmv5HE_|NU8;Bswrx?IFDvTD|Ev>s(P>@KH47K(g11?iSC>B7 zb&F~+rgt^LrJr%ZnJ+l=#Wz^DCZ7PefGbtzysZ2Hr9xd8Sz8$A$_{q2H#vka z`(|YoDC4NLmHl0Xg$oGFT-giz+vkIR$0LeVE%}EB`(}T?g~xb(VAS=tH`(B(uc2n- z86ef6h#L$^gE4MU#|;{}L5wumk_K(k^i7maH^e`G`ip6%G(5Bo-)6hX8|Z~^sx1vC zRqN0QU2j5HVaJEo_(F}R)UcG)_-cGN&NdG-Z!@wJ>4w&^3scnKZyT&{gBNOim9jDe z&=e574d%AS4`Ub!xDI%sHluC~88YEFcruM&)Mhjy!?yzuK-IK8!tev(|BxGbIJXpb z8okTLGig*!YYZ2m3!C0zqy151`*B4c@&*rAP5(%vq|ly!uEL4>&>7lZ$tO5+-bmw1 zH2z8Bhtyc+!G7K|Gf)Tq={r2k&ZKu*gKld4nf8G+pd{7Q2b&0`>C)yJlbv^eJCO zyF8rQCV7mE&G+p8_q#W_3wg-0iR)Qiy@x&UB|7h-^IJN0sm{~r{E)Ii9r#py#}nw- zGCL2XtX#yAefq9ytkt|@+U$I!jz62aYu@;s8QY6e7d~5@B%Mk{&9LzEn2>A6p5ZRk8amG8`d0p(JjR24C0FoZ zWdp*#YY$K7=NS!CvG&su(%J0p-YzrWKhZE%XaC+Z^Sd*@G8i8j20T=?&F`q9*+BuM zV=S*vhjG4TdpWKTtowJXNdI&87k9lR{TmE`OvNYqr#i=F?K;kZvM<(AMNJhR1Gjwl zWOe>Pw-$7jg|1h+jzMnWn>{#AnY6FW$@iLn0PnE z41j3piU;P3D_BG@th^P`n-Njo!XbRbs=15M^-+#P{=xHAR`eYW!RWV&hIqn*(pg#P z^u*d?D0P8~tbfOYb#qvEMvwBK2(*WjhaLe$>%e$fOSh`G|2X_dRe*tAc3`8eZ89SY z78^pb4j7mktA?v7>-!iwO)5IhSTwDw%Lf>6umhHLsHs)d422HE;HexcZe_Dg;^Ke) z^cQN*)vwKXGZc7~y9haQ%p z23PU2s9B%FTPOQlkN+Dk{jE3QotPar)Z39m?bg`5X!=dT;f=lO9VCFB_ir@g@C@L| z85nLW*8c3PaK^JI9${7ki5A^nFb10cAz0)V_uc03C`+ z(RC(AfmL8)A*gNgt(S53W=jfsa_Li#$)sd4^`1;>4ijs^r1CIzqfDJ9lcLR}qdM^w zOsWu*?&QQ~Fe!*lTn7_^u3Sj=o0%IcMpo;eB0g2B$>%Q{_QikB{^BX?KB4udI%7rC zs_O29g30zk0;xC*9dF9^Y#s)(s63NDjG*^Dzm?{u_+QKor@YOFUwI$bG+uQRad(M80 zANj@X!7-@*;{;f|zKS=Yw2UkJ}Qm0y`VA6IlZt~ z5$ktVFuHS4GYn(VGq;C4HMPmE1Leknt2KFg>r@y$jY;*Blk*sQUzh!S9*01P-$H3XV zRT@8`;!V|U)oOl1)0bLS1S+PUQHgz|_N|J&t=hDI`oM5S1+vkut+A@K$oe6I#_U&C zbcsm}Gf8`;?u_#m=TEa%HhHb~hV7U2Dyx3&INuQXR?ixXG2#Cyu{KE827}r@!OMLU zOR7+de?L(SafUG)ck5%fdUj8Gr*KqO-1o>fJFfZDUwl>F!{k=ms8g$VUqt~|HMOfK z<0{IqBA3G`8V&0^-?dmLL#ctvw-BKMdamSfcpNi(b`IVoA?5bZ^3x?BPVx?4Ou^e}6 zR?RHdF^G~L;w+qRUEgJYM92J+-_4fdJ5}SSi0|p#KHURParX-z{^dM8{jb;WZtwJo zDy~VKCDPF${uMKRx8~hHfBK6tRd!k)WkpOq`w=m@`d_?fy8b%_kght@DI?UUwiy}6 zis01cse6dRXQtgLFzvwSS+g$baPxbZBL;T)V zD(@$k*!#_Erl~vgk zL+N;`vA9fpr`M^*U-RNJoxD$1|MiN6h<41cL{h5Qy7IkUfBoiD zQPnqAJf**0?PFjJ7@nH(byQ#XBvjI%CskHW({JITFKc@qFCLq+;winl*Ud8V&!7Hc zcW>Ed8?{azvh2i!Dx9heQ;uS)Ure=wscKN;pVvx>b>fqmbk(QKL(MPa51X;d<2Bnn zY%|P=q@tLdx}NC3{W)>kOuTIqH%^UjzLol^Na~YssTGPNu!h#W?W0}pA3-V9e(YI& z7K8Ep|5EFoYf$C_bzRsVV?7?PJ%%g{n$5SRmZ+xOml+D& z{_c+aov5cNYIdO=>>r(7Z#{L*%8ZQ5i4*uqI_L%8kL8FZQj*@0b5Gq1n+|&D?g11<9e2XRv zkvMNF+QzV3$!Y3jEp_shyafwQKai2++iJ1h7$L?8Vg7bJqTY^ohkdTwrFbYfXDqT6 zR6N+lzKXdQbT{>3`>I@KEcX@LZ3X`fQqfy}1?RkiQ3na>EqH9=+Emx=)CBKT9CNXR zJ$T3-{yx8R(aJLD_%lkrTQQ*W^u=^yG1 z`7!KSl-c^!A2@1y`((7A^z*4&(#)w-wTZFHsjAtjQq=Lj_AB;df$~%r_q{+D!+B-! zars9BJ58JszAT%CvR<@}jY$=I@Q}VO^ffWi4vrejZpO;P3u?0}l4En>JGJGY#co=t zKTb^zgK^rZHe%EiFsu@T1>L9@W5m~d8w>HkHr%ly$qJ_`hrv*7aH@N&ZS2ZZSLQ6Z z%cwqM@Jst19iuDjzTso+54)IHB#hQZoj9Y4iWPFY%c>THHkM;iH4`jxnC^`11|vdY zFr^!8!^Z4(n^di=SAM0hVAeA7nhi!)gXP1>gEq384bD{~m)XdDwyr2Dcfk*1%tT}6 z8gtW_xkk32fj}@g(v5h8!If>qER6Vwx7fMx%Nbw9V7)fJ2z9}XmDh;q8BsqY>gVl3 zi-k+18#JTayx77cx?~`c4E&O@vU^)-WgT}~jwC+5Uuua36N!f9*kCp`82$}@V}sw= z+l@V)w$P5NfnYb-_FM>!E8wvycxDQjzXi6Of;Xms3h;$x*lVx^m!!I}@O{;)HoT+u zu#4fBtJH(5RomFbAfGFkXIRbM7T#&Gg~4W%hf>gsd>bnmTz3ayPR2?h+q7&v=SD94 z#uYXyk8GgOVc;y({w`FME>w0Xu&nsD_Kzpo@CLw!R1Pe0Ji`U=bb+zZTWnsi{dlLn zC6>C$Mkb1i&3=eO44aw^%|gDUw?tQoo0AVx$QCJNg%q+y+!o%jg^6{NM?6z&Y{u?@ zncP)W;-0(qV9%1DJ4c0%r$>JAOl)qZa@j2Vl)PqqxfRcF#f$4Lkw@Zp=-xFe7aJZY z^bp_1Vg)}8Ye7XCRG1Jd85R`|5Z}gnCF)nnt*+b!o{(BqH*M3e;|h3#>k9UG#VTLH zEyHf-`>|57reU9}@YGc}?kWhP3Qt`nho}MAXf#H4L3N3hEH3>#H=8r4M`BfOF2*Qg%Vs5a$l zDKSSZyC#bg`>ql5qQaE7VHZF0i>X)D$ct~}yf>Iq8ae(AoL+-{w1L)ZWbS)QoDtiq zV}EsVAY`Lwe{-nW4?t6#^Qf*}8c{aWg9OexK zeuH_V!N}3zGxt5%q{8lsKbdEvu3w|hR3kRgsAknvl@D#OQB|s;0lMwEvwg9DVmq<_ zWLv)$+LdFt0$=t7t&K+7h;%e`&V~lt&|n*}^(K!B)nL8FGNn(bXxt}kw+X9o!tTIV z>9!{kK%#ZjzwUTid=DsGB4YEZNMI7IM#X>Y4k8Rj>7q!@fL`d=BxYdTehCO1~xklX37VXF4!)i9T#f&d**carm zcq==RZDNA!joo_W7lQ=rXoelXy|=R3#=X#3IvMUA44D5a%TD$nw%(~Lvxhj{dg@5< zuDmZb!Mz>l5=rS)!RSO-yw!ftr&Xv|u&H9ZV(h_3(P2jQ7W<3w1FuDg?V-bW(c!!3 z@LF`(BsxqNo$Qzn%B6#x=^$9V1*Zyj8gz}fpi}l{i8r1;|mU5$}n^8r`Tb_h>OxQk28LyX~)A&^_=VEVC56+KQPSew! zUu^JN7}W=So3oU4d+A9kRv2~}c1_u2ml^F!t7AaGV&4^Fc0?K6UL#h>U5J$%oc~58 zL}OMOGsv1UXTib3to!H6BebwgZllkJ10Lj-Du6>28t1!rA_kFH{?Ry>&%PpP-qFUmsYNPM0ZmbQwf zSD76Z#uYbJu{ekdfu^YB8dP}9Dzzah>}TF$Ul3I!FR4-+qQXe#+hG?!>KDU)R>@ze zV6nW#?f`X321JE9&G%rZbRCZkLL3uJc->S_S%}14`aIjj&Zq`k!7o*^gz6bC^HVU9=`5|@7?uqFnj1@#OoUo`9{s4hR3PFjM1nm>AEy}HFu{5 zrMES{!b77bZqj&$hOLB5YcO9m7^@ms2;WAdCXWxCPczl&L%#*>)8OE8g#!GZ@O8wy zu}K>?V}tvmVPiHd(}w@H;lK5EJju?Lchw5vUc2h?UD^YJPIW`z@7>X6;i_uHJsabp zVNo_>qmArWZx8l>;=6QB?ns~SU?cJUy7r4cj9qh*BZ)p>;^Rdh@MF-Z`3mR;4PLB9 zMJ?avTU$jh%Xq9md5DvfB5f<)T9pk?*iI`Y}XpEN1c3L!&05 zf%n7DB^rWPoXEbn#7(5JlRZ?>TH(g*uq*f;&O$py3U$0FzO9xkpv{64=pY9=RlGZR z*G?vj>(6My!~z=FzeWXZ>aO~JG+}HF>aum_NT-flr#fn<7HX#oYNys}ryg8q?)Wk2 z(hSHp-42v=eFC89%TzcRa2g7O4(bLx-iIlRe?B^k;NtEG(?c4$|AGGVgjX zkp(nTV)RA?(}>_3aZCfvV#MVQ-=GoGH!8&&Ji`WiuqFJ)RLn6d*BC7QMx@?bwwr!M zlO%r%RJIYdHyHjcNuwr<3NMPErQ^9KT(ZRd{TS)hT%qZX=%t{%Kn3_VPlyjZp_@^i z$EY;tT5F@7XtgKNN>goUsvzPb)-aw5%%^LrVB65Ls9I&9Mhz>^@VfYRXw-Lpu~8q~ zun>*9hu%uRosoEIGwn)C3?ifP;?IY5&|BgHF!R8{XpDKY(1)c76Kf!I4I9(Iej71C zBkpgj(07VoT+)ispOr6$z71N&K-w7f#0|ubfwwXE(~OnHr;%FpRcx7+W8hM7%@+N3 z)i(MtBMn@Qx5OquSAybpjaU28kQsF#3JmU3gDcfwFELn5jrtl!Z8(Dm)!;kzHtga% zzt~_pHTY2t{#Ape++bui*icPu=c)=sZDrS!S6ZWG52FHZ2iKPQm0lu)(ufioF+p$9 zpUEGDZ>_*gSYR42#P|wzlnOYILMC9L22%kOQpnIR@YfZ%B?|~!Z;1=Q9&=XV-%d1A z>7{t%(Zpb2tLRt04KnSLHjBoKe}0zk3a*KIpp|HTrLw2*L3hP_3__q5P)4u-)f#%N zw$U?*9bidS;=&bwLM858i5FLVfEABlg7vIdA>G}zc0Yh|NG zY6FwmKnpZejb`ow2B5*J>Mh#iEQAjlrt&YqO6_APIyl23U2 zW-tkJFxkF()GwxbRHq(pC+D{p^aQGZcBFboo_BbnI#|b!7oy{Z=*a&LCsoHs(P6LZ z)THRJPIcA-{}p`+4FtxjUWM2}4`HR~ct2b_Lbo}EKS5)`3r8*ZPF4C&<@Zj_rcQ18 zPK~EdwffGA(5VvTt@caLLFXZlyRABgyMUvhu2ZL~RHxpz??<;mAAljJ!-~^k&hZxC zBYFZnIUU}fPW_0E9o@04JD!bB)rn3`icU?6j(y#cMIEelr`|-zHt$r8=~&{OYBC*5 zyi>8F!=>ph8c~wwBW*_-4#*HR&mG_F4&sPtvbSUn2>*}1%^2&9tIoLUj6-kHi}3oM zQ91Y3{6Kx6x5FaaVY2PuhdWqe-v;ABFI}NQf%nKlYoIkHc?;RY3PR-6KsFkFbpsV? zU>c2j@kU(+OL%?~ItJAlj7kmuE85N~jRjpr=bEB9)gO%UY%oe0HCBu&3HLw z(3-Gw4eQt#vEHun74Ef|Xq30oh4A=+RB3ph81t?jp$nlgb~HvRJ{Sy>hHh_Y``+T0 z!{fT*R|E-cAcPG(u)z;wu)lg+Xz}>rt;ISvGOrC?-Kec;==rwcVPh5;d7uUdtdR$5 z#8|yWZ$XpX@E=lf%s@YS%QX-Esw25R{ziDA4X#&%71rQ@HJIFd5BLi11;@L=8S8s= zJlYFA12?R}2W#-ndMoV(FCQcDg`60_m8)}81onR0(uy@6uIRVW|<{s2AU;XX@M1OweIiTPG00#Q55z8dAgu zsn*em05&)<+Y;JKqg`mnN=lAWBhRRjsnp0PYGetyP9n_&y#;R-xQkYl%_^=ZRpTXA zjwRl(P+XTli*e84m zMVBBm7lv?e(Hy9i46?Gmf&Mn{*xs{`V3 zAwIZ>eMoUhR_#JO3+}8A|73?H+go%15R5Qm`yRYBLfBsVRV_LOD|lgjN8b7|=qhLn zuzPjJXNLo`QzNoB<@%8m*Tkr!tiVaD|4zHn>R0VS6CiTeCtU&m1}mlscgi{ln_s8m zMu$VM!@1|Jvf|jh)=gL_eXVCr$ND4d$KZT6IGhc(YJ>CHsHW{Lo(F7dn4FCo z5C;2`QMt+Yv$F3xo;8}d6+G1jQ?$YSY;aH;4A@2$Z-Y0|$V@lJp<$6(1xwkG-VJ$9 z9;=Z9>uuOI>9H2G?&F0sylvLB%JX(;sscB|^7KC}C0sqhi#uH#ndSeiei7-M2XxtmXk$6V51u1JQQw zeiegX#rN|(AUt84^maT0T$Bc5gTV!1@(_~E1ht6v zSU?9Acr^?8@&yL$0`EkD*Sb*G+gm&muu_y+D>!j6vdOTTE0VLqKwe=l_ZBY!C_!)w z6;_-IR-qD^t)OA+s%$b?6DQW43G~#YY7vPQmil@VXsd}B#6;X-N;+nxWkn|XFtJ)q ztYy?nZVNW}GHbOR=TeKUCFKgK(mnAS^q&T5(d~LLTDz?KllG!zzoI|b+F(B#(QR)# zE%yFm@f99xvGR0?j!}EJfm&?DseLhL%_X)1UsX!U|HwGKVCuc+}z3=&)0EDo=H) z7<)U@vi9LQ@5+Nw3b{#{%?MTRd(yu3N&fX&V!G0VT z8g+U2s8{XRS*!^70mzj$GGdGjXd_qJK!zLH&<3B0Q6kO}mx8Oj;&?0X(799S}g7hnB zj0JB}flZ}Q6QPJ73Gb`Rf3OGS*b+^sWSUnp&3zkboF#{m;m9=Vdp5WS8`bI?_2?UH zqK%pYjVb_*I+%@hr&0H+krmR2o;0E-jd)7iiKOp%Ea44kLrvDv``!kUIGY z9X~_I&(IksosrWuTHts$SY8btcmuO)u#*}5r3Q1U!IJ9R2Q6}m(Fhx=|B6gQucK;` z!Rcz$LUI{}cZ>0i&1JB!7VN@+KEFhzPw~+(uEs})i2hVI& znKy9${%d%*?)+jS3&8LU7_nd@f5eC*8*yaA|7ln~wxgxvbvOL;hIQ<1qDB7DCp#MQ z4r2*eCU2SD;PGHFGBhru7Pc|7jM~`-uaV(VF{)P^`6dR(k-=hQRLVB2Dx)rmk)>kT zRtD>lQPYVDG&67T1uF85VSx z8~Bc>J3wYfft|i!OBVcZg(@oE&Pb0TD+UM!G-XVy@)T@iJJ+WItheZ6;CA*B zT4Sj4a3)AWaYS?fL6dYcb;%ZV&L^M{9wKZ ztpmxnBgginV~_?&n_bauEcyd`|3C*jWNGf&kG6ni$}BMQ-wp0xqq>k$lgOw*WQXF~ zhg!w5h4y4+M^0WmAqZ-pp|n_|a6uS(I)!Rq1(u;grNshERiWBifg`b~77}>fB6bVn zt(6#SrBY8N&)r)rKG2WUqN-?R6%DO|tEplVn3yk<82(jpudAJDiKQ~*n({mFK*Gk{ zG)foc1rU3JOUJiaPm}hu&L+*QG5$MiH+bVt?b_ajGQulGO^QyXIiEE`4ZV8g7sFrI zVXpI*IfZ3`&D9U(CKK&K`gM3V42+qvkE)9}q2$ScE7XscE$^f59G zy(I>LeX(nmVO`r9$=HBKj<&&K?fV(MTw!N+?97@&*`3P$JT#-DWH1;T z3^oRXtHEHLHdq=ACTfGT+F+kHxO#k#uEUtbE}-g!A=SNQOrmeYHtFM&)r7eN{@*}4 zc^h`kBft2<>vG{gxvEwi@W${GS5@z&>dj7;UxA+o3*B41`q=mrvFr(65xDq#dtw|W zRsp>0WG8{}X;fEfcugB#(*|avAqg7{FdbIv4&t;^4cS{PT;zF|*A%(Bg^WeN0*^=C z5Z^|#Vtps0&B%;1SY8cYAaBPvt>{Hfl9RroVxx~DT7D(>&{p}iG!ht-%p+qSd8@I6 z1%yQapPRwYX7IKdd>saRo59{@@V0r2_eoX~Xc?H_>{Pz+s%RA7i08cUfL(aN;Pfcu z4pew2DpB}~PF0b~6)mfRsq?SHI=(0xA`Kt>EvvRE22s_r3SW{Eu?pPz#f=%-u$bB@ zmJfK>!7X>#x;hBq4raJhjiOT-r&Ft)zJ+=c?F%o#Ijhe>{$t6)ieOZDF*s=rrdcD>?LEw#!lOtI znzuv3!;$FysWD7U0cnZu*Qq;WAmW25SU!D(zTtQz^Pw)5-GyMS*r;{HZXoRL*$ z@XFfFWc$hLy)L_L{JlSmm%Zdy8&^Pnc|9Ta|H-Wer0` zTV&J4eCNA&^%B-PGNeXNBCDlu&yqq|yXZfRB?ISdaGm+8J$ekra$8iNQCSt_J4n~v ziO-VTvXDc!kX5&UD_+R9Tgazd$k+4z969d0ka_3r!XC~Y>xj1}dvxT?p3XMc9P9W( zF5yDH-a@{iw-UBl86+x2m5q&hb? z2Co$x_3WGWOvl2N$A|cFSySOgaLZ&OKAE}_D9}T)$TIw;DX6gR(}FP>g)Uf`43m0NHp=E#hscul^X@IbN!4V>R?! z9OWE;@;s^P0S0`Momg#fNfj6;s#tW2(W~aF&UkD}t~W?!Q*R|M8&6*CRF6%|c=B|f zdpvW<4S(N$jAIfhkWIkU%jnNM^S=HrHXXX)e6DOvYu83vc!ivZqUJ6uRX&RG6_mxP z$^uj=vZksN)FCo_N@5kL%JG+fh8*pzI>MkO#R!d8v#34=o~x9}>?Q)}?{d)RE#s^p zVZRW(%eblv7tBCRN9S}pzpElr)8O3d=v7xlFGk225eE<)pLo>dUv^xRdXxrNK&IlA4`W~X$1qy}Pfk+F_84rp@|@<~H?qFr zG*9CWiBt^#b2{`0)3hJjUuj$H)a;qBv+LI$`&a#Gv@7jKyT@Hl9dOY4b4{bD=?~*M zr?K~k;U1c1UrK)%7nufa$q(b|)9gL}!%!%v0bBfGm}}DrnEWtqGo{fdGv(O+Z0|ny z?o<3d%BcQu>RzXBje9{8HVvwjA5PtI^DXYUjIDz^`W1#kJ&girKU{hWf5xFYPqPct zA1{Z$)az zuT>*vo_%iLzb2)tm00ozLQ%3firizSQry}l&vhU3GOpQNYL3AK?{mhxltC|Sb)R#oht;GQV>j99K|~O?T%T2Tw)jhc& z0&YFWlVtcBGLg|tWHb{4$V`ij-!t=Fk_0hqDd{BIF~O5N4f{XAESd6H=Ms5|1%|Ie zzF#4>T4rk4fa}WS9u(N33-t>Nndb={a{)(^(27bL*p!4`RY0N?>Xjz+q*TTlkd$Z3 z-3uJD1#b5O&wGKXr;yQFVC8ewF42xBCo9Y^e~s<&c#f*4S^W7Uq)~~i^JzMvSqU~KQsQFx5TyP)HZ18d>>=Qq$ z@KlN9+f*jHs4Tlq8QDgfN_|(SEk_=E>`)=<`TjaBWG@hMOsL zL}Dg!Wk`uyqc?1P!7lK3ze-$cT(gqZmdK>?Q(8kCQyPzo?m#l@LL9m7%+(f9%LL`op{!qBueGQJ`-|Xpi2rS=XG-YrTj1{asqT z-Fa!;N>IDp=1(9*NNFZ4tmR{VZMV=4TV*=u>Av9IZ}-L=-?Y1c(Vkq&eXvgVr6yE@ zV`W_2E+s0vg@0NY;3M{#jWq@aBYuUYwWoWi*?eb7{gmg zo4Mhf>UY$>1@bC^ptxMe+P9j&X zxCki$gu@F^-2x$9f`YSBe6gZJR{#nwmkO;M!GPu$t_J9QSv7b%D{KP++)PMx@&GUC z5_PG_jeM(`-+X&Z*Xjar4CV=3_0%V=adXT#W40C;$vZd$*UWjlQP*jlxQXbNkUu2j zhA1}Z4h?X*e&VF+M6Q=a8{MA;ZQ@@lhh4USXrP>70*%*zu`l+>QBsaTl7ZP zKjgp5ZflJP0K(E# z2x{wGuLawT1T}CwCko1k`g9#ZhgBf}gq|OtP=W>cA6^ za3;SZ85aS2f&LuY*Dh;|oTz+B#hn%ul_IbRWiqXoDiOqzU9J=Z^4o`=Gi`R81K;Lb z{a)t%_Pthmd!F#QZ*=mYXhWMKns~|2zRsHry)mK^iGrB|)jTb|H#ZHH8p>)*xEizU zUs$Dl#AaKybBrH=hMAJ3-XUx^JpRKfN#XR&8^R<}SIq6VbF{;{&*az_cm&FUrB7~N zI)?q8sLor!fEMso2{c|J)>~k`DR9^ovhNBxO9^)AL|%6?Y;A)9mYTa&*b5ldli^tc zZCt_9Rk%%)5gA>meu~GSE^t?+nJZJR#|LtJln@;WPKTP{W&)jDK^0f3p{G?9Mln?m z)!fze9L}7yQn3c!nWUV5@ZXjE_5>GUrSfrtEoB&iV>`1AFBLjQ+QwL|U=wQ}-uATN zwSdDqfjg|^x>vGF8q7PcY>z8Y$*fW@JZ-8ldTIO3xS)G-9l1lut?n9I%s##RBlq-2k^#FfHHb~mx2xBBv5OtMk zVug3U!e>dEI2&4h}wK;m2>cdn34RLBj}A;*ZXNknljo)&hqbW|h{ zId!ulF1#-}Dh>XlL?!Yzk(HOskI+KCleAvLCS!7%XA#|o_F4fNHB-<%Q@J_pd&_>OID(m8F#NQ9)% zTf!~SB~YB8K_cLH&s{=B>Egip3bOB;rE+eCWB>Q4f&|CA=F_pa%n z_CQn8(6V}xhF`Yr7NOW~ZBto9QY9h&Ya{~?jYy{SA$7Fuip_{7c%#^fh_ujV#{tO9 z2A-_#T8MM+3p=55tLl~!uVg3roI5_`ok$Wf__mA5i;&p9hfnxsJ8JNW=b|`YJ@FK^ zqr{(BSPl1ALu@uO?i%^P4QyxwuQpbkB2}tR3*Qc$kS|yqBge?xuJ}o=xx{kN&ba%$ z=dOsex&5t-eZ=$CvAR1wSeNR~1if@L&6r)Ov@N zD)BJl%|4PFj-6a&dG&-b)o?K}v`mITp&i=J1pImea7nt6FJ98R$Ed)F?kL!u#H0?W z2&HaxbvDhl>gI>+sUtiaBNJ*&ZBp+0w90Y4Vz+i`)O9iG_e~zuitRZDq8>GT1-_nh z9g4CHg^FNjU*uAlI~ILiWd!B5O5w>XnqJNdI%q~rTZB&i@FkuW-8hFQWX>1fuuL$5 z!b?Mmn!+Hp@M^k+7mk$HBDi~8yw{?d%`=L@Wmw92zN1U8K2Z;ohQwS;vSi)X4jZ{K zB~z6NmgW}W-ct190CW~Tp*kVmJ}Z~m(fQjHir;4UGvlsFWL$I@T8nak(^!LYkx$aE zz`UkteMfTkbm07Nw`|Pn@P-1s5*?^9`_!w;No2ie>2hT|Gk>xy9^-0Rbd#$JuS%Uu zJ1SFCPA}C}d46?Ey`3t47se!tO(z+tLnM)-S4T$j0UNNHKCK2u$m`A)NZoLbx?XJcvCn`E<@$Z zAWk|Jwi0-(F`n1)Q%TYlTSEQoFp&1v6qBAb*xD(_?7lSqg#V=-%Af`{NTzh99viA} z#)|B4b$KhFSUIN{!(p@d9==y6WY)(@kt?YYly>$O^^CF6Nztd2(QvP!d3K^yo%+q4 zOxjL;^iDo)r=I!{1@vAw&FhgWsJpLtg!&qE@W4z-$y*g_X=~BidNOC*7XG4ib@b;p zr`XT3f|}h)ukFB0hf*E$x0FB_2!;h53P5mQSCbgQ)7xRc?QntlPnRU{!R;ug?VUNU zup5)e*PnQoqhImGnKh{iR?-9t>AP&Yc7&|+6^VDpN^-+mqTXLz9#Ta5<9)&Ot48}`me*0 zMF~}#hvJb)>op1o8g!hl+o($|Nfgf~YpyL&d+bD$7a;YE)|cVE{&*wa#=O{LCEYFJ z4%@WHa6KY&VbenjO$SjAOE^3!?SMPzjzi&dc9Ap$!YV_4kgk7>4OU4bt%XAMoDzMq zhpWGDSf&Q2tz~f%iBnt7z*QI{axbY2dJP*S#~Up*!X>?i*LPkbWa;)B>#vbJt!$zS zrn8PUCChBD(s}%w65ylgg;ik65wRM?@*mlW;|o841*B|`*z2@}%eUt6tNZu7V&lBk zhCu81q|=_1COOuGwkO9xI5`-6av2tGE<(2DRZdz+!OF&0ri70*sb@Cx3jSx~06Fny zzL8P3&AV}&JISk-rY)B5Nx&wk`K_4}S-Jiuko_2kjns>FYOxbYz*r_)R$RjkQ3iHX z;birm<%kG0<4a}WZq`Zj=s|P~6t!ZaPN!rA0l{>HC%lGG&2x#cl+6zdt2A(X)=Bj0 zB!f}b$Xif=m$bfPiEu{61S=|_)s+G#$Fj&Na2x@Q9^H<{o;Tsf2HS%^tDyzCsSO&H zY+)+j_|Q-ug7lLn(NQ(oZQ8dalGrBYWDq=#6W1(TqvHiNQZfbv6Cb|8Xl$EmTuu6>CnkU$av9kb zV`iOgiH(Q}uG4utsFxHQtYUTm!##R9uLx@zRYPj;J-+56?^hk=n$33KD6Y0Fp%`0= zpB9a`BZUAD9b;WK-2(qA=`KdXfStoi%|{Z*UO-`a?^D$&nDgY!C%Ezxfr(5OPzn>i z@4z$cqPwnP>Etb-koqDAik5|QTdY##16Pny6-EpgnayMZ+tf8rAnGqquEgPsP@=NrkK0cvp7087iU;%ma2HHr zjrL8?lZr_p5xjAB9a1Y-ULj;q#M^O@Q+>b@haG*cTfO-dkExF0!$}{{fj1F zD3gfqb9gQRXZFjK9YjBFMtzyfBb!8=8zSq{F1zXGSmCXua;5I18~7h$QkPEVUo5-plv= z%~M!>zLe>wy5oE(FlUvj@lz|Jtl-QXao8i2v2Bet@x&tb;URC{Cbb9eP(D>uemE`? z^cG`0B!xSr!%sPS#?>s8VK}Yw)fJqra`Laj#!R;qni8PbWEO6^u&<|#c9-&S&g3g> z_9Z|Iu5qM$9Y<-$GdBK2JIbepn7RqS%0#-UY7>f-6^!3mRcEpSttj#;M8+TB?u#1*6 zd<$mx!{6%nikK>ABo@lBwZJU-hK$xpGP$pEgKJoNPoDa7$jmtmy7dMr9a~uCxrMDE z6{uW8Y4P?9aTmuoghN?nzswE&!5@i?@mUEQMcz4xTI!^gXy{v9!L2DyxrUkS^G$fX z5*q$+LVb)yyoW$$UQ~+k4L@oM6w?%+c&YQo0Ysw6I5fBh+DQLypcH&JFeua_ZA_4YLXf2sv(aAeY5WzL6fApnJxUT z%R$;tjp@JaAQEd9y1NpSQj{u|s;P%CT-F>vG)@t}xrz{dPOtG-@s(!?P3+ zvhGH~M*)Qg;&0@N2ivgBp;+46D!5GK^Uurk4XmUZHp^&Fq;>0!I&i}}K zD;I+yk=o#LMze1X&C2bLhzMND^&s$($O&&i7MnO?63+=QOwJa@@2OZn6yy|WNtXtI zuZ02XJFue@lwOVW#a4wJUW*{;WEZzArE6d!?lpb8XLsb7ZShU-kouto*I$_fPMPG{ z_85DeCC_Hy$_>tilmj1iK2}5UC(|KE>k<*MGM}UO+{6gC9(bzODBII0?b8HV$@LCc zG{97eG;i)c@ukRA&n6+SCtPE#$t$o@*CzyoSnt@uyb1v|wGcZPSxmRq2@ZCsktp8) zY(SI0)so1SgamU#BwnHNj;?T@7-Ac-hN1A7%3sO+PlAKC6*wRDD)L;l*vX5SRXTkU z@k&IcZK)t4WC3TI3?*crjAjuPXqzSgZpspv&OI6%+ z3j=(zSyq@F@4nXGb}NAG(&X8w`Nl@3+d?-S(d|-s*G1^WzQoJQ?>D041gF|2&x|Yb z3_LrPc(0^rM7P{=Neif(`%Cmv1i1=pv8@VN_@6k>vz*&)UheoT)^R2)q0bT~0(p{J zHA7Z7Ym!z47A<^GzAWHc#|!Ok(N0V@H-UA`LB!J)Fx_{VrKELyvkKJCJ)=KEF@u&U zqfY@iR}~ZsTe-qzF+7qYBfV?Zw2VsNuero0zAGqn43x3<+M;F#>Va82KYMNz{N{Gzc;% zJm%JiA_Z$!-fWFk;F1oY+0pm#D*J#VJPP4RUjaf;=*uWMX2M$*1(ExKUf1AJN~aK{ zF8m+MacFmmwKAQG9;Su$-Kx|o*BS#Bdq$qisIb8CN}qL|By`<15cRI3NlBv~35+C3 zoU<(>;=D_ykUuwpT}4I7tKc8rTOk9Re5wswHN`@FE7h(c#3OCt6RSxvsb!#uOO)&y z4!umlfR+^e%9?#fRbV3)Z1A>_MuCld>|svcOZG~j*}BAt&lA4*qHISiijh$&GH2OA z{m#G0YmGkKpy?J<(gh(piI`JZG&2AsAL(#hDlF2s zu#AdwzN&H_F`P?OY!WoZ`o(zOWK#_4W&|v7WhxW+PmKVt26(BqH5Ol*a%Y5=6JY0tvp-0{gvKmDworP155bWHb<)20qGm z(R$)T-gdp(xhN}ybPL$-(qO;C{=~|~4 zOpDpA!p49?M_BD%>~8m9-B>+)8ROrVf_p89@YxySv>umMB}f~~8TgPXY>IZ=cq+zE zi#5*mmskQS3rDskGz4)U9C*|dRALLUtt9uwBod0&fnhIAY->38Kx&CsagsggnlUO6 zG%LOkU_>Zlm_zzSkZ9!C#}bdGm#Ao!uQ77GM^;+IxR_<|u4H*6vQWMSGTB0z%+f@q zJVD^l$rCliPI%0gTW}3PrB?Pz3Z4|=9|s_* zN}0l=dB5wXD=> zD*mP#GyN#acSAZ+1j`rv@W+Or2Mnf%nKPfp z?PJOORPS%sVy(GuyL;Kf3z|R>RfJ?Uxm>)XLdnU2a~P#^LkQoFi#0ywNLJ8Biiw|h zre0lzRCIGQLRvc$zvo1X!7%wKKBKWmz@Qco@<>kN9cx8-kn44}z(cwTyGue2^}x<6Zp6+C_IOrB zD>4yS3x*5?6XjDc13f&MF20mCBPjKJ z1v`@WrbMnnb*4q6P*S2%c(v_Egt^P@g(hy5$$x1S^Y#UBtoteK)|JuT627A(C_)k5 zxFrDC=osl-15$_#F(qTp0?D`y!emTP>5&8I)&%z2q%^b{VL}2a#e1?GakJnz7mF7Q z+=Y}tpi#QMWe~Q+L=x$ot>Ew^6{tal(I}9dE*vJ5{cDuxNffAP&|sxY^uEYa3Y@np z$7a5YL}e$NhKxdxas?LJ3<$izw3w+OQ5)Gq@RBDgwX{ZD5AL>1wnc$gv4Oa7qg5)< zf@2NlyCH%aEZ!MdohxJP0qahUv<9H4$7)+j5&#(IHf4kw^fj*RiebQRex5w5gd}Mo z#F6`@tO|g#y0?&|>WTEwl?zMHiU?v?YpUQox%9Vihic%BM>wAm3 zH6l8A0079$UhhfHSktsw)rQ z@jNu!EHyxPft9Ee^7eL(4-peTXR(RFQ7fqJ+_?fK;cS4t7w!vtOrv(x40srJBbP`V zPYrVFfptJ1^U&piBsUeY7*Su2e8Ysoc*&8hkv$*wo8%~v6Cs5X^{6Uot zYM^%NpmZt>bq4Lg+F@UJk*rY!qOZ`W!qMU8<_zeUZM;thQ;BI&^Z(X&Z2ESDIkhO>J(Jy5TJKRY&%8BI%RJ5B|*`ebits_HA>586?rP$5mNFDsH_r9 z&noiNGTWl&heVz-x1}<4adrBT1I;*uUKZ(gAHMyfQrQMjkTmBqLo-JqI-}6LQRv+$ zV`h{+bK7mApGi@NHg_d#1i^G$A>71AWF-0-X@j;=qI(lG5sFpH<)$XZb>76rbHKK_ zM|a8)p`V6dZ^~gB>@XtE)ESCz>GkcksoR&lz$mG90Sa#mSF&j zT;!7TD>utDg>~lEeY=e^G71gy{VZST8gL_}>2+0500-EFF`mjNz2e?zH{^o=N&$20 z#)2?5YuG`)5iAxPMoq~I8C*TxJSw1-N*1JQ+OFH$x)0dPZJ^y~s2zNT4+(_{c0pfa zEuQw9E@MC9)_WKo(-EMQ>DX?*DLKSUgx8d_ZL&tEbBeAz1I{#^H;m-6(7vwaL0N-V zyo>H&y70r7a|#lqasz&XTV|e`0woH0`=5c+yWtbQ0OQ$%O?doyn}pL5%K3al{$^o0 z63h}=`GfOvTP~^H$UW5Nz6laDmv$q8=R0z=-)g_Yd@8s&Z4q~fH=TXDhr{F(ea*by zzsh^*8+!l==KYTT?>Fk{RG%*jl+5SNrgbs2nxG(EC_x{T#Cc6#^x&Pm@$DnQEH-X0 zN{joB90P3_eclmw_z&Y03xD#m9?F!_cXu&LNaa#U#VtQP4=oTc8xbW#%d%B2zGc6e zg6y06$ZFr?Q!aZS=v(wrj4n-Tz?qBNy8g+Y2V z*tlR(40;Xc&nRfF*S{hyA`RXfZ9Gz<0#>?A%EyQGBCqQ6JjW3A1^h-P1pYIpNI7)1 zI*h>-oKddU)!P;efl#m$%dCu47iHmRlk`4?ArDY-+V7Z14msc^xR7#PPgVIY$&{3o zTg=B%3{-ZLDSN0XeB%><@Yz-Zdz=-!41ZdWk>HA2yvVBQuuOre2xpN?Kg?KDNHL#l zn4DJ+w_D>w_wxuYHKM3RpgZbhxRh2{`3{1Y96g+_8;_ySSBgBJB?oHD<#*8RZa7bD zFo}-rMKOVtK+?9GZ>kh==C(O(kb3Wrp<7yTRb`8FUHL+uLo%MS{7xzDlKF=)LITm{ z7711s0PnJ{k(9kfJgDr!XgnV#NHZ01=c0^wWme9Sz%{Ip@lsQX{jp5sOL>A@q^#yR zzUF)j!v|Z=QGy$USaZK3={Sd1e>NObeHGJPwqUlbxj!Oh5hf@+Ox|SI)Dla8Pv{U4 zO%bcCk>I*NFsd19=2cO`tF!)Q%(qgtn&)z7QVSTC&l(S-#DrQzR-oYcj#nh9T9pY} zUt5fv+VAm@V^UY847XV>k=psbZBvxoZj!WVy^lBiS2js6dJ`V^$NWpn((jY04dEC{CSFevGkCWQ^?6V?OON227o#q=36LluBUQM z$Sw1}$&-0!mh~HU)$EG?UjyzwI2*Kags92tY9ETYKIAd$6HZYV1$3Q{EIDKE1b@n{h7PPVeRM?!q=4a_jXya=ZG3m$)>l3v}gT zcsGOJhFXE(4(e0cpv$1@RSJ%UHP(W33EZ^--&u;YywitL!UvPF zM$3w}(62+dM`bOEk|;-*$w~l|tVDpoH)8c~u>#tiVq+G(nr3y4jZnE=u*F$h*c$#_ zD373Xu}K*FwP0}NBS;8$qC6dPm~s;- z+f4-2FLAF8+9Mqn+6XstDKz|qCtNfXMy=}xB{Gaj!4lB7<(3af+C=%iehO_hw;MGy zEjNzn&Kllgm1%dhvDQ`SR)u$6w~PV*(6MU@sDp-9J{4kcr7V`4C1jMe;^~BAq?3zR zsQ*gZNWju|+~$?q-gP4HPdxhCOBe5CE4J8Cfn|SSm3}*O#LcTWnTz(n(DJA zsxm`K>T_N`z{VrtS7d)?#h*5DS%9~!JTPe&RF;KwRLp*a%PHJj-~w{pLXo%ywLj56 zO{5T1yLa6ZqR{|BNhjX}4(h{Fe0N9i2j)AYD%=js?wX{=>L;S1=~UL?2@B0pfsAJtKKKWClrFNucE09Y}Pys*--x~$?$lmQxq4r2Io~J!PiTIfV;H~`M zA|izpWFwtPTB?8wOT9T}kC4?qMkBs_gq~2(9)ZpcZMiRmN2zY;_J{<C3 z12&@hV=Y*t&lm!rnHIKIPa0dd9C+SW%mL23VIG|qa#>k{nLka)3!Tijh5&( z-4Gy$NH)?LVA^yd-jfP2!+KPfotPbwGW>G62#V?bjdei1y|PNZpH2lOyF7SJti`2| z8I&hjl5=HAvIL+uH z|00n-9M~9BQJk_wVVh|cP<&+=P~yc$p|1JrQMOZMAW3;{A%Ys~S^=(Bv%;*FW5(4K zD_5HVboDA%-gJa+P>Vw5egNhN1Q z+Y4Rleh`}*Q=q~FJf3NoT_ecSz|q;ZC@M!{KI360mbwplWu)A;?UFAYKF=tL9lC20 zPo^aEa2k|t7cDBDZDODoEWrc;6LsUtLM4ti=32ovFVxa2s$|wwn^wf3V=xz0xoZjp z;LUEVHIR7JIZe@N51$pui4-fboto%y_vM|{vyKpURXkT1fFf=m|DZq$ZJbz^mhQ_w zMS%>;=22w9x9<@WwDUGg5gp}FnOyCrXb|jS=+CYja4ul}LT=F_lVM6o;FhQbySLz9 z3cKEgz%A=uz5Il9!t8BWXGYW`pG)}6QK5Sxir4dUpKHN53J0UX_c)zO1?81zI4uEk z6Yz2?RS6d}(fq8G|4gx!tX`rp#{u19VQm%or(AdMeJd{gs&dE#Jx!!Hf}T=()8I;S z>rV^@oly-YoT%|O=eXKai>pz@TA}l+_50UvLITKdzgCpDeu93y%Kb>MZo(e{#Q~k7 zjP+A>OoffLhZZ7t<%RYsCa`MStid zJMlykD_Yra24f%-UD*VeG6gy~)dqu^uN0u2QN0qlwR{oxJR`3k!h~K`nRTO!2+ZZ} zex3*A`+SFN+zO78J^pJ~&#aLyTITKXQ+!AGd|d6pVSb>XX5|+nLkLW}4G?G56p0B? zX;Ij(iF>C(F}kU&3H`8aOj43ri0ArbS3=4RcBL`_{Q$@=NDQ3Y5jSeOQGphw&Lf0Z ziI3L>gvK&DJb|Eg4V|@KD|He+trBplePSdZOI-Fw>;x9BD<;@4Ib-|CSig@9I^Ri@ z(X*<4G!g+yB8jQq`12Hr0Cz8iglR1b&Aynvxz`<`n_LA)vE0RP2|@ses<$vMQj@+Y zjhc`&aMNMf;!Tn$RYMAhUb z#eRZwmD*29i`_il(I?+M+Mgtx+tmWuETucpnG?@hN2Vl$smHk}EC51JSS zT+2KJquWOngJ>vk3vAUu#R{}4C2cBrM0N&?ET3$l_;kUyP(X7P-lALsI#n?wD*%#K zU`ee_q4Tj)43FgxV^x?I>cJs{5lFbO~n_>(zOjvcN$)p1c!^aT997e$YbB*g0<7*em%cP(dJlCe1{8% z%n3Kr)AwzD*Q#x5!R6#fEkz$=4EALn{@n%o=QPW`Jx#lO{6$OsgvD7F6dczH^jM!t zByaj|A`Tan#^=Y!IP9e?r|TLL@gg(ef|>h*3MegO{da4sj&`9J$R(Y|oLg}DEG*Ou z495#WMQ=OpN~upl;jm>Bbbri(d2IW#BNv?IoB06@wk1J6W;?`S zAF2KOuDqLpZ>ba?t;-Rq#}P+%Q5p`VWesEGPB?X486f>7=ktebE}A?^!n*T?uE($a}LDv{sD)*X(G)Y z2y42rAyg;Y1zTx+=)$lm3p{v0B@1kUZkWUK45=m{*s@T;x++PzilNB+A@U{!Cn%Z3 zMky-kx<8o(4`-6^#ie@Une}Bitkk;ikq{(;ramk|7o%fkpN6)Un8v9qb8r@|ahoZb zkyrUxU>$716)Dn;#3~#{lk0gm7>Va^6iF$`0?BMTg(WGm3?)#YNtV7_Gq@VV$Wx(Bxjt4<}krsCNs zQCb)SR#-kf#@0G$L;AT*xYm(=RSvGcRUxB-scgwgEss)wv#Qil2fa=Bi`p3Hscykn zDf!dR$N`y!W(f~TE;o7v=TGU1IA^6cmyUa(Gh(S3QNU-GNZyzq)r{iT|JA%xBHYqS%biE!G&IesLhm1h~wRMi%%cQ;eJOw zjyvGnA{9D}j&>8owcF`;Acg7?nH@d6Pjdw&RZQ8k^%RQ~Q=pJ^@Alj+hY^M=B}E$k zKvInwK!p+(alK=Xqs}QBm^=1N(>=I-} zhc%0W+=V3cLeYnEL~i(T(>0t4nV{PdvMEu!VLnw>Y{zqT3>~E}sw8q}bl%*&(_OG{ z#*N=0X-R~q(*~0ET%dp;)eFCbxAI8m?PezvBWR+=`6>6>A%PhwlK|>mXxg>hmp2&b3^1occi7`LQet}a>E9F$Wl5l6S>z6CZsP8wRF5xmQ zm-t29B;mo}a3A}B%}N#Gve5Z4#)`{l}tqw(G0fsGh#^5!LPx+8JONXeZ zhKka+pj#YZYVC(6R8w`aPz*-)9X&Hd^xzO7jx*jdY5co^9uUx|`v6AN^-{rC#F|)B z4Ke`~qFOYNlFEVAauYr%3wvWVEC*RXN8|`={9wa+ zOJ0~Xb04pCNDcSGe1}?Q#$>HhvC>_kDaEQ+m3%#&igi}yCwkZOxgj#DReF?5o*R@B z4vJpxq{TU^g_acBls?nac?<(ARGaAcbBcU(?-S%UL?r{T#ibhVuiD^m#DQM}51Hpc zhMV%}E4b5~sbvF`fG>jNK47_YfmBmE?`%im*j?0X(0;iAP08{=`MWdQ_pIuB(vGHq+Z_Cj_}E;c+sJMzE2tg^e+}wV+wh z3!Yo#4<0v1=#5RXqLg;xaamM~{v%JdDH(hab@1m~FI-eTRrDE@F zR~JUBh5l3SVRLIlBBMKS3m?d+bLbNFijcasn-w;QZv1!YTEW;LV741{q&XW`pxR4b z0^+*}bSG|&bP{%NLH^?+4DY?|oR~@9R_;;~hOl0$ZpOF1ETAc>oOo(}&DkD0IUq(T z%Pd`pL5zJOVu||lBW0i@F@n(2DUt{!Y@6V4n+`J0aPk8q%%DTlF_M592|jHW zp^dB43f$v8o`JQju#L?b7S<}d&fsEI0DUHc69s7UqEbrp5+o1hhCl}mly8VVKv1YI z7=Hs8)0P0hzq(N{`fo$dia>>bk1+{1M0N@Pw8iMrex5NwOk#*)e z!{anZ+}Zo|(KBLwq_TY7W69fYM0dX#FR?NjRae}=#H)XE1uv>0l_JjwL|nop*8-U^ zWH-l1f$yinUYSJKq;jA5enITCEZ0zi;3}0L^V#G`hD&zPvONKIuz_PL{Mck@blxxr|R3JlCJxfh$ zRka5;dlFg$%siNuRyX36a@P#uF+^gHS{qa7hvhD-G@q*6O`=n4V^L_VH8luZia70C zD?wc-{+6}|+Oq~G(CTf6YPL4Yt#&0x%&FbE9^&Vu4npfIz6EFp`VecTS1`%vA|h!2 zX&hilBsRCpJ5Z4$8b$FzCF_>FMjgee?O}@BjAc`FGRP7hnH} zAD?}A_w?Dj_itaneE;m1zVFMYAO86L+xPFj{_)*!U%z_)yVvi&`tkjr{`mCOvw!~f zo0spNJ%9h=o9~{!diCMW%lEIpfAjelKfZl>|KaVM&t6PVpMUZ3`O}-1-+%kGe*5iL zKR)|^e^|@2uWTX8Fs1X^SK~?JkbnIB>p%WqFTQ*C)vtbh_4fNed{w8G>ht&Cf90C~ z)Ia|E8pB?hAuit$8{lC6T^Y8xr#Gmc>;lFa8 z+a!N}-p_XY?9Z2f{MnAD4=;cB$G@`IzW-}`?c?*`eB+vm-)P*gK8rv5^s^nKqVZ$b z%XdFJ>E*lE@4henFV6Kxe);C{*P|cmW7i-4?6040^WR_jw*TwqFFW4k_x~LyeEIVG zH!okj|NMV@?Oioa|6!c}%$sM={cT>qEj|AF%{OzO()91Y_TvhFdGx!VeyC4l*L(5T zfByA8jKtMvU**|VdVkoLzkU7Y>D|+KLN5KOceBxl+34M${Pojq{`)Im=p~Oh=8b>O z-@pBIjd#C)_tLe7*~dnE?EUj&=*ameH~#(iZ=YVg`Sj<%afMI&?C1L)f8Q@#G}g+* z%l_oApKkNtU-`2C$7{XpH?MzFzIry=-}=4%gvaK8&xP)B@L|$8`1xl}HJA3>+nPq( zy0>K++a)cdtq=+ni{}k$s*=TgQ=ZM2@!C=dPWP<6V2r-p-Ss)zUa}&==7z zw25{c<4c0KR_u8i85z%qpU#i$bsTBS_|<&*cs@#PO|)sW<7v&;meJ02v`c-Sr^)wt zJKJbe9&Mgz(`ZZac3v_q+j(p+Z5;2KqqnJdZ*!VQ%UN}9qwS+@)7U?r#0`SU_sr8c zclK#Oo9G$dvH4StbdT{aX&hO7DHyG`jkb@rvA^}PJiPgfZ~yY$U+ntfhoA5I7>nUQ z$71-$>FN33|Nbx5!g0vAe#o!>^Xy~d`TtG(A8G%A_Wz;%TiUl{+&q6x`)ahm{^hIh z-+ulN+t<@C|6%)|{5oHL_w?pB?|Lw{hz*k`Qp3pKL7jQKmVugi(mX= zJo&HwY5VopfB*aO-xnXpBlF|)f7s$B|0Q1Xjj#B>`8QVlam*k5nE$W(B-lQ@diC`7 zm%sUm7VwxaPhb2vj(z|2)0h9}+ZS)%`D6d#m-nxqz5e{=^ABJA`2M%A-;JsCFJJqg zUw`;7|K-Pz&p&+m?Guy9@A&37@4o(<`T2Xj$2i*0`uO_O`+glA@Y03P`=`%;(i6{r z^y~Ule|Y)+`?p{DvwZjA>8scNEua77^e_MU{rzm8p4=bh`L|#E`1;l7TFe({?a0KfPJzyI;W zyWf8Pn=hV!>q5*0&&%I_{--Z~{MH*6X@B-YufFpmfATWk$#JI-Ke^M>8^6#mKm6hs zAO4NoeE8z|%g1fJCtiBm(r^T*kKlMlML-{~iZ`D6a%sPQCkK79Axb02^Y0sO^%!pBde>&1U-blu-cz47?# z*@yS9`m>)8wOd#HcaOLiW5m7qt4G}5j8}X8P7}*J^%uYRo6leRsCoDP#haI7EdJ-$ zZ{GLy?b{cB`r^Ma7MVeRF&4k!s{f(fBRPq(GQPd`TR$|$=`c-o@fbg|B;XK)$8YvAC9M={@`OKr13w7G=A;U_?!QV zH2&?MOXKH%^1pw_BJ=;V_pWViD?7vR_xo3bJbl^m#?U~!*6L2`=Hk>Nhptj+*QP9L zk|7v^liCg?klerhl{6=f?S#<1pX>ed?n8;kGa8LXqmeWkd7~GcS<&3w=o!ML0V0Vd z9dRBGd)ekim>k9tVi8ab(d(^h?)3q*>xqp~1~pn$15H@kW`5*{Fsne@rCK%~SF3Uq z?EorwMW%*d!&4~WE;&vFmYs{E978gelKJ(tyjB6%LAP(DZm;3PUL zl}`dlU&;EFi!2+Yji*n$QFbvr1FWx~hUrB%Y+qbO@zcnFfBG}Jik=>(Vp&dGy8QD( z#LIf&R&n-<2nP#w;Hm)Wfi`f>650oaB@UAjE@w`2#aVOFyfs|vD9UO^*}jcZzN=?) z(W(}*i%saDjSv^=axJRY3#$`?mG!r^kTpz$_vA%_m0Si*h^DNhjvgz;y5~Kf`D#osoQQ! zIl_CyI_b{{#gXDc*oE3*Dl{K9qF~rOgGGMTq~bp9CDn#Tv4d*e&&yQNm+wxVc70eZnw^wDas-Iv zfH27Mwxo_Cfm%;ZL)^3e^*YE4vA7t)|5n0IXJdaCgpO=7wQpQxr(N0CD=59*Z4tH(eNTSC; zc95&NqL)L?5f9`!usag)uMN_|{@Mr<@naYzqE?l>z^wpa-12ZS%PwKhgUzcFDV?o=g&xH}E z-1_&1Vic$od5y?@C3y;)dky>Owt;uHGo-c^)kJBO)zY*FK@ESexxD_n7iLj>{B8O4 zq*eRYS@NDdjr{7ngZ)mcB-eD{tglOScl(`TPgH$nRf5>?EX!|PSt3`2!?jAmSX`{Cow^DNhG+?` z*f#_@fvyh%08)@Vp1%i3^Eas8V!60(t|KNSGZHm>tyl~3zdeIpc zZ$bU*gOyJr?4XeF-~1jNjIPi6y;@aTuBa48!W7~#p=ftMX!pW2tq5*^*QEJ>3=K}u z*6WE37(Gn7!)p;|>2du87OQ<+J%QDAd;&Xc9fbhwcG#d3WPUf;8(yD*7}xfQR4DQF z2r7?WcAF#g&|$$K=p2tu{EOy*o9uE?wl0D}gA8}INTc*95Mqhz-K`7pmH?@B60lY_mhTOPch7Z39LawEz$w12TQ?)8a-OqXo+6{ zUlV}=nueuJG|)+q7{h>+5QGgP^`;+nD)q%h1yz>k^ft8m7oHyf{cTvUuhp0F&mY?- zPggRLqN4{SoSjnGPhpF#q@W#I*StnZ;Yu~IpIi+DFv-MiX3Js0T}P>a)eR!|M$`-> zE3CXpXbD}D6P^XSB5+ftCT=C|MQ!v9vFYOvOBtWb<`fKICy>j~bcK5~tP$h3SUH8) z9ln=OpdXqYjg_Yh(ALFi9_~c8W>vEaz^dg0wVZ+a1SMLE;oUy8p_PhkS>hlg(eOQj? zQFmxMWIIN0q;&vN`k2pCDA(4tNYk(j+L3%D&nGlcYjB19F47m5Byk_~bS&|F4Q>E5 z1%)tdUxB*Xmg~vaPChN8y-9C0)v+oenYS?OBge02pai{<`z}UerE)-GZRT1_F&ucH|w-LeT1#%Gw962?gdjiFYI{- z4V5hy?Z#SNT;yxU$ix;eZNM51fttu$#OLjREs=U7R9**=pV77G4>PqGhP=|S30ps| z_?DnQji023wQ`Cpmu-#9eW)=Wo4rYiIV`Ic4w-aA$v2?Oz{a8F2-}TLs`)OxvK_Dl zGqnQ>E<%N~0}8&cT^|6JE(|p?;lY21@s9t5<$Zq!v)T}TCrW`q&qRk-4Khgs2{rMJ zzzf=n@glY%f6`eH|;ck&7 z^Q*Qr`SoXWz`P`u<>lZ)FfBDQXd11Ch3&HQiv2 zt=@n**EDxUin|b-9E*h+aFHN>f;S;lK(>lFTdCH|*t&`_G%zk#VVZZoE%r2vv$#ff zu_>i8G2x?WsA_!%8y6W$F$H!#eN*S_#Fqjhzklm>QFy_YLa`BWY@rYdTGSa}*d^M* z2vwfjcd_I3)V4=f0V$-01U%2q{Lwk_}Ubyv&KxeO1qh@zmh@s>#2Ni;wM%Ard( zO<7S+3wHRrd*#j?no|WS;>~2>&(NjxMtvua1v|M@345sSjw(O_8Ceo&Akp*?!s!5c`_{kyPD`k8e4UnLhphwjBWtp`Llei@ncV< zcE^aHPg>%rmQ(jNC5LK#SoHL$8ceQJ4+Iese_0h(DbPw+z-_&B10H$zqtdOnrf?jA zx??eY+%_!CHasfZhDS0Qq3q~*Bpv9r_INzfoJ2)}^bJrBmquDultl%is%?#oUPp=( z@p{p9lr^XjD zbIpD{jBp|VG}@c}VXs53W2xFJhe!qWv>e%CZO=#K3GKB;=6se;O&+uZdj3LS55l~H zpZoKLs0_eB0qB+Q`ef^S<$9QcBBYePUJnEhOg}p6V6&;@HmHgPuNGKVrhvejQ?6Jt zl-0tE=s@Oa`vUj*ET|p--8}iH_cU4&x1wFcQ<-5Pl%iDkSL@^G9Z{u0I z1GcQi>O4I@<6svT+be_q0A*%7N3a!3EnO!!#&50L>mGD$f_$b@rcLg11;($T%~h2_ z&(-l*JzZ5js%0W`p&f7;o&ZP}IV=FK?-=g<$-Us(b&uSsytCu6E?Wr)cuL3_m%Z!= zU@|e~CGg$!H|xFLl$RG_I^|930&Fd;HXOU#$k@YAI|p=@`!P(y>l9!-%3#bjKXGsX z=^Zd6EKSK?&6AWnye&zsj>bW;8e}1{gB07nJS{74#a$2&)=ph6P@8FsJRK!RZ&ei9PY1m)ikn(?$n~oIB2`#*AZ9~^{`7YF=g*(Zc)q#}yO2EM z>f{>|_q8PFjK|b-ndju!9Vg>)xue7xBquay!PfWdVK0lofXtrKKu{HFp6Qyn!LpVh zslMmkDYBpGl(Unu&lpWJ89P^`nW;BO32tSim=q{QZ=_1n$P63NPAVM$2cx(hU$*xek!~@u+Ii3gK@j%zBl!Yf*F}J5CV!uP z50~%Om;e23xxW0bh5z&9|5^OUKbKa<|9kS(2kxOd*|%FfSGoN|e7k*tKhDojo?6Ro zhh!>>h~PUg3Fuq^T*({YW)k*Xkz!^VR@VUnVWlU!VXyM`^XHEhX@XZ!mVIaPXzx7i8Z~dep%Zx!gxH-xB#nnlUbF62XF$sUxP~TK-uEZz>t}^3oqt_tx z^y3g8qvQ68N0zQsJ}6#An+u4?f;3jFYMt4A*7U6RBVgks1Uj6kSPE*&)bePGQf}wD z`c_WoAdHgKs^gjTjVMhU4{O~~W%-ExymHkpp!hH<+aXwe7Z#r~bku<;$!qC*Zi9i6 zqd4N$R-6DczxK%PLRvsiiNh<|a6lb9bB2dG*95UD|s|=X=kvscToH*3kepb=4|vT={080 zFXR@dsvJirE0_HUEK|QyC8{EgYDWD2;wg(PgLU#Hl4nyMo%|!wn(ddNzI&r%#Y0#k z`k(~~-Gx7^Ks&jOM}F7u_!5c(acOBXNs$zI&}N7c;g3jD#YagPX{OE*$50_;<7i|j z0gz>)CheDjGnlrY6UoexXJ zo%BkHm_F{XcbdQ3=@id}3jS!d%8JL>C3Phi7K(ve3T1Li3&l8rg+e)Rg)R*ZWG9O9vP>g*nu`czG33Hmhqj1_M&_4yr@C7CHS)XLN7%o z_!`A}$2quuNxPGYyyW+Tg-z)*?J6VMW#lNeuEy~;5>`$h|G?;*`wZv>+#vj`2xcE- zP}~u>4VWRREI|_u1eoTdX1D$G+I=jKkIP?#R zyHyO;VtJ?5p1Ok~49=2f+fOs=PT<17mVvwv@E_Q1F>J}&4ZKU_i1jt5 z%;!`cb?{}3n24UGq86p}w}$sRJkQaVsK{6&Ax1!CY7eqniYb9fZRiKNd4@16q(oVZ z1|f1V$5?V=#-7oliEqssHOD7B0Ojhv2=*{`|MU9i!-Lb!{jKc-fA9Z_6+&0o{(~46 zJiD|pMYxWX4uS@8ms zP)0$6ZLPt&H8JR()?<7NB5RoRz^I0QeThONR6joB@vBA*AI4)KH7-_#RHF^6V2Cr( zz&I!RHKE`_fR>SzC>(&LaXU5V{7O)r#vgh zXG3%z*5UWB_-) za?o$an=dC4&mAWD8CClSPK8mLgzccal1GKZukxqLcoy6tJ;isMPcpan^{P5Rh z8AY=AKji~DB*V;ZBJU&S&3*d!v2Pdl%Q5Q*Cc${1kjZ#W&e0gIAEW$P&$(6To1^B zP{w2W`F4AKt6J_cG<^Cq$}TF<<|$ULNL(uFtm7iQkw+a>6SmIqXvv3088$7FchW!X zZg@lgUPUQ1OrR!G!ThZIZ~=6u%)|EWfW%@&Hp3Hj z=`rHB7&wPZ&j&8GdpTRM1#9UFRMS6^D)x8vyx;5fe^!k|?f4{lIv|R0vzLSFsvu8U z8HOT%*yW&08d>3$E@`aQbujbwAQ5Rw@z3%n2c*jyS;=c#)>ts$XvYqWmVpB_KUJl$ zi>K<5{EHRn2kqOER=I5(sHm1-QDyo0UR`y-N`_e83?%?7Y9)YcASKoGD|Jx=sb5k{ zz9?5HWLO~E)5F_`_VkfcXZB7=!r{N;RB<}hJe%Lq%e0GWyT9S~xzqy9+%xxdQ;$6|M~Qvu>CKnW6pLTWH&rqfN@6$*rftt zKkkhx;aS@64Ksle0BI#mL`B_>rBi0K+@AhTcg9)`ee7*JnIdTjFdhok4!nx4TMAq# z&citFGa2j84nU2v0Fn(hI@)#83T71O@hp9-G*HPdwR$zsG6-Ts8;c`z` zSL&78Qb|UPvnY$=_^GYx5$;+Z0?i$+Th{mgF#yM5Kl{e7cJHEr4+|6KM4uA110khj z)79+qr^%p<;JJveyM^(`LY)ht70L;tU-(s6i77^RTU?+2cXF5hu!Juz`mNrqDR%Kp$+6$KkO)z**L=yX94M-Bed#vN452 zC;bA)`d>jEC@QfHSvfG(XBqPFN%>E1PJJ#1NpuJ|D?dpeg(Kq z#+>S=s56cF!=!Q^-t;k8pc3}T_`>$qi^gIFY_~pkXdi9ZE@jJ+3xyI(NThv`8SgRm zlivwyLo-w)pj^w<*1>zx*sBY?4NcO{?}9on<*7d+>EjRh#YF7mi249Fr^w48$c&2O z=Srxh<_eyt){Z>CO@a(PJ2PeTA($SriVuwzY6~OSd`46N3s?SF5!X>>!i0~!35r)r zYNfjO?gu6b4k^MH9CeHbe21Al?}83SB)*XevBFMg`vw;APLzVE6fl(p4U|u|=R&*t zJJ}6Dp>~P5?%#-MO?@ZO_Ki1b+tBN~l|E1al<|K1N@Ofb_lI}?W=d3cXo7HKk^Sr^ zS0)}iq)_3ujG*_civBFrS`OOuk8#a+rSaB3csB|Ta;t_892@mS$7gp+gl+hEU?@ckZL;?Z-M z7%vbXUXJ;ia@C^C{fDa(-mXOHC$0GZP|iEdQlrLj5FE)k=$*cdszdL!RBbSF{3+m+Z9$woK zK|7h%$rUho6=4c_kz>|_d#xfVOQdaB&R0ga?%p`#4QflPTBDNco^LGcwoxj5?MTon z8Tob8=Aq0dvxjN#jS+v+U(=R1E66r^jawwSx354GUf5xe<~ZpiSO&+{a0vY+(Vd!! zD#n*$86b*5r})**cE5iW*&l1w6K~yIX;eWJA8GCJ)dmy(to}@Il8cL|>9;*SgLab8 zSV7A}lFv>Ru_f)VX9DlJAcxAGRhct@&@eXk%Cz}&a0&>g@wiyHIvy9w);z>sP6+B3 zXyj0o{kkqBSD(Kwts!;VS|E+NZy~ik%ESXws-~2hD}UX~t>_0^>2K zH91bl;~T{r05@w)6Ct*9HkWC1pu#Ho6_Ob_1uX0Ry<4UMFg@@5#rtJ)SS3{!DY5Vb+5 zff@r*ZB)5QY#u1a$lcz$^6qO_$MuuN)!%S|y=WD&dKVL9jNP63@)L$Im0=A#^Fiqa zEKq1`#p>Q9KhCqn9#WWIH$ZjoMVN<7xhZ+TV+mpN^~-V9J(rH+mQ=L1b31F-37Kw+ za{UT}B!h5*j({mDiZNC~EdZMB%cn}VUi)GgUxBTR_WN;OK%Af*C?`6v z#0|-4qtrE1lsJGmR97Qs>uTLObTzzAm%Ge%sDp9v#t$7}wahO(Z>R}ZwaaYO_{34o zO421(j4W0HSpRsYfBd0;ynt1CJ1z2jho$`PY=N!$3;C-$TRICBfWRjel@hG4;gj;u z2H~xIlI#%d(My}%Bj}CP0p*5Du=V4G|4Am;!qWHq!7im){{)u)`+eQzc>I3fPc9jW z{LG$0etY`uslI6=PaL)ByCet_chO+Rvu1L+0{D&2qh2pqs5d_``uuniB$v$}FILE) zSHJaG0VDMjOZAwcRQ;5tYV1@je`C3(UUI3AXd|M))~GCn-Uf_+3$%o-(aPzmTJKTZ zk!f%pFHnmUMW)oXNl3_R80jRl4_zXs&=1&ypo=P0!Xu=1Yav^)JkgLTX;JII{fWEW zJ$c^eI<+xTMafqgFjxq$u}-_CPO;66IR@rq)Br!z~q06iyJca0#3V*qLn2W#^qnu8SdfFFrtI4;;a~1h_^HK z6c4!@C~6JKQi!a(ql1@@G4J-o9wK4($66F<|C^V)-){Qp)-GfQjzKM4p%BFjbD8-L z;ogCiw&{L&ZSv{OtUkc%7b_V0*BaI?R%oKVM%(<9i7dK!5Id*=7lwFHD|0lB$Hyn0 zCsFb!hsI%X{tZKx34E6gTB31pbN`iR#TbDEnJ%`WUo;b514;2p;(h{_bf5~6mE9NW zJ`3^OWdOWu^ZuPvGQc|+PDts>kKoszF?}@y#eguZ$)2N7w&nO>!;_ zv!wW@w$y;6^P?pW-Gqe*f&0zo0SLZKRdT4CWtvgr~Q7R8_ zqxMb|U)8)8R6rid(!f;aCU%?)h&4Kp=aG9t|wusm^}mxQFjNeYJl z7bzH0>K-$Aci=EqrS}|4&F}K6Oz-&s0^{;(aq;r%|KD?danG5uOI%(}-z9+Bq@%+$ zVm7OT_61l+2cQxPz9syL!haWp-&goSg8nb~@gbs*Cc!44BHV5>JhQ{vD>-2K*tc{z z!2DA3(DM{^cCBb<6H>p~9i|WOA6y%Tu>n6BE`j}fHN7SP+ahCnu(cHW_xvh0tw`L_ zXrpM=8DxU-EB3yV>>XXsmoqrJoIWklVDGoPD(!%W<^ zYix^sBDdJ`L}jA%`wynAICO599Ls#WO}6N|`~qi}UokBN?RW7K#IOyR$lw7@I0A1#ceL zfeHn&9pOX_>?tQ9tDfnEDW}B@f_vIXB*uOkUJrUAZHy-VMQ|(&>AJ2Nm^#A9UGvpJ z4R;jC^kx#6ip@KwLn$b4_(cI+ewSM@RV74hxUvz=~tM>HuG^Nb^k)sdb^Pj`0ePtrHup~>uDBcZ| ztNzXA1^mRaDBTemY}EV7R@99M5MB6>?gV~|C~Rja)1eeBPYNRb(oaCg8}$f@^C(HP zVsX2FeFme)GHTln2T?{a@hKhjqU>Fq_09W8I&C+?RQ&#&8eE9>716;wNlj%p9AJsz z3&M;@u!m_V@KI^X_Kj=+wgdinm!?Cpj;AzqN`xO>!D7tiN3B6leoO$uttp|;w#Yt3 z{O){Dh>nDw(s!D05JdidCpsS;5c3cf!?-(y`M~BKg%|4jpXn~#j(SVOcZ;wD-8{sT zboq`d$!GlaNu1*!yN!`zi$$39P-?mTqzDunn5y(ckA73Rp+!g26lO%gaNFW_FYKn0 zr`aIhIj;*1C^KRa3}cN?pl68WlSly=mH$9)%@l8&hh0psg8MyXCMkWR$dwze+Fo(g z;Z1lzOB@#?u7^~1E@!vob&+zHrjne6)NNS~uN+JcK)z|Q5s2kBYb2)vGNi9`o-#l5$ruNYx0o_cr#g2Y`S>>5@Wz?wyA^xlU0gM+aG(w6#vib>M{<| z6qdk1=H>12*=dUf#dgCa!g*iMK*F32Gw~scJ91UTHzJOZeK{0#<7wmYFji~w8r3l^ zn&q+P9@KN{sK{t!F@l4Oq_pGf@QTES`!?0m->fciJ;+AobqX*M{d0VyqzC@o7)HI0 z9MsHB&k;6KXNIC_>NF7`Z$hfVqERhZulib!;bcuoqMd#K*{^?Y$HQy=oAyq<(Xxf# z2@}3tx8RXaBR&^-;UY}0M6bu%y_F@rsVXX20Lch*89F>Ci;8uV;n|3F^9de#JA5u{ zlx9w&G;56Azdn}xYlppnc{k^!ePQMt5Jr%d-`MWB%eQaN- zB>X4+Vf#7z{Dp32LoU;c=I^Ae_3Zv!&20Xj+;)%XgLbW7?1$RU?yFQWoxi)%=8vJE ztoN&Ql&$p#tdc_!y!|wDNxK^RoZSN4oT{&T{2GbiT{c^a7>i-vK}Nz_8M8@gER#oo zHf?5uo^BF7qOa*dGyyZ1vf=Jb`sM7kIlBkIc}q|C89&@7D0_4E1HjO*)Uc20BFL_1 z!j^l{oZtbTvS4RVSI+Q#1oT`>J&*{96wMyUFR=x{T`6aUFF?BW*{iqQ6)J{teW+ z8_c8@Qg_a702+CqW)HyiT0H`^+i-R#kA-bOQWgbRhxk#PSsP5zH8*E(0KCkxr~B^T z%JY?33=l{2s*e3z=}nwXEa`fjAEd1RppJu{&G~_<2J>J_?$gJjON|~}TGCVd80xAf z4`|GeS9pH#Zo4`9AV2gY;ZvIj^+)UUo*%r^Omq0#7s1tRk>fhu=j`t7i=4Cm0csgH z|NQW6o4M?xM`F)gJs?4gCmHj1Q_}c>HJ3k3nZK_>(+3oR!eP$*T@~9tz|rnm()=Ce z8XCC`d&cPlR!RO$Yu<$fI|en?eLaC)J6WCCm3yEzXGZ`xcM><7hWr%o5nb?Rb9J!( znEi?Mux|D#(hPqOw$5iO*Yi6|{`#HVVYAV9&O_%1>@=I*gE@YkAG&EW8?rg&ogcDk zG6!T`@<`~q+3X&)$9;a_y2Wg`%Bep;Sk+)QRC8`HKU~vfHe`D~F+XVAMz5RnP(|R* zHiZw=<-oZ*0+{wFMR)Y0uA;nVbX0mUGiRp&zx-flHWdp8M33yQ&=p;h0HPk&XODHt zq1Bw-Ll4uAy)+WTLm6l{mm}ygeGd-{F?qVr9`t$lz`$o6@Xd(=uCXr~-3-0Q1+Mt(KL9D9n3^5Q?$@hll1=g-1N16Vv8_dCP}mJfe$2 zTTQ`Jn5}sBLNAF9nX~6pI)*8<)_q^&>Cev0zRMz3=Ik7xmj=9;gACxEJu!PPDT$+* z_cQ~DUefvj<(9|sJhmfF-5K5m7CQ8Z9(XfzDgy-Ec!+@IK}_==)!^95Av{3Hd_dK& zbT}tLbMah{=qcaSoa6vuyAKhzB)n|i105V>N%IHB$phRT(Ua5efmw5+>K;9sym$$L zj31KOWGoBto7WW&9hWtKz^Zp*3?JRqd_3tyHa?;cr=9Ul0U0kI;KqD-<-EQr=riAR z_Q-5h=cBrqk8CD>^bxR48)NVSxsDzn*R&wkdF@~5cN&O!Y z237{*VJf0T=zTg6Jt>F#!SI1OnHGyWCmx6UQ=?gDQ=k|b`zt-pN9|&4?)-ff+dkaa<443> z&4%v;BG2D})6DqnV9gF5;E$4c=y{!Yz@jCsXAjSb$9`-_^HGq8fIp%K-pn{6(K>m6 zfMt>B^Liwq+p^}f$L9vaKf0^=i0FjiKcWw(opF-^8P6W#!;-rI^E%9sKT4WEz=_Uv zghzKZCol3#5Rd4?X=nUb=)rx6j3u`*=JjCV*h-o|K*rpakVkj+e9kS^xs3AYUUH}Eb@VYks90iU(fq`Lvq z9X?39{DrtV`@Eqsz%ReU z_<+;Wy$SjF&ho440$3z_AQr6jUgn%#1N`!PowLW8yB+%Y&gNqm_gd;BdT|?SVvc~A zUmjqZ;{Dh;y9MASmuqK_k6+GxWH<8>kX;6T1bo(Ng1N!uT`86Q^iAEr+sEXmg+y4N zqu@<_aq&$Zb6E~BUWEe0^0}~NQoQjv{{cZv32pL3h5>%PHB+zrVKaQ$ZiY)sUTruY zFVsRzBbibDPI#^j1DP7fCXl2=cPfdhk6G|Me<<^AhW4|#^ud{Sm?4Z=06cHv?}m18 z@=H8yT!wm3OHD?hj*!`e=&;d`f>l2(d_u7qy$qWX4Dz0RSob)RNqxxoDTl4Pn4K;& z^V^hJ7W4aIl0TC{OyFQtGA>F_Wx9f4{t2^e#)$z1pT+e61FvPD?p&H-moi|hoGk_H z0^!f9P6d-qyoSK^JVE9IX78_T_g&15jGvFr_e#fN!F?}06TL>=Pcbt;n+yDOA*Iq* zpTij*ub!BMIPiPoXCQ1F$0vS&fPW^KywxAttT~;4z9Qb}*6Nt)3t%+x>m9y)4Zqib zQYu}L%psWj-czUWE$yJlD@gkZ=IYU}D&5+^8r-`6gD!<;4?f?->?j8_$_n!3RrI_`LONzb+6H;Y;X9nE2yO3K!>ZC2o96T>7v9dEU@Rf-A%)OG}#Luv7DybXobg zhON~Or~-6bKWSoG?@V78?Un%1x}|%Te1; zWDk#r_RCSYOmRdY0Dm8k)vq-V)0Ni^SWFD2UOj{Q3q!2Adh&`meGz}Y93DSA!B%o8 zGz>`**7kSGL5lBR;!?1+@yRzd#1=zdbnx3OuEO_DJMx$C60mNLUlqHiQW ztcI{W8@6hO-{5P%)L$lRwqYA#NZ|&6col{;P*C2b+eSMu1H)EwEbxnlgMZEb8BP2* zFDz+Q8bxPcq`11=2hj9Bq=%C_-zy%E?@vz&ztd9`&ioUuxJNH88fchv`#xMT)r0ng zbxvmFr9Iz_!d^h1JUkwr1a0^SguNilC(XQY*6NI!)@Z@m2O{&uoHF6O>Exay zHm+2c)R&1OZ>g$3=onU563Pnv4`G7rmPpy{BLsTqKgJhi6E@r+(%(f=giv4Qi@ZiH zNDA zi-E?p>Br&9j=(SYg>isi*Q@HMs*mrse+jxmzs_M6V@rFi}P&;hKo~skDmIX2w zK$t{nAJnrNf5dM~tDqYf8@U2?fb!*jTRTHpywo!NHNKM*Ur%5B2H1ac6?m->##cM(=IU2tF5l?13%L; zDt;VruV2A0afDd}iym~>K_$Y>ji?LC?~b1LhjC|xef@6|qCkHmvOW4PAf}}o+7Wd4 z2o6N{=n>R^9s2`J`}sKRp-IpIo{;HuaqfX{aY#{qkTraR)uTKB{A^rp7gP1`W|n>O z3&l_Iu?WU^uu$KJ49> ztfzVhRCY4>m!^1eaZ61z0QL26iIj^?gx^+6LFr6IaL3Z?yRzv10f~S+qazIz;xHBJ z2MSlrRxk?Q@Xy9tPM;!zXf?K4Ia1#lF+?=LVd07e6m~M8joHX{GARM#PVmll`(y5I zx!}Dc!Fy)}@4P+lglQK1u)QDUdk=DQ3;LR4^s-aMXRPD9q^ZFu1m2WSSX3wBE!xF3&K(Sq|jt&B6$i2wHr$7(QGg7I7*OP>YL4YHe9vk9Hph z3k#&2$8`K+B}5G>CAl4JSv(FH9u5bL$5VLl1{eU*YF~s2emikJ!%3OK2+9kv9*;Iv z_29sEexsIYH7xJ}>n}6?O;J1wnx=s!za_GjG_*^PX_`jEAO!C`$+YXE7dz0V;aL-TZ*@CVo4vUMUz+3iLT=A(t6N0vCCm;cuh9- z2Ro)qXKf5f3(;H#auIsGONzsS!Q7#Cb^^*L@EMqyfMe?k3Jv%Hq&0|}=^PNZ^};L@ zad64LdsWIna|#ECa~xb?3{PNw2_5*oCDa3Buko1MoeDc7&s&S#c20O5pZvEFWY`sn zwUt>J8u->~HDxZnkd$$JGzO3RIfyUMKjcaTZT3{mfE6 zwB5wzV(U>`5*mzVS8CRfpLX!$?la&q2_uKHoTk`hOqrL*>%HE7@*1?T;ETm%_rJVO*tb?@prTz5 zyB3j+2lj{gJrc+kb2}x}o&w^X?IaG8h7C6?vR`v5O5Pf68sV*dJq1-ztxU^^sJz7% zJ-w7};^X>>-=!aTZWl8OcVm~_Xz8BCP#M2n2D^bfkZtK548Ahwo0v5a^wZ582N_40TN7=OH-qpHre@W4M4}5Lgc3c!ph$ZR#gyJ6HGT4!;CWbbIOw2? z)Mj0s<&=?%?W?u0+Q6<6b+pwN>ZqP)$!NXP`P@ez=9%zwLM)i#MJe~1aH;v)5FIw~ zh1F@&T+PZrEALbr)s1P68C48}bo3*c|I?uT+9I-F@NsE{@Xk>Pxr+nksOtF4`~pU; z`|t69x*MYdL@nI+k$jL>>QNBCk51$+gUpkK(8j}dK~M+XD1hBYf6!5KeC)|H{Pz*) z;ZO?Dp@pPO7?AT!$?0xPux@Z2;IHOZxVUJ%Y@vrJzK=p`^A;*u3xrf^t%0IG3w{mE!q8E-q@H&4b;98W*ZaX?T~bELX+9dY5!UTeYT?h zDm7I7DL&7E_H}wKK=aO8)~%fkL~(&^TIyRjuvWDrzlS}_o71h6AXFQ+~l%zU!_* z)>Te_Co84tcrkF{qhM9`W|uyfSFKp8zd)=b(;>agV(I5 zt-P%ge_nfsyrL1S7CBE`Y&6#GPP^flZ4hjD-W*O0E|fPttlKbsen&H4JhM z^=3=R^8*i$bA23}&`G0%luM7opkCJPq0|x~U^kE_g&l#Rms=0)h_&=A47yT_Q$jc6@wyei%nTh9cNz)c;(n?6hjU8##$`1||O(P@fs7Lk*T_87RM9I_+=9a{>9 zsW{s>nmBGp4A@O6ZuFf9e|5U##$3Q!&=L#mR8387t9fNpdZ927%`F3OUlOTOzNvTKWx=k;?Q0G z%KFLgxJGe@>PQ{E`dy?Advg{qf&PkGZwvov&@<9PM_mI=^VjcQ25YUF^p&93gghw? zA|JX~VAM?yo(4oWQ^%uvnvdQ`6Guz55r;ufYWjQT+QYO<2<+%Jul(()s~N^=0WEd2 z;4P!}$NbjpwrojpY8P^su3$(w9~rk_al4BPkvrRJscN<&hDSk+RLN9-s=(S z9Y&k?dDQ2ojod%W=%da{-b-FNGz3r)-|TivE-FAy6h;P+r>162b#vNim0cCwfn*7e zl~GO{fxk{pSfC;c?8ph@)*%hQL7pN&UVE=ICf|lxiS>owZV%r$Gj1pd$3L zaJhF&1_8;KS$4k{y%YI}x4|3?ojXXhRy}eb@cCOj!A1!s1C2mjp&bin zyH+}NW2i|(Dk$3++C7k6K^8N+B+glZtP8U!@++cdB&&>|EG*2zs#FciqSxi6#o(GD zb(<7LaS;_cS{3%FtVeP^4MuDk-ZK8#$!jtsuu;|Q(EejonCozKCN?nSe1|nhjv_LF zxGFoy1?~wt8J;Q1}I;Y(L9IXVs7d|@y9R}L4;Y@Glqs>mA(xI>`! zMMu9D(Y$Hz0LAdv+Ly3qjeEH$#$&410joHZR)dAOnOM&RlEDlLt+ga=_Y<+5w!?ww zm{D%BQT}vPKiKfKD`z}bA&BfAMUuNxVss6Q&Q4adya6ltnB*VD4-~e_E~?&VF`6uF zqm&1jL{pW%0yqk#ku}a#`Uk|Pcwz9*p%@B07Ng@jb?=k{6YLQ=F{bj|(5;uPhbohX*43ieV?Kmt9`LFv%5`gJejABb85ER>FrKVj#N z(rv`EA+J-(siPqTKlzD#o^NtjWnB8J5$j+nlwx4k%nrq(C=A&Y%%5(|Lk!I>I({Gc-5sX*|WHK)>DlZAwn?;UNC*lRv5gGnpyaA%UsIOLcN8ZhQU^d z2k7dQ?=(aJB^MWbkWddG&hWl3#aE$wBhf@=8IO@lB%RJw)VtR-bCeP0GF}H>Q-Gva zNsg)PM75d7C=&ZxL(^iAlAQQbKK<9|uf}uF$&G}DA#p-W%D#_~%#6AfQ;obx7*r_5 zCqQrTcWW&>E`YMS3~;>0k3Nzy3vryw%l-o6Z8_uW*p^Rd#p%Q}w3AGM`+V&|11hUY z6KR6knkslT+6r2b3%-g&aw)6HqGPnSY#=c#cvLnSrMf0wgl3(DtRyiE(Vnp)Lj%ud zVRI{dd1@GX%P{oUFgOj5w?YhEtbGmruc2oN^OaiK7n6y91?F^#3mv7@#Fw~EeXXqF zeCQmVXV#|1N-L6B>0?}5^5#J|*70;e1a*T{|2Uy=Q5Lpuq9a5W{KdqvJb=^a%A`_J zN`G6<6Dcq5-EAG_u4)8N7~E?It~%yBqT85gfMuoVHKiOARq9IS zn+OuN^AD#sjEC1}B9RUE=yxz=4Y!L2Ld>k8XfQ(B=xkXs+C&%hHUn}tClEK})3RnI1?kkDb-y;hi^ z+lhR;)qkv1$!Cq71!oNROG!C+75Dpt;4<;$ua6*TgL@RW4Jb4B-r2oRt3XjCi~RXI zgas75;pbABtyeeoJ}00QbeRS60l}Hq);s@!f%=eh=-{MwU}Z(w2y7lUskwTkfI4>51O@{ivGs=ik$Q!{jMTkz-qv^`t z*`naz49Gif%@q>BIL8w*rldx`5#^NuMyBviFfK5!#XDv(4IMMFV4RpP*vW-WrlM9Q z*aOvu&|vt|Np22V_#y}%9C$olk! za4DFi5$Y6~F6Ew=V(Gg$6>&k8f2DRy6 z5XNb6%P93D--SHsW8%xd$Z&WclsOoE)gErErLbE80 zGmt@=u!T+Hlne_d+Nl7Mn>g;FOp~CHwdRabZyvDh6e`TsL;I-T4tqjPUhS)c#u@*v z#sfWNPET3BC+a%K*k5x6u(%C|lUYc={2JoyorbUA2Tq@@-Q{^prRsqb2qrN|Lt^NhN9gnV+)8ZaCQE z1oEA^`Of|Q)HieaZ?WzFM_y%+dlPV^Ul7zA{eDm2mh^)G*tG~d`80OJ>|*6QysfSI z^z*#e?Yppmo|E1il)ruMEv@==q#D%a*&S-O-PloSt)G+vL^8UxhS$?vsk699 zeS~Kzlxh#M4SRbTr~q2xI%Gvt>*X_86rpQ{5zDwmp1CQagzg0q1qAI*w!E_H<%PSc zo{J&d3SZ)tEDW*;@l=jQxR4tJH>!c?^?->EhTSe$Y%l}CE}M;uDYIb%0gQ`$X_b1K z^5zB|*Gnt)Rby3H@4F>JBwTNZ-b?<+Q~5OF2e^%eioxAZMAud4omnKuz_l)As)}0dZ*+{ zgevGbJLO(BI?7*OJ#nX-mLdQtylCC2;-wW_i|Y59f0qJ_N+p>Q0N>gs4Y^<y&L?QBFGA;5mzqk&v$fX-(+Vxsq{FV)m_KCxf8T_}Z(56AwXVDlYt>(j- z<Uf8srv0yy}>ko?r2 ze*#R-Aajf)hnT0ojR6XC*5rq*v6-2(iZ>$L4C8(rf&Qo+r@>o>ToSoQ{-ACP5E;Ho zk3#Z8b!$D5ARnv$bX<^lr3KRnB{6yof`n&v%?q@gw$W2J4?O9O9G*$hQ!}^}Qe7?^ z%$URC8dJ)P4s{>0?hpEu$Kha2C^@HW>(v=aGQ&`$z`1 z;E^iF@)hM1qPx{O^zYDGcLS9$UET($Pah@ec5w*70prMz{i3k$>GXbbqpIURRhRcV zl1y$?9~p>?GzY@Kr2T}*T`S+6J`(=H1-r)anNxFC_!RU)mWR3&=&{~#a%b*Zs^8CS z6oyIIey%w6uE?nstE2@cZf5DuX7K~;bYv22uQFbWPPm+z=&^x!@?kP{I-Anst}MQ^|=$d9tAbNFHx%LEa@i3&>;E zgvwL|_K*zDF;O(A)3f}X_7@5D;FOVMv(F`1$(U>cv3Vv4#*BF|_)F)*8sY3&oi@q#ZUsk%(K8Dn#< zSPcuT5yRc6fiIA)^FG3qK`+5@FtH};y24kiPZvQz{ohhPCa(z(0T)qbvCsM3DxYOaxtqWe|4gM$8+2 zJ!qa#-15GT#L|@RWM4A~vKEY$6|Q{&GExZ%qHP(N3%907PS3kQS`Xk5Bup)sCAs%t0m&1^{U%qDwK{{6gKM>ES)x zl6f3R_MhW(4iqg_{9eia`8gfQ!e8}~5)3$?<5>D73%`U(jBJ4ivFf*c@h(2^)5$CT zkVRn0o#9#Vb9o+%zx78!O>9l5RcsTSY1u= zhOU_JZ~gQ z9|J@d7okfm=^=*ny(Xvx1wH{VrzXfOh4DDa@EN-eUvc)5jocLWio;ZWYTR0=H)y9+g4y`>QFaI4$54j9l8YQhNt;`B0_8cZ+ z#Rjwi294ays{Y;!wFbRp0N4tU!0oHg$Qz4`Q(n}L5R>uv$n%eo4j5eLrm!be;iVPb zHR}t&rq#n(+zv!L6BuIG0c8B|-;)2?gP)b}#!YZ00Mg18*u0)!t^5ozSCwuC=tBqN z@usIR*a$lZqc{t1Kj8HaCy~8I2bc|(0-k#9;ks*8DR!;`ASr+arlG>H1cK$?1DZ#8 z$zm^A3J_nlq$-lIxDJzR5`c}$_az;Eb(Gj>%GOcRIKq1efIL6}gvR4N5_pmo+&uUU zZ@({tr$)%}dunaLIyg#NH!u(zxS05;0O>~oK@J@i8fo7H0DEJPD*^sX(U@__UR5& zvd=-W1C_GK&3@1Oc{#hES7rTN*?x-Ik=%s$ysJQc5s;V#;jCLY?^2yP*GV>CSbG-Y zc>K}xNp$i23b};ww!I0`Lpcr7cLXvgdD%DjO>c~721e{>$2VY^tOLX7&dvqrnXr9f zG0tV5FW}7Z7>@^nV~v0`m|RkM3ue!;3gD^wuGbUYuqOk38|q#Uj7%+3B()7waPG|0 ztfCOAdS!10{j}<}s#f-Z5Lsf9tMUF|e@~r`MCaJXrU-JRVt(P$*fU`#d=Hbp+VNw)vsD|qclaF_iB4QAAl)1;Tr>oh?`9UJZO!zS@a@q4yGsllMqW9HFWENCiwM&I>t0?m}agYGa(eh!}gt-Je{F4c~|{rvXiWXb!M{_|Vy z=?Z>e8|TXG1qtYe_-W#5RT@|PMv0pn-v7S z2Y~|Ro0aok*i9R3-r0cG{WsLo6w$dV-TZsglM{ znzH&Xx|2-bRe!A1ho`#PwcEt!O;U(?qCjIe;-UWyrazWnw63@01JbunbIuhU&~1*% zs)W98(9=4i98)*h%aJ*6y)jJ9NKI+gMeC>{V1+g$5j;wpb`Cun%ET~_c3{SWsv)5 zG_ek5c{%==5ON)jT*o2@9gWOU{aZ1yEUtODX6FaL_8febz9N1#-o`fzZsQ&w_CUxBrPp#fsJV$WpgFZH&+}o@BHPLL3bS zA}fNhuled>m3QCkB09NkiYA+cJFks0rbZPLO9oLj$5Ow1a9VR76IInV< z-iwfATBjlyRvrj`m$MAW>t6q75rioX5(eO+48SK!p4*S@7qCBxblA%rc+)E7lcX2H zZ=y{H%qARorZng>0C%O!P!qKrQt@>@LHQI82-{f+2Vf~?4M+L2FVOv+%cD&y$7eie zTi6xF^b*E%4#e)^mpvDhr>B`ZRS?Nmln#2~NME#Ox}@4?D4hxED2r>YD)vL?M%4y;@m#*x z0O`}d*a^=>&w2eqzTWBg2gR4GzstAll=TV^<(=2hRHt~O7UY75~fHEy^_QGK*oEmGtX*AI0rjPsOf&8|rP}u~v(*<8&Q#gE**#(P(l&=qC&{WzN zxQSL9pvhmw{hu+uKvyTH^zvH$`HMne7i{v@Z`Z0;YUT}oHUUi$uj)1Mm~P_d`J!&3G=i1)o=uZMyg`*3%t z7w~o`!tCHZd}&u>&KXT@RJtT*?*Umq1%hp|5{oWoY+V5+t&jBNR@i9zb*nq#QHLN{fd-0-0 zC4Fm4EIw0%JqKCO!15{z?k90B5)rq{s=#PJ4+p(z5O9?1aX%hi_lN0}IylB%{7yk< z8W7TMR1*A|HA#uuzUlXFfa6Kf%ZgRGh}8rA$qAupR9aqr_WXIHULu-Y{+EKORb@vb z1!<+8rO@IlC?~kUJp2X8_1=|Sx(zcQr?o7SK`4Y7B@h*+jsXd0sANip;Z})sek)q! zDk71sZJm#fzfaEw9r}rc{JXjXCF&7Ms-OT=4?#a(LR$-Qx|n{L*ngH2+W>!%Hi`;0 zE$P*`F<2kZfXCyv#rWa37(1Nn!0NnB?%ymOI%+@8sQuDv?%7)H~=8 zleWMsCQfDY!`9Ia+s~RC$;%sa+`M6&oamm-jyIB%X3ldj*sN(Y^aGvT&d`p^6n@;XM3OVms+PQ}Hn2^xsx5KEMMSq#m|{cCKPJ%)20Ry_6kf~$Ofrqy=`|py zaJKT00Ze`Ac(vX#WexjQeax)xEmc=mFe_F=r3S-Pz`35?(%fc_&}8F{2z2!<*VZX4 zX(|;EZ0_uhTlNG)Lz?zpPM>*W=svY7W9^b|%HPVCZ$u`wh0>PgZ)MAanJvrTDs01E z&j_qCe5bt6jddo7S(Vi4KwW7TjHwl>c5)NZp>Oh`gmY$A4#+nsd1W#Bb10Hg9vf3=>nV26*JQ=AuF-vXO{Y-7)ViAkkr&E(<`_9wHD4}k ze-deyugS|~Eu)F^YEGf%5LYGV)yv+Qnc%v0ZYJ`tbWbq-#V%N(5eXo3F9asv?Bwg0 zzEsq{khACzo0Zvl-XF+MJ>@5wm$UW5Z4DRql9#fb)uVX>w^Y_-b|J5tE0%Rp*X0GlD)>u5iB|^pgUoxTV#`nNmjSQ29YcoK!MLo!;lVT8UOoQCw5>Jg0Bl#GJTI zYv=T7+d0Q<)7pNj$**UepCe!22&d6re=`JKQPPV0N1b!GX`uURIGIzMfq93#or=$i zAmUGhqZWa!sMSyn$DH6zgYcIcq^?&O5bSxVz!cOmnD2WE;=tIGcPXB~sP@ksD&)yVA=D$yZPJ#h}jxM`@PE|UI*92(qlNNiA*vt3$ zkr3Oa_CE1D30O18hCX6tjG8N9?*Cp1a-(L+NRBogrPw?CSxLl?VU!3HoN5m!12is)3*2=@HSjcJ5| z)YT|uRjSk;F{*?y=9G;qalg{*$6z_&QQk1cgS^I(uJAMJ_3|~429@v}#3t(sL%3H^ zB(2CU`WZlAdb~QRd$q_$=)1R)$|`#en4_Td&4LNowh^ls^WUijhoExQ8gtb zHb7kVGm|K?k9P}Rf~^nYX5l6qkDYfnnfJA`ElBat-=R*acMfMCPE6>!I3TrhTMbObZ zkoB`M5u*KUdx;F}l={SYTs8M5E7zzWCtlV46k^r&KBTnQuavk-YZwx_{Hl^WJjsB& zL{{Fw(;rzhs@GjKz$_lTuheI7QVjaXcul85F-A9xN7adEUnr5DAJS1W=SZYjx#407 z#ln>4-o#UJk3ImAgIs&WApdK4qkcF)ioZ4J&vQNV*Q<@3?@6-AYMyQJd&h$wC`;e} z=eq*?{eLR(pYNXk{eQ048tf(f9HtgQtJj z>f__p<$s-g>-^KJwHn`69xPa{9m{0%%PS{Kp4Y;%rCb^Q_sP@9kFbYU!$KHiz2y^K z`$YFKyN>ry1QtFF46C)FnkiZ$@b*zc8ah?5q?04Xlc#>SRK8x;-um1Ap&twX3t3Rx zTy@&Uj{zU@l0z(s1uudpys7tvmwllkwf5iIr7tIHHz@tY@2K_`mZAPWgSrR~E9`Bs z3v7ScPyB8C6~*xD5Pl8Nnm}ZBF{uyiGq4ZAFyQfQ81*`nT*j!kph{TqdgpFb2y_(> zD4gos)2d_t#p;JssuPmxrrAaiisr0GZ|nnL|o5pndRGJs@R+ zZTUcS3l7zT!6w*{B?Kk-sx^a4Oany*y5;h>lG(NcloG&(`IbF+?tnnOPvqCF`GAyi^;RlXRk?^74vp*} zmR5btebbaxX#q{E%2)wgsWx&I&C!N2&(dmP=W`jEu2RAXaufIybD3*{Kek@(9k3|X*fu) z)TGGd?X61^EtX4;S5JUN-X5==AV1i>vjw0VKyrBX>;!n=i~9zq0^U47ftlZ6Z>kNP zA$arK2~Kh(oOh9+uc6hxE-o%aQtW>9@SC0mPKHko6q1$Rvn6wW=dZ$c zE;-W_0*hj)WJOcDD+@W-X||e7cwUrC|1BvJmni3)F9%%O52l%GPH$Nm2u1pmz}sRy z_HFxZn>|rXM>$NHi*k&Yx%jF++W!xx&< z-SK#XMzV|fL^Q&?^tlcBVS^wqY?pv`OS1J>-QX+xxLGhWnR<kju`nSjKLk6WdL?Z2}4G-+t;QsibZbW}Wvr@0a(Pd4g3csdcTJN~QDU zQE{2{LYd=1>~|w%zr5pW?ta5j&?*o}1DcG}QprzC5+)J=`ocM&HKONr5iYzhJb>QG z2QG!Wl!|*K;s8e|zMxg{BmVub+rMsqKac)|UlgEf2c_}P*B}4cJPwtS2Sfjkn({5i z&{+Spxld;QNq0`4Jf%CR0hCmT_t?b$x&7;3x6f{$#kYUl{t@5CjkR(ufUJYOd~p{j zU*P>o&=_D3>PTRKA|mUL#_HCyBjd@lrFQ7i=PlWq4Elg~1V@Qq4`j0H7k^{YivZl7 zv`J^K>bppLcaidbFa*!PIk^sv`xsk!`_IPe`m>MLv&gguneFFwqPOq)LtZmLu;oW6 zd-#I+CXiSBEd1+z_XS^7{Lrxb_k|;pdyb3j{9P{cGGpB@(>mLc~w&+CV<`+&R# zgdd@|w}+&NG)oLX<>H@R4~N;odi2pgqA2u*+RrtFWVtTnK#Z@#|+jYL^BA!`>aOxIQ(SC&i!sf%6^3j7_ppR|EVMz zki+h14!=-4y$WMfqgNqTMMECf*6^d!$BMNy^=qa@zp93Z_ir^?+WbiD*J=dn;jB!n z_ixYt)QTEvCCEaMw)#36>=gN-9)&u@MQUUX9I1brHGXY=e5^V2uPlTLVamigrt>AD zpQC=~g(5`Ht;AX(cS;yqrpn0KUi^xMy^)Eqov__f;hE@*f3xD5vxL{J>5u(A>bqx< zD+Z6sDT4Dw9k6XRRs%);nboq7o;BU#x3E}%e>m752Bh%*Fn9`vnCk zdS3Aw*7@u>9VYvEdY+DS&;y%2?B-u9AH0GrI)JNw4(oh&lzpF)L+?iKLcPVk2wZzL z&W(n;VNL5g>I#e;9s2RHa@g}XE_eSFR>4)02cN2|3Ze>htKM>mqYrsHPWDJt-@3xX z+0INe`b8CL#dZC*=NWp*J*!P>7~_``^eptdwD*->NM+Dzo_&X^Y_ERoS9DceX>|7* z=*vUV(W9H#xZ2dPwI>%@_O-w`#_`RpZvF+NE4o1MM%6E)i$>$;d3-6#h<|u*S}Srz zLGDrw&{RA$QfGkRx7xF<#o0OBW39PI&suY{tvRQ){mIJm545?Q$LP@Y$Sq-|L8*m( z7r|nzaQnK%MT+lr<05zYI|>1F001bw92HjdEqdSh`Awfce1jbXJ>whU4bW~>-ut+A za-zo5Y@erR>GjD;Es}4&$Co8co_vHVy0HFrX-?zO6F$D+%Aysw0y zV4=H4G<{#R^uFkvSM7|>#hrEBA`3$=hTVO83)>``#Jx4WG^^wM@*@p@CS(4#`o;@f z;c*`$N5dK^#@*p%JXtHRkBO|0&SrOv{v6-e%#ZS7dV)(Cv;U(2%_)PrQBOU;Tz?at zffAD--?8suto7>_*hy#6ZQvbrBEL(;(}YqxXYoXjiqs?@PONjwPkc@~@4SkV>vY`t zq9X3Tf}TBjGDgc^>+$11>ljc`*>xH}pFX9`=34#FI^KWYu^(x4#>q2^cC8;kr!W1E z-@&jGqw%ADmT(j?dJF{vZ~1+I2~z!wrKu91mf9;mHZ;N%4*DimQ;N^3y0}3=zTEF0 zRq=%WtiR#$IV1b#xy02^V(5E(LEf5g8qS60%)Ruxc9wLSs~6-t`36P+--5f8l-Hm} z1Phn8`5WpjF;_3tZ!l5OE7g=QaUF*IQhoQ5T7^g5;yG$tH&$3E$D~I%|a}#aFKV%?oZ=0(>q>o!q>R+C|klqR9G996AilE@dDSl(u^o6Sukm2_R zu8;Vey5+90e}veZ6TX4rhXIBHKhWm~!#=uwCWC7>6AWF13%da|39isEKZq|>cKMLX z{F-oby_mXC%^NqKKW6*%SOkDOKbU~lX$XB<`Ub1?B_c2StzT*V!qp0E(Ee_8Ajf>; z()?1NBVw<SEyU_Vd~@UH5=dWtj677d zSo^p9RH8KgImpgwU<@6_be@MGoPrRBj%p!{1f7j+I7IDMgR{#jC?FqQ_JO{`Je=p< zVNhgxo-Ii6e=3WWbD+=x`> z1NtF890pD9^X(h7efkBbBHTsYRU`KIfS1HZEKf#Pv+oX1w%&a>+1=kfdcAe>=J~r9 zikT>0(y7hlVpC;q)wbicGEP4%*<+`zbK?~RM z>kKcu#$9>)fY#Sqx0C*VlcC}!z9bR#VM~2Jj&48z&5658rwU;Vu76AAMkOmSCN8GW zivOx-M9jK_M+x68__whFpc#_=iZL!JT^efKVFc>v+}MtqAp7Wmm3-uPir0<1|1`7eEB`zBd8Q>?#3GR$SS?#284n z#@;k*wORGb9(-;x+C}}PkN0Gm0`JlS|PeR@S>{O^jL&5l0-GzgRM$*T!dBV ztCwsE{0UiSsl9aq!Y_S+e!n2+v4VbY-Jzz@MGMS`hU7(5`%Z32GKq1z%BHQK@TCsu zT*GAC1zOYvW$vO=+pR^Q>$H-&e+EKn+V8ZYG5&kE+MWH5EQ{)&MF0N$U;lpcdAD2t zNugD1GCn615*EF_i;m=siyj6*IBG-=8x|X^(+cF>ZaQ+Kr1+2?unrinvhUc;jNK`5y+7ktBkcok3jXUDS_Qz~AS(o@=iD%B z^S;v?kj^`opD*1rp0jod8Cr)u%q~p_y{Af0fYj}I{P>(#DGHP6EbPE6ryG!L};(U->0FPhqYLCGol^7t{-yl!i5MDJz8Ut)VY0H$RRd9*oT-^2Q? z*q}vniI=*Q_2itMtK9-I<_k&oSe>sK;2Z>N?Y#{HjK_iR?ZSvENI`;)6ojYvf$Y*( z8PtnXNnEaAjEBYcm8o%p_V01>^l9S|X(3d<`rdK~uKxJ|U(cW?#i+hkQ_J{vj+oZJ z|9qJo16BSqOG5|*_X}MliO`&ngNVn(U#LaV2l!Dja;qQKN<8*eRQq>MF*=KXKkDWQ z?cZW@i8pPNKAxLDN=SNtgvUCM{#{Y+zhRHVY;V;fb|jWyX?DFGdjlgBOG&!Ib)HUNnr5uxL zccDJv3G{3nsGVX*gaU1`Oa!qeOFScSNzv;{f7{ z8-)Nt> z;{ujvZ=B@&XK%71<#-Xe{b0it=r0Ha3Z|d5j#OpV5uEfztbjR$WM`pAg?MDYumPDVTVe~S3yE=7wZcc`mvWkhE zBuPAl4MusQ#i%4W1@UJp+amFnNZX5#2QHy0l}^&>1Q7t5(Oo9AjeD%Eu4%c*bO4WqX?cA^1`RiduE z&iKA&=XrgTFZegOk40&QOb|Wp@HO@qk$Nt)hZV0ncyZ-=)-nOt*ikvg7CJukBUR1T z^%w|5!4-XgdJ+e4HGL>m^dYDR!v}LE>v4S->ahbU8LqP3Qf0ePncG0?ZvU)zK*~{H zp%BFUnG`n4NA(?>yqqh}@qco`^Eve{0l0ta4aBaG(!v z$480WL3H2RE`4en8|zi#qN#N1`&h})0$fG=rHb}T6>S7VaDbKhI3r=BG-AfF+?#v5{N%gQs9xfwdo zjk5PGQ6wI@_yHS6vJriT@-^?t0ZZ&m)P))Pc!a z#up@IFeWA@QqghrPvV)@KjAlKP~Hk!rs8&?-p?c;~Z{ zp_LA%@R4Du3&UUXk*~>3c1Ekvw%J5%t-mzGoh<+e;eac(eLNDmb@*s$V7dKVtAe0H9`?DPzz8_Cb8~m%U3A?l?+99A+Thp$&;yC zgc4S#=@E$Xh>eF)DB(sy9iEq4%*%c)kPVflb^| z;+w(7UJ`P#sHCKZv8wJrF_;&PpT*~5R^sl{%h2+>7GVac+52bMBYv)no{9EAjCKeu z8YHOL;F%8+Yff(y$agA}F;ucPoB)pvGgMoW~yog(Ehv#Q;se|Nv0t8~qzCmjn zfO9l0S9+g$k)o3!5Q1@HE1+q+4~1(nz!$*1;ug-KhWI$UX}>>6;?|!v4l z3qfzI%2h_GcCXN!|BX^P26#nqvPxjVz6K7@&q8}eaQ3S6%3tvcE(YKF^%uS3OI6>U z^7ZogFWZk-&%&F*#C!sT!eN*~-+)s_T6|#5b+Fqdu2kz&Z9|!f?B}VBi#+lu#w0wK59}IHfLKTHS&* z=dWmm`z{^yg*`0bjJkBt-mu{dy5UoL;5xC$o$&i%=%nB*DbnfDU`wYLmWc-YH2S$2 z3Y?1Pu1R>Zb9@f0< zloBTG2oH6^Y?czP+0-8TqT2OSOH`Izs-PF88i-1G#g+~2DEFG_g@?W3=tv1a+~T_6 zQnP{v+{eMDFterB)GhqL+NM?9eh6(S&xqMeUR`r~yOqkozVfi=dAn8Ng{TX5XHIWP zb(0n=DL|=~aI1NBELH5qQVm4kykg6S>XmR^X#aQ#SC)ENfLCDn0zkZs>!<{l@xn`Z zuacYZS>BJAi4-V^Xa4lM7Gz}D4Ssrn)m^c>!&|s2FjYV80L=7`|=*Mf(RtQajjErtDR+=Q9d%0T! zH<~M?%nyRm#J7$tMw`@q3o!f-&*&`b7*Zs3*gq|;qd0z;^8Aq1_Osd%C&aN63|6jI3yf!1u-ajruw!*I1VI8x!ZLuGJYtCLAh}lEyD2E2gR#*qfMp{ z55{QkyRP$O!uEYkL}~_KM|c;5QiKNje-HW(BcJjZZn;Ad=al1UG9+ z-p_K_%e16?uwnmh4Yycf_80IQ5X`#gt}ZfM_&|^BJH(bF`T=4#PI}|S4IddULa-oD zP6uhvVd7MHFk=@3sav7VlVME380}M<4Af_FMl?ux@+lr*_1w6S?IM5*s=Q+2P)VNi zp+*XHNXsPj1=;8lrEo~p_JA7E;*sUTg9+Nm?E|t`IDo0=X5nIA@A$*`>uKd=BL$*BD%P`yy&n4WFBCCTB6roYAVzMp#nS^BcOi{Br z-VbL1HM4K{Im8v-I38G#-CU6sVaJ~)NGK{pMg$EKy@Oom9TrZ42NR;+9kR9BVG`{R zz=lO!sh-ZWS^O&K>Hfrx7a0&7z%Yq!KN~rA+amKp05z!O!R|1Z2vY+MZ^Ap}4o?i> zr(xU3Va1{06nHS%@vylI5F_0*kfI-gjWNV)>rkD8XrJ4s#iDZ>Ls|+pqQ<$4>F9` zrVF->Mpcbb;sH=(&L{qsm>UiXDDzCs4aDweg|fgK+DGx;2?Hcj(ljh+kH%fn%?b+m z4}SqN^AZhItI53d1$ZlFH5r&gvk!d5EmD>J=S@Aeg{}a!NKe+F(%=eS+aF+uYG3jK zq&fK{rCqi?qgyr<%sY~^el&nUmP-4uDc4}0>w;`LiL>vq@-|mbbO8pAxCR;4!mo1y z!ZI-xPFkX9hhv2aq8^Lz4X(IFx^U?wT{Cd{?JdA<@xXZx;W|k|klIF!aM`7Iwg7F8 ziG&Y#nvr15i(2H*k$GAR5DYmoAhjO#V_JZ@XqKe++Ar^T>+1!0IO^)%As9?{Qc0p5zpBi?IT+zJ0Um+Ebkwp@`jwaDRR7tc&v)x|JZYvuBhwpGd1x+6&f zFTprJ89<%0LWZBEmU^koyjk>BMFb|^YJg2fKo6+umcFY}wvYnYy z)UXa-99~(?io$GTKBCrFlwBcPQf02A$+`ro@IKJmIXt`;n>s?Ycir=ISaPx;yb`3= zPsw(>ixnp{i0ZP29#-U5Y;v#Ye7M!aqK0UDr4|%54-3E&$iACQz?Eg;VA?R~)w*Pj zgH>JMKl6~6tr;XlMze;8x+1oYQcF=Y)R<%{2%u&Gf|PrGH0tIzUI8{4ROCsqtQc38 zBl|&RrrnKUkvZOv704Uf&03Y1_gO+|P%D;UTYIX61<3N?VJ{kcM2LELi8neeF(E61 z2UGHySL3pg$x75?m;$x(KTn!g2$xN7(`cRYyd&c_*&y!0Fa`(xF}6vRnzfgW&|v9d z;^da#R(|aoY6X~cEV^2dQQB}ff<)@oN*1DWPM}3ZT4N@?fuwNBW>JENldTK1yh#p zkVoV4d3gYrX~TmojZ02_9?;0SXnt3iWXcGjGDNVsG$PK52a|zIdS#MrLxT*{;-fH)$tJ!4?k{7lcDBjLQIRvX$m_Jg z?<`jr!(5+J`(Im8th!o1_VCFd5`vY2g7$d7KPv-)uA+mwU&tI{gjuqmN0XtC zPv><$R9hr{fFa?zK?wPni7;ymqfVn`n*gERD-)!N;% zI8c}KY%%o9^@_}K5g%^ROJA60^eMG(=iPHbTwp{42^*j=7rhpg3dpBafhDgEr2@~# z<2*f`jB%)!8P$TyNU)B`ZsWn+D3f%nY9#ATIm6AHlGIkr)RpwlA~E}S#rTov-778^ z7Kfx14P&$yNuG|o=dLcC93N;t2>jM!(NUL!7_k_YOpC*wWDcZ}wnpO|#N3r7i$jpm z@?q6h6id442)EaYBZk!|fnh)qkri!h4#~*j1=M)a9rY_p&XJYp9t^G9c;#AFy(y6` zU|M2ynrj-*6m4!g8d3Zc{MsNppCo`bN5(-P93s;*qkuc_;S$tGrF#`~%>{+$ZdVux z@o%&mGV-EA)>(cbtBg2`HP>8HMau{>fHrIa6d=by3lKSUGU`(%$)A)6K1~JUxmHtu zj(|p1xtxr#!UB+3LNNf@fQOq|kDh0C+i;Grm6UT-5o8XkzhrtTXQ%=^*L0jSN7j}A zs!*Q~*xEQp_7x3MNOC+Th>HeMfpu#^1x0yLu$OFO6v&b8~i%AgPz@gt%$JNOoovSRp&tA4az`<7IfYkAV;~@|>$%fC_Qb zJ}%G5c0#-iJ-evgFs_{z15;@1w8MCIPApI(vda)-+L>`s4^>=-7=&GrNtUhwH9Q)M~V z)m~MS*lu;E`X+8_jGiSf4<5|bZ?X88R)bVsZ%~Svh=a+psZBv$g&NgPUkQ_2LpL0n zwsGn*OxNVPQB~QDPFK6-im9!`0aZ;3bIH^eB2sa4mQAR(pBn0F^>9f94xzfSh8jEU zGF-LTN4JeGV^b}Ber8=1+IGJE3|D_pz|K<@K2;Q+SolC!acDvIV5&Y|n2zEE>rG^H zl=xb9ZY|J#PT>*z@nB(nz>XMouIW`N@Ss+U?N{s}3rPc2@)}mR^U`ZCI(ipmYI0X9 zXV-eUn8Y4u#`!88^(pkYOS&i%X*r?G?=hM$>14gh&2pd z3JfY}Z)EA$K)2oSB6uF8xThxqjIBHeUohVVUEbD-K*{)g+M36 zOnb4-zSut8uX{g#KDs%aoZ|1oerTaR&*s#7(cE;NpXbRrs%aY+>7c*a9d~01%OulU zMi9w110m;haAQ{O=FO-(Onc@agX1h6lcU9Syy~hr50BPm4>fCVY>L?F^GSf)%mR#fbWN!J*xP z&l;B*2Ah>^lw>@Bng_XF4m1r|EOK}NcGv@TrB7jQRGJY$C+%HyPt!pHlbcb~u-WOO71#(CAtktLB} zpd}db!OdYZ-Z9TOb_ZN~vAxpbvAQ1-8Bz)i2^T*Bh#%RMV@KTwu_HODYFU!*udjBv zu-ITh{D^-Fn5`2rd(Y8tlOdJ}W0EgneXs#JBehGU|wTV(lqP$%-4uKr)P6X zNw|thN+!~CVIcI|ELl3=Fq}e?9&>IQF9*Y)fs7b8dbYo2eLAr#3_F;LP}(NK6v7>1 z>@1cQ7=YQ}mhkTwkEV$u>F_(?ERJ3W{`jh;vh3#;mzSC=hR=GLdJ0nBM5br4nvNjL z8V=ZUW6Tt`WNUGL$-77pVi;q^h}Ybd?{g@n`*7UWWftUG&{}G;mv$*n?-R9D^jWc5 zFc?+5y|COQdk`eVeqq1UUR+rcHvz64wllu_W72L*dl0v+dk@;yJ326;^_vsdigHd+ zNL;7w*{d$*=LH2#i8)=uph8c3&{I5`wVgBx*S|@*e}@y8%cPGq1nGoHi7L=d@$n^6 zR_LdpARI$IW&*+qomCu-IN}{WF|=&4Ja|wbPX^>J6ALE^z#jH)xA@9SQUP!bCNKsE z$)L-pkN6O53XJxEg0Rz=Ov`j*)PK+#cs?0tG-CKel#eXCq@lte4B~54F`p6QPqWwh zqIFoM3$-2U6)tU)FnwlA$j*qB6yoHCjA~Vu(>{i2fh>SV)TND@H%MM5SIK}mgiYG5 zmVL)ntb?a9$EeK0!SBQ1|Cx+X&4wn~NDOX4PRn$IfBvAse*?rk=~G;~Q9>?nvH11| z-~in_FKX)&n

>JHMr;5$j6oT%>nWY2Po-zD90zp09onX?d$l#oWxrma|)^XlaXV0mEj?x=S`UX`?1 zRoW3J&R!M@r81Rmx+N|mo;@1lAXxpC*QN(D%wkX|G&YZWFzEpKiHc7OFH#MXCgI(b z-O1Q^M%w!-1||y$bZfIDyG9^5Ncxjr!o8I>s6YlsjurZ5IvqrsdC|>r>$AwoDP!lN zn%S&nYjizdk&rFYX;=>UP}Vk3O}83s$}NV=@?roP2n2f8)Wr?nq(wM5A7wc&6#j`{ zyM(U^E!#|Uyp486egO30stnhLi&#B5Ys1eLkdU|69~F1?#%eNaUwzxaKq3P?i0UO| z+=?&waprPw4zi5x736;`2^nm5D#^1UNT+zWNL^Yywmv5n*;YD7kCCe4Z5G(4WXmYB z5yJUC25W>GJ+Ie@uew{X9o5)erz>a48cI*uB!G*Ef7^_T>XsO7T5TwVU}QKt^R#*N zfn||Vs7?treDuHsfz#nZ5{&womvy#fxU@CM;NBsVHMRievSBp2h2);*J_APZjC zE^UYidRUAT(9W67nj}Aem0&0Vio>1k6bA`VOR<=TP}i()Q$+rvpr*-hW7D*KgFY8P zCQf+k6o+3^yvRw7{w3D0DzjoB_3;6CMiC-;K(=t$GS-Uj!LTM1j{t1k^ae>-*E}0j zeu?;?Dkl%Ek`Qs8zrj3jU8i)!G+}n(l5S?-muGhWD^2RYaeoI@u5h*vT!|Xu4h?wR zET$MI0x&l1J!;eB4ridMkyRP4xf>5V!7ZL z9xJD&_#oGay$3ZyUBJh$`L11inR}U{h}oM%LA-rTXCCuzBfFyxTtWWLUe@R;;MmPQ zV(HFIDy&@DQ*9To9@NFX3?#TwPmXaY%K;dLUO6V2>p5>laqPn`Psx*mBH6ce9ELZi zF1r2fJ6{7QD-@5(uhB%QC=x^8=&=`adZNLq%n{y^<)>-iyQa>eRP636Sk`?2q8bkG z=HdRCb_Fz}G7ZIcW_vOi+}NlhG^8XeS7zB#`=h~)xm`dPaWH&8OV3ks&Az!LznSNw z8}ZnpIb4vCYvsJ4x7KV3&W1Ov6y+>C!E6 zwEbL17;)#m_o9V0Q4kGx@Ec?(Y&KbL9Wp)Sm>u@4cM3-MF(Rz^sJleXFvq-8F!X*` zk(7{3EX^&=x0Z=ml=HRGGV2?envK0z{A{y6eZ3b^#Mca@c2R%0d+f%c&u6FLXw{r_ z^&(zsw%gKp4L5?VdsokF2X~NNk!ye!KfLt+@Y4SUM7rO%0Ra_1Qc!<8;w}7} zLE`p?Wk1s}3;}Y%ye!vIK!c^;-cyXigBw)q_G>nzM=wjce~VsHXZF93kP^ZK!}deV zK2fpiEO(}-=^`EGEzd8{%{7}VEjjB85s=bu;!y!KVVj;hQ|ARf%+cAy2hrIIxqLr& zVO3hyqPs%5U-M}HO79T4<_5b>hBC`{74X3ud--o{>MH4B@gAvR8mFhNH;u)^#2u37 zDuTkPD?#1leJxL(ai$Q%xJ#OaHC7nBlExv@Mt3yI#_Oa@vsul9U~|9P=6c>6s=*%I zHTikfAyruz<=dT8q))zY8@sEw*rMm+`b+mbB+#k$0S@4Yc;XAe?OlN`w&-`YGjQFaZ;9MtmTa)QRkvl?X1GMRe{ z8ihdeKvElrduEa9*oJ>rtc)YsNi|F6tkAE;oSmgmyAXwDK@HP+H}2;wZrh(Aac_Lk6e6m@=Bv7RazgAvErA=Ct^iFM3R zKTGDoIg#2jxLPXUb}Tt^mYBX(%q(@!p5`IAWp5=(Hqd$EBMGETn(3!u?Gn<4C2pIv zC$q&EKjIwcIc<*l_=Q14V9{GaWV_(bVO>$oUJ4=`!}$ISn#ke-*sZ2O+Ahh}zI8-o z>I#bp2h%n3GpAIyO)y*$jPDJHYfLcr2E;WskWxrowJnS+SrxO^%C}Z}^uP|21vTfN z?n`Ox9Vmp)%DW0`q!6q`n;mQo=q;Pkk%Dp>H!%GXbhA(bqXWuB$(0VRR2!J|Chv}l zH1HI+K+A0Gy+UQD2plnZ5t&Fi+7#jCSP9J3HFvE1C267aa?mSW_O!f4p*FG%a;vpK zw_MfeGPPY^URg9V6zm0zV%t0}U5qhXgjbT@8FrbiEc1-`Ypj|;8GmqYV{X(<=n&A2+6dl!H;E)IvnE|=hWmXn#*z9r%MT~W~mndXF zMP?<%_U2Va)CW?N`$u9j(}9scmBdR5uqFnl=<)xshneL$WNs?8+~` z?f6MGj;>}iOA1i^1T(DcDL*9i094fhNV6cfyu7gJx*%Xid<}|=oJhNnPmAUvY&nlS z&=RK`hgz|(509&aR`$r`jmW>HDHYBEc!d?eCQ}RS%?|lc5 zjcBw`7Y6oN#U_{%306chF9xg@%u>THp4TzVrldq7{R)6a3pRiQA)R9uXe@wRO)(jYA zC8~gK4y{^lC29>7g2_Fx(zNab>e821KDDB>2No0DC{K!PaFz6xH0^-F0_W%JO-j0z z7QH-0|9JEw=37?^WThoqw=`*H$-)kPh3+l(t|2?OxO<6q6MqRdF}wfPPELC4`|GJZ z2==rcjQftzQSu#Abnb}h6n`K@iTeOf%#A&{_>8b~`h_qF4~f7b|3oNF7Jx*B5G4*F z8T~@o%fpWA_^%@DjQBdGkhh26-e0TLBTdah7$1u74XHat5c(Oyo%TY) zx4q?PX=pjin{^}Y!3-5-S`(uW)71Nrq?#{WYr3cglFCMoXiA ziRukzRpTr%|5dBX@SPD|L$kDg8io=AvHR;;|Aw&$Wcy@!!7nh4owl+TC-C1_m|Rn_ zY5Nn!NS$q_GCwq)6clEvugo>2yrAcbWvDv`&XjX6V#&~Ea{ysLp1*cRvS^*f=N`0R zjhRoD9yRuySRQ~L$V_^RbDVm-a!TGG=?`*Bat5V`7BaR0B5vxeL?4@%a*>(55D$}p z@B1LfM7Amp&PF$}JU(fp7(P9r!%2O5!iNehk<-tbI?RaOQ-Nj~)A0fe;F8d$GZPuM zrj9yT!sg%ln^t9MFCV+Z4Q0PIrzc_!rt$J%UYiUavmYPmnrJ`D>_>rglLHI12dsG~ zCWc#>v>9#fS73O74;A}NmO9#x2~&abJ}{&`@I1g%C`+j^VJO9w_MoHW-?cD{WM=8) zzLC#9%ju>k2ixNZ-~CQGDTD`}EM01^1Qs$)mhmkwJNH|GO`-F)x+PsA| z(9s?4&kFBT0|=)>1x$|Tmzs0U_EKxnn-_&)_1!O7IvQ_gLu8Zj{Nl>;3Qz=5e083p zDuK_$Tx))Tchq#x33IiJ4F+?IOUH>&I5*C(M zmfQ3E-ux7tat*HdJgltwrFn7js=z20hLKxXZm%qt%7p#j&x2ws^D8SW&3SJud?Zcl zNuJ;_#50H$_b8vukuRngE6rF&7h2dn`iO!XO!NgD<7H>qcgxFU)we*|E?xACqq=~P zEw<kSNBf?g2j%?9fXfG@;EwEA2Wdx{fcMvBysXsyy(`l>oVtZ<3zXk48jW z{5+es_(Ft6ZQrwi1=9-0f~_mI8j&ZB2&NvaqBgm*#_E#y5ORu#OT-KwUZBciYwz=y zEVjYxA1u^XJ^yhSI8|5x=WpjpabZwIsMRo;9`$yn6>T*z;JUIPMa~VDqNk;KyVD52 zRhfP<9#-_<)C~)55>;4MFr>$3bNirxr75K>^W_OgT7-%llF>{$+cF#fm9i2-|I;7DYM#j(4I|JKjgZs2N z)_OT7P}JF5(&-m|hOXW|V(jR+pApi9R6hdBu5gNyPsNgI*w|pqq8kHrFVj@LB40|9 z?%(SU*1LQ!V52+eO$J1#G$Dhqc9AJ4rU&ZQh+U{kldH-PiYm80#XZZp zK{3+r!VxcJRx}f1V}pd$Dz(pFHClEo0(G&BV7?``S(%D8trl-SO1Y*K zY3{mJ%22G<)Ks*o_4ti1Wh3uD0^YC0KjQu>?fCzw;)EJ+#sk?Iad-!tGV@_F`I+w^ z6V$Si=QY0-KJyO-E-Vj5s{ksv%u#gQN3alL7i8+;GqhW|rF92q9hd~#$GLKMwmrw+Dk$bB&u>8sEq z)d#iNKG)cHu}7{Ys095|_%tHz(;^GCCRlI_v)aN5)=FR=tiP0vypZx zg4@Cz#$35TFhB$aAT+>nOi)Od#M$13*=7@;n{1VKbG=@nci?*w7`&Dy+@@s3TCeHj z&}n*?7BlGzw3wk8>l`f7Y9iKkCIq?$eXM8@p1+%C*6rx3;b#bw5ZCZr7%%WG)zdFiE~So%!_in156ayFLswN2{9A*fd+LS zc$7jFZstQB14W;Kz8#F6(aS@Abj>i}>ij99>7031uPm0@PfIYnd6_;3qbSIUo-F0W z<$+Y>)QahnQ+KTmbp zmV_XlilOZqEPI=fI@-$N=TwMP`ozSZl2+v!#$j(=Gw~0vS_^e}mE2@!=JgK+GVD!< z1X^fK2@3Rl@V$G3LQ&eY0kJjA48b*f+#BZ)Nn3+L2CVmnSQF{brx=oy?p;d|@M#D# zT4|1J15x6qM4}x4m+m(0Lty}>GTDy-)UD$E2VVWRA)X2D$95jwm|SuVwnAwx-X7~`5@PegNnFz7{8L^*5NNB8uPIghv!r$R=eGsQ?@wJFR||B zFqbsa_zRnLfW!g4rE(rv`Ry8#J&gCsZ4c|4>f+27zGtd`ZG?7H`MQX``(o>xJ61Ph z{2J*ty1wA00gfk8_QG*^|I1yySv)RXx?v@ZFZr5cydjpXaib!4dSTP=wHl(MYyfn%U{&e8hBHv=ApANi-kGRn5#3qHq^OB><)7#!fHkf#`T9x4@^liDh zuaom`??zrM!k5E-vo{zeEWEry;@J{sG_JMseKEfCq77pI6=aR&8unwXt$? zTK7)Q|4(BK{m*Ux?XdWR;DJ@7;c2U|y!@)yUFCwicND6+U)Ar54r5O*u&2^<>Y43l z2vqUxAI8ZsD02oHo#@P*5Mr>q$+Td1Q&ubh=s^JkIJ_yw$xyDF;7?%+hwWx-fz~kp zbl`R~UKDV&;<(wix0HQx9F+R=YruxmBTx|LZ?98jQvTy#KkQlOE%tpbP<0p@0(%v1? zJij|MNuJqvCf~%Z;VmKwQ`i1p%xA;?RUEHqN#Ui-yPX%70Zt_nBUUsBlS%Ft9DQK;D6k@50LbN1s2LAL2 z$I1f<2aPO~4L7!UJ*yC8{*42B?FN=FYp9`>D;@57U#0n}JL;pW3LBs};nqq^)(T!f z!Y{q_4A^arVf#PkxFnzAK3kj^$one-t*`{Ojl2Rn5)CR9kSdeQ;r8@JWQPD z-OCFP8EY-)aETEtDI_59ZA3Fk&g9?&^f487V3dvMRTyB^hw^AAjZ^?;IsAO>!RPf2eFS==N^Kp1Bfb)MOdG;ag zk1s3|jWeN~jLTmB3bsW;T|$)`huEQzi38D0tRj>#?SHK%stC2Y&C zC*O}bnlA7A;sAd@nA$eia1o?Dg+5)UyJ`YF&s zRwU~=6EYkM2M7?pV(B@J@ztw@Y#Z@>%V1Di^0NWPFvZcJp9VS{c4P7oq@O|pvT;0* z9qOA$Px{&9R3fIvbMusA0YWGEGV&tP3i>VZ>)xO{?21PZW;%e-5TNcb1Me=nqnO?q zR{+CnVE8Ez%!M8KK~fZ4gd`hD3GGNn6LjrE@_|2vW?UvCGs@TyoA$G5j9V(-4lx2` zgqxDD1{hXYkK#k&f|Z2i46rpM2n|eQzD>lgOPu#F{3Y8FEQ~&eqPh>Yfj)TeMs>I{dWb0e8uqQRMRP@Qb=Lu?iZ|N$hGWJ^+T?G zb0{B^^af$}7;}U2dV<*#OiW`mS&D^%&kv%PjJzEqDc9@bp=K$0VgAOv+iILT0#SZd#;XJL-kV zAlEM?mpGGm*(E)?%L7<(xxW&za(mE4{mLu+8o@7mblC@K$$3?7XZe&X{0}M-^f3%a zu%qr2coFd*R6^90@Im#bup^e{m**DeC2UpIlj;<+IpAU;P@@_SW>Y#-aW4(c8WQ3dZlxh59K)$JsDxy=lm?ZM42RO75|ZUk8m6&IoGAcn++T2| zdyz!>oKPG?vzTl!LVx*8!4i$t3%fI=hH4~Hhw&BU>S8)eI*#V6QZUb_ZQvrUrTGQo zp_MqI>X%BkR_2yg=3%IHfYge}n;fAeEVsO9xL1fFia!Msa#0d>i<=A0g(ZpgIt9%i zVOL96p08<*)IiSKUC6uF>2Ejg|d-Fi<7n^h1Eh-Fmsj5Hb>(oAucc;;B zOM7W~dA@YTvNYHBHr_t@24mdy@4;GG0N&6%_HP+hV2de4yhIh-d<}fmt8#I9Wsa{l z{{mZPrxYzTSo+oBLN~hhY3HC|Yq=#aHbZN5?`K!GuaA9HW_Ppg}`1IC1)?0ho?)S{_of!H_iAh)_2p z>lTd>*wnj$VHTI5H>5Gfk0A&A2#?hstMg^oO^PwSvp&eqz1aMIhUo-pcYcsK2ecyp z)~LUKrkE2&a?`=#rsBw0jz!c|H*d#U%-qZ91bnOLbt!t0(g1@jCln~F#fKbkCwOmm zRb$B4@IvbI%gezHYoff!yl_mF7}6PfK#=zu@O?Z@_um4jLXe`v;bhElO>}rR1GNi} zJP+t{msZns1~Q1>(9{T&S>0MRDHXS^%IyU$lKny)*6FvE_Cablsu%n;>#=loQxt2q zJe!0SMZ2J+cA1o$l#*eXWYbUiEGpGF0kkJL!8uMzVd@%aC*n=Tw38F2#a$Eh_`n*7 z*jOYNlbEn6kZOw6h@7%dJJq$uDn1&jFgKGya?UHBsgw^@n9>Cs!otBc!K0wKhE|0y zVDJ(p6icgyRVeoQhoM#;SZ1&LH8J7EBy5a|Z5-w)6+ny!WTW{rQK8+ca;KC#OvYi% z%OHD7!5tk9t|C{8(czRa<|$K`hKv4&Z`k2>657D-z8*~2P1nP7mHHV{YnJbynFuC&H5;3Rjp53Y*F!(QvVOnUUbD0{lQw6tq@n)Lf1Pl9YfcgxuyFoZI)j+?`mZ^#=mgyP`7ON0%)NX2W; zBvcHgieY45`irDUm=UP7iY}aLt-CDl*i=3i$(L z1-Qo_B~E|?_zI%2#Ct__AcQIedY>Uj_e$2Sw?arqT!JxEa|kg@4U$&8$tjozc8h*cMQCoWjoHR*)rYv2$}c+i#xY)>jQRs2MTfzK zpvoL|P2pjSMXB)33KgE-9kvR-O&J>sd$PYKag~iF3L?x5e^T5Mq;)oBHabWO0}Pxc z&gdE-2BU87P$(d;0>}bim-CD2Mw(x23aZpL6$QW;I$}Ix_tmyM~AjwfQIvr(_ZJY~U>SX$-M?WVD3O+l%tGn2r2?*?F@ zHRoQutj4Oj!;`7i%&Rk#`)UbJXKa`u6}=KROuO_5XBDbedF5CGV=?PGDl%1XN_E=~ zEw8k~K$B%G#kuGd$6r+?xUrTGR8{VYkGAN-)!D|L^}VWSYk7sJZFRN?`J&D{1fT&U zMV+P~gnNh`VT=+}-pWCKuz$kRt@euEJ(Y#0oSDfePst6Nt!=OOw7wcG=){z|JX!3% zipXpcl2ZF7TqQMC58jzU(;!7HFzlv}7=lGzvd>xq-n{?NrCq57&xmQGd^iBh(!}S_ z?`#bhz5Z_Ts{#S3Znei~ZZr zMTg-&>RDc#TUj*2FcqzeU2-riUbPiDvSO`~Lw^(HjycZ+5`Ic~N8y3<99`)MouWwZ zwNztaZiy(42X%-__tco7(yCQdreGn4AL35o%X$5@e3?a5*hN@k-*gS3>&~S0!k*vG z@?lr*6WXNHy}mun7x!JB0t-JxpX`sjuldm|4^&do+V`qx^JNtcjTcMWc46$ba^;nb zw9vC}bP*mGcNf)2r^g2{>SL79MFAKT&IPDduRA}x`FYX#{Bs0j+aa|WhBp(rxHHp? zdVFMyBp;G@kzkUt`~bYm?)c(Ch@m+^6|p$E)#aZK=`30!9YmkfUQR5awrk%LO8m_{8JPkR(TvGbE)ZHA4q5c;LK4(b9D%&{z_x_Lr6 zgUNajBAYP^q5uynkWWVAboguBJG@(s+h$j7mff-1EJ@?1jXg82Z$T={>tt>O(y-i$ za1X7Hl4o19gJg6*zJT9Po-~f)`q8sz3ymj7Pqt=z7hSp$@O)e!B@Gjg=4f`Dam2cM z<1U#!XTx=}`Q^0z0)D7{>sgIk)B_~?F0!R{^T$3CjE3WjQLSqPH@KS>^qQSgu*Wh`{zPxn9v&zl`cdQdc50P0 z?H+zSaaH%R`}{b7Su)VX=;(6~yLcQ^Pbta0M+pBSAdVD*@NaZ@LiOoyT>NC`7WmYv(X@gtM zw)uFsUVC@Aaq{8$yNwqoZ}wlm-r4(eXYbwC!TaaHReFupn|QqfW#h%s-mAl%|K6%a z=P;Bv(e&nd#gFzjUOeCXb88dpdH3RA>+r??>&-*1WojL+ccY~KF-jAEW-B^buhoF{ zjC$QM;MY!S4U`@aJe=j{3Xko6SU+T&=}V` z0G}pY#db_hh2-iskOKHFtnHK^#{7Jm9LF5~vc3%sa4p!C-f>jT7#p+-bJ;VK_UP2M z=Tx`n)U{`(DQ%x=xrRahHmr)|^Y(Gv!+&pYDWN{SUh!$JsD5;N3oUs3xDO3k+wIoj ze^~H<4CBz~z+Y9(1#Uc`zR`zh*AeA)7>(#-d}N66hsTdUu0o?4(Z{Dx&6vkWpGV0t z_7~ehe`eES1MegD8$T&iB8#oUWRBC(B)Pjw21WA7Bv(H?eJT-29Nn0WafQJu(#prC@?TLBe5V zv?O4PU3NIdpAZ9^=r4@hTUenAZCH&4G6~3}DD7kuSg&?GPLobAfn|av^jQ4KA{IZB z05jVo!Iad>-R>oj_75bQCFsr&?OKFClkrA(l#TGvcUwpgh+}4dudgbOlp_5F<`!-9 zclJSC0p0+z{A{=1ukRyu<`7#kiEK7%&Kpp)>iZy4)Mi1$0&a%6^#cHWtXE({os4<_ zUotJpl3A;)Ze*aiz`7~Zwh|VMTWhTjU_!-VnC+7Q4xevyO6X6Y;?B;A4swSy4g6?_ zz(^Ha2x&#O1^dwEjM*hpS4uM`dF{x zU#Ab_U#I@utwYHVhQ>hKtz>i~ngV@J&voPHj1dNIZ$E&%_`%rn+s`sN8-ENuN^ zuYn}Cjw&yVLQDd*ll6e>u7P}H2Cd+s`OxT4LqJ6Q`JFYy&aP7j{XJ@=#(i6N1Bv)# z0NUNY4Gz1;e>(f>Tg4y+*4Du20b5<5u=WE7mSY{*kKMt4c5;i(=MTqsRdXlOpzUT4 z8P-fPTb{t4>UQ*@fikaZo0*pSmf6l9$-IT%Q;PFG3F{4SA-wkp<<=~%LTnFdqDUu? zTx!*dkif$}tknfQK8m(%YXE3gc(j2s!UvF1QSxteW?JsM8@>*VV#iw7*b+KNk{0Vg z$8KNNek+Xu8_?sF9E|%&K#KTt?e|gEPfplURs0SlwD$Y#IXbSw-~X$2Ow@S~7UU?) zF5Qm3!i_Br+k@X|54kB`XXo*iL)t{7y?9HEC7i$M@(&$#*qZ(BMNNxnpeIFwO5Pzx zK)_IsW(&ad@`Biy+94y3qw;Vn!u_(m`P% zS5Us1UTtz6dPpnuZmsYRW@S5H=%iyzJyn_J%>>jkA*2N~K45wPOH_K&aHTXt259vF0v{M0!JWWzYGvYFt}tL&99z1KLd-PpN$d|ffQ)M>=k-NBlUZgd~P1Y z-oziRV_2Q>HZ4YC*af9ztfFg7*wI?uH@kI1YW^)gCwjPn1skg`ApH}3Qh zrK79ttBFRP4j!60F@ zEM8Htk6=Gqt@0udD;Z6Obnvw^!UbPE zC+}ETnnhjc%~~=$>|Po!wM(quPWm-}@3(vP&+BO4QmGl>`@dm3A3x6U7fOs$h;Tmw z`6NZ6x%OL!7yn(uW8E-_-f*kNM88?-1}cZ79j`l-63SeTHk*_Pss(m|3`l)-x)Ug^Ag+3oQ#N>1BS$$>dY{P-aWFW=)0=Vjc5oGR)UnUe3rOZM7KvolK8W?G#R0!w?lsP$rpzm^XO?L8U3Awvg~_JIXF zv-Dn5_$r5!N~reECIfiz0LgQuQrLE|V(fIFI@#c@s6u`1v@#R>NU(vG+oZ%6B>;>WQmy;fg`*5Y9YH0GWIMo`zF+I2FBPC-$cn$^+Zb108*DO1b3ZY#{S zu?3js){oXGlH#PFDE;O3)`9WE1xi=AooR*3wG^z&$D*1+>Y<)Z$JL6Glu!%rGVu%+ z;i#@hABn84t6{YVL?72evOo?dr}!EVZU?COBMi~jYJKM8?d=SV2Or|#m!OMB_0%`f zj1#RwUaFTIh!$jciI`Q%;5<0;Ei_l-1LOK7vnH zq8EmZFuu*-1$FXa%Iv;YSq~sFE_!wlP~)W5?cuwdZh%0z0EN@xx@HXlnxa*J;D8^! z#K9u&9KBWAY@&7FTqiD)$Q(Zai->_W@iJkx5u4Qkisq~Qoy|lkr@INrB+)pJw(|%? zh@T*QY$PB|plwn-ud21J^L*BR1V}fV`a$|&TYvDjOXce<#=QTVw15wAMCe_utY*rS zIbluEmwT(Je%+;G_4<0_ffZFg_|mcb(AHyw^!w^kFWPjRvIFIt(Hp4-jTfM!L#x>I zBqAc;ktk3E{B_->_j%06ejuOyk;H$Z5SXG+`$Mgb=^qrAu#PYI)7^ZMMjaKwfwd=U z__d29{!#xKkPP6Wk)s%$4|kd}*pOZk^*jQ#@F;OBdB&JsjUT~L zV%GKnFYT$%Hg!r{?}4lLj^=FIlS99*wz{Cys^3ZKSd&Zm_L5#8QTeH!(sM$n*_7%> zBZFBXrcHh){(~ht*!;@T6bsXM<@KfoP$ zki>`epHtZ~9xYWcWjtl7}SyFbzbM`stE1N+zvh#kw}`B2v?|=W39I5V{#PEx|NfVJ z>OmZG`j_ruoc?#Fa?k&4eSb@S!PyFrv0-CFc4FIi4^R0dJjIHnw$KsjI)x=AJ|A$) z{=utA_`#GfJ%suE;-k~pkQqfWgdHXK)3{%JMYD^L436^|O$NpIq2}qgN>cc({ub8- zXW6Cr&1tenSnOLO#kA#l%cB;EQ>bds^R*oKK_azptJ>eX&%ZNuymfWxZ@jDe26=ns z(aCsq$ghXOsw*(K8yzMY?x>-k*| zzf`{(+qHyeKKPQ{)figXM-xtMYj6MX%?1>F&;VC8U!Tz9ghlv4?9L6HLS2m?KSncX zpHG>t#!>BmYG^09!FB*LwuV<35c09Cs;8|6c0n00(B0r_e0zI^o+4*;pPH%TqpJDKT7wVI1V~eRid6+}X<;o%^vKKbHBR!z}$# z_eHg=a5&9evF808&Hl3KoeSGIL~~{z>cb71smE-gW8)W%H%$Ib^6SBYMU>oUQiHnu zRY%={j_%UV5A7}&cKhqE;*C~C11 z0~vc}W;fDyG41z$Lu?S=EZ%chA~_Co`FpND{t}U2Nv!A&x1;vgWP59SyXIPdBzYg=-~TnD zhe03R{_C&$=YKVhpZwMM?e<@F6LID9Uw{36eEYfk^vCn3|J{7La`IPk{G|TZ?3bdk z_FLokXg8KPF!kD5QA3Apo2L6;=ze7(S;1Ebkd&s0gZJ{A%W+m~FfGI^Vf*aQgtouh z?C&s~sBFykE+_J{7HzvqPA6w)$P{MR=|{95!yH8i@%|t2JlgflY~USh3_y!i3nY%o zb?x@HDzD$ozo(;G^eO&m;mBstv<8GY-nC}L!<$iWmWOezswSvru3cLzI+aBNX!JJ5 zzBJb_JK|5nYImg%+MvHt66); zXM5-MR#a&)F5&O(@5y~4F1mFPmF&sYAKBbF*xGovfAA^tOwFAPXgEs)S9f?w3Y)=M z!C+8q+Sx*WBr#t{G#`S*m2mbpUdf`%s*lkraR?%k(f7flh3X0lH+_giH7PiIR^ z>6ExA+11a{0#RgxD>`GTTr}&mg28>m6)VdWg!_QCbU;cB*pgo-@{k`%i6cQ)1F7Wh z?C>k(Az`4eiLl58uW}L)XHY=g`nYrWuGSb|nS?o>U&>xRJgQq~aP{vQDuk$0zU$T5w+#+c~UVJ=Y#CDJD5H1J$`I|0WxoaFeH+R~^$J4+LwZE=g>pdJ}sEq=KAk&yy>ha^CmJ?7Y`-5Z}d{))^5S;o<6Pm(e+IF4| z(RJ<=*vsO4KS4THNj_fTzKLp#2Sa7AtJfyuvt{fXXCzrgZc)RH#6=2*z%E|d z8d=U7%S;9eKKwI#$l;2rim&H%((RCxtpv!!2&${24Po{Yc1^uzsM0J`FVBclMk2ph z52u&Jpj?B#K;5eIy@{Eox^v89W&F{AGB+dWqC1UW&tv6wK_N##MLjtIE{sgFfwqtu ze!lbj@5;vzc)&rHjbD>p1SgknM%8Ma+V9%Pg<3m&agaj;XHk|bR&SDL17oIxgzvt@$`|C_Uiuj96MV81v(ZcgDfF_1+G~l#DYnB4JC2^9 zY&06=&i4YRA;&AohE=}Ly%Xy9W<@`K+#~s@7-yFh)4pLCa!=iQFRv?nYQ!!p*um>^ zzDH)87*`_W$~It%F;j=}K~8^~s9Qi};t{*)JYN zIo8mrCqTdW-d5bay(N3F_2R<~^5iD5`Lr+hY*-FJwy3-YIGf;N6{R}{KmB^_C%uZy zoi3pK&}_2c3f7%>IP3<{c9}Yi8E@BuQB<2@1{AA~pM8hb=tD$Vs65$Z>4G^Y6Hnjn z9IMI6_wR&LX2!6Nqqd&^5w{;d&c>gcc)_E+Fi(jVCl-(&K8~NZt!p*Vnda)%_!&&_ z)%Z!=Hs*b(_4C#Ec$NQf>PhQ3GC$&*#86TAz9(O`7Lf(FZKQ`%lNNN7=GUf`?_j|> zRd8;_6>KdpQKC(Wl~$>if8K6{;=p92{mWas!U!}vhPo-{Do zg=V76?kg9}E^WC643>9Z=oU~|j!re}HETrfJgPl`&jKz`df4JyPp)#i5pi|EwC~cJ z*+yckVZ0NewM?ApV?s}D*U^YFz~c6}^zq|eJ`9smdeO6?Yg%g$SRKc<0vcToZ}5Sa zl9PB1J7WajA^-Uu9fnd4xmpmvKzZu(F$z-fFRn^tnOC?fpWRr8e^`1?>`Bl~f=e?3 zQX`_j$-Prsu>j?eWn=k8H@yo~D3rmH^a4#x9*MiYe`t!PO}8A5+!BuDEYKDn z8q!~QIK#*@9it5RF2MsmOIluz8tuTH45SQi@KEZIomJgTAOwp0=bHO-_nT@!&MWeD;FE8j^iVcNo11rv zc?IGI@1|$%#pYV&;R2!u2Mol0+_k&hTB__BdB~nnx^^W_$oe5-bo3w1vUuxTvzQW= zl@pv?`nvjmse2dhIF93N_^*s`e7vLul33h9g=T0`ie-hOV@gimV>`M7aj;~jH_w{+vDCA+;#s;1KA_9MH6 z5%Dngu3{c|M-#Vj)NkZb@kK>CEzy7rkkDbqFpNf3`>tD+_InMJq)QJ4#7QtO$ z+k8(r3Df+SN2b)|_qep=o5fI^{^Iw1*@&zG_n!t_GTdW5q6bio%lTJsyzl%$eV!jZ z`_B>nJG;eDA7N{w`)G#(g5Uh`XSedd>_6Wl$UGyCk0Vm02Qzld0RD>%2~^m2!Cb6M zsCnTI^p4qZ5@O`$Z-4#k4)-K^v4i-)?)b&Czy9^vRj}reO6Yv1hnww(C;$E5^pCUs zU#Ku}dRIevXmHmoiLdd)Kkd;-cR+t}VNn6g&;6F4L!cse8-DQtJ6(+SXA1mihzB6a ze+vhLYm#Nz`Gt2fCIg}`MuF5-g}ZZ9_V|+h`ny6)<6aos+?gTI{`0R-|N8XhqhI|u z-9SHn#DfC0}Ld-AQ9Y$a2E~x-4LLt+%RbV!oW0KTZt?6U$3eD3!agq zbUiGnn;YG`Uk4KZRVp*{ruyxhfL3KvV)*G_xG2_B{H}QMUxDVoD9v?hDBTW9GJT!v zU4!$`{8m@t`*xbYy?pU6f%$jwbX9HKRKP^GprZbdND5*TX^V!M>HJ+_@%Na;Z(p39 zpuGK`UiA0(@n!t>#qkmU;>^VH{;XEfBIZaKsrUSh>3Vef*w5iF`~KGl#3df|Wgk1y zQQw!3Rvy?Vy5H01>b_h0$MKP2a3I!w5=FGpx-PuobwRS& z?1O!LPH#Lp4z{u#G_gdeysTTro;R#u?y#m`yqjBlFa2A6?q*m27bnKwVcfFm*lwo{ zb~8phRHHeigwMfOteoHiy3?WlW&ang(GN;31PFkWW&R-;6<_CH>d_em=;rx4Oa9ekGMU)pe;)nH(Vzi#71qE0O3x1e!_4%juw46V#o(m0toQEi z|IZtgp8ZmaZol}!Lfe4ATS_8%E5&Ax)DJN!E3TVT&yn5uAGDqtlfQARvpalz2GGLW zF1fFd8L>D(TJggf*lAs&ESc+Ut>=r_!%6k zzkDMq@k0N?>|0Iiy?=ye>##bnasybd$^A-%vy z#J9_88Pm9~hcu_y)4WNKdpf6bbw{zcI z3NSG4*ntZeK$ZMBegv-t2t;4lbM$4oe4myS{f=nn?qJrw_?Z`v$GfBteV?*OKw$t# z&8F0P;nG~6-Wqg^unX;lmB8=Rf7$!nuYWzpCzFhu8VG#_OaBqF(3sI8M^lo13Kn&}Eilb^N*L3e%UL|MDg{kbnC^AAKWJql|&f zL)=RUAjX0f`n?IF(cU%BN6U-6WbG)E_pNcR-w@)ksyWoI9Fewfprw=Yh5s{Y{T8Q9 zzt22gXBi^ME9Y&12GFj)KrO%z_$Lle?w!B*7T`lKXbwL9(*6DyKS_RxiC?&F@41-c7oSK$YtQe4bl;Rd?(ZM@@BQ&F zB}A3dYy8HhG{;ncywF6&;DZ*R#D}lVm-7miNC(p;;*2Z}c7kxWk+1YvCapem66D2eMdp9e?*O)EIiF{$OOn+BJ?4hW|OMVjy$7gh>?;EK0q^H5p z{ST`q+sAKLZU?i+Q(hPuSFYuZYH-BIc^!2}=gT^C{elyIv7EONF9GQ{MJ-5dKJO0wLHJ7ay27w0_5zkTuS(aY!V(|PvzzuiCn^S|9cIPmlG`LFQ9v!K`8*yEy@ z*&B19*55^Snos)vKpod__P;W2s&RGLY2fv`^oKV&d-1f;0*bQUsS`9s@ckBM_AI|; zonM!DdJpL_;L_g2E}Zq3b+I4-K>eWz>(XZePXm~f4;8)e>&Nb|_}`?&H;xaTV%!J+ zSr5*?@?!jmz2V3FpT5c6|LP|76QJEJhqWHud$AS`SXjJ`Q-ipbU=&0U;M?zar)2Z z$nx?Ld8wb-OMN5%CLmAy^!aQy$%j*f7zl08Ik#TuDjw?hy!cvSU;Mv1=u#3coTauS zSopLgUKM?3U-ZAKe5+sV>6tpr&TsQDJ^9PgyRENFM{{)gkm>yzN1{!RSoq-fzACI& zR`?13`2_`g_EHR9^S$(E_qG0|$N`0j|M+-oU*oNNzr=}nFK)s+szQt6W0PawXEIC3 zR4^+pEj3@l<0#>T${%oE_{IJq6tn#yaIeSStbaM~q)hgI4a>bYmizUu-B13txj(5L z3%n&5=e4uS?q~e)t^Dw-7q2^+_%oaMR|HS``0@EXAAb0S&gd`V^;KuaH-tOMTNfZ- ze}vB)iOT~1D5nNGZK#Ev2MZ^5XXkIY;&vxdw_ehLwB{tKmk>YBUi@1yXl|hhOXw3n z@J-B%7qp@Lc5iowzS!($SuC>Ly`p@cozE86ZXeHv;zDJ!@VmKi-0|@N`+=$mJ1;+D z>W|SD8;~ns$B*fEjHdubl)un9@bzXNR6t^d2mWm?Mzcw!IQ)ibn44vEZp|iC*dM&g z`D8D%^b2+3-1qd+8TH4RW$oNwX4Xt!Zxo5xPN=} zdtE($FH7fc%2EuL>W;ArZo9-}^tfK=PRP=R&69D#`13h#XsdMcG(;64tFnhm%F3gtKB=Ft4~!1?dB8rC62zE(w@B-p1Whg;_i=k^Wn{S z^!!T4yv}c(xCDcE2lKoh53i=PVllobUi{-HWOJf+&i#47yY^thjgg-(9`*P3_IK@w zuSLSAlp(RZ(=vR3!8`FI89$QABW`uv{f^cW+?o#Z&!_`%ViMznR>n2M!0=$l{wdQx zfze>E#Neovfq5K+j~wCNKlXm9vV-y{$Bfg zuOB+VKuo&dJS)w)=^*D0$AckNCu4}T_8t`1v*pB@fB3=8p6Nj2Y%E8=U5+*ALdZVm zqFX_EY{p}=FgD|{8OCPAX{KYL%TH4?W8B+hIa5ncJO(oGI%6h}`#pc3PKX6&CpRA+ z%;tl0?qctLNp0-i+`Jo@FK!Xd1Qw`$DcYC`G&rCy8iX=Wi2O4qlnEjC5!_|wdtXGe zvQ}kyfP?dVfJ>6W*u6XRx5>DWxpBCfiYcN{>99^E@<*M&iGkVJ%?9%~41@~4S9G)( z{@oq;v57ic&Of+GIC6ZQ&qGncIV;h=qOU;~YGCE}L!;$Zhh`Y+ruHZ^L-k!yR@}&# zN0?vEuzKKQ((c9K8P+DXU93kNDjmz4;qm4Th;}?4AFGZJ&&U!)cSnOl+k02GEjwFS zo%T&+MUv3sgclwfmib|o4be`&2H`6PWS&!52*>PL!5<{Ig7rCFRi72PK*iH~6)P`{ zm7Qi0rA#TUrgi*9u&(W!=eo3^;n_+W#-H4(Z?n8!>?bzn^+*puc*XZtUN@?oX~EUq z!yUN?L|_P8urA5XeFch8p3!&xKUXcm3$pZ9ojekb!kJJ{nQId=!GJc*>qyQ z&I_!r_|5S4HXpi8pEkky>^7gfk9d?{OmLP4d*=?6;NOHlC+sdrbYN9+-$|sg-;{JV0P(_o#SHg!A%Snt$m?fmo`N2S4EfU z7rrbap@*d+n_Xrgk%0tME0(v$yJkPkd3fh{(W#3(Z1<7h(C{n0>q3BEu z;$w+;OA8$j$YcPmfNns>12P%_QQx@@K;HGxEkQOafHRM<#qCS}c_H$)d+n=HgwXKS z!zgFp+{Pa02qoI+C_Z`cx}8^MvwQDORc1H!UtftctCCpqHe&(ZXgSP!LZ|xKxakE# zq~z2u10{Vah#35*6<$^Q%DE~{D1>Fyj_dlmYF3?+5o_MhVfRJ03(Wy2Hm+c$S5bWh zE$nuDo0=Y?eHSkg`GuhUr5)d4lNElY!pLTov?;_ zBD!%7*_a7Ur!!+9p`j8TK%>NOvX&K~Gx*Z91zu&rKu7GkXrpKMyY!Zg-wd^HM12 zFcD5zi6X>4<9);p>t#C5oakhn`>OI%C@AJsvQ0x=?kI86UXkVi6zk+KnY|$r7jx@8 zZH^L0?bXRbkNrA5)|^O|Q%yMWC>4|MNDN{hq|9FvL>yc-(f7}>mvNMetal&;Avv1f zyJ{3NJWjgJnW+a36akQ3&E?+;#b zcj%5>wB2UJFC%`L$r$mOcGzDnEG-InIwGr}9+eEsItyNmhwb}=}j%Zcmp)wO;Ci3@_w*}!ne zJBAebvm7f@QW;2Po>Ue{Wk+-;!ld*T+P+G6euf(wziV3V#Z@@Z{fxMk`KB8JUbCdV zxo3a@M|v%w7auv+?jkLI)aY*DSwI3&lKttYwRZbgC^+MrMod%cVd3;v0I0I3dv}|nPKp_D4?uAxd{#vUM?rj51-JX#@ou-a*WW} zr)g!H9k=@&_sJiI*w-Dvt^I*Vrc@=ktv|UB3oq92@b3@rcZ}HGr)hO^Ba4F1G{XW> zXpydR{0;|0woSsFS(z#{K9I}|8kvQWb!Yl;#_YUOQ-qMLtKSUX3PW6b|KLX^@Y*ey zceAA%;OMxGnQ+MbLwjt4c2DUcWP;TWyROv~+@ud)zj4eM=B3WSKmGVyqVP0x+%m^4 z12^iW0}Et5ea?9$zwN!GP?itOpnrILz?P5Qe&VVpxf(-^@|ibm)pjpoi|k;$V+w%z z_z+0OM|fF<3`uW2C24Yp>T-kzuOd%VUbpw4aa_?mu}{MyPQ^NIcL%n_3WhkX%Sg&z zS&wj6rq8bT=XWuu{LPyq86|$zNJsNH>}~jlV@W=7h1}p`Id==^Ik2qwSaRIH=WmM_ zOmWs=3i`6bRtkcV&Y2L*h+xJ9JB0Q~P~!uhtQ;q8pf&)lPN6$eEx2LrEGl=MEcFKW zR8^7?z038~uyTXSZe(+0mO^`ActiV>`Pf;FlyA8XWoRQYpVn9~MFpV}QLqaUUmCC@ zA98GY_a8ea%B}Q^;b+p|w0&DjQyGB9j(;-i`A2)1e>UT1>4NNH;WjHtkv3Nks~+Bd zDtPx3DR`4TP28v56K~jnuHQgk)4$F2$f~Ew%rT(tmKpFo=&&}}<-9yqPrKiwcc%=+ zYcAJo)(jgfD9zLa>o_uYw$XBD17m017P}}g#uu^!^p110<)c9BMHX>BzP&~pT#|Q> zn}S8Se>rPk{J zNNZ7ts{Z&BD6BXOe=Ma{t*Tx75odks(C$FB3lvt=?$xwD3LCpU>^z+%V!GW(LGD97 zqSXd;WB;f~U06hiqf%zwSt8wPb+QotD0yuW9ioz%f?e*8&Jsb-m8n9J<5aF=;|-Eq zO(|O@xGsc}%%Zm69X1SwJSTqLr7W7@)zA~wm8M08MEo;N2J)O%){b_;;!L7ixf10# zNh%QQ%zyMz(ov06>ZIYKV0MZ7hACC6UC`AtIo$od_I)!!VgLfh$-_Ot>{4$VrWrqq zeUv zHk28{<9lWbFabT}K&Kzg$q0H@AV0IL1qkyZc9w zM2qQgOM~gkCP`#0txFtwA4^CW1fGCE1_FG~BWHoxr8S6F={bA!hzgxe|FFEdm9w)h zaToJhQH1dI`D{5Ip|+beYWE+yQ-ca{DKJ9L*1AH{h!E1&5t@lao?nMqWOaEBKRWVPf^^KoSBG4q9QmNFu>#L=)|?> z(sTl8>F`S86VuIXjt~sl^djdYaP3->tZv7cOsns?7m8mdtr~y zH*T_zZzs846pfuvMxHtaM{$LMYY)~wSs=SHA80RCvrJ1PvC*krX=Q;HN75C${2PgLBlL=ZCfTdqeM z&*Fcsi+ndlUHbd&TYYC@5EmQzpX-9=bwj8 zg7J+r_^5_U`*zzr8XU22nkTYRg}b>b&!?13rWHE<{q_y5ek8aa$5-a=uas%#tDQI$ z1sJd4g+xaC`|bNjWf1tBn244C1HG)cnmFvAv1Qwr>Ld|}fVI~=NQXneC0jecYmlLR zb*zp8(=%IC7jZ$Kw*lQRu+tmyN|d!WjU8YlqA+-XYf`))YEc$FE}v+83R6 z3XlVc)ZVeklpj@~T~RVy5lOL@NPsKWtj6qT`fCoAZWq zVWJYXZ9Ie^2VCRSdHqSzzdp0a#WJ)nC~e~*!?At&W><_}eGng4K~!EJ%h0~gw2g-h zC-FfUH%0`g71_bxNHouh_NAwt0^~T2V11fqMd^a1S)2~{8SP{slfTfo?IzgJ%();- zqAs+4xlTObK87N(}OpQtHq zB>(}iG~uC)9wK+kKje!^XQgE@Q5`yqRzE5CzRhi0>kUpLLeB{@MJ>^Vj$bnaszf4Eg`8Ik%1LHk!{rrTgosF~RPq<9f0~N6?MvHsI6-eL zflQ6AD}~yw9GeQtMwKGuh#n_t^`1Q8KT-dbvyU&ouL#Ii;u14)E%sOwwPNPt-rP5*T238J|}lvIxBqm3e-(bn;p+Hxj7b5$H$?qV>z7$>Y{{HbRCd zm>fSs$ilxLTiM@FR3oiI5901eu`@a5geZuA%Wx5h{L0<<~$@%~l~P}EDjT_1R4_??>g7m7nT_Lr#qS(PUA zfX}7lLfDeV)rHk)oZk4xE((0z*t6Y`bOMXeF*abS3>2_?}}JAsIo)KnL^TM>7k3#GU@?jf)uHjAc$hMczw1Emw9c?>RLMcF`rLn!_hr` z2&o)``!;57LTwD4DW{cn5+NPKmKE^*qqpO=xUJIGw3+i-ZO zV7m2BQK4o0aLA|yveyqY`rhNPSuH+m|1^n-vKDRVB*-Z7__}aS177PJ zpKKIo!}?pPMA3NLc*uv%!#`6>lGQt@H~IXEa5yd}ltwh1f55H#^kTNea;X!#eb-15 zfi&1S=)p`M%=p2~JZQix_4{bYAnc!}8=Q0^1`)NR3DC19KAp1_Z7^KNdY8@Q{`(oU zq^(zMV&G>h(Ln?`ZW^>fUA8TaV3iX)+2(AZ_31`+ z*-@1==Y< ztonfyFaiBJ;;8}BK2%oA-kM{2!ocRE(33FS^2l}oOi9MNz#`e`~w7u!KzTnuk>1_1WP zJBqL%LF-dpI+$c8Br_(-c)k8@3dzio zq~Zr9nR$|xtMZbFMgI3C(uP>m)cHJ32P&MEFUd?fO6dWB5z`A4c)75!q*ZYMvR}GZTA0eeZYcE!xYw7rcvg zd#UYC%R>l>mwFIfg{{6+?>I^H@9OT(JZI+^lf7Fegb6SAyk0%Pd#3h z0p1aI8L_MVXiPr^_vr+dNGxL%WoAhUw@)+2Gk|$&ma=RjTxRG$vw!?zkN?y={sZx` zDcf2R=hOHuu7TZ8yZto(WN&=SP|-jYV$6a41YE?%Okm$LQ>N$pzz`wcPaPo(nq0w} z1|>SiKYC0U(_h1#l>Pz!0-G)_-K)>x_zvZ$`iJ4ip=?w|RIvK#dhCuF{&+}XIPQk% z0kXcG2|UDj%DV@F66E>dda=00hBt9PbJKhJ-x08dX4If?_Fv=4Waz$$EB=#P*?)Q` zPt7h0{@1_f=ll;NB>ns+pXE$F4`G}Eq}X9zndfEmx!ecgdExhgSFf-| zz!~uh2XErVJtZv!+0*RXnc!=fx3P;m-;7?z^JmYz{hx~cpE~8{oo?XLDiNCV3qY-+jeYnfJ_Bl%zv$1Pf0 z_wjBvPGDN!vkb8B;l}nAZr!X}MsHlrTp!>v}z$UP;2~<&vJ7=aU@x2=8*#9FKn1e>(>A{ALD3W%yK|hV!Y^4DKheavnlAybeKw^StyG zAdHd)UcAZ)F94s>D-&MixD&5T0PN@~;q^3g%-BDvw`5OF3K$GiW<9kfUrPM!e{y`- zoa{D=IWZOfMaz5Y8z9%VCEicq;;c$@0E#H4rWNJASf71LsY0Krj{fP{rBlvzn!V&Oi2pWSJ%#P$;iKTTsH)`367yGKG&sJ*Xx z=M~*EebN}#+zCq%dMrk}f6;{wM1qgtpVeL;zMmT7qwDjg2-`VaBa?c==kx>$P{UA2 zaTLm=@n@5a<8cCij71OqENLy~d&k+J&w?a?O1qJQV8|1jIQB{ zOGh;dsol;Ba#t~P4N5x8-X7Uok1|v_iO@JAEu<40#paX(J`4LA`U=-rnnN{3j~33} z3xq8oMpfpD9(H;XFh|?x3X5>jQ9Q@%iZCt0zBdoHnHa-aDA!u41{|T?iP~w#pFJ=r;lL`DML?HO^UGgt!pUD5|YH>NBolIN^GELn@9Jnk|#u z|F_B$#@TO61&d*g>&+CfO1!OFGqg6c&zfmm8`!5c*K0HTsMA?9Ys;&7MPxn+jMXmb z-Z0zX1$$`o7;${7A4g@ssF;OM7Gtr4G5ktWwNI2(HT#yC!ZKXC9$xoKHfftGbxla4 zI&VIGm6}HbHjO{3~@CRu7p4IoeMO5FoZK0+eF zt=T9R?QB)6w7Z$x~0sQ8U@T z|1;~H43>4I29-kithF00BgW|? zrsu7o2UB15?!Sfh{Qms}0OzVSp_lJ(sAcs214n1xC>FOv=M`y|#)f1XKxVk$@75 z@|}7))%x85cA{_I9g$g%+Fhdijc|AAAr&A;p8dtW`2?UU3`hXnSe_UZk7N zg7ME$CbhiDkzl5q-)tUG(a}4>-w5za=+Fl9o<+e+2;DJ(%WJr`p+M3VEpvmVg`3~I zXY+vfj>ZsPao^ewd~$p504$}s#s(`zwUi2C^AHli%A4|lVUA?)V>dwRlAhi<)_&%mQKg_;y74{RF!8Huyk6x+HA_ov%RDrxEEpr}Wl;HRe7i0i3-RMzF%_sq5kU zd}6-OaC!6E`YIH{F?(5nVww~)KGC&q5HhdZLrB}@2&){#eKw^1prz{Jq8wE|X|`@q zMZIMblF%9(-$8u2MX4kj?+O8*C6Y@LGHzAxr5 z)TxFh9RqVE5-!l_bM%-h%mIi3%mn`uNMNo6t#q*PNWrFWjyQ^vz%%o($TQK0w&ajn z(7Cdlt=aCjJ%AXn>sj2}M+;+_SC21N6kQqreL^ln$a+|*+C8cy54Z02j=mv}m8SvO zErDvi3H<@6+Y0e;i*N7zTastx?~-Slki|)|H#lF?+F)>2@r9H#9TMQvTVVw4`)Tb_ z20{jK1gZQq0Kn3xSIuvbK)ye^OR=m5er;mB?^&eh5_X1e0`dYa6JfH;pJ>jP=Q}cG zb9a*V3cbk}!_jatqySV-FO9#&1T6MLC;;p4hr5fwi*v6$FSGdhhD~||I5jKG*bFE6fj`w$umv9Jxa*g{d}sisauHsW%Pa;T9YYD`5cQXnsu z^EnPx6ilK3%h$7;o7waa?|c_XC+$V>H(Bkn_-wE=rtOy4!9t2^DHAJP zTU;17R?J#94>@He_!JUBP)1&v)N_9_jXQOC?^;5MbW6fTpL%8)Q`ypj7x7x~cd}&y z&EY}hgcLi(D*}R{b`M$adGBS0b?Jo({rZD<+{eYA0|Gm3a;FEZG1X!%c>Afvx7Qg< zP3B-d#@8%^{+@FZ1!EvZu+s+#P>8jO!%zn@8$p1SfD2WJAAHV98w@oR0Zji3BP7Xp zpzT-z^=&u4aVX#(>q?bCVpxkXl!6PvgY{FA!2}#`cT%?kDaPAaR+r9P?dENCYWEP< zrw+xAR#D96{jaDU)~#rXOh6y3P8Hf5ch&|=o?Y&0!R2fG5yh6TR`eb8*MP6@%mLap zg4fr0KZ;#nQ|V`N6TJ)8n(4>dC8Js^QiVnmuJWmlIwj0W?b;4 zES|6zfJ4fw=4cK9U{D?%8DqagoBR6{VE_TN{u-Dq;+Y5|KEq3C2&F+05+`s)rB^w(eV7OLtnewLNNtj>)U`9i=!?q5s( z1)GX*V|r?>Ufnyhra)#|?q0k*UC*zUWE*;tHypXGeD2boq zup%U%W>R=94$F;i#)>E(Y#>jRhZcp`>j~@4E?c{15XHj9fOLsfqX&@{OPaAGA zxe#g&f&k(xUJW&H-o|W+-Rkel*&+`YQEa^SBSv>>FaeGeJi^BwIKP8NWIUq2Ng?-# zu>Nonvo2@DF6Qp}%i+Ym*y(aIDTi2a*+abmLLB+7eM0x^aoh)2P}JK{ej(RKI1=5u6?HM24KDLf;cJqcNydFB!adte z`rg&zACD1moFnnaeGZt$IpaAUB;aTsLJ%1H%wN?AJGVH`GRH1_HgbW=xD-XW^P5R8 zzk0alF~XvAWG1<9lK5r4e-04NufmaBVqTT&B>z>F8aY?HO8eVQth<;eWZ@(@&V5QS z0Dlf2=v3y=T=inhuLY$h(seDPLnetblAG*E7rCKZLG1IH+^D#(784{kWD3dno|wai z{i+S6ByA;gfd#T}z(eknO9u3;XzvSrxXO zBdsTNxmnxqjyAUd5v4fS2MHjZtuuu|=#ITc>%z8`qy>xaS!>(v(bgMasuTyiPTtDx znv+av7Mye8rH|wO2{fIpF@sSK8;w%AxpV4!lAOokO%&Y=G|6W#TeacGK>{eJD=nyU z)T)ZTrqxCu=_EhXt0T_hbE`c?UEJzJKbJb$4Bd3Sy~TSF2vz!YLvNjf1lr3(NCumo zbjn0DokgMyL+nPvi!%<(J$8l}GgB{$m!Hs1XFR=R6q2}{j%ISH2q~8~XueH4ZyW9q zIhNc5P3=5LK*nsHDGW*X-$c1rE!m^bs8k3=>4`+!_oU~2DiHTsoWAPCbS8uj&P^MN zV=W1B!M)>OhwrRoUCmk?V1P<}jcJQ`iHS7h_}4Pu)nvQi9J0gin>@D(Lk6$NLcgu? zW8JUA5tV)D1U}5YF&}_+7b9U@jg9ErsqvkA%ts;$kBF{xJRzTowsPD~Bd8hn&|ygJ zVY9URYh7tUOSoTL3T&RYn=As?^1P2Shl5H9cEnHN1X@d)3S{$P+;CDUA(rSY#Pzzo zJGT@L`G36AT1IMXj+NDhGbPO05XMVjv^<1lu$ATrNPy)j_#hs=7(Vg7bs1Q$J&uc9*=TCAwX_v9pO5NqbWKz(OtF?buyMi zTLR~0b1qQ!gk0G=O=|I#9IYoz%UB1rp!W}TjC>wL_-@*rrZg4E4KL`2I$?aqgMLJ{ zb}Fs+?Ji3@1xRz&Y{h7$|Kof-<%GS_HQ#${Y6? z4X<*9BUdCl0MQ*8NQ)>9%%XwnKI6mIfqIq+Rj6)ZP*5J3eB+y&d^C1K+AO2SUsB?MzA8jn!iVu@wK9!h!VOCWn}jTw}rjoe4;B)X+}_3E^QBN-w-6xK(Sk4Q!b z-NJ&PnCe`6one}J`g#|Nx)ZPn-{KeeVB&(o^Vw{I(*kSc{v6+Ph~-j6wf8R>jCvGd zqL^x8d(~o^j|Oh|i6Bpe8##8&jxJ-|@7$4x8Se6{phx1{m!dA^8I_|9QsT4raVkS% z4BIZzQnouenBcf3!5Bjr+QjGlyAxZF#_+wx)S8+DlKO4(y5`=_xtq@eIgF*?O;(@> zp(V;=UI6Dg>qoC+vhzDchIiqCzYynJdVLJ9t}uhNqP1K`P(h8c04vnAll5wMGB)P| zZQ+D4rBD}JE=i~$(^ya!qO=lz1a(YmI=3buO*Uo%ozGUrjiAO$O-ElYF7*+R!tGSW z<(+R~#U+=%iuE7?bg}}u0f^}ly%ZvmVVsWc>olVp)u{JxIZ|cn*FU*mm(XHNRU_-v z?gnj#6V&b3^bsyc#!RieBN%EVW;3!EpQNpVcfDf(wn1#LVcv%Y;n!zNO@q}opW{oMhC*5 zW`iQfnRnsibM`8LD|%5zpEZSX-# zlC~0pgeP7?%J7h`pXC`{B;(a_tGa^(en(eYknl7aua2A1MJ^*>Dm39=cw@z5!1b)` zNz&@~QUh=yt!|osq}#iAarIfuw8EM##jm<-*B@q!pWM(_#h)>(u-Tii6iJ@|WOxX9 z29QESd@^wn-vh78KHzh!sXQ`*2+%E}SI@2&Ws^d^UgL7e6xcuw%YOTEC|1Dmrsa?y zDJ_Tk@kqEKGII?B{#=`C_G=f$RXIS1!_pF|iMWtw0_aQg5EDGE~3I*T+)We%N>RM~v zg54UhM(T;AXiB5^$@-_s zs-u-?Lcvf$R7&EJLu5_rz2@3CunSo!UhcDYAD|PV0m!rp8c@N>51kzXK09CNoTcI&&Ep{q_BVYZb5CT>cm}hbu4`I_;1sFb z;l&5X?Yq%npQTELI94DCF%LV4$q80|p!?;1O7_Lf2g~R`zt1PPxL|khk3;rj{`fCu zH@9xY{OxTB51*yN+uP?0OB{8v#6p7rI-7(6G66Erfe`p(4y(QD&Fq(o8a#j?FzE5R zQ|rF09CZ1)_)O6O_upc0ImG^Q7r_45im6b@78t=wCo4`nM@j1NK(m(#(Eua3_Dt(y zlmN_F(&;wlQWw*GD{)8P$^(jsm_AH)mb&RkQGrU>{=b#Dqi^;B)kIv4o&70* z6xVK4hfSEDUYa%v1B~CX&yWnf)mOKxTE#-dKrM8**Kqo7w@^$7qV=1M6k-Wc!p3Cm z4&QF_%#%iIa5}tzoykE=Ur`|gEZTFMIlD8da|RCgQZCB+^r6+kI$AY33$-tNQ7fOB zMk#M+RjN?yuxU;$YIXG!>|Z<2t&{`Pg%Tu%OY*O)&8S*~v{^XiEUZ8fA|E#yx7n_5 zhKq}9PS%qVimHm!$yAM++K-cDARcyGc@T+y@}R<%YNptgVd3B1vn=R*VW#43qr?&5nSU^GS zEcm6Y-D@L@1pJ*bi$$SKfxsWri@q z>BdH=o=9TfE^iUIZYp;@{CB4dJ#9E3Z_&4X5~CU#b*JNt@uFmU621vLx%Ta~5F3D0 z>CK>uS|6`@N8Kf@pLk7p#4C$lGs_5Ncm-XWrqsW7Upty0eJh8=M?{6g}4^--n$;ryHJFzr&U+mE#2yRgs6x3DABx_ z=UkOfwHag<5wg=(Q!^R@`3=SY9kFl;7BTZ5uXCShD_BoX;H&xY#`~Mpo`!^JLWK;$ z#*Wkmpe3*>ns_U4Q1ZMwrO%y=m=>IBIhoCF|Bq!$A0`kWA4EAwf!lk0HIhe4-2PAI zN{9U0r0xD!^N0@=i=fiaNY1%-j zTH1A(K&V`W9^^dQ@naf<%<8Mc>}x}2*{$2x@)0-qqD&=f(>Ix@B!%qTm5!4#NfNLK zTjK_$k4w`B32Z`p;^yy;uyXJ%+~vVQ6&U z=$4)`DkOjuS0xG+2vL!<`Dh?K6HT9G;B?;^Hw>ish_0KLwu9?f8!Q2UV+nr!92QT&mm-d@c~^ zrt|k<0{ieGgo7PJC+Beyrsb&G;#)z2EAR%~(z}kIBr#RHea{82J#OpmD9k1wx$xhr zWv9o(zoz!B_aVf_YYK&u$}Zr~^4qXq!T*sLXdxe}#_)e-dz9Z61+L9|YTvdWLOQ&s z)3x7|MX{*9D*sn`Ta{Nr(Rlwd{wObVu$*%Ff=_ppLViA|{bBfVD18ba4S6=x3fj+n(sx^#BXK z;i-E{h+SxuZ_eJe0k`s4YgD6PTQwafaVYPN{Q%5sT78AK^~Au(Fnknq&c42Z-0}>l zra~DoHs?ozKk?_InkWIT1_4;5^Xq7L{~kggyqErt=Vi{8H8Brdk`VR@^WybGeI0|r6uMpWpg+>p1^v(}bcq}HD^u~NIgIOCMUaL#gJ}l>}&RRH>!z9+| z8ib+IVXa0{tFfG~P%8i^bqcxZg0+RXFox2H{4Q|U;x9i-Shx0w)TTV3=25MhZrJY@b*1Hk{C-7% zy^b{~Qn7)~c4{psY@7viGToD`YUC$;!OlQB`Z3Ulp$@F-~8s;Z|t41Y1^$AJaV75M>kiO)ZdpTvUx}57ODwy zv~tl0G%;K<{ii0EZIAh=^+`3{fRc^{1MHMOAq!@IO#)F({l zDc81IQ*_PV*_-dvv{ac`nZF@WQHcR(iP0mM1KJ4oz?cp zrnEL#19VVQ5^y;2{L_%dxtuMhe4uKAFYT;kGkqv&Ym*w46cUu~&frK;mS}Y8uVUl6 z&LieT_D|R2i);4*P9_YS&q#@02|kpO1x^y6wD-q;0Os9#r`Qm*^TdfsMocm=VT6B% zcJyXuCQ+lLfWcad1W_>DqZ$sNbU5Wn(7}W-rh{+%L||2GDAVevd*4q5!ONS)Q%hz; zv$MklzTiWsfp^j`cV7xfv!#d@T?Kf4Pcyv9aCnvIiHXHbvv1z{lmLExHMF@wiCC`p zG;_A2p<%O7;KR@%?E-ryoDFIP!JwtS)9~R*`+=r$Fswlb5_*E7**$rt7xfYj00j1s zY`tYZi`J%Un60M?K(T^zur?d0bP$0c*r=Fw(D_7Lo9+>EEw~NO78FmkBift|6hHKB ze>PV9>)CWMpP_y2kXFX)*~oW0bKlk|Umy=mSUcDM#y#d%K3ch0;|>VDYjc3Ig4GKe z8E9lo!*@$_A0*Qdt)4KA%q^Wn16mH3v}_|I>&JO6c|?+gt*1RrgR;8>sPn78V-bZ9NOC?UilL#1ziY1 z_|v#?fbYuT+n?Co0Q>I6at_oXlXzG5Ao)KHiLr)-J?S9$Xn*Td-*nhD5r)IF8HRX1V})BFO97WKoOIZp8jhSNqd zOX!@&%c0q)0G>c$znkzPLx%4I$U1-=ZWaD065=ZZJ`{vUD%eeRFk*)Q+0DsR~W!_i2ZqxsXbeJgm5i(i`1 zEbr^p)Cz`I)5o{Dy;nnL5ZWIdM``zl5WrvGmtVkN-}Ce6aD$3RLNdFfEwvt-X+rxb z&TF(_sy^(5YMzDfUE|r=Ev1WAHUrSYhL^OGKb4Hz9`ASnF<{)2m5m#vAzJYBvT@~a zCF3H&0kQ?;-kb5&^=Fu|#IGNQbQfDlZhGmM5O z_Fjeq(D8j1DCm^&MYpIJM!ezXe0;T>ExAkFxX_q_batit2z?_r!&?Di*wfo9x1PLP z-ri2Q@gj)69?yMEy_VJ?0y{34m9q!iDIFWRZ&_j0GnrVvuo&ghh+Zf!F2@|hD`IBc zgqE1;+;PkVW5NTT1rWKX8FQrr#(Oc*dygWZReOjq8yju(zBFRH&G*%W6SnF5T0zzU zq}b?v$wGQh@9WiQ0Lk?jG*fIa#<5i1;Bm6fL3dSv|Q0y`iqL`KBH zL0M`7yJ1N!GUM(a8GvkY_5{*%(nys-vF zg*YlJEE)a)%7xL<3mZ=6`EYa>-rCUijK>Mn-<7#X2=U3*A(5So9K9P#};XK zpdUgOnC>*pKVYL{_6fHz1&2Bb`N$#egTK5AEJIxs**G{PSU$b_agK;vj@-eV4nUd=I{?wRmAn}qc9SCG;oQvy!$U)%>Z%(7 zI=K0WOHV<-;eI~D;%<83%eq;&P8H!BaDl4*=Di>WlyEbe$nnJh_X;9%zNGx6Bz}2V z0-uk>E+dtOozwAwYb54z7bCY(nmrDA-bZ{gIcNgQwI4|*YEafA z+=uW)*u00Cjw+pC{soP&onyDq50VaU1sZ=)Rk;Ks2l8Iqy_(L%ATOL98Nk-pZ<+^X zZb6q)a~bxicx+ZA@ffa{0!!EK`qU1DBuDY8BA$jkKt`I(&W96KON)QCN>67f&E~KG zw);IRl7yIWh90W+ zBA*F%%_yXqi6?pKuLJu2I$&R}n4qC26NB6Mvu!cHSx(%cG@mVtunI>akzP%3s}<0j zRVWWYHv+?n4#F`7UA1fVWporI-Z_5&8^Xm0=aS#L&4KPu=IWK&&1qWd(xJ zg|Jt3P)36?8kG4#O}97Ym5u#3ibH4%cab@P#+IZ4LHBFdyzsQPd=Juntw(+dK?EN( z#7kJd#8JEh9Y}Z(K2rZ|@KNKy3F8^~PYN9q#szouokpf>-@g(hAl2bccr4gX9;Kj6 zWVD##trm-WiU`iqw=TbtPpy3;TbU>XKdKe{R!hpQ;1tEBrNjSrKg`e=8LXP;z#610 zI8$^Ww3cDU*kSc~5mj@0xP#a zx~MmQ6VPmcoasny09qb6CK!4gt5Vcjp3AL#V8P^O+wj7SBR7npcRm|&NGO5&x+ZC; zLqM(!F&P3BCYjlWDP|n!VdOp#NUEjD-3E@%@oe8ZS0V@%_R}h8;v!`kEe=fF93gWtZkH?0dUBpSaZ&-iR~Lg6qk+5R?2v+|N)bo|h$j0<1SVC)BAD zMcni@1@M=&N&vv#7w-W$?=bz0>66ps=}VC*`LVbNqI&|4pyA64^tqcR(%)qE2#4m= z9rW;cY$7Bg#~uZY-**C6c3s-gyx)4(gB?7an<&XN!~h{6fgQNGn=Xc*LojzZ4P|=Q z)XUmm_;GE1X?l(UlD@3J- z(@;6byzB*}Uo2AGP$=iLRb?8EclN~=chP@7r2n1;|y8kH{h8);Ll{tXXGy}>vt%_|m%|Ee9 z?e541eowxur8@I-c}Nj_e_^LQ{G;dRXv2^ z0ObYtWl!P#<2fzZre*@p64n7|f-|)a!0Mz2AgufQFr&f;GnJ+|TJUhbw51Ikwzb=L zlY!Ll^M+1ffOeq+f%`4iw$BP|huIrtHiig3zA?Hlym1>0diE&H(^TLa>A7Ngc{#oq zyKe_jc#hs=cv}Q}aw^Gpmz;%Q!`v*dS*YMUkx>2IBB(0t9r+Eb$89I5Am|IN{M}g{-7a1hTsl zÝ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 %0|&44|? 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

Tj#uXwAu(B0r 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�+a*^1+>s=WUAqr*)O>c6yHv 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á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

l+t#`#VaH4vCv;S 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 vE)hF7JLaQaXU&mu$X6g|2-bEv7AGMY<5jGtSx* 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

Huq}H@D4a2lwVl>XxHpi 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

    -|(TrrI68vLn@^|~H^ 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%0Dc~YZv(Hk{OGqDhgcOTF#2!PE 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

    )!Gi)^fciw#G+O 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 z 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�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

    {%L)(x4e; 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¥NSDeM9T<>b{MwXxcBN^!>ft10qKw_4uIK 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%0DsOZ& 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
      1a^L(EDAaoxkzAjGt4YJ9;}Vd zhwz2*zMI@i=-I5nmG~d&qwlVlUT>UW}GQ72JM3LxK zP!(CJ+z5xLA|bRc zH>B^WOB`1tvPkJ~zeNsZRioZdh?e0x-w5wT&Ax~>A@JPQd*PJ>fK-qdCJx1SR*9Bn|gkeY$boJlABygpF%yqts?t=lh8$q-CwC63G^?R&5od2 z`2AJFJ!y6THBi2}_!!x@+8RzmI|Fv1v6j7W>q%JClaP($c6Pc3lQ0^~3nUwpdfTE0 zzx`%kbw{=zfIJV_=$5^WtOT9b&NdF|KU|l2FAc=+oU(iiv<# z9?>X)8!;jyBm6mo&LB~(_H1A%QDX$tn12_O z5ZSQE1v&9~3FUU8M5Lp{@~J!0yg0e=ogO7;jo=QLgS!HA04#X45pNKlmX1rxP;MH- z>Lje^OE(m}LZQej3!kpyaXP}(l(IFiQMFY~K<6QD=4bfiX- z%XsE{2%NiDLe7j)({Xrb0=&RA_=ff=#p~S&um5V~qt<)08aQG!h?Jb(8`hDL%8Qso z?Q0%Jl}%XG&+z{n`2T}aZGqShWm9BI&?g)Ilw16##1?(}p=+?*uv#}E5pK`uZI%8P zyyilbH09MZNK786dA{`2=a10?_u07CZ&_!1FR>L>5A+wAaP&l=5vPo?;}z2VwqhKh z(~gqdW^%tcZEiO0BXl`T(o9lnV176Z>T^>js?!LD>Q&@x+Xjhg!|c0hiC<15FER!mL^`=E9EYxDcL*4XgaRO}drkKsNAI?_#Bq zvA5{4j6qPWF>gSr2FHYGcEcYe)z_N^o-O46SV4*&*elU%uR%pe zVMch_h-Sjo#vZSvb(uvr_xLDG=t#M9B#}Wusrl0I8P~_w`zWn?ix>XE1SH{vJ!`W< zYdTD`w0@g-!3fr7lu}SEkM1*e2<3&h(6;i^s@K6xD-erkcA4B0KPbOr{UM7cW1eGv zP~1$ju#ST=({h{GqC%Nnqi}(vjV889g4t{+BE7r}Inu>MsXH-;ao^akFLZo$bfp7w z5Qcw1>NMLPXzrka4f8ixo+QJoA&_S54KS7g#WK$~)0(=j?7FU;x?lva2y!PW&3ZKC zM}6y2Cw%Ulc9xaaoznKHKdKSFvf|<>0iX3Z7x;XQfOu&Zzr&P&@(+Hc)cbZF|G*@E z#pjr>uMgwto8ep(`?(8@?x=rD-ITw%C5Ai2{?RXfxSeVNi8^Qfjm=#^a~HX^fA>Kr zaxsetMHB|bEB*OSTnsOVh-RSO(YMRWvq`aFri^ zOZAg?je)rA-`{5H!A)=i*VYvyGf~`6Cv3i}YryP$ATMHLApR|B8+|XAk<;8xQD
    1. Gh)0PolJjb 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

      eO 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

      x%92OhZW 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%0Ad)q5Lvj$d>j{+pXF66?bN{U=)D#^<`aDcr= zkU_k8K)&k(Hq1d;BMzYX2$MJt_(GZt=q>}vcs}Auy2sFA&6uSrPzc*Zy27!YK(F4oS2#^4`deTEB=tCy_z>C0x zEmQ(PfP_e}2skkR1W339JeUY4jEE2Hj}OEHTO6K>_{B@egNw+6OMnDdOch9A#$cQX zTQme?L`GK}L^!BIir9lf7_y^~xn%IdZ~Q`VRFngRlnhxwDf7EZOvg4%M^4neF>{>6 zAjS33Lq7CFO)v(<;DlkggFMiMVE{;D=n-oKNPrAPH~>Uitim3N!e0PLVHik2C`dm% zjDIXh6GTXdEJ(zV$bvjbIIu{7#K>waM8wF2musuekhxcI#FlhP;1IsVn3A;sqz-|O zb?gHn$V7GQgCKCn@JN&(+eRh$gL;cJdcuQCki}zsyM5fkSYUa6&v-LL>AALy*mXY%4sF&3!aM*jz}&h{DWq%|KMb zQ;zg1%T8ACd|wJWJ?0QPrqyeja*OwSxm>o(8tWsK#5G6q)hOHj&tY`>Ii}o)k)7h zPxK@e7ooKeYmA8bAzruzP54J8TmY@mj0piFSc1}PIdq4T@yz(jWJ%pf3wB4E{3ZBr>aP1a~-R#t5T zXq{GRwbpEX)@{XBZoSrT)z)qmS8(;#a3$AqHP>`4*L6i#c0Jd3Ro8ZvS9o>Tc%|2Q zwby*D*L}rTe!W*&g@f+&)Ti=Np#xLQ+|0gP1f1*xIUoXuh1iFc*odXriM7~@#n_A0 z*o@`ajrG`$1=)`k*^njKku}+pMcI>8*_373m37&ch1r*t*_fr-nYG!P#o3$H*_`Fs zo%PwC1=^n#+Mp%cp*7l`^*K)+*zOut5j}?zHBp^hgoR~Tf7RE1#oB+pTCKJJ+OEyo ztp!`J<=U?m+ps0uvmM*CHCweU+qOm9wS`-^W!txv+qk9MyS3GT-O{D~I-C5`@f6dk zwZwER+QL2B!!_K*MclsfFI?^}B`bT+X%L>c!sc)!yvo-tG0??giiP72ohB-|-#VKVSu5 z0ESs$g+IvIr2WuP4bP_i(&=4TzFXM6quPZv-r^nJ{srLw72x9~VE--u-~c}00XE0QTjErMC- z)LiCNSvXcjpoVJ*hHL-^V~y4#a0Y5{h6xr{MaTwVriNjD;Al?ZX?9?0hG1!~W>y`A zYar%xJ%nt4hG6(*Kaf@ZU%cz1ZwC8XJ}z( zAZBd#Rc5A!cg9ym=mv6bRa4;Rde-Gmz2{LVWosZ-i0TGl5NBYx*LrpYVBG^#b_A_` zf`KjqbEXD#E@?|(RVK)Vk{0J@HdZ4*25Ml0R{i98Ue`~~;BLqSbTtBKAm}3Kgk)gV zCkTdE;9Wk*WmX{NPK5?m$Yl%GR_QRs%3r2}DhSYM8XkA-Mi zSYtY9s4CvrD#!-LhS*LJ=4?oX!M=tyuGu-rg>FD&BIpFWCf~p&Wyp3}U-n~&MTKr4 zVsB@E!bSpLE@`7C zg50K6Q%D8v*5+%dR;`8U2_I=pE&>`3@n;T%SS^HLM&?0?)i@~bU&e$ce{yG-X(CW; zPNi~IO@sl*)m*rSd`^XXO@xEqRfXF=#Ye3|Y?gef}0%Ra%UM_-~c2^rOf)ICvJ%9#T&}VY?iD)ql${0sCW29p;r*V4ifwa=HHG2ESRD4}sn+3*^=m?wgJ$RJY}e~;*YOn3sPhIc;L1Z1!VOiubaM&?Z@?%$?* zS+M$+b!sdp1YpQzVEBWurUq7!**N$ERDcfojSekwWv8WYzPR5^+`GNYNpfvrVn2c+ z*l!oMRlok{eK*!#J!WVqf_^^MZMK7i=H_bM@X)_-4Ih2c&u|ES?OYA=e39@4W@lv4moZC*Y|8X0 zuxtmXO07y2n8~b8Nx~tt2URw3+s1+`TlO5)5bo%dSoPw(Z=wck9mF4YOuBh_9KZ18t+~jvqzS@z~d3qbk`ll{S(sRo+9Q z_IAqVsJGrdqH;;KM8p*Tx4nC=%b_!BRxoJ49cFs$&>65?$`g>}4HxeT{O>EUb*e3L``$R+S}kD3Z-Al1LKFL$}pYB3~T=!%BtA?be)& zaTGENG}!=i;9-e)htn%W6haL!P_RdvbW~lF;feLNmyI*IWIL@(Dk znM*L6CAk|gREcSoRKVO8hbX}SgUndlh-DTy=foK&T5h?;h$D;8HJ4j{+||ccT8#wF zRD=|91QCQx1&vdRbmK@#y+kQ!WzG;mD3c65MT9|)fF!A)B#9a-sezihX{o55I_j#a zvZ^YqugdBwt*zSs8f&e%-a6~9x$>$ju)hlHtE&^{WsFpvmRk}`kcPD0DhR_0;ig99QeYL- z#3E|Jeh4KK5uLc}QLpP#Bg-b9Y$8|@9b*h6zO0l|1j!Qpbkju^3mmi^KG$4QRPNR| zCNyE%7;IK>NCFNz*^uQXoOG(SCtZ0uG8bEO-6ceAvq(iqqRzmrD2Sq+xbl+xVJ1mc zlU0_DB&A9Jr*}um@OC(Oi6g$a;*B%@xZ{ySKDp$zY386`mk-BWmxH)A$H@kU7n5-| zuYsF1~`esqmZ6haiwfL0M?CW}JItXe49io?M23PL!M8cbd>$5O~)J-x(Y^9D&Ci0H@}o7h8QtidcD z?ePzr>;@xu6&s3f zia~@~h)EViD8@nlATl`EAr83!Az8vU!nDYx4=U7?o&s?;iw5F_wjn5{7UizcWN#|u z5=~^P0*y^fO)8h+oK(8eA>IVo$9owJk1=LT%s8X5yvk=5|d4uQ#-yC zqNUC#pd5@)urdkff0$_<5ggjLLEy$&Q|SgX&*KdKIU_?-mC7|x@f$hBfqyE~i&v%6 zBRTx&AlJZz_`+8jn8+?SaivB#BD9w$^eWPOg91HU6<}~Rg1w2FK_vnIjH>BN z76-Y}ndHESuY@Ipa~h%8@`Ta3@X1dm>?ok3NKi7}Oo^;21R>^$s$y6L8iWXGHj1Gt zBsLqvt)r?nx$gs5A|f2i;r{$Mp~@ZpLKwL>9(7&Z}- zaD^vSn{!R5wzKJm5VMfpENHwN8&WqL-ut?g`cd)wabHn_ii?LV*r80Kch9~>8l zS%|_8l6VBz8hu=~{AtpYCiV%L?T1|7TG##lH@^dp>w)`Q-~}f*z!7e6Q!{Jf4p%tD z4=(Y9cNz|}$b}>ZF^F8qY04x#N4+Cm>A9RRF5y18xKXb1l(T&QvtISB zQ@!h0-#WQxfs9SS8yyl&b_s)CZ=(ANb2hIz+}|$uxYK>^cCS0$@2>Z}>*WrT5XC5R zQSOeL1-T?tyPrlrbh@;m;a=DJz3nBa5*Z%ak4?{m(ANc_P=zbrF-v&RSU-xqi{h+v1U2{#Ba&-Ng$X9|ZDV z^Ce&WMd0|wU;Bkz2Cfasb=3V`p#6zo`u!jL=^qS*9|B@u0772}jvxn`VD7Em`;lBl zu|@LnANNHd@=;(0a$rSO;K(W8+5`arAYsr2Li}0Z?hT>ZMPa=KAPW{>5-Q;SHCxaj zV8{_){bAq>$;JOQ!dui^^rc_WRe~C>;h#v~2?Br`_Q4ve!W@3WC#az+&0q#`BKVJbpmA@*S{?4l!9!XTIsBRoPN z;7K4n!XumwbZHba_5mZ{i6b~;+AxA8SOOz3A!iI@H8O%7n9wgCS|ISjl~tof;R&&E zV>6y(Gv?bfG6KFeBQ;W^M)iRmFoF=Akp6WaXAIp0%0c3(4YRd@MX?1tb`(7lg(7q%e`R^Rk_-`dQD&eV_}~kU;9axT-l#o*)Woy zL7I>wV1nAzrC7e@`$->jL1smfrUl+bBTQgvil)6m;7_uj3SyuA zg{E3|W+OEQqcMs|Gj0Mp4nm@dh%ut*BUr*FNCGuJf*lNFW74Bx;^UA0 zC?8a#f&6G#n(3CxL82uZJEG`Z^r$p$!Z5CAL>`(PTR*%Tt70xUAP5Fg2D>_Wr8C}>IBx{1?tIN;0d0fVN3$%5CUcb&LmL^VEf@D z0lr|QG2sgafgH4fst%n|9@_C~rEvJcAf%&~1;YAO6C0W#M; z!cZG1V6JLZSw0s#-XBytW^ZtWxLVR@FVcxEkj$|r+9 zVtg{_E<|WF5a@=|!i6#eD$3_6ZfG7x!!dAYb*h3SU?Yu^9VTGH;tt~px#K`OsWf6j zDNrMiT4^af0_LjhoKE92KEj^z!9zmnAgpM>dTx{I5+9h5E=^=YPU*W%DU6n=i86v5 z?C9hgpaCML=gdVmb|X8IX*rgriN0GO3_?pLB;@K+lRm#Ek|Rq7sDYNh&B?ECQ}z9QyaXyrEApQ{p^Glu4$1f_2NYEKGl|GMA)8Y|nJEZcM+ zts1cI*`~8LB~wzYzC9Ob6lF)TMZRH~1**+r4s8Dk9SLeCKQ<#-w(JyQ<@9}FU=DHl z$$=dRuvT_u5*wy)w5nkKY7TP7wfd{%S{f#7RQH){%90?s5@GU9CJVQaXjWggT9jTQ zFa$1}16q{gL1jNKLiEY+s0uLhwUA>nn_+S#UNEF^xMd4>ADIFto(Sg&5^K$hq;Vdn z8ak&MDrY7C1c4zsCw{6zb+)1{`lp6kXCNwVg37Jd0xc+pry-6fAqKA27Of{TB7ll# zdA98)axy0Krz?V|fbyp;+oyPHVuGqI*FGqOMg!nFV%IW*HbjHqDrktRLNpX}G}Hn! z)PnRD)TMs4z-nGd^zS7Mn3{!i^T&AOs~3KW;Vesm7sb?XsgIkR6FS zsr2#zCXgMQ27-u8BbAaU?vkA(Y$@d0s)IBh+nf+MLTNQ>+?YP&FCrv3`oW4yqX{*y zL^>(i?dU)2>192_Cg>@UKEj{Q9`}yIC(h4Ub1wf2A`uY0yV~HHhyZo zL0hB$ny()aYhiZaO`;&k;-d!><^fV4_a$IJK44Ww-}-eWb3JgYs;qN;umne=H5;on zx-9<{rEGre2U1{H%0Ws_H4ObOKXT!7u~1V2qd;n-@%1DHTd=jx9}dQ9YD(Z&=U=7% zi4s?}UY9JW{;mvaaQERWt@7%sW?xcDs}aiuKmsPM>Z2UAuciGfL89o|Tp6!^;reMS z6hfu(J)<47FdN@n_Q^#IpE2>t@X$dUS>DCOVp$l*MQ^U_z_wpa*5CTZZ?C%F3Gwk_ zzGd#gF!^a}7_y%Uxky^sL)$^LpMdz|3tr}(ozwVD(vx^twFN)>sG8cy@T9-0vvBhp6 zh=MR0u^iliAJ|hwLMcUlFB*-)MWVvb8Q$1H;o5!n`Zg+D*hwScN%NAUpXje21ngs4 z8uP)W+JR~l!e7S{vG)=6O*Um7+ksfGwh@=OY2S}U|E)>9ap30G9fei$uedzTev7>R%>2X;Q4m31tx1co((_(WUvzT zsP+K~-ycB}U$CxV@)31c>NuY_F`}L!?=`RlhhY0k<7-#AH8!8OZfjj?VLigIGM*4l z%XT1GA8T4{`Dt}qvT(L@D{cP?ZF}qwuV7B1pChd13kh}OolsPBt8lNYo}Z()_Agve zLd`C>A}ca;hC=#TtsLs1!0*D*8mNJ4s2^&#C$B9lGknnMXC7*8D`3NP`{#WYXnU_= z)M9)phcYa;;w`%}+bRQv%Cak#GB1m#fRj9fl6-$hXww2S;1ctGBeQk?Rswf=Xm!>? zL)UZcCK^Ffqg>21HLm$HVs4YlX|X-7Bn){o{$jD&vx%?hyCtMNi$b1Kx$LDbk!qBS zpD2nxF64%@tCoU^>Z+};-(_`_HSejBZmO9Md8-BjhtsJ-(!KYlxan@A9k^Sb{^*+i z-RxZ{Dp<&P%*k04D#vfS&vtAj{2`JpnUKKW?v}i4* zN|fMMlKVDPrIU8$hWhkLRo`8-cD3r;w^iXvv;gng#SCwsO08%?MqC(i<;HRetD@ZM zFt*5&1&0<~Nfqh2m?eMSe0pwS!lV(asvH@y>Bo?n6^5+;o0jI$sb?!whM1YM;>>6< zQ?5Lka&66-X&XK}dF8-|qeVN$Y*#Htb}&gQ^{AACwnQ`vZ~Vk?=MVMH2o93FN>48Ifd=K_vNz5A`<8N{ji_G6?!KOPZ@ky0x3qrnzkyu%Lu z2AS|eRtnt26G=Q_Wt2@&8D*PuzyXKLbHEJq9FUUQ2`PdyO{MVMkLM2|u$ zsv@!$q3EPV7+GYfGKoSe(1Zph^sJeRB1+LiWonfFC7BjwDWNtnA`_z^0xMKb zA&LqlktUME(=t!OD62rv9V1=@(sF@7qHPC{>O-NEmPi1JuXD^ZiD0tBh5AH)IPhnR*(Ztx6N>)yE?>-6Hd6}jEkml=8&6C8O8phO)h4%(`FY~MA`(C zQbg>iN%hjR)gw#n0~qx5L?jZv2shc*ql11tutEzTfswyf2YKYhM}C~J!VlHsh!G11 z@o^CPFgb{oOj#-AM0?>y(hm;(sD0l+_=t!Ph&pOf5=(F|{!WdE6lFq5qI&UqCYy9n zk^(&$MHEpA9K}jhatYH*F~jr;T9oo^WTWC8VI)iVX(@0D;L1YO6hfV+PD-%}Q5rE6 zNj)TF`YXtvdS-llZ_N-0??# z6>{GwM&XGpA;W%O5|f{X0#~HK)qual5Rfq8r$)SKWpLUEhywVhm#imb4=Lq(8g(WE z+DU>ab5zCL$iX#&(2eE)N{B@A=m->5TDvqTB?A3u#rhG$)PLg^}yg5USs4lD=s4Jedx{5eNEEgi_LnN3cQ^!IK23 zp*p@tJSe7{IM9^}^uAeaVic%IgqM(wzjH8FR!PCh6SwuAMt}rPjabT3gk`LIDFtT) znf6Kc8{IuI1tmoBU zJo4?bafFAm*Q1`o5{^@BSyr+fpUL>$A5;AZ=Z)IiLts%2nE%Y^U=q_$$L!{dG4o`_EZH|UR)xXd22iZk25psSoRM4MncmC>$#08h;MaB= z)rdwntf9>`*v)HI<{>B&N#ubn&|`Q&}bk=8{Bwk*Z?z}zkn?{i_^wK zqd|)QN4S*K!t&8Z6!jk{vEn`TfsZ8s{b$SV+9SB*o$E;IiAGbOrMvdE?W)%XlI~|h z?MYAS8f3Zk8IRLC;=`_J4wb1umDj80LsWv))i!+OKqbBPNbF$vh=u%u2de(#KnP*1 z2w{CBK@>)z0o~_)L?IUv0TsaHe(*=G_NQTn&(grc5CF2EvIjj4ICPB3x!FK#hmI0>FZ+ zzb>UK@T@BGhI&f>vt!eK^&P1xgN;G_>63{6OelbVOZ#^nrG=8Og|kBn|vrmH5* zE+IgN>ewh0tL?-}amBR8F#u04J|PrT;S)Gx$)pT04lkKlPxSoh#*`_a9s_JRZ*0!S zHIhtjLL+MSW}9rI%Ce@$fMYNuL&thUHin}ctA=g_M>)7GaPX-xm;oEEj23<`9JC=g zkfR=>gF7N88epM9M1d8kkA@n=Bd$jxFd=nH}C{m<43aWN3{r2PkeO^a> z_#;z*$JZ+D&K|)N_G2VPgaO~f*QU=BW?>{|q0^A0dE&)g+Q5l~hoWLt@AxF*PMs(vXNO zZeu*Gd6Y=$PAQPUD>D;9?gAtTkSdR`1tXvWQ&gm07(zwPWiP$LDe6W4H(doq$m&uJ{X}YF2a#ks9Jb}<~Alzc8HVm#WYny=JLyoI7lfbf=xcL zPQXy>%t&JbDF}9m3>QL`x`;hg@P*bckTzwBs!O?yBqrKpBFyEEL_(PM&QJO-1d)Og ze9W6-jG5ZzH~vB~T0t1)Ld}|{75b?-@ZvO@Y%cy{LkZ(<^vP|0OdPXp^R$dJ(kV7f z1Ix5g9oKPeAR}z}<{Wj5pW?Ci1P2|hO!A^b8^XaJ@ku$b!Oh5Q7s%|PV4(pi5_n=~ zEcT6AE=SYu!}%(t6huK5r0>@HW7leDcS^DW`>*~Y0(kmQtmFXyLJUMbxMzL%tU>w@ zc343qC=&cMEGhyCDtIzNth8TFYF~Ur4xUOR$M0YYGSN2YL7-|%AcWUkO%fu|0X^Y; zMj;p;VHDs&*}w#@N(@@^jYhdC8DA)OX!tS#Jc9_H-q)D zdPWJkqI_`c=8%(8oW+M|2`r`}L&(B+d?aANqb+N(+bDDYiq4A`A0k^f1{6mIQhG4f zGR9arrc>$@Se6Aaf1;G8OINz$C<;y~&Q4jR0suczWx2wXrlKPZX0({Fj}FFwfa%1H z$wBYp#qNSM^rG^XEHRit6<(|`6zXoM138olL!FHA41>v%G4LEin^q4;$BD{hLp171 z@ytmT9#V+3^}j?8?+&B_tqYjbV;?rIi55cppPPeeQ-x0Fs-5zt#SF|B?EyXo8)?s z^SPelq(*nAAQdcLq$3pZ`Wo`qrlT0lrp$R&HTcO}4ge1kxI%ePTh!hFT|-L|V=tj|C4#W1I* z`l{tY)GO5b6zSTG?Z z{B#pXLbX6bqfp|rr~)@}D_o2PIfFnB!7Eeh1zr-iFca(+TyaNiZT~IFyFV z%7zJGJMoWi6hKtkIeG69{IL!^>%Nwqey=*8dl-YCbt1CL?Du9Sr&mln2$(4 zszMCcb^6ap7|=pmiWMYbeE8$31jHci$}25InfniSQm1i!B&9@m*7RjhZ=~j8_mw1~ zb~5r;_Jt?E(j$!7a+azM_#i2LjYc4K5Ef9ZETq=<<9IU_tJSHKl$PZo@r#iRq|xfo7Y%;g00 zhz`}oUQAk#TI)ASxU$H3Dlj5nH7uq_`cnXI2{G%rR^=6CXd`@wK`iY(+Ac=UBVE4^ zT)7QgVJPb!2wjZzzf4AD&jUP_?qVteJR{h@Dus~VkR+bsK#_)=e4vjTyVFS}v z4J>5{IA{o>1%U}d=gLo}W^0PEod9`lk_Iw%VfI|?FMtDUbWCc^Mrn@hYK{!_s0{OB zJGE289Q8(?vdn3=smA8G1@jY)-gv32OWhYZ|$-4v|$|jc5jCxI%1j3?$*tY z;h}DM*qGVZFu|o}fnYMEbRai%HbJB)5`NnBsUq@qq-1vn0d_XwK~8EGN~%CmN7JMv zc7CcM1yD?rdDe8K6lNiI>g9Ev0$y$eA<1;5+^>dY=RpqSKFpNBPcpvw10x|^(4eZm zMWLV53awB<6t;w*%VGuv>?o?$p)V++&8?xCO;2j2E)m5B!`GtI_k3^MQOp;Pe05TI z_lO?xVghJ|;7mPCts|zoQXb7ye3Oinnh#3`P39L~ac;9@F(HmxkCN3_gl7{1p+a8K zb5JBVIb!IdbBr^r!~E zb_-lylm+1YG)Is*U2o$-lELUZ? z2uZdk!V$1si7bwkcKGU)xLC$evl9D?`UPH7BvZ=#C{&TML2FGC6qv?M12y|C?t*BF zahZ|~kl866!}dZIFED6SnKENT(GfL{>@SjRYxbsUpk_2GRJRf8GqQ0uUVFD|8_BFJ z%g)hij5~0GG&usdIHo%s#^Fd4=WmVlZm0VgTwxQ2%|IHE5#EQ^2nKXOArmHY`92Ez z{%jUz0lj@qolnyLKn!F`O0v^jt%e4{Abkx=B4nrvvey1%KOlE^`-8hvml4`vPg_JG zaOJ?EV&8yd*I24{_N_nugIE;Ab-KGl`r~&FgyS*%y%UfT2!VL%^sF54eNcfF&cP}{ zRRintgS=NVwbFX0H?blbW4hN)TD-+Adh9K_jj}o+xGFGfQG=O?{{%uu{H2KMO_s_+ zD>Reg>Szi9{pgBIW*%)T;BY%nJ%C0Rb>f?>(*t2B@wa}2REmXLR>i)uhhuv%&(X+M z)a9tQYf|FRUmF7FEQ`YA4@GG1yI>bYmQ`32j@yQ525hj6(Y3+okPZpi=#owW=@OJK zL5TsQM>oRgQbq{|5(7plEva+}Dj+H-{`mf9-|=(wT+e&G_npZeQoG2|qT=bb?zt1X zt1cm#o`OfkAkT^};S0eM9ss0->kW+Uvnx6^ZMCD4w7Lyc| z?io~GZhLl#&Iq~SX|8Ufh$6Qf`*Ug3(;oP;3aEMtUJ(R{S=@*S48V6@7r>_)KE%jL zY>++aiu#4`4lDK7u;UBpNvi@bbyD~ zURG7v_go?#gkN56!4WiW1`d`q{CfVbgNxPNd=3<19?nuLV<}%(#me&8?m} zc;fn|#~y?%3XXR~a*VQl>|GqO-3o_E(FGSyd#-!hc!PRGDl-y*YD@MhE#ZG>+3rVY zku2{DElWa)`~xSz2r?6 z#5Wp7V>vUQev@2{iS6x;xP*1|{Z8flL~^fb`q#LdEYDl&6=<=_$>E44xb1g@Mfr^9 z-*6R90E{sDCc1dm6j@lgb(E+9RV^fGmkc$3Ds~qJ9Lipbz=OVKn#gY7_3P~v;v6^B zs;S0N@zvFy{G(GCj57Pp_!BN8nQriJjqhV?G7IHIe00l~nU0QKz(s|jUgn`i(WraX zF^b9h2RR~@)m8k^WHOFH+w%Dg3?p7ovf6dsruf$m;B6B#v9#h(AsZ1p!!+79;!Q8j zU|5c!X2{M^!BhW~=jmp<%*XV0T5cBU4!yPf=X1*_mpNR*db%qFr7td(oLL$v;gsL% zp(j-c#o14}(w3x7TnOTv^oe<3gIZl0ygn|o){|DnP~6Buy24RHOqyYA^6pI!tQ@lE z*}c0mrzn&DCjYBgs|aRarP1eS8@V^vg% ziJF`Lzy$`$TfnJ0LoMDP587piOern|82*^8;#;B})CB4o>_Ud-)%!;Z^zT$5l5DXlzWNLR_U36*>3lFA~_R$j#^k)MZ1HY(PhN9P8v;a+Oz zIiDz~kZ=_ab1D~&oa*Kw=V4OQ$9#yOsaL2Y(-xc(W`@o-Tt+Rurr=GEys+g~EDdjah z%;Ap>EqWbJ{@DjO$A7ABD32e+Sr!uE`K|0D^s+e-pkRK6&Z2kHS2=oOb2-iW`V;G^NJ2;AZs3L1OaW0~MlqzXTBUc@BGhC>wWvCq41N5=5f_jD2 z^Vy*2g-SeG>u@>?9s8`!z7J(%Q;ksZ<1-VaBqk1pNe`Mq`a5Jl#M&fXKSA}_Udp82 z>RiUC07pQ$zj@0522eAW?Y@@3E~~2l1Z6@JPuo0XyULWkOQg0>7#{9c?Y;(4s6+s` z?{|o%rK7!Jb6_652gkg)As9O$F!{upK>t9Qe~uWq!SBqLt_u@kZt3-XjM)S{Ajxa| zHTYl>@49|UR)a$6H%Z7sFxI=n5EPlNngwB=Cd@l(FSx9+aa@b{>_?j=`iHutPvftD zVe*wM2@SlL{7Wuk%8baGs*czETGeK)Twg5gXt3<#o8P-{4E}oG@OL&IB?%f;_2-k< zakWr?0X^~gn{m19jVBq}=<>zn&^7%lp?~EYi?7C2V@yQ6UjSYhNp6*Hia7Y%1D315 z%m_&%QZ4k+l6N=2jx5Te9zVh8Q4l1`-Wq;ES7v_|-jiG9gACFMvi=1T=X) z^C;$X{H2Us_zE@;&>TP7FbK8`Lx%zJ0k+CV+WHpKR;9>cvB!d+PzIZX24jA4Is)nZ zd4_MK9YSNPF6BYEjAuL0QzO-0S%?o-GJaCH47f=-7!CsVIF3}+xoFFtj z2+2^O6Tbkz3b3zxYn?%fhm9*aoLVuwSi}Qo**gGxAH>QNYKxak3t?Zq{d@3zqvaD{ zE>Absfp%JHn+b~-IK~Yy!;2Z(s{_E*4Ct>6(+L@GFJ4XMH)CBQ-#UVql*@w-v>4a~ z5_aNP0DJ>8OxKzTEpXLX9NqN*W4o@UQj%K40xuT@$2};2F<9@;F8l4@rjG;QS`H4J}OX$%N0aWh2L2{(VO|G~e8~=iw)*=<#r2uW=oT(hUraiyp!KkSm zj6XX;(@;+E2=!m(O0S|lNEc_bGMnT$c;^C5y8J3BXK%wx7U|Ow2rs3~^RDpx-H5U-=rsj1N44};F|+Uvghoc@3syGP zo0*&ysw5+Q+F^*Ck7&!6y?a9r)7&x?5r{%pXXk%}J*R?cpGBF>%F)spN1|B#&7-~I zqyJeN7Z13bSQ@vpc~rWyMi1hW$k|xy6zs@7?+(!y&9cPE&^x)(TI#a+hif#rvT?Yv z@zHt3n90AW=J)vlXhz)i(nS!?6doqBw8bkMjj z;N1s@O_}g3dB!*5p+eX^Bv4o0;eLtnKr;w z#2L_cIK!Sf<6a=>FcA6CjPX$_-}_VgCuG1A7ru{Rzsv!~{|*2ro4^w@Mwa4)^EhN| zAN`MZ`n>_B@0)-ZH_}YMHi5BbjNfr|XMrHvIn{kn$?ZYpVR%s479wT_@xh(;WEaq@ zA{gF&5B)oa4~i1+uzt#q(xpKC_TUqw;QWv*v@?&1Y1i`B;r`6ZYHD%Ey)!o*%d*fZ zcoV9rtKfVrq-l_#8RUVy-B4+$UH-^Q11t|<*G2_y3k!P)H;{AkgbKrn_D1a1zjx8^ ze+k9~t4j@86PwC2w`qq7626eU0|KkQufin%osz?cvpbT5+mbK#(()3t$)u6>=Nv{K zgZrSm3sC;LPDc(4alv3GX-;kX1zXN-L2P&RH~X-8_wp1df3HmFmndW<+B8`f>5i_t zFgN|EmDG8o!@pk;wz8EGrVW`D$^0_se2X0NyIY!B2Fxg9NR7z8K8HR>%Em=Nu`mcA zF`VC0?)b1?a#$9ym7S6=MZaa}^2OjwV-{|KnPn{@y)l!;RP;dX0@ zS!*lm^CrEg09|oA8%*VHT^!PP)|kbY&Xd4)t;Epha<_b#YnjRi!;b)k1L;Q1-cyEA7AV`pkO0yL!Z#ex|sgdPYhNL9^% z25tgD>1K??KoDvZPy%N-n*ki+dg19FcKMpVvarFP%nf|rY-`-R0NA4dML$`E!97wdr#DiEg7vy6t9Fz{z2;&*Dv2_nbVbs4! zSmG-qnLONQC~KL(PkTSwuDg@ zcT2?@GPW#cui!x1Yy=xFGH8&>^YQH6tSw|NoN6ajv8~&#srqq|j3C3!&(^grE_4mC z=u9~N7a;N%pwf)Z;>hgrDD5bOEdt^*6Hhl{z(l`U1`r%kkne zD4`{=Bk%~YhZ~b9pxc+2rGx>d@?YcJT-tv(<9<{njD(1N9S#k4;piXr^6ZuPd%>2w33#~k=KWHt zGDXmjGZ7CvVQew_M~>L%AD8eWkA}jl@)}Wy-3;NlI>;n!{vmYve(GR zl=uzZkOEbVIxL{IysRF37iY59(|=>8oeL zZV?!|!JwxX&UmW(Aq@~VFG#a=J!=iLIqudME@s(keMQ8;Z!X!ChHn#O z{6hlnAkl9a+OE(?%#e3A<>KcY2Tn`oQOVHk{~&vh9+ zqh&fZ)%}*lYasC#HRzRkp-ngPN|Y zFG;>ADcit(ZsEUu>SdngzhT@8{@^576$(l~|rnn?vt&24ij;R^E{hmB$Ns z7a+EB{bv$2Nl`ZE1nbYt+j;CYk{7zjF#+|Bj98bt=+L)E{D!(4;UJk?m$F&1vn~M* z^tra#*A|P%E%ni>4J{XoNC6{d^Xxwl8eotm%EToOgweM$SZgh?RIl-sd}H)R%jaQa=p$TNQS+_w zLc;;WcQJ6zcW3OXhpYk2rwb}7+4JlHF6M)^HVdPiDf6c*S2;rV3U_U)d7;X^5F)>5 zK|7+LL#FK`)zc3+hEQ`rQWfAW*@l~aVWn66lNHdJ89mOvn24LWN=rcF=p;QsNh+Tb zGuk)6fLQL&yE$~FE3^PE)hFwKBV7CD+YJI4pZz^Lgx zH2nr?va9{|$e!qLt52b$IBomkorD=xuy<}>Rek!Vpg^m6NOu2WL-9SEZLOBewDw+! zrOiIuA}z2n_x!1^uyL#L+dv8Hme}3 z?#Wuc{AQn7=uwV)ozql)o0VdSySQgtDE>{8q40DmDt;-yDPv`}O3rtY$|1jSDyKQO zV`03D#iT@*;3i%QyVo1IbJHKoEFRu!@9#_CPMnD6zw9dew^FPShqRWI7jVknd?;h76dP^7~PPPC}}$zBz(CGpXUtgf8Ab z7kb|$C&$@l59L!yXonnR)I$=gsFUK_s}nSVLrg5p*MTU` z2lDN@G(l5AdfW^*7d1>OoExwN;9Y4}j7J(pw?( zUumK(K71A02(_fR6JTX(RFj{m8;pR;PAdL^lOU-y!Ngo04HK}bo@|h9mC4(mIEc!H zRVPB`-HkDBB&f!i?Lz|Z&<}(E$yAZ!5Tgb&Gkgtz98CK5uTVOW_V(dqQZR@akL54L zLR0^+n+udG(d)3-;a5iL8t@@>u|pSmZdz9(&Y9j`>5XAOCkw@+|-mv^0T9&>ej8mdb6?pqwUyyy=a$rCoZ zGRk-47np*Q!1pp_2JIl_1#a{oCEAzOj#_06X!=^gYY(|hat8&tk~*h#pJmHW2@-Z7 zbG!yVU;{e{^~=SmwygIXyuLdSbG-YbPQez-+^`M1?2X6)wPUF;l}O6PJHKU(Jo>K= zZ$g=V%}Kj^UO3{$_d2!!E0jZg*4MMcj0%`Qmhj6h;b*{D448POUTZ$gzISV8@M6z% zK}%^wUyl;$Le5|ZSGjCN(7I`Jx#-EP;?fPn`B{aw1-ON;=&ijHig{x8P$`b%iErkt zaVH9BOG2|ra3G}oNnOhqDm1iU2qq-`6Zu~4$o$ErrKgL#))a@AQcQGi&&&v$k!FT@ zy!3ot{troY!63_Ox57t^bArw#&DMHs9NRB=`5d?=2p1Ob1vsoFjGSG>xJrtgMT6nsZ}7)#5`rNDsQay5> zPk9K%olV}`oG9Y|$|7wjW8?%R<~6aB>hGI~*(JSkG5%X|6}E56lUa0zU-mrLY=MHc`;eq-H3-ZruVqoSG%#{F%Wd_Q z6ce`}x6YTzH9R4fYeh{OZqKoJ1_}y0xHs6or(^CcX{*$pHC$Y%XYIgvK6IB!TOUmT zy?VP>5y-(H_a&FLXUmg0Dc;zFRUmCx@O@BvYKDt6s@D-lsrVr^V^4Wr)s&q{9?O|| z>NduH?f-$9;7;wk{zG+<08@(D+z|K{$YUOJ)bM_l2N9DfqC21)l8C*T`{A{@{)3)AN<8zino%3|aKN|wm z6EdyXpO3-+Da*h6QE?0Gc!HDoa3I9D2q2?&JW1f>!i;gAJ^^^>^X1F62}q_|8pmu? z65NG(lP8oP3{8iBBU$YsiCMfqiY2)4P4@`@+tZ4aq3O}QrXsEsKU33nc@7{M8$hXC zwPS&uB|FdwXc>Wd{8ApgL`SP+{B)gYc;PJ!6;ahUblZ$VRebMBZkz2T@}Q zp(n%OSg>k^9jLPVSu;tbq&T;c*vClF-eqFn*ON;3hK2@>$-bC6%mqJB)j0! zN4@EYuozYfB?_Eq;*veaP*jNeirfB;OsdA+bW<{%*7n;FbL0d|A6ECFkcpqJV8zPC z${c2&Iq>;Ng#w57f=|NToGESbAXkPJ*4v72G9{k{uudq|dA;mnZxdB8pHwS2FYIm0 zlz7D4wLwal(VEW`cQn7aw@s&%@`O^tP%KGAnovA0os6%;jp%yE)7fj%D0X7kJ?BxeKk-r@GYiobQ05q4*|XtnS&{YpY~1#-%X(+ww=M#V~6W zNn66J>)mye$kSkjXO0R)Suzc*4(A^;N5RK|m-LFr^%BHb5_o)VkygqzK6fHx($ghK zN934znKc2sf2ysM7)YOX22p9m?SY{kC+Tgg{A}Z|QC`!mcROw`miA-o-1~yY@8jK? z4j1YkeZ7EBxZ33?EeeVqotYUga(~d<(RaDo-*BNWVM}G~O0}~vc9V3N>8-6CwVclV z{tLak$uQn(x^isE-zC$ewkHGS?{vbqMrAeS%jD^tBeIuauFmWPxWA!sk7It#8_!!# z1vo^cA;%;I!gKu|#;bbspM1+oj+1r`>&nHr)SLC(BF9egDNP5#Mz{TP@?4>VF8R&fcS93b^yKqZjCZ#N%D^;*!Lz0;k#nXWUqjSm#e`=A}Vjm#I_-3+<)5{|ssdEKE;^WDG9AJt;}>!At2P-g|sTT?Dzs}!ZX^VA;v!RPxBl$*V-rI zU{=U5I|BEETnk#AL&|Mc(pLUM4prP{wA`vbnE};rSI^HVZ=Qj!`HPdl2w{u5+8vgi zc09ZUrdKSLrCISGZ9EEsRwL({iv2A0#m2EqpzYW)qG?~to~7R&INMP$ms zZj-Yb(`l!1R0pMM-wu}1z7S;RxaH)SZ|TQ;Ke#~294o=uX2v1yhLZg3^9puS&^Xyf zBUcD#zzlCOYz^d{F00%y$rEy~SXs{sf5?FChNx0qVfIm2YuB2D!`%FDa(j|zdr zz?MLwy2p=9U>69_U`I$}*(}-n6W=iI^Zl|f1mENvN>%2+JjGTCjFzm%n zbVa5GVJ8CNhJ9q|4p^RdIG_y~jTV8*CX#v#0;C8X9Kmu==2SS6vMD{#R^k}z7U265 zrYrr->w$rrrRB`eTNU5+MO7~;1xv~u)_8l)F}Ge(?&w4LLYTfCX4OKo^jwm@R-t^? zGTt9%0oA0xZ)PoR@t7YfzDQHvhP(`$&zxNboiB~Z2}Kq4q*b&Iw1$f{J{+%G@|%7@6RA&c5Lh_9$Cg_V#R#X_*M-w0Zn2Ygr!1(_H;I0e?=V zeSZtVl-uiilo<}mb&h}aVoi?~S_950NFLW=2w<^ln!yCtXiH!j<|JPz`{{QjFg(N zdFH5+B4kMW*IpJC{zCb=-0!l?)cCp}*ZibwXzn1)c|9{hy4cYVrccO6k?Io3pyzJI zrIf{?@_qNtGHDE%XqCF@~j*pIm^u$dZimGv_<@jX|x}6*|9Km4;tF& zEcW6W{_fBd8X3I6Mw5};F4#$nUN$xlBML_#sZoK7yL*K@X+)*TTwio3pDL&fdL!Tg zvZ^s(7+|fO5Sx)#T!BzqDQhl~vTvDV72(+?`ixs>o;4EVJXz0PH0vUnNr$$0{vXDz zO`xiMX22v+fct;1f$BC2&D&u<=|UaKmE<_wo9%ix!XNxjKw`aIDKb&%+JGl7G<;@;B1a}81x%mC>F$eXBSmefO+Z8uQ<;5o0HMZoChM9*Bx^E zVUx6sm;hhbiadb_%3u7bMt996WAe0cQZwHK%ZeU{9k}q|Ln=fNz&Ur*Ejy-5JLpgB ztMs6rWPQd}*XocqmbG)i?2@@thddCcc3)Vb6Kd{us;X2|R`(C(?RMymf()yNFZL1u zy)8p}bk&NgYW_&}EQPY2Oir@DEMG&q?QstN5qSYdzaVt?xn;@i+!~m6uzF}JJO4Ht zk9ciz@&B%a`A=&t-?4==mFzdO+(q(s-Un}yHF&1u)ojWRmSD3__{`99*sa_55ZG+h z-RDsdY$m3oD5oU5730%P{i)_tHh4ixLBn6RzdENsAh-09MXJS~Tp^(J*c)Js7uO)^2s%`slcSn zuPB8i&A}<<9#s)uLD9_Euc#M>%{nE`%hf%=R)wy#%;h&Wpnap?$`xTo=o1KaCx7`A zDanx;6l)I)n1x+b4}JCrXHZu?x=7c6-p$)Cxr@+ntYOvT)-TAAJH_B4N%2a02nzRG$$m;89WrAG3Fd!D=u zbAOn?P!d2~vOvcMz!IPsA+w&5XwFqCGWS=YWe$jPfZdP^ayygYavm^0ZKo&N0Bd`d zZx(qdtC}nxfca8h%n|F`d6`F4IiGwO9Yp(Fu8`VuFsJHFL09FIx$1c7{6Do&E&D!E zosuLwWC~r8<(8!Endg0#|Me71H5bgv;7D6iHxwB^798IaU)Wj`%CqClT`mbrv#L*R z2zD#Ij@2l~$=hejRdsQiJBj>RERBR(cZ0dqAIL=}q`!4t?8RF5#4onnb={*jYAa9G zVwUf`G_)Ygb}LQ-R3=$O=97B6MmPqzcQ>J|ABR?Wt;{Mz^M-;tfm2npOYP;Wn$&aB zOz#J6-v=@cl#AZDh?|2G?p!9`>QHnZgngLez7f63c=9$AWyX7o-CuSoZ)wg@PA5Ff6l#t|Sr z7iy#8sss|q4+;DqGQMcc-VcIOR(Ob^3e{r(>pm||oA>gs@KicP2aY@@^B3#-0!kD7 zdvSZrZ!9dUO(p(7bB;5=1U^iB0>A0clKSpZ&gKt%IGA@lSDhkKjJrpKiw7#Wt|<7* zC?I@Ncnenci}>EE)30rREc+^J4OVf(pISgNi1V-=R(f~Ss>l55GWn01Wb~pW&FJ)m z=3u(tpfuaL`VdC_N|>{OvuGID_)7sz$S0A!lA>yi85#9)UA@_IQmzDD9@xr3+3K05 z@TRy%k=p(9$7$ugX#p0(g~}I^6zRWI8;iWsbn=9|QyW@JN*yxgtpCZ~9$wVw@PIl&YJ*`<)0)`D=Omc8o0<&7c|ZWq!rT83yh_ZN*+; zA`(8YtaNk8-IK=XegG5#D&EZXfo$ZCKlNpP8eCdIV7gx=t_8CG0w;aptQ=(Z4_MPI zOV3_e4ru?PJxXrJRo=J|sQFhD&98k5%3#`&Y5z2P(rpoupnr=>=9PaMTz{DDIHUG4#O# z^T=p8SR0Yyc~2@}CDY9xkx3ye7D;Ak0eGo0b0E ziN`ZyCMfpN zz(7nVigRyVQ0&GaTbG)vZf;M=pix(SyU(DG$3Qpp*KWu{UPE5b>Zem_|2!Jo2nYKzQPJ&(Cm zyB*VDW?ghkhdTW>Jpp+q>(3?Ogk<_mvyxIK_(CM)U@8mk-P5&_?WdQ?J?Pv8=y|3Y z`$ySN@^wy~No!1z2hm5dKD&&YB?3v8=c5~s(R>GT(#OGPTHG5nob>q+0jr^p1dyFP zlXL$9$4-PVYQCd)^WQnCzAQ(fCN&%$FZg)f34ZgEumlgsjj-~C=d;<^rLZiq2!wZ8 zv+(_t;lC;3;YBPba|if)rf|oI6tnX^nocq>9oUG#8y*|*uloepQ$U5911NF@J=7D% z1>#}7&aN@i+qAYmGH&CU-W9(J12x0h3sbiL(egy2mmyg0f8AT3UH?n{{V9GXjGZds z$@-ukS45z)n`=p|GBz)qon|}vXF!x4e9uXg8{QaWn_%{5fi9Qd4v|i3V%v3l^hpAFLPO6K$;aE;&jS%@2@IYxLZZ zn!8Ey?}$emh*U37(2EpUS){+NZtO^Z^SW33k>u;Hxe2M04z5T2|IOhI1)FF1Ux+n# zq0{@@;H^MOCb>?q934mK3~EQD6O4w4uTP*SkQkFuxc5oW=v0iH42iC7YD!b^1+Zh} zb88HE8e(}ptql6Q9)eQUg2^a~elRxE0-v3Lw7~|lMluo=R>q$S`^BbXIT))=v%Ndxc@K7*rXCGOEQcAS}gKl zz#41`EUW5@_Wa}4k=86wu?Y#GScL_%r$-koeE7?#j}Gx?C{hKq&{vNib#`%MB~`X7 z%Ymr>XrtP=F;u9E&lF1K2re40=k-0V;QSW2B{fI#_iZE6ht#@30YbdhoLGk;12@5l z{{p-#elJ)nRfMj+jo9MalSW~)W~gOtbIePnn@=xJHa>=#{LwlJ>a@%0<|Ual>?f7jA^-wT;Z*yKdr_ zp;*d)W4CoLaNK|FH0(zV8T%%*zqur8IddGzAFo(9VG^4W!6fYAtQpRaxq1Ce%phXh zIw!4D)4hbG|5My3Nczm6!>&XB1ILGgb*fUqc+wsEw1Q;W#A16B@4FdO9s$pZ9Ct{` z(4kt)D@_Q!Vb`(KX~)Mm-?|wv-3j+8CyV->>oXF^Tih>mZTorm+p{x`y=beKhsBa{ z8TKIvYIE!`w2%;XSE3TC%5mGb8i!-SaLgBv&H#r@%l@@`Ys_=ZNsnd(+4=iWMd>St zDl*m?Ah`Jkb?ru#nANj9u?jV;Z#x1XZX1LDkX3&36;>^I_5P2y z9sB@>R`TOoB{;3`)ZX-o-7*)rltfUBa>Xs>-;pUyxDgK#UCdlQ*Oy3W1Z5n$7wx+6 z7@IIy(K~F%mml&dp?twsoOzPMLu~z_B3fO8bTAF?rtaRPkEr z(RcrBJz^)ZqP0Vl<&kWn+>@EOJu)%SqU_Vd5=*grNu`Li z2abDCFB#EUTC)K>Yjq=0?pWuA(j&`Kzymw^_G*y7S_m7{j?i#rYI}U|lxG*Vcns?1 zlk{AI|NFY#XtE+>nyA2iDvniUX2VWhRe$)wO_%%~^Fp(jUzSx6y2BcTTPH3R$OYsH zQ(ij5S+{Td7Kzh|n+Za7F~|oTB}pF@p|6W(0%{}fjobDor`4ASNFg$hOe%&7%7!FG zg13&We?c?u-y|_bu#fOC3a1Kr5$gHQDG@_UsDD>95>kZ9Jz2d*nfH5A0tJ*Sg|Bka z`A2#feX)cIkNh$*)mnw4B#~83?EBE;7atumAN*=A`Qy6(0{X1?G)^>V_iKS|onf_S z;m2{8MX$JS`_G~MY#Lv&*)g*!_|#!p-i1-UxA7!s#EItF`(38O>#{XR7^zNtT=G*) zsYGYo#Rd%_t1nSR$CX4%v);GJ_3mT7d6wJ%ZWA{x^lsMCIw2wT1)Dgg?vRdA(mai) zVnpMbA@GqYcKGGzLxImaxUw&DE%eDB)VB$_0_(_e6<2$${}Qur0KgFu`ldMEj)l0D zZQ}N1B8p(r(&Yx7yIG4Y&tEbMfTa=z31+#uX4oE=$UZG{t6I??e=LO zi||1)mtK#M?W~EdLMkQ?O>zeYLa`9>I zzZw%$5znpe|K9b@vw_M8DM&T_hb@`%{6_g|!8p|kgJe057QQg5e3OrA%o{!gqNg&b6s`KDF(`PxTH8Dc<}xioykie+ z4#=qc37k93(9Rf^ud1TTnn$;;&Wf05tx$-;v}B5@UQDB#u63VyWIm5t*u%h_T}A|o z7t8}QEo<|Qu1h_xQGEeuL?h;%&WI6Y%g8#*ag!)wasSzwxBf!YOE?eb`C zM}dpM2d&A&SL6cc6V8I$0ai;yPu*TK$J0|50*CEzALz&|@$-}FDC6=*ioh+W^#nC;QghmUW~NST1_Wm+5@=Qw3z z2Dha&!2P~}MCXsm{sGWeY<&ccNT{J5sgi!cbxf~E9WUsbXGT6s>WK&?Kdar~<4h8b z#UQy;bEY!0sHj=@vca3Szt7^m)Qz$UbXy!b$!a;rK?bGL`ZNIsH{5_nqN535eO80r zryDt}PR{lxDL_w{UJ3OJ1B$l<>U$RzUwzhhsAsS+BXV_8i01fr6dg5rP6LL|U)tWU zan84k=1iTwY{oF)`olIMxd`;EU3n}uY%cbq5a|QU*)$8vAKGa$qhX=_jnjMTW0!24 zUNYcZm~T@6yP5HJf!4|!){;iA0nDOt6rvc4zi$}?8&}>=J$nmuk>C3~D4nQySW+oz zJhVCaPBU)?yh=g>>*zrAcQI&oFO=03`owss9A1}`aa*OTio*r%x=%#rk6veJNlrKN zOv`gyX<0i=XfJ4yf&8Qr<=crM*5Qo&q2)#F^F8#EBT=FqQnp(0lIx;G z`G##qg?WC0Lq33jOIq<=$Rq+*`t+@VW>50bL5BCl52~;s+SByn2FF4nhK@&z&3O-U? zao=F>w)YC)DN?b%=_h;8{L7S-$T4qNs^3(K-vaMhJZnJUIEB;1V>sa9wOz~ZjiEr0 zND3j#1ZH&a5b#jNV*m6*riUrqXJP6sZB*oEZ{%|C?A%jLKsz_Y2SC^4Z1gq5QAq3q ze`C5s0-6szUtD1%vcM+~g8z3m`R*j)CV*LqBcq=iSk_%N1h1;iv?OXTyk{r6u1@s} z5#M`EHSQgg%t}>and`njn9$E?AhXkafCD({xFvZw%@p*3iqKx!x3QHm`>- z1Yi?ve3uKRSJoo|9}1Qwy=u$7Gu$`RW*ve0IJ49{^-dUopDP%vdK=4QwyYn0U^|7z zZRQpgrl&((i7I!gdeVAhRvaB$M9p zE;^m0D9oXXo@d6kuf$9W%cMEx?o0oaWS~_2ltKMeipkva*RvaF-t=trLKa_;Q2@3X z!r?@&RCxB&phLn8|E+vuLEmb-&<8s+uLu^6q9Ft2cptjLd2*P^XX0Z7eSFs8$Z?M| z`qlx_q%?b(93v6-Jei90H^k5VE_nl|lY>;7a#wrz_w9#_Er)ui?)O;Mh%St16K9B) z8Zwx{WMk#!7L1C0(^(+#ta|RF6oUkBv+zH>eo%W?Ip zxID@tU$(!1l%I&?M&VvpR2Uf_?Ozb};@m`@XcvDWxmVNUgJ?>mJ;ik|_4&q{%J z`JO|<5I;E2;rz6;B3*9K=na@qe#P!rdWF|d?)q0IE<6MUhac)tp5dMdkO z@X``C_J4u1R~n)k}#kN z=c+ABPezjp>_dy?h|#+>13s)HOx`YW-qYJj#$lNs*R3?k$Pial)HGydWD<3h@f74_ z{ZdE#H*yKj1fl4>5QYP^5b_hYp! ze)!4Vx39t`ClL4FzJL2VqJNIA<>uer{x?x=0dfrExRi;-Adt7@)3*Yg8!E>VHtCz-?i;!wC zOjmR--^#{!ufWc$X|K>R{AjPpC0TU8*rU*Qzr?4$X}{FJ=V-qya8&f5JaozTpdxa= z>7X*^*U`bVI2y6TDh#XNVKr8$`4FF>_~oz$rz>_;n{VTHR9EcPd{kc^{^h8lDp~AH zV{M_|m!`)0<}b~yJzu`Gw2$719k+HZ`5m|Q?l&JlfAj0h@rwZ(@soBU>w^;lNvP$d zV@mP(q;p1B{A<^O&4aJq%U&&Cd)C8`zrNf|7XQ|}TlnBx-(h{rw^t`U$KPI`j*5SO zbFuW```gR?mhb)7zmC7ZBcqi#9iU?KKOF=Jx1J6Gl}=8F!Fm#BM3}Ar*$BIL>)9xG z#L3whJVoN1ge>wu9~Wt8J)e+xd2&7}JtpyEO8%q&k7?zD)*tWHexLmKph+uvF{8~E za51Yd+;;JQ?7dY`TzliD+h{l5Kmr5^?iPY;AZX(R4-kU8yE`=Q?(XjH?iO4F1PksG z`s}^G?=NSnX3k92xt!azs#g7O*0Y{^-?wVb$#S3G%qvPV-!7=ATiyQ9FsZy<)OI<& zUDAaz-z^&^Tivag7FXV_S~j2Ft=SGU->*9^S>12A9#r0MdfvlM@3(w`EDzg(_|^|Q zA+%KwKO?x$9(H3SSswQi)U6-)Q%tHJe`UCwJs#vhS)L9HlC7VPN{XwVjw_nao=$3p zS)PA4ELlIFwj5MFpLN`yJ)idgKfGKF;M=@hj?h-WTupGFzg*8qe)w~@NGF?% zsy@<(*LD%a8j*``0uhB-Q4-|=dWgenG48NMaGq0uLJGd0LHDD2A@E=QpC8DDXojXk zF9Lo(7c6&qT^NvFP$CM25s2Sk>XE5fekWLhB6_1Ecsp-Pep+vi_P*G~dprc$ixO+TGz8N|#%-<+8o;6n2Zvi7$3WWf`L3ByxQ0`-4U@WjI|dPv*;HW4?3y-Lp_{v1NVF`|WJI zKOA;o{{G_O`f&c>W=f;;`TjyMN%H+)jCsadNgtf<_JKV*JkoCao>@`+@B`6k;QOI- zwPgCmy|K>;RQf`Y8$e)OvJ?ClV|Jiq!E`@EsFF;7hW=m1{9nfW&luBbC9VB8W6F^w z?{OMqF*w`-WKvu!zF4!^K_h(%0)JeULY{DH`=&{66sQn|9#5uyVAw090ECBbI6g67 zWXllnU2n7(RSdc0HiFQv`<@`O8h_MQGGy$$UJOhs4}hsCoSn%P7~0 z{I=~LNx;RW$43j(+n95j|{hw2g_CikL< zk_JYm;oLzZ!BN6(4hf(&(2(M>)%Spd`v+D?f5QqB&Jhk3K=_v_c>r0|5cJe;r5+kofn3$UfU1iowx|U=S03dcL|eKr$i222`NKmz4ZX zPrySElSVA%NIcT*n*;>1En#m~7-WyzLX8|CsWFKP`mYBU01N@A@W=mwWgc)8j{pA} z%fwQ31*7qF%4OQ4b%pJU;2~!K}PJb{irH&^UlVmssjxKAW zg>8R4iQQncqLuw%I!iQwgt?95Xue1}U#GH-^JJ;YAi79qt?FBI%M!e6L;|<(dQSiv z>EBr19f@cB{)tmwwIlm_dzA4T2gzX_{_ZFOEhfpQ`uF^>cPY~L&dZ0>KF??+w#Aia)bSLQFST0E- znRcTA2U1QA>3Ye$P|r|PZIb61$O5(}4SwyL?0WHRmKa0{oE;iO3%}AC#`vC^ybGHC zgGWZ}wyp;P1cM*GDVL1 zjU)LlEHmsAt1e$cmxSHu3zqy5kmB(Dx5-U)M5KLF!LBG9cHjc4y2D>OYUms*HuIy9 z-IxNLug9fDMPbKfWldwpr4l+Yi31hbH|_)BCO&^UVqd^Eni3K+PYijJM4cj4JDwPr zqz!OkoY)!GTA=(V_Henv>p!t<>kBHeh&vV^41u5gau|x3IfwsQ0p1ohC3(BdIMfC7 zrnHNSuWp%Sh9`ckm^BP_yS$1f;-U|gd*Y%WQxg4qMTB1akFd@^-1})E*6TCWOY|w* zafIcqIaPXtW~WZuP5;7j{a2qkX_juek@oF&T0XvCZOD9*8=Vxm4ar^mL$l@G)qbcu z5kMIx&H)t#E2keC-zzyi-r#0jC5-WfC(!5vPkvR+g=ydTzhmSzN}>}IC&|ECG{2nq z7nZkR^i`A9QkpjPVRxw1xyedp)s+B{{0HCUJ;qew09Qb$zw4@&a~o-do*TW)t8{{r zk0Rf87Yj_R+>c7KtK5$TogL(u(qO;M9g-d%L2}0d# z*6;s?Wvd@dsyRhcVNi0GC#OG-DN@6N2H*X;v*$sT)}Kxeilbkjj+?7Vee~s?t$dcG zC{RdiME_C0t(UF&_Lal+d)^TNW0l`BWN>dsdXV^P{LbyZ!Tm8wWPA+%xB4+3iSPUI z!6(AyBa48NE&^#}$x%PkeeT<{@loH&`Ahx!32A`7{p?}?9m_Dcxmxo7zpzYlKQjF3 z=`z|Ey?_iTH6lWI6%!&`K!HCxBEfeR8xv7LMJqKbt$7ufGEqRoJvu7yeifgCUPvb? zHKvqyl~5vE$e=ztrq*_qSQAmmWFj@Lxq6ktwmk{n%31(`~gcMujd=X1R~> zt|mmTLLYy8d5G_>HYT#dkXB}8O!KZTWwOGUdwgZe{jNR-qtaATW_2#@uAxM((p-If zb+PTPu_m(8(nMx$6}EcU)G}FV?J~Z$`E=LZgHdG*m0ABuc;7N2S7o0(zW$5vzI7(D z%CT5x<5=^)ZF#cFxp{o!%>BN78>8BFSZ4Do?Y`qsuG)QReDkjDzVjlo+VenW>uL4A z>tV9m`+j`u_36GFfLY@Ul--6WdguYk*ZAX4Y$NkO^n#;m0%>J;P_-WV2&QU+xhHlo zJs$eWFl$33Wq;zNKMc^x*M_N2{KRX27-WsAjWChjC0u(L;+d+Aa+%mAd43oc#;l8h z%I;ARJ&r)+>*A6p_GtJYM-{m!-~VLYXHb3|Q=4K-YOdI4ad;fp!DLSvX8Of8yhC!s zTAwyL@r$#)6*g(>U7xWld%(NaI_26`pLIQPAo$!m?fY7vgCKYKnW$|hgye?g5FNm$ zvNEd@+>lQycLY&)pG%tJDB@;5lK;LspN7m?EF@>nu(eB)%W_+yJbA3zuDMX7=2W32 zc%nZ3wAe7zSm`i%^6j~8v1ie##zXM;ceLl_0g0yC_{rZ!{O!v#YR(Pmf~O|s?pSTs zj(N>qht}D=lk1qx&BM%R_VLf_zvQ{wmMYJj>z_ByqVBWtJB>Ru(pOtv14xQ0Y|OSa zu>w+@x_4)6+}9CS0V)3ZL|*57Jj7@zn+OA!a+e-j#0yS6T;=yUR#DIGKYw684uAM$ z9~;oIM+XyX9h2&^kFS5(XNl%&3aGSlP5+8@NQm8vL}8qPWiDpw?eJcL3Y1AH2DakT zOmt#7|K#9F=0tWgKgtxtH}jbc)uwH-aq70xqw_=;*0$VF0(9?B-C-tu6s}_Vkn&yg zAWw&X|IqeWNBI#|p!%r~m>0~s%)e;q(;$48Y2U2%bOfMtpDeF*(O}FvWmjn5!%%ok z!QZ@!ANJh;F#R~;;(g7y)KYCB@67ltfEl%F@6YCEB&hupC%UDM#Q5A{9xLkraqB)2 z28PZTe>w~T_?`_4ICjuwjoA+WA*qvx3Z`V9YE1D1vS2qNB|2od*;gdNQAmQ?ZjY+Y zudqbiSI1vIt;gz3UHReDFXizgn<~Fthi0kWLG;?^8l>&7GSjd>&)qPW=9rNiZ774E`esW!V&Y*m+aY!ga|s5(qG7H50&hwWJ0458Emi zfk&X=*dkYWJ%2PFFgv&ZhZaXq6W^pJ-?SvKnk0~A*;TX{nG6I_0|G2^?37(R;Xm7? zEd>G}0<-Xga=3%!>4H=tL5d+kP!r37dmo-*3LgL<(AKCQ0I0a9Qdax0DM|MUALY}5 z?-h<8J)LK#dT?hl86s`)78iJ3*Z2w_C@N`#Qj6qJ;w208;^Ofd=2ojqsNJsFn+L|Rf^JQN?oy&3 zTB5H@qTA@)8yABbTKpq&j2KKKzV?B5Owf0Wt%|u_4e%U;h8*GbyvAHY2vB??34lVT zj)@@7uUE{aQi3mKrJNA-)Y!Wri4*x1jMQ(j))pXhPX~9yT+?| z<}U~2x46)Rc$V;3C^wt29R|!FB(Wd*QHHpvNyb@?M&A=8xThw29z}bFCVRh2@#S@B zHjZm}hzkWJx|rIagoY%w`1b(-lB3QQ!ay_}NBCKEcZpcBhm>f#C@vm58G<;c$5feS zH*Q@oI&i5{(hc}~7%KFohQ72tW z_no)iA)2FZ0zz!Uhfp%PRB-H_cLJVYy|4>#IBn$4AF(&iA665Y!WB3N1ZZ5iDnOAC z^!!0PE>SdrPCZ#9yjcqxQB8P(Vj~XkdA*2_vgcc}Bb$A{G+U_pVgks}JW4ZsT626K zb1(^WG5B(`fiY#qDO~UTS`OGPOB^B}z56cE3S3Y*q=1qDz}lmgE`PI#j z5hYO~Kdyi$6cH}_yx7qX-$X(qAEh_$E6|_AJPjT$%xaOh>ubiqN`dTCfjnWMrgO#t zFqcBoBf1FqC&|X=!nu#zoQ@~a>^|aBGNt*KT{MkdEVmg>vuji^5}sxeEzoV6&TbI7 zIBh7jXAvb}ILF(((1#({Pde9Ev&3IIr8PKLY0Lx%rctO&6RSvA>KW{Mob1?6Uz*ZZ zlG;|9Che?Z9uvq=!cPbO_T;Rp=8~6Irh!+s7itkkhF15ktd6gw!Mvp2yu2~3j0L~A zs;DI6*y;jUn)y`TuURqRUNMwbp>t+Xw`GUJnDJU>-pO21=i|6J=Y5pHHh#xh-o!Q zcr-xL8>HJCWY-$xpBog38kP7PRkRw_JQ_998#UV-wbvSTo*Q+En)Lab47Hk!J(^6@ zo6OsrEZ3T>pPOunn(g_U9krUBJ(^w9o88-+J=dDOpPPM&TKxH20<~I#Jz7H2Tf*8~ zBGy`>o?BvwTI2Xz6SP{BJX%xIThrQGGuB$Oo?CN>+Vc3@3bfjaJlaaq+sfM8D%RSn zp4)1O+Uxk+8?@S+Jlb2*+uPdPJJ#B}p4)qfI{NrK2DCbcJUT|&brpJ0A4I`oWI*s2 zP!eLJ}Dz@hg8o>Ud!?6c7-L{LT9k`%Kg7^hd zOc4=753xiTV`UqJ@TEI52E*928y$`nu#G+g04()@;48rSwisvp6eR$_MocF_5m8(h zvDdd}FTGwh1|!uMJnhllD~!=9j6sSHm~IEI05G1Pdq8@Koii9ofX*NQ#!^i$`Z|V~ zFjxVMz7d0l%LG3104)grb-n(Av6~HqQPI;kql@y^vR6zPICBAVs_BNe>+RLW2ouJL zs_93I1+9S5&;(F*)=gUhJyWdYfSDew4&W3kC=392Ba3*Ej$UHh&xeLY5&>3^!C1IJ z&AUKf+6GR0j2vkJXPdu-(yae4+F-f!$Ey}n!)9Hu?qVA%_A+1r2)c#n>rqTN>q7(~kjEmVB8kD1uD zL|qp~9L@kcWON!c%~WjnSLpijj1SK-fqg2b7qzDk(a?V#4qf8c~hYU5(w$nRj^0lM8mI+)RG5B^J8E<_s zO1Il12F>;}*s7Qo{CaH!fgCMP6!LJeU#H68-DHbE<#Ro40T#02IJm005*0*Z~pqutwnofUr;zd%*Id zff5945xd|X+|a;n;f#`*9q~{?ED1#4nxB#Yc<#90rr3rfJd`qQ0;x(=l3^s&N-Dgy z`r-h09TMU&+&$4eF%$+2(Emnx_&>d|4EO?Qfj|5|Nc@SVa44Gmwv@^QzW$HVQbS1r z8CN2`%iqz`f3%8kQW`B3Dy{UT8_Rx_{}V0!*kLNsrFQy{XerGJRjq8b*>-mNLv zzxqqHT;o5jqA$Xxj*0T&xZ}NbagylOXuf*pYH0EyE@w)&z_#;|MUEC%^z6Z-R<)jgkG@egNS!X z!n#3~vQ3K2b(rH?pD-U8xPN%L9Yml8&GFx0P1%8x5#sLz;%XB745iy_%JnBHI{X=4 z6bZ=2vRjJ zHTv?!`e;9y>zfp1ieVD3QnGPTsj-)ge(SGvTlqla49CUPm=xz>t&fjFQ@t4&LNcSw%>#0?%FO)= ztBx7GOS@nUj9!&f<|pp8n`I|%jc3PI(epsI{o2_^=R+(%>S)3W}WR+VR?pK|h=^b@3+UTB6S=fBL+$=xWzCAnn zp!xX9c%ey5$a~T2j1+Ovr*S)e(XZCTOEd5$df#@C0Ikq=i1@_OZkTMk!ES_V_{MIO zE}FxBj0x&!KhA2=U_ZfOaAQBoBgx?~B_QPJFfB~k;4mXbbmK59jupun z;kdvnD#tmk{9Ug8hvrg-(-N}-2G_**=*YTd<6>>+Rr35vu2GBb$=Wr07h;!H_mZ}>+7AMM6PwY3&kpH&`L`K-DBUh0!?Z>ry7sXT2{NcT7&zryUO@5ZvJxELbU^1SM% znC_?<7pgA5o;xS>x~*4=?yOw0IWN20>|XVHDE3$AD%;KeQ1*Bno#y?VUWe6Pd_HYc z`f~SO)8{q%=X7_$^K*9I3vG`$QjKo_1sObsQxDRUlpp4cG6H1^El5dG0k?xJlc}Va z&!{HAH;w=_ecOv&6dFLIt&E}!p?Om`Bg^PXo+m~py8c#HnsfaabP5ds04y&<&pt)<&J>Q<99k3=7UFM0;z0Cq*a~62@Wk4iKOMV3dwL zQ`f~J8&Xj{-;YSKDaIuc>r%7Rf0ngp^GkoBLKdVS0|wV6kWf)GFuIPZ_KikXMNAVK zxRGki#R=AT6na{gj$iN9C73K_~482T!h&LlKWK-rJ_cV6Rpr1Szt4~|c zrQynUn6xsMOy4w==kAw!ZyR^bvnx>SFi|?ST~MDnsz)o}bv@-qD4BIPASZZ@0weak zs^@xsF|m1}S6o7D$YD^T7U_gga5FbZA$plcgwcO_Bi@jg%}Xco)nPW$ULv1_Q%+J; z^Ic5b4LhY^siAC{(o{i1VT2yNtX;uOst%-xOHNMCA&epHYC-73A2VHB29-g?#u9IG z1|=+qg+iK%V);x3<$ON;LZw6qeqeye>)J=X@f!Kx-FAh%nSv-Rpfn{BCr={u_oxfr9M`<#sFVaZH!Tc;amO{ z#*4S#tXBJlk9)rMIw#eK{;4n(mC>9|!fPm!V>Va!_?l@?Ck$U|X^1bgHVhkct_$q6 zvI4GYIvY9H=U|+fNtSE=tV*g6f&|(HF|Kcl6hYE3m@Jvmd{vg6o7*~BoNBd}k5C8N zrXr7Qkd%N-F)lbi1kY@jwAKfZ)jIt-KLCz>H&qtMJHqL4Ea4Q9meqFJ;}Q{R1bQ`? zEa7oO>1^Ml#-d8isNrP!TDg6e(U`j9ZUPKde;MZg{y4|o>A!LAf%X$^YRrXfnDyfa z)Vl2(JT!qM4hn zJ^Y`pPiWTmRrhP;0T$q_T>%!;tHd?7Rhw=qlO;}cfTKV9H*sp>zwvw%YL^)=y9?!V)VCUrT-l9^t)2fv>Co*V{=3R0 zYOnJgXNP~A{p!9~NbDlG8M1>r4IW_Ek+<~mG$j7u7Q)nZ12wu^S#sL#4jy#I6L_rYx^KIoL^j^;fQq>ybg$Q$Vx#el3>ksZ7?h*ZnJOx3}8ml0ECih1=)ntb)re zQPv+j7ufdBmh&S*)~k85&(@`n^PiJUnBjqs3(!}O*4I(eSI5NH4(h8_>}xgbt8w6K z4)jx{^)r$5Q!?>0g!(BI`{@n)$sYLW0R5$C{k0_hB~1J^p#Gx8{;I?NLI?gzzyKcF z00qea7Lx#3XaGfVfYfjR-a&u_Fc5_{P*gJT$v9958hB6?$TJ)``74kG7}P=&L?IcJ zW*meE4GJs@LKzOS`4#kp9IQzbd>|3bX&gKm986dg+%gpWupgX;4BerI21-DujG#8b z(9S}r<`A@UAIgawl1v>!C=udm6!H)h;#L^4<1rZGv>!5s6lzZ$+9@7tV-#8$6lz%* znmib4wjb(=6lP2v<|ZCyU=-#Q6sB7kWsQltoVq>6Z?5H(6gP2?H@5CI$f|1p0< z`d=FCTR3w#_^KaWl1k+-^ z4{*e!QPHr?`QIy23Av@x{<2*;D6#|F`a59Je-x?zwp~=mc}gjTe348-C$hdkk2|K0 zwD{8hUZnCWWfFeL6_pU!DEiBG|GjTvR5Di$0Ri3T`kffJ{;}POmfGD=i|i&&&~|24 z3m@sfYOF$(0q8FzK8{Q$kQ@) zc(z<0%;d{7%MeizLu;MSv!*)R|FT_mJXo}bX%1)5xGMB-+x58n0c628B?MSc*l(R| zO?L~OT>4TM5W6GZ?QQviXiCVO@>kSSo%xyRb^_n1LEiXcF)yJ3Qdpr`LI3PqNCuO0 zKZl_s;s;Xwy>Fq^51AJUnqWgSKjH-by>DsB4#nIV&WjeqGox~3!%Q&nJAVK7zNHSi zAPy|T^F873eT$wH>fTN=vi0BlmMBhYFI9cy9w(!}_bs2DP>fiA}ruV_9F&Ck57 zIF~T^sI1}`X}G+m4(66u06dCaBW;~cizfl(NE}rQ{Lzac={s)2wE+zHe=nclN>9SE z6K1qBDV}F$MiT`rY>1|1D!hlbkeZ;!qgc?@oK8 zKCP;rDjNCxQ)H%^FLM$^r*`W_T-C{q$8aD(ge~Wc5j=d26>$@rBMKmZ33@`^q8Sn6 z7t3mRLP`Wg7G~(MV#FUTg0GP;L0Gb6mp$(ytS&%f3}em3BfY7t$zVk%s0O2;Ve5g= z3aW)Y=~SSqu}^3hlNu&gO1<+UVrQy1QlCld5K-RLs>T3p(Twnv1;OMH6N=gSV)~<) zHytuF>Y5_0dPgjSyn{7A?G!wLmYMI6{ zES*gPmyJif8_MTK2iDAq@qpwkWTh}=IR(WdnVd!RgAVr}($0Vpt>HOjfJl#mq1w?V zX@+y_pC9s8!7=X-KqAl!PIL2Ui-n`4!XCUuOD_p;YSVo9K-Rq-4j_}hV+N$b6Y|cE)4U3_`>khmDYD>*(7#if_4v#Pq zxKH|?iz=6{Lx;GWPa?}#251`WY1vj|RTVQ5-w56he&U;nPHoL6!!nW}tHX|B6DuIX z8inv-T*casQT}{|NC~T5#YOuU(5$J95HeiFM`{~Vh@uq9r76kA6(my+yA&$7T_u8# zsD4ODjq?xYCe}>sGb)!3sSX)&9<5C7I7&^(joDk~P^r@*)V#n#wRv)zSQuN$+gt6CoopmT${K3Tm z7NRqRlnqeT;f_Zs^K;zA-a{`D0Txd?zOv)P_loi3OV6ecDkqq}fe40c%tkF%FR&r4K0daH z9h6w6AIV5o{wS}LvqBG+PH!bYRv(NAqEhv?&0ox`KW?e9EfAN`Q~ezVPjG!i=}E3 zfA7ywf(lyCF)h4lD>7&>j@Ca!w@?WGE9ZX5*<8IWY(dvK02D-wezP+(aP!13Y zwRfC!je;cWO&qA^!2=c*O|pQeF=XvuN9cymm_T0?MflyPb<*iU>q?Qz2L4RvwpH0u{$vPwKQ;XydhPqokn1WFx z-h^GnrbH^zoLZ1 zdBSR2rk0f_33HMNK)zi(_-v&(%ngs^zo3YUh~{|l)QH{ytoisUl33>O2+rNDbyfS? zJfD1n*GD8{soV@u63~UMbY=gH%I*`akp_iL^_IUz1}{CrK2UIX2CZC&G`WEc+=s}-h->nU%Z6>FGpY02Y-qOKT}5; zrWQGz5`Uf)|A)_JoFJJ^+5lFNzX&Lhd>JfgO3z&qz}pfiO+YW;8ff^_|06-57*C)| zi8==;$R;k(!;lfn#Y-&lBi6m-%p&fb^M_e{udX_v#*ByDgU{EU;EzQ?Hdg^EB~+_L zzQIu02uDJ?VQOo%mA^FV^$Ce-(7>|_9p?yFjRF38YqND+qU9gCf zwS9<)%wgzDaB$>^6!G#WH6EXOYJqq8c6f^)8?HYe<^qZ0853OJj>fVGHd^CDX$0|s zUvt5*X0V=%gVS~>nw|BDWQ3z3SXmi3{t!O06HHP3Ryn|foEBWLWSdW?8eJkSO&7ZU z)&UF7?u$wk!GHn09ceh56Gs!0C8c%ryi7(4u7L?h>Y=(Ry! YZee&0}ytdB(+8m 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

      YJWt*9`92ZJuk+yRtDjg59p?}PnjYd$!g(SSs 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ŕbcEWPMx&~i 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꫖tW`M<}w5-1@9AOM16hqb+q#sqYH48RF4$pH!SIQ3XXt@!5t-8ia;6VXZ5YZ; z`})Y)PQ{b7TAN5~z zF=9G08VPq0ky{zeDv-Q^6>4WDb4*X3yOMFp@62i8>?oNVOc@aoH__s(f!QGkY-_mF z-+fEt4k}a|xnc-hcY#>3+Zw#Z_Nu8p&w8MydLJCrL%RF@sj^{rY?&YcHzi6!L2@{t zQpNu1D}%?7h~;f1xfAaWferZ&%d6zku)$;-Ds;hwKoxCM73iGd)3os*Wt1D^L+-jr zAr?Th01B$CHG>P-+s(I|dflg7dX1*0^A0l~+^y_E zKIM}CM4m)>H~$#qFpx!bRuNVXNt`omln0Fs4u4PO=kNsJu573ocXdCl2wWe8(?9t$ zydH3w{DbQKv{NsrZWZMCp{9t!fi-xuPgY-!y6bd_ZslwBH9}R`6u5ph z(fyd$o$?dA>U?T8O@^KMSY^ZjIY7q0+P>$0-LCvkV)WY^+9v^3#E~y+Vz#brF-I_x zK`)RQ< z(SiM?*J%&dXHuw}*!I8L;9|xu#)-re^21&&; zAsTv=@E@wP6=ETw{S`7K-8%FPGbFR1fWYaKy%~Cri;<_nz`+$nR)6`EZ6=~-W=Ky<1IptF_-0)0I{7(p`fn5HI7 zT?+vi*F%fNU*e7*l_O$!QC-7B*w`E149QgtU03?5H}Ekh;YCr#$KP#Qf5n^7 zlb`KHC&C$?iN znon~SdG|#jc2Ly5KuSq<)Wm;na5`uxqL&Rum!d-3+9K{94l~A+*#-XK_6Q`*8P6P!cL%;GX zB*GL1?7t9tv`4)ZXq=B{&Q{W4*P;V9W?t9fUCU=n`+~+EO0&|Yq(Yf6Z^ZK zDryT_#7r=$^%a%{t}NIL^XQ2c@KuJJimB*OYEKkKcmzjBvoE=n8ByylO;$z(QIxtK zEP0BvN?YTdT`u{sOu2nB+LwCaYq;#7wj2g) z%kLJs)YFluA_0sFY^)!1WhyhM@-)p^B{b65;-pgx$?%BgA|XP?`=52%*yok*#<)53 zdcBT^Wnur|Ta8gP(G9~QHS(YbYjP`mI4C{DqRz`e|tgPr;VbSMK zVXd?XoU6Z;uo&~D>(+DyDcxN4ui@ff(W;!=bq*09)U9`eaGw0ztz|6P8k^`kbr6ok zV6W0BPgtVmAU8n4XlNPYX7yK?nE8@S$BbAG=aEGVw5X+1_nDi;IKK z+-F7l{3k4O{B%u`E3ypiwE{*NTX7Ld3tcel@Ff3w{Ga=7jtGP|9!W;lZw%$sq>fG% z4&9%bHIZqbhYJ6BgtUYdyyO&RdGcMFgJhnwk;1P8;@aGd#LL2)z0a<5=UrWHp@C5b9U8!&lX^uW*mNJ5wWrP+xdgB-w-p>(Fwf>tMBU3YoDx$p`pYYm=hI_ zp1$v{QW};Ku{O1dku9bSx9fH9_6awe57&A`GP$Lor+a9? z>2uk+zhYezMXAP2;%Bbh9pR&%^6@@aQjch z($?4}N<#dhi)d?i+9I5!GT5&Zx9r^&%-B*8gayOx;XHv2kJ-4FVdXTgMXU&}pyG8Y z3g*hc?+Y6Z9%*YSuyV`KJPuMF4?u8@8uQk;Jsn(yXvQ&P-q^C8Zux@e-=fZsGS838 z&rjOVPmM4GqLnW&p6-XH4Rywi|B&u9Ui7!i=Yn=&Tn&>;=|56)qkn!IcNiO;F}XS4 zx5N4Lnu{UZE__UU!gi?U3qsH^i45v)!M+YOm$91~T_^~MGuX}q2m@ZHyL?$;ZGbQXOF%az4ZTaHN?n(VM zUoV-5`lMYXhlgMJ$v$3?t=~uOeoqZ|X>SWWbAvOe>Al3pR#X;xS35DdLap)jBSY^e zw<{OJ_uU7=ibK*tYON@r#!l`||Mi2K-3gxG&69c7AR0*!3j0S$xcyJB#8n)~%2(xD zO}sS!KIaUxvsF+sQNPU)?i2VJH?Fq5_;wi#rTu|Geon7kXC z*q!`AdgF?BU~HUdXdKzJCZqU#`u?qyq;m$v0bxOW#Dh#Mv4LJfmHrN`EHP@j$;dMA zFz)cvbd%;9ljcbQPM4EJZIf@KNtrI1175$e)lan3J2gp}(1NGf_?>j;xmCnht=kQQ zem&#JkBvS2%Lk8Ld_yqr8}OtE9AX_>Juh1r0R_MyjUqba!ZB4-3Zdc9&T%M_kRXA! z&oh)}5DpL&`(g(NM9}%68i(3EF;=6te@OiOl_3?kXqjA7UNnQObqh5P1XhE?D|819 zahuog)-=pmK=A8#wSNg^h#a`u$_Y%Ux=o-NW97DmH992uy#n3V za8t|nqjKXe z;Cn?ixLGNpKT0`R)8r<%I5@5S3qQ4rv0_AyZ^itNc3*y#)Mx5F%XjL~m8B=I-t`Ky zJ@O3d%{;>NXGA>SjP^;{C<}!Vg!0E6P4K+Xd0Uro(yN?I>B#e!x2CoA>n2a*Th^X^ zaD78(hZtl}HLmN`eB7JfEL`iQ$j-lb6;-{-;lIAWb1e3&U%1!mIQlj6YX}d7j@lUZTmhqFr(G-D7mdb<(w$2#FXgirB=ppD4XCc1lRE zB7MIktP<@q6CN;8W=4ApU2An+ZvMZGwE2_Rj1$UjWqg6lKM}l3A09siKAo1??{u5U z4!8x34bGx7pmrpgj1jA(_5eP-MW6?x;}Bl}G$N{YF5%>JNP>`n1rsp<){R%kTSox! zg1@>Yqyh&*=yr=D>;?n^KmUk&)wlpZm-$^Ft;uWp@|R%d?#1qC+EcFwnY){l&``MS&$*M}N-r~V8t)0+SO(T)? zOhKts7#l)HFGi*yP?Q^t0KlRf_A`%$EYi4`39rm}H-?&bH{ay;xRWzU_U<=lGMtD} z7i3DxOV46x5M~PZ2Ad312f}snXiksY3l)5hgd%@IRreiVZPSD_e_h*J2!DMS*#x`Vo)3d% z!zZnMgPNEB)N~t%Pr9Kkp9f!Zwc^7+9{o3>vdvmOjsut4&?f7pZNyrqOYJrR&t}`c zNq-dl`2A|^vuFp!%D;)$2XYrMkT?_Q#JxL!>_p1>3jP z)ID-fB|3)s_AAkHUC6x>Mr0Mjp2X@5($wbOL=kcF-guBdg`a zO+&JO??uhLRYbn>Wm=nnxrs@OFOq#ah4B}3zWO)hYXy`(?SVLao?9~5Blb23nW3|T z4`*9!H1g1nwxwiUF&nb0A;k@sEeJ>&mJRp5I}A=>|C8Jf8%;rjlR#0bX@L8Hl_xah zz)?p}6~V4Cu_5-CT@veO&C@WysazV3O1K0_H(wxTPmq`ce=;}do`SCI)%c%jRxj48 z(Kh8gv+YlR1v{y-gm3}u`2RA|U!P0oGdGEt>N2_VWCMp;`}nZ%X#8c!sej%%zLP}W zvi2ZXTFZQ%dTEJSQ3UYN-IUQdvz96wEwnjbH9Y=Sj>P+;$1>d78;>n-!*UjcFJt|~ z-wt>I*rsfn`E0}R8=5MEA)=fhckt)T-B8qg?$4$QqO%{MG$A49mSJbL{Kip>vGK>x z&Q-YeE)ussLh@D5wxbmkYNs?MUsMNGN`7iam+i1U3s)Kf0pQ-tm4HBeV+{wYew??ZuL3$)k?m z&LSoDQJJLyTnsV2ae*jd_3K3G6UdqmC;93t{DhPcaHStwQ3AL7Ou6LB1)9vKZ#}NVM^1~ZPdOoP500T+q5vkJ%ws*cWEpDz%L6rw_!(x>$? zcr*v4M$u!)=QQTwc5->%&soSTj6*+=pN&I=ZHkFaH5~g>cvUtsN92a zas+greVMO$Up3P#9z+AC?i$xpiaV7lpR4oDz-)E9zTgzm^7C-(q{g~P8#1^1c<_A) z&LN7n{7a!>TGRp0rZOW$A4Z?CC$qRxYPByUzXZC$T>em*9Z{$Nj!dSa1f4+0Y;>Q7 zgIQKTl5jp}crkoZgbcWYmWP=w*!c%|1I) z*oO*z%pg~27I<7gi7Crh)$%XK7X~A%u~Q_+?x25hrmJ2Gc;Q;Qgnh>AX9Hhq!Xkw% z{QI|9v)H(am$Ax)!X#+a{J73ikgA6LbA3%t$y`w0oq!`Fms^1TTCA#{8D9Po{xhVr ziz+$KcVCd&^=O52+O}mj!l2w*q%#MkiTl7=w<^gfkntILvGlViVoQh&_~VVe?>5!Z z-_D;{l_amWsb$$0C`VTOo`0whQC+)p`4_DC(UUEW5<*iHTX=z5rc>?svh4Sg3Gb6D z%mi*9!;Yb|hj5&{j9MxT+@AWx9yprJHn#A*KaJG$f=+t()h~jfu0dxOYPY`Q^x=9~ zY%63iRqc`Jfr;keTbaj#!$Q+2ILa+wI65nNo_{EX$5`o?h6%0H=0$!+E%j9N=Q0YW#ER?7MteunLo#TLM>2<%UyVXCv!gUo$a3BRhUV=+THJfu`1|pg z#jXzm!`n#ja6!Td!Fw8(CCYvkW(01ge1M|=YdrfItZvd_)q5QpEt~FP=5EGf8VOrk zIopph22fauW6+6e0DO~Ic9v^MbKcz843~i}`lo%aY&aPSro7%pe@!TyD<4s0 zzJ^LWxKHRXRQtLH`;-n@T4-VGR^eU0@W#wq3q zt|A$P3=cXMjlT{qRrY013N>AR$pVlWh;V1UONjYhX|;#9TF-wfvIG>p zHzx$l#Jt}~rWC}I;3^X4F!-tnCjG3#0u94PfLXD&u2hj6+c8R(WmQuKl`{j>dE3Z~ z2{Q&P4SCX#P%b3JitZJur8V%CDk`TI$7sYME1?ADxMhi1V2|G;xs3_@T_S#rN1crC zQ@D=&tr|VfW&5zAfwr|Qv*&vNBa)+k}fua z_vxJqxLvt*CCj4r_38tA5W(?ciIfi>~yYiCpBEkSZmKg+V{b# zA-kAt1Kf;!AZTM_B+tn!gvq-;^4z=PEj|zg{_LoVU2Z&BT!wg~VoA4&R54ca(oOd_ zO*b*3QNP)}kctk>BXcZ{p+saVCTK-da4!<3FXe5nQqI^}7$|YYb$zcu-;Hh4Oz+U3 zAi$B=H01f6bDBpZ&6f)u8;O-Kwc2lNk7c$E^R)V;V%accu^x}K9{VF~n;N6vD}!#G z$(49V_rIYns}dY(|N0Xi$Apjy%E_&$Vp#sZ3u}L9|Le#=tXHBO5J>*hk_7gzWK?rrZ_z5=Z#vx z)Nuh9%ZsVFF*W573zayORR)a@4kurL$U z)rsTucVqmlQk!iuSgN3K*Uo`&6OlEt1gBb~$r8$xti|pL?q*6z!5)QYG_^bJwid6w zG7{B z#SBSzHne^p&VwUkml_ECXtqNpf=={k+1!_XNqmbVGgn*`8L(ilqqpatzD>L!d)r9* z1${ASXm0Eod~ft@3jRBpfc&cvB>@XdbkwWuG)v#E!uwr?D`d zdK2B`A-8!Gz1<}}&m~=wkE@;!Lxc})i5l7I@QlPI(|R@6CNbleOLKo=rVmXFR!kXd z-0$A*%S&Cb_;VE2QLBwElKE`znUZy7*?+?e4Hkif9_Y?|J1d~Na+c;OpI zhq|J}RmR5O-51VVfjnQsyq?=anLp;~&Th#hH49+(uYh;Zp=aH!yw_rLp69uNJ-!Bk zig{6@2z||2VDhe5Q&MPEW8o7E#p_fEUOEbubv{6CEJiJpl#`F4me;<8s5jXQas1;I zs{rdCxvA6&MiZJMX0QsdLTSzhG)h$BbfQ!2NAu1Hf?r<4dBhMyaDUDC=C{1a&|;J~ zh6)AUMv*Y5~wBoUgB04b)XJPaXD5}nMwQ087&9HW| zh^O|~wFCSbQ&TS}wxe1fTbVGQ;YZ)eW5eM6AW4P78^+YJCI7s)HEiPc=JUS&<%6o? zluNZ#hN%DPJ)Tszz-v>#=Ci_*t8g>4hlk9EsYF~ zfS=t;sw=q6=Rpb=h>eGI!Hq$WIacG-Cgb;$tSR_k52FMT)}CP<$y$yP#6NYB=L#$9 zkJ8gh{_iykmlOye86wOF-n_$Tnpz;!J+;jdrlIbN)dO@ZsyB+(p(W#2ys&P(Hl&Jz zRIoy#a+8CNk($7dCr9u`sUOd}XnyAGT{EFv83r3|zxxI^g zg#`$>7@=E$vmG#X?pzdOr?VG&G0kD@* z)PHR{BI%DGm4BV6Tx)upwg$8^BiS1fVfD}Y2!J0NhWj*$TyCEY(Dw}dtx@3lHt@8E zDpF+Vxy+14#Xyg+>Dl%yVP3S#MAU^;B}cva<5|2BTo4rB~m>ZVw?O` z1u`wr`rY`!PuF7&I!B!p?NIyp`zT}TE6fH@g$2kUOC`Cx?%e+0tW{M57IOtN?l00; zArxZ_pm2*rs4#&6c+^nzxpVKi=2{yHiLhVs^9B@o>OAnyv?OgzkpbRTf;--nESY&< zV&On7SF3)&`y~iaI+=#kScAC-%T-7)8z(+v>KVbtZ z%V(Bk6g%=?n6~47wHRX$8PjGW$kvI9IkSnqFU6ncCE4D%;EKDjr&PK$70D?jU^wbEH~rr;h?HaVBF4YT)BvXEGdEY7qP)HUW$oy;~?$o6B3qlJftokf~SOf?)D^WNV_E)S(K-vNZ zX7SAUUwqCA2{>JDa$4@qe--rO>j3>iiz^tQQ6=~HAJaqaUY&^?VoJ}EA2j7Z(J6Ht ze0VQX=*J996bA8C@nZq0PD}BqaosBOPLlZ`xxQ$X1lSSa1YG4w#V5bL^lYZTfeciG zyw%ar9i}yLpB<*Raj%i!`X5UT@bHLs$T0S{2PmTtYx)0Cq_=5a7%po)(HW|W;l?dQkR7uniXIZVs#O!`+fBEB12|7lERN`% zkIMczoB#40i&01!z%wIn5O`9K~f{(B0O!pmmqZ>Tn7il zDUK>wUGeKkgVbZ>)CBmBfH73QL)A$JtbV{GDqq3@hi@XT2_F_ig`Bq?uU;nXDKQZN z#1}4hxum16mNCe!mrfb>1Jbj5bzSFcrwtbS)o_>NN^Ep9joHyq_(VJQi{`Vsta{jO z)^2TtYP~4ghdgg}p#GLgMORZf&icg=rMCIyu*m|GolC8w`PDdY!^YL5FoAlyp2&}l z>o0I}i1r<*tPy4tdWU4~wpKbLKiEN)j_8a8j&eZE-y+I;!rpW-NiCPi>W)bepl ztI|)4KL^TWE^JyScxaeL?JY z%?K`7xY-%(uGyXZV)giMwmwTj{!y8W|I@zhPrmKz!|;AU`G_U%f_}zPX+Ps-QaEjE zp;qc}i=33_n`hLz_cFibviyah{>DV0a&HLP^i$Lzjt#-F5(Rbpk8ttUo%2k#SeCj$ zD&QOrcPJsI=ew%#MQpYTct!q1mFJaB>^hFkV9^e4v^b@74qIs>X3)nGsBs^k-^`PN zFg}WM5VJeqO(s%>@X=*KV$_A$fdG|V8{zPXcVt+h8E?Fe-{2My3acOp>fl5g);X$l zj?}_U+U|n>kM>J5zY1f(XYm=W`)BFfN|&X(O0#?Os}mQf)-W}oe`q+b8zOp6zKA>E zXxCQFgqlAF!**VcQ+dKcD@(#d8bGD$L!&_OF@rnO$2n{3NGDC!pHkYtA2D<;j^`lg zP%3Hl-KTr75v2DkpAR~ zG}XOiyJ8-%NzAON#9QEd4yg)R@bvIt)fY zjiP!Co3H6L2rE%WEE2$>6|r>pU~uz;KeJ8~J3IOgNwCM)?PX0>!wo zYhEUmC8$=1fIoDEjmQM?!j_4EbPz+))P=FKX~`@?WoU4}%xK(}mxRI=*am<`Q3cr3 z`92xV8J~?k91*Np7#rnxzDZQu3NN_gMU$$U1{qGOTM_`3Y)XZz4CtZvTroaCBN8>< zr0YB(aXKR{EVWQa^@YtFQqPT+GoKXZ$}}3+m}nn7qy|t5UiF!|JYa^2gKWlc^|m$}JyP&h)ASJ} zP2wv8=zpZ@EE6e-283B7;z}usbw3xwjl*l7+tU>Glu?qrSRS~P5eQgyh~)eN7U?kO zHQ_#^1B&ChT)tWJA|9|R(h0EkW@0cL+P7^)p0UU@UuMtd_a6r9)Bi_hl_UZ+G6`{TT{M=M+si{`t5DU0E?$jQtpQN zt3;kAKhLDh+|A{)LN-Z41VdA@erm$xzlU|tH@U*GcsJD8b^4L;4`s2u;BwZb&6Xnr zFJL6ZwEkFWA&m;5Ej3}W(d{ohERZ^fJ9@x^ADnjf}~VSD@wbRt^w`RpTFe$7NpdYx0|C z!@s{?zX%k&ilYxzhZBSMcjQvyz(H?R-xkVq9;tCaI3VC8aC*{Ud{Vyuh^&s%K|e=@ z!5}@RxZRy2JJS}JHS(4QNNoBgIUNCx;?`&^1Vdu`;>WEXcSB);36;LZyuKy8A>3I8sM&oBiQu6b%JJtlaxTW)Io!H7lKD8vOxWqx z4nB3%QIzLvwYIHtPW*UQLL!9fK6L$aODMXA_K4YkeMOq;U#2hNCE5E0cc>bC7g^-$ zfCx@x+ukqQ_9jye$NhdmBOEK?x~~KXwcRb$xf4yasl^n>-+NAfB{&B$!qDb_U$#jK5 z`q4Thc!1Z)hV4-De<*eedp!(xn}}i(iu1V&hYBQ~TV+=+DxMv4#s$MNG{7?y9OyfA zg0zRS1)fW8_jAusvMLzeGvQ%jYjPw4ovFES+!=+}D>o-n16a%+dYl zIXM7-hrmuismGy*VXB*C&}^=ZWGPaP!q#ErfL;JWky!iWW3(0|p_=fJ8?0qT=LR`D zY+Or3*H$%(fSp04paE>(Pyuk0p0B);z0wHV1Dib+jt*<1W3^5Jpm5rDgl`3y??2Z) zh36zT#9f7BQ-7p0xNn&Wu!)&)xruanM5ZwAG@iayy4`kU-rC`85fP?Wc9)A^m^$>t zCF9nJ&72xsY%cN4A=bXY@LUa}Oq-YVj-b`sEGz8PG}mIf^Uvh21(bGJdf3Hn^nIzc z>>TI)Z{_K3o=ODxNsiizzeqEZ=tQrV)xC$`8O(r3PjZ*y9t zU*K+!X@#^-OQ*9*FWc_yMxIpKNsm!))?Ul>MWBuZwzLwZd&8HnQeph$(xeEnZR_Qm z6Y28n^O=_Cj5uUMHql^qI1N`!=$NDlMr_0yPA^tEHvRQR>7@0@a_l@=Poq4LQz0x> z43qd5Q25=ET!uv~oI|BD-tE;RL#4z&KgFLM2~-ZcVzCrUDpX*0vwMu3o{|W*{hMHa z111-fB`0(`!WCZ$5m>TXPEBN|J%po)jmA+_$P>ElTfC zPthS+ywbtj4zdMb9JW>28DiNglM0xwRG)gO*hGRY59C1}hyHuc3-;{G^=#pXDeh!y zZ)lp1(xh<$3>zZIp+qHY&Oo&=0z(?bOfbE&9Z=^KI$vh)o=V1W5qfh%2KHun4cD#< zw-oX|oxbYr*0P?$HG1^6V0ahT!LqKTjK*Y3(t=u<|Rh@02#)#!yas_l{ogQ;HZ zgQ)`Y-Su9GaMmBH@yb;iSmQJbh7oHo_KDyYso6s0_C@Iqt@UaxKeQU?{!IBjX05DZ z&O-Ne4g!_hE2gS3THQ0^4aq14dtHP+5jDX;)2P9)GU~tu_v|6?FyHF2~y*OVRXm>gxXN zjJ!`5^A;zTw#Qk2=-LezVcOpX0Iy2PSBgJy?XH7vpjg8Vit$kqs zjt~y;&4m+{S;rw?P_R|8&OXT=D3aWEKpFSok0AD!ZQg({E)16(_onS~lywu$L7W5F zMAhYty%BV=L9gMOPWfevGD{fq1d)$+8iXTSYkUrL@IVSCd_zP|qT z4i8FcT=W*JGnDjq=o30PWpEf{XBf-xFm_n@%TZg-*6^@aUKG>X!^^=(21~5xkfdP6QKCIP z_+C$Q%k+eHK_R?unzxunzu3>6{n#y<0TsM^K*47uLbDG}n>`Hwcjg~oWne^Zmn#-4 zq-R4Bc%gl<_gs%VDZD`fToUKB@_Inr@zlX39Y7kyp^)Ub?W#*rNhOH;=NloT&W?4$ zpJebfPTHqEz>ak(E+*3%s9$7FUbrpKMt(tJdjV-#EMUu++C6NH0%~wb-oiBUY;E#N zxF7pd_^PqFbFgnLce9Ul#MrzX-nXXfuRgb0?V=DQJ0t`C!hJp?FD@~xe+HFQEBT$J zYG;TqzG5=tSgiY94bG9_C}~0}%}5dyUZkh-^xuJKA-Zzkw398xjeT-)9d(2k1pqYsbpLEmPWm~= zAJwh*`F?h)bE|v^9BxoV=Ad*fJ#?s5NP=YN6)GT{ZiMQU18k#}+6udRWWUigKIc)M z(x^K0Rep{lJ(zzgp29Yaf{J+0y6c(JuLMeQdUZ;`Z*tw)ZT{(TQfypHGFykKgIXZf zH%sTYgHVMeuj_4jhri;bS8kGMd>3eGZwyWHW4D@(3+?wWY}T{dGbTJ)r7`w%Vsn4E z#5f$zyVPlCxFw#I%~mk9?K4zln($<6Nib?KzRk03zuVA_Z z?%cKh7;VrWP|Qgw+LMq5ZWvagj35BoD2LN4`Z9AXXWErIJku^D z*!BY7M5u#%zJ4W#CN@jM1+} z0^iuG&UE&sN(~n+aJlP4iBFy(zm`8y%k{yQcF5!(@x%^$srK-T z7N4WxeFuxYH0bn7k)DhENwyu8PmWJwzPDy-h|ts&tiNg|B2hH}20O%!4kAo)SHB7- zED@&{KayW&>@INEv(+QFq%S6DPcV_Z#$BBOUq4nigi%q^2dF{y4=&H)38c3%bR;M$g)sp zoDrK8UA{DRt(V+2 zWRR_Vn{*vBS1iu$9dfyoXbzk#@k0JLXiq;5eVt@Wf_}Y@&y?E^&Cjg15T_(MMhgS? z`GsD|sdABD&^FS1ie@g*_py_`6K|@lY+bfiR#fQ?wEcpG9a<><3c&C`M%rK`3A6NT zLg8XeEDgVDPmFNMNCN0t$UUJ*=~xO_-7`Lo&kzLgF&b8Tq;<;}&jw7yGwziq!a40G zR%mFP95lt$Hqv=jDoB_j)OI0Qh1W!b8CqDK?A;>Ab12P^(zI$#{4e0HxY>1_ts07nDE9#CRu{~Xq0%dv78j3 zH4x@%#Al_iOflI3HNg>T_8y0~>D@_;ev<0>eYroG`#ecbR<%Kmwd`)_#*6PKZJ+HE zoI>98HJuu!(rbDH2lJhDcc^T@A{F8%QW^PjWAG7(qGFm$wjliDQ1n7tGsOzzDEu>% z$=H~17ZGwvyBlLIi&B%`+<;rfi%hH7B}i-quW)9P3`V~y1K9(gytAevel5;@5QQ+> z#|1d6vf3LkT8BwQ(W;*qC^H6N=$HWh3%bhM))FdZ85+LrGx9#6zl>O3o$V|Kx>ER4 zu()+GvH&z{*;xRuDvPKA#z@H*ETA>u5$j92^vP%6`(x}%Q?=Aw$}%%0$JC#e4UWPE z2WYYrOnGr5wadF5D4gH0;^tJ9o9HUh;xo2U)t2AUIM;N(y)npfE$v#$CtU5ShQFIO z$%K#JNi7EqaIEv>%^()kWlrToT-w(>Cm%gJwghPw(D-yt8`g zu(usyg{#OSJNhkP*_=o0N6xi0R8He@J|kR!FiA z=K#I7PMzRGH42o_N^Yj(vAi&Q4_fP-l@3}Xxb$pW4>?BCS^8%U_ly&dlNM+NH#uTV zzo>R}{MgR7=-K?_)zI;)DoOic*uezXcDw-c9R=?#2`?-J6c^2@y(O5}0vu)?k z`^3JXO?5W6{z>ZJ_L*&GSa0KpKEO-qpR6@10=Ykej<82N=NPAbayVIzCI|*8BuKdc zkW{z`-Uk>46?ii+S6evuj6WVI)rmEqX-OyqGbm#7&n4YBDyKgNe^Gbvi8sX!%Y}sk z4U=?fELn~F_h)Q~yjS#nZ~J+kxTbizm9SriFv!uNz2ogkO!;)gXaSE?-;^4v6!iVC z@BvVEH8~%3kUMP-4_B;&Qc5BoX?V0e5fyoB_8NeoSVm4NlFZ>H5nY7?^sx3I3;;n< zVJmi7>3W;|JEaBe&G$z*Uql4(mhftKiOOQapVo*Go^8t$0w~6njKdWoS{J~JGXqBW zt4Wy!jiviD)k&sjEC7ITygi>EL&ZvN)5bneYcOvdE=@$iN^t`_)eP}9HW3Ly8}z&T zvHB)4>-VYEPdmq?8E5X_ruD*rfD3lI*T%pz)Bp0T)Jv(M%kV=yc40Ay>%AvUzHYp4 zOvJq~`TJ0$!V`3~w#0s@dv+R|$gc|Lx`7;HC>_^$IHqdj$D@4oGaZY5Zs}BXYS_7Z zmAb-VK}O{jd21NUS!QzfXc3Q&Cq)`OWH%3bj9VD2K39)+>39<2<@3lJXM!dqXq$=T z8c(f8EZEL=gpqqqBP*nXczSyxf0o$`@F#4`ml~uaxSP|tG>ivhjE`<)JZ`8WYW46R z!W=7=n{-l5+X%kjrw|R!DB8TUG2X#VEW@Z#8UWhTphiU|KsYN0?aA}0w=?e`q+Cv_ zYXc1_bG4-c9`USUrs^1M>WkPKE>H_vd~PhVD_tw~w!bVqbR-tx*LI^yQD+u?vhkM8bnY8%sJoQ`&{gE{(<*u zJ?r*l{!AIS6UgO|+SC3~^Lf=kNtC1h!FT}-mMm2oWjtxW*fWg}qt@`_V#tIAETBHQM$p3r>B-sW>zeX>g`3(#ua zkt`uL+D9GYSTIt47n7H4#R*T2mc@hT90b1G3BTqSX$YQo4ELKfp?)Dg8@!<9RNsB2 zeJXPqyeMbSU5X(-Qy>aiLJD-CpQN0z2YNIzM3>P1JRTI}2wBN)*2BbUT2w5WEG%Mo z71yZEIQ}-CM<@>aSLs>19{9GX9(JOF8TijlOe-5QRXdx!Wmn#-XUk!=r^l!!oy&)) z#))s-)O;6Fu|LP+%eSf97dUgxp|1oZEN&vH8-ebhLU#OL&s|sm<5`SPm(QYcD9_H~ z@acTDERXlLbJMeF^9-j0lYS^v4&in|oP%cyb^V4YZLWLyKe=;nM1Rc1}PIkDqI zCt;re>6#hbN<|J0c7!FDZzx#0$B;)m`})Zg3!nZSRGTS64fWwp5#bd|QNK)FrU;pU zgi)`)oIv`pdX@0Grw9ue0q+lQ3@Z_hVwG51;fEB7sm3=A#%U+9wt~Czr8Xa$GM|b5 z{m5q3#^F~wnfH8|$us>UMdfAlvwQ1Aud;8r$PL$0y2@7SH}3TbQw}pmh&%I z5Tz(7jks3q-~+Ksc_qmJ3<*_Jt+@f7hrUltCwa;PCEf{!)2AI@7p&}EZZDGOv&R{I zoo#r0?5R)_a(Y0k4HiPf0(yKIdh~hleR&^^DdeyKmIu&*Q!=Y@`hVnHFVv_TZ#e+~ zhxdNgZoUYGE*|&1XbKSWD%(T|t?Ir;$#3s=K?ZrMMgTZK$G>IDLj6g>#v+)6vV5c>J36G5JYm|0#Ra$FZ+sBR zzGWfv#XEpro!|fpcN($u}T*b>>!9knoY=TLTQfIUHCWZR!P4GLL#nS@ZIi zMh&=35f9Me$k0a!gAMVh!VG|VxCVxB&>KmxSEg2gF4 zHF+7{L#J`72eM23`HCs>f&J7Z<_u*2s7Stn=dgD7bZ$9FTM#_F!a4h$&rmGkH!7Jp z1N8NV)MGt`;Ae0E0MBG!fNVJ3_$D0)b5xC|y?O2E&xIF__dGPpn%0i+YbzI!pFEOI|~K1c%%bk5-ezN+BWp znG$P$b=GHCRGCwR6^9>FhB+Oj|C_FC=Im@s0*vrAN4E32(g2=oavWJel%)^+b-QXV zS)0Un^4C4%Ilj|^ngCz}4)t{gIhvJC@Ajo$V1RvDgmExaJRFZ3>PPNnDI>!qqRKV2j)f|80ETlCS`omZ$+9&ug*PZ}_%rkcMS1fvH40ZnDU7 zNno_fRka(5V$tXE!h*UY#Y!-Ol9A*#!uGaTP{%|R`Tb5a)cdba0!=qu}T$JD9_d6zj5~O*C@@y z2IfYk|Dcu@FQ@luO)6^x1{tY=4)jumFoo6a^wFp?k^@{6jXJ5X_s@+Wr;JybXlhe@ z2l0Gid@??T2`@bTw2z`Xne57*@jgEi$}`JxLvEOf+sdU)*}C+3ELa&%P4I3EP?Q}{ zy;_0r*5W7^ya2eV8V$WUxGXLY{2mxK3Wy6vQ{0av#|)|C;nK_^99KKbXVE}|8!Crr zM=5=WWCuPUa-D6?H15P|5o};X6oJnW&5Q(98(xCYOUf=*5I%X(Ee(CvW~rD1RVRqo z^43@01(au7OX^tL7{uasqpk-nGE27wNhB;`NyO|&&5v^?7FHM4Gy76e9(J?du2l*h zvez#g4l2u6udtZs^KiQGJi;)QAreyC8mX`&qrZ>#Q|IuJ@SUiUSsU)%TMCm~ z8uRi%=y(%42b>OOp$a9c5p1SntzH^ya9F1LUcdl=;FC0HK*!bbI^R4oB0Z04;h&}b z)DzzjYmqht5-(>^%b@Q;!i~XD5DUjE2(M@y>XohUuPTbdda}@OygozJK`?5sZ}y69 zucEMZv~D^QSwYb+F`PI*!PQt!0z_SLXhkkog61;r=9^3*3w-S;Qxf3{Idm%+$38qW zRc*WpAq39$_qNGwfDlp5p*wr~(45j_iMHuK>ADj7MOA$S{9ObrU(>!;eMTXq;u1i{ z!cCgk&|4ZhDDpWt9vOmb>>MmV0X&`Wj~Ynl7{IF8kVe``>EyqwYNteET~a z`k&b8!fK*5t3uvcX1iv|CUXps9=P;33=rxY6snRRagmunH^nBREr1S^!Ujpv?yda; z4GnJNhU9U-Ne|Q8X!QrQKlHx{cy}k2JN?^u%kfoXu4a|iT1``Zs z_Y*AMknRLw$S=Fi;{AtArah9N79$rPkpV*wSwk$R8nhjQ_x%H@x4>co0AjzO;k%89 zT@P*}nf02R6|SnOX$y~)w|0CH2czm;zZ=)p2yJ7(4i->QQ_O8_kb+Dw{-*OO`px5m zJf+B(aLpjGhieQ$PF&qsztia6CGBIKv6MD>-0ZNY(&)vkIHyO81)mT1?)Xc_amV7P zA^U`pfO>7%+cv5~Xok=Rm|UrGjP!13zNkG=#&&pS=nZ?^lj5h*$zx7@;~p2)0C>ps z0eQ1RAjdFn?G5SGk~KeSWZVJu)w0Ed+nt=nX4`%`k2v14a{7h#R587&|1YWo@nR?p z$VK2s+#c1T5$5rV*uv;`ESQlz!fKLMc^ES}$z(E<;NJMX&3|$@o+CqO9zs5SSy(SV zS~*8H$C$gIJ#Q8`Fg#Zmh_YzgZy`imh+vJG%TR1FXde4M2g4T7h}lizF28ge<)MXJ zzQym1S=ZW&4+ElDSpP4>!u`J(7C7Wh4CsF`EPOrAEX4``&9G#kGgJS6hGjO7@UJA# zSq<4-rjpHg<_}Gi#%N^Fw>ex}^*YlC0Oj(QTG~=ci<1CjJAqrH0w6|{Y2<qU#surC(5oM>)ya|a>NFU^h3um{ zstJr_n!bIGUNs^sRwa7tG?T;2hF``bIxL5-=^QEU`#x0cPNW$k7P5cUE8&0nalXI% z>!%?E!XwMIaY(^ARx2B4ZoB?@V>sGESp;(Ur*YE`}S|W1UHkL>4Ov zdaCyzt{255a>fYw;Sg~bkSCI^`!jkDs#I#@cSH8(Y1j=XJi5_mbs}c|IksAW^0J+d zNWt#1wE@oY!7Mi+wnFT)cRo`~oOQ+=>4|_ln69&c?kdnt7<+2VDHCfc&Q0nUjOcmJ zqrN3WlJfn2V$$?&g_CD`)>i5&A2vh~o4O-Gtdk(XQG|u(^f=Epj{79vp?(Y%tVt5! zR6q>-oT3nFl|=}so#IYlFAosm1jJg|&x`d?t<1k5X2F^l3)B>z6;nR;(=n*95;3fF zJ}%g04k2}L5%HOM4(2%w_*o}L_)_XAAi#>vwz%fxxd}yIHbxz8Ta(`d=D)540mxQ+ z*r3g50H9H!w5MV#=DLRi{QLsspw^CapsAtQ<9DXkJf->CGj$xFcc~hr;zj{Wm}5<< z^{8&R?z`%`yjFK6jae#C8*s-J^Tvj&JeU7ru<#z>&jaQ;MrwLJ4;8+{9U{KW0gXH) zvZZq$+u{w4`j6<3G5;ZTP!|7rEuF`GSw;jHCzQKdpWHp$5du_XXE8!1h^v=d@xl$B z2mpFMFC_lZCQ@kY2N{iZ&VY|}-vS=>^;XjH-oRU4gD-WLvHADzR!u^s(*1po`No!J~q|D)CKkESwyYdDnpv&{UM^auX63?)~2Y34Qj!_Me2bP%H-^J?)1 z-=zwPJAv;fMaqm+uie%#TjC1Z$sPgOF;=QH_0Md$*zqtyR;p(8&p$UDk-vT{Alvs> zrMLA7HCkC23Zj%aKMr$~cs&UKm;rgsV4yf+1ID7wF}@k!_>ZnPOqXX&0PW3Gon&mL zFA94$L(8P*t%^2-L2AM>Sfs|-Wr4Lp@nY1jV11M#{grJj7rq^?Ypox}R?uYe&1S#; z)z=&!z?h%_S|ggvpLW7-D#-;luX@)^_D~xyElP(9S!1JAYK-T4ah@6i_vaWlRBfvU z#_Iv182g7_%7oME6=fUJq02Y{eRY`RkIRS5GP5Y5Ph>j6^mk<-9TzQp--)>EbJ7M$ zHh=+H((`&=(jBnc@5WXbfD4-uCu56QFriQKtflB%8XK z;w%UV*ltthJ-Kv(2`y!M1YrI zr(7OROJ*rPNl#cXGR*V86V(pNOG0ku^845nJ~(wOMiT_s&9X6_hAoiTK3pe()xxMe#$S z^q@tywR`7RwR_DM1?6e)eDHVyxl2T^2S$fL)J~BPzdrr_l{b7t;e$NQ|Af!B{vH(V z6HC`$%;*S!|Gb#t*Ooz zH_K4AKgM@4d*kOGrw=;`|5_DQ`ObHPrFVs?1G_{9ulpzomx;}s^Jka7^A5?b-iiL;u ztANIx!Hp22_mk8$#-K*QDC}rp92ha`LxdX*%v}d38H2+V2tHGS%DX}R3Pj6mI@J>3 z6i7&F6jdOAaMkBYKY&n<3mmu)O7fA$@db9Y64~GY%ODh%X5ie_2u7n&Tr@CNA^LlF zoJSDFa2~k9R^q}hP~`{dAw&~?L;3+8PkV>^&(P@VCUl~MvvHM_P$@Ku3pFxE4PpoX z!r-7%M)iY5HSa5;BMjqJs5GBuCw#s$d<6>K1~ zq)Gn}P|r-X2PN}?T-F{1Zlly`6HVFJ%+{?V8;pL?qqT}`yN|b!kkBMf;BrROPb^v29NcPwi ztmk5WkY~zuE*ktp&!!@8*(DA~h;U(_`0OFOr=SSWj=&cQ9*k!eQ{zy3ZoAW(b0(Po z8I|x#l9Qg2h+->;VA%fajgbn~lR0z4mhOblejpxpL!1PjA8cT5Oh;Hwjlvh(;N1c> zU$~n0OFU3;zE!6-Lt6pvEde~pMl3i6qE`^?_3Nx&BdLM7`6}yPGGl$6$d^?33!zKygAx#*{BZL8OCCk|pd2WNs zjWab3&@eh2pa}qw1p>S4>YK|Y}4z3!{9htKdkgXc& ze7H;62_TyR$vz0`I{y&ufI#(XbzO2q2S4lHAjJY(iJBBh;hTga2TG5Xdb*>;{~VHN zh2Z_$4O~U9h*k8P1!*#e+MRI`A3=aCLGT6!{$je-oA21@8I_?39;p~rfG=1}0MAhP zM~ZkAt|SyJgJ)XOBd>&Kq~`cS)A%i&KpFAVXft7z(%8>t%oTC!1P$CpJ-0N@ zlz9Sr0Kg&Kl4jd|i3-?4Wx43&f%Na4RJH7?av$on9PG5F`Oy2^$%>5Avwp{dz|?73 z%zB;5vn2qymE%wq+P@FAVL!Dw>C8Jf24Ak*BuWoNesD?L5I9`&$K*Qy+i=!|+XAWo zQ!c%Q@4Wzdu2s2%;y`;oYS&Fm??=oDn9am(z2W62_jkWe{4-VG?OrOon_5Zca?Op~ ze*uG>v<4pg1Com>?MHCacRZkhe!IsG`uL7CGZtJl?z6dmg|oi4)k7%^WWRYmhVc7b zCx$?I?o`Q6{uIMMe-E2W1i(x=@}1rtS-OyLxP+*>oV@nl2zBMH9#nc5q3#+uwREk_ z9VvDi;n^L0(=~Yc+eOr4M4r(b5;mqGF|2k!#KP(PtIou+En8 z>re6p@bzm=^yLyy@SRQ**35wT#<>HXc-1^IWM(_&CjA+`MHtDViA~e^-aT*hPrZUl zaK3ymL)J?ipz`6>q}A-)T%3UhdHVpFj_GWE@{Hx~+~%LaU2d)JX|nNMvLoubEt!QQ z4`<&SP-495=_v4#hN!_Oh64sHQ3(BOx^N%1I64b#vn3elUc`oh`r{W|I>>hu7#_ox zKyRw~2?2w7;N2eb`GO^K*=1KAf@VPc4=Zv!on^+oWgR+Tq8d1PX)!K|oWm%Q`OON? z-#{NgO>$k(yKeHQWLg-^%V6H{RY}iR!@xysH1J6ZdEc?t0)%L4Rd>DjT!0|b(UuiN}x@2XjBC{y(wT}l%KUHw_*@SU~Y+wf|F z6H^iS{iTSd2=h-Nc;F@H$yxT^`w+pe%JTXp^7}jl4Z`0bHGBM!IJo(Fb!>T#3~P#T zJ!d-EdMj6l14m+xQ-3mVZ>xlfW9)vDk!8Eodb|1yIh*z-%ko6c-gdJmdG?=a1)Z%H z>z%GI^RMQ%xQDm9_jcaNZokA?XS*GHZ@oK_vNapFJ2SXDx3|0ScXx?t5BO@~PtC$@ z9Kjyf-uB=g7`^xhLtL{(B0)aBcVzw1TvTmPLhaY?`pMqMW9t{sw7{2$g=_0iUr1K! zz^~527J7W=@Be=4CaJkUU3FLf1c=yQ99+eTjvR7c0{z<`+>`q@vQ~PsknjOML3lv_ zZ`<6Hpxe0d{R3!m;DG(#)~{q$wl@dDIS0^>howv({P%_h=Hy9zLq?}Fa;qv3G{1#o3f{Nsp3&S1d=Dv)gjT?V^WJ>U;rWG zt8Fz8uTOm+7I`tXp_wny= z80upmkbZR^eN_?_SMKv3uf87VmcU9Kyb{|cX#PZP6IrW7kh%}N9m_w|C5j}~?Y{{R zTq2~^swEt@FIqUq{Ecg+B8r66@L`=7N)U@khQCWs6o1tIoqCFG7hc$%k26d#Vtcbx z`SmyRIdKMPEuDnoEAh8-(Ap9Sg&xUyknq-$L`6Eu#{MmX-Yr`TxT#h|&FIPe3dlvJ zRog6S3xg|0%wsBkpfmfQj&YZyb)@6~1y6vIpPp1Okc<%!P@?o>6y3FL_>iUJ=5NgfMAFzj^x3Z!et-+n|(mHJdsY6J-C>w=JXj9>t{1sje#C))rwdS}dxeXD0LG<> zK_!q~MKy;Bn+D{~5a3BRny!z%=knJ0DDPd?S!Qc{!V+wcy zQ$Z|urvpdnTnJjDqfFFk3Hxu5!!b#podk9*ZB>TjR6NsXP6FFf0)A!yA2o&u%a8*=dO| z;ON&O6u6(--+!G=_Aj8@lPiXpYF=^DD<@MDs#B`^#^Q(DMw9jXI3~;c;pjBXOW6yn zAX`tqpHQ`t8Z?#yejdv4n-VKeE1~DVg=RA%SkVmX@ zO(Z0K?s-svB%csI4r4l6`a+)*4G7d1g2RB&4!F`26;TYk?91LSWNHNM>`+<3-jvG2 zFrl$@4J5aAo*gk(*;GMdKSBD7WJYqs%7|iJi5UDs+$c+kz88yB3A(!IWenD(=FL8M zkq-b5CZw-fnROb}-nQf&lEdL^9CpPo<`C|!&e2jpVmC~ZN$t^1rG?~U@yP)c(c?@C zLc4f-J%p@k1#m@QzD4ATw&;uShvV)Sk(d;hbTfm5ajIOx5!|R4UVZ{{MBFl7l$l;a z8v$b#4&*S#i6@x?5jNZdv3FuG=-?2Ia7nWzzNns62J~>G@&L*>8f443sae_qwhj&2 zH!A80ecAdW8C@?s*xF-gJCtBjV#-{pb8Fo57^W3Ud*Ue7;<#T~A)q^IKreA2KC9G_ zxtdzk2d93|?oV<36?-NYKy2rf2iPpWA98Lauuy&O#0n zpUD3@X!#WJh*)bW>41{kRb}s=*1V7S{gp=JJCgiKfy9=ZRoc50l^pf%BU?&SsJp)yC;a*8*y!fmNWhMp-c-e36zNxZs@ zaFq|sK2ACF<)bX)HXL;{Tk#~EmhA%1Fa2-_{gmi=v82gLX5Lt(@}IonT&vcY7orva z%DKkHbQfX_I`;9~YE{=f{gUmKtBxp9nz-#kS>0of0^ZZ=&)=o9pp@+%G|y(^P(Jx1 zqSY#?T!Xgct1Pe99RHhPDVfM!$8?;Cwe{+Fynk%Q#sAVrHdia2;+?;zj!jU5^VorKTr_HsTwK`)WnNrLboV#(Y>mRMhbvN*z`;@q!w|h%C8j>j z_%yx_wBp`5eI*=RzF_pkJtsq9wKrahQt^%ac&+O5dZTyu>n-hVI<6jUjQuQbx`zDf z)Xju|aSlp=Aip|B%bwm)LKOE&-Z&pKpBtDXpQ=WRq~1zGDi$qF2@u2kLhsS1&&S8o zQYCir!cp3CI|7%q$_#JBB!dvqq}Uvv*~l;fHf-NO6Pt2@9G+UnDal|}=U7iMy~NJ? z%*WmcC{to`D%>c!Fao;@qTuH@aPF(<&dqf%rOVc>?XC}lUyVUkM{WkPe^{s*Y+Dj7 zey!v$bhJ(LGaD8MA#Sd3kq7h_q^(!JWex5L~0XtGQW%4?8 zf)Oj04@2$Qy%|h5x@knVfDWUY0QK8v+$-vzY$=}y- zwhC+a*8GWsJ`W%Iom!>hlS(^fzHbb*O6e0I0I1cNiNTSrr=#9fcZx~UH%UdJ&m`Qa z5>_c#QAVgp;3&td%sX!aDO$`^-Bf*^dFy15XOWkL-BzJ!RTxEj`0khAC`-Fw+@!^L zl}VIq6kXBb0eujghd2ttKC_hiZEb+cNwGkv(9RZTpJ4wcy{=03izH#PEiM~tz5Rh@ zxXyijmA+y#$-ME|uMif0zG~(t<@iO|0HP}NsOs{J@tfwwRd%G}bs@|%;-M&^a3^I? zm75D=YJx@RYo_Q-{tw9+)cMiO=$HaaZWuZSd-5`OcaL0Z)rt3z=?kdfy^7qoUsd3+ zc6%P^$MCX{U_=l z2;n5k`AJf~AX)+(JQ?o^oXz`qM>HISizhGJ1NBd9!Qy1wdnYFe`hM3v`4@IwtmG4c zS^CcYYmnMsKJ4(5&X3AdTQUvG?=Kcg9v3Ll3XrSHk{%=A(0!EfdmhVL7LKplcxKu&k4ztDzOKH04s|yx+k1aZw z!NVQJ15!*!;&-GN^+;3k*5-%wBt&t4`z?=Vtxu(INwDC84GkgTBFM7VqIy9bW!P*# z;?oE&NEsxnj;EoXjVVVQ6w+O_$F#CGwA9Byr-r5Svwrb{5Z_UMc6g;~TcMEpkctMW zC|*Q9wk!%Er7j|NBXqDSu*f<@d89bQz=z}#QWg@J6c#|W^LXzxTT@8X_YGm7QFVmM zsJRio&gZDI6<$)AVM$3?d3znjSab1(lFklqNg|?97$$i&qP*4z4HA3voLl*43$>OI zmk)xc45zZ96O~x^Uu)g!T=_3!Bs@R{1`ew~%eLN|gH%jHKAiE?)&<^j_O9@yI zBh06%{E!>b(|o0=q=GxqnDq?#h%kd7!|0SKm2eQXF^opd))n=Lpk@kplnlHT*Rr)C z6h%rbE_Rb5ITTYg%hmjC^yv;4n0O*UbRY}VhENwiSITh69-Cq1@?I6AQW9`2ZbbIU zr{uG-BWr1W$I%x`ulofp8Wn2U6fWu{UjhzRdO$|O;EKa}2KDCkC`TkB_H>XgcG zq=HmG|58Cn;vTwzc$V-4c7&~iM3I0lv89xSnA$~hu6RE_b{Tc#jY5T6SNxrZfjt?G zISaJ*t$eGjQXS4pRGpsHL_ngj&h9X>wO-o_C1cysVAX+t$+lG_t@&Aq_fH#w@!6yz zN>O1%Fl$hq7i6R!?^QNhik#iH$TonBCGes4G$n(S$t3bSvDi?ljWJdtpz(4Z2TRMP?LEK;(!X_v)$r)|Bk1G!mSyvyyvT8>HihJB{51sHnMaXWVu@N6bP zYE%j;X^Y(;D2M%x-SbfTgc9;hlX1?sX2`J2L~|}Cs4GyC_E=PJOSt+YMfRy(DWp#) z)NoPBKn~@y7%K97r${fh7Ln$j`Tb7sT|4xWIQzX}Rp02si=9$r#e$hITb|4kvJA&O zeHc@@RFOCcmLa?ESo~GouWqm?bFma(yQmVf*gm^RsIvU7j{}Qo$rO74e|`a&Qk4_{ zA9^c|lOoB#GD~@^Z>>4-Xr(8^!)jkI*&HyyAoZN06AdPzU%gu9e8Yj6o@J8FSmK4_ zl(X_Qfq1{j@G(gpAXWtbR{z9WA(owqFsc@&TE&Pt8YV5Rys%#u&slxmgyP}@N&f|L zrho!xN@Q>3rSOcp6A)5bcwmN9c{76NvoyTv@3$)ZAJR#bJZfc+-gAtiB>uKZ6R+tw zGOQ$1YSK~AYRAG{hSiic^Jc`9WhnXYnu`xdGptD1h!u3JjKjJ4vUyN~9x!6242Q;H z;hy2fi~81YBwQd~-m*#_5HE*hPs|OBNfgAj#N+YSv)#z60@ z6`Zo(UVv5273-|d&X9%UhsX@v8tf=F+O`<=b~-+s$#$MMJgw6fs^f)?LYo4Suj;7$ zl|*p`MU_`E8Kc9lAd_QJj61LY)hJO`H)h?>L@tbLHFMk|yCJ!AvtwoLHPu#F0z#1= zCEe2kYfX7AV?0?etijlNF^dgo#n!FF8827M+s3KvHx;Wyh~NrJ^lXj4M4bzh#`!cM zzo~T1n23(Hmd`Y&k|P6?5U-j#xJ7wmaEGlM>yqoY#qzoP2zP$aZ?!}F*oo+N&iJ*U z+3I0id9on3))+=UM8uaZYbAmFZCHLG_d9-&vKGjKY!`1;GhvepBaJHt86E6&?>IjCr$yrkD!;m!F#w+0bWs-~u)|4=n zwk^Jn(C`@g4ohJxA(q`vy@5#~ml>DmC~0*KYjE86AHwQNJqM^=I+l9gv0C~0j?NM8 z#Pv2|>9_HFZ3j7XJ4UOYschZJX|IcfV^)6wy@2#8P z4XSO)f^^L~40~pB=XAv~$!4~MY&^D~HjFS*)Gi1&ZR^x*@4YD2tSz~U4cL#v+BjH) z%p1eSR3%veLr6&oa(846d@y@JkKlBzt7I>@tlB!Tn0T?*NwqU21#he#P*?$fN)u$a z;d@(L{OPz(bVYc|9Xf@XwpRSE*bvW}@*B_gWhVaK)`64&L9`vEDp~4?y0EGSo~O*b z&Onir5#$ml%BCVyTU1aoe=DYJ24Ae3etwzkb@}=T_P<_j$)5Kg`G_Y&dd~Pj`Ftr* z+uCTzN2er&CrVt}$uYB5umAZ>ON9{4A)2!_1|d@UpCbh*vhT5UB z^hIOzeND<7R-2)fkc$p!u3(_|{z=$1s5MDOaT#vm#K}%&CXs(aZY<3*f=(4YQF1f* zrmy(gzP9ubjyVj|i`&F82RMXpoS}SJz2y!!d-T)9tDsRaBgBjN7jjJ2&Vo&+cy5sX z0$p@bmE_)8VKWHo$)fzz+3BT=%Jw;HPDyhS`$-bWz4`1VX+L`I+&s7Ku;aXjd9Z*~ zPVwhpD!!hfa8>qoC2_l3W3HQC%<=?UzjovFDanbV{yRr0>9PLBPJhQIRh4&FXqF#r z)p5_ypzgKImppqb`h5mFKhM^|rzhH{?>=4*sCqnMb$g%HPce@I=w3~oK$d^!)y1t2 z^c8& z4YtRRQ4#|w?};y}WOE8~A*7JdD504Z)MX}UOfe-T6PxCp*}o#LgD4l{9MDNB$SVN# zeY;I!9ip>CMux$*h%$I(&D zfol_ynOgWXSu-{2`jZ&{!QTpgqn1D=P=Ktb)Dog=#PDEBu1yS;lr@4ZJ|{$lQLiTX=HP--t6^f?~)6ps=@CFNpX~u1*^n23;r#m{48owkVe!EL0a7* zhZf-nHQ3`;pH3szZ*{$+n}Zl^inP1XFUomMwyc@+T8%yk1;UE?vp1}kC*sQglK2Z` zKnKMm6pfD(O)nF|kRch{A*tsn|0< z#oy%NY(Zv)11P=qZJhIc`r6`)6+&T4hJzNVbf?Y?QdJWQm1%Z)ff7&!1uKIvr`22i zUrL3s0W_aVKRGJCHsnX;#z4V0UX;Vc2zdA>?s2M$;OoHWuRaD<^}=j%Wv4_q0#o`_ zDkV4T5nO^&Qy;IW1ie1IE|X}cbOynaK)RBj?vC3Hp0URD{ghAI_x)2R-{gh+LCD64 zH+Cx6>CcO|4d|RaLrJdvat08A8l}XU44k9fR|$2%`s>I5G#<15K4l`|$&aByO|XsV zLS>aL?~?e7?|&Aq#nit9|887nJK#}|_w#|Zs_C!b3aR=~(gh>s_Ypciu{oOA!a)e7 zTAalvr3c@_F!ZfXMvdw%d{$aqRSt~{C*#6F^9TAS#jpOlw~Q%8R42gYFykb=JjA6? z?G|WpjACs_NlYNDM{s4I`xB;3gMm38Lp~g50KqBZ`*G?rQ|&xZK#_{s9Dy{5;Da~-_}FG_C|f2m zoON3)0Fd+z0>Dnb_WkBSImUghF#%_Y4VFN|^pY|EY_H!K*R`3s?OPq z{+nSbE?dL@WmvY^W4kZV>q@HLeCB; zm_l!q`2Zo>C%hfYn$k^hU-eAFuC&b>AV*!JA}YZvS?IdQYe`g34fc^|yni)9}2W}HN5!+@=Xc>cJk5C(f`I2Z`pWB(; z7`-dfVQJvy60$|>eu5pOL@~@DIE&%$-@P2hAt9fAIzLgq5`A`01Ymmgs6D9}u!M)F z6(D=?w%r(@lfI(Z#H+&iHLh}E!PizFNG*2J_Ue7WSsQY3lD>b1nfbio+rqPkLGhjJ z*V5_i&BWP>ylu9GwqtZA`uLy1Okv=@u(!%ypF+zn3#lC8N94>Y(y5cNw{CN{GnY<1 zld1*03}01~^w^)N(N|n4x4AJQ{aARq2c<5XM1D@P<@datR>=RO1{!IrB!ToDrRoC# z@E$Ca!*lG`F)RBr7}#RaQa_f#*Fhiu2B199t5r<=R`y}^1}kfk`R5;@K@ydYNjvuM zjq&GvO}tagp&)WKMG~Ek2?tE*n(x(P^KXni0Ot;6R>?~J2?xMol$oeDcNK+~NIM>< z2Ig8DCM2^@V94zz53qX{M2<5=AqS#RQaB`s%CKl_Z)85q6NLtFA^(_AKU+j!nc)V< zzyL!+i+HW^a)0bz-Lrd>{8NG9koC{m?na3A<|cQN zf`*J=?A?lD>S$8;S{n^NyfLx%wiIdCS%{Us$kw?4sT!X?-TqBJYCW1%uLq)435pWR zPl6^$E03uIDRj>cY5KsbY_AT6oQ4nDI937RuAh{;dU}ovgR|Kj$S)py1j9d6sceC zA}Nn*>nR{PxB;fUR7}B-8KDI@4~&r^y-fo~l}duixU#WG4Eiz)7bvq(fPL#q(a-cD z7b?He=d1yO*7<@XMOo_36}sVWvv-f+NkJ%SI{i}dnjv08Pt6PIM5V)zfQFef4VjCd zM5aH^Gi1*&Z4G>NGr@wVv4czN0tH*dM&IjAUC-~da7XHN^Xxg=*I_>F-`u_Y=r^5S zjyVuuGp}n)rJwD4wB!z6HSL$1*u|dexgFH|{hKZs!7d|>luC4FqN1Tn6|c3F^wj!; z*xFh#G0`xtcj(N56ep@H@@1UskTtNJJm&O3+?+hK8g|Xsjrr8C_(K0sTDSCR@(ZCC z@e;?J&CM(cD+bRQ2si|C|SN}%WJ zOc=Sge8*dJZt_jHnlCeTEK~+vEBKx?qE(mP;RTN8g;!!YNx1i+&4XgkC^NpZ$;ym5 z_U(f{W?u)bNB`%5>TQpK4Vk)ju5B!7`8jk*QKubW7>_~tJB#log4Ga3OZ1+7vSqtC z!?N+{+XzdvL>AKTpKSs%b~X@cHGSu@OD=_Kh2Di};EQy%#Vn-TBx!-t>{jIRtiC{( z*9d0rp`*~%-Y#D=+bi$}W!l7{@>yaTgLZE0*)($Y9b@sWMNHeO%)E7u2-Bd6@XRUp zkoAbs8?6yk*4vEsg%X?Vox&eYSoJ{)!8_lU%=|j!3S*rUEB2|PV+Cx<=F39MW;N%q z-Ieb3UFNiWNuHkwbu{u$@zNzzeoX94+gu8eWxGhz7mt-?@8@3A{hnGnpVx0S z+<8a-J@@q%b>a<1@^Z~Hz3D`jI+_&%f8WCdB-+w-ju;IV(=vJysZ)k4cQ4_y)(UGRX&Dku*T zg(jGL&Bx7LsX$q>Jr=c}wq?172ruVXYVr>kc9KES$>Ib4-hNGFkL*`{sy}2@+50A3 ze7Tf+WB8nZehCL%*ZYSwYRsA}Pe5p(fk@*KmW#!X3QSK!M2^&`YNnH0HpFvFJb`!8^uuH%H<{EvdL z*@fW4zlSvjhj)1ASqhF-o6lh1FRb64h}n}~_>0TJY8OL%)UtlIVdQws>4=y|Vb>8} zVR5o&Uj-;|AE)A{7pWq{#^m2YvwSKASbrut^4v>gK=rvakf*)YcXp-PD4TP@Vv)+K zXLKn}v%ck&^}JQAbd|bgTm1DooUU?h|5d@CUhDEsC`k!$2C`SPw3%%!Tztm3E9#9B*Tcjykyja&th}WK9}uC4L)6RW`QAjb?v0H@8O8 z#kj=8N6b%^-bVt;>s%Y4T0!d|4fsk7%CcFYg<9iU+{~rqW^<7Brx8}`mg5jDpJdgJ zCwh)!DMw`{SBGcAS|?{^CXeOhMvLblv^5vDCggx!&VI-&hu;wtZx^3Gw&o`@OaY#U z6@SQgNsySpVj98%-qVJJgCr;Hq?(O$cBv(2jHC~9)rPR9*)hhoWh2rk9MNmG+3d{( z0(FJkSTi%2t2x}2fIZN4TUpTs#~Pg34r@E< z>(ra&f}!qX(UW*NeZkngmFz~ph(fq%qfn+wJkd*{rfS!uN}4nl$#|5=aa6dmt{GH4 zLRrb{SaD;@oF|szESgxg%Bp?d`~NWZR#9;<+uCje4K(g9=|&rOmq6nVjk~+Mgy8P( z?v~&hlHl$R2?Vzg+(ICnZ>_!ezt10Y>%7DxFuF99p}!>*mhMA|XZ_&(K?qj0e>c>)`2`6rjS$6^c`cY!GE7W?q46 zG^8a3+WLhDMe0O;ZS>Yrx`onJjt1yvkn9lAXn~?w2R9IWV%0?4Cc@lO6#KyW`=Q49 zAs;bO>hhW+17jWM@LPuQgB=A=Y-D?vXzzZx5PCg3=4u~y-P%G+4ZrH@u|wauBQxh} z|GGF2(dt+~WUmeejprO*#9S40eV>-0q!YbO4SY88VcV!x|G$g{dXubdxbl~ho!_Ux zTDcdL-xb2Xcf*kD zY<(nfhx>LVFv)vUqsW-HBjAJ;)00l3p9U4T9U|{DYLlSfu}=Qb(oP`c1liIYt7Q@8Kv)!)mHZ5lIGaa#7y}e8a2&B zteNsdHKcvkU>ODFAH4{GKDr-317%F3z3*6*OUEzjHRKgZb=FDWsE8)KuxD8-!Myn} zpnbkh9YsGjLkXqQacC8}{6$Lqq~z=;g*>Hx@@$RSX_b8?0Bpf|mZ>k|FEsvd$k2ME zvP_7{oL~Xf+MacqQz-l^(ue>8lQmwU8E z)e)5nuCgD>1tGv74-=A&QLjSlCtte91D31Go8beQGo*wr-%Q&$x22>Dm1_R#hB0%( z`n9&>NF|Z`7Y_-Esm>x*vm}YtYblQH)p;}C5y#Jx4z*k*K>LwbR3sq@_;O`(>_bu_ zW*=6l&p&!C$%ShDVmp_cH;D_}mAJK^1L$66l(*fRKJisapuO&WS{o()j*@^SjqT13 zxE&B_L)!i5(s-Pz9joI7uPz~-u-_e?>tYP~a4=qG!_99V17!TZL} zcNKi^Z0DN7=mI&OXC}g%DoPX^U(#&vR7r(R)-1@6+($S7JlXbfu8ykKzeikt!7KIM z4-nEhhG#4Qa!nORmQRtWfwh+RaM!O33@G^u$Zs2g(VY3biu!jXNeNY+pHcsOvGqy4 zoXKb!pJ)KhUWS}G6|6NyIlH;M=frww0+}}8pt^(hns7;)adKbT#Kc%sSS1$=M&2X# z5eyDV62TxF5v`ZNz@UggaxN0zsCF}qQ0$0M;<-*Jv>RyhbseZu>tJtJlSiJBduL~F zjomi_JURic(e18#alLsn98*M@iHFEQsN6ADJJfp&Y%W$VA(SjaN%^RcwSZ9;rZTZK z1f6D4!9AsZ;9`6e+1)ISmnonA(J9*>xmV%j$L0o;E`r{2DE`gV>|B4sQ$)FQjU-w_ zg?}xvXC&5e|B6=%2dZP9y=6O4Co4$qPfJNmBi-JUlKs$M7 zET4mlq-0`<76Z)RE)4@a*lTlF(E|rmRmx$6G78@l9bQ}58F|DmfK@XyiZRYJan~qe z%u6lBXzcy$FNJd>$0+BLyCnz)m-ExcKNZ_fIUix@iL*_@&PnL7loytzpshTaZv*Z# z&jp)uq!HAV%ZVeW8_S`XtDXQQ#JDfFw0&*Loxm3IIYqPhBC?j&E!;muE7A-zyK@=e zv$EPu)ImgW-oc@cq7=xpYne$~Md{5;&a~VfG+BG|sKE2ij#tU|PQnSM9Nn%Q&$sS! zitFqEJyPCdo0kHabdwjNFV5QBH^oDhlxMdDUwLayBrliSLEYX;-zDi{8`!@OcqHtO>s^O-}Xm(CnqZhHt!hfZfQPS7o}$RF9vEoL!qMj zKj(>@xiilqjW7RMug6jpC8o^KIwC&A}`{4k5AOhe3U1n+lIG11^;WIpnwF8dBCx$99G9iyQObY$5 zb7_?JIxhF8?br=kVqTjAu(2~V-1_t(D0VN&5UxNhA~=LJWTQ&2o;5B%;NMYqt&iEDku#g)dwa7Rdb&?z0qf5*C(ouqzV>MEnNxZM%YFAMN|H;5E2?nbUG`{}3k0 zt1iMyM_q(JF)&KtSrnCJ;E)uVwDH&w_1FN0tgsRX2roS<0x$dE+?79d$N_{Unpa+c zqx)iWSuKdF@i9t!xu?OC`zb2GUa!Zxj!U0~LDq||4k_}=YM8tlqSO75 zh?9ggXrU+7;Cex1L96TgHyo|hA?~qSHw)VvL5x@U#`YOc$`h}~L{kR(n30Qv80BF= zi>a$NYxB`R2|@%z%Vw|1Ymof?3e}ap_n(8g0SyD-N(B!ETxZ{?-u{3Gj5DQBsuq(=i5snoWD@|{|r2noMJy}#!v7%B=xQU_A)U#K;) z2Y;TVLb&r_rGrX{#vzB8Nrt21F=%zAm`jDZOq?N@4JYQa0$MU^Z<;Xsx$V%Cmuof)$+UstLLhf%4P~@ zI%wDHHrp)sWWGA;Hk$sohUJ4hypkryo~U2WVLB+Xiz{AUKxEQr2ehq_`-yVLjFo2% zOB3Lt6_8jSv2771f$^(Czioz`H934i(g623t8EcXKuq|Q%Xp36ZX)~P!=cSPKhznu`xIGTIs^EfAeBP zNBkyWBxD|V?SeS~bY4C}WV5(odCz6=$bG{g57LP|b1hOht9+_l;?UBDWAn7mH|OTK zK||r6tgZ^1$2Dc>i-$k~0cb-AY?H6PWN*;xtyYYQ8^MI@*7x0K@T+3|t%;nKYug}`dcB4MIXJJFCY`=0o%@|&M{=G$ZQj_fD zWmi*a(xw=g&2V8-3ls=&sG%^?I~gNW?75ianl-vvg%fv!Gn3B(&+WctbvyT5P%C+L z|MJN{`_%6Oy_^2GhNT>_OOXMA{mFfdqBF2z3u4OaSBIc0>i#{~b<2Na`t^&CO@^Aw z=Z=&0j}+ds)nR{rU-aXcK3~yS{EV1Vd`_jT5_qL3Dml{h z_;dKF3sSBHz)0?dera6tpQ8@`4vJ8ASB?!MR(UXBJf z@d#H7p6aVGRzZ^l{^EYDdO>pnyslGP65Hc_PDnhp(N(m>N)u)?>@|i^0XYo~+Xj=d zbk0nihDzC?0^)bM&v@0BLUpemE*hIIc`QN57g7cNVsH>}4y1+R3YvNg2Br}f#{vu z2q$+&@ml33^>Ib9Gf8!~G#Di_Ey|QUothI}T;~(?&5yp??3Y`{b08w6+KG8o0Ovku zIuI{beTZf)VMa0`q)OQ8niEe*p5NLcCfn&2KP3lU{WzDvUz|}+Yy*k-HX;|H#hvHX z>qM!zI$B%$6kH#Ik>;V79j!Q@irh`d@X9?tfV+=IlWRfzN^DOw@UovwsT^mc+MTXF z!OfH@iC#o5Ra~HMTg!QOs_UQCELj1Q?7<(~07Xz@{K`m2<{B_Ny#xxgMuUw8k|=&| zqokgpK?)v|*dwlV-D&o{;Dz5b-&v$k?~bDZptXS^@M5gPib`svpVnMT%|cfr0-lQT zX?5Eq2Q|`h)e)+2@H%Zw!IdYWHi%B$D_(ObOXhdn#yc-5+Uf6UmEy7VrU-5^l~Z&~ z@+@OS3mQrJHd)=%#`v_HTp%&du&Nw0AmGtVUIEI4?dvW@RfQI^uyy)@N`XMe6-twu z5<%nLG$YjsUlUZW!p)R)qB6M!RuB%T&kPWhU^2XdSmi5PB$)N7w(yb?;BB%vE&!!cNxctsjKC zJr&w1PB00h#TstMw>AbvhEXcS1pB=#WN(t?;Vsc0q{h5EZk)6V*y&$XJfc}P79y&9 z_r)S-qi#H}F!Al8)-Y{-eQwJq!^CW!x*nPMZJ8#di*q#e_Zej*6FJJ#9(=LJ5x3K^p%h}M&SD_q3_rb zPLX@!SHm?F$)6*V)Yl)h`-gP&2l^B}IoH9goEAx~6RRiIsk6P=Ze~iXI*`}^Hc5P* zVIY>H-I7kb4QAix33AIe#wWTgzUE$KYkquKp4v;LT`GhjshgM>(GyqEU;ya8wzAwO zz@iM8R$&$)gG@ZLa0LV;CCGbs4=%l?0Dp(Gd>o=<%GyC&vr;79*{`FInU|aARpk2( zM`qCL|BT`f+aBGnYyf|*xMBrq4za$eIz~`MvKq+4ut-08M5$z)BnZy$iK=;ZKmTxH zOR&j}OUHpGgceGtKJ2)}^bt)sxHP4O0ZljB1%8c+aKQLkS+Pw-sYRG(f?T3Cl~nR; zrKrXdi1CKyuRb4dt*Mx>@tYt5)!NuWBSb@ZGZPvMQ}pERBsCPSAt?%>l{tBDEF?6q z7^Oq+Nk+7evy0t#k{`IU$8SeFa7^blF2`KXh(Fi7WQLwcfA>)>{2W;1L6-@XM6bHw zrsh;zQ+<|h3fiI(d`A5lbdK{1Hz$Inyd`v?Vcz9{J4(x2eLi=kxo-SWfFvxB0l?X% z7e;5mlw_Wo`Ra34fJu`T=*W|To06k=>xC#bGdL{UgpP{FwoQ}sEC)826Ksh{_fkZm z7{A)apy50#4Z`8b7#Fg+MCpVrI!z&l4iq@RjX^PD;E1Giw{g(Y0)) ziFQko9y)Xk+Qo*`b-W5f7>Eb@h7JperD%?un%NsGEEJ0BLhj^g#miDob|b7r<;W*O zDeSJOMo|?jA{5Dy06{Jd{3D+lDHYpu6~ArRlb%9~t5X2O^XghFGlJRkU!_ z<*(F_thz$)2waT@>pQWI1C07whaHY}mFHU;K ziRgD5?Fvhk-R)}5eXTmMHt!IFP&fp|<9dydd6rtM{^;xhiS4 zuM;Qv)4l0#CS@7tF)awU`l;}4cpZ;sJw61kTrZnpt!OR!YI*vF*z#Gn`dJao6PMxY zmHt$}5#SqbkxpF5`^A;1vP8G&G*QLfZtG0kN|MYYB;+Y5rfJpW&J)TbQY=TzHS?C- zmajf))Ggi3hG%#epV@}Mf8=I4pDXcOiK`PHuvty^ez>HVm*F-zAj=sJ zbQf09Vt74dTf@zOc2`T=%Q6@pNm+Zz>X%D3mWkN&%GtW0KS#@b8aPlzx_um!@otk( zrNa(T4Xr`Sp&ko;UgW=Zz^w4X)T`&qxac&aV{9WNr=Y3a#eQ2eAe-o=?2i(uRTFCf z0)QY<7EmJP#FwUW8bx+?=tV75NvRg`Gza~8tW9kk^`4!L_*zwA<>vxvBX)u{%~&i8 zx83grw61NYV)F8&kmEnkxA1;j=hJiW7UFTz5N5jiLr|I)bFD`bM+Rw`Dpg};NKIB6 zjjRzL=j|<)9*(ASyMGYcPu2#o&YS{zI~Si z374fX`RKM!qC;E@bKn+*kNXag^X*1N3{lZ5@_4w;EsKGdJvv5dGdT-qU7Ce+hvQ*H zk1z(d*9sc~-9O*Sft&jEu32137=adDM}r1C7Mp+(vQdSqJmT<<9vgNCgeq;vrk&rm zM5(7{axcJJ2DJhkyHsau8`o%FnsEM}QMF{|0Cns2Lc05(iY7#0=y+E_92 z#KRa=TM$Ro2d{4H;oeFa&5W%X8?KVRxQQyGI;L7-mBWvo8-k0by)rt$!)XU%06v6z zL()j&!H>gwj`+dW_tzY&?&?sR$G|T;n-3zMrCzB5@0zUxc<?`bh(MS->$51{&36ziTUT7_0gfm}sb!nUzU$0xm#m>F? z{UT}CET)e94fi7NNTT$+qB@;J$_K)o{i2Os{rw-KLj_|#F9T%K4NFQCUHA3__x6GO zXkvHFMlNU;sxkU&hc?Vdr;#`dF!gLJ?W)^PMKHQ&DQ#B^B>{DYk_nbuUWZz}@OfCI zdPf< zPb1|9p?WJ_Iz;}F2$>kG7X6?htl=Cq`Qfs-RMIP)2i3hCHAI?MFIQExU9GE-I$(dI1C!7*=qV>@SZ|zxIKFO1Du2Bzn=I$qqJKcgoCu{KKV~qA$>AcZ zLoYFlD=Ft=O|22-3CZtn9p*ai(`2i3Z_+Gp$m0pZ+r6xFX{OT>UFv%Ew%nQ&{35~> zXaTsA(lLf1MNT}$a5FbliIW7QEEcmf)^;z6#e&nK(pYGK6VOAKqMvSbfNURt7B~kE z!3A+hnv~O|&?@0X!7}xU3@~6w_0h6`T97%=ON~6Hd5-N8+g*1@g*G>hW|mQUfY(7y zxI?N&6_&7`l|E2G2VG^}zU1jxVmKw@38YK3KdF;P#Cf%EXzsg84(qIIU&Vco^wUeq zHofA(Ymhg{y8&ZY@5A25EVE_;pAW%3V16#qAc%FY&f7UDqr)e0Od2{2i%VcPG%YV{ zSE4afU9_B}seOf*qazYKf+QP=)pv-@QWuug4u;WnI`)*cg^N~k$z<_EJUYQ061pxG zVCr}`08KA#yEbYBmiZ8Lnn&5`etNCuChs!C}qal31g( z6x519(?c5EFc>=Q5i<`QFfp(m!{ges!Ji0yl}rZ{A{)q)>F4}8;|=F|JX%y9IeF5t z`b*406zKMe+x&~i>`1F#z1b=`%3z(831StS_lF>gjP^gurobpOpO5Y<6DSrv9)*rHeWMAuYY9Y1!g$*aC)@A&A!~wt zzxWudJ&ussWztx48Ke-5XX{tpgHT2B!UQHWXF7ERr8Hrz1nXAF-`s{5OddR;pC_Fw zt&=<#HhNY2Y$9Z|qRBqbphnN>r+a+Y-08Ym!Wb1ze-^tl5)<(fV( z$IVz}5tC*qlwd4mZTJgc=Phg61o>`ok|2AC)>LmQE4noV zShI;WAQve!@Jmc2b*U<5Q2g(99Gba8+-ZC{ItwWU{k9KlZwC7GTE(PGElwG?v@4`3 zSBXGeWZElo;r1MEjvL0bi<8fJox_sh4tZQ-_31`L?(SwxRyso3fpCs0|J~msP;X8W z4&XZ+PLUS>ov_eS`wsqtNt?5`<|=O^F7K?YDu~5{nupx+%Tix34PP?I0$uhm!x=4H z&7%1@i~bI9yi^2!UekybmlL>)d_{+W4f5a8b@Rqt5PFA|FsU|al{k(pNyy7(o0@(>ax1>Dzio(0WbP(b#Dt;Hv zHes6lKcBM8Z41S9;ny}Z~LLL0QpU=DZnKBT7d8wK?q)l7gsF^4-i~)pFv2Tgq z=!)ehZLm{oP>yq^2Ag6(zD}{g$uSdG+$$|^zuhA+5|hCWRCRM{M zk2qm4ivzOws~@vcs0d}4A)!c{B@mFAG8rR?g2u@M4L%g>M`_>$l}{{5AV;++ShyS~ zmjomv+}7A64<-Tb8~R`WZA}64)b+;jRL>NOzI%E`Zg-jSwl;OU|sYKQW*ypG8 zn43&@p60TUkXu3c{jAi5G4^U2ZV^ z6oe(xakegzIn?~YO1W#+e0{Dqq*ZrPir%0HR>Ow;*m{+loU5sF#B~PXU0r18hg*wJ8 z44r+S2gf1VIRS=(?8R&~)@Q>Wa*0uJlF!>hnGCU>xK5}WO&L&>6pY?XBoJR zS2`q^af95Nj~~b01Ul_bfQ|9niim8rOG!*Rngz26u7=S<^5wSeD) zHgJ>v_No~vWDsH5TuHW4KyHGmMM_0`&?V<-0WdQ*f5EFkk#xjdXP3N)68SFixpz_Z zBO;EnTR#d3rW_@DxE$CoeI(nuK6V5ll1N=*>d1uPtp+loSBP&x*(k({VswFv6&whu zKU%KFlsdbvW?S!eAaeB600(NGm0s4d{7KLc75&6#R=?nUGn0e*UmBJd^5|$WrjMCh z@J$ZMfYQ{x&ST+Nmle%qmU|gp-RZ?;^LVj003OMcyQM+@7w7Ln%U3hPEwF!SSYELN zC!x`pH<`>zfr5j6nf;#gNbGT36ZNN$T@JCW{*Mxwh)pu@A}!B(V6wp<38)(6@n8K; z>l$YQJ{rHPuiW%loi6{5wQSVdPmCZ-g}4liNrK=h#nm0#J~tXpLrgerap zVfXq@YjEgQ_64QREt2*5+beEV$LsVg<4ZjGrd75?q5LmdA*WKDV9*eFASyhtd<&Nr zIz-3p9;rtt~-x3n}x_crDco5t3N7`T27{a15$nkViDBK zN9J_^Yg!T@7!2rfM)*7{MFuE06F!W0m`ttEJvG6JuK#Zn(H15h zQLVfsE1iGk5bq?bW9^>Wewj?=SOgtes6rKDZPXjIN_Z3{h=6rD4I<=`)z)C0#TpT- zcWDleASDLeN{q9eL~?i_s1u#4qpB&Q=IVgQs8AQUG(MIlE5k_?vN#pPjuCRh8&n}F zC&amg1AzjP`|k$FgiGTzPgHMEn-%i0m&J{VX1m zjIhg)xrkkJ*M$MKlsX|gN9=v^hctRB8td8su_%R1d}&H$I7c>V#%m!RTdhK78LDoM zLN-#rG&6uRMo+J-NT0mQD=xSC(;R|+WZ16W$EL-QiAXf$X*6(D=u!pt9wD~7l835x zbbX8!57~M`Rh63t16!$<>e#9!|ML86$w4h6TfP1)d4{&xZg#elJyXkdOwM0)rD^=s z))q^e?wX-0tkig;+uU?fBMX}F$RYONwAuuReP;HZczMg%nWQAT47(2v)*RnbwzXn$ zSdjq~>mbd%g*)~DCL}YWvUa?aWymvSDs|$ugd@5=PbOK64Ztmu?~#$A)@pozTSk8h z-M6c4ik`l^MMuF&2FESM){V+bO)$oq9gXZ*;x>$`8=4M|ekGms!Gj@RA6xVuC?v1f z+-LG7B$oH6D9JfErY1T$ICs!~e19=HCMjz1H5m{>?{@>zH5=g1fy!i`n&sQ2TD2o? z*4w)eEcT7q4RCWuY)`Cm_N43=5Eu`BqH{=v)i^SMEs37gQAw8BXjtMVDKap31d~rfwh7griTIeFJwTMtUCSx5rwpn1($z4g1u6|JNH<_D&N$(K zwQ-g|ny;AJVh24ps8LcL4ileFND+pWR+Dgr!BUnWSS}nkYPf~c98Yh;{O}9iW0txp ztA~S6R3;q>*>HlB(opUB~K?%(yt%sa1oo-+jhJ{*d`k00}LXDk%Ad-S8Y` z{;m-8rSeME2P_B21A_7Hxi!?50BII~?7gFzlG=<|zlz1& z=eowJ+S;!3j?Wi~^;;(#K8r3sZ3sE`A-?rLfUg2ovyRSzEP*>icirw@ zC5hh@tHs#elwiC+W(m8WicPw$pxr!DbnRKxe$8nYd>%)afXCIKaz~QNA!8W*koqdY zms0=s{h5^OM{>MtRHcS?C3U+G6r4BJWoy=~k~)gAw`OU)$3nF6{g}ktn1m@4-10Zm zpmiKqPx*nxz<&5f*5P>+D`!`atUfH}v?xPf0fHR^1Q68a6?cOz zxItyuaq6SBabZP`pW&?l3>jQ)Nr-w3gXCYWXyKp!r;ykg_&GLw`uDwV$`v5o|4pf<@!G(ka$mI8e!R;cnNH?w)RVj@0ofE!uBHnCBrN<=mO zpHb@7Bc_{D)HR?Vwq1llm5x)T_jMaXB_DB78BG8`v1YaIvWg>%1b+%K77P(yU|ux zOg@lcId`#Z$u|N7;CWl7#2m$pdBemmvNwEw(WKGYV-_RcM$Jt=(N`djWqLdhf4YI_ z><3`AJgPUpa?K+U&R{IYg|^T4YO?Qc&7>>3aA0T+h5Ib{_2>7JazUz0xt9 zh+~<^pyizpJ?L7N%gILkI~*50VDoX9nlgv25&|P;6n>ko{kfg2Bh*&XLOj|l9YG%V zW|`ujJ76d20xAVD>Axnko@92=xh?r9EfCo+-wUVcAZIZMd_MB#co6Aa6ak@fWTP;f zW;l7-%ZShjc%^u=W%KQX;Z|K@?_Op`Dkz=FiW|Y)zsgAdK=G0#vpqc|@Q4zpx5~v` zB3QV@Hnz_xw3i(wO(I=%eNVF%u!$w&dzD#=f)=y z*5t~U+Hr#bx%Wv6b_nu^yH(v4ObvIlLDKyB_gO+#d2gEwO8xWP>_w+@`Q>a2zKx5M zqIyM1<&vYqdYB4c?P7LfB^ifYaD4H8j2B*v!#ZmUTT1OYqwNrV-P&yl@0djIW9?Co z3S7~OkrX}8V_yl*(Q@lFTuF#w(*0gQ^isS4mK&y0q7C6E1=)9Cve{7r(g4DMrqWG9 zM`FdYP+GK{OP0WG_~&a`eG6pE5IV<^bmA+ZcL>!bB1IkvYSR+?2cZ0gM+v??9(5cp zIw{kkewo6PKyV3B^j&P)W$Z^YOX)Z;Yjq$O{WkTLRQ(AtAkHd6vk>9sZ4h4uN}hbqHYh=C`ZmEwnszWw(>1W4Zed1 z6b&c>uYEPF#YM{TG$mw!{lGCTZxce)afDh~W+n&py4ssq)0Hr!d09hlQu;EIcb953 zaAd~g*XVo%Du6XrHmbUiMli@bm?zcuTvE{i5NmfF!vvv9vSZ2*WgZo#tggt2hz__Q zt(!;Zt9Y_D7}c4op+_+fo#0Y;)WcAy6v+x>iP5TL)Kg9PLb&xsYep3pmS(s>2UaSJBM|Tn^8=koc$EB99u(f zVzrlaK&eVA4)pFGB$J^ej)&23Jzv$FAhD`S0)P8F9(-~?QwJ<9wD8`s#reoz74+=15QMGT!nF*RnWd7}Y`ZMgn&xy z2P*lK5{idflSz!7T1kvY;~$Tk!bwZugI>*<1Z6bV6|z`r!Q;EC;R!#YumD^m8VTRdq~ z6G=Lqk?0u3CJ$p94KF}I6>w>#O&u^&J>e(Y0mg(f+xy7Nw;+qc6Jq-^pB)D78S)WUi{7ZI-2S=NE&@>&f86EN;1}}94!@98<6NVU$>@04a zZU^&TJf$9(N^JbS#+Zh+M4fZHa}}nBTQywP2I=vmi{!f92?&WSFrA1hBymo0%goG- zF-Q4%^U#jKPyD07OwO84@qjw1-|3@zf%XBEqv5O+t+^$8_Y%qB?p98CPMFE@Ct|Ub zyhCWoiB2OzqGb^cOM}a){)jwt!H2WSxBKI{3?4JJ6Je~LUeA-`PB}>pQ`2W)aTcSov#G@baCA!A z3g@S#hUus*S*D({77`+_ZM3mV?59uDM^1Li8~PC;Xn$lB<{k-GltYh|XZ1#^#2oQ( zD2NP&X7A2sAFR=8aZwAGajVIRuAgVo-kTO2G>VAeP8?UkLj|@<=7A{^W-Epu4il@+cGk>nCd>TN0u|0N~JQ*>qF7 z&&Nf4Y7$loIs5ub_an zb0x%iZG16*7Kvyoa4qq(xXkuiD%*Ox%DM)^dS>E!JpnG@f6X(MNTG-b00aO41Oy-e zf&aTPh_Da90=)TWBMPtw#gkV@3ke79K#f4CrGsJEw210ZuHC*kY$gj)Kli<%C<=&+ z(Q$LRbPBmZ-cU}9g``<4IzrbVI;m9LpGW77Raevgu!P6q8@~us%4D}kf1tXT{X(UD zhKn>Trg$n*=mC-`oXMipNR%JYJLpO*3oCjW-$PAEk#_qgjj)Y`WhC*xrHvz81Bd|1 z|CHAJPie785@1OHh=5rcR9z}1h(XKF3vH$uj3Q=3pR&WFm5Zf#D|-v&-suaaClXf9 z<)l*r(CPPBk@3(EXW;0@RruXh&K66Aqf;ri)y$X6r!yN*wAC(FtCuSlDz?`x*X!lN zq`S2D#e=Ru(@%;ubd+WKmYMyHwk*aZJ9F6=1}_j z?)|_zNp>Z5+Y5i?GdfmZf$uZsS0jAf|D{+)U_~GXxc@`Z2|$1%NVtLf!$AayA%jg2 zsYqOm5e;q)v!NI)4hKR~+r8mvY6u(?4UbMCf>w>%tLEBlA`4@uFGG;$a4MF{P&mUM zpAk@i;&|Pl@c%*4>aaP{UccICHW){x)X}isYPVQtJW1?GDJFWik2#+F``-_^ulJxEwAZ5FzQb|Ev+5va@E3*MXA|CXJ8V%Z!Br?XZhDY}bsZ<7v zEM)~w8l`X+QN$pzy zLFyyu@#Wab*tKnZQ(78+hf6fj2(=tdB$2a;y}nW(d1jbw3)H_k99I%2$=vIliq6@)?!#agDw@GJ3)$bAu) zV?2*X!YC7A4P#4X3lY3j=}>q;H3SKRTDhxfXE26<#bm0hd2cj@ zR;ft2yX9aqhsSYis=IYp!kP__aG)LQt*rU)D}tBI;__u9B*g!wL--fn4B#h1+rKST zNdH6k9~PD;Uo(r7U7p2q%Vq2jchC{SpvQpu(BM421E zsro;^X#x?q1(Z?3U=nf$R;)B@6hAgccOn;gLY#!G`h%Qp<%jUZl;bkqiCycsHG>( zj9s}4!=cY!(&y!|z2y4-G0GHa=7;T6DdJi>JE7h7{q&08po5GAG=+oAOoiBktN=bC zs%$g-D(f7pDr@UpyBR*4JST?(dQIn%-y~^r6ZX}*wp+E;I*#WjM{2Hh4@V`ccM8X) zTnDkoWpBwQj>|g~d}%5&cBPN3GHo`}%JO_BQp<~?>eNdLVjY-6vy*&I>+sztPU|s3 zU(xGpDrOuUVJ%x5we>w)d5(=4E9g#*U$Or{8%J6UoLZvMCs`XN#YLbk3sL0G?E%8^ zA8J=!92wiUbT*v3oE(%sR_ztVGjyG@=ec|`%fq-RznJ+%|LOj(zUvpwiAj#qKY#yJ zq$Go;?D|j$PFx29Xr?ZcAH}Dt2JydjxeYtR6Pgq7Tq&zYsLTD_$E?DXuVbi+11raw z9R)om^;$4nBbjD9=ukd7SrDEw1YRxRxKJkz1Jzy5`Fy48?nkZT!MXlzT*w3bb34ga4y{p(0mo} z{egOo<>%p#GgGo1_2$8Mmy{igaxX=W{r7%`uFLO(9NUk-4-0(He;<`Zvp*eIWV<|_ z)Kq_bI&J7YfBM-p%Kqo9ZPn$^udbtyf6jX!&i`EWp>jN54w1M%UyU&~K3`7>Ts+^* z$#J~gF6p|y+^yL*zTAKJy?A-}FAG(+>)+qU)s26j&N?st{<$3GczwQIb$xw#JZgOX z`}}b6`U=1-0ieqFA(CH)fRsxRNyhq6gfByJ6H0)L^8M%rmtmw+B`5-8{n!DQ;b6>C zkevJge%@sSRJjygcWi*T=Q5Hrp%l|revo|QGD>i&6x(-fkoxH|S^~2ScOhDSh=%+s zMqarLKYMJ5LHH_GJ)w-ST7H<>;3`gUs*JdEY?wXZD*oRVD)|xaysHE|<#O`Xu@U~B zt3^t5QQ?iNB)_S0>W8sW@u#cg5X=fNs=^qI{5mB@xq^mdd`wpOIyEJsf{syP zT+!eYA!# z_Z^=!dAiQ-!>r+ zRANU`FAJ@5O%)&Q34)(8)e21Pbj)|)35HN2E*_CH$G$Je%v27#jp+hMrv*GIjb9;+F<>1zq|y&l)7-8RdOcgpvr`j z)aB>brawU|&-fo#M_XwHC=>I1?RJywvt|mtIvqzOU8`-j)_xlut5uRzxoCH|pK-TG zmu4n>7q+`p52X+=-uiR1QK*0#JiYoba@VH&P3I!-^ZT2+*p6b4o8Kg+?k@+7W`Vn# zT0cS`=+`JB!r30ooUFB@wp@W9M+;4nnPZG1k%NwN->vqOPz84x*HFYA)#gyeFLtj{ zCLkn1i=+8wcJS5{f=# zqYyAR&GSw!8&b+XF)4`lXV@a|u9_XN`;n!M*?PS&nfxo@?-R+5T?88!#;+%z>-EJb zNl%kPV)v7|Q2is7M3Ii|l}@2ShVLRbX0@%Jt667)zuopjNM5%#DK9-&lN)uD>o;vZ zPI@RN!#ify8Xt}$dU&*6w0OK051f;asEdF5KQ0b8a;Sb2yZ`h%x3k#uPG1&3;50YV zFziRA?zSyb8c9hY>Mlu92s-sJI1DF^|3?^A88M|bXJ#|vWzyij~+%W#%xr_sd0m*>>QCBvZ^;@9)&(MH_ zak9?SOfwu$goQsaHoq$!jxQ3oRPJ6OpF*vY#@fYIIVlF!wqX6uZ9SF8qd(E+=gBx- z$cYg(l&irwA1@aBS2R!S0G_MjC_YT)y|0z7ZEW&Bw|#FV9hOW?zlLw8n{4VFh1`?I z`mF>Q{lx3w^I@%x5<@(_-fNo&V4b^B_)~}VduU+c0ukk^+qclrQtWfXE*HxVKYvvn zqg*bF(cDy*tRB7VgHM&UNga9QKOH`N=>Bp~PH|>Gkn*EwdVT%YcB*}OtE%AJ<$3ck z+pFxR;ho#exEO}Aa!>cqqvi5HMcBfATkCe89pgu4HhP?{o2I{+BpI4n9i7E~TE!~r z^m+UqT2Dg#<|%OR4)Rd!@te!{hxd!MK#3PXU3V+=i2iXq>>J_VaTJca>mDtSMRbaZ(I0FyY2j2>HFf5gl~Kf1KrNw&Ybfe-HwZkt5q=q zKUw}9&Q!8`lV`+#u)VCS+4$j$*X`cod@JMm-#;D;2S36aaeR9hpMSJ>7QO$2uvQ#0 zJw06Di@G3S7W@EVEOtj`$k_~AG+o0ZZ#bvWO|?f`%-85)7PzgV}0LW@hwaQkw$)9KSP^17*~}ku5AzI*xtMi zAphe!GsQNrXrD-R?z2Pw*%tLHxtQYj(sExEK!eEh9VY6VuSwqmA5TKGJBfp%f0G!x zwjy-C@qZa-Bng{9^CJnhAcImxEHT+pg(C}(5ro*=3xcDG0=jbE53#LMN80HNzKKGJ z6NJRF<=GhoJk*j>#=o7-2*BY&WcLqqQ_@jO@`qe#P>I3`Plb^kwvy=7Az zU=yx6cnIzUcXx;23@*VTxclI4!8N!BC%C)2yThP^yF0=6ea|^7r*^CM7d%zneRtp8 z&xh+DS@JiAHu5Bt7f-TOb{l?*G-7Wr@^rC7j~oz+BDg5Qa5w#Lh+5*$zkgW&o}{O9 zuKlFU(Hj3#n6Xp$Y!LM?0hh=F<$pCmxc}bQIAmj8`G7A3lKP6B?DIG`5Yp>v0 zXEqcnBSijn4D?m(RsMBJ*Ga0l_3x<#Wi&BbsgBU8s-(DVLi z9QLA_N4}lTbgq%qfrrlL$hNn_#}e$LO=kmX`F>Q5@`v|uZxY2|IEJ^$cp)PHmy*Bt z^VzNdt!>9)4#dai+R*wl48^GZ_OyK!3A@_Q_xK6=PAY9?t;Ox}(hXtD|Cm}MS9kxL zC5h7ty*9*q{(+as8m_)*^B2Z^3t1>im`9!oqIYY)_OwdcmVYlIwviW%|FW?+nh8F| zZ`xt49erAHzJfqX8@D|>b_$Q&0B+2G6meowEd`;>IUZC={NsF7(UR@j6#js$qWxr4 z=O69WDnF1NIl$kuZ*y#V?x`kqkgdv;$KXsd* z6ZYR7zZ9LkFAAPoIE&9IaxjF9m1J?Wt`PW}93zoyjDvbS6oa>(>v{g~csi$IyFwcW z?MMcl&&%&tH7bP&j&M~bZ>+NUI4O`O_DeFka=dyjM|M;L!(atP0|P{$zCx?QYzURw zXK`mW%qX+nZ^GR~wZ@4v<3UI3VzyJ^?eM$<&ta`!rvQwdg~hg)8s$adf9iR=HmX9} zP*g*%68I_b(H!s`Os(#4rG4isv>weUemDV?9}CcxNLzoZh1%9;00`& zhOWc0xLI1ow#RYu#=beh()Nyb>j+JSp+FtYxld3#&hfMk$e)G&#LWC|=_usvE%Ckbn#Lo*Q zc=_Lh`~MQl|2>V+(*W`R5z9~%;veKix_C-J9PEQSk=GoBm>H~4InkGrZPG+GMFPE5 zCsXkRYEwBqnY+FIH2&brEbE5ixgb8b)cv1}CE|H&Qx>s@Kgz~ooLsnWsh@zc>t{?+YU5Ke&;gXEb(pl$nIEX(QC4RBJBR2UM1S1 zH8Bnmxc&(lh0f&$zw*_Zjli(3KV+sm9u4{J1>w@^(4UNDL5Y$uw{q#vlp{n-zVh?f zZbTT9Lb_U?9IH!hk$9O2JumlQb>sX{z}t4q<61EBBuVX;{hbZ3#haJDocD)gF`S>- zAJ5La>0P;&q{5zVg$FllQU->f&f~`qmRp`12?r!r%Zjv{UUWDziN05XS{p%U2`%^m zpF^oe9@r*U`2j`b>A7Br{1Hn5ui5Yvku6Q(CLs(;U-H9gNO1p#QEry5L_I;Z<_B_O zsw=osK6)luW)OR(Mt?vMNI_zkbf!sLL-@Igss^%u2A|7#p>_O`s3(*F*!Sl`POmw1W&%Y-BQ^J5glrI_49XFI z_LmwH6hLE9H{j(O1ShY#trhr=n&bD+t!h0Gv@_2Az1bepXpLB`AI-_KRu6ZV2$AQh z-f0VXrxBJ(uQm#agF4&SZEyl~2D0L5>MFCFkNX{T!x4-AXG=pHl53tIux$z_hwGN& zt1A>s<}k$^T*=703_63JY|u|T7}kQz#Jpe4q!-(tvfcC@^~tLUqI7ewSiLvxv*?BM z{*3cS_YUxY4t)eO#0z=-DMutB@oeWjId<4O+nVX=>3jVMES|Bd0KsmXWzIcpTEZP- z=ZgLV(isMSW>$l_cYfThm-{DMsPi&yqRWG?T9sJfxvn?++>F@=}j!VqrGm zqr71H_H^?g_7}^-42)LGqQBfW)&-wqlGb|ZH<2lpnF(_EWzSIUR+dH0QAT-X32+Ltf`7?(A^VR;LHo4$s_?10y!$G+~LOGp;0gL3)wzsEPz zR8h>jD%u}_6dNKNAhD1^o;Yv*v48Qke3D+X>R&WoRa?!#`!r$}IRz;`uNlwrS!Dc!{a5~?e5vkH5}^X+*_pr_AcK23k`L4~~%y&W}O6r2{vk*|g` zt~z&~9kY#(TImW`YUYUXsTNxh+LvqHSxZh7QcQ~26Vw;LI_QLBL<+FIWB@xO9x3GN7R^r(=FleyZ=*Cp{cgmEGDk-AmsKw;>pSBUEMS-Hq zL|A1i-*?#)+&oLHWeG;(<5f|y;mAl{Z4n=I>a#I%uF1T=6G^2HTFoo=f-#?r;iR!vW4UknQkAg>6VH$W_*}73105*=icoR# zUpSE73uTQciFUfTVfjr6?r5oqBAjm38AC3Zn2HdQCTaG+*G`USfZ7iIEIcHp0duYe zuf+v}veQEfbf$lzvI%TCrbx@DT}q;limYha$7T^dM6)dA1;Rc#T&f!~&@ofEVA>l( z4u1cc1{&X%u4egSQ29a8g@rZm8;gF!3;0i!=xF>zZK*Hj_LfAa4VQ=@g)x%*gAOB^zrU^7o)ByQ8(`wVlEc0(sQzkx}9j0aZnxE%oCAz{UoA?h*sPf_f8R7moa01oVDFP z#AtXf@;2E+>ABP1qH>o8vw{zw%3!#*o%3(OtXHYM$zg3YvmGBsW?C1ryK;(9rLc}? zd880KtFD>yPk6>s&qVjyk|J%3x0gY8e`FTqgQfT_nIfECpIj79$OjA3}6c`C?!vtT!uECh16MlU3Kg z^;6QAjP@-m4@Y>)`>M5fQ6Uzr#S#uRiYQ$@1G*d&G-!b03wymOwhu5`iUtvnPR1Jj zX6LYi9?{kh1`w4e7h-59@I`m0aR){BAf1_>T+1eE5}T(%X`X9J^vSgWTf#-tOQ$X{ z-lL4p*@p8p%h<{YUWee!p3o+RQ+IAn%vYSxsS}*4Il97hKlNqNf0+4*LcBga!#ckM=H^>wZ|l=3gimJquIzVc&_i^#_>@%1bX< zoWZ&Bu|NBmOYB3CYVuUTs~OUi2lR;tMiif)%`FpMR1Pptli&LDT<+8V0`z_ep3U9~ zZbBK~1k&3ac}WYfJ&zQTE6%O=%M}nR#yj>s$=(`WOGv%Ud1SkFYlV+BW(A^plzI0n zh%|}H>{QibQME@9MsUw-6-Ck^wB1U4uRch_k|cd4qvsxN)pTMGZG}+3^8$Y{F3JvP15HCM{pR zIf+FR)qbVnh<^du9vBard2*ARY%F^&@tCZ;o5VdiGcJSFwL>*a*^mc(E`glKVfJZo zPUrAW`soe;Ub=j9CzujPSl%$(2uC}79pz%Du@+i{r?6L^uye2uDxNNiB|kfjpM{EZ zq9uXGic*MY1ch{{>I#T8Jap^x(Noh(>gzznJ}vs%vgde+=Sp+rqPt(5cI1l~Hftca zs0)Tlzl#_z`t}XRUA%t31z|A_YFMEm;mt326-0nG(pR9U@rZ|vIJ#XS)dVIW`#un1 z4i$k$R?Y-Tz79Kz#?rfh8$CsIj-4ev01-RYod$=?dyiRO1@$o=tsfUao*+$qps}=# zwW*9GiGwllh~8m@DY+!Nyu&QY=e}to@_?nn?}lT619-CXbaGRG9y4~)@Z`Ahi!6!f z4n^BJ3PD|shcEJ4R<~!P#r2o*TlkOr_wa$C@NN#rtJd<(;q{?>_R99~sl`hiDM_T) z^d!!SL_cIgQF@2qugG{noIl^^yCAYrix*@=W3#p zv&*nMi_neI9M`Fd?*4`fFsO$8+Wf_6kS-l2UuX$KJ-m$j>7Vd&9dZJ{$2=z12D&DsJ zB2!Bh)LNafA|tjwPm-hfavs>dSggZOpTinB$S&v=FZsiG5Oc5jldsAWF)(qTy`;1( zq!L72kyubmIbWYAZF~NvmN+$o$@6x6Cxi1uV@2;;MR8rlwx*Zi9Ect_PxCNQ z*xF})v2r0isR6obTA&I(Bky=Mm#w%`oS(6yy^6D~a`h#tMY@W4%>2uEE^L!UUpd<# zLqdsDC5CvVt!9GSNyWf;#nox`^LWipNzKb?%E~HE8lAu1m>

      $d_o)R*A(|oT#6B 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 GxBml}AvB}_ literal 0 HcmV?d00001 diff --git a/packages/quicktype-vscode/src/extension.ts b/packages/quicktype-vscode/src/extension.ts new file mode 100644 index 000000000..3c62a47d2 --- /dev/null +++ b/packages/quicktype-vscode/src/extension.ts @@ -0,0 +1,460 @@ +"use strict"; + +import * as path from "path"; + +import * as vscode from "vscode"; +import { Range } from "vscode"; +import { + quicktype, + languageNamed, + SerializedRenderResult, + defaultTargetLanguages, + JSONSchemaInput, + InputData, + TargetLanguage, + jsonInputForTargetLanguage, + RendererOptions, + Options, + inferenceFlagNames +} from "quicktype-core"; +import { schemaForTypeScriptSources } from "quicktype-typescript-input"; + +const configurationSection = "quicktype"; + +enum Command { + PasteJSONAsTypes = "quicktype.pasteJSONAsTypes", + PasteJSONAsTypesAndSerialization = "quicktype.pasteJSONAsTypesAndSerialization", + PasteSchemaAsTypes = "quicktype.pasteJSONSchemaAsTypes", + PasteSchemaAsTypesAndSerialization = "quicktype.pasteJSONSchemaAsTypesAndSerialization", + PasteTypeScriptAsTypesAndSerialization = "quicktype.pasteTypeScriptAsTypesAndSerialization", + OpenQuicktypeForJSON = "quicktype.openForJSON", + OpenQuicktypeForJSONSchema = "quicktype.openForJSONSchema", + OpenQuicktypeForTypeScript = "quicktype.openForTypeScript", + ChangeTargetLanguage = "quicktype.changeTargetLanguage" +} + +function jsonIsValid(json: string) { + try { + JSON.parse(json); + } catch (e) { + return false; + } + return true; +} + +async function promptTopLevelName(): Promise<{ cancelled: boolean; name: string }> { + let topLevelName = await vscode.window.showInputBox({ + prompt: "Top-level type name?" + }); + + return { + cancelled: topLevelName === undefined, + name: topLevelName || "TopLevel" + }; +} + +type TargetLanguagePick = { + cancelled: boolean; + lang: TargetLanguage; +}; + +async function pickTargetLanguage(): Promise { + const languageChoices = defaultTargetLanguages.map(l => l.displayName).sort(); + let chosenName = await vscode.window.showQuickPick(languageChoices); + const cancelled = chosenName === undefined; + if (chosenName === undefined) { + chosenName = "typescript"; + } + return { cancelled, lang: languageNamed(chosenName)! }; +} + +async function getTargetLanguage(editor: vscode.TextEditor): Promise { + const documentLanguage = editor.document.languageId; + const currentLanguage = languageNamed(documentLanguage); + if (currentLanguage !== undefined) { + return { + cancelled: false, + lang: currentLanguage + }; + } + return await pickTargetLanguage(); +} + +type InputKind = "json" | "schema" | "typescript"; + +async function runQuicktype( + content: string, + kind: InputKind, + lang: TargetLanguage, + topLevelName: string, + forceJustTypes: boolean, + indentation: string | undefined +): Promise { + const configuration = vscode.workspace.getConfiguration(configurationSection); + const justTypes = forceJustTypes || configuration.justTypes; + + const rendererOptions: RendererOptions = {}; + if (justTypes) { + // FIXME: The target language should have a property to return these options. + if (lang.name === "csharp") { + rendererOptions["features"] = "just-types"; + } else if (lang.name === "kotlin") { + rendererOptions["framework"] = "just-types"; + } else { + rendererOptions["just-types"] = "true"; + } + } + + const inputData = new InputData(); + switch (kind) { + case "json": + await inputData.addSource("json", { name: topLevelName, samples: [content] }, () => + jsonInputForTargetLanguage(lang) + ); + break; + case "schema": + await inputData.addSource( + "schema", + { name: topLevelName, schema: content }, + () => new JSONSchemaInput(undefined) + ); + break; + case "typescript": + await inputData.addSource( + "schema", + schemaForTypeScriptSources([`${topLevelName}.ts`]), + () => new JSONSchemaInput(undefined) + ); + break; + default: + throw new Error(`Unrecognized input format: ${kind}`); + } + + const options: Partial = { + lang: lang, + inputData, + rendererOptions, + indentation, + inferMaps: configuration.inferMaps, + inferEnums: configuration.inferEnums, + inferDateTimes: configuration.inferDateTimes, + inferIntegerStrings: configuration.inferIntegerStrings + }; + for (const flag of inferenceFlagNames) { + if (typeof configuration[flag] === "boolean") { + options[flag] = configuration[flag]; + } + } + + return await quicktype(options); +} + +async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justTypes: boolean) { + let indentation: string; + if (editor.options.insertSpaces) { + const tabSize = editor.options.tabSize as number; + indentation = " ".repeat(tabSize); + } else { + indentation = "\t"; + } + + const language = await getTargetLanguage(editor); + if (language.cancelled) { + return; + } + + let content: string; + try { + content = await vscode.env.clipboard.readText(); + } catch (e) { + vscode.window.showErrorMessage("Could not get clipboard contents"); + return; + } + + if (kind !== "typescript" && !jsonIsValid(content)) { + vscode.window.showErrorMessage("Clipboard does not contain valid JSON."); + return; + } + + let topLevelName: string; + if (kind === "typescript") { + topLevelName = "input"; + } else { + const tln = await promptTopLevelName(); + if (tln.cancelled) { + return; + } + topLevelName = tln.name; + } + + let result: SerializedRenderResult; + try { + result = await runQuicktype(content, kind, language.lang, topLevelName, justTypes, indentation); + } catch (e: any) { + // TODO Invalid JSON produces an uncatchable exception from quicktype + // Fix this so we can catch and show an error message. + vscode.window.showErrorMessage(e); + return; + } + + const text = result.lines.join("\n"); + const selection = editor.selection; + editor.edit(builder => { + if (selection.isEmpty) { + builder.insert(selection.start, text); + } else { + builder.replace(new Range(selection.start, selection.end), text); + } + }); +} + +class CodeProvider implements vscode.TextDocumentContentProvider { + readonly scheme: string = "quicktype"; + readonly uri: vscode.Uri; + + private _documentText: string = "{}"; + private _targetCode = ""; + + private readonly _onDidChange = new vscode.EventEmitter(); + private readonly _changeSubscription: vscode.Disposable; + private readonly _onDidChangeVisibleTextEditors: vscode.Disposable; + private readonly _onDidChangeConfiguration: vscode.Disposable; + + private _isOpen = false; + private _timer: NodeJS.Timeout | undefined = undefined; + + constructor( + private _inputKind: InputKind, + private readonly _targetLanguage: TargetLanguage, + private _document: vscode.TextDocument + ) { + this.scheme = `quicktype-${this._targetLanguage.name}`; + // TODO use this.documentName instead of QuickType in uri + this.uri = vscode.Uri.parse(`${this.scheme}:QuickType.${this._targetLanguage.extension}`); + + this._changeSubscription = vscode.workspace.onDidChangeTextDocument(ev => this.textDidChange(ev)); + this._onDidChangeVisibleTextEditors = vscode.window.onDidChangeVisibleTextEditors(editors => + this.visibleTextEditorsDidChange([...editors]) + ); + this._onDidChangeConfiguration = vscode.workspace.onDidChangeConfiguration(ev => + this.configurationDidChange(ev) + ); + } + + dispose(): void { + this._onDidChange.dispose(); + this._changeSubscription.dispose(); + this._onDidChangeVisibleTextEditors.dispose(); + this._onDidChangeConfiguration.dispose(); + } + + get inputKind(): InputKind { + return this._inputKind; + } + + setInputKind(inputKind: InputKind): void { + this._inputKind = inputKind; + } + + get document(): vscode.TextDocument { + return this._document; + } + + get documentName(): string { + const basename = path.basename(this.document.fileName); + const extIndex = basename.lastIndexOf("."); + return extIndex === -1 ? basename : basename.substring(0, extIndex); + } + + setDocument(document: vscode.TextDocument): void { + this._document = document; + } + + get onDidChange(): vscode.Event { + return this._onDidChange.event; + } + + private visibleTextEditorsDidChange(editors: vscode.TextEditor[]) { + const isOpen = editors.some(e => e.document.uri.scheme === this.scheme); + if (!this._isOpen && isOpen) { + this.update(); + } + this._isOpen = isOpen; + } + + private configurationDidChange(ev: vscode.ConfigurationChangeEvent): void { + if (ev.affectsConfiguration(configurationSection)) { + this.update(); + } + } + + private textDidChange(ev: vscode.TextDocumentChangeEvent): void { + if (!this._isOpen) return; + + if (ev.document !== this._document) return; + + if (this._timer) { + clearTimeout(this._timer); + } + this._timer = setTimeout(() => { + this._timer = undefined; + this.update(); + }, 300); + } + + async update(): Promise { + this._documentText = this._document.getText(); + + try { + const result = await runQuicktype( + this._documentText, + this._inputKind, + this._targetLanguage, + this.documentName, + false, + undefined + ); + this._targetCode = result.lines.join("\n"); + + if (!this._isOpen) return; + + this._onDidChange.fire(this.uri); + } catch (e) {} + } + + provideTextDocumentContent(_uri: vscode.Uri, _token: vscode.CancellationToken): vscode.ProviderResult { + this._isOpen = true; + + return this._targetCode; + } +} + +function deduceTargetLanguage(): TargetLanguage { + const documents = vscode.workspace.textDocuments; + const counts = new Map(); + for (const doc of documents) { + const name = doc.languageId; + let count = counts.get(name); + if (count === undefined) { + count = 0; + } + count += 1; + counts.set(name, count); + } + const sorted = Array.from(counts).sort(([_na, ca], [_nb, cb]) => cb - ca); + for (const [name] of sorted) { + const lang = languageNamed(name); + if (lang !== undefined) return lang; + } + return languageNamed("typescript")!; +} + +const lastTargetLanguageUsedKey = "lastTargetLanguageUsed"; + +let extensionContext: vscode.ExtensionContext | undefined = undefined; + +const codeProviders: Map = new Map(); + +let lastCodeProvider: CodeProvider | undefined = undefined; +let explicitlySetTargetLanguage: TargetLanguage | undefined = undefined; + +async function openQuicktype( + inputKind: InputKind, + targetLanguage: TargetLanguage, + document: vscode.TextDocument +): Promise { + let codeProvider = codeProviders.get(targetLanguage.name); + if (codeProvider === undefined) { + codeProvider = new CodeProvider(inputKind, targetLanguage, document); + codeProviders.set(targetLanguage.name, codeProvider); + if (extensionContext !== undefined) { + extensionContext.subscriptions.push( + vscode.workspace.registerTextDocumentContentProvider(codeProvider.scheme, codeProvider) + ); + } + } else { + codeProvider.setInputKind(inputKind); + codeProvider.setDocument(document); + } + + let originalEditor: vscode.TextEditor | undefined; + if (lastCodeProvider !== undefined) { + const doc = lastCodeProvider.document; + originalEditor = vscode.window.visibleTextEditors.find(e => e.document === doc); + } + if (originalEditor === undefined) { + originalEditor = vscode.window.activeTextEditor; + } + + let column: number; + if (originalEditor !== undefined && originalEditor.viewColumn !== undefined) { + column = originalEditor.viewColumn + 1; + } else { + column = 0; + } + + lastCodeProvider = codeProvider; + + codeProvider.update(); + const doc = await vscode.workspace.openTextDocument(codeProvider.uri); + vscode.window.showTextDocument(doc, column, true); +} + +async function openForEditor(editor: vscode.TextEditor, inputKind: InputKind): Promise { + const targetLanguage = + explicitlySetTargetLanguage !== undefined ? explicitlySetTargetLanguage : deduceTargetLanguage(); + await openQuicktype(inputKind, targetLanguage, editor.document); +} + +async function changeTargetLanguage(): Promise { + const pick = await pickTargetLanguage(); + if (pick.cancelled) return; + + explicitlySetTargetLanguage = pick.lang; + if (lastCodeProvider === undefined) return; + + await openQuicktype(lastCodeProvider.inputKind, explicitlySetTargetLanguage, lastCodeProvider.document); + + await extensionContext?.workspaceState.update(lastTargetLanguageUsedKey, explicitlySetTargetLanguage.name); +} + +export async function activate(context: vscode.ExtensionContext): Promise { + extensionContext = context; + + context.subscriptions.push( + vscode.commands.registerTextEditorCommand(Command.PasteJSONAsTypes, editor => + pasteAsTypes(editor, "json", true) + ), + vscode.commands.registerTextEditorCommand(Command.PasteJSONAsTypesAndSerialization, editor => + pasteAsTypes(editor, "json", false) + ), + vscode.commands.registerTextEditorCommand(Command.PasteSchemaAsTypes, editor => + pasteAsTypes(editor, "schema", true) + ), + vscode.commands.registerTextEditorCommand(Command.PasteSchemaAsTypesAndSerialization, editor => + pasteAsTypes(editor, "schema", false) + ), + vscode.commands.registerTextEditorCommand(Command.PasteTypeScriptAsTypesAndSerialization, editor => + pasteAsTypes(editor, "typescript", false) + ), + vscode.commands.registerTextEditorCommand(Command.OpenQuicktypeForJSON, editor => + openForEditor(editor, "json") + ), + vscode.commands.registerTextEditorCommand(Command.OpenQuicktypeForJSONSchema, editor => + openForEditor(editor, "schema") + ), + vscode.commands.registerTextEditorCommand(Command.OpenQuicktypeForTypeScript, editor => + openForEditor(editor, "typescript") + ), + vscode.commands.registerCommand(Command.ChangeTargetLanguage, changeTargetLanguage) + ); + + const maybeName = extensionContext.workspaceState.get(lastTargetLanguageUsedKey); + if (typeof maybeName === "string") { + explicitlySetTargetLanguage = languageNamed(maybeName); + } +} + +export function deactivate(): void { + return; +} diff --git a/packages/quicktype-vscode/tsconfig.json b/packages/quicktype-vscode/tsconfig.json new file mode 100644 index 000000000..2e4d0e4e2 --- /dev/null +++ b/packages/quicktype-vscode/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "lib": [ + "es6", + "esnext.asynciterable" + ], + "sourceMap": true, + "rootDir": ".", + "allowJs": false, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "esModuleInterop": true + }, + "exclude": [ + "node_modules", + ".vscode-test" + ] +} \ No newline at end of file diff --git a/script/publish.sh b/script/publish.sh index a0ec29f03..2960be7e2 100755 --- a/script/publish.sh +++ b/script/publish.sh @@ -1,29 +1,44 @@ #!/usr/bin/env bash +set -e + ./script/patch-npm-version.ts VERSION=$(jq -r '.version' package.json ) npm version $VERSION --workspaces --force -# This is not great, but we need to get the dependencies to workspaces +# Publish core +pushd packages/quicktype-core +npm publish +popd + +# Publish typescript input +pushd packages/quicktype-typescript-input jq --arg version $VERSION \ - '.dependencies."quicktype-core" = $version | .dependencies."quicktype-graphql-input" = $version | .dependencies."quicktype-typescript-input" = $version' \ + '.dependencies."quicktype-core" = $version' \ package.json > package.1.json mv package.1.json package.json - npm publish +popd - +# Publish graphql input +pushd packages/quicktype-graphql-input jq --arg version $VERSION \ '.dependencies."quicktype-core" = $version' \ - packages/quicktype-typescript-input/package.json > package.1.json - -mv package.1.json packages/quicktype-typescript-input/package.json + package.json > package.1.json +mv package.1.json package.json +npm publish +popd +# pubish quicktype jq --arg version $VERSION \ - '.dependencies."quicktype-core" = $version' \ - packages/quicktype-graphql-input/package.json > package.1.json - -mv package.1.json packages/quicktype-graphql-input/package.json + '.dependencies."quicktype-core" = $version | .dependencies."quicktype-graphql-input" = $version | .dependencies."quicktype-typescript-input" = $version' \ + package.json > package.1.json +mv package.1.json package.json +npm publish + -npm publish --workspaces --if-present \ No newline at end of file +# Publish vscode extension +pushd packages/quicktype-vscode +npm run pub +popd \ No newline at end of file From 7e168a55e181a197b26adbda778b17d8875d8986 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 13 Apr 2024 13:19:36 -0700 Subject: [PATCH 42/99] remove unused Smithy4sRenderer (#2548) --- .../quicktype-core/src/language/Scala3.ts | 62 ++----------------- 1 file changed, 4 insertions(+), 58 deletions(-) diff --git a/packages/quicktype-core/src/language/Scala3.ts b/packages/quicktype-core/src/language/Scala3.ts index 56437c02b..6b941248b 100644 --- a/packages/quicktype-core/src/language/Scala3.ts +++ b/packages/quicktype-core/src/language/Scala3.ts @@ -245,10 +245,10 @@ export class Scala3Renderer extends ConvenienceRenderer { delimiter === "curly" ? ["{", "}"] : delimiter === "paren" - ? ["(", ")"] - : delimiter === "none" - ? ["", ""] - : ["{", "})"]; + ? ["(", ")"] + : delimiter === "none" + ? ["", ""] + : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); @@ -485,60 +485,6 @@ export class UpickleRenderer extends Scala3Renderer { } } -export class Smithy4sRenderer extends Scala3Renderer { - protected emitHeader(): void { - if (this.leadingComments !== undefined) { - this.emitComments(this.leadingComments); - } else { - this.emitUsageHeader(); - } - - this.ensureBlankLine(); - this.emitLine("namespace ", this._scalaOptions.packageName); - this.ensureBlankLine(); - } - - protected emitTopLevelArray(t: ArrayType, name: Name): void { - const elementType = this.scalaType(t.items); - this.emitLine(["list ", name, " { member : ", elementType, "}"]); - } - - protected emitTopLevelMap(t: MapType, name: Name): void { - const elementType = this.scalaType(t.values); - this.emitLine(["map ", name, " { map[ key : String , value : ", elementType, "}"]); - } - - protected emitEmptyClassDefinition(c: ClassType, className: Name): void { - this.emitDescription(this.descriptionForType(c)); - this.emitLine("structure ", className, "{}"); - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - this.ensureBlankLine(); - this.emitItem(["enum ", enumName, " { "]); - let count = e.cases.size; - this.forEachEnumCase(e, "none", (name, jsonName) => { - // if (!(jsonName == "")) { - /* const backticks = - shouldAddBacktick(jsonName) || - jsonName.includes(" ") || - !isNaN(parseInt(jsonName.charAt(0))) - if (backticks) {this.emitItem("`")} else */ - this.emitLine(); - this.emitItem([name, ' = "', jsonName, '"']); - // if (backticks) {this.emitItem("`")} - if (--count > 0) this.emitItem([","]); - //} else { - //--count - //} - }); - this.ensureBlankLine(); - this.emitItem(["}"]); - } -} - export class CirceRenderer extends Scala3Renderer { seenUnionTypes: Array = []; From 6ab969e6950ec8212058d84e7a62586d3ec40523 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 13:19:53 -0700 Subject: [PATCH 43/99] build(deps): bump moment from 2.29.4 to 2.30.1 (#2546) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a575b26e..e2333bffa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "cross-fetch": "^4.0.0", "graphql": "^0.11.7", "lodash": "^4.17.21", - "moment": "^2.29.4", + "moment": "^2.30.1", "quicktype-core": "20.0.12", "quicktype-graphql-input": "20.0.2", "quicktype-typescript-input": "20.0.2", @@ -4658,9 +4658,9 @@ } }, "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { "node": "*" } @@ -10202,9 +10202,9 @@ } }, "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" }, "ms": { "version": "2.1.2", diff --git a/package.json b/package.json index 3786edc66..016382f53 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "cross-fetch": "^4.0.0", "graphql": "^0.11.7", "lodash": "^4.17.21", - "moment": "^2.29.4", + "moment": "^2.30.1", "quicktype-core": "20.0.12", "quicktype-graphql-input": "20.0.2", "quicktype-typescript-input": "20.0.2", From 12e3ad176687c40235a5d452664c7dc1ffb4b970 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 13:20:04 -0700 Subject: [PATCH 44/99] build(deps-dev): bump @types/shelljs from 0.8.12 to 0.8.15 (#2547) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e2333bffa..5395f111c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "@types/graphql": "^0.11.7", "@types/lodash": "^4.14.197", "@types/semver": "^7.5.0", - "@types/shelljs": "^0.8.12", + "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", "ajv": "^5.5.2", @@ -973,9 +973,9 @@ "dev": true }, "node_modules/@types/shelljs": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.12.tgz", - "integrity": "sha512-ZA8U81/gldY+rR5zl/7HSHrG2KDfEb3lzG6uCUDhW1DTQE9yC/VBQ45fXnXq8f3CgInfhZmjtdu/WOUlrXRQUg==", + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz", + "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==", "dev": true, "dependencies": { "@types/glob": "~7.2.0", @@ -7470,9 +7470,9 @@ "dev": true }, "@types/shelljs": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.12.tgz", - "integrity": "sha512-ZA8U81/gldY+rR5zl/7HSHrG2KDfEb3lzG6uCUDhW1DTQE9yC/VBQ45fXnXq8f3CgInfhZmjtdu/WOUlrXRQUg==", + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz", + "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==", "dev": true, "requires": { "@types/glob": "~7.2.0", diff --git a/package.json b/package.json index 016382f53..9332eebb6 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/graphql": "^0.11.7", "@types/lodash": "^4.14.197", "@types/semver": "^7.5.0", - "@types/shelljs": "^0.8.12", + "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", "ajv": "^5.5.2", From 10e8b0aff0cabb85ebbe970fa29c7ebff65fe9e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 13:20:33 -0700 Subject: [PATCH 45/99] build(deps): bump yaml from 2.3.1 to 2.4.1 (#2544) --- package-lock.json | 19 +++++++++++-------- packages/quicktype-core/package.json | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5395f111c..dc9bc6327 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6586,9 +6586,12 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -6690,7 +6693,7 @@ "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", - "yaml": "^2.3.1" + "yaml": "^2.4.1" }, "devDependencies": { "@types/browser-or-node": "^1.3.2", @@ -10613,7 +10616,7 @@ "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", - "yaml": "^2.3.1" + "yaml": "^2.4.1" }, "dependencies": { "browser-or-node": { @@ -11806,9 +11809,9 @@ "dev": true }, "yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==" }, "yargs": { "version": "17.6.2", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 0550516ff..e5d1e17a8 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -26,7 +26,7 @@ "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", - "yaml": "^2.3.1" + "yaml": "^2.4.1" }, "devDependencies": { "@types/browser-or-node": "^1.3.2", From 8575cded82321da6fccf4ea619fadd604f66242c Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 13 Apr 2024 13:21:28 -0700 Subject: [PATCH 46/99] fix to_float output for Python (#2549) --- packages/quicktype-core/src/language/Python.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Python.ts b/packages/quicktype-core/src/language/Python.ts index bce7db095..5be720512 100644 --- a/packages/quicktype-core/src/language/Python.ts +++ b/packages/quicktype-core/src/language/Python.ts @@ -712,7 +712,7 @@ export class JSONPythonRenderer extends PythonRenderer { protected emitToFloatConverter(): void { this.emitBlock(["def to_float(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> float"), ":"], () => { - this.emitLine("assert isinstance(x, float)"); + this.emitLine("assert isinstance(x, (int, float))"); this.emitLine("return x"); }); } From a5508419b3678cbcb278bab1cd9e7b089e7d3174 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 13 Apr 2024 13:23:50 -0700 Subject: [PATCH 47/99] fix(ts-input): Replace topLevelName for TypeScript input if first type is export default (#2550) --- .../quicktype-typescript-input/src/index.ts | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/quicktype-typescript-input/src/index.ts b/packages/quicktype-typescript-input/src/index.ts index 145cc50e1..6115ef585 100644 --- a/packages/quicktype-typescript-input/src/index.ts +++ b/packages/quicktype-typescript-input/src/index.ts @@ -35,7 +35,24 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem const schema = generateSchema(program, "*", settings); const uris: string[] = []; - let topLevelName: string | undefined = undefined; + let topLevelName: string = ""; + + // if there is a type that is `export default`, swap the corresponding ref + if (schema?.definitions?.default) { + const defaultDefinition = schema?.definitions?.default; + const matchingDefaultName = Object.entries(schema?.definitions ?? {}).find( + ([_name, definition]) => (definition as Record)["$ref"] === "#/definitions/default" + )?.[0]; + + if (matchingDefaultName) { + topLevelName = matchingDefaultName; + (defaultDefinition as Record).title = topLevelName; + + schema.definitions[matchingDefaultName] = defaultDefinition; + schema.definitions.default = { $ref: `#/definitions/${matchingDefaultName}` }; + } + } + if (schema !== null && typeof schema === "object" && typeof schema.definitions === "object") { for (const name of Object.getOwnPropertyNames(schema.definitions)) { const definition = schema.definitions[name]; @@ -59,22 +76,18 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem uris.push(`#/definitions/${name}`); - if (topLevelName === undefined) { + if (!topLevelName) { if (typeof definition.title === "string") { topLevelName = definition.title; } else { topLevelName = name; } - } else { - topLevelName = ""; } } } if (uris.length === 0) { uris.push("#/definitions/"); } - if (topLevelName === undefined) { - topLevelName = ""; - } + return { schema: JSON.stringify(schema), name: topLevelName, uris, isConverted: true }; } From 68206893158df83eb9f851f04f533c6fcb4a0a79 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 20:30:18 +0000 Subject: [PATCH 48/99] style: format code with Prettier (#2561) --- packages/quicktype-core/src/language/Scala3.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/language/Scala3.ts b/packages/quicktype-core/src/language/Scala3.ts index 6b941248b..2f5c34e81 100644 --- a/packages/quicktype-core/src/language/Scala3.ts +++ b/packages/quicktype-core/src/language/Scala3.ts @@ -245,10 +245,10 @@ export class Scala3Renderer extends ConvenienceRenderer { delimiter === "curly" ? ["{", "}"] : delimiter === "paren" - ? ["(", ")"] - : delimiter === "none" - ? ["", ""] - : ["{", "})"]; + ? ["(", ")"] + : delimiter === "none" + ? ["", ""] + : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); From 19c0b3f325e01c9e9757ec246135a4fd66980481 Mon Sep 17 00:00:00 2001 From: Breno Xavier <7716247+brenoxp@users.noreply.github.com> Date: Sat, 13 Apr 2024 18:02:11 -0400 Subject: [PATCH 49/99] Swift - Integrate access level settings with CodingKeys protocol conformance. Allow customizing the protocols inherited by CodingKeys. (#2518) --- packages/quicktype-core/src/language/Swift.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/Swift.ts b/packages/quicktype-core/src/language/Swift.ts index 04fc431a1..7ebb48844 100644 --- a/packages/quicktype-core/src/language/Swift.ts +++ b/packages/quicktype-core/src/language/Swift.ts @@ -49,6 +49,8 @@ export const swiftOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), convenienceInitializers: new BooleanOption("initializers", "Generate initializers and mutators", true), explicitCodingKeys: new BooleanOption("coding-keys", "Explicit CodingKey values in Codable types", true), + codingKeysProtocol: new StringOption("coding-keys-protocol", "CodingKeys implements protocols", + "protocol1, protocol2...", "", "secondary"), alamofire: new BooleanOption("alamofire", "Alamofire extensions", false), namedTypePrefix: new StringOption("type-prefix", "Prefix for type names", "PREFIX", "", "secondary"), useClasses: new EnumOption("struct-or-class", "Structs or classes", [ @@ -142,6 +144,7 @@ export class SwiftTargetLanguage extends TargetLanguage { swiftOptions.dense, swiftOptions.convenienceInitializers, swiftOptions.explicitCodingKeys, + swiftOptions.codingKeysProtocol, swiftOptions.accessLevel, swiftOptions.alamofire, swiftOptions.linux, @@ -745,7 +748,13 @@ export class SwiftRenderer extends ConvenienceRenderer { }); if (!allPropertiesRedundant && c.getProperties().size > 0) { this.ensureBlankLine(); - this.emitBlock("enum CodingKeys: String, CodingKey", () => { + let enumDeclaration = this.accessLevel; + enumDeclaration += "enum CodingKeys: String, CodingKey"; + if (this._options.codingKeysProtocol && this._options.codingKeysProtocol.length > 0) { + enumDeclaration += ", "; + enumDeclaration += this._options.codingKeysProtocol; + } + this.emitBlock(enumDeclaration, () => { for (const group of groups) { const { name, label } = group[0]; if (this._options.explicitCodingKeys && label !== undefined) { From 32ec44e53bd8a29c83894bd5106dbd21dee2f45d Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 16:46:49 -0700 Subject: [PATCH 50/99] style: format code with Prettier (#2563) --- packages/quicktype-core/src/language/Swift.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/language/Swift.ts b/packages/quicktype-core/src/language/Swift.ts index 7ebb48844..cb02665de 100644 --- a/packages/quicktype-core/src/language/Swift.ts +++ b/packages/quicktype-core/src/language/Swift.ts @@ -49,8 +49,13 @@ export const swiftOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), convenienceInitializers: new BooleanOption("initializers", "Generate initializers and mutators", true), explicitCodingKeys: new BooleanOption("coding-keys", "Explicit CodingKey values in Codable types", true), - codingKeysProtocol: new StringOption("coding-keys-protocol", "CodingKeys implements protocols", - "protocol1, protocol2...", "", "secondary"), + codingKeysProtocol: new StringOption( + "coding-keys-protocol", + "CodingKeys implements protocols", + "protocol1, protocol2...", + "", + "secondary" + ), alamofire: new BooleanOption("alamofire", "Alamofire extensions", false), namedTypePrefix: new StringOption("type-prefix", "Prefix for type names", "PREFIX", "", "secondary"), useClasses: new EnumOption("struct-or-class", "Structs or classes", [ From e4a44309af3fb8669b2458745aa94fd4edca75e7 Mon Sep 17 00:00:00 2001 From: Mitchell Sayre <40548527+mitchsayre@users.noreply.github.com> Date: Sat, 13 Apr 2024 19:49:09 -0400 Subject: [PATCH 51/99] Elixir (#2553) --- .github/workflows/test-pr.yaml | 8 + packages/quicktype-core/src/index.ts | 1 + packages/quicktype-core/src/language/All.ts | 2 + .../quicktype-core/src/language/Elixir.ts | 1076 +++++++++++++++++ test/fixtures.ts | 3 + test/fixtures/elixir/.gitignore | 26 + test/fixtures/elixir/main.exs | 13 + test/fixtures/elixir/mix.exs | 31 + test/fixtures/elixir/mix.lock | 3 + test/languages.ts | 61 + 10 files changed, 1224 insertions(+) create mode 100644 packages/quicktype-core/src/language/Elixir.ts create mode 100644 test/fixtures/elixir/.gitignore create mode 100644 test/fixtures/elixir/main.exs create mode 100644 test/fixtures/elixir/mix.exs create mode 100644 test/fixtures/elixir/mix.lock diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index b9af1b9f2..fcc5af749 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -36,6 +36,7 @@ jobs: - ruby - php - scala3,schema-scala3 + - elixir,schema-elixir,graphql-elixir # Partially working # - schema-typescript # TODO Unify with typescript once fixed @@ -176,6 +177,13 @@ jobs: - run: echo '@main def hello() = println("We need this spam print statement for bloop to exit correctly...")' | scala-cli _ if: ${{ contains(matrix.fixture, 'scala3') }} + - name: Install Elixir + if: ${{ contains(matrix.fixture, 'elixir') }} + uses: erlef/setup-beam@v1 + with: + elixir-version: "1.15.7" + otp-version: "26.0" + - run: QUICKTEST=true FIXTURE=${{ matrix.fixture }} npm test test-complete: diff --git a/packages/quicktype-core/src/index.ts b/packages/quicktype-core/src/index.ts index aa04f0857..67711c93d 100644 --- a/packages/quicktype-core/src/index.ts +++ b/packages/quicktype-core/src/index.ts @@ -113,3 +113,4 @@ export { RubyTargetLanguage, RubyRenderer, rubyOptions } from "./language/ruby"; export { CrystalTargetLanguage, CrystalRenderer } from "./language/Crystal"; export { HaskellTargetLanguage, HaskellRenderer, haskellOptions } from "./language/Haskell"; export { DartTargetLanguage, DartRenderer, dartOptions } from "./language/Dart"; +export { ElixirTargetLanguage, ElixirRenderer, elixirOptions } from "./language/Elixir"; diff --git a/packages/quicktype-core/src/language/All.ts b/packages/quicktype-core/src/language/All.ts index 19313870a..ec3985ef4 100644 --- a/packages/quicktype-core/src/language/All.ts +++ b/packages/quicktype-core/src/language/All.ts @@ -27,6 +27,7 @@ import { HaskellTargetLanguage } from "./Haskell"; import { TypeScriptZodTargetLanguage } from "./TypeScriptZod"; import { PhpTargetLanguage } from "./Php"; import { TypeScriptEffectSchemaTargetLanguage } from "./TypeScriptEffectSchema"; +import { ElixirTargetLanguage } from "./Elixir"; export const all: TargetLanguage[] = [ new CSharpTargetLanguage(), @@ -54,6 +55,7 @@ export const all: TargetLanguage[] = [ new HaskellTargetLanguage(), new TypeScriptZodTargetLanguage(), new TypeScriptEffectSchemaTargetLanguage(), + new ElixirTargetLanguage(), new PhpTargetLanguage() ]; diff --git a/packages/quicktype-core/src/language/Elixir.ts b/packages/quicktype-core/src/language/Elixir.ts new file mode 100644 index 000000000..ddbbcdaa7 --- /dev/null +++ b/packages/quicktype-core/src/language/Elixir.ts @@ -0,0 +1,1076 @@ +import unicode from "unicode-properties"; + +import { Sourcelike } from "../Source"; +import { Namer, Name } from "../Naming"; +import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { TargetLanguage } from "../TargetLanguage"; +import { Option, BooleanOption, OptionValues, getOptionValues, StringOption } from "../RendererOptions"; +import { Type, EnumType, ClassType, UnionType, ArrayType, MapType, PrimitiveType } from "../Type"; +import { matchType, nullableFromUnion } from "../TypeUtils"; + +import { + legalizeCharacters, + splitIntoWords, + combineWords, + firstUpperWordStyle, + allUpperWordStyle, + allLowerWordStyle, + utf32ConcatMap, + isPrintable, + escapeNonPrintableMapper, + intToHex, + isLetterOrUnderscore +} from "../support/Strings"; +import { RenderContext } from "../Renderer"; + +const forbiddenModuleNames = [ + "Access", + "Agent", + "Any", + "Application", + "ArgumentError", + "ArithmeticError", + "Atom", + "BadArityError", + "BadBooleanError", + "BadFunctionError", + "BadMapError", + "BadStructError", + "Base", + "Behaviour", + "Bitwise", + "Calendar", + "CaseClauseError", + "Code", + "Collectable", + "CondClauseError", + "Config", + "Date", + "DateTime", + "Dict", + "DynamicSupervisor", + "Enum", + "ErlangError", + "Exception", + "File", + "Float", + "Function", + "FunctionClauseError", + "GenEvent", + "GenServer", + "HashDict", + "HashSet", + "IO", + "Inspect", + "Integer", + "Kernel", + "KeyError", + "Keyword", + "List", + "Macro", + "Map", + "MapSet", + "MatchError", + "Module", + "Node", + "OptionParser", + "Path", + "Port", + "Process", + "Protocol", + "Range", + "Record", + "Regex", + "Registry", + "RuntimeError", + "Set", + "Stream", + "String", + "StringIO", + "Supervisor", + "SyntaxError", + "System", + "SystemLimitError", + "Task", + "Time", + "TokenMissingError", + "Tuple", + "URI", + "UndefinedFunctionError", + "UnicodeConversionError", + "Version", + "WithClauseError" +]; +const reservedWords = [ + "def", + "defmodule", + "use", + "import", + "alias", + "true", + "false", + "nil", + "when", + "and", + "or", + "not", + "in", + "fn", + "do", + "end", + "catch", + "rescue", + "after", + "else" +]; + +function unicodeEscape(codePoint: number): string { + return `\\u{${intToHex(codePoint, 0)}}`; +} + +function capitalizeFirstLetter(str: string) { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); + +function escapeDoubleQuotes(str: string) { + return str.replace(/"/g, '\\"'); +} + +function escapeNewLines(str: string) { + return str.replace(/\n/g, "\\n"); +} + +export const elixirOptions = { + justTypes: new BooleanOption("just-types", "Plain types only", false), + namespace: new StringOption("namespace", "Specify a module namespace", "NAME", "") +}; + +export class ElixirTargetLanguage extends TargetLanguage { + constructor() { + super("Elixir", ["elixir"], "ex"); + } + + protected getOptions(): Option[] { + return [elixirOptions.justTypes, elixirOptions.namespace]; + } + + get supportsOptionalClassProperties(): boolean { + return true; + } + + protected get defaultIndentation(): string { + return " "; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): ElixirRenderer { + return new ElixirRenderer(this, renderContext, getOptionValues(elixirOptions, untypedOptionValues)); + } +} + +const isStartCharacter = isLetterOrUnderscore; + +function isPartCharacter(utf16Unit: number): boolean { + const category: string = unicode.getCategory(utf16Unit); + return ["Nd", "Pc", "Mn", "Mc"].indexOf(category) >= 0 || isStartCharacter(utf16Unit); +} + +const legalizeName = legalizeCharacters(isPartCharacter); + +function simpleNameStyle(original: string, uppercase: boolean): string { + if (/^[0-9]+$/.test(original)) { + original = `${original}N`; + } + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + uppercase ? firstUpperWordStyle : allLowerWordStyle, + uppercase ? firstUpperWordStyle : allLowerWordStyle, + allUpperWordStyle, + allUpperWordStyle, + "", + isStartCharacter + ); +} + +function memberNameStyle(original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + allLowerWordStyle, + allLowerWordStyle, + allLowerWordStyle, + allLowerWordStyle, + "_", + isStartCharacter + ); +} + +export class ElixirRenderer extends ConvenienceRenderer { + constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + private readonly _options: OptionValues + ) { + super(targetLanguage, renderContext); + } + + protected get commentLineStart(): string { + return "# "; + } + + protected get needsTypeDeclarationBeforeUse(): boolean { + return true; + } + + protected canBeForwardDeclared(t: Type): boolean { + return "class" === t.kind; + } + + protected forbiddenNamesForGlobalNamespace(): string[] { + return [...forbiddenModuleNames, ...reservedWords.map(word => capitalizeFirstLetter(word))]; + } + + protected forbiddenForObjectProperties(_c: ClassType, _classNamed: Name): ForbiddenWordsInfo { + return { names: reservedWords, includeGlobalForbidden: true }; + } + + protected makeNamedTypeNamer(): Namer { + return new Namer("types", n => simpleNameStyle(n, true), []); + } + + protected namerForObjectProperty(): Namer { + return new Namer("properties", memberNameStyle, []); + } + + protected makeUnionMemberNamer(): Namer { + return new Namer("properties", memberNameStyle, []); + } + + protected makeEnumCaseNamer(): Namer { + return new Namer("enum-cases", n => simpleNameStyle(n, true), []); + } + + private nameForNamedTypeWithNamespace(t: Type): Sourcelike { + if (this._options.namespace) { + return [this._options.namespace, ".", this.nameForNamedType(t)]; + } else { + return [this.nameForNamedType(t)]; + } + } + + private nameWithNamespace(n: Name): Sourcelike { + if (this._options.namespace) { + return [this._options.namespace, ".", n]; + } else { + return [n]; + } + } + + private elixirType(t: Type, isOptional = false): Sourcelike { + const optional = isOptional ? " | nil" : ""; + return matchType( + t, + _anyType => ["any()", optional], + _nullType => ["nil"], + _boolType => ["boolean()", optional], + _integerType => ["integer()", optional], + _doubleType => ["float()", optional], + _stringType => ["String.t()", optional], + arrayType => ["[", this.elixirType(arrayType.items), "]", optional], + classType => [this.nameForNamedTypeWithNamespace(classType), ".t()", optional], + mapType => ["%{String.t() => ", this.elixirType(mapType.values), "}", optional], + enumType => [this.nameForNamedTypeWithNamespace(enumType), ".t()", optional], + unionType => { + const children = [...unionType.getChildren()].map(t => this.elixirType(t)); + return [ + children.flatMap((element, index) => (index === children.length - 1 ? element : [element, " | "])), + optional + ]; + } + ); + } + + private patternMatchClauseDecode(t: Type, attributeName: Sourcelike, suffix = ""): Sourcelike { + return matchType( + t, + _anyType => [], + _nullType => ["def decode_", attributeName, suffix, "(value) when is_nil(value), do: value"], + _boolType => ["def decode_", attributeName, suffix, "(value) when is_boolean(value), do: value"], + _integerType => ["def decode_", attributeName, suffix, "(value) when is_integer(value), do: value"], + _doubleType => [ + "def decode_", + attributeName, + suffix, + "(value) when is_float(value), do: value\n", + "def decode_", + attributeName, + suffix, + "(value) when is_integer(value), do: value" + ], + _stringType => ["def decode_", attributeName, suffix, "(value) when is_binary(value), do: value"], + _arrayType => ["def decode_", attributeName, suffix, "(value) when is_list(value), do: value"], + classType => { + const requiredAttributeArgs: Sourcelike[] = []; + this.forEachClassProperty(classType, "none", (_name, jsonName, p) => { + if (!p.isOptional) { + requiredAttributeArgs.push(['"', jsonName, '" => _,']); + } + }); + return [ + "def decode_", + attributeName, + suffix, + "(%{", + requiredAttributeArgs, + "} = value), do: ", + this.nameForNamedTypeWithNamespace(classType), + ".from_map(value)" + ]; + }, + _mapType => ["def decode_", attributeName, suffix, "(value) when is_map(value), do: value"], + enumType => [ + "def decode_", + attributeName, + suffix, + "(value) when is_binary(value)", + ", do: ", + this.nameForNamedTypeWithNamespace(enumType), + ".decode(value)" + ], + _unionType => [] + ); + } + + private patternMatchClauseEncode(t: Type, attributeName: Sourcelike, suffix = ""): Sourcelike { + return matchType( + t, + _anyType => [], + _nullType => ["def encode_", attributeName, suffix, "(value) when is_nil(value), do: value"], + _boolType => ["def encode_", attributeName, suffix, "(value) when is_boolean(value), do: value"], + _integerType => ["def encode_", attributeName, suffix, "(value) when is_integer(value), do: value"], + _doubleType => [ + "def encode_", + attributeName, + suffix, + "(value) when is_float(value), do: value\n", + "def encode_", + attributeName, + suffix, + "(value) when is_integer(value), do: value" + ], + _stringType => ["def encode_", attributeName, suffix, "(value) when is_binary(value), do: value"], + _arrayType => ["def encode_", attributeName, suffix, "(value) when is_list(value), do: value"], + classType => { + const requiredAttributeArgs: Sourcelike[] = []; + this.forEachClassProperty(classType, "none", (_name, jsonName, p) => { + if (!p.isOptional) { + requiredAttributeArgs.push(['"', jsonName, '" => _,']); + } + }); + return [ + "def encode_", + attributeName, + suffix, + "(%", + this.nameForNamedTypeWithNamespace(classType), + "{} = value), do: ", + this.nameForNamedTypeWithNamespace(classType), + ".to_map(value)" + ]; + }, + _mapType => ["def encode_", attributeName, suffix, "(value) when is_map(value), do: value"], + enumType => [ + "def encode_", + attributeName, + suffix, + "(value) when is_atom(value)", + ", do: ", + this.nameForNamedTypeWithNamespace(enumType), + ".encode(value)" + ], + _unionType => [] + ); + } + + private sortAndFilterPatternMatchTypes(types: Type[]): Type[] { + return types + .filter(type => !(type instanceof UnionType)) + .sort((a, b) => { + if (a instanceof ClassType && !(b instanceof ClassType)) { + return -1; + } else if (b instanceof ClassType && !(a instanceof ClassType)) { + return 1; + } else if (a.kind === "bool" && b.kind !== "bool") { + return -1; + } else if (b.kind === "bool" && a.kind !== "bool") { + return 1; + } else if (a instanceof EnumType && !(b instanceof EnumType)) { + return -1; + } else if (b instanceof EnumType && !(a instanceof EnumType)) { + return 1; + } else if (a.isPrimitive() && !b.isPrimitive()) { + return -1; + } else if (b.isPrimitive() && !a.isPrimitive()) { + return 1; + } else { + return 0; + } + }); + } + + private emitPatternMatches(types: Type[], name: Sourcelike, parentName: Sourcelike, suffix = "", optional = false) { + this.ensureBlankLine(); + + let typesToMatch = this.sortAndFilterPatternMatchTypes(types); + if (typesToMatch.length < 2) { + return; + } + + if (typesToMatch.find(type => type.kind === "double")) { + typesToMatch = typesToMatch.filter(type => type.kind !== "integer"); + } + + typesToMatch.forEach(type => { + this.emitLine(this.patternMatchClauseDecode(type, name, suffix)); + }); + + if (optional && !typesToMatch.find(type => type.kind === "null")) { + this.emitLine("def decode_", name, suffix, "(value) when is_nil(value), do: value"); + } + + this.emitLine( + "def decode_", + name, + suffix, + '(_), do: {:error, "Unexpected type when decoding ', + parentName, + ".", + name, + '"}' + ); + + this.ensureBlankLine(); + + typesToMatch.forEach(type => { + this.emitLine(this.patternMatchClauseEncode(type, name, suffix)); + }); + + if (optional && !typesToMatch.find(type => type.kind === "null")) { + this.emitLine("def encode_", name, suffix, "(value) when is_nil(value), do: value"); + } + + this.emitLine( + "def encode_", + name, + suffix, + '(_), do: {:error, "Unexpected type when encoding ', + parentName, + ".", + name, + '"}' + ); + + this.ensureBlankLine(); + } + + private nameOfTransformFunction(t: Type, name: Name | Sourcelike, encode = false, prefix = ""): Sourcelike { + let mode = "decode"; + if (encode) { + mode = "encode"; + } + return matchType( + t, + _anyType => [], + _nullType => [], + _boolType => [], + _integerType => [], + _doubleType => [], + _stringType => [], + _arrayType => [], + classType => [this.nameForNamedTypeWithNamespace(classType), `.${encode ? "to" : "from"}_map`], + _mapType => [], + enumType => { + return [this.nameForNamedTypeWithNamespace(enumType), `.${mode}`]; + }, + _unionType => { + return [`${mode}_`, name, prefix]; + } + ); + } + + private fromDynamic(t: Type, jsonName: string, name: Name, optional = false): Sourcelike { + const primitive = ['m["', jsonName, '"]']; + + return matchType( + t, + _anyType => primitive, + _nullType => primitive, + _boolType => primitive, + _integerType => primitive, + _doubleType => primitive, + _stringType => primitive, + arrayType => { + const arrayElement = arrayType.items; + if (arrayElement instanceof ArrayType) { + return primitive; + } else if (arrayElement.isPrimitive()) { + return primitive; + } else if (arrayElement instanceof MapType) { + return primitive; + } else { + if (optional) { + return [ + "m", + '["', + jsonName, + '"] && Enum.map(m["', + jsonName, + '"], &', + this.nameOfTransformFunction(arrayElement, name, false, "_element"), + "/1)" + ]; + } else { + return [ + 'Enum.map(m["', + jsonName, + '"], &', + this.nameOfTransformFunction(arrayElement, name, false, "_element"), + "/1)" + ]; + } + } + }, + classType => [ + optional ? [primitive, " && "] : "", + this.nameForNamedTypeWithNamespace(classType), + ".from_map(", + primitive, + ")" + ], + mapType => { + const mapValueTypes = [...mapType.values.getChildren()]; + const mapValueTypesNotPrimitive = mapValueTypes.filter(type => !(type instanceof PrimitiveType)); + if (mapValueTypesNotPrimitive.length === 0) { + return [primitive]; + } else { + if (mapType.values.kind === "union") { + return [ + 'm["', + jsonName, + '"]\n|> Map.new(fn {key, value} -> {key, ', + this.nameOfTransformFunction(mapType.values, jsonName, false), + "_value(value)} end)" + ]; + } else if (mapType.values instanceof EnumType || mapType.values instanceof ClassType) { + return [ + 'm["', + jsonName, + '"]\n|> Map.new(fn {key, value} -> {key, ', + this.nameOfTransformFunction(mapType.values, jsonName, false), + "(value)} end)" + ]; + } + return [primitive]; + } + }, + enumType => { + return [ + optional ? [primitive, " && "] : "", + this.nameOfTransformFunction(enumType, name), + "(", + primitive, + ")" + ]; + }, + unionType => { + const unionTypes = [...unionType.getChildren()]; + const unionPrimitiveTypes = unionTypes.filter(type => type.isPrimitive()); + if (unionTypes.length === unionPrimitiveTypes.length) { + return ['m["', jsonName, '"]']; + } + + const nullable = nullableFromUnion(unionType); + + if (nullable !== null) { + if (nullable instanceof ClassType) { + return this.fromDynamic(nullable, jsonName, name, true); + } + + const nullableTypes = [...nullable.getChildren()]; + if (nullableTypes.length < 2) { + return this.fromDynamic(nullable, jsonName, name, true); + } + return ['m["', jsonName, '"] && decode_', name, '(m["', jsonName, '"])']; + } + return ["decode_", name, '(m["', jsonName, '"])']; + } + ); + } + + private toDynamic(t: Type, e: Sourcelike, optional = false): Sourcelike { + const expression = ["struct.", e]; + return matchType( + t, + _anyType => expression, + _nullType => expression, + _boolType => expression, + _integerType => expression, + _doubleType => expression, + _stringType => expression, + arrayType => { + const arrayElement = arrayType.items; + if (arrayElement instanceof ArrayType) { + return expression; + } + if (arrayElement.isPrimitive()) { + return expression; + } else if (arrayElement instanceof MapType) { + return expression; + } else { + if (arrayElement.kind === "array") { + return expression; + } else { + if (optional) { + return [ + "struct.", + e, + " && Enum.map(struct.", + e, + ", &", + this.nameOfTransformFunction(arrayElement, e, true, "_element"), + "/1)" + ]; + } else { + return [ + "struct.", + e, + " && Enum.map(struct.", + e, + ", &", + this.nameOfTransformFunction(arrayElement, e, true, "_element"), + "/1)" + ]; + } + } + } + }, + classType => [ + optional ? ["struct.", e, " && "] : "", + this.nameForNamedTypeWithNamespace(classType), + ".to_map(", + "struct.", + e, + ")" + ], + mapType => { + const mapValueTypes = [...mapType.values.getChildren()]; + const mapValueTypesNotPrimitive = mapValueTypes.filter(type => !(type instanceof PrimitiveType)); + if (mapValueTypesNotPrimitive.length === 0) { + return [expression]; + } else { + if (mapType.values.kind === "union") { + return [ + "struct.", + e, + "\n|> Map.new(fn {key, value} -> {key, ", + this.nameOfTransformFunction(mapType.values, e, true), + "_value(value)} end)" + ]; + } else if (mapType.values instanceof EnumType || mapType.values instanceof ClassType) { + return [ + "struct.", + e, + "\n|> Map.new(fn {key, value} -> {key, ", + this.nameOfTransformFunction(mapType.values, e, true), + "(value)} end)" + ]; + } + return [expression]; + } + }, + enumType => { + return [ + optional ? ["struct.", e, " && "] : "", + this.nameForNamedTypeWithNamespace(enumType), + ".encode(struct.", + e, + ")" + ]; + }, + unionType => { + const unionTypes = [...unionType.getChildren()]; + const unionPrimitiveTypes = unionTypes.filter(type => type.isPrimitive()); + if (unionTypes.length === unionPrimitiveTypes.length) { + return ["struct.", e]; + } + + const nullable = nullableFromUnion(unionType); + if (nullable !== null) { + if (nullable instanceof ClassType) { + return this.toDynamic(nullable, e, true); + } + + const nullableTypes = [...nullable.getChildren()]; + if (nullableTypes.length < 2) { + return this.toDynamic(nullable, e, true); + } + + return ["struct.", e, " && encode_", e, "(struct.", e, ")"]; + } + return ["encode_", e, "(struct.", e, ")"]; + } + ); + } + + private emitBlock(source: Sourcelike, emit: () => void) { + this.emitLine(source); + this.indent(emit); + this.emitLine("end"); + } + + protected emitDescriptionBlock(lines: Sourcelike[]): void { + this.emitCommentLines(lines, { + firstLineStart: '@moduledoc """\n', + lineStart: "", + afterComment: '"""' + }); + } + + private emitModule(c: ClassType, moduleName: Name) { + this.emitBlock(["defmodule ", this.nameWithNamespace(moduleName), " do"], () => { + const structDescription = this.descriptionForType(c) ?? []; + const attributeDescriptions: Sourcelike[][] = []; + this.forEachClassProperty(c, "none", (name, jsonName, _p) => { + const attributeDescription = this.descriptionForClassProperty(c, jsonName); + if (attributeDescription) { + attributeDescriptions.push(["- `:", name, "` - ", attributeDescription]); + } + }); + if (structDescription.length || attributeDescriptions.length) { + this.emitDescription([...structDescription, ...attributeDescriptions]); + this.ensureBlankLine(); + } + const requiredAttributes: Sourcelike[] = []; + this.forEachClassProperty(c, "none", (name, _jsonName, p) => { + if (!p.isOptional) { + if (requiredAttributes.length === 0) { + requiredAttributes.push([":", name]); + } else { + requiredAttributes.push([", :", name]); + } + } + }); + if (requiredAttributes.length) { + this.emitLine(["@enforce_keys [", requiredAttributes, "]"]); + } + const attributeNames: Sourcelike[] = []; + this.forEachClassProperty(c, "none", (name, _jsonName, _p) => { + if (attributeNames.length === 0) { + attributeNames.push([":", name]); + } else { + attributeNames.push([", :", name]); + } + }); + + this.emitLine(["defstruct [", attributeNames, "]"]); + this.ensureBlankLine(); + + const typeDefinitionTable: Sourcelike[][] = [[["@type "], ["t :: %__MODULE__{"]]]; + let count = c.getProperties().size; + this.forEachClassProperty(c, "none", (name, _jsonName, p) => { + const last = --count === 0; + const attributeRow = [ + [], + [" ", name, ": ", this.elixirType(p.type), p.isOptional ? " | nil" : "", last ? "" : ","] + ]; + typeDefinitionTable.push(attributeRow); + }); + typeDefinitionTable.push([[], ["}"]]); + this.emitTable(typeDefinitionTable); + if (this._options.justTypes) { + return; + } + this.forEachClassProperty(c, "none", (name, _jsonName, p) => { + if (p.type.kind === "union") { + const unionTypes = [...p.type.getChildren()]; + const unionPrimitiveTypes = unionTypes.filter(type => type.isPrimitive()); + if (unionTypes.length === unionPrimitiveTypes.length) { + return; + } + + const unionTypesNonNull = unionTypes.filter(type => type.kind !== "null"); + if (unionTypesNonNull.length === 1) { + let suffix = ""; + let itemTypes: Type[] = []; + if (unionTypesNonNull[0] instanceof ArrayType) { + suffix = "_element"; + itemTypes = [...unionTypesNonNull[0].getChildren()]; + } else if (unionTypesNonNull[0] instanceof MapType) { + suffix = "_value"; + itemTypes = [...unionTypesNonNull[0].getChildren()]; + } + + if (itemTypes.length === 1 && itemTypes[0] instanceof UnionType) { + itemTypes = [...itemTypes[0].getChildren()]; + } + + this.emitPatternMatches( + itemTypes, + name, + this.nameForNamedTypeWithNamespace(c), + suffix, + p.isOptional + ); + } else { + this.emitPatternMatches( + unionTypes, + name, + this.nameForNamedTypeWithNamespace(c), + "", + p.isOptional + ); + } + } else if (p.type.kind === "array") { + const arrayType = p.type as ArrayType; + if (arrayType.items instanceof UnionType) { + const unionType = arrayType.items; + const typesInUnion = [...unionType.getChildren()]; + + this.emitPatternMatches(typesInUnion, name, this.nameForNamedTypeWithNamespace(c), "_element"); + } + } else if (p.type.kind === "map") { + const mapType = p.type as MapType; + if (mapType.values instanceof UnionType) { + const unionType = mapType.values; + const typesInUnion = [...unionType.getChildren()]; + + this.emitPatternMatches(typesInUnion, name, this.nameForNamedTypeWithNamespace(c), "_value"); + } + } + }); + let propCount = 0; + this.forEachClassProperty(c, "none", (_name, _jsonName, _p) => { + propCount++; + }); + const isEmpty = propCount ? false : true; + this.ensureBlankLine(); + this.emitBlock([`def from_map(${isEmpty ? "_" : ""}m) do`], () => { + this.emitLine("%", this.nameWithNamespace(moduleName), "{"); + this.indent(() => { + this.forEachClassProperty(c, "none", (name, jsonName, p) => { + jsonName = escapeDoubleQuotes(jsonName); + jsonName = escapeNewLines(jsonName); + const expression = this.fromDynamic(p.type, jsonName, name, p.isOptional); + this.emitLine(name, ": ", expression, ","); + }); + }); + this.emitLine("}"); + }); + this.ensureBlankLine(); + this.emitBlock("def from_json(json) do", () => { + this.emitMultiline(`json + |> Jason.decode!() + |> from_map()`); + }); + this.ensureBlankLine(); + this.emitBlock([`def to_map(${isEmpty ? "_" : ""}struct) do`], () => { + this.emitLine("%{"); + this.indent(() => { + this.forEachClassProperty(c, "none", (name, jsonName, p) => { + const expression = this.toDynamic(p.type, name, p.isOptional); + this.emitLine([[`"${stringEscape(jsonName)}"`], [" => ", expression, ","]]); + }); + }); + this.emitLine("}"); + }); + this.ensureBlankLine(); + this.emitBlock("def to_json(struct) do", () => { + this.emitMultiline(`struct + |> to_map() + |> Jason.encode!()`); + }); + }); + } + + private isValidAtom(str: string): boolean { + function isLetter(char: string): boolean { + return /^[A-Za-z_]$/.test(char); + } + + function isLetterOrDigit(char: string): boolean { + return /^[A-Za-z0-9_]$/.test(char); + } + + if (str.length === 0) { + return false; + } + + const firstChar = str[0]; + if (!isLetter(firstChar)) { + return false; + } + + for (let i = 1; i < str.length; i++) { + const char = str[i]; + + if (!isLetterOrDigit(char) && char !== "@" && !(i === str.length - 1 && (char === "!" || char === "?"))) { + return false; + } + } + + return true; + } + + private emitEnum(e: EnumType, enumName: Name) { + this.emitBlock(["defmodule ", this.nameWithNamespace(enumName), " do"], () => { + this.emitDescription(this.descriptionForType(e)); + this.emitLine("@valid_enum_members ["); + this.indent(() => { + this.forEachEnumCase(e, "none", (_name, json) => { + if (this.isValidAtom(json)) { + this.emitLine(":", json, ","); + } else { + this.emitLine(":", `"${json}"`, ","); + } + }); + }); + + this.emitLine("]"); + + this.ensureBlankLine(); + + this.emitMultiline(`def valid_atom?(value), do: value in @valid_enum_members + +def valid_atom_string?(value) do + try do + atom = String.to_existing_atom(value) + atom in @valid_enum_members + rescue + ArgumentError -> false + end +end + +def encode(value) do + if valid_atom?(value) do + Atom.to_string(value) + else + {:error, "Unexpected value when encoding atom: #{inspect(value)}"} + end +end + +def decode(value) do + if valid_atom_string?(value) do + String.to_existing_atom(value) + else + {:error, "Unexpected value when decoding atom: #{inspect(value)}"} + end +end + +def from_json(json) do + json + |> Jason.decode!() + |> decode() +end + +def to_json(data) do + data + |> encode() + |> Jason.encode!() +end`); + }); + } + + private emitUnion(_u: UnionType, _unionName: Name) { + return; + } + + protected emitSourceStructure() { + if (this.leadingComments !== undefined) { + this.emitComments(this.leadingComments); + } else if (!this._options.justTypes) { + this.emitMultiline(`# This file was autogenerated using quicktype https://github.com/quicktype/quicktype +# +# Add Jason to your mix.exs`); + this.forEachTopLevel("none", (_topLevel, name) => { + this.emitLine("#"); + this.emitLine("# Decode a JSON string: ", this.nameWithNamespace(name), ".from_json(data)"); + this.emitLine("# Encode into a JSON string: ", this.nameWithNamespace(name), ".to_json(struct)"); + }); + } + + this.ensureBlankLine(); + + this.forEachNamedType( + "leading-and-interposing", + (c: ClassType, n: Name) => this.emitModule(c, n), + (e, n) => this.emitEnum(e, n), + (u, n) => this.emitUnion(u, n) + ); + + if (!this._options.justTypes) { + this.forEachTopLevel( + "leading-and-interposing", + (topLevel, name) => { + const isTopLevelArray = "array" === topLevel.kind; + + this.emitBlock(["defmodule ", this.nameWithNamespace(name), " do"], () => { + const description = this.descriptionForType(topLevel) ?? []; + if (description.length) { + this.emitDescription([...description]); + this.ensureBlankLine(); + } + + if (isTopLevelArray) { + const arrayElement = (topLevel as ArrayType).items; + + let isUnion = false; + + if (arrayElement instanceof UnionType) { + this.emitPatternMatches([...arrayElement.getChildren()], "element", name); + isUnion = true; + } + + this.emitBlock("def from_json(json) do", () => { + this.emitLine("json"); + this.emitLine("|> Jason.decode!()"); + this.emitLine( + "|> Enum.map(&", + isUnion + ? ["decode_element/1)"] + : [this.nameWithNamespace(name), "Element.from_map/1)"] + ); + }); + + this.ensureBlankLine(); + + this.emitBlock("def to_json(list) do", () => { + this.emitLine( + "Enum.map(list, &", + isUnion + ? ["encode_element/1)"] + : [this.nameWithNamespace(name), "Element.to_map/1)"] + ); + this.emitLine("|> Jason.encode!()"); + }); + } else { + this.emitBlock("def from_json(json) do", () => { + this.emitLine("Jason.decode!(json)"); + }); + + this.ensureBlankLine(); + + this.emitBlock("def to_json(data) do", () => { + this.emitLine("Jason.encode!(data)"); + }); + } + }); + }, + t => this.namedTypeToNameForTopLevel(t) === undefined + ); + } + } +} diff --git a/test/fixtures.ts b/test/fixtures.ts index 0f3190f08..5d9b4b7aa 100644 --- a/test/fixtures.ts +++ b/test/fixtures.ts @@ -821,6 +821,7 @@ export const allFixtures: Fixture[] = [ new JSONFixture(languages.DartLanguage), new JSONFixture(languages.PikeLanguage), new JSONFixture(languages.HaskellLanguage), + new JSONFixture(languages.ElixirLanguage), new JSONSchemaJSONFixture(languages.CSharpLanguage), new JSONTypeScriptFixture(languages.CSharpLanguage), // new JSONSchemaFixture(languages.CrystalLanguage), @@ -845,6 +846,7 @@ export const allFixtures: Fixture[] = [ new JSONSchemaFixture(languages.DartLanguage), new JSONSchemaFixture(languages.PikeLanguage), new JSONSchemaFixture(languages.HaskellLanguage), + new JSONSchemaFixture(languages.ElixirLanguage), // FIXME: Why are we missing so many language with GraphQL? new GraphQLFixture(languages.CSharpLanguage), new GraphQLFixture(languages.JavaLanguage), @@ -863,5 +865,6 @@ export const allFixtures: Fixture[] = [ new GraphQLFixture(languages.PikeLanguage), new GraphQLFixture(languages.HaskellLanguage), new GraphQLFixture(languages.PHPLanguage), + new GraphQLFixture(languages.ElixirLanguage), new CommandSuccessfulLanguageFixture(languages.JavaScriptPropTypesLanguage) ]; diff --git a/test/fixtures/elixir/.gitignore b/test/fixtures/elixir/.gitignore new file mode 100644 index 000000000..b7cb8a54f --- /dev/null +++ b/test/fixtures/elixir/.gitignore @@ -0,0 +1,26 @@ +# The directory Mix will write compiled artifacts to. +/_build/ + +# If you run "mix test --cover", coverage assets end up here. +/cover/ + +# The directory Mix downloads your dependencies sources to. +/deps/ + +# Where third-party dependencies like ExDoc output generated docs. +/doc/ + +# Ignore .fetch files in case you like to edit your project deps locally. +/.fetch + +# If the VM crashes, it generates a dump, let's ignore it too. +erl_crash.dump + +# Also ignore archive artifacts (built via "mix archive.build"). +*.ez + +# Ignore package tarball (built via "mix hex.build"). +quick_type_test-*.tar + +# Temporary files, for example, from tests. +/tmp/ diff --git a/test/fixtures/elixir/main.exs b/test/fixtures/elixir/main.exs new file mode 100644 index 000000000..bfca397cb --- /dev/null +++ b/test/fixtures/elixir/main.exs @@ -0,0 +1,13 @@ +defmodule Main do + def run do + [file_path | _] = System.argv() + + file_path + |> File.read!() + |> TopLevel.from_json() + |> TopLevel.to_json() + |> IO.puts() + end +end + +Main.run() diff --git a/test/fixtures/elixir/mix.exs b/test/fixtures/elixir/mix.exs new file mode 100644 index 000000000..94666f7c7 --- /dev/null +++ b/test/fixtures/elixir/mix.exs @@ -0,0 +1,31 @@ +defmodule QuickTypeTest.MixProject do + use Mix.Project + + def project do + [ + app: :quick_type_test, + version: "0.1.0", + elixir: "~> 1.15", + elixirc_paths: elixirc_paths(Mix.env()), + elixirc_options: [ignore_module_conflict: true], + start_permanent: Mix.env() == :prod, + deps: deps() + ] + end + + # Run "mix help compile.app" to learn about applications. + def application do + [ + extra_applications: [:logger] + ] + end + + defp elixirc_paths(_), do: ["./"] + + # Run "mix help deps" to learn about dependencies. + defp deps do + [ + {:jason, "~> 1.2"} + ] + end +end diff --git a/test/fixtures/elixir/mix.lock b/test/fixtures/elixir/mix.lock new file mode 100644 index 000000000..ddb949c99 --- /dev/null +++ b/test/fixtures/elixir/mix.lock @@ -0,0 +1,3 @@ +%{ + "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"}, +} diff --git a/test/languages.ts b/test/languages.ts index 791485867..7cc761421 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -1634,3 +1634,64 @@ export const TypeScriptEffectSchemaLanguage: Language = { quickTestRendererOptions: [{ "array-type": "list" }], sourceFiles: ["src/language/TypeScriptEffectSchema.ts"] }; + +export const ElixirLanguage: Language = { + name: "elixir", + base: "test/fixtures/elixir", + setupCommand: "mix deps.get", + compileCommand: "mix compile", + runCommand(sample: string) { + return `mix run main.exs "${sample}"`; + }, + diffViaSchema: true, + skipDiffViaSchema: [ + "e53b5.json", + "cda6c.json", + "f22f5.json", + "e8b04.json", + "c8c7e.json", + "be234.json", + "ae7f0.json", + "8592b.json", + "7fbfb.json", + "76ae1.json", + "6de06.json", + "4d6fb.json", + "34702.json", + "2df80.json", + "29f47.json", + "27332.json", + "00c36.json", + "bug863.json", + "bug427.json", + "keywords.json", + "kitchen-sink.json", + "reddit.json" + ], + allowMissingNull: false, + features: ["enum", "no-defaults", "strict-optional"], + output: "QuickType.ex", + topLevel: "TopLevel", + skipJSON: [ + // Some field names are too long to be expressed as atoms and some contain invalid characters. + "blns-object.json" + ], + skipMiscJSON: false, + skipSchema: [ + // The error occurs because a guard clause that references TopLevel is compiled before TopLevel itself. To fix this, put + // TopLevel before Bar, but this doesn't address the actual problem if for example a pattern match to Bar was in TopLevel. + "mutually-recursive.schema", + + // Struct keys cannot be enforced at runtime in Elixir and their values will just be set to null. + "strict-optional.schema", + "required.schema", + "intersection.schema", + + // The test incorrectly succeeds due to the emitter being permissive for unions that contain only primitives. A future enhancement + // for the Elixir emitter could be a user-controlled 'strict' mode that pattern matches even on unions of only primitive types. + "go-schema-pattern-properties.schema" + ], + rendererOptions: {}, + quickTestRendererOptions: [], + sourceFiles: ["src/language/Elixir.ts"] +}; From c8740030e57225bb56a785faa3bd0a6f35dc8cfe Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 23:59:27 +0000 Subject: [PATCH 52/99] style: format code with Prettier (#2565) --- test/fixtures.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/test/fixtures.ts b/test/fixtures.ts index 5d9b4b7aa..1aa5e5c0c 100644 --- a/test/fixtures.ts +++ b/test/fixtures.ts @@ -254,7 +254,10 @@ abstract class LanguageFixture extends Fixture { } class JSONFixture extends LanguageFixture { - constructor(language: languages.Language, public name: string = language.name) { + constructor( + language: languages.Language, + public name: string = language.name + ) { super(language); } @@ -568,7 +571,10 @@ class JSONTypeScriptFixture extends JSONToXToYFixture { // This fixture tests generating code from JSON Schema. class JSONSchemaFixture extends LanguageFixture { - constructor(language: languages.Language, readonly name: string = `schema-${language.name}`) { + constructor( + language: languages.Language, + readonly name: string = `schema-${language.name}` + ) { super(language); } @@ -699,7 +705,10 @@ class GraphQLFixture extends LanguageFixture { } class CommandSuccessfulLanguageFixture extends LanguageFixture { - constructor(language: languages.Language, public name: string = language.name) { + constructor( + language: languages.Language, + public name: string = language.name + ) { super(language); } From 046dc5bb38eb2af679a26fbd0188b506b52355cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 18:06:25 -0700 Subject: [PATCH 53/99] build(deps-dev): bump deep-equal from 2.2.2 to 2.2.3 (#2543) --- package-lock.json | 359 ++++++++++++++++++++++++++++++++-------------- package.json | 2 +- 2 files changed, 255 insertions(+), 106 deletions(-) diff --git a/package-lock.json b/package-lock.json index dc9bc6327..094970869 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,7 @@ "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", "ajv": "^5.5.2", - "deep-equal": "^2.2.2", + "deep-equal": "^2.2.3", "esbuild": "^0.20.2", "exit": "^0.1.2", "prettier": "^3.0.1", @@ -1577,10 +1577,13 @@ "dev": true }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1717,6 +1720,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "dev": true, "dependencies": { "quote-stream": "^1.0.1", "resolve": "^1.1.5", @@ -1774,6 +1778,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -1781,7 +1786,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/builtin-modules": { "version": "1.1.1", @@ -2145,6 +2151,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "engines": [ "node >= 0.8" ], @@ -2159,6 +2166,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2281,15 +2289,15 @@ } }, "node_modules/deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", @@ -2299,11 +2307,14 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2328,7 +2339,8 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/define-data-property": { "version": "1.1.4", @@ -2348,11 +2360,12 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -2473,6 +2486,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, "dependencies": { "readable-stream": "^2.0.2" } @@ -2481,6 +2495,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2651,6 +2666,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, "dependencies": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -2672,6 +2688,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "engines": { "node": ">=4.0" } @@ -2680,6 +2697,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -2692,6 +2710,7 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -2708,6 +2727,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -2716,6 +2736,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, @@ -2897,6 +2918,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2933,6 +2955,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { "node": ">=4.0" } @@ -2941,6 +2964,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -2993,6 +3017,7 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dev": true, "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" @@ -3005,6 +3030,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -3015,7 +3041,8 @@ "node_modules/falafel/node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/fast-deep-equal": { "version": "1.1.0", @@ -3048,7 +3075,8 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { "version": "1.17.1", @@ -3217,6 +3245,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3366,6 +3395,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -3428,12 +3458,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -4250,6 +4280,7 @@ "version": "0.22.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, "dependencies": { "vlq": "^0.2.2" } @@ -4321,6 +4352,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, "dependencies": { "source-map": "^0.5.6" } @@ -4329,6 +4361,7 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4416,6 +4449,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4733,6 +4767,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", + "dev": true, "engines": { "node": ">=10.12.0" } @@ -4959,7 +4994,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { "version": "1.10.2", @@ -5021,6 +5057,15 @@ "node": ">=4" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prebuild-install": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -5166,6 +5211,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, "dependencies": { "buffer-equal": "0.0.1", "minimist": "^1.1.3", @@ -5289,14 +5335,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5317,6 +5364,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, "dependencies": { "path-parse": "^1.0.5" } @@ -5443,6 +5491,21 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -5452,7 +5515,8 @@ "node_modules/shallow-copy": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", @@ -5582,6 +5646,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -5597,6 +5662,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "dev": true, "dependencies": { "escodegen": "^2.1.0" } @@ -5605,6 +5671,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -5625,6 +5692,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5637,6 +5705,7 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "dev": true, "dependencies": { "concat-stream": "~1.6.0", "convert-source-map": "^1.5.1", @@ -5657,17 +5726,20 @@ "node_modules/static-module/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/static-module/node_modules/object-inspect": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==" + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", + "dev": true }, "node_modules/static-module/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5930,6 +6002,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -5939,6 +6012,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6192,7 +6266,8 @@ "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true }, "node_modules/typescript": { "version": "4.9.5", @@ -6253,6 +6328,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "dev": true, "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" @@ -6261,7 +6337,8 @@ "node_modules/unicode-trie/node_modules/pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true }, "node_modules/uri-js": { "version": "4.4.1", @@ -6320,7 +6397,8 @@ "node_modules/vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true }, "node_modules/watch": { "version": "1.0.2", @@ -6404,17 +6482,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6427,6 +6504,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6567,6 +6645,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, "engines": { "node": ">=0.4" } @@ -6824,12 +6903,6 @@ "packages/quicktype-vscode": { "name": "quicktype", "version": "23.0.122", - "dependencies": { - "node-persist": "^4.0.1", - "quicktype-core": "file:../quicktype-core", - "quicktype-typescript-input": "file:../quicktype-typescript-input", - "unicode-properties": "github:quicktype/unicode-properties#dist" - }, "devDependencies": { "@types/mocha": "^10.0.6", "@types/node": "18.x", @@ -6842,7 +6915,11 @@ "@vscode/test-electron": "^2.3.9", "@vscode/vsce": "^2.25.0", "eslint": "^8.56.0", - "typescript": "^5.3.3" + "node-persist": "^4.0.1", + "quicktype-core": "file:../quicktype-core", + "quicktype-typescript-input": "file:../quicktype-typescript-input", + "typescript": "^5.3.3", + "unicode-properties": "github:quicktype/unicode-properties#dist" }, "engines": { "vscode": "^1.87.0" @@ -6864,6 +6941,7 @@ "packages/quicktype-vscode/node_modules/unicode-properties": { "version": "1.1.0", "resolved": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", + "dev": true, "license": "MIT", "dependencies": { "brfs": "^1.4.0", @@ -7905,10 +7983,13 @@ "dev": true }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "azure-devops-node-api": { "version": "12.5.0", @@ -8001,6 +8082,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "dev": true, "requires": { "quote-stream": "^1.0.1", "resolve": "^1.1.5", @@ -8037,12 +8119,14 @@ "buffer-equal": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "builtin-modules": { "version": "1.1.1", @@ -8318,6 +8402,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -8329,6 +8414,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8421,15 +8507,15 @@ } }, "deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", @@ -8439,11 +8525,11 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" }, "dependencies": { "isarray": { @@ -8464,7 +8550,8 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "define-data-property": { "version": "1.1.4", @@ -8478,11 +8565,12 @@ } }, "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } @@ -8564,6 +8652,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, "requires": { "readable-stream": "^2.0.2" }, @@ -8572,6 +8661,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8715,6 +8805,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, "requires": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -8726,12 +8817,14 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -8741,6 +8834,7 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -8753,12 +8847,14 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -8897,7 +8993,8 @@ "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "dev": true }, "esquery": { "version": "1.5.0", @@ -8920,12 +9017,14 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "event-target-shim": { "version": "5.0.1", @@ -8963,6 +9062,7 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dev": true, "requires": { "acorn": "^7.1.1", "isarray": "^2.0.1" @@ -8971,12 +9071,14 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true }, "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true } } }, @@ -9008,7 +9110,8 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "fastq": { "version": "1.17.1", @@ -9139,7 +9242,8 @@ "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true }, "functions-have-names": { "version": "1.2.3", @@ -9250,6 +9354,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -9288,12 +9393,12 @@ "dev": true }, "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "hasown": { @@ -9896,6 +10001,7 @@ "version": "0.22.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, "requires": { "vlq": "^0.2.2" } @@ -9957,6 +10063,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, "requires": { "source-map": "^0.5.6" }, @@ -9964,7 +10071,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true } } }, @@ -10023,7 +10131,8 @@ "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true }, "minipass": { "version": "7.0.4", @@ -10262,7 +10371,8 @@ "node-persist": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", - "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==" + "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", + "dev": true }, "normalize-path": { "version": "3.0.0", @@ -10428,7 +10538,8 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-scurry": { "version": "1.10.2", @@ -10471,6 +10582,12 @@ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true + }, "prebuild-install": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -10581,6 +10698,7 @@ }, "unicode-properties": { "version": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", + "dev": true, "from": "unicode-properties@github:quicktype/unicode-properties#dist", "requires": { "brfs": "^1.4.0", @@ -10727,6 +10845,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, "requires": { "buffer-equal": "0.0.1", "minimist": "^1.1.3", @@ -10819,14 +10938,15 @@ } }, "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" } }, "require-directory": { @@ -10838,6 +10958,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, "requires": { "path-parse": "^1.0.5" } @@ -10925,6 +11046,18 @@ "has-property-descriptors": "^1.0.2" } }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -10934,7 +11067,8 @@ "shallow-copy": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -11009,6 +11143,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true }, "sprintf-js": { @@ -11021,6 +11156,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "dev": true, "requires": { "escodegen": "^2.1.0" }, @@ -11029,6 +11165,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -11039,7 +11176,8 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true } } }, @@ -11047,6 +11185,7 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "dev": true, "requires": { "concat-stream": "~1.6.0", "convert-source-map": "^1.5.1", @@ -11067,17 +11206,20 @@ "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "object-inspect": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==" + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", + "dev": true }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11292,6 +11434,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -11301,6 +11444,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11491,7 +11635,8 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true }, "typescript": { "version": "4.9.5", @@ -11544,6 +11689,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "dev": true, "requires": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" @@ -11552,7 +11698,8 @@ "pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true } } }, @@ -11612,7 +11759,8 @@ "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true }, "watch": { "version": "1.0.2", @@ -11678,23 +11826,23 @@ } }, "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.2" } }, "word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true }, "wordwrap": { "version": "1.0.0", @@ -11795,7 +11943,8 @@ "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "y18n": { "version": "5.0.8", diff --git a/package.json b/package.json index 9332eebb6..eaa438300 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", "ajv": "^5.5.2", - "deep-equal": "^2.2.2", + "deep-equal": "^2.2.3", "esbuild": "^0.20.2", "exit": "^0.1.2", "prettier": "^3.0.1", From 5ddbd5fd2a3b5b6965062704146b8a0828e6f777 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Sun, 14 Apr 2024 13:54:13 -0700 Subject: [PATCH 54/99] Fix unicode-properties import (#2566) --- packages/quicktype-core/src/language/CSharp.ts | 2 +- packages/quicktype-core/src/language/Elixir.ts | 2 +- packages/quicktype-core/src/language/Objective-C.ts | 2 +- packages/quicktype-core/src/language/Python.ts | 2 +- packages/quicktype-core/src/language/ruby/index.ts | 2 +- packages/quicktype-core/src/support/Strings.ts | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/quicktype-core/src/language/CSharp.ts b/packages/quicktype-core/src/language/CSharp.ts index 627e387be..8aa03ec13 100644 --- a/packages/quicktype-core/src/language/CSharp.ts +++ b/packages/quicktype-core/src/language/CSharp.ts @@ -51,7 +51,7 @@ import { } from "../Transformers"; import { RenderContext } from "../Renderer"; import { minMaxLengthForType, minMaxValueForType } from "../attributes/Constraints"; -import unicode from "unicode-properties"; +import * as unicode from "unicode-properties"; export enum Framework { Newtonsoft, diff --git a/packages/quicktype-core/src/language/Elixir.ts b/packages/quicktype-core/src/language/Elixir.ts index ddbbcdaa7..9efb257a5 100644 --- a/packages/quicktype-core/src/language/Elixir.ts +++ b/packages/quicktype-core/src/language/Elixir.ts @@ -1,4 +1,4 @@ -import unicode from "unicode-properties"; +import * as unicode from "unicode-properties"; import { Sourcelike } from "../Source"; import { Namer, Name } from "../Naming"; diff --git a/packages/quicktype-core/src/language/Objective-C.ts b/packages/quicktype-core/src/language/Objective-C.ts index b1a44e899..d861ba41a 100644 --- a/packages/quicktype-core/src/language/Objective-C.ts +++ b/packages/quicktype-core/src/language/Objective-C.ts @@ -23,7 +23,7 @@ import { StringOption, BooleanOption, EnumOption, Option, getOptionValues, Optio import { assert, defined } from "../support/Support"; import { RenderContext } from "../Renderer"; -import unicode from "unicode-properties"; +import * as unicode from "unicode-properties"; export type MemoryAttribute = "assign" | "strong" | "copy"; export type OutputFeatures = { interface: boolean; implementation: boolean }; diff --git a/packages/quicktype-core/src/language/Python.ts b/packages/quicktype-core/src/language/Python.ts index 5be720512..3c2f3ae0e 100644 --- a/packages/quicktype-core/src/language/Python.ts +++ b/packages/quicktype-core/src/language/Python.ts @@ -48,7 +48,7 @@ import { iterableFirst } from "collection-utils"; -import unicode from "unicode-properties"; +import * as unicode from "unicode-properties"; const forbiddenTypeNames = [ "Any", diff --git a/packages/quicktype-core/src/language/ruby/index.ts b/packages/quicktype-core/src/language/ruby/index.ts index 383bdd5ae..685581a68 100644 --- a/packages/quicktype-core/src/language/ruby/index.ts +++ b/packages/quicktype-core/src/language/ruby/index.ts @@ -1,4 +1,4 @@ -import unicode from "unicode-properties"; +import * as unicode from "unicode-properties"; import { Sourcelike, modifySource } from "../../Source"; import { Namer, Name } from "../../Naming"; diff --git a/packages/quicktype-core/src/support/Strings.ts b/packages/quicktype-core/src/support/Strings.ts index 8e2e91969..4b196a2fb 100644 --- a/packages/quicktype-core/src/support/Strings.ts +++ b/packages/quicktype-core/src/support/Strings.ts @@ -10,7 +10,7 @@ export type NamingStyle = | "pascal-upper-acronyms" | "camel-upper-acronyms"; -import unicode from "unicode-properties"; +import * as unicode from "unicode-properties"; function computeAsciiMap(mapper: (codePoint: number) => string): { charStringMap: string[]; From 5a396beba548ed57cf4b016ebf58529b5b973606 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 20:45:46 -0400 Subject: [PATCH 55/99] build(deps): bump js-base64 from 3.7.5 to 3.7.7 (#2567) Bumps [js-base64](https://github.com/dankogai/js-base64) from 3.7.5 to 3.7.7. - [Commits](https://github.com/dankogai/js-base64/compare/3.7.5...3.7.7) --- updated-dependencies: - dependency-name: js-base64 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 36 ++++++++++++++-------------- packages/quicktype-core/package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 094970869..6a66545a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4070,9 +4070,9 @@ } }, "node_modules/js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" }, "node_modules/js-yaml": { "version": "3.13.1", @@ -6764,7 +6764,7 @@ "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", "is-url": "^1.2.4", - "js-base64": "^3.7.5", + "js-base64": "^3.7.7", "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", @@ -6792,11 +6792,6 @@ "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" }, - "packages/quicktype-core/node_modules/js-base64": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", - "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" - }, "packages/quicktype-core/node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -6847,6 +6842,11 @@ "whatwg-fetch": ">=0.10.0" } }, + "packages/quicktype-typescript-input/node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, "packages/quicktype-typescript-input/node_modules/node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -9819,9 +9819,9 @@ } }, "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" }, "js-yaml": { "version": "3.13.1", @@ -10724,7 +10724,7 @@ "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", "is-url": "^1.2.4", - "js-base64": "^3.7.5", + "js-base64": "^3.7.7", "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", @@ -10742,11 +10742,6 @@ "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" }, - "js-base64": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", - "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" - }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -10790,6 +10785,11 @@ "whatwg-fetch": ">=0.10.0" } }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index e5d1e17a8..0e6df778c 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -18,7 +18,7 @@ "collection-utils": "^1.0.1", "is-url": "^1.2.4", "cross-fetch": "^4.0.0", - "js-base64": "^3.7.5", + "js-base64": "^3.7.7", "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", From 8547cf77ebb701332ff875754352f02ddc857a9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:18:11 -0400 Subject: [PATCH 56/99] build(deps): bump @glideapps/ts-necessities from 2.1.3 to 2.2.3 (#2568) --- package-lock.json | 18 +++++++++--------- package.json | 2 +- packages/quicktype-core/package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a66545a4..6e40033b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "./packages/quicktype-vscode" ], "dependencies": { - "@glideapps/ts-necessities": "^2.1.3", + "@glideapps/ts-necessities": "^2.2.3", "chalk": "^4.1.2", "collection-utils": "^1.0.1", "command-line-args": "^5.2.1", @@ -578,9 +578,9 @@ } }, "node_modules/@glideapps/ts-necessities": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.3.tgz", - "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", + "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -6758,7 +6758,7 @@ "version": "18.0.15", "license": "Apache-2.0", "dependencies": { - "@glideapps/ts-necessities": "2.1.3", + "@glideapps/ts-necessities": "2.2.3", "@types/urijs": "^1.19.25", "browser-or-node": "^2.1.1", "collection-utils": "^1.0.1", @@ -7227,9 +7227,9 @@ "dev": true }, "@glideapps/ts-necessities": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.3.tgz", - "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", + "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==" }, "@humanwhocodes/config-array": { "version": "0.11.14", @@ -10710,7 +10710,7 @@ "quicktype-core": { "version": "file:packages/quicktype-core", "requires": { - "@glideapps/ts-necessities": "2.1.3", + "@glideapps/ts-necessities": "2.2.3", "@types/browser-or-node": "^1.3.2", "@types/js-base64": "^3.3.1", "@types/node": "18.14.0", diff --git a/package.json b/package.json index eaa438300..794dd394d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "./packages/quicktype-vscode" ], "dependencies": { - "@glideapps/ts-necessities": "^2.1.3", + "@glideapps/ts-necessities": "^2.2.3", "chalk": "^4.1.2", "collection-utils": "^1.0.1", "command-line-args": "^5.2.1", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 0e6df778c..1dcc7f560 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -12,7 +12,7 @@ "tslint": "tslint --project ." }, "dependencies": { - "@glideapps/ts-necessities": "2.1.3", + "@glideapps/ts-necessities": "2.2.3", "@types/urijs": "^1.19.25", "browser-or-node": "^2.1.1", "collection-utils": "^1.0.1", From 0608204897b3a433826e620ca73e1c310b0c31cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 13:37:57 -0700 Subject: [PATCH 57/99] build(deps-dev): bump @types/command-line-usage from 5.0.2 to 5.0.4 (#2569) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e40033b9..89eb78912 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "devDependencies": { "@tsconfig/node18": "^1.0.1", "@types/command-line-args": "^5.2.0", - "@types/command-line-usage": "^5.0.2", + "@types/command-line-usage": "^5.0.4", "@types/graphql": "^0.11.7", "@types/lodash": "^4.14.197", "@types/semver": "^7.5.0", @@ -870,9 +870,9 @@ "dev": true }, "node_modules/@types/command-line-usage": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", + "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", "dev": true }, "node_modules/@types/glob": { @@ -7449,9 +7449,9 @@ "dev": true }, "@types/command-line-usage": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", + "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", "dev": true }, "@types/glob": { diff --git a/package.json b/package.json index 794dd394d..9e74b2370 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "devDependencies": { "@tsconfig/node18": "^1.0.1", "@types/command-line-args": "^5.2.0", - "@types/command-line-usage": "^5.0.2", + "@types/command-line-usage": "^5.0.4", "@types/graphql": "^0.11.7", "@types/lodash": "^4.14.197", "@types/semver": "^7.5.0", From 8d4169bf2dcad7c678bf941e554b629b0d79f024 Mon Sep 17 00:00:00 2001 From: Andrew Valleteau Date: Fri, 19 Apr 2024 23:42:34 +0200 Subject: [PATCH 58/99] refactor: update fetch import for node v21+ compatibility (#2573) --- packages/quicktype-core/src/input/io/NodeIO.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/input/io/NodeIO.ts b/packages/quicktype-core/src/input/io/NodeIO.ts index e7cfe588e..48a12d767 100644 --- a/packages/quicktype-core/src/input/io/NodeIO.ts +++ b/packages/quicktype-core/src/input/io/NodeIO.ts @@ -6,7 +6,8 @@ import { defined, exceptionToString } from "@glideapps/ts-necessities"; import { messageError, panic } from "../../index"; const isURL = require("is-url"); -import fetch from "cross-fetch"; + +const fetch = (global as any).fetch ?? require("cross-fetch").default; interface HttpHeaders { [key: string]: string; From 0804c4c740ba87b81ce623f7f804e7357db96265 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Apr 2024 15:23:40 -0700 Subject: [PATCH 59/99] build(deps-dev): bump @types/node from 18.14.0 to 18.19.31 (#2570) --- package-lock.json | 40 +++++++++++++------ packages/quicktype-core/package.json | 2 +- packages/quicktype-graphql-input/package.json | 2 +- .../quicktype-typescript-input/package.json | 2 +- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89eb78912..8f1fc2bca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -931,9 +931,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/node-persist": { "version": "3.1.8", @@ -6301,6 +6304,11 @@ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", "dev": true }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unicode-properties": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", @@ -6777,7 +6785,7 @@ "devDependencies": { "@types/browser-or-node": "^1.3.2", "@types/js-base64": "^3.3.1", - "@types/node": "18.14.0", + "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", @@ -6810,7 +6818,7 @@ }, "devDependencies": { "@types/graphql": "^0.11.7", - "@types/node": "18.14.0", + "@types/node": "18.19.31", "tslint": "^6.1.3", "typescript": "4.9.5" } @@ -6824,7 +6832,7 @@ "typescript": "4.9.5" }, "devDependencies": { - "@types/node": "18.14.0", + "@types/node": "18.19.31", "tslint": "^6.1.3" } }, @@ -7509,9 +7517,12 @@ "dev": true }, "@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "requires": { + "undici-types": "~5.26.4" + } }, "@types/node-persist": { "version": "3.1.8", @@ -10713,7 +10724,7 @@ "@glideapps/ts-necessities": "2.2.3", "@types/browser-or-node": "^1.3.2", "@types/js-base64": "^3.3.1", - "@types/node": "18.14.0", + "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", @@ -10753,7 +10764,7 @@ "version": "file:packages/quicktype-graphql-input", "requires": { "@types/graphql": "^0.11.7", - "@types/node": "18.14.0", + "@types/node": "18.19.31", "collection-utils": "^1.0.1", "graphql": "^0.11.7", "quicktype-core": "file:../quicktype-core", @@ -10765,7 +10776,7 @@ "version": "file:packages/quicktype-typescript-input", "requires": { "@mark.probst/typescript-json-schema": "0.55.0", - "@types/node": "18.14.0", + "@types/node": "18.19.31", "quicktype-core": "file:../quicktype-core", "tslint": "^6.1.3", "typescript": "4.9.5" @@ -11660,6 +11671,11 @@ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", "dev": true }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "unicode-properties": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 1dcc7f560..49346dada 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -31,7 +31,7 @@ "devDependencies": { "@types/browser-or-node": "^1.3.2", "@types/js-base64": "^3.3.1", - "@types/node": "18.14.0", + "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", diff --git a/packages/quicktype-graphql-input/package.json b/packages/quicktype-graphql-input/package.json index ae4b23648..396b8265d 100644 --- a/packages/quicktype-graphql-input/package.json +++ b/packages/quicktype-graphql-input/package.json @@ -17,7 +17,7 @@ "graphql": "^0.11.7" }, "devDependencies": { - "@types/node": "18.14.0", + "@types/node": "18.19.31", "@types/graphql": "^0.11.7", "typescript": "4.9.5", "tslint": "^6.1.3" diff --git a/packages/quicktype-typescript-input/package.json b/packages/quicktype-typescript-input/package.json index 9926b394e..ad3588402 100644 --- a/packages/quicktype-typescript-input/package.json +++ b/packages/quicktype-typescript-input/package.json @@ -17,7 +17,7 @@ "@mark.probst/typescript-json-schema": "0.55.0" }, "devDependencies": { - "@types/node": "18.14.0", + "@types/node": "18.19.31", "tslint": "^6.1.3" }, "files": [ From 32028a89cae28ca3b4a18bd3f48cb833f65b9e5d Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 20 Apr 2024 15:24:42 -0700 Subject: [PATCH 60/99] fix: Emit top level primitives for missing Languages (#2552) --- packages/quicktype-core/src/language/Kotlin.ts | 7 +++++++ .../quicktype-core/src/language/TypeScriptFlow.ts | 14 ++++++++++++++ test/inputs/schema/top-level-primitive.schema | 6 ++++++ test/languages.ts | 9 ++++++--- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 test/inputs/schema/top-level-primitive.schema diff --git a/packages/quicktype-core/src/language/Kotlin.ts b/packages/quicktype-core/src/language/Kotlin.ts index 407b82300..0aa750b25 100644 --- a/packages/quicktype-core/src/language/Kotlin.ts +++ b/packages/quicktype-core/src/language/Kotlin.ts @@ -302,6 +302,11 @@ export class KotlinRenderer extends ConvenienceRenderer { this.ensureBlankLine(); } + protected emitTopLevelPrimitive(t: PrimitiveType, name: Name): void { + const elementType = this.kotlinType(t); + this.emitLine(["typealias ", name, " = ", elementType, ""]); + } + protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.kotlinType(t.items); this.emitLine(["typealias ", name, " = ArrayList<", elementType, ">"]); @@ -446,6 +451,8 @@ export class KotlinRenderer extends ConvenienceRenderer { this.emitTopLevelArray(t, name); } else if (t instanceof MapType) { this.emitTopLevelMap(t, name); + } else if (t.isPrimitive()) { + this.emitTopLevelPrimitive(t, name); } }); diff --git a/packages/quicktype-core/src/language/TypeScriptFlow.ts b/packages/quicktype-core/src/language/TypeScriptFlow.ts index f21202056..fec297445 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow.ts @@ -206,6 +206,16 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { } protected emitTypes(): void { + // emit primitive top levels + this.forEachTopLevel("none", (t, name) => { + if (!t.isPrimitive()) { + return; + } + this.ensureBlankLine(); + this.emitDescription(this.descriptionForType(t)); + this.emitLine("type ", name, " = ", this.sourceFor(t).source, ";"); + }); + this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitClass(c, n), @@ -337,6 +347,10 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { } ); } + + protected emitSourceStructure() { + super.emitSourceStructure(); + } } export class FlowTargetLanguage extends TypeScriptFlowBaseTargetLanguage { diff --git a/test/inputs/schema/top-level-primitive.schema b/test/inputs/schema/top-level-primitive.schema new file mode 100644 index 000000000..64c1c8cab --- /dev/null +++ b/test/inputs/schema/top-level-primitive.schema @@ -0,0 +1,6 @@ +{ + "id": "http://json-schema.org/geo", + "$schema": "http://json-schema.org/draft-06/schema#", + "description": "Top level primitive", + "type": "number" +} diff --git a/test/languages.ts b/test/languages.ts index 7cc761421..51f76bb4a 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -688,7 +688,8 @@ export const SwiftLanguage: Language = { "date-time.schema", "class-with-additional.schema", "class-map-union.schema", - "vega-lite.schema" + "vega-lite.schema", + "top-level-primitive.schema" ], rendererOptions: { "support-linux": "true" }, quickTestRendererOptions: [ @@ -1100,7 +1101,8 @@ export const KotlinLanguage: Language = { "keyword-enum.schema", "keyword-unions.schema", // Klaxon does not support top-level primitives - "top-level-enum.schema" + "top-level-enum.schema", + "top-level-primitive.schema" ], skipMiscJSON: false, rendererOptions: {}, @@ -1183,7 +1185,8 @@ export const KotlinJacksonLanguage: Language = { "keyword-enum.schema", "keyword-unions.schema", // Klaxon does not support top-level primitives - "top-level-enum.schema" + "top-level-enum.schema", + "top-level-primitive.schema" ], skipMiscJSON: false, rendererOptions: { framework: "jackson" }, From e1bb8383b6c06e870aa994dbd5cf5df1688b6d65 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Wed, 24 Apr 2024 19:44:10 -0700 Subject: [PATCH 61/99] remove deepsource.toml (#2575) --- .deepsource.toml | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml deleted file mode 100644 index 82583e262..000000000 --- a/.deepsource.toml +++ /dev/null @@ -1,7 +0,0 @@ -version = 1 - -[[analyzers]] -name = "javascript" - -[[transformers]] -name = "prettier" \ No newline at end of file From 49e9e032af255f4d1c70603a5c2045b2265c841d Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sun, 28 Apr 2024 09:39:13 -0700 Subject: [PATCH 62/99] fix: Resolve ReadableStream types issue in test suite (#2581) * cast response.body to node readable stream for url fetch * add comment * Revert "refactor: update fetch import for node v21+ compatibility (#2573)" This reverts commit 8d4169bf2dcad7c678bf941e554b629b0d79f024. * Revert "Revert "refactor: update fetch import for node v21+ compatibility (#2573)"" This reverts commit df1321d77eb70360479f5aad0be3a53b15874f0a. * add FIXME comment * only use cross-fetch in CI --- packages/quicktype-core/src/input/io/NodeIO.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/input/io/NodeIO.ts b/packages/quicktype-core/src/input/io/NodeIO.ts index 48a12d767..78384b69a 100644 --- a/packages/quicktype-core/src/input/io/NodeIO.ts +++ b/packages/quicktype-core/src/input/io/NodeIO.ts @@ -1,13 +1,15 @@ import * as fs from "fs"; +import { defined, exceptionToString } from "@glideapps/ts-necessities"; import { Readable } from "readable-stream"; import { isNode } from "browser-or-node"; +import _fetch from "cross-fetch"; import { getStream } from "./get-stream"; -import { defined, exceptionToString } from "@glideapps/ts-necessities"; import { messageError, panic } from "../../index"; const isURL = require("is-url"); -const fetch = (global as any).fetch ?? require("cross-fetch").default; +// Only use cross-fetch in CI +const fetch = process.env.CI ? _fetch : (global as any).fetch ?? _fetch; interface HttpHeaders { [key: string]: string; @@ -41,6 +43,7 @@ export async function readableFromFileOrURL(fileOrURL: string, httpHeaders?: str const response = await fetch(fileOrURL, { headers: parseHeaders(httpHeaders) }); + return defined(response.body) as unknown as Readable; } else if (isNode) { if (fileOrURL === "-") { From 19bba8264985dc94727ce06ad2e5002f8f0e392e Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 29 Apr 2024 09:09:49 +1200 Subject: [PATCH 63/99] update to latest @effect/schema (#2574) --- .../src/language/TypeScriptEffectSchema.ts | 22 +- .../package-lock.json | 706 +++++------------- .../typescript-effect-schema/package.json | 4 +- 3 files changed, 209 insertions(+), 523 deletions(-) diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts index 22a1b9bdd..1d0790084 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts @@ -121,24 +121,24 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { const match = matchType( t, - _anyType => "S.any", - _nullType => "S.null", - _boolType => "S.boolean", - _integerType => "S.number", - _doubleType => "S.number", - _stringType => "S.string", - arrayType => ["S.array(", this.typeMapTypeFor(arrayType.items, false), ")"], + _anyType => "S.Any", + _nullType => "S.Null", + _boolType => "S.Boolean", + _integerType => "S.Number", + _doubleType => "S.Number", + _stringType => "S.String", + arrayType => ["S.Array(", this.typeMapTypeFor(arrayType.items, false), ")"], _classType => panic("Should already be handled."), - _mapType => ["S.record(S.string, ", this.typeMapTypeFor(_mapType.values, false), ")"], + _mapType => ["S.Record(S.String, ", this.typeMapTypeFor(_mapType.values, false), ")"], _enumType => panic("Should already be handled."), unionType => { const children = Array.from(unionType.getChildren()).map((type: Type) => this.typeMapTypeFor(type, false) ); - return ["S.union(", ...arrayIntercalate(", ", children), ")"]; + return ["S.Union(", ...arrayIntercalate(", ", children), ")"]; }, _transformedStringType => { - return "S.string"; + return "S.String"; } ); @@ -165,7 +165,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { this.emittedObjects.add(enumName); this.ensureBlankLine(); this.emitDescription(this.descriptionForType(e)); - this.emitLine("\nexport const ", enumName, " = ", "S.literal("); + this.emitLine("\nexport const ", enumName, " = ", "S.Literal("); this.indent(() => this.forEachEnumCase(e, "none", (_, jsonName) => { this.emitLine('"', stringEscape(jsonName), '",'); diff --git a/test/fixtures/typescript-effect-schema/package-lock.json b/test/fixtures/typescript-effect-schema/package-lock.json index 8a4b5c16f..949bf3c2b 100644 --- a/test/fixtures/typescript-effect-schema/package-lock.json +++ b/test/fixtures/typescript-effect-schema/package-lock.json @@ -1,7 +1,7 @@ { "name": "typescript-effect-schema", "version": "0.1.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -9,56 +9,26 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@effect/schema": "^0.64.10" + "@effect/schema": "^0.66.5" }, "devDependencies": { "tsx": "^3.12.2", - "typescript": "^5.0.0" + "typescript": "^5.4.0" } }, "node_modules/@effect/schema": { - "version": "0.64.10", - "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.64.10.tgz", - "integrity": "sha512-V8eatG6dS30smzgmapR9EkyGUhXE7vVZFUiKDNSvp1AumNPjwIKjM8TW/Y/hA4HNm49RV+kgyyGcsI0Mu7owJA==", + "version": "0.66.5", + "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.66.5.tgz", + "integrity": "sha512-xfu5161JyrfAS1Ruwv0RXd4QFiCALbm3iu9nlW9N9K+52wbS0WdO6XUekPZ9V/O7LN+XmlIh5Y9xhJaIWCZ/gw==", "peerDependencies": { - "effect": "^2.4.10", + "effect": "^3.0.3", "fast-check": "^3.13.2" } }, - "node_modules/@esbuild-kit/cjs-loader": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.1.tgz", - "integrity": "sha512-lhc/XLith28QdW0HpHZvZKkorWgmCNT7sVelMHDj3HFdTfdqkwEKvT+aXVQtNAmCC39VJhunDkWhONWB7335mg==", - "dev": true, - "dependencies": { - "@esbuild-kit/core-utils": "^3.0.0", - "get-tsconfig": "^4.2.0" - } - }, - "node_modules/@esbuild-kit/core-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.0.0.tgz", - "integrity": "sha512-TXmwH9EFS3DC2sI2YJWJBgHGhlteK0Xyu1VabwetMULfm3oYhbrsWV5yaSr2NTWZIgDGVLHbRf0inxbjXqAcmQ==", - "dev": true, - "dependencies": { - "esbuild": "~0.15.10", - "source-map-support": "^0.5.21" - } - }, - "node_modules/@esbuild-kit/esm-loader": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.5.4.tgz", - "integrity": "sha512-afmtLf6uqxD5IgwCzomtqCYIgz/sjHzCWZFvfS5+FzeYxOURPUo4QcHtqJxbxWOMOogKriZanN/1bJQE/ZL93A==", - "dev": true, - "dependencies": { - "@esbuild-kit/core-utils": "^3.0.0", - "get-tsconfig": "^4.2.0" - } - }, "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ "arm" ], @@ -71,75 +41,26 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", "cpu": [ - "loong64" + "arm64" ], "dev": true, "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/effect": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/effect/-/effect-2.4.10.tgz", - "integrity": "sha512-gWymyTJRCB1tZvwDkMhB3maHEMSddwl84yiB9kZfY+VEK0qL7B9lAUAij5rmBgGfeoZWpdEc5ycnf9VWXOtQRw==", - "peer": true - }, - "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", "cpu": [ "x64" ], @@ -152,26 +73,26 @@ "node": ">=12" } }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "android" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", "cpu": [ "x64" ], @@ -184,26 +105,26 @@ "node": ">=12" } }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "darwin" + "freebsd" ], "engines": { "node": ">=12" } }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", "cpu": [ "x64" ], @@ -216,28 +137,28 @@ "node": ">=12" } }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", "cpu": [ - "arm64" + "arm" ], "dev": true, "optional": true, "os": [ - "freebsd" + "linux" ], "engines": { "node": ">=12" } }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "optional": true, @@ -248,12 +169,12 @@ "node": ">=12" } }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", "cpu": [ - "x64" + "ia32" ], "dev": true, "optional": true, @@ -264,12 +185,12 @@ "node": ">=12" } }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ - "arm" + "loong64" ], "dev": true, "optional": true, @@ -280,12 +201,12 @@ "node": ">=12" } }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", "cpu": [ - "arm64" + "mips64el" ], "dev": true, "optional": true, @@ -296,12 +217,12 @@ "node": ">=12" } }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", "cpu": [ - "mips64el" + "ppc64" ], "dev": true, "optional": true, @@ -312,12 +233,12 @@ "node": ">=12" } }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", "cpu": [ - "ppc64" + "riscv64" ], "dev": true, "optional": true, @@ -328,12 +249,12 @@ "node": ">=12" } }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", "cpu": [ - "riscv64" + "s390x" ], "dev": true, "optional": true, @@ -344,12 +265,12 @@ "node": ">=12" } }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", "cpu": [ - "s390x" + "x64" ], "dev": true, "optional": true, @@ -360,10 +281,10 @@ "node": ">=12" } }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", "cpu": [ "x64" ], @@ -376,10 +297,10 @@ "node": ">=12" } }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", "cpu": [ "x64" ], @@ -392,10 +313,10 @@ "node": ">=12" } }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", "cpu": [ "x64" ], @@ -408,12 +329,12 @@ "node": ">=12" } }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "optional": true, @@ -424,12 +345,12 @@ "node": ">=12" } }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", "cpu": [ - "x64" + "ia32" ], "dev": true, "optional": true, @@ -440,12 +361,12 @@ "node": ">=12" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, "optional": true, @@ -456,10 +377,59 @@ "node": ">=12" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/effect": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.0.3.tgz", + "integrity": "sha512-mgG+FoWrM4sny8OxDFWCpq+6LwGf9cK/JztVhxZQeZM9ZMXY+lKbdMEQmemNYce0QVAz2+YqUKwhKzOidwbZzg==", + "peer": true + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, "node_modules/fast-check": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.13.2.tgz", - "integrity": "sha512-ouTiFyeMoqmNg253xqy4NSacr5sHxH6pZpLOaHgaAdgZxFWdtsfxExwolpveoAE9CJdV+WYjqErNGef6SqA5Mg==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.17.2.tgz", + "integrity": "sha512-+3DPTxtxABLgmmVpYxrash3DHoq0cMa1jjLYNp3qqokKKhqVEaS4lbnaDKqWU5Dd6C2pEudPPBAEEQ9nUou9OQ==", "funding": [ { "type": "individual", @@ -472,16 +442,16 @@ ], "peer": true, "dependencies": { - "pure-rand": "^6.0.0" + "pure-rand": "^6.1.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -493,18 +463,21 @@ } }, "node_modules/get-tsconfig": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.3.0.tgz", - "integrity": "sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, "funding": { "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "funding": [ { "type": "individual", @@ -517,6 +490,15 @@ ], "peer": true }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -537,26 +519,26 @@ } }, "node_modules/tsx": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.2.tgz", - "integrity": "sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.14.0.tgz", + "integrity": "sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==", "dev": true, "dependencies": { - "@esbuild-kit/cjs-loader": "^2.4.1", - "@esbuild-kit/core-utils": "^3.0.0", - "@esbuild-kit/esm-loader": "^2.5.4" + "esbuild": "~0.18.20", + "get-tsconfig": "^4.7.2", + "source-map-support": "^0.5.21" }, "bin": { - "tsx": "dist/cli.js" + "tsx": "dist/cli.mjs" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" } }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -566,301 +548,5 @@ "node": ">=14.17" } } - }, - "dependencies": { - "@effect/schema": { - "version": "0.64.10", - "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.64.10.tgz", - "integrity": "sha512-V8eatG6dS30smzgmapR9EkyGUhXE7vVZFUiKDNSvp1AumNPjwIKjM8TW/Y/hA4HNm49RV+kgyyGcsI0Mu7owJA==", - "requires": {} - }, - "@esbuild-kit/cjs-loader": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.1.tgz", - "integrity": "sha512-lhc/XLith28QdW0HpHZvZKkorWgmCNT7sVelMHDj3HFdTfdqkwEKvT+aXVQtNAmCC39VJhunDkWhONWB7335mg==", - "dev": true, - "requires": { - "@esbuild-kit/core-utils": "^3.0.0", - "get-tsconfig": "^4.2.0" - } - }, - "@esbuild-kit/core-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.0.0.tgz", - "integrity": "sha512-TXmwH9EFS3DC2sI2YJWJBgHGhlteK0Xyu1VabwetMULfm3oYhbrsWV5yaSr2NTWZIgDGVLHbRf0inxbjXqAcmQ==", - "dev": true, - "requires": { - "esbuild": "~0.15.10", - "source-map-support": "^0.5.21" - } - }, - "@esbuild-kit/esm-loader": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.5.4.tgz", - "integrity": "sha512-afmtLf6uqxD5IgwCzomtqCYIgz/sjHzCWZFvfS5+FzeYxOURPUo4QcHtqJxbxWOMOogKriZanN/1bJQE/ZL93A==", - "dev": true, - "requires": { - "@esbuild-kit/core-utils": "^3.0.0", - "get-tsconfig": "^4.2.0" - } - }, - "@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "dev": true, - "optional": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "effect": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/effect/-/effect-2.4.10.tgz", - "integrity": "sha512-gWymyTJRCB1tZvwDkMhB3maHEMSddwl84yiB9kZfY+VEK0qL7B9lAUAij5rmBgGfeoZWpdEc5ycnf9VWXOtQRw==", - "peer": true - }, - "esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "dev": true, - "optional": true - }, - "fast-check": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.13.2.tgz", - "integrity": "sha512-ouTiFyeMoqmNg253xqy4NSacr5sHxH6pZpLOaHgaAdgZxFWdtsfxExwolpveoAE9CJdV+WYjqErNGef6SqA5Mg==", - "peer": true, - "requires": { - "pure-rand": "^6.0.0" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "get-tsconfig": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.3.0.tgz", - "integrity": "sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==", - "dev": true - }, - "pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "peer": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "tsx": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.2.tgz", - "integrity": "sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==", - "dev": true, - "requires": { - "@esbuild-kit/cjs-loader": "^2.4.1", - "@esbuild-kit/core-utils": "^3.0.0", - "@esbuild-kit/esm-loader": "^2.5.4", - "fsevents": "~2.3.2" - } - }, - "typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true - } } } diff --git a/test/fixtures/typescript-effect-schema/package.json b/test/fixtures/typescript-effect-schema/package.json index 42466e940..81e8e5e6e 100644 --- a/test/fixtures/typescript-effect-schema/package.json +++ b/test/fixtures/typescript-effect-schema/package.json @@ -10,9 +10,9 @@ "license": "Apache-2.0", "devDependencies": { "tsx": "^3.12.2", - "typescript": "^5.0.0" + "typescript": "^5.4.0" }, "dependencies": { - "@effect/schema": "^0.64.10" + "@effect/schema": "^0.66.5" } } From 8eb481f183bea07b94328485074facd6a3e2a757 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:09:59 -0700 Subject: [PATCH 64/99] build(deps-dev): bump @typescript-eslint/parser from 7.6.0 to 7.7.0 (#2578) --- package-lock.json | 193 +++++++++++++++++++++++-- packages/quicktype-vscode/package.json | 2 +- 2 files changed, 178 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8f1fc2bca..7e351e574 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1067,15 +1067,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4" }, "engines": { @@ -1094,6 +1094,105 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", @@ -6918,7 +7017,7 @@ "@types/readable-stream": "^4.0.10", "@types/vscode": "^1.87.0", "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", + "@typescript-eslint/parser": "^7.7.0", "@vscode/test-cli": "^0.0.6", "@vscode/test-electron": "^2.3.9", "@vscode/vsce": "^2.25.0", @@ -7636,16 +7735,78 @@ } }, "@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" + } + }, + "@typescript-eslint/types": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.7.0", + "eslint-visitor-keys": "^3.4.3" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/scope-manager": { @@ -10689,7 +10850,7 @@ "@types/readable-stream": "^4.0.10", "@types/vscode": "^1.87.0", "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", + "@typescript-eslint/parser": "^7.7.0", "@vscode/test-cli": "^0.0.6", "@vscode/test-electron": "^2.3.9", "@vscode/vsce": "^2.25.0", diff --git a/packages/quicktype-vscode/package.json b/packages/quicktype-vscode/package.json index 8178a8353..5c96e9b56 100644 --- a/packages/quicktype-vscode/package.json +++ b/packages/quicktype-vscode/package.json @@ -149,7 +149,7 @@ "@types/readable-stream": "^4.0.10", "@types/vscode": "^1.87.0", "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", + "@typescript-eslint/parser": "^7.7.0", "@vscode/test-cli": "^0.0.6", "@vscode/test-electron": "^2.3.9", "@vscode/vsce": "^2.25.0", From 7f0b11c06c42901b0e1864ee027ad3207711807a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:10:07 -0700 Subject: [PATCH 65/99] build(deps-dev): bump prettier from 3.0.1 to 3.2.5 (#2579) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7e351e574..958d1f05a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "deep-equal": "^2.2.3", "esbuild": "^0.20.2", "exit": "^0.1.2", - "prettier": "^3.0.1", + "prettier": "^3.2.5", "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", @@ -5205,9 +5205,9 @@ } }, "node_modules/prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", - "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -10788,9 +10788,9 @@ "dev": true }, "prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", - "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true }, "process": { diff --git a/package.json b/package.json index 9e74b2370..5c5291569 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "deep-equal": "^2.2.3", "esbuild": "^0.20.2", "exit": "^0.1.2", - "prettier": "^3.0.1", + "prettier": "^3.2.5", "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", From 22e34d2706a015cb445a00cc89ca03de37cadc98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:10:21 -0700 Subject: [PATCH 66/99] build(deps): bump browser-or-node from 2.1.1 to 3.0.0 (#2580) --- package-lock.json | 36 ++++++++++++++-------------- packages/quicktype-core/package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 958d1f05a..c9445e2bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1834,9 +1834,9 @@ } }, "node_modules/browser-or-node": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.2.1.tgz", - "integrity": "sha512-sVIA0cysIED0nbmNOm7sZzKfgN1rpFmrqvLZaFWspaBAftfQcezlC81G6j6U2RJf4Lh66zFxrCeOsvkUXIcPWg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", + "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==" }, "node_modules/browser-stdout": { "version": "1.3.1", @@ -6867,7 +6867,7 @@ "dependencies": { "@glideapps/ts-necessities": "2.2.3", "@types/urijs": "^1.19.25", - "browser-or-node": "^2.1.1", + "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", "is-url": "^1.2.4", @@ -6894,11 +6894,6 @@ "typescript": "4.9.5" } }, - "packages/quicktype-core/node_modules/browser-or-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" - }, "packages/quicktype-core/node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -6940,6 +6935,11 @@ "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.2.tgz", "integrity": "sha512-tLjfhinr6doUBcWi7BWnkT2zT6G5UhiZftsiIH6xVvykeXE+FU7Wr0MyqwmqideWlDD5rG+VjVLptLviGo04CA==" }, + "packages/quicktype-typescript-input/node_modules/browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + }, "packages/quicktype-typescript-input/node_modules/isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", @@ -8263,9 +8263,9 @@ } }, "browser-or-node": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.2.1.tgz", - "integrity": "sha512-sVIA0cysIED0nbmNOm7sZzKfgN1rpFmrqvLZaFWspaBAftfQcezlC81G6j6U2RJf4Lh66zFxrCeOsvkUXIcPWg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", + "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==" }, "browser-stdout": { "version": "1.3.1", @@ -10892,7 +10892,7 @@ "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.25", "@types/yaml": "^1.9.7", - "browser-or-node": "^2.1.1", + "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", "is-url": "^1.2.4", @@ -10909,11 +10909,6 @@ "yaml": "^2.4.1" }, "dependencies": { - "browser-or-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" - }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -10948,6 +10943,11 @@ "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.2.tgz", "integrity": "sha512-tLjfhinr6doUBcWi7BWnkT2zT6G5UhiZftsiIH6xVvykeXE+FU7Wr0MyqwmqideWlDD5rG+VjVLptLviGo04CA==" }, + "browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 49346dada..08809fcc3 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -14,7 +14,7 @@ "dependencies": { "@glideapps/ts-necessities": "2.2.3", "@types/urijs": "^1.19.25", - "browser-or-node": "^2.1.1", + "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "is-url": "^1.2.4", "cross-fetch": "^4.0.0", From 84859e10a3ee9fb9d9417f8e98a463ba4cafdf3c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 09:50:04 -0700 Subject: [PATCH 67/99] build(deps-dev): bump @types/lodash from 4.14.197 to 4.17.0 (#2583) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c9445e2bf..12bf909da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "@types/command-line-args": "^5.2.0", "@types/command-line-usage": "^5.0.4", "@types/graphql": "^0.11.7", - "@types/lodash": "^4.14.197", + "@types/lodash": "^4.17.0", "@types/semver": "^7.5.0", "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", @@ -913,9 +913,9 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", - "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", "dev": true }, "node_modules/@types/minimatch": { @@ -7598,9 +7598,9 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", - "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", "dev": true }, "@types/minimatch": { diff --git a/package.json b/package.json index 5c5291569..7cb74412c 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@types/command-line-args": "^5.2.0", "@types/command-line-usage": "^5.0.4", "@types/graphql": "^0.11.7", - "@types/lodash": "^4.14.197", + "@types/lodash": "^4.17.0", "@types/semver": "^7.5.0", "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", From bc0608f14e341479ed78ddcfe30061f59c0fff1d Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Mon, 29 Apr 2024 09:50:19 -0700 Subject: [PATCH 68/99] remove unused types devDeps (#2586) --- package-lock.json | 42 ---------------------------- packages/quicktype-core/package.json | 2 -- 2 files changed, 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12bf909da..0ca8c6fb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -897,16 +897,6 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, - "node_modules/@types/js-base64": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", - "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", - "deprecated": "This is a stub types definition. js-base64 provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "js-base64": "*" - } - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1021,16 +1011,6 @@ "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", "dev": true }, - "node_modules/@types/yaml": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz", - "integrity": "sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==", - "deprecated": "This is a stub types definition. yaml provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "yaml": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", @@ -6883,13 +6863,11 @@ }, "devDependencies": { "@types/browser-or-node": "^1.3.2", - "@types/js-base64": "^3.3.1", "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", - "@types/yaml": "^1.9.7", "tslint": "^6.1.3", "typescript": "4.9.5" } @@ -7583,15 +7561,6 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, - "@types/js-base64": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", - "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", - "dev": true, - "requires": { - "js-base64": "*" - } - }, "@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -7706,15 +7675,6 @@ "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", "dev": true }, - "@types/yaml": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz", - "integrity": "sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==", - "dev": true, - "requires": { - "yaml": "*" - } - }, "@typescript-eslint/eslint-plugin": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", @@ -10884,14 +10844,12 @@ "requires": { "@glideapps/ts-necessities": "2.2.3", "@types/browser-or-node": "^1.3.2", - "@types/js-base64": "^3.3.1", "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.25", - "@types/yaml": "^1.9.7", "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 08809fcc3..61beb8fa2 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -30,13 +30,11 @@ }, "devDependencies": { "@types/browser-or-node": "^1.3.2", - "@types/js-base64": "^3.3.1", "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", - "@types/yaml": "^1.9.7", "tslint": "^6.1.3", "typescript": "4.9.5" }, From e50d5a05fbf55e667c82512a42ad3e3308d92e21 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Mon, 29 Apr 2024 20:23:42 -0700 Subject: [PATCH 69/99] chore: Replace tslint with eslint (#2555) --- .eslintignore | 8 + .eslintrc.json | 104 + .gitignore | 1 - .vscode/launch.json | 76 +- .vscode/settings.json | 62 +- .vscode/tasks.json | 15 - package-lock.json | 19036 +++++++++++----- package.json | 15 +- packages/quicktype-core/package.json | 4 +- packages/quicktype-core/src/TypeUtils.ts | 2 - packages/quicktype-core/src/input/Inputs.ts | 1 - packages/quicktype-graphql-input/package.json | 6 +- .../src/GraphQLSchema.ts | 2 +- packages/quicktype-graphql-input/src/index.ts | 2 - .../quicktype-typescript-input/package.json | 6 +- src/index.ts | 2 - tslint.json | 88 - 17 files changed, 14144 insertions(+), 5286 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 .vscode/tasks.json delete mode 100644 tslint.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..135b09976 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +dist +node_modules +packages/*/dist +packages/*/node_modules +test/runs +test/input + +license diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..f35b5c03c --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,104 @@ +{ + "overrides": [ + { + "extends": ["canonical/json"], + "files": "*.json" + }, + { + "extends": [ + "eslint:recommended", + "canonical/typescript", + "canonical/typescript-type-checking", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript" + ], + "plugins": ["canonical"], + "parserOptions": { + "tsconfigRootDir": "./", + "project": ["./tsconfig.json", "./packages/*/tsconfig.json"] + }, + "settings": { + "import/resolver": { + "typescript": true, + "node": true + } + }, + "rules": { + "comma-dangle": "off", + "no-extra-parens": "off", + "no-case-declarations": "warn", + "no-duplicate-imports": "error", + "canonical/prefer-inline-type-import": "error", + "typescript-sort-keys/string-enum": "off", + + "sort-imports": [ + "error", + { + "ignoreDeclarationSort": true + } + ], + "import/first": "error", + "import/order": [ + "error", + { + "newlines-between": "always", + "groups": ["builtin", "external", "internal", "parent", "sibling", "index", "object", "type"], + "pathGroups": [ + { + "pattern": "@/**", + "group": "internal", + "position": "before" + } + ], + "alphabetize": { + "order": "asc" /* sort in ascending order. Options: ['ignore', 'asc', 'desc'] */, + "caseInsensitive": true /* ignore case. Options: [true, false] */ + } + } + ], + + "import/no-absolute-path": "error", + "import/no-cycle": "error", + "import/no-duplicates": "error", + "import/no-extraneous-dependencies": "error", + "import/no-named-as-default": "off", + "import/no-useless-path-segments": "error", + + "@typescript-eslint/class-literal-property-style": "off", + "@typescript-eslint/comma-dangle": "off", + "@typescript-eslint/consistent-type-definitions": ["error", "interface"], + "@typescript-eslint/consistent-type-imports": ["error", { "prefer": "type-imports" }], + "@typescript-eslint/explicit-function-return-type": "warn", + "@typescript-eslint/indent": "off", + "@typescript-eslint/quotes": ["error", "double", { "avoidEscape": true }], + "@typescript-eslint/member-delimiter-style": "off", + "@typescript-eslint/no-base-to-string": "warn", + "@typescript-eslint/no-empty-interface": "warn", + "@typescript-eslint/no-extra-parens": "off", + "@typescript-eslint/no-loop-func": "warn", + "@typescript-eslint/no-misused-promises": ["error", { "checksVoidReturn": false }], + "@typescript-eslint/no-unused-vars": ["error", { "vars": "local", "args": "none" }], + "@typescript-eslint/no-use-before-define": "warn", + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/prefer-readonly": "warn", + "@typescript-eslint/prefer-reduce-type-parameter": "off", + "@typescript-eslint/require-array-sort-compare": "off", + "@typescript-eslint/space-before-function-paren": "off", + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/unbound-method": "warn", + "@typescript-eslint/unified-signatures": "error" + }, + "overrides": [ + { + "files": "*.d.ts", + "rules": { + "no-var": "off" + } + } + ], + "files": "*.ts" + } + ], + "root": true +} diff --git a/.gitignore b/.gitignore index f800a1642..7178f4122 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,3 @@ test/fixtures/objective-c/quicktype /.bsp .metals .scala-build -.vscode diff --git a/.vscode/launch.json b/.vscode/launch.json index 7c36e6c8a..1cbad2c56 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,40 +1,40 @@ { - // Use IntelliSense to learn about possible Node.js debug attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "quicktype", - "type": "node", - "request": "launch", - "program": "${workspaceRoot}/node_modules/ts-node/dist/_bin.js", - "runtimeArgs": ["--nolazy"], - "args": [ - "--project", - "src/cli/tsconfig.json", - "src/cli/index.ts", - "--lang", - "dart", - "--src-lang", - "json", - "./test/inputs/json/priority/blns-object.json" - ], - "cwd": "${workspaceRoot}", - "protocol": "inspector" - }, - { - "name": "test", - "type": "node", - "request": "launch", - "program": "${workspaceRoot}/node_modules/ts-node/dist/_bin.js", - "args": ["--project", "test/tsconfig.json", "test/test.ts"], - "cwd": "${workspaceRoot}", - "protocol": "inspector", - "env": { - "CPUs": "1", - "FIXTURE": "golang" - } - } - ] + // Use IntelliSense to learn about possible Node.js debug attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "quicktype", + "type": "node", + "request": "launch", + "program": "${workspaceRoot}/node_modules/ts-node/dist/_bin.js", + "runtimeArgs": ["--nolazy"], + "args": [ + "--project", + "src/cli/tsconfig.json", + "src/cli/index.ts", + "--lang", + "dart", + "--src-lang", + "json", + "./test/inputs/json/priority/blns-object.json" + ], + "cwd": "${workspaceRoot}", + "protocol": "inspector" + }, + { + "name": "test", + "type": "node", + "request": "launch", + "program": "${workspaceRoot}/node_modules/ts-node/dist/_bin.js", + "args": ["--project", "test/tsconfig.json", "test/test.ts"], + "cwd": "${workspaceRoot}", + "protocol": "inspector", + "env": { + "CPUs": "1", + "FIXTURE": "golang" + } + } + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index ea68a90d3..f57596256 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,25 +1,39 @@ { - // Place your settings in this file to overwrite default and user settings. - "editor.formatOnSave": true, - "spellright.ignoreFiles": [ - "**/.gitignore", - "**/.spellignore" - ], - "search.exclude": { - "**/.git": true, - "**/node_modules": true, - "**/bower_components": true, - "**/tmp": true, - "output": true, - "**/obj": true, - "**/bin": true, - "test/inputs": true, - "test/runs": true, - "app/build": true, - "elm-stuff": true, - "dist": true - }, - "explorer.excludeGitIgnore": false, - "spellright.documentTypes": [], - "java.configuration.updateBuildConfiguration": "automatic" -} \ No newline at end of file + // Place your settings in this file to overwrite default and user settings. + "editor.formatOnSave": true, + "search.exclude": { + "**/.git": true, + "**/node_modules": true, + "**/bower_components": true, + "**/tmp": true, + "output": true, + "**/obj": true, + "**/bin": true, + "test/inputs": true, + "test/runs": true, + "app/build": true, + "elm-stuff": true, + "dist": true + }, + "explorer.excludeGitIgnore": false, + "java.configuration.updateBuildConfiguration": "automatic", + + "files.associations": { + "*.schema": "jsonc" + }, + + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.wordWrap": "on", + "editor.insertSpaces": true, + "editor.tabSize": 4, + "editor.detectIndentation": false + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.wordWrap": "on", + "editor.insertSpaces": true, + "editor.tabSize": 4, + "editor.detectIndentation": false + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index d41fa1af8..000000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "tslint", - "group": "build", - "problemMatcher": [ - "$tslint5" - ] - } - ] -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0ca8c6fb8..4923f1c64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,16 +45,25 @@ "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", + "@typescript-eslint/eslint-plugin": "^6.3.0", + "@typescript-eslint/parser": "^6.3.0", "ajv": "^5.5.2", "deep-equal": "^2.2.3", "esbuild": "^0.20.2", + "eslint": "^8.57.0", + "eslint-config-canonical": "^41.1.7", + "eslint-config-prettier": "^6.10.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-canonical": "^3.4.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-json": "^3.1.0", + "eslint-plugin-prettier": "^4.2.1", "exit": "^0.1.2", "prettier": "^3.2.5", "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", "ts-node": "^10.9.2", - "tslint": "^6.1.3", "watch": "^1.0.2" }, "engines": { @@ -90,398 +99,968 @@ "node": ">=0.10.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=12" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], + "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], + "node_modules/@ardatan/sync-fetch": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", + "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "node-fetch": "^2.6.1" + }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/core": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/eslint-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", + "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, "engines": { - "node": ">=12" + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/eslint-plugin": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.23.5.tgz", + "integrity": "sha512-03+E/58Hoo/ui69gR+beFdGpplpoVK0BSIdke2iw4/Bz7eGN0ssRenNlnU4nmbkowNQOPCStKSwFr8H6DiY49g==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, "engines": { - "node": ">=12" + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/eslint-parser": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], + "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-s390x": { + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.1.tgz", + "integrity": "sha512-T9ko/35G+Bkl+win48GduaPlhSlOjjE5s1TeiEcD+QpxlLQnoEfb/nO/T+TQqkm+ipFwORn+rB8w14iJ/uD0bg==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", + "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", + "dev": true, + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ - "s390x" + "ppc64" ], "dev": true, "optional": true, "os": [ - "linux" + "aix" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/linux-x64": { + "node_modules/@esbuild/android-arm": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ - "x64" + "arm" ], "dev": true, "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { + "node_modules/@esbuild/android-arm64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ - "x64" + "arm64" ], "dev": true, "optional": true, "os": [ - "netbsd" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/openbsd-x64": { + "node_modules/@esbuild/android-x64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "openbsd" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/sunos-x64": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ - "x64" + "arm64" ], "dev": true, "optional": true, "os": [ - "sunos" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-arm64": { + "node_modules/@esbuild/darwin-x64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ - "arm64" + "x64" ], "dev": true, "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-ia32": { + "node_modules/@esbuild/freebsd-arm64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-x64": { + "node_modules/@esbuild/freebsd-x64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -538,30 +1117,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/@eslint/eslintrc/node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -582,6 +1143,92 @@ "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==" }, + "node_modules/@graphql-eslint/eslint-plugin": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz", + "integrity": "sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@graphql-tools/code-file-loader": "^7.3.6", + "@graphql-tools/graphql-tag-pluck": "^7.3.6", + "@graphql-tools/utils": "^9.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "graphql-config": "^4.4.0", + "graphql-depth-limit": "^1.1.0", + "lodash.lowercase": "^4.3.0", + "tslib": "^2.4.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/code-file-loader": { + "version": "7.3.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", + "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", + "dev": true, + "dependencies": { + "@graphql-tools/graphql-tag-pluck": "7.5.2", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/graphql-tag-pluck": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", + "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.8", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -601,6 +1248,10 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { "node": ">=12.22" }, @@ -610,9 +1261,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@isaacs/cliui": { @@ -720,6 +1371,30 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -728,6 +1403,15 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", @@ -777,6 +1461,66 @@ "node": ">=4.2.0" } }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", + "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -812,6 +1556,63 @@ "node": ">= 8" } }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", + "dev": true, + "dependencies": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + } + }, + "node_modules/@peculiar/asn1-schema/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/json-schema/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", + "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", + "dev": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.7.8" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@peculiar/webcrypto/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -822,6 +1623,30 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", + "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz", + "integrity": "sha512-0HejFckBN2W+ucM6cUOlwsByTKt9/+0tWhqUffNIcHqCXkthY/mZ7AuYPK/2IIaGWhdl0h+tICDO0ssLMd6XMQ==", + "dev": true + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -902,6 +1727,12 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/lodash": { "version": "4.17.0", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", @@ -937,6 +1768,12 @@ "@types/node": "*" } }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, "node_modules/@types/pako": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", @@ -953,11 +1790,7 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } + "dev": true }, "node_modules/@types/semver": { "version": "7.5.8", @@ -1011,34 +1844,43 @@ "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", "dev": true }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1046,81 +1888,71 @@ } } }, - "node_modules/@typescript-eslint/parser": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", - "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", - "debug": "^4.3.4" + "@typescript-eslint/utils": "5.62.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1132,84 +1964,107 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "eslint-visitor-keys": "^3.4.3" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "tslib": "^1.8.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">= 6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1217,13 +2072,57 @@ } } }, - "node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1231,22 +2130,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1268,9 +2167,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1283,41 +2182,41 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "semver": "^7.6.0" + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1494,15 +2393,56 @@ "node": ">=4" } }, - "node_modules/@vscode/vsce/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "node_modules/@vscode/vsce/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=10" + } + }, + "node_modules/@whatwg-node/events": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", + "integrity": "sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==", + "dev": true + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.8.tgz", + "integrity": "sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==", + "dev": true, + "dependencies": { + "@peculiar/webcrypto": "^1.4.0", + "@whatwg-node/node-fetch": "^0.3.6", + "busboy": "^1.6.0", + "urlpattern-polyfill": "^8.0.0", + "web-streams-polyfill": "^3.2.1" + } + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz", + "integrity": "sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==", + "dev": true, + "dependencies": { + "@whatwg-node/events": "^0.0.3", + "busboy": "^1.6.0", + "fast-querystring": "^1.1.1", + "fast-url-parser": "^1.1.3", + "tslib": "^2.3.1" } }, + "node_modules/@whatwg-node/node-fetch/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -1608,18 +2548,42 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "dequal": "^2.0.3" } }, "node_modules/array-back": { @@ -1631,13 +2595,36 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1652,6 +2639,182 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "dev": true, + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/asn1js/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/ast-types/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1673,6 +2836,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/azure-devops-node-api": { "version": "12.5.0", "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", @@ -1777,6 +2958,12 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1824,17 +3011,49 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "patreon", + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", "url": "https://www.patreon.com/feross" }, { @@ -1871,13 +3090,16 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.16.0" } }, "node_modules/c8": { @@ -1963,6 +3185,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2036,6 +3278,12 @@ "node": ">=8" } }, + "node_modules/chance": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.11.tgz", + "integrity": "sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==", + "dev": true + }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", @@ -2098,6 +3346,27 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -2105,6 +3374,33 @@ "dev": true, "optional": true }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2219,10 +3515,22 @@ } }, "node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -2265,11 +3573,49 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/core-js-pure": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", + "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/cosmiconfig": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/create-eslint-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/create-eslint-index/-/create-eslint-index-1.0.0.tgz", + "integrity": "sha512-nXvJjnfDytOOaPOonX0h0a1ggMoqrhdekGeZkD6hkcWYvlCWhU719tKFVh8eU04CnMwu3uwe1JjwuUF2C3k2qg==", + "dev": true, + "dependencies": { + "lodash.get": "^4.3.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -2325,6 +3671,69 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dataloader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2467,6 +3876,15 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -2564,6 +3982,15 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dset": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -2594,6 +4021,12 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "node_modules/electron-to-chromium": { + "version": "1.4.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", + "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2617,6 +4050,18 @@ "once": "^1.4.0" } }, + "node_modules/enhance-visitors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", + "integrity": "sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==", + "dev": true, + "dependencies": { + "lodash": "^4.13.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", @@ -2642,6 +4087,75 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -2689,6 +4203,83 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, + "node_modules/es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -2766,6 +4357,19 @@ "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/escodegen/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -2881,1463 +4485,1676 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint-ast-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", + "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "lodash.get": "^4.4.2", + "lodash.zip": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=4" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/eslint-compat-utils": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", + "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-canonical": { + "version": "41.4.2", + "resolved": "https://registry.npmjs.org/eslint-config-canonical/-/eslint-config-canonical-41.4.2.tgz", + "integrity": "sha512-ayP7OPe7Mh0Vf1K8PXQshekyeM3dNcEVwoJAu5ozrZXftaY36NPaH57Oj1FcmMzr2gpc3WbjQ5frVqxnqjnKMg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/eslint-parser": "^7.22.15", + "@babel/eslint-plugin": "^7.22.10", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@graphql-eslint/eslint-plugin": "^3.20.1", + "@next/eslint-plugin-next": "^13.5.4", + "@rushstack/eslint-patch": "^1.5.1", + "@typescript-eslint/eslint-plugin": "^6.7.5", + "@typescript-eslint/parser": "^6.7.5", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-ava": "^14.0.0", + "eslint-plugin-canonical": "^4.14.0", + "eslint-plugin-cypress": "^2.15.1", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-fp": "^2.3.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jest": "^27.4.2", + "eslint-plugin-jsdoc": "^46.8.2", + "eslint-plugin-jsonc": "^2.10.0", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-lodash": "^7.4.0", + "eslint-plugin-mocha": "^10.2.0", + "eslint-plugin-modules-newline": "0.0.6", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-regexp": "^1.15.0", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-typescript-sort-keys": "^3.0.0", + "eslint-plugin-unicorn": "^48.0.1", + "eslint-plugin-vitest": "^0.3.2", + "eslint-plugin-yml": "^1.10.0", + "eslint-plugin-zod": "^1.4.0", + "prettier": "^3.0.3", + "ramda": "^0.29.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "eslint": "^8.30.0" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/eslint-config-canonical/node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/eslint-config-canonical/node_modules/eslint-plugin-canonical": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-4.18.0.tgz", + "integrity": "sha512-0Egc0FKOnCRdu3bFEJhfHkdkusIgW0UxdemukkowZQnQsnf12FHSJ7K26b+tZ5pKB7cTyECSaqvEpoIJfplX4g==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^6.1.0", + "chance": "^1.1.11", + "debug": "^4.3.4", + "eslint-import-resolver-typescript": "^3.5.3", + "eslint-module-utils": "^2.7.4", + "is-get-set-prop": "^1.0.0", + "is-js-type": "^2.0.0", + "is-obj-prop": "^1.0.0", + "is-proto-prop": "^2.0.0", + "lodash": "^4.17.21", + "natural-compare": "^1.4.0", + "recast": "^0.23.2", + "roarr": "^7.14.2", + "ts-unused-exports": "^9.0.3", + "xregexp": "^5.1.1" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/eslint-config-canonical/node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/eslint/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/eslint-config-canonical/node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10.13.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/eslint-config-canonical/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "get-stdin": "^6.0.0" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "ms": "^2.1.1" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint-plugin-ava": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-14.0.0.tgz", + "integrity": "sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "enhance-visitors": "^1.0.0", + "eslint-utils": "^3.0.0", + "espree": "^9.0.0", + "espurify": "^2.1.1", + "import-modules": "^2.1.0", + "micro-spelling-correcter": "^1.1.1", + "pkg-dir": "^5.0.0", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=14.17 <15 || >=16.4" + }, + "peerDependencies": { + "eslint": ">=8.26.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-plugin-ava/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "node_modules/eslint-plugin-canonical": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-3.4.0.tgz", + "integrity": "sha512-akY2RpJD3VC2XXsU/02VsbzkHfybsZTsruOKPI7pJzQ+lZaS3UGM1H0vUKf0itXsbMHHJbIT78hUXU2d2HemZQ==", "dev": true, + "dependencies": { + "is-get-set-prop": "^1.0.0", + "is-js-type": "^2.0.0", + "is-obj-prop": "^1.0.0", + "is-proto-prop": "^2.0.0", + "lodash": "^4.17.21", + "natural-compare": "^1.4.0", + "ts-unused-exports": "^9.0.3", + "xregexp": "^5.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=16.0.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" + "node_modules/eslint-plugin-cypress": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", + "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", + "dev": true, + "dependencies": { + "globals": "^13.20.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, "engines": { - "node": ">=0.8.x" + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/exec-sh": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "merge": "^1.1.3" + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", "dev": true, - "optional": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, "engines": { - "node": ">=6" + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/falafel": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", - "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "isarray": "^2.0.1" + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" } }, - "node_modules/falafel/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/eslint-plugin-fp": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-fp/-/eslint-plugin-fp-2.3.0.tgz", + "integrity": "sha512-3n2oHibwoIxAht9/+ZaTldhI6brXORgl8oNXqZd+d9xuAQt2SBJ2/aml0oQRMWvXrgsz2WG6wfC++NjzSG3prA==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "create-eslint-index": "^1.0.0", + "eslint-ast-utils": "^1.0.0", + "lodash": "^4.13.1", + "req-all": "^0.1.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=4.0.0" + }, + "peerDependencies": { + "eslint": ">=3" } }, - "node_modules/falafel/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "pend": "~1.2.0" + "ms": "^2.1.1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "esutils": "^2.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "dev": true, "dependencies": { - "array-back": "^3.0.1" + "@typescript-eslint/utils": "^5.10.0" }, "engines": { - "node": ">=4.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, - "bin": { - "flat": "cli.js" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "is-callable": "^1.1.3" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/eslint-plugin-jest/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 6" + "node": ">=8.0.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "node_modules/eslint-plugin-jest/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "optional": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "engines": { + "node": ">=4.0" + } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/eslint-plugin-jest/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "tslib": "^1.8.1" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/eslint-plugin-jsdoc": { + "version": "46.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", + "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@es-joy/jsdoccomment": "~0.41.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", + "semver": "^7.5.4", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/eslint-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", + "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=12.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/eslint-plugin-jsonc": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.14.1.tgz", + "integrity": "sha512-Tei6G4N7pZulP5MHi0EIdtseiCqUPkDMd0O8Zrw4muMIlsjJ5/B9X+U3Pfo6B7l0mTL9LN9FwuWT70dRJ6z7tg==", "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "eslint-compat-utils": "^0.5.0", + "espree": "^9.6.1", + "graphemer": "^1.4.0", + "jsonc-eslint-parser": "^2.0.4", + "natural-compare": "^1.4.0", + "synckit": "^0.6.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, - "optional": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "engines": { - "node": "*" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-lodash": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz", + "integrity": "sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "lodash": "^4.17.21" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "peerDependencies": { + "eslint": ">=2" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/eslint-plugin-mocha": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz", + "integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "eslint-utils": "^3.0.0", + "globals": "^13.24.0", + "rambda": "^7.4.0" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/eslint-plugin-modules-newline": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-modules-newline/-/eslint-plugin-modules-newline-0.0.6.tgz", + "integrity": "sha512-69NpBr68U6pmXL+y+KHl/64PwRarceC3/sCNUVxRbe0gPI32SIw8AtdpkqNiJYCa2yMd4lRrkrnU09Yio7KVzA==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "requireindex": "~1.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/graphql": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", - "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", + "node_modules/eslint-plugin-node/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "dependencies": { - "iterall": "1.1.3" + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { - "node": ">= 0.4.0" + "node": ">=4" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.3" + "esutils": "^2.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "function-bind": "^1.1.2" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { - "he": "bin/he" + "semver": "bin/semver.js" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/eslint-plugin-regexp": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz", + "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "comment-parser": "^1.1.2", + "grapheme-splitter": "^1.0.4", + "jsdoctypeparser": "^9.0.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0", + "scslre": "^0.2.0" }, "engines": { - "node": ">=10" + "node": "^12 || >=14" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "node_modules/eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", + "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "node_modules/eslint-plugin-typescript-sort-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-typescript-sort-keys/-/eslint-plugin-typescript-sort-keys-3.2.0.tgz", + "integrity": "sha512-GutszvriaVtwmn7pQjuj9/9o0iXhD7XZs0/424+zsozdRr/fdg5e8206t478Vnqnqi1GjuxcAolj1kf74KnhPA==", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "@typescript-eslint/experimental-utils": "^5.0.0", + "json-schema": "^0.4.0", + "natural-compare-lite": "^1.4.0" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6 || ^7", + "eslint": "^7 || ^8", + "typescript": "^3 || ^4 || ^5" } }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/eslint-plugin-unicorn": { + "version": "48.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz", + "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "@babel/helper-validator-identifier": "^7.22.5", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^3.8.0", + "clean-regexp": "^1.0.0", + "esquery": "^1.5.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.5.4", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.44.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/eslint-plugin-unicorn/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, + "node_modules/eslint-plugin-unicorn/node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/eslint-plugin-vitest": { + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.26.tgz", + "integrity": "sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==", "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^7.1.1" + }, "engines": { - "node": ">= 4" + "node": "^18.0.0 || >= 20.0.0" + }, + "peerDependencies": { + "eslint": ">=8.0.0", + "vitest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "vitest": { + "optional": true + } } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/scope-manager": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" }, "engines": { - "node": ">=6" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true, "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "optional": true - }, - "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/utils": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "@typescript-eslint/types": "7.4.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/eslint-plugin-vitest/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/eslint-plugin-vitest/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/eslint-plugin-yml": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz", + "integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "debug": "^4.3.2", + "eslint-compat-utils": "^0.5.0", + "lodash": "^4.17.21", + "natural-compare": "^1.4.0", + "yaml-eslint-parser": "^1.2.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/eslint-plugin-zod": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-zod/-/eslint-plugin-zod-1.4.0.tgz", + "integrity": "sha512-i9WzQGw2X5fQcuQh33mA8DQjZJM/yuyZvs1Fc5EyTidX7Ed/g832+1FEQ4u5gtXy+jZ+DVsB5+oMHj4tIOfeZg==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": ">=8.1.0" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-fullwidth-code-point": { + "node_modules/eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=10" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/eslint/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/espurify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", + "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", + "dev": true + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "node_modules/exec-sh": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", + "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "merge": "^1.1.3" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "optional": true, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/extract-files": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", + "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20 || >= 14.13" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/iterall": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", - "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "dev": true }, - "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + "node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8.6.0" } }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "is-glob": "^4.0.1" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "node_modules/fast-printf": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", + "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", "dev": true, "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" + "boolean": "^3.1.4" + }, + "engines": { + "node": ">=10.0" } }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "fast-decode-uri-component": "^1.0.1" } }, - "node_modules/keytar": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dev": true, - "hasInstallScript": true, - "optional": true, "dependencies": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" + "punycode": "^1.3.2" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/fast-url-parser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { - "json-buffer": "3.0.1" + "reusify": "^1.0.4" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "pend": "~1.2.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "uc.micro": "^1.0.1" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dependencies": { - "p-locate": "^5.0.0" + "array-back": "^3.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assignwith": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" @@ -4346,326 +6163,300 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "vlq": "^0.2.2" + "is-callable": "^1.1.3" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { - "semver": "^7.5.3" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" - }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, - "bin": { - "markdown-it": "bin/markdown-it.js" + "engines": { + "node": ">= 6" } }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true + "optional": true }, - "node_modules/merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=8.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { - "node": ">= 0.6" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "optional": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/get-set-props": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", + "integrity": "sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==", + "dev": true, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "resolve-pkg-maps": "^1.0.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "optional": true - }, - "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true, + "optional": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 14.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">= 8.10.0" + "node": ">=8" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, + "define-properties": "^1.1.3" + }, "engines": { - "node": ">=0.3.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { "node": ">=10" }, @@ -4673,759 +6464,797 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" + "get-intrinsic": "^1.1.3" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphql": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", + "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", + "dependencies": { + "iterall": "1.1.3" + } + }, + "node_modules/graphql-config": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.5.0.tgz", + "integrity": "sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==", "dev": true, + "dependencies": { + "@graphql-tools/graphql-file-loader": "^7.3.7", + "@graphql-tools/json-file-loader": "^7.3.7", + "@graphql-tools/load": "^7.5.5", + "@graphql-tools/merge": "^8.2.6", + "@graphql-tools/url-loader": "^7.9.7", + "@graphql-tools/utils": "^9.0.0", + "cosmiconfig": "8.0.0", + "jiti": "1.17.1", + "minimatch": "4.2.3", + "string-env-interpolation": "1.0.1", + "tslib": "^2.4.0" + }, "engines": { - "node": ">=8" + "node": ">= 10.0.0" + }, + "peerDependencies": { + "cosmiconfig-toml-loader": "^1.0.0", + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "cosmiconfig-toml-loader": { + "optional": true + } } }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/graphql-config/node_modules/@graphql-tools/graphql-file-loader": { + "version": "7.5.17", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.17.tgz", + "integrity": "sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "@graphql-tools/import": "6.7.18", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "node_modules/graphql-config/node_modules/@graphql-tools/graphql-file-loader/node_modules/@graphql-tools/import": { + "version": "6.7.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.18.tgz", + "integrity": "sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@graphql-tools/utils": "^9.2.1", + "resolve-from": "5.0.0", + "tslib": "^2.4.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/graphql-config/node_modules/@graphql-tools/json-file-loader": { + "version": "7.4.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.18.tgz", + "integrity": "sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/graphql-config/node_modules/@graphql-tools/load": { + "version": "7.8.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.14.tgz", + "integrity": "sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==", "dev": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", + "p-limit": "3.1.0", + "tslib": "^2.4.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "node_modules/graphql-config/node_modules/@graphql-tools/load/node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" + "node_modules/graphql-config/node_modules/@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true, - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-abi": { - "version": "3.57.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", - "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader": { + "version": "7.17.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz", + "integrity": "sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==", "dev": true, - "optional": true, "dependencies": { - "semver": "^7.3.5" + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/delegate": "^9.0.31", + "@graphql-tools/executor-graphql-ws": "^0.0.14", + "@graphql-tools/executor-http": "^0.1.7", + "@graphql-tools/executor-legacy-ws": "^0.0.11", + "@graphql-tools/utils": "^9.2.1", + "@graphql-tools/wrap": "^9.4.2", + "@types/ws": "^8.0.0", + "@whatwg-node/fetch": "^0.8.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.11", + "ws": "^8.12.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate": { + "version": "9.0.35", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.35.tgz", + "integrity": "sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==", "dev": true, - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" + "@graphql-tools/batch-execute": "^8.5.22", + "@graphql-tools/executor": "^0.0.20", + "@graphql-tools/schema": "^9.0.19", + "@graphql-tools/utils": "^9.2.1", + "dataloader": "^2.2.2", + "tslib": "^2.5.0", + "value-or-promise": "^1.0.12" }, "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/node-persist": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", - "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/batch-execute": { + "version": "8.5.22", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz", + "integrity": "sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==", "dev": true, - "engines": { - "node": ">=10.12.0" + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "dataloader": "^2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/executor": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.20.tgz", + "integrity": "sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@graphql-typed-document-node/core": "3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", "dev": true, "dependencies": { - "boolbase": "^1.0.0" + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/executor-graphql-ws": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.14.tgz", + "integrity": "sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@repeaterjs/repeater": "3.0.4", + "@types/ws": "^8.0.0", + "graphql-ws": "5.12.1", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.13.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/executor-http": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.1.10.tgz", + "integrity": "sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" + "@graphql-tools/utils": "^9.2.1", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/fetch": "^0.8.1", + "dset": "^3.1.2", + "extract-files": "^11.0.0", + "meros": "^1.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/executor-legacy-ws": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.11.tgz", + "integrity": "sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@types/ws": "^8.0.0", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.13.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/wrap": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.4.2.tgz", + "integrity": "sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "@graphql-tools/delegate": "^9.0.31", + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/wrap/node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, "dependencies": { - "wrappy": "1" + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/graphql-config/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/graphql-config/node_modules/minimatch": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", + "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "brace-expansion": "^1.1.7" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { + "node_modules/graphql-config/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + "node_modules/graphql-config/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/graphql-config/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/graphql-depth-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz", + "integrity": "sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "arrify": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">=6.0.0" + }, + "peerDependencies": { + "graphql": "*" } }, - "node_modules/parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "node_modules/graphql-ws": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.12.1.tgz", + "integrity": "sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==", "dev": true, - "dependencies": { - "semver": "^5.1.0" + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" } }, - "node_modules/parse-semver/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-equal": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", - "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": "14 || >=16.14" + "node": ">= 0.4" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "engines": { - "node": ">=8" + "bin": { + "he": "bin/he" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, - "node_modules/pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "dev": true, - "optional": true, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/prelude-ls": { + "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">= 4" } }, - "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=6" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/import-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", + "dev": true, "engines": { - "node": ">= 0.6.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise-timeout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/promise-timeout/-/promise-timeout-1.3.0.tgz", - "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", - "dev": true, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quicktype": { - "resolved": "packages/quicktype-vscode", - "link": true - }, - "node_modules/quicktype-core": { - "resolved": "packages/quicktype-core", - "link": true - }, - "node_modules/quicktype-graphql-input": { - "resolved": "packages/quicktype-graphql-input", - "link": true + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/quicktype-typescript-input": { - "resolved": "packages/quicktype-typescript-input", - "link": true + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true }, - "node_modules/quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, - "bin": { - "quote-stream": "bin/cmd.js" + "engines": { + "node": ">= 0.4" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } + "node_modules/interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "optional": true, "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { - "mute-stream": "~0.0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=0.8" - } - }, - "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "node": ">= 0.4" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=8.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "resolve": "^1.1.6" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5434,220 +7263,253 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "dependencies": { - "path-parse": "^1.0.5" + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/is-builtin-module/node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "hasown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "queue-microtask": "^1.2.2" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/safe-stable-stringify": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz", - "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "node_modules/is-get-set-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", + "integrity": "sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "get-set-props": "^0.1.0", + "lowercase-keys": "^1.0.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "node_modules/is-js-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", + "integrity": "sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==", "dev": true, "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, + "js-types": "^1.0.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", + "integrity": "sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0", + "obj-props": "^1.0.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/is-proto-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", + "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", "dev": true, "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" + "lowercase-keys": "^1.0.0", + "proto-props": "^2.0.0" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5656,441 +7518,415 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, - "engines": { - "node": ">=14" - }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "call-bind": "^1.0.7" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/static-eval": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", - "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { - "escodegen": "^2.1.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/static-eval/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "which-typed-array": "^1.1.14" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/static-module": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", - "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "dependencies": { - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "~1.9.0", - "falafel": "^2.1.0", - "has": "^1.0.1", - "magic-string": "^0.22.4", - "merge-source-map": "1.0.4", - "object-inspect": "~1.4.0", - "quote-stream": "~1.0.2", - "readable-stream": "~2.3.3", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.0", - "through2": "~2.0.3" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/static-module/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, - "node_modules/static-module/node_modules/object-inspect": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", - "dev": true + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/static-module/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "dependencies": { - "internal-slot": "^1.0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stream-chain": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "node_modules/stream-json": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", - "dependencies": { - "stream-chain": "^2.2.5" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, - "node_modules/stream-read-all": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", - "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", - "engines": { - "node": ">=10" + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "dev": true, + "peerDependencies": { + "ws": "*" } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/string-to-stream": { + "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", - "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "dependencies": { - "readable-stream": "^3.4.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/string-to-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/iterall": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", + "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/jiti": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.1.tgz", + "integrity": "sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/js-base64": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", + "integrity": "sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/table-layout": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", - "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { - "@75lb/deep-merge": "^1.1.1", - "array-back": "^6.2.2", - "command-line-args": "^5.2.1", - "command-line-usage": "^7.0.0", - "stream-read-all": "^3.0.1", - "typical": "^7.1.1", - "wordwrapjs": "^5.1.0" + "argparse": "^2.0.1" }, "bin": { - "table-layout": "bin/cli.js" - }, - "engines": { - "node": ">=12.17" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true, "engines": { - "node": ">=12.17" + "node": ">=12.0.0" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", + "dev": true, + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, "engines": { - "node": ">=12.17" + "node": ">=10" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "optional": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "bin": { + "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", "dev": true, - "optional": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "setimmediate": "^1.0.5" } }, - "node_modules/through2/node_modules/readable-stream": { + "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", @@ -6105,228 +7941,211 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/tiny-inflate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", - "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", "dev": true, - "engines": { - "node": ">=14.14" + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "json-buffer": "3.0.1" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "language-subtag-registry": "^0.3.20" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=0.10" } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" + "node": ">= 0.8.0" } }, - "node_modules/tslint/node_modules/@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.0.0" + "immediate": "~3.0.5" } }, - "node_modules/tslint/node_modules/@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, "dependencies": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "uc.micro": "^1.0.1" } }, - "node_modules/tslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tslint/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.assignwith": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/lodash.lowercase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz", + "integrity": "sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + "node": ">=0.10.0" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "optional": true, "dependencies": { - "safe-buffer": "^5.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "vlq": "^0.2.2" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, "engines": { "node": ">=10" }, @@ -6334,2767 +8153,8110 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "node_modules/make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, - "engines": { - "node": ">=4.2.0" + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "engines": { - "node": ">=8" + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" + "source-map": "^0.5.6" } }, - "node_modules/unicode-properties/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" - }, - "node_modules/unicode-properties/node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/unicode-trie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", - "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" + "engines": { + "node": ">= 8" } }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/meros": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", + "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "engines": { + "node": ">=13" + }, + "peerDependencies": { + "@types/node": ">=13" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "node_modules/micro-spelling-correcter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", + "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", "dev": true }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node": ">=8.6" } }, - "node_modules/vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "node_modules/watch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", - "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "dependencies": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - }, "bin": { - "watch": "cli.js" + "mime": "cli.js" }, "engines": { - "node": ">=0.1.95" + "node": ">=4" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "optional": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/which-collection": { + "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true }, - "node_modules/wordwrapjs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", + "node_modules/mocha": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, "engines": { - "node": ">=12.17" + "node": ">= 14.0.0" } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=10" + "node": ">= 8.10.0" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "node_modules/mocha/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, "engines": { - "node": ">=0.4" + "node": ">=10" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, "engines": { "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", - "bin": { - "yaml": "bin.mjs" + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.57.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", + "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^7.3.5" }, "engines": { - "node": ">= 14" + "node": ">=10" } }, - "node_modules/yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=12" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/node-persist": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", + "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=10.12.0" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { - "buffer-crc32": "~0.2.3" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "node_modules/obj-props": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.4.0.tgz", + "integrity": "sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "engines": { - "node": ">=10" - }, + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "packages/quicktype-core": { - "version": "18.0.15", - "license": "Apache-2.0", + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, "dependencies": { - "@glideapps/ts-necessities": "2.2.3", - "@types/urijs": "^1.19.25", - "browser-or-node": "^3.0.0", - "collection-utils": "^1.0.1", - "cross-fetch": "^4.0.0", - "is-url": "^1.2.4", - "js-base64": "^3.7.7", - "lodash": "^4.17.21", - "pako": "^1.0.6", - "pluralize": "^8.0.0", - "readable-stream": "4.5.2", - "unicode-properties": "^1.4.1", - "urijs": "^1.19.1", - "wordwrap": "^1.0.0", - "yaml": "^2.4.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, - "devDependencies": { - "@types/browser-or-node": "^1.3.2", - "@types/node": "18.19.31", - "@types/pako": "^1.0.0", - "@types/pluralize": "0.0.30", - "@types/readable-stream": "4.0.10", - "@types/unicode-properties": "^1.3.0", - "tslint": "^6.1.3", - "typescript": "4.9.5" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/quicktype-core/node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "packages/quicktype-graphql-input": { - "version": "18.0.15", - "license": "Apache-2.0", + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, "dependencies": { - "collection-utils": "^1.0.1", - "graphql": "^0.11.7", - "quicktype-core": "file:../quicktype-core" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, - "devDependencies": { - "@types/graphql": "^0.11.7", - "@types/node": "18.19.31", - "tslint": "^6.1.3", - "typescript": "4.9.5" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/quicktype-typescript-input": { - "version": "18.0.15", - "license": "Apache-2.0", + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, "dependencies": { - "@mark.probst/typescript-json-schema": "0.55.0", - "quicktype-core": "file:../quicktype-core", - "typescript": "4.9.5" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, - "devDependencies": { - "@types/node": "18.19.31", - "tslint": "^6.1.3" + "engines": { + "node": ">= 0.4" } }, - "packages/quicktype-typescript-input/node_modules/@glideapps/ts-necessities": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.2.tgz", - "integrity": "sha512-tLjfhinr6doUBcWi7BWnkT2zT6G5UhiZftsiIH6xVvykeXE+FU7Wr0MyqwmqideWlDD5rG+VjVLptLviGo04CA==" - }, - "packages/quicktype-typescript-input/node_modules/browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" - }, - "packages/quicktype-typescript-input/node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/quicktype-typescript-input/node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" - }, - "packages/quicktype-typescript-input/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, - "packages/quicktype-typescript-input/node_modules/quicktype-core": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-20.0.0.tgz", - "integrity": "sha512-zuvQAk/i4STnhLC4t3nNWPr6u5ArHBW+TME3jA7YQQMp1UdDsFD+4lzqt49b73aYhhmrk9BlO/fX7PcRR5l6YQ==", + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, "dependencies": { - "@glideapps/ts-necessities": "2.1.2", - "@types/urijs": "^1.19.8", - "browser-or-node": "^1.2.1", - "collection-utils": "^1.0.1", - "is-url": "^1.2.4", - "isomorphic-fetch": "^2.2.1", - "js-base64": "^2.4.3", - "lodash": "^4.17.21", - "pako": "^1.0.6", - "pluralize": "^7.0.0", - "readable-stream": "2.3.7", - "unicode-properties": "^1.4.1", - "urijs": "^1.19.1", - "wordwrap": "^1.0.0", - "yaml": "^1.5.0" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/quicktype-typescript-input/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/quicktype-typescript-input/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" } }, - "packages/quicktype-vscode": { - "name": "quicktype", - "version": "23.0.122", - "devDependencies": { - "@types/mocha": "^10.0.6", - "@types/node": "18.x", - "@types/node-persist": "^3.1.8", - "@types/readable-stream": "^4.0.10", - "@types/vscode": "^1.87.0", - "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.7.0", - "@vscode/test-cli": "^0.0.6", - "@vscode/test-electron": "^2.3.9", - "@vscode/vsce": "^2.25.0", - "eslint": "^8.56.0", - "node-persist": "^4.0.1", - "quicktype-core": "file:../quicktype-core", - "quicktype-typescript-input": "file:../quicktype-typescript-input", - "typescript": "^5.3.3", - "unicode-properties": "github:quicktype/unicode-properties#dist" + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "vscode": "^1.87.0" + "node": ">= 0.8.0" } }, - "packages/quicktype-vscode/node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=14.17" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/quicktype-vscode/node_modules/unicode-properties": { - "version": "1.1.0", - "resolved": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { - "brfs": "^1.4.0", - "unicode-trie": "^0.3.0" - } - } - }, - "dependencies": { - "@75lb/deep-merge": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", - "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", - "requires": { - "lodash.assignwith": "^4.2.0", - "typical": "^7.1.1" + "p-limit": "^3.0.2" }, - "dependencies": { - "typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==" - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "node_modules/pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "dev": true, - "optional": true + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", "dev": true, - "optional": true + "dependencies": { + "semver": "^5.1.0" + } }, - "@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "optional": true + "bin": { + "semver": "bin/semver" + } }, - "@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, - "optional": true + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, - "@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dev": true, - "optional": true + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, - "@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "dev": true, - "optional": true + "node_modules/path-equal": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", + "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" }, - "@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "optional": true + "engines": { + "node": ">=8" + } }, - "@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "dev": true, - "optional": true + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } }, - "@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "optional": true + "engines": { + "node": ">=8" + } }, - "@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "dev": true, - "optional": true + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, - "@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dev": true, - "optional": true + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, - "optional": true + "engines": { + "node": "14 || >=16.14" + } }, - "@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "optional": true + "engines": { + "node": ">=8" + } }, - "@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "dev": true, - "optional": true + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, - "@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "dev": true, - "optional": true + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, - "@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "optional": true + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, - "optional": true + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } }, - "@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "dev": true, - "optional": true + "node_modules/pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "engines": { + "node": ">=4" + } }, - "@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, - "optional": true + "engines": { + "node": ">= 0.4" + } }, - "@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.20.2", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise-timeout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/promise-timeout/-/promise-timeout-1.3.0.tgz", + "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", + "dev": true + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proto-props": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", + "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", + "dev": true, + "dependencies": { + "tslib": "^2.6.1" + } + }, + "node_modules/pvtsutils/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quicktype": { + "resolved": "packages/quicktype-vscode", + "link": true + }, + "node_modules/quicktype-core": { + "resolved": "packages/quicktype-core", + "link": true + }, + "node_modules/quicktype-graphql-input": { + "resolved": "packages/quicktype-graphql-input", + "link": true + }, + "node_modules/quicktype-typescript-input": { + "resolved": "packages/quicktype-typescript-input", + "link": true + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/rambda": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", + "dev": true + }, + "node_modules/ramda": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", + "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz", + "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/refa": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz", + "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regexp-ast-analysis": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz", + "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/req-all": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/req-all/-/req-all-0.1.0.tgz", + "integrity": "sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", + "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.1.tgz", + "integrity": "sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==", + "dev": true, + "dependencies": { + "fast-printf": "^1.6.9", + "safe-stable-stringify": "^2.4.3", + "semver-compare": "^1.0.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true + }, + "node_modules/scslre": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz", + "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true + }, + "node_modules/static-eval": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", + "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "dev": true, + "dependencies": { + "escodegen": "^2.1.0" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "dev": true, + "dependencies": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/static-module/node_modules/object-inspect": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", + "dev": true + }, + "node_modules/static-module/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + }, + "node_modules/stream-json": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", + "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, + "node_modules/stream-read-all": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", + "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", + "engines": { + "node": ">=10" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-env-interpolation": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", + "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", + "dev": true + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, + "node_modules/string-to-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", + "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", + "dependencies": { + "readable-stream": "^3.4.0" + } + }, + "node_modules/string-to-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.6.2.tgz", + "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", + "dev": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/table-layout": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", + "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", + "dependencies": { + "@75lb/deep-merge": "^1.1.1", + "array-back": "^6.2.2", + "command-line-args": "^5.2.1", + "command-line-usage": "^7.0.0", + "stream-read-all": "^3.0.1", + "typical": "^7.1.1", + "wordwrapjs": "^5.1.0" + }, + "bin": { + "table-layout": "bin/cli.js" + }, + "engines": { + "node": ">=12.17" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", + "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-unused-exports": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ts-unused-exports/-/ts-unused-exports-9.0.5.tgz", + "integrity": "sha512-1XAXaH2i4Al/aZO06pWDn9MUgTN0KQi+fvWudiWfHUTHAav45gzrx7Xq6JAsu6+LoMlVoyGvNvZSPW3KTjDncA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "tsconfig-paths": "^3.9.0" + }, + "bin": { + "ts-unused-exports": "bin/ts-unused-exports" + }, + "funding": { + "url": "https://github.com/pzavolinsky/ts-unused-exports?sponsor=1" + }, + "peerDependencies": { + "typescript": ">=3.8.3" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": false + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-properties/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, + "node_modules/unicode-properties/node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", + "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "dev": true, + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dev": true, + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "node_modules/urlpattern-polyfill": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", + "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "node_modules/vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, + "node_modules/watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "dependencies": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webcrypto-core": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", + "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", + "dev": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.1", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + } + }, + "node_modules/webcrypto-core/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/wordwrapjs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", + "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xregexp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", + "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.16.5" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", + "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "lodash": "^4.17.21", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/quicktype-core": { + "version": "18.0.15", + "license": "Apache-2.0", + "dependencies": { + "@glideapps/ts-necessities": "2.2.3", + "@types/urijs": "^1.19.25", + "browser-or-node": "^3.0.0", + "collection-utils": "^1.0.1", + "cross-fetch": "^4.0.0", + "is-url": "^1.2.4", + "js-base64": "^3.7.7", + "lodash": "^4.17.21", + "pako": "^1.0.6", + "pluralize": "^8.0.0", + "readable-stream": "4.5.2", + "unicode-properties": "^1.4.1", + "urijs": "^1.19.1", + "wordwrap": "^1.0.0", + "yaml": "^2.4.1" + }, + "devDependencies": { + "@types/browser-or-node": "^1.3.2", + "@types/node": "18.19.31", + "@types/pako": "^1.0.0", + "@types/pluralize": "0.0.30", + "@types/readable-stream": "4.0.10", + "@types/unicode-properties": "^1.3.0", + "typescript": "4.9.5" + } + }, + "packages/quicktype-core/node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + }, + "packages/quicktype-core/node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, + "packages/quicktype-graphql-input": { + "version": "18.0.15", + "license": "Apache-2.0", + "dependencies": { + "collection-utils": "^1.0.1", + "graphql": "^0.11.7", + "quicktype-core": "file:../quicktype-core" + }, + "devDependencies": { + "@types/graphql": "^0.11.7", + "@types/node": "18.19.31", + "typescript": "4.9.5" + } + }, + "packages/quicktype-typescript-input": { + "version": "18.0.15", + "license": "Apache-2.0", + "dependencies": { + "@mark.probst/typescript-json-schema": "0.55.0", + "quicktype-core": "file:../quicktype-core", + "typescript": "4.9.5" + }, + "devDependencies": { + "@types/node": "18.19.31" + } + }, + "packages/quicktype-typescript-input/node_modules/@glideapps/ts-necessities": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.2.tgz", + "integrity": "sha512-tLjfhinr6doUBcWi7BWnkT2zT6G5UhiZftsiIH6xVvykeXE+FU7Wr0MyqwmqideWlDD5rG+VjVLptLviGo04CA==" + }, + "packages/quicktype-typescript-input/node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "packages/quicktype-typescript-input/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "packages/quicktype-typescript-input/node_modules/quicktype-core": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-20.0.0.tgz", + "integrity": "sha512-zuvQAk/i4STnhLC4t3nNWPr6u5ArHBW+TME3jA7YQQMp1UdDsFD+4lzqt49b73aYhhmrk9BlO/fX7PcRR5l6YQ==", + "dependencies": { + "@glideapps/ts-necessities": "2.1.2", + "@types/urijs": "^1.19.8", + "browser-or-node": "^1.2.1", + "collection-utils": "^1.0.1", + "is-url": "^1.2.4", + "isomorphic-fetch": "^2.2.1", + "js-base64": "^2.4.3", + "lodash": "^4.17.21", + "pako": "^1.0.6", + "pluralize": "^7.0.0", + "readable-stream": "2.3.7", + "unicode-properties": "^1.4.1", + "urijs": "^1.19.1", + "wordwrap": "^1.0.0", + "yaml": "^1.5.0" + } + }, + "packages/quicktype-typescript-input/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "packages/quicktype-typescript-input/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "packages/quicktype-vscode": { + "name": "quicktype", + "version": "23.0.122", + "devDependencies": { + "@types/mocha": "^10.0.6", + "@types/node": "18.x", + "@types/node-persist": "^3.1.8", + "@types/readable-stream": "^4.0.10", + "@types/vscode": "^1.87.0", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.7.0", + "@vscode/test-cli": "^0.0.6", + "@vscode/test-electron": "^2.3.9", + "@vscode/vsce": "^2.25.0", + "eslint": "^8.56.0", + "node-persist": "^4.0.1", + "quicktype-core": "file:../quicktype-core", + "quicktype-typescript-input": "file:../quicktype-typescript-input", + "typescript": "^5.3.3", + "unicode-properties": "github:quicktype/unicode-properties#dist" + }, + "engines": { + "vscode": "^1.87.0" + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", + "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/type-utils": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/parser": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/scope-manager": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/type-utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", + "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/types": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "packages/quicktype-vscode/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/quicktype-vscode/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/quicktype-vscode/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/quicktype-vscode/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/quicktype-vscode/node_modules/unicode-properties": { + "version": "1.1.0", + "resolved": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", + "dev": true, + "license": "MIT", + "dependencies": { + "brfs": "^1.4.0", + "unicode-trie": "^0.3.0" + } + } + }, + "dependencies": { + "@75lb/deep-merge": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", + "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", + "requires": { + "lodash.assignwith": "^4.2.0", + "typical": "^7.1.1" + }, + "dependencies": { + "typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==" + } + } + }, + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@ardatan/sync-fetch": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", + "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1" + } + }, + "@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true + }, + "@babel/core": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/eslint-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", + "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", + "dev": true, + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/eslint-plugin": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.23.5.tgz", + "integrity": "sha512-03+E/58Hoo/ui69gR+beFdGpplpoVK0BSIdke2iw4/Bz7eGN0ssRenNlnU4nmbkowNQOPCStKSwFr8H6DiY49g==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "@babel/generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "requires": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "requires": { + "@babel/types": "^7.24.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "requires": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + } + }, + "@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true + }, + "@babel/plugin-syntax-flow": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" + } + }, + "@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/runtime-corejs3": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.1.tgz", + "integrity": "sha512-T9ko/35G+Bkl+win48GduaPlhSlOjjE5s1TeiEcD+QpxlLQnoEfb/nO/T+TQqkm+ipFwORn+rB8w14iJ/uD0bg==", + "dev": true, + "requires": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + } + }, + "@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@es-joy/jsdoccomment": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", + "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", + "dev": true, + "requires": { + "comment-parser": "1.4.1", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" + } + }, + "@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "dev": true, - "optional": true + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, + "@glideapps/ts-necessities": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", + "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==" + }, + "@graphql-eslint/eslint-plugin": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz", + "integrity": "sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@graphql-tools/code-file-loader": "^7.3.6", + "@graphql-tools/graphql-tag-pluck": "^7.3.6", + "@graphql-tools/utils": "^9.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "graphql-config": "^4.4.0", + "graphql-depth-limit": "^1.1.0", + "lodash.lowercase": "^4.3.0", + "tslib": "^2.4.1" + }, + "dependencies": { + "@graphql-tools/code-file-loader": { + "version": "7.3.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", + "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", + "dev": true, + "requires": { + "@graphql-tools/graphql-tag-pluck": "7.5.2", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + } + }, + "@graphql-tools/graphql-tag-pluck": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", + "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", + "dev": true, + "requires": { + "@babel/parser": "^7.16.8", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + } + }, + "@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "requires": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "requires": {} + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mark.probst/typescript-json-schema": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", + "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", + "requires": { + "@types/json-schema": "^7.0.9", + "@types/node": "^16.9.2", + "glob": "^7.1.7", + "path-equal": "^1.1.2", + "safe-stable-stringify": "^2.2.0", + "ts-node": "^10.9.1", + "typescript": "4.9.4", + "yargs": "^17.1.1" + }, + "dependencies": { + "@types/node": { + "version": "16.18.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", + "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" + }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" + } + } + }, + "@next/eslint-plugin-next": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", + "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", + "dev": true, + "requires": { + "glob": "7.1.7" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "requires": { + "eslint-scope": "5.1.1" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@peculiar/asn1-schema": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", + "dev": true, + "requires": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@peculiar/webcrypto": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", + "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", + "dev": true, + "requires": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.7.8" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true + }, + "@repeaterjs/repeater": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", + "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", + "dev": true + }, + "@rushstack/eslint-patch": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz", + "integrity": "sha512-0HejFckBN2W+ucM6cUOlwsByTKt9/+0tWhqUffNIcHqCXkthY/mZ7AuYPK/2IIaGWhdl0h+tICDO0ssLMd6XMQ==", + "dev": true + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "@tsconfig/node18": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-1.0.1.tgz", + "integrity": "sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==", + "dev": true + }, + "@types/browser-or-node": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", + "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", + "dev": true + }, + "@types/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "dev": true + }, + "@types/command-line-usage": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", + "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graphql": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.11.8.tgz", + "integrity": "sha512-xGWx4kx9JKlqxDrZA12gw5qi2lvxPNLxnQQcoTXVX83MuGcXcpb7TADatGyGW51GaaXQOQTbjw3x4HuL3ULBaA==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/mocha": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "dev": true + }, + "@types/node": { + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/node-persist": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/node-persist/-/node-persist-3.1.8.tgz", + "integrity": "sha512-QLidg6/SadZYPrTKxtxL1A85XBoQlG40bhoMdhu6DH6+eNCMr2j+RGfFZ9I9+IY8W/PDwQonJ+iBWD62jZjMfg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "@types/pako": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", + "integrity": "sha1-6q6DZNG391LiY7w/1o3+yY5hNsU=", + "dev": true + }, + "@types/pluralize": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.30.tgz", + "integrity": "sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA==", + "dev": true + }, + "@types/readable-stream": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", + "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", + "dev": true + }, + "@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "@types/shelljs": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz", + "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==", + "dev": true, + "requires": { + "@types/glob": "~7.2.0", + "@types/node": "*" + } + }, + "@types/stream-chain": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", + "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stream-json": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.3.tgz", + "integrity": "sha512-Jqsyq5VPOTWorvEmzWhEWH5tJnHA+bB8vt/Zzb11vSDj8esfSHDMj2rbVjP0mfJQzl3YBJSXBBq08iiyaBK3KA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/stream-chain": "*" + } + }, + "@types/unicode-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/unicode-properties/-/unicode-properties-1.3.0.tgz", + "integrity": "sha512-kDVlxpdkCfgvzfXcglkr7j4OSMjCEEo/Jloj4tFuldYZpQ9Uypy7FGXPhNstoj4eGvhddwuu5n0EfI+XdWVoVA==", + "dev": true + }, + "@types/urijs": { + "version": "1.19.25", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", + "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" + }, + "@types/vscode": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.88.0.tgz", + "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", + "dev": true + }, + "@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.62.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@vscode/test-cli": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.6.tgz", + "integrity": "sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==", + "dev": true, + "requires": { + "@types/mocha": "^10.0.2", + "c8": "^9.1.0", + "chokidar": "^3.5.3", + "enhanced-resolve": "^5.15.0", + "glob": "^10.3.10", + "minimatch": "^9.0.3", + "mocha": "^10.2.0", + "supports-color": "^9.4.0", + "yargs": "^17.7.2" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + } + } + }, + "@vscode/test-electron": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", + "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + } + }, + "@vscode/vsce": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.25.0.tgz", + "integrity": "sha512-VXMCGUaP6wKBadA7vFQdsksxkBAMoh4ecZgXBwauZMASAgnwYesHyLnqIyWYeRwjy2uEpitHvz/1w5ENnR30pg==", + "dev": true, + "requires": { + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^6.2.1", + "form-data": "^4.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@whatwg-node/events": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", + "integrity": "sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==", + "dev": true + }, + "@whatwg-node/fetch": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.8.tgz", + "integrity": "sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==", + "dev": true, + "requires": { + "@peculiar/webcrypto": "^1.4.0", + "@whatwg-node/node-fetch": "^0.3.6", + "busboy": "^1.6.0", + "urlpattern-polyfill": "^8.0.0", + "web-streams-polyfill": "^3.2.1" + } + }, + "@whatwg-node/node-fetch": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz", + "integrity": "sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==", + "dev": true, + "requires": { + "@whatwg-node/events": "^0.0.3", + "busboy": "^1.6.0", + "fast-querystring": "^1.1.1", + "fast-url-parser": "^1.1.3", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "eslint-visitor-keys": "^3.3.0" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, - "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } + } + }, + "are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + }, + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + } + }, + "array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "dev": true, + "requires": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true + }, + "axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, + "azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "dev": true, + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "optional": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "optional": true, "requires": { - "argparse": "^2.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true } } }, - "@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "@glideapps/ts-necessities": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", - "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==" + "boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true }, - "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "fill-range": "^7.0.1" } }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "dev": true, + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + } + }, + "browser-or-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", + "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "streamsearch": "^1.1.0" + } + }, + "c8": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", + "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" } } } }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } }, - "@jridgewell/resolve-uri": { + "callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true }, - "@mark.probst/typescript-json-schema": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", - "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", - "requires": { - "@types/json-schema": "^7.0.9", - "@types/node": "^16.9.2", - "glob": "^7.1.7", - "path-equal": "^1.1.2", - "safe-stable-stringify": "^2.2.0", - "ts-node": "^10.9.1", - "typescript": "4.9.4", - "yargs": "^17.1.1" + "caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { - "@types/node": { - "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } }, - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "chalk": "^4.1.2" } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "chance": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.11.tgz", + "integrity": "sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==", "dev": true }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, - "optional": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "@tsconfig/node18": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-1.0.1.tgz", - "integrity": "sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==", - "dev": true - }, - "@types/browser-or-node": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", - "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", - "dev": true - }, - "@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true - }, - "@types/command-line-usage": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", - "dev": true + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } } }, - "@types/graphql": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.11.8.tgz", - "integrity": "sha512-xGWx4kx9JKlqxDrZA12gw5qi2lvxPNLxnQQcoTXVX83MuGcXcpb7TADatGyGW51GaaXQOQTbjw3x4HuL3ULBaA==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", - "dev": true - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true }, - "@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, - "@types/node": { - "version": "18.19.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", - "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, "requires": { - "undici-types": "~5.26.4" + "escape-string-regexp": "^1.0.5" } }, - "@types/node-persist": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@types/node-persist/-/node-persist-3.1.8.tgz", - "integrity": "sha512-QLidg6/SadZYPrTKxtxL1A85XBoQlG40bhoMdhu6DH6+eNCMr2j+RGfFZ9I9+IY8W/PDwQonJ+iBWD62jZjMfg==", - "dev": true, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "requires": { - "@types/node": "*" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" } }, - "@types/pako": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", - "integrity": "sha1-6q6DZNG391LiY7w/1o3+yY5hNsU=", + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "@types/pluralize": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.30.tgz", - "integrity": "sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA==", + "cockatiel": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", + "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==", "dev": true }, - "@types/readable-stream": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", - "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", + "collection-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", + "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "@types/node": "*", - "safe-buffer": "~5.1.1" + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + } } }, - "@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "@types/shelljs": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz", - "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==", + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "@types/glob": "~7.2.0", - "@types/node": "*" + "delayed-stream": "~1.0.0" } }, - "@types/stream-chain": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", - "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", - "dev": true, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "requires": { - "@types/node": "*" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" } }, - "@types/stream-json": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.3.tgz", - "integrity": "sha512-Jqsyq5VPOTWorvEmzWhEWH5tJnHA+bB8vt/Zzb11vSDj8esfSHDMj2rbVjP0mfJQzl3YBJSXBBq08iiyaBK3KA==", - "dev": true, + "command-line-usage": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", + "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", "requires": { - "@types/node": "*", - "@types/stream-chain": "*" + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^3.0.0", + "typical": "^7.1.1" + }, + "dependencies": { + "array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==" + }, + "typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==" + } } }, - "@types/unicode-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/unicode-properties/-/unicode-properties-1.3.0.tgz", - "integrity": "sha512-kDVlxpdkCfgvzfXcglkr7j4OSMjCEEo/Jloj4tFuldYZpQ9Uypy7FGXPhNstoj4eGvhddwuu5n0EfI+XdWVoVA==", + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, - "@types/urijs": { - "version": "1.19.25", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", - "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" - }, - "@types/vscode": { - "version": "1.88.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.88.0.tgz", - "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", + "comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true }, - "@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "@typescript-eslint/parser": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", - "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", - "debug": "^4.3.4" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" }, "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" - } - }, - "@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.7.0", - "eslint-visitor-keys": "^3.4.3" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { - "brace-expansion": "^2.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } }, - "@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "core-js-pure": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", + "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" } }, - "@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "create-eslint-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/create-eslint-index/-/create-eslint-index-1.0.0.tgz", + "integrity": "sha512-nXvJjnfDytOOaPOonX0h0a1ggMoqrhdekGeZkD6hkcWYvlCWhU719tKFVh8eU04CnMwu3uwe1JjwuUF2C3k2qg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "lodash.get": "^4.3.0" } }, - "@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "requires": { + "node-fetch": "^2.6.12" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" } }, - "@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "semver": "^7.6.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" } }, - "@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "eslint-visitor-keys": "^3.4.3" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" } }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dataloader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", "dev": true }, - "@vscode/test-cli": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.6.tgz", - "integrity": "sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "@types/mocha": "^10.0.2", - "c8": "^9.1.0", - "chokidar": "^3.5.3", - "enhanced-resolve": "^5.15.0", - "glob": "^10.3.10", - "minimatch": "^9.0.3", - "mocha": "^10.2.0", - "supports-color": "^9.4.0", - "yargs": "^17.7.2" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - } - }, - "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - } + "ms": "2.1.2" } }, - "@vscode/test-electron": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", - "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "optional": true, "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.5.2" + "mimic-response": "^3.1.0" } }, - "@vscode/vsce": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.25.0.tgz", - "integrity": "sha512-VXMCGUaP6wKBadA7vFQdsksxkBAMoh4ecZgXBwauZMASAgnwYesHyLnqIyWYeRwjy2uEpitHvz/1w5ENnR30pg==", + "deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, "requires": { - "azure-devops-node-api": "^12.5.0", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "cockatiel": "^3.1.2", - "commander": "^6.2.1", - "form-data": "^4.0.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "jsonc-parser": "^3.2.0", - "keytar": "^7.7.0", - "leven": "^3.1.0", - "markdown-it": "^12.3.2", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^7.5.2", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.5.0", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "requires": {} + "optional": true }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "requires": { - "debug": "4" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" } }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, - "requires": { - "color-convert": "^1.9.0" - } + "optional": true }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "path-type": "^4.0.0" } }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "esutils": "^2.0.2" } }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "requires": { - "possible-typed-array-names": "^1.0.0" + "domelementtype": "^2.3.0" } }, - "azure-devops-node-api": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", - "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dset": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", "dev": true }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "optional": true, "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^2.0.2" }, "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "optional": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "electron-to-chromium": { + "version": "1.4.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", + "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", + "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "brfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", - "dev": true, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" + "iconv-lite": "^0.6.2" } }, - "browser-or-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", - "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "once": "^1.4.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true + "enhance-visitors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", + "integrity": "sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, - "c8": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", - "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - } + "is-arrayish": "^0.2.1" } }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "es-abstract": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", "dev": true, "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true } } }, - "chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, "requires": { - "chalk": "^4.1.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" } }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" + "es-errors": "^1.3.0" } }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" } }, - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "hasown": "^2.0.0" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "optional": true + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "cockatiel": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", - "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, - "collection-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", - "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "dev": true, "requires": { - "color-name": "1.1.3" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "dev": true + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } } } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", - "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", - "requires": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^3.0.0", - "typical": "^7.1.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "dependencies": { - "array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==" + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==" + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true } } }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true + "eslint-ast-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", + "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", + "dev": true, + "requires": { + "lodash.get": "^4.4.2", + "lodash.zip": "^4.2.0" + } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "eslint-compat-utils": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", + "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", + "dev": true, + "requires": { + "semver": "^7.5.4" + } }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "eslint-config-canonical": { + "version": "41.4.2", + "resolved": "https://registry.npmjs.org/eslint-config-canonical/-/eslint-config-canonical-41.4.2.tgz", + "integrity": "sha512-ayP7OPe7Mh0Vf1K8PXQshekyeM3dNcEVwoJAu5ozrZXftaY36NPaH57Oj1FcmMzr2gpc3WbjQ5frVqxnqjnKMg==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "@babel/core": "^7.23.0", + "@babel/eslint-parser": "^7.22.15", + "@babel/eslint-plugin": "^7.22.10", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@graphql-eslint/eslint-plugin": "^3.20.1", + "@next/eslint-plugin-next": "^13.5.4", + "@rushstack/eslint-patch": "^1.5.1", + "@typescript-eslint/eslint-plugin": "^6.7.5", + "@typescript-eslint/parser": "^6.7.5", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-ava": "^14.0.0", + "eslint-plugin-canonical": "^4.14.0", + "eslint-plugin-cypress": "^2.15.1", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-fp": "^2.3.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jest": "^27.4.2", + "eslint-plugin-jsdoc": "^46.8.2", + "eslint-plugin-jsonc": "^2.10.0", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-lodash": "^7.4.0", + "eslint-plugin-mocha": "^10.2.0", + "eslint-plugin-modules-newline": "0.0.6", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-regexp": "^1.15.0", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-typescript-sort-keys": "^3.0.0", + "eslint-plugin-unicorn": "^48.0.1", + "eslint-plugin-vitest": "^0.3.2", + "eslint-plugin-yml": "^1.10.0", + "eslint-plugin-zod": "^1.4.0", + "prettier": "^3.0.3", + "ramda": "^0.29.1", + "yaml-eslint-parser": "^1.2.2" + }, + "dependencies": { + "eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-canonical": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-4.18.0.tgz", + "integrity": "sha512-0Egc0FKOnCRdu3bFEJhfHkdkusIgW0UxdemukkowZQnQsnf12FHSJ7K26b+tZ5pKB7cTyECSaqvEpoIJfplX4g==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@typescript-eslint/utils": "^6.1.0", + "chance": "^1.1.11", + "debug": "^4.3.4", + "eslint-import-resolver-typescript": "^3.5.3", + "eslint-module-utils": "^2.7.4", + "is-get-set-prop": "^1.0.0", + "is-js-type": "^2.0.0", + "is-obj-prop": "^1.0.0", + "is-proto-prop": "^2.0.0", + "lodash": "^4.17.21", + "natural-compare": "^1.4.0", + "recast": "^0.23.2", + "roarr": "^7.14.2", + "ts-unused-exports": "^9.0.3", + "xregexp": "^5.1.1" } - } - } - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "requires": { - "node-fetch": "^2.6.12" + }, + "eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + } + }, + "synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "requires": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "get-stdin": "^6.0.0" } }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "requires": { - "ms": "2.1.2" + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" } }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, - "optional": true, "requires": { - "mimic-response": "^3.1.0" + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "eslint-plugin-ava": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-14.0.0.tgz", + "integrity": "sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" + "enhance-visitors": "^1.0.0", + "eslint-utils": "^3.0.0", + "espree": "^9.0.0", + "espurify": "^2.1.1", + "import-modules": "^2.1.0", + "micro-spelling-correcter": "^1.1.1", + "pkg-dir": "^5.0.0", + "resolve-from": "^5.0.0" }, "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "eslint-plugin-canonical": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-3.4.0.tgz", + "integrity": "sha512-akY2RpJD3VC2XXsU/02VsbzkHfybsZTsruOKPI7pJzQ+lZaS3UGM1H0vUKf0itXsbMHHJbIT78hUXU2d2HemZQ==", "dev": true, - "optional": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "requires": { + "is-get-set-prop": "^1.0.0", + "is-js-type": "^2.0.0", + "is-obj-prop": "^1.0.0", + "is-proto-prop": "^2.0.0", + "lodash": "^4.17.21", + "natural-compare": "^1.4.0", + "ts-unused-exports": "^9.0.3", + "xregexp": "^5.1.1" + } }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "eslint-plugin-cypress": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", + "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", "dev": true, "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "globals": "^13.20.0" } }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", "dev": true, - "optional": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "requires": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", "dev": true, "requires": { - "path-type": "^4.0.0" + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "eslint-plugin-fp": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-fp/-/eslint-plugin-fp-2.3.0.tgz", + "integrity": "sha512-3n2oHibwoIxAht9/+ZaTldhI6brXORgl8oNXqZd+d9xuAQt2SBJ2/aml0oQRMWvXrgsz2WG6wfC++NjzSG3prA==", "dev": true, "requires": { - "esutils": "^2.0.2" + "create-eslint-index": "^1.0.0", + "eslint-ast-utils": "^1.0.0", + "lodash": "^4.13.1", + "req-all": "^0.1.0" } }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true + "eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^5.10.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "eslint-plugin-jsdoc": { + "version": "46.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", + "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", "dev": true, "requires": { - "domelementtype": "^2.3.0" + "@es-joy/jsdoccomment": "~0.41.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", + "semver": "^7.5.4", + "spdx-expression-parse": "^4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } } }, - "domutils": { + "eslint-plugin-json": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", + "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", "dev": true, "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" + } + }, + "eslint-plugin-jsonc": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.14.1.tgz", + "integrity": "sha512-Tei6G4N7pZulP5MHi0EIdtseiCqUPkDMd0O8Zrw4muMIlsjJ5/B9X+U3Pfo6B7l0mTL9LN9FwuWT70dRJ6z7tg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "eslint-compat-utils": "^0.5.0", + "espree": "^9.6.1", + "graphemer": "^1.4.0", + "jsonc-eslint-parser": "^2.0.4", + "natural-compare": "^1.4.0", + "synckit": "^0.6.0" } }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true } } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "eslint-plugin-lodash": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz", + "integrity": "sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A==", "dev": true, - "optional": true, "requires": { - "once": "^1.4.0" + "lodash": "^4.17.21" } }, - "enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "eslint-plugin-mocha": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz", + "integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==", "dev": true, "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "eslint-utils": "^3.0.0", + "globals": "^13.24.0", + "rambda": "^7.4.0" } }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "eslint-plugin-modules-newline": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-modules-newline/-/eslint-plugin-modules-newline-0.0.6.tgz", + "integrity": "sha512-69NpBr68U6pmXL+y+KHl/64PwRarceC3/sCNUVxRbe0gPI32SIw8AtdpkqNiJYCa2yMd4lRrkrnU09Yio7KVzA==", "dev": true, "requires": { - "get-intrinsic": "^1.2.4" + "requireindex": "~1.1.0" } }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" }, "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, - "esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "prettier-linter-helpers": "^1.0.0" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "requires": {} }, - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" }, "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "esutils": "^2.0.2" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } } } }, - "eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-plugin-regexp": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz", + "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "@eslint-community/regexpp": "^4.4.0", + "comment-parser": "^1.1.2", + "grapheme-splitter": "^1.0.4", + "jsdoctypeparser": "^9.0.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0", + "scslre": "^0.2.0" + } + }, + "eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", + "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-typescript-sort-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-typescript-sort-keys/-/eslint-plugin-typescript-sort-keys-3.2.0.tgz", + "integrity": "sha512-GutszvriaVtwmn7pQjuj9/9o0iXhD7XZs0/424+zsozdRr/fdg5e8206t478Vnqnqi1GjuxcAolj1kf74KnhPA==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^5.0.0", + "json-schema": "^0.4.0", + "natural-compare-lite": "^1.4.0" + } + }, + "eslint-plugin-unicorn": { + "version": "48.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz", + "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^3.8.0", + "clean-regexp": "^1.0.0", + "esquery": "^1.5.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.5.4", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + } + } + }, + "eslint-plugin-vitest": { + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.26.tgz", + "integrity": "sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^7.1.1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@typescript-eslint/scope-manager": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "@typescript-eslint/types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "@typescript-eslint/typescript-estree": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "@typescript-eslint/utils": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", + "semver": "^7.5.4" + } }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "@typescript-eslint/visitor-keys": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "@typescript-eslint/types": "7.4.0", + "eslint-visitor-keys": "^3.4.1" } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "argparse": "^2.0.1" + "balanced-match": "^1.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } } } }, + "eslint-plugin-yml": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz", + "integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==", + "dev": true, + "requires": { + "debug": "^4.3.2", + "eslint-compat-utils": "^0.5.0", + "lodash": "^4.17.21", + "natural-compare": "^1.4.0", + "yaml-eslint-parser": "^1.2.1" + } + }, + "eslint-plugin-zod": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-zod/-/eslint-plugin-zod-1.4.0.tgz", + "integrity": "sha512-i9WzQGw2X5fQcuQh33mA8DQjZJM/yuyZvs1Fc5EyTidX7Ed/g832+1FEQ4u5gtXy+jZ+DVsB5+oMHj4tIOfeZg==", + "dev": true, + "requires": {} + }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, "eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -9105,6 +16267,23 @@ "estraverse": "^5.2.0" } }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, "eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -9123,9 +16302,15 @@ } }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "espurify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", + "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", "dev": true }, "esquery": { @@ -9190,6 +16375,12 @@ "dev": true, "optional": true }, + "extract-files": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", + "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", + "dev": true + }, "falafel": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", @@ -9214,12 +16405,24 @@ } } }, + "fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "dev": true + }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -9231,6 +16434,17 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -9245,6 +16459,41 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-printf": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", + "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", + "dev": true, + "requires": { + "boolean": "^3.1.4" + } + }, + "fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "dev": true, + "requires": { + "fast-decode-uri-component": "^1.0.1" + } + }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dev": true, + "requires": { + "punycode": "^1.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, "fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -9377,12 +16626,30 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -9401,6 +16668,38 @@ "hasown": "^2.0.0" } }, + "get-set-props": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", + "integrity": "sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==", + "dev": true + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + } + }, + "get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -9422,12 +16721,12 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { @@ -9439,6 +16738,15 @@ "type-fest": "^0.20.2" } }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -9468,6 +16776,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -9482,15 +16796,309 @@ "iterall": "1.1.3" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "graphql-config": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.5.0.tgz", + "integrity": "sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==", + "dev": true, + "requires": { + "@graphql-tools/graphql-file-loader": "^7.3.7", + "@graphql-tools/json-file-loader": "^7.3.7", + "@graphql-tools/load": "^7.5.5", + "@graphql-tools/merge": "^8.2.6", + "@graphql-tools/url-loader": "^7.9.7", + "@graphql-tools/utils": "^9.0.0", + "cosmiconfig": "8.0.0", + "jiti": "1.17.1", + "minimatch": "4.2.3", + "string-env-interpolation": "1.0.1", + "tslib": "^2.4.0" + }, + "dependencies": { + "@graphql-tools/graphql-file-loader": { + "version": "7.5.17", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.17.tgz", + "integrity": "sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==", + "dev": true, + "requires": { + "@graphql-tools/import": "6.7.18", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "dependencies": { + "@graphql-tools/import": { + "version": "6.7.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.18.tgz", + "integrity": "sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "resolve-from": "5.0.0", + "tslib": "^2.4.0" + } + } + } + }, + "@graphql-tools/json-file-loader": { + "version": "7.4.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.18.tgz", + "integrity": "sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + } + }, + "@graphql-tools/load": { + "version": "7.8.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.14.tgz", + "integrity": "sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==", + "dev": true, + "requires": { + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", + "p-limit": "3.1.0", + "tslib": "^2.4.0" + }, + "dependencies": { + "@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, + "requires": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + } + } + }, + "@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + } + }, + "@graphql-tools/url-loader": { + "version": "7.17.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz", + "integrity": "sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==", + "dev": true, + "requires": { + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/delegate": "^9.0.31", + "@graphql-tools/executor-graphql-ws": "^0.0.14", + "@graphql-tools/executor-http": "^0.1.7", + "@graphql-tools/executor-legacy-ws": "^0.0.11", + "@graphql-tools/utils": "^9.2.1", + "@graphql-tools/wrap": "^9.4.2", + "@types/ws": "^8.0.0", + "@whatwg-node/fetch": "^0.8.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.11", + "ws": "^8.12.0" + }, + "dependencies": { + "@graphql-tools/delegate": { + "version": "9.0.35", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.35.tgz", + "integrity": "sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==", + "dev": true, + "requires": { + "@graphql-tools/batch-execute": "^8.5.22", + "@graphql-tools/executor": "^0.0.20", + "@graphql-tools/schema": "^9.0.19", + "@graphql-tools/utils": "^9.2.1", + "dataloader": "^2.2.2", + "tslib": "^2.5.0", + "value-or-promise": "^1.0.12" + }, + "dependencies": { + "@graphql-tools/batch-execute": { + "version": "8.5.22", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz", + "integrity": "sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "dataloader": "^2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-tools/executor": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.20.tgz", + "integrity": "sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "@graphql-typed-document-node/core": "3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, + "requires": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + } + } + }, + "@graphql-tools/executor-graphql-ws": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.14.tgz", + "integrity": "sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "@repeaterjs/repeater": "3.0.4", + "@types/ws": "^8.0.0", + "graphql-ws": "5.12.1", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.13.0" + } + }, + "@graphql-tools/executor-http": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.1.10.tgz", + "integrity": "sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/fetch": "^0.8.1", + "dset": "^3.1.2", + "extract-files": "^11.0.0", + "meros": "^1.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-tools/executor-legacy-ws": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.11.tgz", + "integrity": "sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==", + "dev": true, + "requires": { + "@graphql-tools/utils": "^9.2.1", + "@types/ws": "^8.0.0", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.13.0" + } + }, + "@graphql-tools/wrap": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.4.2.tgz", + "integrity": "sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==", + "dev": true, + "requires": { + "@graphql-tools/delegate": "^9.0.31", + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "dependencies": { + "@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, + "requires": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + } + } + } + } + }, + "@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "requires": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + } + }, + "minimatch": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", + "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + } + } + }, + "graphql-depth-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz", + "integrity": "sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "arrify": "^1.0.1" } }, + "graphql-ws": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.12.1.tgz", + "integrity": "sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==", + "dev": true, + "requires": {} + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -9513,9 +17121,9 @@ } }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true }, "has-symbols": { @@ -9549,13 +17157,10 @@ "dev": true }, "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "html-escaper": { "version": "2.0.2", @@ -9631,12 +17236,24 @@ "resolve-from": "^4.0.0" } }, + "import-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9659,13 +17276,13 @@ "optional": true }, "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -9686,14 +17303,28 @@ } }, "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" } }, "is-bigint": { @@ -9720,8 +17351,25 @@ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + }, + "dependencies": { + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + } } }, "is-callable": { @@ -9730,6 +17378,24 @@ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" + } + }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -9745,11 +17411,39 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-get-set-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", + "integrity": "sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==", + "dev": true, + "requires": { + "get-set-props": "^0.1.0", + "lowercase-keys": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -9759,12 +17453,27 @@ "is-extglob": "^2.1.1" } }, + "is-js-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", + "integrity": "sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==", + "dev": true, + "requires": { + "js-types": "^1.0.0" + } + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -9780,6 +17489,16 @@ "has-tostringtag": "^1.0.0" } }, + "is-obj-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", + "integrity": "sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0", + "obj-props": "^1.0.0" + } + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -9792,6 +17511,16 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-proto-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", + "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0", + "proto-props": "^2.0.0" + } + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -9809,12 +17538,12 @@ "dev": true }, "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" } }, "is-stream": { @@ -9841,16 +17570,12 @@ } }, "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" } }, "is-unicode-supported": { @@ -9870,6 +17595,15 @@ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-weakset": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", @@ -9891,6 +17625,13 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "dev": true, + "requires": {} + }, "istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -9940,6 +17681,19 @@ "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" }, + "iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "jackspeak": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", @@ -9950,35 +17704,74 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "jiti": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.1.tgz", + "integrity": "sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==", + "dev": true + }, "js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", + "integrity": "sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==", + "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } + "argparse": "^2.0.1" } }, + "jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true + }, + "jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", @@ -9991,12 +17784,42 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + } + }, "jsonc-parser": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, + "jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + } + }, "jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -10046,6 +17869,21 @@ "json-buffer": "3.0.1" } }, + "language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "requires": { + "language-subtag-registry": "^0.3.20" + } + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -10071,6 +17909,12 @@ "immediate": "~3.0.5" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "linkify-it": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", @@ -10104,12 +17948,30 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "lodash.lowercase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz", + "integrity": "sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -10120,6 +17982,21 @@ "is-unicode-supported": "^0.1.0" } }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -10165,12 +18042,6 @@ "uc.micro": "^1.0.5" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", @@ -10214,6 +18085,19 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "meros": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", + "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", + "dev": true, + "requires": {} + }, + "micro-spelling-correcter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", + "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", + "dev": true + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -10252,6 +18136,12 @@ "dev": true, "optional": true }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -10272,15 +18162,6 @@ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -10316,12 +18197,6 @@ "yargs-unparser": "2.0.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -10383,21 +18258,21 @@ "once": "^1.3.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -10413,6 +18288,12 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -10475,6 +18356,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node-abi": { "version": "3.57.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", @@ -10506,12 +18393,41 @@ "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", "dev": true }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -10521,6 +18437,18 @@ "boolbase": "^1.0.0" } }, + "obj-props": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.4.0.tgz", + "integrity": "sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, "object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -10533,26 +18461,82 @@ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + } + }, + "object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + } + }, + "object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "once": { @@ -10595,6 +18579,12 @@ "p-limit": "^3.0.2" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", @@ -10609,6 +18599,18 @@ "callsites": "^3.0.0" } }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "parse-semver": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", @@ -10703,12 +18705,27 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", @@ -10753,6 +18770,15 @@ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -10769,6 +18795,23 @@ "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", "dev": true }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "proto-props": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", + "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10786,6 +18829,29 @@ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, + "pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", + "dev": true, + "requires": { + "tslib": "^2.6.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "dev": true + }, "qs": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", @@ -10822,6 +18888,169 @@ "unicode-properties": "github:quicktype/unicode-properties#dist" }, "dependencies": { + "@typescript-eslint/eslint-plugin": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", + "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/type-utils": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/parser": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", + "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" + } + }, + "@typescript-eslint/types": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.7.1", + "eslint-visitor-keys": "^3.4.3" + } + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", + "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/types": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/utils": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, "typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -10859,7 +19088,6 @@ "pako": "^1.0.6", "pluralize": "^8.0.0", "readable-stream": "4.5.2", - "tslint": "^6.1.3", "typescript": "4.9.5", "unicode-properties": "^1.4.1", "urijs": "^1.19.1", @@ -10867,6 +19095,11 @@ "yaml": "^2.4.1" }, "dependencies": { + "js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -10882,7 +19115,6 @@ "collection-utils": "^1.0.1", "graphql": "^0.11.7", "quicktype-core": "file:../quicktype-core", - "tslint": "^6.1.3", "typescript": "4.9.5" } }, @@ -10892,7 +19124,6 @@ "@mark.probst/typescript-json-schema": "0.55.0", "@types/node": "18.19.31", "quicktype-core": "file:../quicktype-core", - "tslint": "^6.1.3", "typescript": "4.9.5" }, "dependencies": { @@ -10901,11 +19132,6 @@ "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.2.tgz", "integrity": "sha512-tLjfhinr6doUBcWi7BWnkT2zT6G5UhiZftsiIH6xVvykeXE+FU7Wr0MyqwmqideWlDD5rG+VjVLptLviGo04CA==" }, - "browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" - }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", @@ -10915,11 +19141,6 @@ "whatwg-fetch": ">=0.10.0" } }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" - }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -10982,6 +19203,18 @@ "through2": "^2.0.0" } }, + "rambda": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", + "dev": true + }, + "ramda": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", + "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -11013,6 +19246,12 @@ } } }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -11022,6 +19261,82 @@ "mute-stream": "~0.0.4" } }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "readable-stream": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", @@ -11058,6 +19373,27 @@ "picomatch": "^2.2.1" } }, + "recast": { + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz", + "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==", + "dev": true, + "requires": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -11067,6 +19403,52 @@ "resolve": "^1.1.6" } }, + "refa": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz", + "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.0" + } + }, + "reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "regexp-ast-analysis": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz", + "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0" + } + }, + "regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true + }, "regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -11079,18 +19461,61 @@ "set-function-name": "^2.0.1" } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "req-all": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/req-all/-/req-all-0.1.0.tgz", + "integrity": "sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==", + "dev": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, + "requireindex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", + "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", + "dev": true + }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { @@ -11099,6 +19524,12 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11114,6 +19545,17 @@ "glob": "^7.1.3" } }, + "roarr": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.1.tgz", + "integrity": "sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==", + "dev": true, + "requires": { + "fast-printf": "^1.6.9", + "safe-stable-stringify": "^2.4.3", + "semver-compare": "^1.0.0" + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -11123,15 +19565,46 @@ "queue-microtask": "^1.2.2" } }, + "safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + } + }, "safe-stable-stringify": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz", - "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" }, "safer-buffer": { "version": "2.1.2", @@ -11144,6 +19617,17 @@ "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", "dev": true }, + "scslre": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz", + "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0" + } + }, "semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -11153,6 +19637,12 @@ "lru-cache": "^6.0.0" } }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -11273,13 +19763,50 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "optional": true + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } + } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "static-eval": { @@ -11302,12 +19829,6 @@ "esutils": "^2.0.2", "source-map": "~0.6.1" } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true } } }, @@ -11389,6 +19910,12 @@ "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==" }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -11397,6 +19924,18 @@ "safe-buffer": "~5.1.0" } }, + "string-env-interpolation": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", + "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", + "dev": true + }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, "string-to-stream": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", @@ -11438,6 +19977,60 @@ "strip-ansi": "^6.0.1" } }, + "string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + } + }, + "string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -11455,6 +20048,21 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -11470,6 +20078,29 @@ "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "synckit": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.6.2.tgz", + "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", + "dev": true, + "requires": { + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, "table-layout": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", @@ -11592,12 +20223,24 @@ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" }, + "tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true + }, "tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11639,86 +20282,44 @@ "yn": "3.1.1" } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "ts-unused-exports": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ts-unused-exports/-/ts-unused-exports-9.0.5.tgz", + "integrity": "sha512-1XAXaH2i4Al/aZO06pWDn9MUgTN0KQi+fvWudiWfHUTHAav45gzrx7Xq6JAsu6+LoMlVoyGvNvZSPW3KTjDncA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "tsconfig-paths": "^3.9.0" + } }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "minimist": "^1.2.0" } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true } } }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "tunnel": { "version": "0.0.6", @@ -11751,6 +20352,58 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + } + }, "typed-rest-client": { "version": "1.8.11", "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", @@ -11784,6 +20437,18 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "underscore": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", @@ -11838,6 +20503,25 @@ } } }, + "unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dev": true, + "requires": { + "normalize-path": "^2.1.1" + } + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11858,6 +20542,12 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, + "urlpattern-polyfill": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", + "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -11891,12 +20581,77 @@ } } }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } + } + }, + "value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dev": true + }, "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, + "vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", + "dev": true + }, + "vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true + }, + "vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true + }, + "vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, "watch": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", @@ -11907,6 +20662,33 @@ "minimist": "^1.2.0" } }, + "web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true + }, + "webcrypto-core": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", + "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", + "dev": true, + "requires": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.1", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -11948,6 +20730,34 @@ "is-symbol": "^1.0.3" } }, + "which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", @@ -12059,6 +20869,14 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "peer": true, + "requires": {} + }, "xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", @@ -12075,6 +20893,15 @@ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, + "xregexp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", + "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", + "dev": true, + "requires": { + "@babel/runtime-corejs3": "^7.16.5" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -12097,6 +20924,17 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==" }, + "yaml-eslint-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", + "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.0.0", + "lodash": "^4.17.21", + "yaml": "^2.0.0" + } + }, "yargs": { "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", diff --git a/package.json b/package.json index 7cb74412c..150332161 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,9 @@ "test": "script/test", "start": "script/watch", "clean": "rm -rf dist node_modules *~ packages/*/{dist,node_modules,out}", - "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/index.js" + "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/index.js", + "lint": "eslint src/** packages/*/src/**", + "lint:fix": "eslint --fix src/** packages/*/src/**" }, "workspaces": [ "./packages/quicktype-core", @@ -50,16 +52,25 @@ "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", + "@typescript-eslint/eslint-plugin": "^6.3.0", + "@typescript-eslint/parser": "^6.3.0", "ajv": "^5.5.2", "deep-equal": "^2.2.3", "esbuild": "^0.20.2", + "eslint": "^8.57.0", + "eslint-config-canonical": "^41.1.7", + "eslint-config-prettier": "^6.10.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-canonical": "^3.4.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-json": "^3.1.0", + "eslint-plugin-prettier": "^4.2.1", "exit": "^0.1.2", "prettier": "^3.2.5", "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", "ts-node": "^10.9.2", - "tslint": "^6.1.3", "watch": "^1.0.2" }, "files": [ diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 61beb8fa2..cfe9dc95d 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -8,8 +8,7 @@ "repository": "https://github.com/quicktype/quicktype", "scripts": { "clean": "rm -rf dist node_modules *~", - "build": "tsc", - "tslint": "tslint --project ." + "build": "tsc" }, "dependencies": { "@glideapps/ts-necessities": "2.2.3", @@ -35,7 +34,6 @@ "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", - "tslint": "^6.1.3", "typescript": "4.9.5" }, "files": [ diff --git a/packages/quicktype-core/src/TypeUtils.ts b/packages/quicktype-core/src/TypeUtils.ts index 4f3c57f29..36fb166a9 100644 --- a/packages/quicktype-core/src/TypeUtils.ts +++ b/packages/quicktype-core/src/TypeUtils.ts @@ -290,7 +290,6 @@ export function matchType( return panic(`Unsupported type ${t.kind} in non-exhaustive match`); } - /* tslint:disable:strict-boolean-expressions */ return matchTypeExhaustive( type, typeNotSupported, @@ -308,7 +307,6 @@ export function matchType( unionType, transformedStringType || typeNotSupported ); - /* tslint:enable */ } export function matchCompoundType( diff --git a/packages/quicktype-core/src/input/Inputs.ts b/packages/quicktype-core/src/input/Inputs.ts index 3baefd9c5..9ff8905fa 100644 --- a/packages/quicktype-core/src/input/Inputs.ts +++ b/packages/quicktype-core/src/input/Inputs.ts @@ -60,7 +60,6 @@ export class JSONInput implements Input> { private readonly _topLevels: Map = new Map(); - /* tslint:disable:no-unused-variable */ constructor(private readonly _compressedJSON: CompressedJSON) {} private addSample(topLevelName: string, sample: Value): void { diff --git a/packages/quicktype-graphql-input/package.json b/packages/quicktype-graphql-input/package.json index 396b8265d..8a17ead16 100644 --- a/packages/quicktype-graphql-input/package.json +++ b/packages/quicktype-graphql-input/package.json @@ -8,8 +8,7 @@ "repository": "https://github.com/quicktype/quicktype", "scripts": { "clean": "rm -rf dist node_modules *~", - "build": "tsc", - "tslint": "tslint --project ." + "build": "tsc" }, "dependencies": { "quicktype-core": "file:../quicktype-core", @@ -19,8 +18,7 @@ "devDependencies": { "@types/node": "18.19.31", "@types/graphql": "^0.11.7", - "typescript": "4.9.5", - "tslint": "^6.1.3" + "typescript": "4.9.5" }, "files": [ "dist" diff --git a/packages/quicktype-graphql-input/src/GraphQLSchema.ts b/packages/quicktype-graphql-input/src/GraphQLSchema.ts index 5f8d570b9..e53072baf 100644 --- a/packages/quicktype-graphql-input/src/GraphQLSchema.ts +++ b/packages/quicktype-graphql-input/src/GraphQLSchema.ts @@ -1,4 +1,4 @@ -/* tslint:disable */ +/* eslint-disable */ // This file was automatically generated and should not be edited. // A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies. diff --git a/packages/quicktype-graphql-input/src/index.ts b/packages/quicktype-graphql-input/src/index.ts index bd3cc0feb..515c5c258 100644 --- a/packages/quicktype-graphql-input/src/index.ts +++ b/packages/quicktype-graphql-input/src/index.ts @@ -1,5 +1,3 @@ -/* tslint:disable:strict-boolean-expressions */ - import { DocumentNode, SelectionSetNode, diff --git a/packages/quicktype-typescript-input/package.json b/packages/quicktype-typescript-input/package.json index ad3588402..b624fd081 100644 --- a/packages/quicktype-typescript-input/package.json +++ b/packages/quicktype-typescript-input/package.json @@ -8,8 +8,7 @@ "repository": "https://github.com/quicktype/quicktype", "scripts": { "clean": "rm -rf dist node_modules *~", - "build": "tsc", - "tslint": "tslint --project ." + "build": "tsc" }, "dependencies": { "quicktype-core": "file:../quicktype-core", @@ -17,8 +16,7 @@ "@mark.probst/typescript-json-schema": "0.55.0" }, "devDependencies": { - "@types/node": "18.19.31", - "tslint": "^6.1.3" + "@types/node": "18.19.31" }, "files": [ "dist" diff --git a/src/index.ts b/src/index.ts index 943abdfb9..109161c79 100644 --- a/src/index.ts +++ b/src/index.ts @@ -271,7 +271,6 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua language = maybeLanguage; } - /* tslint:disable:strict-boolean-expressions */ const options: CLIOptions = { src: opts.src || [], srcUrls: opts.srcUrls, @@ -295,7 +294,6 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua debug: opts.debug, telemetry: opts.telemetry }; - /* tslint:enable */ for (const flagName of inferenceFlagNames) { const cliName = negatedInferenceFlagName(flagName); options[cliName] = !!opts[cliName]; diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 6bfd49e76..000000000 --- a/tslint.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "rules": { - "await-promise": true, - "promise-function-async": true, - "no-floating-promises": true, - "align": [true, "parameters", "statements"], - "ban": false, - "class-name": true, - "comment-format": [true, "check-space"], - "curly": false, - "eofline": false, - "forin": true, - "indent": [true, "spaces", 4], - "interface-name": [true, "never-prefix"], - "jsdoc-format": true, - "jsx-no-lambda": false, - "jsx-no-multiline-js": false, - "label-position": true, - "max-line-length": false, - "member-ordering": [true, "static-before-instance"], - - "no-any": false, - - "no-arg": true, - "no-bitwise": false, - "no-console": [ - false, - "log", - "error", - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-consecutive-blank-lines": true, - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": [true, "allow-empty-catch"], - "no-eval": true, - "no-shadowed-variable": true, - "no-string-literal": false, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": false, - "no-unsafe-any": false, - "no-unused-expression": true, - "no-use-before-declare": false, - "no-unused-variable": true, - "no-var-keyword": true, - "no-void-expression": false, - "strict-boolean-expressions": true, - "one-line": [ - true, - "check-catch", - "check-else", - "check-open-brace", - "check-whitespace" - ], - "quotemark": [true, "double", "avoid-escape"], - "radix": true, - "semicolon": [true, "always", "ignore-bound-class-methods"], - "switch-default": true, - - "trailing-comma": false, - - "triple-equals": [true, "allow-null-check"], - "typedef": [true, "parameter", "property-declaration"], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case" - ], - "whitespace": [false] - } -} From 79b94e5870ca8a3bdb24128fdba7cf66a7d39815 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sun, 12 May 2024 15:05:23 -0700 Subject: [PATCH 70/99] chore: ESLint fixes (#2558) * standardise json formatting * add file association for schema files * install eslint packages * add eslint config * remove tslint * eslint autofix * update eslint rules, eslintignore * add lint:fix script * update eslint rules, eslintignore * add lint:fix script * add import rules * add import rules * update import rules * reduce excess style rules * downgrade remaining to warnings * fix enum values fixup! fix enum values * add all missing accessibility modifiers fixup! add all missing accessibility modifiers fixup! add all missing accessibility modifiers * fix nullish errors * update import rules * fix all require imports * fix all imports * reduce excess style rules * fix any types fixup! fix any types fixup! fix any types * fix misc errors * downgrade remaining to warnings * return types * fix types errors * fix json import for test tsconfig * auto lint fix * fix lint errors in extension * fix lint errors in Elixir * make ref.pushElement public * fix misc * fix accidental public in CSharp raw text get * fix new lint errors --- package-lock.json | 12076 ++-------------- package.json | 1 + packages/quicktype-core/package.json | 6 +- packages/quicktype-core/src/Annotation.ts | 3 +- .../quicktype-core/src/ConvenienceRenderer.ts | 128 +- packages/quicktype-core/src/CycleBreaker.ts | 13 +- packages/quicktype-core/src/DateTime.ts | 11 +- packages/quicktype-core/src/DeclarationIR.ts | 27 +- packages/quicktype-core/src/GatherNames.ts | 35 +- packages/quicktype-core/src/Graph.ts | 27 +- packages/quicktype-core/src/GraphRewriting.ts | 145 +- .../quicktype-core/src/MakeTransformations.ts | 81 +- packages/quicktype-core/src/MarkovChain.ts | 32 +- packages/quicktype-core/src/Messages.ts | 33 +- packages/quicktype-core/src/Naming.ts | 136 +- packages/quicktype-core/src/Renderer.ts | 123 +- .../quicktype-core/src/RendererOptions.ts | 54 +- packages/quicktype-core/src/Run.ts | 166 +- packages/quicktype-core/src/Source.ts | 40 +- packages/quicktype-core/src/TargetLanguage.ts | 58 +- packages/quicktype-core/src/Transformers.ts | 358 +- packages/quicktype-core/src/Type.ts | 263 +- packages/quicktype-core/src/TypeBuilder.ts | 166 +- packages/quicktype-core/src/TypeGraph.ts | 120 +- packages/quicktype-core/src/TypeUtils.ts | 66 +- packages/quicktype-core/src/UnifyClasses.ts | 26 +- packages/quicktype-core/src/UnionBuilder.ts | 90 +- .../src/attributes/AccessorNames.ts | 39 +- .../src/attributes/Constraints.ts | 47 +- .../src/attributes/Description.ts | 50 +- .../src/attributes/EnumValues.ts | 14 +- .../src/attributes/StringTypes.ts | 75 +- .../src/attributes/TypeAttributes.ts | 55 +- .../src/attributes/TypeNames.ts | 89 +- .../src/attributes/URIAttributes.ts | 24 +- packages/quicktype-core/src/index.ts | 48 +- .../src/input/CompressedJSON.ts | 80 +- .../src/input/FetchingJSONSchemaStore.ts | 8 +- .../quicktype-core/src/input/Inference.ts | 65 +- packages/quicktype-core/src/input/Inputs.ts | 97 +- .../src/input/JSONSchemaInput.ts | 363 +- .../src/input/JSONSchemaStore.ts | 16 +- .../src/input/PostmanCollection.ts | 11 +- .../quicktype-core/src/input/io/NodeIO.ts | 13 +- .../src/input/io/get-stream/buffer-stream.ts | 6 +- .../src/input/io/get-stream/index.ts | 22 +- packages/quicktype-core/src/language/All.ts | 43 +- packages/quicktype-core/src/language/CJSON.ts | 621 +- .../quicktype-core/src/language/CPlusPlus.ts | 285 +- .../quicktype-core/src/language/CSharp.ts | 207 +- .../quicktype-core/src/language/Crystal.ts | 43 +- packages/quicktype-core/src/language/Dart.ts | 100 +- .../quicktype-core/src/language/Elixir.ts | 83 +- packages/quicktype-core/src/language/Elm.ts | 93 +- .../quicktype-core/src/language/Golang.ts | 57 +- .../quicktype-core/src/language/Haskell.ts | 63 +- .../quicktype-core/src/language/JSONSchema.ts | 61 +- packages/quicktype-core/src/language/Java.ts | 237 +- .../quicktype-core/src/language/JavaScript.ts | 109 +- .../src/language/JavaScriptPropTypes.ts | 75 +- .../src/language/JavaScriptUnicodeMaps.ts | 3 +- .../quicktype-core/src/language/Kotlin.ts | 96 +- .../src/language/Objective-C.ts | 122 +- packages/quicktype-core/src/language/Php.ts | 175 +- packages/quicktype-core/src/language/Pike.ts | 34 +- .../quicktype-core/src/language/Python.ts | 260 +- packages/quicktype-core/src/language/Rust.ts | 78 +- .../quicktype-core/src/language/Scala3.ts | 76 +- .../quicktype-core/src/language/Smithy4s.ts | 66 +- packages/quicktype-core/src/language/Swift.ts | 158 +- .../src/language/TypeScriptEffectSchema.ts | 62 +- .../src/language/TypeScriptFlow.ts | 57 +- .../src/language/TypeScriptZod.ts | 106 +- .../quicktype-core/src/language/ruby/index.ts | 120 +- .../src/language/ruby/keywords.ts | 8 +- .../src/rewrites/CombineClasses.ts | 21 +- .../src/rewrites/ExpandStrings.ts | 35 +- .../src/rewrites/FlattenStrings.ts | 14 +- .../src/rewrites/FlattenUnions.ts | 19 +- .../quicktype-core/src/rewrites/InferMaps.ts | 18 +- .../src/rewrites/ReplaceObjectType.ts | 12 +- .../src/rewrites/ResolveIntersections.ts | 73 +- .../quicktype-core/src/support/Acronyms.ts | 10 +- packages/quicktype-core/src/support/Chance.ts | 31 +- .../quicktype-core/src/support/Comments.ts | 20 +- .../quicktype-core/src/support/Converters.ts | 6 +- .../quicktype-core/src/support/Strings.ts | 100 +- .../quicktype-core/src/support/Support.ts | 60 +- packages/quicktype-core/src/types.ts | 6 + packages/quicktype-graphql-input/src/index.ts | 169 +- .../quicktype-typescript-input/src/index.ts | 12 +- packages/quicktype-vscode/src/extension.ts | 169 +- src/CompressedJSONFromStream.ts | 16 +- src/GraphQLIntrospection.ts | 10 +- src/TypeSource.ts | 6 +- src/URLGrammar.ts | 14 +- src/index.ts | 192 +- test/tsconfig.json | 3 +- tsconfig.json | 3 +- 99 files changed, 5877 insertions(+), 14046 deletions(-) create mode 100644 packages/quicktype-core/src/types.ts diff --git a/package-lock.json b/package-lock.json index 4923f1c64..1dd564e76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "quicktype", "version": "23.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -45,6 +45,7 @@ "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", + "@types/wordwrap": "^1.0.3", "@typescript-eslint/eslint-plugin": "^6.3.0", "@typescript-eslint/parser": "^6.3.0", "ajv": "^5.5.2", @@ -72,8 +73,7 @@ }, "node_modules/@75lb/deep-merge": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", - "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", + "license": "MIT", "dependencies": { "lodash.assignwith": "^4.2.0", "typical": "^7.1.1" @@ -84,17 +84,15 @@ }, "node_modules/@75lb/deep-merge/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -109,7 +107,7 @@ "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { @@ -148,30 +146,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -196,9 +194,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", - "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz", + "integrity": "sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -210,7 +208,7 @@ }, "peerDependencies": { "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { @@ -232,9 +230,9 @@ } }, "node_modules/@babel/eslint-plugin": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.23.5.tgz", - "integrity": "sha512-03+E/58Hoo/ui69gR+beFdGpplpoVK0BSIdke2iw4/Bz7eGN0ssRenNlnU4nmbkowNQOPCStKSwFr8H6DiY49g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.24.5.tgz", + "integrity": "sha512-5n3K9Zv13VOa9SG2ZiX0WV7A0ddApRn6vsV8zBojCsxnCbYKLjCDvzDfVxS7C4STmjQDOXU1uk/ppxxDTC860w==", "dev": true, "dependencies": { "eslint-rule-composer": "^0.3.0" @@ -244,16 +242,16 @@ }, "peerDependencies": { "@babel/eslint-parser": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -372,16 +370,16 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -391,33 +389,33 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -433,9 +431,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -451,26 +449,26 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dev": true, "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.5", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -494,9 +492,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -573,9 +571,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", + "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -585,9 +583,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.1.tgz", - "integrity": "sha512-T9ko/35G+Bkl+win48GduaPlhSlOjjE5s1TeiEcD+QpxlLQnoEfb/nO/T+TQqkm+ipFwORn+rB8w14iJ/uD0bg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.5.tgz", + "integrity": "sha512-GWO0mgzNMLWaSYM4z4NVIuY0Cd1fl8cPnuetuddu5w/qGuvt5Y7oUi/kvvQGK9xgOkFJDQX2heIvTRn/OQ1XTg==", "dev": true, "dependencies": { "core-js-pure": "^3.30.2", @@ -612,19 +610,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -642,13 +640,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -657,14 +655,12 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -686,719 +682,358 @@ "node": ">=16" } }, - "node_modules/@esbuild/aix-ppc64": { + "node_modules/@esbuild/win32-x64": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ - "ppc64" + "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "aix" + "win32" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "license": "Python-2.0" }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/fast-deep-equal": { + "version": "3.1.3", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/js": { + "version": "8.57.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], + "node_modules/@glideapps/ts-necessities": { + "version": "2.2.3", + "license": "MIT" + }, + "node_modules/@graphql-eslint/eslint-plugin": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz", + "integrity": "sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@graphql-tools/code-file-loader": "^7.3.6", + "@graphql-tools/graphql-tag-pluck": "^7.3.6", + "@graphql-tools/utils": "^9.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "graphql-config": "^4.4.0", + "graphql-depth-limit": "^1.1.0", + "lodash.lowercase": "^4.3.0", + "tslib": "^2.4.1" + }, "engines": { "node": ">=12" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/code-file-loader": { + "version": "7.3.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", + "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@graphql-tools/graphql-tag-pluck": "7.5.2", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/graphql-tag-pluck": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", + "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@babel/parser": "^7.16.8", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/@graphql-eslint/eslint-plugin/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, "engines": { - "node": ">=12" + "node": ">=10.10.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } + "license": "BSD-3-Clause" }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], + "node_modules/@isaacs/cliui": { + "version": "8.0.2", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@eslint/eslintrc/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/@glideapps/ts-necessities": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", - "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==" - }, - "node_modules/@graphql-eslint/eslint-plugin": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz", - "integrity": "sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@graphql-tools/code-file-loader": "^7.3.6", - "@graphql-tools/graphql-tag-pluck": "^7.3.6", - "@graphql-tools/utils": "^9.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.4", - "fast-glob": "^3.2.12", - "graphql-config": "^4.4.0", - "graphql-depth-limit": "^1.1.0", - "lodash.lowercase": "^4.3.0", - "tslib": "^2.4.1" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "node": ">=6.0.0" } }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/code-file-loader": { - "version": "7.3.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", - "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@graphql-tools/graphql-tag-pluck": "7.5.2", - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", - "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.16.8", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dev": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "dev": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1414,13 +1049,11 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1428,8 +1061,7 @@ }, "node_modules/@mark.probst/typescript-json-schema": { "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", - "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", + "license": "BSD-3-Clause", "dependencies": { "@types/json-schema": "^7.0.9", "@types/node": "^16.9.2", @@ -1446,13 +1078,11 @@ }, "node_modules/@mark.probst/typescript-json-schema/node_modules/@types/node": { "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" + "license": "MIT" }, "node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1484,10 +1114,10 @@ "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { @@ -1523,9 +1153,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1536,18 +1165,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1592,16 +1219,16 @@ "dev": true }, "node_modules/@peculiar/webcrypto": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", - "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.6.tgz", + "integrity": "sha512-YBcMfqNSwn3SujUJvAaySy5tlYbYm6tVt9SKoXu8BaTdKGROiJDgPR3TXpZdAKUfklzm3lRapJEAltiMQtBgZg==", "dev": true, "dependencies": { "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", "pvtsutils": "^1.3.5", "tslib": "^2.6.2", - "webcrypto-core": "^1.7.8" + "webcrypto-core": "^1.7.9" }, "engines": { "node": ">=10.12.0" @@ -1615,9 +1242,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1642,69 +1268,59 @@ "dev": true }, "node_modules/@rushstack/eslint-patch": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz", - "integrity": "sha512-0HejFckBN2W+ucM6cUOlwsByTKt9/+0tWhqUffNIcHqCXkthY/mZ7AuYPK/2IIaGWhdl0h+tICDO0ssLMd6XMQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", + "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", "dev": true }, "node_modules/@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + "license": "MIT" }, "node_modules/@tsconfig/node18": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-1.0.1.tgz", - "integrity": "sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/browser-or-node": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", - "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/command-line-args": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/command-line-usage": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -1712,20 +1328,23 @@ }, "node_modules/@types/graphql": { "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.11.8.tgz", - "integrity": "sha512-xGWx4kx9JKlqxDrZA12gw5qi2lvxPNLxnQQcoTXVX83MuGcXcpb7TADatGyGW51GaaXQOQTbjw3x4HuL3ULBaA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/is-url": { + "version": "1.2.32", + "resolved": "https://registry.npmjs.org/@types/is-url/-/is-url-1.2.32.tgz", + "integrity": "sha512-46VLdbWI8Sc+hPexQ6NLNR2YpoDyDZIpASHkJQ2Yr+Kf9Giw6LdCTkwOdsnHKPQeh7xTjTmSnxbE8qpxYuCiHA==", "dev": true }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -1741,29 +1360,25 @@ }, "node_modules/@types/minimatch": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "18.19.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", - "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/node-persist": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@types/node-persist/-/node-persist-3.1.8.tgz", - "integrity": "sha512-QLidg6/SadZYPrTKxtxL1A85XBoQlG40bhoMdhu6DH6+eNCMr2j+RGfFZ9I9+IY8W/PDwQonJ+iBWD62jZjMfg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1776,33 +1391,32 @@ }, "node_modules/@types/pako": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", - "integrity": "sha1-6q6DZNG391LiY7w/1o3+yY5hNsU=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/pluralize": { "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.30.tgz", - "integrity": "sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/readable-stream": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", - "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", - "dev": true + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } }, "node_modules/@types/semver": { "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/shelljs": { "version": "0.8.15", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz", - "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/glob": "~7.2.0", "@types/node": "*" @@ -1810,18 +1424,16 @@ }, "node_modules/@types/stream-chain": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", - "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/stream-json": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.3.tgz", - "integrity": "sha512-Jqsyq5VPOTWorvEmzWhEWH5tJnHA+bB8vt/Zzb11vSDj8esfSHDMj2rbVjP0mfJQzl3YBJSXBBq08iiyaBK3KA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/stream-chain": "*" @@ -1829,19 +1441,22 @@ }, "node_modules/@types/unicode-properties": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/unicode-properties/-/unicode-properties-1.3.0.tgz", - "integrity": "sha512-kDVlxpdkCfgvzfXcglkr7j4OSMjCEEo/Jloj4tFuldYZpQ9Uypy7FGXPhNstoj4eGvhddwuu5n0EfI+XdWVoVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/urijs": { "version": "1.19.25", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", - "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" + "license": "MIT" }, "node_modules/@types/vscode": { "version": "1.88.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.88.0.tgz", - "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/wordwrap": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/wordwrap/-/wordwrap-1.0.3.tgz", + "integrity": "sha512-jx39cOYWJxZxVOZeNHvLVoDLRUFcYtIJaurC6C0qzCovIB3GPDbMDbYvoWi9D1B2PtIE16rElQOFR4Y+8QbUgw==", "dev": true }, "node_modules/@types/ws": { @@ -2225,15 +1840,13 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@vscode/test-cli": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.6.tgz", - "integrity": "sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mocha": "^10.0.2", "c8": "^9.1.0", @@ -2251,18 +1864,16 @@ }, "node_modules/@vscode/test-cli/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@vscode/test-cli/node_modules/glob": { "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.6", @@ -2282,9 +1893,8 @@ }, "node_modules/@vscode/test-cli/node_modules/minimatch": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2297,9 +1907,8 @@ }, "node_modules/@vscode/test-cli/node_modules/supports-color": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2309,9 +1918,8 @@ }, "node_modules/@vscode/test-cli/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2327,9 +1935,8 @@ }, "node_modules/@vscode/test-electron": { "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", - "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", "dev": true, + "license": "MIT", "dependencies": { "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -2342,9 +1949,8 @@ }, "node_modules/@vscode/vsce": { "version": "2.25.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.25.0.tgz", - "integrity": "sha512-VXMCGUaP6wKBadA7vFQdsksxkBAMoh4ecZgXBwauZMASAgnwYesHyLnqIyWYeRwjy2uEpitHvz/1w5ENnR30pg==", "dev": true, + "license": "MIT", "dependencies": { "azure-devops-node-api": "^12.5.0", "chalk": "^2.4.2", @@ -2381,9 +1987,8 @@ }, "node_modules/@vscode/vsce/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2393,16 +1998,12 @@ "node": ">=4" } }, - "node_modules/@vscode/vsce/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "6.2.1", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 6" } }, "node_modules/@whatwg-node/events": { @@ -2445,8 +2046,7 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -2456,8 +2056,7 @@ }, "node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2467,26 +2066,23 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -2496,9 +2092,8 @@ }, "node_modules/ajv": { "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, + "license": "MIT", "dependencies": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -2508,26 +2103,23 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2537,9 +2129,8 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2548,15 +2139,6 @@ "node": ">= 8" } }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", @@ -2568,14 +2150,7 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "license": "MIT" }, "node_modules/aria-query": { "version": "5.3.0", @@ -2588,8 +2163,7 @@ }, "node_modules/array-back": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -2817,15 +2391,13 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -2856,9 +2428,8 @@ }, "node_modules/azure-devops-node-api": { "version": "12.5.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", - "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, + "license": "MIT", "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" @@ -2866,13 +2437,10 @@ }, "node_modules/balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -2886,13 +2454,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2902,9 +2470,8 @@ }, "node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "buffer": "^5.5.0", @@ -2914,8 +2481,6 @@ }, "node_modules/bl/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -2931,6 +2496,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "dependencies": { "base64-js": "^1.3.1", @@ -2939,9 +2505,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "inherits": "^2.0.3", @@ -2954,9 +2519,8 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/boolean": { "version": "3.2.0", @@ -2966,8 +2530,7 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2975,9 +2538,8 @@ }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -2987,9 +2549,8 @@ }, "node_modules/brfs": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", "dev": true, + "license": "MIT", "dependencies": { "quote-stream": "^1.0.1", "resolve": "^1.1.5", @@ -3002,14 +2563,12 @@ }, "node_modules/browser-or-node": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", - "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==" + "license": "MIT" }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserslist": { "version": "4.23.0", @@ -3045,8 +2604,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -3061,6 +2618,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -3068,27 +2626,24 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-equal": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/busboy": { "version": "1.6.0", @@ -3104,9 +2659,8 @@ }, "node_modules/c8": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", - "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", "dev": true, + "license": "ISC", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", @@ -3129,9 +2683,8 @@ }, "node_modules/c8/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -3147,9 +2700,8 @@ }, "node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -3166,18 +2718,16 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3186,9 +2736,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001600", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "version": "1.0.30001614", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", + "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", "dev": true, "funding": [ { @@ -3207,8 +2757,7 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3222,8 +2771,7 @@ }, "node_modules/chalk-template": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -3236,8 +2784,7 @@ }, "node_modules/chalk/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3250,8 +2797,7 @@ }, "node_modules/chalk/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3261,16 +2807,14 @@ }, "node_modules/chalk/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3286,9 +2830,8 @@ }, "node_modules/cheerio": { "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, + "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -3307,9 +2850,8 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -3324,9 +2866,8 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3346,32 +2887,10 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chokidar/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, + "license": "ISC", "optional": true }, "node_modules/ci-info": { @@ -3403,8 +2922,7 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3416,9 +2934,8 @@ }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -3426,43 +2943,37 @@ }, "node_modules/cockatiel": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", - "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" } }, "node_modules/collection-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", - "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" + "license": "Apache-2.0" }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-convert/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3472,8 +2983,7 @@ }, "node_modules/command-line-args": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -3486,8 +2996,7 @@ }, "node_modules/command-line-usage": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", - "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", + "license": "MIT", "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -3500,29 +3009,18 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/command-line-usage/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "license": "MIT", "engines": { "node": ">=12.17" } }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/comment-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", @@ -3534,17 +3032,15 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3554,9 +3050,8 @@ }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3569,14 +3064,13 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-js-pure": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", - "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.0.tgz", + "integrity": "sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -3586,8 +3080,7 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "8.0.0", @@ -3604,6 +3097,24 @@ "node": ">=14" } }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/create-eslint-index": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/create-eslint-index/-/create-eslint-index-1.0.0.tgz", @@ -3618,22 +3129,19 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "license": "MIT" }, "node_modules/cross-fetch": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3645,9 +3153,8 @@ }, "node_modules/css-select": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -3661,9 +3168,8 @@ }, "node_modules/css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -3736,9 +3242,8 @@ }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -3753,9 +3258,8 @@ }, "node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3765,9 +3269,8 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "mimic-response": "^3.1.0" @@ -3781,9 +3284,8 @@ }, "node_modules/deep-equal": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", @@ -3813,15 +3315,13 @@ }, "node_modules/deep-equal/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -3829,15 +3329,13 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -3852,9 +3350,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -3869,9 +3366,8 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -3887,9 +3383,8 @@ }, "node_modules/detect-libc": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, + "license": "Apache-2.0", "optional": true, "engines": { "node": ">=8" @@ -3897,8 +3392,7 @@ }, "node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -3917,9 +3411,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3929,9 +3422,8 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -3943,21 +3435,19 @@ }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -3970,9 +3460,8 @@ }, "node_modules/domutils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -3993,18 +3482,16 @@ }, "node_modules/duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4017,34 +3504,30 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.717", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", - "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", + "version": "1.4.751", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", + "integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==", "dev": true }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "license": "MIT" }, "node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "once": "^1.4.0" @@ -4064,9 +3547,8 @@ }, "node_modules/enhanced-resolve": { "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -4077,9 +3559,8 @@ }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -4097,9 +3578,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", - "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -4141,11 +3622,11 @@ "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.7", + "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" }, @@ -4158,9 +3639,8 @@ }, "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -4170,18 +3650,16 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-get-iterator": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -4199,19 +3677,18 @@ }, "node_modules/es-get-iterator/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -4282,10 +3759,9 @@ }, "node_modules/esbuild": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -4320,26 +3796,23 @@ }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -4357,33 +3830,18 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/escodegen/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -4394,9 +3852,8 @@ }, "node_modules/escodegen/node_modules/optionator": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -4411,8 +3868,6 @@ }, "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -4420,9 +3875,8 @@ }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -4432,9 +3886,8 @@ }, "node_modules/eslint": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -4794,9 +4247,9 @@ } }, "node_modules/eslint-plugin-cypress": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", - "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", + "version": "2.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", + "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", "dev": true, "dependencies": { "globals": "^13.20.0" @@ -5175,9 +4628,9 @@ } }, "node_modules/eslint-plugin-jsonc": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.14.1.tgz", - "integrity": "sha512-Tei6G4N7pZulP5MHi0EIdtseiCqUPkDMd0O8Zrw4muMIlsjJ5/B9X+U3Pfo6B7l0mTL9LN9FwuWT70dRJ6z7tg==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.15.1.tgz", + "integrity": "sha512-PVFrqIJa8BbM/e828RSn0SwB/Z5ye+2LDuy2XqG6AymNgPsfApRRcznsbxP7VrjdLEU4Nb+g9n/d6opyp0jp9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -5250,9 +4703,9 @@ } }, "node_modules/eslint-plugin-mocha": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz", - "integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz", + "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", @@ -5397,9 +4850,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -5574,13 +5027,13 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5591,9 +5044,9 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5604,19 +5057,19 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5632,18 +5085,18 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5657,13 +5110,13 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5683,9 +5136,9 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -5698,9 +5151,9 @@ } }, "node_modules/eslint-plugin-yml": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz", - "integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.14.0.tgz", + "integrity": "sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==", "dev": true, "dependencies": { "debug": "^4.3.2", @@ -5742,9 +5195,8 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -5785,9 +5237,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5797,9 +5248,8 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5811,11 +5261,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5825,21 +5279,40 @@ }, "node_modules/eslint/node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -5853,10 +5326,9 @@ } }, "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "version": "3.1.3", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5873,9 +5345,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5885,9 +5356,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5897,17 +5367,14 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true, "engines": { "node": ">=0.10.0" @@ -5915,33 +5382,28 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/exec-sh": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", "dev": true, + "license": "MIT", "dependencies": { "merge": "^1.1.3" } }, "node_modules/exit": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true, "engines": { "node": ">= 0.8.0" @@ -5949,9 +5411,8 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, + "license": "(MIT OR WTFPL)", "optional": true, "engines": { "node": ">=6" @@ -5971,9 +5432,8 @@ }, "node_modules/falafel": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", - "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" @@ -5984,9 +5444,8 @@ }, "node_modules/falafel/node_modules/acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5996,9 +5455,8 @@ }, "node_modules/falafel/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", @@ -6008,9 +5466,8 @@ }, "node_modules/fast-deep-equal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -6034,29 +5491,15 @@ "node": ">=8.6.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-printf": { "version": "1.6.9", @@ -6096,27 +5539,24 @@ }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6126,9 +5566,8 @@ }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6138,8 +5577,7 @@ }, "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -6149,9 +5587,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6165,18 +5602,16 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -6188,24 +5623,21 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6219,9 +5651,8 @@ }, "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -6233,35 +5664,18 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6286,9 +5700,8 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6304,17 +5717,15 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -6378,15 +5789,13 @@ }, "node_modules/github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6403,22 +5812,20 @@ } }, "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "version": "5.1.2", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -6430,12 +5837,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -6466,9 +5874,8 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6478,9 +5885,8 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/grapheme-splitter": { "version": "1.0.4", @@ -6490,14 +5896,12 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/graphql": { "version": "0.11.7", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", - "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", + "license": "MIT", "dependencies": { "iterall": "1.1.3" } @@ -6882,37 +6286,36 @@ } }, "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "version": "1.0.3", "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -6934,9 +6337,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6946,9 +6348,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -6961,9 +6362,8 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -6973,29 +6373,30 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/htmlparser2": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -7004,6 +6405,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -7013,9 +6415,8 @@ }, "node_modules/http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -7027,9 +6428,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -7040,8 +6440,7 @@ }, "node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7051,8 +6450,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -7066,28 +6463,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immediate": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7113,9 +6508,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -7131,8 +6525,7 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7140,14 +6533,12 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, + "license": "ISC", "optional": true }, "node_modules/internal-slot": { @@ -7166,15 +6557,13 @@ }, "node_modules/interpret": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7225,9 +6614,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -7237,9 +6625,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7249,9 +6636,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7292,9 +6678,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7331,9 +6716,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7346,9 +6730,8 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7367,8 +6750,7 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -7400,9 +6782,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7421,9 +6802,8 @@ }, "node_modules/is-map": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7442,18 +6822,16 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7476,18 +6854,16 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7504,9 +6880,8 @@ }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7520,9 +6895,8 @@ }, "node_modules/is-set": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7544,17 +6918,15 @@ }, "node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7567,9 +6939,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7597,9 +6968,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7609,14 +6979,12 @@ }, "node_modules/is-url": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + "license": "MIT" }, "node_modules/is-weakmap": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7635,9 +7003,8 @@ }, "node_modules/is-weakset": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -7648,14 +7015,12 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isomorphic-ws": { "version": "5.0.0", @@ -7668,18 +7033,16 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -7691,18 +7054,16 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7712,9 +7073,8 @@ }, "node_modules/istanbul-reports": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -7725,8 +7085,7 @@ }, "node_modules/iterall": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", - "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" + "license": "MIT" }, "node_modules/iterator.prototype": { "version": "1.1.2", @@ -7743,9 +7102,8 @@ }, "node_modules/jackspeak": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7769,9 +7127,8 @@ } }, "node_modules/js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + "version": "3.7.7", + "license": "BSD-3-Clause" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -7788,18 +7145,6 @@ "node": ">=0.10.0" } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -7835,9 +7180,8 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -7853,15 +7197,13 @@ }, "node_modules/json-schema-traverse": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", @@ -7895,9 +7237,8 @@ }, "node_modules/jsonc-parser": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsx-ast-utils": { "version": "3.3.5", @@ -7916,9 +7257,8 @@ }, "node_modules/jszip": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -7928,9 +7268,8 @@ }, "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7943,10 +7282,9 @@ }, "node_modules/keytar": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "node-addon-api": "^4.3.0", @@ -7955,9 +7293,8 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -7982,18 +7319,16 @@ }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8004,9 +7339,8 @@ }, "node_modules/lie": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } @@ -8019,18 +7353,16 @@ }, "node_modules/linkify-it": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^1.0.1" } }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -8043,18 +7375,15 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "license": "MIT" }, "node_modules/lodash.assignwith": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==" + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", @@ -8070,9 +7399,8 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.zip": { "version": "4.2.0", @@ -8082,9 +7410,8 @@ }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -8119,9 +7446,8 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -8131,18 +7457,16 @@ }, "node_modules/magic-string": { "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, + "license": "MIT", "dependencies": { "vlq": "^0.2.2" } }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -8155,14 +7479,12 @@ }, "node_modules/make-error": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" + "license": "ISC" }, "node_modules/markdown-it": { "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "~2.1.0", @@ -8174,41 +7496,41 @@ "markdown-it": "bin/markdown-it.js" } }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, "node_modules/markdown-it/node_modules/entities": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/mdurl": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-source-map": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "dev": true, + "license": "MIT", "dependencies": { "source-map": "^0.5.6" } }, "node_modules/merge-source-map/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -8260,9 +7582,8 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -8272,18 +7593,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8293,9 +7612,8 @@ }, "node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=10" @@ -8315,8 +7633,7 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8326,34 +7643,30 @@ }, "node_modules/minimist": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/mocha": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -8384,19 +7697,21 @@ "node": ">= 14.0.0" } }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -8404,6 +7719,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -8422,9 +7738,8 @@ }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -8433,18 +7748,16 @@ }, "node_modules/mocha/node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8454,9 +7767,8 @@ }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8471,32 +7783,29 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8506,24 +7815,13 @@ }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8536,9 +7834,8 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -8554,45 +7851,39 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/moment": { "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/napi-build-utils": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", @@ -8602,9 +7893,8 @@ }, "node_modules/node-abi": { "version": "3.57.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", - "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "semver": "^7.3.5" @@ -8615,15 +7905,13 @@ }, "node_modules/node-addon-api": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/node-fetch": { "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -8641,9 +7929,8 @@ }, "node_modules/node-persist": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", - "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.12.0" } @@ -8666,6 +7953,12 @@ "validate-npm-package-license": "^3.0.1" } }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -8676,22 +7969,17 @@ } }, "node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "version": "3.0.0", "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -8719,18 +8007,16 @@ }, "node_modules/object-inspect": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -8744,9 +8030,8 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -8851,17 +8136,15 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -8876,9 +8159,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -8891,9 +8173,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -8915,14 +8196,12 @@ }, "node_modules/pako": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -8950,27 +8229,24 @@ }, "node_modules/parse-semver": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^5.1.0" } }, "node_modules/parse-semver/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/parse5": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, + "license": "MIT", "dependencies": { "entities": "^4.4.0" }, @@ -8980,9 +8256,8 @@ }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dev": true, + "license": "MIT", "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -8993,46 +8268,40 @@ }, "node_modules/path-equal": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", - "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -9046,9 +8315,8 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } @@ -9064,9 +8332,8 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.0.0", @@ -9076,9 +8343,8 @@ }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9100,26 +8366,23 @@ }, "node_modules/pluralize": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/prebuild-install": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "detect-libc": "^2.0.0", @@ -9144,18 +8407,16 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9180,22 +8441,19 @@ }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "license": "MIT" }, "node_modules/promise-timeout": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/promise-timeout/-/promise-timeout-1.3.0.tgz", - "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prop-types": { "version": "15.8.1", @@ -9219,9 +8477,8 @@ }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "end-of-stream": "^1.1.0", @@ -9230,9 +8487,8 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -9263,9 +8519,8 @@ }, "node_modules/qs": { "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -9278,8 +8533,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -9294,7 +8547,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quicktype": { "resolved": "packages/quicktype-vscode", @@ -9314,9 +8568,8 @@ }, "node_modules/quote-stream": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", "dev": true, + "license": "MIT", "dependencies": { "buffer-equal": "0.0.1", "minimist": "^1.1.3", @@ -9344,18 +8597,16 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -9369,9 +8620,8 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -9385,9 +8635,8 @@ }, "node_modules/read": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, + "license": "ISC", "dependencies": { "mute-stream": "~0.0.4" }, @@ -9499,8 +8748,7 @@ }, "node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -9514,8 +8762,6 @@ }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -9529,21 +8775,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/readable-stream/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -9567,6 +8812,19 @@ "node": ">= 4" } }, + "node_modules/recast/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/recast/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -9575,8 +8833,6 @@ }, "node_modules/rechoir": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -9648,9 +8904,8 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -9714,8 +8969,7 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9748,9 +9002,8 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -9766,9 +9019,8 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -9776,9 +9028,8 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -9805,8 +9056,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -9822,6 +9071,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -9852,8 +9102,7 @@ }, "node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.0.3", @@ -9882,14 +9131,12 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "license": "MIT" }, "node_modules/sax": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/scslre": { "version": "0.2.0", @@ -9904,9 +9151,8 @@ }, "node_modules/semver": { "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -9925,18 +9171,16 @@ }, "node_modules/serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -9951,9 +9195,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -9966,21 +9209,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/shallow-copy": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -9990,18 +9230,16 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shelljs": { "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -10016,9 +9254,8 @@ }, "node_modules/side-channel": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -10034,9 +9271,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -10046,8 +9282,6 @@ }, "node_modules/simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -10063,12 +9297,11 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true }, "node_modules/simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -10084,6 +9317,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "dependencies": { "decompress-response": "^6.0.0", @@ -10102,9 +9336,8 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -10153,18 +9386,16 @@ }, "node_modules/static-eval": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", - "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", "dev": true, + "license": "MIT", "dependencies": { "escodegen": "^2.1.0" } }, "node_modules/static-eval/node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -10181,11 +9412,22 @@ "source-map": "~0.6.1" } }, + "node_modules/static-eval/node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/static-module": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", - "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", "dev": true, + "license": "MIT", "dependencies": { "concat-stream": "~1.6.0", "convert-source-map": "^1.5.1", @@ -10205,21 +9447,18 @@ }, "node_modules/static-module/node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/static-module/node_modules/object-inspect": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/static-module/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10232,9 +9471,8 @@ }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, + "license": "MIT", "dependencies": { "internal-slot": "^1.0.4" }, @@ -10244,21 +9482,18 @@ }, "node_modules/stream-chain": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + "license": "BSD-3-Clause" }, "node_modules/stream-json": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", + "license": "BSD-3-Clause", "dependencies": { "stream-chain": "^2.2.5" } }, "node_modules/stream-read-all": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", - "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", + "license": "MIT", "engines": { "node": ">=10" } @@ -10274,8 +9509,7 @@ }, "node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -10294,16 +9528,14 @@ }, "node_modules/string-to-stream": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", - "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", + "license": "MIT", "dependencies": { "readable-stream": "^3.4.0" } }, "node_modules/string-to-stream/node_modules/readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10315,8 +9547,7 @@ }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10329,9 +9560,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10418,8 +9648,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10430,9 +9659,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10463,9 +9691,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10475,9 +9702,8 @@ }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -10517,8 +9743,7 @@ }, "node_modules/table-layout": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", - "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", + "license": "MIT", "dependencies": { "@75lb/deep-merge": "^1.1.1", "array-back": "^6.2.2", @@ -10537,34 +9762,30 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/table-layout/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -10575,9 +9796,8 @@ }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "bl": "^4.0.3", @@ -10592,9 +9812,8 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "inherits": "^2.0.3", @@ -10607,9 +9826,8 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -10621,15 +9839,13 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -10637,9 +9853,8 @@ }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10652,8 +9867,7 @@ }, "node_modules/tiny-inflate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", - "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" + "license": "MIT" }, "node_modules/tiny-invariant": { "version": "1.3.3", @@ -10663,9 +9877,8 @@ }, "node_modules/tmp": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.14" } @@ -10681,9 +9894,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -10693,14 +9905,12 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/ts-api-utils": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -10710,8 +9920,7 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -10800,24 +10009,21 @@ }, "node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tunnel": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "safe-buffer": "^5.0.1" @@ -10828,9 +10034,8 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -10840,9 +10045,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10925,9 +10129,8 @@ }, "node_modules/typed-rest-client": { "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, + "license": "MIT", "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", @@ -10936,14 +10139,12 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10954,17 +10155,15 @@ }, "node_modules/typical": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/uc.micro": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unbox-primitive": { "version": "1.0.2", @@ -10983,19 +10182,16 @@ }, "node_modules/underscore": { "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "license": "MIT" }, "node_modules/unicode-properties": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "license": "MIT", "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" @@ -11003,13 +10199,11 @@ }, "node_modules/unicode-properties/node_modules/pako": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + "license": "MIT" }, "node_modules/unicode-properties/node_modules/unicode-trie": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" @@ -11017,9 +10211,8 @@ }, "node_modules/unicode-trie": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", - "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", "dev": true, + "license": "MIT", "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" @@ -11027,9 +10220,8 @@ }, "node_modules/unicode-trie/node_modules/pako": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unixify": { "version": "1.0.0", @@ -11043,6 +10235,18 @@ "node": ">=0.10.0" } }, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -11075,23 +10279,20 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/urijs": { "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + "license": "MIT" }, "node_modules/url-join": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/urlpattern-polyfill": { "version": "8.0.2", @@ -11101,19 +10302,16 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -11125,9 +10323,8 @@ }, "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -11164,9 +10361,8 @@ }, "node_modules/vlq": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-json-languageservice": { "version": "4.2.1", @@ -11207,9 +10403,8 @@ }, "node_modules/watch": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", - "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", "dev": true, + "license": "Apache-2.0", "dependencies": { "exec-sh": "^0.2.0", "minimist": "^1.2.0" @@ -11231,9 +10426,9 @@ } }, "node_modules/webcrypto-core": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", - "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.9.tgz", + "integrity": "sha512-FE+a4PPkOmBbgNDIyRmcHhgXn+2ClRl3JzJdDu/P4+B8y81LqKe6RAsI9b3lAOHe1T1BMkSjsRHTYRikImZnVA==", "dev": true, "dependencies": { "@peculiar/asn1-schema": "^2.3.8", @@ -11251,18 +10446,15 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/whatwg-fetch": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + "license": "MIT" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -11270,9 +10462,8 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -11285,9 +10476,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -11333,9 +10523,8 @@ }, "node_modules/which-collection": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -11348,9 +10537,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -11367,36 +10555,31 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "license": "MIT" }, "node_modules/wordwrapjs": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11412,9 +10595,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11429,9 +10611,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11444,9 +10625,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11456,8 +10636,7 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11470,8 +10649,7 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11481,13 +10659,12 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "license": "ISC" }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, "peer": true, "engines": { @@ -11508,9 +10685,8 @@ }, "node_modules/xml2js": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -11521,9 +10697,8 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0" } @@ -11539,31 +10714,27 @@ }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -11590,8 +10761,7 @@ }, "node_modules/yargs": { "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -11607,17 +10777,15 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -11630,9 +10798,8 @@ }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -11640,26 +10807,23 @@ }, "node_modules/yazl": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3" } }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11672,7 +10836,6 @@ "license": "Apache-2.0", "dependencies": { "@glideapps/ts-necessities": "2.2.3", - "@types/urijs": "^1.19.25", "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", @@ -11689,23 +10852,20 @@ }, "devDependencies": { "@types/browser-or-node": "^1.3.2", + "@types/is-url": "^1.2.32", "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", + "@types/urijs": "^1.19.25", + "@types/wordwrap": "^1.0.3", "typescript": "4.9.5" } }, - "packages/quicktype-core/node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" - }, "packages/quicktype-core/node_modules/pluralize": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -11738,22 +10898,27 @@ }, "packages/quicktype-typescript-input/node_modules/@glideapps/ts-necessities": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.2.tgz", - "integrity": "sha512-tLjfhinr6doUBcWi7BWnkT2zT6G5UhiZftsiIH6xVvykeXE+FU7Wr0MyqwmqideWlDD5rG+VjVLptLviGo04CA==" + "license": "MIT" + }, + "packages/quicktype-typescript-input/node_modules/browser-or-node": { + "version": "1.3.0", + "license": "MIT" }, "packages/quicktype-typescript-input/node_modules/isomorphic-fetch": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "license": "MIT", "dependencies": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" } }, + "packages/quicktype-typescript-input/node_modules/js-base64": { + "version": "2.6.4", + "license": "BSD-3-Clause" + }, "packages/quicktype-typescript-input/node_modules/node-fetch": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "license": "MIT", "dependencies": { "encoding": "^0.1.11", "is-stream": "^1.0.1" @@ -11761,8 +10926,7 @@ }, "packages/quicktype-typescript-input/node_modules/quicktype-core": { "version": "20.0.0", - "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-20.0.0.tgz", - "integrity": "sha512-zuvQAk/i4STnhLC4t3nNWPr6u5ArHBW+TME3jA7YQQMp1UdDsFD+4lzqt49b73aYhhmrk9BlO/fX7PcRR5l6YQ==", + "license": "Apache-2.0", "dependencies": { "@glideapps/ts-necessities": "2.1.2", "@types/urijs": "^1.19.8", @@ -11783,8 +10947,7 @@ }, "packages/quicktype-typescript-input/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11797,8 +10960,7 @@ }, "packages/quicktype-typescript-input/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", "engines": { "node": ">= 6" } @@ -11829,16 +10991,16 @@ } }, "packages/quicktype-vscode/node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -11864,15 +11026,15 @@ } }, "packages/quicktype-vscode/node_modules/@typescript-eslint/parser": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", - "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4" }, "engines": { @@ -11891,89 +11053,14 @@ } } }, - "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "packages/quicktype-vscode/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.7.1", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "packages/quicktype-vscode/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -11984,13 +11071,13 @@ } }, "packages/quicktype-vscode/node_modules/@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -12011,9 +11098,9 @@ } }, "packages/quicktype-vscode/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -12024,13 +11111,13 @@ } }, "packages/quicktype-vscode/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12052,17 +11139,17 @@ } }, "packages/quicktype-vscode/node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", "semver": "^7.6.0" }, "engines": { @@ -12077,12 +11164,12 @@ } }, "packages/quicktype-vscode/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.8.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -12119,9 +11206,8 @@ }, "packages/quicktype-vscode/node_modules/typescript": { "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12140,8861 +11226,5 @@ "unicode-trie": "^0.3.0" } } - }, - "dependencies": { - "@75lb/deep-merge": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", - "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", - "requires": { - "lodash.assignwith": "^4.2.0", - "typical": "^7.1.1" - }, - "dependencies": { - "typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==" - } - } - }, - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "@ardatan/sync-fetch": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", - "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1" - } - }, - "@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "requires": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - } - }, - "@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", - "dev": true - }, - "@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/eslint-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", - "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", - "dev": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/eslint-plugin": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.23.5.tgz", - "integrity": "sha512-03+E/58Hoo/ui69gR+beFdGpplpoVK0BSIdke2iw4/Bz7eGN0ssRenNlnU4nmbkowNQOPCStKSwFr8H6DiY49g==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", - "dev": true, - "requires": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", - "dev": true, - "requires": { - "@babel/types": "^7.24.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", - "dev": true, - "requires": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" - } - }, - "@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", - "dev": true - }, - "@babel/plugin-syntax-flow": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", - "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" - } - }, - "@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/runtime-corejs3": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.1.tgz", - "integrity": "sha512-T9ko/35G+Bkl+win48GduaPlhSlOjjE5s1TeiEcD+QpxlLQnoEfb/nO/T+TQqkm+ipFwORn+rB8w14iJ/uD0bg==", - "dev": true, - "requires": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - } - }, - "@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@es-joy/jsdoccomment": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", - "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", - "dev": true, - "requires": { - "comment-parser": "1.4.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - } - }, - "@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "dev": true, - "optional": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true - }, - "@glideapps/ts-necessities": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", - "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==" - }, - "@graphql-eslint/eslint-plugin": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz", - "integrity": "sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@graphql-tools/code-file-loader": "^7.3.6", - "@graphql-tools/graphql-tag-pluck": "^7.3.6", - "@graphql-tools/utils": "^9.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.4", - "fast-glob": "^3.2.12", - "graphql-config": "^4.4.0", - "graphql-depth-limit": "^1.1.0", - "lodash.lowercase": "^4.3.0", - "tslib": "^2.4.1" - }, - "dependencies": { - "@graphql-tools/code-file-loader": { - "version": "7.3.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", - "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", - "dev": true, - "requires": { - "@graphql-tools/graphql-tag-pluck": "7.5.2", - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - } - }, - "@graphql-tools/graphql-tag-pluck": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", - "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", - "dev": true, - "requires": { - "@babel/parser": "^7.16.8", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dev": true, - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "dev": true, - "requires": {} - }, - "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@mark.probst/typescript-json-schema": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", - "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", - "requires": { - "@types/json-schema": "^7.0.9", - "@types/node": "^16.9.2", - "glob": "^7.1.7", - "path-equal": "^1.1.2", - "safe-stable-stringify": "^2.2.0", - "ts-node": "^10.9.1", - "typescript": "4.9.4", - "yargs": "^17.1.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" - }, - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" - } - } - }, - "@next/eslint-plugin-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", - "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", - "dev": true, - "requires": { - "glob": "7.1.7" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "requires": { - "eslint-scope": "5.1.1" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@peculiar/asn1-schema": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", - "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", - "dev": true, - "requires": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@peculiar/webcrypto": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", - "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.7.8" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true - }, - "@repeaterjs/repeater": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", - "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", - "dev": true - }, - "@rushstack/eslint-patch": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz", - "integrity": "sha512-0HejFckBN2W+ucM6cUOlwsByTKt9/+0tWhqUffNIcHqCXkthY/mZ7AuYPK/2IIaGWhdl0h+tICDO0ssLMd6XMQ==", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "@tsconfig/node18": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-1.0.1.tgz", - "integrity": "sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==", - "dev": true - }, - "@types/browser-or-node": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.2.tgz", - "integrity": "sha512-CkvJrvVMI4ZHbiL+Df22Owzq1IYnHnoSrM8s6Dmy4MRdqvdFi9bHsIvyFrSGJPOxvFI9Y3MqY2gFCqIafJBcfw==", - "dev": true - }, - "@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true - }, - "@types/command-line-usage": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", - "dev": true - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graphql": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.11.8.tgz", - "integrity": "sha512-xGWx4kx9JKlqxDrZA12gw5qi2lvxPNLxnQQcoTXVX83MuGcXcpb7TADatGyGW51GaaXQOQTbjw3x4HuL3ULBaA==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", - "dev": true - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", - "dev": true - }, - "@types/node": { - "version": "18.19.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", - "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", - "requires": { - "undici-types": "~5.26.4" - } - }, - "@types/node-persist": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@types/node-persist/-/node-persist-3.1.8.tgz", - "integrity": "sha512-QLidg6/SadZYPrTKxtxL1A85XBoQlG40bhoMdhu6DH6+eNCMr2j+RGfFZ9I9+IY8W/PDwQonJ+iBWD62jZjMfg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "@types/pako": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.0.tgz", - "integrity": "sha1-6q6DZNG391LiY7w/1o3+yY5hNsU=", - "dev": true - }, - "@types/pluralize": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.30.tgz", - "integrity": "sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA==", - "dev": true - }, - "@types/readable-stream": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.10.tgz", - "integrity": "sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==", - "dev": true - }, - "@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "@types/shelljs": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz", - "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==", - "dev": true, - "requires": { - "@types/glob": "~7.2.0", - "@types/node": "*" - } - }, - "@types/stream-chain": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", - "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stream-json": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.3.tgz", - "integrity": "sha512-Jqsyq5VPOTWorvEmzWhEWH5tJnHA+bB8vt/Zzb11vSDj8esfSHDMj2rbVjP0mfJQzl3YBJSXBBq08iiyaBK3KA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/stream-chain": "*" - } - }, - "@types/unicode-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/unicode-properties/-/unicode-properties-1.3.0.tgz", - "integrity": "sha512-kDVlxpdkCfgvzfXcglkr7j4OSMjCEEo/Jloj4tFuldYZpQ9Uypy7FGXPhNstoj4eGvhddwuu5n0EfI+XdWVoVA==", - "dev": true - }, - "@types/urijs": { - "version": "1.19.25", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", - "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" - }, - "@types/vscode": { - "version": "1.88.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.88.0.tgz", - "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", - "dev": true - }, - "@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.62.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - } - }, - "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - } - }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "@vscode/test-cli": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.6.tgz", - "integrity": "sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==", - "dev": true, - "requires": { - "@types/mocha": "^10.0.2", - "c8": "^9.1.0", - "chokidar": "^3.5.3", - "enhanced-resolve": "^5.15.0", - "glob": "^10.3.10", - "minimatch": "^9.0.3", - "mocha": "^10.2.0", - "supports-color": "^9.4.0", - "yargs": "^17.7.2" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - } - }, - "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - } - } - }, - "@vscode/test-electron": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", - "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.5.2" - } - }, - "@vscode/vsce": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.25.0.tgz", - "integrity": "sha512-VXMCGUaP6wKBadA7vFQdsksxkBAMoh4ecZgXBwauZMASAgnwYesHyLnqIyWYeRwjy2uEpitHvz/1w5ENnR30pg==", - "dev": true, - "requires": { - "azure-devops-node-api": "^12.5.0", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "cockatiel": "^3.1.2", - "commander": "^6.2.1", - "form-data": "^4.0.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "jsonc-parser": "^3.2.0", - "keytar": "^7.7.0", - "leven": "^3.1.0", - "markdown-it": "^12.3.2", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^7.5.2", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.5.0", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@whatwg-node/events": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", - "integrity": "sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==", - "dev": true - }, - "@whatwg-node/fetch": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.8.tgz", - "integrity": "sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.4.0", - "@whatwg-node/node-fetch": "^0.3.6", - "busboy": "^1.6.0", - "urlpattern-polyfill": "^8.0.0", - "web-streams-polyfill": "^3.2.1" - } - }, - "@whatwg-node/node-fetch": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz", - "integrity": "sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==", - "dev": true, - "requires": { - "@whatwg-node/events": "^0.0.3", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "requires": { - "dequal": "^2.0.3" - } - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" - }, - "array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "requires": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - } - }, - "array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", - "dev": true, - "requires": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asn1js": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", - "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", - "dev": true, - "requires": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, - "axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "dev": true - }, - "axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "requires": { - "dequal": "^2.0.3" - } - }, - "azure-devops-node-api": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", - "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", - "dev": true, - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", - "dev": true, - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" - } - }, - "browser-or-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", - "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "c8": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", - "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - } - } - }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001600", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "requires": { - "chalk": "^4.1.2" - } - }, - "chance": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.11.tgz", - "integrity": "sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "optional": true - }, - "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true - }, - "clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "cockatiel": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", - "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==", - "dev": true - }, - "collection-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", - "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - }, - "dependencies": { - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - } - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", - "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", - "requires": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^3.0.0", - "typical": "^7.1.1" - }, - "dependencies": { - "array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==" - }, - "typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==" - } - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "core-js-pure": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", - "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - } - }, - "create-eslint-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/create-eslint-index/-/create-eslint-index-1.0.0.tgz", - "integrity": "sha512-nXvJjnfDytOOaPOonX0h0a1ggMoqrhdekGeZkD6hkcWYvlCWhU719tKFVh8eU04CnMwu3uwe1JjwuUF2C3k2qg==", - "dev": true, - "requires": { - "lodash.get": "^4.3.0" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "requires": { - "node-fetch": "^2.6.12" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "dataloader": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", - "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "optional": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "optional": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true - }, - "detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, - "optional": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "dset": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", - "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.717", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", - "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "optional": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhance-visitors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", - "integrity": "sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==", - "dev": true, - "requires": { - "lodash": "^4.13.1" - } - }, - "enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.23.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", - "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - } - }, - "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.4" - } - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - } - }, - "es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - } - }, - "es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dev": true, - "requires": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "eslint-ast-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", - "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", - "dev": true, - "requires": { - "lodash.get": "^4.4.2", - "lodash.zip": "^4.2.0" - } - }, - "eslint-compat-utils": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", - "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", - "dev": true, - "requires": { - "semver": "^7.5.4" - } - }, - "eslint-config-canonical": { - "version": "41.4.2", - "resolved": "https://registry.npmjs.org/eslint-config-canonical/-/eslint-config-canonical-41.4.2.tgz", - "integrity": "sha512-ayP7OPe7Mh0Vf1K8PXQshekyeM3dNcEVwoJAu5ozrZXftaY36NPaH57Oj1FcmMzr2gpc3WbjQ5frVqxnqjnKMg==", - "dev": true, - "requires": { - "@babel/core": "^7.23.0", - "@babel/eslint-parser": "^7.22.15", - "@babel/eslint-plugin": "^7.22.10", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@graphql-eslint/eslint-plugin": "^3.20.1", - "@next/eslint-plugin-next": "^13.5.4", - "@rushstack/eslint-patch": "^1.5.1", - "@typescript-eslint/eslint-plugin": "^6.7.5", - "@typescript-eslint/parser": "^6.7.5", - "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-ava": "^14.0.0", - "eslint-plugin-canonical": "^4.14.0", - "eslint-plugin-cypress": "^2.15.1", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-fp": "^2.3.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jest": "^27.4.2", - "eslint-plugin-jsdoc": "^46.8.2", - "eslint-plugin-jsonc": "^2.10.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-lodash": "^7.4.0", - "eslint-plugin-mocha": "^10.2.0", - "eslint-plugin-modules-newline": "0.0.6", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-regexp": "^1.15.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-typescript-sort-keys": "^3.0.0", - "eslint-plugin-unicorn": "^48.0.1", - "eslint-plugin-vitest": "^0.3.2", - "eslint-plugin-yml": "^1.10.0", - "eslint-plugin-zod": "^1.4.0", - "prettier": "^3.0.3", - "ramda": "^0.29.1", - "yaml-eslint-parser": "^1.2.2" - }, - "dependencies": { - "eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "requires": {} - }, - "eslint-plugin-canonical": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-4.18.0.tgz", - "integrity": "sha512-0Egc0FKOnCRdu3bFEJhfHkdkusIgW0UxdemukkowZQnQsnf12FHSJ7K26b+tZ5pKB7cTyECSaqvEpoIJfplX4g==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^6.1.0", - "chance": "^1.1.11", - "debug": "^4.3.4", - "eslint-import-resolver-typescript": "^3.5.3", - "eslint-module-utils": "^2.7.4", - "is-get-set-prop": "^1.0.0", - "is-js-type": "^2.0.0", - "is-obj-prop": "^1.0.0", - "is-proto-prop": "^2.0.0", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "recast": "^0.23.2", - "roarr": "^7.14.2", - "ts-unused-exports": "^9.0.3", - "xregexp": "^5.1.1" - } - }, - "eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" - } - }, - "synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", - "dev": true, - "requires": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - } - }, - "eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-ava": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-14.0.0.tgz", - "integrity": "sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw==", - "dev": true, - "requires": { - "enhance-visitors": "^1.0.0", - "eslint-utils": "^3.0.0", - "espree": "^9.0.0", - "espurify": "^2.1.1", - "import-modules": "^2.1.0", - "micro-spelling-correcter": "^1.1.1", - "pkg-dir": "^5.0.0", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "eslint-plugin-canonical": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-3.4.0.tgz", - "integrity": "sha512-akY2RpJD3VC2XXsU/02VsbzkHfybsZTsruOKPI7pJzQ+lZaS3UGM1H0vUKf0itXsbMHHJbIT78hUXU2d2HemZQ==", - "dev": true, - "requires": { - "is-get-set-prop": "^1.0.0", - "is-js-type": "^2.0.0", - "is-obj-prop": "^1.0.0", - "is-proto-prop": "^2.0.0", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "ts-unused-exports": "^9.0.3", - "xregexp": "^5.1.1" - } - }, - "eslint-plugin-cypress": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", - "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", - "dev": true, - "requires": { - "globals": "^13.20.0" - } - }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-plugin-eslint-comments": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", - "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - } - }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dev": true, - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-fp": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-fp/-/eslint-plugin-fp-2.3.0.tgz", - "integrity": "sha512-3n2oHibwoIxAht9/+ZaTldhI6brXORgl8oNXqZd+d9xuAQt2SBJ2/aml0oQRMWvXrgsz2WG6wfC++NjzSG3prA==", - "dev": true, - "requires": { - "create-eslint-index": "^1.0.0", - "eslint-ast-utils": "^1.0.0", - "lodash": "^4.13.1", - "req-all": "^0.1.0" - } - }, - "eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "requires": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.10.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - } - }, - "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "eslint-plugin-jsdoc": { - "version": "46.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", - "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", - "dev": true, - "requires": { - "@es-joy/jsdoccomment": "~0.41.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.5.4", - "spdx-expression-parse": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } - } - }, - "eslint-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", - "dev": true, - "requires": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - } - }, - "eslint-plugin-jsonc": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.14.1.tgz", - "integrity": "sha512-Tei6G4N7pZulP5MHi0EIdtseiCqUPkDMd0O8Zrw4muMIlsjJ5/B9X+U3Pfo6B7l0mTL9LN9FwuWT70dRJ6z7tg==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "eslint-compat-utils": "^0.5.0", - "espree": "^9.6.1", - "graphemer": "^1.4.0", - "jsonc-eslint-parser": "^2.0.4", - "natural-compare": "^1.4.0", - "synckit": "^0.6.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" - }, - "dependencies": { - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - } - } - }, - "eslint-plugin-lodash": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz", - "integrity": "sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A==", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, - "eslint-plugin-mocha": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz", - "integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==", - "dev": true, - "requires": { - "eslint-utils": "^3.0.0", - "globals": "^13.24.0", - "rambda": "^7.4.0" - } - }, - "eslint-plugin-modules-newline": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-modules-newline/-/eslint-plugin-modules-newline-0.0.6.tgz", - "integrity": "sha512-69NpBr68U6pmXL+y+KHl/64PwRarceC3/sCNUVxRbe0gPI32SIw8AtdpkqNiJYCa2yMd4lRrkrnU09Yio7KVzA==", - "dev": true, - "requires": { - "requireindex": "~1.1.0" - } - }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", - "dev": true, - "requires": {} - }, - "eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", - "dev": true, - "requires": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-plugin-regexp": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz", - "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "comment-parser": "^1.1.2", - "grapheme-splitter": "^1.0.4", - "jsdoctypeparser": "^9.0.0", - "refa": "^0.11.0", - "regexp-ast-analysis": "^0.6.0", - "scslre": "^0.2.0" - } - }, - "eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", - "dev": true, - "requires": {} - }, - "eslint-plugin-typescript-sort-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-typescript-sort-keys/-/eslint-plugin-typescript-sort-keys-3.2.0.tgz", - "integrity": "sha512-GutszvriaVtwmn7pQjuj9/9o0iXhD7XZs0/424+zsozdRr/fdg5e8206t478Vnqnqi1GjuxcAolj1kf74KnhPA==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0", - "json-schema": "^0.4.0", - "natural-compare-lite": "^1.4.0" - } - }, - "eslint-plugin-unicorn": { - "version": "48.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz", - "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", - "clean-regexp": "^1.0.0", - "esquery": "^1.5.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.2.1", - "jsesc": "^3.0.2", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.10.0", - "semver": "^7.5.4", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true - } - } - }, - "eslint-plugin-vitest": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.26.tgz", - "integrity": "sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^7.1.1" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" - } - }, - "@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "eslint-plugin-yml": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz", - "integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==", - "dev": true, - "requires": { - "debug": "^4.3.2", - "eslint-compat-utils": "^0.5.0", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "yaml-eslint-parser": "^1.2.1" - } - }, - "eslint-plugin-zod": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-zod/-/eslint-plugin-zod-1.4.0.tgz", - "integrity": "sha512-i9WzQGw2X5fQcuQh33mA8DQjZJM/yuyZvs1Fc5EyTidX7Ed/g832+1FEQ4u5gtXy+jZ+DVsB5+oMHj4tIOfeZg==", - "dev": true, - "requires": {} - }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "espurify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", - "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", - "dev": true - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "exec-sh": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", - "dev": true, - "requires": { - "merge": "^1.1.3" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "optional": true - }, - "extract-files": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", - "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", - "dev": true - }, - "falafel": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", - "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "isarray": "^2.0.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "fast-decode-uri-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fast-printf": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", - "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", - "dev": true, - "requires": { - "boolean": "^3.1.4" - } - }, - "fast-querystring": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", - "dev": true, - "requires": { - "fast-decode-uri-component": "^1.0.1" - } - }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dev": true, - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - } - } - }, - "fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "optional": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "get-set-props": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", - "integrity": "sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "requires": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - } - }, - "get-tsconfig": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", - "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", - "dev": true, - "requires": { - "resolve-pkg-maps": "^1.0.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "graphql": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", - "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", - "requires": { - "iterall": "1.1.3" - } - }, - "graphql-config": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.5.0.tgz", - "integrity": "sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==", - "dev": true, - "requires": { - "@graphql-tools/graphql-file-loader": "^7.3.7", - "@graphql-tools/json-file-loader": "^7.3.7", - "@graphql-tools/load": "^7.5.5", - "@graphql-tools/merge": "^8.2.6", - "@graphql-tools/url-loader": "^7.9.7", - "@graphql-tools/utils": "^9.0.0", - "cosmiconfig": "8.0.0", - "jiti": "1.17.1", - "minimatch": "4.2.3", - "string-env-interpolation": "1.0.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/graphql-file-loader": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.17.tgz", - "integrity": "sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==", - "dev": true, - "requires": { - "@graphql-tools/import": "6.7.18", - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "dependencies": { - "@graphql-tools/import": { - "version": "6.7.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.18.tgz", - "integrity": "sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "resolve-from": "5.0.0", - "tslib": "^2.4.0" - } - } - } - }, - "@graphql-tools/json-file-loader": { - "version": "7.4.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.18.tgz", - "integrity": "sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - } - }, - "@graphql-tools/load": { - "version": "7.8.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.14.tgz", - "integrity": "sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==", - "dev": true, - "requires": { - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "p-limit": "3.1.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "dev": true, - "requires": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - } - } - }, - "@graphql-tools/merge": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", - "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/url-loader": { - "version": "7.17.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz", - "integrity": "sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==", - "dev": true, - "requires": { - "@ardatan/sync-fetch": "^0.0.1", - "@graphql-tools/delegate": "^9.0.31", - "@graphql-tools/executor-graphql-ws": "^0.0.14", - "@graphql-tools/executor-http": "^0.1.7", - "@graphql-tools/executor-legacy-ws": "^0.0.11", - "@graphql-tools/utils": "^9.2.1", - "@graphql-tools/wrap": "^9.4.2", - "@types/ws": "^8.0.0", - "@whatwg-node/fetch": "^0.8.0", - "isomorphic-ws": "^5.0.0", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.11", - "ws": "^8.12.0" - }, - "dependencies": { - "@graphql-tools/delegate": { - "version": "9.0.35", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.35.tgz", - "integrity": "sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==", - "dev": true, - "requires": { - "@graphql-tools/batch-execute": "^8.5.22", - "@graphql-tools/executor": "^0.0.20", - "@graphql-tools/schema": "^9.0.19", - "@graphql-tools/utils": "^9.2.1", - "dataloader": "^2.2.2", - "tslib": "^2.5.0", - "value-or-promise": "^1.0.12" - }, - "dependencies": { - "@graphql-tools/batch-execute": { - "version": "8.5.22", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz", - "integrity": "sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "dataloader": "^2.2.2", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/executor": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.20.tgz", - "integrity": "sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@graphql-typed-document-node/core": "3.2.0", - "@repeaterjs/repeater": "^3.0.4", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "dev": true, - "requires": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - } - } - }, - "@graphql-tools/executor-graphql-ws": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.14.tgz", - "integrity": "sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@repeaterjs/repeater": "3.0.4", - "@types/ws": "^8.0.0", - "graphql-ws": "5.12.1", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.13.0" - } - }, - "@graphql-tools/executor-http": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.1.10.tgz", - "integrity": "sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@repeaterjs/repeater": "^3.0.4", - "@whatwg-node/fetch": "^0.8.1", - "dset": "^3.1.2", - "extract-files": "^11.0.0", - "meros": "^1.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/executor-legacy-ws": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.11.tgz", - "integrity": "sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@types/ws": "^8.0.0", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.13.0" - } - }, - "@graphql-tools/wrap": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.4.2.tgz", - "integrity": "sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==", - "dev": true, - "requires": { - "@graphql-tools/delegate": "^9.0.31", - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "dependencies": { - "@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "dev": true, - "requires": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - } - } - } - } - }, - "@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dev": true, - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - } - }, - "minimatch": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", - "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - } - } - }, - "graphql-depth-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz", - "integrity": "sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==", - "dev": true, - "requires": { - "arrify": "^1.0.1" - } - }, - "graphql-ws": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.12.1.tgz", - "integrity": "sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==", - "dev": true, - "requires": {} - }, - "has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-modules": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", - "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "optional": true - }, - "internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - }, - "dependencies": { - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - } - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "requires": { - "is-typed-array": "^1.1.13" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-get-set-prop": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", - "integrity": "sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==", - "dev": true, - "requires": { - "get-set-props": "^0.1.0", - "lowercase-keys": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-js-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", - "integrity": "sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==", - "dev": true, - "requires": { - "js-types": "^1.0.0" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj-prop": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", - "integrity": "sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w==", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0", - "obj-props": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-proto-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", - "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0", - "proto-props": "^2.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.14" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "dev": true, - "requires": {} - }, - "istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "iterall": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", - "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==" - }, - "iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "requires": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jiti": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.1.tgz", - "integrity": "sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==", - "dev": true - }, - "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", - "integrity": "sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true - }, - "jsdoctypeparser": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", - "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonc-eslint-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", - "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", - "dev": true, - "requires": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" - } - }, - "jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - } - }, - "jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "keytar": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "requires": { - "language-subtag-registry": "^0.3.20" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.assignwith": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "lodash.lowercase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz", - "integrity": "sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "dev": true, - "requires": { - "vlq": "^0.2.2" - } - }, - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" - }, - "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true - } - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "meros": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", - "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", - "dev": true, - "requires": {} - }, - "micro-spelling-correcter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", - "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "optional": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "optional": true - }, - "mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node-abi": { - "version": "3.57.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", - "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", - "dev": true, - "optional": true, - "requires": { - "semver": "^7.3.5" - } - }, - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "dev": true, - "optional": true - }, - "node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-persist": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.1.tgz", - "integrity": "sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==", - "dev": true - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - } - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "obj-props": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.4.0.tgz", - "integrity": "sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - } - }, - "object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - } - }, - "object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "requires": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - } - }, - "object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", - "dev": true, - "requires": { - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - } - } - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "path-equal": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", - "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", - "dev": true, - "requires": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true - } - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" - }, - "possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true - }, - "prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise-timeout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/promise-timeout/-/promise-timeout-1.3.0.tgz", - "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "proto-props": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", - "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true - }, - "pvtsutils": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", - "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", - "dev": true, - "requires": { - "tslib": "^2.6.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", - "dev": true - }, - "qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.6" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quicktype": { - "version": "file:packages/quicktype-vscode", - "requires": { - "@types/mocha": "^10.0.6", - "@types/node": "18.x", - "@types/node-persist": "^3.1.8", - "@types/readable-stream": "^4.0.10", - "@types/vscode": "^1.87.0", - "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.7.0", - "@vscode/test-cli": "^0.0.6", - "@vscode/test-electron": "^2.3.9", - "@vscode/vsce": "^2.25.0", - "eslint": "^8.56.0", - "node-persist": "^4.0.1", - "quicktype-core": "file:../quicktype-core", - "quicktype-typescript-input": "file:../quicktype-typescript-input", - "typescript": "^5.3.3", - "unicode-properties": "github:quicktype/unicode-properties#dist" - }, - "dependencies": { - "@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/parser": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", - "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", - "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" - } - }, - "@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.7.1", - "eslint-visitor-keys": "^3.4.3" - } - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "semver": "^7.6.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.6.0", - "eslint-visitor-keys": "^3.4.3" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true - }, - "unicode-properties": { - "version": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", - "dev": true, - "from": "unicode-properties@github:quicktype/unicode-properties#dist", - "requires": { - "brfs": "^1.4.0", - "unicode-trie": "^0.3.0" - } - } - } - }, - "quicktype-core": { - "version": "file:packages/quicktype-core", - "requires": { - "@glideapps/ts-necessities": "2.2.3", - "@types/browser-or-node": "^1.3.2", - "@types/node": "18.19.31", - "@types/pako": "^1.0.0", - "@types/pluralize": "0.0.30", - "@types/readable-stream": "4.0.10", - "@types/unicode-properties": "^1.3.0", - "@types/urijs": "^1.19.25", - "browser-or-node": "^3.0.0", - "collection-utils": "^1.0.1", - "cross-fetch": "^4.0.0", - "is-url": "^1.2.4", - "js-base64": "^3.7.7", - "lodash": "^4.17.21", - "pako": "^1.0.6", - "pluralize": "^8.0.0", - "readable-stream": "4.5.2", - "typescript": "4.9.5", - "unicode-properties": "^1.4.1", - "urijs": "^1.19.1", - "wordwrap": "^1.0.0", - "yaml": "^2.4.1" - }, - "dependencies": { - "js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" - } - } - }, - "quicktype-graphql-input": { - "version": "file:packages/quicktype-graphql-input", - "requires": { - "@types/graphql": "^0.11.7", - "@types/node": "18.19.31", - "collection-utils": "^1.0.1", - "graphql": "^0.11.7", - "quicktype-core": "file:../quicktype-core", - "typescript": "4.9.5" - } - }, - "quicktype-typescript-input": { - "version": "file:packages/quicktype-typescript-input", - "requires": { - "@mark.probst/typescript-json-schema": "0.55.0", - "@types/node": "18.19.31", - "quicktype-core": "file:../quicktype-core", - "typescript": "4.9.5" - }, - "dependencies": { - "@glideapps/ts-necessities": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.2.tgz", - "integrity": "sha512-tLjfhinr6doUBcWi7BWnkT2zT6G5UhiZftsiIH6xVvykeXE+FU7Wr0MyqwmqideWlDD5rG+VjVLptLviGo04CA==" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "quicktype-core": { - "version": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-20.0.0.tgz", - "integrity": "sha512-zuvQAk/i4STnhLC4t3nNWPr6u5ArHBW+TME3jA7YQQMp1UdDsFD+4lzqt49b73aYhhmrk9BlO/fX7PcRR5l6YQ==", - "requires": { - "@glideapps/ts-necessities": "2.1.2", - "@types/urijs": "^1.19.8", - "browser-or-node": "^1.2.1", - "collection-utils": "^1.0.1", - "is-url": "^1.2.4", - "isomorphic-fetch": "^2.2.1", - "js-base64": "^2.4.3", - "lodash": "^4.17.21", - "pako": "^1.0.6", - "pluralize": "^7.0.0", - "readable-stream": "2.3.7", - "unicode-properties": "^1.4.1", - "urijs": "^1.19.1", - "wordwrap": "^1.0.0", - "yaml": "^1.5.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - } - } - }, - "quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - } - }, - "rambda": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", - "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", - "dev": true - }, - "ramda": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", - "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "optional": true - } - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "recast": { - "version": "0.23.6", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz", - "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==", - "dev": true, - "requires": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "refa": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz", - "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.0" - } - }, - "reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - } - }, - "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "regexp-ast-analysis": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz", - "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.0", - "refa": "^0.11.0" - } - }, - "regexp-tree": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "requires": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regjsparser": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", - "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "req-all": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/req-all/-/req-all-0.1.0.tgz", - "integrity": "sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", - "dev": true - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "roarr": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.1.tgz", - "integrity": "sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==", - "dev": true, - "requires": { - "fast-printf": "^1.6.9", - "safe-stable-stringify": "^2.4.3", - "semver-compare": "^1.0.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - } - }, - "safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true - }, - "scslre": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz", - "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.0", - "refa": "^0.11.0", - "regexp-ast-analysis": "^0.6.0" - } - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, - "set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - } - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "optional": true - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "optional": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - }, - "dependencies": { - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - } - } - }, - "spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true - }, - "static-eval": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", - "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", - "dev": true, - "requires": { - "escodegen": "^2.1.0" - }, - "dependencies": { - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - } - } - } - }, - "static-module": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", - "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", - "dev": true, - "requires": { - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "~1.9.0", - "falafel": "^2.1.0", - "has": "^1.0.1", - "magic-string": "^0.22.4", - "merge-source-map": "1.0.4", - "object-inspect": "~1.4.0", - "quote-stream": "~1.0.2", - "readable-stream": "~2.3.3", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.0", - "through2": "~2.0.3" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "object-inspect": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "requires": { - "internal-slot": "^1.0.4" - } - }, - "stream-chain": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" - }, - "stream-json": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", - "requires": { - "stream-chain": "^2.2.5" - } - }, - "stream-read-all": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", - "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==" - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-env-interpolation": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", - "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", - "dev": true - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "string-to-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", - "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", - "requires": { - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - } - }, - "string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "synckit": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.6.2.tgz", - "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "table-layout": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", - "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", - "requires": { - "@75lb/deep-merge": "^1.1.1", - "array-back": "^6.2.2", - "command-line-args": "^5.2.1", - "command-line-usage": "^7.0.0", - "stream-read-all": "^3.0.1", - "typical": "^7.1.1", - "wordwrapjs": "^5.1.0" - }, - "dependencies": { - "array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==" - }, - "typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==" - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "optional": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "tiny-inflate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", - "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" - }, - "tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true - }, - "tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "requires": {} - }, - "ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "ts-unused-exports": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ts-unused-exports/-/ts-unused-exports-9.0.5.tgz", - "integrity": "sha512-1XAXaH2i4Al/aZO06pWDn9MUgTN0KQi+fvWudiWfHUTHAav45gzrx7Xq6JAsu6+LoMlVoyGvNvZSPW3KTjDncA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "tsconfig-paths": "^3.9.0" - } - }, - "tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - } - }, - "typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - } - }, - "typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - } - }, - "typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - } - }, - "typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", - "dev": true, - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, - "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "requires": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - }, - "dependencies": { - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" - }, - "unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - } - } - }, - "unicode-trie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", - "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", - "dev": true, - "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - }, - "dependencies": { - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - } - } - }, - "unixify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", - "dev": true, - "requires": { - "normalize-path": "^2.1.1" - } - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "urlpattern-polyfill": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - }, - "dependencies": { - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - } - } - }, - "value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", - "dev": true - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "vscode-json-languageservice": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", - "dev": true, - "requires": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" - } - }, - "vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true - }, - "vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true - }, - "vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true - }, - "vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true - }, - "watch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", - "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", - "dev": true, - "requires": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - } - }, - "web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true - }, - "webcrypto-core": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", - "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "requires": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wordwrapjs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==" - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "dev": true, - "peer": true, - "requires": {} - }, - "xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xregexp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", - "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", - "dev": true, - "requires": { - "@babel/runtime-corejs3": "^7.16.5" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==" - }, - "yaml-eslint-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", - "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.0.0", - "lodash": "^4.17.21", - "yaml": "^2.0.0" - } - }, - "yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/package.json b/package.json index 150332161..4b723ca95 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", + "@types/wordwrap": "^1.0.3", "@typescript-eslint/eslint-plugin": "^6.3.0", "@typescript-eslint/parser": "^6.3.0", "ajv": "^5.5.2", diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index cfe9dc95d..580100e8d 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -12,11 +12,10 @@ }, "dependencies": { "@glideapps/ts-necessities": "2.2.3", - "@types/urijs": "^1.19.25", "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", - "is-url": "^1.2.4", "cross-fetch": "^4.0.0", + "is-url": "^1.2.4", "js-base64": "^3.7.7", "lodash": "^4.17.21", "pako": "^1.0.6", @@ -29,11 +28,14 @@ }, "devDependencies": { "@types/browser-or-node": "^1.3.2", + "@types/is-url": "^1.2.32", "@types/node": "18.19.31", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", + "@types/urijs": "^1.19.25", + "@types/wordwrap": "^1.0.3", "typescript": "4.9.5" }, "files": [ diff --git a/packages/quicktype-core/src/Annotation.ts b/packages/quicktype-core/src/Annotation.ts index 8a912f305..1b3a937bf 100644 --- a/packages/quicktype-core/src/Annotation.ts +++ b/packages/quicktype-core/src/Annotation.ts @@ -1,7 +1,8 @@ +// eslint-disable-next-line @typescript-eslint/no-extraneous-class export class AnnotationData {} export class IssueAnnotationData extends AnnotationData { - constructor(readonly message: string) { + public constructor(public readonly message: string) { super(); } } diff --git a/packages/quicktype-core/src/ConvenienceRenderer.ts b/packages/quicktype-core/src/ConvenienceRenderer.ts index ec80df6f5..2c9c6ff42 100644 --- a/packages/quicktype-core/src/ConvenienceRenderer.ts +++ b/packages/quicktype-core/src/ConvenienceRenderer.ts @@ -1,32 +1,41 @@ import { - setUnion, - setFilter, iterableEnumerate, iterableSome, mapFilter, - mapSortBy, mapFilterMap, - mapSome + mapSome, + mapSortBy, + setFilter, + setUnion } from "collection-utils"; +import _wordwrap from "wordwrap"; -import { Type, ClassType, EnumType, UnionType, TypeKind, ClassProperty, MapType, ObjectType } from "./Type"; -import { separateNamedTypes, nullableFromUnion, matchTypeExhaustive, isNamedType } from "./TypeUtils"; -import { Namespace, Name, Namer, FixedName, SimpleName, DependencyName, keywordNamespace } from "./Naming"; -import { Renderer, BlankLineConfig, RenderContext, ForEachPosition } from "./Renderer"; -import { defined, panic, nonNull, assert } from "./support/Support"; +import { enumCaseNames, getAccessorName, objectPropertyNames, unionMemberName } from "./attributes/AccessorNames"; +import { descriptionTypeAttributeKind, propertyDescriptionsTypeAttributeKind } from "./attributes/Description"; +import { TypeAttributeKind } from "./attributes/TypeAttributes"; +import { type Declaration, type DeclarationIR, cycleBreakerTypesForGraph, declarationsForGraph } from "./DeclarationIR"; +import { DependencyName, FixedName, type Name, type Namer, Namespace, SimpleName, keywordNamespace } from "./Naming"; +import { type BlankLineConfig, type ForEachPosition, type RenderContext, Renderer } from "./Renderer"; +import { type Sourcelike, serializeRenderResult, sourcelikeToSource } from "./Source"; +import { type Comment, type CommentOptions, isStringComment } from "./support/Comments"; import { trimEnd } from "./support/Strings"; -import { Sourcelike, sourcelikeToSource, serializeRenderResult } from "./Source"; - -import { declarationsForGraph, DeclarationIR, cycleBreakerTypesForGraph, Declaration } from "./DeclarationIR"; +import { assert, defined, nonNull, panic } from "./support/Support"; +import { type TargetLanguage } from "./TargetLanguage"; +import { type Transformation, followTargetType, transformationForType } from "./Transformers"; +import { + type ClassProperty, + ClassType, + EnumType, + MapType, + ObjectType, + type Type, + type TypeKind, + UnionType +} from "./Type"; import { TypeAttributeStoreView } from "./TypeGraph"; -import { TypeAttributeKind } from "./attributes/TypeAttributes"; -import { descriptionTypeAttributeKind, propertyDescriptionsTypeAttributeKind } from "./attributes/Description"; -import { enumCaseNames, objectPropertyNames, unionMemberName, getAccessorName } from "./attributes/AccessorNames"; -import { transformationForType, followTargetType, Transformation } from "./Transformers"; -import { TargetLanguage } from "./TargetLanguage"; -import { type Comment, isStringComment, type CommentOptions } from "./support/Comments"; +import { isNamedType, matchTypeExhaustive, nullableFromUnion, separateNamedTypes } from "./TypeUtils"; -const wordWrap: (s: string) => string = require("wordwrap")(90); +const wordWrap: (s: string) => string = _wordwrap(90); export const topLevelNameOrder = 1; @@ -50,7 +59,10 @@ function splitDescription(descriptions: Iterable | undefined): string[] .map(l => l.trim()); } -export type ForbiddenWordsInfo = { names: (Name | string)[]; includeGlobalForbidden: boolean }; +export interface ForbiddenWordsInfo { + includeGlobalForbidden: boolean; + names: Array; +} const assignedNameAttributeKind = new TypeAttributeKind("assignedName"); const assignedPropertyNamesAttributeKind = new TypeAttributeKind>("assignedPropertyNames"); @@ -59,37 +71,54 @@ const assignedCaseNamesAttributeKind = new TypeAttributeKind | undefined; + private _globalNamespace: Namespace | undefined; + private _nameStoreView: TypeAttributeStoreView | undefined; + private _propertyNamesStoreView: TypeAttributeStoreView> | undefined; + private _memberNamesStoreView: TypeAttributeStoreView> | undefined; + private _caseNamesStoreView: TypeAttributeStoreView> | undefined; + private _namesForTransformations: Map | undefined; private _namedTypeNamer: Namer | undefined; - // @ts-ignore: FIXME: Make this `Namer | undefined` + + // @ts-expect-error: FIXME: Make this `Namer | undefined` private _unionMemberNamer: Namer | null; - // @ts-ignore: FIXME: Make this `Namer | undefined` + + // @ts-expect-error: FIXME: Make this `Namer | undefined` private _enumCaseNamer: Namer | null; private _declarationIR: DeclarationIR | undefined; - private _namedTypes: ReadonlyArray | undefined; + + private _namedTypes: readonly Type[] | undefined; + private _namedObjects: Set | undefined; + private _namedEnums: Set | undefined; + private _namedUnions: Set | undefined; + private _haveUnions: boolean | undefined; + private _haveMaps: boolean | undefined; + private _haveOptionalProperties: boolean | undefined; + private _cycleBreakerTypes?: Set | undefined; private _alphabetizeProperties = false; - constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { + public constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { super(targetLanguage, renderContext); } - get topLevels(): ReadonlyMap { + public get topLevels(): ReadonlyMap { return this.typeGraph.topLevels; } @@ -148,6 +177,7 @@ export abstract class ConvenienceRenderer extends Renderer { if (isNamedType(type)) { return type; } + return undefined; } @@ -218,18 +248,22 @@ export abstract class ConvenienceRenderer extends Renderer { for (const [name, t] of this.topLevels) { this.nameStoreView.setForTopLevel(name, this.addNameForTopLevel(t, name)); } + for (const o of objects) { const name = this.addNameForNamedType(o); this.addPropertyNames(o, name); } + for (const e of enums) { const name = this.addNameForNamedType(e); this.addEnumCaseNames(e, name); } + for (const u of namedUnions) { const name = this.addNameForNamedType(u); this.addUnionMemberNames(u, name); } + for (const t of this.typeGraph.allTypesUnordered()) { this.addNameForTransformation(t); } @@ -302,6 +336,7 @@ export abstract class ConvenienceRenderer extends Renderer { if (name === undefined) { return panic("No name for transformation"); } + return name; } @@ -334,15 +369,18 @@ export abstract class ConvenienceRenderer extends Renderer { forbiddenNames.push(nameOrString); } } + let namespace = defined(this._otherForbiddenNamespaces).get(namespaceName); if (forbiddenStrings.length > 0 && namespace === undefined) { namespace = keywordNamespace(namespaceName, forbiddenStrings); this._otherForbiddenNamespaces = defined(this._otherForbiddenNamespaces).set(namespaceName, namespace); } + let forbiddenNamespaces = new Set(); if (info.includeGlobalForbidden) { forbiddenNamespaces = forbiddenNamespaces.add(defined(this._globalForbiddenNamespace)); } + if (namespace !== undefined) { forbiddenNamespaces = forbiddenNamespaces.add(namespace); } @@ -401,14 +439,17 @@ export abstract class ConvenienceRenderer extends Renderer { } else { name = this.makeNameForProperty(o, className, p, jsonName, assignedName); } + if (name === undefined) return undefined; if (ns === undefined) { ns = new Namespace(o.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames); } + ns.add(name); for (const depName of this.makePropertyDependencyNames(o, className, p, jsonName, name)) { ns.add(depName); } + return name; }); defined(this._propertyNamesStoreView).set(o, names); @@ -419,6 +460,7 @@ export abstract class ConvenienceRenderer extends Renderer { if (isFixed) { return new FixedName(defined(assignedName)); } + return new DependencyName(nonNull(this._unionMemberNamer), unionMemberNameOrder, lookup => { if (assignedName !== undefined) return assignedName; return this.proposeUnionMemberName(u, unionName, t, lookup); @@ -440,11 +482,13 @@ export abstract class ConvenienceRenderer extends Renderer { } else { ns = new Namespace(u.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames); } + let names = new Map(); for (const t of u.members) { const name = this.makeNameForUnionMember(u, unionName, followTargetType(t)); names.set(t, ns.add(name)); } + defined(this._memberNamesStoreView).set(u, names); } @@ -477,6 +521,7 @@ export abstract class ConvenienceRenderer extends Renderer { } else { ns = new Namespace(e.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames); } + let names = new Map(); const accessorNames = enumCaseNames(e, this.targetLanguage.name); for (const caseName of e.cases) { @@ -487,8 +532,10 @@ export abstract class ConvenienceRenderer extends Renderer { } else { name = this.makeNameForEnumCase(e, enumName, caseName, assignedName); } + names.set(caseName, ns.add(name)); } + defined(this._caseNamesStoreView).set(e, names); } @@ -503,6 +550,7 @@ export abstract class ConvenienceRenderer extends Renderer { const sortedMap = mapSortBy(filteredMap, (_, n) => defined(names.get(defined(propertyNameds.get(n))))); return new Set(sortedMap.values()); } + return t.getChildren(); } @@ -609,6 +657,7 @@ export abstract class ConvenienceRenderer extends Renderer { s => this.canBreakCycles(s) ); } + return this._cycleBreakerTypes.has(t); } @@ -623,6 +672,7 @@ export abstract class ConvenienceRenderer extends Renderer { } else { topLevels = this.topLevels; } + return this.forEachWithBlankLines(topLevels, blankLocations, (t, name, pos) => f(t, this.nameStoreView.getForTopLevel(name), pos) ); @@ -631,7 +681,7 @@ export abstract class ConvenienceRenderer extends Renderer { protected forEachDeclaration( blankLocations: BlankLineConfig, f: (decl: Declaration, position: ForEachPosition) => void - ) { + ): void { this.forEachWithBlankLines( iterableEnumerate(defined(this._declarationIR).declarations), blankLocations, @@ -639,7 +689,7 @@ export abstract class ConvenienceRenderer extends Renderer { ); } - setAlphabetizeProperties(value: boolean): void { + public setAlphabetizeProperties(value: boolean): void { this._alphabetizeProperties = value; } @@ -696,10 +746,11 @@ export abstract class ConvenienceRenderer extends Renderer { sortOrder: ((n: Name, t: Type) => string) | null, f: (name: Name, t: Type, position: ForEachPosition) => void ): void { - const iterateMembers = members === null ? u.members : members; + const iterateMembers = members ?? u.members; if (sortOrder === null) { - sortOrder = n => defined(this.names.get(n)); + sortOrder = (n): string => defined(this.names.get(n)); } + const memberNames = mapFilter(defined(this._memberNamesStoreView).get(u), (_, t) => iterateMembers.has(t)); const sortedMemberNames = mapSortBy(memberNames, sortOrder); this.forEachWithBlankLines(sortedMemberNames, blankLocations, f); @@ -724,7 +775,7 @@ export abstract class ConvenienceRenderer extends Renderer { protected forEachSpecificNamedType( blankLocations: BlankLineConfig, - types: Iterable<[any, T]>, + types: Iterable<[T, T]>, f: (t: T, name: Name, position: ForEachPosition) => void ): void { this.forEachWithBlankLines(types, blankLocations, (t, _, pos) => f(t, this.nameForNamedType(t), pos)); @@ -737,7 +788,7 @@ export abstract class ConvenienceRenderer extends Renderer { | ((o: ObjectType, objectName: Name, position: ForEachPosition) => void) ): void { // FIXME: This is ugly. - this.forEachSpecificNamedType(blankLocations, defined(this._namedObjects).entries(), f as any); + this.forEachSpecificNamedType(blankLocations, defined(this._namedObjects).entries(), f); } protected forEachEnum( @@ -766,6 +817,7 @@ export abstract class ConvenienceRenderer extends Renderer { firstUnionByValue.set(v, u); } } + this.forEachWithBlankLines(firstUnionByValue, blankLocations, f); } @@ -782,7 +834,7 @@ export abstract class ConvenienceRenderer extends Renderer { if (t instanceof ObjectType) { // FIXME: This is ugly. We can't runtime check that the function // takes full object types if we have them. - (objectFunc as any)(t, name, pos); + objectFunc(t, name, pos); } else if (t instanceof EnumType) { enumFunc(t, name, pos); } else if (t instanceof UnionType) { @@ -833,6 +885,7 @@ export abstract class ConvenienceRenderer extends Renderer { if (beforeComment !== undefined) { this.emitLine(beforeComment); } + let first = true; for (const line of lines) { let start = first ? firstLineStart : lineStart; @@ -848,6 +901,7 @@ export abstract class ConvenienceRenderer extends Renderer { this.emitLine(start, line); } } + if (afterComment !== undefined) { this.emitLine(afterComment); } @@ -868,7 +922,7 @@ export abstract class ConvenienceRenderer extends Renderer { makePropertyRow: (name: Name, jsonName: string, p: ClassProperty) => Sourcelike[] ): void { let table: Sourcelike[][] = []; - const emitTable = () => { + const emitTable = (): void => { if (table.length === 0) return; this.emitTable(table); table = []; @@ -880,6 +934,7 @@ export abstract class ConvenienceRenderer extends Renderer { emitTable(); this.emitDescription(description); } + table.push(makePropertyRow(name, jsonName, p)); }); emitTable(); @@ -888,12 +943,13 @@ export abstract class ConvenienceRenderer extends Renderer { private processGraph(): void { this._declarationIR = declarationsForGraph( this.typeGraph, - this.needsTypeDeclarationBeforeUse ? t => this.canBeForwardDeclared(t) : undefined, + this.needsTypeDeclarationBeforeUse ? (t): boolean => this.canBeForwardDeclared(t) : undefined, t => this.childrenOfType(t), t => { if (t instanceof UnionType) { return this.unionNeedsName(t); } + return isNamedType(t); } ); @@ -920,11 +976,12 @@ export abstract class ConvenienceRenderer extends Renderer { const processed = new Set(); const queue = Array.from(this.typeGraph.topLevels.values()); - function visit(t: Type) { + function visit(t: Type): void { if (visitedTypes.has(t)) return; for (const c of t.getChildren()) { queue.push(c); } + visitedTypes.add(t); processed.add(process(t)); } @@ -934,6 +991,7 @@ export abstract class ConvenienceRenderer extends Renderer { if (maybeType === undefined) { break; } + visit(maybeType); } diff --git a/packages/quicktype-core/src/CycleBreaker.ts b/packages/quicktype-core/src/CycleBreaker.ts index d3eba6321..9497d9140 100644 --- a/packages/quicktype-core/src/CycleBreaker.ts +++ b/packages/quicktype-core/src/CycleBreaker.ts @@ -1,18 +1,22 @@ import { assert, panic } from "./support/Support"; -export function breakCycles(outEdges: number[][], chooseBreaker: (cycle: number[]) => [number, T]): [number, T][] { +export function breakCycles( + outEdges: number[][], + chooseBreaker: (cycle: number[]) => [number, T] +): Array<[number, T]> { const numNodes = outEdges.length; const inEdges: number[][] = []; const inDegree: number[] = []; const outDegree: number[] = []; const done: boolean[] = []; - const results: [number, T][] = []; + const results: Array<[number, T]> = []; for (let i = 0; i < numNodes; i++) { inEdges.push([]); inDegree.push(0); outDegree.push(outEdges[i].length); done.push(false); } + for (let i = 0; i < numNodes; i++) { for (const n of outEdges[i]) { inEdges[n].push(i); @@ -54,6 +58,7 @@ export function breakCycles(outEdges: number[][], chooseBreaker: (cycle: numb done[i] = true; continue; } + assert(inDegree[i] === 0 || outDegree[i] === 0, "Can't have nodes in the worklist with in and out edges"); removeNode(i); @@ -82,6 +87,7 @@ export function breakCycles(outEdges: number[][], chooseBreaker: (cycle: numb if (maybeEdge === undefined) { return panic("Presumed cycle is not a cycle"); } + const maybeFirst = path.indexOf(maybeEdge); if (maybeFirst === undefined) { // No cycle yet, continue @@ -93,11 +99,12 @@ export function breakCycles(outEdges: number[][], chooseBreaker: (cycle: numb // We found a cycle - break it const cycle = path.slice(maybeFirst); const [breakNode, info] = chooseBreaker(cycle); - assert(cycle.indexOf(breakNode) >= 0, "Breaker chose an invalid node"); + assert(cycle.includes(breakNode), "Breaker chose an invalid node"); removeNode(breakNode); results.push([breakNode, info]); break; } + continue; } diff --git a/packages/quicktype-core/src/DateTime.ts b/packages/quicktype-core/src/DateTime.ts index 20d0340b8..9f2bc4ae8 100644 --- a/packages/quicktype-core/src/DateTime.ts +++ b/packages/quicktype-core/src/DateTime.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ // https://github.com/epoberezkin/ajv/blob/4d76c6fb813b136b6ec4fe74990bc97233d75dea/lib/compile/formats.js /* @@ -29,9 +30,9 @@ const DAYS = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; const TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i; export interface DateTimeRecognizer { - isDate(s: string): boolean; - isTime(s: string): boolean; - isDateTime(s: string): boolean; + isDate: (s: string) => boolean; + isDateTime: (s: string) => boolean; + isTime: (s: string) => boolean; } const DATE_TIME_SEPARATOR = /t|\s/i; @@ -39,7 +40,7 @@ const DATE_TIME_SEPARATOR = /t|\s/i; export class DefaultDateTimeRecognizer implements DateTimeRecognizer { isDate(str: string) { // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 - const matches = str.match(DATE); + const matches = DATE.exec(str); if (matches === null) return false; const month = +matches[2]; @@ -48,7 +49,7 @@ export class DefaultDateTimeRecognizer implements DateTimeRecognizer { } isTime(str: string): boolean { - const matches = str.match(TIME); + const matches = TIME.exec(str); if (matches === null) return false; const hour = +matches[1]; diff --git a/packages/quicktype-core/src/DeclarationIR.ts b/packages/quicktype-core/src/DeclarationIR.ts index 8b36dbd51..f3f15ce0f 100644 --- a/packages/quicktype-core/src/DeclarationIR.ts +++ b/packages/quicktype-core/src/DeclarationIR.ts @@ -1,10 +1,10 @@ -import { setUnionInto, setFilter, iterableFirst, setSubtract, setIntersect } from "collection-utils"; +import { iterableFirst, setFilter, setIntersect, setSubtract, setUnionInto } from "collection-utils"; -import { TypeGraph } from "./TypeGraph"; -import { Type } from "./Type"; -import { panic, defined, assert } from "./support/Support"; import { Graph } from "./Graph"; import { messageError } from "./Messages"; +import { assert, defined, panic } from "./support/Support"; +import { type Type } from "./Type"; +import { type TypeGraph } from "./TypeGraph"; export type DeclarationKind = "forward" | "define"; @@ -14,28 +14,29 @@ export interface Declaration { } export class DeclarationIR { - readonly declarations: ReadonlyArray; + public readonly declarations: readonly Declaration[]; - constructor(declarations: Iterable, readonly forwardedTypes: Set) { + public constructor( + declarations: Iterable, + public readonly forwardedTypes: Set + ) { this.declarations = Array.from(declarations); } } -function findBreaker( - t: Type, - path: ReadonlyArray, - canBreak: ((t: Type) => boolean) | undefined -): Type | undefined { +function findBreaker(t: Type, path: readonly Type[], canBreak: ((t: Type) => boolean) | undefined): Type | undefined { const index = path.indexOf(t); if (index < 0) return undefined; if (canBreak === undefined) { return path[index]; } + const potentialBreakers = path.slice(0, index + 1).reverse(); const maybeBreaker = potentialBreakers.find(canBreak); if (maybeBreaker === undefined) { return panic("Found a cycle that cannot be broken"); } + return maybeBreaker; } @@ -147,6 +148,7 @@ export function declarationsForGraph( for (const t of declarationNeeded) { declarations.push({ kind: "define", type: t }); } + return; } @@ -160,9 +162,11 @@ export function declarationsForGraph( if (forwardDeclarable.size === 0) { return messageError("IRNoForwardDeclarableTypeInCycle", {}); } + for (const t of forwardDeclarable) { declarations.push({ kind: "forward", type: t }); } + setUnionInto(forwardedTypes, forwardDeclarable); const rest = setSubtract(component, forwardDeclarable); const restGraph = new Graph(rest, true, t => setIntersect(childrenOfType(t), rest)); @@ -170,6 +174,7 @@ export function declarationsForGraph( for (const t of forwardDeclarable) { declarations.push({ kind: "define", type: t }); } + return; } diff --git a/packages/quicktype-core/src/GatherNames.ts b/packages/quicktype-core/src/GatherNames.ts index 40d1f4b05..4d8142d07 100644 --- a/packages/quicktype-core/src/GatherNames.ts +++ b/packages/quicktype-core/src/GatherNames.ts @@ -1,38 +1,41 @@ +import { setMap, setSortBy, setUnion } from "collection-utils"; import * as pluralize from "pluralize"; -import { setUnion, setMap, setSortBy } from "collection-utils"; -import { TypeGraph } from "./TypeGraph"; -import { Type, ObjectType } from "./Type"; -import { matchCompoundType, nullableFromUnion } from "./TypeUtils"; -import { TypeNames, namesTypeAttributeKind, TooManyTypeNames, tooManyNamesThreshold } from "./attributes/TypeNames"; -import { defined, panic, assert } from "./support/Support"; +import { TooManyTypeNames, TypeNames, namesTypeAttributeKind, tooManyNamesThreshold } from "./attributes/TypeNames"; +import { assert, defined, panic } from "./support/Support"; import { transformationForType } from "./Transformers"; +import { ObjectType, type Type } from "./Type"; +import { type TypeGraph } from "./TypeGraph"; +import { matchCompoundType, nullableFromUnion } from "./TypeUtils"; class UniqueQueue { private readonly _present = new Set(); - private _queue: (T | undefined)[] = []; + + private _queue: Array = []; + private _front = 0; - get size(): number { + public get size(): number { return this._queue.length - this._front; } - get isEmpty(): boolean { + public get isEmpty(): boolean { return this.size <= 0; } - push(v: T): void { + public push(v: T): void { if (this._present.has(v)) return; this._queue.push(v); this._present.add(v); } - unshift(): T { + public unshift(): T { assert(!this.isEmpty, "Trying to unshift from an empty queue"); const v = this._queue[this._front]; if (v === undefined) { return panic("Value should have been present in queue"); } + this._queue[this._front] = undefined; this._front += 1; this._present.delete(v); @@ -99,7 +102,7 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: // null means there are too many const namesForType = new Map | null>(); - function addNames(t: Type, names: ReadonlySet | null) { + function addNames(t: Type, names: ReadonlySet | null): void { // Always use the type's given names if it has some if (t.hasNames) { const originalNames = t.getNames(); @@ -123,6 +126,7 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: if (newNames !== null && newNames.size >= tooManyNamesThreshold) { newNames = null; } + namesForType.set(t, newNames); const transformation = transformationForType(t); @@ -204,14 +208,16 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: if (existing === undefined) { existing = new Set(); } + existing = setUnion(existing, alternatives); if (existing.size < tooManyNamesThreshold) { return existing; } + return null; } - function processType(ancestor: Type | undefined, t: Type, alternativeSuffix: string | undefined) { + function processType(ancestor: Type | undefined, t: Type, alternativeSuffix: string | undefined): void { const names = defined(namesForType.get(t)); let processedEntry = pairsProcessed.get(ancestor); @@ -263,6 +269,7 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: if (ancestorAlternatives !== undefined) { ancestorAlternativesForType.set(t, ancestorAlternatives); } + if (directAlternatives !== undefined) { directAlternativesForType.set(t, directAlternatives); } @@ -310,6 +317,7 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: directAlternativesForType.set(t, null); continue; } + let alternatives = directAlternativesForType.get(t); if (alternatives === null) continue; if (alternatives === undefined) { @@ -343,6 +351,7 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: } else { alternatives = new Set(); } + if (ancestorAlternatives !== null && ancestorAlternatives !== undefined) { alternatives = setUnion(alternatives, ancestorAlternatives); } diff --git a/packages/quicktype-core/src/Graph.ts b/packages/quicktype-core/src/Graph.ts index fcff0a56a..df186ce9c 100644 --- a/packages/quicktype-core/src/Graph.ts +++ b/packages/quicktype-core/src/Graph.ts @@ -1,6 +1,6 @@ import { setMap } from "collection-utils"; -import { defined, repeated, assert, repeatedCall } from "./support/Support"; +import { assert, defined, repeated, repeatedCall } from "./support/Support"; function countComponentGraphNodes(components: number[][]): number { if (components.length === 0) return 0; @@ -64,6 +64,7 @@ function stronglyConnectedComponents(successors: number[][]): number[][] { onStack[w] = false; scc.push(w); } while (w !== v); + sccs.push(scc); } } @@ -92,6 +93,7 @@ function buildComponentOfNodeMap(successors: number[][], components: number[][]) componentOfNode[n] = c; } } + return componentOfNode; } @@ -166,11 +168,17 @@ function findRoots(successors: number[][]): number[] { } export class Graph { - private readonly _nodes: ReadonlyArray; + private readonly _nodes: readonly T[]; + private readonly _indexByNode: ReadonlyMap; + private readonly _successors: number[][]; - constructor(nodes: Iterable, invertDirection: boolean, edges: number[][] | ((node: T) => ReadonlySet)) { + public constructor( + nodes: Iterable, + invertDirection: boolean, + edges: number[][] | ((node: T) => ReadonlySet) + ) { this._nodes = Array.from(nodes); this._indexByNode = new Map(this._nodes.map((n, i): [T, number] => [n, i])); let edgesArray: number[][]; @@ -183,24 +191,25 @@ export class Graph { if (invertDirection) { edgesArray = invertEdges(edgesArray); } + this._successors = edgesArray; } - get size(): number { + public get size(): number { return this._nodes.length; } - get nodes(): ReadonlyArray { + public get nodes(): readonly T[] { return this._nodes; } - findRoots(): ReadonlySet { + public findRoots(): ReadonlySet { const roots = findRoots(this._successors); return new Set(roots.map(n => this._nodes[n])); } // The subgraph starting at `root` must be acyclic. - dfsTraversal(root: T, preOrder: boolean, process: (node: T) => void): void { + public dfsTraversal(root: T, preOrder: boolean, process: (node: T) => void): void { const visited = repeated(this.size, false); const visit = (v: number): void => { @@ -223,7 +232,7 @@ export class Graph { visit(defined(this._indexByNode.get(root))); } - stronglyConnectedComponents(): Graph> { + public stronglyConnectedComponents(): Graph> { const components = stronglyConnectedComponents(this._successors); const componentSuccessors = buildMetaSuccessors(this._successors, components); return new Graph( @@ -233,7 +242,7 @@ export class Graph { ); } - makeDot(includeNode: (n: T) => boolean, nodeLabel: (n: T) => string): string { + public makeDot(includeNode: (n: T) => boolean, nodeLabel: (n: T) => string): string { const lines: string[] = []; lines.push("digraph G {"); lines.push(" ordering = out;"); diff --git a/packages/quicktype-core/src/GraphRewriting.ts b/packages/quicktype-core/src/GraphRewriting.ts index b3610ad80..d3c78d811 100644 --- a/packages/quicktype-core/src/GraphRewriting.ts +++ b/packages/quicktype-core/src/GraphRewriting.ts @@ -1,30 +1,32 @@ -import { mapMap, EqualityMap } from "collection-utils"; +import { EqualityMap, mapMap } from "collection-utils"; -import { PrimitiveTypeKind, Type, ClassProperty, MaybeTypeIdentity } from "./Type"; -import { combineTypeAttributesOfTypes } from "./TypeUtils"; +import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; +import { assert, indentationString, panic } from "./support/Support"; +import { type ClassProperty, type MaybeTypeIdentity, type PrimitiveTypeKind, type Type } from "./Type"; +// eslint-disable-next-line import/no-cycle +import { type StringTypeMapping, TypeBuilder } from "./TypeBuilder"; import { - TypeGraph, - TypeRef, + type TypeGraph, + type TypeRef, + assertTypeRefGraph, derefTypeRef, + isTypeRef, typeAndAttributesForTypeRef, - assertTypeRefGraph, - typeRefIndex, - isTypeRef + typeRefIndex } from "./TypeGraph"; -import { TypeAttributes, emptyTypeAttributes, combineTypeAttributes } from "./attributes/TypeAttributes"; -import { assert, panic, indentationString } from "./support/Support"; -import { TypeBuilder, StringTypeMapping } from "./TypeBuilder"; +import { combineTypeAttributesOfTypes } from "./TypeUtils"; export interface TypeLookerUp { - lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef): TypeRef | undefined; - reconstituteTypeRef(typeRef: TypeRef, attributes?: TypeAttributes, forwardingRef?: TypeRef): TypeRef; + lookupTypeRefs: (typeRefs: TypeRef[], forwardingRef?: TypeRef) => TypeRef | undefined; + reconstituteTypeRef: (typeRef: TypeRef, attributes?: TypeAttributes, forwardingRef?: TypeRef) => TypeRef; } export class TypeReconstituter { private _wasUsed = false; + private _typeRef: TypeRef | undefined = undefined; - constructor( + public constructor( private readonly _typeBuilder: TBuilder, private readonly _makeClassUnique: boolean, private readonly _typeAttributes: TypeAttributes, @@ -43,10 +45,11 @@ export class TypeReconstituter { return this._typeBuilder; } - getResult(): TypeRef { + public getResult(): TypeRef { if (this._typeRef === undefined) { return panic("Type was not reconstituted"); } + return this._typeRef; } @@ -62,20 +65,20 @@ export class TypeReconstituter { this.register(tref); } - lookup(tref: TypeRef): TypeRef | undefined; - lookup(trefs: Iterable): ReadonlyArray | undefined; - lookup(trefs: TypeRef | Iterable): TypeRef | ReadonlyArray | undefined { + public lookup(tref: TypeRef): TypeRef | undefined; + public lookup(trefs: Iterable): readonly TypeRef[] | undefined; + public lookup(trefs: TypeRef | Iterable): TypeRef | readonly TypeRef[] | undefined { assert(!this._wasUsed, "Cannot lookup constituents after building type"); if (isTypeRef(trefs)) { return this._typeBuilder.lookupTypeRefs([trefs], undefined, false); } else { const maybeRefs = Array.from(trefs).map(tref => this._typeBuilder.lookupTypeRefs([tref], undefined, false)); if (maybeRefs.some(tref => tref === undefined)) return undefined; - return maybeRefs as ReadonlyArray; + return maybeRefs as readonly TypeRef[]; } } - lookupMap(trefs: ReadonlyMap): ReadonlyMap | undefined { + public lookupMap(trefs: ReadonlyMap): ReadonlyMap | undefined { const resultValues = this.lookup(trefs.values()); if (resultValues === undefined) return undefined; assert(resultValues.length === trefs.size, "Didn't get back the correct number of types"); @@ -85,12 +88,13 @@ export class TypeReconstituter { result.set(k, resultValues[i]); i += 1; } + return result; } - reconstitute(tref: TypeRef): TypeRef; - reconstitute(trefs: Iterable): ReadonlyArray; - reconstitute(trefs: TypeRef | Iterable): TypeRef | ReadonlyArray { + public reconstitute(tref: TypeRef): TypeRef; + public reconstitute(trefs: Iterable): readonly TypeRef[]; + public reconstitute(trefs: TypeRef | Iterable): TypeRef | readonly TypeRef[] { assert(this._wasUsed, "Cannot reconstitute constituents before building type"); if (isTypeRef(trefs)) { return this._typeBuilder.reconstituteTypeRef(trefs); @@ -99,43 +103,46 @@ export class TypeReconstituter { } } - reconstituteMap(trefs: ReadonlyMap): ReadonlyMap { + public reconstituteMap(trefs: ReadonlyMap): ReadonlyMap { return mapMap(trefs, tref => this._typeBuilder.reconstituteTypeRef(tref)); } - getPrimitiveType(kind: PrimitiveTypeKind): void { + public getPrimitiveType(kind: PrimitiveTypeKind): void { this.register(this.builderForNewType().getPrimitiveType(kind, this._typeAttributes, this._forwardingRef)); } - getEnumType(cases: ReadonlySet): void { + public getEnumType(cases: ReadonlySet): void { this.register(this.builderForNewType().getEnumType(this._typeAttributes, cases, this._forwardingRef)); } - getUniqueMapType(): void { + public getUniqueMapType(): void { this.registerAndAddAttributes(this.builderForNewType().getUniqueMapType(this._forwardingRef)); } - getMapType(values: TypeRef): void { + public getMapType(values: TypeRef): void { this.register(this.builderForNewType().getMapType(this._typeAttributes, values, this._forwardingRef)); } - getUniqueArrayType(): void { + public getUniqueArrayType(): void { this.registerAndAddAttributes(this.builderForNewType().getUniqueArrayType(this._forwardingRef)); } - getArrayType(items: TypeRef): void { + public getArrayType(items: TypeRef): void { this.register(this.builderForNewType().getArrayType(this._typeAttributes, items, this._forwardingRef)); } - setArrayItems(items: TypeRef): void { + public setArrayItems(items: TypeRef): void { this.builderForSetting().setArrayItems(this.getResult(), items); } - makeClassProperty(tref: TypeRef, isOptional: boolean): ClassProperty { + public makeClassProperty(tref: TypeRef, isOptional: boolean): ClassProperty { return this._typeBuilder.makeClassProperty(tref, isOptional); } - getObjectType(properties: ReadonlyMap, additionalProperties: TypeRef | undefined): void { + public getObjectType( + properties: ReadonlyMap, + additionalProperties: TypeRef | undefined + ): void { this.register( this.builderForNewType().getUniqueObjectType( this._typeAttributes, @@ -146,7 +153,7 @@ export class TypeReconstituter { ); } - getUniqueObjectType( + public getUniqueObjectType( properties: ReadonlyMap | undefined, additionalProperties: TypeRef | undefined ): void { @@ -160,48 +167,49 @@ export class TypeReconstituter { ); } - getClassType(properties: ReadonlyMap): void { + public getClassType(properties: ReadonlyMap): void { if (this._makeClassUnique) { this.getUniqueClassType(false, properties); return; } + this.register(this.builderForNewType().getClassType(this._typeAttributes, properties, this._forwardingRef)); } - getUniqueClassType(isFixed: boolean, properties: ReadonlyMap | undefined): void { + public getUniqueClassType(isFixed: boolean, properties: ReadonlyMap | undefined): void { this.register( this.builderForNewType().getUniqueClassType(this._typeAttributes, isFixed, properties, this._forwardingRef) ); } - setObjectProperties( + public setObjectProperties( properties: ReadonlyMap, additionalProperties: TypeRef | undefined ): void { this.builderForSetting().setObjectProperties(this.getResult(), properties, additionalProperties); } - getUnionType(members: ReadonlySet): void { + public getUnionType(members: ReadonlySet): void { this.register(this.builderForNewType().getUnionType(this._typeAttributes, members, this._forwardingRef)); } - getUniqueUnionType(): void { + public getUniqueUnionType(): void { this.register( this.builderForNewType().getUniqueUnionType(this._typeAttributes, undefined, this._forwardingRef) ); } - getIntersectionType(members: ReadonlySet): void { + public getIntersectionType(members: ReadonlySet): void { this.register(this.builderForNewType().getIntersectionType(this._typeAttributes, members, this._forwardingRef)); } - getUniqueIntersectionType(members?: ReadonlySet): void { + public getUniqueIntersectionType(members?: ReadonlySet): void { this.register( this.builderForNewType().getUniqueIntersectionType(this._typeAttributes, members, this._forwardingRef) ); } - setSetOperationMembers(members: ReadonlySet): void { + public setSetOperationMembers(members: ReadonlySet): void { this.builderForSetting().setSetOperationMembers(this.getResult(), members); } } @@ -210,10 +218,11 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ protected readonly reconstitutedTypes: Map = new Map(); private _lostTypeAttributes = false; + private _printIndent = 0; - constructor( - readonly originalGraph: TypeGraph, + public constructor( + public readonly originalGraph: TypeGraph, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, graphHasProvenanceAttributes: boolean, @@ -229,7 +238,7 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ ); } - withForwardingRef( + public withForwardingRef( maybeForwardingRef: TypeRef | undefined, typeCreator: (forwardingRef: TypeRef) => TypeRef ): TypeRef { @@ -243,29 +252,39 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ return actualRef; } - reconstituteType(t: Type, attributes?: TypeAttributes, forwardingRef?: TypeRef): TypeRef { + public reconstituteType(t: Type, attributes?: TypeAttributes, forwardingRef?: TypeRef): TypeRef { return this.reconstituteTypeRef(t.typeRef, attributes, forwardingRef); } - abstract lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef, replaceSet?: boolean): TypeRef | undefined; + public abstract lookupTypeRefs( + typeRefs: TypeRef[], + forwardingRef?: TypeRef, + replaceSet?: boolean + ): TypeRef | undefined; protected abstract forceReconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, maybeForwardingRef?: TypeRef ): TypeRef; - reconstituteTypeRef(originalRef: TypeRef, attributes?: TypeAttributes, maybeForwardingRef?: TypeRef): TypeRef { + public reconstituteTypeRef( + originalRef: TypeRef, + attributes?: TypeAttributes, + maybeForwardingRef?: TypeRef + ): TypeRef { const maybeRef = this.lookupTypeRefs([originalRef], maybeForwardingRef); if (maybeRef !== undefined) { if (attributes !== undefined) { this.addAttributes(maybeRef, attributes); } + return maybeRef; } + return this.forceReconstituteTypeRef(originalRef, attributes, maybeForwardingRef); } - reconstituteTypeAttributes(attributes: TypeAttributes): TypeAttributes { + public reconstituteTypeAttributes(attributes: TypeAttributes): TypeAttributes { return mapMap(attributes, (v, a) => a.reconstitute(this, v)); } @@ -274,6 +293,7 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ for (const originalRef of typeRefs) { assertTypeRefGraph(originalRef, this.originalGraph); } + if (forwardingRef !== undefined) { assertTypeRefGraph(forwardingRef, this.typeGraph); } @@ -287,18 +307,19 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ return indentationString(this._printIndent); } - finish(): TypeGraph { + public finish(): TypeGraph { for (const [name, t] of this.originalGraph.topLevels) { this.addTopLevel(name, this.reconstituteType(t)); } + return super.finish(); } - setLostTypeAttributes(): void { + public setLostTypeAttributes(): void { this._lostTypeAttributes = true; } - get lostTypeAttributes(): boolean { + public get lostTypeAttributes(): boolean { return this._lostTypeAttributes; } } @@ -306,7 +327,7 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { private readonly _attributeSources: Map = new Map(); - constructor( + public constructor( originalGraph: TypeGraph, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, @@ -328,6 +349,7 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { maybeSources = [target]; this._attributeSources.set(target, maybeSources); } + maybeSources.push(source); } } @@ -347,7 +369,7 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { return panic("We can't add forwarding intersections when we're removing forwarding intersections"); } - lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef): TypeRef | undefined { + public lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef): TypeRef | undefined { assert(forwardingRef === undefined, "We can't have a forwarding ref when we remap"); this.assertTypeRefsToReconstitute(typeRefs, forwardingRef); @@ -389,6 +411,7 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { if (attributes === undefined) { attributes = emptyTypeAttributes; } + if (attributeSources === undefined) { attributes = combineTypeAttributes( "union", @@ -402,6 +425,7 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { this.reconstituteTypeAttributes(combineTypeAttributesOfTypes("union", attributeSources)) ); } + const newAttributes = attributes; const reconstituter = new TypeReconstituter( @@ -425,9 +449,10 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { export class GraphRewriteBuilder extends BaseGraphRewriteBuilder { private readonly _setsToReplaceByMember: Map>; + private readonly _reconstitutedUnions: EqualityMap, TypeRef> = new EqualityMap(); - constructor( + public constructor( originalGraph: TypeGraph, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, @@ -459,7 +484,7 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder } } - registerUnion(typeRefs: TypeRef[], reconstituted: TypeRef): void { + public registerUnion(typeRefs: TypeRef[], reconstituted: TypeRef): void { const set = new Set(typeRefs); assert(!this._reconstitutedUnions.has(set), "Cannot register reconstituted set twice"); this._reconstitutedUnions.set(set, reconstituted); @@ -482,6 +507,7 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder this.reconstitutedTypes.set(index, forwardingRef); this._setsToReplaceByMember.delete(index); } + const result = this._replacer(typesToReplace, this, forwardingRef); assert(result === forwardingRef, "The forwarding ref got lost when replacing"); @@ -543,7 +569,7 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder } /* - reconstituteTypeUnmodified(originalType: Type): TypeRef { + public reconstituteTypeUnmodified(originalType: Type): TypeRef { const reconstituter = new TypeReconstituter( this, this.alphabetizeProperties, @@ -558,7 +584,7 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder // If the union of these type refs have been, or are supposed to be, reconstituted to // one target type, return it. Otherwise return undefined. - lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef, replaceSet = true): TypeRef | undefined { + public lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef, replaceSet = true): TypeRef | undefined { this.assertTypeRefsToReconstitute(typeRefs, forwardingRef); // Check whether we have already reconstituted them. That means ensuring @@ -572,6 +598,7 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder break; } } + if (allEqual) { return this.forwardIfNecessary(forwardingRef, maybeRef); } @@ -588,11 +615,13 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder if (maybeSet === undefined) { return undefined; } + for (let i = 1; i < typeRefs.length; i++) { if (this._setsToReplaceByMember.get(typeRefIndex(typeRefs[i])) !== maybeSet) { return undefined; } } + // Yes, this set is requested to be replaced, so do it. if (!replaceSet) return undefined; return this.replaceSet(maybeSet, forwardingRef); diff --git a/packages/quicktype-core/src/MakeTransformations.ts b/packages/quicktype-core/src/MakeTransformations.ts index 4e44d89f5..106eebbd5 100644 --- a/packages/quicktype-core/src/MakeTransformations.ts +++ b/packages/quicktype-core/src/MakeTransformations.ts @@ -1,40 +1,40 @@ -import { setFilter, iterableFirst, mapMapEntries, withDefault, iterableSome, arraySortByInto } from "collection-utils"; +import { arraySortByInto, iterableFirst, iterableSome, mapMapEntries, setFilter, withDefault } from "collection-utils"; -import { TypeGraph, TypeRef, typeRefIndex } from "./TypeGraph"; -import { TargetLanguage } from "./TargetLanguage"; -import { - UnionType, - TypeKind, - EnumType, - Type, - ArrayType, - PrimitiveType, - isNumberTypeKind, - isPrimitiveStringTypeKind, - targetTypeKindForTransformedStringTypeKind, - PrimitiveStringTypeKind -} from "./Type"; -import { GraphRewriteBuilder } from "./GraphRewriting"; -import { defined, assert, panic } from "./support/Support"; +import { minMaxLengthForType, minMaxValueForType } from "./attributes/Constraints"; +import { StringTypes } from "./attributes/StringTypes"; +import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; +import { type GraphRewriteBuilder } from "./GraphRewriting"; +import { type RunContext } from "./Run"; +import { assert, defined, panic } from "./support/Support"; +import { type TargetLanguage } from "./TargetLanguage"; import { - UnionInstantiationTransformer, - DecodingChoiceTransformer, - Transformation, - transformationTypeAttributeKind, - StringMatchTransformer, - StringProducerTransformer, + ArrayDecodingTransformer, ChoiceTransformer, - Transformer, + DecodingChoiceTransformer, DecodingTransformer, - ParseStringTransformer, - ArrayDecodingTransformer, MinMaxLengthCheckTransformer, - MinMaxValueTransformer + MinMaxValueTransformer, + ParseStringTransformer, + StringMatchTransformer, + StringProducerTransformer, + Transformation, + type Transformer, + UnionInstantiationTransformer, + transformationTypeAttributeKind } from "./Transformers"; -import { TypeAttributes, emptyTypeAttributes, combineTypeAttributes } from "./attributes/TypeAttributes"; -import { StringTypes } from "./attributes/StringTypes"; -import { RunContext } from "./Run"; -import { minMaxLengthForType, minMaxValueForType } from "./attributes/Constraints"; +import { + ArrayType, + EnumType, + type PrimitiveStringTypeKind, + type PrimitiveType, + type Type, + type TypeKind, + UnionType, + isNumberTypeKind, + isPrimitiveStringTypeKind, + targetTypeKindForTransformedStringTypeKind +} from "./Type"; +import { type TypeGraph, type TypeRef, typeRefIndex } from "./TypeGraph"; function transformationAttributes( graph: TypeGraph, @@ -46,9 +46,10 @@ function transformationAttributes( if (debugPrintTransformations) { console.log(`transformation for ${typeRefIndex(reconstitutedTargetType)}:`); transformation.debugPrint(); - console.log(`reverse:`); + console.log("reverse:"); transformation.reverse.debugPrint(); } + return transformationTypeAttributeKind.makeAttributes(transformation); } @@ -97,9 +98,11 @@ function replaceUnion( if (targetTypeMember !== undefined) { return builder.reconstituteType(targetTypeMember); } + return builder.getPrimitiveType(targetTypeKind); } } + return builder.reconstituteType(t); } @@ -115,7 +118,7 @@ function replaceUnion( ? builder.getUnionType(union.getAttributes(), reconstitutedMemberSet) : defined(iterableFirst(reconstitutedMemberSet)); - function memberForKind(kind: TypeKind) { + function memberForKind(kind: TypeKind): number { return defined(reconstitutedMembersByKind.get(kind)); } @@ -124,7 +127,7 @@ function replaceUnion( return new UnionInstantiationTransformer(graph, memberTypeRef); } - function transformerForKind(kind: TypeKind) { + function transformerForKind(kind: TypeKind): DecodingTransformer | undefined { const member = union.findMember(kind); if (member === undefined) return undefined; const memberTypeRef = memberForKind(kind); @@ -136,6 +139,7 @@ function replaceUnion( if (maybeStringType === undefined) { maybeStringType = builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted); } + return maybeStringType; } @@ -146,6 +150,7 @@ function replaceUnion( if (minMax === undefined) { return consumer(memberRef); } + const [min, max] = minMax; return new MinMaxLengthCheckTransformer(graph, getStringType(), consumer(memberRef), min, max); } else if (t instanceof EnumType && transformedTypes.has(t)) { @@ -180,7 +185,7 @@ function replaceUnion( transformerForClass === undefined || transformerForMap === undefined, "Can't have both class and map in a transformed union" ); - const transformerForObject = transformerForClass !== undefined ? transformerForClass : transformerForMap; + const transformerForObject = transformerForClass ?? transformerForMap; const transformer = new DecodingChoiceTransformer( graph, @@ -343,18 +348,23 @@ export function makeTransformations(ctx: RunContext, graph: TypeGraph, targetLan if (t instanceof UnionType) { return replaceUnion(t, builder, forwardingRef, transformedTypes, ctx.debugPrintTransformations); } + if (t instanceof ArrayType) { return replaceArray(t, builder, forwardingRef, ctx.debugPrintTransformations); } + if (t instanceof EnumType) { return replaceEnum(t, builder, forwardingRef, ctx.debugPrintTransformations); } + if (t.kind === "string") { return replaceString(t as PrimitiveType, builder, forwardingRef, ctx.debugPrintTransformations); } + if (isNumberTypeKind(t.kind)) { return replaceNumber(t as PrimitiveType, builder, forwardingRef, ctx.debugPrintTransformations); } + if (isPrimitiveStringTypeKind(t.kind)) { return replaceTransformedStringType( t as PrimitiveType, @@ -364,6 +374,7 @@ export function makeTransformations(ctx: RunContext, graph: TypeGraph, targetLan ctx.debugPrintTransformations ); } + return panic(`Cannot make transformation for type ${t.kind}`); } diff --git a/packages/quicktype-core/src/MarkovChain.ts b/packages/quicktype-core/src/MarkovChain.ts index 1c1b730a6..dec67dc1f 100644 --- a/packages/quicktype-core/src/MarkovChain.ts +++ b/packages/quicktype-core/src/MarkovChain.ts @@ -1,23 +1,24 @@ -import { panic, assert, inflateBase64 } from "./support/Support"; import { encodedMarkovChain } from "./EncodedMarkovChain"; +import { assert, inflateBase64, panic } from "./support/Support"; // This must be null, not undefined, because we read it from JSON. export type SubTrie = number | null | Trie; -export type Trie = { - count: number; +export interface Trie { arr: SubTrie[]; -}; + count: number; +} -export type MarkovChain = { - trie: Trie; +export interface MarkovChain { depth: number; -}; + trie: Trie; +} function makeTrie(): Trie { const arr: SubTrie[] = []; for (let i = 0; i < 128; i++) { arr.push(null); } + return { count: 0, arr }; } @@ -35,6 +36,7 @@ function lookup(t: Trie, seq: string, i: number): Trie | number | undefined { if (n === null) { return undefined; } + if (typeof n === "object") { return lookup(n, seq, i + 1); } else { @@ -52,12 +54,14 @@ function increment(t: Trie, seq: string, i: number): void { if (typeof t !== "object") { return panic("Malformed trie"); } + let n = t.arr[first]; if (n === null) { n = 0; } else if (typeof n === "object") { return panic("Malformed trie"); } + t.arr[first] = n + 1; t.count += 1; return; @@ -67,10 +71,12 @@ function increment(t: Trie, seq: string, i: number): void { if (st === null) { t.arr[first] = st = makeTrie(); } + if (typeof st !== "object") { return panic("Malformed trie"); } - return increment(st, seq, i + 1); + + increment(st, seq, i + 1); } export function train(lines: string[], depth: number): MarkovChain { @@ -93,6 +99,7 @@ export function evaluateFull(mc: MarkovChain, word: string): [number, number[]] if (word.length < depth) { return [1, []]; } + let p = 1; const scores: number[] = []; for (let i = depth; i <= word.length; i++) { @@ -100,12 +107,15 @@ export function evaluateFull(mc: MarkovChain, word: string): [number, number[]] if (typeof cp === "object") { return panic("Did we mess up the depth?"); } + if (cp === undefined) { cp = 0.0001; } + scores.push(cp); p = p * cp; } + return [Math.pow(p, 1 / (word.length - depth + 1)), scores]; } @@ -113,7 +123,7 @@ export function evaluate(mc: MarkovChain, word: string): number { return evaluateFull(mc, word)[0]; } -function randomInt(lower: number, upper: number) { +function randomInt(lower: number, upper: number): number { const range = upper - lower; return lower + Math.floor(Math.random() * range); } @@ -124,14 +134,17 @@ export function generate(mc: MarkovChain, state: string, unseenWeight: number): if (typeof t === "number") { return panic("Wrong depth?"); } + if (t === undefined) { return String.fromCharCode(randomInt(32, 127)); } + const counts = t.arr.map((x, i) => (x === null ? (i === 0 ? 0 : unseenWeight) : (x as number))); let n = 0; for (const c of counts) { n += c; } + const r = randomInt(0, n); let sum = 0; for (let i = 0; i < counts.length; i++) { @@ -140,6 +153,7 @@ export function generate(mc: MarkovChain, state: string, unseenWeight: number): return String.fromCharCode(i); } } + return panic("We screwed up bookkeeping, or randomInt"); } diff --git a/packages/quicktype-core/src/Messages.ts b/packages/quicktype-core/src/Messages.ts index d740163ec..0c945480a 100644 --- a/packages/quicktype-core/src/Messages.ts +++ b/packages/quicktype-core/src/Messages.ts @@ -1,5 +1,6 @@ -import { StringMap } from "./support/Support"; -import { Ref } from "./input/JSONSchemaInput"; +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { type Ref } from "./input/JSONSchemaInput"; +import { type StringMap } from "./support/Support"; export type ErrorProperties = | { kind: "InternalError"; properties: { message: string } } @@ -7,11 +8,11 @@ export type ErrorProperties = // Misc | { kind: "MiscJSONParseError"; - properties: { description: string; address: string; message: string }; + properties: { address: string; description: string; message: string }; } | { kind: "MiscReadError"; properties: { fileOrURL: string; message: string } } | { kind: "MiscUnicodeHighSurrogateWithoutLowSurrogate"; properties: {} } - | { kind: "MiscInvalidMinMaxConstraint"; properties: { min: number; max: number } } + | { kind: "MiscInvalidMinMaxConstraint"; properties: { max: number; min: number } } // Inference | { kind: "InferenceJSONReferenceNotRooted"; properties: { reference: string } } @@ -25,9 +26,9 @@ export type ErrorProperties = | { kind: "SchemaRefMustBeString"; properties: { actual: string; ref: Ref } } | { kind: "SchemaAdditionalTypesForbidRequired"; properties: { ref: Ref } } | { kind: "SchemaNoTypeSpecified"; properties: { ref: Ref } } - | { kind: "SchemaInvalidType"; properties: { type: string; ref: Ref } } + | { kind: "SchemaInvalidType"; properties: { ref: Ref; type: string } } | { kind: "SchemaFalseNotSupported"; properties: { ref: Ref } } - | { kind: "SchemaInvalidJSONSchemaType"; properties: { type: string; ref: Ref } } + | { kind: "SchemaInvalidJSONSchemaType"; properties: { ref: Ref; type: string } } | { kind: "SchemaRequiredMustBeStringOrStringArray"; properties: { actual: any; ref: Ref } } | { kind: "SchemaRequiredElementMustBeString"; properties: { element: any; ref: Ref } } | { kind: "SchemaTypeMustBeStringOrStringArray"; properties: { actual: any } } @@ -37,7 +38,7 @@ export type ErrorProperties = | { kind: "SchemaWrongAccessorEntryArrayLength"; properties: { operation: string; ref: Ref } } | { kind: "SchemaSetOperationCasesIsNotArray"; - properties: { operation: string; cases: any; ref: Ref }; + properties: { cases: any; operation: string; ref: Ref }; } | { kind: "SchemaMoreThanOneUnionMemberName"; properties: { names: string[] } } | { kind: "SchemaCannotGetTypesFromBoolean"; properties: { ref: string } } @@ -74,7 +75,7 @@ export type ErrorProperties = | { kind: "IRNoEmptyUnions"; properties: {} } // Rendering - | { kind: "RendererUnknownOptionValue"; properties: { value: string; name: string } } + | { kind: "RendererUnknownOptionValue"; properties: { name: string; value: string } } // TypeScript input | { kind: "TypeScriptCompilerError"; properties: { message: string } }; @@ -164,16 +165,15 @@ const errorMessages: ErrorMessages = { TypeScriptCompilerError: "TypeScript error: ${message}" }; -export type ErrorPropertiesForName = Extract extends { properties: infer P } - ? P - : never; +export type ErrorPropertiesForName = + Extract extends { properties: infer P } ? P : never; export class QuickTypeError extends Error { - constructor( - readonly errorMessage: string, - readonly messageName: string, - userMessage: string, - readonly properties: StringMap + public constructor( + public readonly errorMessage: string, + public readonly messageName: string, + public userMessage: string, + public readonly properties: StringMap ) { super(userMessage); } @@ -193,6 +193,7 @@ export function messageError(kind: N, properties: ErrorPro } else if (typeof value !== "string") { value = JSON.stringify(value); } + userMessage = userMessage.replace("${" + name + "}", value); } diff --git a/packages/quicktype-core/src/Naming.ts b/packages/quicktype-core/src/Naming.ts index a8508ca51..6b2b2b825 100644 --- a/packages/quicktype-core/src/Naming.ts +++ b/packages/quicktype-core/src/Naming.ts @@ -1,27 +1,30 @@ import { - setUnion, - setUnionInto, - setMap, - setFilter, + iterableEvery, iterableFind, - iterableSome, + iterableFirst, iterableMinBy, - setGroupBy, + iterableSome, + mapMergeInto, + setFilter, setFilterMap, - iterableFirst, - iterableEvery, - mapMergeInto + setGroupBy, + setMap, + setUnion, + setUnionInto } from "collection-utils"; -import { defined, assert, panic } from "./support/Support"; +import { assert, defined, panic } from "./support/Support"; export class Namespace { - readonly forbiddenNamespaces: ReadonlySet; - readonly additionalForbidden: ReadonlySet; + public readonly forbiddenNamespaces: ReadonlySet; + + public readonly additionalForbidden: ReadonlySet; + private readonly _children = new Set(); + private readonly _members = new Set(); - constructor( + public constructor( _name: string, parent: Namespace | undefined, forbiddenNamespaces: Iterable, @@ -38,20 +41,20 @@ export class Namespace { this._children.add(child); } - get children(): ReadonlySet { + public get children(): ReadonlySet { return this._children; } - get members(): ReadonlySet { + public get members(): ReadonlySet { return this._members; } - get forbiddenNameds(): ReadonlySet { + public get forbiddenNameds(): ReadonlySet { // FIXME: cache return setUnion(this.additionalForbidden, ...Array.from(this.forbiddenNamespaces).map(ns => ns.members)); } - add(named: TName): TName { + public add(named: TName): TName { this._members.add(named); return named; } @@ -77,13 +80,17 @@ export type NameStyle = (rawName: string) => string; export class Namer { private readonly _prefixes: ReadonlySet; - constructor(readonly name: string, readonly nameStyle: NameStyle, prefixes: string[]) { + public constructor( + public readonly name: string, + public readonly nameStyle: NameStyle, + public prefixes: string[] + ) { this._prefixes = new Set(prefixes); } // The namesIterable comes directly out of the context and will // be modified if we assign - assignNames( + public assignNames( names: ReadonlyMap, forbiddenNamesIterable: Iterable, namesToAssignIterable: Iterable @@ -135,6 +142,7 @@ export class Namer { nameToTry = `${originalName}_${suffixNumber.toString()}`; suffixNumber++; } + const styledName = name.namingFunction.nameStyle(nameToTry); const assigned = name.nameAssignments(forbiddenNames, styledName); if (assigned === null) continue; @@ -177,30 +185,36 @@ export abstract class Name { private readonly _associates = new Set(); // If a Named is fixed, the namingFunction is undefined. - constructor(private readonly _namingFunction: Namer | undefined, readonly order: number) {} + public constructor( + private readonly _namingFunction: Namer | undefined, + public readonly order: number + ) {} - addAssociate(associate: AssociatedName): void { + public addAssociate(associate: AssociatedName): void { this._associates.add(associate); } - abstract get dependencies(): ReadonlyArray; + public abstract get dependencies(): readonly Name[]; - isFixed(): this is FixedName { + public isFixed(): this is FixedName { return this instanceof FixedName; } - get namingFunction(): Namer { + public get namingFunction(): Namer { return defined(this._namingFunction); } // Must return at least one proposal. The proposals are considered in order. - abstract proposeUnstyledNames(names: ReadonlyMap): ReadonlySet; + public abstract proposeUnstyledNames(names: ReadonlyMap): ReadonlySet; - firstProposedName(names: ReadonlyMap): string { + public firstProposedName(names: ReadonlyMap): string { return defined(iterableFirst(this.proposeUnstyledNames(names))); } - nameAssignments(forbiddenNames: ReadonlySet, assignedName: string): ReadonlyMap | null { + public nameAssignments( + forbiddenNames: ReadonlySet, + assignedName: string + ): ReadonlyMap | null { if (forbiddenNames.has(assignedName)) return null; const assignments = new Map([[this, assignedName]]); for (const an of this._associates) { @@ -208,31 +222,33 @@ export abstract class Name { if (forbiddenNames.has(associatedAssignedName)) { return null; } + assignments.set(an, associatedAssignedName); } + return assignments; } } // FIXME: FixedNameds should optionally be user-configurable export class FixedName extends Name { - constructor(private readonly _fixedName: string) { + public constructor(private readonly _fixedName: string) { super(undefined, 0); } - get dependencies(): ReadonlyArray { + public get dependencies(): readonly Name[] { return []; } - addAssociate(_: AssociatedName): never { + public addAssociate(_: AssociatedName): never { return panic("Cannot add associates to fixed names"); } - get fixedName(): string { + public get fixedName(): string { return this._fixedName; } - proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet { + public proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet { return panic("Only fixedName should be called on FixedName."); } } @@ -240,30 +256,34 @@ export class FixedName extends Name { export class SimpleName extends Name { private readonly _unstyledNames: ReadonlySet; - constructor(unstyledNames: Iterable, namingFunction: Namer, order: number) { + public constructor(unstyledNames: Iterable, namingFunction: Namer, order: number) { super(namingFunction, order); this._unstyledNames = new Set(unstyledNames); } - get dependencies(): ReadonlyArray { + public get dependencies(): readonly Name[] { return []; } - proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet { + public proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet { return this._unstyledNames; } } export class AssociatedName extends Name { - constructor(private readonly _sponsor: Name, order: number, readonly getName: (sponsorName: string) => string) { + public constructor( + private readonly _sponsor: Name, + order: number, + public readonly getName: (sponsorName: string) => string + ) { super(undefined, order); } - get dependencies(): ReadonlyArray { + public get dependencies(): readonly Name[] { return [this._sponsor]; } - proposeUnstyledNames(_?: ReadonlyMap): never { + public proposeUnstyledNames(_?: ReadonlyMap): never { return panic("AssociatedName must be assigned via its sponsor"); } } @@ -271,7 +291,7 @@ export class AssociatedName extends Name { export class DependencyName extends Name { private readonly _dependencies: ReadonlySet; - constructor( + public constructor( namingFunction: Namer | undefined, order: number, private readonly _proposeUnstyledName: (lookup: (n: Name) => string) => string @@ -285,11 +305,11 @@ export class DependencyName extends Name { this._dependencies = new Set(dependencies); } - get dependencies(): ReadonlyArray { + public get dependencies(): readonly Name[] { return Array.from(this._dependencies); } - proposeUnstyledNames(names: ReadonlyMap): ReadonlySet { + public proposeUnstyledNames(names: ReadonlyMap): ReadonlySet { return new Set([ this._proposeUnstyledName(n => { assert(this._dependencies.has(n), "DependencyName proposer is not pure"); @@ -299,11 +319,12 @@ export class DependencyName extends Name { } } -export function keywordNamespace(name: string, keywords: string[]) { +export function keywordNamespace(name: string, keywords: string[]): Namespace { const ns = new Namespace(name, undefined, [], []); for (const kw of keywords) { ns.add(new FixedName(kw)); } + return ns; } @@ -313,27 +334,29 @@ function allNamespacesRecursively(namespaces: Iterable): ReadonlySet< class NamingContext { private readonly _names: Map = new Map(); + private readonly _namedsForName: Map> = new Map(); - readonly namespaces: ReadonlySet; - constructor(rootNamespaces: Iterable) { + public readonly namespaces: ReadonlySet; + + public constructor(rootNamespaces: Iterable) { this.namespaces = allNamespacesRecursively(rootNamespaces); } - get names(): ReadonlyMap { + public get names(): ReadonlyMap { return this._names; } - isReadyToBeNamed = (named: Name): boolean => { + public isReadyToBeNamed(named: Name): boolean { if (this._names.has(named)) return false; return named.dependencies.every((n: Name) => this._names.has(n)); - }; + } - areForbiddensFullyNamed(namespace: Namespace): boolean { + public areForbiddensFullyNamed(namespace: Namespace): boolean { return iterableEvery(namespace.forbiddenNameds, n => this._names.has(n)); } - isConflicting = (namedNamespace: Namespace, proposed: string): boolean => { + public isConflicting(namedNamespace: Namespace, proposed: string): boolean { const namedsForProposed = this._namedsForName.get(proposed); // If the name is not assigned at all, there is no conflict. if (namedsForProposed === undefined) return false; @@ -343,10 +366,11 @@ class NamingContext { return true; } } + return false; - }; + } - assign = (named: Name, namedNamespace: Namespace, name: string): void => { + public assign(named: Name, namedNamespace: Namespace, name: string): void { assert(!this.names.has(named), `Name "${name}" assigned twice`); assert(!this.isConflicting(namedNamespace, name), `Assigned name "${name}" conflicts`); this._names.set(named, name); @@ -355,8 +379,9 @@ class NamingContext { namedsForName = new Set(); this._namedsForName.set(name, namedsForName); } + namedsForName.add(named); - }; + } } // Naming algorithm @@ -378,7 +403,9 @@ export function assignNames(rootNamespaces: Iterable): ReadonlyMap ctx.areForbiddensFullyNamed(ns)); - const readyNamespace = iterableFind(unfinishedNamespaces, ns => iterableSome(ns.members, ctx.isReadyToBeNamed)); + const readyNamespace = iterableFind(unfinishedNamespaces, ns => + iterableSome(ns.members, member => ctx.isReadyToBeNamed(member)) + ); if (readyNamespace === undefined) { // FIXME: Check for cycles? @@ -393,7 +420,7 @@ export function assignNames(rootNamespaces: Iterable): ReadonlyMap ctx.isReadyToBeNamed(member)); const minOrderName = iterableMinBy(allReadyNames, n => n.order); if (minOrderName === undefined) break; const minOrder = minOrderName.order; @@ -413,6 +440,7 @@ export function assignNames(rootNamespaces: Iterable): ReadonlyMap; +export interface RenderResult { names: ReadonlyMap; -}; + sources: ReadonlyMap; +} export type BlankLinePosition = "none" | "interposing" | "leading" | "leading-and-interposing"; export type BlankLineConfig = BlankLinePosition | [BlankLinePosition, number]; -function getBlankLineConfig(cfg: BlankLineConfig): { position: BlankLinePosition; count: number } { +function getBlankLineConfig(cfg: BlankLineConfig): { count: number; position: BlankLinePosition } { if (Array.isArray(cfg)) { return { position: cfg[0], count: cfg[1] }; } + return { position: cfg, count: 1 }; } @@ -36,100 +37,106 @@ function lineIndentation(line: string): { indent: number; text: string | null } return { indent, text: line.substring(i) }; } } + return { indent: 0, text: null }; } -export type RenderContext = { - typeGraph: TypeGraph; +export interface RenderContext { leadingComments?: Comment[]; -}; + typeGraph: TypeGraph; +} export type ForEachPosition = "first" | "last" | "middle" | "only"; class EmitContext { private _lastNewline?: NewlineSource; - // @ts-ignore: Initialized in startEmit, which is called from the constructor - private _emitted: Sourcelike[]; - // @ts-ignore: Initialized in startEmit, which is called from the constructor - private _currentEmitTarget: Sourcelike[]; - // @ts-ignore: Initialized in startEmit, which is called from the constructor + + private readonly _emitted: Sourcelike[]; + + private readonly _currentEmitTarget: Sourcelike[]; + private _numBlankLinesNeeded: number; - // @ts-ignore: Initialized in startEmit, which is called from the constructor + private _preventBlankLine: boolean; - constructor() { + public constructor() { this._currentEmitTarget = this._emitted = []; this._numBlankLinesNeeded = 0; this._preventBlankLine = true; // no blank lines at start of file } - get isEmpty(): boolean { + public get isEmpty(): boolean { return this._emitted.length === 0; } - get isNested(): boolean { + public get isNested(): boolean { return this._emitted !== this._currentEmitTarget; } - get source(): Sourcelike[] { + public get source(): Sourcelike[] { return this._emitted; } - private pushItem(item: Sourcelike): void { + public pushItem(item: Sourcelike): void { this._currentEmitTarget.push(item); this._preventBlankLine = false; } - emitNewline(): void { + public emitNewline(): void { const nl = newline(); this.pushItem(nl); this._lastNewline = nl; } - emitItem(item: Sourcelike): void { + public emitItem(item: Sourcelike): void { if (!this.isEmpty) { for (let i = 0; i < this._numBlankLinesNeeded; i++) { this.emitNewline(); } } + this._numBlankLinesNeeded = 0; this.pushItem(item); } - containsItem(item: Sourcelike): boolean { + public containsItem(item: Sourcelike): boolean { const existingItem = this._currentEmitTarget.find((value: Sourcelike) => item === value); return existingItem !== undefined; } - ensureBlankLine(numBlankLines: number): void { + public ensureBlankLine(numBlankLines: number): void { if (this._preventBlankLine) return; this._numBlankLinesNeeded = Math.max(this._numBlankLinesNeeded, numBlankLines); } - preventBlankLine(): void { + public preventBlankLine(): void { this._numBlankLinesNeeded = 0; this._preventBlankLine = true; } - changeIndent(offset: number): void { + public changeIndent(offset: number): void { if (this._lastNewline === undefined) { return panic("Cannot change indent for the first line"); } + this._lastNewline.indentationChange += offset; } } export abstract class Renderer { protected readonly typeGraph: TypeGraph; + protected readonly leadingComments: Comment[] | undefined; private _names: ReadonlyMap | undefined; - private _finishedFiles: Map; - private _finishedEmitContexts: Map; + + private readonly _finishedFiles: Map; + + private readonly _finishedEmitContexts: Map; private _emitContext: EmitContext; - constructor( + public constructor( protected readonly targetLanguage: TargetLanguage, renderContext: RenderContext ) { @@ -141,19 +148,20 @@ export abstract class Renderer { this._emitContext = new EmitContext(); } - ensureBlankLine(numBlankLines = 1): void { + // FIXME: make protected once JavaDateTimeRenderer is refactored + public ensureBlankLine(numBlankLines = 1): void { this._emitContext.ensureBlankLine(numBlankLines); } - preventBlankLine(): void { + protected preventBlankLine(): void { this._emitContext.preventBlankLine(); } - emitItem(item: Sourcelike): void { + protected emitItem(item: Sourcelike): void { this._emitContext.emitItem(item); } - emitItemOnce(item: Sourcelike): boolean { + protected emitItemOnce(item: Sourcelike): boolean { if (this._emitContext.containsItem(item)) { return false; } @@ -162,7 +170,7 @@ export abstract class Renderer { return true; } - emitLineOnce(...lineParts: Sourcelike[]): void { + protected emitLineOnce(...lineParts: Sourcelike[]): void { let lineEmitted = true; if (lineParts.length === 1) { lineEmitted = this.emitItemOnce(lineParts[0]); @@ -175,16 +183,18 @@ export abstract class Renderer { } } - emitLine(...lineParts: Sourcelike[]): void { + // FIXME: make protected once JavaDateTimeRenderer is refactored + public emitLine(...lineParts: Sourcelike[]): void { if (lineParts.length === 1) { this._emitContext.emitItem(lineParts[0]); } else if (lineParts.length > 1) { this._emitContext.emitItem(lineParts); } + this._emitContext.emitNewline(); } - emitMultiline(linesString: string): void { + protected emitMultiline(linesString: string): void { const lines = linesString.split("\n"); const numLines = lines.length; if (numLines === 0) return; @@ -203,12 +213,13 @@ export abstract class Renderer { this._emitContext.emitNewline(); } } + if (currentIndent !== 0) { this.changeIndent(-currentIndent); } } - gatherSource(emitter: () => void): Sourcelike[] { + protected gatherSource(emitter: () => void): Sourcelike[] { const oldEmitContext = this._emitContext; this._emitContext = new EmitContext(); emitter(); @@ -218,19 +229,19 @@ export abstract class Renderer { return source; } - emitGatheredSource(items: Sourcelike[]): void { + protected emitGatheredSource(items: Sourcelike[]): void { for (const item of items) { this._emitContext.emitItem(item); } } - emitAnnotated(annotation: AnnotationData, emitter: () => void): void { + protected emitAnnotated(annotation: AnnotationData, emitter: () => void): void { const lines = this.gatherSource(emitter); const source = sourcelikeToSource(lines); this._emitContext.emitItem(annotated(annotation, source)); } - emitIssue(message: string, emitter: () => void): void { + protected emitIssue(message: string, emitter: () => void): void { this.emitAnnotated(new IssueAnnotationData(message), emitter); } @@ -241,11 +252,11 @@ export abstract class Renderer { this._emitContext.emitNewline(); }; - changeIndent(offset: number): void { + protected changeIndent(offset: number): void { this._emitContext.changeIndent(offset); } - iterableForEach(iterable: Iterable, emitter: (v: T, position: ForEachPosition) => void): void { + protected iterableForEach(iterable: Iterable, emitter: (v: T, position: ForEachPosition) => void): void { const items = Array.from(iterable); let onFirst = true; for (const [i, v] of iterableEnumerate(items)) { @@ -256,7 +267,7 @@ export abstract class Renderer { } } - forEach( + protected forEach( iterable: Iterable<[K, V]>, interposedBlankLines: number, leadingBlankLines: number, @@ -269,24 +280,26 @@ export abstract class Renderer { } else { this.ensureBlankLine(interposedBlankLines); } + emitter(v, k, position); didEmit = true; }); return didEmit; } - forEachWithBlankLines( + protected forEachWithBlankLines( iterable: Iterable<[K, V]>, blankLineConfig: BlankLineConfig, emitter: (v: V, k: K, position: ForEachPosition) => void ): boolean { const { position, count } = getBlankLineConfig(blankLineConfig); - const interposing = ["interposing", "leading-and-interposing"].indexOf(position) >= 0; - const leading = ["leading", "leading-and-interposing"].indexOf(position) >= 0; + const interposing = ["interposing", "leading-and-interposing"].includes(position); + const leading = ["leading", "leading-and-interposing"].includes(position); return this.forEach(iterable, interposing ? count : 0, leading ? count : 0, emitter); } - indent(fn: () => void): void { + // FIXME: make protected once JavaDateTimeRenderer is refactored + public indent(fn: () => void): void { this.changeIndent(1); fn(); this.changeIndent(-1); @@ -295,7 +308,7 @@ export abstract class Renderer { protected abstract setUpNaming(): Iterable; protected abstract emitSource(givenOutputFilename: string): void; - private assignNames(): ReadonlyMap { + protected assignNames(): ReadonlyMap { return assignNames(this.setUpNaming()); } @@ -323,19 +336,21 @@ export abstract class Renderer { this._emitContext = new EmitContext(); } - render(givenOutputFilename: string): RenderResult { + public render(givenOutputFilename: string): RenderResult { this._names = this.assignNames(); this.emitSource(givenOutputFilename); if (!this._emitContext.isEmpty) { this.finishFile(givenOutputFilename); } + return { sources: this._finishedFiles, names: this._names }; } - get names(): ReadonlyMap { + public get names(): ReadonlyMap { if (this._names === undefined) { return panic("Names accessed before they were assigned"); } + return this._names; } } diff --git a/packages/quicktype-core/src/RendererOptions.ts b/packages/quicktype-core/src/RendererOptions.ts index 9ef964b42..77f95c228 100644 --- a/packages/quicktype-core/src/RendererOptions.ts +++ b/packages/quicktype-core/src/RendererOptions.ts @@ -1,7 +1,10 @@ -import { assert } from "./support/Support"; -import { messageError } from "./Messages"; +// eslint-disable-next-line @typescript-eslint/no-redeclare import { hasOwnProperty } from "collection-utils"; +import { messageError } from "./Messages"; +import { assert } from "./support/Support"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "./types"; + /** * Primary options show up in the web UI in the "Language" settings tab, * secondary options in "Other". @@ -9,17 +12,17 @@ import { hasOwnProperty } from "collection-utils"; export type OptionKind = "primary" | "secondary"; export interface OptionDefinition { - name: string; - type: StringConstructor | BooleanConstructor; - kind?: OptionKind; - renderer?: boolean; alias?: string; - multiple?: boolean; defaultOption?: boolean; - defaultValue?: any; - typeLabel?: string; + defaultValue?: FixMeOptionsAnyType; description: string; + kind?: OptionKind; legalValues?: string[]; + multiple?: boolean; + name: string; + renderer?: boolean; + type: StringConstructor | BooleanConstructor; + typeLabel?: string; } /** @@ -27,23 +30,24 @@ export interface OptionDefinition { * subclasses, `BooleanOption`, `EnumOption`, or `StringOption`. */ export abstract class Option { - readonly definition: OptionDefinition; + public readonly definition: OptionDefinition; - constructor(definition: OptionDefinition) { + public constructor(definition: OptionDefinition) { definition.renderer = true; this.definition = definition; assert(definition.kind !== undefined, "Renderer option kind must be defined"); } - getValue(values: { [name: string]: any }): T { + public getValue(values: FixMeOptionsType): T { const value = values[this.definition.name]; if (value === undefined) { return this.definition.defaultValue; } + return value; } - get cliDefinitions(): { display: OptionDefinition[]; actual: OptionDefinition[] } { + public get cliDefinitions(): { actual: OptionDefinition[]; display: OptionDefinition[] } { return { actual: [this.definition], display: [this.definition] }; } } @@ -51,14 +55,15 @@ export abstract class Option { export type OptionValueType = O extends Option ? T : never; export type OptionValues = { [P in keyof T]: OptionValueType }; -export function getOptionValues }>( +export function getOptionValues }>( options: T, - untypedOptionValues: { [name: string]: any } + untypedOptionValues: FixMeOptionsType ): OptionValues { - const optionValues: { [name: string]: any } = {}; + const optionValues: FixMeOptionsType = {}; for (const name of Object.getOwnPropertyNames(options)) { optionValues[name] = options[name].getValue(untypedOptionValues); } + return optionValues as OptionValues; } @@ -72,7 +77,7 @@ export class BooleanOption extends Option { * @param defaultValue The default value. * @param kind Whether it's a primary or secondary option. */ - constructor(name: string, description: string, defaultValue: boolean, kind: OptionKind = "primary") { + public constructor(name: string, description: string, defaultValue: boolean, kind: OptionKind = "primary") { super({ name, kind, @@ -82,7 +87,7 @@ export class BooleanOption extends Option { }); } - get cliDefinitions(): { display: OptionDefinition[]; actual: OptionDefinition[] } { + public get cliDefinitions(): { actual: OptionDefinition[]; display: OptionDefinition[] } { const negated = Object.assign({}, this.definition, { name: `no-${this.definition.name}`, defaultValue: !this.definition.defaultValue @@ -97,7 +102,7 @@ export class BooleanOption extends Option { }; } - getValue(values: { [name: string]: any }): boolean { + public getValue(values: FixMeOptionsType): boolean { let value = values[this.definition.name]; if (value === undefined) { value = this.definition.defaultValue; @@ -123,7 +128,7 @@ export class BooleanOption extends Option { } export class StringOption extends Option { - constructor( + public constructor( name: string, description: string, typeLabel: string, @@ -145,16 +150,17 @@ export class StringOption extends Option { export class EnumOption extends Option { private readonly _values: { [name: string]: T }; - constructor( + public constructor( name: string, description: string, - values: [string, T][], + values: Array<[string, T]>, defaultValue: string | undefined = undefined, kind: OptionKind = "primary" ) { if (defaultValue === undefined) { defaultValue = values[0][0]; } + const definition = { name, kind, @@ -172,14 +178,16 @@ export class EnumOption extends Option { } } - getValue(values: { [name: string]: any }): T { + public getValue(values: FixMeOptionsType): T { let name: string = values[this.definition.name]; if (name === undefined) { name = this.definition.defaultValue; } + if (!hasOwnProperty(this._values, name)) { return messageError("RendererUnknownOptionValue", { value: name, name: this.definition.name }); } + return this._values[name]; } } diff --git a/packages/quicktype-core/src/Run.ts b/packages/quicktype-core/src/Run.ts index 195417cb9..dac66c17e 100644 --- a/packages/quicktype-core/src/Run.ts +++ b/packages/quicktype-core/src/Run.ts @@ -1,43 +1,48 @@ import { mapFirst } from "collection-utils"; -import * as targetLanguages from "./language/All"; -import { TargetLanguage, MultiFileRenderResult } from "./TargetLanguage"; -import { SerializedRenderResult, Annotation, Location, Span } from "./Source"; -import { assert } from "./support/Support"; -import { combineClasses } from "./rewrites/CombineClasses"; -import { inferMaps } from "./rewrites/InferMaps"; -import { TypeBuilder, StringTypeMapping } from "./TypeBuilder"; -import { TypeGraph, noneToAny, optionalToNullable, removeIndirectionIntersections } from "./TypeGraph"; import { initTypeNames } from "./attributes/TypeNames"; import { gatherNames } from "./GatherNames"; +import { InputData } from "./input/Inputs"; +import * as targetLanguages from "./language/All"; +import { makeTransformations } from "./MakeTransformations"; +import { messageError } from "./Messages"; +import { combineClasses } from "./rewrites/CombineClasses"; import { expandStrings } from "./rewrites/ExpandStrings"; +import { flattenStrings } from "./rewrites/FlattenStrings"; import { flattenUnions } from "./rewrites/FlattenUnions"; -import { resolveIntersections } from "./rewrites/ResolveIntersections"; +import { inferMaps } from "./rewrites/InferMaps"; import { replaceObjectType } from "./rewrites/ReplaceObjectType"; -import { messageError } from "./Messages"; -import { InputData } from "./input/Inputs"; -import { flattenStrings } from "./rewrites/FlattenStrings"; -import { makeTransformations } from "./MakeTransformations"; -import { TransformedStringTypeKind } from "./Type"; +import { resolveIntersections } from "./rewrites/ResolveIntersections"; +import { type Annotation, type Location, type SerializedRenderResult, type Span } from "./Source"; import { type Comment } from "./support/Comments"; +import { assert } from "./support/Support"; +import { type MultiFileRenderResult, type TargetLanguage } from "./TargetLanguage"; +import { type TransformedStringTypeKind } from "./Type"; +import { type StringTypeMapping, TypeBuilder } from "./TypeBuilder"; +import { type TypeGraph, noneToAny, optionalToNullable, removeIndirectionIntersections } from "./TypeGraph"; +import { type FixMeOptionsType } from "./types"; export function getTargetLanguage(nameOrInstance: string | TargetLanguage): TargetLanguage { if (typeof nameOrInstance === "object") { return nameOrInstance; } + const language = targetLanguages.languageNamed(nameOrInstance); if (language !== undefined) { return language; } + return messageError("DriverUnknownOutputLanguage", { lang: nameOrInstance }); } -export type RendererOptions = { [name: string]: string | boolean }; +export interface RendererOptions { + [name: string]: string | boolean; +} export interface InferenceFlag { description: string; - negationDescription: string; explanation: string; + negationDescription: string; order: number; stringType?: TransformedStringTypeKind; } @@ -117,57 +122,57 @@ export type InferenceFlags = { [F in InferenceFlagName]: boolean }; * The options type for the main quicktype entry points, * `quicktypeMultiFile` and `quicktype`. */ -export type NonInferenceOptions = { - /** - * The target language for which to produce code. This can be either an instance of `TargetLanguage`, - * or a string specifying one of the names for quicktype's built-in target languages. For example, - * both `cs` and `csharp` will generate C#. - */ - lang: string | TargetLanguage; - /** The input data from which to produce types */ - inputData: InputData; - /** Put class properties in alphabetical order, instead of in the order found in the JSON */ - alphabetizeProperties: boolean; +export interface NonInferenceOptions { /** Make all class property optional */ allPropertiesOptional: boolean; + /** Put class properties in alphabetical order, instead of in the order found in the JSON */ + alphabetizeProperties: boolean; + /** Check that we're propagating all type attributes (unless we actually can't) */ + checkProvenance: boolean; /** - * Make top-levels classes from JSON fixed. That means even if two top-level classes are exactly - * the same, quicktype will still generate two separate types for them. - */ - fixedTopLevels: boolean; - /** Don't render output. This is mainly useful for benchmarking. */ - noRender: boolean; - /** If given, output these comments at the beginning of the main output file */ - leadingComments?: Comment[]; - /** Options for the target language's renderer */ - rendererOptions: RendererOptions; - /** String to use for one indentation level. If not given, use the target language's default. */ - indentation: string | undefined; - /** Name of the output file. Note that quicktype will not write that file, but you'll get its name - * back as a key in the resulting `Map`. + * Print name gathering debug information to the console. This might help to figure out why + * your types get weird names, but the output is quite arcane. */ - outputFilename: string; + debugPrintGatherNames: boolean; /** Print the type graph to the console at every processing step */ debugPrintGraph: boolean; - /** Check that we're propagating all type attributes (unless we actually can't) */ - checkProvenance: boolean; /** * Print type reconstitution debug information to the console. You'll only ever need this if * you're working deep inside quicktype-core. */ debugPrintReconstitution: boolean; - /** - * Print name gathering debug information to the console. This might help to figure out why - * your types get weird names, but the output is quite arcane. - */ - debugPrintGatherNames: boolean; - /** Print all transformations to the console prior to generating code */ - debugPrintTransformations: boolean; - /** Print the time it took for each pass to run */ - debugPrintTimes: boolean; /** Print schema resolving steps */ debugPrintSchemaResolving: boolean; -}; + /** Print the time it took for each pass to run */ + debugPrintTimes: boolean; + /** Print all transformations to the console prior to generating code */ + debugPrintTransformations: boolean; + /** + * Make top-levels classes from JSON fixed. That means even if two top-level classes are exactly + * the same, quicktype will still generate two separate types for them. + */ + fixedTopLevels: boolean; + /** String to use for one indentation level. If not given, use the target language's default. */ + indentation: string | undefined; + /** The input data from which to produce types */ + inputData: InputData; + /** + * The target language for which to produce code. This can be either an instance of `TargetLanguage`, + * or a string specifying one of the names for quicktype's built-in target languages. For example, + * both `cs` and `csharp` will generate C#. + */ + lang: string | TargetLanguage; + /** If given, output these comments at the beginning of the main output file */ + leadingComments?: Comment[]; + /** Don't render output. This is mainly useful for benchmarking. */ + noRender: boolean; + /** Name of the output file. Note that quicktype will not write that file, but you'll get its name + * back as a key in the resulting `Map`. + */ + outputFilename: string; + /** Options for the target language's renderer */ + rendererOptions: RendererOptions; +} export type Options = NonInferenceOptions & InferenceFlags; @@ -192,19 +197,19 @@ const defaultOptions: NonInferenceOptions = { }; export interface RunContext { - stringTypeMapping: StringTypeMapping; debugPrintReconstitution: boolean; - debugPrintTransformations: boolean; debugPrintSchemaResolving: boolean; + debugPrintTransformations: boolean; + stringTypeMapping: StringTypeMapping; - timeSync(name: string, f: () => Promise): Promise; - time(name: string, f: () => T): T; + time: (name: string, f: () => T) => T; + timeSync: (name: string, f: () => Promise) => Promise; } interface GraphInputs { - targetLanguage: TargetLanguage; - stringTypeMapping: StringTypeMapping; conflateNumbers: boolean; + stringTypeMapping: StringTypeMapping; + targetLanguage: TargetLanguage; typeBuilder: TypeBuilder; } @@ -213,6 +218,7 @@ function makeDefaultInferenceFlags(): InferenceFlags { for (const flag of inferenceFlagNames) { flags[flag] = true; } + return flags; } @@ -221,19 +227,19 @@ export const defaultInferenceFlags = makeDefaultInferenceFlags(); class Run implements RunContext { private readonly _options: Options; - constructor(options: Partial) { + public constructor(options: Partial) { // We must not overwrite defaults with undefined values, which // we sometimes get. this._options = Object.assign({}, defaultOptions, defaultInferenceFlags); for (const k of Object.getOwnPropertyNames(options)) { - const v = (options as any)[k]; + const v = (options as FixMeOptionsType)[k]; if (v !== undefined) { - (this._options as any)[k] = v; + (this._options as FixMeOptionsType)[k] = v; } } } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const targetLanguage = getTargetLanguage(this._options.lang); const mapping = new Map(targetLanguage.stringTypeMapping); for (const flag of inferenceFlagNames) { @@ -242,38 +248,41 @@ class Run implements RunContext { mapping.set(stringType, "string"); } } + return mapping; } - get debugPrintReconstitution(): boolean { + public get debugPrintReconstitution(): boolean { return this._options.debugPrintReconstitution === true; } - get debugPrintTransformations(): boolean { + public get debugPrintTransformations(): boolean { return this._options.debugPrintTransformations; } - get debugPrintSchemaResolving(): boolean { + public get debugPrintSchemaResolving(): boolean { return this._options.debugPrintSchemaResolving; } - async timeSync(name: string, f: () => Promise): Promise { + public async timeSync(name: string, f: () => Promise): Promise { const start = Date.now(); const result = await f(); const end = Date.now(); if (this._options.debugPrintTimes) { console.log(`${name} took ${end - start}ms`); } + return result; } - time(name: string, f: () => T): T { + public time(name: string, f: () => T): T { const start = Date.now(); const result = f(); const end = Date.now(); if (this._options.debugPrintTimes) { console.log(`${name} took ${end - start}ms`); } + return result; } @@ -361,6 +370,7 @@ class Run implements RunContext { )) ); } + if (!unionsDone) { this.time( "flatten unions", @@ -436,6 +446,7 @@ class Run implements RunContext { if (newGraph === graph) { break; } + graph = newGraph; } } @@ -502,6 +513,7 @@ class Run implements RunContext { if (this._options.debugPrintGraph) { console.log("\n# gather names"); } + this.time("gather names", () => gatherNames(graph, !allInputs.needSchemaProcessing, this._options.debugPrintGatherNames) ); @@ -513,10 +525,9 @@ class Run implements RunContext { } private makeSimpleTextResult(lines: string[]): MultiFileRenderResult { - return new Map([[this._options.outputFilename, { lines, annotations: [] }]] as [ - string, - SerializedRenderResult - ][]); + return new Map([[this._options.outputFilename, { lines, annotations: [] }]] as Array< + [string, SerializedRenderResult] + >); } private preRun(): MultiFileRenderResult | [InputData, TargetLanguage] { @@ -525,7 +536,7 @@ class Run implements RunContext { const targetLanguage = getTargetLanguage(this._options.lang); const inputData = this._options.inputData; - const needIR = inputData.needIR || targetLanguage.names.indexOf("schema") < 0; + const needIR = inputData.needIR || !targetLanguage.names.includes("schema"); const schemaString = needIR ? undefined : inputData.singleStringSchemaSource(); if (schemaString !== undefined) { @@ -538,7 +549,7 @@ class Run implements RunContext { return [inputData, targetLanguage]; } - async run(): Promise { + public async run(): Promise { const preRunResult = this.preRun(); if (!Array.isArray(preRunResult)) { return preRunResult; @@ -551,7 +562,7 @@ class Run implements RunContext { return this.renderGraph(targetLanguage, graph); } - runSync(): MultiFileRenderResult { + public runSync(): MultiFileRenderResult { const preRunResult = this.preRun(); if (!Array.isArray(preRunResult)) { return preRunResult; @@ -613,8 +624,10 @@ export function combineRenderResults(result: MultiFileRenderResult): SerializedR if (first === undefined) { return { lines: [], annotations: [] }; } + return first; } + let lines: string[] = []; let annotations: Annotation[] = []; for (const [filename, srr] of result) { @@ -624,6 +637,7 @@ export function combineRenderResults(result: MultiFileRenderResult): SerializedR srr.annotations.map(ann => ({ annotation: ann.annotation, span: offsetSpan(ann.span, offset) })) ); } + return { lines, annotations }; } diff --git a/packages/quicktype-core/src/Source.ts b/packages/quicktype-core/src/Source.ts index 6898480af..fcf004546 100644 --- a/packages/quicktype-core/src/Source.ts +++ b/packages/quicktype-core/src/Source.ts @@ -1,9 +1,9 @@ import { arrayIntercalate, iterableMax, withDefault } from "collection-utils"; -import { AnnotationData } from "./Annotation"; +import { type AnnotationData } from "./Annotation"; import { Name } from "./Naming"; -import { defined, assertNever, panic, assert } from "./support/Support"; import { repeatString } from "./support/Strings"; +import { assert, assertNever, defined, panic } from "./support/Support"; export type Source = | TextSource @@ -20,28 +20,28 @@ export interface TextSource { } export interface NewlineSource { - kind: "newline"; // Number of indentation levels (not spaces!) to change // the rest of the source by. Positive numbers mean // indent more, negative mean indent less. The most // common value will be zero, for no change in // indentation. indentationChange: number; + kind: "newline"; } export interface SequenceSource { kind: "sequence"; - sequence: ReadonlyArray; + sequence: readonly Source[]; } export interface TableSource { kind: "table"; - table: ReadonlyArray>; + table: ReadonlyArray; } export interface AnnotatedSource { - kind: "annotated"; annotation: AnnotationData; + kind: "annotated"; source: Source; } @@ -63,7 +63,7 @@ export function newline(): NewlineSource { } export type Sourcelike = Source | string | Name | SourcelikeArray; -export interface SourcelikeArray extends Array {} +export type SourcelikeArray = Sourcelike[]; export function sourcelikeToSource(sl: Sourcelike): Source { if (sl instanceof Array) { @@ -72,22 +72,26 @@ export function sourcelikeToSource(sl: Sourcelike): Source { sequence: sl.map(sourcelikeToSource) }; } + if (typeof sl === "string") { const lines = sl.split("\n"); if (lines.length === 1) { return { kind: "text", text: sl }; } + return { kind: "sequence", sequence: arrayIntercalate( newline(), - lines.map((l: string) => ({ kind: "text", text: l } as Source)) + lines.map((l: string) => ({ kind: "text", text: l }) as Source) ) }; } + if (sl instanceof Name) { return { kind: "name", named: sl }; } + return sl; } @@ -103,6 +107,7 @@ export function maybeAnnotated(doAnnotate: boolean, annotation: AnnotationData, if (!doAnnotate) { return sl; } + return annotated(annotation, sl); } @@ -115,14 +120,14 @@ export function modifySource(modifier: (serialized: string) => string, sl: Sourc } export interface Location { + column: number; // Both of these are zero-based. line: number; - column: number; } export interface Span { - start: Location; end: Location; + start: Location; } export interface Annotation { @@ -131,8 +136,8 @@ export interface Annotation { } export interface SerializedRenderResult { + annotations: readonly Annotation[]; lines: string[]; - annotations: ReadonlyArray; } function sourceLineLength(source: Source, names: ReadonlyMap): number { @@ -206,6 +211,7 @@ export function serializeRenderResult( for (const s of source.sequence) { serializeToStringArray(s); } + break; case "table": const t = source.table; @@ -218,6 +224,7 @@ export function serializeRenderResult( for (let i = 0; i < numColumns; i++) { columnWidths.push(defined(iterableMax(widths.map(l => withDefault(l[i], 0))))); } + for (let y = 0; y < numRows; y++) { indentIfNeeded(); const row = defined(t[y]); @@ -231,11 +238,13 @@ export function serializeRenderResult( currentLine.push(repeatString(" ", colWidth - srcWidth)); } } + if (y < numRows - 1) { finishLine(); indentNeeded = indent; } } + break; case "annotated": const start = currentLocation(); @@ -264,10 +273,10 @@ export function serializeRenderResult( return { lines, annotations: annotations }; } -export type MultiWord = { - source: Sourcelike; +export interface MultiWord { needsParens: boolean; -}; + source: Sourcelike; +} export function singleWord(...source: Sourcelike[]): MultiWord { return { source, needsParens: false }; @@ -278,11 +287,13 @@ export function multiWord(separator: Sourcelike, ...words: Sourcelike[]): MultiW if (words.length === 1) { return singleWord(words[0]); } + const items: Sourcelike[] = []; for (let i = 0; i < words.length; i++) { if (i > 0) items.push(separator); items.push(words[i]); } + return { source: items, needsParens: true }; } @@ -290,5 +301,6 @@ export function parenIfNeeded({ source, needsParens }: MultiWord): Sourcelike { if (needsParens) { return ["(", source, ")"]; } + return source; } diff --git a/packages/quicktype-core/src/TargetLanguage.ts b/packages/quicktype-core/src/TargetLanguage.ts index f1c3a90bf..19f6bfea7 100644 --- a/packages/quicktype-core/src/TargetLanguage.ts +++ b/packages/quicktype-core/src/TargetLanguage.ts @@ -1,63 +1,67 @@ import { mapMap } from "collection-utils"; -import { TypeGraph } from "./TypeGraph"; -import { Renderer, RenderContext } from "./Renderer"; -import { OptionDefinition, Option } from "./RendererOptions"; -import { serializeRenderResult, SerializedRenderResult } from "./Source"; -import { StringTypeMapping } from "./TypeBuilder"; -import { defined } from "./support/Support"; import { ConvenienceRenderer } from "./ConvenienceRenderer"; -import { Type } from "./Type"; -import { DateTimeRecognizer, DefaultDateTimeRecognizer } from "./DateTime"; +import { type DateTimeRecognizer, DefaultDateTimeRecognizer } from "./DateTime"; +import { type RenderContext, type Renderer } from "./Renderer"; +import { type Option, type OptionDefinition } from "./RendererOptions"; +import { type SerializedRenderResult, serializeRenderResult } from "./Source"; import { type Comment } from "./support/Comments"; +import { defined } from "./support/Support"; +import { type Type } from "./Type"; +import { type StringTypeMapping } from "./TypeBuilder"; +import { type TypeGraph } from "./TypeGraph"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "./types"; export type MultiFileRenderResult = ReadonlyMap; export abstract class TargetLanguage { - constructor( - readonly displayName: string, - readonly names: string[], - readonly extension: string + public constructor( + public readonly displayName: string, + public readonly names: string[], + public readonly extension: string ) {} - protected abstract getOptions(): Option[]; + protected abstract getOptions(): Array>; - get optionDefinitions(): OptionDefinition[] { + public get optionDefinitions(): OptionDefinition[] { return this.getOptions().map(o => o.definition); } - get cliOptionDefinitions(): { display: OptionDefinition[]; actual: OptionDefinition[] } { + public get cliOptionDefinitions(): { actual: OptionDefinition[]; display: OptionDefinition[] } { let actual: OptionDefinition[] = []; let display: OptionDefinition[] = []; for (const { cliDefinitions } of this.getOptions()) { actual = actual.concat(cliDefinitions.actual); display = display.concat(cliDefinitions.display); } + return { actual, display }; } - get name(): string { + public get name(): string { return defined(this.names[0]); } - protected abstract makeRenderer(renderContext: RenderContext, optionValues: { [name: string]: any }): Renderer; + protected abstract makeRenderer(renderContext: RenderContext, optionValues: FixMeOptionsType): Renderer; - renderGraphAndSerialize( + public renderGraphAndSerialize( typeGraph: TypeGraph, givenOutputFilename: string, alphabetizeProperties: boolean, leadingComments: Comment[] | undefined, - rendererOptions: { [name: string]: any }, + rendererOptions: FixMeOptionsType, indentation?: string ): MultiFileRenderResult { if (indentation === undefined) { indentation = this.defaultIndentation; } + const renderContext = { typeGraph, leadingComments }; const renderer = this.makeRenderer(renderContext, rendererOptions); - if ((renderer as any).setAlphabetizeProperties !== undefined) { - (renderer as ConvenienceRenderer).setAlphabetizeProperties(alphabetizeProperties); + if (renderer instanceof ConvenienceRenderer) { + renderer.setAlphabetizeProperties(alphabetizeProperties); } + const renderResult = renderer.render(givenOutputFilename); return mapMap(renderResult.sources, s => serializeRenderResult(s, renderResult.names, defined(indentation))); } @@ -66,27 +70,27 @@ export abstract class TargetLanguage { return " "; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { return new Map(); } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return false; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return false; } - get supportsFullObjectType(): boolean { + public get supportsFullObjectType(): boolean { return false; } - needsTransformerForType(_t: Type): boolean { + public needsTransformerForType(_t: Type): boolean { return false; } - get dateTimeRecognizer(): DateTimeRecognizer { + public get dateTimeRecognizer(): DateTimeRecognizer { return new DefaultDateTimeRecognizer(); } } diff --git a/packages/quicktype-core/src/Transformers.ts b/packages/quicktype-core/src/Transformers.ts index e64752358..d6bbb49f7 100644 --- a/packages/quicktype-core/src/Transformers.ts +++ b/packages/quicktype-core/src/Transformers.ts @@ -1,25 +1,26 @@ import { - setUnionInto, + addHashCode, areEqual, - hashCodeOf, + arraySortByInto, definedMap, - addHashCode, definedMapWithDefault, - arraySortByInto, - hashString + hashCodeOf, + hashString, + setUnionInto } from "collection-utils"; -import { UnionType, Type, EnumType, PrimitiveType, TypeKind } from "./Type"; import { TypeAttributeKind } from "./attributes/TypeAttributes"; -import { panic, assert, indentationString } from "./support/Support"; -import { BaseGraphRewriteBuilder } from "./GraphRewriting"; -import { TypeRef, derefTypeRef, TypeGraph } from "./TypeGraph"; +import { type BaseGraphRewriteBuilder } from "./GraphRewriting"; +import { assert, indentationString, panic } from "./support/Support"; +import { EnumType, PrimitiveType, type Type, type TypeKind, UnionType } from "./Type"; +import { type TypeGraph, type TypeRef, derefTypeRef } from "./TypeGraph"; function debugStringForType(t: Type): string { const target = followTargetType(t); if (t === target) { return t.kind; } + return `${t.kind} (${target.kind})`; } @@ -28,33 +29,36 @@ function getNumberOfNodes(xfer: Transformer | undefined): number { } export abstract class Transformer { - constructor(readonly kind: string, protected readonly graph: TypeGraph, readonly sourceTypeRef: TypeRef) {} + public constructor( + public readonly kind: string, + protected readonly graph: TypeGraph, + public readonly sourceTypeRef: TypeRef + ) {} - get sourceType(): Type { + public get sourceType(): Type { return derefTypeRef(this.sourceTypeRef, this.graph); } /** This must return a newly constructed set. */ - getChildren(): Set { + public getChildren(): Set { return new Set([this.sourceType]); } - getNumberOfNodes(): number { + public getNumberOfNodes(): number { return 1; } - abstract get canFail(): boolean; + public abstract get canFail(): boolean; - abstract reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer; + public abstract reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer; - abstract reconstitute(builder: TBuilder): Transformer; + public abstract reconstitute(builder: TBuilder): Transformer; - equals(other: any): boolean { - if (!(other instanceof Transformer)) return false; + public equals(other: T): boolean { return this.sourceTypeRef === other.sourceTypeRef; } - hashCode(): number { + public hashCode(): number { return hashCodeOf(this.sourceTypeRef); } @@ -66,34 +70,39 @@ export abstract class Transformer { return; } - debugPrint(indent: number): void { + public debugPrint(indent: number): void { console.log(indentationString(indent) + this.debugDescription()); this.debugPrintContinuations(indent + 1); } } export abstract class ProducerTransformer extends Transformer { - constructor(kind: string, graph: TypeGraph, sourceTypeRef: TypeRef, readonly consumer: Transformer | undefined) { + public constructor( + kind: string, + graph: TypeGraph, + sourceTypeRef: TypeRef, + public readonly consumer: Transformer | undefined + ) { super(kind, graph, sourceTypeRef); } - getChildren(): Set { + public getChildren(): Set { const children = super.getChildren(); if (this.consumer === undefined) return children; return setUnionInto(children, this.consumer.getChildren()); } - getNumberOfNodes(): number { + public getNumberOfNodes(): number { return super.getNumberOfNodes() + getNumberOfNodes(this.consumer); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ProducerTransformer)) return false; return areEqual(this.consumer, other.consumer); } - hashCode(): number { + public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.consumer)); } @@ -105,25 +114,30 @@ export abstract class ProducerTransformer extends Transformer { } export abstract class MatchTransformer extends Transformer { - constructor(kind: string, graph: TypeGraph, sourceTypeRef: TypeRef, readonly transformer: Transformer) { + public constructor( + kind: string, + graph: TypeGraph, + sourceTypeRef: TypeRef, + public readonly transformer: Transformer + ) { super(kind, graph, sourceTypeRef); } - getChildren(): Set { + public getChildren(): Set { return setUnionInto(super.getChildren(), this.transformer.getChildren()); } - getNumberOfNodes(): number { + public getNumberOfNodes(): number { return super.getNumberOfNodes() + this.transformer.getNumberOfNodes(); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof MatchTransformer)) return false; return this.transformer.equals(other.transformer); } - hashCode(): number { + public hashCode(): number { const h = super.hashCode(); return addHashCode(h, this.transformer.hashCode()); } @@ -134,15 +148,15 @@ export abstract class MatchTransformer extends Transformer { } export class DecodingTransformer extends ProducerTransformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { + public constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { super("decode", graph, sourceTypeRef, consumer); } - get canFail(): boolean { + public get canFail(): boolean { return false; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (continuationTransformer !== undefined) { return panic("Reversing a decoding transformer cannot have a continuation"); } @@ -157,7 +171,7 @@ export class DecodingTransformer extends ProducerTransformer { } } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new DecodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -165,30 +179,30 @@ export class DecodingTransformer extends ProducerTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof DecodingTransformer; } } export class EncodingTransformer extends Transformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef) { + public constructor(graph: TypeGraph, sourceTypeRef: TypeRef) { super("encode", graph, sourceTypeRef); } - get canFail(): boolean { + public get canFail(): boolean { return false; } - reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { + public reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { return panic("Can't reverse encoding transformer"); } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new EncodingTransformer(builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef)); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof EncodingTransformer)) return false; return true; @@ -196,35 +210,35 @@ export class EncodingTransformer extends Transformer { } export class ArrayDecodingTransformer extends ProducerTransformer { - constructor( + public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, private readonly _itemTargetTypeRef: TypeRef, - readonly itemTransformer: Transformer + public readonly itemTransformer: Transformer ) { super("decode-array", graph, sourceTypeRef, consumer); } - getChildren(): Set { + public getChildren(): Set { const children = super.getChildren(); children.add(this.itemTargetType); return setUnionInto(children, this.itemTransformer.getChildren()); } - getNumberOfNodes(): number { + public getNumberOfNodes(): number { return super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes(); } - get canFail(): boolean { + public get canFail(): boolean { return false; } - get itemTargetType(): Type { + public get itemTargetType(): Type { return derefTypeRef(this._itemTargetTypeRef, this.graph); } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (continuationTransformer !== undefined) { return panic("Reversing a decoding transformer cannot have a continuation"); } @@ -251,7 +265,7 @@ export class ArrayDecodingTransformer extends ProducerTransformer { } } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new ArrayDecodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -261,14 +275,14 @@ export class ArrayDecodingTransformer extends ProducerTransformer { ); } - hashCode(): number { + public hashCode(): number { let h = super.hashCode(); h = addHashCode(h, hashCodeOf(this._itemTargetTypeRef)); h = addHashCode(h, this.itemTransformer.hashCode()); return h; } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ArrayDecodingTransformer)) return false; if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) return false; @@ -282,38 +296,38 @@ export class ArrayDecodingTransformer extends ProducerTransformer { } export class ArrayEncodingTransformer extends Transformer { - constructor( + public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, private readonly _itemTargetTypeRef: TypeRef, - readonly itemTransformer: Transformer + public readonly itemTransformer: Transformer ) { super("encode-array", graph, sourceTypeRef); } - getChildren(): Set { + public getChildren(): Set { const children = super.getChildren(); children.add(this.itemTargetType); return setUnionInto(children, this.itemTransformer.getChildren()); } - getNumberOfNodes(): number { + public getNumberOfNodes(): number { return super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes(); } - get canFail(): boolean { + public get canFail(): boolean { return false; } - get itemTargetType(): Type { + public get itemTargetType(): Type { return derefTypeRef(this._itemTargetTypeRef, this.graph); } - reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { + public reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { return panic("Can't reverse array encoding transformer"); } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new ArrayEncodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -322,13 +336,13 @@ export class ArrayEncodingTransformer extends Transformer { ); } - hashCode(): number { + public hashCode(): number { let h = super.hashCode(); h = addHashCode(h, hashCodeOf(this._itemTargetTypeRef)); return addHashCode(h, this.itemTransformer.hashCode()); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ArrayEncodingTransformer)) return false; if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) return false; @@ -342,32 +356,38 @@ export class ArrayEncodingTransformer extends Transformer { } export class ChoiceTransformer extends Transformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef, public readonly transformers: ReadonlyArray) { + public constructor( + graph: TypeGraph, + sourceTypeRef: TypeRef, + public readonly transformers: readonly Transformer[] + ) { super("choice", graph, sourceTypeRef); assert(transformers.length > 0, "Choice must have at least one transformer"); } - getChildren(): Set { + public getChildren(): Set { let children = super.getChildren(); for (const xfer of this.transformers) { setUnionInto(children, xfer.getChildren()); } + return children; } - getNumberOfNodes(): number { + public getNumberOfNodes(): number { let n = 0; for (const xfer of this.transformers) { n += xfer.getNumberOfNodes(); } + return super.getNumberOfNodes() + n; } - get canFail(): boolean { + public get canFail(): boolean { return this.transformers.some(xfer => xfer.canFail); } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { const transformers = this.transformers.map(xfer => xfer.reverse(targetTypeRef, continuationTransformer)); if (transformers.every(xfer => xfer instanceof UnionMemberMatchTransformer)) { const memberMatchers = transformers as UnionMemberMatchTransformer[]; @@ -382,10 +402,11 @@ export class ChoiceTransformer extends Transformer { ); } } + return new ChoiceTransformer(this.graph, targetTypeRef, transformers); } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new ChoiceTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -393,13 +414,13 @@ export class ChoiceTransformer extends Transformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ChoiceTransformer)) return false; return areEqual(this.transformers, other.transformers); } - hashCode(): number { + public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.transformers)); } @@ -412,23 +433,23 @@ export class ChoiceTransformer extends Transformer { } export class DecodingChoiceTransformer extends Transformer { - constructor( + public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, - readonly nullTransformer: Transformer | undefined, - readonly integerTransformer: Transformer | undefined, - readonly doubleTransformer: Transformer | undefined, - readonly boolTransformer: Transformer | undefined, - readonly stringTransformer: Transformer | undefined, - readonly arrayTransformer: Transformer | undefined, - readonly objectTransformer: Transformer | undefined + public readonly nullTransformer: Transformer | undefined, + public readonly integerTransformer: Transformer | undefined, + public readonly doubleTransformer: Transformer | undefined, + public readonly boolTransformer: Transformer | undefined, + public readonly stringTransformer: Transformer | undefined, + public readonly arrayTransformer: Transformer | undefined, + public readonly objectTransformer: Transformer | undefined ) { super("decoding-choice", graph, sourceTypeRef); } - get transformers(): ReadonlyArray { + public get transformers(): readonly Transformer[] { const transformers: Transformer[] = []; - function add(xfer: Transformer | undefined) { + function add(xfer: Transformer | undefined): void { if (xfer === undefined) return; transformers.push(xfer); } @@ -444,27 +465,29 @@ export class DecodingChoiceTransformer extends Transformer { return transformers; } - getChildren(): Set { + public getChildren(): Set { let children = super.getChildren(); for (const xfer of this.transformers) { setUnionInto(children, xfer.getChildren()); } + return children; } - getNumberOfNodes(): number { + public getNumberOfNodes(): number { let n = super.getNumberOfNodes(); for (const xfer of this.transformers) { n += getNumberOfNodes(xfer); } + return n; } - get canFail(): boolean { + public get canFail(): boolean { return false; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { assert( continuationTransformer === undefined, "Reversing a decoding transformer can't have a target transformer" @@ -473,7 +496,7 @@ export class DecodingChoiceTransformer extends Transformer { let transformers = new Map(); let memberMatchTransformers = new Map(); - function addCase(reversed: Transformer) { + function addCase(reversed: Transformer): void { if (reversed instanceof UnionMemberMatchTransformer) { const memberType = reversed.memberType; let arr = memberMatchTransformers.get(memberType); @@ -481,6 +504,7 @@ export class DecodingChoiceTransformer extends Transformer { arr = []; memberMatchTransformers.set(memberType, arr); } + arr.push(reversed); } else { const kind = reversed.sourceType.kind; @@ -489,19 +513,21 @@ export class DecodingChoiceTransformer extends Transformer { arr = []; transformers.set(kind, arr); } + arr.push(reversed); } } - function reverseAndAdd(transformer: Transformer) { + function reverseAndAdd(transformer: Transformer): void { const reversed = transformer.reverse(targetTypeRef, undefined); - let cases: ReadonlyArray = []; + let cases: readonly Transformer[] = []; // Flatten nested ChoiceTransformers if (reversed instanceof ChoiceTransformer) { cases = reversed.transformers; } else { cases = [reversed]; } + for (const xfer of cases) { addCase(xfer); } @@ -551,8 +577,8 @@ export class DecodingChoiceTransformer extends Transformer { return new ChoiceTransformer(this.graph, targetTypeRef, resultingTransformers); } - reconstitute(builder: TBuilder): Transformer { - function reconstitute(xf: Transformer | undefined) { + public reconstitute(builder: TBuilder): Transformer { + function reconstitute(xf: Transformer | undefined): Transformer | undefined { if (xf === undefined) return undefined; return xf.reconstitute(builder); } @@ -570,7 +596,7 @@ export class DecodingChoiceTransformer extends Transformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof DecodingChoiceTransformer)) return false; if (!areEqual(this.nullTransformer, other.nullTransformer)) return false; @@ -583,7 +609,7 @@ export class DecodingChoiceTransformer extends Transformer { return true; } - hashCode(): number { + public hashCode(): number { let h = super.hashCode(); h = addHashCode(h, hashCodeOf(this.nullTransformer)); h = addHashCode(h, hashCodeOf(this.integerTransformer)); @@ -603,35 +629,41 @@ export class DecodingChoiceTransformer extends Transformer { } export class UnionMemberMatchTransformer extends MatchTransformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef, transformer: Transformer, readonly memberTypeRef: TypeRef) { + public constructor( + graph: TypeGraph, + sourceTypeRef: TypeRef, + transformer: Transformer, + public readonly memberTypeRef: TypeRef + ) { super("union-member-match", graph, sourceTypeRef, transformer); } - get sourceType(): UnionType { + public get sourceType(): UnionType { const t = derefTypeRef(this.sourceTypeRef, this.graph); if (!(t instanceof UnionType)) { return panic("The source of a union member match transformer must be a union type"); } + return t; } - get canFail(): boolean { + public get canFail(): boolean { return true; } - get memberType(): Type { + public get memberType(): Type { return derefTypeRef(this.memberTypeRef, this.graph); } - getChildren(): Set { + public getChildren(): Set { return super.getChildren().add(this.memberType); } - reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { + public reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { return panic("Can't reverse union member match transformer"); } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new UnionMemberMatchTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -640,13 +672,13 @@ export class UnionMemberMatchTransformer extends MatchTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof UnionMemberMatchTransformer)) return false; return this.memberTypeRef === other.memberTypeRef; } - hashCode(): number { + public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.memberTypeRef)); } @@ -660,23 +692,29 @@ export class UnionMemberMatchTransformer extends MatchTransformer { * This matches strings and enum cases. */ export class StringMatchTransformer extends MatchTransformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef, transformer: Transformer, readonly stringCase: string) { + public constructor( + graph: TypeGraph, + sourceTypeRef: TypeRef, + transformer: Transformer, + public readonly stringCase: string + ) { super("string-match", graph, sourceTypeRef, transformer); } - get sourceType(): EnumType | PrimitiveType { + public get sourceType(): EnumType | PrimitiveType { const t = derefTypeRef(this.sourceTypeRef, this.graph); if (!(t instanceof EnumType) && !(t instanceof PrimitiveType && t.kind === "string")) { return panic("The source of a string match transformer must be an enum or string type"); } + return t; } - get canFail(): boolean { + public get canFail(): boolean { return true; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { return this.transformer.reverse( targetTypeRef, new StringProducerTransformer( @@ -688,7 +726,7 @@ export class StringMatchTransformer extends MatchTransformer { ); } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new StringMatchTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -697,13 +735,13 @@ export class StringMatchTransformer extends MatchTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof StringMatchTransformer)) return false; return this.stringCase !== other.stringCase; } - hashCode(): number { + public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashString(this.stringCase)); } @@ -714,15 +752,15 @@ export class StringMatchTransformer extends MatchTransformer { } export class UnionInstantiationTransformer extends Transformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef) { + public constructor(graph: TypeGraph, sourceTypeRef: TypeRef) { super("union-instantiation", graph, sourceTypeRef); } - get canFail(): boolean { + public get canFail(): boolean { return false; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (continuationTransformer === undefined) { return panic("Union instantiation transformer reverse must have a continuation"); } @@ -730,11 +768,11 @@ export class UnionInstantiationTransformer extends Transformer { return new UnionMemberMatchTransformer(this.graph, targetTypeRef, continuationTransformer, this.sourceTypeRef); } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new UnionInstantiationTransformer(builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef)); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof UnionInstantiationTransformer; } @@ -744,15 +782,20 @@ export class UnionInstantiationTransformer extends Transformer { * Produces a string or an enum case. */ export class StringProducerTransformer extends ProducerTransformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, readonly result: string) { + public constructor( + graph: TypeGraph, + sourceTypeRef: TypeRef, + consumer: Transformer | undefined, + public readonly result: string + ) { super("string-producer", graph, sourceTypeRef, consumer); } - get canFail(): boolean { + public get canFail(): boolean { return false; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (continuationTransformer === undefined) { return panic("Reversing a string producer transformer must have a continuation"); } @@ -772,7 +815,7 @@ export class StringProducerTransformer extends ProducerTransformer { } } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new StringProducerTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -781,13 +824,13 @@ export class StringProducerTransformer extends ProducerTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof StringProducerTransformer)) return false; return this.result === other.result; } - hashCode(): number { + public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.consumer)); } @@ -798,15 +841,15 @@ export class StringProducerTransformer extends ProducerTransformer { } export class ParseStringTransformer extends ProducerTransformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { + public constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { super("parse-string", graph, sourceTypeRef, consumer); } - get canFail(): boolean { + public get canFail(): boolean { return true; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (this.consumer === undefined) { return new StringifyTransformer(this.graph, targetTypeRef, continuationTransformer); } else { @@ -817,7 +860,7 @@ export class ParseStringTransformer extends ProducerTransformer { } } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new ParseStringTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -825,22 +868,22 @@ export class ParseStringTransformer extends ProducerTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof ParseStringTransformer; } } export class StringifyTransformer extends ProducerTransformer { - constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { + public constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { super("stringify", graph, sourceTypeRef, consumer); } - get canFail(): boolean { + public get canFail(): boolean { return false; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (this.consumer === undefined) { return new ParseStringTransformer(this.graph, targetTypeRef, continuationTransformer); } else { @@ -851,7 +894,7 @@ export class StringifyTransformer extends ProducerTransformer { } } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new StringifyTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -859,28 +902,28 @@ export class StringifyTransformer extends ProducerTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof StringifyTransformer; } } export class MinMaxLengthCheckTransformer extends ProducerTransformer { - constructor( + public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, - readonly minLength: number | undefined, - readonly maxLength: number | undefined + public readonly minLength: number | undefined, + public readonly maxLength: number | undefined ) { super("min-max-length-check", graph, sourceTypeRef, consumer); } - get canFail(): boolean { + public get canFail(): boolean { return true; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (this.consumer === undefined) { return new MinMaxLengthCheckTransformer( this.graph, @@ -903,7 +946,7 @@ export class MinMaxLengthCheckTransformer extends ProducerTransformer { } } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new MinMaxLengthCheckTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -913,7 +956,7 @@ export class MinMaxLengthCheckTransformer extends ProducerTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; return ( other instanceof MinMaxLengthCheckTransformer && @@ -924,21 +967,21 @@ export class MinMaxLengthCheckTransformer extends ProducerTransformer { } export class MinMaxValueTransformer extends ProducerTransformer { - constructor( + public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, - readonly minimum: number | undefined, - readonly maximum: number | undefined + public readonly minimum: number | undefined, + public readonly maximum: number | undefined ) { super("min-max-value-check", graph, sourceTypeRef, consumer); } - get canFail(): boolean { + public get canFail(): boolean { return true; } - reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { if (this.consumer === undefined) { return new MinMaxValueTransformer( this.graph, @@ -961,7 +1004,7 @@ export class MinMaxValueTransformer extends ProducerTransformer { } } - reconstitute(builder: TBuilder): Transformer { + public reconstitute(builder: TBuilder): Transformer { return new MinMaxValueTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), @@ -971,7 +1014,7 @@ export class MinMaxValueTransformer extends ProducerTransformer { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!super.equals(other)) return false; return ( other instanceof MinMaxValueTransformer && this.minimum === other.minimum && this.maximum === other.maximum @@ -980,21 +1023,21 @@ export class MinMaxValueTransformer extends ProducerTransformer { } export class Transformation { - constructor( + public constructor( private readonly _graph: TypeGraph, private readonly _targetTypeRef: TypeRef, - readonly transformer: Transformer + public readonly transformer: Transformer ) {} - get sourceType(): Type { + public get sourceType(): Type { return this.transformer.sourceType; } - get targetType(): Type { + public get targetType(): Type { return derefTypeRef(this._targetTypeRef, this._graph); } - get reverse(): Transformation { + public get reverse(): Transformation { return new Transformation( this._graph, this.transformer.sourceTypeRef, @@ -1002,11 +1045,11 @@ export class Transformation { ); } - getChildren(): Set { + public getChildren(): Set { return this.transformer.getChildren().add(this.targetType); } - reconstitute(builder: TBuilder): Transformation { + public reconstitute(builder: TBuilder): Transformation { return new Transformation( builder.typeGraph, builder.reconstituteTypeRef(this._targetTypeRef), @@ -1014,45 +1057,48 @@ export class Transformation { ); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!(other instanceof Transformation)) return false; return this._targetTypeRef === other._targetTypeRef && this.transformer.equals(other.transformer); } - hashCode(): number { + public hashCode(): number { let h = hashCodeOf(this._targetTypeRef); h = addHashCode(h, this.transformer.hashCode()); return h; } - debugPrint(): void { + public debugPrint(): void { this.transformer.debugPrint(0); console.log(`-> ${debugStringForType(this.targetType)}`); } } class TransformationTypeAttributeKind extends TypeAttributeKind { - constructor() { + public constructor() { super("transformation"); } - appliesToTypeKind(_kind: TypeKind): boolean { + public appliesToTypeKind(_kind: TypeKind): boolean { return true; } - get inIdentity(): boolean { + public get inIdentity(): boolean { return true; } - children(xf: Transformation): Set { + public children(xf: Transformation): Set { return xf.getChildren(); } - reconstitute(builder: TBuilder, xf: Transformation): Transformation { + public reconstitute( + builder: TBuilder, + xf: Transformation + ): Transformation { return xf.reconstitute(builder); } - stringify(_: Transformation): string { + public stringify(_: Transformation): string { return "transformation"; } } diff --git a/packages/quicktype-core/src/Type.ts b/packages/quicktype-core/src/Type.ts index 7a16f06d3..cdbae768e 100644 --- a/packages/quicktype-core/src/Type.ts +++ b/packages/quicktype-core/src/Type.ts @@ -1,33 +1,35 @@ import { + addHashCode, + areEqual, + definedMap, + // eslint-disable-next-line @typescript-eslint/no-redeclare + hasOwnProperty, + hashCodeInit, + hashCodeOf, iterableEvery, iterableFind, iterableSome, - toReadonlySet, - hashCodeOf, - areEqual, + mapFilter, + mapFromObject, mapMap, - setMap, - mapSortByKey, mapSome, - mapFilter, - setSortBy, + mapSortByKey, + mapSortToArray, setFilter, + setMap, + setSortBy, setUnionInto, - mapSortToArray, - definedMap, - hashCodeInit, - addHashCode, - hasOwnProperty, - mapFromObject + toReadonlySet } from "collection-utils"; -import { defined, panic, assert } from "./support/Support"; -import { TypeReconstituter, BaseGraphRewriteBuilder } from "./GraphRewriting"; -import { TypeNames, namesTypeAttributeKind } from "./attributes/TypeNames"; -import { TypeAttributes } from "./attributes/TypeAttributes"; -import { messageAssert } from "./Messages"; -import { TypeRef, attributesForTypeRef, derefTypeRef, TypeGraph, typeRefIndex } from "./TypeGraph"; +import { type TypeAttributes } from "./attributes/TypeAttributes"; +import { type TypeNames, namesTypeAttributeKind } from "./attributes/TypeNames"; import { uriInferenceAttributesProducer } from "./attributes/URIAttributes"; +import { type BaseGraphRewriteBuilder, type TypeReconstituter } from "./GraphRewriting"; +import { messageAssert } from "./Messages"; +import { assert, defined, panic } from "./support/Support"; +// eslint-disable-next-line import/no-cycle +import { type TypeGraph, type TypeRef, attributesForTypeRef, derefTypeRef, typeRefIndex } from "./TypeGraph"; /** * `jsonSchema` is the `format` to be used to represent this string type in @@ -37,11 +39,11 @@ import { uriInferenceAttributesProducer } from "./attributes/URIAttributes"; * For transformed type kinds that map to an existing primitive type, `primitive` * must specify that type kind. */ -export type TransformedStringTypeTargets = { +export interface TransformedStringTypeTargets { + attributesProducer?: (s: string) => TypeAttributes; jsonSchema: string; primitive: PrimitiveNonStringTypeKind | undefined; - attributesProducer?: (s: string) => TypeAttributes; -}; +} /** * All the transformed string type kinds and the JSON Schema formats and @@ -108,16 +110,21 @@ function triviallyStructurallyCompatible(x: Type, y: Type): boolean { export class TypeIdentity { private readonly _hashCode: number; - constructor(private readonly _kind: TypeKind, private readonly _components: ReadonlyArray) { + public constructor( + private readonly _kind: TypeKind, + // FIXME: strongly type this + private readonly _components: readonly unknown[] + ) { let h = hashCodeInit; h = addHashCode(h, hashCodeOf(this._kind)); for (const c of _components) { h = addHashCode(h, hashCodeOf(c)); } + this._hashCode = h; } - equals(other: any): boolean { + public equals(other: T): boolean { if (!(other instanceof TypeIdentity)) return false; if (this._kind !== other._kind) return false; const n = this._components.length; @@ -125,10 +132,11 @@ export class TypeIdentity { for (let i = 0; i < n; i++) { if (!areEqual(this._components[i], other._components[i])) return false; } + return true; } - hashCode(): number { + public hashCode(): number { return this._hashCode; } } @@ -137,61 +145,65 @@ export class TypeIdentity { export type MaybeTypeIdentity = TypeIdentity | undefined; export abstract class Type { - abstract readonly kind: TypeKind; + public abstract readonly kind: TypeKind; - constructor(readonly typeRef: TypeRef, protected readonly graph: TypeGraph) {} + public constructor( + public readonly typeRef: TypeRef, + protected readonly graph: TypeGraph + ) {} - get index(): number { + public get index(): number { return typeRefIndex(this.typeRef); } // This must return a newly allocated set - abstract getNonAttributeChildren(): Set; + public abstract getNonAttributeChildren(): Set; - getChildren(): ReadonlySet { + public getChildren(): ReadonlySet { let result = this.getNonAttributeChildren(); for (const [k, v] of this.getAttributes()) { if (k.children === undefined) continue; setUnionInto(result, k.children(v)); } + return result; } - getAttributes(): TypeAttributes { + public getAttributes(): TypeAttributes { return attributesForTypeRef(this.typeRef, this.graph); } - get hasNames(): boolean { + public get hasNames(): boolean { return namesTypeAttributeKind.tryGetInAttributes(this.getAttributes()) !== undefined; } - getNames(): TypeNames { + public getNames(): TypeNames { return defined(namesTypeAttributeKind.tryGetInAttributes(this.getAttributes())); } - getCombinedName(): string { + public getCombinedName(): string { return this.getNames().combinedName; } - abstract get isNullable(): boolean; + public abstract get isNullable(): boolean; // FIXME: Remove `isPrimitive` - abstract isPrimitive(): this is PrimitiveType; - abstract get identity(): MaybeTypeIdentity; - abstract reconstitute( + public abstract isPrimitive(): this is PrimitiveType; + public abstract get identity(): MaybeTypeIdentity; + public abstract reconstitute( builder: TypeReconstituter, canonicalOrder: boolean ): void; - get debugPrintKind(): string { + public get debugPrintKind(): string { return this.kind; } - equals(other: any): boolean { + public equals(other: T): boolean { if (!(other instanceof Type)) return false; return this.typeRef === other.typeRef; } - hashCode(): number { + public hashCode(): number { return hashCodeOf(this.typeRef); } @@ -203,7 +215,7 @@ export abstract class Type { queue: (a: Type, b: Type) => boolean ): boolean; - structurallyCompatible(other: Type, conflateNumbers = false): boolean { + public structurallyCompatible(other: Type, conflateNumbers = false): boolean { function kindsCompatible(kind1: TypeKind, kind2: TypeKind): boolean { if (kind1 === kind2) return true; if (!conflateNumbers) return false; @@ -215,11 +227,11 @@ export abstract class Type { if (triviallyStructurallyCompatible(this, other)) return true; if (!kindsCompatible(this.kind, other.kind)) return false; - const workList: [Type, Type][] = [[this, other]]; + const workList: Array<[Type, Type]> = [[this, other]]; // This contains a set of pairs which are the type pairs // we have already determined to be equal. We can't just // do comparison recursively because types can have cycles. - const done: [number, number][] = []; + const done: Array<[number, number]> = []; let failed: boolean; const queue = (x: Type, y: Type): boolean => { @@ -228,6 +240,7 @@ export abstract class Type { failed = true; return false; } + workList.push([x, y]); return true; }; @@ -249,6 +262,7 @@ export abstract class Type { break; } } + if (found) continue; done.push([ai, bi]); } @@ -261,11 +275,11 @@ export abstract class Type { return true; } - getParentTypes(): ReadonlySet { + public getParentTypes(): ReadonlySet { return this.graph.getParentsOfType(this); } - getAncestorsNotInSet(set: ReadonlySet): ReadonlySet { + public getAncestorsNotInSet(set: ReadonlySet): ReadonlySet { const workList: Type[] = [this]; const processed = new Set(); const ancestors = new Set(); @@ -287,6 +301,7 @@ export abstract class Type { } } } + return ancestors; } } @@ -305,27 +320,31 @@ export function primitiveTypeIdentity(kind: PrimitiveTypeKind, attributes: TypeA } export class PrimitiveType extends Type { - constructor(typeRef: TypeRef, graph: TypeGraph, public readonly kind: PrimitiveTypeKind) { + public constructor( + typeRef: TypeRef, + graph: TypeGraph, + public readonly kind: PrimitiveTypeKind + ) { super(typeRef, graph); } - get isNullable(): boolean { + public get isNullable(): boolean { return this.kind === "null" || this.kind === "any" || this.kind === "none"; } - isPrimitive(): this is PrimitiveType { + public isPrimitive(): this is PrimitiveType { return true; } - getNonAttributeChildren(): Set { + public getNonAttributeChildren(): Set { return new Set(); } - get identity(): MaybeTypeIdentity { + public get identity(): MaybeTypeIdentity { return primitiveTypeIdentity(this.kind, this.getAttributes()); } - reconstitute(builder: TypeReconstituter): void { + public reconstitute(builder: TypeReconstituter): void { builder.getPrimitiveType(this.kind); } @@ -346,14 +365,19 @@ export function arrayTypeIdentity(attributes: TypeAttributes, itemsRef: TypeRef) export class ArrayType extends Type { public readonly kind = "array"; - constructor(typeRef: TypeRef, graph: TypeGraph, private _itemsRef?: TypeRef) { + public constructor( + typeRef: TypeRef, + graph: TypeGraph, + private _itemsRef?: TypeRef + ) { super(typeRef, graph); } - setItems(itemsRef: TypeRef) { + public setItems(itemsRef: TypeRef): void { if (this._itemsRef !== undefined) { return panic("Can only set array items once"); } + this._itemsRef = itemsRef; } @@ -361,30 +385,31 @@ export class ArrayType extends Type { if (this._itemsRef === undefined) { return panic("Array items accessed before they were set"); } + return this._itemsRef; } - get items(): Type { + public get items(): Type { return derefTypeRef(this.getItemsRef(), this.graph); } - getNonAttributeChildren(): Set { + public getNonAttributeChildren(): Set { return new Set([this.items]); } - get isNullable(): boolean { + public get isNullable(): boolean { return false; } - isPrimitive(): this is PrimitiveType { + public isPrimitive(): this is PrimitiveType { return false; } - get identity(): MaybeTypeIdentity { + public get identity(): MaybeTypeIdentity { return arrayTypeIdentity(this.getAttributes(), this.getItemsRef()); } - reconstitute(builder: TypeReconstituter): void { + public reconstitute(builder: TypeReconstituter): void { const itemsRef = this.getItemsRef(); const maybeItems = builder.lookup(itemsRef); if (maybeItems === undefined) { @@ -405,30 +430,38 @@ export class ArrayType extends Type { } export class GenericClassProperty { - constructor(readonly typeData: T, readonly isOptional: boolean) {} + public constructor( + public readonly typeData: T, + public readonly isOptional: boolean + ) {} - equals(other: any): boolean { + public equals(other: GenericClassProperty): boolean { if (!(other instanceof GenericClassProperty)) { return false; } + return areEqual(this.typeData, other.typeData) && this.isOptional === other.isOptional; } - hashCode(): number { + public hashCode(): number { return hashCodeOf(this.typeData) + (this.isOptional ? 17 : 23); } } export class ClassProperty extends GenericClassProperty { - constructor(typeRef: TypeRef, readonly graph: TypeGraph, isOptional: boolean) { + public constructor( + typeRef: TypeRef, + public readonly graph: TypeGraph, + isOptional: boolean + ) { super(typeRef, isOptional); } - get typeRef(): TypeRef { + public get typeRef(): TypeRef { return this.typeData; } - get type(): Type { + public get type(): Type { return derefTypeRef(this.typeRef, this.graph); } } @@ -458,11 +491,11 @@ export function mapTypeIdentify( } export class ObjectType extends Type { - constructor( + public constructor( typeRef: TypeRef, graph: TypeGraph, public readonly kind: ObjectTypeKind, - readonly isFixed: boolean, + public readonly isFixed: boolean, private _properties: ReadonlyMap | undefined, private _additionalPropertiesRef: TypeRef | undefined ) { @@ -472,6 +505,7 @@ export class ObjectType extends Type { if (_properties !== undefined) { assert(_properties.size === 0); } + assert(!isFixed); } else if (kind === "class") { assert(_additionalPropertiesRef === undefined); @@ -480,7 +514,10 @@ export class ObjectType extends Type { } } - setProperties(properties: ReadonlyMap, additionalPropertiesRef: TypeRef | undefined) { + public setProperties( + properties: ReadonlyMap, + additionalPropertiesRef: TypeRef | undefined + ): void { assert(this._properties === undefined, "Tried to set object properties twice"); if (this instanceof MapType) { @@ -495,11 +532,11 @@ export class ObjectType extends Type { this._additionalPropertiesRef = additionalPropertiesRef; } - getProperties(): ReadonlyMap { + public getProperties(): ReadonlyMap { return defined(this._properties); } - getSortedProperties(): ReadonlyMap { + public getSortedProperties(): ReadonlyMap { return mapSortByKey(this.getProperties()); } @@ -508,30 +545,31 @@ export class ObjectType extends Type { return this._additionalPropertiesRef; } - getAdditionalProperties(): Type | undefined { + public getAdditionalProperties(): Type | undefined { const tref = this.getAdditionalPropertiesRef(); if (tref === undefined) return undefined; return derefTypeRef(tref, this.graph); } - getNonAttributeChildren(): Set { + public getNonAttributeChildren(): Set { const types = mapSortToArray(this.getProperties(), (_, k) => k).map(([_, p]) => p.type); const additionalProperties = this.getAdditionalProperties(); if (additionalProperties !== undefined) { types.push(additionalProperties); } + return new Set(types); } - get isNullable(): boolean { + public get isNullable(): boolean { return false; } - isPrimitive(): this is PrimitiveType { + public isPrimitive(): this is PrimitiveType { return false; } - get identity(): MaybeTypeIdentity { + public get identity(): MaybeTypeIdentity { if (this.isFixed) return undefined; return objectTypeIdentify( this.kind, @@ -541,7 +579,10 @@ export class ObjectType extends Type { ); } - reconstitute(builder: TypeReconstituter, canonicalOrder: boolean): void { + public reconstitute( + builder: TypeReconstituter, + canonicalOrder: boolean + ): void { const sortedProperties = this.getSortedProperties(); const propertiesInNewOrder = canonicalOrder ? sortedProperties : this.getProperties(); const maybePropertyTypes = builder.lookupMap(mapMap(sortedProperties, cp => cp.typeRef)); @@ -569,6 +610,7 @@ export class ObjectType extends Type { } else { builder.getClassType(properties); } + break; default: return panic(`Invalid object type kind ${this.kind}`); @@ -614,6 +656,7 @@ export class ObjectType extends Type { return false; } } + if (failed) return false; const thisAdditionalProperties = this.getAdditionalProperties(); @@ -625,7 +668,7 @@ export class ObjectType extends Type { } export class ClassType extends ObjectType { - constructor( + public constructor( typeRef: TypeRef, graph: TypeGraph, isFixed: boolean, @@ -636,7 +679,7 @@ export class ClassType extends ObjectType { } export class MapType extends ObjectType { - constructor(typeRef: TypeRef, graph: TypeGraph, valuesRef: TypeRef | undefined) { + public constructor(typeRef: TypeRef, graph: TypeGraph, valuesRef: TypeRef | undefined) { super( typeRef, graph, @@ -648,7 +691,7 @@ export class MapType extends ObjectType { } // FIXME: Remove and use `getAdditionalProperties()` instead. - get values(): Type { + public get values(): Type { return defined(this.getAdditionalProperties()); } } @@ -661,27 +704,31 @@ export function enumTypeIdentity(attributes: TypeAttributes, cases: ReadonlySet< export class EnumType extends Type { public readonly kind = "enum"; - constructor(typeRef: TypeRef, graph: TypeGraph, readonly cases: ReadonlySet) { + public constructor( + typeRef: TypeRef, + graph: TypeGraph, + public readonly cases: ReadonlySet + ) { super(typeRef, graph); } - get isNullable(): boolean { + public get isNullable(): boolean { return false; } - isPrimitive(): this is PrimitiveType { + public isPrimitive(): this is PrimitiveType { return false; } - get identity(): MaybeTypeIdentity { + public get identity(): MaybeTypeIdentity { return enumTypeIdentity(this.getAttributes(), this.cases); } - getNonAttributeChildren(): Set { + public getNonAttributeChildren(): Set { return new Set(); } - reconstitute(builder: TypeReconstituter): void { + public reconstitute(builder: TypeReconstituter): void { builder.getEnumType(this.cases); } @@ -708,10 +755,12 @@ export function setOperationCasesEqual( if (tb !== undefined) { if (membersEqual(ta, tb)) return true; } + if (conflateNumbers) { if (ta.kind === "integer" && iterableSome(mb, t => t.kind === "double")) return true; if (ta.kind === "double" && iterableSome(mb, t => t.kind === "integer")) return true; } + return false; }); } @@ -737,7 +786,7 @@ export function intersectionTypeIdentity( } export abstract class SetOperationType extends Type { - constructor( + public constructor( typeRef: TypeRef, graph: TypeGraph, public readonly kind: TypeKind, @@ -746,10 +795,11 @@ export abstract class SetOperationType extends Type { super(typeRef, graph); } - setMembers(memberRefs: ReadonlySet): void { + public setMembers(memberRefs: ReadonlySet): void { if (this._memberRefs !== undefined) { return panic("Can only set map members once"); } + this._memberRefs = memberRefs; } @@ -757,27 +807,28 @@ export abstract class SetOperationType extends Type { if (this._memberRefs === undefined) { return panic("Map members accessed before they were set"); } + return this._memberRefs; } - get members(): ReadonlySet { + public get members(): ReadonlySet { return setMap(this.getMemberRefs(), tref => derefTypeRef(tref, this.graph)); } - get sortedMembers(): ReadonlySet { + public get sortedMembers(): ReadonlySet { return this.getNonAttributeChildren(); } - getNonAttributeChildren(): Set { + public getNonAttributeChildren(): Set { // FIXME: We're assuming no two members of the same kind. return setSortBy(this.members, t => t.kind); } - isPrimitive(): this is PrimitiveType { + public isPrimitive(): this is PrimitiveType { return false; } - get identity(): MaybeTypeIdentity { + public get identity(): MaybeTypeIdentity { return setOperationTypeIdentity(this.kind, this.getAttributes(), this.getMemberRefs()); } @@ -808,15 +859,18 @@ export abstract class SetOperationType extends Type { } export class IntersectionType extends SetOperationType { - constructor(typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet) { + public constructor(typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet) { super(typeRef, graph, "intersection", memberRefs); } - get isNullable(): boolean { + public get isNullable(): boolean { return panic("isNullable not implemented for IntersectionType"); } - reconstitute(builder: TypeReconstituter, canonicalOrder: boolean): void { + public reconstitute( + builder: TypeReconstituter, + canonicalOrder: boolean + ): void { this.reconstituteSetOperation(builder, canonicalOrder, members => { if (members === undefined) { builder.getUniqueIntersectionType(); @@ -828,31 +882,31 @@ export class IntersectionType extends SetOperationType { } export class UnionType extends SetOperationType { - constructor(typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet) { + public constructor(typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet) { super(typeRef, graph, "union", memberRefs); if (memberRefs !== undefined) { messageAssert(memberRefs.size > 0, "IRNoEmptyUnions", {}); } } - setMembers(memberRefs: ReadonlySet): void { + public setMembers(memberRefs: ReadonlySet): void { messageAssert(memberRefs.size > 0, "IRNoEmptyUnions", {}); super.setMembers(memberRefs); } - get stringTypeMembers(): ReadonlySet { + public get stringTypeMembers(): ReadonlySet { return setFilter(this.members, t => isPrimitiveStringTypeKind(t.kind) || t.kind === "enum"); } - findMember(kind: TypeKind): Type | undefined { + public findMember(kind: TypeKind): Type | undefined { return iterableFind(this.members, t => t.kind === kind); } - get isNullable(): boolean { + public get isNullable(): boolean { return this.findMember("null") !== undefined; } - get isCanonical(): boolean { + public get isCanonical(): boolean { const members = this.members; if (members.size <= 1) return false; const kinds = setMap(members, t => t.kind); @@ -870,7 +924,10 @@ export class UnionType extends SetOperationType { return true; } - reconstitute(builder: TypeReconstituter, canonicalOrder: boolean): void { + public reconstitute( + builder: TypeReconstituter, + canonicalOrder: boolean + ): void { this.reconstituteSetOperation(builder, canonicalOrder, members => { if (members === undefined) { builder.getUniqueUnionType(); diff --git a/packages/quicktype-core/src/TypeBuilder.ts b/packages/quicktype-core/src/TypeBuilder.ts index d7d0a4b59..2b4275be8 100644 --- a/packages/quicktype-core/src/TypeBuilder.ts +++ b/packages/quicktype-core/src/TypeBuilder.ts @@ -1,73 +1,75 @@ import { EqualityMap, - mapMap, - mapSortByKey, + areEqual, + definedMap, iterableEvery, mapFilter, mapFind, - areEqual, + mapMap, + mapSortByKey, setUnionManyInto, - definedMap, withDefault } from "collection-utils"; +// eslint-disable-next-line import/no-cycle +import { StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; +import { + TypeAttributeKind, + type TypeAttributes, + combineTypeAttributes, + emptyTypeAttributes +} from "./attributes/TypeAttributes"; +import { assert, defined, panic } from "./support/Support"; +// eslint-disable-next-line import/no-cycle import { - PrimitiveTypeKind, - Type, - PrimitiveType, - EnumType, - MapType, ArrayType, - ClassType, - UnionType, - PrimitiveStringTypeKind, ClassProperty, + ClassType, + EnumType, IntersectionType, + MapType, + type MaybeTypeIdentity, ObjectType, - primitiveTypeIdentity, - enumTypeIdentity, - mapTypeIdentify, + type PrimitiveStringTypeKind, + PrimitiveType, + type PrimitiveTypeKind, + type TransformedStringTypeKind, + type Type, + type TypeIdentity, + type TypeKind, + UnionType, arrayTypeIdentity, classTypeIdentity, - unionTypeIdentity, + enumTypeIdentity, intersectionTypeIdentity, - MaybeTypeIdentity, - TypeIdentity, - TransformedStringTypeKind, isPrimitiveStringTypeKind, + mapTypeIdentify, + primitiveTypeIdentity, transformedStringTypeKinds, - TypeKind + unionTypeIdentity } from "./Type"; -import { TypeGraph, TypeRef, makeTypeRef, derefTypeRef, typeRefIndex, assertTypeRefGraph } from "./TypeGraph"; -import { - TypeAttributes, - combineTypeAttributes, - TypeAttributeKind, - emptyTypeAttributes -} from "./attributes/TypeAttributes"; -import { defined, assert, panic } from "./support/Support"; -import { stringTypesTypeAttributeKind, StringTypes } from "./attributes/StringTypes"; +import { TypeGraph, type TypeRef, assertTypeRefGraph, derefTypeRef, makeTypeRef, typeRefIndex } from "./TypeGraph"; // FIXME: Don't infer provenance. All original types should be present in // non-inferred form in the final graph. class ProvenanceTypeAttributeKind extends TypeAttributeKind> { - constructor() { + public constructor() { super("provenance"); } - appliesToTypeKind(_kind: TypeKind): boolean { + public appliesToTypeKind(_kind: TypeKind): boolean { return true; } - combine(arr: Set[]): Set { + public combine(arr: Array>): Set { return setUnionManyInto(new Set(), arr); } - makeInferred(p: Set): Set { + public makeInferred(p: Set): Set { return p; } - stringify(p: Set): string { + public stringify(p: Set): string { return Array.from(p) .sort() .map(i => i.toString()) @@ -95,22 +97,25 @@ export function getNoStringTypeMapping(): StringTypeMapping { ) ); } + return noStringTypeMapping; } export class TypeBuilder { - readonly typeGraph: TypeGraph; + public readonly typeGraph: TypeGraph; protected readonly topLevels: Map = new Map(); - protected readonly types: (Type | undefined)[] = []; + + protected readonly types: Array = []; + private readonly typeAttributes: TypeAttributes[] = []; private _addedForwardingIntersection = false; - constructor( + public constructor( typeGraphSerial: number, private readonly _stringTypeMapping: StringTypeMapping, - readonly canonicalOrder: boolean, + public readonly canonicalOrder: boolean, private readonly _allPropertiesOptional: boolean, private readonly _addProvenanceAttributes: boolean, inheritsProvenanceAttributes: boolean @@ -122,7 +127,7 @@ export class TypeBuilder { this.typeGraph = new TypeGraph(this, typeGraphSerial, _addProvenanceAttributes || inheritsProvenanceAttributes); } - addTopLevel(name: string, tref: TypeRef): void { + public addTopLevel(name: string, tref: TypeRef): void { // assert(t.typeGraph === this.typeGraph, "Adding top-level to wrong type graph"); assert(!this.topLevels.has(name), "Trying to add top-level with existing name"); assert( @@ -132,7 +137,7 @@ export class TypeBuilder { this.topLevels.set(name, tref); } - reserveTypeRef(): TypeRef { + public reserveTypeRef(): TypeRef { const index = this.types.length; // console.log(`reserving ${index}`); this.types.push(undefined); @@ -159,6 +164,7 @@ export class TypeBuilder { if (attributes.size !== filtered.size) { this.setLostTypeAttributes(); } + return filtered; } @@ -181,31 +187,34 @@ export class TypeBuilder { this.assertTypeRefGraph(forwardingRef); assert(this.types[typeRefIndex(forwardingRef)] === undefined); } - const tref = forwardingRef !== undefined ? forwardingRef : this.reserveTypeRef(); + + const tref = forwardingRef ?? this.reserveTypeRef(); if (attributes !== undefined) { const index = typeRefIndex(tref); this.typeAttributes[index] = combineTypeAttributes("union", this.typeAttributes[index], attributes); } + const t = creator(tref); this.commitType(tref, t); return tref; } - typeAtIndex(index: number): Type { + public typeAtIndex(index: number): Type { const maybeType = this.types[index]; if (maybeType === undefined) { return panic("Trying to deref an undefined type in a type builder"); } + return maybeType; } - atIndex(index: number): [Type, TypeAttributes] { + public atIndex(index: number): [Type, TypeAttributes] { const t = this.typeAtIndex(index); const attribtues = this.typeAttributes[index]; return [t, attribtues]; } - addAttributes(tref: TypeRef, attributes: TypeAttributes): void { + public addAttributes(tref: TypeRef, attributes: TypeAttributes): void { this.assertTypeRefGraph(tref); const index = typeRefIndex(tref); const existingAttributes = this.typeAttributes[index]; @@ -222,11 +231,12 @@ export class TypeBuilder { if (maybeType !== undefined) { attributes = this.filterTypeAttributes(maybeType, attributes); } + const nonIdentityAttributes = mapFilter(attributes, (_, k) => !k.inIdentity); this.typeAttributes[index] = combineTypeAttributes("union", existingAttributes, nonIdentityAttributes); } - finish(): TypeGraph { + public finish(): TypeGraph { this.typeGraph.freeze(this.topLevels, this.types.map(defined), this.typeAttributes); return this.typeGraph; } @@ -246,7 +256,7 @@ export class TypeBuilder { return this.addForwardingIntersection(forwardingRef, tref); } - get didAddForwardingIntersection(): boolean { + public get didAddForwardingIntersection(): boolean { return this._addedForwardingIntersection; } @@ -274,6 +284,7 @@ export class TypeBuilder { } else { maybeTypeRef = this._typeForIdentity.get(identity); } + if (maybeTypeRef !== undefined) { const result = this.forwardIfNecessary(forwardingRef, maybeTypeRef); if (attributes !== undefined) { @@ -286,6 +297,7 @@ export class TypeBuilder { mapFilter(attributes, (_, k) => !k.inIdentity) ); } + return result; } @@ -298,7 +310,11 @@ export class TypeBuilder { this.registerTypeForIdentity(t.identity, t.typeRef); } - getPrimitiveType(kind: PrimitiveTypeKind, maybeAttributes?: TypeAttributes, forwardingRef?: TypeRef): TypeRef { + public getPrimitiveType( + kind: PrimitiveTypeKind, + maybeAttributes?: TypeAttributes, + forwardingRef?: TypeRef + ): TypeRef { const attributes = withDefault(maybeAttributes, emptyTypeAttributes); // FIXME: Why do date/time types need a StringTypes attribute? // FIXME: Remove this from here and put it into flattenStrings @@ -306,9 +322,11 @@ export class TypeBuilder { if (isPrimitiveStringTypeKind(kind) && kind !== "string") { kind = stringTypeMappingGet(this._stringTypeMapping, kind); } + if (kind === "string") { return this.getStringType(attributes, stringTypes, forwardingRef); } + return this.getOrAddType( () => primitiveTypeIdentity(kind, attributes), tr => new PrimitiveType(tr, this.typeGraph, kind), @@ -317,7 +335,11 @@ export class TypeBuilder { ); } - getStringType(attributes: TypeAttributes, stringTypes: StringTypes | undefined, forwardingRef?: TypeRef): TypeRef { + public getStringType( + attributes: TypeAttributes, + stringTypes: StringTypes | undefined, + forwardingRef?: TypeRef + ): TypeRef { const existingStringTypes = mapFind(attributes, (_, k) => k === stringTypesTypeAttributeKind); assert( (stringTypes === undefined) !== (existingStringTypes === undefined), @@ -330,6 +352,7 @@ export class TypeBuilder { stringTypesTypeAttributeKind.makeAttributes(defined(stringTypes)) ); } + return this.getOrAddType( () => primitiveTypeIdentity("string", attributes), tr => new PrimitiveType(tr, this.typeGraph, "string"), @@ -338,7 +361,7 @@ export class TypeBuilder { ); } - getEnumType(attributes: TypeAttributes, cases: ReadonlySet, forwardingRef?: TypeRef): TypeRef { + public getEnumType(attributes: TypeAttributes, cases: ReadonlySet, forwardingRef?: TypeRef): TypeRef { return this.getOrAddType( () => enumTypeIdentity(attributes, cases), tr => new EnumType(tr, this.typeGraph, cases), @@ -347,11 +370,11 @@ export class TypeBuilder { ); } - makeClassProperty(tref: TypeRef, isOptional: boolean): ClassProperty { + public makeClassProperty(tref: TypeRef, isOptional: boolean): ClassProperty { return new ClassProperty(tref, this.typeGraph, isOptional); } - getUniqueObjectType( + public getUniqueObjectType( attributes: TypeAttributes, properties: ReadonlyMap | undefined, additionalProperties: TypeRef | undefined, @@ -367,11 +390,11 @@ export class TypeBuilder { ); } - getUniqueMapType(forwardingRef?: TypeRef): TypeRef { + public getUniqueMapType(forwardingRef?: TypeRef): TypeRef { return this.addType(forwardingRef, tr => new MapType(tr, this.typeGraph, undefined), undefined); } - getMapType(attributes: TypeAttributes, values: TypeRef, forwardingRef?: TypeRef): TypeRef { + public getMapType(attributes: TypeAttributes, values: TypeRef, forwardingRef?: TypeRef): TypeRef { this.assertTypeRefGraph(values); return this.getOrAddType( @@ -382,7 +405,7 @@ export class TypeBuilder { ); } - setObjectProperties( + public setObjectProperties( ref: TypeRef, properties: ReadonlyMap, additionalProperties: TypeRef | undefined @@ -393,15 +416,16 @@ export class TypeBuilder { if (!(type instanceof ObjectType)) { return panic("Tried to set properties of non-object type"); } + type.setProperties(this.modifyPropertiesIfNecessary(properties), additionalProperties); this.registerType(type); } - getUniqueArrayType(forwardingRef?: TypeRef): TypeRef { + public getUniqueArrayType(forwardingRef?: TypeRef): TypeRef { return this.addType(forwardingRef, tr => new ArrayType(tr, this.typeGraph, undefined), undefined); } - getArrayType(attributes: TypeAttributes, items: TypeRef, forwardingRef?: TypeRef): TypeRef { + public getArrayType(attributes: TypeAttributes, items: TypeRef, forwardingRef?: TypeRef): TypeRef { this.assertTypeRefGraph(items); return this.getOrAddType( @@ -412,30 +436,35 @@ export class TypeBuilder { ); } - setArrayItems(ref: TypeRef, items: TypeRef): void { + public setArrayItems(ref: TypeRef, items: TypeRef): void { this.assertTypeRefGraph(items); const type = derefTypeRef(ref, this.typeGraph); if (!(type instanceof ArrayType)) { return panic("Tried to set items of non-array type"); } + type.setItems(items); this.registerType(type); } - modifyPropertiesIfNecessary(properties: ReadonlyMap): ReadonlyMap { + public modifyPropertiesIfNecessary( + properties: ReadonlyMap + ): ReadonlyMap { properties.forEach(p => this.assertTypeRefGraph(p.typeRef)); if (this.canonicalOrder) { properties = mapSortByKey(properties); } + if (this._allPropertiesOptional) { properties = mapMap(properties, cp => this.makeClassProperty(cp.typeRef, true)); } + return properties; } - getClassType( + public getClassType( attributes: TypeAttributes, properties: ReadonlyMap, forwardingRef?: TypeRef @@ -451,7 +480,7 @@ export class TypeBuilder { // FIXME: Maybe just distinguish between this and `getClassType` // via a flag? That would make `ClassType.map` simpler. - getUniqueClassType( + public getUniqueClassType( attributes: TypeAttributes, isFixed: boolean, properties: ReadonlyMap | undefined, @@ -465,7 +494,7 @@ export class TypeBuilder { ); } - getUnionType(attributes: TypeAttributes, members: ReadonlySet, forwardingRef?: TypeRef): TypeRef { + public getUnionType(attributes: TypeAttributes, members: ReadonlySet, forwardingRef?: TypeRef): TypeRef { this.assertTypeRefSetGraph(members); return this.getOrAddType( @@ -477,7 +506,7 @@ export class TypeBuilder { } // FIXME: why do we sometimes call this with defined members??? - getUniqueUnionType( + public getUniqueUnionType( attributes: TypeAttributes, members: ReadonlySet | undefined, forwardingRef?: TypeRef @@ -487,7 +516,11 @@ export class TypeBuilder { return this.addType(forwardingRef, tref => new UnionType(tref, this.typeGraph, members), attributes); } - getIntersectionType(attributes: TypeAttributes, members: ReadonlySet, forwardingRef?: TypeRef): TypeRef { + public getIntersectionType( + attributes: TypeAttributes, + members: ReadonlySet, + forwardingRef?: TypeRef + ): TypeRef { this.assertTypeRefSetGraph(members); return this.getOrAddType( @@ -499,7 +532,7 @@ export class TypeBuilder { } // FIXME: why do we sometimes call this with defined members??? - getUniqueIntersectionType( + public getUniqueIntersectionType( attributes: TypeAttributes, members: ReadonlySet | undefined, forwardingRef?: TypeRef @@ -509,18 +542,19 @@ export class TypeBuilder { return this.addType(forwardingRef, tref => new IntersectionType(tref, this.typeGraph, members), attributes); } - setSetOperationMembers(ref: TypeRef, members: ReadonlySet): void { + public setSetOperationMembers(ref: TypeRef, members: ReadonlySet): void { this.assertTypeRefSetGraph(members); const type = derefTypeRef(ref, this.typeGraph); if (!(type instanceof UnionType || type instanceof IntersectionType)) { return panic("Tried to set members of non-set-operation type"); } + type.setMembers(members); this.registerType(type); } - setLostTypeAttributes(): void { + public setLostTypeAttributes(): void { return; } } diff --git a/packages/quicktype-core/src/TypeGraph.ts b/packages/quicktype-core/src/TypeGraph.ts index 09993039e..cdd8d5ea6 100644 --- a/packages/quicktype-core/src/TypeGraph.ts +++ b/packages/quicktype-core/src/TypeGraph.ts @@ -1,14 +1,22 @@ -import { iterableFirst, setFilter, setUnionManyInto, setSubtract, mapMap, mapSome, setMap } from "collection-utils"; +import { iterableFirst, mapMap, mapSome, setFilter, setMap, setSubtract, setUnionManyInto } from "collection-utils"; -import { Type, ClassType, UnionType, IntersectionType } from "./Type"; -import { separateNamedTypes, SeparatedNamedTypes, isNamedType, combineTypeAttributesOfTypes } from "./TypeUtils"; -import { defined, assert, panic, mustNotHappen } from "./support/Support"; -import { TypeBuilder, StringTypeMapping, getNoStringTypeMapping, provenanceTypeAttributeKind } from "./TypeBuilder"; -import { GraphRewriteBuilder, GraphRemapBuilder, BaseGraphRewriteBuilder } from "./GraphRewriting"; +import { type TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; import { TypeNames, namesTypeAttributeKind } from "./attributes/TypeNames"; import { Graph } from "./Graph"; -import { TypeAttributeKind, TypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; +// eslint-disable-next-line import/no-cycle +import { type BaseGraphRewriteBuilder, GraphRemapBuilder, GraphRewriteBuilder } from "./GraphRewriting"; import { messageError } from "./Messages"; +import { assert, defined, mustNotHappen, panic } from "./support/Support"; +// eslint-disable-next-line import/no-cycle +import { ClassType, IntersectionType, type Type, UnionType } from "./Type"; +// eslint-disable-next-line import/no-cycle +import { + type StringTypeMapping, + type TypeBuilder, + getNoStringTypeMapping, + provenanceTypeAttributeKind +} from "./TypeBuilder"; +import { type SeparatedNamedTypes, combineTypeAttributesOfTypes, isNamedType, separateNamedTypes } from "./TypeUtils"; export type TypeRef = number; @@ -17,7 +25,7 @@ const indexMask = (1 << indexBits) - 1; const serialBits = 31 - indexBits; const serialMask = (1 << serialBits) - 1; -export function isTypeRef(x: any): x is TypeRef { +export function isTypeRef(x: unknown): x is TypeRef { return typeof x === "number"; } @@ -69,7 +77,10 @@ export function typeAndAttributesForTypeRef( export class TypeAttributeStore { private readonly _topLevelValues: Map = new Map(); - constructor(private readonly _typeGraph: TypeGraph, private _values: (TypeAttributes | undefined)[]) {} + public constructor( + private readonly _typeGraph: TypeGraph, + private _values: Array + ) {} private getTypeIndex(t: Type): number { const tref = t.typeRef; @@ -77,86 +88,90 @@ export class TypeAttributeStore { return typeRefIndex(tref); } - attributesForType(t: Type): TypeAttributes { + public attributesForType(t: Type): TypeAttributes { const index = this.getTypeIndex(t); const maybeAttributes = this._values[index]; if (maybeAttributes !== undefined) { return maybeAttributes; } + return emptyTypeAttributes; } - attributesForTopLevel(name: string): TypeAttributes { + public attributesForTopLevel(name: string): TypeAttributes { const maybeAttributes = this._topLevelValues.get(name); if (maybeAttributes !== undefined) { return maybeAttributes; } + return emptyTypeAttributes; } - private setInMap(attributes: TypeAttributes, kind: TypeAttributeKind, value: T): TypeAttributes { + public setInMap(attributes: TypeAttributes, kind: TypeAttributeKind, value: T): TypeAttributes { // FIXME: This is potentially super slow return new Map(attributes).set(kind, value); } - set(kind: TypeAttributeKind, t: Type, value: T): void { + public set(kind: TypeAttributeKind, t: Type, value: T): void { const index = this.getTypeIndex(t); while (index >= this._values.length) { this._values.push(undefined); } + this._values[index] = this.setInMap(this.attributesForType(t), kind, value); } - setForTopLevel(kind: TypeAttributeKind, topLevelName: string, value: T): void { + public setForTopLevel(kind: TypeAttributeKind, topLevelName: string, value: T): void { this._topLevelValues.set(topLevelName, this.setInMap(this.attributesForTopLevel(topLevelName), kind, value)); } - private tryGetInMap(attributes: TypeAttributes, kind: TypeAttributeKind): T | undefined { + public tryGetInMap(attributes: TypeAttributes, kind: TypeAttributeKind): T | undefined { return attributes.get(kind); } - tryGet(kind: TypeAttributeKind, t: Type): T | undefined { + public tryGet(kind: TypeAttributeKind, t: Type): T | undefined { return this.tryGetInMap(this.attributesForType(t), kind); } - tryGetForTopLevel(kind: TypeAttributeKind, topLevelName: string): T | undefined { + public tryGetForTopLevel(kind: TypeAttributeKind, topLevelName: string): T | undefined { return this.tryGetInMap(this.attributesForTopLevel(topLevelName), kind); } } export class TypeAttributeStoreView { - constructor( + public constructor( private readonly _attributeStore: TypeAttributeStore, private readonly _definition: TypeAttributeKind ) {} - set(t: Type, value: T): void { + public set(t: Type, value: T): void { this._attributeStore.set(this._definition, t, value); } - setForTopLevel(name: string, value: T): void { + public setForTopLevel(name: string, value: T): void { this._attributeStore.setForTopLevel(this._definition, name, value); } - tryGet(t: Type): T | undefined { + public tryGet(t: Type): T | undefined { return this._attributeStore.tryGet(this._definition, t); } - get(t: Type): T { + public get(t: Type): T { return defined(this.tryGet(t)); } - tryGetForTopLevel(name: string): T | undefined { + public tryGetForTopLevel(name: string): T | undefined { return this._attributeStore.tryGetForTopLevel(this._definition, name); } - getForTopLevel(name: string): T { + public getForTopLevel(name: string): T { return defined(this.tryGetForTopLevel(name)); } } export class TypeGraph { private _typeBuilder?: TypeBuilder; + private _attributeStore: TypeAttributeStore | undefined = undefined; // FIXME: OrderedMap? We lose the order in PureScript right now, though, @@ -165,13 +180,13 @@ export class TypeGraph { private _types?: Type[]; - private _parents: Set[] | undefined = undefined; + private _parents: Array> | undefined = undefined; private _printOnRewrite = false; - constructor( + public constructor( typeBuilder: TypeBuilder, - readonly serial: number, + public readonly serial: number, private readonly _haveProvenanceAttributes: boolean ) { this._typeBuilder = typeBuilder; @@ -181,14 +196,14 @@ export class TypeGraph { return this._typeBuilder === undefined; } - get attributeStore(): TypeAttributeStore { + public get attributeStore(): TypeAttributeStore { return defined(this._attributeStore); } - freeze( + public freeze( topLevels: ReadonlyMap, types: Type[], - typeAttributes: (TypeAttributes | undefined)[] + typeAttributes: Array ): void { assert(!this.isFrozen, "Tried to freeze TypeGraph a second time"); for (const t of types) { @@ -206,22 +221,24 @@ export class TypeGraph { this._topLevels = mapMap(topLevels, tref => derefTypeRef(tref, this)); } - get topLevels(): ReadonlyMap { + public get topLevels(): ReadonlyMap { assert(this.isFrozen, "Cannot get top-levels from a non-frozen graph"); return this._topLevels; } - typeAtIndex(index: number): Type { + public typeAtIndex(index: number): Type { if (this._typeBuilder !== undefined) { return this._typeBuilder.typeAtIndex(index); } + return defined(this._types)[index]; } - atIndex(index: number): [Type, TypeAttributes] { + public atIndex(index: number): [Type, TypeAttributes] { if (this._typeBuilder !== undefined) { return this._typeBuilder.atIndex(index); } + const t = this.typeAtIndex(index); return [t, defined(this._attributeStore).attributesForType(t)]; } @@ -248,14 +265,15 @@ export class TypeGraph { for (const [, t] of this.topLevels) { addFromType(t); } + return new Set(types); } - allNamedTypes(): ReadonlySet { + public allNamedTypes(): ReadonlySet { return this.filterTypes(isNamedType); } - allNamedTypesSeparated(): SeparatedNamedTypes { + public allNamedTypesSeparated(): SeparatedNamedTypes { const types = this.allNamedTypes(); return separateNamedTypes(types); } @@ -274,7 +292,7 @@ export class TypeGraph { return result; } - setPrintOnRewrite(): void { + public setPrintOnRewrite(): void { this._printOnRewrite = true; } @@ -302,7 +320,7 @@ export class TypeGraph { // That particular TypeBuilder will have to take as inputs types in the old // graph, but return types in the new graph. Recursive types must be handled // carefully. - rewrite( + public rewrite( title: string, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, @@ -338,7 +356,7 @@ export class TypeGraph { return removeIndirectionIntersections(newGraph, stringTypeMapping, debugPrintReconstitution); } - remap( + public remap( title: string, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, @@ -372,7 +390,7 @@ export class TypeGraph { return newGraph; } - garbageCollect(alphabetizeProperties: boolean, debugPrintReconstitution: boolean): TypeGraph { + public garbageCollect(alphabetizeProperties: boolean, debugPrintReconstitution: boolean): TypeGraph { const newGraph = this.remap( "GC", getNoStringTypeMapping(), @@ -384,7 +402,8 @@ export class TypeGraph { return newGraph; } - rewriteFixedPoint(alphabetizeProperties: boolean, debugPrintReconstitution: boolean): TypeGraph { + public rewriteFixedPoint(alphabetizeProperties: boolean, debugPrintReconstitution: boolean): TypeGraph { + // eslint-disable-next-line @typescript-eslint/no-this-alias let graph: TypeGraph = this; for (;;) { const newGraph = this.rewrite( @@ -399,20 +418,21 @@ export class TypeGraph { if (graph.allTypesUnordered().size === newGraph.allTypesUnordered().size) { return graph; } + graph = newGraph; } } - allTypesUnordered(): ReadonlySet { + public allTypesUnordered(): ReadonlySet { assert(this.isFrozen, "Tried to get all graph types before it was frozen"); return new Set(defined(this._types)); } - makeGraph(invertDirection: boolean, childrenOfType: (t: Type) => ReadonlySet): Graph { + public makeGraph(invertDirection: boolean, childrenOfType: (t: Type) => ReadonlySet): Graph { return new Graph(defined(this._types), invertDirection, childrenOfType); } - getParentsOfType(t: Type): Set { + public getParentsOfType(t: Type): Set { assertTypeRefGraph(t.typeRef, this); if (this._parents === undefined) { const parents = defined(this._types).map(_ => new Set()); @@ -422,12 +442,14 @@ export class TypeGraph { parents[index] = parents[index].add(p); } } + this._parents = parents; } + return this._parents[t.index]; } - printGraph(): void { + public printGraph(): void { const types = defined(this._types); for (let i = 0; i < types.length; i++) { const t = types[i]; @@ -441,12 +463,14 @@ export class TypeGraph { .join(",")}` ); } + for (const [kind, value] of t.getAttributes()) { const maybeString = kind.stringify(value); if (maybeString !== undefined) { parts.push(maybeString); } } + console.log(`${i}: ${parts.join(" | ")}`); } } @@ -461,6 +485,7 @@ export function noneToAny( if (noneTypes.size === 0) { return graph; } + assert(noneTypes.size === 1, "Cannot have more than one none type"); return graph.rewrite( "none to any", @@ -495,11 +520,13 @@ export function optionalToNullable( } else { members = new Set([builder.reconstituteType(t), nullType]); } + const attributes = namesTypeAttributeKind.setDefaultInAttributes(t.getAttributes(), () => TypeNames.make(new Set([name]), new Set(), true) ); ref = builder.getUnionType(attributes, members); } + return builder.makeClassProperty(ref, p.isOptional); }); if (c.isFixed) { @@ -517,6 +544,7 @@ export function optionalToNullable( if (classesWithOptional.size === 0) { return graph; } + return graph.rewrite( "optional to nullable", stringTypeMapping, @@ -536,7 +564,7 @@ export function removeIndirectionIntersections( stringTypeMapping: StringTypeMapping, debugPrintRemapping: boolean ): TypeGraph { - const map: [Type, Type][] = []; + const map: Array<[Type, Type]> = []; for (const t of graph.allTypesUnordered()) { if (!(t instanceof IntersectionType)) continue; @@ -548,10 +576,12 @@ export function removeIndirectionIntersections( map.push([t, member]); break; } + if (seen.has(member)) { // FIXME: Technically, this is an any type. return panic("There's a cycle of intersection types"); } + seen.add(member); current = member; } diff --git a/packages/quicktype-core/src/TypeUtils.ts b/packages/quicktype-core/src/TypeUtils.ts index 36fb166a9..b2ae456f7 100644 --- a/packages/quicktype-core/src/TypeUtils.ts +++ b/packages/quicktype-core/src/TypeUtils.ts @@ -1,31 +1,33 @@ -import { setFilter, setSortBy, iterableFirst, setUnion, EqualityMap } from "collection-utils"; +import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion } from "collection-utils"; -import { defined, panic, assert, assertNever } from "./support/Support"; +// eslint-disable-next-line import/no-cycle +import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; import { - TypeAttributes, + type CombinationKind, + type TypeAttributes, combineTypeAttributes, - emptyTypeAttributes, - CombinationKind + emptyTypeAttributes } from "./attributes/TypeAttributes"; +import { assert, assertNever, defined, panic } from "./support/Support"; import { - Type, - PrimitiveType, ArrayType, + type ClassProperty, + ClassType, EnumType, - ObjectType, MapType, - ClassType, - ClassProperty, - SetOperationType, + ObjectType, + type PrimitiveType, + type SetOperationType, + type Type, UnionType, isPrimitiveStringTypeKind } from "./Type"; -import { stringTypesTypeAttributeKind, StringTypes } from "./attributes/StringTypes"; export function assertIsObject(t: Type): ObjectType { if (t instanceof ObjectType) { return t; } + return panic("Supposed object type is not an object type"); } @@ -33,15 +35,12 @@ export function assertIsClass(t: Type): ClassType { if (!(t instanceof ClassType)) { return panic("Supposed class type is not a class type"); } + return t; } export function setOperationMembersRecursively( - setOperation: T, - combinationKind: CombinationKind | undefined -): [ReadonlySet, TypeAttributes]; -export function setOperationMembersRecursively( - setOperations: T[], + setOperations: T | T[], combinationKind: CombinationKind | undefined ): [ReadonlySet, TypeAttributes]; export function setOperationMembersRecursively( @@ -63,6 +62,7 @@ export function setOperationMembersRecursively( if (combinationKind !== undefined) { attributes = combineTypeAttributes(combinationKind, attributes, t.getAttributes()); } + for (const m of so.members) { process(m); } @@ -78,6 +78,7 @@ export function setOperationMembersRecursively( for (const so of setOperations) { process(so); } + return [members, attributes]; } @@ -102,6 +103,7 @@ export function makeGroupsToFlatten( maybeSet.add(defined(iterableFirst(members))); } } + maybeSet.add(u); typeGroups.set(members, maybeSet); } @@ -125,7 +127,7 @@ export function isAnyOrNull(t: Type): boolean { // introduced. export function removeNullFromUnion( t: UnionType, - sortBy: boolean | ((t: Type) => any) = false + sortBy: boolean | ((t: Type) => string | number) = false ): [PrimitiveType | null, ReadonlySet] { function sort(s: ReadonlySet): ReadonlySet { if (sortBy === false) return s; @@ -137,6 +139,7 @@ export function removeNullFromUnion( if (nullType === undefined) { return [null, sort(t.members)]; } + return [nullType as PrimitiveType, sort(setFilter(t.members, m => m.kind !== "null"))]; } @@ -144,9 +147,11 @@ export function removeNullFromType(t: Type): [PrimitiveType | null, ReadonlySet< if (t.kind === "null") { return [t as PrimitiveType, new Set()]; } + if (!(t instanceof UnionType)) { return [null, new Set([t])]; } + return removeNullFromUnion(t); } @@ -166,20 +171,21 @@ export function getNullAsOptional(cp: ClassProperty): [boolean, ReadonlySet= 0; + return ["class", "union", "enum", "object"].includes(t.kind); } -export type SeparatedNamedTypes = { - objects: ReadonlySet; +export interface SeparatedNamedTypes { enums: ReadonlySet; + objects: ReadonlySet; unions: ReadonlySet; -}; +} export function separateNamedTypes(types: Iterable): SeparatedNamedTypes { const objects = setFilter( @@ -206,6 +212,7 @@ export function directlyReachableSingleNamedType(type: Type): Type | undefined { ) { return new Set([t]); } + return null; }); assert(definedTypes.size <= 1, "Cannot have more than one defined type per top-level"); @@ -218,14 +225,15 @@ export function stringTypesForType(t: PrimitiveType): StringTypes { if (stringTypes === undefined) { return panic("All strings must have a string type attribute"); } + return stringTypes; } -export type StringTypeMatchers = { +export interface StringTypeMatchers { + dateTimeType?: (dateTimeType: PrimitiveType) => U; dateType?: (dateType: PrimitiveType) => U; timeType?: (timeType: PrimitiveType) => U; - dateTimeType?: (dateTimeType: PrimitiveType) => U; -}; +} export function matchTypeExhaustive( t: Type, @@ -249,8 +257,10 @@ export function matchTypeExhaustive( if (t.kind === "string") { return stringType(t); } + return transformedStringType(t); } + const kind = t.kind; const f = { none: noneType, @@ -286,7 +296,7 @@ export function matchType( unionType: (unionType: UnionType) => U, transformedStringType?: (transformedStringType: PrimitiveType) => U ): U { - function typeNotSupported(t: Type) { + function typeNotSupported(t: Type): never { return panic(`Unsupported type ${t.kind} in non-exhaustive match`); } @@ -305,7 +315,7 @@ export function matchType( typeNotSupported, enumType, unionType, - transformedStringType || typeNotSupported + transformedStringType ?? typeNotSupported ); } @@ -321,7 +331,7 @@ export function matchCompoundType( return; } - return matchTypeExhaustive( + matchTypeExhaustive( t, ignore, ignore, diff --git a/packages/quicktype-core/src/UnifyClasses.ts b/packages/quicktype-core/src/UnifyClasses.ts index cb445ae82..8fe16817c 100644 --- a/packages/quicktype-core/src/UnifyClasses.ts +++ b/packages/quicktype-core/src/UnifyClasses.ts @@ -1,13 +1,13 @@ import { iterableFirst, setUnionInto } from "collection-utils"; -import { Type, ClassProperty, UnionType, ObjectType } from "./Type"; +import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; +import { type BaseGraphRewriteBuilder, type GraphRewriteBuilder, type TypeLookerUp } from "./GraphRewriting"; +import { assert, defined, panic } from "./support/Support"; +import { type ClassProperty, type ObjectType, type Type, UnionType } from "./Type"; +import { type TypeBuilder } from "./TypeBuilder"; +import { type TypeRef, derefTypeRef } from "./TypeGraph"; import { assertIsObject } from "./TypeUtils"; -import { TypeBuilder } from "./TypeBuilder"; -import { TypeLookerUp, GraphRewriteBuilder, BaseGraphRewriteBuilder } from "./GraphRewriting"; -import { UnionBuilder, TypeRefUnionAccumulator } from "./UnionBuilder"; -import { panic, assert, defined } from "./support/Support"; -import { TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; -import { TypeRef, derefTypeRef } from "./TypeGraph"; +import { TypeRefUnionAccumulator, UnionBuilder } from "./UnionBuilder"; function getCliqueProperties( clique: ObjectType[], @@ -28,11 +28,14 @@ function getCliqueProperties( if (additionalProperties === undefined) { additionalProperties = new Set(); } + if (additional !== undefined) { additionalProperties.add(additional); } } + // FIXME: refactor this + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < properties.length; i++) { let [name, types, isOptional] = properties[i]; const maybeProperty = o.getProperties().get(name); @@ -45,6 +48,7 @@ function getCliqueProperties( if (maybeProperty.isOptional) { isOptional = true; } + types.add(maybeProperty.type); } @@ -64,9 +68,9 @@ function getCliqueProperties( } function countProperties(clique: ObjectType[]): { - hasProperties: boolean; hasAdditionalProperties: boolean; hasNonAnyAdditionalProperties: boolean; + hasProperties: boolean; } { let hasProperties = false; let hasAdditionalProperties = false; @@ -75,6 +79,7 @@ function countProperties(clique: ObjectType[]): { if (o.getProperties().size > 0) { hasProperties = true; } + const additional = o.getAdditionalProperties(); if (additional !== undefined) { hasAdditionalProperties = true; @@ -83,11 +88,12 @@ function countProperties(clique: ObjectType[]): { } } } + return { hasProperties, hasAdditionalProperties, hasNonAnyAdditionalProperties }; } export class UnifyUnionBuilder extends UnionBuilder { - constructor( + public constructor( typeBuilder: BaseGraphRewriteBuilder, private readonly _makeObjectTypes: boolean, private readonly _makeClassesFixed: boolean, @@ -126,6 +132,7 @@ export class UnifyUnionBuilder extends UnionBuilder cp.typeRef) ); } + const additionalPropertyTypes = new Set( objectTypes .filter(o => o.getAdditionalProperties() !== undefined) @@ -145,6 +152,7 @@ export class UnifyUnionBuilder extends UnionBuilder { readonly arrayData: TArrayData; - readonly objectData: TObjectData; - readonly enumCases: ReadonlySet; - getMemberKinds(): TypeAttributeMap; + getMemberKinds: () => TypeAttributeMap; readonly lostTypeAttributes: boolean; + + readonly objectData: TObjectData; } export type TypeAttributeMap = Map; @@ -61,6 +68,7 @@ function addAttributesToBuilder( arr = []; builder.set(kind, arr); } + arr.push(newAttributes); } @@ -76,16 +84,18 @@ function moveAttributes(map: TypeAttributeMap, fromKind: export class UnionAccumulator implements UnionTypeProvider { private readonly _nonStringTypeAttributes: TypeAttributeMapBuilder = new Map(); + private readonly _stringTypeAttributes: TypeAttributeMapBuilder = new Map(); - readonly arrayData: TArray[] = []; - readonly objectData: TObject[] = []; + public readonly arrayData: TArray[] = []; + + public readonly objectData: TObject[] = []; private readonly _enumCases: Set = new Set(); private _lostTypeAttributes = false; - constructor(private readonly _conflateNumbers: boolean) {} + public constructor(private readonly _conflateNumbers: boolean) {} private have(kind: TypeKind): boolean { return ( @@ -93,17 +103,19 @@ export class UnionAccumulator implements UnionTypeProvider implements UnionTypeProvider implements UnionTypeProvider implements UnionTypeProvider, attributes: TypeAttributes): void { + public addEnum(cases: ReadonlySet, attributes: TypeAttributes): void { const maybeStringAttributes = this._stringTypeAttributes.get("string"); if (maybeStringAttributes !== undefined) { addAttributesToBuilder(this._stringTypeAttributes, "string", attributes); return; } + addAttributesToBuilder(this._nonStringTypeAttributes, "enum", attributes); setUnionInto(this._enumCases, cases); } - addStringCases(cases: string[], attributes: TypeAttributes): void { + public addStringCases(cases: string[], attributes: TypeAttributes): void { this.addFullStringType(attributes, StringTypes.fromCases(cases)); } - addStringCase(s: string, count: number, attributes: TypeAttributes): void { + + public addStringCase(s: string, count: number, attributes: TypeAttributes): void { this.addFullStringType(attributes, StringTypes.fromCase(s, count)); } - get enumCases(): ReadonlySet { + public get enumCases(): ReadonlySet { return this._enumCases; } - getMemberKinds(): TypeAttributeMap { + public getMemberKinds(): TypeAttributeMap { assert(!(this.have("enum") && this.have("string")), "We can't have both strings and enums in the same union"); let merged = mapMerge( @@ -201,19 +218,21 @@ export class UnionAccumulator implements UnionTypeProvider): [ReadonlyMap (s === undefined ? new Set(path) : setUnionInto(s, path))); @@ -273,10 +293,12 @@ function attributesForTypes(types: Iterable): [ReadonlyMap ); } - addTypes(types: Iterable): TypeAttributes { + public addTypes(types: Iterable): TypeAttributes { const [attributesMap, unionAttributes] = attributesForTypes(types); for (const [t, attributes] of attributesMap) { this.addType(t, attributes); } + return unionAttributes; } } export abstract class UnionBuilder { - constructor(protected readonly typeBuilder: TBuilder) {} + public constructor(protected readonly typeBuilder: TBuilder) {} protected abstract makeObject( objects: TObjectData, @@ -354,14 +377,16 @@ export abstract class UnionBuilder, unique: boolean, typeAttributes: TypeAttributes, @@ -396,6 +421,7 @@ export abstract class UnionBuilder; export type AccessorNames = Map; class AccessorNamesTypeAttributeKind extends TypeAttributeKind { - constructor() { + public constructor() { super("accessorNames"); } - makeInferred(_: AccessorNames): undefined { + public makeInferred(_: AccessorNames): undefined { return undefined; } } @@ -79,15 +80,15 @@ export function getAccessorName( // up its union's identifier(s), and then look up the member's accessor entries for that // identifier. Of course we might find more than one, potentially conflicting. class UnionIdentifierTypeAttributeKind extends TypeAttributeKind> { - constructor() { + public constructor() { super("unionIdentifier"); } - combine(arr: ReadonlySet[]): ReadonlySet { + public combine(arr: Array>): ReadonlySet { return setUnionManyInto(new Set(), arr); } - makeInferred(_: ReadonlySet): ReadonlySet { + public makeInferred(_: ReadonlySet): ReadonlySet { return new Set(); } } @@ -104,15 +105,16 @@ export function makeUnionIdentifierAttribute(): TypeAttributes { } class UnionMemberNamesTypeAttributeKind extends TypeAttributeKind> { - constructor() { + public constructor() { super("unionMemberNames"); } - combine(arr: Map[]): Map { + public combine(arr: Array>): Map { const result = new Map(); for (const m of arr) { mapMergeInto(result, m); } + return result; } } @@ -166,11 +168,12 @@ export function unionMemberName(u: UnionType, member: Type, language: string): [ return [first, isFixed]; } -function isAccessorEntry(x: any): x is string | { [language: string]: string } { +function isAccessorEntry(x: unknown): x is string | { [language: string]: string } { if (typeof x === "string") { return true; } - return isStringMap(x, (v: any): v is string => typeof v === "string"); + + return isStringMap(x, (v: unknown): v is string => typeof v === "string"); } function makeAccessorEntry(ae: string | { [language: string]: string }): AccessorEntry { @@ -178,7 +181,7 @@ function makeAccessorEntry(ae: string | { [language: string]: string }): Accesso return mapFromObject(ae); } -export function makeAccessorNames(x: any): AccessorNames { +export function makeAccessorNames(x: unknown): AccessorNames { // FIXME: Do proper error reporting const stringMap = checkStringMap(x, isAccessorEntry); return mapMap(mapFromObject(stringMap), makeAccessorEntry); diff --git a/packages/quicktype-core/src/attributes/Constraints.ts b/packages/quicktype-core/src/attributes/Constraints.ts index a0370f4cc..09fb79564 100644 --- a/packages/quicktype-core/src/attributes/Constraints.ts +++ b/packages/quicktype-core/src/attributes/Constraints.ts @@ -1,9 +1,10 @@ -import { Type, TypeKind } from "../Type"; -import { TypeAttributeKind } from "./TypeAttributes"; -import { assert } from "../support/Support"; +import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; +import { type JSONSchema } from "../input/JSONSchemaStore"; import { messageError } from "../Messages"; -import { JSONSchemaType, JSONSchemaAttributes, Ref } from "../input/JSONSchemaInput"; -import { JSONSchema } from "../input/JSONSchemaStore"; +import { assert } from "../support/Support"; +import { type Type, type TypeKind } from "../Type"; + +import { TypeAttributeKind } from "./TypeAttributes"; // This can't be an object type, unfortunately, because it's in the // type's identity and as such must be comparable and hashable with @@ -15,27 +16,29 @@ function checkMinMaxConstraint(minmax: MinMaxConstraint): MinMaxConstraint | und if (typeof min === "number" && typeof max === "number" && min > max) { return messageError("MiscInvalidMinMaxConstraint", { min, max }); } + if (min === undefined && max === undefined) { return undefined; } + return minmax; } export class MinMaxConstraintTypeAttributeKind extends TypeAttributeKind { - constructor( + public constructor( name: string, - private _typeKinds: Set, + private readonly _typeKinds: Set, private _minSchemaProperty: string, private _maxSchemaProperty: string ) { super(name); } - get inIdentity(): boolean { + public get inIdentity(): boolean { return true; } - combine(arr: MinMaxConstraint[]): MinMaxConstraint | undefined { + public combine(arr: MinMaxConstraint[]): MinMaxConstraint | undefined { assert(arr.length > 0); let [min, max] = arr[0]; @@ -46,16 +49,18 @@ export class MinMaxConstraintTypeAttributeKind extends TypeAttributeKind 0); let [min, max] = arr[0]; @@ -66,32 +71,35 @@ export class MinMaxConstraintTypeAttributeKind extends TypeAttributeKind { - constructor() { + public constructor() { super("pattern"); } - get inIdentity(): boolean { + public get inIdentity(): boolean { return true; } - combine(arr: string[]): string { + public combine(arr: string[]): string { assert(arr.length > 0); return arr.map(p => `(${p})`).join("|"); } - intersect(_arr: string[]): string | undefined { + public intersect(_arr: string[]): string | undefined { /** FIXME!!! what is the intersection of regexps? */ return undefined; } - makeInferred(_: string): undefined { + public makeInferred(_: string): undefined { return undefined; } - addToSchema(schema: { [name: string]: unknown }, t: Type, attr: string): void { + public addToSchema(schema: { [name: string]: unknown }, t: Type, attr: string): void { if (t.kind !== "string") return; schema.pattern = attr; } diff --git a/packages/quicktype-core/src/attributes/Description.ts b/packages/quicktype-core/src/attributes/Description.ts index 6684b95c3..a1f64efcd 100644 --- a/packages/quicktype-core/src/attributes/Description.ts +++ b/packages/quicktype-core/src/attributes/Description.ts @@ -1,20 +1,28 @@ import { + iterableFirst, mapFilterMap, mapFromObject, - setUnion, - iterableFirst, - setUnionManyInto, mapMergeWithInto, - setSubtract + setSubtract, + setUnion, + setUnionManyInto } from "collection-utils"; // There's a cyclic import here. Ignoring now because it requires a large refactor. // skipcq: JS-E1008 -import { TypeAttributeKind, emptyTypeAttributes } from "./TypeAttributes"; // FIXME: This is a circular import -import { JSONSchemaType, Ref, JSONSchemaAttributes, PathElementKind, PathElement } from "../input/JSONSchemaInput"; -import { JSONSchema } from "../input/JSONSchemaStore"; -import { Type } from "../Type"; +// eslint-disable-next-line import/no-cycle +import { + type JSONSchemaAttributes, + type JSONSchemaType, + type PathElement, + PathElementKind, + type Ref +} from "../input/JSONSchemaInput"; +import { type JSONSchema } from "../input/JSONSchemaStore"; +import { type Type } from "../Type"; + +import { TypeAttributeKind, emptyTypeAttributes } from "./TypeAttributes"; export function addDescriptionToSchema( schema: { [name: string]: unknown }, @@ -25,31 +33,33 @@ export function addDescriptionToSchema( } class DescriptionTypeAttributeKind extends TypeAttributeKind> { - constructor() { + public constructor() { super("description"); } - combine(attrs: ReadonlySet[]): ReadonlySet { + public combine(attrs: Array>): ReadonlySet { return setUnionManyInto(new Set(), attrs); } - makeInferred(_: ReadonlySet): undefined { + public makeInferred(_: ReadonlySet): undefined { return undefined; } - addToSchema(schema: { [name: string]: unknown }, _t: Type, attrs: ReadonlySet): void { + public addToSchema(schema: { [name: string]: unknown }, _t: Type, attrs: ReadonlySet): void { addDescriptionToSchema(schema, attrs); } - stringify(descriptions: ReadonlySet): string | undefined { + public stringify(descriptions: ReadonlySet): string | undefined { let result = iterableFirst(descriptions); if (result === undefined) return undefined; if (result.length > 5 + 3) { result = `${result.slice(0, 5)}...`; } + if (descriptions.size > 1) { result = `${result}, ...`; } + return result; } } @@ -57,24 +67,25 @@ class DescriptionTypeAttributeKind extends TypeAttributeKind export const descriptionTypeAttributeKind: TypeAttributeKind> = new DescriptionTypeAttributeKind(); class PropertyDescriptionsTypeAttributeKind extends TypeAttributeKind>> { - constructor() { + public constructor() { super("propertyDescriptions"); } - combine(attrs: Map>[]): Map> { + public combine(attrs: Array>>): Map> { // FIXME: Implement this with mutable sets const result = new Map>(); for (const attr of attrs) { mapMergeWithInto(result, (sa, sb) => setUnion(sa, sb), attr); } + return result; } - makeInferred(_: Map>): undefined { + public makeInferred(_: Map>): undefined { return undefined; } - stringify(propertyDescriptions: Map>): string | undefined { + public stringify(propertyDescriptions: Map>): string | undefined { if (propertyDescriptions.size === 0) return undefined; return `prop descs: ${propertyDescriptions.size}`; } @@ -112,13 +123,14 @@ export function descriptionAttributeProducer( } if (types.has("object") && typeof schema.properties === "object") { - const propertyDescriptions = mapFilterMap(mapFromObject(schema.properties), propSchema => { - if (typeof propSchema === "object") { + const propertyDescriptions = mapFilterMap(mapFromObject(schema.properties), propSchema => { + if (propSchema && typeof propSchema === "object" && "description" in propSchema) { const desc = propSchema.description; if (typeof desc === "string") { return new Set([desc]); } } + return undefined; }); if (propertyDescriptions.size > 0) { diff --git a/packages/quicktype-core/src/attributes/EnumValues.ts b/packages/quicktype-core/src/attributes/EnumValues.ts index f81b73a37..05885ada9 100644 --- a/packages/quicktype-core/src/attributes/EnumValues.ts +++ b/packages/quicktype-core/src/attributes/EnumValues.ts @@ -1,16 +1,18 @@ import { mapMap } from "collection-utils"; -import { lookupKey, AccessorNames, makeAccessorNames } from "./AccessorNames"; -import { EnumType } from "../Type"; +import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; +import { type JSONSchema } from "../input/JSONSchemaStore"; +import { type EnumType } from "../Type"; + +import { type AccessorNames, lookupKey, makeAccessorNames } from "./AccessorNames"; import { TypeAttributeKind } from "./TypeAttributes"; -import { JSONSchema } from "../input/JSONSchemaStore"; -import { Ref, JSONSchemaType, JSONSchemaAttributes } from "../input/JSONSchemaInput"; class EnumValuesTypeAttributeKind extends TypeAttributeKind { - constructor() { + public constructor() { super("enumValues"); } - makeInferred(_: AccessorNames) { + + public makeInferred(_: AccessorNames): undefined { return undefined; } } diff --git a/packages/quicktype-core/src/attributes/StringTypes.ts b/packages/quicktype-core/src/attributes/StringTypes.ts index c14d7d58d..ae8539a24 100644 --- a/packages/quicktype-core/src/attributes/StringTypes.ts +++ b/packages/quicktype-core/src/attributes/StringTypes.ts @@ -1,53 +1,56 @@ import { - mapMap, - iterableFirst, - setIntersect, - hashCodeOf, + addHashCode, areEqual, - mapMergeWithInto, definedMap, - addHashCode, + hashCodeOf, + iterableFirst, + mapMap, + mapMergeWithInto, + setIntersect, setUnionInto } from "collection-utils"; +import { type DateTimeRecognizer } from "../DateTime"; +import { assert, defined } from "../support/Support"; +import { type TransformedStringTypeKind } from "../Type"; +// eslint-disable-next-line import/no-cycle +import { type StringTypeMapping, stringTypeMappingGet } from "../TypeBuilder"; + import { TypeAttributeKind } from "./TypeAttributes"; -import { defined, assert } from "../support/Support"; -import { StringTypeMapping, stringTypeMappingGet } from "../TypeBuilder"; -import { TransformedStringTypeKind } from "../Type"; -import { DateTimeRecognizer } from "../DateTime"; export class StringTypes { - static readonly unrestricted: StringTypes = new StringTypes(undefined, new Set()); + public static readonly unrestricted: StringTypes = new StringTypes(undefined, new Set()); - static fromCase(s: string, count: number): StringTypes { + public static fromCase(s: string, count: number): StringTypes { const caseMap: { [name: string]: number } = {}; caseMap[s] = count; return new StringTypes(new Map([[s, count] as [string, number]]), new Set()); } - static fromCases(cases: string[]): StringTypes { + public static fromCases(cases: string[]): StringTypes { const caseMap: { [name: string]: number } = {}; for (const s of cases) { caseMap[s] = 1; } + return new StringTypes(new Map(cases.map(s => [s, 1] as [string, number])), new Set()); } // undefined means no restrictions - constructor( - readonly cases: ReadonlyMap | undefined, - readonly transformations: ReadonlySet + public constructor( + public readonly cases: ReadonlyMap | undefined, + public readonly transformations: ReadonlySet ) { if (cases === undefined) { assert(transformations.size === 0, "We can't have an unrestricted string that also allows transformations"); } } - get isRestricted(): boolean { + public get isRestricted(): boolean { return this.cases !== undefined; } - union(othersArray: StringTypes[], startIndex: number): StringTypes { + public union(othersArray: StringTypes[], startIndex: number): StringTypes { if (this.cases === undefined) return this; const cases = new Map(this.cases); @@ -65,7 +68,7 @@ export class StringTypes { return new StringTypes(cases, transformations); } - intersect(othersArray: StringTypes[], startIndex: number): StringTypes { + public intersect(othersArray: StringTypes[], startIndex: number): StringTypes { let cases = this.cases; let transformations = this.transformations; @@ -89,10 +92,11 @@ export class StringTypes { transformations = setIntersect(transformations, other.transformations); } + return new StringTypes(cases, transformations); } - applyStringTypeMapping(mapping: StringTypeMapping): StringTypes { + public applyStringTypeMapping(mapping: StringTypeMapping): StringTypes { if (!this.isRestricted) return this; const kinds = new Set(); @@ -101,21 +105,22 @@ export class StringTypes { if (mapped === "string") return StringTypes.unrestricted; kinds.add(mapped); } + return new StringTypes(this.cases, new Set(kinds)); } - equals(other: any): boolean { + public equals(other: T): boolean { if (!(other instanceof StringTypes)) return false; return areEqual(this.cases, other.cases) && areEqual(this.transformations, other.transformations); } - hashCode(): number { + public hashCode(): number { let h = hashCodeOf(this.cases); h = addHashCode(h, hashCodeOf(this.transformations)); return h; } - toString(): string { + public toString(): string { const parts: string[] = []; const enumCases = this.cases; @@ -135,33 +140,33 @@ export class StringTypes { } class StringTypesTypeAttributeKind extends TypeAttributeKind { - constructor() { + public constructor() { super("stringTypes"); } - get inIdentity(): boolean { + public get inIdentity(): boolean { return true; } - requiresUniqueIdentity(st: StringTypes): boolean { + public requiresUniqueIdentity(st: StringTypes): boolean { return st.cases !== undefined && st.cases.size > 0; } - combine(arr: StringTypes[]): StringTypes { + public combine(arr: StringTypes[]): StringTypes { assert(arr.length > 0); return arr[0].union(arr, 1); } - intersect(arr: StringTypes[]): StringTypes { + public intersect(arr: StringTypes[]): StringTypes { assert(arr.length > 0); return arr[0].intersect(arr, 1); } - makeInferred(_: StringTypes): undefined { + public makeInferred(_: StringTypes): undefined { return undefined; } - stringify(st: StringTypes): string { + public stringify(st: StringTypes): string { return st.toString(); } } @@ -175,9 +180,10 @@ const MIN_INTEGER_STRING = 1 << 31; const MAX_INTEGER_STRING = -(MIN_INTEGER_STRING + 1); function isIntegerString(s: string): boolean { - if (s.match(INTEGER_STRING) === null) { + if (INTEGER_STRING.exec(s) === null) { return false; } + const i = parseInt(s, 10); return i >= MIN_INTEGER_STRING && i <= MAX_INTEGER_STRING; } @@ -185,7 +191,7 @@ function isIntegerString(s: string): boolean { const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/; function isUUID(s: string): boolean { - return s.match(UUID) !== null; + return UUID.exec(s) !== null; } // FIXME: This is obviously not a complete URI regex. The exclusion of @@ -194,7 +200,7 @@ function isUUID(s: string): boolean { const URI = /^(https?|ftp):\/\/[^{}]+$/; function isURI(s: string): boolean { - return s.match(URI) !== null; + return URI.exec(s) !== null; } /** @@ -208,7 +214,7 @@ export function inferTransformedStringTypeKindForString( s: string, recognizer: DateTimeRecognizer ): TransformedStringTypeKind | undefined { - if (s.length === 0 || "0123456789-abcdefth".indexOf(s[0]) < 0) return undefined; + if (s.length === 0 || !"0123456789-abcdefth".includes(s[0])) return undefined; if (recognizer.isDate(s)) { return "date"; @@ -225,5 +231,6 @@ export function inferTransformedStringTypeKindForString( } else if (isURI(s)) { return "uri"; } + return undefined; } diff --git a/packages/quicktype-core/src/attributes/TypeAttributes.ts b/packages/quicktype-core/src/attributes/TypeAttributes.ts index 1c73e8ffc..e8a3a61cd 100644 --- a/packages/quicktype-core/src/attributes/TypeAttributes.ts +++ b/packages/quicktype-core/src/attributes/TypeAttributes.ts @@ -1,62 +1,62 @@ -import { mapFilterMap, mapFilter, mapTranspose, hashString } from "collection-utils"; +import { hashString, mapFilter, mapFilterMap, mapTranspose } from "collection-utils"; -import { panic, assert } from "../support/Support"; -import { Type, TypeKind } from "../Type"; -import { BaseGraphRewriteBuilder } from "../GraphRewriting"; +import { type BaseGraphRewriteBuilder } from "../GraphRewriting"; +import { assert, panic } from "../support/Support"; +import { type Type, type TypeKind } from "../Type"; export class TypeAttributeKind { - constructor(readonly name: string) {} + public constructor(public readonly name: string) {} - appliesToTypeKind(kind: TypeKind): boolean { + public appliesToTypeKind(kind: TypeKind): boolean { return kind !== "any"; } - combine(_attrs: T[]): T | undefined { + public combine(_attrs: T[]): T | undefined { return panic(`Cannot combine type attribute ${this.name}`); } - intersect(attrs: T[]): T | undefined { + public intersect(attrs: T[]): T | undefined { return this.combine(attrs); } - makeInferred(_: T): T | undefined { + public makeInferred(_: T): T | undefined { return panic(`Cannot make type attribute ${this.name} inferred`); } - increaseDistance(attrs: T): T | undefined { + public increaseDistance(attrs: T): T | undefined { return attrs; } - addToSchema(_schema: { [name: string]: unknown }, _t: Type, _attrs: T): void { + public addToSchema(_schema: { [name: string]: unknown }, _t: Type, _attrs: T): void { return; } - children(_: T): ReadonlySet { + public children(_: T): ReadonlySet { return new Set(); } - stringify(_: T): string | undefined { + public stringify(_: T): string | undefined { return undefined; } - get inIdentity(): boolean { + public get inIdentity(): boolean { return false; } - requiresUniqueIdentity(_: T): boolean { + public requiresUniqueIdentity(_: T): boolean { return false; } - reconstitute(_builder: TBuilder, a: T): T { + public reconstitute(_builder: TBuilder, a: T): T { return a; } - makeAttributes(value: T): TypeAttributes { - const kvps: [this, T][] = [[this, value]]; + public makeAttributes(value: T): TypeAttributes { + const kvps: Array<[this, T]> = [[this, value]]; return new Map(kvps); } - tryGetInAttributes(a: TypeAttributes): T | undefined { + public tryGetInAttributes(a: TypeAttributes): T | undefined { return a.get(this); } @@ -65,7 +65,7 @@ export class TypeAttributeKind { return new Map(a).set(this, value); } - modifyInAttributes(a: TypeAttributes, modify: (value: T | undefined) => T | undefined): TypeAttributes { + public modifyInAttributes(a: TypeAttributes, modify: (value: T | undefined) => T | undefined): TypeAttributes { const modified = modify(this.tryGetInAttributes(a)); if (modified === undefined) { // FIXME: This is potentially super slow @@ -73,30 +73,34 @@ export class TypeAttributeKind { result.delete(this); return result; } + return this.setInAttributes(a, modified); } - setDefaultInAttributes(a: TypeAttributes, makeDefault: () => T): TypeAttributes { + public setDefaultInAttributes(a: TypeAttributes, makeDefault: () => T): TypeAttributes { if (this.tryGetInAttributes(a) !== undefined) return a; return this.modifyInAttributes(a, makeDefault); } - removeInAttributes(a: TypeAttributes): TypeAttributes { + public removeInAttributes(a: TypeAttributes): TypeAttributes { return mapFilter(a, (_, k) => k !== this); } - equals(other: any): boolean { + public equals(other: TypeAttributeKind): boolean { if (!(other instanceof TypeAttributeKind)) { return false; } + return this.name === other.name; } - hashCode(): number { + public hashCode(): number { return hashString(this.name); } } +// FIXME: strongly type this +// eslint-disable-next-line @typescript-eslint/no-explicit-any export type TypeAttributes = ReadonlyMap, any>; export const emptyTypeAttributes: TypeAttributes = new Map(); @@ -118,11 +122,14 @@ export function combineTypeAttributes( if (second === undefined) { return panic("Must have on array or two attributes"); } + attributeArray = [firstOrArray, second]; } const attributesByKind = mapTranspose(attributeArray); + // FIXME: strongly type this + // eslint-disable-next-line @typescript-eslint/no-explicit-any function combine(attrs: any[], kind: TypeAttributeKind): any { assert(attrs.length > 0, "Cannot combine zero type attributes"); if (attrs.length === 1) return attrs[0]; diff --git a/packages/quicktype-core/src/attributes/TypeNames.ts b/packages/quicktype-core/src/attributes/TypeNames.ts index c7225f3b7..f5d96a7ac 100644 --- a/packages/quicktype-core/src/attributes/TypeNames.ts +++ b/packages/quicktype-core/src/attributes/TypeNames.ts @@ -1,10 +1,11 @@ +import { definedMap, iterableFirst, iterableSkip, setMap, setUnionInto } from "collection-utils"; import * as pluralize from "pluralize"; -import { setMap, iterableFirst, iterableSkip, setUnionInto, definedMap } from "collection-utils"; -import { panic, defined, assert } from "../support/Support"; -import { TypeAttributeKind, TypeAttributes } from "./TypeAttributes"; -import { splitIntoWords } from "../support/Strings"; import { Chance } from "../support/Chance"; +import { splitIntoWords } from "../support/Strings"; +import { assert, defined, panic } from "../support/Support"; + +import { TypeAttributeKind, type TypeAttributes } from "./TypeAttributes"; let chance: Chance; let usedRandomNames: Set; @@ -36,6 +37,7 @@ function combineNames(names: ReadonlySet): string { if (originalFirst === undefined) { return panic("Named type has no names"); } + if (names.size === 1) { return originalFirst; } @@ -69,19 +71,21 @@ function combineNames(names: ReadonlySet): string { } } } + const prefix = prefixLength > 2 ? first.slice(0, prefixLength) : ""; const suffix = suffixLength > 2 ? first.slice(first.length - suffixLength) : ""; const combined = prefix + suffix; if (combined.length > 2) { return combined; } + return first; } export const tooManyNamesThreshold = 1000; export abstract class TypeNames { - static makeWithDistance( + public static makeWithDistance( names: ReadonlySet, alternativeNames: ReadonlySet | undefined, distance: number @@ -97,7 +101,7 @@ export abstract class TypeNames { return new RegularTypeNames(names, alternativeNames, distance); } - static make( + public static make( names: ReadonlySet, alternativeNames: ReadonlySet | undefined, areInferred: boolean @@ -105,33 +109,33 @@ export abstract class TypeNames { return TypeNames.makeWithDistance(names, alternativeNames, areInferred ? 1 : 0); } - constructor(readonly distance: number) {} + public constructor(public readonly distance: number) {} - get areInferred(): boolean { + public get areInferred(): boolean { return this.distance > 0; } - abstract get names(): ReadonlySet; - abstract get combinedName(): string; - abstract get proposedNames(): ReadonlySet; + public abstract get names(): ReadonlySet; + public abstract get combinedName(): string; + public abstract get proposedNames(): ReadonlySet; - abstract add(namesArray: TypeNames[], startIndex?: number): TypeNames; - abstract clearInferred(): TypeNames; - abstract makeInferred(): TypeNames; - abstract singularize(): TypeNames; - abstract toString(): string; + public abstract add(namesArray: TypeNames[], startIndex?: number): TypeNames; + public abstract clearInferred(): TypeNames; + public abstract makeInferred(): TypeNames; + public abstract singularize(): TypeNames; + public abstract toString(): string; } export class RegularTypeNames extends TypeNames { - constructor( - readonly names: ReadonlySet, + public constructor( + public readonly names: ReadonlySet, private readonly _alternativeNames: ReadonlySet | undefined, distance: number ) { super(distance); } - add(namesArray: TypeNames[], startIndex = 0): TypeNames { + public add(namesArray: TypeNames[], startIndex = 0): TypeNames { let newNames = new Set(this.names); let newDistance = this.distance; let newAlternativeNames = definedMap(this._alternativeNames, s => new Set(s)); @@ -143,6 +147,7 @@ export class RegularTypeNames extends TypeNames { if (newAlternativeNames === undefined) { newAlternativeNames = new Set(); } + setUnionInto(newAlternativeNames, other._alternativeNames); } @@ -165,32 +170,34 @@ export class RegularTypeNames extends TypeNames { setUnionInto(newNames, other.names); } } + return TypeNames.makeWithDistance(newNames, newAlternativeNames, newDistance); } - clearInferred(): TypeNames { + public clearInferred(): TypeNames { const newNames = this.areInferred ? new Set() : this.names; return TypeNames.makeWithDistance(newNames, new Set(), this.distance); } - get combinedName(): string { + public get combinedName(): string { return combineNames(this.names); } - get proposedNames(): ReadonlySet { + public get proposedNames(): ReadonlySet { const set = new Set([this.combinedName]); if (this._alternativeNames === undefined) { return set; } + setUnionInto(set, this._alternativeNames); return set; } - makeInferred(): TypeNames { + public makeInferred(): TypeNames { return TypeNames.makeWithDistance(this.names, this._alternativeNames, this.distance + 1); } - singularize(): TypeNames { + public singularize(): TypeNames { return TypeNames.makeWithDistance( setMap(this.names, pluralize.singular), definedMap(this._alternativeNames, an => setMap(an, pluralize.singular)), @@ -198,37 +205,39 @@ export class RegularTypeNames extends TypeNames { ); } - toString(): string { + public toString(): string { const inferred = this.areInferred ? `distance ${this.distance}` : "given"; const names = `${inferred} ${Array.from(this.names).join(",")}`; if (this._alternativeNames === undefined) { return names; } + return `${names} (${Array.from(this._alternativeNames).join(",")})`; } } export class TooManyTypeNames extends TypeNames { - readonly names: ReadonlySet; + public readonly names: ReadonlySet; - constructor(distance: number, name?: string) { + public constructor(distance: number, name?: string) { super(distance); if (name === undefined) { name = makeRandomName(); } + this.names = new Set([name]); } - get combinedName(): string { + public get combinedName(): string { return defined(iterableFirst(this.names)); } - get proposedNames(): ReadonlySet { + public get proposedNames(): ReadonlySet { return this.names; } - add(namesArray: TypeNames[], startIndex = 0): TypeNames { + public add(namesArray: TypeNames[], startIndex = 0): TypeNames { if (!this.areInferred) return this; for (let i = startIndex; i < namesArray.length; i++) { @@ -241,46 +250,47 @@ export class TooManyTypeNames extends TypeNames { return this; } - clearInferred(): TypeNames { + public clearInferred(): TypeNames { if (!this.areInferred) { return this; } + return TypeNames.makeWithDistance(new Set(), new Set(), this.distance); } - makeInferred(): TypeNames { + public makeInferred(): TypeNames { return new TooManyTypeNames(this.distance + 1, iterableFirst(this.names)); } - singularize(): TypeNames { + public singularize(): TypeNames { return this; } - toString(): string { + public toString(): string { return `too many ${this.combinedName}`; } } class TypeNamesTypeAttributeKind extends TypeAttributeKind { - constructor() { + public constructor() { super("names"); } - combine(namesArray: TypeNames[]): TypeNames { + public combine(namesArray: TypeNames[]): TypeNames { assert(namesArray.length > 0, "Can't combine zero type names"); return namesArray[0].add(namesArray, 1); } - makeInferred(tn: TypeNames): TypeNames { + public makeInferred(tn: TypeNames): TypeNames { return tn.makeInferred(); } - increaseDistance(tn: TypeNames): TypeNames { + public increaseDistance(tn: TypeNames): TypeNames { return tn.makeInferred(); } - stringify(tn: TypeNames): string { + public stringify(tn: TypeNames): string { return tn.toString(); } } @@ -308,5 +318,6 @@ export function makeNamesTypeAttributes(nameOrNames: NameOrNames, areNamesInferr } else { typeNames = nameOrNames as TypeNames; } + return namesTypeAttributeKind.makeAttributes(typeNames); } diff --git a/packages/quicktype-core/src/attributes/URIAttributes.ts b/packages/quicktype-core/src/attributes/URIAttributes.ts index 1f779708b..f2b5cb560 100644 --- a/packages/quicktype-core/src/attributes/URIAttributes.ts +++ b/packages/quicktype-core/src/attributes/URIAttributes.ts @@ -1,11 +1,12 @@ +import { setUnionManyInto } from "collection-utils"; import URI from "urijs"; -import { TypeAttributeKind, TypeAttributes, emptyTypeAttributes } from "./TypeAttributes"; -import { setUnionManyInto } from "collection-utils"; -import { JSONSchemaType, JSONSchemaAttributes, Ref } from "../input/JSONSchemaInput"; -import { JSONSchema } from "../input/JSONSchemaStore"; +import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; +import { type JSONSchema } from "../input/JSONSchemaStore"; import { checkArray, checkString } from "../support/Support"; -import { Type } from "../Type"; +import { type Type } from "../Type"; + +import { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./TypeAttributes"; const protocolsSchemaProperty = "qt-uri-protocols"; const extensionsSchemaProperty = "qt-uri-extensions"; @@ -14,31 +15,32 @@ const extensionsSchemaProperty = "qt-uri-extensions"; type URIAttributes = [ReadonlySet, ReadonlySet]; class URITypeAttributeKind extends TypeAttributeKind { - constructor() { + public constructor() { super("uriAttributes"); } - get inIdentity(): boolean { + public get inIdentity(): boolean { return true; } - combine(attrs: URIAttributes[]): URIAttributes { + public combine(attrs: URIAttributes[]): URIAttributes { const protocolSets = attrs.map(a => a[0]); const extensionSets = attrs.map(a => a[1]); return [setUnionManyInto(new Set(), protocolSets), setUnionManyInto(new Set(), extensionSets)]; } - makeInferred(_: URIAttributes): undefined { + public makeInferred(_: URIAttributes): undefined { return undefined; } - addToSchema(schema: { [name: string]: unknown }, t: Type, attrs: URIAttributes): void { + public addToSchema(schema: { [name: string]: unknown }, t: Type, attrs: URIAttributes): void { if (t.kind !== "string" && t.kind !== "uri") return; const [protocols, extensions] = attrs; if (protocols.size > 0) { schema[protocolsSchemaProperty] = Array.from(protocols).sort(); } + if (extensions.size > 0) { schema[extensionsSchemaProperty] = Array.from(extensions).sort(); } @@ -50,7 +52,7 @@ export const uriTypeAttributeKind: TypeAttributeKind = new URITyp const extensionRegex = /^.+(\.[^./\\]+)$/; function pathExtension(path: string): string | undefined { - const matches = path.match(extensionRegex); + const matches = extensionRegex.exec(path); if (matches === null) return undefined; return matches[1]; } diff --git a/packages/quicktype-core/src/index.ts b/packages/quicktype-core/src/index.ts index 67711c93d..fa1ea78be 100644 --- a/packages/quicktype-core/src/index.ts +++ b/packages/quicktype-core/src/index.ts @@ -1,6 +1,6 @@ export { - Options, - RendererOptions, + type Options, + type RendererOptions, getTargetLanguage, quicktypeMultiFile, quicktypeMultiFileSync, @@ -10,23 +10,23 @@ export { inferenceFlagNames, defaultInferenceFlags, inferenceFlagsObject, - InferenceFlags, - InferenceFlagName, - RunContext + type InferenceFlags, + type InferenceFlagName, + type RunContext } from "./Run"; -export { CompressedJSON, Value } from "./input/CompressedJSON"; -export { Input, InputData, JSONInput, JSONSourceData, jsonInputForTargetLanguage } from "./input/Inputs"; -export { JSONSchemaInput, JSONSchemaSourceData } from "./input/JSONSchemaInput"; -export { Ref, JSONSchemaType, JSONSchemaAttributes } from "./input/JSONSchemaInput"; -export { RenderContext } from "./Renderer"; -export { Option, OptionDefinition, getOptionValues, OptionValues } from "./RendererOptions"; -export { TargetLanguage, MultiFileRenderResult } from "./TargetLanguage"; +export { CompressedJSON, type Value } from "./input/CompressedJSON"; +export { type Input, InputData, JSONInput, type JSONSourceData, jsonInputForTargetLanguage } from "./input/Inputs"; +export { JSONSchemaInput, type JSONSchemaSourceData } from "./input/JSONSchemaInput"; +export { Ref, type JSONSchemaType, type JSONSchemaAttributes } from "./input/JSONSchemaInput"; +export type { RenderContext } from "./Renderer"; +export { Option, type OptionDefinition, getOptionValues, type OptionValues } from "./RendererOptions"; +export { TargetLanguage, type MultiFileRenderResult } from "./TargetLanguage"; export { all as defaultTargetLanguages, languageNamed } from "./language/All"; export { - MultiWord, - Sourcelike, - SerializedRenderResult, - Annotation, + type MultiWord, + type Sourcelike, + type SerializedRenderResult, + type Annotation, modifySource, singleWord, parenIfNeeded @@ -63,19 +63,21 @@ export { EnumType, MapType, UnionType, - TypeKind, + type TypeKind, ObjectType, - TransformedStringTypeKind, - PrimitiveStringTypeKind + type TransformedStringTypeKind, + type PrimitiveStringTypeKind } from "./Type"; export { getStream } from "./input/io/get-stream"; +// eslint-disable-next-line import/no-cycle export { readableFromFileOrURL, readFromFileOrURL } from "./input/io/NodeIO"; +// eslint-disable-next-line import/no-cycle export { FetchingJSONSchemaStore } from "./input/FetchingJSONSchemaStore"; -export { JSONSchemaStore, JSONSchema } from "./input/JSONSchemaStore"; +export { JSONSchemaStore, type JSONSchema } from "./input/JSONSchemaStore"; export { sourcesFromPostmanCollection } from "./input/PostmanCollection"; -export { TypeBuilder, StringTypeMapping } from "./TypeBuilder"; -export { TypeRef, derefTypeRef } from "./TypeGraph"; -export { TypeAttributeKind, TypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; +export { TypeBuilder, type StringTypeMapping } from "./TypeBuilder"; +export { type TypeRef, derefTypeRef } from "./TypeGraph"; +export { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; export { TypeNames, makeNamesTypeAttributes, namesTypeAttributeKind } from "./attributes/TypeNames"; export { StringTypes } from "./attributes/StringTypes"; export { removeNullFromUnion, matchType, nullableFromUnion } from "./TypeUtils"; diff --git a/packages/quicktype-core/src/input/CompressedJSON.ts b/packages/quicktype-core/src/input/CompressedJSON.ts index 2bdb2cc85..15e6122d0 100644 --- a/packages/quicktype-core/src/input/CompressedJSON.ts +++ b/packages/quicktype-core/src/input/CompressedJSON.ts @@ -1,22 +1,26 @@ import { addHashCode, hashCodeInit, hashString } from "collection-utils"; -import { defined, panic, assert } from "../support/Support"; -import { TransformedStringTypeKind, isPrimitiveStringTypeKind, transformedStringTypeTargetTypeKindsMap } from "../Type"; -import { DateTimeRecognizer } from "../DateTime"; import { inferTransformedStringTypeKindForString } from "../attributes/StringTypes"; +import { type DateTimeRecognizer } from "../DateTime"; +import { assert, defined, panic } from "../support/Support"; +import { + type TransformedStringTypeKind, + isPrimitiveStringTypeKind, + transformedStringTypeTargetTypeKindsMap +} from "../Type"; export enum Tag { - Null, - False, - True, - Integer, - Double, - InternedString, - UninternedString, - Object, - Array, - StringFormat, - TransformedString + Null = 1, + False = 2, + True = 3, + Integer = 4, + Double = 5, + InternedString = 6, + UninternedString = 7, + Object = 8, + Array = 9, + StringFormat = 10, + TransformedString = 11 } export type Value = number; @@ -37,51 +41,59 @@ export function valueTag(v: Value): Tag { return v & TAG_MASK; } -type Context = { - currentObject: Value[] | undefined; +interface Context { currentArray: Value[] | undefined; currentKey: string | undefined; currentNumberIsDouble: boolean; -}; + currentObject: Value[] | undefined; +} export abstract class CompressedJSON { private _rootValue: Value | undefined; private _ctx: Context | undefined; + private _contextStack: Context[] = []; private _strings: string[] = []; + private _stringIndexes: { [str: string]: number } = {}; + private _objects: Value[][] = []; + private _arrays: Value[][] = []; - constructor(readonly dateTimeRecognizer: DateTimeRecognizer, readonly handleRefs: boolean) {} + public constructor( + public readonly dateTimeRecognizer: DateTimeRecognizer, + public readonly handleRefs: boolean + ) {} - abstract parse(input: T): Promise; + public abstract parse(input: T): Promise; - parseSync(_input: T): Value { + public parseSync(_input: T): Value { return panic("parseSync not implemented in CompressedJSON"); } - getStringForValue(v: Value): string { + public getStringForValue(v: Value): string { const tag = valueTag(v); assert(tag === Tag.InternedString || tag === Tag.TransformedString); return this._strings[getIndex(v, tag)]; } - getObjectForValue = (v: Value): Value[] => { + public getObjectForValue = (v: Value): Value[] => { return this._objects[getIndex(v, Tag.Object)]; }; - getArrayForValue = (v: Value): Value[] => { + public getArrayForValue = (v: Value): Value[] => { return this._arrays[getIndex(v, Tag.Array)]; }; - getStringFormatTypeKind(v: Value): TransformedStringTypeKind { + public getStringFormatTypeKind(v: Value): TransformedStringTypeKind { const kind = this._strings[getIndex(v, Tag.StringFormat)]; if (!isPrimitiveStringTypeKind(kind) || kind === "string") { return panic("Not a transformed string type kind"); } + return kind; } @@ -93,6 +105,7 @@ export abstract class CompressedJSON { if (Object.prototype.hasOwnProperty.call(this._stringIndexes, s)) { return this._stringIndexes[s]; } + const index = this._strings.length; this._strings.push(s); this._stringIndexes[s] = index; @@ -133,6 +146,7 @@ export abstract class CompressedJSON { if (this._ctx.currentKey === undefined) { return panic("Must have key and can't have string when committing"); } + this._ctx.currentObject.push(this.makeString(this._ctx.currentKey), value); this._ctx.currentKey = undefined; } else if (this._ctx.currentArray !== undefined) { @@ -173,6 +187,7 @@ export abstract class CompressedJSON { value = makeValue(Tag.UninternedString, 0); } } + this.commitValue(value); } @@ -181,6 +196,7 @@ export abstract class CompressedJSON { if (value === undefined) { return panic("Finished without root document"); } + assert(this._ctx === undefined && this._contextStack.length === 0, "Finished with contexts present"); this._rootValue = undefined; return value; @@ -190,6 +206,7 @@ export abstract class CompressedJSON { if (this._ctx !== undefined) { this._contextStack.push(this._ctx); } + this._ctx = { currentObject: undefined, currentArray: undefined, @@ -213,6 +230,7 @@ export abstract class CompressedJSON { if (obj === undefined) { return panic("Object ended but not started"); } + this.popContext(); this.commitValue(this.internObject(obj)); } @@ -227,6 +245,7 @@ export abstract class CompressedJSON { if (arr === undefined) { return panic("Array ended but not started"); } + this.popContext(); this.commitValue(this.internArray(arr)); } @@ -236,11 +255,11 @@ export abstract class CompressedJSON { this._ctx = this._contextStack.pop(); } - equals(other: any): boolean { + public equals(other: CompressedJSON): boolean { return this === other; } - hashCode(): number { + public hashCode(): number { let hashAccumulator = hashCodeInit; for (const s of this._strings) { hashAccumulator = addHashCode(hashAccumulator, hashString(s)); @@ -256,6 +275,7 @@ export abstract class CompressedJSON { hashAccumulator = addHashCode(hashAccumulator, v); } } + for (const o of this._arrays) { for (const v of o) { hashAccumulator = addHashCode(hashAccumulator, v); @@ -267,11 +287,11 @@ export abstract class CompressedJSON { } export class CompressedJSONFromString extends CompressedJSON { - async parse(input: string): Promise { + public async parse(input: string): Promise { return this.parseSync(input); } - parseSync(input: string): Value { + public parseSync(input: string): Value { const json = JSON.parse(input); this.process(json); return this.finish(); @@ -293,13 +313,15 @@ export class CompressedJSONFromString extends CompressedJSON { for (const v of json) { this.process(v); } + this.finishArray(); } else if (typeof json === "object") { this.pushObjectContext(); for (const key of Object.getOwnPropertyNames(json)) { this.setPropertyKey(key); - this.process((json as any)[key]); + this.process(json[key as keyof typeof json]); } + this.finishObject(); } else { return panic("Invalid JSON object"); diff --git a/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts b/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts index 08c6e0526..4e7c132f5 100644 --- a/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts +++ b/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts @@ -1,13 +1,15 @@ -import { JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; +// eslint-disable-next-line import/no-cycle import { parseJSON } from ".."; + import { readFromFileOrURL } from "./io/NodeIO"; +import { type JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; export class FetchingJSONSchemaStore extends JSONSchemaStore { - constructor(private readonly _httpHeaders?: string[]) { + public constructor(private readonly _httpHeaders?: string[]) { super(); } - async fetch(address: string): Promise { + public async fetch(address: string): Promise { // console.log(`Fetching ${address}`); return parseJSON(await readFromFileOrURL(address, this._httpHeaders), "JSON Schema", address); } diff --git a/packages/quicktype-core/src/input/Inference.ts b/packages/quicktype-core/src/input/Inference.ts index 9fdcea588..85c544c7b 100644 --- a/packages/quicktype-core/src/input/Inference.ts +++ b/packages/quicktype-core/src/input/Inference.ts @@ -1,30 +1,34 @@ -import { Value, Tag, valueTag, CompressedJSON } from "./CompressedJSON"; -import { assertNever, defined, panic, assert } from "../support/Support"; -import { TypeBuilder } from "../TypeBuilder"; -import { UnionBuilder, UnionAccumulator } from "../UnionBuilder"; +import { StringTypes, inferTransformedStringTypeKindForString } from "../attributes/StringTypes"; +import { type TypeAttributes, emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { messageError } from "../Messages"; +import { assert, assertNever, defined, panic } from "../support/Support"; import { - ClassProperty, - transformedStringTypeTargetTypeKindsMap, - UnionType, + ArrayType, + type ClassProperty, ClassType, MapType, - ArrayType + UnionType, + transformedStringTypeTargetTypeKindsMap } from "../Type"; -import { TypeAttributes, emptyTypeAttributes } from "../attributes/TypeAttributes"; -import { StringTypes, inferTransformedStringTypeKindForString } from "../attributes/StringTypes"; -import { TypeRef, derefTypeRef } from "../TypeGraph"; -import { messageError } from "../Messages"; +import { type TypeBuilder } from "../TypeBuilder"; +import { type TypeRef, derefTypeRef } from "../TypeGraph"; import { nullableFromUnion } from "../TypeUtils"; +import { UnionAccumulator, UnionBuilder } from "../UnionBuilder"; + +import { type CompressedJSON, Tag, type Value, valueTag } from "./CompressedJSON"; // This should be the recursive type // Value[] | NestedValueArray[] // but TypeScript doesn't support that. +// FIXME: reactor this +// eslint-disable-next-line @typescript-eslint/no-explicit-any export type NestedValueArray = any; function forEachArrayInNestedValueArray(va: NestedValueArray, f: (va: Value[]) => void): void { if (va.length === 0) { return; } + if (Array.isArray(va[0])) { for (const x of va) { forEachArrayInNestedValueArray(x, f); @@ -43,7 +47,7 @@ function forEachValueInNestedValueArray(va: NestedValueArray, f: (v: Value) => v } class InferenceUnionBuilder extends UnionBuilder { - constructor( + public constructor( typeBuilder: TypeBuilder, private readonly _typeInference: TypeInference, private readonly _fixed: boolean @@ -78,16 +82,16 @@ function canBeEnumCase(_s: string): boolean { export type Accumulator = UnionAccumulator; export class TypeInference { - private _refIntersections: [TypeRef, string[]][] | undefined; + private _refIntersections: Array<[TypeRef, string[]]> | undefined; - constructor( + public constructor( private readonly _cjson: CompressedJSON, private readonly _typeBuilder: TypeBuilder, private readonly _inferMaps: boolean, private readonly _inferEnums: boolean ) {} - addValuesToAccumulator(valueArray: NestedValueArray, accumulator: Accumulator): void { + private addValuesToAccumulator(valueArray: NestedValueArray, accumulator: Accumulator): void { forEachValueInNestedValueArray(valueArray, value => { const t = valueTag(value); switch (t) { @@ -115,6 +119,7 @@ export class TypeInference { } else { accumulator.addStringType("string", emptyTypeAttributes); } + break; case Tag.UninternedString: accumulator.addStringType("string", emptyTypeAttributes); @@ -134,26 +139,30 @@ export class TypeInference { ); break; } + case Tag.TransformedString: { const s = this._cjson.getStringForValue(value); const kind = inferTransformedStringTypeKindForString(s, this._cjson.dateTimeRecognizer); if (kind === undefined) { return panic("TransformedString does not have a kind"); } + const producer = defined(transformedStringTypeTargetTypeKindsMap.get(kind)).attributesProducer; if (producer === undefined) { return panic("TransformedString does not have attribute producer"); } + accumulator.addStringType("string", producer(s), new StringTypes(new Map(), new Set([kind]))); break; } + default: return assertNever(t); } }); } - inferType( + public inferType( typeAttributes: TypeAttributes, valueArray: NestedValueArray, fixed: boolean, @@ -167,6 +176,7 @@ export class TypeInference { if (!ref.startsWith("#/")) { return messageError("InferenceJSONReferenceNotRooted", { reference: ref }); } + const parts = ref.split("/").slice(1); const graph = this._typeBuilder.typeGraph; let tref = topLevel; @@ -178,33 +188,39 @@ export class TypeInference { // FIXME: handle unions return messageError("InferenceJSONReferenceToUnion", { reference: ref }); } + t = nullable; } + if (t instanceof ClassType) { const cp = t.getProperties().get(part); if (cp === undefined) { return messageError("InferenceJSONReferenceWrongProperty", { reference: ref }); } + tref = cp.typeRef; } else if (t instanceof MapType) { tref = t.values.typeRef; } else if (t instanceof ArrayType) { - if (part.match("^[0-9]+$") === null) { + if (/^[0-9]+$/.exec(part) === null) { return messageError("InferenceJSONReferenceInvalidArrayIndex", { reference: ref }); } + tref = t.items.typeRef; } else { return messageError("InferenceJSONReferenceWrongProperty", { reference: ref }); } } + return tref; } - inferTopLevelType(typeAttributes: TypeAttributes, valueArray: NestedValueArray, fixed: boolean): TypeRef { + public inferTopLevelType(typeAttributes: TypeAttributes, valueArray: NestedValueArray, fixed: boolean): TypeRef { assert(this._refIntersections === undefined, "Didn't reset ref intersections - nested invocations?"); if (this._cjson.handleRefs) { this._refIntersections = []; } + const topLevel = this.inferType(typeAttributes, valueArray, fixed); if (this._cjson.handleRefs) { for (const [tref, refs] of defined(this._refIntersections)) { @@ -214,16 +230,17 @@ export class TypeInference { this._refIntersections = undefined; } + return topLevel; } - accumulatorForArray(valueArray: NestedValueArray): Accumulator { + private accumulatorForArray(valueArray: NestedValueArray): Accumulator { const accumulator = new UnionAccumulator(true); this.addValuesToAccumulator(valueArray, accumulator); return accumulator; } - makeTypeFromAccumulator( + private makeTypeFromAccumulator( accumulator: Accumulator, typeAttributes: TypeAttributes, fixed: boolean, @@ -233,7 +250,7 @@ export class TypeInference { return unionBuilder.buildUnion(accumulator, false, typeAttributes, forwardingRef); } - inferClassType( + public inferClassType( typeAttributes: TypeAttributes, objects: NestedValueArray, fixed: boolean, @@ -250,12 +267,13 @@ export class TypeInference { propertyNames.push(key); propertyValues[key] = []; } + propertyValues[key].push(value); } }); if (this._cjson.handleRefs && propertyNames.length === 1 && propertyNames[0] === "$ref") { - const values = propertyValues["$ref"]; + const values = propertyValues.$ref; if (values.every(v => valueTag(v) === Tag.InternedString)) { const allRefs = values.map(v => this._cjson.getStringForValue(v)); // FIXME: Add is-ref attribute @@ -270,6 +288,7 @@ export class TypeInference { for (const key of propertyNames) { this.addValuesToAccumulator(propertyValues[key], accumulator); } + const values = this.makeTypeFromAccumulator(accumulator, emptyTypeAttributes, fixed); return this._typeBuilder.getMapType(typeAttributes, values, forwardingRef); } diff --git a/packages/quicktype-core/src/input/Inputs.ts b/packages/quicktype-core/src/input/Inputs.ts index 9ff8905fa..96d78756a 100644 --- a/packages/quicktype-core/src/input/Inputs.ts +++ b/packages/quicktype-core/src/input/Inputs.ts @@ -1,48 +1,53 @@ -import { iterableFirst, iterableFind, iterableSome, setFilterMap, withDefault, arrayMapSync } from "collection-utils"; +import { arrayMapSync, iterableFind, iterableFirst, iterableSome, setFilterMap, withDefault } from "collection-utils"; -import { Value, CompressedJSON, CompressedJSONFromString } from "./CompressedJSON"; -import { panic, errorMessage, defined } from "../support/Support"; -import { messageError } from "../Messages"; -import { TypeBuilder } from "../TypeBuilder"; -import { makeNamesTypeAttributes } from "../attributes/TypeNames"; import { descriptionTypeAttributeKind } from "../attributes/Description"; -import { TypeInference } from "./Inference"; -import { TargetLanguage } from "../TargetLanguage"; -import { RunContext } from "../Run"; +import { makeNamesTypeAttributes } from "../attributes/TypeNames"; +// eslint-disable-next-line import/no-cycle import { languageNamed } from "../language/All"; +import { messageError } from "../Messages"; +import { type RunContext } from "../Run"; +import { defined, errorMessage, panic } from "../support/Support"; +import { type TargetLanguage } from "../TargetLanguage"; +import { type TypeBuilder } from "../TypeBuilder"; -export interface Input { - readonly kind: string; - readonly needIR: boolean; - readonly needSchemaProcessing: boolean; - - addSource(source: T): Promise; - addSourceSync(source: T): void; - - singleStringSchemaSource(): string | undefined; +import { type CompressedJSON, CompressedJSONFromString, type Value } from "./CompressedJSON"; +import { TypeInference } from "./Inference"; - addTypes( +export interface Input { + addSource: (source: T) => Promise; + addSourceSync: (source: T) => void; + addTypes: ( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean - ): Promise; - addTypesSync( + ) => Promise; + + addTypesSync: ( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean - ): void; + ) => void; + readonly kind: string; + + readonly needIR: boolean; + + readonly needSchemaProcessing: boolean; + singleStringSchemaSource: () => string | undefined; } -type JSONTopLevel = { samples: Value[]; description: string | undefined }; +interface JSONTopLevel { + description: string | undefined; + samples: Value[]; +} export interface JSONSourceData { + description?: string; name: string; samples: T[]; - description?: string; } function messageParseError(name: string, description: string | undefined, e: unknown): never { @@ -54,13 +59,15 @@ function messageParseError(name: string, description: string | undefined, e: unk } export class JSONInput implements Input> { - readonly kind: string = "json"; - readonly needIR: boolean = true; - readonly needSchemaProcessing: boolean = false; + public readonly kind: string = "json"; + + public readonly needIR: boolean = true; + + public readonly needSchemaProcessing: boolean = false; private readonly _topLevels: Map = new Map(); - constructor(private readonly _compressedJSON: CompressedJSON) {} + public constructor(private readonly _compressedJSON: CompressedJSON) {} private addSample(topLevelName: string, sample: Value): void { let topLevel = this._topLevels.get(topLevelName); @@ -68,6 +75,7 @@ export class JSONInput implements Input> { topLevel = { samples: [], description: undefined }; this._topLevels.set(topLevelName, topLevel); } + topLevel.samples.push(sample); } @@ -76,6 +84,7 @@ export class JSONInput implements Input> { if (topLevel === undefined) { return panic("Trying to set description for a top-level that doesn't exist"); } + topLevel.description = description; } @@ -88,7 +97,7 @@ export class JSONInput implements Input> { } } - async addSource(source: JSONSourceData): Promise { + public async addSource(source: JSONSourceData): Promise { const { name, samples, description } = source; try { const values = await arrayMapSync(samples, async s => await this._compressedJSON.parse(s)); @@ -98,7 +107,7 @@ export class JSONInput implements Input> { } } - addSourceSync(source: JSONSourceData): void { + public addSourceSync(source: JSONSourceData): void { const { name, samples, description } = source; try { const values = samples.map(s => this._compressedJSON.parseSync(s)); @@ -108,21 +117,21 @@ export class JSONInput implements Input> { } } - singleStringSchemaSource(): undefined { + public singleStringSchemaSource(): undefined { return undefined; } - async addTypes( + public async addTypes( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean ): Promise { - return this.addTypesSync(ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels); + this.addTypesSync(ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels); } - addTypesSync( + public addTypesSync( _ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, @@ -150,15 +159,17 @@ export function jsonInputForTargetLanguage( if (typeof targetLanguage === "string") { targetLanguage = defined(languageNamed(targetLanguage, languages)); } + const compressedJSON = new CompressedJSONFromString(targetLanguage.dateTimeRecognizer, handleJSONRefs); return new JSONInput(compressedJSON); } export class InputData { // FIXME: Make into a Map, indexed by kind. + // eslint-disable-next-line @typescript-eslint/no-explicit-any private _inputs: Set> = new Set(); - addInput(input: Input): void { + public addInput(input: Input): void { this._inputs = this._inputs.add(input); } @@ -168,20 +179,21 @@ export class InputData { input = makeInput(); this.addInput(input); } + return input; } - async addSource(kind: string, source: T, makeInput: () => Input): Promise { + public async addSource(kind: string, source: T, makeInput: () => Input): Promise { const input = this.getOrAddInput(kind, makeInput); await input.addSource(source); } - addSourceSync(kind: string, source: T, makeInput: () => Input): void { + public addSourceSync(kind: string, source: T, makeInput: () => Input): void { const input = this.getOrAddInput(kind, makeInput); input.addSourceSync(source); } - async addTypes( + public async addTypes( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, @@ -193,7 +205,7 @@ export class InputData { } } - addTypesSync( + public addTypesSync( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, @@ -205,19 +217,20 @@ export class InputData { } } - get needIR(): boolean { + public get needIR(): boolean { return iterableSome(this._inputs, i => i.needIR); } - get needSchemaProcessing(): boolean { + public get needSchemaProcessing(): boolean { return iterableSome(this._inputs, i => i.needSchemaProcessing); } - singleStringSchemaSource(): string | undefined { + public singleStringSchemaSource(): string | undefined { const schemaStrings = setFilterMap(this._inputs, i => i.singleStringSchemaSource()); if (schemaStrings.size > 1) { return panic("We have more than one input with a string schema source"); } + return iterableFirst(schemaStrings); } } diff --git a/packages/quicktype-core/src/input/JSONSchemaInput.ts b/packages/quicktype-core/src/input/JSONSchemaInput.ts index 8fc74e6dd..e000f7f40 100644 --- a/packages/quicktype-core/src/input/JSONSchemaInput.ts +++ b/packages/quicktype-core/src/input/JSONSchemaInput.ts @@ -1,72 +1,74 @@ -import URI from "urijs"; import { - setFilter, EqualityMap, - mapMap, - mapFromObject, - setSubtract, - mapFromIterable, - iterableFind, - mapSortBy, - mapMapSync, - mapMergeInto, - arrayMapSync, - arrayLast, + addHashCode, arrayGetFromEnd, - hashCodeOf, - hasOwnProperty, + arrayLast, + arrayMapSync, definedMap, - addHashCode, + // eslint-disable-next-line @typescript-eslint/no-redeclare + hasOwnProperty, + hashCodeOf, + hashString, + iterableFind, iterableFirst, - hashString + mapFromIterable, + mapFromObject, + mapMap, + mapMapSync, + mapMergeInto, + mapSortBy, + setFilter, + setSubtract } from "collection-utils"; +import URI from "urijs"; +import { accessorNamesAttributeProducer } from "../attributes/AccessorNames"; import { - PrimitiveTypeKind, - TransformedStringTypeKind, - transformedStringTypeTargetTypeKindsMap, - isNumberTypeKind -} from "../Type"; -import { panic, assertNever, StringMap, assert, defined, parseJSON } from "../support/Support"; -import { TypeBuilder } from "../TypeBuilder"; -import { TypeNames } from "../attributes/TypeNames"; -import { makeNamesTypeAttributes, modifyTypeNames, singularizeTypeNames } from "../attributes/TypeNames"; + minMaxAttributeProducer, + minMaxLengthAttributeProducer, + patternAttributeProducer +} from "../attributes/Constraints"; +// eslint-disable-next-line import/no-cycle +import { descriptionAttributeProducer } from "../attributes/Description"; +import { enumValuesAttributeProducer } from "../attributes/EnumValues"; +import { StringTypes } from "../attributes/StringTypes"; import { - TypeAttributes, - makeTypeAttributesInferred, + type TypeAttributes, + combineTypeAttributes, emptyTypeAttributes, - combineTypeAttributes + makeTypeAttributesInferred } from "../attributes/TypeAttributes"; -import { JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; +import { TypeNames, makeNamesTypeAttributes, modifyTypeNames, singularizeTypeNames } from "../attributes/TypeNames"; +import { uriSchemaAttributesProducer } from "../attributes/URIAttributes"; import { messageAssert, messageError } from "../Messages"; -import { StringTypes } from "../attributes/StringTypes"; - -import { TypeRef } from "../TypeGraph"; import { type RunContext } from "../Run"; +import { type StringMap, assert, assertNever, defined, panic, parseJSON } from "../support/Support"; +import { + type PrimitiveTypeKind, + type TransformedStringTypeKind, + isNumberTypeKind, + transformedStringTypeTargetTypeKindsMap +} from "../Type"; +import { type TypeBuilder } from "../TypeBuilder"; +import { type TypeRef } from "../TypeGraph"; + import { type Input } from "./Inputs"; +import { type JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; // There's a cyclic import here. Ignoring now because it requires a large refactor. // skipcq: JS-E1008 -import { descriptionAttributeProducer } from "../attributes/Description"; - -import { accessorNamesAttributeProducer } from "../attributes/AccessorNames"; -import { enumValuesAttributeProducer } from "../attributes/EnumValues"; -import { minMaxAttributeProducer } from "../attributes/Constraints"; -import { minMaxLengthAttributeProducer } from "../attributes/Constraints"; -import { patternAttributeProducer } from "../attributes/Constraints"; -import { uriSchemaAttributesProducer } from "../attributes/URIAttributes"; export enum PathElementKind { - Root, - KeyOrIndex, - Type, - Object + Root = 1, + KeyOrIndex = 2, + Type = 3, + Object = 4 } export type PathElement = | { kind: PathElementKind.Root } - | { kind: PathElementKind.KeyOrIndex; key: string } - | { kind: PathElementKind.Type; index: number } + | { key: string; kind: PathElementKind.KeyOrIndex } + | { index: number; kind: PathElementKind.Type } | { kind: PathElementKind.Object }; function keyOrIndex(pe: PathElement): string | undefined { @@ -76,38 +78,43 @@ function keyOrIndex(pe: PathElement): string | undefined { function pathElementEquals(a: PathElement, b: PathElement): boolean { if (a.kind !== b.kind) return false; - switch (a.kind) { - case PathElementKind.Type: - return a.index === (b as any).index; - case PathElementKind.KeyOrIndex: - return a.key === (b as any).key; - default: - return true; + + if (a.kind === PathElementKind.Type && b.kind === PathElementKind.Type) { + return a.index === b.index; + } + + if (a.kind === PathElementKind.KeyOrIndex && b.kind === PathElementKind.KeyOrIndex) { + return a.key === b.key; } + + return true; } function withRef(refOrLoc: Ref | (() => Ref) | Location): { ref: Ref }; function withRef(refOrLoc: Ref | (() => Ref) | Location, props?: T): T & { ref: Ref }; -function withRef(refOrLoc: Ref | (() => Ref) | Location, props?: T): any { +function withRef(refOrLoc: Ref | (() => Ref) | Location, props?: T): unknown { const ref = typeof refOrLoc === "function" ? refOrLoc() : refOrLoc instanceof Ref ? refOrLoc : refOrLoc.canonicalRef; - return Object.assign({ ref }, props === undefined ? {} : props); + return Object.assign({ ref }, props ?? {}); } -function checkJSONSchemaObject(x: any, refOrLoc: Ref | (() => Ref)): StringMap { +function checkJSONSchemaObject(x: unknown, refOrLoc: Ref | (() => Ref)): StringMap { if (Array.isArray(x)) { return messageError("SchemaArrayIsInvalidSchema", withRef(refOrLoc)); } + if (x === null) { return messageError("SchemaNullIsInvalidSchema", withRef(refOrLoc)); } + if (typeof x !== "object") { return messageError("SchemaInvalidJSONSchemaType", withRef(refOrLoc, { type: typeof x })); } + return x; } -function checkJSONSchema(x: any, refOrLoc: Ref | (() => Ref)): JSONSchema { +function checkJSONSchema(x: unknown, refOrLoc: Ref | (() => Ref)): JSONSchema { if (typeof x === "boolean") return x; return checkJSONSchemaObject(x, refOrLoc); } @@ -123,16 +130,17 @@ function normalizeURI(uri: string | URI): URI { if (typeof uri === "string") { uri = new URI(uri); } + return new URI(URI.decode(uri.clone().normalize().toString())); } export class Ref { - static root(address: string | undefined): Ref { + public static root(address: string | undefined): Ref { const uri = definedMap(address, a => new URI(a)); return new Ref(uri, []); } - private static parsePath(path: string): ReadonlyArray { + private static parsePath(path: string): readonly PathElement[] { const elements: PathElement[] = []; if (path.startsWith("/")) { @@ -142,14 +150,13 @@ export class Ref { if (path !== "") { const parts = path.split("/"); - for (let i = 0; i < parts.length; i++) { - elements.push({ kind: PathElementKind.KeyOrIndex, key: parts[i] }); - } + parts.forEach(part => elements.push({ kind: PathElementKind.KeyOrIndex, key: part })); } + return elements; } - static parseURI(uri: URI, destroyURI = false): Ref { + public static parseURI(uri: URI, destroyURI = false): Ref { if (!destroyURI) { uri = uri.clone(); } @@ -159,19 +166,20 @@ export class Ref { if ((uri.host() !== "" || uri.filename() !== "") && path === "") { path = "/"; } + const elements = Ref.parsePath(path); return new Ref(uri, elements); } - static parse(ref: string): Ref { + public static parse(ref: string): Ref { return Ref.parseURI(new URI(ref), true); } public addressURI: URI | undefined; - constructor( + public constructor( addressURI: URI | undefined, - readonly path: ReadonlyArray + public readonly path: readonly PathElement[] ) { if (addressURI !== undefined) { assert(addressURI.fragment() === "", `Ref URI with fragment is not allowed: ${addressURI.toString()}`); @@ -181,15 +189,15 @@ export class Ref { } } - get hasAddress(): boolean { + public get hasAddress(): boolean { return this.addressURI !== undefined; } - get address(): string { + public get address(): string { return defined(this.addressURI).toString(); } - get isRoot(): boolean { + public get isRoot(): boolean { return this.path.length === 1 && this.path[0].kind === PathElementKind.Root; } @@ -199,31 +207,34 @@ export class Ref { return new Ref(this.addressURI, newPath); } - push(...keys: string[]): Ref { + public push(...keys: string[]): Ref { + // eslint-disable-next-line @typescript-eslint/no-this-alias let ref: Ref = this; for (const key of keys) { ref = ref.pushElement({ kind: PathElementKind.KeyOrIndex, key }); } + return ref; } - pushObject(): Ref { + public pushObject(): Ref { return this.pushElement({ kind: PathElementKind.Object }); } - pushType(index: number): Ref { + public pushType(index: number): Ref { return this.pushElement({ kind: PathElementKind.Type, index }); } - resolveAgainst(base: Ref | undefined): Ref { + public resolveAgainst(base: Ref | undefined): Ref { let addressURI = this.addressURI; - if (base !== undefined && base.addressURI !== undefined) { + if (base?.addressURI !== undefined) { addressURI = addressURI === undefined ? base.addressURI : addressURI.absoluteTo(base.addressURI); } + return new Ref(addressURI, this.path); } - get name(): string { + public get name(): string { const path = Array.from(this.path); for (;;) { @@ -234,9 +245,11 @@ export class Ref { if (name.length > suffix.length + 1) { name = name.slice(0, name.length - suffix.length - 1); } + if (name === "") { return "Something"; } + return name; } @@ -245,6 +258,7 @@ export class Ref { if (numberRegexp.test(e.key)) { return e.key; } + break; case PathElementKind.Type: case PathElementKind.Object: @@ -255,14 +269,14 @@ export class Ref { } } - get definitionName(): string | undefined { + public get definitionName(): string | undefined { const pe = arrayGetFromEnd(this.path, 2); if (pe === undefined) return undefined; if (keyOrIndex(pe) === "definitions") return keyOrIndex(defined(arrayLast(this.path))); return undefined; } - toString(): string { + public toString(): string { function elementToString(e: PathElement): string { switch (e.kind) { case PathElementKind.Root: @@ -277,16 +291,18 @@ export class Ref { return assertNever(e); } } + const address = this.addressURI === undefined ? "" : this.addressURI.toString(); return address + "#" + this.path.map(elementToString).join("/"); } - private lookup(local: any, path: ReadonlyArray, root: JSONSchema): JSONSchema { - const refMaker = () => new Ref(this.addressURI, path); + private lookup(local: unknown, path: readonly PathElement[], root: JSONSchema): JSONSchema { + const refMaker = (): Ref => new Ref(this.addressURI, path); const first = path[0]; if (first === undefined) { return checkJSONSchema(local, refMaker); } + const rest = path.slice(1); switch (first.kind) { case PathElementKind.Root: @@ -297,17 +313,21 @@ export class Ref { if (!/^\d+$/.test(key)) { return messageError("SchemaCannotIndexArrayWithNonNumber", withRef(refMaker, { actual: key })); } + const index = parseInt(first.key, 10); if (index >= local.length) { return messageError("SchemaIndexNotInArray", withRef(refMaker, { index })); } + return this.lookup(local[index], rest, root); } else { if (!hasOwnProperty(local, key)) { return messageError("SchemaKeyNotInObject", withRef(refMaker, { key })); } + return this.lookup(checkJSONSchemaObject(local, refMaker)[first.key], rest, root); } + case PathElementKind.Type: return panic('Cannot look up path that indexes "type"'); case PathElementKind.Object: @@ -317,26 +337,28 @@ export class Ref { } } - lookupRef(root: JSONSchema): JSONSchema { + public lookupRef(root: JSONSchema): JSONSchema { return this.lookup(root, this.path, root); } - equals(other: any): boolean { + public equals(other: R): boolean { if (!(other instanceof Ref)) return false; if (this.addressURI !== undefined && other.addressURI !== undefined) { if (!this.addressURI.equals(other.addressURI)) return false; } else { if ((this.addressURI === undefined) !== (other.addressURI === undefined)) return false; } + const l = this.path.length; if (l !== other.path.length) return false; for (let i = 0; i < l; i++) { if (!pathElementEquals(this.path[i], other.path[i])) return false; } + return true; } - hashCode(): number { + public hashCode(): number { let acc = hashCodeOf(definedMap(this.addressURI, u => u.toString())); for (const pe of this.path) { acc = addHashCode(acc, pe.kind); @@ -351,84 +373,94 @@ export class Ref { break; } } + return acc; } } class Location { public readonly canonicalRef: Ref; + public readonly virtualRef: Ref; - constructor( + public constructor( canonicalRef: Ref, virtualRef?: Ref, - readonly haveID: boolean = false + public readonly haveID: boolean = false ) { this.canonicalRef = canonicalRef; - this.virtualRef = virtualRef !== undefined ? virtualRef : canonicalRef; + this.virtualRef = virtualRef ?? canonicalRef; } - updateWithID(id: any) { + public updateWithID(id: string | unknown): Location { if (typeof id !== "string") return this; const parsed = Ref.parse(id); const virtual = this.haveID ? parsed.resolveAgainst(this.virtualRef) : parsed; if (!this.haveID) { messageAssert(virtual.hasAddress, "SchemaIDMustHaveAddress", withRef(this, { id })); } + return new Location(this.canonicalRef, virtual, true); } - push(...keys: string[]): Location { + public push(...keys: string[]): Location { return new Location(this.canonicalRef.push(...keys), this.virtualRef.push(...keys), this.haveID); } - pushObject(): Location { + public pushObject(): Location { return new Location(this.canonicalRef.pushObject(), this.virtualRef.pushObject(), this.haveID); } - pushType(index: number): Location { + public pushType(index: number): Location { return new Location(this.canonicalRef.pushType(index), this.virtualRef.pushType(index), this.haveID); } - toString(): string { + public toString(): string { return `${this.virtualRef.toString()} (${this.canonicalRef.toString()})`; } } class Canonizer { private readonly _map = new EqualityMap(); + private readonly _schemaAddressesAdded = new Set(); - constructor(private readonly _ctx: RunContext) {} + public constructor(private readonly _ctx: RunContext) {} - private addIDs(schema: any, loc: Location) { + private addIDs(schema: unknown, loc: Location): void { if (schema === null) return; if (Array.isArray(schema)) { for (let i = 0; i < schema.length; i++) { this.addIDs(schema[i], loc.push(i.toString())); } + return; } + if (typeof schema !== "object") { return; } + const locWithoutID = loc; - const maybeID = schema["$id"]; + const maybeID = "$id" in schema ? schema.$id : undefined; if (typeof maybeID === "string") { loc = loc.updateWithID(maybeID); } + if (loc.haveID) { if (this._ctx.debugPrintSchemaResolving) { console.log(`adding mapping ${loc.toString()}`); } + this._map.set(loc.virtualRef, locWithoutID); } + for (const property of Object.getOwnPropertyNames(schema)) { - this.addIDs(schema[property], loc.push(property)); + this.addIDs(schema[property as keyof typeof schema], loc.push(property)); } } - addSchema(schema: any, address: string): boolean { + public addSchema(schema: unknown, address: string): boolean { if (this._schemaAddressesAdded.has(address)) return false; this.addIDs(schema, new Location(Ref.root(address), Ref.root(undefined))); @@ -437,19 +469,20 @@ class Canonizer { } // Returns: Canonical ref - canonize(base: Location, ref: Ref): Location { + public canonize(base: Location, ref: Ref): Location { const virtual = ref.resolveAgainst(base.virtualRef); const loc = this._map.get(virtual); if (loc !== undefined) { return loc; } + const canonicalRef = virtual.addressURI === undefined ? new Ref(base.canonicalRef.addressURI, virtual.path) : virtual; return new Location(canonicalRef, new Ref(undefined, virtual.path)); } } -function checkTypeList(typeOrTypes: any, loc: Location): ReadonlySet { +function checkTypeList(typeOrTypes: string | string[], loc: Location): ReadonlySet { let set: Set; if (typeof typeOrTypes === "string") { set = new Set([typeOrTypes]); @@ -459,30 +492,36 @@ function checkTypeList(typeOrTypes: any, loc: Location): ReadonlySet { if (typeof t !== "string") { return messageError("SchemaTypeElementMustBeString", withRef(loc, { element: t })); } + arr.push(t); } + set = new Set(arr); } else { return messageError("SchemaTypeMustBeStringOrStringArray", withRef(loc, { actual: typeOrTypes })); } + messageAssert(set.size > 0, "SchemaNoTypeSpecified", withRef(loc)); const validTypes = ["null", "boolean", "object", "array", "number", "string", "integer"]; - const maybeInvalid = iterableFind(set, s => validTypes.indexOf(s) < 0); + const maybeInvalid = iterableFind(set, s => !validTypes.includes(s)); if (maybeInvalid !== undefined) { return messageError("SchemaInvalidType", withRef(loc, { type: maybeInvalid })); } + return set; } -function checkRequiredArray(arr: any, loc: Location): string[] { +function checkRequiredArray(arr: string[], loc: Location): string[] { if (!Array.isArray(arr)) { return messageError("SchemaRequiredMustBeStringOrStringArray", withRef(loc, { actual: arr })); } + for (const e of arr) { if (typeof e !== "string") { return messageError("SchemaRequiredElementMustBeString", withRef(loc, { element: e })); } } + return arr; } @@ -499,14 +538,14 @@ export type JSONSchemaType = keyof typeof schemaTypeDict; const schemaTypes = Object.getOwnPropertyNames(schemaTypeDict) as JSONSchemaType[]; -export type JSONSchemaAttributes = { - forType?: TypeAttributes; - forUnion?: TypeAttributes; - forObject?: TypeAttributes; +export interface JSONSchemaAttributes { + forCases?: TypeAttributes[]; forNumber?: TypeAttributes; + forObject?: TypeAttributes; forString?: TypeAttributes; - forCases?: TypeAttributes[]; -}; + forType?: TypeAttributes; + forUnion?: TypeAttributes; +} export type JSONSchemaAttributeProducer = ( schema: JSONSchema, canonicalRef: Ref, @@ -532,7 +571,7 @@ function schemaFetchError(base: Location | undefined, address: string): never { } class Resolver { - constructor( + public constructor( private readonly _ctx: RunContext, private readonly _store: JSONSchemaStore, private readonly _canonizer: Canonizer @@ -574,12 +613,13 @@ class Resolver { lookupLoc.haveID ); } + return [lookupLoc.canonicalRef.lookupRef(schema), lookupLoc]; } } } - async resolveVirtualRef(base: Location, virtualRef: Ref): Promise<[JSONSchema, Location]> { + public async resolveVirtualRef(base: Location, virtualRef: Ref): Promise<[JSONSchema, Location]> { if (this._ctx.debugPrintSchemaResolving) { console.log(`resolving ${virtualRef.toString()} relative to ${base.toString()}`); } @@ -592,6 +632,7 @@ class Resolver { if (this._ctx.debugPrintSchemaResolving) { console.log(`resolved to ${result[1].toString()}`); } + return [schema, result[1]]; } @@ -606,13 +647,14 @@ class Resolver { if (this._ctx.debugPrintSchemaResolving) { console.log(`resolved to ${result[1].toString()}`); } + return [schema, result[1]]; } return schemaFetchError(base, virtualRef.address); } - async resolveTopLevelRef(ref: Ref): Promise<[JSONSchema, Location]> { + public async resolveTopLevelRef(ref: Ref): Promise<[JSONSchema, Location]> { return await this.resolveVirtualRef(new Location(new Ref(ref.addressURI, [])), new Ref(undefined, ref.path)); } } @@ -630,6 +672,7 @@ async function addTypesInSchema( if (maybeRef !== undefined) { assert(maybeRef === t, "Trying to set path again to different type"); } + typeForCanonicalRef.set(loc.canonicalRef, t); } @@ -638,8 +681,8 @@ async function addTypesInSchema( attributes: TypeAttributes, properties: StringMap, requiredArray: string[], - additionalProperties: any, - sortKey: (k: string) => number | string = (k: string) => k.toLowerCase() + additionalProperties: unknown, + sortKey: (k: string) => number | string = (k: string): string => k.toLowerCase() ): Promise { const required = new Set(requiredArray); const propertiesMap = mapSortBy(mapFromObject(properties), (_, k) => sortKey(k)); @@ -666,6 +709,7 @@ async function addTypesInSchema( singularizeTypeNames(attributes) ); } + const additionalRequired = setSubtract(required, props.keys()); if (additionalRequired.size > 0) { const t = additionalPropertiesType; @@ -678,6 +722,7 @@ async function addTypesInSchema( ); mapMergeInto(props, additionalProps); } + return typeBuilder.getUniqueObjectType(attributes, props, additionalPropertiesType); } @@ -690,25 +735,28 @@ async function addTypesInSchema( if (typeSet !== undefined && !typeSet.has(name)) { return false; } + if (enumArray !== undefined) { - let predicate: (x: any) => boolean; + let predicate: (x: unknown) => boolean; switch (name) { case "null": - predicate = (x: any) => x === null; + predicate = (x): x is null => x === null; break; case "integer": - predicate = (x: any) => typeof x === "number" && x === Math.floor(x); + predicate = (x): x is number => typeof x === "number" && x === Math.floor(x); break; default: - predicate = (x: any) => typeof x === name; + predicate = (x): x is typeof name => typeof x === name; break; } return enumArray.find(predicate) !== undefined; } + if (isConst) { return name === (schema.type ?? typeof schema.const); } + return true; } @@ -729,10 +777,12 @@ async function addTypesInSchema( if (newAttributes === undefined) continue; attributes.push(newAttributes); } + if (cases === undefined) { producedAttributesForNoCases = attributes; } } + for (const a of attributes) { f(a); } @@ -764,11 +814,13 @@ async function addTypesInSchema( }) ); } + return modifyTypeNames(attributes, maybeTypeNames => { const typeNames = defined(maybeTypeNames); if (!typeNames.areInferred) { return typeNames; } + let title = schema.title; if (typeof title !== "string") { title = loc.canonicalRef.definitionName; @@ -813,6 +865,7 @@ async function addTypesInSchema( } else { itemType = typeBuilder.getPrimitiveType("any"); } + typeBuilder.addAttributes(itemType, singularAttributes); return typeBuilder.getArrayType(emptyTypeAttributes, itemType); } @@ -834,7 +887,7 @@ async function addTypesInSchema( // In Schema Draft 3, `required` is `true` on a property that's required. for (const p of Object.getOwnPropertyNames(properties)) { - if (properties[p].required === true && required.indexOf(p) < 0) { + if (properties[p].required === true && !required.includes(p)) { required.push(p); } } @@ -856,7 +909,7 @@ async function addTypesInSchema( combineProducedAttributes(({ forObject }) => forObject) ); const order = schema.quicktypePropertyOrder ? schema.quicktypePropertyOrder : []; - const orderKey = (propertyName: string) => { + const orderKey = (propertyName: string): string => { // use the index of the order array const index = order.indexOf(propertyName); // if no index then use the property name @@ -866,12 +919,12 @@ async function addTypesInSchema( return await makeObject(loc, objectAttributes, properties, required, additionalProperties, orderKey); } - async function makeTypesFromCases(cases: any, kind: string): Promise { + async function makeTypesFromCases(cases: unknown[], kind: string): Promise { const kindLoc = loc.push(kind); if (!Array.isArray(cases)) { return messageError("SchemaSetOperationCasesIsNotArray", withRef(kindLoc, { operation: kind, cases })); } - // FIXME: This cast shouldn't be necessary, but TypeScript forces our hand. + return await arrayMapSync(cases, async (t, index) => { const caseLoc = kindLoc.push(index.toString()); return await toType( @@ -885,7 +938,7 @@ async function addTypesInSchema( const intersectionType = typeBuilder.getUniqueIntersectionType(typeAttributes, undefined); setTypeForLocation(loc, intersectionType); - async function convertOneOrAnyOf(cases: any, kind: string): Promise { + async function convertOneOrAnyOf(cases: unknown[], kind: string): Promise { const typeRefs = await makeTypesFromCases(cases, kind); let unionAttributes = makeTypeAttributesInferred(typeAttributes); if (kind === "oneOf") { @@ -893,9 +946,11 @@ async function addTypesInSchema( if (forType !== undefined) { typeBuilder.addAttributes(intersectionType, forType); } + if (forUnion !== undefined) { unionAttributes = combineTypeAttributes("union", unionAttributes, forUnion); } + if (forCases !== undefined) { assert( forCases.length === typeRefs.length, @@ -907,6 +962,7 @@ async function addTypesInSchema( } }); } + const unionType = typeBuilder.getUniqueUnionType(unionAttributes, undefined); typeBuilder.setSetOperationMembers(unionType, new Set(typeRefs)); return unionType; @@ -917,7 +973,7 @@ async function addTypesInSchema( const needStringEnum = includedTypes.has("string") && enumArray !== undefined && - enumArray.find((x: any) => typeof x === "string") !== undefined; + enumArray.find(x => typeof x === "string") !== undefined; const needUnion = typeSet !== undefined || schema.properties !== undefined || @@ -939,7 +995,7 @@ async function addTypesInSchema( ["number", "double"], ["integer", "integer"], ["boolean", "bool"] - ] as [JSONSchemaType, PrimitiveTypeKind][]) { + ] as Array<[JSONSchemaType, PrimitiveTypeKind]>) { if (!includedTypes.has(name)) continue; const attributes = isNumberTypeKind(kind) ? numberAttributes : undefined; @@ -953,9 +1009,7 @@ async function addTypesInSchema( ); if (needStringEnum || isConst) { - const cases = isConst - ? [schema.const] - : ((enumArray as any[]).filter(x => typeof x === "string") as string[]); + const cases = isConst ? [schema.const] : enumArray?.filter(x => typeof x === "string") ?? []; unionTypes.push(typeBuilder.getStringType(stringAttributes, StringTypes.fromCases(cases))); } else if (includedTypes.has("string")) { unionTypes.push(makeStringType(stringAttributes)); @@ -964,6 +1018,7 @@ async function addTypesInSchema( if (includeArray) { unionTypes.push(await makeArrayType()); } + if (includeObject) { unionTypes.push(await makeObjectType()); } @@ -975,6 +1030,7 @@ async function addTypesInSchema( if (typeof schema.$ref !== "string") { return messageError("SchemaRefMustBeString", withRef(loc, { actual: typeof schema.$ref })); } + const virtualRef = Ref.parse(schema.$ref); const [target, newLoc] = await resolver.resolveVirtualRef(loc, virtualRef); const attributes = modifyTypeNames(typeAttributes, tn => { @@ -987,9 +1043,11 @@ async function addTypesInSchema( if (schema.allOf !== undefined) { types.push(...(await makeTypesFromCases(schema.allOf, "allOf"))); } + if (schema.oneOf !== undefined) { types.push(await convertOneOrAnyOf(schema.oneOf, "oneOf")); } + if (schema.anyOf !== undefined) { types.push(await convertOneOrAnyOf(schema.anyOf, "anyOf")); } @@ -1011,7 +1069,7 @@ async function addTypesInSchema( messageAssert(schema === true, "SchemaFalseNotSupported", withRef(loc)); result = typeBuilder.getPrimitiveType("any"); } else { - loc = loc.updateWithID(schema["$id"]); + loc = loc.updateWithID(schema.$id); result = await convertToType(schema, loc, typeAttributes); } @@ -1037,6 +1095,7 @@ function removeExtension(fn: string): string { } } } + return fn; } @@ -1048,14 +1107,17 @@ function nameFromURI(uri: URI): string | undefined { if (components[len - 1] !== "") { return removeExtension(components[len - 1]); } + if (len > 1 && components[len - 2] !== "") { return removeExtension(components[len - 2]); } } + const filename = uri.filename(); if (filename !== "") { return removeExtension(filename); } + return messageError("DriverCannotInferNameForSchema", { uri: uri.toString() }); } @@ -1069,6 +1131,7 @@ async function refsInSchemaForURI( if (propertiesAreTypes) { uri = uri.clone().fragment(fragment.slice(0, -1)); } + const ref = Ref.parseURI(uri); if (ref.isRoot) { propertiesAreTypes = false; @@ -1080,6 +1143,7 @@ async function refsInSchemaForURI( if (typeof schema !== "object") { return messageError("SchemaCannotGetTypesFromBoolean", { ref: ref.toString() }); } + return mapMap(mapFromObject(schema), (_, name) => ref.push(name)); } else { let name: string; @@ -1087,56 +1151,61 @@ async function refsInSchemaForURI( name = schema.title; } else { const maybeName = nameFromURI(uri); - name = maybeName !== undefined ? maybeName : defaultName; + name = maybeName ?? defaultName; } + return [name, ref]; } } class InputJSONSchemaStore extends JSONSchemaStore { - constructor( + public constructor( private readonly _inputs: Map, private readonly _delegate?: JSONSchemaStore ) { super(); } - async fetch(address: string): Promise { + public async fetch(address: string): Promise { const maybeInput = this._inputs.get(address); if (maybeInput !== undefined) { return checkJSONSchema(parseJSON(maybeInput, "JSON Schema", address), () => Ref.root(address)); } + if (this._delegate === undefined) { return panic(`Schema URI ${address} requested, but no store given`); } + return await this._delegate.fetch(address); } } export interface JSONSchemaSourceData { + isConverted?: boolean; name: string; - uris?: string[]; schema?: string; - isConverted?: boolean; + uris?: string[]; } export class JSONSchemaInput implements Input { - readonly kind: string = "schema"; - readonly needSchemaProcessing: boolean = true; + public readonly kind: string = "schema"; + + public readonly needSchemaProcessing: boolean = true; private readonly _attributeProducers: JSONSchemaAttributeProducer[]; private readonly _schemaInputs: Map = new Map(); - private _schemaSources: [URI, JSONSchemaSourceData][] = []; + + private _schemaSources: Array<[URI, JSONSchemaSourceData]> = []; private readonly _topLevels: Map = new Map(); private _needIR = false; - constructor( + public constructor( private _schemaStore: JSONSchemaStore | undefined, additionalAttributeProducers: JSONSchemaAttributeProducer[] = [], - private readonly _additionalSchemaAddresses: ReadonlyArray = [] + private readonly _additionalSchemaAddresses: readonly string[] = [] ) { this._attributeProducers = [ descriptionAttributeProducer, @@ -1149,15 +1218,15 @@ export class JSONSchemaInput implements Input { ].concat(additionalAttributeProducers); } - get needIR(): boolean { + public get needIR(): boolean { return this._needIR; } - addTopLevel(name: string, ref: Ref): void { + public addTopLevel(name: string, ref: Ref): void { this._topLevels.set(name, ref); } - async addTypes(ctx: RunContext, typeBuilder: TypeBuilder): Promise { + public async addTypes(ctx: RunContext, typeBuilder: TypeBuilder): Promise { if (this._schemaSources.length === 0) return; let maybeSchemaStore = this._schemaStore; @@ -1168,6 +1237,7 @@ export class JSONSchemaInput implements Input { } else { maybeSchemaStore = this._schemaStore = new InputJSONSchemaStore(this._schemaInputs, maybeSchemaStore); } + const schemaStore = maybeSchemaStore; const canonizer = new Canonizer(ctx); @@ -1176,6 +1246,7 @@ export class JSONSchemaInput implements Input { if (schema === undefined) { return messageError("SchemaFetchErrorAdditional", { address }); } + canonizer.addSchema(schema, address); } @@ -1192,6 +1263,7 @@ export class JSONSchemaInput implements Input { } else { name = refs[0]; } + this.addTopLevel(name, refs[1]); } else { for (const [refName, ref] of refs) { @@ -1203,15 +1275,15 @@ export class JSONSchemaInput implements Input { await addTypesInSchema(resolver, typeBuilder, this._topLevels, this._attributeProducers); } - addTypesSync(): void { + public addTypesSync(): void { return panic("addTypesSync not supported in JSONSchemaInput"); } - async addSource(schemaSource: JSONSchemaSourceData): Promise { - return this.addSourceSync(schemaSource); + public async addSource(schemaSource: JSONSchemaSourceData): Promise { + this.addSourceSync(schemaSource); } - addSourceSync(schemaSource: JSONSchemaSourceData): void { + public addSourceSync(schemaSource: JSONSchemaSourceData): void { const { name, uris, schema, isConverted } = schemaSource; if (isConverted !== true) { @@ -1227,6 +1299,7 @@ export class JSONSchemaInput implements Input { if (normalizedURI.clone().hash("").toString() === "") { normalizedURI.path(name); } + return normalizedURI; }); } @@ -1243,8 +1316,10 @@ export class JSONSchemaInput implements Input { if (suffix > 0) { uri.path(`${path}-${suffix}`); } + suffix++; } while (this._schemaInputs.has(uri.toString())); + this._schemaInputs.set(uri.toString(), schema); normalizedURIs[i] = uri.hash(normalizedURI.hash()); } @@ -1256,14 +1331,16 @@ export class JSONSchemaInput implements Input { } } - singleStringSchemaSource(): string | undefined { + public singleStringSchemaSource(): string | undefined { if (!this._schemaSources.every(([_, { schema }]) => typeof schema === "string")) { return undefined; } + const set = new Set(this._schemaSources.map(([_, { schema }]) => schema as string)); if (set.size === 1) { return defined(iterableFirst(set)); } + return undefined; } } diff --git a/packages/quicktype-core/src/input/JSONSchemaStore.ts b/packages/quicktype-core/src/input/JSONSchemaStore.ts index dc7ef9aea..02d93e8e0 100644 --- a/packages/quicktype-core/src/input/JSONSchemaStore.ts +++ b/packages/quicktype-core/src/input/JSONSchemaStore.ts @@ -1,4 +1,4 @@ -import { StringMap, assert } from "../support/Support"; +import { type StringMap, assert } from "../support/Support"; export type JSONSchema = StringMap | boolean; @@ -11,28 +11,36 @@ export abstract class JSONSchemaStore { } // FIXME: Remove the undefined option - abstract fetch(_address: string): Promise; + public abstract fetch(_address: string): Promise; - async get(address: string, debugPrint: boolean): Promise { + public async get(address: string, debugPrint: boolean): Promise { let schema = this._schemas.get(address); if (schema !== undefined) { return schema; } + if (debugPrint) { console.log(`trying to fetch ${address}`); } + try { schema = await this.fetch(address); - } catch {} + } catch (e) { + // FIXME: handle or log this error + } + if (schema === undefined) { if (debugPrint) { console.log(`couldn't fetch ${address}`); } + return undefined; } + if (debugPrint) { console.log(`successully fetched ${address}`); } + this.add(address, schema); return schema; } diff --git a/packages/quicktype-core/src/input/PostmanCollection.ts b/packages/quicktype-core/src/input/PostmanCollection.ts index d5de09947..fd191a8c6 100644 --- a/packages/quicktype-core/src/input/PostmanCollection.ts +++ b/packages/quicktype-core/src/input/PostmanCollection.ts @@ -1,5 +1,6 @@ import { parseJSON } from "../support/Support"; -import { JSONSourceData } from "./Inputs"; + +import { type JSONSourceData } from "./Inputs"; function isValidJSON(s: string): boolean { try { @@ -13,20 +14,23 @@ function isValidJSON(s: string): boolean { export function sourcesFromPostmanCollection( collectionJSON: string, collectionJSONAddress?: string -): { sources: JSONSourceData[]; description: string | undefined } { - const sources: JSONSourceData[] = []; +): { description: string | undefined; sources: Array> } { + const sources: Array> = []; const descriptions: string[] = []; + // eslint-disable-next-line @typescript-eslint/no-explicit-any function processCollection(c: any): void { if (typeof c !== "object") return; if (Array.isArray(c.item)) { for (const item of c.item) { processCollection(item); } + if (typeof c.info === "object" && typeof c.info.description === "string") { descriptions.push(c.info.description); } } + if (typeof c.name === "string" && Array.isArray(c.response)) { const samples: string[] = []; for (const r of c.response) { @@ -34,6 +38,7 @@ export function sourcesFromPostmanCollection( samples.push(r.body); } } + if (samples.length > 0) { const source: JSONSourceData = { name: c.name, samples }; const sourceDescription = [c.name]; diff --git a/packages/quicktype-core/src/input/io/NodeIO.ts b/packages/quicktype-core/src/input/io/NodeIO.ts index 78384b69a..f8cf94b44 100644 --- a/packages/quicktype-core/src/input/io/NodeIO.ts +++ b/packages/quicktype-core/src/input/io/NodeIO.ts @@ -1,14 +1,19 @@ import * as fs from "fs"; + import { defined, exceptionToString } from "@glideapps/ts-necessities"; -import { Readable } from "readable-stream"; import { isNode } from "browser-or-node"; import _fetch from "cross-fetch"; -import { getStream } from "./get-stream"; +import isURL from "is-url"; +import { type Readable } from "readable-stream"; + +// eslint-disable-next-line import/no-cycle import { messageError, panic } from "../../index"; -const isURL = require("is-url"); +import { getStream } from "./get-stream"; // Only use cross-fetch in CI +// FIXME: type global +// eslint-disable-next-line @typescript-eslint/no-explicit-any const fetch = process.env.CI ? _fetch : (global as any).fetch ?? _fetch; interface HttpHeaders { @@ -50,6 +55,7 @@ export async function readableFromFileOrURL(fileOrURL: string, httpHeaders?: str // Cast node readable to isomorphic readable from readable-stream return process.stdin as unknown as Readable; } + const filePath = fs.lstatSync(fileOrURL).isSymbolicLink() ? fs.readlinkSync(fileOrURL) : fileOrURL; if (fs.existsSync(filePath)) { // Cast node readable to isomorphic readable from readable-stream @@ -59,6 +65,7 @@ export async function readableFromFileOrURL(fileOrURL: string, httpHeaders?: str } catch (e) { return messageError("MiscReadError", { fileOrURL, message: exceptionToString(e) }); } + return messageError("DriverInputFileDoesNotExist", { filename: fileOrURL }); } diff --git a/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts b/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts index 19cd6ec30..846f6a0a5 100644 --- a/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts +++ b/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts @@ -1,6 +1,8 @@ -import { Options } from "."; +/* eslint-disable @typescript-eslint/no-explicit-any */ import { PassThrough } from "readable-stream"; +import { type Options } from "."; + export default function bufferStream(opts: Options) { opts = Object.assign({}, opts); @@ -10,8 +12,10 @@ export default function bufferStream(opts: Options) { let objectMode = false; if (array) { + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing objectMode = !(encoding || buffer); } else { + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing encoding = encoding || "utf8"; } diff --git a/packages/quicktype-core/src/input/io/get-stream/index.ts b/packages/quicktype-core/src/input/io/get-stream/index.ts index 9036e7c89..3f1dcbc4b 100644 --- a/packages/quicktype-core/src/input/io/get-stream/index.ts +++ b/packages/quicktype-core/src/input/io/get-stream/index.ts @@ -1,20 +1,22 @@ -import { Readable } from "readable-stream"; +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { type Readable } from "readable-stream"; + import bufferStream from "./buffer-stream"; export interface Options { - maxBuffer?: number; array?: boolean; encoding?: string; + maxBuffer?: number; } -export function getStream(inputStream: Readable, opts: Options = {}) { +export async function getStream(inputStream: Readable, opts: Options = {}) { if (!inputStream) { - return Promise.reject(new Error("Expected a stream")); + return await Promise.reject(new Error("Expected a stream")); } opts = Object.assign({ maxBuffer: Infinity }, opts); - const maxBuffer = opts.maxBuffer || Infinity; + const maxBuffer = opts.maxBuffer ?? Infinity; let stream: any; let clean; @@ -48,15 +50,15 @@ export function getStream(inputStream: Readable, opts: Options = {}) { }; }); - p.then(clean, clean); - - return p.then(() => stream.getBufferedValue()); + return await p.then(clean, clean).then(() => stream.getBufferedValue()); } +// FIXME: should these be async ? export function buffer(stream: Readable, opts: Options = {}) { - getStream(stream, Object.assign({}, opts, { encoding: "buffer" })); + void getStream(stream, Object.assign({}, opts, { encoding: "buffer" })); } +// FIXME: should these be async ? export function array(stream: Readable, opts: Options = {}) { - getStream(stream, Object.assign({}, opts, { array: true })); + void getStream(stream, Object.assign({}, opts, { array: true })); } diff --git a/packages/quicktype-core/src/language/All.ts b/packages/quicktype-core/src/language/All.ts index ec3985ef4..297af4d1c 100644 --- a/packages/quicktype-core/src/language/All.ts +++ b/packages/quicktype-core/src/language/All.ts @@ -1,33 +1,34 @@ import { iterableFind } from "collection-utils"; -import { TargetLanguage } from "../TargetLanguage"; +import { type TargetLanguage } from "../TargetLanguage"; -import { CSharpTargetLanguage } from "./CSharp"; -import { GoTargetLanguage } from "./Golang"; import { CJSONTargetLanguage } from "./CJSON"; import { CPlusPlusTargetLanguage } from "./CPlusPlus"; -import { ObjectiveCTargetLanguage } from "./Objective-C"; +import { CrystalTargetLanguage } from "./Crystal"; +import { CSharpTargetLanguage } from "./CSharp"; +import { DartTargetLanguage } from "./Dart"; +import { ElixirTargetLanguage } from "./Elixir"; +import { ElmTargetLanguage } from "./Elm"; +import { GoTargetLanguage } from "./Golang"; +import { HaskellTargetLanguage } from "./Haskell"; import { JavaTargetLanguage } from "./Java"; import { JavaScriptTargetLanguage } from "./JavaScript"; +// eslint-disable-next-line import/no-cycle import { JavaScriptPropTypesTargetLanguage } from "./JavaScriptPropTypes"; -import { TypeScriptTargetLanguage, FlowTargetLanguage } from "./TypeScriptFlow"; -import { SwiftTargetLanguage } from "./Swift"; +import { JSONSchemaTargetLanguage } from "./JSONSchema"; import { KotlinTargetLanguage } from "./Kotlin"; +import { ObjectiveCTargetLanguage } from "./Objective-C"; +import { PhpTargetLanguage } from "./Php"; +import { PikeTargetLanguage } from "./Pike"; +import { PythonTargetLanguage } from "./Python"; +import { RubyTargetLanguage } from "./ruby"; +import { RustTargetLanguage } from "./Rust"; import { Scala3TargetLanguage } from "./Scala3"; import { SmithyTargetLanguage } from "./Smithy4s"; -import { ElmTargetLanguage } from "./Elm"; -import { JSONSchemaTargetLanguage } from "./JSONSchema"; -import { RustTargetLanguage } from "./Rust"; -import { CrystalTargetLanguage } from "./Crystal"; -import { RubyTargetLanguage } from "./ruby"; -import { DartTargetLanguage } from "./Dart"; -import { PythonTargetLanguage } from "./Python"; -import { PikeTargetLanguage } from "./Pike"; -import { HaskellTargetLanguage } from "./Haskell"; -import { TypeScriptZodTargetLanguage } from "./TypeScriptZod"; -import { PhpTargetLanguage } from "./Php"; +import { SwiftTargetLanguage } from "./Swift"; import { TypeScriptEffectSchemaTargetLanguage } from "./TypeScriptEffectSchema"; -import { ElixirTargetLanguage } from "./Elixir"; +import { FlowTargetLanguage, TypeScriptTargetLanguage } from "./TypeScriptFlow"; +import { TypeScriptZodTargetLanguage } from "./TypeScriptZod"; export const all: TargetLanguage[] = [ new CSharpTargetLanguage(), @@ -63,10 +64,8 @@ export function languageNamed(name: string, targetLanguages?: TargetLanguage[]): if (targetLanguages === undefined) { targetLanguages = all; } - const maybeTargetLanguage = iterableFind( - targetLanguages, - l => l.names.indexOf(name) >= 0 || l.displayName === name - ); + + const maybeTargetLanguage = iterableFind(targetLanguages, l => l.names.includes(name) || l.displayName === name); if (maybeTargetLanguage !== undefined) return maybeTargetLanguage; return iterableFind(targetLanguages, l => l.extension === name); } diff --git a/packages/quicktype-core/src/language/CJSON.ts b/packages/quicktype-core/src/language/CJSON.ts index 8dd1990b2..28499a4b4 100644 --- a/packages/quicktype-core/src/language/CJSON.ts +++ b/packages/quicktype-core/src/language/CJSON.ts @@ -1,3 +1,6 @@ +// FIXME: NEEDS REFACTOR +/* eslint-disable @typescript-eslint/no-shadow */ +/* eslint-disable @typescript-eslint/naming-convention */ /** * CJSON.ts * This file is used to generate cJSON code with quicktype @@ -13,7 +16,7 @@ * To print json string from json data use the following: char * string = cJSON_Print(); * To delete json data use the following: cJSON_Delete(); * - * TODO list for futur enhancements: + * TODO list for future enhancements: * - Management of Class, Union and TopLevel should be mutualized to reduce code size and to permit Union and TopLevel having recursive Array/Map * - Types check should be added to verify unwanted inputs (for example a Number passed while a String is expected, etc) * - Constraints should be implemented (verification of Enum values, min/max values for Numbers and min/max length for Strings, regex) @@ -22,26 +25,26 @@ */ /* Imports */ -import { TargetLanguage } from "../TargetLanguage"; -import { Type, TypeKind, ClassType, ArrayType, MapType, EnumType, UnionType } from "../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { NameStyle, Name, Namer, funPrefixNamer } from "../Naming"; -import { Sourcelike } from "../Source"; +import { getAccessorName } from "../attributes/AccessorNames"; +import { enumCaseValues } from "../attributes/EnumValues"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type NameStyle, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; +import { type Sourcelike } from "../Source"; import { + type NamingStyle, allUpperWordStyle, - legalizeCharacters, isAscii, isLetterOrUnderscoreOrDigit, - NamingStyle, + legalizeCharacters, makeNameStyle } from "../support/Strings"; -import { defined, assertNever, panic, numberEnumValues } from "../support/Support"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { EnumOption, StringOption, Option, getOptionValues, OptionValues } from "../RendererOptions"; -import { assert } from "../support/Support"; -import { RenderContext } from "../Renderer"; -import { getAccessorName } from "../attributes/AccessorNames"; -import { enumCaseValues } from "../attributes/EnumValues"; +import { assert, assertNever, defined, numberEnumValues, panic } from "../support/Support"; +import { TargetLanguage } from "../TargetLanguage"; +import { ArrayType, ClassType, EnumType, MapType, type Type, type TypeKind, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; /* Naming styles */ const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; @@ -135,7 +138,7 @@ export class CJSONTargetLanguage extends TargetLanguage { * @params names: names * @param extension: extension of files */ - constructor(displayName = "C (cJSON)", names: string[] = ["cjson", "cJSON"], extension = "h") { + public constructor(displayName = "C (cJSON)", names: string[] = ["cjson", "cJSON"], extension = "h") { super(displayName, names, extension); } @@ -143,7 +146,7 @@ export class CJSONTargetLanguage extends TargetLanguage { * Return cJSON generator options * @return cJSON generator options array */ - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ cJSONOptions.typeSourceStyle, cJSONOptions.typeIntegerSize, @@ -160,7 +163,7 @@ export class CJSONTargetLanguage extends TargetLanguage { * Indicate if language support union with both number types * @return true */ - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } @@ -168,7 +171,7 @@ export class CJSONTargetLanguage extends TargetLanguage { * Indicate if language support optional class properties * @return true */ - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } @@ -178,7 +181,7 @@ export class CJSONTargetLanguage extends TargetLanguage { * @param untypedOptionValues * @return cJSON renderer */ - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): CJSONRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): CJSONRenderer { return new CJSONRenderer(this, renderContext, getOptionValues(cJSONOptions, untypedOptionValues)); } } @@ -311,63 +314,70 @@ const keywords = [ /* Used to build forbidden global names */ export enum GlobalNames { - ClassMemberConstraints, - ClassMemberConstraintException, - ValueTooLowException, - ValueTooHighException, - ValueTooShortException, - ValueTooLongException, - InvalidPatternException, - CheckConstraint + ClassMemberConstraints = 1, + ClassMemberConstraintException = 2, + ValueTooLowException = 3, + ValueTooHighException = 4, + ValueTooShortException = 5, + ValueTooLongException = 6, + InvalidPatternException = 7, + CheckConstraint = 8 } /* To be able to support circles in multiple files - e.g. class#A using class#B using class#A (obviously not directly) we can forward declare them */ export enum IncludeKind { - ForwardDeclare, - Include + ForwardDeclare = "ForwardDeclare", + Include = "Include" } /* Used to map includes */ -export type IncludeRecord = { +export interface IncludeRecord { kind: IncludeKind | undefined /* How to include that */; typeKind: TypeKind | undefined /* What exactly to include */; -}; +} /* Used to map includes */ -export type TypeRecord = { +export interface TypeRecord { + forceInclude: boolean; + level: number; name: Name; type: Type; - level: number; variant: boolean; - forceInclude: boolean; -}; +} /* Map each and every unique type to a include kind, e.g. how to include the given type */ export type IncludeMap = Map; /* cJSON type */ -export type TypeCJSON = { +export interface TypeCJSON { + addToObject: Sourcelike /* cJSON add to object function */; cType: Sourcelike /* C type */; - optionalQualifier: string /* C optional qualifier, empty string if not defined */; cjsonType: string /* cJSON type */; - isType: Sourcelike /* cJSON check type function */; - getValue: Sourcelike /* cJSON get value function */; - addToObject: Sourcelike /* cJSON add to object function */; createObject: Sourcelike /* cJSON create object function */; deleteType: Sourcelike /* cJSON delete function */; - items: TypeCJSON | undefined /* Sub-items, used for arrays and map */; + getValue: Sourcelike /* cJSON get value function */; isNullable: boolean /* True if the field is nullable */; -}; + isType: Sourcelike /* cJSON check type function */; + items: TypeCJSON | undefined /* Sub-items, used for arrays and map */; + optionalQualifier: string /* C optional qualifier, empty string if not defined */; +} /* cJSON renderer */ export class CJSONRenderer extends ConvenienceRenderer { private currentFilename: string | undefined; /* Current filename */ - private memberNameStyle: NameStyle; /* Member name style */ - private namedTypeNameStyle: NameStyle; /* Named type name style */ - private forbiddenGlobalNames: string[]; /* Forbidden global names */ + + private readonly memberNameStyle: NameStyle; /* Member name style */ + + private readonly namedTypeNameStyle: NameStyle; /* Named type name style */ + + private readonly forbiddenGlobalNames: string[]; /* Forbidden global names */ + protected readonly typeIntegerSize: string; /* Integer code generation type */ + protected readonly hashtableSize: string; /* Hashtable default size */ + protected readonly typeNamingStyle: NamingStyle; /* Type naming style */ + protected readonly enumeratorNamingStyle: NamingStyle; /* Enum naming style */ /** @@ -376,7 +386,7 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param renderContext: render context * @param _options: renderer options */ - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -479,6 +489,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else if ("double" === fieldName) { fieldName = "number"; } + return fieldName; } @@ -487,7 +498,7 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param fieldType: the variable type * @param fieldName: name of the variable */ - protected emitTypdefAlias(fieldType: Type, fieldName: Name) { + protected emitTypedefAlias(fieldType: Type, fieldName: Name): void { if (this._options.addTypedefAlias) { this.emitLine("typedef ", this.quicktypeTypeToCJSON(fieldType, false).cType, " ", fieldName, ";"); this.ensureBlankLine(); @@ -675,7 +686,7 @@ export class CJSONRenderer extends ConvenienceRenderer { true ); this.ensureBlankLine(); - this.emitTypdefAlias(enumType, enumName); + this.emitTypedefAlias(enumType, enumName); } /** @@ -776,6 +787,7 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param unionType: union type */ protected emitUnionTypedef(unionType: UnionType): void { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const [_hasNull, nonNulls] = removeNullFromUnion(unionType); const unionName = this.nameForNamedType(unionType); @@ -807,7 +819,7 @@ export class CJSONRenderer extends ConvenienceRenderer { true ); this.ensureBlankLine(); - this.emitTypdefAlias(unionType, unionName); + this.emitTypedefAlias(unionType, unionName); } /** @@ -843,6 +855,7 @@ export class CJSONRenderer extends ConvenienceRenderer { }); onFirst = false; } + for (const type of nonNulls) { const cJSON = this.quicktypeTypeToCJSON(type, false); this.emitBlock([onFirst === true ? "if (" : "else if (", cJSON.isType, "(j))"], () => { @@ -863,57 +876,58 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { const add = (cJSON: TypeCJSON, level: number, child_level: number) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", (", - cJSON.items!.cType, + cJSON.items?.cType, " *)0xDEADBEEF, sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); - } else if (cJSON.items!.cjsonType === "cJSON_String") { + } else if (cJSON.items?.cjsonType === "cJSON_String") { this.emitLine( "list_add_tail(x", child_level.toString(), ", strdup(", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), ")), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else if ( - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", ", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), "), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, "));" ); this.emitBlock( @@ -923,7 +937,8 @@ export class CJSONRenderer extends ConvenienceRenderer { "* tmp", level > 0 ? level.toString() : "", " = ", - cJSON.items!.getValue, + // @ts-expect-error awaiting refactor + cJSON.items?.getValue, "(e", child_level.toString(), ");" @@ -934,14 +949,16 @@ export class CJSONRenderer extends ConvenienceRenderer { ", tmp", level > 0 ? level.toString() : "", ", sizeof(", - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *));" ); } ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( ["if (!cJSON_IsNull(e", child_level.toString(), "))"], () => { @@ -991,13 +1008,13 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { const add = (cJSON: TypeCJSON, level: number, child_level: number) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( "hashtable_add(x", @@ -1005,28 +1022,28 @@ export class CJSONRenderer extends ConvenienceRenderer { ", e", child_level.toString(), "->string, (", - cJSON.items!.cType, + cJSON.items?.cType, " *)0xDEADBEEF, sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); - } else if (cJSON.items!.cjsonType === "cJSON_String") { + } else if (cJSON.items?.cjsonType === "cJSON_String") { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, strdup(", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), ")), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else if ( - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "hashtable_add(x", @@ -1034,20 +1051,21 @@ export class CJSONRenderer extends ConvenienceRenderer { ", e", child_level.toString(), "->string, ", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), "), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, "));" ); this.emitBlock( @@ -1057,7 +1075,8 @@ export class CJSONRenderer extends ConvenienceRenderer { "* tmp", level > 0 ? level.toString() : "", " = ", - cJSON.items!.getValue, + // @ts-expect-error awaiting refactor + cJSON.items?.getValue, "(e", child_level.toString(), ");" @@ -1070,14 +1089,16 @@ export class CJSONRenderer extends ConvenienceRenderer { "->string, tmp", level > 0 ? level.toString() : "", ", sizeof(", - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *));" ); } ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( ["if (!cJSON_IsNull(e", child_level.toString(), "))"], () => { @@ -1152,6 +1173,7 @@ export class CJSONRenderer extends ConvenienceRenderer { }); onFirst = false; } + for (const type of nonNulls) { const cJSON = this.quicktypeTypeToCJSON(type, false); this.emitBlock( @@ -1169,7 +1191,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ); this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * x", child_level.toString(), " = list_get_head(x", @@ -1180,30 +1203,30 @@ export class CJSONRenderer extends ConvenienceRenderer { ); this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { const add = (cJSON: TypeCJSON, child_level: number) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Invalid") { + } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { /* Nothing to do */ - } else if (cJSON.items!.cjsonType === "cJSON_NULL") { + } else if (cJSON.items?.cjsonType === "cJSON_NULL") { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", - cJSON.items!.createObject, + cJSON.items?.createObject, "());" ); } else if ( - cJSON.items!.cjsonType === "cJSON_String" || - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_String" || + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", - cJSON.items!.createObject, + cJSON.items?.createObject, "(x", child_level.toString(), "));" @@ -1213,14 +1236,16 @@ export class CJSONRenderer extends ConvenienceRenderer { "cJSON_AddItemToArray(j", child_level.toString(), ", ", - cJSON.items!.createObject, + // @ts-expect-error awaiting refactor + cJSON.items?.createObject, "(*x", child_level.toString(), "));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( ["if ((void *)0xDEADBEEF != x", child_level.toString(), ")"], () => { @@ -1237,6 +1262,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { add(cJSON, child_level); } + this.emitLine( "x", child_level.toString(), @@ -1287,7 +1313,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", @@ -1301,13 +1328,13 @@ export class CJSONRenderer extends ConvenienceRenderer { "]);" ); const add = (cJSON: TypeCJSON, child_level: number) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Invalid") { + } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { /* Nothing to do */ - } else if (cJSON.items!.cjsonType === "cJSON_NULL") { + } else if (cJSON.items?.cjsonType === "cJSON_NULL") { this.emitLine( cJSON.addToObject, "(j", @@ -1317,13 +1344,13 @@ export class CJSONRenderer extends ConvenienceRenderer { "[index", child_level.toString(), "], ", - cJSON.items!.createObject, + cJSON.items?.createObject, "());" ); } else if ( - cJSON.items!.cjsonType === "cJSON_String" || - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_String" || + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( cJSON.addToObject, @@ -1334,7 +1361,7 @@ export class CJSONRenderer extends ConvenienceRenderer { "[index", child_level.toString(), "], ", - cJSON.items!.createObject, + cJSON.items?.createObject, "(x", child_level.toString(), "));" @@ -1349,14 +1376,16 @@ export class CJSONRenderer extends ConvenienceRenderer { "[index", child_level.toString(), "], ", - cJSON.items!.createObject, + // @ts-expect-error awaiting refactor + cJSON.items?.createObject, "(*x", child_level.toString(), "));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", @@ -1431,7 +1460,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * x", child_level.toString(), " = list_get_head(x", @@ -1441,22 +1471,23 @@ export class CJSONRenderer extends ConvenienceRenderer { ");" ); this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { - if (cJSON.items!.isNullable) { + if (cJSON.items?.isNullable) { this.emitBlock( ["if ((void *)0xDEADBEEF != x", child_level.toString(), ")"], () => { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -1465,13 +1496,15 @@ export class CJSONRenderer extends ConvenienceRenderer { ); } else { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" ); } } + this.emitLine( "x", child_level.toString(), @@ -1531,7 +1564,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", @@ -1545,17 +1579,17 @@ export class CJSONRenderer extends ConvenienceRenderer { "]);" ); this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { - if (cJSON.items!.isNullable) { + if (cJSON.items?.isNullable) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", @@ -1564,7 +1598,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -1573,7 +1608,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ); } else { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -1614,6 +1650,7 @@ export class CJSONRenderer extends ConvenienceRenderer { }); onFirst = false; } + this.emitLine("cJSON_free(x);"); }); }); @@ -1676,7 +1713,7 @@ export class CJSONRenderer extends ConvenienceRenderer { true ); this.ensureBlankLine(); - this.emitTypdefAlias(classType, className); + this.emitTypedefAlias(classType, className); } /** @@ -1745,7 +1782,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ", x", child_level2.toString(), ", sizeof(", - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *));" ); } else if (cJSON.cjsonType === "cJSON_Map") { @@ -1884,7 +1922,7 @@ export class CJSONRenderer extends ConvenienceRenderer { level: number, child_level: number ) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { if (type instanceof ArrayType) { const child_level2 = child_level + 1; recur(type.items, child_level); @@ -1894,61 +1932,62 @@ export class CJSONRenderer extends ConvenienceRenderer { ", x", child_level2.toString(), ", sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { panic("Invalid type"); } - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", (", - cJSON.items!.cType, + cJSON.items?.cType, " *)0xDEADBEEF, sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); - } else if (cJSON.items!.cjsonType === "cJSON_String") { + } else if (cJSON.items?.cjsonType === "cJSON_String") { this.emitLine( "list_add_tail(x", child_level.toString(), ", strdup(", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), ")), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else if ( - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", ", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), "), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, "));" ); this.emitBlock( @@ -1962,7 +2001,8 @@ export class CJSONRenderer extends ConvenienceRenderer { "* tmp", level > 0 ? level.toString() : "", " = ", - cJSON.items!.getValue, + // @ts-expect-error awaiting refactor + cJSON.items?.getValue, "(e", child_level.toString(), ");" @@ -1973,14 +2013,16 @@ export class CJSONRenderer extends ConvenienceRenderer { ", tmp", level > 0 ? level.toString() : "", ", sizeof(", - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *));" ); } ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( [ "if (!cJSON_IsNull(e", @@ -2049,7 +2091,7 @@ export class CJSONRenderer extends ConvenienceRenderer { level: number, child_level: number ) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { if (type instanceof MapType) { const child_level2 = child_level + 1; recur(type.values, child_level); @@ -2061,17 +2103,17 @@ export class CJSONRenderer extends ConvenienceRenderer { "->string, x", child_level2.toString(), ", sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { panic("Invalid type"); } - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( "hashtable_add(x", @@ -2079,28 +2121,28 @@ export class CJSONRenderer extends ConvenienceRenderer { ", e", child_level.toString(), "->string, (", - cJSON.items!.cType, + cJSON.items?.cType, " *)0xDEADBEEF, sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); - } else if (cJSON.items!.cjsonType === "cJSON_String") { + } else if (cJSON.items?.cjsonType === "cJSON_String") { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, strdup(", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), ")), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else if ( - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "hashtable_add(x", @@ -2108,20 +2150,21 @@ export class CJSONRenderer extends ConvenienceRenderer { ", e", child_level.toString(), "->string, ", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e", child_level.toString(), "), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, "));" ); this.emitBlock( @@ -2135,7 +2178,8 @@ export class CJSONRenderer extends ConvenienceRenderer { "* tmp", level > 0 ? level.toString() : "", " = ", - cJSON.items!.getValue, + // @ts-expect-error awaiting refactor + cJSON.items?.getValue, "(e", child_level.toString(), ");" @@ -2148,14 +2192,16 @@ export class CJSONRenderer extends ConvenienceRenderer { "->string, tmp", level > 0 ? level.toString() : "", ", sizeof(", - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *));" ); } ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( [ "if (!cJSON_IsNull(e", @@ -2348,6 +2394,7 @@ export class CJSONRenderer extends ConvenienceRenderer { }); } }; + recur(classType, 0); }); }); @@ -2425,6 +2472,7 @@ export class CJSONRenderer extends ConvenienceRenderer { "));" ); } + this.emitLine( "x", child_level.toString(), @@ -2453,7 +2501,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ); this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * x", child_level.toString(), " = list_get_head(x", @@ -2470,7 +2519,7 @@ export class CJSONRenderer extends ConvenienceRenderer { cJSON: TypeCJSON, child_level: number ) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { if (type instanceof ArrayType) { const child_level2 = child_level + 1; recur(type.items, child_level); @@ -2484,28 +2533,28 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { panic("Invalid type"); } - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Invalid") { + } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { /* Nothing to do */ - } else if (cJSON.items!.cjsonType === "cJSON_NULL") { + } else if (cJSON.items?.cjsonType === "cJSON_NULL") { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", - cJSON.items!.createObject, + cJSON.items?.createObject, "());" ); } else if ( - cJSON.items!.cjsonType === "cJSON_String" || - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_String" || + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", - cJSON.items!.createObject, + cJSON.items?.createObject, "(x", child_level.toString(), "));" @@ -2515,14 +2564,16 @@ export class CJSONRenderer extends ConvenienceRenderer { "cJSON_AddItemToArray(j", child_level.toString(), ", ", - cJSON.items!.createObject, + // @ts-expect-error awaiting refactor + cJSON.items?.createObject, "(*x", child_level.toString(), "));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", @@ -2543,6 +2594,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { add(property.type, cJSON, child_level); } + this.emitLine( "x", child_level.toString(), @@ -2599,7 +2651,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", @@ -2617,7 +2670,7 @@ export class CJSONRenderer extends ConvenienceRenderer { cJSON: TypeCJSON, child_level: number ) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { if (type instanceof MapType) { const child_level2 = child_level + 1; recur(type.values, child_level); @@ -2637,15 +2690,15 @@ export class CJSONRenderer extends ConvenienceRenderer { panic("Invalid type"); } } else if ( - cJSON.items!.cjsonType === "cJSON_Map" + cJSON.items?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" + cJSON.items?.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( cJSON.addToObject, @@ -2656,13 +2709,13 @@ export class CJSONRenderer extends ConvenienceRenderer { "[index", child_level.toString(), "], ", - cJSON.items!.createObject, + cJSON.items?.createObject, "());" ); } else if ( - cJSON.items!.cjsonType === "cJSON_String" || - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_String" || + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( cJSON.addToObject, @@ -2673,7 +2726,7 @@ export class CJSONRenderer extends ConvenienceRenderer { "[index", child_level.toString(), "], ", - cJSON.items!.createObject, + cJSON.items?.createObject, "(x", child_level.toString(), "));" @@ -2688,14 +2741,16 @@ export class CJSONRenderer extends ConvenienceRenderer { "[index", child_level.toString(), "], ", - cJSON.items!.createObject, + // @ts-expect-error awaiting refactor + cJSON.items?.createObject, "(*x", child_level.toString(), "));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", @@ -2911,6 +2966,7 @@ export class CJSONRenderer extends ConvenienceRenderer { ); } } + if (cJSON.isNullable) { this.emitBlock(["else"], () => { this.emitLine( @@ -2925,6 +2981,7 @@ export class CJSONRenderer extends ConvenienceRenderer { }); } }; + recur(classType, 0); }); }); @@ -2973,6 +3030,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { this.emitLine(cJSON.deleteType, "(x", child_level.toString(), ");"); } + this.emitLine("x", child_level.toString(), " = list_get_next(x", level.toString(), ");"); }); } else if (type instanceof ClassType) { @@ -2984,7 +3042,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " * x", child_level.toString(), " = list_get_head(x", @@ -2994,11 +3053,11 @@ export class CJSONRenderer extends ConvenienceRenderer { ");" ); this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { if (property.type instanceof ArrayType) { recur(property.type.items, child_level); this.emitLine( - cJSON.items!.deleteType, + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -3006,20 +3065,21 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { panic("Invalid type"); } - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { - if (cJSON.items!.isNullable) { + if (cJSON.items?.isNullable) { this.emitBlock( ["if ((void *)0xDEADBEEF != x", child_level.toString(), ")"], () => { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -3028,13 +3088,15 @@ export class CJSONRenderer extends ConvenienceRenderer { ); } else { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" ); } } + this.emitLine( "x", child_level.toString(), @@ -3087,7 +3149,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", @@ -3103,11 +3166,11 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitBlock( ["if (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { if (property.type instanceof MapType) { recur(property.type.values, child_level); this.emitLine( - cJSON.items!.deleteType, + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -3115,15 +3178,15 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { panic("Invalid type"); } - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { - if (cJSON.items!.isNullable) { + if (cJSON.items?.isNullable) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", @@ -3132,7 +3195,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ], () => { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -3141,7 +3205,8 @@ export class CJSONRenderer extends ConvenienceRenderer { ); } else { this.emitLine( - cJSON.items!.deleteType, + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, "(x", child_level.toString(), ");" @@ -3204,6 +3269,7 @@ export class CJSONRenderer extends ConvenienceRenderer { }); } }; + recur(classType, 0); this.emitLine("cJSON_free(x);"); }); @@ -3262,7 +3328,7 @@ export class CJSONRenderer extends ConvenienceRenderer { true ); this.ensureBlankLine(); - this.emitTypdefAlias(type, className); + this.emitTypedefAlias(type, className); } /** @@ -3317,40 +3383,42 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitLine("cJSON * e = NULL;"); this.emitBlock(["cJSON_ArrayForEach(e, j)"], () => { const add = (cJSON: TypeCJSON) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( "list_add_tail(x->value, (", - cJSON.items!.cType, + cJSON.items?.cType, " *)0xDEADBEAF, sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); - } else if (cJSON.items!.cjsonType === "cJSON_String") { + } else if (cJSON.items?.cjsonType === "cJSON_String") { this.emitLine( "list_add_tail(x->value, strdup(", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e)), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { this.emitLine( "list_add_tail(x->value, ", - cJSON.items!.getValue, + // @ts-expect-error awaiting refactor + cJSON.items?.getValue, "(e), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock(["if (!cJSON_IsNull(e))"], () => { add(cJSON); }); @@ -3370,40 +3438,42 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitLine("cJSON * e = NULL;"); this.emitBlock(["cJSON_ArrayForEach(e, j)"], () => { const add = (cJSON: TypeCJSON) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ } else if ( - cJSON.items!.cjsonType === "cJSON_Invalid" || - cJSON.items!.cjsonType === "cJSON_NULL" + cJSON.items?.cjsonType === "cJSON_Invalid" || + cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( "hashtable_add(x->value, e->string, (", - cJSON.items!.cType, + cJSON.items?.cType, " *)0xDEADBEEF, sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); - } else if (cJSON.items!.cjsonType === "cJSON_String") { + } else if (cJSON.items?.cjsonType === "cJSON_String") { this.emitLine( "hashtable_add(x->value, e->string, strdup(", - cJSON.items!.getValue, + cJSON.items?.getValue, "(e)), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } else { this.emitLine( "hashtable_add(x->value, e->string, ", - cJSON.items!.getValue, + // @ts-expect-error awaiting refactor + cJSON.items?.getValue, "(e), sizeof(", - cJSON.items!.cType, + cJSON.items?.cType, " *));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock(["if (!cJSON_IsNull(e))"], () => { add(cJSON); }); @@ -3444,40 +3514,43 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitBlock(["if (NULL != x->value)"], () => { this.emitLine("j = ", cJSON.createObject, "();"); this.emitBlock(["if (NULL != j)"], () => { - this.emitLine(cJSON.items!.cType, " * x1 = list_get_head(x->value);"); + // @ts-expect-error awaiting refactor + this.emitLine(cJSON.items?.cType, " * x1 = list_get_head(x->value);"); this.emitBlock(["while (NULL != x1)"], () => { const add = (cJSON: TypeCJSON) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Invalid") { + } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { /* Nothing to do */ - } else if (cJSON.items!.cjsonType === "cJSON_NULL") { + } else if (cJSON.items?.cjsonType === "cJSON_NULL") { this.emitLine( "cJSON_AddItemToArray(j, ", - cJSON.items!.createObject, + cJSON.items?.createObject, "());" ); } else if ( - cJSON.items!.cjsonType === "cJSON_String" || - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_String" || + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j, ", - cJSON.items!.createObject, + cJSON.items?.createObject, "(x1));" ); } else { this.emitLine( "cJSON_AddItemToArray(j, ", - cJSON.items!.createObject, + // @ts-expect-error awaiting refactor + cJSON.items?.createObject, "(*x1));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock(["if ((void *)0xDEADBEEF != x1)"], () => { add(cJSON); }); @@ -3487,6 +3560,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { add(cJSON); } + this.emitLine("x1 = list_get_next(x->value);"); }); }); @@ -3500,44 +3574,47 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitBlock(["if (NULL != keys)"], () => { this.emitBlock(["for (size_t index = 0; index < count; index++)"], () => { this.emitLine( - cJSON.items!.cType, + // @ts-expect-error awaiting refactor + cJSON.items?.cType, " *x2 = hashtable_lookup(x->value, keys[index]);" ); const add = (cJSON: TypeCJSON) => { - if (cJSON.items!.cjsonType === "cJSON_Array") { + if (cJSON.items?.cjsonType === "cJSON_Array") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Map") { + } else if (cJSON.items?.cjsonType === "cJSON_Map") { /* Not supported */ - } else if (cJSON.items!.cjsonType === "cJSON_Invalid") { + } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { /* Nothing to do */ - } else if (cJSON.items!.cjsonType === "cJSON_NULL") { + } else if (cJSON.items?.cjsonType === "cJSON_NULL") { this.emitLine( cJSON.addToObject, "(j, keys[index], ", - cJSON.items!.createObject, + cJSON.items?.createObject, "());" ); } else if ( - cJSON.items!.cjsonType === "cJSON_String" || - cJSON.items!.cjsonType === "cJSON_Object" || - cJSON.items!.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === "cJSON_String" || + cJSON.items?.cjsonType === "cJSON_Object" || + cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( cJSON.addToObject, "(j, keys[index], ", - cJSON.items!.createObject, + cJSON.items?.createObject, "(x2));" ); } else { this.emitLine( cJSON.addToObject, "(j, keys[index], ", - cJSON.items!.createObject, + // @ts-expect-error awaiting refactor + cJSON.items?.createObject, "(*x2));" ); } }; - if (cJSON.items!.isNullable) { + + if (cJSON.items?.isNullable) { this.emitBlock(["if ((void *)0xDEADBEEF != x2)"], () => { add(cJSON); }); @@ -3588,15 +3665,19 @@ export class CJSONRenderer extends ConvenienceRenderer { const cJSON = this.quicktypeTypeToCJSON(type, false); if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { this.emitBlock(["if (NULL != x->value)"], () => { - this.emitLine(cJSON.items!.cType, " * x1 = list_get_head(x->value);"); + // @ts-expect-error awaiting refactor + this.emitLine(cJSON.items?.cType, " * x1 = list_get_head(x->value);"); this.emitBlock(["while (NULL != x1)"], () => { - if (cJSON.items!.isNullable) { + if (cJSON.items?.isNullable) { this.emitBlock(["if ((void *)0xDEADBEEF != x1)"], () => { - this.emitLine(cJSON.items!.deleteType, "(x1);"); + // @ts-expect-error awaiting refactor + this.emitLine(cJSON.items?.deleteType, "(x1);"); }); } else { - this.emitLine(cJSON.items!.deleteType, "(x1);"); + // @ts-expect-error awaiting refactor + this.emitLine(cJSON.items?.deleteType, "(x1);"); } + this.emitLine("x1 = list_get_next(x->value);"); }); this.emitLine(cJSON.deleteType, "(x->value);"); @@ -3607,14 +3688,17 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitLine("size_t count = hashtable_get_keys(x->value, &keys);"); this.emitBlock(["if (NULL != keys)"], () => { this.emitBlock(["for (size_t index = 0; index < count; index++)"], () => { - this.emitLine(cJSON.items!.cType, " *x2 = hashtable_lookup(x->value, keys[index]);"); + // @ts-expect-error awaiting refactor + this.emitLine(cJSON.items?.cType, " *x2 = hashtable_lookup(x->value, keys[index]);"); this.emitBlock(["if (NULL != x2)"], () => { - if (cJSON.items!.isNullable) { - this.emitBlock(["if ((", cJSON.items!.cType, " *)0xDEADBEEF != x2)"], () => { - this.emitLine(cJSON.items!.deleteType, "(x2);"); + if (cJSON.items?.isNullable) { + this.emitBlock(["if ((", cJSON.items?.cType, " *)0xDEADBEEF != x2)"], () => { + // @ts-expect-error awaiting refactor + this.emitLine(cJSON.items?.deleteType, "(x2);"); }); } else { - this.emitLine(cJSON.items!.deleteType, "(x2);"); + // @ts-expect-error awaiting refactor + this.emitLine(cJSON.items?.deleteType, "(x2);"); } }); }); @@ -3633,6 +3717,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { /* Nothing to do */ } + this.emitLine("cJSON_free(x);"); }); }); @@ -3973,6 +4058,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { f(); } + this.preventBlankLine(); if (withSemicolon) { if (withName !== "") { @@ -4014,6 +4100,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } }); } + this.ensureBlankLine(); } @@ -4054,6 +4141,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } } } + if (includes.has(typeName)) { const incKind = includes.get(typeName); /* If we already include the type as typed include, do not write it over with forward declare */ @@ -4130,6 +4218,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } } }; + recur(false, false, 0, type); return result; } diff --git a/packages/quicktype-core/src/language/CPlusPlus.ts b/packages/quicktype-core/src/language/CPlusPlus.ts index 5adff56d2..910f714f9 100644 --- a/packages/quicktype-core/src/language/CPlusPlus.ts +++ b/packages/quicktype-core/src/language/CPlusPlus.ts @@ -1,36 +1,57 @@ import { - setUnion, arrayIntercalate, - toReadonlyArray, - iterableFirst, iterableFind, + iterableFirst, iterableSome, + setUnion, + toReadonlyArray, withDefault } from "collection-utils"; -import { TargetLanguage } from "../TargetLanguage"; -import { Type, TypeKind, ClassType, ClassProperty, ArrayType, MapType, EnumType, UnionType } from "../Type"; -import { nullableFromUnion, matchType, removeNullFromUnion, isNamedType, directlyReachableTypes } from "../TypeUtils"; -import { NameStyle, Name, Namer, funPrefixNamer, DependencyName } from "../Naming"; -import { Sourcelike, maybeAnnotated } from "../Source"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; +import { getAccessorName } from "../attributes/AccessorNames"; import { - legalizeCharacters, + type MinMaxConstraint, + minMaxLengthForType, + minMaxValueForType, + patternForType +} from "../attributes/Constraints"; +import { enumCaseValues } from "../attributes/EnumValues"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Declaration } from "../DeclarationIR"; +import { DependencyName, type Name, type NameStyle, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../Source"; +import { + type NamingStyle, isAscii, isLetterOrUnderscoreOrDigit, - stringEscape, - NamingStyle, - makeNameStyle + legalizeCharacters, + makeNameStyle, + stringEscape } from "../support/Strings"; -import { defined, assertNever, panic, numberEnumValues } from "../support/Support"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { StringOption, EnumOption, BooleanOption, Option, getOptionValues, OptionValues } from "../RendererOptions"; -import { assert } from "../support/Support"; -import { Declaration } from "../DeclarationIR"; -import { RenderContext } from "../Renderer"; -import { getAccessorName } from "../attributes/AccessorNames"; -import { enumCaseValues } from "../attributes/EnumValues"; -import { minMaxValueForType, minMaxLengthForType, patternForType, MinMaxConstraint } from "../attributes/Constraints"; +import { assert, assertNever, defined, numberEnumValues, panic } from "../support/Support"; +import { TargetLanguage } from "../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + MapType, + type Type, + type TypeKind, + UnionType +} from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { directlyReachableTypes, isNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; const underscoreValue: [string, NamingStyle] = ["underscore-case", "underscore"]; @@ -119,11 +140,11 @@ export const cPlusPlusOptions = { }; export class CPlusPlusTargetLanguage extends TargetLanguage { - constructor(displayName = "C++", names: string[] = ["c++", "cpp", "cplusplus"], extension = "cpp") { + public constructor(displayName = "C++", names: string[] = ["c++", "cpp", "cplusplus"], extension = "cpp") { super(displayName, names, extension); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ cPlusPlusOptions.justTypes, cPlusPlusOptions.namespace, @@ -141,18 +162,15 @@ export class CPlusPlusTargetLanguage extends TargetLanguage { ]; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): CPlusPlusRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): CPlusPlusRenderer { return new CPlusPlusRenderer(this, renderContext, getOptionValues(cPlusPlusOptions, untypedOptionValues)); } } @@ -287,65 +305,67 @@ const optionalFactoryAsSharedType = "std::make_shared"; * but in vector or in variant) we can forward declare them; */ export enum IncludeKind { - ForwardDeclare, - Include + ForwardDeclare = "ForwardDeclare", + Include = "Include" } +// FIXME: make these string enums eventually export enum GlobalNames { - ClassMemberConstraints, - ClassMemberConstraintException, - ValueTooLowException, - ValueTooHighException, - ValueTooShortException, - ValueTooLongException, - InvalidPatternException, - CheckConstraint + ClassMemberConstraints = 1, + ClassMemberConstraintException = 2, + ValueTooLowException = 3, + ValueTooHighException = 4, + ValueTooShortException = 5, + ValueTooLongException = 6, + InvalidPatternException = 7, + CheckConstraint = 8 } +// FIXME: make these string enums eventually export enum MemberNames { - MinIntValue, - GetMinIntValue, - SetMinIntValue, - MaxIntValue, - GetMaxIntValue, - SetMaxIntValue, - MinDoubleValue, - GetMinDoubleValue, - SetMinDoubleValue, - MaxDoubleValue, - GetMaxDoubleValue, - SetMaxDoubleValue, - MinLength, - GetMinLength, - SetMinLength, - MaxLength, - GetMaxLength, - SetMaxLength, - Pattern, - GetPattern, - SetPattern + MinIntValue = 1, + GetMinIntValue = 2, + SetMinIntValue = 3, + MaxIntValue = 4, + GetMaxIntValue = 5, + SetMaxIntValue = 6, + MinDoubleValue = 7, + GetMinDoubleValue = 8, + SetMinDoubleValue = 9, + MaxDoubleValue = 10, + GetMaxDoubleValue = 11, + SetMaxDoubleValue = 12, + MinLength = 13, + GetMinLength = 14, + SetMinLength = 15, + MaxLength = 16, + GetMaxLength = 17, + SetMaxLength = 18, + Pattern = 19, + GetPattern = 20, + SetPattern = 21 } -type ConstraintMember = { - name: MemberNames; +interface ConstraintMember { + cppConstType?: string; + cppType: string; getter: MemberNames; + name: MemberNames; setter: MemberNames; - cppType: string; - cppConstType?: string; -}; +} -export type IncludeRecord = { +export interface IncludeRecord { kind: IncludeKind | undefined /** How to include that */; typeKind: TypeKind | undefined /** What exactly to include */; -}; +} -export type TypeRecord = { +export interface TypeRecord { + forceInclude: boolean; + level: number; name: Name; type: Type; - level: number; variant: boolean; - forceInclude: boolean; -}; +} /** * We map each and every unique type to a include kind, e.g. how @@ -353,57 +373,65 @@ export type TypeRecord = { */ export type IncludeMap = Map; -export type TypeContext = { +export interface TypeContext { + inJsonNamespace: boolean; needsForwardIndirection: boolean; needsOptionalIndirection: boolean; - inJsonNamespace: boolean; -}; +} interface StringType { - getType(): string; - getConstType(): string; - getSMatch(): string; - getRegex(): string; - createStringLiteral(inner: Sourcelike): Sourcelike; - wrapToString(inner: Sourcelike): Sourcelike; - wrapEncodingChange( + createStringLiteral: (inner: Sourcelike) => Sourcelike; + emitHelperFunctions: () => void; + getConstType: () => string; + getRegex: () => string; + getSMatch: () => string; + getType: () => string; + wrapEncodingChange: ( qualifier: Sourcelike[], fromType: Sourcelike, toType: Sourcelike, inner: Sourcelike - ): Sourcelike; - emitHelperFunctions(): void; + ) => Sourcelike; + wrapToString: (inner: Sourcelike) => Sourcelike; } function addQualifier(qualifier: Sourcelike, qualified: Sourcelike[]): Sourcelike[] { if (qualified.length === 0) { return []; } + return [qualifier, qualified]; } class WrappingCode { - constructor( + public constructor( private readonly start: Sourcelike[], private readonly end: Sourcelike[] ) {} - wrap(qualifier: Sourcelike, inner: Sourcelike): Sourcelike { + public wrap(qualifier: Sourcelike, inner: Sourcelike): Sourcelike { return [addQualifier(qualifier, this.start), inner, this.end]; } } class BaseString { public _stringType: string; + public _constStringType: string; + public _smatch: string; + public _regex: string; + public _stringLiteralPrefix: string; + public _toString: WrappingCode; + public _encodingClass: Sourcelike; + public _encodingFunction: Sourcelike; - constructor( + public constructor( stringType: string, constStringType: string, smatch: string, @@ -455,28 +483,45 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { private readonly _enumType: string; private readonly _generatedFiles: Set; + private _currentFilename: string | undefined; + private _allTypeNames: Set; + private readonly _gettersAndSettersForPropertyName = new Map(); - private readonly _namespaceNames: ReadonlyArray; + + private readonly _namespaceNames: readonly string[]; + private readonly _memberNameStyle: NameStyle; + private readonly _namedTypeNameStyle: NameStyle; + private readonly _generatedGlobalNames: Map; + private readonly _generatedMemberNames: Map; + private readonly _forbiddenGlobalNames: string[]; + private readonly _memberNamingFunction: Namer; + private readonly _stringType: StringType; + /// The type to use as an optional (std::optional or std::shared) private readonly _optionalType: string; + private readonly _optionalFactory: string; + private readonly _nulloptType: string; + private readonly _variantType: string; + private readonly _variantIndexMethodName: string; protected readonly typeNamingStyle: NamingStyle; + protected readonly enumeratorNamingStyle: NamingStyle; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -524,14 +569,14 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } // union typeguard - isUnion(t: Type | UnionType): t is UnionType { + private isUnion(t: Type | UnionType): t is UnionType { return t.kind === "union"; } // Returns true if the type can be stored in // a stack based optional type. This requires // that the type does not require forward declaration. - isOptionalAsValuePossible(t: Type): boolean { + private isOptionalAsValuePossible(t: Type): boolean { if (this.isForwardDeclaredType(t)) return false; if (this.isUnion(t)) { @@ -589,45 +634,46 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { return !this.isCycleBreakerType(tt); } } + return !this.isCycleBreakerType(t); } - isImplicitCycleBreaker(t: Type): boolean { + public isImplicitCycleBreaker(t: Type): boolean { const kind = t.kind; return kind === "array" || kind === "map"; } // Is likely to return std::optional or boost::optional - optionalTypeStack(): string { + private optionalTypeStack(): string { return this._optionalType; } // Is likely to return std::make_optional or boost::optional - optionalFactoryStack(): string { + private optionalFactoryStack(): string { return this._optionalFactory; } // Is likely to return std::shared_ptr - optionalTypeHeap(): string { + private optionalTypeHeap(): string { return optionalAsSharedType; } // Is likely to return std::make_shared - optionalFactoryHeap(): string { + private optionalFactoryHeap(): string { return optionalFactoryAsSharedType; } // Returns the optional type most suitable for the given type. // Classes that don't require forward declarations can be stored // in std::optional ( or boost::optional ) - optionalType(t: Type): string { + private optionalType(t: Type): string { if (this.isOptionalAsValuePossible(t)) return this.optionalTypeStack(); else return this.optionalTypeHeap(); } // Returns a label that can be used to distinguish between // heap and stack based optional handling methods - optionalTypeLabel(t: Type): string { + private optionalTypeLabel(t: Type): string { if (this.isOptionalAsValuePossible(t)) return "stack"; else return "heap"; } @@ -702,6 +748,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { for (const v of numberEnumValues(GlobalNames)) { this.addGlobalName(v); } + for (const v of numberEnumValues(MemberNames)) { this.addMemberName(v); } @@ -789,6 +836,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (this._options.boost) { this.emitCommentLines([" Boost http://www.boost.org"]); } + this.emitCommentLines([ " json.hpp https://github.com/nlohmann/json", "", @@ -803,6 +851,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } else { this.emitLine("// ", basename, " data = nlohmann::json::parse(jsonString);"); } + if (this._options.wstring) { this.emitLine("//"); this.emitLine("// You can get std::wstring data back out using"); @@ -812,6 +861,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { }); } } + this.ensureBlankLine(); this.emitLine("#pragma once"); @@ -824,6 +874,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitInclude(true, "optional"); } } + if (this.haveNamedUnions) { if (this._options.boost) { this.emitInclude(true, "boost/variant.hpp"); @@ -831,6 +882,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitInclude(true, "variant"); } } + if (!this._options.justTypes) { if (!this._options.includeLocation) { this.emitInclude(true, "nlohmann/json.hpp"); @@ -842,6 +894,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitInclude(false, "helper.hpp"); } } + this.ensureBlankLine(); } @@ -871,6 +924,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } else { f(); } + this.preventBlankLine(); if (withSemicolon) { this.emitLine("};"); @@ -903,11 +957,13 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (nonNulls.size === 1) { return this.cppType(defined(iterableFirst(nonNulls)), ctx, withIssues, forceNarrowString, false); } + const typeList: Sourcelike = []; for (const t of nonNulls) { if (typeList.length !== 0) { typeList.push(", "); } + typeList.push( this.cppType( t, @@ -922,6 +978,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ) ); } + return [this._variantType, "<", typeList, ">"]; } @@ -942,6 +999,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (!indirection) { return variant; } + return [this.optionalType(u), "<", variant, ">"]; } @@ -975,6 +1033,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } } } + const typeSource = matchType( t, _anyType => { @@ -1027,6 +1086,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (forceNarrowString) { keyType = "std::string"; } + return [ "std::map<", keyType, @@ -1076,7 +1136,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { */ protected generatedTypes(isClassMember: boolean, theType: Type): TypeRecord[] { const result: TypeRecord[] = []; - const recur = (forceInclude: boolean, isVariant: boolean, l: number, t: Type) => { + const recur = (forceInclude: boolean, isVariant: boolean, l: number, t: Type): void => { if (t instanceof ArrayType) { recur(true, isVariant, l + 1, t.items); } else if (t instanceof ClassType) { @@ -1132,6 +1192,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } } }; + recur(false, false, 0, theType); return result; } @@ -1268,6 +1329,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ); } } + this.ensureBlankLine(); } }); @@ -1522,6 +1584,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ); return; } + if (p.isOptional || propType instanceof UnionType) { const [nullOrOptional, typeSet] = (function (): [boolean, ReadonlySet] { if (propType instanceof UnionType) { @@ -1583,6 +1646,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { return; } } + cppType = this.cppType( propType, { @@ -1664,6 +1728,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } else { getter = [name]; } + const assignment: Sourcelike[] = [ "j[", this._stringType.wrapEncodingChange( @@ -1750,7 +1815,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { const ourQualifier = this.ourQualifier(true) as string; - const functionForKind: [string, string][] = [ + const functionForKind: Array<[string, string]> = [ ["bool", "is_boolean"], ["integer", "is_number_integer"], ["double", "is_number"], @@ -1824,6 +1889,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { }); onFirst = false; } + this.emitLine('else throw std::runtime_error("Could not deserialise!");'); } ); @@ -1873,6 +1939,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { }); i++; } + this.emitLine('default: throw std::runtime_error("Input JSON does not conform to schema!");'); }); } @@ -1886,7 +1953,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitLine("void to_json(json & j, ", this.withConst([ourQualifier, enumName]), " & x);"); } - private isLargeEnum(e: EnumType) { + private isLargeEnum(e: EnumType): boolean { // This is just an estimation. Someone might want to do some // benchmarks to find the optimum value here return e.cases.size > 15; @@ -2058,7 +2125,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitLine("#define NLOHMANN_OPT_HELPER"); this.emitNamespaces(["nlohmann"], () => { - const emitAdlStruct = (optType: string, factory: string) => { + const emitAdlStruct = (optType: string, factory: string): void => { this.emitLine("template "); this.emitBlock(["struct adl_serializer<", optType, ">"], true, () => { this.emitBlock( @@ -2082,6 +2149,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ); }); }; + emitAdlStruct(this.optionalTypeHeap(), this.optionalFactoryHeap()); emitAdlStruct(this.optionalTypeStack(), this.optionalFactoryStack()); }); @@ -2211,6 +2279,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { for (const member of constraintMembers) { this.emitMember([this._optionalType, "<", member.cppType, ">"], this.lookupMemberName(member.name)); } + this.ensureBlankLine(); this.emitLine("public:"); this.emitLine(classConstraint, "("); @@ -2499,6 +2568,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } ); }; + emitGetOptional(this.optionalTypeHeap(), "heap"); emitGetOptional(this.optionalTypeStack(), "stack"); @@ -2517,6 +2587,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } else { this.emitInclude(true, "optional"); } + this.emitInclude(true, "stdexcept"); this.emitInclude(true, "regex"); } @@ -2561,6 +2632,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitHelperFunctions(); } + this.forEachDeclaration("interposing", decl => this.emitDeclaration(decl)); if (this._options.justTypes) return; this.forEachTopLevel( @@ -2572,11 +2644,11 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { protected gatherUserNamespaceForwardDecls(): Sourcelike[] { return this.gatherSource(() => { - this.forEachObject("leading-and-interposing", (_: any, className: Name) => + this.forEachObject("leading-and-interposing", (_: unknown, className: Name) => this.emitClassHeaders(className) ); - this.forEachEnum("leading-and-interposing", (_: any, enumName: Name) => this.emitEnumHeaders(enumName)); + this.forEachEnum("leading-and-interposing", (_: unknown, enumName: Name) => this.emitEnumHeaders(enumName)); }); } @@ -2674,6 +2746,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitOptionalHelpers(); this.ensureBlankLine(); } + this.emitNamespaces(this._namespaceNames, () => this.emitTypes()); } @@ -2922,7 +2995,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } } - protected isConversionRequired(t: Type) { + protected isConversionRequired(t: Type): boolean { const originalType = this.cppType( t, { @@ -2951,7 +3024,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } public NarrowString = new (class extends BaseString implements StringType { - constructor() { + public constructor() { super( "std::string", "const std::string & ", @@ -2979,7 +3052,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { })(); public WideString = new (class extends BaseString implements StringType { - constructor(public superThis: CPlusPlusRenderer) { + public constructor(public superThis: CPlusPlusRenderer) { super( "std::wstring", "const std::wstring & ", diff --git a/packages/quicktype-core/src/language/CSharp.ts b/packages/quicktype-core/src/language/CSharp.ts index 8aa03ec13..331345d66 100644 --- a/packages/quicktype-core/src/language/CSharp.ts +++ b/packages/quicktype-core/src/language/CSharp.ts @@ -1,70 +1,81 @@ import { arrayIntercalate } from "collection-utils"; +import unicode from "unicode-properties"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; +import { minMaxLengthForType, minMaxValueForType } from "../attributes/Constraints"; +import { ConvenienceRenderer, type ForbiddenWordsInfo, inferredNameOrder } from "../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, SimpleName, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; import { - Type, - EnumType, - UnionType, - ClassType, - ClassProperty, - ArrayType, - TransformedStringTypeKind, - PrimitiveStringTypeKind, - PrimitiveType -} from "../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion, directlyReachableSingleNamedType } from "../TypeUtils"; -import { Sourcelike, maybeAnnotated, modifySource } from "../Source"; + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; import { - utf16LegalizeCharacters, - utf16StringEscape, - splitIntoWords, + type WordInName, + camelCase, combineWords, firstUpperWordStyle, - camelCase, - WordInName + splitIntoWords, + utf16LegalizeCharacters, + utf16StringEscape } from "../support/Strings"; -import { defined, assert, panic, assertNever } from "../support/Support"; -import { Name, DependencyName, Namer, funPrefixNamer, SimpleName } from "../Naming"; -import { ConvenienceRenderer, ForbiddenWordsInfo, inferredNameOrder } from "../ConvenienceRenderer"; +import { assert, assertNever, defined, panic } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; -import { StringOption, EnumOption, Option, BooleanOption, OptionValues, getOptionValues } from "../RendererOptions"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { StringTypeMapping } from "../TypeBuilder"; import { - followTargetType, - transformationForType, - Transformer, - DecodingTransformer, - DecodingChoiceTransformer, - UnionInstantiationTransformer, + ArrayDecodingTransformer, + ArrayEncodingTransformer, ChoiceTransformer, - UnionMemberMatchTransformer, + DecodingChoiceTransformer, + DecodingTransformer, EncodingTransformer, + MinMaxLengthCheckTransformer, + MinMaxValueTransformer, + ParseStringTransformer, StringMatchTransformer, StringProducerTransformer, - ParseStringTransformer, StringifyTransformer, - Transformation, - ArrayDecodingTransformer, - ArrayEncodingTransformer, - MinMaxLengthCheckTransformer, - MinMaxValueTransformer + type Transformation, + type Transformer, + UnionInstantiationTransformer, + UnionMemberMatchTransformer, + followTargetType, + transformationForType } from "../Transformers"; -import { RenderContext } from "../Renderer"; -import { minMaxLengthForType, minMaxValueForType } from "../attributes/Constraints"; -import * as unicode from "unicode-properties"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + type PrimitiveStringTypeKind, + type PrimitiveType, + type TransformedStringTypeKind, + type Type, + UnionType +} from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; export enum Framework { - Newtonsoft, - SystemTextJson + Newtonsoft = "Newtonsoft", + SystemTextJson = "SystemTextJson" } export type Version = 5 | 6; -export type OutputFeatures = { helpers: boolean; attributes: boolean }; +export interface OutputFeatures { + attributes: boolean; + helpers: boolean; +} export enum AccessModifier { - None, - Public, - Internal + None = "None", + Public = "Public", + Internal = "Internal" } export type CSharpTypeForAny = "object" | "dynamic"; @@ -80,17 +91,20 @@ function needTransformerForType(t: Type): "automatic" | "manual" | "nullable" | if (needTransformerForType(maybeNullable) === "manual") return "nullable"; return "none"; } + if (t instanceof ArrayType) { const itemsNeed = needTransformerForType(t.items); if (itemsNeed === "manual" || itemsNeed === "nullable") return "automatic"; return "none"; } + if (t instanceof EnumType) return "automatic"; if (t.kind === "double") return minMaxValueForType(t) !== undefined ? "manual" : "none"; if (t.kind === "integer-string" || t.kind === "bool-string") return "manual"; if (t.kind === "string") { return minMaxLengthForType(t) !== undefined ? "manual" : "none"; } + return "none"; } @@ -195,11 +209,11 @@ export const cSharpOptions = { }; export class CSharpTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("C#", ["cs", "csharp"], "cs"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ cSharpOptions.framework, cSharpOptions.namespace, @@ -216,7 +230,7 @@ export class CSharpTargetLanguage extends TargetLanguage { ]; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date-time"); mapping.set("time", "date-time"); @@ -228,23 +242,20 @@ export class CSharpTargetLanguage extends TargetLanguage { return mapping; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - needsTransformerForType(t: Type): boolean { + public needsTransformerForType(t: Type): boolean { const need = needTransformerForType(t); return need !== "none" && need !== "nullable"; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): ConvenienceRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { const options = getOptionValues(cSharpOptions, untypedOptionValues); switch (options.framework) { @@ -278,14 +289,16 @@ function isStartCharacter(utf16Unit: number): boolean { if (unicode.isAlphabetic(utf16Unit)) { return true; } + return utf16Unit === 0x5f; // underscore } function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); - if (["Nd", "Pc", "Mn", "Mc"].indexOf(category) >= 0) { + if (["Nd", "Pc", "Mn", "Mc"].includes(category)) { return true; } + return isStartCharacter(utf16Unit); } @@ -411,11 +424,12 @@ function isValueType(t: Type): boolean { if (t instanceof UnionType) { return nullableFromUnion(t) === null; } - return ["integer", "double", "bool", "enum", "date-time", "uuid"].indexOf(t.kind) >= 0; + + return ["integer", "double", "bool", "enum", "date-time", "uuid"].includes(t.kind); } export class CSharpRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _csOptions: OptionValues @@ -523,9 +537,11 @@ export class CSharpRenderer extends ConvenienceRenderer { return csType; } } + protected baseclassForType(_t: Type): Sourcelike | undefined { return undefined; } + protected emitType( description: string[] | undefined, accessModifier: AccessModifier, @@ -544,12 +560,14 @@ export class CSharpRenderer extends ConvenienceRenderer { default: break; } + this.emitDescription(description); if (baseclass === undefined) { this.emitLine(declaration, " ", name); } else { this.emitLine(declaration, " ", name, " : ", baseclass); } + this.emitBlock(emitter); } @@ -614,6 +632,7 @@ export class CSharpRenderer extends ConvenienceRenderer { ) { this.ensureBlankLine(); } + this.emitDescription(description); this.emitLine(property); } else if (this._csOptions.dense && attributes.length > 0) { @@ -624,6 +643,7 @@ export class CSharpRenderer extends ConvenienceRenderer { for (const attribute of attributes) { this.emitLine(attribute); } + this.emitLine(property); } @@ -781,10 +801,12 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { private readonly _enumExtensionsNames = new Map(); private readonly _needHelpers: boolean; + private readonly _needAttributes: boolean; + private readonly _needNamespaces: boolean; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -812,9 +834,11 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (this._options.dense) { forbidden.push("J", "R", "N"); } + if (this._options.baseclass !== undefined) { forbidden.push(this._options.baseclass); } + return super.forbiddenNamesForGlobalNamespace().concat(forbidden); } @@ -830,8 +854,10 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { xfer = xfer.consumer; } + return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); } + return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); } @@ -863,13 +889,16 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); this.emitUsing([denseNullValueHandlingEnumName, " = Newtonsoft.Json.NullValueHandling"]); } + if (this._options.baseclass === "EntityData") { this.emitUsing("Microsoft.Azure.Mobile.Server"); } } + protected baseclassForType(_t: Type): Sourcelike | undefined { return this._options.baseclass; } + protected emitDefaultLeadingComments(): void { if (!this._needHelpers) return; @@ -890,6 +919,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } else { rhs = [topLevelName, ".FromJson(jsonString)"]; } + this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); }); } @@ -940,6 +970,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } else { required = [", Required = ", requiredClass, ".Always", nullValueHandling]; } + attributes.push(["[", jsonProperty, '("', escapedName, '"', required, ")]"]); const converter = this.converterForType(property.type); @@ -972,6 +1003,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { partial = ""; typeKind = "class"; } + const csType = this.topLevelResultType(t); this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { // FIXME: Make FromJson a Named @@ -1063,9 +1095,10 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { this.emitLine(this.converterObject(converter), ","); } } + this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); }); - this.emitLine(`},`); + this.emitLine("},"); }, true); }); } @@ -1082,6 +1115,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { for (const tokenCase of tokenCases) { this.emitTokenCase(tokenCase); } + this.indent(() => { const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); if (!allHandled) { @@ -1129,12 +1163,14 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { let output = targetType.kind === "double" ? targetType : source; this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); } + return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); } else if (xfer instanceof ArrayDecodingTransformer) { // FIXME: Consume StartArray if (!(targetType instanceof ArrayType)) { return panic("Array decoding must produce an array type"); } + // FIXME: handle EOF this.emitLine("reader.Read();"); this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); @@ -1153,6 +1189,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (!this._options.useList) { result = [result, ".ToArray()"]; } + emitFinish(result); return true; } else if (xfer instanceof DecodingChoiceTransformer) { @@ -1167,6 +1204,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } }); } + this.emitDecoderTransformerCase( ["Integer"], "integerValue", @@ -1216,6 +1254,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } else if (t instanceof EnumType) { return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; } + return panic(`Type ${t.kind} does not have string cases`); } @@ -1229,6 +1268,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (continuation === undefined) { return targetType; } + return followTargetType(continuation.sourceType); } @@ -1285,9 +1325,11 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { member = [variable, ".", memberName]; test = [member, " != null"]; } + if (memberType.kind !== "null" && isValueType(memberType)) { member = [member, ".Value"]; } + this.emitLine("if (", test, ")"); this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); } else if (xfer instanceof StringMatchTransformer) { @@ -1302,6 +1344,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } else { this.emitLine(this.serializeValueCode(variable), ";"); } + emitFinish([]); return true; } else if (xfer instanceof ArrayEncodingTransformer) { @@ -1386,9 +1429,11 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (min !== undefined) { conditions.push([variable, ".Length >= ", min.toString()]); } + if (max !== undefined) { conditions.push([variable, ".Length <= ", max.toString()]); } + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); return false; @@ -1400,9 +1445,11 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (min !== undefined) { conditions.push([variable, " >= ", min.toString()]); } + if (max !== undefined) { conditions.push([variable, " <= ", max.toString()]); } + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); return false; @@ -1410,6 +1457,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (!(targetType instanceof UnionType)) { return panic("Union instantiation transformer must produce a union type"); } + const maybeNullable = nullableFromUnion(targetType); if (maybeNullable !== null) { emitFinish(variable); @@ -1422,12 +1470,15 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { const memberName = this.nameForUnionMember(targetType, xfer.sourceType); initializer = [" ", memberName, " = ", variable, " "]; } + emitFinish(["new ", unionName, " {", initializer, "}"]); } + return true; } else { return panic("Unknown transformer"); } + return false; } @@ -1443,6 +1494,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (haveNullable) { canConvertExpr = [canConvertExpr, " || t == typeof(", csType, "?)"]; } + this.emitCanConvert(canConvertExpr); this.ensureBlankLine(); this.emitReadJson(() => { @@ -1471,6 +1523,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { this.emitLine("return;"); }); } + this.emitLine("var value = (", csType, ")untypedValue;"); const allHandled = this.emitTransformer("value", reverse.transformer, reverse.targetType, () => this.emitLine("return;") @@ -1490,6 +1543,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { this.ensureBlankLine(); this.emitSerializeClass(); } + if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { this.ensureBlankLine(); this.emitConverterClass(); @@ -1508,10 +1562,12 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { private readonly _enumExtensionsNames = new Map(); private readonly _needHelpers: boolean; + private readonly _needAttributes: boolean; + private readonly _needNamespaces: boolean; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -1540,9 +1596,11 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (this._options.dense) { forbidden.push("J", "R", "N"); } + if (this._options.baseclass !== undefined) { forbidden.push(this._options.baseclass); } + return super.forbiddenNamesForGlobalNamespace().concat(forbidden); } @@ -1558,8 +1616,10 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { xfer = xfer.consumer; } + return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); } + return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); } @@ -1591,6 +1651,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { // this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); this.emitUsing([denseNullValueHandlingEnumName, " = System.Text.Json.Serialization.JsonIgnoreCondition"]); } + if (this._options.baseclass === "EntityData") { this.emitUsing("Microsoft.Azure.Mobile.Server"); } @@ -1628,6 +1689,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } else { rhs = [topLevelName, ".FromJson(jsonString)"]; } + this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); }); @@ -1721,6 +1783,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { partial = ""; typeKind = "class"; } + const csType = this.topLevelResultType(t); this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { // FIXME: Make FromJson a Named @@ -1833,12 +1896,13 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { this.emitLine(this.converterObject(converter), ","); } } + this.emitLine("new DateOnlyConverter(),"); this.emitLine("new TimeOnlyConverter(),"); this.emitLine("IsoDateTimeOffsetConverter.Singleton"); // this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); }); - this.emitLine(`},`); + this.emitLine("},"); }, true); }); } @@ -1855,6 +1919,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { for (const tokenCase of tokenCases) { this.emitTokenCase(tokenCase); } + this.indent(() => { const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); if (!allHandled) { @@ -1902,12 +1967,14 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { let output = targetType.kind === "double" ? targetType : source; this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); } + return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); } else if (xfer instanceof ArrayDecodingTransformer) { // FIXME: Consume StartArray if (!(targetType instanceof ArrayType)) { return panic("Array decoding must produce an array type"); } + // FIXME: handle EOF this.emitLine("reader.Read();"); this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); @@ -1926,6 +1993,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (!this._options.useList) { result = [result, ".ToArray()"]; } + emitFinish(result); return true; } else if (xfer instanceof DecodingChoiceTransformer) { @@ -1940,6 +2008,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } }); } + this.emitDecoderTransformerCase( ["Number"], "integerValue", @@ -1997,6 +2066,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } else if (t instanceof EnumType) { return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; } + return panic(`Type ${t.kind} does not have string cases`); } @@ -2010,6 +2080,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (continuation === undefined) { return targetType; } + return followTargetType(continuation.sourceType); } @@ -2066,9 +2137,11 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { member = [variable, ".", memberName]; test = [member, " != null"]; } + if (memberType.kind !== "null" && isValueType(memberType)) { member = [member, ".Value"]; } + this.emitLine("if (", test, ")"); this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); } else if (xfer instanceof StringMatchTransformer) { @@ -2083,6 +2156,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } else { this.emitLine(this.serializeValueCode(variable), ";"); } + emitFinish([]); return true; } else if (xfer instanceof ArrayEncodingTransformer) { @@ -2173,9 +2247,11 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (min !== undefined) { conditions.push([variable, ".Length >= ", min.toString()]); } + if (max !== undefined) { conditions.push([variable, ".Length <= ", max.toString()]); } + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); return false; @@ -2187,9 +2263,11 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (min !== undefined) { conditions.push([variable, " >= ", min.toString()]); } + if (max !== undefined) { conditions.push([variable, " <= ", max.toString()]); } + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); return false; @@ -2197,6 +2275,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (!(targetType instanceof UnionType)) { return panic("Union instantiation transformer must produce a union type"); } + const maybeNullable = nullableFromUnion(targetType); if (maybeNullable !== null) { emitFinish(variable); @@ -2209,12 +2288,15 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { const memberName = this.nameForUnionMember(targetType, xfer.sourceType); initializer = [" ", memberName, " = ", variable, " "]; } + emitFinish(["new ", unionName, " {", initializer, "}"]); } + return true; } else { return panic("Unknown transformer"); } + return false; } @@ -2292,6 +2374,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { this.ensureBlankLine(); this.emitSerializeClass(); } + if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { this.ensureBlankLine(); this.emitConverterClass(); diff --git a/packages/quicktype-core/src/language/Crystal.ts b/packages/quicktype-core/src/language/Crystal.ts index 3b469fe15..9816191bc 100644 --- a/packages/quicktype-core/src/language/Crystal.ts +++ b/packages/quicktype-core/src/language/Crystal.ts @@ -1,33 +1,34 @@ -import { TargetLanguage } from "../TargetLanguage"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { type Option } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../Source"; import { - legalizeCharacters, - splitIntoWords, - isLetterOrUnderscoreOrDigit, - combineWords, allLowerWordStyle, + combineWords, + escapeNonPrintableMapper, firstUpperWordStyle, intToHex, - utf32ConcatMap, - escapeNonPrintableMapper, - isPrintable, isAscii, - isLetterOrUnderscore + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap } from "../support/Strings"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { UnionType, Type, ClassType, EnumType } from "../Type"; +import { TargetLanguage } from "../TargetLanguage"; +import { type ClassType, type EnumType, type Type, type UnionType } from "../Type"; +import { type FixMeOptionsAnyType } from "../types"; import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { Sourcelike, maybeAnnotated } from "../Source"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { Option } from "../RendererOptions"; -import { RenderContext } from "../Renderer"; export class CrystalTargetLanguage extends TargetLanguage { protected makeRenderer(renderContext: RenderContext): CrystalRenderer { return new CrystalRenderer(this, renderContext); } - constructor() { + public constructor() { super("Crystal", ["crystal", "cr", "crystallang"], "cr"); } @@ -35,7 +36,7 @@ export class CrystalTargetLanguage extends TargetLanguage { return " "; } - protected getOptions(): Option[] { + protected getOptions(): Array> { return []; } } @@ -183,6 +184,7 @@ function isAsciiLetterOrUnderscoreOrDigit(codePoint: number): boolean { if (!isAscii(codePoint)) { return false; } + return isLetterOrUnderscoreOrDigit(codePoint); } @@ -190,6 +192,7 @@ function isAsciiLetterOrUnderscore(codePoint: number): boolean { if (!isAscii(codePoint)) { return false; } + return isLetterOrUnderscore(codePoint); } @@ -228,7 +231,7 @@ function standardUnicodeCrystalEscape(codePoint: number): string { const crystalStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeCrystalEscape)); export class CrystalRenderer extends ConvenienceRenderer { - constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { + public constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { super(targetLanguage, renderContext); } @@ -319,7 +322,7 @@ export class CrystalRenderer extends ConvenienceRenderer { protected emitStructDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); - const structBody = () => + const structBody = (): void => this.forEachClassProperty(c, "none", (name, jsonName, prop) => { this.ensureBlankLine(); this.emitDescription(this.descriptionForClassProperty(c, jsonName)); diff --git a/packages/quicktype-core/src/language/Dart.ts b/packages/quicktype-core/src/language/Dart.ts index 6dc40ead6..d8d471ec9 100644 --- a/packages/quicktype-core/src/language/Dart.ts +++ b/packages/quicktype-core/src/language/Dart.ts @@ -1,14 +1,9 @@ -import { - ClassProperty, - ClassType, - EnumType, - PrimitiveStringTypeKind, - TransformedStringTypeKind, - Type, - UnionType -} from "../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../TypeUtils"; -import { maybeAnnotated, modifySource, Sourcelike } from "../Source"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; import { allLowerWordStyle, allUpperWordStyle, @@ -26,16 +21,20 @@ import { utf16ConcatMap, utf16LegalizeCharacters } from "../support/Strings"; - -import { StringTypeMapping } from "../TypeBuilder"; - -import { DependencyName, funPrefixNamer, Name, Namer } from "../Naming"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { TargetLanguage } from "../TargetLanguage"; -import { BooleanOption, getOptionValues, Option, OptionValues, StringOption } from "../RendererOptions"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; import { defined } from "../support/Support"; -import { RenderContext } from "../Renderer"; +import { TargetLanguage } from "../TargetLanguage"; +import { + type ClassProperty, + type ClassType, + EnumType, + type PrimitiveStringTypeKind, + type TransformedStringTypeKind, + type Type, + type UnionType +} from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../TypeUtils"; export const dartOptions = { nullSafety: new BooleanOption("null-safety", "Null Safety", true), @@ -62,11 +61,11 @@ export const dartOptions = { }; export class DartTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Dart", ["dart"], "dart"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ dartOptions.nullSafety, dartOptions.justTypes, @@ -82,18 +81,18 @@ export class DartTargetLanguage extends TargetLanguage { ]; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date"); mapping.set("date-time", "date-time"); return mapping; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): DartRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): DartRenderer { const options = getOptionValues(dartOptions, untypedOptionValues); return new DartRenderer(this, renderContext, options); } @@ -215,20 +214,25 @@ function dartNameStyle(startWithUpper: boolean, upperUnderscore: boolean, origin ); } -type TopLevelDependents = { - encoder: Name; +interface TopLevelDependents { decoder: Name; -}; + encoder: Name; +} export class DartRenderer extends ConvenienceRenderer { private readonly _gettersAndSettersForPropertyName = new Map(); + private _needEnumValues = false; + private classCounter = 0; + private classPropertyCounter = 0; + private readonly _topLevelDependents = new Map(); + private readonly _enumValues = new Map(); - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -345,12 +349,15 @@ export class DartRenderer extends ConvenienceRenderer { if (this._options.requiredProperties) { this.emitLine("import 'package:meta/meta.dart';"); } + if (this._options.useFreezed) { this.emitLine("import 'package:freezed_annotation/freezed_annotation.dart';"); } + if (this._options.useHive) { this.emitLine("import 'package:hive/hive.dart';"); } + if (this._options.useJsonAnnotation && !this._options.useFreezed) { // The freezed annotatation import already provides the import for json_annotation this.emitLine("import 'package:json_annotation/json_annotation.dart';"); @@ -368,6 +375,7 @@ export class DartRenderer extends ConvenienceRenderer { if (this._options.useFreezed) { this.emitLine("part '", name, ".freezed.dart';"); } + if (!this._options.justTypes) { this.emitLine("part '", name, ".g.dart';"); } @@ -405,6 +413,7 @@ export class DartRenderer extends ConvenienceRenderer { if (maybeNullable === null) { return "dynamic"; } + return withNullable(this.dartType(maybeNullable, withIssues)); }, transformedStringType => { @@ -423,6 +432,7 @@ export class DartRenderer extends ConvenienceRenderer { if (this._options.nullSafety && isNullable && !this._options.requiredProperties) { return [list, " == null ? [] : ", "List<", itemType, ">.from(", list, "!.map((x) => ", mapper, "))"]; } + return ["List<", itemType, ">.from(", list, ".map((x) => ", mapper, "))"]; } @@ -430,10 +440,11 @@ export class DartRenderer extends ConvenienceRenderer { if (this._options.nullSafety && isNullable && !this._options.requiredProperties) { return ["Map.from(", map, "!).map((k, v) => MapEntry(k, ", valueMapper, "))"]; } + return ["Map.from(", map, ").map((k, v) => MapEntry(k, ", valueMapper, "))"]; } - protected mapClass(isNullable: boolean, classType: ClassType, dynamic: Sourcelike) { + protected mapClass(isNullable: boolean, classType: ClassType, dynamic: Sourcelike): Sourcelike { if (this._options.nullSafety && isNullable && !this._options.requiredProperties) { return [ dynamic, @@ -446,12 +457,15 @@ export class DartRenderer extends ConvenienceRenderer { ")" ]; } + return [this.nameForNamedType(classType), ".", this.fromJson, "(", dynamic, ")"]; } - //If the first time is the unionType type, after nullableFromUnion conversion, - //the isNullable property will become false, which is obviously wrong, - //so add isNullable property + // FIXME: refactor this + // If the first time is the unionType type, after nullableFromUnion conversion, + // the isNullable property will become false, which is obviously wrong, + // so add isNullable property + // eslint-disable-next-line @typescript-eslint/default-param-last protected fromDynamicExpression(isNullable: boolean = false, t: Type, ...dynamic: Sourcelike[]): Sourcelike { return matchType( t, @@ -489,6 +503,7 @@ export class DartRenderer extends ConvenienceRenderer { if (maybeNullable === null) { return dynamic; } + return this.fromDynamicExpression(unionType.isNullable, maybeNullable, dynamic); }, transformedStringType => { @@ -502,6 +517,7 @@ export class DartRenderer extends ConvenienceRenderer { ) { return [dynamic, " == null ? null : ", "DateTime.parse(", dynamic, ")"]; } + return ["DateTime.parse(", dynamic, ")"]; default: return dynamic; @@ -510,9 +526,11 @@ export class DartRenderer extends ConvenienceRenderer { ); } - //If the first time is the unionType type, after nullableFromUnion conversion, - //the isNullable property will become false, which is obviously wrong, - //so add isNullable property + // FIXME: refactor this + // If the first time is the unionType type, after nullableFromUnion conversion, + // the isNullable property will become false, which is obviously wrong, + // so add isNullable property + // eslint-disable-next-line @typescript-eslint/default-param-last protected toDynamicExpression(isNullable: boolean = false, t: Type, ...dynamic: Sourcelike[]): Sourcelike { return matchType( t, @@ -537,6 +555,7 @@ export class DartRenderer extends ConvenienceRenderer { ) { return [dynamic, "?.", this.toJson, "()"]; } + return [dynamic, ".", this.toJson, "()"]; }, mapType => @@ -554,6 +573,7 @@ export class DartRenderer extends ConvenienceRenderer { if (maybeNullable === null) { return dynamic; } + return this.toDynamicExpression(unionType.isNullable, maybeNullable, dynamic); }, transformedStringType => { @@ -566,6 +586,7 @@ export class DartRenderer extends ConvenienceRenderer { ) { return [dynamic, "?.toIso8601String()"]; } + return [dynamic, ".toIso8601String()"]; case "date": if ( @@ -584,6 +605,7 @@ export class DartRenderer extends ConvenienceRenderer { "!.day.toString().padLeft(2, '0')}\"" ]; } + return [ '"${', dynamic, @@ -729,9 +751,11 @@ export class DartRenderer extends ConvenienceRenderer { this.emitLine(`@HiveType(typeId: ${this.classCounter})`); this.classPropertyCounter = 0; } + if (this._options.useJsonAnnotation) { - this.emitLine(`@JsonSerializable()`); + this.emitLine("@JsonSerializable()"); } + this.emitBlock(["class ", className], () => { if (c.getProperties().size === 0) { this._emitEmptyConstructor(className); @@ -800,6 +824,7 @@ export class DartRenderer extends ConvenienceRenderer { this.classPropertyCounter++; this.emitLine(`@JsonKey(name: "${jsonName}")`); } + this.emitLine(required ? "required " : "", this.dartType(prop.type, true), " ", name, ","); }); }); @@ -830,6 +855,7 @@ export class DartRenderer extends ConvenienceRenderer { if (this._options.useJsonAnnotation) { this.emitLine('@JsonValue("', stringEscape(jsonName), '")'); } + this.emitLine(name, comma); }); }); diff --git a/packages/quicktype-core/src/language/Elixir.ts b/packages/quicktype-core/src/language/Elixir.ts index 9efb257a5..3762dae7e 100644 --- a/packages/quicktype-core/src/language/Elixir.ts +++ b/packages/quicktype-core/src/language/Elixir.ts @@ -1,27 +1,27 @@ import * as unicode from "unicode-properties"; -import { Sourcelike } from "../Source"; -import { Namer, Name } from "../Naming"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { TargetLanguage } from "../TargetLanguage"; -import { Option, BooleanOption, OptionValues, getOptionValues, StringOption } from "../RendererOptions"; -import { Type, EnumType, ClassType, UnionType, ArrayType, MapType, PrimitiveType } from "../Type"; -import { matchType, nullableFromUnion } from "../TypeUtils"; - +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, Namer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; +import { type Sourcelike } from "../Source"; import { - legalizeCharacters, - splitIntoWords, - combineWords, - firstUpperWordStyle, - allUpperWordStyle, allLowerWordStyle, - utf32ConcatMap, - isPrintable, + allUpperWordStyle, + combineWords, escapeNonPrintableMapper, + firstUpperWordStyle, intToHex, - isLetterOrUnderscore + isLetterOrUnderscore, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap } from "../support/Strings"; -import { RenderContext } from "../Renderer"; +import { TargetLanguage } from "../TargetLanguage"; +import { ArrayType, ClassType, EnumType, MapType, PrimitiveType, type Type, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion } from "../TypeUtils"; const forbiddenModuleNames = [ "Access", @@ -128,17 +128,17 @@ function unicodeEscape(codePoint: number): string { return `\\u{${intToHex(codePoint, 0)}}`; } -function capitalizeFirstLetter(str: string) { +function capitalizeFirstLetter(str: string): string { return str.charAt(0).toUpperCase() + str.slice(1); } const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); -function escapeDoubleQuotes(str: string) { +function escapeDoubleQuotes(str: string): string { return str.replace(/"/g, '\\"'); } -function escapeNewLines(str: string) { +function escapeNewLines(str: string): string { return str.replace(/\n/g, "\\n"); } @@ -148,15 +148,15 @@ export const elixirOptions = { }; export class ElixirTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Elixir", ["elixir"], "ex"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [elixirOptions.justTypes, elixirOptions.namespace]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } @@ -164,7 +164,7 @@ export class ElixirTargetLanguage extends TargetLanguage { return " "; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): ElixirRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ElixirRenderer { return new ElixirRenderer(this, renderContext, getOptionValues(elixirOptions, untypedOptionValues)); } } @@ -173,7 +173,7 @@ const isStartCharacter = isLetterOrUnderscore; function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].indexOf(category) >= 0 || isStartCharacter(utf16Unit); + return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); } const legalizeName = legalizeCharacters(isPartCharacter); @@ -182,6 +182,7 @@ function simpleNameStyle(original: string, uppercase: boolean): string { if (/^[0-9]+$/.test(original)) { original = `${original}N`; } + const words = splitIntoWords(original); return combineWords( words, @@ -210,7 +211,7 @@ function memberNameStyle(original: string): string { } export class ElixirRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -285,7 +286,7 @@ export class ElixirRenderer extends ConvenienceRenderer { mapType => ["%{String.t() => ", this.elixirType(mapType.values), "}", optional], enumType => [this.nameForNamedTypeWithNamespace(enumType), ".t()", optional], unionType => { - const children = [...unionType.getChildren()].map(t => this.elixirType(t)); + const children = [...unionType.getChildren()].map(ut => this.elixirType(ut)); return [ children.flatMap((element, index) => (index === children.length - 1 ? element : [element, " | "])), optional @@ -422,7 +423,13 @@ export class ElixirRenderer extends ConvenienceRenderer { }); } - private emitPatternMatches(types: Type[], name: Sourcelike, parentName: Sourcelike, suffix = "", optional = false) { + private emitPatternMatches( + types: Type[], + name: Sourcelike, + parentName: Sourcelike, + suffix = "", + optional = false + ): void { this.ensureBlankLine(); let typesToMatch = this.sortAndFilterPatternMatchTypes(types); @@ -482,6 +489,7 @@ export class ElixirRenderer extends ConvenienceRenderer { if (encode) { mode = "encode"; } + return matchType( t, _anyType => [], @@ -574,6 +582,7 @@ export class ElixirRenderer extends ConvenienceRenderer { "(value)} end)" ]; } + return [primitive]; } }, @@ -604,8 +613,10 @@ export class ElixirRenderer extends ConvenienceRenderer { if (nullableTypes.length < 2) { return this.fromDynamic(nullable, jsonName, name, true); } + return ['m["', jsonName, '"] && decode_', name, '(m["', jsonName, '"])']; } + return ["decode_", name, '(m["', jsonName, '"])']; } ); @@ -626,6 +637,7 @@ export class ElixirRenderer extends ConvenienceRenderer { if (arrayElement instanceof ArrayType) { return expression; } + if (arrayElement.isPrimitive()) { return expression; } else if (arrayElement instanceof MapType) { @@ -689,6 +701,7 @@ export class ElixirRenderer extends ConvenienceRenderer { "(value)} end)" ]; } + return [expression]; } }, @@ -721,12 +734,13 @@ export class ElixirRenderer extends ConvenienceRenderer { return ["struct.", e, " && encode_", e, "(struct.", e, ")"]; } + return ["encode_", e, "(struct.", e, ")"]; } ); } - private emitBlock(source: Sourcelike, emit: () => void) { + private emitBlock(source: Sourcelike, emit: () => void): void { this.emitLine(source); this.indent(emit); this.emitLine("end"); @@ -740,7 +754,7 @@ export class ElixirRenderer extends ConvenienceRenderer { }); } - private emitModule(c: ClassType, moduleName: Name) { + private emitModule(c: ClassType, moduleName: Name): void { this.emitBlock(["defmodule ", this.nameWithNamespace(moduleName), " do"], () => { const structDescription = this.descriptionForType(c) ?? []; const attributeDescriptions: Sourcelike[][] = []; @@ -754,6 +768,7 @@ export class ElixirRenderer extends ConvenienceRenderer { this.emitDescription([...structDescription, ...attributeDescriptions]); this.ensureBlankLine(); } + const requiredAttributes: Sourcelike[] = []; this.forEachClassProperty(c, "none", (name, _jsonName, p) => { if (!p.isOptional) { @@ -767,6 +782,7 @@ export class ElixirRenderer extends ConvenienceRenderer { if (requiredAttributes.length) { this.emitLine(["@enforce_keys [", requiredAttributes, "]"]); } + const attributeNames: Sourcelike[] = []; this.forEachClassProperty(c, "none", (name, _jsonName, _p) => { if (attributeNames.length === 0) { @@ -794,6 +810,7 @@ export class ElixirRenderer extends ConvenienceRenderer { if (this._options.justTypes) { return; } + this.forEachClassProperty(c, "none", (name, _jsonName, p) => { if (p.type.kind === "union") { const unionTypes = [...p.type.getChildren()]; @@ -925,7 +942,7 @@ export class ElixirRenderer extends ConvenienceRenderer { return true; } - private emitEnum(e: EnumType, enumName: Name) { + private emitEnum(e: EnumType, enumName: Name): void { this.emitBlock(["defmodule ", this.nameWithNamespace(enumName), " do"], () => { this.emitDescription(this.descriptionForType(e)); this.emitLine("@valid_enum_members ["); @@ -984,11 +1001,11 @@ end`); }); } - private emitUnion(_u: UnionType, _unionName: Name) { + private emitUnion(_u: UnionType, _unionName: Name): void { return; } - protected emitSourceStructure() { + protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { diff --git a/packages/quicktype-core/src/language/Elm.ts b/packages/quicktype-core/src/language/Elm.ts index bab36c541..ced7837b4 100644 --- a/packages/quicktype-core/src/language/Elm.ts +++ b/packages/quicktype-core/src/language/Elm.ts @@ -1,28 +1,36 @@ -import { mapContains, arrayIntercalate } from "collection-utils"; +import { arrayIntercalate, mapContains } from "collection-utils"; -import { TargetLanguage } from "../TargetLanguage"; -import { EnumOption, StringOption, BooleanOption, Option, getOptionValues, OptionValues } from "../RendererOptions"; -import { Type, ClassType, UnionType, EnumType, ClassProperty } from "../Type"; -import { matchType, nullableFromUnion } from "../TypeUtils"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { Namer, Name, DependencyName, funPrefixNamer } from "../Naming"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; import { - legalizeCharacters, - isLetterOrUnderscoreOrDigit, - isLetterOrUnderscore, + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../RendererOptions"; +import { type MultiWord, type Sourcelike, annotated, multiWord, parenIfNeeded, singleWord } from "../Source"; +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, decapitalize, - stringEscape, + firstUpperWordStyle, isAscii, + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + legalizeCharacters, splitIntoWords, - combineWords, - firstUpperWordStyle, - allLowerWordStyle, - allUpperWordStyle + stringEscape } from "../support/Strings"; import { defined } from "../support/Support"; -import { Sourcelike, annotated, MultiWord, singleWord, multiWord, parenIfNeeded } from "../Source"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { RenderContext } from "../Renderer"; +import { TargetLanguage } from "../TargetLanguage"; +import { type ClassProperty, type ClassType, type EnumType, type Type, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion } from "../TypeUtils"; export const elmOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), @@ -35,23 +43,23 @@ export const elmOptions = { }; export class ElmTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Elm", ["elm"], "elm"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [elmOptions.justTypes, elmOptions.moduleName, elmOptions.useList]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): ElmRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ElmRenderer { return new ElmRenderer(this, renderContext, getOptionValues(elmOptions, untypedOptionValues)); } } @@ -116,40 +124,44 @@ function elmNameStyle(original: string, upper: boolean): string { const upperNamingFunction = funPrefixNamer("upper", n => elmNameStyle(n, true)); const lowerNamingFunction = funPrefixNamer("lower", n => elmNameStyle(n, false)); -type RequiredOrOptional = { - reqOrOpt: string; +interface RequiredOrOptional { fallback: string; -}; + reqOrOpt: string; +} function requiredOrOptional(p: ClassProperty): RequiredOrOptional { function optional(fallback: string): RequiredOrOptional { return { reqOrOpt: "Jpipe.optional", fallback }; } + const t = p.type; if (p.isOptional || (t instanceof UnionType && nullableFromUnion(t) !== null)) { return optional(" Nothing"); } + if (t.kind === "null") { return optional(" ()"); } + return { reqOrOpt: "Jpipe.required", fallback: "" }; } -type TopLevelDependent = { - encoder: Name; +interface TopLevelDependent { decoder?: Name; -}; - -type NamedTypeDependent = { encoder: Name; +} + +interface NamedTypeDependent { decoder: Name; -}; + encoder: Name; +} export class ElmRenderer extends ConvenienceRenderer { private readonly _topLevelDependents = new Map(); + private readonly _namedTypeDependents = new Map(); - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -171,10 +183,12 @@ export class ElmRenderer extends ConvenienceRenderer { if (this.namedTypeToNameForTopLevel(t) === undefined) { decoder = new DependencyName(lowerNamingFunction, topLevelName.order, lookup => lookup(topLevelName)); } + this._topLevelDependents.set(topLevelName, { encoder, decoder }); if (decoder !== undefined) { return [encoder, decoder]; } + return [encoder]; } @@ -259,6 +273,7 @@ export class ElmRenderer extends ConvenienceRenderer { if (noOptional) return nullableType; return multiWord(" ", "Maybe", parenIfNeeded(nullableType)); } + return singleWord(this.nameForNamedType(unionType)); } ); @@ -302,6 +317,7 @@ export class ElmRenderer extends ConvenienceRenderer { if (noOptional) return nullableDecoder; return multiWord(" ", "Jdec.nullable", parenIfNeeded(nullableDecoder)); } + return singleWord(this.decoderNameForNamedType(unionType)); } ); @@ -345,6 +361,7 @@ export class ElmRenderer extends ConvenienceRenderer { if (noOptional) return nullableEncoder; return multiWord(" ", "makeNullableEncoder", parenIfNeeded(nullableEncoder)); } + return singleWord(this.encoderNameForNamedType(unionType)); } ); @@ -373,6 +390,7 @@ export class ElmRenderer extends ConvenienceRenderer { } else { description.push(""); } + description.push(`${this.sourcelikeToString(name)}:`); description.push(...propertyDescription); }); @@ -388,6 +406,7 @@ export class ElmRenderer extends ConvenienceRenderer { if (onFirst) { this.emitLine("{"); } + this.emitLine("}"); }); } @@ -417,6 +436,7 @@ export class ElmRenderer extends ConvenienceRenderer { } else { this.emitLine(equalsOrPipe, " ", constructor, " ", parenIfNeeded(this.elmType(t))); } + onFirst = false; }); }); @@ -429,6 +449,7 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine(defined(decoder), " = ", this.decoderNameForType(t).source); this.ensureBlankLine(); } + this.emitLine(encoder, " : ", topLevelName, " -> String"); this.emitLine(encoder, " r = Jenc.encode 0 (", this.encoderNameForType(t).source, " r)"); } @@ -465,6 +486,7 @@ export class ElmRenderer extends ConvenienceRenderer { if (onFirst) { this.emitLine("["); } + this.emitLine("]"); }); }); @@ -512,6 +534,7 @@ export class ElmRenderer extends ConvenienceRenderer { } else if (t.isPrimitive()) { return " " + t.kind; } + return t.kind; } @@ -530,6 +553,7 @@ export class ElmRenderer extends ConvenienceRenderer { const decoder = parenIfNeeded(this.decoderNameForType(t)); this.emitLine(bracketOrComma, " Jdec.map ", constructor, " ", decoder); } + onFirst = false; }); this.emitLine("]"); @@ -560,6 +584,7 @@ export class ElmRenderer extends ConvenienceRenderer { if (decoder === undefined) { decoder = defined(this._namedTypeDependents.get(name)).decoder; } + topLevelDecoders.push(decoder); exports.push(name, encoder, decoder); }); @@ -600,6 +625,7 @@ export class ElmRenderer extends ConvenienceRenderer { if (decoder === undefined) { decoder = defined(this._namedTypeDependents.get(name)).decoder; } + this.emitLine("-- decodeString ", decoder, " myJsonString"); }); } @@ -611,6 +637,7 @@ export class ElmRenderer extends ConvenienceRenderer { for (let i = 0; i < exports.length; i++) { this.emitLine(i === 0 ? "(" : ",", " ", exports[i]); } + this.emitLine(")"); }); this.ensureBlankLine(); diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang.ts index 847bb075d..9a2081af6 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang.ts @@ -1,25 +1,26 @@ -import { TypeKind, Type, ClassType, EnumType, UnionType, ClassProperty } from "../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { Name, DependencyName, Namer, funPrefixNamer } from "../Naming"; +import { type PrimitiveStringTypeKind, type StringTypeMapping, type TransformedStringTypeKind } from ".."; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; +import { ConvenienceRenderer } from "../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; import { - legalizeCharacters, + allUpperWordStyle, + camelCase, + combineWords, + firstUpperWordStyle, isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, - stringEscape, + legalizeCharacters, splitIntoWords, - combineWords, - firstUpperWordStyle, - allUpperWordStyle, - camelCase + stringEscape } from "../support/Strings"; import { assert, defined } from "../support/Support"; -import { StringOption, BooleanOption, Option, OptionValues, getOptionValues } from "../RendererOptions"; -import { Sourcelike, maybeAnnotated, modifySource } from "../Source"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; import { TargetLanguage } from "../TargetLanguage"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { RenderContext } from "../Renderer"; -import { StringTypeMapping, TransformedStringTypeKind, PrimitiveStringTypeKind } from ".."; +import { type ClassProperty, type ClassType, type EnumType, type Type, type TypeKind, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; export const goOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), @@ -35,11 +36,11 @@ export const goOptions = { }; export class GoTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Go", ["go", "golang"], "go"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ goOptions.justTypes, goOptions.justTypesAndPackage, @@ -50,21 +51,21 @@ export class GoTargetLanguage extends TargetLanguage { ]; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date-time", "date-time"); return mapping; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): GoRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): GoRenderer { return new GoRenderer(this, renderContext, getOptionValues(goOptions, untypedOptionValues)); } @@ -96,21 +97,22 @@ const compoundTypeKinds: TypeKind[] = ["array", "class", "map", "enum"]; function isValueType(t: Type): boolean { const kind = t.kind; - return primitiveValueTypeKinds.indexOf(kind) >= 0 || kind === "class" || kind === "enum" || kind === "date-time"; + return primitiveValueTypeKinds.includes(kind) || kind === "class" || kind === "enum" || kind === "date-time"; } function canOmitEmpty(cp: ClassProperty, omitEmptyOption: boolean): boolean { if (!cp.isOptional) return false; if (omitEmptyOption) return true; const t = cp.type; - return ["union", "null", "any"].indexOf(t.kind) < 0; + return !["union", "null", "any"].includes(t.kind); } export class GoRenderer extends ConvenienceRenderer { private readonly _topLevelUnmarshalNames = new Map(); + private _currentFilename: string | undefined; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -197,9 +199,11 @@ export class GoRenderer extends ConvenienceRenderer { if (t instanceof UnionType && nullableFromUnion(t) === null) { return ["*", this.goType(t, true)]; } + if (cp.isOptional) { return this.nullableGoType(t, true); } + return this.goType(t, true); } @@ -222,6 +226,7 @@ export class GoRenderer extends ConvenienceRenderer { } else { valueSource = this.goType(v, withIssues); } + return ["map[string]", valueSource]; }, enumType => this.nameForNamedType(enumType), @@ -356,6 +361,7 @@ export class GoRenderer extends ConvenienceRenderer { this.emitLine("x.", fieldName, " = nil"); }); }; + const makeArgs = ( primitiveArg: (fieldName: Sourcelike) => Sourcelike, compoundArg: (isClass: boolean, fieldName: Sourcelike) => Sourcelike @@ -367,12 +373,14 @@ export class GoRenderer extends ConvenienceRenderer { ", " ); } + for (const kind of compoundTypeKinds) { args.push( ifMember(kind, "false, nil", (t, fieldName, _) => compoundArg(t.kind === "class", fieldName)), ", " ); } + args.push(isNullableArg); return args; }; @@ -392,6 +400,7 @@ export class GoRenderer extends ConvenienceRenderer { for (const kind of compoundTypeKinds) { maybeAssignNil(kind); } + ifMember("class", undefined, (_1, _2, goType) => { this.emitLine("var c ", goType); }); diff --git a/packages/quicktype-core/src/language/Haskell.ts b/packages/quicktype-core/src/language/Haskell.ts index 2bac412e9..16cd16a35 100644 --- a/packages/quicktype-core/src/language/Haskell.ts +++ b/packages/quicktype-core/src/language/Haskell.ts @@ -1,24 +1,33 @@ import { mapContains } from "collection-utils"; -import { TargetLanguage } from "../TargetLanguage"; -import { EnumOption, StringOption, BooleanOption, Option, getOptionValues, OptionValues } from "../RendererOptions"; -import { Type, ClassType, UnionType, EnumType, ClassProperty } from "../Type"; -import { matchType, nullableFromUnion } from "../TypeUtils"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { Namer, Name, funPrefixNamer } from "../Naming"; + +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; import { - legalizeCharacters, - isLetterOrUnderscoreOrDigit, - isLetterOrUnderscore, - stringEscape, - isAscii, - splitIntoWords, + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../RendererOptions"; +import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../Source"; +import { + allLowerWordStyle, + allUpperWordStyle, combineWords, firstUpperWordStyle, - allLowerWordStyle, - allUpperWordStyle + isAscii, + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + legalizeCharacters, + splitIntoWords, + stringEscape } from "../support/Strings"; -import { Sourcelike, MultiWord, singleWord, multiWord, parenIfNeeded } from "../Source"; -import { RenderContext } from "../Renderer"; +import { TargetLanguage } from "../TargetLanguage"; +import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion } from "../TypeUtils"; export const haskellOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), @@ -30,26 +39,23 @@ export const haskellOptions = { }; export class HaskellTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Haskell", ["haskell"], "haskell"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [haskellOptions.justTypes, haskellOptions.moduleName, haskellOptions.useList]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): HaskellRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): HaskellRenderer { return new HaskellRenderer(this, renderContext, getOptionValues(haskellOptions, untypedOptionValues)); } } @@ -129,7 +135,7 @@ const upperNamingFunction = funPrefixNamer("upper", n => haskellNameStyle(n, tru const lowerNamingFunction = funPrefixNamer("lower", n => haskellNameStyle(n, false)); export class HaskellRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -208,6 +214,7 @@ export class HaskellRenderer extends ConvenienceRenderer { if (this._options.useList) { return multiWord("", "[", parenIfNeeded(this.haskellType(arrayType.items)), "]"); } + return multiWord(" ", "Vector", parenIfNeeded(this.haskellType(arrayType.items))); }, classType => singleWord(this.nameForNamedType(classType)), @@ -220,6 +227,7 @@ export class HaskellRenderer extends ConvenienceRenderer { if (noOptional) return nullableType; return multiWord(" ", "Maybe", parenIfNeeded(nullableType)); } + return singleWord(this.nameForNamedType(unionType)); } ); @@ -265,6 +273,7 @@ export class HaskellRenderer extends ConvenienceRenderer { } else { description.push(""); } + description.push(`${this.sourcelikeToString(name)}:`); description.push(...propertyDescription); }); @@ -280,6 +289,7 @@ export class HaskellRenderer extends ConvenienceRenderer { if (onFirst) { this.emitLine("{"); } + this.emitLine("} deriving (Show)"); }); } @@ -310,6 +320,7 @@ export class HaskellRenderer extends ConvenienceRenderer { } else { this.emitLine(equalsOrPipe, " ", constructor, " ", parenIfNeeded(this.haskellType(t))); } + onFirst = false; }); this.emitLine("deriving (Show)"); @@ -353,6 +364,7 @@ export class HaskellRenderer extends ConvenienceRenderer { if (onFirst) { this.emitLine("["); } + this.emitLine("]"); }); } @@ -482,6 +494,7 @@ export class HaskellRenderer extends ConvenienceRenderer { for (let i = 0; i < exports.length; i++) { this.emitLine(i === 0 ? "(" : ",", " ", exports[i]); } + this.emitLine(", decodeTopLevel"); this.emitLine(") where"); }); diff --git a/packages/quicktype-core/src/language/JSONSchema.ts b/packages/quicktype-core/src/language/JSONSchema.ts index 2b8a447ba..978906075 100644 --- a/packages/quicktype-core/src/language/JSONSchema.ts +++ b/packages/quicktype-core/src/language/JSONSchema.ts @@ -1,48 +1,52 @@ -import { mapFirst, iterableFirst } from "collection-utils"; +import { iterableFirst, mapFirst } from "collection-utils"; -import { TargetLanguage } from "../TargetLanguage"; -import { Type, UnionType, EnumType, ObjectType, transformedStringTypeTargetTypeKindsMap } from "../Type"; -import { matchTypeExhaustive } from "../TypeUtils"; +import { addDescriptionToSchema } from "../attributes/Description"; import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { Namer, funPrefixNamer, Name } from "../Naming"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { type Option } from "../RendererOptions"; import { - legalizeCharacters, - splitIntoWords, + allUpperWordStyle, combineWords, firstUpperWordStyle, - allUpperWordStyle + legalizeCharacters, + splitIntoWords } from "../support/Strings"; import { defined, panic } from "../support/Support"; -import { StringTypeMapping, getNoStringTypeMapping } from "../TypeBuilder"; -import { addDescriptionToSchema } from "../attributes/Description"; -import { Option } from "../RendererOptions"; -import { RenderContext } from "../Renderer"; +import { TargetLanguage } from "../TargetLanguage"; +import { + type EnumType, + type ObjectType, + type Type, + type UnionType, + transformedStringTypeTargetTypeKindsMap +} from "../Type"; +import { type StringTypeMapping, getNoStringTypeMapping } from "../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchTypeExhaustive } from "../TypeUtils"; export class JSONSchemaTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("JSON Schema", ["schema", "json-schema"], "schema"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return []; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { return getNoStringTypeMapping(); } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsFullObjectType(): boolean { + public get supportsFullObjectType(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - _untypedOptionValues: { [name: string]: any } - ): JSONSchemaRenderer { + protected makeRenderer(renderContext: RenderContext, _untypedOptionValues: FixMeOptionsType): JSONSchemaRenderer { return new JSONSchemaRenderer(this, renderContext); } } @@ -65,7 +69,10 @@ function jsonNameStyle(original: string): string { ); } -type Schema = { [name: string]: any }; +interface Schema { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [name: string]: any; +} export class JSONSchemaRenderer extends ConvenienceRenderer { protected makeNamedTypeNamer(): Namer { @@ -93,9 +100,11 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { if (first === undefined) { return panic("Must have at least one type for oneOf"); } + if (types.size === 1) { return this.schemaForType(first); } + return { anyOf: Array.from(types).map((t: Type) => this.schemaForType(t)) }; } @@ -111,7 +120,7 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { } private schemaForType(t: Type): Schema { - const schema = matchTypeExhaustive<{ [name: string]: any }>( + const schema = matchTypeExhaustive( t, _noneType => { return panic("none type should have been replaced"); @@ -139,12 +148,14 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { if (target === undefined) { return panic(`Unknown transformed string type ${transformedStringType.kind}`); } + return { type: "string", format: target.jsonSchema }; } ); if (schema.$ref === undefined) { this.addAttributesToSchema(t, schema); } + return schema; } @@ -162,14 +173,17 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { if (prop.description === undefined) { addDescriptionToSchema(prop, this.descriptionForClassProperty(o, name)); } + props[name] = prop; if (!p.isOptional) { req.push(name); } } + properties = props; required = req.sort(); } + const additional = o.getAdditionalProperties(); const additionalProperties = additional !== undefined ? this.schemaForType(additional) : false; const schema = { @@ -188,6 +202,7 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { if (title !== undefined) { oneOf.title = title; } + this.addAttributesToSchema(u, oneOf); return oneOf; } diff --git a/packages/quicktype-core/src/language/Java.ts b/packages/quicktype-core/src/language/Java.ts index 05ad4b535..d800e9fbf 100644 --- a/packages/quicktype-core/src/language/Java.ts +++ b/packages/quicktype-core/src/language/Java.ts @@ -1,10 +1,18 @@ +import { type PrimitiveStringTypeKind, type StringTypeMapping, type TransformedStringTypeKind } from ".."; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { DependencyName, funPrefixNamer, Name, Namer } from "../Naming"; -import { RenderContext } from "../Renderer"; -import { BooleanOption, EnumOption, getOptionValues, Option, OptionValues, StringOption } from "../RendererOptions"; -import { maybeAnnotated, Sourcelike } from "../Source"; -import { acronymOption, acronymStyle, AcronymStyleOptions } from "../support/Acronyms"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../Source"; +import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; import { allLowerWordStyle, allUpperWordStyle, @@ -22,9 +30,18 @@ import { } from "../support/Strings"; import { assert, assertNever, defined, panic } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, ClassProperty, ClassType, EnumType, MapType, Type, TypeKind, UnionType } from "../Type"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + MapType, + type Type, + type TypeKind, + UnionType +} from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { StringTypeMapping, TransformedStringTypeKind, PrimitiveStringTypeKind } from ".."; export const javaOptions = { useList: new EnumOption( @@ -54,11 +71,11 @@ export const javaOptions = { }; export class JavaTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Java", ["java"], "java"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ javaOptions.useList, javaOptions.justTypes, @@ -70,19 +87,20 @@ export class JavaTargetLanguage extends TargetLanguage { ]; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): JavaRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): JavaRenderer { const options = getOptionValues(javaOptions, untypedOptionValues); if (options.justTypes) { return new JavaRenderer(this, renderContext, options); } + return new JacksonRenderer(this, renderContext, options); } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date"); mapping.set("time", "time"); @@ -195,42 +213,52 @@ export function javaNameStyle( } abstract class JavaDateTimeProvider { - constructor( + public constructor( protected readonly _renderer: JavaRenderer, protected readonly _className: string ) {} - abstract keywords: string[]; - abstract dateTimeImports: string[]; - abstract dateImports: string[]; - abstract timeImports: string[]; - abstract converterImports: string[]; + public abstract keywords: string[]; + + public abstract dateTimeImports: string[]; + + public abstract dateImports: string[]; + + public abstract timeImports: string[]; + + public abstract converterImports: string[]; + + public abstract dateTimeType: string; - abstract dateTimeType: string; - abstract dateType: string; - abstract timeType: string; + public abstract dateType: string; - abstract dateTimeJacksonAnnotations: string[]; - abstract dateJacksonAnnotations: string[]; - abstract timeJacksonAnnotations: string[]; + public abstract timeType: string; - abstract emitDateTimeConverters(): void; + public abstract dateTimeJacksonAnnotations: string[]; + + public abstract dateJacksonAnnotations: string[]; + + public abstract timeJacksonAnnotations: string[]; + + public abstract emitDateTimeConverters(): void; public shouldEmitDateTimeConverter = true; + public shouldEmitTimeConverter = true; + public shouldEmitDateConverter = true; - abstract convertStringToDateTime(variable: Sourcelike): Sourcelike; - abstract convertStringToTime(variable: Sourcelike): Sourcelike; - abstract convertStringToDate(variable: Sourcelike): Sourcelike; + public abstract convertStringToDateTime(variable: Sourcelike): Sourcelike; + public abstract convertStringToTime(variable: Sourcelike): Sourcelike; + public abstract convertStringToDate(variable: Sourcelike): Sourcelike; - abstract convertDateTimeToString(variable: Sourcelike): Sourcelike; - abstract convertTimeToString(variable: Sourcelike): Sourcelike; - abstract convertDateToString(variable: Sourcelike): Sourcelike; + public abstract convertDateTimeToString(variable: Sourcelike): Sourcelike; + public abstract convertTimeToString(variable: Sourcelike): Sourcelike; + public abstract convertDateToString(variable: Sourcelike): Sourcelike; } class Java8DateTimeProvider extends JavaDateTimeProvider { - keywords = [ + public keywords = [ "LocalDate", "OffsetDateTime", "OffsetTime", @@ -241,10 +269,13 @@ class Java8DateTimeProvider extends JavaDateTimeProvider { "ChronoField" ]; - dateTimeImports: string[] = ["java.time.OffsetDateTime"]; - dateImports: string[] = ["java.time.LocalDate"]; - timeImports: string[] = ["java.time.OffsetTime"]; - converterImports: string[] = [ + public dateTimeImports: string[] = ["java.time.OffsetDateTime"]; + + public dateImports: string[] = ["java.time.LocalDate"]; + + public timeImports: string[] = ["java.time.OffsetTime"]; + + public converterImports: string[] = [ "java.time.LocalDate", "java.time.OffsetDateTime", "java.time.OffsetTime", @@ -255,15 +286,19 @@ class Java8DateTimeProvider extends JavaDateTimeProvider { "java.time.temporal.ChronoField" ]; - dateTimeType = "OffsetDateTime"; - dateType = "LocalDate"; - timeType = "OffsetTime"; + public dateTimeType = "OffsetDateTime"; - dateTimeJacksonAnnotations: string[] = []; - dateJacksonAnnotations: string[] = []; - timeJacksonAnnotations: string[] = []; + public dateType = "LocalDate"; - emitDateTimeConverters(): void { + public timeType = "OffsetTime"; + + public dateTimeJacksonAnnotations: string[] = []; + + public dateJacksonAnnotations: string[] = []; + + public timeJacksonAnnotations: string[] = []; + + public emitDateTimeConverters(): void { this._renderer.ensureBlankLine(); this._renderer.emitLine( "private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()" @@ -310,48 +345,61 @@ class Java8DateTimeProvider extends JavaDateTimeProvider { }); } - convertStringToDateTime(variable: Sourcelike): Sourcelike { + public convertStringToDateTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseDateTimeString(", variable, ")"]; } - convertStringToTime(variable: Sourcelike): Sourcelike { + public convertStringToTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseTimeString(", variable, ")"]; } - convertStringToDate(variable: Sourcelike): Sourcelike { + public convertStringToDate(variable: Sourcelike): Sourcelike { return ["LocalDate.parse(", variable, ")"]; } - convertDateTimeToString(variable: Sourcelike): Sourcelike { + public convertDateTimeToString(variable: Sourcelike): Sourcelike { return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME)"]; } - convertTimeToString(variable: Sourcelike): Sourcelike { + public convertTimeToString(variable: Sourcelike): Sourcelike { return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_TIME)"]; } - convertDateToString(variable: Sourcelike): Sourcelike { + public convertDateToString(variable: Sourcelike): Sourcelike { return [variable, ".format(java.time.format.DateTimeFormatter.ISO_DATE)"]; } } class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { - keywords = ["SimpleDateFormat", "Date"]; + public keywords = ["SimpleDateFormat", "Date"]; + + public dateTimeImports: string[] = ["java.util.Date"]; + + public dateImports: string[] = ["java.util.Date"]; + + public timeImports: string[] = ["java.util.Date"]; + + public converterImports: string[] = ["java.util.Date", "java.text.SimpleDateFormat"]; - dateTimeImports: string[] = ["java.util.Date"]; - dateImports: string[] = ["java.util.Date"]; - timeImports: string[] = ["java.util.Date"]; - converterImports: string[] = ["java.util.Date", "java.text.SimpleDateFormat"]; + public dateTimeType = "Date"; - dateTimeType = "Date"; - dateType = "Date"; - timeType = "Date"; + public dateType = "Date"; - dateTimeJacksonAnnotations: string[] = ['@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ssX", timezone = "UTC")']; - dateJacksonAnnotations: string[] = ['@JsonFormat(pattern = "yyyy-MM-dd")']; - timeJacksonAnnotations: string[] = ['@JsonFormat(pattern = "HH:mm:ssX", timezone = "UTC")']; + public timeType = "Date"; - emitDateTimeConverters(): void { + public dateTimeJacksonAnnotations: string[] = [ + '@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ssX", timezone = "UTC")' + ]; + + public dateJacksonAnnotations: string[] = ['@JsonFormat(pattern = "yyyy-MM-dd")']; + + public timeJacksonAnnotations: string[] = ['@JsonFormat(pattern = "HH:mm:ssX", timezone = "UTC")']; + + public shouldEmitTimeConverter = false; + + public shouldEmitDateConverter = false; + + public emitDateTimeConverters(): void { this._renderer.ensureBlankLine(); this._renderer.emitLine("private static final String[] DATE_TIME_FORMATS = {"); this._renderer.indent(() => @@ -398,43 +446,45 @@ class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { }); } - shouldEmitTimeConverter = false; - shouldEmitDateConverter = false; - - convertStringToDateTime(variable: Sourcelike): Sourcelike { + public convertStringToDateTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseAllDateTimeString(", variable, ")"]; } - convertStringToTime(variable: Sourcelike): Sourcelike { + public convertStringToTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseAllDateTimeString(", variable, ")"]; } - convertStringToDate(variable: Sourcelike): Sourcelike { + public convertStringToDate(variable: Sourcelike): Sourcelike { return [this._className, ".parseAllDateTimeString(", variable, ")"]; } - convertDateTimeToString(variable: Sourcelike): Sourcelike { + public convertDateTimeToString(variable: Sourcelike): Sourcelike { return [this._className, ".serializeDateTime(", variable, ")"]; } - convertTimeToString(variable: Sourcelike): Sourcelike { + public convertTimeToString(variable: Sourcelike): Sourcelike { return [this._className, ".serializeTime(", variable, ")"]; } - convertDateToString(variable: Sourcelike): Sourcelike { + public convertDateToString(variable: Sourcelike): Sourcelike { return [this._className, ".serializeDate(", variable, ")"]; } } export class JavaRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; + private readonly _gettersAndSettersForPropertyName = new Map(); + private _haveEmittedLeadingComments = false; + protected readonly _dateTimeProvider: JavaDateTimeProvider; + protected readonly _converterClassname: string = "Converter"; + protected readonly _converterKeywords: string[] = []; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _options: OptionValues @@ -544,6 +594,7 @@ export class JavaRenderer extends ConvenienceRenderer { if (this.topLevels.size === 1) { return methodName; } + return [topLevelName, capitalize(methodName)]; } @@ -551,6 +602,7 @@ export class JavaRenderer extends ConvenienceRenderer { if (this.topLevels.size === 1) { return [prefix, suffix]; } + return [prefix, topLevelName, suffix]; } @@ -612,7 +664,7 @@ export class JavaRenderer extends ConvenienceRenderer { this.emitLine("}"); } - public emitTryCatch(main: () => void, handler: () => void, exception = "Exception") { + public emitTryCatch(main: () => void, handler: () => void, exception = "Exception"): void { this.emitLine("try {"); this.indent(main); this.emitLine("} catch (", exception, " ex) {"); @@ -620,7 +672,7 @@ export class JavaRenderer extends ConvenienceRenderer { this.emitLine("}"); } - public emitIgnoredTryCatchBlock(f: () => void) { + public emitIgnoredTryCatchBlock(f: () => void): void { this.emitTryCatch(f, () => this.emitLine("// Ignored")); } @@ -652,15 +704,19 @@ export class JavaRenderer extends ConvenienceRenderer { if (transformedStringType.kind === "time") { return this._dateTimeProvider.timeType; } + if (transformedStringType.kind === "date") { return this._dateTimeProvider.dateType; } + if (transformedStringType.kind === "date-time") { return this._dateTimeProvider.dateTimeType; } + if (transformedStringType.kind === "uuid") { return "UUID"; } + return "String"; } ); @@ -694,15 +750,19 @@ export class JavaRenderer extends ConvenienceRenderer { if (transformedStringType.kind === "time") { return this._dateTimeProvider.timeImports; } + if (transformedStringType.kind === "date") { return this._dateTimeProvider.dateImports; } + if (transformedStringType.kind === "date-time") { return this._dateTimeProvider.dateTimeImports; } + if (transformedStringType.kind === "uuid") { return ["java.util.UUID"]; } + return []; } ); @@ -747,12 +807,15 @@ export class JavaRenderer extends ConvenienceRenderer { if (t instanceof ClassType) { return []; } + if (t instanceof UnionType) { return ["java.io.IOException"]; } + if (t instanceof EnumType) { return ["java.io.IOException"]; } + return assertNever(t); } @@ -789,10 +852,12 @@ export class JavaRenderer extends ConvenienceRenderer { if (getter.length !== 0) { this.emitLine("@lombok.Getter(onMethod_ = {" + getter.join(", ") + "})"); } + if (setter.length !== 0) { this.emitLine("@lombok.Setter(onMethod_ = {" + setter.join(", ") + "})"); } } + this.emitLine("private ", this.javaType(false, p.type, true), " ", name, ";"); }); if (!this._options.lombok) { @@ -814,7 +879,7 @@ export class JavaRenderer extends ConvenienceRenderer { this.finishFile(); } - protected unionField(u: UnionType, t: Type, withIssues = false): { fieldType: Sourcelike; fieldName: Sourcelike } { + protected unionField(u: UnionType, t: Type, withIssues = false): { fieldName: Sourcelike; fieldType: Sourcelike } { const fieldType = this.javaType(true, t, withIssues); // FIXME: "Value" should be part of the name. const fieldName = [this.nameForUnionMember(u, t), "Value"]; @@ -842,16 +907,17 @@ export class JavaRenderer extends ConvenienceRenderer { const { fieldType, fieldName } = this.unionField(u, t, true); this.emitLine("public ", fieldType, " ", fieldName, ";"); } + this.emitUnionSerializer(u, unionName); }); this.finishFile(); } - protected emitEnumSerializationAttributes(_e: EnumType) { + protected emitEnumSerializationAttributes(_e: EnumType): void { // Empty } - protected emitEnumDeserializationAttributes(_e: EnumType) { + protected emitEnumDeserializationAttributes(_e: EnumType): void { // Empty } @@ -903,7 +969,7 @@ export class JavaRenderer extends ConvenienceRenderer { } export class JacksonRenderer extends JavaRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, options: OptionValues @@ -965,6 +1031,7 @@ export class JacksonRenderer extends JavaRenderer { imports.push("com.fasterxml.jackson.annotation.*"); return imports; } + if (t instanceof UnionType) { const imports = super.importsForType(t); imports.push( @@ -976,13 +1043,16 @@ export class JacksonRenderer extends JavaRenderer { if (this._options.useList) { imports.push("com.fasterxml.jackson.core.type.*"); } + return imports; } + if (t instanceof EnumType) { const imports = super.importsForType(t); imports.push("com.fasterxml.jackson.annotation.*"); return imports; } + return assertNever(t); } @@ -1080,6 +1150,7 @@ export class JacksonRenderer extends JavaRenderer { for (const tokenType of tokenTypes) { tokenCase(tokenType); } + this.indent(() => { emitDeserializeType(t); this.emitLine("break;"); @@ -1087,7 +1158,7 @@ export class JacksonRenderer extends JavaRenderer { }); }; - const emitStringDeserializer = () => { + const emitStringDeserializer = (): void => { const enumType = u.findMember("enum"); const stringType = u.findMember("string"); @@ -1124,6 +1195,7 @@ export class JacksonRenderer extends JavaRenderer { if (stringType !== undefined) { emitDeserializeType(stringType, fromVariable); } + this.emitLine("break;"); }); }); @@ -1142,6 +1214,7 @@ export class JacksonRenderer extends JavaRenderer { this.emitLine("break;"); }); } + if (doubleType !== undefined) { tokenCase("VALUE_NUMBER_FLOAT"); this.indent(() => { @@ -1176,6 +1249,7 @@ export class JacksonRenderer extends JavaRenderer { } else { this.emitLine("jsonGenerator.writeObject(obj.", fieldName, ");"); } + this.emitLine("return;"); }); }; @@ -1222,6 +1296,7 @@ export class JacksonRenderer extends JavaRenderer { for (const t of nonNulls) { emitSerializeType(t); } + if (maybeNull !== null) { this.emitLine("jsonGenerator.writeNull();"); } else { @@ -1232,11 +1307,11 @@ export class JacksonRenderer extends JavaRenderer { }); } - protected emitEnumSerializationAttributes(_e: EnumType) { + protected emitEnumSerializationAttributes(_e: EnumType): void { this.emitLine("@JsonValue"); } - protected emitEnumDeserializationAttributes(_e: EnumType) { + protected emitEnumDeserializationAttributes(_e: EnumType): void { this.emitLine("@JsonCreator"); } diff --git a/packages/quicktype-core/src/language/JavaScript.ts b/packages/quicktype-core/src/language/JavaScript.ts index e8e3db9a2..440502cff 100644 --- a/packages/quicktype-core/src/language/JavaScript.ts +++ b/packages/quicktype-core/src/language/JavaScript.ts @@ -1,36 +1,36 @@ import { arrayIntercalate } from "collection-utils"; +import { ConvenienceRenderer } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, modifySource } from "../Source"; +import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; +import { ConvertersOptions, convertersOption } from "../support/Converters"; import { - TransformedStringTypeKind, - PrimitiveStringTypeKind, - Type, - ClassProperty, - ClassType, - ObjectType -} from "../Type"; -import { matchType, directlyReachableSingleNamedType } from "../TypeUtils"; -import { acronymOption, acronymStyle, AcronymStyleOptions } from "../support/Acronyms"; -import { convertersOption, ConvertersOptions } from "../support/Converters"; - -import { - utf16LegalizeCharacters, - utf16StringEscape, - splitIntoWords, + allLowerWordStyle, + camelCase, capitalize, combineWords, firstUpperWordStyle, - camelCase, - allLowerWordStyle + splitIntoWords, + utf16LegalizeCharacters, + utf16StringEscape } from "../support/Strings"; import { panic } from "../support/Support"; - -import { Sourcelike, modifySource } from "../Source"; -import { Namer, Name, funPrefixNamer } from "../Naming"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; import { TargetLanguage } from "../TargetLanguage"; -import { StringTypeMapping } from "../TypeBuilder"; -import { BooleanOption, Option, OptionValues, getOptionValues, EnumOption } from "../RendererOptions"; -import { RenderContext } from "../Renderer"; +import { + type ClassProperty, + type ClassType, + type ObjectType, + type PrimitiveStringTypeKind, + type TransformedStringTypeKind, + type Type +} from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { directlyReachableSingleNamedType, matchType } from "../TypeUtils"; + import { isES3IdentifierPart, isES3IdentifierStart } from "./JavaScriptUnicodeMaps"; export const javaScriptOptions = { @@ -55,22 +55,22 @@ export const javaScriptOptions = { ) }; -export type JavaScriptTypeAnnotations = { +export interface JavaScriptTypeAnnotations { any: string; anyArray: string; anyMap: string; - string: string; - stringArray: string; boolean: string; never: string; -}; + string: string; + stringArray: string; +} export class JavaScriptTargetLanguage extends TargetLanguage { - constructor(displayName = "JavaScript", names: string[] = ["javascript", "js", "jsx"], extension = "js") { + public constructor(displayName = "JavaScript", names: string[] = ["javascript", "js", "jsx"], extension = "js") { super(displayName, names, extension); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ javaScriptOptions.runtimeTypecheck, javaScriptOptions.runtimeTypecheckIgnoreUnknownProperties, @@ -80,7 +80,7 @@ export class JavaScriptTargetLanguage extends TargetLanguage { ]; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); @@ -88,18 +88,15 @@ export class JavaScriptTargetLanguage extends TargetLanguage { return mapping; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsFullObjectType(): boolean { + public get supportsFullObjectType(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): JavaScriptRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): JavaScriptRenderer { return new JavaScriptRenderer(this, renderContext, getOptionValues(javaScriptOptions, untypedOptionValues)); } } @@ -109,7 +106,7 @@ export const legalizeName = utf16LegalizeCharacters(isES3IdentifierPart); const identityNamingFunction = funPrefixNamer("properties", s => s); export class JavaScriptRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _jsOptions: OptionValues @@ -125,7 +122,7 @@ export class JavaScriptRenderer extends ConvenienceRenderer { legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, - upper ? s => capitalize(acronyms(s)) : allLowerWordStyle, + upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isES3IdentifierStart @@ -167,18 +164,19 @@ export class JavaScriptRenderer extends ConvenienceRenderer { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); } - typeMapTypeFor(t: Type): Sourcelike { - if (["class", "object", "enum"].indexOf(t.kind) >= 0) { + private typeMapTypeFor(t: Type): Sourcelike { + if (["class", "object", "enum"].includes(t.kind)) { return ['r("', this.nameForNamedType(t), '")']; } + return matchType( t, _anyType => '"any"', - _nullType => `null`, - _boolType => `true`, - _integerType => `0`, - _doubleType => `3.14`, - _stringType => `""`, + _nullType => "null", + _boolType => "true", + _integerType => "0", + _doubleType => "3.14", + _stringType => '""', arrayType => ["a(", this.typeMapTypeFor(arrayType.items), ")"], _classType => panic("We handled this above"), mapType => ["m(", this.typeMapTypeFor(mapType.values), ")"], @@ -191,26 +189,28 @@ export class JavaScriptRenderer extends ConvenienceRenderer { if (transformedStringType.kind === "date-time") { return "Date"; } - return `""`; + + return '""'; } ); } - typeMapTypeForProperty(p: ClassProperty): Sourcelike { + private typeMapTypeForProperty(p: ClassProperty): Sourcelike { const typeMap = this.typeMapTypeFor(p.type); if (!p.isOptional) { return typeMap; } + return ["u(undefined, ", typeMap, ")"]; } - emitBlock(source: Sourcelike, end: Sourcelike, emit: () => void) { + protected emitBlock(source: Sourcelike, end: Sourcelike, emit: () => void): void { this.emitLine(source, "{"); this.indent(emit); this.emitLine("}", end); } - emitTypeMap() { + private emitTypeMap(): void { const { any: anyAnnotation } = this.typeAnnotations; this.emitBlock(`const typeMap${anyAnnotation} = `, ";", () => { @@ -284,7 +284,7 @@ export class JavaScriptRenderer extends ConvenienceRenderer { } protected emitConvertModuleBody(): void { - const converter = (t: Type, name: Name) => { + const converter = (t: Type, name: Name): void => { const typeMap = this.typeMapTypeFor(t); this.emitBlock([this.deserializerFunctionLine(t, name), " "], "", () => { const parsedJson = this._jsOptions.rawType === "json" ? "JSON.parse(json)" : "json"; @@ -429,8 +429,8 @@ function transform(val${anyAnnotation}, typ${anyAnnotation}, getProps${anyAnnota if (!Object.prototype.hasOwnProperty.call(props, key)) { result[key] = ${ this._jsOptions.runtimeTypecheckIgnoreUnknownProperties - ? `val[key]` - : `transform(val[key], additional, getProps, key, ref)` + ? "val[key]" + : "transform(val[key], additional, getProps, key, ref)" }; } }); @@ -506,6 +506,7 @@ function r(name${stringAnnotation}) { `// and asserts the results${this._jsOptions.rawType === "json" ? " of JSON.parse" : ""} at runtime` ); } + const moduleLine = this.moduleLine; if (moduleLine === undefined) { this.emitConvertModuleBody(); @@ -552,7 +553,7 @@ function r(name${stringAnnotation}) { }); } - protected emitSourceStructure() { + protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else { diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes.ts index 7d6d90612..6754e83e2 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes.ts @@ -1,29 +1,28 @@ -import { TargetLanguage } from "../TargetLanguage"; -import { getOptionValues, Option, OptionValues, EnumOption } from "../RendererOptions"; -import { RenderContext } from "../Renderer"; +import { panic } from "@glideapps/ts-necessities"; +import { arrayIntercalate } from "collection-utils"; + import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { funPrefixNamer, Name, Namer } from "../Naming"; -import { acronymOption, acronymStyle, AcronymStyleOptions } from "../support/Acronyms"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type Sourcelike } from "../Source"; +import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; +import { convertersOption } from "../support/Converters"; import { + allLowerWordStyle, capitalize, - ClassProperty, - ClassType, combineWords, firstUpperWordStyle, - matchType, - ObjectType, - panic, - Sourcelike, splitIntoWords, - Type -} from ".."; -import { allLowerWordStyle, utf16StringEscape } from "../support/Strings"; -import { isES3IdentifierStart } from "./JavaScriptUnicodeMaps"; + utf16StringEscape +} from "../support/Strings"; +import { TargetLanguage } from "../TargetLanguage"; +import { type ArrayType, type ClassProperty, type ClassType, type ObjectType, PrimitiveType, type Type } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { directlyReachableSingleNamedType, matchType } from "../TypeUtils"; + import { legalizeName } from "./JavaScript"; -import { convertersOption } from "../support/Converters"; -import { directlyReachableSingleNamedType } from "../TypeUtils"; -import { arrayIntercalate } from "collection-utils"; -import { PrimitiveType } from "../Type"; +import { isES3IdentifierStart } from "./JavaScriptUnicodeMaps"; export const javaScriptPropTypesOptions = { acronymStyle: acronymOption(AcronymStyleOptions.Pascal), @@ -40,17 +39,21 @@ export const javaScriptPropTypesOptions = { }; export class JavaScriptPropTypesTargetLanguage extends TargetLanguage { - protected getOptions(): Option[] { + protected getOptions(): Array> { return [javaScriptPropTypesOptions.acronymStyle, javaScriptPropTypesOptions.converters]; } - constructor(displayName = "JavaScript PropTypes", names: string[] = ["javascript-prop-types"], extension = "js") { + public constructor( + displayName = "JavaScript PropTypes", + names: string[] = ["javascript-prop-types"], + extension = "js" + ) { super(displayName, names, extension); } protected makeRenderer( renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } + untypedOptionValues: FixMeOptionsType ): JavaScriptPropTypesRenderer { return new JavaScriptPropTypesRenderer( this, @@ -63,7 +66,7 @@ export class JavaScriptPropTypesTargetLanguage extends TargetLanguage { const identityNamingFunction = funPrefixNamer("properties", s => s); export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _jsOptions: OptionValues @@ -79,7 +82,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, - upper ? s => capitalize(acronyms(s)) : allLowerWordStyle, + upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isES3IdentifierStart @@ -117,8 +120,8 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { return super.makeNameForProperty(c, className, p, jsonName, undefined); } - typeMapTypeFor(t: Type, required = true): Sourcelike { - if (["class", "object", "enum"].indexOf(t.kind) >= 0) { + private typeMapTypeFor(t: Type, required = true): Sourcelike { + if (["class", "object", "enum"].includes(t.kind)) { return ["_", this.nameForNamedType(t)]; } @@ -152,7 +155,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { return match; } - typeMapTypeForProperty(p: ClassProperty): Sourcelike { + private typeMapTypeForProperty(p: ClassProperty): Sourcelike { return this.typeMapTypeFor(p.type); } @@ -184,7 +187,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { ); } - protected emitBlock(source: Sourcelike, end: Sourcelike, emit: () => void) { + protected emitBlock(source: Sourcelike, end: Sourcelike, emit: () => void): void { this.emitLine(source, "{"); this.indent(emit); this.emitLine("}", end); @@ -241,18 +244,18 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { const names = source.filter(value => value as Name); // must be behind all these names - for (let i = 0; i < names.length; i++) { - const depName = names[i]; + names.forEach(name => { + const depName = name; // find this name's ordinal, if it has already been added - for (let j = 0; j < order.length; j++) { - const depIndex = order[j]; + order.forEach(orderItem => { + const depIndex = orderItem; if (mapKey[depIndex] === depName) { // this is the index of the dependency, so make sure we come after it ordinal = Math.max(ordinal, depIndex + 1); } - } - } + }); + }); // insert index order.splice(ordinal, 0, index); @@ -269,7 +272,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { } else { if (type.kind === "array") { this.ensureBlankLine(); - this.emitExport(name, ["PropTypes.arrayOf(", this.typeMapTypeFor((type as any).items), ")"]); + this.emitExport(name, ["PropTypes.arrayOf(", this.typeMapTypeFor((type as ArrayType).items), ")"]); } else { this.ensureBlankLine(); this.emitExport(name, ["_", name]); @@ -278,7 +281,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { }); } - private emitObject(name: Name, t: ObjectType) { + private emitObject(name: Name, t: ObjectType): void { this.ensureBlankLine(); this.emitLine("_", name, " = PropTypes.shape({"); this.indent(() => { diff --git a/packages/quicktype-core/src/language/JavaScriptUnicodeMaps.ts b/packages/quicktype-core/src/language/JavaScriptUnicodeMaps.ts index c3f105010..0e75bbfaa 100644 --- a/packages/quicktype-core/src/language/JavaScriptUnicodeMaps.ts +++ b/packages/quicktype-core/src/language/JavaScriptUnicodeMaps.ts @@ -1,6 +1,7 @@ +/* eslint-disable */ // Taken from https://github.com/Microsoft/TypeScript -function lookupInUnicodeMap(code: number, map: ReadonlyArray): boolean { +function lookupInUnicodeMap(code: number, map: readonly number[]): boolean { // Bail out quickly if it couldn't possibly be in the map. if (code < map[0]) { return false; diff --git a/packages/quicktype-core/src/language/Kotlin.ts b/packages/quicktype-core/src/language/Kotlin.ts index 0aa750b25..d2f759506 100644 --- a/packages/quicktype-core/src/language/Kotlin.ts +++ b/packages/quicktype-core/src/language/Kotlin.ts @@ -1,10 +1,12 @@ -import { iterableSome, arrayIntercalate } from "collection-utils"; +import { arrayIntercalate, iterableSome } from "collection-utils"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { EnumOption, Option, StringOption, OptionValues, getOptionValues } from "../RendererOptions"; -import { Sourcelike, maybeAnnotated, modifySource } from "../Source"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; +import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; import { allLowerWordStyle, allUpperWordStyle, @@ -25,24 +27,23 @@ import { assertNever, mustNotHappen } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; import { ArrayType, - ClassProperty, + type ClassProperty, ClassType, - EnumType, + type EnumType, MapType, - ObjectType, - PrimitiveType, - Type, + type ObjectType, + type PrimitiveType, + type Type, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { RenderContext } from "../Renderer"; -import { acronymOption, acronymStyle, AcronymStyleOptions } from "../support/Acronyms"; export enum Framework { - None, - Jackson, - Klaxon, - KotlinX + None = "None", + Jackson = "Jackson", + Klaxon = "Klaxon", + KotlinX = "KotlinX" } export const kotlinOptions = { @@ -62,26 +63,23 @@ export const kotlinOptions = { }; export class KotlinTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Kotlin", ["kotlin"], "kt"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [kotlinOptions.framework, kotlinOptions.acronymStyle, kotlinOptions.packageName]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): ConvenienceRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { const options = getOptionValues(kotlinOptions, untypedOptionValues); switch (options.framework) { @@ -183,6 +181,7 @@ function unicodeEscape(codePoint: number): string { return "\\u" + intToHex(codePoint, 4); } +// eslint-disable-next-line @typescript-eslint/naming-convention const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); function stringEscape(s: string): string { @@ -191,7 +190,7 @@ function stringEscape(s: string): string { } export class KotlinRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _kotlinOptions: OptionValues @@ -329,7 +328,7 @@ export class KotlinRenderer extends ConvenienceRenderer { return; } - const kotlinType = (p: ClassProperty) => { + const kotlinType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return [this.kotlinType(p.type, true, true), "?"]; } else { @@ -377,15 +376,15 @@ export class KotlinRenderer extends ConvenienceRenderer { this.emitClassDefinitionMethods(c, className); } - protected emitClassDefinitionMethods(_c: ClassType, _className: Name) { + protected emitClassDefinitionMethods(_c: ClassType, _className: Name): void { this.emitLine(")"); } - protected emitClassAnnotations(_c: Type, _className: Name) { + protected emitClassAnnotations(_c: Type, _className: Name): void { // to be overridden } - protected renameAttribute(_name: Name, _jsonName: string, _required: boolean, _meta: Array<() => void>) { + protected renameAttribute(_name: Name, _jsonName: string, _required: boolean, _meta: Array<() => void>): void { // to be overridden } @@ -426,6 +425,7 @@ export class KotlinRenderer extends ConvenienceRenderer { [" : ", unionName, "()"] ]); } + this.emitTable(table); } @@ -438,7 +438,7 @@ export class KotlinRenderer extends ConvenienceRenderer { _nonNulls: ReadonlySet, _maybeNull: PrimitiveType | null, _unionName: Name - ) { + ): void { // to be overridden } @@ -466,7 +466,7 @@ export class KotlinRenderer extends ConvenienceRenderer { } export class KotlinKlaxonRenderer extends KotlinRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, _kotlinOptions: OptionValues @@ -541,6 +541,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { if (hasEmptyObjects) { converters.push([[".convert(JsonObject::class,"], [" { it.obj!! },"], [" { it.toJsonString() })"]]); } + this.forEachEnum("none", (_, name) => { converters.push([ [".convert(", name, "::class,"], @@ -622,9 +623,11 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { if (namesDiffer) { properties.push(['name = "', escapedName, '"']); } + if (ignore) { properties.push("ignored = true"); } + return properties.length === 0 ? undefined : ["@Json(", arrayIntercalate(", ", properties), ")"]; } @@ -634,7 +637,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { this.emitLine("typealias ", className, " = JsonObject"); } - protected emitClassDefinitionMethods(c: ClassType, className: Name) { + protected emitClassDefinitionMethods(c: ClassType, className: Name): void { const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); if (isTopLevel) { this.emitBlock(")", () => { @@ -649,7 +652,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { } } - protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>) { + protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { const rename = this.klaxonRenameAttribute(name, jsonName); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); @@ -686,7 +689,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { this.indent(() => { this.emitLine("this.converter(object: Converter {"); this.indent(() => { - this.emitLine(`@Suppress("UNCHECKED_CAST")`); + this.emitLine('@Suppress("UNCHECKED_CAST")'); this.emitTable([ ["override fun toJson(value: Any)", " = toJson(value as T)"], ["override fun fromJson(jv: JsonValue)", " = fromJson(jv) as Any"], @@ -705,7 +708,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { nonNulls: ReadonlySet, maybeNull: PrimitiveType | null, unionName: Name - ) { + ): void { this.ensureBlankLine(); this.emitLine("public fun toJson(): String = klaxon.toJsonString(when (this) {"); this.indent(() => { @@ -717,6 +720,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { const name = this.nameForUnionMember(u, maybeNull); toJsonTable.push([["is ", name], [' -> "null"']]); } + this.emitTable(toJsonTable); }); this.emitLine("})"); @@ -735,6 +739,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { const name = this.nameForUnionMember(u, maybeNull); table.push([[this.unionMemberJsonValueGuard(maybeNull, "jv.inside")], [" -> ", name, "()"]]); } + table.push([["else"], [" -> throw IllegalArgumentException()"]]); this.emitTable(table); }); @@ -744,7 +749,7 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { } export class KotlinJacksonRenderer extends KotlinRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, _kotlinOptions: OptionValues @@ -889,6 +894,7 @@ import com.fasterxml.jackson.module.kotlin.*`); if (namesDiffer || isPrefixBool) { propertyOpts.push('"' + escapedName + '"'); } + if (required) { propertyOpts.push("required=true"); } @@ -902,6 +908,7 @@ import com.fasterxml.jackson.module.kotlin.*`); properties.push("@get:JsonIgnore"); properties.push("@field:JsonIgnore"); } + return properties.length === 0 ? undefined : properties; } @@ -911,7 +918,7 @@ import com.fasterxml.jackson.module.kotlin.*`); this.emitLine("typealias ", className, " = JsonNode"); } - protected emitClassDefinitionMethods(c: ClassType, className: Name) { + protected emitClassDefinitionMethods(c: ClassType, className: Name): void { const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); if (isTopLevel) { this.emitBlock(")", () => { @@ -926,7 +933,7 @@ import com.fasterxml.jackson.module.kotlin.*`); } } - protected renameAttribute(name: Name, jsonName: string, required: boolean, meta: Array<() => void>) { + protected renameAttribute(name: Name, jsonName: string, required: boolean, meta: Array<() => void>): void { const rename = this.jacksonRenameAttribute(name, jsonName, required); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); @@ -974,7 +981,7 @@ private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (Jso nonNulls: ReadonlySet, maybeNull: PrimitiveType | null, unionName: Name - ) { + ): void { this.ensureBlankLine(); this.emitLine("fun toJson(): String = mapper.writeValueAsString(when (this) {"); this.indent(() => { @@ -986,6 +993,7 @@ private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (Jso const name = this.nameForUnionMember(u, maybeNull); toJsonTable.push([["is ", name], [' -> "null"']]); } + this.emitTable(toJsonTable); }); this.emitLine("})"); @@ -1001,6 +1009,7 @@ private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (Jso const name = this.nameForUnionMember(u, maybeNull); table.push([[this.unionMemberJsonValueGuard(maybeNull, "jn")], [" -> ", name, "()"]]); } + table.push([["else"], [" -> throw IllegalArgumentException()"]]); this.emitTable(table); }); @@ -1014,7 +1023,7 @@ private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (Jso * TODO: Union, Any, Top Level Array, Top Level Map */ export class KotlinXRenderer extends KotlinRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, _kotlinOptions: OptionValues @@ -1032,6 +1041,7 @@ export class KotlinXRenderer extends KotlinRenderer { if (name === "JsonObject" || name === "JsonElement") { return "JsonArray"; } + return super.arrayType(arrayType, withIssues, noOptional); } @@ -1041,6 +1051,7 @@ export class KotlinXRenderer extends KotlinRenderer { if (name === "JsonObject" || name === "JsonElement") { return "JsonObject"; } + return super.mapType(mapType, withIssues, noOptional); } @@ -1082,11 +1093,11 @@ export class KotlinXRenderer extends KotlinRenderer { this.emitLine("import kotlinx.serialization.encoding.*"); } - protected emitClassAnnotations(_c: Type, _className: Name) { + protected emitClassAnnotations(_c: Type, _className: Name): void { this.emitLine("@Serializable"); } - protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>) { + protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { const rename = this._rename(name, jsonName); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); @@ -1099,6 +1110,7 @@ export class KotlinXRenderer extends KotlinRenderer { if (namesDiffer) { return ['@SerialName("', escapedName, '")']; } + return undefined; } diff --git a/packages/quicktype-core/src/language/Objective-C.ts b/packages/quicktype-core/src/language/Objective-C.ts index d861ba41a..3b46b914b 100644 --- a/packages/quicktype-core/src/language/Objective-C.ts +++ b/packages/quicktype-core/src/language/Objective-C.ts @@ -1,32 +1,42 @@ -import { iterableSome, iterableFirst, mapContains, mapFirst, mapSome } from "collection-utils"; +import { iterableFirst, iterableSome, mapContains, mapFirst, mapSome } from "collection-utils"; +import unicode from "unicode-properties"; -import { TargetLanguage } from "../TargetLanguage"; -import { Type, ClassType, EnumType, ArrayType, MapType, UnionType, ClassProperty } from "../Type"; -import { matchType, nullableFromUnion, isAnyOrNull } from "../TypeUtils"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { Sourcelike, modifySource } from "../Source"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; import { - splitIntoWords, - combineWords, - firstUpperWordStyle, - allUpperWordStyle, + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../RendererOptions"; +import { type Sourcelike, modifySource } from "../Source"; +import { + addPrefixIfNecessary, allLowerWordStyle, + allUpperWordStyle, camelCase, - utf16LegalizeCharacters, - stringEscape, - addPrefixIfNecessary, + combineWords, + fastIsUpperCase, + firstUpperWordStyle, repeatString, - fastIsUpperCase + splitIntoWords, + stringEscape, + utf16LegalizeCharacters } from "../support/Strings"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { StringOption, BooleanOption, EnumOption, Option, getOptionValues, OptionValues } from "../RendererOptions"; import { assert, defined } from "../support/Support"; -import { RenderContext } from "../Renderer"; - -import * as unicode from "unicode-properties"; +import { TargetLanguage } from "../TargetLanguage"; +import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, Type, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { isAnyOrNull, matchType, nullableFromUnion } from "../TypeUtils"; export type MemoryAttribute = "assign" | "strong" | "copy"; -export type OutputFeatures = { interface: boolean; implementation: boolean }; +export interface OutputFeatures { + implementation: boolean; + interface: boolean; +} const DEBUG = false; const DEFAULT_CLASS_PREFIX = "QT"; @@ -44,11 +54,11 @@ export const objcOptions = { }; export class ObjectiveCTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Objective-C", ["objc", "objective-c", "objectivec"], "m"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ objcOptions.justTypes, objcOptions.classPrefix, @@ -58,10 +68,7 @@ export class ObjectiveCTargetLanguage extends TargetLanguage { ]; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): ObjectiveCRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ObjectiveCRenderer { return new ObjectiveCRenderer(this, renderContext, getOptionValues(objcOptions, untypedOptionValues)); } } @@ -93,14 +100,14 @@ function propertyNameStyle(original: string, isBool = false): string { if (isBool) { if (words.length === 0) { words = [{ word: "flag", isAcronym: false }]; - } else if (!words[0].isAcronym && booleanPrefixes.indexOf(words[0].word) < 0) { + } else if (!words[0].isAcronym && !booleanPrefixes.includes(words[0].word)) { words = [{ word: "is", isAcronym: false }, ...words]; } } // Properties cannot even begin with any of the forbidden names // For example, properies named new* are treated differently by ARC - if (words.length > 0 && forbiddenPropertyNames.indexOf(words[0].word) >= 0) { + if (words.length > 0 && forbiddenPropertyNames.includes(words[0].word)) { words = [{ word: "the", isAcronym: false }, ...words]; } @@ -205,7 +212,7 @@ function isStartCharacter(utf16Unit: number): boolean { function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].indexOf(category) >= 0 || isStartCharacter(utf16Unit); + return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); @@ -217,14 +224,15 @@ function splitExtension(filename: string): [string, string] { const i = filename.lastIndexOf("."); const extension = i !== -1 ? filename.split(".").pop() : "m"; filename = i !== -1 ? filename.slice(0, i) : filename; - return [filename, extension === undefined ? "m" : extension]; + return [filename, extension ?? "m"]; } export class ObjectiveCRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; + private readonly _classPrefix: string; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -246,6 +254,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { while (firstNonUpper < l && fastIsUpperCase(name.charCodeAt(firstNonUpper))) { firstNonUpper += 1; } + if (firstNonUpper < 2) return DEFAULT_CLASS_PREFIX; return name.slice(0, firstNonUpper - 1); } @@ -299,14 +308,14 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine("}"); } - protected emitMethod(declaration: Sourcelike, f: () => void) { + protected emitMethod(declaration: Sourcelike, f: () => void): void { this.emitLine(declaration); this.emitLine("{"); this.indent(f); this.emitLine("}"); } - protected emitExtraComments(...comments: Sourcelike[]) { + protected emitExtraComments(...comments: Sourcelike[]): void { if (!this._options.extraComments) return; for (const comment of comments) { this.emitLine("// ", comment); @@ -361,6 +370,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (isAnyOrNull(itemType)) { return ["NSArray", " *"]; } + return [["NSArray<", itemTypeName, ">"], " *"]; }, classType => [this.nameForNamedType(classType), " *"], @@ -420,7 +430,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { _anyType => ["NSNullify(", typed, ")"], _nullType => ["NSNullify(", typed, ")"], // Sadly, KVC - _boolType => [typed, ` ? @YES : @NO`], + _boolType => [typed, " ? @YES : @NO"], _integerType => typed, _doubleType => typed, _stringType => typed, @@ -429,6 +439,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { // TODO check each value type return typed; } + return ["map(", typed, ", λ(id x, ", this.toDynamicExpression(arrayType.items, "x"), "))"]; }, _classType => ["[", typed, " JSONDictionary]"], @@ -437,6 +448,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { // TODO check each value type return typed; } + return ["map(", typed, ", λ(id x, ", this.toDynamicExpression(mapType.values, "x"), "))"]; }, _enumType => ["[", typed, " value]"], @@ -484,7 +496,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { return this.implicitlyConvertsFromJSON(t) && "bool" !== t.kind; } - protected emitPropertyAssignment(propertyName: Name, jsonName: string, propertyType: Type) { + protected emitPropertyAssignment(propertyName: Name, jsonName: string, propertyType: Type): void { const name = ["_", propertyName]; matchType( propertyType, @@ -575,13 +587,13 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine(this.topLevelToJSONPrototype(name, true), ";"); } - private emitTryCatchAsError(inTry: () => void, inCatch: () => void) { + private emitTryCatchAsError(inTry: () => void, inCatch: () => void): void { this.emitLine("@try {"); this.indent(inTry); this.emitLine("} @catch (NSException *exception) {"); this.indent(() => { this.emitLine( - `*error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];` + '*error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];' ); inCatch(); }); @@ -644,6 +656,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (property.type.isNullable) { attributes.push("nullable"); } + attributes.push(this.memoryAttribute(property.type, property.type.isNullable)); return [ ["@property ", ["(", attributes.join(", "), ")"], " "], @@ -663,10 +676,11 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { ); this.emitLine("- (NSData *_Nullable)toData:(NSError *_Nullable *)error;"); } + this.emitLine("@end"); } - protected hasIrregularProperties(t: ClassType) { + protected hasIrregularProperties(t: ClassType): boolean { let irregular = false; this.forEachClassProperty(t, "none", (name, jsonName) => { irregular = irregular || stringEscape(jsonName) !== this.sourcelikeToString(name); @@ -674,7 +688,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { return irregular; } - protected hasUnsafeProperties(t: ClassType) { + protected hasUnsafeProperties(t: ClassType): boolean { let unsafe = false; this.forEachClassProperty(t, "none", (_, __, property) => { unsafe = unsafe || !this.implicitlyConvertsToJSON(property.type); @@ -696,7 +710,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine("return properties = properties ? properties : @{"); this.indent(() => { this.forEachClassProperty(t, "none", (name, jsonName) => - this.emitLine(`@"${stringEscape(jsonName)}": @"`, name, `",`) + this.emitLine(`@"${stringEscape(jsonName)}": @"`, name, '",') ); }); this.emitLine("};"); @@ -770,10 +784,10 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (hasIrregularProperties) { this.emitExtraComments("Rewrite property names that differ in JSON"); this.emitBlock(["for (id jsonName in ", className, ".properties)"], () => { - this.emitLine(`id propertyName = `, className, `.properties[jsonName];`); - this.emitBlock(`if (![jsonName isEqualToString:propertyName])`, () => { - this.emitLine(`dict[jsonName] = dict[propertyName];`); - this.emitLine(`[dict removeObjectForKey:propertyName];`); + this.emitLine("id propertyName = ", className, ".properties[jsonName];"); + this.emitBlock("if (![jsonName isEqualToString:propertyName])", () => { + this.emitLine("dict[jsonName] = dict[propertyName];"); + this.emitLine("[dict removeObjectForKey:propertyName];"); }); }); } @@ -800,12 +814,12 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (isTopLevel) { this.ensureBlankLine(); - this.emitMethod(`- (NSData *_Nullable)toData:(NSError *_Nullable *)error`, () => { + this.emitMethod("- (NSData *_Nullable)toData:(NSError *_Nullable *)error", () => { this.emitLine("return ", className, "ToData(self, error);"); }); this.ensureBlankLine(); this.emitMethod( - `- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error`, + "- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error", () => { this.emitLine("return ", className, "ToJSON(self, encoding, error);"); } @@ -816,7 +830,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine("@end"); } - protected emitMark(label: string) { + protected emitMark(label: string): void { this.ensureBlankLine(); this.emitLine(`#pragma mark - ${label}`); this.ensureBlankLine(); @@ -832,7 +846,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { return camelCaseName; } - private emitPseudoEnumInterface(enumType: EnumType, enumName: Name) { + private emitPseudoEnumInterface(enumType: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(enumType)); this.emitLine("@interface ", enumName, " : NSObject"); @@ -844,7 +858,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine("@end"); } - private emitPseudoEnumImplementation(enumType: EnumType, enumName: Name) { + private emitPseudoEnumImplementation(enumType: EnumType, enumName: Name): void { this.emitLine("@implementation ", enumName); const instances = [enumName, ".", staticEnumValuesIdentifier]; @@ -906,6 +920,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { const firstTopLevel = defined(mapFirst(this.topLevels)); proposedFilename = this.sourcelikeToString(this.nameForNamedType(firstTopLevel)) + ".m"; } + const [filename, extension] = splitExtension(proposedFilename); if (this._options.features.interface) { @@ -933,7 +948,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { } this.ensureBlankLine(); - this.emitLine(`#import `); + this.emitLine("#import "); this.ensureBlankLine(); // Emit @class declarations for top-level array+maps and classes @@ -996,7 +1011,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (!this._options.justTypes) { this.ensureBlankLine(); this.emitExtraComments("Shorthand for simple blocks"); - this.emitLine(`#define λ(decl, expr) (^(decl) { return (expr); })`); + this.emitLine("#define λ(decl, expr) (^(decl) { return (expr); })"); this.ensureBlankLine(); this.emitExtraComments("nil → NSNull conversion for JSON dictionaries"); this.emitBlock("static id NSNullify(id _Nullable x)", () => @@ -1028,6 +1043,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { ); this.ensureBlankLine(); } + this.forEachEnum("leading-and-interposing", (t, n) => this.emitPseudoEnumImplementation(t, n)); } @@ -1054,6 +1070,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.finishFile(); } } + private get needsMap(): boolean { // TODO this isn't complete (needs union support, for example) function needsMap(t: Type): boolean { @@ -1063,10 +1080,11 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { (t instanceof ClassType && mapSome(t.getProperties(), p => needsMap(p.type))) ); } + return iterableSome(this.typeGraph.allTypesUnordered(), needsMap); } - protected emitMapFunction() { + protected emitMapFunction(): void { if (this.needsMap) { this.emitMultiline(`static id map(id collection, id (^f)(id value)) { id result = nil; diff --git a/packages/quicktype-core/src/language/Php.ts b/packages/quicktype-core/src/language/Php.ts index 670b09cc1..e448bb1ee 100644 --- a/packages/quicktype-core/src/language/Php.ts +++ b/packages/quicktype-core/src/language/Php.ts @@ -1,10 +1,13 @@ +import * as _ from "lodash"; + +import { type PrimitiveStringTypeKind, type StringTypeMapping, type TransformedStringTypeKind } from ".."; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { DependencyName, funPrefixNamer, Name, Namer } from "../Naming"; -import { RenderContext } from "../Renderer"; -import { BooleanOption, getOptionValues, Option, OptionValues } from "../RendererOptions"; -import { maybeAnnotated, Sourcelike } from "../Source"; -import { acronymOption, acronymStyle, AcronymStyleOptions } from "../support/Acronyms"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../Source"; +import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; import { allLowerWordStyle, allUpperWordStyle, @@ -21,10 +24,9 @@ import { } from "../support/Strings"; import { defined } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; -import { ClassProperty, ClassType, EnumType, Type, UnionType } from "../Type"; +import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../TypeUtils"; -import { StringTypeMapping, TransformedStringTypeKind, PrimitiveStringTypeKind } from ".."; -import * as _ from "lodash"; export const phpOptions = { withGet: new BooleanOption("with-get", "Create Getter", true), @@ -35,24 +37,24 @@ export const phpOptions = { }; export class PhpTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("PHP", ["php"], "php"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return _.values(phpOptions); } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): PhpRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PhpRenderer { const options = getOptionValues(phpOptions, untypedOptionValues); return new PhpRenderer(this, renderContext, options); } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date"); // TODO is not implemented yet mapping.set("time", "time"); // TODO is not implemented yet @@ -95,21 +97,24 @@ export function phpNameStyle( } export interface FunctionNames { + readonly from: Name; readonly getter: Name; + readonly sample: Name; readonly setter: Name; - readonly validate: Name; - readonly from: Name; readonly to: Name; - readonly sample: Name; + readonly validate: Name; } export class PhpRenderer extends ConvenienceRenderer { private readonly _gettersAndSettersForPropertyName = new Map(); + private _haveEmittedLeadingComments = false; + protected readonly _converterClassname: string = "Converter"; + protected readonly _converterKeywords: string[] = []; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _options: OptionValues @@ -256,9 +261,10 @@ export class PhpRenderer extends ConvenienceRenderer { } protected phpType(_reference: boolean, t: Type, isOptional = false, prefix = "?", suffix = ""): Sourcelike { - function optionalize(s: Sourcelike) { + function optionalize(s: Sourcelike): Sourcelike { return [isOptional ? prefix : "", s, isOptional ? suffix : ""]; } + return matchType( t, _anyType => maybeAnnotated(isOptional, anyTypeIssueAnnotation, "Object"), @@ -280,15 +286,19 @@ export class PhpRenderer extends ConvenienceRenderer { if (transformedStringType.kind === "time") { throw Error('transformedStringType.kind === "time"'); } + if (transformedStringType.kind === "date") { throw Error('transformedStringType.kind === "date"'); } + if (transformedStringType.kind === "date-time") { return "DateTime"; } + if (transformedStringType.kind === "uuid") { throw Error('transformedStringType.kind === "uuid"'); } + return "string"; } ); @@ -312,12 +322,14 @@ export class PhpRenderer extends ConvenienceRenderer { if (nullable !== null) { return [this.phpDocConvertType(className, nullable), "|null"]; } + throw Error("union are not supported"); }, transformedStringType => { if (transformedStringType.kind === "date-time") { return "DateTime"; } + throw Error('transformedStringType.kind === "unknown"'); } ); @@ -341,19 +353,21 @@ export class PhpRenderer extends ConvenienceRenderer { if (nullable !== null) { return ["?", this.phpConvertType(className, nullable)]; } + throw Error("union are not supported"); }, transformedStringType => { if (transformedStringType.kind === "date-time") { return "string"; } + throw Error('transformedStringType.kind === "unknown"'); } ); } - protected phpToObjConvert(className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[]) { - return matchType( + protected phpToObjConvert(className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[]): void { + matchType( t, _anyType => this.emitLine(...lhs, ...args, "; /*any*/"), _nullType => this.emitLine(...lhs, ...args, "; /*null*/"), @@ -391,6 +405,7 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine("}"); return; } + throw Error("union are not supported"); }, transformedStringType => { @@ -398,12 +413,13 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine(...lhs, ...args, "->format(DateTimeInterface::ISO8601);"); return; } + throw Error('transformedStringType.kind === "unknown"'); } ); } - private transformDateTime(className: Name, attrName: Sourcelike, scopeAttrName: Sourcelike[]) { + private transformDateTime(className: Name, attrName: Sourcelike, scopeAttrName: Sourcelike[]): void { this.emitBlock(["if (!is_a(", scopeAttrName, ", 'DateTime'))"], () => this.emitLine("throw new Exception('Attribute Error:", className, "::", attrName, "');") ); @@ -412,8 +428,8 @@ export class PhpRenderer extends ConvenienceRenderer { // } } - protected phpFromObjConvert(className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[]) { - return matchType( + protected phpFromObjConvert(className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[]): void { + matchType( t, _anyType => this.emitLine(...lhs, ...args, "; /*any*/"), _nullType => this.emitLine(...lhs, ...args, "; /*null*/"), @@ -452,6 +468,7 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine("}"); return; } + throw Error("union are not supported"); }, transformedStringType => { @@ -461,6 +478,7 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine("return $tmp;"); return; } + throw Error('transformedStringType.kind === "unknown"'); } ); @@ -473,8 +491,8 @@ export class PhpRenderer extends ConvenienceRenderer { args: Sourcelike[], idx: number, suffix: Sourcelike - ) { - return matchType( + ): void { + matchType( t, _anyType => this.emitLine( @@ -546,6 +564,7 @@ export class PhpRenderer extends ConvenienceRenderer { this.phpSampleConvert(className, nullable, lhs, args, idx, suffix); return; } + throw Error("union are not supported:" + unionType); }, transformedStringType => { @@ -561,18 +580,20 @@ export class PhpRenderer extends ConvenienceRenderer { // this.emitLine("return sample();"); return; } + throw Error('transformedStringType.kind === "unknown"'); } ); } - private phpValidate(className: Name, t: Type, attrName: Sourcelike, scopeAttrName: string) { - const is = (isfn: string, myT: Name = className) => { + private phpValidate(className: Name, t: Type, attrName: Sourcelike, scopeAttrName: string): void { + const is = (isfn: string, myT: Name = className): void => { this.emitBlock(["if (!", isfn, "(", scopeAttrName, "))"], () => this.emitLine('throw new Exception("Attribute Error:', myT, "::", attrName, '");') ); }; - return matchType( + + matchType( t, _anyType => is("defined"), _nullType => is("is_null"), @@ -609,6 +630,7 @@ export class PhpRenderer extends ConvenienceRenderer { }); return; } + throw Error("not implemented"); }, transformedStringType => { @@ -616,17 +638,25 @@ export class PhpRenderer extends ConvenienceRenderer { this.transformDateTime(className, attrName, [scopeAttrName]); return; } + throw Error(`transformedStringType.kind === ${transformedStringType.kind}`); } ); } - protected emitFromMethod(names: FunctionNames, p: ClassProperty, className: Name, _name: Name, desc?: string[]) { + protected emitFromMethod( + names: FunctionNames, + p: ClassProperty, + className: Name, + _name: Name, + desc?: string[] + ): void { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } + // this.emitLine(" * @param ", this.phpType(false, p.type, false, "", "|null")); this.emitLine(" * @param ", this.phpConvertType(className, p.type), " $value"); this.emitLine(" * @throws Exception"); @@ -642,17 +672,19 @@ export class PhpRenderer extends ConvenienceRenderer { this.phpType(false, p.type) ], () => { - this.phpFromObjConvert(className, p.type, ["return "], [`$value`]); + this.phpFromObjConvert(className, p.type, ["return "], ["$value"]); // this.emitLine("return $ret;"); } ); } - protected emitToMethod(names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[]) { + + protected emitToMethod(names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[]): void { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } + this.emitLine(" * @throws Exception"); this.emitLine(" * @return ", this.phpConvertType(className, p.type)); this.emitLine(" */"); @@ -663,12 +695,20 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine("throw new Exception('never get to this ", className, "::", name, "');"); }); } - protected emitValidateMethod(names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[]) { + + protected emitValidateMethod( + names: FunctionNames, + p: ClassProperty, + className: Name, + name: Name, + desc?: string[] + ): void { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } + this.emitLine(" * @param ", this.phpType(false, p.type, false, "", "|null")); this.emitLine(" * @return bool"); this.emitLine(" * @throws Exception"); @@ -676,21 +716,30 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitBlock( ["public static function ", names.validate, "(", this.phpType(false, p.type), " $value): bool"], () => { - this.phpValidate(className, p.type, name, `$value`); + this.phpValidate(className, p.type, name, "$value"); this.emitLine("return true;"); } ); } - protected emitGetMethod(names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[]) { + + protected emitGetMethod( + names: FunctionNames, + p: ClassProperty, + className: Name, + name: Name, + desc?: string[] + ): void { if (this._options.withGet) { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } + if (!this._options.fastGet) { - this.emitLine(` * @throws Exception`); + this.emitLine(" * @throws Exception"); } + const rendered = this.phpType(false, p.type); this.emitLine(" * @return ", rendered); this.emitLine(" */"); @@ -714,15 +763,23 @@ export class PhpRenderer extends ConvenienceRenderer { }); } } - protected emitSetMethod(names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[]) { + + protected emitSetMethod( + names: FunctionNames, + p: ClassProperty, + className: Name, + name: Name, + desc?: string[] + ): void { if (this._options.withSet) { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } + this.emitLine(" * @param ", this.phpType(false, p.type, false, "", "|null")); - this.emitLine(` * @throws Exception`); + this.emitLine(" * @throws Exception"); this.emitLine(" */"); this.emitBlock(["public function ", names.setter, "(", this.phpType(false, p.type), " $value)"], () => { this.emitBlock(["if (", className, "::", names.validate, "($value)) "], () => { @@ -731,6 +788,7 @@ export class PhpRenderer extends ConvenienceRenderer { }); } } + protected emitSampleMethod( names: FunctionNames, p: ClassProperty, @@ -738,13 +796,14 @@ export class PhpRenderer extends ConvenienceRenderer { name: Name, desc: string[] | undefined, idx: number - ) { + ): void { if (this._options.withGet) { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } + const rendered = this.phpType(false, p.type); this.emitLine(" * @return ", rendered); this.emitLine(" */"); @@ -807,7 +866,7 @@ export class PhpRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitBlock( - ["/**\n", ` * @throws Exception\n`, ` * @return bool\n`, " */\n", "public function validate(): bool"], + ["/**\n", " * @throws Exception\n", " * @return bool\n", " */\n", "public function validate(): bool"], () => { let lines: Sourcelike[][] = []; let p = "return "; @@ -826,8 +885,8 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitBlock( [ "/**\n", - ` * @return stdClass\n`, - ` * @throws Exception\n`, + " * @return stdClass\n", + " * @throws Exception\n", " */\n", "public function to(): stdClass " ], @@ -845,11 +904,11 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitBlock( [ "/**\n", - ` * @param stdClass $obj\n`, - ` * @return `, + " * @param stdClass $obj\n", + " * @return ", className, - `\n`, - ` * @throws Exception\n`, + "\n", + " * @throws Exception\n", " */\n", "public static function from(stdClass $obj): ", className @@ -861,6 +920,7 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine(className, "::", names.validate, "($this->", name, ", true);"); }); } + this.emitLine("return new ", className, "("); let comma = " "; this.forEachClassProperty(c, "none", (name, jsonName) => { @@ -901,11 +961,11 @@ export class PhpRenderer extends ConvenienceRenderer { throw Error("emitUnionDefinition not implemented"); } - protected emitEnumSerializationAttributes(_e: EnumType) { + protected emitEnumSerializationAttributes(_e: EnumType): void { // Empty } - protected emitEnumDeserializationAttributes(_e: EnumType) { + protected emitEnumDeserializationAttributes(_e: EnumType): void { // Empty } @@ -937,13 +997,13 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitBlock( [ "/**\n", - ` * @param `, + " * @param ", enumName, - `\n`, - ` * @return `, + "\n", + " * @return ", enumSerdeType, - `\n`, - ` * @throws Exception\n`, + "\n", + " * @throws Exception\n", " */\n", "public static function to(", enumName, @@ -976,11 +1036,11 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitBlock( [ "/**\n", - ` * @param mixed\n`, - ` * @return `, + " * @param mixed\n", + " * @return ", enumName, "\n", - ` * @throws Exception\n`, + " * @throws Exception\n", " */\n", "public static function from($obj): ", enumName @@ -999,7 +1059,7 @@ export class PhpRenderer extends ConvenienceRenderer { ); this.ensureBlankLine(); this.emitBlock( - ["/**\n", ` * @return `, enumName, "\n", " */\n", "public static function sample(): ", enumName], + ["/**\n", " * @return ", enumName, "\n", " */\n", "public static function sample(): ", enumName], () => { const lines: Sourcelike[] = []; this.forEachEnumCase(e, "none", name => { @@ -1024,6 +1084,7 @@ export class PhpRenderer extends ConvenienceRenderer { if (this._options.withClosing) { this.emitLine("?>"); } + super.finishFile(defined(givenFilename)); } } diff --git a/packages/quicktype-core/src/language/Pike.ts b/packages/quicktype-core/src/language/Pike.ts index d2d9541b7..ea7f9d3a5 100644 --- a/packages/quicktype-core/src/language/Pike.ts +++ b/packages/quicktype-core/src/language/Pike.ts @@ -1,12 +1,13 @@ -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { Option } from "../RendererOptions"; -import { RenderContext } from "../Renderer"; -import { MultiWord, Sourcelike, multiWord, parenIfNeeded, singleWord } from "../Source"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { type Option } from "../RendererOptions"; +import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../Source"; +import { isLetterOrUnderscoreOrDigit, legalizeCharacters, makeNameStyle, stringEscape } from "../support/Strings"; import { TargetLanguage } from "../TargetLanguage"; -import { Type, ClassType, EnumType, UnionType, ArrayType, MapType, PrimitiveType } from "../Type"; +import { ArrayType, type ClassType, type EnumType, MapType, PrimitiveType, type Type, type UnionType } from "../Type"; +import { type FixMeOptionsAnyType } from "../types"; import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { legalizeCharacters, isLetterOrUnderscoreOrDigit, stringEscape, makeNameStyle } from "../support/Strings"; export const pikeOptions = {}; @@ -71,10 +72,11 @@ const namingFunction = funPrefixNamer("genericNamer", makeNameStyle("underscore" const namedTypeNamingFunction = funPrefixNamer("typeNamer", makeNameStyle("pascal", legalizeName)); export class PikeTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Pike", ["pike", "pikelang"], "pmod"); } - protected getOptions(): Option[] { + + protected getOptions(): Array> { return []; } @@ -113,6 +115,7 @@ export class PikeRenderer extends ConvenienceRenderer { protected makeEnumCaseNamer(): Namer { return enumNamingFunction; } + protected makeNamedTypeNamer(): Namer { return namedTypeNamingFunction; } @@ -142,9 +145,10 @@ export class PikeRenderer extends ConvenienceRenderer { } protected sourceFor(t: Type): MultiWord { - if (["class", "object", "enum"].indexOf(t.kind) >= 0) { + if (["class", "object", "enum"].includes(t.kind)) { return singleWord(this.nameForNamedType(t)); } + return matchType( t, _anyType => singleWord("mixed"), @@ -252,7 +256,7 @@ export class PikeRenderer extends ConvenienceRenderer { this.emitTable(table); } - private emitInformationComment() { + private emitInformationComment(): void { this.emitCommentLines( [ "This source has been automatically generated by quicktype.", @@ -273,11 +277,11 @@ export class PikeRenderer extends ConvenienceRenderer { ); } - private emitTopLevelTypedef(t: Type, name: Name) { + private emitTopLevelTypedef(t: Type, name: Name): void { this.emitLine("typedef ", this.sourceFor(t).source, " ", name, ";"); } - private emitTopLevelConverter(t: Type, name: Name) { + private emitTopLevelConverter(t: Type, name: Name): void { this.emitBlock([name, " ", name, "_from_JSON(mixed json)"], () => { if (t instanceof PrimitiveType) { this.emitLine(["return json;"]); @@ -298,7 +302,7 @@ export class PikeRenderer extends ConvenienceRenderer { }); } - private emitEncodingFunction(c: ClassType) { + private emitEncodingFunction(c: ClassType): void { this.emitBlock(["string encode_json()"], () => { this.emitMappingBlock(["mapping(string:mixed) json = "], () => { this.forEachClassProperty(c, "none", (name, jsonName) => { @@ -310,7 +314,7 @@ export class PikeRenderer extends ConvenienceRenderer { }); } - private emitDecodingFunction(className: Name, c: ClassType) { + private emitDecodingFunction(className: Name, c: ClassType): void { this.emitBlock([className, " ", className, "_from_JSON(mixed json)"], () => { this.emitLine([className, " retval = ", className, "();"]); this.ensureBlankLine(); diff --git a/packages/quicktype-core/src/language/Python.ts b/packages/quicktype-core/src/language/Python.ts index 3c2f3ae0e..dc3f5b9e9 100644 --- a/packages/quicktype-core/src/language/Python.ts +++ b/packages/quicktype-core/src/language/Python.ts @@ -1,54 +1,56 @@ -import { TargetLanguage } from "../TargetLanguage"; -import { StringTypeMapping } from "../TypeBuilder"; import { - TransformedStringTypeKind, - PrimitiveStringTypeKind, - Type, - EnumType, - ClassType, - UnionType, - ClassProperty -} from "../Type"; -import { RenderContext } from "../Renderer"; -import { Option, getOptionValues, OptionValues, EnumOption, BooleanOption } from "../RendererOptions"; -import { ConvenienceRenderer, ForbiddenWordsInfo, topLevelNameOrder } from "../ConvenienceRenderer"; -import { Namer, funPrefixNamer, Name, DependencyName } from "../Naming"; + arrayIntercalate, + iterableFirst, + iterableSome, + mapSortBy, + mapUpdateInto, + setUnionInto +} from "collection-utils"; +import unicode from "unicode-properties"; + +import { ConvenienceRenderer, type ForbiddenWordsInfo, topLevelNameOrder } from "../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type MultiWord, type Sourcelike, modifySource, multiWord, parenIfNeeded, singleWord } from "../Source"; import { - splitIntoWords, + type WordStyle, + allLowerWordStyle, + allUpperWordStyle, combineWords, firstUpperWordStyle, - utf16LegalizeCharacters, - allUpperWordStyle, - allLowerWordStyle, + originalWord, + splitIntoWords, stringEscape, - originalWord + utf16LegalizeCharacters } from "../support/Strings"; -import { assertNever, panic, defined } from "../support/Support"; -import { Sourcelike, MultiWord, multiWord, singleWord, parenIfNeeded, modifySource } from "../Source"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; +import { assertNever, defined, panic } from "../support/Support"; +import { TargetLanguage } from "../TargetLanguage"; import { - followTargetType, - transformationForType, - Transformer, - DecodingChoiceTransformer, ChoiceTransformer, + DecodingChoiceTransformer, DecodingTransformer, - UnionInstantiationTransformer, + EncodingTransformer, ParseStringTransformer, - UnionMemberMatchTransformer, StringifyTransformer, - EncodingTransformer + type Transformer, + UnionInstantiationTransformer, + UnionMemberMatchTransformer, + followTargetType, + transformationForType } from "../Transformers"; import { - arrayIntercalate, - setUnionInto, - mapUpdateInto, - iterableSome, - mapSortBy, - iterableFirst -} from "collection-utils"; - -import * as unicode from "unicode-properties"; + type ClassProperty, + ClassType, + EnumType, + type PrimitiveStringTypeKind, + type TransformedStringTypeKind, + type Type, + UnionType +} from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; const forbiddenTypeNames = [ "Any", @@ -109,10 +111,10 @@ const forbiddenPropertyNames = [ "yield" ]; -export type PythonFeatures = { - typeHints: boolean; +export interface PythonFeatures { dataClasses: boolean; -}; + typeHints: boolean; +} export const pythonOptions = { features: new EnumOption( @@ -130,11 +132,11 @@ export const pythonOptions = { }; export class PythonTargetLanguage extends TargetLanguage { - protected getOptions(): Option[] { + protected getOptions(): Array> { return [pythonOptions.features, pythonOptions.justTypes, pythonOptions.nicePropertyNames]; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); @@ -146,22 +148,23 @@ export class PythonTargetLanguage extends TargetLanguage { return mapping; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return false; } - needsTransformerForType(t: Type): boolean { + public needsTransformerForType(t: Type): boolean { if (t instanceof UnionType) { return iterableSome(t.members, m => this.needsTransformerForType(m)); } + return t.kind === "integer-string" || t.kind === "bool-string"; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): PythonRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PythonRenderer { const options = getOptionValues(pythonOptions, untypedOptionValues); if (options.justTypes) { return new PythonRenderer(this, renderContext, options); @@ -174,14 +177,14 @@ export class PythonTargetLanguage extends TargetLanguage { function isNormalizedStartCharacter3(utf16Unit: number): boolean { // FIXME: add Other_ID_Start - https://docs.python.org/3/reference/lexical_analysis.html#identifiers const category: string = unicode.getCategory(utf16Unit); - return ["Lu", "Ll", "Lt", "Lm", "Lo", "Nl"].indexOf(category) >= 0; + return ["Lu", "Ll", "Lt", "Lm", "Lo", "Nl"].includes(category); } function isNormalizedPartCharacter3(utf16Unit: number): boolean { // FIXME: add Other_ID_Continue - https://docs.python.org/3/reference/lexical_analysis.html#identifiers if (isNormalizedStartCharacter3(utf16Unit)) return true; const category: string = unicode.getCategory(utf16Unit); - return ["Mn", "Mc", "Nd", "Pc"].indexOf(category) >= 0; + return ["Mn", "Mc", "Nd", "Pc"].includes(category); } function isStartCharacter3(utf16Unit: number): boolean { @@ -191,6 +194,7 @@ function isStartCharacter3(utf16Unit: number): boolean { for (let i = 1; i < l; i++) { if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; } + return true; } @@ -200,6 +204,7 @@ function isPartCharacter3(utf16Unit: number): boolean { for (let i = 0; i < l; i++) { if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; } + return true; } @@ -219,10 +224,11 @@ function classNameStyle(original: string): string { ); } -function getWordStyle(uppercase: boolean, forceSnakeNameStyle: boolean) { +function getWordStyle(uppercase: boolean, forceSnakeNameStyle: boolean): WordStyle { if (!forceSnakeNameStyle) { return originalWord; } + return uppercase ? allUpperWordStyle : allLowerWordStyle; } @@ -235,9 +241,10 @@ function snakeNameStyle(original: string, uppercase: boolean, forceSnakeNameStyl export class PythonRenderer extends ConvenienceRenderer { private readonly imports: Map> = new Map(); + private readonly declaredTypes: Set = new Set(); - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly pyOptions: OptionValues @@ -319,6 +326,7 @@ export class PythonRenderer extends ConvenienceRenderer { // potential others down the road. mapUpdateInto(this.imports, module, s => (s ? setUnionInto(s, [name]) : new Set([name]))); } + return name; } @@ -380,9 +388,11 @@ export class PythonRenderer extends ConvenienceRenderer { if (transformedStringType.kind === "date-time") { return this.withImport("datetime", "datetime"); } + if (transformedStringType.kind === "uuid") { return this.withImport("uuid", "UUID"); } + return panic(`Transformed type ${transformedStringType.kind} not supported`); } ); @@ -392,9 +402,11 @@ export class PythonRenderer extends ConvenienceRenderer { if (t instanceof ClassType) { return ["class ", this.nameForNamedType(t), ":"]; } + if (t instanceof EnumType) { return ["class ", this.nameForNamedType(t), "(", this.withImport("enum", "Enum"), "):"]; } + return panic(`Can't declare type ${t.kind}`); } @@ -431,6 +443,7 @@ export class PythonRenderer extends ConvenienceRenderer { if (this.pyOptions.features.typeHints) { return sl; } + return []; } @@ -459,6 +472,7 @@ export class PythonRenderer extends ConvenienceRenderer { if (this.pyOptions.features.dataClasses) { this.emitLine("@", this.withImport("dataclasses", "dataclass")); } + this.declareType(t, () => { if (this.pyOptions.features.typeHints) { if (t.getProperties().size === 0) { @@ -469,8 +483,10 @@ export class PythonRenderer extends ConvenienceRenderer { this.emitDescription(this.descriptionForClassProperty(t, jsonName)); }); } + this.ensureBlankLine(); } + this.emitClassMembers(t); }); } @@ -515,6 +531,7 @@ export class PythonRenderer extends ConvenienceRenderer { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } + this.ensureBlankLine(); this.emitImports(); this.ensureBlankLine(2); @@ -542,10 +559,10 @@ export type ConverterFunction = | "from-stringified-bool" | "is-type"; -type TopLevelConverterNames = { +interface TopLevelConverterNames { fromDict: Name; toDict: Name; -}; +} // A value or a lambda. All four combinations are valid: // @@ -553,10 +570,10 @@ type TopLevelConverterNames = { // * `lambda` only: a lambda given by `lambda` // * `value` only: a value given by `value` // * neither: the identity function, i.e. `lambda x: x` -export type ValueOrLambda = { - value: Sourcelike | undefined; +export interface ValueOrLambda { lambda?: MultiWord; -}; + value: Sourcelike | undefined; +} // Return the result of composing `input` and `f`. `input` can be a // value or a lambda, but `f` must be a lambda or a TypeScript function @@ -565,6 +582,8 @@ export type ValueOrLambda = { // * If `input` is a value, the result is `f(input)`. // * If `input` is a lambda, the result is `lambda x: f(input(x))` function compose(input: ValueOrLambda, f: (arg: Sourcelike) => Sourcelike): ValueOrLambda; +// FIXME: refactor this +// eslint-disable-next-line @typescript-eslint/unified-signatures function compose(input: ValueOrLambda, f: ValueOrLambda): ValueOrLambda; function compose(input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => Sourcelike)): ValueOrLambda { if (typeof f === "function") { @@ -572,10 +591,12 @@ function compose(input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => // `input` is a value, so just apply `f` to its source form. return { value: f(makeValue(input)) }; } + if (input.lambda !== undefined) { // `input` is a lambda, so build `lambda x: f(input(x))`. return { lambda: multiWord(" ", "lambda x:", f([parenIfNeeded(input.lambda), "(x)"])), value: undefined }; } + // `input` is the identify function, so the composition is `lambda x: f(x)`. return { lambda: multiWord(" ", "lambda x:", f("x")), value: undefined }; } @@ -583,6 +604,7 @@ function compose(input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => if (f.value !== undefined) { return panic("Cannot compose into a value"); } + if (f.lambda === undefined) { // `f` is the identity function, so the result is just `input`. return input; @@ -594,6 +616,7 @@ function compose(input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => // `input` is the identity function, so the result is just `f`. return f; } + // `input` is a lambda, so the result is `lambda x: f(input(x))`. return { lambda: multiWord("", "lambda x: ", parenIfNeeded(f.lambda), "(", parenIfNeeded(input.lambda), "(x))"), @@ -614,10 +637,12 @@ function makeLambda(vol: ValueOrLambda): MultiWord { if (vol.value === undefined) { return vol.lambda; } + return multiWord("", "lambda x: ", parenIfNeeded(vol.lambda), "(", vol.value, ")"); } else if (vol.value !== undefined) { return multiWord(" ", "lambda x:", vol.value); } + return multiWord(" ", "lambda x:", "x"); } @@ -627,26 +652,34 @@ function makeValue(vol: ValueOrLambda): Sourcelike { if (vol.value === undefined) { return panic("Cannot make value from lambda without value"); } + if (vol.lambda !== undefined) { return [parenIfNeeded(vol.lambda), "(", vol.value, ")"]; } + return vol.value; } export class JSONPythonRenderer extends PythonRenderer { private readonly _deserializerFunctions = new Set(); + private readonly _converterNamer = funPrefixNamer("converter", s => snakeNameStyle(s, false, this.pyOptions.nicePropertyNames) ); + private readonly _topLevelConverterNames = new Map(); + private _haveTypeVar = false; + private _haveEnumTypeVar = false; + private _haveDateutil = false; protected emitTypeVar(tvar: string, constraints: Sourcelike): void { if (!this.pyOptions.features.typeHints) { return; } + this.emitLine(tvar, " = ", this.withTyping("TypeVar"), "(", this.string(tvar), constraints, ")"); } @@ -674,6 +707,7 @@ export class JSONPythonRenderer extends PythonRenderer { if (!this.pyOptions.features.typeHints) { return v; } + return [this.withTyping("cast"), "(", type, ", ", v, ")"]; } @@ -861,34 +895,76 @@ export class JSONPythonRenderer extends PythonRenderer { protected emitConverter(cf: ConverterFunction): void { switch (cf) { - case "none": - return this.emitNoneConverter(); - case "bool": - return this.emitBoolConverter(); - case "int": - return this.emitIntConverter(); - case "from-float": - return this.emitFromFloatConverter(); - case "to-float": - return this.emitToFloatConverter(); - case "str": - return this.emitStrConverter(); - case "to-enum": - return this.emitToEnumConverter(); - case "list": - return this.emitListConverter(); - case "to-class": - return this.emitToClassConverter(); - case "dict": - return this.emitDictConverter(); - case "union": - return this.emitUnionConverter(); - case "from-datetime": - return this.emitFromDatetimeConverter(); - case "from-stringified-bool": - return this.emitFromStringifiedBoolConverter(); - case "is-type": - return this.emitIsTypeConverter(); + case "none": { + this.emitNoneConverter(); + return; + } + + case "bool": { + this.emitBoolConverter(); + return; + } + + case "int": { + this.emitIntConverter(); + return; + } + + case "from-float": { + this.emitFromFloatConverter(); + return; + } + + case "to-float": { + this.emitToFloatConverter(); + return; + } + + case "str": { + this.emitStrConverter(); + return; + } + + case "to-enum": { + this.emitToEnumConverter(); + return; + } + + case "list": { + this.emitListConverter(); + return; + } + + case "to-class": { + this.emitToClassConverter(); + return; + } + + case "dict": { + this.emitDictConverter(); + return; + } + + case "union": { + this.emitUnionConverter(); + return; + } + + case "from-datetime": { + this.emitFromDatetimeConverter(); + return; + } + + case "from-stringified-bool": { + this.emitFromStringifiedBoolConverter(); + return; + } + + case "is-type": { + this.emitIsTypeConverter(); + return; + } + default: return assertNever(cf); } @@ -925,23 +1001,27 @@ export class JSONPythonRenderer extends PythonRenderer { if (transformedStringType.kind === "date-time") { return this.withImport("datetime", "datetime"); } + if (transformedStringType.kind === "uuid") { return this.withImport("uuid", "UUID"); } + return undefined; } ); if (s === undefined) { return panic(`No type object for ${t.kind}`); } + return s; } protected transformer(inputTransformer: ValueOrLambda, xfer: Transformer, targetType: Type): ValueOrLambda { - const consume = (consumer: Transformer | undefined, vol: ValueOrLambda) => { + const consume = (consumer: Transformer | undefined, vol: ValueOrLambda): ValueOrLambda => { if (consumer === undefined) { return vol; } + return this.transformer(vol, consumer, targetType); }; @@ -994,6 +1074,7 @@ export class JSONPythonRenderer extends PythonRenderer { default: return panic(`Parsing of ${immediateTargetType.kind} in a transformer is not supported`); } + return consume(consumer, vol); } else if (xfer instanceof StringifyTransformer) { const consumer = xfer.consumer; @@ -1017,6 +1098,7 @@ export class JSONPythonRenderer extends PythonRenderer { default: return panic(`Parsing of ${xfer.sourceType.kind} in a transformer is not supported`); } + return consume(consumer, vol); } else { return panic(`Transformer ${xfer.kind} is not supported`); @@ -1031,6 +1113,7 @@ export class JSONPythonRenderer extends PythonRenderer { if (xf !== undefined) { return this.transformer(value, xf.transformer, xf.targetType); } + return matchType( t, _anyType => value, @@ -1082,9 +1165,11 @@ export class JSONPythonRenderer extends PythonRenderer { if (transformedStringType.kind === "date-time") { return this.convFn("from-datetime", value); } + if (transformedStringType.kind === "uuid") { return compose(value, v => [this.withImport("uuid", "UUID"), "(", v, ")"]); } + return panic(`Transformed type ${transformedStringType.kind} not supported`); } ); @@ -1096,6 +1181,7 @@ export class JSONPythonRenderer extends PythonRenderer { const reverse = xf.reverse; return this.transformer(value, reverse.transformer, reverse.targetType); } + return matchType( t, _anyType => value, @@ -1142,9 +1228,11 @@ export class JSONPythonRenderer extends PythonRenderer { if (transformedStringType.kind === "date-time") { return compose(value, v => [v, ".isoformat()"]); } + if (transformedStringType.kind === "uuid") { return compose(value, v => ["str(", v, ")"]); } + return panic(`Transformed type ${transformedStringType.kind} not supported`); } ); @@ -1210,6 +1298,7 @@ export class JSONPythonRenderer extends PythonRenderer { if (this._haveTypeVar) { this.emitTypeVar(this.typeVar(), []); } + if (this._haveEnumTypeVar) { this.emitTypeVar(this.enumTypeVar(), [", bound=", this.withImport("enum", "Enum")]); } @@ -1243,6 +1332,7 @@ export class JSONPythonRenderer extends PythonRenderer { "" ]); } + this.emitCommentLines([ "To use this code, make sure you", "", diff --git a/packages/quicktype-core/src/language/Rust.ts b/packages/quicktype-core/src/language/Rust.ts index 56b464161..8dcf5b93a 100644 --- a/packages/quicktype-core/src/language/Rust.ts +++ b/packages/quicktype-core/src/language/Rust.ts @@ -1,39 +1,41 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { mapFirst } from "collection-utils"; -import { TargetLanguage } from "../TargetLanguage"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../Source"; import { - legalizeCharacters, - splitIntoWords, - isLetterOrUnderscoreOrDigit, - combineWords, allLowerWordStyle, + combineWords, + escapeNonPrintableMapper, firstUpperWordStyle, intToHex, - utf32ConcatMap, - escapeNonPrintableMapper, - isPrintable, isAscii, - isLetterOrUnderscore + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap } from "../support/Strings"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { UnionType, Type, ClassType, EnumType } from "../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { Sourcelike, maybeAnnotated } from "../Source"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { BooleanOption, EnumOption, Option, getOptionValues, OptionValues } from "../RendererOptions"; import { defined } from "../support/Support"; -import { RenderContext } from "../Renderer"; +import { TargetLanguage } from "../TargetLanguage"; +import { type ClassType, type EnumType, type Type, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; export enum Density { - Normal, - Dense + Normal = "Normal", + Dense = "Dense" } export enum Visibility { - Private, - Crate, - Public + Private = "Private", + Crate = "Crate", + Public = "Public" } export const rustOptions = { @@ -56,11 +58,11 @@ export const rustOptions = { type NameToParts = (name: string) => string[]; type PartsToName = (parts: string[]) => string; -type NamingStyle = { +interface NamingStyle { + fromParts: PartsToName; regex: RegExp; toParts: NameToParts; - fromParts: PartsToName; -}; +} const namingStyles: Record = { snake_case: { @@ -112,15 +114,15 @@ const namingStyles: Record = { }; export class RustTargetLanguage extends TargetLanguage { - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): RustRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RustRenderer { return new RustRenderer(this, renderContext, getOptionValues(rustOptions, untypedOptionValues)); } - constructor() { + public constructor() { super("Rust", ["rust", "rs", "rustlang"], "rs"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ rustOptions.density, rustOptions.visibility, @@ -262,7 +264,7 @@ const standardUnicodeRustEscape = (codePoint: number): string => { const rustStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeRustEscape)); export class RustRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -346,7 +348,7 @@ export class RustRenderer extends ConvenienceRenderer { ); } - private breakCycle(t: Type, withIssues: boolean): any { + private breakCycle(t: Type, withIssues: boolean): Sourcelike { const rustType = this.rustType(t, withIssues); const isCycleBreaker = this.isCycleBreakerType(t); @@ -358,7 +360,7 @@ export class RustRenderer extends ConvenienceRenderer { jsonName: string, defaultNamingStyle: string, preferedNamingStyle: string - ) { + ): void { const escapedName = rustStringEscape(jsonName); const name = namingStyles[defaultNamingStyle].fromParts(this.sourcelikeToString(propName).split(" ")); const styledName = nameToNamingStyle(name, preferedNamingStyle); @@ -368,7 +370,7 @@ export class RustRenderer extends ConvenienceRenderer { } } - private emitSkipSerializeNone(t: Type) { + private emitSkipSerializeNone(t: Type): void { if (t instanceof UnionType) { const nullable = nullableFromUnion(t); if (nullable !== null) this.emitLine('#[serde(skip_serializing_if = "Option::is_none")]'); @@ -381,6 +383,7 @@ export class RustRenderer extends ConvenienceRenderer { } else if (this._options.visibility === Visibility.Public) { return "pub "; } + return ""; } @@ -408,11 +411,14 @@ export class RustRenderer extends ConvenienceRenderer { } const blankLines = this._options.density === Density.Dense ? "none" : "interposing"; - const structBody = () => + const structBody = (): void => this.forEachClassProperty(c, blankLines, (name, jsonName, prop) => { this.emitDescription(this.descriptionForClassProperty(c, jsonName)); this.emitRenameAttribute(name, jsonName, defaultStyle, preferedNamingStyle); - this._options.skipSerializingNone && this.emitSkipSerializeNone(prop.type); + if (this._options.skipSerializingNone) { + this.emitSkipSerializeNone(prop.type); + } + this.emitLine(this.visibility, name, ": ", this.breakCycle(prop.type, true), ","); }); @@ -516,6 +522,7 @@ export class RustRenderer extends ConvenienceRenderer { if (this._options.leadingComments) { this.emitLeadingComments(); } + this.ensureBlankLine(); if (this._options.edition2018) { this.emitLine("use serde::{Serialize, Deserialize};"); @@ -552,6 +559,7 @@ function getPreferedNamingStyle(namingStyleOccurences: string[], defaultStyle: s if (preferedStyles.includes(defaultStyle)) { return defaultStyle; } + return preferedStyles[0]; } @@ -565,9 +573,11 @@ function nameToNamingStyle(name: string, style: string): string { if (namingStyles[style].regex.test(name)) { return name; } + const fromStyle = listMatchingNamingStyles(name)[0]; if (fromStyle === undefined) { return name; } + return namingStyles[style].fromParts(namingStyles[fromStyle].toParts(name)); } diff --git a/packages/quicktype-core/src/language/Scala3.ts b/packages/quicktype-core/src/language/Scala3.ts index 2f5c34e81..75da0773f 100644 --- a/packages/quicktype-core/src/language/Scala3.ts +++ b/packages/quicktype-core/src/language/Scala3.ts @@ -1,8 +1,9 @@ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { EnumOption, Option, StringOption, OptionValues, getOptionValues } from "../RendererOptions"; -import { Sourcelike, maybeAnnotated } from "../Source"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../Source"; import { allLowerWordStyle, allUpperWordStyle, @@ -16,14 +17,23 @@ import { } from "../support/Strings"; import { assertNever } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, ClassProperty, ClassType, EnumType, MapType, ObjectType, Type, UnionType } from "../Type"; +import { + ArrayType, + type ClassProperty, + type ClassType, + type EnumType, + MapType, + type ObjectType, + type Type, + type UnionType +} from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { RenderContext } from "../Renderer"; export enum Framework { - None, - Upickle, - Circe + None = "None", + Upickle = "Upickle", + Circe = "Circe" } export const scala3Options = { @@ -177,7 +187,7 @@ function scalaNameStyle(isUpper: boolean, original: string): string { return "\\u" + intToHex(codePoint, 4); } */ -//const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); +// const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); /* function stringEscape(s: string): string { // "$this" is a template string in Kotlin so we have to escape $ @@ -188,7 +198,7 @@ const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s) const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); export class Scala3Renderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _scalaOptions: OptionValues @@ -275,7 +285,7 @@ export class Scala3Renderer extends ConvenienceRenderer { return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional)); }, _nullType => { - //return "None.type" + // return "None.type" return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional)); }, _boolType => "Boolean", @@ -295,10 +305,12 @@ export class Scala3Renderer extends ConvenienceRenderer { return ["Option[", this.scalaType(nullable, withIssues), "]"]; } } + return this.nameForNamedType(unionType); } ); } + protected emitUsageHeader(): void { // To be overridden } @@ -336,7 +348,7 @@ export class Scala3Renderer extends ConvenienceRenderer { return; } - const scalaType = (p: ClassProperty) => { + const scalaType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return ["Option[", this.scalaType(p.type, true, true), "]"]; } else { @@ -367,6 +379,7 @@ export class Scala3Renderer extends ConvenienceRenderer { for (const emit of meta) { emit(); } + const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; this.emitLine( @@ -389,7 +402,7 @@ export class Scala3Renderer extends ConvenienceRenderer { this.emitClassDefinitionMethods(); } - protected emitClassDefinitionMethods() { + protected emitClassDefinitionMethods(): void { this.emitLine(")"); } @@ -403,6 +416,7 @@ export class Scala3Renderer extends ConvenienceRenderer { if (count > 0) { this.emitItem("\t case "); } + this.forEachEnumCase(e, "none", (name, jsonName) => { if (!(jsonName == "")) { const backticks = @@ -412,10 +426,12 @@ export class Scala3Renderer extends ConvenienceRenderer { if (backticks) { this.emitItem("`"); } + this.emitItemOnce([name]); if (backticks) { this.emitItem("`"); } + if (--count > 0) this.emitItem([","]); } else { --count; @@ -436,7 +452,7 @@ export class Scala3Renderer extends ConvenienceRenderer { this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Array = []; + const theTypes: Sourcelike[] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { theTypes.push(this.scalaType(t)); }); @@ -473,7 +489,7 @@ export class Scala3Renderer extends ConvenienceRenderer { } export class UpickleRenderer extends Scala3Renderer { - protected emitClassDefinitionMethods() { + protected emitClassDefinitionMethods(): void { this.emitLine(") derives ReadWriter "); } @@ -486,9 +502,9 @@ export class UpickleRenderer extends Scala3Renderer { } export class CirceRenderer extends Scala3Renderer { - seenUnionTypes: Array = []; + private seenUnionTypes: string[] = []; - protected circeEncoderForType(t: Type, _ = false, noOptional = false, paramName: string = ""): Sourcelike { + protected circeEncoderForType(t: Type, __ = false, noOptional = false, paramName: string = ""): Sourcelike { return matchType( t, _anyType => ["Encoder.encodeJson(", paramName, ")"], @@ -510,6 +526,7 @@ export class CirceRenderer extends Scala3Renderer { return ["Encoder.AsObject[Option[", this.nameForNamedType(nullable), "]]"]; } } + return ["Encoder.AsObject[", this.nameForNamedType(unionType), "]"]; } ); @@ -525,7 +542,7 @@ export class CirceRenderer extends Scala3Renderer { return [wrapOption("Json", optional)]; } - protected emitClassDefinitionMethods() { + protected emitClassDefinitionMethods(): void { this.emitLine(") derives Encoder.AsObject, Decoder"); } @@ -545,9 +562,9 @@ export class CirceRenderer extends Scala3Renderer { this.emitItem(['"', jsonName, '"']); // if (backticks) {this.emitItem("`")} if (--count > 0) this.emitItem([" | "]); - //} else { - //--count - //} + // } else { + // --count + // } }); this.ensureBlankLine(); } @@ -612,7 +629,7 @@ export class CirceRenderer extends Scala3Renderer { this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Array = []; + const theTypes: Sourcelike[] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { theTypes.push(this.scalaType(t)); }); @@ -671,26 +688,23 @@ export class CirceRenderer extends Scala3Renderer { } export class Scala3TargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Scala3", ["scala3"], "scala"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [scala3Options.framework, scala3Options.packageName]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): ConvenienceRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { const options = getOptionValues(scala3Options, untypedOptionValues); switch (options.framework) { diff --git a/packages/quicktype-core/src/language/Smithy4s.ts b/packages/quicktype-core/src/language/Smithy4s.ts index 3a875be64..163b33073 100644 --- a/packages/quicktype-core/src/language/Smithy4s.ts +++ b/packages/quicktype-core/src/language/Smithy4s.ts @@ -1,8 +1,9 @@ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { EnumOption, Option, StringOption, OptionValues, getOptionValues } from "../RendererOptions"; -import { Sourcelike, maybeAnnotated } from "../Source"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../Source"; import { allLowerWordStyle, allUpperWordStyle, @@ -16,12 +17,21 @@ import { } from "../support/Strings"; import { assertNever } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, ClassProperty, ClassType, EnumType, MapType, ObjectType, Type, UnionType } from "../Type"; +import { + ArrayType, + type ClassProperty, + type ClassType, + type EnumType, + MapType, + type ObjectType, + type Type, + type UnionType +} from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { RenderContext } from "../Renderer"; export enum Framework { - None + None = "None" } export const SmithyOptions = { @@ -148,7 +158,7 @@ const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s) const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); export class Smithy4sRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _scalaOptions: OptionValues @@ -221,7 +231,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { // (asarazan): I've broken out the following two functions // because some renderers, such as kotlinx, can cope with `any`, while some get mad. protected arrayType(arrayType: ArrayType, _ = false): Sourcelike { - //this.emitTopLevelArray(arrayType, new Name(arrayType.getCombinedName().toString() + "List")) + // this.emitTopLevelArray(arrayType, new Name(arrayType.getCombinedName().toString() + "List")) return arrayType.getCombinedName().toString() + "List"; } @@ -231,7 +241,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { protected mapType(mapType: MapType, _ = false): Sourcelike { return mapType.getCombinedName().toString() + "Map"; - //return [this.scalaType(mapType.values, withIssues), "Map"]; + // return [this.scalaType(mapType.values, withIssues), "Map"]; } protected scalaType(t: Type, withIssues = false, noOptional = false): Sourcelike { @@ -241,7 +251,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional)); }, _nullType => { - //return "None.type" + // return "None.type" return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional)); }, _boolType => "Boolean", @@ -257,6 +267,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { if (nullable !== null) { return [this.scalaType(nullable, withIssues)]; } + return this.nameForNamedType(unionType); } ); @@ -303,7 +314,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { return; } - const scalaType = (p: ClassProperty) => { + const scalaType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return [this.scalaType(p.type, true, true)]; } else { @@ -311,7 +322,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { } }; - const emitLater: Array = []; + const emitLater: ClassProperty[] = []; this.emitDescription(this.descriptionForType(c)); this.emitLine("structure ", className, " {"); @@ -342,6 +353,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { for (const emit of meta) { emit(); } + const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; this.emitLine( @@ -363,12 +375,13 @@ export class Smithy4sRenderer extends ConvenienceRenderer { this.emitClassDefinitionMethods(emitLater); } - protected emitClassDefinitionMethods(arrayTypes: ClassProperty[]) { + protected emitClassDefinitionMethods(arrayTypes: ClassProperty[]): void { this.emitLine("}"); arrayTypes.forEach(p => { function ignore(_: T): void { return; } + matchCompoundType( p.type, at => { @@ -416,9 +429,9 @@ export class Smithy4sRenderer extends ConvenienceRenderer { // if (backticks) {this.emitItem("`")} if (--count > 0) this.emitItem([","]); - //} else { - //--count - //} + // } else { + // --count + // } }); this.ensureBlankLine(); @@ -432,17 +445,18 @@ export class Smithy4sRenderer extends ConvenienceRenderer { return "_" + kind; } - const emitLater: Array = []; + const emitLater: Type[] = []; this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Array = []; + const theTypes: Sourcelike[] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { const laterType = t.kind === "array" || t.kind === "map"; if (laterType) { emitLater.push(t); } + theTypes.push(this.scalaType(t)); }); if (maybeNull !== null) { @@ -462,6 +476,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { function ignore(_: T): void { return; } + matchCompoundType( p, at => { @@ -511,26 +526,23 @@ export class Smithy4sRenderer extends ConvenienceRenderer { } export class SmithyTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Smithy", ["Smithy"], "smithy"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [SmithyOptions.framework, SmithyOptions.packageName]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): ConvenienceRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { const options = getOptionValues(SmithyOptions, untypedOptionValues); switch (options.framework) { diff --git a/packages/quicktype-core/src/language/Swift.ts b/packages/quicktype-core/src/language/Swift.ts index cb02665de..cb801de2b 100644 --- a/packages/quicktype-core/src/language/Swift.ts +++ b/packages/quicktype-core/src/language/Swift.ts @@ -1,47 +1,54 @@ import { arrayIntercalate } from "collection-utils"; -import { assert, defined } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - Type, - ClassType, - EnumType, - UnionType, - ArrayType, - MapType, - TypeKind, - ClassProperty, - TransformedStringTypeKind, - PrimitiveStringTypeKind -} from "../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { BooleanOption, EnumOption, Option, StringOption, OptionValues, getOptionValues } from "../RendererOptions"; -import { Sourcelike, maybeAnnotated, modifySource } from "../Source"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; +import { type DateTimeRecognizer, DefaultDateTimeRecognizer } from "../DateTime"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type ForEachPosition, type RenderContext } from "../Renderer"; import { - legalizeCharacters, + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; +import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; +import { + addPrefixIfNecessary, + allLowerWordStyle, + allUpperWordStyle, + camelCase, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + intToHex, + isDigit, isLetterOrUnderscore, isNumeric, - isDigit, - utf32ConcatMap, - escapeNonPrintableMapper, isPrintable, - intToHex, + legalizeCharacters, splitIntoWords, - combineWords, - firstUpperWordStyle, - allLowerWordStyle, - allUpperWordStyle, - camelCase, - addPrefixIfNecessary + utf32ConcatMap } from "../support/Strings"; -import { RenderContext, ForEachPosition } from "../Renderer"; -import { StringTypeMapping } from "../TypeBuilder"; -import { panic } from "../support/Support"; -import { DefaultDateTimeRecognizer, DateTimeRecognizer } from "../DateTime"; -import { acronymOption, acronymStyle, AcronymStyleOptions } from "../support/Acronyms"; +import { assert, defined, panic } from "../support/Support"; +import { TargetLanguage } from "../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + type ClassType, + EnumType, + MapType, + type PrimitiveStringTypeKind, + type TransformedStringTypeKind, + type Type, + type TypeKind, + type UnionType +} from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; const MAX_SAMELINE_PROPERTIES = 4; @@ -125,24 +132,24 @@ export const swiftOptions = { const swiftDateTimeRegex = /^\d+-\d+-\d+T\d+:\d+:\d+([zZ]|[+-]\d+(:\d+)?)$/; class SwiftDateTimeRecognizer extends DefaultDateTimeRecognizer { - isDateTime(str: string): boolean { - return str.match(swiftDateTimeRegex) !== null; + public isDateTime(str: string): boolean { + return swiftDateTimeRegex.exec(str) !== null; } } export interface SwiftProperty { - name: Name; jsonName: string; + name: Name; parameter: ClassProperty; position: ForEachPosition; } export class SwiftTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Swift", ["swift", "swift4"], "swift"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ swiftOptions.justTypes, swiftOptions.useClasses, @@ -165,25 +172,25 @@ export class SwiftTargetLanguage extends TargetLanguage { ]; } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date-time", "date-time"); return mapping; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - get supportsUnionsWithBothNumberTypes(): boolean { + public get supportsUnionsWithBothNumberTypes(): boolean { return true; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): SwiftRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): SwiftRenderer { return new SwiftRenderer(this, renderContext, getOptionValues(swiftOptions, untypedOptionValues)); } - get dateTimeRecognizer(): DateTimeRecognizer { + public get dateTimeRecognizer(): DateTimeRecognizer { return new SwiftDateTimeRecognizer(); } } @@ -328,10 +335,12 @@ const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicod export class SwiftRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; + private _needAny = false; + private _needNull = false; - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -343,6 +352,7 @@ export class SwiftRenderer extends ConvenienceRenderer { if (this._options.alamofire) { return ["DataRequest", ...keywords]; } + return keywords; } @@ -400,7 +410,7 @@ export class SwiftRenderer extends ConvenienceRenderer { else return notJustTypes; } - private get lowerNamingFunction() { + private get lowerNamingFunction(): Namer { return funPrefixNamer("lower", s => swiftNameStyle("", false, s, acronymStyle(this._options.acronymStyle))); } @@ -459,9 +469,11 @@ export class SwiftRenderer extends ConvenienceRenderer { if (kind === "enum") { return "enumeration"; } + if (kind === "union") { return "one_of"; } + return null; } @@ -538,14 +550,17 @@ export class SwiftRenderer extends ConvenienceRenderer { this.emitLine("// synthesized for types that have collections (such as arrays or dictionaries)."); } } + this.ensureBlankLine(); this.emitLineOnce("import Foundation"); if (!this._options.justTypes && this._options.alamofire) { this.emitLineOnce("import Alamofire"); } + if (this._options.optionalEnums) { this.emitLineOnce("import OptionallyDecodable // https://github.com/idrougge/OptionallyDecodable"); } + this.ensureBlankLine(); } @@ -590,11 +605,12 @@ export class SwiftRenderer extends ConvenienceRenderer { if (baseClass) { protocols.unshift(baseClass); } + return protocols.length > 0 ? ": " + protocols.join(", ") : ""; } - private getEnumPropertyGroups(c: ClassType) { - type PropertyGroup = { name: Name; label?: string }[]; + private getEnumPropertyGroups(c: ClassType): typeof groups { + type PropertyGroup = Array<{ label?: string; name: Name }>; let groups: PropertyGroup[] = []; let group: PropertyGroup = []; @@ -610,6 +626,7 @@ export class SwiftRenderer extends ConvenienceRenderer { groups.push(group); group = []; } + groups.push([{ name, label }]); } }); @@ -690,7 +707,7 @@ export class SwiftRenderer extends ConvenienceRenderer { let lastProperty: ClassProperty | undefined = undefined; let lastNames: Name[] = []; - const emitLastProperty = () => { + const emitLastProperty = (): void => { if (lastProperty === undefined) return; const useMutableProperties = this._options.mutableProperties; @@ -698,7 +715,7 @@ export class SwiftRenderer extends ConvenienceRenderer { let sources: Sourcelike[] = [ [ this._options.optionalEnums && lastProperty.type.kind === "enum" - ? `@OptionallyDecodable ` + ? "@OptionallyDecodable " : "", this.accessLevel, useMutableProperties || (this._options.optionalEnums && lastProperty.type.kind === "enum") @@ -721,15 +738,17 @@ export class SwiftRenderer extends ConvenienceRenderer { this.forEachClassProperty(c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); if ( - !p.equals(lastProperty) || + (lastProperty && !p.equals(lastProperty)) || lastNames.length >= MAX_SAMELINE_PROPERTIES || description !== undefined ) { emitLastProperty(); } + if (lastProperty === undefined) { lastProperty = p; } + lastNames.push(name); if (description !== undefined) { this.emitDescription(description); @@ -759,6 +778,7 @@ export class SwiftRenderer extends ConvenienceRenderer { enumDeclaration += ", "; enumDeclaration += this._options.codingKeysProtocol; } + this.emitBlock(enumDeclaration, () => { for (const group of groups) { const { name, label } = group[0]; @@ -792,6 +812,7 @@ export class SwiftRenderer extends ConvenienceRenderer { if (propertiesLines.length > 0) propertiesLines.push(", "); propertiesLines.push(property.name, ": ", this.swiftPropertyType(property.parameter)); } + if (this.propertyCount(c) === 0 && this._options.objcSupport) { this.emitBlockWithAccess(["override init()"], () => { return ""; @@ -856,6 +877,7 @@ export class SwiftRenderer extends ConvenienceRenderer { throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date")) })`); } + this.emitLine("return decoder"); }); this.ensureBlankLine(); @@ -873,6 +895,7 @@ formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX" encoder.dateEncodingStrategy = .formatted(formatter)`); } + this.emitLine("return encoder"); }); } @@ -889,6 +912,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); } else { this.emitLine("let _ = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)"); } + let args: Sourcelike[] = []; this.forEachClassProperty(c, "none", name => { if (args.length > 0) args.push(", "); @@ -901,18 +925,19 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.emitLine("self = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)"); }); } + this.ensureBlankLine(); this.emitBlock( [convenience, "init(_ json: String, using encoding: String.Encoding = .utf8) throws"], () => { this.emitBlock("guard let data = json.data(using: encoding) else", () => { - this.emitLine(`throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)`); + this.emitLine('throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)'); }); this.emitLine("try self.init(data: data)"); } ); this.ensureBlankLine(); - this.emitBlock([convenience, `init(fromURL url: URL) throws`], () => { + this.emitBlock([convenience, "init(fromURL url: URL) throws"], () => { this.emitLine("try self.init(data: try Data(contentsOf: url))"); }); @@ -921,11 +946,11 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); // Convenience serializers this.ensureBlankLine(); - this.emitBlock(`func jsonData() throws -> Data`, () => { + this.emitBlock("func jsonData() throws -> Data", () => { this.emitLine("return try newJSONEncoder().encode(self)"); }); this.ensureBlankLine(); - this.emitBlock(`func jsonString(encoding: String.Encoding = .utf8) throws -> String?`, () => { + this.emitBlock("func jsonString(encoding: String.Encoding = .utf8) throws -> String?", () => { this.emitLine("return String(data: try self.jsonData(), encoding: encoding)"); }); }); @@ -1000,12 +1025,14 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); if (t.kind === "bool" || t.kind === "integer") continue; renderUnionCase(t); } + if (maybeNull !== null) { this.emitBlock("if container.decodeNil()", () => { this.emitLine("self = .", this.nameForUnionMember(u, maybeNull)); this.emitLine("return"); }); } + this.emitDecodingError(unionName); }); this.ensureBlankLine(); @@ -1020,6 +1047,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.emitLine("case .", this.nameForUnionMember(u, maybeNull), ":"); this.indent(() => this.emitLine("try container.encodeNil()")); } + this.emitLine("}"); }); } @@ -1045,12 +1073,12 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.ensureBlankLine(); this.emitBlock("init(_ json: String, using encoding: String.Encoding = .utf8) throws", () => { this.emitBlock("guard let data = json.data(using: encoding) else", () => { - this.emitLine(`throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)`); + this.emitLine('throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)'); }); this.emitLine("try self.init(data: data)"); }); this.ensureBlankLine(); - this.emitBlock(`init(fromURL url: URL) throws`, () => { + this.emitBlock("init(fromURL url: URL) throws", () => { this.emitLine("try self.init(data: try Data(contentsOf: url))"); }); this.ensureBlankLine(); @@ -1074,7 +1102,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); ); } - private emitSupportFunctions4 = (): void => { + private readonly emitSupportFunctions4 = (): void => { this.startFile("JSONSchemaSupport"); this.emitLineOnce("import Foundation"); @@ -1117,6 +1145,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); } else { this.emitLine(this.accessLevel, "class JSONNull: Codable, Hashable {"); } + this.ensureBlankLine(); this.emitMultiline(` public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool { return true @@ -1142,6 +1171,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); } else { this.emitItem(" "); } + this.emitMultiline(`public init() {} public required init(from decoder: Decoder) throws { @@ -1157,6 +1187,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); } }`); } + if (this._needAny) { this.ensureBlankLine(); this.emitMultiline(`class JSONCodingKey: CodingKey { @@ -1185,6 +1216,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); } else { this.emitLine(this.accessLevel, "class JSONAny: Codable {"); } + this.ensureBlankLine(); this.emitMultiline(` ${this.accessLevel}let value: Any @@ -1383,7 +1415,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.endFile(); }; - private emitConvenienceMutator(c: ClassType, className: Name) { + private emitConvenienceMutator(c: ClassType, className: Name): void { this.emitLine("func with("); this.indent(() => { this.forEachClassProperty(c, "none", (name, _, p, position) => { @@ -1414,7 +1446,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); }); } - protected emitMark(line: Sourcelike, horizontalLine = false) { + protected emitMark(line: Sourcelike, horizontalLine = false): void { this.emitLine("// MARK:", horizontalLine ? " - " : " ", line); } @@ -1435,7 +1467,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); } } - private emitAlamofireExtension() { + private emitAlamofireExtension(): void { this.ensureBlankLine(); this.emitBlockWithAccess("extension DataRequest", () => { this @@ -1467,7 +1499,7 @@ fileprivate func responseDecodable(queue: DispatchQueue? = nil, co ">) -> Void) -> Self" ], () => { - this.emitLine(`return responseDecodable(queue: queue, completionHandler: completionHandler)`); + this.emitLine("return responseDecodable(queue: queue, completionHandler: completionHandler)"); } ); }); diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts index 1d0790084..c3844d847 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts @@ -1,10 +1,11 @@ import { arrayIntercalate } from "collection-utils"; -import { ArrayType, ClassProperty, EnumType, MapType, ObjectType, Type } from "../Type"; -import { matchType } from "../TypeUtils"; -import { funPrefixNamer, Name, Namer } from "../Naming"; -import { RenderContext } from "../Renderer"; -import { BooleanOption, getOptionValues, Option, OptionValues } from "../RendererOptions"; -import { acronymStyle, AcronymStyleOptions } from "../support/Acronyms"; + +import { ConvenienceRenderer } from "../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type Sourcelike } from "../Source"; +import { AcronymStyleOptions, acronymStyle } from "../support/Acronyms"; import { allLowerWordStyle, capitalize, @@ -15,22 +16,24 @@ import { stringEscape, utf16StringEscape } from "../support/Strings"; +import { panic } from "../support/Support"; import { TargetLanguage } from "../TargetLanguage"; +import { ArrayType, type ClassProperty, EnumType, MapType, type ObjectType, type Type } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType } from "../TypeUtils"; + import { legalizeName } from "./JavaScript"; -import { Sourcelike } from "../Source"; -import { panic } from "../support/Support"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; export const typeScriptEffectSchemaOptions = { justSchema: new BooleanOption("just-schema", "Schema only", false) }; export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { - protected getOptions(): Option[] { + protected getOptions(): Array> { return []; } - constructor( + public constructor( displayName: string = "TypeScript Effect Schema", names: string[] = ["typescript-effect-schema"], extension: string = "ts" @@ -40,7 +43,7 @@ export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { protected makeRenderer( renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } + untypedOptionValues: FixMeOptionsType ): TypeScriptEffectSchemaRenderer { return new TypeScriptEffectSchemaRenderer( this, @@ -51,7 +54,9 @@ export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { } export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { - constructor( + private emittedObjects = new Set(); + + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -71,7 +76,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, - upper ? s => capitalize(acronyms(s)) : allLowerWordStyle, + upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isLetterOrUnderscore @@ -103,19 +108,18 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { this.emitLine(this.importStatement("* as S", '"@effect/schema/Schema"')); } - typeMapTypeForProperty(p: ClassProperty): Sourcelike { + private typeMapTypeForProperty(p: ClassProperty): Sourcelike { const typeMap = this.typeMapTypeFor(p.type); return p.isOptional ? ["S.optional(", typeMap, ")"] : typeMap; } - emittedObjects = new Set(); - - typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { + private typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { if (t.kind === "class" || t.kind === "object" || t.kind === "enum") { const name = this.nameForNamedType(t); if (this.emittedObjects.has(name)) { return [name]; } + return ["S.suspend(() => ", name, ")"]; } @@ -149,7 +153,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { return match; } - private emitObject(name: Name, t: ObjectType) { + private emitObject(name: Name, t: ObjectType): void { this.emittedObjects.add(name); this.ensureBlankLine(); this.emitLine("\nexport class ", name, " extends S.Class<", name, '>("', name, '")({'); @@ -177,10 +181,10 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { } } - protected walkObjectNames(type: ObjectType) { - const names: Array = []; + protected walkObjectNames(objectType: ObjectType): Name[] { + const names: Name[] = []; - const recurse = (type: Type) => { + const recurse = (type: Type): void => { if (type.kind === "object" || type.kind === "class") { names.push(this.nameForNamedType(type)); this.forEachClassProperty(type as ObjectType, "none", (_, __, prop) => { @@ -197,7 +201,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { } }; - this.forEachClassProperty(type, "none", (_, __, prop) => { + this.forEachClassProperty(objectType, "none", (_, __, prop) => { recurse(prop.type); }); @@ -228,18 +232,18 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { const names = this.walkObjectNames(source); // must be behind all these names - for (let i = 0; i < names.length; i++) { - const depName = names[i]; + names.forEach(name => { + const depName = name; // find this name's ordinal, if it has already been added - for (let j = 0; j < order.length; j++) { - const depIndex = order[j]; + order.forEach(orderItem => { + const depIndex = orderItem; if (mapKey[depIndex] === depName) { // this is the index of the dependency, so make sure we come after it ordinal = Math.max(ordinal, depIndex + 1); } - } - } + }); + }); // insert index order.splice(ordinal, 0, index); diff --git a/packages/quicktype-core/src/language/TypeScriptFlow.ts b/packages/quicktype-core/src/language/TypeScriptFlow.ts index fec297445..202b95b4e 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow.ts @@ -1,20 +1,21 @@ -import { Type, ArrayType, UnionType, ClassType, EnumType } from "../Type"; -import { matchType, nullableFromUnion, isNamedType } from "../TypeUtils"; -import { utf16StringEscape, camelCase } from "../support/Strings"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type MultiWord, type Sourcelike, modifySource, multiWord, parenIfNeeded, singleWord } from "../Source"; +import { camelCase, utf16StringEscape } from "../support/Strings"; +import { defined, panic } from "../support/Support"; +import { type TargetLanguage } from "../TargetLanguage"; +import { ArrayType, type ClassType, EnumType, type Type, UnionType } from "../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { isNamedType, matchType, nullableFromUnion } from "../TypeUtils"; -import { Sourcelike, modifySource, MultiWord, singleWord, parenIfNeeded, multiWord } from "../Source"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { BooleanOption, Option, OptionValues, getOptionValues } from "../RendererOptions"; import { - javaScriptOptions, - JavaScriptTargetLanguage, JavaScriptRenderer, - JavaScriptTypeAnnotations, + JavaScriptTargetLanguage, + type JavaScriptTypeAnnotations, + javaScriptOptions, legalizeName } from "./JavaScript"; -import { defined, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { RenderContext } from "../Renderer"; import { isES3IdentifierStart } from "./JavaScriptUnicodeMaps"; export const tsFlowOptions = Object.assign({}, javaScriptOptions, { @@ -41,7 +42,7 @@ const tsFlowTypeAnnotations = { }; export abstract class TypeScriptFlowBaseTargetLanguage extends JavaScriptTargetLanguage { - protected getOptions(): Option[] { + protected getOptions(): Array> { return [ tsFlowOptions.justTypes, tsFlowOptions.nicePropertyNames, @@ -58,25 +59,22 @@ export abstract class TypeScriptFlowBaseTargetLanguage extends JavaScriptTargetL ]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } protected abstract makeRenderer( renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } + untypedOptionValues: FixMeOptionsType ): JavaScriptRenderer; } export class TypeScriptTargetLanguage extends TypeScriptFlowBaseTargetLanguage { - constructor() { + public constructor() { super("TypeScript", ["typescript", "ts", "tsx"], "ts"); } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): TypeScriptRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): TypeScriptRenderer { return new TypeScriptRenderer(this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues)); } } @@ -99,7 +97,7 @@ function quotePropertyName(original: string): string { } export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _tsFlowOptions: OptionValues @@ -120,9 +118,11 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { const item = t.cases.values().next().value; return singleWord(`"${utf16StringEscape(item)}"`); } - if (["class", "object", "enum"].indexOf(t.kind) >= 0) { + + if (["class", "object", "enum"].includes(t.kind)) { return singleWord(this.nameForNamedType(t)); } + return matchType( t, _anyType => singleWord("any"), @@ -157,6 +157,7 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { if (transformedStringType.kind === "date-time") { return singleWord("Date"); } + return singleWord("string"); } ); @@ -189,12 +190,12 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { } } - private emitClass(c: ClassType, className: Name) { + private emitClass(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitClassBlock(c, className); } - emitUnion(u: UnionType, unionName: Name) { + protected emitUnion(u: UnionType, unionName: Name): void { if (!this._tsFlowOptions.declareUnions) { return; } @@ -211,6 +212,7 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { if (!t.isPrimitive()) { return; } + this.ensureBlankLine(); this.emitDescription(this.descriptionForType(t)); this.emitLine("type ", name, " = ", this.sourceFor(t).source, ";"); @@ -324,6 +326,7 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { items += `"${utf16StringEscape(item)}"`; return; } + items += ` | "${utf16StringEscape(item)}"`; }); this.emitLine("export type ", enumName, " = ", items, ";"); @@ -354,11 +357,11 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { } export class FlowTargetLanguage extends TypeScriptFlowBaseTargetLanguage { - constructor() { + public constructor() { super("Flow", ["flow"], "js"); } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): FlowRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): FlowRenderer { return new FlowRenderer(this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues)); } } @@ -395,7 +398,7 @@ export class FlowRenderer extends TypeScriptFlowBaseRenderer { }); } - protected emitSourceStructure() { + protected emitSourceStructure(): void { this.emitLine("// @flow"); this.ensureBlankLine(); super.emitSourceStructure(); diff --git a/packages/quicktype-core/src/language/TypeScriptZod.ts b/packages/quicktype-core/src/language/TypeScriptZod.ts index b2197624a..ada7494a9 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod.ts @@ -1,23 +1,10 @@ -import { StringTypeMapping } from "TypeBuilder"; import { arrayIntercalate } from "collection-utils"; + import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { Name, Namer, funPrefixNamer } from "../Naming"; -import { RenderContext } from "../Renderer"; -import { BooleanOption, Option, OptionValues, getOptionValues } from "../RendererOptions"; -import { Sourcelike } from "../Source"; -import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayType, - ClassProperty, - ClassType, - EnumType, - ObjectType, - PrimitiveStringTypeKind, - SetOperationType, - TransformedStringTypeKind, - Type -} from "../Type"; -import { matchType } from "../TypeUtils"; +import { type Name, type Namer, funPrefixNamer } from "../Naming"; +import { type RenderContext } from "../Renderer"; +import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; +import { type Sourcelike } from "../Source"; import { AcronymStyleOptions, acronymStyle } from "../support/Acronyms"; import { allLowerWordStyle, @@ -30,6 +17,22 @@ import { utf16StringEscape } from "../support/Strings"; import { panic } from "../support/Support"; +import { TargetLanguage } from "../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + ClassType, + type EnumType, + ObjectType, + type PrimitiveStringTypeKind, + SetOperationType, + type TransformedStringTypeKind, + type Type +} from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; +import { matchType } from "../TypeUtils"; + import { legalizeName } from "./JavaScript"; export const typeScriptZodOptions = { @@ -37,11 +40,11 @@ export const typeScriptZodOptions = { }; export class TypeScriptZodTargetLanguage extends TargetLanguage { - protected getOptions(): Option[] { + protected getOptions(): Array> { return []; } - constructor( + public constructor( displayName: string = "TypeScript Zod", names: string[] = ["typescript-zod"], extension: string = "ts" @@ -49,21 +52,18 @@ export class TypeScriptZodTargetLanguage extends TargetLanguage { super(displayName, names, extension); } - get stringTypeMapping(): StringTypeMapping { + public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date-time", dateTimeType); return mapping; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: { [name: string]: any } - ): TypeScriptZodRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): TypeScriptZodRenderer { return new TypeScriptZodRenderer( this, renderContext, @@ -73,7 +73,7 @@ export class TypeScriptZodTargetLanguage extends TargetLanguage { } export class TypeScriptZodRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _options: OptionValues @@ -93,7 +93,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, - upper ? s => capitalize(acronyms(s)) : allLowerWordStyle, + upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isLetterOrUnderscore @@ -131,7 +131,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { } protected typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { - if (["class", "object", "enum"].indexOf(t.kind) >= 0) { + if (["class", "object", "enum"].includes(t.kind)) { return [this.nameForNamedType(t), "Schema"]; } @@ -157,6 +157,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { if (_transformedStringType.kind === "date-time") { return "z.coerce.date()"; } + return "z.string()"; } ); @@ -168,7 +169,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { return match; } - protected emitObject(name: Name, t: ObjectType) { + protected emitObject(name: Name, t: ObjectType): void { this.ensureBlankLine(); this.emitLine("\nexport const ", name, "Schema = ", "z.object({"); this.indent(() => { @@ -204,42 +205,43 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { * Primitive types don't need defining and enums are output before other types, hence, * these are ignored. */ - static extractUnderlyingTyperefs(type: Type): number[] { + private static extractUnderlyingTyperefs(type: Type): number[] { let typeRefs: number[] = []; - //Ignore enums and primitives + // Ignore enums and primitives if (!type.isPrimitive() && type.kind != "enum") { - //need to extract constituent types for unions and intersections (which both extend SetOperationType) - //and can ignore the union/intersection itself + // need to extract constituent types for unions and intersections (which both extend SetOperationType) + // and can ignore the union/intersection itself if (type instanceof SetOperationType) { (type as SetOperationType).members.forEach(member => { - //recurse as the underlying type could itself be a union, instersection or array etc. + // recurse as the underlying type could itself be a union, instersection or array etc. typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(member)); }); } - //need to extract additional properties for object, class and map types (which all extend ObjectType) + // need to extract additional properties for object, class and map types (which all extend ObjectType) if (type instanceof ObjectType) { const addType = (type as ObjectType).getAdditionalProperties(); if (addType) { - //recurse as the underlying type could itself be a union, instersection or array etc. + // recurse as the underlying type could itself be a union, instersection or array etc. typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(addType)); } } - //need to extract items types for ArrayType + // need to extract items types for ArrayType if (type instanceof ArrayType) { const itemsType = (type as ArrayType).items; if (itemsType) { - //recurse as the underlying type could itself be a union, instersection or array etc. + // recurse as the underlying type could itself be a union, instersection or array etc. typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(itemsType)); } } - //Finally return the reference to a class as that will need to be defined (where objects, maps, unions, intersections and arrays do not) + // Finally return the reference to a class as that will need to be defined (where objects, maps, unions, intersections and arrays do not) if (type instanceof ClassType) { typeRefs.push(type.typeRef); } } + return typeRefs; } @@ -275,15 +277,15 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { mapChildTypeRefs.push(childTypeRefs); }); - //Items to process on this pass + // Items to process on this pass let indices: number[] = []; mapType.forEach((_, index) => { indices.push(index); }); - //items to process on the next pass + // items to process on the next pass let deferredIndices: number[] = []; - //defensive: make sure we don't loop forever, even complex sets shouldn't require many passes + // defensive: make sure we don't loop forever, even complex sets shouldn't require many passes const MAX_PASSES = 999; let passNum = 0; do { @@ -293,11 +295,14 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { let foundAllChildren = true; childTypeRefs.forEach(childRef => { - //defensive: first check if there is a definition for the referenced type (there should be) - if (mapTypeRef.indexOf(childRef) > -1) { + // defensive: first check if there is a definition for the referenced type (there should be) + if (mapTypeRef.includes(childRef)) { let found = false; // find this childs's ordinal, if it has already been added - //faster to go through what we've defined so far than all definitions + // faster to go through what we've defined so far than all definitions + + // FIXME: refactor this + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let j = 0; j < order.length; j++) { const childIndex = order[j]; if (mapTypeRef[childIndex] === childRef) { @@ -305,6 +310,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { break; } } + foundAllChildren = foundAllChildren && found; } else { console.error( @@ -317,7 +323,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { // insert index into order as we are safe to define this type order.push(index); } else { - //defer to a subsequent pass as we need to define other types + // defer to a subsequent pass as we need to define other types deferredIndices.push(index); } }); @@ -326,9 +332,11 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { passNum++; if (passNum > MAX_PASSES) { - //giving up + // giving up order.push(...deferredIndices); - console.warn("Exceeded maximum number of passes when determining output order, output may contain forward references"); + console.warn( + "Exceeded maximum number of passes when determining output order, output may contain forward references" + ); } } while (indices.length > 0 && passNum <= MAX_PASSES); diff --git a/packages/quicktype-core/src/language/ruby/index.ts b/packages/quicktype-core/src/language/ruby/index.ts index 685581a68..42466baba 100644 --- a/packages/quicktype-core/src/language/ruby/index.ts +++ b/packages/quicktype-core/src/language/ruby/index.ts @@ -1,33 +1,47 @@ import * as unicode from "unicode-properties"; -import { Sourcelike, modifySource } from "../../Source"; -import { Namer, Name } from "../../Naming"; -import { ConvenienceRenderer, ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { TargetLanguage } from "../../TargetLanguage"; -import { Option, BooleanOption, EnumOption, OptionValues, getOptionValues, StringOption } from "../../RendererOptions"; - -import * as keywords from "./keywords"; - -const forbiddenForObjectProperties = Array.from(new Set([...keywords.keywords, ...keywords.reservedProperties])); - -import { Type, EnumType, ClassType, UnionType, ArrayType, MapType, ClassProperty } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; - +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + type Option, + type OptionValues, + StringOption, + getOptionValues +} from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; import { - legalizeCharacters, - splitIntoWords, - combineWords, - firstUpperWordStyle, - allUpperWordStyle, allLowerWordStyle, - utf32ConcatMap, - isPrintable, + allUpperWordStyle, + combineWords, escapeNonPrintableMapper, + firstUpperWordStyle, intToHex, + isLetterOrUnderscore, + isPrintable, + legalizeCharacters, snakeCase, - isLetterOrUnderscore + splitIntoWords, + utf32ConcatMap } from "../../support/Strings"; -import { RenderContext } from "../../Renderer"; +import { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + ClassType, + type EnumType, + MapType, + type Type, + type UnionType +} from "../../Type"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import * as keywords from "./keywords"; + +const forbiddenForObjectProperties = Array.from(new Set([...keywords.keywords, ...keywords.reservedProperties])); function unicodeEscape(codePoint: number): string { return "\\u{" + intToHex(codePoint, 0) + "}"; @@ -36,9 +50,9 @@ function unicodeEscape(codePoint: number): string { const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); export enum Strictness { - Strict = "Strict::", Coercible = "Coercible::", - None = "Types::" + None = "Types::", + Strict = "Strict::" } export const rubyOptions = { @@ -52,15 +66,15 @@ export const rubyOptions = { }; export class RubyTargetLanguage extends TargetLanguage { - constructor() { + public constructor() { super("Ruby", ["ruby"], "rb"); } - protected getOptions(): Option[] { + protected getOptions(): Array> { return [rubyOptions.justTypes, rubyOptions.strictness, rubyOptions.namespace]; } - get supportsOptionalClassProperties(): boolean { + public get supportsOptionalClassProperties(): boolean { return true; } @@ -68,7 +82,7 @@ export class RubyTargetLanguage extends TargetLanguage { return " "; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: { [name: string]: any }): RubyRenderer { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RubyRenderer { return new RubyRenderer(this, renderContext, getOptionValues(rubyOptions, untypedOptionValues)); } } @@ -77,7 +91,7 @@ const isStartCharacter = isLetterOrUnderscore; function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].indexOf(category) >= 0 || isStartCharacter(utf16Unit); + return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); } const legalizeName = legalizeCharacters(isPartCharacter); @@ -86,6 +100,7 @@ function simpleNameStyle(original: string, uppercase: boolean): string { if (/^[0-9]+$/.test(original)) { original = original + "N"; } + const words = splitIntoWords(original); return combineWords( words, @@ -114,7 +129,7 @@ function memberNameStyle(original: string): string { } export class RubyRenderer extends ConvenienceRenderer { - constructor( + public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues @@ -177,6 +192,7 @@ export class RubyRenderer extends ConvenienceRenderer { if (nullable !== null) { return [this.dryType(nullable), ".optional"]; } + return ["Types.Instance(", this.nameForNamedType(unionType), ")", optional]; } ); @@ -201,7 +217,7 @@ export class RubyRenderer extends ConvenienceRenderer { classType => { let info: { name: Name; prop: ClassProperty } | undefined; this.forEachClassProperty(classType, "none", (name, _json, prop) => { - if (["class", "map", "array"].indexOf(prop.type.kind) >= 0) { + if (["class", "map", "array"].includes(prop.type.kind)) { info = { name, prop }; } else if (info === undefined) { info = { name, prop }; @@ -210,9 +226,10 @@ export class RubyRenderer extends ConvenienceRenderer { if (info !== undefined) { return this.exampleUse(info.prop.type, [exp, safeNav, ".", info.name], depth, info.prop.isOptional); } + return exp; }, - mapType => this.exampleUse(mapType.values, [exp, safeNav, `["…"]`], depth), + mapType => this.exampleUse(mapType.values, [exp, safeNav, '["…"]'], depth), enumType => { let name: Name | undefined; // FIXME: This is a terrible way to get the first enum case name. @@ -224,23 +241,26 @@ export class RubyRenderer extends ConvenienceRenderer { if (name !== undefined) { return [exp, " == ", this.nameForNamedType(enumType), "::", name]; } + return exp; }, unionType => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { - if (["class", "map", "array"].indexOf(nullable.kind) >= 0) { + if (["class", "map", "array"].includes(nullable.kind)) { return this.exampleUse(nullable, exp, depth, true); } + return [exp, ".nil?"]; } + return exp; } ); } private jsonSample(t: Type): Sourcelike { - function inner() { + function inner(): string { if (t instanceof ArrayType) { return "[…]"; } else if (t instanceof MapType) { @@ -251,6 +271,7 @@ export class RubyRenderer extends ConvenienceRenderer { return "…"; } } + return `"${inner()}"`; } @@ -289,6 +310,7 @@ export class RubyRenderer extends ConvenienceRenderer { if (nullable !== null) { return this.fromDynamic(nullable, e, true); } + const expression = [this.nameForNamedType(unionType), ".from_dynamic!(", e, ")"]; return optional ? [e, " ? ", expression, " : nil"] : expression; } @@ -299,6 +321,7 @@ export class RubyRenderer extends ConvenienceRenderer { if (this.marshalsImplicitlyToDynamic(t)) { return e; } + return matchType( t, _anyType => e, @@ -316,9 +339,11 @@ export class RubyRenderer extends ConvenienceRenderer { if (nullable !== null) { return this.toDynamic(nullable, e, true); } + if (this.marshalsImplicitlyToDynamic(unionType)) { return e; } + return [e, optional ? "&" : "", ".to_dynamic"]; } ); @@ -342,6 +367,7 @@ export class RubyRenderer extends ConvenienceRenderer { if (nullable !== null) { return this.marshalsImplicitlyToDynamic(nullable); } + return false; } ); @@ -369,19 +395,20 @@ export class RubyRenderer extends ConvenienceRenderer { if (nullable !== null) { return this.propertyTypeMarshalsImplicitlyFromDynamic(nullable); } + return false; } ); } - private emitBlock(source: Sourcelike, emit: () => void) { + private emitBlock(source: Sourcelike, emit: () => void): void { this.emitLine(source); this.indent(emit); this.emitLine("end"); } - private emitModule(emit: () => void) { - const emitModuleInner = (moduleName: string) => { + private emitModule(emit: () => void): void { + const emitModuleInner = (moduleName: string): void => { const [firstModule, ...subModules] = moduleName.split("::"); if (subModules.length > 0) { this.emitBlock(["module ", firstModule], () => { @@ -391,6 +418,7 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitBlock(["module ", moduleName], emit); } }; + if (this._options.namespace !== undefined && this._options.namespace !== "") { emitModuleInner(this._options.namespace); } else { @@ -398,7 +426,7 @@ export class RubyRenderer extends ConvenienceRenderer { } } - private emitClass(c: ClassType, className: Name) { + private emitClass(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitBlock(["class ", className, " < Dry::Struct"], () => { let table: Sourcelike[][] = []; @@ -415,6 +443,7 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitTable(table); table = []; } + this.ensureBlankLine(); this.emitDescriptionBlock(description); this.emitLine(attribute); @@ -489,7 +518,7 @@ export class RubyRenderer extends ConvenienceRenderer { }); } - private emitEnum(e: EnumType, enumName: Name) { + private emitEnum(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitBlock(["module ", enumName], () => { const table: Sourcelike[][] = []; @@ -500,7 +529,7 @@ export class RubyRenderer extends ConvenienceRenderer { }); } - private emitUnion(u: UnionType, unionName: Name) { + private emitUnion(u: UnionType, unionName: Name): void { this.emitDescription(this.descriptionForType(u)); this.emitBlock(["class ", unionName, " < Dry::Struct"], () => { const table: Sourcelike[][] = []; @@ -537,7 +566,7 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitLine("end"); } }); - this.emitLine(`raise "Invalid union"`); + this.emitLine('raise "Invalid union"'); }); this.ensureBlankLine(); @@ -561,6 +590,7 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitLine("nil"); }); } + this.emitLine("end"); }); @@ -571,7 +601,7 @@ export class RubyRenderer extends ConvenienceRenderer { }); } - private emitTypesModule() { + private emitTypesModule(): void { this.emitBlock(["module Types"], () => { this.emitLine("include Dry.Types(default: :nominal)"); @@ -593,6 +623,7 @@ export class RubyRenderer extends ConvenienceRenderer { if (this._options.strictness === Strictness.Strict) { if (has.nil) declarations.push([["Nil"], [` = ${this._options.strictness}Nil`]]); } + if (has.bool) declarations.push([["Bool"], [` = ${this._options.strictness}Bool`]]); if (has.hash) declarations.push([["Hash"], [` = ${this._options.strictness}Hash`]]); if (has.string) declarations.push([["String"], [` = ${this._options.strictness}String`]]); @@ -618,7 +649,7 @@ export class RubyRenderer extends ConvenienceRenderer { }); } - protected emitSourceStructure() { + protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { @@ -635,6 +666,7 @@ export class RubyRenderer extends ConvenienceRenderer { }); this.emitLine("# If from_json! succeeds, the value returned matches the schema."); } + this.ensureBlankLine(); this.emitLine("require 'json'"); @@ -672,7 +704,7 @@ export class RubyRenderer extends ConvenienceRenderer { // it for arrays. const needsToJsonDefined = "array" === topLevel.kind; - const classDeclaration = () => { + const classDeclaration = (): void => { this.emitBlock(["class ", name], () => { this.emitBlock(["def self.from_json!(json)"], () => { if (needsToJsonDefined) { diff --git a/packages/quicktype-core/src/language/ruby/keywords.ts b/packages/quicktype-core/src/language/ruby/keywords.ts index e01c14b5f..0229d9044 100644 --- a/packages/quicktype-core/src/language/ruby/keywords.ts +++ b/packages/quicktype-core/src/language/ruby/keywords.ts @@ -39,7 +39,7 @@ export const keywords = [ "until", "when", "while", - "yield" + "yield", ]; const globalClasses = [ @@ -133,7 +133,7 @@ const globalClasses = [ "Undefined", "UnicodeNormalize", "Warning", - "ZeroDivisionError" + "ZeroDivisionError", ]; const kernel = [ @@ -286,7 +286,7 @@ const kernel = [ "untrace_var", "untrust", "untrusted?", - "warn" + "warn", ]; export const globals = kernel.concat(globalClasses); @@ -355,5 +355,5 @@ export const reservedProperties = [ "undef", "untrust", "while", - "with" + "with", ]; diff --git a/packages/quicktype-core/src/rewrites/CombineClasses.ts b/packages/quicktype-core/src/rewrites/CombineClasses.ts index 1f350644e..3fc7a29fc 100644 --- a/packages/quicktype-core/src/rewrites/CombineClasses.ts +++ b/packages/quicktype-core/src/rewrites/CombineClasses.ts @@ -1,18 +1,17 @@ -import { ClassType, Type, ClassProperty, setOperationCasesEqual } from "../Type"; -import { nonNullTypeCases, combineTypeAttributesOfTypes } from "../TypeUtils"; - -import { GraphRewriteBuilder } from "../GraphRewriting"; +import { type GraphRewriteBuilder } from "../GraphRewriting"; +import { type RunContext } from "../Run"; import { assert, panic } from "../support/Support"; -import { TypeGraph, TypeRef } from "../TypeGraph"; +import { type ClassProperty, ClassType, type Type, setOperationCasesEqual } from "../Type"; +import { type TypeGraph, type TypeRef } from "../TypeGraph"; +import { combineTypeAttributesOfTypes, nonNullTypeCases } from "../TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; -import { RunContext } from "../Run"; const REQUIRED_OVERLAP = 3 / 4; -type Clique = { +interface Clique { members: ClassType[]; prototypes: ClassType[]; -}; +} // FIXME: Allow some type combinations to unify, like different enums, // enums with strings, integers with doubles, maps with objects of @@ -63,6 +62,7 @@ function canBeCombined(c1: ClassType, c2: ClassType, onlyWithSameProperties: boo if (faults > maxFaults) break; } } + if (faults > maxFaults) return false; for (const name of commonProperties) { let ts = smaller.get(name); @@ -70,12 +70,14 @@ function canBeCombined(c1: ClassType, c2: ClassType, onlyWithSameProperties: boo if (ts === undefined || tl === undefined) { return panic(`Both classes should have property ${name}`); } + const tsCases = nonNullTypeCases(ts.type); const tlCases = nonNullTypeCases(tl.type); if (tsCases.size > 0 && tlCases.size > 0 && !typeSetsCanBeCombined(tsCases, tlCases)) { return false; } } + return true; } @@ -86,6 +88,7 @@ function tryAddToClique(c: ClassType, clique: Clique, onlyWithSameProperties: bo return true; } } + for (const prototype of clique.prototypes) { if (canBeCombined(prototype, c, onlyWithSameProperties)) { clique.prototypes.push(c); @@ -93,6 +96,7 @@ function tryAddToClique(c: ClassType, clique: Clique, onlyWithSameProperties: bo return true; } } + return false; } @@ -114,6 +118,7 @@ function findSimilarityCliques( break; } } + if (cliqueIndex === undefined) { // New clique cliqueIndex = cliques.length; diff --git a/packages/quicktype-core/src/rewrites/ExpandStrings.ts b/packages/quicktype-core/src/rewrites/ExpandStrings.ts index 9cb886d9e..abddcfab5 100644 --- a/packages/quicktype-core/src/rewrites/ExpandStrings.ts +++ b/packages/quicktype-core/src/rewrites/ExpandStrings.ts @@ -1,22 +1,22 @@ import { + areEqual, iterableFirst, - mapFilter, - iterableSome, iterableReduce, - setUnion, + iterableSome, + mapFilter, setIntersect, setIsSuperset, - areEqual + setUnion } from "collection-utils"; -import { PrimitiveType } from "../Type"; -import { stringTypesForType } from "../TypeUtils"; -import { TypeGraph, TypeRef } from "../TypeGraph"; -import { GraphRewriteBuilder } from "../GraphRewriting"; -import { assert, defined } from "../support/Support"; -import { emptyTypeAttributes } from "../attributes/TypeAttributes"; import { StringTypes } from "../attributes/StringTypes"; -import { RunContext } from "../Run"; +import { emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { type GraphRewriteBuilder } from "../GraphRewriting"; +import { type RunContext } from "../Run"; +import { assert, defined } from "../support/Support"; +import { type PrimitiveType } from "../Type"; +import { type TypeGraph, type TypeRef } from "../TypeGraph"; +import { stringTypesForType } from "../TypeUtils"; const MIN_LENGTH_FOR_ENUM = 10; @@ -25,10 +25,10 @@ const REQUIRED_OVERLAP = 3 / 4; export type EnumInference = "none" | "all" | "infer"; -type EnumInfo = { +interface EnumInfo { cases: ReadonlySet; numValues: number; -}; +} function isOwnEnum({ numValues, cases }: EnumInfo): boolean { return numValues >= MIN_LENGTH_FOR_ENUM && cases.size < Math.sqrt(numValues); @@ -68,7 +68,7 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum const keys = Array.from(cases.keys()); if (isAlwaysEmptyString(keys)) return undefined; - const someCaseIsNotNumber = iterableSome(keys, key => /^(\-|\+)?[0-9]+(\.[0-9]+)?$/.test(key) === false); + const someCaseIsNotNumber = iterableSome(keys, key => /^[-+]?[0-9]+(\.[0-9]+)?$/.test(key) === false); if (!someCaseIsNotNumber) return undefined; } @@ -76,7 +76,7 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum } const enumInfos = new Map(); - const enumSets: ReadonlySet[] = []; + const enumSets: Array> = []; if (inference !== "none") { for (const t of allStrings) { @@ -85,6 +85,8 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum enumInfos.set(t, enumInfo); } + // FIXME: refactor this + // eslint-disable-next-line no-inner-declarations function findOverlap(newCases: ReadonlySet, newAreSubordinate: boolean): number { return enumSets.findIndex(s => enumCasesOverlap(newCases, s, newAreSubordinate)); } @@ -117,6 +119,7 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum // Remove the ones we're done with. enumInfos.delete(t); } + if (inference === "all") { assert(enumInfos.size === 0); } @@ -166,6 +169,7 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum return builder.getStringType(attributes, StringTypes.unrestricted, forwardingRef); } } + const transformations = mappedStringTypes.transformations; // FIXME: This is probably wrong, or at least overly conservative. This is for the case // where some attributes are identity ones, i.e. where we can't merge the primitive types, @@ -177,6 +181,7 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum const kind = defined(iterableFirst(transformations)); return builder.getPrimitiveType(kind, attributes, forwardingRef); } + types.push(...Array.from(transformations).map(k => builder.getPrimitiveType(k))); assert(types.length > 0, "We got an empty string type"); return builder.getUnionType(attributes, new Set(types), forwardingRef); diff --git a/packages/quicktype-core/src/rewrites/FlattenStrings.ts b/packages/quicktype-core/src/rewrites/FlattenStrings.ts index b700073f5..6982a94da 100644 --- a/packages/quicktype-core/src/rewrites/FlattenStrings.ts +++ b/packages/quicktype-core/src/rewrites/FlattenStrings.ts @@ -1,12 +1,12 @@ import { iterableFirst } from "collection-utils"; -import { PrimitiveType, UnionType, Type } from "../Type"; -import { stringTypesForType, combineTypeAttributesOfTypes } from "../TypeUtils"; -import { TypeGraph, TypeRef } from "../TypeGraph"; -import { StringTypeMapping } from "../TypeBuilder"; -import { GraphRewriteBuilder } from "../GraphRewriting"; -import { assert, defined } from "../support/Support"; import { combineTypeAttributes } from "../attributes/TypeAttributes"; +import { type GraphRewriteBuilder } from "../GraphRewriting"; +import { assert, defined } from "../support/Support"; +import { type PrimitiveType, type Type, type UnionType } from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type TypeGraph, type TypeRef } from "../TypeGraph"; +import { combineTypeAttributesOfTypes, stringTypesForType } from "../TypeUtils"; // A union needs replacing if it contains more than one string type, one of them being // a basic string type. @@ -37,6 +37,7 @@ function replaceUnion( if (stringMembers.has(t)) continue; types.push(builder.reconstituteType(t)); } + if (types.length === 0) { return builder.getStringType( combineTypeAttributes("union", stringAttributes, u.getAttributes()), @@ -44,6 +45,7 @@ function replaceUnion( forwardingRef ); } + types.push(builder.getStringType(stringAttributes, undefined)); return builder.getUnionType(u.getAttributes(), new Set(types), forwardingRef); } diff --git a/packages/quicktype-core/src/rewrites/FlattenUnions.ts b/packages/quicktype-core/src/rewrites/FlattenUnions.ts index a88dca2e8..cca90fca4 100644 --- a/packages/quicktype-core/src/rewrites/FlattenUnions.ts +++ b/packages/quicktype-core/src/rewrites/FlattenUnions.ts @@ -1,14 +1,14 @@ -import { setFilter, iterableSome } from "collection-utils"; +import { iterableSome, setFilter } from "collection-utils"; -import { TypeGraph, TypeRef, derefTypeRef } from "../TypeGraph"; -import { Type, UnionType, IntersectionType } from "../Type"; -import { makeGroupsToFlatten } from "../TypeUtils"; -import { assert } from "../support/Support"; -import { StringTypeMapping } from "../TypeBuilder"; -import { GraphRewriteBuilder } from "../GraphRewriting"; -import { unifyTypes, UnifyUnionBuilder } from "../UnifyClasses"; -import { messageAssert } from "../Messages"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { type GraphRewriteBuilder } from "../GraphRewriting"; +import { messageAssert } from "../Messages"; +import { assert } from "../support/Support"; +import { IntersectionType, type Type, UnionType } from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type TypeGraph, type TypeRef, derefTypeRef } from "../TypeGraph"; +import { makeGroupsToFlatten } from "../TypeUtils"; +import { UnifyUnionBuilder, unifyTypes } from "../UnifyClasses"; export function flattenUnions( graph: TypeGraph, @@ -26,6 +26,7 @@ export function flattenUnions( if (trefs.length === 1) { return trefs[0]; } + needsRepeat = true; return builder.getUnionType(emptyTypeAttributes, new Set(trefs)); }); diff --git a/packages/quicktype-core/src/rewrites/InferMaps.ts b/packages/quicktype-core/src/rewrites/InferMaps.ts index 9190b043b..e63803745 100644 --- a/packages/quicktype-core/src/rewrites/InferMaps.ts +++ b/packages/quicktype-core/src/rewrites/InferMaps.ts @@ -1,13 +1,13 @@ -import { iterableFirst, iterableEvery, setMap } from "collection-utils"; +import { iterableEvery, iterableFirst, setMap } from "collection-utils"; -import { Type, ClassType, setOperationCasesEqual, ClassProperty, isPrimitiveStringTypeKind } from "../Type"; -import { removeNullFromType } from "../TypeUtils"; +import { type GraphRewriteBuilder } from "../GraphRewriting"; +import { type MarkovChain, evaluate, load } from "../MarkovChain"; import { defined, panic } from "../support/Support"; -import { TypeGraph, TypeRef } from "../TypeGraph"; -import { StringTypeMapping } from "../TypeBuilder"; -import { GraphRewriteBuilder } from "../GraphRewriting"; +import { type ClassProperty, ClassType, type Type, isPrimitiveStringTypeKind, setOperationCasesEqual } from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type TypeGraph, type TypeRef } from "../TypeGraph"; +import { removeNullFromType } from "../TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; -import { MarkovChain, load, evaluate } from "../MarkovChain"; const mapSizeThreshold = 20; const stringMapSizeThreshold = 50; @@ -18,6 +18,7 @@ function nameProbability(name: string): number { if (markovChain === undefined) { markovChain = load(); } + return evaluate(markovChain, name); } @@ -94,11 +95,14 @@ function shouldBeMap(properties: ReadonlyMap): ReadonlySe firstNonNullCases = nn; } } + allCases.add(p.type); } + if (!canBeMap) { return undefined; } + return allCases; } diff --git a/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts b/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts index a9245fe38..2e8504d62 100644 --- a/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts +++ b/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts @@ -1,11 +1,11 @@ -import { setFilter, iterableFirst, mapMap, setMap } from "collection-utils"; +import { iterableFirst, mapMap, setFilter, setMap } from "collection-utils"; -import { TypeGraph, TypeRef } from "../TypeGraph"; -import { StringTypeMapping } from "../TypeBuilder"; -import { GraphRewriteBuilder } from "../GraphRewriting"; -import { ObjectType, ClassProperty } from "../Type"; -import { defined } from "../support/Support"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { type GraphRewriteBuilder } from "../GraphRewriting"; +import { defined } from "../support/Support"; +import { type ClassProperty, type ObjectType } from "../Type"; +import { type StringTypeMapping } from "../TypeBuilder"; +import { type TypeGraph, type TypeRef } from "../TypeGraph"; export function replaceObjectType( graph: TypeGraph, diff --git a/packages/quicktype-core/src/rewrites/ResolveIntersections.ts b/packages/quicktype-core/src/rewrites/ResolveIntersections.ts index c68159828..a992ead9f 100644 --- a/packages/quicktype-core/src/rewrites/ResolveIntersections.ts +++ b/packages/quicktype-core/src/rewrites/ResolveIntersections.ts @@ -1,41 +1,42 @@ +/* eslint-disable @typescript-eslint/brace-style */ import { - iterableFirst, iterableEvery, - setFilter, + iterableFind, + iterableFirst, + mapMap, mapMapEntries, mapMergeWithInto, - mapMap, mapUpdateInto, - setMap, - iterableFind, + setFilter, setIntersect, + setMap, setUnionInto } from "collection-utils"; -import { TypeGraph, TypeRef } from "../TypeGraph"; -import { StringTypeMapping, TypeBuilder } from "../TypeBuilder"; -import { GraphRewriteBuilder, TypeLookerUp } from "../GraphRewriting"; -import { UnionTypeProvider, UnionBuilder, TypeAttributeMap } from "../UnionBuilder"; -import { - IntersectionType, - Type, - UnionType, - PrimitiveTypeKind, - ArrayType, - isPrimitiveTypeKind, - isNumberTypeKind, - GenericClassProperty, - TypeKind, - ObjectType -} from "../Type"; -import { setOperationMembersRecursively, matchTypeExhaustive, makeGroupsToFlatten } from "../TypeUtils"; -import { assert, defined, panic, mustNotHappen } from "../support/Support"; import { + type TypeAttributes, combineTypeAttributes, - TypeAttributes, emptyTypeAttributes, makeTypeAttributesInferred } from "../attributes/TypeAttributes"; +import { type GraphRewriteBuilder, type TypeLookerUp } from "../GraphRewriting"; +import { assert, defined, mustNotHappen, panic } from "../support/Support"; +import { + ArrayType, + GenericClassProperty, + IntersectionType, + ObjectType, + type PrimitiveTypeKind, + type Type, + type TypeKind, + UnionType, + isNumberTypeKind, + isPrimitiveTypeKind +} from "../Type"; +import { type StringTypeMapping, type TypeBuilder } from "../TypeBuilder"; +import { type TypeGraph, type TypeRef } from "../TypeGraph"; +import { makeGroupsToFlatten, matchTypeExhaustive, setOperationMembersRecursively } from "../TypeUtils"; +import { type TypeAttributeMap, UnionBuilder, type UnionTypeProvider } from "../UnionBuilder"; function canResolve(t: IntersectionType): boolean { const members = setOperationMembersRecursively(t, undefined)[0]; @@ -53,12 +54,14 @@ class IntersectionAccumulator implements UnionTypeProvider, [PropertyMap, ReadonlySet | undefined] | undefined> { private _primitiveTypes: Set | undefined; + private readonly _primitiveAttributes: TypeAttributeMap = new Map(); // * undefined: We haven't seen any types yet. // * Set: All types we've seen can be arrays. // * false: At least one of the types seen can't be an array. private _arrayItemTypes: Set | undefined | false; + private _arrayAttributes: TypeAttributes = emptyTypeAttributes; // We start out with all object types allowed, which means @@ -70,7 +73,9 @@ class IntersectionAccumulator // undefined, no object types are allowed, in which case // _additionalPropertyTypes must also be undefined; private _objectProperties: PropertyMap | undefined = new Map(); + private _objectAttributes: TypeAttributes = emptyTypeAttributes; + private _additionalPropertyTypes: Set | undefined = new Set(); private _lostTypeAttributes = false; @@ -180,9 +185,9 @@ class IntersectionAccumulator this.updateObjectProperties(members); } - addType(t: Type): TypeAttributes { + public addType(t: Type): TypeAttributes { let attributes = t.getAttributes(); - matchTypeExhaustive( + matchTypeExhaustive( t, _noneType => { return panic("There shouldn't be a none type"); @@ -212,14 +217,15 @@ class IntersectionAccumulator return makeTypeAttributesInferred(attributes); } - get arrayData(): ReadonlySet { + public get arrayData(): ReadonlySet { if (this._arrayItemTypes === undefined || this._arrayItemTypes === false) { return panic("This should not be called if the type can't be an array"); } + return this._arrayItemTypes; } - get objectData(): [PropertyMap, ReadonlySet | undefined] | undefined { + public get objectData(): [PropertyMap, ReadonlySet | undefined] | undefined { if (this._objectProperties === undefined) { assert(this._additionalPropertyTypes === undefined); return undefined; @@ -228,11 +234,11 @@ class IntersectionAccumulator return [this._objectProperties, this._additionalPropertyTypes]; } - get enumCases(): ReadonlySet { + public get enumCases(): ReadonlySet { return panic("We don't support enums in intersections"); } - getMemberKinds(): TypeAttributeMap { + public getMemberKinds(): TypeAttributeMap { const kinds: TypeAttributeMap = mapMap(defined(this._primitiveTypes).entries(), k => defined(this._primitiveAttributes.get(k)) ); @@ -260,7 +266,7 @@ class IntersectionAccumulator return kinds; } - get lostTypeAttributes(): boolean { + public get lostTypeAttributes(): boolean { return this._lostTypeAttributes; } } @@ -285,7 +291,7 @@ class IntersectionUnionBuilder extends UnionBuilder< return this.typeBuilder.getUniqueIntersectionType(attributes, reconstitutedMembers); } - get createdNewIntersections(): boolean { + public get createdNewIntersections(): boolean { return this._createdNewIntersections; } @@ -338,6 +344,7 @@ export function resolveIntersections( const t = builder.getPrimitiveType("any", intersectionAttributes, forwardingRef); return t; } + if (members.size === 1) { return builder.reconstituteType(defined(iterableFirst(members)), intersectionAttributes, forwardingRef); } @@ -356,8 +363,10 @@ export function resolveIntersections( if (unionBuilder.createdNewIntersections) { needsRepeat = true; } + return tref; } + // FIXME: We need to handle intersections that resolve to the same set of types. // See for example the intersections-nested.schema example. const allIntersections = setFilter( diff --git a/packages/quicktype-core/src/support/Acronyms.ts b/packages/quicktype-core/src/support/Acronyms.ts index 21460b0cf..d24c85e97 100644 --- a/packages/quicktype-core/src/support/Acronyms.ts +++ b/packages/quicktype-core/src/support/Acronyms.ts @@ -1,5 +1,7 @@ import { EnumOption } from "../RendererOptions"; -import { allUpperWordStyle, firstUpperWordStyle, originalWord, allLowerWordStyle } from "./Strings"; + +// eslint-disable-next-line import/no-cycle +import { allLowerWordStyle, allUpperWordStyle, firstUpperWordStyle, originalWord } from "./Strings"; export const acronyms: string[] = [ "aaa", @@ -1100,13 +1102,13 @@ export const acronyms: string[] = [ ]; export enum AcronymStyleOptions { - Pascal = "pascal", Camel = "camel", + Lower = "lowerCase", Original = "original", - Lower = "lowerCase" + Pascal = "pascal" } -export const acronymOption = function (defaultOption: AcronymStyleOptions) { +export const acronymOption = function (defaultOption: AcronymStyleOptions): EnumOption { return new EnumOption( "acronym-style", "Acronym naming style", diff --git a/packages/quicktype-core/src/support/Chance.ts b/packages/quicktype-core/src/support/Chance.ts index 5a368d7e8..74f8162ac 100644 --- a/packages/quicktype-core/src/support/Chance.ts +++ b/packages/quicktype-core/src/support/Chance.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ // Mersenne Twister from https://gist.github.com/banksean/300494 /* A C-program for MT19937, with initialization improved 2002/1/26. @@ -34,20 +35,26 @@ email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) */ class MersenneTwister { - private N: number; - private M: number; - private MATRIX_A: number; - private UPPER_MASK: number; - private LOWER_MASK: number; + private readonly N: number; + + private readonly M: number; + + private readonly MATRIX_A: number; + + private readonly UPPER_MASK: number; + + private readonly LOWER_MASK: number; private mt: number[]; + private mti: number; - constructor(seed: number) { + public constructor(seed: number) { if (seed === undefined) { // kept random number same size as time used previously to ensure no unexpected results downstream seed = Math.floor(Math.random() * Math.pow(10, 13)); } + /* Period parameters */ this.N = 624; this.M = 397; @@ -80,7 +87,7 @@ class MersenneTwister { /* generates a random number on [0,0xffffffff]-interval */ private genrand_int32() { let y; - let mag01 = new Array(0x0, this.MATRIX_A); + let mag01 = [0x0, this.MATRIX_A]; /* mag01[x] = x * MATRIX_A for x=0,1 */ if (this.mti >= this.N) { @@ -91,14 +98,17 @@ class MersenneTwister { /* if init_genrand() has not been called, */ this.init_genrand(5489); /* a default initial seed is used */ } + for (kk = 0; kk < this.N - this.M; kk++) { y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK); this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1]; } + for (; kk < this.N - 1; kk++) { y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK); this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1]; } + y = (this.mt[this.N - 1] & this.UPPER_MASK) | (this.mt[0] & this.LOWER_MASK); this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1]; @@ -125,9 +135,9 @@ class MersenneTwister { // https://github.com/chancejs/chancejs export class Chance { - private mt: MersenneTwister; + private readonly mt: MersenneTwister; - constructor(readonly seed: number) { + public constructor(readonly seed: number) { // If no generator function was provided, use our MT this.mt = new MersenneTwister(this.seed); } @@ -147,7 +157,7 @@ export class Chance { * @returns {Number} a single random integer number * @throws {RangeError} min cannot be greater than max */ - integer(options: { min: number; max: number }): number { + integer(options: { max: number; min: number }): number { return Math.floor(this.random() * (options.max - options.min + 1) + options.min); } @@ -170,6 +180,7 @@ export class Chance { if (arr.length === 0) { throw new RangeError("Chance: Cannot pick() from an empty array"); } + return arr[this.natural({ max: arr.length - 1 })]; } diff --git a/packages/quicktype-core/src/support/Comments.ts b/packages/quicktype-core/src/support/Comments.ts index 3599cf133..38dd96415 100644 --- a/packages/quicktype-core/src/support/Comments.ts +++ b/packages/quicktype-core/src/support/Comments.ts @@ -1,15 +1,19 @@ -import { Sourcelike } from "../Source"; +import { type Sourcelike } from "../Source"; -export type CommentOptions = { - lineStart?: string; - lineEnd?: string; - beforeComment?: string; +export interface CommentOptions { afterComment?: string; + beforeComment?: string; firstLineStart?: string; -}; + lineEnd?: string; + lineStart?: string; +} -type DescriptionBlockCommentConfig = { descriptionBlock: Sourcelike[] }; -type InlineCommentConfig = { lines: Sourcelike[] }; +interface DescriptionBlockCommentConfig { + descriptionBlock: Sourcelike[]; +} +interface InlineCommentConfig { + lines: Sourcelike[]; +} type CustomCommentConfig = CommentOptions & { customLines: Sourcelike[]; }; diff --git a/packages/quicktype-core/src/support/Converters.ts b/packages/quicktype-core/src/support/Converters.ts index 4231237d3..caec348bf 100644 --- a/packages/quicktype-core/src/support/Converters.ts +++ b/packages/quicktype-core/src/support/Converters.ts @@ -1,11 +1,11 @@ import { EnumOption } from "../RendererOptions"; export enum ConvertersOptions { - TopLevel = "top-level", - AllObjects = "all-objects" + AllObjects = "all-objects", + TopLevel = "top-level" } -export function convertersOption() { +export function convertersOption(): EnumOption { return new EnumOption( "converters", "Which converters to generate (top-level by default)", diff --git a/packages/quicktype-core/src/support/Strings.ts b/packages/quicktype-core/src/support/Strings.ts index 4b196a2fb..bd76ee4f9 100644 --- a/packages/quicktype-core/src/support/Strings.ts +++ b/packages/quicktype-core/src/support/Strings.ts @@ -1,7 +1,11 @@ -import { assert, defined, panic, assertNever } from "./Support"; -import { acronyms } from "./Acronyms"; +import unicode from "unicode-properties"; + import { messageAssert } from "../Messages"; +// eslint-disable-next-line import/no-cycle +import { acronyms } from "./Acronyms"; +import { assert, assertNever, defined, panic } from "./Support"; + export type NamingStyle = | "pascal" | "camel" @@ -10,11 +14,9 @@ export type NamingStyle = | "pascal-upper-acronyms" | "camel-upper-acronyms"; -import * as unicode from "unicode-properties"; - function computeAsciiMap(mapper: (codePoint: number) => string): { - charStringMap: string[]; charNoEscapeMap: number[]; + charStringMap: string[]; } { const charStringMap: string[] = []; const charNoEscapeMap: number[] = []; @@ -25,6 +27,7 @@ function computeAsciiMap(mapper: (codePoint: number) => string): { if (result === String.fromCharCode(i)) { noEscape = 1; } + charStringMap.push(result); charNoEscapeMap.push(noEscape); } @@ -39,6 +42,7 @@ function precomputedCodePointPredicate(p: CodePointPredicate): CodePointPredicat for (let cp = 0; cp < 128; cp++) { asciiResults.push(p(cp)); } + return function (cp: number) { return cp < 128 ? asciiResults[cp] : p(cp); }; @@ -48,6 +52,7 @@ function precomputedCodePointPredicate(p: CodePointPredicate): CodePointPredicat export function utf16ConcatMap(mapper: (utf16Unit: number) => string): (s: string) => string { const { charStringMap, charNoEscapeMap } = computeAsciiMap(mapper); + // eslint-disable-next-line @typescript-eslint/naming-convention return function stringConcatMap_inner(s: string): string { let cs: string[] | null = null; let start = 0; @@ -67,6 +72,7 @@ export function utf16ConcatMap(mapper: (utf16Unit: number) => string): (s: strin start = i + 1; } + i++; } @@ -89,6 +95,7 @@ function isLowSurrogate(cc: number): boolean { export function utf32ConcatMap(mapper: (codePoint: number) => string): (s: string) => string { const { charStringMap, charNoEscapeMap } = computeAsciiMap(mapper); + // eslint-disable-next-line @typescript-eslint/naming-convention return function stringConcatMap_inner(s: string): string { let cs: string[] | null = null; let start = 0; @@ -118,6 +125,7 @@ export function utf32ConcatMap(mapper: (codePoint: number) => string): (s: strin start = i + 1; } + i++; } @@ -149,11 +157,13 @@ export function repeatString(s: string, n: number): string { if (n % 2 !== 0) { result += s; } + n = Math.floor(n / 2); if (n > 0) { s += s; } } while (n > 0); + return result; } @@ -189,9 +199,11 @@ export function escapeNonPrintableMapper( if (printablePredicate(u)) { return String.fromCharCode(u); } + return escaper(u); } } + return mapper; } @@ -201,33 +213,31 @@ export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, export function isPrintable(codePoint: number): boolean { if (codePoint > 0xffff) return false; const category = unicode.getCategory(codePoint); - return ( - [ - "Mc", - "No", - "Sk", - "Me", - "Nd", - "Po", - "Lt", - "Pc", - "Sm", - "Zs", - "Lu", - "Pd", - "So", - "Pe", - "Pf", - "Ps", - "Sc", - "Ll", - "Lm", - "Pi", - "Nl", - "Mn", - "Lo" - ].indexOf(category) >= 0 - ); + return [ + "Mc", + "No", + "Sk", + "Me", + "Nd", + "Po", + "Lt", + "Pc", + "Sm", + "Zs", + "Lu", + "Pd", + "So", + "Pe", + "Pf", + "Ps", + "Sc", + "Ll", + "Lm", + "Pi", + "Nl", + "Mn", + "Lo" + ].includes(category); } export function isAscii(codePoint: number): boolean { @@ -237,17 +247,17 @@ export function isAscii(codePoint: number): boolean { export function isLetter(codePoint: number): boolean { const category = unicode.getCategory(codePoint); // FIXME: Include Letter, modifier (Lm)? - return ["Lu", "Ll", "Lt", "Lo"].indexOf(category) >= 0; + return ["Lu", "Ll", "Lt", "Lo"].includes(category); } export function isDigit(codePoint: number): boolean { const category = unicode.getCategory(codePoint); - return ["Nd"].indexOf(category) >= 0; + return ["Nd"].includes(category); } export function isNumeric(codePoint: number): boolean { const category = unicode.getCategory(codePoint); - return ["No", "Nd", "Nl"].indexOf(category) >= 0; + return ["No", "Nd", "Nl"].includes(category); } export function isLetterOrDigit(codePoint: number): boolean { @@ -273,6 +283,7 @@ export function trimEnd(str: string): string { if (!unicode.isWhiteSpace(str.charCodeAt(i))) break; firstWS = i; } + if (firstWS === l) return str; return str.slice(0, firstWS); } @@ -319,10 +330,10 @@ export function startWithLetter( const knownAcronyms = new Set(acronyms); -export type WordInName = { - word: string; +export interface WordInName { isAcronym: boolean; -}; + word: string; +} const fastIsWordCharacter = precomputedCodePointPredicate(isWordCharacter); const fastIsNonWordCharacter = precomputedCodePointPredicate(cp => !isWordCharacter(cp)); @@ -333,7 +344,7 @@ const fastIsDigit = precomputedCodePointPredicate(isDigit); export function splitIntoWords(s: string): WordInName[] { // [start, end, allUpper] - const intervals: [number, number, boolean][] = []; + const intervals: Array<[number, number, boolean]> = []; let intervalStart: number | undefined = undefined; const len = s.length; let i = 0; @@ -342,6 +353,7 @@ export function splitIntoWords(s: string): WordInName[] { function atEnd(): boolean { return i >= len; } + function currentCodePoint(): number { return defined(s.codePointAt(i)); } @@ -358,15 +370,19 @@ export function splitIntoWords(s: string): WordInName[] { function skipNonWord(): void { skipWhile(fastIsNonWordCharacter); } + function skipLowerCase(): void { skipWhile(fastIsLowerCase); } + function skipUpperCase(): void { skipWhile(fastIsUpperCase); } + function skipNonLetter(): void { skipWhile(fastNonLetter); } + function skipDigits(): void { skipWhile(fastIsDigit); } @@ -380,6 +396,7 @@ export function splitIntoWords(s: string): WordInName[] { if (intervalStart === undefined) { return panic("Tried to commit interval without starting one"); } + assert(i > intervalStart, "Interval must be non-empty"); // FIXME: This is a hack to avoid splitting up surrogates. We shouldn't // look at surrogates individually in the first place. When we @@ -389,6 +406,7 @@ export function splitIntoWords(s: string): WordInName[] { if (!atEnd() && isLowSurrogate(currentCodePoint())) { i += 1; } + const allUpper = lastLowerCaseIndex === undefined || lastLowerCaseIndex < intervalStart; intervals.push([intervalStart, i, allUpper]); intervalStart = undefined; @@ -398,6 +416,7 @@ export function splitIntoWords(s: string): WordInName[] { if (intervalStart === undefined) { return panic("Tried to get interval length without starting one"); } + return i - intervalStart; } @@ -425,6 +444,7 @@ export function splitIntoWords(s: string): WordInName[] { if (fastIsWordCharacter(currentCodePoint())) { i -= 1; } + commitInterval(); } } else { @@ -439,6 +459,7 @@ export function splitIntoWords(s: string): WordInName[] { const isAcronym = (lastLowerCaseIndex !== undefined && allUpper) || knownAcronyms.has(word.toLowerCase()); words.push({ word, isAcronym }); } + return words; } @@ -551,6 +572,7 @@ export function makeNameStyle( } else { separator = "_"; } + switch (namingStyle) { case "pascal": case "pascal-upper-acronyms": diff --git a/packages/quicktype-core/src/support/Support.ts b/packages/quicktype-core/src/support/Support.ts index 810219df8..3715a7108 100644 --- a/packages/quicktype-core/src/support/Support.ts +++ b/packages/quicktype-core/src/support/Support.ts @@ -1,44 +1,59 @@ import { Base64 } from "js-base64"; import * as pako from "pako"; -import { messageError } from "../Messages"; import * as YAML from "yaml"; -export type StringMap = { [name: string]: any }; +import { type JSONSchema } from "../input/JSONSchemaStore"; +import { messageError } from "../Messages"; -export function isStringMap(x: any): x is StringMap; -export function isStringMap(x: any, checkValue: (v: any) => v is T): x is { [name: string]: T }; -export function isStringMap(x: any, checkValue?: (v: any) => v is T): boolean { +export interface StringMap { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [name: string]: any; +} + +export function isStringMap(x: unknown): x is StringMap; +export function isStringMap(x: unknown, checkValue: (v: unknown) => v is T): x is { [name: string]: T }; +export function isStringMap(x: unknown, checkValue?: (v: unknown) => v is T): boolean { if (typeof x !== "object" || Array.isArray(x) || x === null) { return false; } + if (checkValue !== undefined) { for (const k of Object.getOwnPropertyNames(x)) { - const v = x[k]; + const v = x[k as keyof typeof x]; if (!checkValue(v)) { return false; } } } + return true; } -export function checkString(x: any): x is string { +export function checkString(x: unknown): x is string { return typeof x === "string"; } -export function checkStringMap(x: any): StringMap; -export function checkStringMap(x: any, checkValue: (v: any) => v is T): { [name: string]: T }; -export function checkStringMap(x: any, checkValue?: (v: any) => v is T): StringMap { - if (isStringMap(x, checkValue as any)) return x; +export function checkStringMap(x: unknown): StringMap; +export function checkStringMap(x: unknown, checkValue: (v: unknown) => v is T): { [name: string]: T }; +export function checkStringMap(x: unknown, checkValue?: (v: unknown) => v is T): StringMap { + if (checkValue && isStringMap(x, checkValue)) { + return x; + } + + if (isStringMap(x)) { + return x; + } + return panic(`Value must be an object, but is ${x}`); } -export function checkArray(x: any): any[]; -export function checkArray(x: any, checkItem: (v: any) => v is T): T[]; -export function checkArray(x: any, checkItem?: (v: any) => v is T): T[] { +export function checkArray(x: unknown): unknown[]; +export function checkArray(x: unknown, checkItem: (v: unknown) => v is T): T[]; +export function checkArray(x: unknown, checkItem?: (v: unknown) => v is T): T[] { if (!Array.isArray(x)) { return panic(`Value must be an array, but is ${x}`); } + if (checkItem !== undefined) { for (const v of x) { if (!checkItem(v)) { @@ -46,6 +61,7 @@ export function checkArray(x: any, checkItem?: (v: any) => v is T): T[] { } } } + return x; } @@ -60,7 +76,7 @@ export function nonNull(x: T | null): T { } export function assertNever(x: never): never { - return messageError("InternalError", { message: `Unexpected object ${x as any}` }); + return messageError("InternalError", { message: `Unexpected object ${x}` }); } export function assert(condition: boolean, message = "Assertion failed"): void { @@ -82,6 +98,7 @@ export function repeated(n: number, value: T): T[] { for (let i = 0; i < n; i++) { arr.push(value); } + return arr; } @@ -90,14 +107,16 @@ export function repeatedCall(n: number, producer: () => T): T[] { for (let i = 0; i < n; i++) { arr.push(producer()); } + return arr; } -export function errorMessage(e: any): string { +export function errorMessage(e: unknown): string { if (e instanceof Error) { return e.message; } - return e.toString(); + + return (e as { toString: () => string }).toString(); } export function inflateBase64(encoded: string): string { @@ -105,12 +124,13 @@ export function inflateBase64(encoded: string): string { return pako.inflate(bytes, { to: "string" }); } -export function parseJSON(text: string, description: string, address = ""): any { +export function parseJSON(text: string, description: string, address = ""): JSONSchema | undefined { try { // https://gist.github.com/pbakondy/f5045eff725193dad9c7 if (text.charCodeAt(0) === 0xfeff) { text = text.slice(1); } + return YAML.parse(text); } catch (e) { let message: string; @@ -129,7 +149,8 @@ export function indentationString(level: number): string { return " ".repeat(level); } -export function numberEnumValues(e: { [key: string]: any }): number[] { +// FIXME: fix this enum iteration +export function numberEnumValues(e: Record): number[] { const result: number[] = []; for (const k of Object.keys(e)) { const v = e[k]; @@ -137,5 +158,6 @@ export function numberEnumValues(e: { [key: string]: any }): number[] { result.push(v); } } + return result; } diff --git a/packages/quicktype-core/src/types.ts b/packages/quicktype-core/src/types.ts new file mode 100644 index 000000000..2b26cc2be --- /dev/null +++ b/packages/quicktype-core/src/types.ts @@ -0,0 +1,6 @@ +// FIXME: remove these when options are strongly types + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export type FixMeOptionsType = Record; + +export type FixMeOptionsAnyType = any; diff --git a/packages/quicktype-graphql-input/src/index.ts b/packages/quicktype-graphql-input/src/index.ts index 515c5c258..1b18754ac 100644 --- a/packages/quicktype-graphql-input/src/index.ts +++ b/packages/quicktype-graphql-input/src/index.ts @@ -1,66 +1,65 @@ +import { iterableFirst, mapFromObject, setMap } from "collection-utils"; +import * as graphql from "graphql/language"; import { - DocumentNode, - SelectionSetNode, - SelectionNode, - OperationDefinitionNode, - FragmentDefinitionNode, - DirectiveNode, - FieldNode + type DirectiveNode, + type DocumentNode, + type FieldNode, + type FragmentDefinitionNode, + type OperationDefinitionNode, + type SelectionNode, + type SelectionSetNode } from "graphql/language/ast"; -import * as graphql from "graphql/language"; -import { setMap, iterableFirst, mapFromObject } from "collection-utils"; - import { + type ClassProperty, + type Input, + type RunContext, + StringTypes, + type TypeAttributes, + type TypeBuilder, + TypeNames, + type TypeRef, UnionType, - ClassProperty, - removeNullFromUnion, assertNever, - panic, - TypeBuilder, - TypeRef, - TypeNames, + derefTypeRef, + emptyTypeAttributes, makeNamesTypeAttributes, - namesTypeAttributeKind, messageAssert, - TypeAttributes, - emptyTypeAttributes, - StringTypes, - Input, - derefTypeRef, - RunContext + namesTypeAttributeKind, + panic, + removeNullFromUnion } from "quicktype-core"; -import { TypeKind, GraphQLSchema } from "./GraphQLSchema"; +import { type GraphQLSchema, TypeKind } from "./GraphQLSchema"; interface GQLType { - kind: TypeKind; - name?: string; description?: string; - ofType?: GQLType; + enumValues?: EnumValue[]; fields?: Field[]; + inputFields?: InputValue[]; interfaces?: GQLType[]; + kind: TypeKind; + name?: string; + ofType?: GQLType; possibleTypes?: GQLType[]; - inputFields?: InputValue[]; - enumValues?: EnumValue[]; } interface EnumValue { - name: string; description?: string; + name: string; } interface Field { - name: string; + args: InputValue[]; description?: string; + name: string; type: GQLType; - args: InputValue[]; } interface InputValue { - name: string; + defaultValue?: string; description?: string; + name: string; type: GQLType; - defaultValue?: string; } function getField(t: GQLType, name: string): Field { @@ -70,6 +69,7 @@ function getField(t: GQLType, name: string): Field { return f; } } + return panic(`Required field ${name} not defined on type ${t.name}.`); } @@ -93,6 +93,7 @@ function makeNullable( if (!(t instanceof UnionType)) { return builder.getUnionType(typeNames, new Set([tref, builder.getPrimitiveType("null")])); } + const [maybeNull, nonNulls] = removeNullFromUnion(t); if (maybeNull) return tref; return builder.getUnionType(typeNames, setMap(nonNulls, nn => nn.typeRef).add(builder.getPrimitiveType("null"))); @@ -109,6 +110,7 @@ function removeNull(builder: TypeBuilder, tref: TypeRef): TypeRef { if (!(t instanceof UnionType)) { return tref; } + const nonNulls = removeNullFromUnion(t)[1]; const first = iterableFirst(nonNulls); if (first) { @@ -118,6 +120,7 @@ function removeNull(builder: TypeBuilder, tref: TypeRef): TypeRef { setMap(nonNulls, nn => nn.typeRef) ); } + return panic("Trying to remove null results in empty union."); } @@ -141,13 +144,14 @@ function hasOptionalDirectives(directives?: DirectiveNode[]): boolean { const name = d.name.value; if (name === "include" || name === "skip") return true; } + return false; } interface Selection { - selection: SelectionNode; inType: GQLType; optional: boolean; + selection: SelectionNode; } function expandSelectionSet(selectionSet: SelectionSetNode, inType: GQLType, optional: boolean): Selection[] { @@ -157,18 +161,19 @@ function expandSelectionSet(selectionSet: SelectionSetNode, inType: GQLType, opt } interface GQLSchema { - readonly types: { [name: string]: GQLType }; - readonly queryType: GQLType; readonly mutationType?: GQLType; + readonly queryType: GQLType; + readonly types: { [name: string]: GQLType }; } class GQLQuery { private readonly _schema: GQLSchema; + private readonly _fragments: { [name: string]: FragmentDefinitionNode }; - readonly queries: ReadonlyArray; + public readonly queries: readonly OperationDefinitionNode[]; - constructor(schema: GQLSchema, queryString: string) { + public constructor(schema: GQLSchema, queryString: string) { this._schema = schema; this._fragments = {}; @@ -183,11 +188,12 @@ class GQLQuery { this._fragments[def.name.value] = def; } } + messageAssert(queries.length >= 1, "GraphQLNoQueriesDefined", {}); this.queries = queries; } - private makeIRTypeFromFieldNode = ( + private readonly makeIRTypeFromFieldNode = ( builder: TypeBuilder, fieldNode: FieldNode, fieldType: GQLType, @@ -206,6 +212,7 @@ class GQLQuery { if (!fieldNode.selectionSet) { return panic("No selection set on object or interface"); } + return makeNullable( builder, this.makeIRTypeFromSelectionSet( @@ -223,6 +230,7 @@ class GQLQuery { if (!fieldType.enumValues) { return panic("Enum type doesn't have values"); } + const values = fieldType.enumValues.map(ev => ev.name); let name: string; let fieldName: string | null; @@ -233,6 +241,7 @@ class GQLQuery { name = fieldNode.name.value; fieldName = null; } + optional = true; result = builder.getEnumType(makeNames(name, fieldName, containingTypeName), new Set(values)); break; @@ -243,6 +252,7 @@ class GQLQuery { if (!fieldType.ofType) { return panic("No type for list"); } + optional = true; result = builder.getArrayType( emptyTypeAttributes, @@ -253,6 +263,7 @@ class GQLQuery { if (!fieldType.ofType) { return panic("No type for non-null"); } + result = removeNull( builder, this.makeIRTypeFromFieldNode(builder, fieldNode, fieldType.ofType, containingTypeName) @@ -261,19 +272,21 @@ class GQLQuery { default: return assertNever(fieldType.kind); } + if (optional) { result = makeNullable(builder, result, fieldNode.name.value, null, containingTypeName); } + return result; }; - private getFragment = (name: string): FragmentDefinitionNode => { + private readonly getFragment = (name: string): FragmentDefinitionNode => { const fragment = this._fragments[name]; if (!fragment) return panic(`Fragment ${name} is not defined.`); return fragment; }; - private makeIRTypeFromSelectionSet = ( + private readonly makeIRTypeFromSelectionSet = ( builder: TypeBuilder, selectionSet: SelectionSetNode, gqlType: GQLType, @@ -288,10 +301,12 @@ class GQLQuery { ) { return panic("Type for selection set is not object, interface, or union."); } + if (!gqlType.name) { return panic("Object, interface, or union type doesn't have a name."); } - const nameOrOverride = overrideName || gqlType.name; + + const nameOrOverride = overrideName ?? gqlType.name; const properties = new Map(); let selections = expandSelectionSet(selectionSet, gqlType, false); for (;;) { @@ -314,6 +329,7 @@ class GQLQuery { selections = selections.concat(expanded); break; } + case "InlineFragment": { // FIXME: support type conditions with discriminated unions const fragmentType = selection.typeCondition @@ -325,14 +341,16 @@ class GQLQuery { selections = selections.concat(expanded); break; } + default: assertNever(selection); } } + return builder.getClassType(makeNames(nameOrOverride, containingFieldName, containingTypeName), properties); }; - makeType(builder: TypeBuilder, query: OperationDefinitionNode, queryName: string): TypeRef { + public makeType(builder: TypeBuilder, query: OperationDefinitionNode, queryName: string): TypeRef { if (query.operation === "query") { return this.makeIRTypeFromSelectionSet( builder, @@ -364,13 +382,14 @@ class GQLQuery { } class GQLSchemaFromJSON implements GQLSchema { - readonly types: { [name: string]: GQLType } = {}; - // @ts-ignore: The constructor can return early, but only by throwing. - readonly queryType: GQLType; - // @ts-ignore: The constructor can return early, but only by throwing. - readonly mutationType?: GQLType; + public readonly types: { [name: string]: GQLType } = {}; + + // @ts-expect-error: The constructor can return early, but only by throwing. + public readonly queryType: GQLType; + + public readonly mutationType?: GQLType; - constructor(json: any) { + public constructor(json: { data: GraphQLSchema }) { const schema: GraphQLSchema = json.data; if (schema.__schema.queryType.name === null) { @@ -381,6 +400,7 @@ class GQLSchemaFromJSON implements GQLSchema { if (!t.name) return panic("No top-level type name given"); this.types[t.name] = { kind: t.kind, name: t.name, description: t.description }; } + for (const t of schema.__schema.types) { if (!t.name) return panic("This cannot happen"); const type = this.types[t.name]; @@ -392,6 +412,7 @@ class GQLSchemaFromJSON implements GQLSchema { if (queryType === undefined) { return panic("Query type not found."); } + // console.log(`query type ${queryType.name} is ${queryType.kind}`); this.queryType = queryType; @@ -411,7 +432,7 @@ class GQLSchemaFromJSON implements GQLSchema { this.mutationType = mutationType; } - private addTypeFields = (target: GQLType, source: GQLType): void => { + private readonly addTypeFields = (target: GQLType, source: GQLType): void => { if (source.fields) { target.fields = source.fields.map(f => { return { @@ -423,18 +444,22 @@ class GQLSchemaFromJSON implements GQLSchema { }); // console.log(`${target.name} has ${target.fields.length} fields`); } + if (source.interfaces) { target.interfaces = source.interfaces.map(this.makeType); // console.log(`${target.name} has ${target.interfaces.length} interfaces`); } + if (source.possibleTypes) { target.possibleTypes = source.possibleTypes.map(this.makeType); // console.log(`${target.name} has ${target.possibleTypes.length} possibleTypes`); } + if (source.inputFields) { target.inputFields = source.inputFields.map(this.makeInputValue); // console.log(`${target.name} has ${target.inputFields.length} inputFields`); } + if (source.enumValues) { target.enumValues = source.enumValues.map(ev => { return { name: ev.name, description: ev.description }; @@ -443,7 +468,7 @@ class GQLSchemaFromJSON implements GQLSchema { } }; - private makeInputValue = (iv: InputValue): InputValue => { + private readonly makeInputValue = (iv: InputValue): InputValue => { return { name: iv.name, description: iv.description, @@ -452,12 +477,13 @@ class GQLSchemaFromJSON implements GQLSchema { }; }; - private makeType = (t: GQLType): GQLType => { + private readonly makeType = (t: GQLType): GQLType => { if (t.name) { const namedType = this.types[t.name]; if (!namedType) return panic(`Type ${t.name} not found`); return namedType; } + if (!t.ofType) return panic(`Type of kind ${t.kind} has neither name nor ofType`); const type: GQLType = { kind: t.kind, @@ -472,7 +498,7 @@ class GQLSchemaFromJSON implements GQLSchema { function makeGraphQLQueryTypes( topLevelName: string, builder: TypeBuilder, - json: any, + json: { data: GraphQLSchema }, queryString: string ): Map { const schema = new GQLSchemaFromJSON(json); @@ -483,6 +509,7 @@ function makeGraphQLQueryTypes( if (types.has(queryName)) { return panic(`Duplicate query name ${queryName}`); } + const dataType = query.makeType(builder, odn, queryName); const dataOrNullType = builder.getUnionType( emptyTypeAttributes, @@ -512,40 +539,52 @@ function makeGraphQLQueryTypes( ); types.set(queryName, t); } + return types; } -export type GraphQLSourceData = { name: string; schema: any; query: string }; +export interface GraphQLSourceData { + name: string; + query: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + schema: any; +} -type GraphQLTopLevel = { schema: any; query: string }; +interface GraphQLTopLevel { + query: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + schema: any; +} export class GraphQLInput implements Input { - readonly kind: string = "graphql"; - readonly needIR: boolean = true; - readonly needSchemaProcessing: boolean = false; + public readonly kind: string = "graphql"; + + public readonly needIR: boolean = true; + + public readonly needSchemaProcessing: boolean = false; private readonly _topLevels: Map = new Map(); - async addSource(source: GraphQLSourceData): Promise { + public async addSource(source: GraphQLSourceData): Promise { this.addSourceSync(source); } - addSourceSync(source: GraphQLSourceData): void { + public addSourceSync(source: GraphQLSourceData): void { this._topLevels.set(source.name, { schema: source.schema, query: source.query }); } - singleStringSchemaSource(): undefined { + public singleStringSchemaSource(): undefined { return undefined; } - async addTypes(ctx: RunContext, typeBuilder: TypeBuilder): Promise { - return this.addTypesSync(ctx, typeBuilder); + public async addTypes(ctx: RunContext, typeBuilder: TypeBuilder): Promise { + this.addTypesSync(ctx, typeBuilder); } - addTypesSync(_ctx: RunContext, typeBuilder: TypeBuilder): void { + public addTypesSync(_ctx: RunContext, typeBuilder: TypeBuilder): void { for (const [name, { schema, query }] of this._topLevels) { const newTopLevels = makeGraphQLQueryTypes(name, typeBuilder, schema, query); for (const [actualName, t] of newTopLevels) { diff --git a/packages/quicktype-typescript-input/src/index.ts b/packages/quicktype-typescript-input/src/index.ts index 6115ef585..3289e914b 100644 --- a/packages/quicktype-typescript-input/src/index.ts +++ b/packages/quicktype-typescript-input/src/index.ts @@ -1,7 +1,6 @@ +import { type PartialArgs, generateSchema } from "@mark.probst/typescript-json-schema"; +import { type JSONSchemaSourceData, defined, messageError } from "quicktype-core"; import * as ts from "typescript"; -import { PartialArgs, generateSchema } from "@mark.probst/typescript-json-schema"; - -import { defined, JSONSchemaSourceData, messageError } from "quicktype-core"; const settings: PartialArgs = { required: true, @@ -35,13 +34,13 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem const schema = generateSchema(program, "*", settings); const uris: string[] = []; - let topLevelName: string = ""; + let topLevelName = ""; // if there is a type that is `export default`, swap the corresponding ref if (schema?.definitions?.default) { const defaultDefinition = schema?.definitions?.default; const matchingDefaultName = Object.entries(schema?.definitions ?? {}).find( - ([_name, definition]) => (definition as Record)["$ref"] === "#/definitions/default" + ([_name, definition]) => (definition as Record).$ref === "#/definitions/default" )?.[0]; if (matchingDefaultName) { @@ -66,7 +65,7 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem } const description = definition.description as string; - const matches = description.match(/#TopLevel/); + const matches = /#TopLevel/.exec(description); if (matches === null) { continue; } @@ -85,6 +84,7 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem } } } + if (uris.length === 0) { uris.push("#/definitions/"); } diff --git a/packages/quicktype-vscode/src/extension.ts b/packages/quicktype-vscode/src/extension.ts index 3c62a47d2..3e8083721 100644 --- a/packages/quicktype-vscode/src/extension.ts +++ b/packages/quicktype-vscode/src/extension.ts @@ -2,22 +2,22 @@ import * as path from "path"; -import * as vscode from "vscode"; -import { Range } from "vscode"; import { - quicktype, - languageNamed, - SerializedRenderResult, - defaultTargetLanguages, - JSONSchemaInput, InputData, - TargetLanguage, + JSONSchemaInput, + type Options, + type RendererOptions, + type SerializedRenderResult, + type TargetLanguage, + defaultTargetLanguages, + inferenceFlagNames, jsonInputForTargetLanguage, - RendererOptions, - Options, - inferenceFlagNames + languageNamed, + quicktype } from "quicktype-core"; import { schemaForTypeScriptSources } from "quicktype-typescript-input"; +// eslint-disable-next-line import/no-unresolved +import * as vscode from "vscode"; const configurationSection = "quicktype"; @@ -33,12 +33,13 @@ enum Command { ChangeTargetLanguage = "quicktype.changeTargetLanguage" } -function jsonIsValid(json: string) { +function jsonIsValid(json: string): boolean { try { JSON.parse(json); } catch (e) { return false; } + return true; } @@ -49,14 +50,15 @@ async function promptTopLevelName(): Promise<{ cancelled: boolean; name: string return { cancelled: topLevelName === undefined, + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing name: topLevelName || "TopLevel" }; } -type TargetLanguagePick = { +interface TargetLanguagePick { cancelled: boolean; lang: TargetLanguage; -}; +} async function pickTargetLanguage(): Promise { const languageChoices = defaultTargetLanguages.map(l => l.displayName).sort(); @@ -65,7 +67,9 @@ async function pickTargetLanguage(): Promise { if (chosenName === undefined) { chosenName = "typescript"; } - return { cancelled, lang: languageNamed(chosenName)! }; + + // @ts-expect-error languageNamed is not strongly typed yet + return { cancelled, lang: languageNamed(chosenName) }; } async function getTargetLanguage(editor: vscode.TextEditor): Promise { @@ -77,6 +81,7 @@ async function getTargetLanguage(editor: vscode.TextEditor): Promise { let indentation: string; if (editor.options.insertSpaces) { const tabSize = editor.options.tabSize as number; @@ -167,13 +172,11 @@ async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justType try { content = await vscode.env.clipboard.readText(); } catch (e) { - vscode.window.showErrorMessage("Could not get clipboard contents"); - return; + return await vscode.window.showErrorMessage("Could not get clipboard contents"); } if (kind !== "typescript" && !jsonIsValid(content)) { - vscode.window.showErrorMessage("Clipboard does not contain valid JSON."); - return; + return await vscode.window.showErrorMessage("Clipboard does not contain valid JSON."); } let topLevelName: string; @@ -184,46 +187,55 @@ async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justType if (tln.cancelled) { return; } + topLevelName = tln.name; } let result: SerializedRenderResult; try { result = await runQuicktype(content, kind, language.lang, topLevelName, justTypes, indentation); - } catch (e: any) { + } catch (e) { // TODO Invalid JSON produces an uncatchable exception from quicktype // Fix this so we can catch and show an error message. - vscode.window.showErrorMessage(e); - return; + if (typeof e === "string") { + return await vscode.window.showErrorMessage(e); + } } + // @ts-expect-error FIXME: resolve this after above ^ const text = result.lines.join("\n"); const selection = editor.selection; - editor.edit(builder => { + return await editor.edit(builder => { if (selection.isEmpty) { builder.insert(selection.start, text); } else { - builder.replace(new Range(selection.start, selection.end), text); + builder.replace(new vscode.Range(selection.start, selection.end), text); } }); } class CodeProvider implements vscode.TextDocumentContentProvider { - readonly scheme: string = "quicktype"; - readonly uri: vscode.Uri; + public readonly scheme: string = "quicktype"; + + public readonly uri: vscode.Uri; private _documentText: string = "{}"; + private _targetCode = ""; private readonly _onDidChange = new vscode.EventEmitter(); + private readonly _changeSubscription: vscode.Disposable; + private readonly _onDidChangeVisibleTextEditors: vscode.Disposable; + private readonly _onDidChangeConfiguration: vscode.Disposable; private _isOpen = false; + private _timer: NodeJS.Timeout | undefined = undefined; - constructor( + public constructor( private _inputKind: InputKind, private readonly _targetLanguage: TargetLanguage, private _document: vscode.TextDocument @@ -241,50 +253,51 @@ class CodeProvider implements vscode.TextDocumentContentProvider { ); } - dispose(): void { + public dispose(): void { this._onDidChange.dispose(); this._changeSubscription.dispose(); this._onDidChangeVisibleTextEditors.dispose(); this._onDidChangeConfiguration.dispose(); } - get inputKind(): InputKind { + public get inputKind(): InputKind { return this._inputKind; } - setInputKind(inputKind: InputKind): void { + public setInputKind(inputKind: InputKind): void { this._inputKind = inputKind; } - get document(): vscode.TextDocument { + public get document(): vscode.TextDocument { return this._document; } - get documentName(): string { + public get documentName(): string { const basename = path.basename(this.document.fileName); const extIndex = basename.lastIndexOf("."); return extIndex === -1 ? basename : basename.substring(0, extIndex); } - setDocument(document: vscode.TextDocument): void { + public setDocument(document: vscode.TextDocument): void { this._document = document; } - get onDidChange(): vscode.Event { + public get onDidChange(): vscode.Event { return this._onDidChange.event; } - private visibleTextEditorsDidChange(editors: vscode.TextEditor[]) { + private visibleTextEditorsDidChange(editors: vscode.TextEditor[]): void { const isOpen = editors.some(e => e.document.uri.scheme === this.scheme); if (!this._isOpen && isOpen) { - this.update(); + void this.update(); } + this._isOpen = isOpen; } private configurationDidChange(ev: vscode.ConfigurationChangeEvent): void { if (ev.affectsConfiguration(configurationSection)) { - this.update(); + void this.update(); } } @@ -296,13 +309,14 @@ class CodeProvider implements vscode.TextDocumentContentProvider { if (this._timer) { clearTimeout(this._timer); } + this._timer = setTimeout(() => { this._timer = undefined; - this.update(); + void this.update(); }, 300); } - async update(): Promise { + public async update(): Promise { this._documentText = this._document.getText(); try { @@ -319,10 +333,15 @@ class CodeProvider implements vscode.TextDocumentContentProvider { if (!this._isOpen) return; this._onDidChange.fire(this.uri); - } catch (e) {} + } catch (e) { + // FIXME + } } - provideTextDocumentContent(_uri: vscode.Uri, _token: vscode.CancellationToken): vscode.ProviderResult { + public provideTextDocumentContent( + _uri: vscode.Uri, + _token: vscode.CancellationToken + ): vscode.ProviderResult { this._isOpen = true; return this._targetCode; @@ -338,15 +357,19 @@ function deduceTargetLanguage(): TargetLanguage { if (count === undefined) { count = 0; } + count += 1; counts.set(name, count); } + const sorted = Array.from(counts).sort(([_na, ca], [_nb, cb]) => cb - ca); for (const [name] of sorted) { const lang = languageNamed(name); if (lang !== undefined) return lang; } - return languageNamed("typescript")!; + + // @ts-expect-error languageNamed is not yet strongly typed + return languageNamed("typescript"); } const lastTargetLanguageUsedKey = "lastTargetLanguageUsed"; @@ -362,7 +385,7 @@ async function openQuicktype( inputKind: InputKind, targetLanguage: TargetLanguage, document: vscode.TextDocument -): Promise { +): Promise { let codeProvider = codeProviders.get(targetLanguage.name); if (codeProvider === undefined) { codeProvider = new CodeProvider(inputKind, targetLanguage, document); @@ -379,15 +402,16 @@ async function openQuicktype( let originalEditor: vscode.TextEditor | undefined; if (lastCodeProvider !== undefined) { - const doc = lastCodeProvider.document; - originalEditor = vscode.window.visibleTextEditors.find(e => e.document === doc); + const lastDoc = lastCodeProvider.document; + originalEditor = vscode.window.visibleTextEditors.find(e => e.document === lastDoc); } + if (originalEditor === undefined) { originalEditor = vscode.window.activeTextEditor; } let column: number; - if (originalEditor !== undefined && originalEditor.viewColumn !== undefined) { + if (originalEditor?.viewColumn !== undefined) { column = originalEditor.viewColumn + 1; } else { column = 0; @@ -395,14 +419,13 @@ async function openQuicktype( lastCodeProvider = codeProvider; - codeProvider.update(); + await codeProvider.update(); const doc = await vscode.workspace.openTextDocument(codeProvider.uri); - vscode.window.showTextDocument(doc, column, true); + return await vscode.window.showTextDocument(doc, column, true); } async function openForEditor(editor: vscode.TextEditor, inputKind: InputKind): Promise { - const targetLanguage = - explicitlySetTargetLanguage !== undefined ? explicitlySetTargetLanguage : deduceTargetLanguage(); + const targetLanguage = explicitlySetTargetLanguage ?? deduceTargetLanguage(); await openQuicktype(inputKind, targetLanguage, editor.document); } @@ -422,29 +445,37 @@ export async function activate(context: vscode.ExtensionContext): Promise extensionContext = context; context.subscriptions.push( - vscode.commands.registerTextEditorCommand(Command.PasteJSONAsTypes, editor => - pasteAsTypes(editor, "json", true) + vscode.commands.registerTextEditorCommand( + Command.PasteJSONAsTypes, + async editor => await pasteAsTypes(editor, "json", true) ), - vscode.commands.registerTextEditorCommand(Command.PasteJSONAsTypesAndSerialization, editor => - pasteAsTypes(editor, "json", false) + vscode.commands.registerTextEditorCommand( + Command.PasteJSONAsTypesAndSerialization, + async editor => await pasteAsTypes(editor, "json", false) ), - vscode.commands.registerTextEditorCommand(Command.PasteSchemaAsTypes, editor => - pasteAsTypes(editor, "schema", true) + vscode.commands.registerTextEditorCommand( + Command.PasteSchemaAsTypes, + async editor => await pasteAsTypes(editor, "schema", true) ), - vscode.commands.registerTextEditorCommand(Command.PasteSchemaAsTypesAndSerialization, editor => - pasteAsTypes(editor, "schema", false) + vscode.commands.registerTextEditorCommand( + Command.PasteSchemaAsTypesAndSerialization, + async editor => await pasteAsTypes(editor, "schema", false) ), - vscode.commands.registerTextEditorCommand(Command.PasteTypeScriptAsTypesAndSerialization, editor => - pasteAsTypes(editor, "typescript", false) + vscode.commands.registerTextEditorCommand( + Command.PasteTypeScriptAsTypesAndSerialization, + async editor => await pasteAsTypes(editor, "typescript", false) ), - vscode.commands.registerTextEditorCommand(Command.OpenQuicktypeForJSON, editor => - openForEditor(editor, "json") + vscode.commands.registerTextEditorCommand( + Command.OpenQuicktypeForJSON, + async editor => await openForEditor(editor, "json") ), - vscode.commands.registerTextEditorCommand(Command.OpenQuicktypeForJSONSchema, editor => - openForEditor(editor, "schema") + vscode.commands.registerTextEditorCommand( + Command.OpenQuicktypeForJSONSchema, + async editor => await openForEditor(editor, "schema") ), - vscode.commands.registerTextEditorCommand(Command.OpenQuicktypeForTypeScript, editor => - openForEditor(editor, "typescript") + vscode.commands.registerTextEditorCommand( + Command.OpenQuicktypeForTypeScript, + async editor => await openForEditor(editor, "typescript") ), vscode.commands.registerCommand(Command.ChangeTargetLanguage, changeTargetLanguage) ); diff --git a/src/CompressedJSONFromStream.ts b/src/CompressedJSONFromStream.ts index 84c6ffe6f..16a9c78b0 100644 --- a/src/CompressedJSONFromStream.ts +++ b/src/CompressedJSONFromStream.ts @@ -1,7 +1,8 @@ -import { Readable } from "readable-stream"; -import { CompressedJSON, Value } from "quicktype-core"; +import { type Readable } from "readable-stream"; import { Parser } from "stream-json"; +import { CompressedJSON, type Value } from "quicktype-core"; + const methodMap: { [name: string]: string } = { startObject: "pushObjectContext", endObject: "finishObject", @@ -18,25 +19,26 @@ const methodMap: { [name: string]: string } = { }; export class CompressedJSONFromStream extends CompressedJSON { - async parse(readStream: Readable): Promise { + public async parse(readStream: Readable): Promise { const combo = new Parser({ packKeys: true, packStrings: true }); combo.on("data", (item: { name: string; value: string | undefined }) => { if (typeof methodMap[item.name] === "string") { - (this as any)[methodMap[item.name]](item.value); + // @ts-expect-error FIXME: strongly type this + this[methodMap[item.name]](item.value); } }); const promise = new Promise((resolve, reject) => { combo.on("end", () => { resolve(this.finish()); }); - combo.on("error", (err: any) => { + combo.on("error", (err: unknown) => { reject(err); }); }); readStream.setEncoding("utf8"); readStream.pipe(combo); readStream.resume(); - return promise; + return await promise; } protected handleStartNumber = (): void => { @@ -46,7 +48,7 @@ export class CompressedJSONFromStream extends CompressedJSON { protected handleNumberChunk = (s: string): void => { const ctx = this.context; - if (!ctx.currentNumberIsDouble && /[\.e]/i.test(s)) { + if (!ctx.currentNumberIsDouble && /[.e]/i.test(s)) { ctx.currentNumberIsDouble = true; } }; diff --git a/src/GraphQLIntrospection.ts b/src/GraphQLIntrospection.ts index 71106b1df..840cf3c5a 100644 --- a/src/GraphQLIntrospection.ts +++ b/src/GraphQLIntrospection.ts @@ -1,8 +1,8 @@ -import { panic } from "quicktype-core"; -import { introspectionQuery } from "graphql"; import { exceptionToString } from "@glideapps/ts-necessities"; - import fetch from "cross-fetch"; +import { introspectionQuery } from "graphql"; + +import { panic } from "quicktype-core"; // https://github.com/apollographql/apollo-codegen/blob/master/src/downloadSchema.ts const defaultHeaders: { [name: string]: string } = { @@ -18,11 +18,13 @@ export async function introspectServer(url: string, method: string, headerString for (const name of Object.getOwnPropertyNames(defaultHeaders)) { headers[name] = defaultHeaders[name]; } + for (const str of headerStrings) { - const matches = str.match(headerRegExp); + const matches = headerRegExp.exec(str); if (matches === null) { return panic(`Not a valid HTTP header: "${str}"`); } + headers[matches[1]] = matches[2]; } diff --git a/src/TypeSource.ts b/src/TypeSource.ts index cc693c4c9..1c58e2e73 100644 --- a/src/TypeSource.ts +++ b/src/TypeSource.ts @@ -1,7 +1,7 @@ -import { Readable } from "readable-stream"; +import { type Readable } from "readable-stream"; -import { JSONSourceData, JSONSchemaSourceData } from "quicktype-core"; -import { GraphQLSourceData } from "quicktype-graphql-input"; +import { type JSONSchemaSourceData, type JSONSourceData } from "quicktype-core"; +import { type GraphQLSourceData } from "quicktype-graphql-input"; export interface JSONTypeSource extends JSONSourceData { kind: "json"; diff --git a/src/URLGrammar.ts b/src/URLGrammar.ts index 5280846f0..3eaaaa1ca 100644 --- a/src/URLGrammar.ts +++ b/src/URLGrammar.ts @@ -1,9 +1,10 @@ -import { panic, checkStringMap, checkArray } from "quicktype-core"; +import { checkArray, checkStringMap, panic } from "quicktype-core"; -function expand(json: any): string[] { +function expand(json: unknown): string[] { if (typeof json === "string") { return [json]; } + if (Array.isArray(json)) { let result: string[] = [""]; for (const j of json) { @@ -14,11 +15,14 @@ function expand(json: any): string[] { appended.push(a + b); } } + result = appended; } + return result; } - if (Object.prototype.hasOwnProperty.call(json, "oneOf")) { + + if (typeof json === "object" && json && "oneOf" in json) { const options = checkArray(json.oneOf); const result: string[] = []; for (const j of options) { @@ -26,12 +30,14 @@ function expand(json: any): string[] { result.push(x); } } + return result; } + return panic(`Value is not a valid URL grammar: ${json}`); } -export function urlsFromURLGrammar(json: any): { [name: string]: string[] } { +export function urlsFromURLGrammar(json: unknown): { [name: string]: string[] } { const topLevelMap = checkStringMap(json); const results: { [name: string]: string[] } = {}; diff --git a/src/index.ts b/src/index.ts index 109161c79..fe252a087 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,89 +1,92 @@ #!/usr/bin/env node import * as fs from "fs"; import * as path from "path"; -import * as _ from "lodash"; -import { Readable } from "readable-stream"; -import { hasOwnProperty, definedMap, withDefault, mapFromObject, mapMap } from "collection-utils"; + import { exceptionToString } from "@glideapps/ts-necessities"; +import chalk from "chalk"; +// eslint-disable-next-line @typescript-eslint/no-redeclare +import { definedMap, hasOwnProperty, mapFromObject, mapMap, withDefault } from "collection-utils"; +import commandLineArgs from "command-line-args"; +import getUsage from "command-line-usage"; +import * as _ from "lodash"; +import { type Readable } from "readable-stream"; +import stringToStream from "string-to-stream"; +import _wordwrap from "wordwrap"; import { - Options, - RendererOptions, - getTargetLanguage, - quicktypeMultiFile, - SerializedRenderResult, - TargetLanguage, - languageNamed, + FetchingJSONSchemaStore, InputData, - JSONSchemaInput, - OptionDefinition, - defaultTargetLanguages, IssueAnnotationData, - panic, + JSONInput, + JSONSchemaInput, + type JSONSourceData, + type OptionDefinition, + type Options, + type RendererOptions, + type SerializedRenderResult, + type TargetLanguage, assert, - defined, assertNever, - parseJSON, - trainMarkovChain, - messageError, - messageAssert, - sourcesFromPostmanCollection, - inferenceFlags, - inferenceFlagNames, - splitIntoWords, capitalize, - JSONSourceData, - JSONInput, + defaultTargetLanguages, + defined, getStream, - readableFromFileOrURL, + getTargetLanguage, + inferenceFlagNames, + inferenceFlags, + languageNamed, + messageAssert, + messageError, + panic, + parseJSON, + quicktypeMultiFile, readFromFileOrURL, - FetchingJSONSchemaStore + readableFromFileOrURL, + sourcesFromPostmanCollection, + splitIntoWords, + trainMarkovChain } from "quicktype-core"; -import { schemaForTypeScriptSources } from "quicktype-typescript-input"; import { GraphQLInput } from "quicktype-graphql-input"; +import { schemaForTypeScriptSources } from "quicktype-typescript-input"; -import { urlsFromURLGrammar } from "./URLGrammar"; -import { introspectServer } from "./GraphQLIntrospection"; -import { JSONTypeSource, TypeSource, GraphQLTypeSource, SchemaTypeSource } from "./TypeSource"; -import { CompressedJSONFromStream } from "./CompressedJSONFromStream"; - -const stringToStream = require("string-to-stream"); +import packageJSON from "../package.json"; -import commandLineArgs from "command-line-args"; -import getUsage from "command-line-usage"; -import chalk from "chalk"; -const wordWrap: (s: string) => string = require("wordwrap")(90); +import { CompressedJSONFromStream } from "./CompressedJSONFromStream"; +import { introspectServer } from "./GraphQLIntrospection"; +import { type GraphQLTypeSource, type JSONTypeSource, type SchemaTypeSource, type TypeSource } from "./TypeSource"; +import { urlsFromURLGrammar } from "./URLGrammar"; -const packageJSON = require("../package.json"); +const wordWrap: (s: string) => string = _wordwrap(90); export interface CLIOptions { - lang: string; - topLevel: string; - src: string[]; - srcUrls?: string; - srcLang: string; + // We use this to access the inference flags + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [option: string]: any; additionalSchema: string[]; - graphqlSchema?: string; + allPropertiesOptional: boolean; + alphabetizeProperties: boolean; + buildMarkovChain?: string; + debug?: string; graphqlIntrospect?: string; + graphqlSchema?: string; + help: boolean; httpHeader?: string[]; httpMethod?: string; - out?: string; - buildMarkovChain?: string; + lang: string; - alphabetizeProperties: boolean; - allPropertiesOptional: boolean; noRender: boolean; + out?: string; + quiet: boolean; rendererOptions: RendererOptions; - help: boolean; - quiet: boolean; - version: boolean; - debug?: string; + src: string[]; + srcLang: string; + srcUrls?: string; telemetry?: string; + topLevel: string; - // We use this to access the inference flags - [option: string]: any; + version: boolean; } const defaultDefaultTargetLanguageName = "go"; @@ -93,7 +96,7 @@ async function sourceFromFileOrUrlArray( filesOrUrls: string[], httpHeaders?: string[] ): Promise { - const samples = await Promise.all(filesOrUrls.map(file => readableFromFileOrURL(file, httpHeaders))); + const samples = await Promise.all(filesOrUrls.map(async file => await readableFromFileOrURL(file, httpHeaders))); return { kind: "json", name, samples }; } @@ -156,6 +159,7 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr if (graphQLSchema === undefined) { return messageError("DriverNoGraphQLSchemaInDir", { dir: dataDir }); } + const schema = parseJSON(await getStream(graphQLSchema), "GraphQL schema", graphQLSchemaFileName); for (const source of graphQLSources) { source.schema = schema; @@ -196,7 +200,8 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr return messageError("DriverCannotMixJSONWithOtherSamples", { dir: dir }); } - const oneUnlessEmpty = (xs: any[]) => Math.sign(xs.length); + // FIXME: rewrite this to be clearer + const oneUnlessEmpty = (xs: TypeSource[]): 0 | 1 => Math.sign(xs.length) as 0 | 1; if (oneUnlessEmpty(schemaSources) + oneUnlessEmpty(graphQLSources) > 1) { return messageError("DriverCannotMixNonJSONInputs", { dir: dir }); } @@ -208,6 +213,7 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr samples: jsonSamples }); } + sources = sources.concat(schemaSources); sources = sources.concat(graphQLSources); } @@ -222,6 +228,7 @@ function inferLang(options: Partial, defaultLanguage: string): strin if (extension === "") { return messageError("DriverNoLanguageOrExtension", {}); } + return extension.slice(1); } @@ -263,30 +270,31 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua if (targetLanguage !== undefined) { language = targetLanguage; } else { - const languageName = opts.lang !== undefined ? opts.lang : inferLang(opts, defaultDefaultTargetLanguageName); + const languageName = opts.lang ?? inferLang(opts, defaultDefaultTargetLanguageName); const maybeLanguage = languageNamed(languageName); if (maybeLanguage === undefined) { return messageError("DriverUnknownOutputLanguage", { lang: languageName }); } + language = maybeLanguage; } const options: CLIOptions = { - src: opts.src || [], + src: opts.src ?? [], srcUrls: opts.srcUrls, srcLang: srcLang, lang: language.displayName, - topLevel: opts.topLevel || inferTopLevel(opts), + topLevel: opts.topLevel ?? inferTopLevel(opts), noRender: !!opts.noRender, alphabetizeProperties: !!opts.alphabetizeProperties, allPropertiesOptional: !!opts.allPropertiesOptional, - rendererOptions: opts.rendererOptions || {}, - help: opts.help || false, - quiet: opts.quiet || false, - version: opts.version || false, + rendererOptions: opts.rendererOptions ?? {}, + help: opts.help ?? false, + quiet: opts.quiet ?? false, + version: opts.version ?? false, out: opts.out, buildMarkovChain: opts.buildMarkovChain, - additionalSchema: opts.additionalSchema || [], + additionalSchema: opts.additionalSchema ?? [], graphqlSchema: opts.graphqlSchema, graphqlIntrospect: opts.graphqlIntrospect, httpMethod: opts.httpMethod, @@ -298,6 +306,7 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua const cliName = negatedInferenceFlagName(flagName); options[cliName] = !!opts[cliName]; } + return options; } @@ -311,6 +320,7 @@ function negatedInferenceFlagName(name: string): string { if (name.startsWith(prefix)) { name = name.slice(prefix.length); } + return "no" + capitalize(name); } @@ -326,7 +336,7 @@ function makeOptionDefinitions(targetLanguages: TargetLanguage[]): OptionDefinit name: "out", alias: "o", type: String, - typeLabel: `FILE`, + typeLabel: "FILE", description: "The output file. Determines --lang and --top-level." }, { @@ -473,8 +483,8 @@ function makeOptionDefinitions(targetLanguages: TargetLanguage[]): OptionDefinit interface ColumnDefinition { name: string; - width?: number; padding?: { left: string; right: string }; + width?: number; } interface TableOptions { @@ -482,11 +492,11 @@ interface TableOptions { } interface UsageSection { - header?: string; content?: string | string[]; + header?: string; + hide?: string[]; optionList?: OptionDefinition[]; tableOptions?: TableOptions; - hide?: string[]; } const tableOptionsForOptions: TableOptions = { @@ -574,6 +584,7 @@ export function parseCLIOptions(argv: string[], targetLanguage?: TargetLanguage) if (targetLanguage === undefined) { targetLanguage = getTargetLanguage(incompleteOptions.lang); } + const rendererOptionDefinitions = targetLanguage.cliOptionDefinitions.actual; // Use the global options as well as the renderer options from now on: const allOptionDefinitions = _.concat(optionDefinitions, rendererOptionDefinitions); @@ -585,6 +596,8 @@ export function parseCLIOptions(argv: string[], targetLanguage?: TargetLanguage) // according to each option definition's `renderer` field. If `partial` is false this // will throw if it encounters an unknown option. function parseOptions(definitions: OptionDefinition[], argv: string[], partial: boolean): Partial { + // FIXME: update this when options strongly typed + // eslint-disable-next-line @typescript-eslint/no-explicit-any let opts: { [key: string]: any }; try { opts = commandLineArgs(definitions, { argv, partial }); @@ -592,6 +605,7 @@ function parseOptions(definitions: OptionDefinition[], argv: string[], partial: assert(!partial, "Partial option parsing should not have failed"); return messageError("DriverCLIOptionParsingFailed", { message: exceptionToString(e) }); } + for (const k of Object.keys(opts)) { if (opts[k] === null) { return messageError("DriverCLIOptionParsingFailed", { @@ -600,7 +614,8 @@ function parseOptions(definitions: OptionDefinition[], argv: string[], partial: } } - const options: { rendererOptions: RendererOptions; [key: string]: any } = { rendererOptions: {} }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const options: { [key: string]: any; rendererOptions: RendererOptions } = { rendererOptions: {} }; for (const o of definitions) { if (!hasOwnProperty(opts, o.name)) continue; const v = opts[o.name] as string; @@ -610,10 +625,11 @@ function parseOptions(definitions: OptionDefinition[], argv: string[], partial: options[k] = v; } } + return options; } -function usage(targetLanguages: TargetLanguage[]) { +function usage(targetLanguages: TargetLanguage[]): void { const rendererSections: UsageSection[] = []; for (const language of targetLanguages) { @@ -633,7 +649,7 @@ function usage(targetLanguages: TargetLanguage[]) { } // Returns an array of [name, sourceURIs] pairs. -async function getSourceURIs(options: CLIOptions): Promise<[string, string[]][]> { +async function getSourceURIs(options: CLIOptions): Promise> { if (options.srcUrls !== undefined) { const json = parseJSON( await readFromFileOrURL(options.srcUrls, options.httpHeader), @@ -696,6 +712,7 @@ export function jsonInputForTargetLanguage( if (typeof targetLanguage === "string") { targetLanguage = defined(languageNamed(targetLanguage, languages)); } + const compressedJSON = new CompressedJSONFromStream(targetLanguage.dateTimeRecognizer, handleJSONRefs); return new JSONInput(compressedJSON); } @@ -703,7 +720,7 @@ export function jsonInputForTargetLanguage( async function makeInputData( sources: TypeSource[], targetLanguage: TargetLanguage, - additionalSchemaAddresses: ReadonlyArray, + additionalSchemaAddresses: readonly string[], handleJSONRefs: boolean, httpHeaders?: string[] ): Promise { @@ -735,7 +752,11 @@ async function makeInputData( } function stringSourceDataToStreamSourceData(src: JSONSourceData): JSONSourceData { - return { name: src.name, description: src.description, samples: src.samples.map(stringToStream) }; + return { + name: src.name, + description: src.description, + samples: src.samples.map(sample => stringToStream(sample) as Readable) + }; } export async function makeQuicktypeOptions( @@ -743,14 +764,16 @@ export async function makeQuicktypeOptions( targetLanguages?: TargetLanguage[] ): Promise | undefined> { if (options.help) { - usage(targetLanguages === undefined ? defaultTargetLanguages : targetLanguages); + usage(targetLanguages ?? defaultTargetLanguages); return undefined; } + if (options.version) { console.log(`quicktype version ${packageJSON.version}`); console.log("Visit quicktype.io for more info."); return undefined; } + if (options.buildMarkovChain !== undefined) { const contents = fs.readFileSync(options.buildMarkovChain).toString(); const lines = contents.split("\n"); @@ -777,20 +800,24 @@ export async function makeQuicktypeOptions( wroteSchemaToFile = true; } } + const numSources = options.src.length; if (numSources !== 1) { if (wroteSchemaToFile) { // We're done. return undefined; } + if (numSources === 0) { if (schemaString !== undefined) { console.log(schemaString); return undefined; } + return messageError("DriverNoGraphQLQueryGiven", {}); } } + const gqlSources: GraphQLTypeSource[] = []; for (const queryFile of options.src) { let schemaFileName: string | undefined = undefined; @@ -798,11 +825,13 @@ export async function makeQuicktypeOptions( schemaFileName = defined(options.graphqlSchema); schemaString = fs.readFileSync(schemaFileName, "utf8"); } + const schema = parseJSON(schemaString, "GraphQL schema", schemaFileName); const query = await getStream(await readableFromFileOrURL(queryFile, options.httpHeader)); const name = numSources === 1 ? options.topLevel : typeNameFromFilename(queryFile); gqlSources.push({ kind: "graphql", name, schema, query }); } + sources = gqlSources; break; case "json": @@ -824,20 +853,23 @@ export async function makeQuicktypeOptions( Object.assign({ kind: "json" }, stringSourceDataToStreamSourceData(src)) as JSONTypeSource ); } + if (postmanSources.length > 1) { fixedTopLevels = true; } + if (description !== undefined) { leadingComments = wordWrap(description).split("\n"); } } + break; default: return messageError("DriverUnknownSourceLanguage", { lang: options.srcLang }); } const components = definedMap(options.debug, d => d.split(",")); - const debugAll = components !== undefined && components.indexOf("all") >= 0; + const debugAll = components !== undefined && components.includes("all"); let debugPrintGraph = debugAll; let checkProvenance = debugAll; let debugPrintReconstitution = debugAll; @@ -925,14 +957,18 @@ export function writeOutput( if (!onFirst) { process.stdout.write("\n"); } + if (resultsByFilename.size > 1) { process.stdout.write(`// ${filename}\n\n`); } + process.stdout.write(output); } + if (cliOptions.quiet) { continue; } + for (const sa of annotations) { const annotation = sa.annotation; if (!(annotation instanceof IssueAnnotationData)) continue; @@ -946,7 +982,7 @@ export function writeOutput( } } -export async function main(args: string[] | Partial) { +export async function main(args: string[] | Partial): Promise { let cliOptions: CLIOptions; if (Array.isArray(args)) { cliOptions = parseCLIOptions(args); @@ -964,6 +1000,7 @@ export async function main(args: string[] | Partial) { console.error(chalk.red("telemetry must be 'enable' or 'disable'")); return; } + if (Array.isArray(args) && args.length === 2) { // This was merely a CLI run to set telemetry and we should not proceed return; @@ -985,6 +1022,7 @@ if (require.main === module) { } else { console.error(e); } + process.exit(1); }); } diff --git a/test/tsconfig.json b/test/tsconfig.json index 26618760c..a042b47f7 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -4,7 +4,8 @@ "strict": true, "alwaysStrict": true, "noUnusedLocals": true, - "noUnusedParameters": true + "noUnusedParameters": true, + "resolveJsonModule": true }, "include": ["*.ts", "../dist/*.js", "../dist/*.d.ts"] } diff --git a/tsconfig.json b/tsconfig.json index 60bab643b..4f1446d5e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,8 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "outDir": "dist", - "baseUrl": "src" + "baseUrl": "src", + "resolveJsonModule": true }, "include": ["src"] } From 50713eb075a0198fca18cca6ac312fab1601e064 Mon Sep 17 00:00:00 2001 From: Rui Chen Date: Mon, 13 May 2024 00:21:24 -0400 Subject: [PATCH 71/99] fix: update `dist/index.js` to `dist/src/index.js` (#2594) Signed-off-by: Rui Chen --- package-lock.json | 2 +- package.json | 6 +++--- packages/quicktype-core/package.json | 2 +- packages/quicktype-graphql-input/package.json | 2 +- packages/quicktype-typescript-input/package.json | 2 +- script/quicktype | 9 ++++++--- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1dd564e76..6656cd0b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "typescript": "4.9.5" }, "bin": { - "quicktype": "dist/index.js" + "quicktype": "dist/src/index.js" }, "devDependencies": { "@tsconfig/node18": "^1.0.1", diff --git a/package.json b/package.json index 4b723ca95..c8258aff1 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "quicktype", "version": "23.0.0", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/src/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "engines": { @@ -14,7 +14,7 @@ "test": "script/test", "start": "script/watch", "clean": "rm -rf dist node_modules *~ packages/*/{dist,node_modules,out}", - "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/index.js", + "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/src/index.js", "lint": "eslint src/** packages/*/src/**", "lint:fix": "eslint --fix src/** packages/*/src/**" }, @@ -77,5 +77,5 @@ "files": [ "dist" ], - "bin": "dist/index.js" + "bin": "dist/src/index.js" } diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 580100e8d..419059fe3 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -3,7 +3,7 @@ "version": "18.0.15", "description": "The quicktype engine as a library", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/src/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { diff --git a/packages/quicktype-graphql-input/package.json b/packages/quicktype-graphql-input/package.json index 8a17ead16..d644f38af 100644 --- a/packages/quicktype-graphql-input/package.json +++ b/packages/quicktype-graphql-input/package.json @@ -3,7 +3,7 @@ "version": "18.0.15", "package": "Package for using GraphQL as an input language to quicktype", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/src/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { diff --git a/packages/quicktype-typescript-input/package.json b/packages/quicktype-typescript-input/package.json index b624fd081..7ed4465e9 100644 --- a/packages/quicktype-typescript-input/package.json +++ b/packages/quicktype-typescript-input/package.json @@ -3,7 +3,7 @@ "version": "18.0.15", "description": "Package for using TypeScript as an input language to quicktype", "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/src/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { diff --git a/script/quicktype b/script/quicktype index 458c12a01..aa5bfc50b 100755 --- a/script/quicktype +++ b/script/quicktype @@ -10,7 +10,10 @@ SCRIPTDIR=$(dirname "$0") BASEDIR="$SCRIPTDIR/.." -if [ x"$SKIP_BUILD" = x ] ; then - ( cd "$BASEDIR" ; npm run build &>/dev/null ) +if [ x"$SKIP_BUILD" = x ]; then + ( + cd "$BASEDIR" + npm run build &>/dev/null + ) fi -node --stack_trace_limit=100 --max-old-space-size=4096 "$BASEDIR/dist/index.js" "$@" +node --stack_trace_limit=100 --max-old-space-size=4096 "$BASEDIR/dist/src/index.js" "$@" From ec49e957633a56bddf88c82c63c4edd0475b31b3 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Sun, 12 May 2024 21:23:29 -0700 Subject: [PATCH 72/99] Revert "fix: update `dist/index.js` to `dist/src/index.js` (#2594)" (#2595) This reverts commit 50713eb075a0198fca18cca6ac312fab1601e064. --- package-lock.json | 2 +- package.json | 6 +++--- packages/quicktype-core/package.json | 2 +- packages/quicktype-graphql-input/package.json | 2 +- packages/quicktype-typescript-input/package.json | 2 +- script/quicktype | 9 +++------ 6 files changed, 10 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6656cd0b3..1dd564e76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "typescript": "4.9.5" }, "bin": { - "quicktype": "dist/src/index.js" + "quicktype": "dist/index.js" }, "devDependencies": { "@tsconfig/node18": "^1.0.1", diff --git a/package.json b/package.json index c8258aff1..4b723ca95 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "quicktype", "version": "23.0.0", "license": "Apache-2.0", - "main": "dist/src/index.js", + "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "engines": { @@ -14,7 +14,7 @@ "test": "script/test", "start": "script/watch", "clean": "rm -rf dist node_modules *~ packages/*/{dist,node_modules,out}", - "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/src/index.js", + "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/index.js", "lint": "eslint src/** packages/*/src/**", "lint:fix": "eslint --fix src/** packages/*/src/**" }, @@ -77,5 +77,5 @@ "files": [ "dist" ], - "bin": "dist/src/index.js" + "bin": "dist/index.js" } diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 419059fe3..580100e8d 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -3,7 +3,7 @@ "version": "18.0.15", "description": "The quicktype engine as a library", "license": "Apache-2.0", - "main": "dist/src/index.js", + "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { diff --git a/packages/quicktype-graphql-input/package.json b/packages/quicktype-graphql-input/package.json index d644f38af..8a17ead16 100644 --- a/packages/quicktype-graphql-input/package.json +++ b/packages/quicktype-graphql-input/package.json @@ -3,7 +3,7 @@ "version": "18.0.15", "package": "Package for using GraphQL as an input language to quicktype", "license": "Apache-2.0", - "main": "dist/src/index.js", + "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { diff --git a/packages/quicktype-typescript-input/package.json b/packages/quicktype-typescript-input/package.json index 7ed4465e9..b624fd081 100644 --- a/packages/quicktype-typescript-input/package.json +++ b/packages/quicktype-typescript-input/package.json @@ -3,7 +3,7 @@ "version": "18.0.15", "description": "Package for using TypeScript as an input language to quicktype", "license": "Apache-2.0", - "main": "dist/src/index.js", + "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { diff --git a/script/quicktype b/script/quicktype index aa5bfc50b..458c12a01 100755 --- a/script/quicktype +++ b/script/quicktype @@ -10,10 +10,7 @@ SCRIPTDIR=$(dirname "$0") BASEDIR="$SCRIPTDIR/.." -if [ x"$SKIP_BUILD" = x ]; then - ( - cd "$BASEDIR" - npm run build &>/dev/null - ) +if [ x"$SKIP_BUILD" = x ] ; then + ( cd "$BASEDIR" ; npm run build &>/dev/null ) fi -node --stack_trace_limit=100 --max-old-space-size=4096 "$BASEDIR/dist/src/index.js" "$@" +node --stack_trace_limit=100 --max-old-space-size=4096 "$BASEDIR/dist/index.js" "$@" From 2d4ce03d7eaf85e6ea8da72e28d8a693c90906e4 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Mon, 13 May 2024 08:04:28 -0700 Subject: [PATCH 73/99] fix: Restores old build output by removing package.json import (#2596) * clean before each build * fix top level package.json import --- package.json | 4 ++-- src/index.ts | 5 +++-- tsconfig.json | 3 +-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 4b723ca95..2c8c4aede 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,10 @@ }, "scripts": { "pub": "script/publish.sh", - "build": "npm run build --workspaces --if-present && tsc", + "build": "npm run clean && npm run build --workspaces --if-present && tsc", "test": "script/test", "start": "script/watch", - "clean": "rm -rf dist node_modules *~ packages/*/{dist,node_modules,out}", + "clean": "rm -rf dist *~ packages/*/{dist,out}", "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/index.js", "lint": "eslint src/** packages/*/src/**", "lint:fix": "eslint --fix src/** packages/*/src/**" diff --git a/src/index.ts b/src/index.ts index fe252a087..6d6f799c1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -49,13 +49,14 @@ import { import { GraphQLInput } from "quicktype-graphql-input"; import { schemaForTypeScriptSources } from "quicktype-typescript-input"; -import packageJSON from "../package.json"; - import { CompressedJSONFromStream } from "./CompressedJSONFromStream"; import { introspectServer } from "./GraphQLIntrospection"; import { type GraphQLTypeSource, type JSONTypeSource, type SchemaTypeSource, type TypeSource } from "./TypeSource"; import { urlsFromURLGrammar } from "./URLGrammar"; +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const packageJSON = require("../package.json"); + const wordWrap: (s: string) => string = _wordwrap(90); export interface CLIOptions { diff --git a/tsconfig.json b/tsconfig.json index 4f1446d5e..60bab643b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,8 +10,7 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true + "baseUrl": "src" }, "include": ["src"] } From be6a937dbfdc28ccffa771eefbe2c0b2e2f517fe Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 18 May 2024 10:56:03 -0700 Subject: [PATCH 74/99] refactor: Split monolithic language files into dirs with component files (#2564) --- .../quicktype-core/src/ConvenienceRenderer.ts | 2 +- packages/quicktype-core/src/Naming.ts | 2 +- packages/quicktype-core/src/index.ts | 33 +- packages/quicktype-core/src/language/All.ts | 40 +- .../{CJSON.ts => CJSON/CJSONRenderer.ts} | 386 +-- .../src/language/CJSON/constants.ts | 123 + .../src/language/CJSON/index.ts | 2 + .../src/language/CJSON/language.ts | 170 ++ .../src/language/CJSON/utils.ts | 57 + .../CPlusPlusRenderer.ts} | 504 +--- .../src/language/CPlusPlus/constants.ts | 103 + .../src/language/CPlusPlus/index.ts | 2 + .../src/language/CPlusPlus/language.ts | 129 + .../src/language/CPlusPlus/utils.ts | 208 ++ .../quicktype-core/src/language/CSharp.ts | 2498 ----------------- .../src/language/CSharp/CSharpRenderer.ts | 390 +++ .../CSharp/NewtonSoftCSharpRenderer.ts | 803 ++++++ .../CSharp/SystemTextJsonCSharpRenderer.ts | 982 +++++++ .../src/language/CSharp/constants.ts | 79 + .../src/language/CSharp/index.ts | 4 + .../src/language/CSharp/language.ts | 175 ++ .../src/language/CSharp/utils.ts | 147 + .../CrystalRenderer.ts} | 244 +- .../src/language/Crystal/constants.ts | 138 + .../src/language/Crystal/index.ts | 2 + .../src/language/Crystal/language.ts | 24 + .../src/language/Crystal/utils.ts | 65 + .../{Dart.ts => Dart/DartRenderer.ts} | 246 +- .../src/language/Dart/constants.ts | 71 + .../quicktype-core/src/language/Dart/index.ts | 2 + .../src/language/Dart/language.ts | 70 + .../quicktype-core/src/language/Dart/utils.ts | 60 + .../{Elixir.ts => Elixir/ElixirRenderer.ts} | 282 +- .../src/language/Elixir/constants.ts | 101 + .../src/language/Elixir/index.ts | 2 + .../src/language/Elixir/language.ts | 33 + .../src/language/Elixir/utils.ts | 74 + .../language/{Elm.ts => Elm/ElmRenderer.ts} | 170 +- .../src/language/Elm/constants.ts | 40 + .../quicktype-core/src/language/Elm/index.ts | 2 + .../src/language/Elm/language.ts | 38 + .../quicktype-core/src/language/Elm/utils.ts | 55 + .../{Golang.ts => Golang/GolangRenderer.ts} | 336 +-- .../src/language/Golang/index.ts | 2 + .../src/language/Golang/language.ts | 60 + .../src/language/Golang/utils.ts | 44 + .../HaskellRenderer.ts} | 148 +- .../src/language/Haskell/constants.ts | 54 + .../src/language/Haskell/index.ts | 2 + .../src/language/Haskell/language.ts | 37 + .../src/language/Haskell/utils.ts | 31 + .../JSONSchemaRenderer.ts} | 68 +- .../src/language/JSONSchema/index.ts | 2 + .../src/language/JSONSchema/language.ts | 33 + .../src/language/JSONSchema/utils.ts | 26 + .../src/language/Java/DateTimeProvider.ts | 261 ++ .../src/language/Java/JavaJacksonRenderer.ts | 567 ++++ .../src/language/Java/JavaRenderer.ts | 514 ++++ .../src/language/Java/constants.ts | 69 + .../quicktype-core/src/language/Java/index.ts | 3 + .../src/language/Java/language.ts | 77 + .../quicktype-core/src/language/Java/utils.ts | 46 + .../JavaScriptRenderer.ts} | 100 +- .../src/language/JavaScript/index.ts | 2 + .../src/language/JavaScript/language.ts | 68 + .../unicodeMaps.ts} | 0 .../src/language/JavaScript/utils.ts | 5 + .../JavaScriptPropTypesRenderer.ts} | 77 +- .../src/language/JavaScriptPropTypes/index.ts | 2 + .../language/JavaScriptPropTypes/language.ts | 47 + .../quicktype-core/src/language/Kotlin.ts | 1129 -------- .../language/Kotlin/KotlinJacksonRenderer.ts | 293 ++ .../language/Kotlin/KotlinKlaxonRenderer.ts | 306 ++ .../src/language/Kotlin/KotlinRenderer.ts | 300 ++ .../src/language/Kotlin/KotlinXRenderer.ts | 121 + .../src/language/Kotlin/constants.ts | 51 + .../src/language/Kotlin/index.ts | 5 + .../src/language/Kotlin/language.ts | 70 + .../src/language/Kotlin/utils.ts | 55 + .../ObjectiveCRenderer.ts} | 267 +- .../src/language/Objective-C/constants.ts | 82 + .../src/language/Objective-C/index.ts | 2 + .../src/language/Objective-C/language.ts | 45 + .../src/language/Objective-C/utils.ts | 88 + .../language/{Php.ts => Php/PhpRenderer.ts} | 109 +- .../quicktype-core/src/language/Php/index.ts | 2 + .../src/language/Php/language.ts | 46 + .../quicktype-core/src/language/Php/utils.ts | 48 + .../{Pike.ts => Pike/PikeRenderer.ts} | 103 +- .../src/language/Pike/constants.ts | 54 + .../quicktype-core/src/language/Pike/index.ts | 2 + .../src/language/Pike/language.ts | 22 + .../quicktype-core/src/language/Pike/utils.ts | 7 + .../JSONPythonRenderer.ts} | 543 +--- .../src/language/Python/PythonRenderer.ts | 321 +++ .../src/language/Python/constants.ts | 59 + .../src/language/Python/index.ts | 3 + .../src/language/Python/language.ts | 74 + .../src/language/Python/utils.ts | 76 + .../{ruby/index.ts => Ruby/RubyRenderer.ts} | 124 +- .../{ruby/keywords.ts => Ruby/constants.ts} | 18 +- .../quicktype-core/src/language/Ruby/index.ts | 2 + .../src/language/Ruby/language.ts | 39 + .../quicktype-core/src/language/Ruby/utils.ts | 71 + .../{Rust.ts => Rust/RustRenderer.ts} | 318 +-- .../src/language/Rust/constants.ts | 76 + .../quicktype-core/src/language/Rust/index.ts | 2 + .../src/language/Rust/language.ts | 48 + .../quicktype-core/src/language/Rust/utils.ts | 166 ++ .../quicktype-core/src/language/Scala3.ts | 721 ----- .../src/language/Scala3/CirceRenderer.ts | 193 ++ .../src/language/Scala3/Scala3Renderer.ts | 313 +++ .../src/language/Scala3/UpickleRenderer.ts | 14 + .../src/language/Scala3/constants.ts | 87 + .../src/language/Scala3/index.ts | 4 + .../src/language/Scala3/language.ts | 63 + .../src/language/Scala3/utils.ts | 73 + .../Smithy4sRenderer.ts} | 201 +- .../src/language/Smithy4s/constants.ts | 77 + .../src/language/Smithy4s/index.ts | 2 + .../src/language/Smithy4s/language.ts | 46 + .../src/language/Smithy4s/utils.ts | 55 + .../{Swift.ts => Swift/SwiftRenderer.ts} | 843 ++---- .../src/language/Swift/constants.ts | 101 + .../src/language/Swift/index.ts | 2 + .../src/language/Swift/language.ts | 128 + .../src/language/Swift/utils.ts | 84 + .../TypeScriptEffectSchemaRenderer.ts} | 57 +- .../language/TypeScriptEffectSchema/index.ts | 2 + .../TypeScriptEffectSchema/language.ts | 35 + .../src/language/TypeScriptFlow.ts | 406 --- .../language/TypeScriptFlow/FlowRenderer.ts | 47 + .../TypeScriptFlowBaseRenderer.ts | 190 ++ .../TypeScriptFlow/TypeScriptRenderer.ts | 88 + .../src/language/TypeScriptFlow/index.ts | 3 + .../src/language/TypeScriptFlow/language.ts | 68 + .../src/language/TypeScriptFlow/utils.ts | 29 + .../TypeScriptZodRenderer.ts} | 66 +- .../src/language/TypeScriptZod/index.ts | 2 + .../src/language/TypeScriptZod/language.ts | 45 + packages/quicktype-core/src/language/index.ts | 26 + test/languages.ts | 54 +- 142 files changed, 11238 insertions(+), 9273 deletions(-) rename packages/quicktype-core/src/language/{CJSON.ts => CJSON/CJSONRenderer.ts} (95%) create mode 100644 packages/quicktype-core/src/language/CJSON/constants.ts create mode 100644 packages/quicktype-core/src/language/CJSON/index.ts create mode 100644 packages/quicktype-core/src/language/CJSON/language.ts create mode 100644 packages/quicktype-core/src/language/CJSON/utils.ts rename packages/quicktype-core/src/language/{CPlusPlus.ts => CPlusPlus/CPlusPlusRenderer.ts} (89%) create mode 100644 packages/quicktype-core/src/language/CPlusPlus/constants.ts create mode 100644 packages/quicktype-core/src/language/CPlusPlus/index.ts create mode 100644 packages/quicktype-core/src/language/CPlusPlus/language.ts create mode 100644 packages/quicktype-core/src/language/CPlusPlus/utils.ts delete mode 100644 packages/quicktype-core/src/language/CSharp.ts create mode 100644 packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts create mode 100644 packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts create mode 100644 packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts create mode 100644 packages/quicktype-core/src/language/CSharp/constants.ts create mode 100644 packages/quicktype-core/src/language/CSharp/index.ts create mode 100644 packages/quicktype-core/src/language/CSharp/language.ts create mode 100644 packages/quicktype-core/src/language/CSharp/utils.ts rename packages/quicktype-core/src/language/{Crystal.ts => Crystal/CrystalRenderer.ts} (56%) create mode 100644 packages/quicktype-core/src/language/Crystal/constants.ts create mode 100644 packages/quicktype-core/src/language/Crystal/index.ts create mode 100644 packages/quicktype-core/src/language/Crystal/language.ts create mode 100644 packages/quicktype-core/src/language/Crystal/utils.ts rename packages/quicktype-core/src/language/{Dart.ts => Dart/DartRenderer.ts} (80%) create mode 100644 packages/quicktype-core/src/language/Dart/constants.ts create mode 100644 packages/quicktype-core/src/language/Dart/index.ts create mode 100644 packages/quicktype-core/src/language/Dart/language.ts create mode 100644 packages/quicktype-core/src/language/Dart/utils.ts rename packages/quicktype-core/src/language/{Elixir.ts => Elixir/ElixirRenderer.ts} (85%) create mode 100644 packages/quicktype-core/src/language/Elixir/constants.ts create mode 100644 packages/quicktype-core/src/language/Elixir/index.ts create mode 100644 packages/quicktype-core/src/language/Elixir/language.ts create mode 100644 packages/quicktype-core/src/language/Elixir/utils.ts rename packages/quicktype-core/src/language/{Elm.ts => Elm/ElmRenderer.ts} (84%) create mode 100644 packages/quicktype-core/src/language/Elm/constants.ts create mode 100644 packages/quicktype-core/src/language/Elm/index.ts create mode 100644 packages/quicktype-core/src/language/Elm/language.ts create mode 100644 packages/quicktype-core/src/language/Elm/utils.ts rename packages/quicktype-core/src/language/{Golang.ts => Golang/GolangRenderer.ts} (73%) create mode 100644 packages/quicktype-core/src/language/Golang/index.ts create mode 100644 packages/quicktype-core/src/language/Golang/language.ts create mode 100644 packages/quicktype-core/src/language/Golang/utils.ts rename packages/quicktype-core/src/language/{Haskell.ts => Haskell/HaskellRenderer.ts} (82%) create mode 100644 packages/quicktype-core/src/language/Haskell/constants.ts create mode 100644 packages/quicktype-core/src/language/Haskell/index.ts create mode 100644 packages/quicktype-core/src/language/Haskell/language.ts create mode 100644 packages/quicktype-core/src/language/Haskell/utils.ts rename packages/quicktype-core/src/language/{JSONSchema.ts => JSONSchema/JSONSchemaRenderer.ts} (75%) create mode 100644 packages/quicktype-core/src/language/JSONSchema/index.ts create mode 100644 packages/quicktype-core/src/language/JSONSchema/language.ts create mode 100644 packages/quicktype-core/src/language/JSONSchema/utils.ts create mode 100644 packages/quicktype-core/src/language/Java/DateTimeProvider.ts create mode 100644 packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts create mode 100644 packages/quicktype-core/src/language/Java/JavaRenderer.ts create mode 100644 packages/quicktype-core/src/language/Java/constants.ts create mode 100644 packages/quicktype-core/src/language/Java/index.ts create mode 100644 packages/quicktype-core/src/language/Java/language.ts create mode 100644 packages/quicktype-core/src/language/Java/utils.ts rename packages/quicktype-core/src/language/{JavaScript.ts => JavaScript/JavaScriptRenderer.ts} (84%) create mode 100644 packages/quicktype-core/src/language/JavaScript/index.ts create mode 100644 packages/quicktype-core/src/language/JavaScript/language.ts rename packages/quicktype-core/src/language/{JavaScriptUnicodeMaps.ts => JavaScript/unicodeMaps.ts} (100%) create mode 100644 packages/quicktype-core/src/language/JavaScript/utils.ts rename packages/quicktype-core/src/language/{JavaScriptPropTypes.ts => JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts} (80%) create mode 100644 packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts create mode 100644 packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts delete mode 100644 packages/quicktype-core/src/language/Kotlin.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/constants.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/index.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/language.ts create mode 100644 packages/quicktype-core/src/language/Kotlin/utils.ts rename packages/quicktype-core/src/language/{Objective-C.ts => Objective-C/ObjectiveCRenderer.ts} (84%) create mode 100644 packages/quicktype-core/src/language/Objective-C/constants.ts create mode 100644 packages/quicktype-core/src/language/Objective-C/index.ts create mode 100644 packages/quicktype-core/src/language/Objective-C/language.ts create mode 100644 packages/quicktype-core/src/language/Objective-C/utils.ts rename packages/quicktype-core/src/language/{Php.ts => Php/PhpRenderer.ts} (91%) create mode 100644 packages/quicktype-core/src/language/Php/index.ts create mode 100644 packages/quicktype-core/src/language/Php/language.ts create mode 100644 packages/quicktype-core/src/language/Php/utils.ts rename packages/quicktype-core/src/language/{Pike.ts => Pike/PikeRenderer.ts} (81%) create mode 100644 packages/quicktype-core/src/language/Pike/constants.ts create mode 100644 packages/quicktype-core/src/language/Pike/index.ts create mode 100644 packages/quicktype-core/src/language/Pike/language.ts create mode 100644 packages/quicktype-core/src/language/Pike/utils.ts rename packages/quicktype-core/src/language/{Python.ts => Python/JSONPythonRenderer.ts} (63%) create mode 100644 packages/quicktype-core/src/language/Python/PythonRenderer.ts create mode 100644 packages/quicktype-core/src/language/Python/constants.ts create mode 100644 packages/quicktype-core/src/language/Python/index.ts create mode 100644 packages/quicktype-core/src/language/Python/language.ts create mode 100644 packages/quicktype-core/src/language/Python/utils.ts rename packages/quicktype-core/src/language/{ruby/index.ts => Ruby/RubyRenderer.ts} (87%) rename packages/quicktype-core/src/language/{ruby/keywords.ts => Ruby/constants.ts} (97%) create mode 100644 packages/quicktype-core/src/language/Ruby/index.ts create mode 100644 packages/quicktype-core/src/language/Ruby/language.ts create mode 100644 packages/quicktype-core/src/language/Ruby/utils.ts rename packages/quicktype-core/src/language/{Rust.ts => Rust/RustRenderer.ts} (54%) create mode 100644 packages/quicktype-core/src/language/Rust/constants.ts create mode 100644 packages/quicktype-core/src/language/Rust/index.ts create mode 100644 packages/quicktype-core/src/language/Rust/language.ts create mode 100644 packages/quicktype-core/src/language/Rust/utils.ts delete mode 100644 packages/quicktype-core/src/language/Scala3.ts create mode 100644 packages/quicktype-core/src/language/Scala3/CirceRenderer.ts create mode 100644 packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts create mode 100644 packages/quicktype-core/src/language/Scala3/UpickleRenderer.ts create mode 100644 packages/quicktype-core/src/language/Scala3/constants.ts create mode 100644 packages/quicktype-core/src/language/Scala3/index.ts create mode 100644 packages/quicktype-core/src/language/Scala3/language.ts create mode 100644 packages/quicktype-core/src/language/Scala3/utils.ts rename packages/quicktype-core/src/language/{Smithy4s.ts => Smithy4s/Smithy4sRenderer.ts} (73%) create mode 100644 packages/quicktype-core/src/language/Smithy4s/constants.ts create mode 100644 packages/quicktype-core/src/language/Smithy4s/index.ts create mode 100644 packages/quicktype-core/src/language/Smithy4s/language.ts create mode 100644 packages/quicktype-core/src/language/Smithy4s/utils.ts rename packages/quicktype-core/src/language/{Swift.ts => Swift/SwiftRenderer.ts} (66%) create mode 100644 packages/quicktype-core/src/language/Swift/constants.ts create mode 100644 packages/quicktype-core/src/language/Swift/index.ts create mode 100644 packages/quicktype-core/src/language/Swift/language.ts create mode 100644 packages/quicktype-core/src/language/Swift/utils.ts rename packages/quicktype-core/src/language/{TypeScriptEffectSchema.ts => TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts} (82%) create mode 100644 packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts delete mode 100644 packages/quicktype-core/src/language/TypeScriptFlow.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptFlow/index.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptFlow/language.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptFlow/utils.ts rename packages/quicktype-core/src/language/{TypeScriptZod.ts => TypeScriptZod/TypeScriptZodRenderer.ts} (85%) create mode 100644 packages/quicktype-core/src/language/TypeScriptZod/index.ts create mode 100644 packages/quicktype-core/src/language/TypeScriptZod/language.ts create mode 100644 packages/quicktype-core/src/language/index.ts diff --git a/packages/quicktype-core/src/ConvenienceRenderer.ts b/packages/quicktype-core/src/ConvenienceRenderer.ts index 2c9c6ff42..aef41b181 100644 --- a/packages/quicktype-core/src/ConvenienceRenderer.ts +++ b/packages/quicktype-core/src/ConvenienceRenderer.ts @@ -129,7 +129,7 @@ export abstract class ConvenienceRenderer extends Renderer { * that can conflict with that, such as reserved keywords or common type * names. */ - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return []; } diff --git a/packages/quicktype-core/src/Naming.ts b/packages/quicktype-core/src/Naming.ts index 6b2b2b825..cc98c50fc 100644 --- a/packages/quicktype-core/src/Naming.ts +++ b/packages/quicktype-core/src/Naming.ts @@ -319,7 +319,7 @@ export class DependencyName extends Name { } } -export function keywordNamespace(name: string, keywords: string[]): Namespace { +export function keywordNamespace(name: string, keywords: readonly string[]): Namespace { const ns = new Namespace(name, undefined, [], []); for (const kw of keywords) { ns.add(new FixedName(kw)); diff --git a/packages/quicktype-core/src/index.ts b/packages/quicktype-core/src/index.ts index fa1ea78be..6da647b12 100644 --- a/packages/quicktype-core/src/index.ts +++ b/packages/quicktype-core/src/index.ts @@ -84,35 +84,4 @@ export { removeNullFromUnion, matchType, nullableFromUnion } from "./TypeUtils"; export { ConvenienceRenderer } from "./ConvenienceRenderer"; export { uriTypeAttributeKind } from "./attributes/URIAttributes"; -export { CJSONTargetLanguage, CJSONRenderer, cJSONOptions } from "./language/CJSON"; -export { CPlusPlusTargetLanguage, CPlusPlusRenderer, cPlusPlusOptions } from "./language/CPlusPlus"; -export { CSharpTargetLanguage, cSharpOptions, CSharpRenderer } from "./language/CSharp"; -export { PythonTargetLanguage, PythonRenderer, pythonOptions } from "./language/Python"; -export { GoTargetLanguage, GoRenderer, goOptions } from "./language/Golang"; -export { ObjectiveCTargetLanguage, ObjectiveCRenderer, objcOptions } from "./language/Objective-C"; -export { JavaTargetLanguage, JavaRenderer, javaOptions } from "./language/Java"; -export { JavaScriptTargetLanguage, JavaScriptRenderer, javaScriptOptions } from "./language/JavaScript"; -export { - JavaScriptPropTypesTargetLanguage, - JavaScriptPropTypesRenderer, - javaScriptPropTypesOptions -} from "./language/JavaScriptPropTypes"; -export { - TypeScriptTargetLanguage, - TypeScriptRenderer, - FlowTargetLanguage, - FlowRenderer, - tsFlowOptions -} from "./language/TypeScriptFlow"; -export { SwiftTargetLanguage, SwiftRenderer, swiftOptions } from "./language/Swift"; -export { KotlinTargetLanguage, KotlinRenderer, kotlinOptions } from "./language/Kotlin"; -export { Scala3TargetLanguage, Scala3Renderer, scala3Options } from "./language/Scala3"; -export { SmithyTargetLanguage, Smithy4sRenderer, SmithyOptions } from "./language/Smithy4s"; -export { ElmTargetLanguage, ElmRenderer, elmOptions } from "./language/Elm"; -export { JSONSchemaTargetLanguage, JSONSchemaRenderer } from "./language/JSONSchema"; -export { RustTargetLanguage, RustRenderer, rustOptions } from "./language/Rust"; -export { RubyTargetLanguage, RubyRenderer, rubyOptions } from "./language/ruby"; -export { CrystalTargetLanguage, CrystalRenderer } from "./language/Crystal"; -export { HaskellTargetLanguage, HaskellRenderer, haskellOptions } from "./language/Haskell"; -export { DartTargetLanguage, DartRenderer, dartOptions } from "./language/Dart"; -export { ElixirTargetLanguage, ElixirRenderer, elixirOptions } from "./language/Elixir"; +export * from "./language"; diff --git a/packages/quicktype-core/src/language/All.ts b/packages/quicktype-core/src/language/All.ts index 297af4d1c..227ca4322 100644 --- a/packages/quicktype-core/src/language/All.ts +++ b/packages/quicktype-core/src/language/All.ts @@ -21,7 +21,7 @@ import { ObjectiveCTargetLanguage } from "./Objective-C"; import { PhpTargetLanguage } from "./Php"; import { PikeTargetLanguage } from "./Pike"; import { PythonTargetLanguage } from "./Python"; -import { RubyTargetLanguage } from "./ruby"; +import { RubyTargetLanguage } from "./Ruby"; import { RustTargetLanguage } from "./Rust"; import { Scala3TargetLanguage } from "./Scala3"; import { SmithyTargetLanguage } from "./Smithy4s"; @@ -31,33 +31,33 @@ import { FlowTargetLanguage, TypeScriptTargetLanguage } from "./TypeScriptFlow"; import { TypeScriptZodTargetLanguage } from "./TypeScriptZod"; export const all: TargetLanguage[] = [ - new CSharpTargetLanguage(), - new GoTargetLanguage(), - new RustTargetLanguage(), - new CrystalTargetLanguage(), new CJSONTargetLanguage(), new CPlusPlusTargetLanguage(), - new ObjectiveCTargetLanguage(), + new CrystalTargetLanguage(), + new CSharpTargetLanguage(), + new DartTargetLanguage(), + new ElixirTargetLanguage(), + new ElmTargetLanguage(), + new FlowTargetLanguage(), + new GoTargetLanguage(), + new HaskellTargetLanguage(), new JavaTargetLanguage(), - new TypeScriptTargetLanguage(), new JavaScriptTargetLanguage(), new JavaScriptPropTypesTargetLanguage(), - new FlowTargetLanguage(), - new SwiftTargetLanguage(), - new Scala3TargetLanguage(), - new SmithyTargetLanguage(), - new KotlinTargetLanguage(), - new ElmTargetLanguage(), new JSONSchemaTargetLanguage(), - new RubyTargetLanguage(), - new DartTargetLanguage(), - new PythonTargetLanguage("Python", ["python", "py"], "py"), + new KotlinTargetLanguage(), + new ObjectiveCTargetLanguage(), + new PhpTargetLanguage(), new PikeTargetLanguage(), - new HaskellTargetLanguage(), - new TypeScriptZodTargetLanguage(), + new PythonTargetLanguage("Python", ["python", "py"], "py"), + new RubyTargetLanguage(), + new RustTargetLanguage(), + new Scala3TargetLanguage(), + new SmithyTargetLanguage(), + new SwiftTargetLanguage(), + new TypeScriptTargetLanguage(), new TypeScriptEffectSchemaTargetLanguage(), - new ElixirTargetLanguage(), - new PhpTargetLanguage() + new TypeScriptZodTargetLanguage() ]; export function languageNamed(name: string, targetLanguages?: TargetLanguage[]): TargetLanguage | undefined { diff --git a/packages/quicktype-core/src/language/CJSON.ts b/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts similarity index 95% rename from packages/quicktype-core/src/language/CJSON.ts rename to packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts index 28499a4b4..6f9dc33b9 100644 --- a/packages/quicktype-core/src/language/CJSON.ts +++ b/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts @@ -1,368 +1,32 @@ // FIXME: NEEDS REFACTOR /* eslint-disable @typescript-eslint/no-shadow */ /* eslint-disable @typescript-eslint/naming-convention */ -/** - * CJSON.ts - * This file is used to generate cJSON code with quicktype - * The generated code depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable - * - * Similarly to C++ generator, it is possible to generate a single header file or multiple header files. - * To generate multiple header files, use the following option: --source-style multi-source - * - * JSON data are represented using structures, and functions in the cJSON style are created to use them. - * To parse json data from json string use the following: struct * data = cJSON_Parse(); - * To get json data from cJSON object use the following: struct * data = cJSON_GetValue(); - * To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create(); - * To print json string from json data use the following: char * string = cJSON_Print(); - * To delete json data use the following: cJSON_Delete(); - * - * TODO list for future enhancements: - * - Management of Class, Union and TopLevel should be mutualized to reduce code size and to permit Union and TopLevel having recursive Array/Map - * - Types check should be added to verify unwanted inputs (for example a Number passed while a String is expected, etc) - * - Constraints should be implemented (verification of Enum values, min/max values for Numbers and min/max length for Strings, regex) - * - Support of pure Any type for example providing a callback from the application to handle these cases dynamically - * See test/languages.ts for the test cases which are not implmented/checked. - */ - -/* Imports */ -import { getAccessorName } from "../attributes/AccessorNames"; -import { enumCaseValues } from "../attributes/EnumValues"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type NameStyle, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; -import { type Sourcelike } from "../Source"; -import { - type NamingStyle, - allUpperWordStyle, - isAscii, - isLetterOrUnderscoreOrDigit, - legalizeCharacters, - makeNameStyle -} from "../support/Strings"; -import { assert, assertNever, defined, numberEnumValues, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, ClassType, EnumType, MapType, type Type, type TypeKind, UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -/* Naming styles */ -const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; -const underscoreValue: [string, NamingStyle] = ["underscore-case", "underscore"]; -const camelValue: [string, NamingStyle] = ["camel-case", "camel"]; -const upperUnderscoreValue: [string, NamingStyle] = ["upper-underscore-case", "upper-underscore"]; -const pascalUpperAcronymsValue: [string, NamingStyle] = ["pascal-case-upper-acronyms", "pascal-upper-acronyms"]; -const camelUpperAcronymsValue: [string, NamingStyle] = ["camel-case-upper-acronyms", "camel-upper-acronyms"]; - -/* cJSON generator options */ -export const cJSONOptions = { - typeSourceStyle: new EnumOption( - "source-style", - "Source code generation type, whether to generate single or multiple source files", - [ - ["single-source", true], - ["multi-source", false] - ], - "single-source", - "secondary" - ), - typeIntegerSize: new EnumOption( - "integer-size", - "Integer code generation type (int64_t by default)", - [ - ["int8_t", "int8_t"], - ["int16_t", "int16_t"], - ["int32_t", "int32_t"], - ["int64_t", "int64_t"] - ], - "int64_t", - "secondary" - ), - hashtableSize: new StringOption( - "hashtable-size", - "Hashtable size, used when maps are created (64 by default)", - "SIZE", - "64" - ), - addTypedefAlias: new EnumOption( - "typedef-alias", - "Add typedef alias to unions, structs, and enums (no typedef by default)", - [ - ["no-typedef", false], - ["add-typedef", true] - ], - "no-typedef", - "secondary" - ), - printStyle: new EnumOption( - "print-style", - "Which cJSON print should be used (formatted by default)", - [ - ["print-formatted", false], - ["print-unformatted", true] - ], - "print-formatted", - "secondary" - ), - typeNamingStyle: new EnumOption("type-style", "Naming style for types", [ - pascalValue, - underscoreValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - memberNamingStyle: new EnumOption("member-style", "Naming style for members", [ - underscoreValue, - pascalValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - enumeratorNamingStyle: new EnumOption("enumerator-style", "Naming style for enumerators", [ - upperUnderscoreValue, - underscoreValue, - pascalValue, - camelValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]) -}; - -/* cJSON generator target language */ -export class CJSONTargetLanguage extends TargetLanguage { - /** - * Constructor - * @param displayName: display name - * @params names: names - * @param extension: extension of files - */ - public constructor(displayName = "C (cJSON)", names: string[] = ["cjson", "cJSON"], extension = "h") { - super(displayName, names, extension); - } - - /** - * Return cJSON generator options - * @return cJSON generator options array - */ - protected getOptions(): Array> { - return [ - cJSONOptions.typeSourceStyle, - cJSONOptions.typeIntegerSize, - cJSONOptions.addTypedefAlias, - cJSONOptions.printStyle, - cJSONOptions.hashtableSize, - cJSONOptions.typeNamingStyle, - cJSONOptions.memberNamingStyle, - cJSONOptions.enumeratorNamingStyle - ]; - } - - /** - * Indicate if language support union with both number types - * @return true - */ - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - /** - * Indicate if language support optional class properties - * @return true - */ - public get supportsOptionalClassProperties(): boolean { - return true; - } - - /** - * Create renderer - * @param renderContext: render context - * @param untypedOptionValues - * @return cJSON renderer - */ - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): CJSONRenderer { - return new CJSONRenderer(this, renderContext, getOptionValues(cJSONOptions, untypedOptionValues)); - } -} - -/* Function used to format names */ -const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); - -/* Forbidden names for namespace */ -const keywords = [ - /* C and C++ keywords */ - "alignas", - "alignof", - "and", - "and_eq", - "asm", - "atomic_cancel", - "atomic_commit", - "atomic_noexcept", - "auto", - "bitand", - "bitor", - "bool", - "break", - "case", - "catch", - "char", - "char16_t", - "char32_t", - "class", - "compl", - "concept", - "const", - "constexpr", - "const_cast", - "continue", - "co_await", - "co_return", - "co_yield", - "decltype", - "default", - "delete", - "do", - "double", - "dynamic_cast", - "else", - "enum", - "explicit", - "export", - "extern", - "false", - "float", - "for", - "friend", - "goto", - "if", - "import", - "inline", - "int", - "long", - "module", - "mutable", - "namespace", - "new", - "noexcept", - "not", - "not_eq", - "nullptr", - "operator", - "or", - "or_eq", - "private", - "protected", - "public", - "register", - "reinterpret_cast", - "requires", - "restrict", - "return", - "short", - "signed", - "sizeof", - "static", - "static_assert", - "static_cast", - "struct", - "switch", - "synchronized", - "template", - "this", - "thread_local", - "throw", - "true", - "try", - "typedef", - "typeid", - "typename", - "typeof", - "union", - "unsigned", - "using", - "virtual", - "void", - "volatile", - "wchar_t", - "while", - "xor", - "xor_eq", - "override", - "final", - "transaction_safe", - "transaction_safe_dynamic", - "NULL", - /* cJSON keywords */ - "Array", - "ArrayReference", - "Bool", - "DoubleArray", - "False", - "FloatArray", - "IntArray", - "Object", - "Null", - "Number", - "Raw", - "String", - "StringArray", - "StringReference", - "True" -]; - -/* Used to build forbidden global names */ -export enum GlobalNames { - ClassMemberConstraints = 1, - ClassMemberConstraintException = 2, - ValueTooLowException = 3, - ValueTooHighException = 4, - ValueTooShortException = 5, - ValueTooLongException = 6, - InvalidPatternException = 7, - CheckConstraint = 8 -} -/* To be able to support circles in multiple files - e.g. class#A using class#B using class#A (obviously not directly) we can forward declare them */ -export enum IncludeKind { - ForwardDeclare = "ForwardDeclare", - Include = "Include" -} - -/* Used to map includes */ -export interface IncludeRecord { - kind: IncludeKind | undefined /* How to include that */; - typeKind: TypeKind | undefined /* What exactly to include */; -} - -/* Used to map includes */ -export interface TypeRecord { - forceInclude: boolean; - level: number; - name: Name; - type: Type; - variant: boolean; -} - -/* Map each and every unique type to a include kind, e.g. how to include the given type */ -export type IncludeMap = Map; - -/* cJSON type */ -export interface TypeCJSON { - addToObject: Sourcelike /* cJSON add to object function */; - cType: Sourcelike /* C type */; - cjsonType: string /* cJSON type */; - createObject: Sourcelike /* cJSON create object function */; - deleteType: Sourcelike /* cJSON delete function */; - getValue: Sourcelike /* cJSON get value function */; - isNullable: boolean /* True if the field is nullable */; - isType: Sourcelike /* cJSON check type function */; - items: TypeCJSON | undefined /* Sub-items, used for arrays and map */; - optionalQualifier: string /* C optional qualifier, empty string if not defined */; -} +import { getAccessorName } from "../../attributes/AccessorNames"; +import { enumCaseValues } from "../../attributes/EnumValues"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type NameStyle, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike } from "../../Source"; +import { type NamingStyle, allUpperWordStyle, makeNameStyle } from "../../support/Strings"; +import { assert, assertNever, defined, numberEnumValues, panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { type cJSONOptions } from "./language"; +import { + GlobalNames, + IncludeKind, + type IncludeMap, + type IncludeRecord, + type TypeCJSON, + type TypeRecord, + legalizeName +} from "./utils"; -/* cJSON renderer */ export class CJSONRenderer extends ConvenienceRenderer { private currentFilename: string | undefined; /* Current filename */ @@ -3409,7 +3073,7 @@ export class CJSONRenderer extends ConvenienceRenderer { } else { this.emitLine( "list_add_tail(x->value, ", - // @ts-expect-error awaiting refactor + // @ts-expect-error awaiting refactor cJSON.items?.getValue, "(e), sizeof(", cJSON.items?.cType, diff --git a/packages/quicktype-core/src/language/CJSON/constants.ts b/packages/quicktype-core/src/language/CJSON/constants.ts new file mode 100644 index 000000000..cdccf419c --- /dev/null +++ b/packages/quicktype-core/src/language/CJSON/constants.ts @@ -0,0 +1,123 @@ + +/* Forbidden names for namespace */ +export const keywords = [ + /* C and C++ keywords */ + "alignas", + "alignof", + "and", + "and_eq", + "asm", + "atomic_cancel", + "atomic_commit", + "atomic_noexcept", + "auto", + "bitand", + "bitor", + "bool", + "break", + "case", + "catch", + "char", + "char16_t", + "char32_t", + "class", + "compl", + "concept", + "const", + "constexpr", + "const_cast", + "continue", + "co_await", + "co_return", + "co_yield", + "decltype", + "default", + "delete", + "do", + "double", + "dynamic_cast", + "else", + "enum", + "explicit", + "export", + "extern", + "false", + "float", + "for", + "friend", + "goto", + "if", + "import", + "inline", + "int", + "long", + "module", + "mutable", + "namespace", + "new", + "noexcept", + "not", + "not_eq", + "nullptr", + "operator", + "or", + "or_eq", + "private", + "protected", + "public", + "register", + "reinterpret_cast", + "requires", + "restrict", + "return", + "short", + "signed", + "sizeof", + "static", + "static_assert", + "static_cast", + "struct", + "switch", + "synchronized", + "template", + "this", + "thread_local", + "throw", + "true", + "try", + "typedef", + "typeid", + "typename", + "typeof", + "union", + "unsigned", + "using", + "virtual", + "void", + "volatile", + "wchar_t", + "while", + "xor", + "xor_eq", + "override", + "final", + "transaction_safe", + "transaction_safe_dynamic", + "NULL", + /* cJSON keywords */ + "Array", + "ArrayReference", + "Bool", + "DoubleArray", + "False", + "FloatArray", + "IntArray", + "Object", + "Null", + "Number", + "Raw", + "String", + "StringArray", + "StringReference", + "True" +] as const; diff --git a/packages/quicktype-core/src/language/CJSON/index.ts b/packages/quicktype-core/src/language/CJSON/index.ts new file mode 100644 index 000000000..1534721aa --- /dev/null +++ b/packages/quicktype-core/src/language/CJSON/index.ts @@ -0,0 +1,2 @@ +export { CJSONTargetLanguage, cJSONOptions } from "./language"; +export { CJSONRenderer } from "./CJSONRenderer"; diff --git a/packages/quicktype-core/src/language/CJSON/language.ts b/packages/quicktype-core/src/language/CJSON/language.ts new file mode 100644 index 000000000..c18c6806a --- /dev/null +++ b/packages/quicktype-core/src/language/CJSON/language.ts @@ -0,0 +1,170 @@ +/** + * CJSON.ts + * This file is used to generate cJSON code with quicktype + * The generated code depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable + * + * Similarly to C++ generator, it is possible to generate a single header file or multiple header files. + * To generate multiple header files, use the following option: --source-style multi-source + * + * JSON data are represented using structures, and functions in the cJSON style are created to use them. + * To parse json data from json string use the following: struct * data = cJSON_Parse(); + * To get json data from cJSON object use the following: struct * data = cJSON_GetValue(); + * To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create(); + * To print json string from json data use the following: char * string = cJSON_Print(); + * To delete json data use the following: cJSON_Delete(); + * + * TODO list for future enhancements: + * - Management of Class, Union and TopLevel should be mutualized to reduce code size and to permit Union and TopLevel having recursive Array/Map + * - Types check should be added to verify unwanted inputs (for example a Number passed while a String is expected, etc) + * - Constraints should be implemented (verification of Enum values, min/max values for Numbers and min/max length for Strings, regex) + * - Support of pure Any type for example providing a callback from the application to handle these cases dynamically + * See test/languages.ts for the test cases which are not implmented/checked. + */ + +import { type RenderContext } from "../../Renderer"; +import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { type NamingStyle } from "../../support/Strings"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsType, type FixMeOptionsAnyType } from "../../types"; + +import { CJSONRenderer } from "./CJSONRenderer"; + +/* Naming styles */ +const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; +const underscoreValue: [string, NamingStyle] = ["underscore-case", "underscore"]; +const camelValue: [string, NamingStyle] = ["camel-case", "camel"]; +const upperUnderscoreValue: [string, NamingStyle] = ["upper-underscore-case", "upper-underscore"]; +const pascalUpperAcronymsValue: [string, NamingStyle] = ["pascal-case-upper-acronyms", "pascal-upper-acronyms"]; +const camelUpperAcronymsValue: [string, NamingStyle] = ["camel-case-upper-acronyms", "camel-upper-acronyms"]; + +/* cJSON generator options */ +export const cJSONOptions = { + typeSourceStyle: new EnumOption( + "source-style", + "Source code generation type, whether to generate single or multiple source files", + [ + ["single-source", true], + ["multi-source", false] + ], + "single-source", + "secondary" + ), + typeIntegerSize: new EnumOption( + "integer-size", + "Integer code generation type (int64_t by default)", + [ + ["int8_t", "int8_t"], + ["int16_t", "int16_t"], + ["int32_t", "int32_t"], + ["int64_t", "int64_t"] + ], + "int64_t", + "secondary" + ), + hashtableSize: new StringOption( + "hashtable-size", + "Hashtable size, used when maps are created (64 by default)", + "SIZE", + "64" + ), + addTypedefAlias: new EnumOption( + "typedef-alias", + "Add typedef alias to unions, structs, and enums (no typedef by default)", + [ + ["no-typedef", false], + ["add-typedef", true] + ], + "no-typedef", + "secondary" + ), + printStyle: new EnumOption( + "print-style", + "Which cJSON print should be used (formatted by default)", + [ + ["print-formatted", false], + ["print-unformatted", true] + ], + "print-formatted", + "secondary" + ), + typeNamingStyle: new EnumOption("type-style", "Naming style for types", [ + pascalValue, + underscoreValue, + camelValue, + upperUnderscoreValue, + pascalUpperAcronymsValue, + camelUpperAcronymsValue + ]), + memberNamingStyle: new EnumOption("member-style", "Naming style for members", [ + underscoreValue, + pascalValue, + camelValue, + upperUnderscoreValue, + pascalUpperAcronymsValue, + camelUpperAcronymsValue + ]), + enumeratorNamingStyle: new EnumOption("enumerator-style", "Naming style for enumerators", [ + upperUnderscoreValue, + underscoreValue, + pascalValue, + camelValue, + pascalUpperAcronymsValue, + camelUpperAcronymsValue + ]) +}; + +/* cJSON generator target language */ +export class CJSONTargetLanguage extends TargetLanguage { + /** + * Constructor + * @param displayName: display name + * @params names: names + * @param extension: extension of files + */ + public constructor(displayName = "C (cJSON)", names: string[] = ["cjson", "cJSON"], extension = "h") { + super(displayName, names, extension); + } + + /** + * Return cJSON generator options + * @return cJSON generator options array + */ + protected getOptions(): Array> { + return [ + cJSONOptions.typeSourceStyle, + cJSONOptions.typeIntegerSize, + cJSONOptions.addTypedefAlias, + cJSONOptions.printStyle, + cJSONOptions.hashtableSize, + cJSONOptions.typeNamingStyle, + cJSONOptions.memberNamingStyle, + cJSONOptions.enumeratorNamingStyle + ]; + } + + /** + * Indicate if language support union with both number types + * @return true + */ + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + /** + * Indicate if language support optional class properties + * @return true + */ + public get supportsOptionalClassProperties(): boolean { + return true; + } + + /** + * Create renderer + * @param renderContext: render context + * @param untypedOptionValues + * @return cJSON renderer + */ + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): CJSONRenderer { + return new CJSONRenderer(this, renderContext, getOptionValues(cJSONOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/CJSON/utils.ts b/packages/quicktype-core/src/language/CJSON/utils.ts new file mode 100644 index 000000000..2e74a50c7 --- /dev/null +++ b/packages/quicktype-core/src/language/CJSON/utils.ts @@ -0,0 +1,57 @@ +import { type Name } from "../../Naming"; +import { type Sourcelike } from "../../Source"; +import { isAscii, isLetterOrUnderscoreOrDigit, legalizeCharacters } from "../../support/Strings"; +import { type Type, type TypeKind } from "../../Type"; + +/* Function used to format names */ +export const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); + +/* Used to build forbidden global names */ +export enum GlobalNames { + ClassMemberConstraints = 1, + ClassMemberConstraintException = 2, + ValueTooLowException = 3, + ValueTooHighException = 4, + ValueTooShortException = 5, + ValueTooLongException = 6, + InvalidPatternException = 7, + CheckConstraint = 8 +} + +/* To be able to support circles in multiple files - e.g. class#A using class#B using class#A (obviously not directly) we can forward declare them */ +export enum IncludeKind { + ForwardDeclare = "ForwardDeclare", + Include = "Include" +} + +/* Used to map includes */ +export interface IncludeRecord { + kind: IncludeKind | undefined /* How to include that */; + typeKind: TypeKind | undefined /* What exactly to include */; +} + +/* Used to map includes */ +export interface TypeRecord { + forceInclude: boolean; + level: number; + name: Name; + type: Type; + variant: boolean; +} + +/* Map each and every unique type to a include kind, e.g. how to include the given type */ +export type IncludeMap = Map; + +/* cJSON type */ +export interface TypeCJSON { + addToObject: Sourcelike /* cJSON add to object function */; + cType: Sourcelike /* C type */; + cjsonType: string /* cJSON type */; + createObject: Sourcelike /* cJSON create object function */; + deleteType: Sourcelike /* cJSON delete function */; + getValue: Sourcelike /* cJSON get value function */; + isNullable: boolean /* True if the field is nullable */; + isType: Sourcelike /* cJSON check type function */; + items: TypeCJSON | undefined /* Sub-items, used for arrays and map */; + optionalQualifier: string /* C optional qualifier, empty string if not defined */; +} diff --git a/packages/quicktype-core/src/language/CPlusPlus.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts similarity index 89% rename from packages/quicktype-core/src/language/CPlusPlus.ts rename to packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index 910f714f9..4b70339f2 100644 --- a/packages/quicktype-core/src/language/CPlusPlus.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -8,473 +8,47 @@ import { withDefault } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { getAccessorName } from "../attributes/AccessorNames"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { getAccessorName } from "../../attributes/AccessorNames"; +import { enumCaseValues } from "../../attributes/EnumValues"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Declaration } from "../../DeclarationIR"; +import { DependencyName, type Name, type NameStyle, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { type NamingStyle, makeNameStyle, stringEscape } from "../../support/Strings"; +import { assert, assertNever, defined, numberEnumValues, panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; import { - type MinMaxConstraint, - minMaxLengthForType, - minMaxValueForType, - patternForType -} from "../attributes/Constraints"; -import { enumCaseValues } from "../attributes/EnumValues"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Declaration } from "../DeclarationIR"; -import { DependencyName, type Name, type NameStyle, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; + directlyReachableTypes, + isNamedType, + matchType, + nullableFromUnion, + removeNullFromUnion +} from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { type cPlusPlusOptions } from "./language"; import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated } from "../Source"; -import { - type NamingStyle, - isAscii, - isLetterOrUnderscoreOrDigit, - legalizeCharacters, - makeNameStyle, - stringEscape -} from "../support/Strings"; -import { assert, assertNever, defined, numberEnumValues, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayType, - type ClassProperty, - ClassType, - EnumType, - MapType, - type Type, - type TypeKind, - UnionType -} from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { directlyReachableTypes, isNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; -const underscoreValue: [string, NamingStyle] = ["underscore-case", "underscore"]; -const camelValue: [string, NamingStyle] = ["camel-case", "camel"]; -const upperUnderscoreValue: [string, NamingStyle] = ["upper-underscore-case", "upper-underscore"]; -const pascalUpperAcronymsValue: [string, NamingStyle] = ["pascal-case-upper-acronyms", "pascal-upper-acronyms"]; -const camelUpperAcronymsValue: [string, NamingStyle] = ["camel-case-upper-acronyms", "camel-upper-acronyms"]; - -export const cPlusPlusOptions = { - typeSourceStyle: new EnumOption( - "source-style", - "Source code generation type, whether to generate single or multiple source files", - [ - ["single-source", true], - ["multi-source", false] - ], - "single-source", - "secondary" - ), - includeLocation: new EnumOption( - "include-location", - "Whether json.hpp is to be located globally or locally", - [ - ["local-include", true], - ["global-include", false] - ], - "local-include", - "secondary" - ), - codeFormat: new EnumOption( - "code-format", - "Generate classes with getters/setters, instead of structs", - [ - ["with-struct", false], - ["with-getter-setter", true] - ], - "with-getter-setter" - ), - wstring: new EnumOption( - "wstring", - "Store strings using Utf-16 std::wstring, rather than Utf-8 std::string", - [ - ["use-string", false], - ["use-wstring", true] - ], - "use-string" - ), - westConst: new EnumOption( - "const-style", - "Put const to the left/west (const T) or right/east (T const)", - [ - ["west-const", true], - ["east-const", false] - ], - "west-const" - ), - justTypes: new BooleanOption("just-types", "Plain types only", false), - namespace: new StringOption("namespace", "Name of the generated namespace(s)", "NAME", "quicktype"), - enumType: new StringOption("enum-type", "Type of enum class", "NAME", "int", "secondary"), - typeNamingStyle: new EnumOption("type-style", "Naming style for types", [ - pascalValue, - underscoreValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - memberNamingStyle: new EnumOption("member-style", "Naming style for members", [ - underscoreValue, - pascalValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - enumeratorNamingStyle: new EnumOption("enumerator-style", "Naming style for enumerators", [ - upperUnderscoreValue, - underscoreValue, - pascalValue, - camelValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - boost: new BooleanOption("boost", "Require a dependency on boost. Without boost, C++17 is required", true), - hideNullOptional: new BooleanOption("hide-null-optional", "Hide null value for optional field", false) -}; - -export class CPlusPlusTargetLanguage extends TargetLanguage { - public constructor(displayName = "C++", names: string[] = ["c++", "cpp", "cplusplus"], extension = "cpp") { - super(displayName, names, extension); - } - - protected getOptions(): Array> { - return [ - cPlusPlusOptions.justTypes, - cPlusPlusOptions.namespace, - cPlusPlusOptions.codeFormat, - cPlusPlusOptions.wstring, - cPlusPlusOptions.westConst, - cPlusPlusOptions.typeSourceStyle, - cPlusPlusOptions.includeLocation, - cPlusPlusOptions.typeNamingStyle, - cPlusPlusOptions.memberNamingStyle, - cPlusPlusOptions.enumeratorNamingStyle, - cPlusPlusOptions.enumType, - cPlusPlusOptions.boost, - cPlusPlusOptions.hideNullOptional - ]; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): CPlusPlusRenderer { - return new CPlusPlusRenderer(this, renderContext, getOptionValues(cPlusPlusOptions, untypedOptionValues)); - } -} - -function constraintsForType(t: Type): - | { - minMax?: MinMaxConstraint; - minMaxLength?: MinMaxConstraint; - pattern?: string; - } - | undefined { - const minMax = minMaxValueForType(t); - const minMaxLength = minMaxLengthForType(t); - const pattern = patternForType(t); - if (minMax === undefined && minMaxLength === undefined && pattern === undefined) return undefined; - return { minMax, minMaxLength, pattern }; -} - -const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); - -const keywords = [ - "alignas", - "alignof", - "and", - "and_eq", - "asm", - "atomic_cancel", - "atomic_commit", - "atomic_noexcept", - "auto", - "bitand", - "bitor", - "bool", - "break", - "case", - "catch", - "char", - "char16_t", - "char32_t", - "class", - "compl", - "concept", - "const", - "constexpr", - "const_cast", - "continue", - "co_await", - "co_return", - "co_yield", - "decltype", - "default", - "delete", - "do", - "double", - "dynamic_cast", - "else", - "enum", - "explicit", - "export", - "extern", - "false", - "float", - "for", - "friend", - "goto", - "if", - "import", - "inline", - "int", - "long", - "module", - "mutable", - "namespace", - "new", - "noexcept", - "not", - "not_eq", - "nullptr", - "operator", - "or", - "or_eq", - "private", - "protected", - "public", - "register", - "reinterpret_cast", - "requires", - "return", - "short", - "signed", - "sizeof", - "static", - "static_assert", - "static_cast", - "struct", - "switch", - "synchronized", - "template", - "this", - "thread_local", - "throw", - "true", - "try", - "typedef", - "typeid", - "typename", - "union", - "unsigned", - "using", - "virtual", - "void", - "volatile", - "wchar_t", - "while", - "xor", - "xor_eq", - "override", - "final", - "transaction_safe", - "transaction_safe_dynamic", - "NULL" -]; - -/// Type to use as an optional if cycle breaking is required -const optionalAsSharedType = "std::shared_ptr"; -/// Factory to use when creating an optional if cycle breaking is required -const optionalFactoryAsSharedType = "std::make_shared"; - -/** - * To be able to support circles in multiple files - - * e.g. class#A using class#B using class#A (obviously not directly, - * but in vector or in variant) we can forward declare them; - */ -export enum IncludeKind { - ForwardDeclare = "ForwardDeclare", - Include = "Include" -} - -// FIXME: make these string enums eventually -export enum GlobalNames { - ClassMemberConstraints = 1, - ClassMemberConstraintException = 2, - ValueTooLowException = 3, - ValueTooHighException = 4, - ValueTooShortException = 5, - ValueTooLongException = 6, - InvalidPatternException = 7, - CheckConstraint = 8 -} - -// FIXME: make these string enums eventually -export enum MemberNames { - MinIntValue = 1, - GetMinIntValue = 2, - SetMinIntValue = 3, - MaxIntValue = 4, - GetMaxIntValue = 5, - SetMaxIntValue = 6, - MinDoubleValue = 7, - GetMinDoubleValue = 8, - SetMinDoubleValue = 9, - MaxDoubleValue = 10, - GetMaxDoubleValue = 11, - SetMaxDoubleValue = 12, - MinLength = 13, - GetMinLength = 14, - SetMinLength = 15, - MaxLength = 16, - GetMaxLength = 17, - SetMaxLength = 18, - Pattern = 19, - GetPattern = 20, - SetPattern = 21 -} - -interface ConstraintMember { - cppConstType?: string; - cppType: string; - getter: MemberNames; - name: MemberNames; - setter: MemberNames; -} - -export interface IncludeRecord { - kind: IncludeKind | undefined /** How to include that */; - typeKind: TypeKind | undefined /** What exactly to include */; -} - -export interface TypeRecord { - forceInclude: boolean; - level: number; - name: Name; - type: Type; - variant: boolean; -} - -/** - * We map each and every unique type to a include kind, e.g. how - * to include the given type - */ -export type IncludeMap = Map; - -export interface TypeContext { - inJsonNamespace: boolean; - needsForwardIndirection: boolean; - needsOptionalIndirection: boolean; -} - -interface StringType { - createStringLiteral: (inner: Sourcelike) => Sourcelike; - emitHelperFunctions: () => void; - getConstType: () => string; - getRegex: () => string; - getSMatch: () => string; - getType: () => string; - wrapEncodingChange: ( - qualifier: Sourcelike[], - fromType: Sourcelike, - toType: Sourcelike, - inner: Sourcelike - ) => Sourcelike; - wrapToString: (inner: Sourcelike) => Sourcelike; -} - -function addQualifier(qualifier: Sourcelike, qualified: Sourcelike[]): Sourcelike[] { - if (qualified.length === 0) { - return []; - } - - return [qualifier, qualified]; -} - -class WrappingCode { - public constructor( - private readonly start: Sourcelike[], - private readonly end: Sourcelike[] - ) {} - - public wrap(qualifier: Sourcelike, inner: Sourcelike): Sourcelike { - return [addQualifier(qualifier, this.start), inner, this.end]; - } -} - -class BaseString { - public _stringType: string; - - public _constStringType: string; - - public _smatch: string; - - public _regex: string; - - public _stringLiteralPrefix: string; - - public _toString: WrappingCode; - - public _encodingClass: Sourcelike; - - public _encodingFunction: Sourcelike; - - public constructor( - stringType: string, - constStringType: string, - smatch: string, - regex: string, - stringLiteralPrefix: string, - toString: WrappingCode, - encodingClass: string, - encodingFunction: string - ) { - this._stringType = stringType; - this._constStringType = constStringType; - this._smatch = smatch; - this._regex = regex; - this._stringLiteralPrefix = stringLiteralPrefix; - this._toString = toString; - this._encodingClass = encodingClass; - this._encodingFunction = encodingFunction; - } - - public getType(): string { - return this._stringType; - } - - public getConstType(): string { - return this._constStringType; - } - - public getSMatch(): string { - return this._smatch; - } - - public getRegex(): string { - return this._regex; - } - - public createStringLiteral(inner: Sourcelike): Sourcelike { - return [this._stringLiteralPrefix, '"', inner, '"']; - } - - public wrapToString(inner: Sourcelike): Sourcelike { - return this._toString.wrap([], inner); - } -} + BaseString, + type ConstraintMember, + GlobalNames, + IncludeKind, + type IncludeMap, + type IncludeRecord, + MemberNames, + type StringType, + type TypeContext, + type TypeRecord, + WrappingCode, + addQualifier, + constraintsForType, + legalizeName, + optionalAsSharedType, + optionalFactoryAsSharedType +} from "./utils"; export class CPlusPlusRenderer extends ConvenienceRenderer { /** diff --git a/packages/quicktype-core/src/language/CPlusPlus/constants.ts b/packages/quicktype-core/src/language/CPlusPlus/constants.ts new file mode 100644 index 000000000..4ed53bd81 --- /dev/null +++ b/packages/quicktype-core/src/language/CPlusPlus/constants.ts @@ -0,0 +1,103 @@ + +export const keywords = [ + "alignas", + "alignof", + "and", + "and_eq", + "asm", + "atomic_cancel", + "atomic_commit", + "atomic_noexcept", + "auto", + "bitand", + "bitor", + "bool", + "break", + "case", + "catch", + "char", + "char16_t", + "char32_t", + "class", + "compl", + "concept", + "const", + "constexpr", + "const_cast", + "continue", + "co_await", + "co_return", + "co_yield", + "decltype", + "default", + "delete", + "do", + "double", + "dynamic_cast", + "else", + "enum", + "explicit", + "export", + "extern", + "false", + "float", + "for", + "friend", + "goto", + "if", + "import", + "inline", + "int", + "long", + "module", + "mutable", + "namespace", + "new", + "noexcept", + "not", + "not_eq", + "nullptr", + "operator", + "or", + "or_eq", + "private", + "protected", + "public", + "register", + "reinterpret_cast", + "requires", + "return", + "short", + "signed", + "sizeof", + "static", + "static_assert", + "static_cast", + "struct", + "switch", + "synchronized", + "template", + "this", + "thread_local", + "throw", + "true", + "try", + "typedef", + "typeid", + "typename", + "union", + "unsigned", + "using", + "virtual", + "void", + "volatile", + "wchar_t", + "while", + "xor", + "xor_eq", + "override", + "final", + "transaction_safe", + "transaction_safe_dynamic", + "NULL" +] as const; diff --git a/packages/quicktype-core/src/language/CPlusPlus/index.ts b/packages/quicktype-core/src/language/CPlusPlus/index.ts new file mode 100644 index 000000000..8ee7d4d66 --- /dev/null +++ b/packages/quicktype-core/src/language/CPlusPlus/index.ts @@ -0,0 +1,2 @@ +export { CPlusPlusTargetLanguage, cPlusPlusOptions } from "./language"; +export { CPlusPlusRenderer } from "./CPlusPlusRenderer"; diff --git a/packages/quicktype-core/src/language/CPlusPlus/language.ts b/packages/quicktype-core/src/language/CPlusPlus/language.ts new file mode 100644 index 000000000..292d21a11 --- /dev/null +++ b/packages/quicktype-core/src/language/CPlusPlus/language.ts @@ -0,0 +1,129 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { type NamingStyle } from "../../support/Strings"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { CPlusPlusRenderer } from "./CPlusPlusRenderer"; + +const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; +const underscoreValue: [string, NamingStyle] = ["underscore-case", "underscore"]; +const camelValue: [string, NamingStyle] = ["camel-case", "camel"]; +const upperUnderscoreValue: [string, NamingStyle] = ["upper-underscore-case", "upper-underscore"]; +const pascalUpperAcronymsValue: [string, NamingStyle] = ["pascal-case-upper-acronyms", "pascal-upper-acronyms"]; +const camelUpperAcronymsValue: [string, NamingStyle] = ["camel-case-upper-acronyms", "camel-upper-acronyms"]; + +export const cPlusPlusOptions = { + typeSourceStyle: new EnumOption( + "source-style", + "Source code generation type, whether to generate single or multiple source files", + [ + ["single-source", true], + ["multi-source", false] + ], + "single-source", + "secondary" + ), + includeLocation: new EnumOption( + "include-location", + "Whether json.hpp is to be located globally or locally", + [ + ["local-include", true], + ["global-include", false] + ], + "local-include", + "secondary" + ), + codeFormat: new EnumOption( + "code-format", + "Generate classes with getters/setters, instead of structs", + [ + ["with-struct", false], + ["with-getter-setter", true] + ], + "with-getter-setter" + ), + wstring: new EnumOption( + "wstring", + "Store strings using Utf-16 std::wstring, rather than Utf-8 std::string", + [ + ["use-string", false], + ["use-wstring", true] + ], + "use-string" + ), + westConst: new EnumOption( + "const-style", + "Put const to the left/west (const T) or right/east (T const)", + [ + ["west-const", true], + ["east-const", false] + ], + "west-const" + ), + justTypes: new BooleanOption("just-types", "Plain types only", false), + namespace: new StringOption("namespace", "Name of the generated namespace(s)", "NAME", "quicktype"), + enumType: new StringOption("enum-type", "Type of enum class", "NAME", "int", "secondary"), + typeNamingStyle: new EnumOption("type-style", "Naming style for types", [ + pascalValue, + underscoreValue, + camelValue, + upperUnderscoreValue, + pascalUpperAcronymsValue, + camelUpperAcronymsValue + ]), + memberNamingStyle: new EnumOption("member-style", "Naming style for members", [ + underscoreValue, + pascalValue, + camelValue, + upperUnderscoreValue, + pascalUpperAcronymsValue, + camelUpperAcronymsValue + ]), + enumeratorNamingStyle: new EnumOption("enumerator-style", "Naming style for enumerators", [ + upperUnderscoreValue, + underscoreValue, + pascalValue, + camelValue, + pascalUpperAcronymsValue, + camelUpperAcronymsValue + ]), + boost: new BooleanOption("boost", "Require a dependency on boost. Without boost, C++17 is required", true), + hideNullOptional: new BooleanOption("hide-null-optional", "Hide null value for optional field", false) +}; + +export class CPlusPlusTargetLanguage extends TargetLanguage { + public constructor(displayName = "C++", names: string[] = ["c++", "cpp", "cplusplus"], extension = "cpp") { + super(displayName, names, extension); + } + + protected getOptions(): Array> { + return [ + cPlusPlusOptions.justTypes, + cPlusPlusOptions.namespace, + cPlusPlusOptions.codeFormat, + cPlusPlusOptions.wstring, + cPlusPlusOptions.westConst, + cPlusPlusOptions.typeSourceStyle, + cPlusPlusOptions.includeLocation, + cPlusPlusOptions.typeNamingStyle, + cPlusPlusOptions.memberNamingStyle, + cPlusPlusOptions.enumeratorNamingStyle, + cPlusPlusOptions.enumType, + cPlusPlusOptions.boost, + cPlusPlusOptions.hideNullOptional + ]; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): CPlusPlusRenderer { + return new CPlusPlusRenderer(this, renderContext, getOptionValues(cPlusPlusOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/CPlusPlus/utils.ts b/packages/quicktype-core/src/language/CPlusPlus/utils.ts new file mode 100644 index 000000000..93c6e75de --- /dev/null +++ b/packages/quicktype-core/src/language/CPlusPlus/utils.ts @@ -0,0 +1,208 @@ +import { + type MinMaxConstraint, + minMaxLengthForType, + minMaxValueForType, + patternForType +} from "../../attributes/Constraints"; +import { type Name } from "../../Naming"; +import { type Sourcelike } from "../../Source"; +import { isAscii, isLetterOrUnderscoreOrDigit, legalizeCharacters } from "../../support/Strings"; +import { type Type, type TypeKind } from "../../Type"; + +export function constraintsForType(t: Type): + | { + minMax?: MinMaxConstraint; + minMaxLength?: MinMaxConstraint; + pattern?: string; + } + | undefined { + const minMax = minMaxValueForType(t); + const minMaxLength = minMaxLengthForType(t); + const pattern = patternForType(t); + if (minMax === undefined && minMaxLength === undefined && pattern === undefined) return undefined; + return { minMax, minMaxLength, pattern }; +} + +export const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); + +/// Type to use as an optional if cycle breaking is required +export const optionalAsSharedType = "std::shared_ptr"; +/// Factory to use when creating an optional if cycle breaking is required +export const optionalFactoryAsSharedType = "std::make_shared"; + +/** + * To be able to support circles in multiple files - + * e.g. class#A using class#B using class#A (obviously not directly, + * but in vector or in variant) we can forward declare them; + */ +export enum IncludeKind { + ForwardDeclare = "ForwardDeclare", + Include = "Include" +} + +// FIXME: make these string enums eventually +export enum GlobalNames { + ClassMemberConstraints = 1, + ClassMemberConstraintException = 2, + ValueTooLowException = 3, + ValueTooHighException = 4, + ValueTooShortException = 5, + ValueTooLongException = 6, + InvalidPatternException = 7, + CheckConstraint = 8 +} + +// FIXME: make these string enums eventually +export enum MemberNames { + MinIntValue = 1, + GetMinIntValue = 2, + SetMinIntValue = 3, + MaxIntValue = 4, + GetMaxIntValue = 5, + SetMaxIntValue = 6, + MinDoubleValue = 7, + GetMinDoubleValue = 8, + SetMinDoubleValue = 9, + MaxDoubleValue = 10, + GetMaxDoubleValue = 11, + SetMaxDoubleValue = 12, + MinLength = 13, + GetMinLength = 14, + SetMinLength = 15, + MaxLength = 16, + GetMaxLength = 17, + SetMaxLength = 18, + Pattern = 19, + GetPattern = 20, + SetPattern = 21 +} + +export interface ConstraintMember { + cppConstType?: string; + cppType: string; + getter: MemberNames; + name: MemberNames; + setter: MemberNames; +} + +export interface IncludeRecord { + kind: IncludeKind | undefined /** How to include that */; + typeKind: TypeKind | undefined /** What exactly to include */; +} + +export interface TypeRecord { + forceInclude: boolean; + level: number; + name: Name; + type: Type; + variant: boolean; +} + +/** + * We map each and every unique type to a include kind, e.g. how + * to include the given type + */ +export type IncludeMap = Map; + +export interface TypeContext { + inJsonNamespace: boolean; + needsForwardIndirection: boolean; + needsOptionalIndirection: boolean; +} + +export interface StringType { + createStringLiteral: (inner: Sourcelike) => Sourcelike; + emitHelperFunctions: () => void; + getConstType: () => string; + getRegex: () => string; + getSMatch: () => string; + getType: () => string; + wrapEncodingChange: ( + qualifier: Sourcelike[], + fromType: Sourcelike, + toType: Sourcelike, + inner: Sourcelike + ) => Sourcelike; + wrapToString: (inner: Sourcelike) => Sourcelike; +} + +export function addQualifier(qualifier: Sourcelike, qualified: Sourcelike[]): Sourcelike[] { + if (qualified.length === 0) { + return []; + } + + return [qualifier, qualified]; +} + +export class WrappingCode { + public constructor( + private readonly start: Sourcelike[], + private readonly end: Sourcelike[] + ) {} + + public wrap(qualifier: Sourcelike, inner: Sourcelike): Sourcelike { + return [addQualifier(qualifier, this.start), inner, this.end]; + } +} + +export class BaseString { + public _stringType: string; + + public _constStringType: string; + + public _smatch: string; + + public _regex: string; + + public _stringLiteralPrefix: string; + + public _toString: WrappingCode; + + public _encodingClass: Sourcelike; + + public _encodingFunction: Sourcelike; + + public constructor( + stringType: string, + constStringType: string, + smatch: string, + regex: string, + stringLiteralPrefix: string, + toString: WrappingCode, + encodingClass: string, + encodingFunction: string + ) { + this._stringType = stringType; + this._constStringType = constStringType; + this._smatch = smatch; + this._regex = regex; + this._stringLiteralPrefix = stringLiteralPrefix; + this._toString = toString; + this._encodingClass = encodingClass; + this._encodingFunction = encodingFunction; + } + + public getType(): string { + return this._stringType; + } + + public getConstType(): string { + return this._constStringType; + } + + public getSMatch(): string { + return this._smatch; + } + + public getRegex(): string { + return this._regex; + } + + public createStringLiteral(inner: Sourcelike): Sourcelike { + return [this._stringLiteralPrefix, '"', inner, '"']; + } + + public wrapToString(inner: Sourcelike): Sourcelike { + return this._toString.wrap([], inner); + } +} diff --git a/packages/quicktype-core/src/language/CSharp.ts b/packages/quicktype-core/src/language/CSharp.ts deleted file mode 100644 index 331345d66..000000000 --- a/packages/quicktype-core/src/language/CSharp.ts +++ /dev/null @@ -1,2498 +0,0 @@ -import { arrayIntercalate } from "collection-utils"; -import unicode from "unicode-properties"; - -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { minMaxLengthForType, minMaxValueForType } from "../attributes/Constraints"; -import { ConvenienceRenderer, type ForbiddenWordsInfo, inferredNameOrder } from "../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, SimpleName, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; -import { - type WordInName, - camelCase, - combineWords, - firstUpperWordStyle, - splitIntoWords, - utf16LegalizeCharacters, - utf16StringEscape -} from "../support/Strings"; -import { assert, assertNever, defined, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayDecodingTransformer, - ArrayEncodingTransformer, - ChoiceTransformer, - DecodingChoiceTransformer, - DecodingTransformer, - EncodingTransformer, - MinMaxLengthCheckTransformer, - MinMaxValueTransformer, - ParseStringTransformer, - StringMatchTransformer, - StringProducerTransformer, - StringifyTransformer, - type Transformation, - type Transformer, - UnionInstantiationTransformer, - UnionMemberMatchTransformer, - followTargetType, - transformationForType -} from "../Transformers"; -import { - ArrayType, - type ClassProperty, - ClassType, - EnumType, - type PrimitiveStringTypeKind, - type PrimitiveType, - type TransformedStringTypeKind, - type Type, - UnionType -} from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export enum Framework { - Newtonsoft = "Newtonsoft", - SystemTextJson = "SystemTextJson" -} - -export type Version = 5 | 6; -export interface OutputFeatures { - attributes: boolean; - helpers: boolean; -} - -export enum AccessModifier { - None = "None", - Public = "Public", - Internal = "Internal" -} - -export type CSharpTypeForAny = "object" | "dynamic"; - -function noFollow(t: Type): Type { - return t; -} - -function needTransformerForType(t: Type): "automatic" | "manual" | "nullable" | "none" { - if (t instanceof UnionType) { - const maybeNullable = nullableFromUnion(t); - if (maybeNullable === null) return "automatic"; - if (needTransformerForType(maybeNullable) === "manual") return "nullable"; - return "none"; - } - - if (t instanceof ArrayType) { - const itemsNeed = needTransformerForType(t.items); - if (itemsNeed === "manual" || itemsNeed === "nullable") return "automatic"; - return "none"; - } - - if (t instanceof EnumType) return "automatic"; - if (t.kind === "double") return minMaxValueForType(t) !== undefined ? "manual" : "none"; - if (t.kind === "integer-string" || t.kind === "bool-string") return "manual"; - if (t.kind === "string") { - return minMaxLengthForType(t) !== undefined ? "manual" : "none"; - } - - return "none"; -} - -function alwaysApplyTransformation(xf: Transformation): boolean { - const t = xf.targetType; - if (t instanceof EnumType) return true; - if (t instanceof UnionType) return nullableFromUnion(t) === null; - return false; -} - -/** - * The C# type for a given transformed string type. - */ -function csTypeForTransformedStringType(t: PrimitiveType): Sourcelike { - switch (t.kind) { - case "date-time": - return "DateTimeOffset"; - case "uuid": - return "Guid"; - case "uri": - return "Uri"; - default: - return panic(`Transformed string type ${t.kind} not supported`); - } -} - -export const cSharpOptions = { - framework: new EnumOption( - "framework", - "Serialization framework", - [ - ["NewtonSoft", Framework.Newtonsoft], - ["SystemTextJson", Framework.SystemTextJson] - ], - "NewtonSoft" - ), - useList: new EnumOption("array-type", "Use T[] or List", [ - ["array", false], - ["list", true] - ]), - dense: new EnumOption( - "density", - "Property density", - [ - ["normal", false], - ["dense", true] - ], - "normal", - "secondary" - ), - // FIXME: Do this via a configurable named eventually. - namespace: new StringOption("namespace", "Generated namespace", "NAME", "QuickType"), - version: new EnumOption( - "csharp-version", - "C# version", - [ - ["5", 5], - ["6", 6] - ], - "6", - "secondary" - ), - virtual: new BooleanOption("virtual", "Generate virtual properties", false), - typeForAny: new EnumOption( - "any-type", - 'Type to use for "any"', - [ - ["object", "object"], - ["dynamic", "dynamic"] - ], - "object", - "secondary" - ), - useDecimal: new EnumOption( - "number-type", - "Type to use for numbers", - [ - ["double", false], - ["decimal", true] - ], - "double", - "secondary" - ), - features: new EnumOption("features", "Output features", [ - ["complete", { namespaces: true, helpers: true, attributes: true }], - ["attributes-only", { namespaces: true, helpers: false, attributes: true }], - ["just-types-and-namespace", { namespaces: true, helpers: false, attributes: false }], - ["just-types", { namespaces: true, helpers: false, attributes: false }] - ]), - baseclass: new EnumOption( - "base-class", - "Base class", - [ - ["EntityData", "EntityData"], - ["Object", undefined] - ], - "Object", - "secondary" - ), - checkRequired: new BooleanOption("check-required", "Fail if required properties are missing", false), - keepPropertyName: new BooleanOption("keep-property-name", "Keep original field name generate", false) -}; - -export class CSharpTargetLanguage extends TargetLanguage { - public constructor() { - super("C#", ["cs", "csharp"], "cs"); - } - - protected getOptions(): Array> { - return [ - cSharpOptions.framework, - cSharpOptions.namespace, - cSharpOptions.version, - cSharpOptions.dense, - cSharpOptions.useList, - cSharpOptions.useDecimal, - cSharpOptions.typeForAny, - cSharpOptions.virtual, - cSharpOptions.features, - cSharpOptions.baseclass, - cSharpOptions.checkRequired, - cSharpOptions.keepPropertyName - ]; - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - mapping.set("date", "date-time"); - mapping.set("time", "date-time"); - mapping.set("date-time", "date-time"); - mapping.set("uuid", "uuid"); - mapping.set("uri", "uri"); - mapping.set("integer-string", "integer-string"); - mapping.set("bool-string", "bool-string"); - return mapping; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public needsTransformerForType(t: Type): boolean { - const need = needTransformerForType(t); - return need !== "none" && need !== "nullable"; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { - const options = getOptionValues(cSharpOptions, untypedOptionValues); - - switch (options.framework) { - case Framework.Newtonsoft: - return new NewtonsoftCSharpRenderer( - this, - renderContext, - getOptionValues(newtonsoftCSharpOptions, untypedOptionValues) - ); - case Framework.SystemTextJson: - return new SystemTextJsonCSharpRenderer( - this, - renderContext, - getOptionValues(systemTextJsonCSharpOptions, untypedOptionValues) - ); - default: - return assertNever(options.framework); - } - } -} - -const namingFunction = funPrefixNamer("namer", csNameStyle); -const namingFunctionKeep = funPrefixNamer("namerKeep", csNameStyleKeep); - -// FIXME: Make a Named? -const denseJsonPropertyName = "J"; -const denseRequiredEnumName = "R"; -const denseNullValueHandlingEnumName = "N"; - -function isStartCharacter(utf16Unit: number): boolean { - if (unicode.isAlphabetic(utf16Unit)) { - return true; - } - - return utf16Unit === 0x5f; // underscore -} - -function isPartCharacter(utf16Unit: number): boolean { - const category: string = unicode.getCategory(utf16Unit); - if (["Nd", "Pc", "Mn", "Mc"].includes(category)) { - return true; - } - - return isStartCharacter(utf16Unit); -} - -const legalizeName = utf16LegalizeCharacters(isPartCharacter); - -function csNameStyle(original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - firstUpperWordStyle, - firstUpperWordStyle, - firstUpperWordStyle, - firstUpperWordStyle, - "", - isStartCharacter - ); -} - -function csNameStyleKeep(original: string): string { - const keywords = [ - "abstract", - "as", - "base", - "bool", - "break", - "byte", - "case", - "catch", - "char", - "checked", - "class", - "const", - "continue", - "decimal", - "default", - "delegate", - "do", - "double", - "else", - "enum", - "event", - "explicit", - "extern", - "false", - "finally", - "fixed", - "float", - "for", - "foreach", - "goto", - "if", - "implicit", - "in", - "int", - "interface", - "internal", - "is", - "lock", - "long", - "namespace", - "new", - "null", - "object", - "operator", - "out", - "override", - "params", - "private", - "protected", - "public", - "readonly", - "ref", - "return", - "sbyte", - "sealed", - "short", - "sizeof", - "stackalloc", - "static", - "string", - "struct", - "switch", - "this", - "throw", - "true", - "try", - "typeof", - "uint", - "ulong", - "unchecked", - "unsafe", - "ushort", - "using", - "virtual", - "void", - "volatile", - "while" - ]; - - const words: WordInName[] = [ - { - word: original, - isAcronym: false - } - ]; - - const result = combineWords( - words, - legalizeName, - x => x, - x => x, - x => x, - x => x, - "", - isStartCharacter - ); - - return keywords.includes(result) ? "@" + result : result; -} - -function isValueType(t: Type): boolean { - if (t instanceof UnionType) { - return nullableFromUnion(t) === null; - } - - return ["integer", "double", "bool", "enum", "date-time", "uuid"].includes(t.kind); -} - -export class CSharpRenderer extends ConvenienceRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - private readonly _csOptions: OptionValues - ) { - super(targetLanguage, renderContext); - } - - protected forbiddenNamesForGlobalNamespace(): string[] { - return ["QuickType", "Type", "System", "Console", "Exception", "DateTimeOffset", "Guid", "Uri"]; - } - - protected forbiddenForObjectProperties(_: ClassType, classNamed: Name): ForbiddenWordsInfo { - return { - names: [ - classNamed, - "ToString", - "GetHashCode", - "Finalize", - "Equals", - "GetType", - "MemberwiseClone", - "ReferenceEquals" - ], - includeGlobalForbidden: false - }; - } - - protected forbiddenForUnionMembers(_: UnionType, unionNamed: Name): ForbiddenWordsInfo { - return { names: [unionNamed], includeGlobalForbidden: true }; - } - - protected makeNamedTypeNamer(): Namer { - return namingFunction; - } - - protected namerForObjectProperty(): Namer { - return this._csOptions.keepPropertyName ? namingFunctionKeep : namingFunction; - } - - protected makeUnionMemberNamer(): Namer { - return namingFunction; - } - - protected makeEnumCaseNamer(): Namer { - return namingFunction; - } - - protected unionNeedsName(u: UnionType): boolean { - return nullableFromUnion(u) === null; - } - - protected namedTypeToNameForTopLevel(type: Type): Type | undefined { - // If the top-level type doesn't contain any classes or unions - // we have to define a class just for the `FromJson` method, in - // emitFromJsonForTopLevel. - return directlyReachableSingleNamedType(type); - } - - protected emitBlock(f: () => void, semicolon = false): void { - this.emitLine("{"); - this.indent(f); - this.emitLine("}", semicolon ? ";" : ""); - } - - protected get doubleType(): string { - return this._csOptions.useDecimal ? "decimal" : "double"; - } - - protected csType(t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false): Sourcelike { - const actualType = follow(t); - return matchType( - actualType, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, this._csOptions.typeForAny), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, this._csOptions.typeForAny), - _boolType => "bool", - _integerType => "long", - _doubleType => this.doubleType, - _stringType => "string", - arrayType => { - const itemsType = this.csType(arrayType.items, follow, withIssues); - if (this._csOptions.useList) { - return ["List<", itemsType, ">"]; - } else { - return [itemsType, "[]"]; - } - }, - classType => this.nameForNamedType(classType), - mapType => ["Dictionary"], - enumType => this.nameForNamedType(enumType), - unionType => { - const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.nullableCSType(nullable, noFollow); - return this.nameForNamedType(unionType); - }, - transformedStringType => csTypeForTransformedStringType(transformedStringType) - ); - } - - protected nullableCSType(t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false): Sourcelike { - t = followTargetType(t); - const csType = this.csType(t, follow, withIssues); - if (isValueType(t)) { - return [csType, "?"]; - } else { - return csType; - } - } - - protected baseclassForType(_t: Type): Sourcelike | undefined { - return undefined; - } - - protected emitType( - description: string[] | undefined, - accessModifier: AccessModifier, - declaration: Sourcelike, - name: Sourcelike, - baseclass: Sourcelike | undefined, - emitter: () => void - ): void { - switch (accessModifier) { - case AccessModifier.Public: - declaration = ["public ", declaration]; - break; - case AccessModifier.Internal: - declaration = ["internal ", declaration]; - break; - default: - break; - } - - this.emitDescription(description); - if (baseclass === undefined) { - this.emitLine(declaration, " ", name); - } else { - this.emitLine(declaration, " ", name, " : ", baseclass); - } - - this.emitBlock(emitter); - } - - protected attributesForProperty( - _property: ClassProperty, - _name: Name, - _c: ClassType, - _jsonName: string - ): Sourcelike[] | undefined { - return undefined; - } - - protected propertyDefinition(property: ClassProperty, name: Name, _c: ClassType, _jsonName: string): Sourcelike { - const t = property.type; - const csType = property.isOptional - ? this.nullableCSType(t, followTargetType, true) - : this.csType(t, followTargetType, true); - - const propertyArray = ["public "]; - - if (this._csOptions.virtual) propertyArray.push("virtual "); - - return [...propertyArray, csType, " ", name, " { get; set; }"]; - } - - protected emitDescriptionBlock(lines: Sourcelike[]): void { - const start = "///

      "; - if (this._csOptions.dense) { - this.emitLine(start, lines.join("; "), ""); - } else { - this.emitCommentLines(lines, { lineStart: "/// ", beforeComment: start, afterComment: "/// " }); - } - } - - protected blankLinesBetweenAttributes(): boolean { - return false; - } - - private emitClassDefinition(c: ClassType, className: Name): void { - this.emitType( - this.descriptionForType(c), - AccessModifier.Public, - "partial class", - className, - this.baseclassForType(c), - () => { - if (c.getProperties().size === 0) return; - const blankLines = this.blankLinesBetweenAttributes() ? "interposing" : "none"; - let columns: Sourcelike[][] = []; - let isFirstProperty = true; - let previousDescription: string[] | undefined = undefined; - this.forEachClassProperty(c, blankLines, (name, jsonName, p) => { - const attributes = this.attributesForProperty(p, name, c, jsonName); - const description = this.descriptionForClassProperty(c, jsonName); - const property = this.propertyDefinition(p, name, c, jsonName); - if (attributes === undefined) { - if ( - // Descriptions should be preceded by an empty line - (!isFirstProperty && description !== undefined) || - // If the previous property has a description, leave an empty line - previousDescription !== undefined - ) { - this.ensureBlankLine(); - } - - this.emitDescription(description); - this.emitLine(property); - } else if (this._csOptions.dense && attributes.length > 0) { - const comment = description === undefined ? "" : ` // ${description.join("; ")}`; - columns.push([attributes, " ", property, comment]); - } else { - this.emitDescription(description); - for (const attribute of attributes) { - this.emitLine(attribute); - } - - this.emitLine(property); - } - - isFirstProperty = false; - previousDescription = description; - }); - if (columns.length > 0) { - this.emitTable(columns); - } - } - ); - } - - private emitUnionDefinition(u: UnionType, unionName: Name): void { - const nonNulls = removeNullFromUnion(u, true)[1]; - this.emitType( - this.descriptionForType(u), - AccessModifier.Public, - "partial struct", - unionName, - this.baseclassForType(u), - () => { - this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { - const csType = this.nullableCSType(t); - this.emitLine("public ", csType, " ", fieldName, ";"); - }); - this.ensureBlankLine(); - const nullTests: Sourcelike[] = Array.from(nonNulls).map(t => [ - this.nameForUnionMember(u, t), - " == null" - ]); - this.ensureBlankLine(); - this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { - const csType = this.csType(t); - this.emitExpressionMember( - ["public static implicit operator ", unionName, "(", csType, " ", fieldName, ")"], - ["new ", unionName, " { ", fieldName, " = ", fieldName, " }"] - ); - }); - if (u.findMember("null") === undefined) return; - this.emitExpressionMember("public bool IsNull", arrayIntercalate(" && ", nullTests), true); - } - ); - } - - private emitEnumDefinition(e: EnumType, enumName: Name): void { - const caseNames: Sourcelike[] = []; - this.forEachEnumCase(e, "none", name => { - if (caseNames.length > 0) caseNames.push(", "); - caseNames.push(name); - }); - this.emitDescription(this.descriptionForType(e)); - this.emitLine("public enum ", enumName, " { ", caseNames, " };"); - } - - protected emitExpressionMember(declare: Sourcelike, define: Sourcelike, isProperty = false): void { - if (this._csOptions.version === 5) { - this.emitLine(declare); - this.emitBlock(() => { - const stmt = ["return ", define, ";"]; - if (isProperty) { - this.emitLine("get"); - this.emitBlock(() => this.emitLine(stmt)); - } else { - this.emitLine(stmt); - } - }); - } else { - this.emitLine(declare, " => ", define, ";"); - } - } - - protected emitTypeSwitch( - types: Iterable, - condition: (t: T) => Sourcelike, - withBlock: boolean, - withReturn: boolean, - f: (t: T) => void - ): void { - assert(!withReturn || withBlock, "Can only have return with block"); - for (const t of types) { - this.emitLine("if (", condition(t), ")"); - if (withBlock) { - this.emitBlock(() => { - f(t); - if (withReturn) { - this.emitLine("return;"); - } - }); - } else { - this.indent(() => f(t)); - } - } - } - - protected emitUsing(ns: Sourcelike): void { - this.emitLine("using ", ns, ";"); - } - - protected emitUsings(): void { - for (const ns of ["System", "System.Collections.Generic"]) { - this.emitUsing(ns); - } - } - - protected emitRequiredHelpers(): void { - return; - } - - private emitTypesAndSupport(): void { - this.forEachObject("leading-and-interposing", (c: ClassType, name: Name) => this.emitClassDefinition(c, name)); - this.forEachEnum("leading-and-interposing", (e, name) => this.emitEnumDefinition(e, name)); - this.forEachUnion("leading-and-interposing", (u, name) => this.emitUnionDefinition(u, name)); - this.emitRequiredHelpers(); - } - - protected emitDefaultLeadingComments(): void { - return; - } - - protected emitDefaultFollowingComments(): void { - return; - } - - protected needNamespace(): boolean { - return true; - } - - protected emitSourceStructure(): void { - if (this.leadingComments !== undefined) { - this.emitComments(this.leadingComments); - } else { - this.emitDefaultLeadingComments(); - } - - this.ensureBlankLine(); - if (this.needNamespace()) { - this.emitLine("namespace ", this._csOptions.namespace); - this.emitBlock(() => { - this.emitUsings(); - this.emitTypesAndSupport(); - }); - } else { - this.emitUsings(); - this.emitTypesAndSupport(); - } - - this.emitDefaultFollowingComments(); - } -} - -export const newtonsoftCSharpOptions = Object.assign({}, cSharpOptions, {}); - -export class NewtonsoftCSharpRenderer extends CSharpRenderer { - private readonly _enumExtensionsNames = new Map(); - - private readonly _needHelpers: boolean; - - private readonly _needAttributes: boolean; - - private readonly _needNamespaces: boolean; - - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - private readonly _options: OptionValues - ) { - super(targetLanguage, renderContext, _options); - this._needHelpers = _options.features.helpers; - this._needAttributes = _options.features.attributes; - this._needNamespaces = _options.features.namespaces; - } - - protected forbiddenNamesForGlobalNamespace(): string[] { - const forbidden = [ - "Converter", - "JsonConverter", - "JsonSerializer", - "JsonWriter", - "JsonToken", - "Serialize", - "Newtonsoft", - "MetadataPropertyHandling", - "DateParseHandling", - "FromJson", - "Required" - ]; - if (this._options.dense) { - forbidden.push("J", "R", "N"); - } - - if (this._options.baseclass !== undefined) { - forbidden.push(this._options.baseclass); - } - - return super.forbiddenNamesForGlobalNamespace().concat(forbidden); - } - - protected forbiddenForObjectProperties(c: ClassType, className: Name): ForbiddenWordsInfo { - const result = super.forbiddenForObjectProperties(c, className); - result.names = result.names.concat(["ToJson", "FromJson", "Required"]); - return result; - } - - protected makeNameForTransformation(xf: Transformation, typeName: Name | undefined): Name { - if (typeName === undefined) { - let xfer = xf.transformer; - if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { - xfer = xfer.consumer; - } - - return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); - } - - return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); - } - - protected makeNamedTypeDependencyNames(t: Type, name: Name): DependencyName[] { - if (!(t instanceof EnumType)) return []; - - const extensionsName = new DependencyName( - namingFunction, - name.order + 30, - lookup => `${lookup(name)}_extensions` - ); - this._enumExtensionsNames.set(name, extensionsName); - return [extensionsName]; - } - - protected emitUsings(): void { - // FIXME: We need System.Collections.Generic whenever we have maps or use List. - if (!this._needAttributes && !this._needHelpers) return; - - super.emitUsings(); - this.ensureBlankLine(); - - for (const ns of ["System.Globalization", "Newtonsoft.Json", "Newtonsoft.Json.Converters"]) { - this.emitUsing(ns); - } - - if (this._options.dense) { - this.emitUsing([denseJsonPropertyName, " = Newtonsoft.Json.JsonPropertyAttribute"]); - this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); - this.emitUsing([denseNullValueHandlingEnumName, " = Newtonsoft.Json.NullValueHandling"]); - } - - if (this._options.baseclass === "EntityData") { - this.emitUsing("Microsoft.Azure.Mobile.Server"); - } - } - - protected baseclassForType(_t: Type): Sourcelike | undefined { - return this._options.baseclass; - } - - protected emitDefaultLeadingComments(): void { - if (!this._needHelpers) return; - - this.emitLine("// "); - this.emitLine("//"); - this.emitLine( - "// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do", - this.topLevels.size === 1 ? "" : " one of these", - ":" - ); - this.emitLine("//"); - this.emitLine("// using ", this._options.namespace, ";"); - this.emitLine("//"); - this.forEachTopLevel("none", (t, topLevelName) => { - let rhs: Sourcelike; - if (t instanceof EnumType) { - rhs = ["JsonConvert.DeserializeObject<", topLevelName, ">(jsonString)"]; - } else { - rhs = [topLevelName, ".FromJson(jsonString)"]; - } - - this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); - }); - } - - private converterForType(t: Type): Name | undefined { - let xf = transformationForType(t); - - if (xf === undefined && t instanceof UnionType) { - const maybeNullable = nullableFromUnion(t); - if (maybeNullable !== null) { - t = maybeNullable; - xf = transformationForType(t); - } - } - - if (xf === undefined) return undefined; - - if (alwaysApplyTransformation(xf)) return undefined; - - return defined(this.nameForTransformation(t)); - } - - protected attributesForProperty( - property: ClassProperty, - _name: Name, - _c: ClassType, - jsonName: string - ): Sourcelike[] | undefined { - if (!this._needAttributes) return undefined; - - const attributes: Sourcelike[] = []; - - const jsonProperty = this._options.dense ? denseJsonPropertyName : "JsonProperty"; - const escapedName = utf16StringEscape(jsonName); - const isNullable = followTargetType(property.type).isNullable; - const isOptional = property.isOptional; - const requiredClass = this._options.dense ? "R" : "Required"; - const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; - const nullValueHandling = - isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : []; - let required: Sourcelike; - if (!this._options.checkRequired || (isOptional && isNullable)) { - required = [nullValueHandling]; - } else if (isOptional && !isNullable) { - required = [", Required = ", requiredClass, ".DisallowNull", nullValueHandling]; - } else if (!isOptional && isNullable) { - required = [", Required = ", requiredClass, ".AllowNull"]; - } else { - required = [", Required = ", requiredClass, ".Always", nullValueHandling]; - } - - attributes.push(["[", jsonProperty, '("', escapedName, '"', required, ")]"]); - - const converter = this.converterForType(property.type); - if (converter !== undefined) { - attributes.push(["[JsonConverter(typeof(", converter, "))]"]); - } - - return attributes; - } - - protected blankLinesBetweenAttributes(): boolean { - return this._needAttributes && !this._options.dense; - } - - // The "this" type can't be `dynamic`, so we have to force it to `object`. - private topLevelResultType(t: Type): Sourcelike { - return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); - } - - private emitFromJsonForTopLevel(t: Type, name: Name): void { - if (t instanceof EnumType) return; - - let partial: string; - let typeKind: string; - const definedType = this.namedTypeToNameForTopLevel(t); - if (definedType !== undefined) { - partial = "partial "; - typeKind = definedType instanceof ClassType ? "class" : "struct"; - } else { - partial = ""; - typeKind = "class"; - } - - const csType = this.topLevelResultType(t); - this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { - // FIXME: Make FromJson a Named - this.emitExpressionMember( - ["public static ", csType, " FromJson(string json)"], - ["JsonConvert.DeserializeObject<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)"] - ); - }); - } - - private emitDecoderSwitch(emitBody: () => void): void { - this.emitLine("switch (reader.TokenType)"); - this.emitBlock(emitBody); - } - - private emitTokenCase(tokenType: string): void { - this.emitLine("case JsonToken.", tokenType, ":"); - } - - private emitThrow(message: Sourcelike): void { - this.emitLine("throw new Exception(", message, ");"); - } - - private deserializeTypeCode(typeName: Sourcelike): Sourcelike { - return ["serializer.Deserialize<", typeName, ">(reader)"]; - } - - private serializeValueCode(value: Sourcelike): Sourcelike { - return ["serializer.Serialize(writer, ", value, ")"]; - } - - private emitSerializeClass(): void { - // FIXME: Make Serialize a Named - this.emitType(undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { - // Sometimes multiple top-levels will resolve to the same type, so we have to take care - // not to emit more than one extension method for the same type. - const seenTypes = new Set(); - this.forEachTopLevel("none", t => { - // FIXME: Make ToJson a Named - if (!seenTypes.has(t)) { - seenTypes.add(t); - this.emitExpressionMember( - ["public static string ToJson(this ", this.topLevelResultType(t), " self)"], - ["JsonConvert.SerializeObject(self, ", this._options.namespace, ".Converter.Settings)"] - ); - } - }); - }); - } - - private emitCanConvert(expr: Sourcelike): void { - this.emitExpressionMember("public override bool CanConvert(Type t)", expr); - } - - private emitReadJson(emitBody: () => void): void { - this.emitLine( - "public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)" - ); - this.emitBlock(emitBody); - } - - private emitWriteJson(variable: string, emitBody: () => void): void { - this.emitLine( - "public override void WriteJson(JsonWriter writer, object ", - variable, - ", JsonSerializer serializer)" - ); - this.emitBlock(emitBody); - } - - private converterObject(converterName: Name): Sourcelike { - // FIXME: Get a singleton - return [converterName, ".Singleton"]; - } - - private emitConverterClass(): void { - // FIXME: Make Converter a Named - const converterName: Sourcelike = ["Converter"]; - this.emitType(undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { - this.emitLine("public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings"); - this.emitBlock(() => { - this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); - this.emitLine("DateParseHandling = DateParseHandling.None,"); - this.emitLine("Converters ="); - this.emitLine("{"); - this.indent(() => { - for (const [t, converter] of this.typesWithNamedTransformations) { - if (alwaysApplyTransformation(defined(transformationForType(t)))) { - this.emitLine(this.converterObject(converter), ","); - } - } - - this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); - }); - this.emitLine("},"); - }, true); - }); - } - - private emitDecoderTransformerCase( - tokenCases: string[], - variableName: string, - xfer: Transformer | undefined, - targetType: Type, - emitFinish: (value: Sourcelike) => void - ): void { - if (xfer === undefined) return; - - for (const tokenCase of tokenCases) { - this.emitTokenCase(tokenCase); - } - - this.indent(() => { - const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); - if (!allHandled) { - this.emitLine("break;"); - } - }); - } - - private emitConsume( - value: Sourcelike, - consumer: Transformer | undefined, - targetType: Type, - emitFinish: (variableName: Sourcelike) => void - ): boolean { - if (consumer === undefined) { - emitFinish(value); - return true; - } else { - return this.emitTransformer(value, consumer, targetType, emitFinish); - } - } - - private emitDecodeTransformer( - xfer: Transformer, - targetType: Type, - emitFinish: (value: Sourcelike) => void, - variableName = "value" - ): boolean { - if (xfer instanceof DecodingTransformer) { - const source = xfer.sourceType; - const converter = this.converterForType(targetType); - if (converter !== undefined) { - const typeSource = this.csType(targetType); - this.emitLine("var converter = ", this.converterObject(converter), ";"); - this.emitLine( - "var ", - variableName, - " = (", - typeSource, - ")converter.ReadJson(reader, typeof(", - typeSource, - "), null, serializer);" - ); - } else if (source.kind !== "null") { - let output = targetType.kind === "double" ? targetType : source; - this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); - } - - return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); - } else if (xfer instanceof ArrayDecodingTransformer) { - // FIXME: Consume StartArray - if (!(targetType instanceof ArrayType)) { - return panic("Array decoding must produce an array type"); - } - - // FIXME: handle EOF - this.emitLine("reader.Read();"); - this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); - this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); - this.emitBlock(() => { - this.emitDecodeTransformer( - xfer.itemTransformer, - xfer.itemTargetType, - v => this.emitLine(variableName, ".Add(", v, ");"), - "arrayItem" - ); - // FIXME: handle EOF - this.emitLine("reader.Read();"); - }); - let result: Sourcelike = variableName; - if (!this._options.useList) { - result = [result, ".ToArray()"]; - } - - emitFinish(result); - return true; - } else if (xfer instanceof DecodingChoiceTransformer) { - this.emitDecoderSwitch(() => { - const nullTransformer = xfer.nullTransformer; - if (nullTransformer !== undefined) { - this.emitTokenCase("Null"); - this.indent(() => { - const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null"); - if (!allHandled) { - this.emitLine("break"); - } - }); - } - - this.emitDecoderTransformerCase( - ["Integer"], - "integerValue", - xfer.integerTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"], - "doubleValue", - xfer.doubleTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase(["Boolean"], "boolValue", xfer.boolTransformer, targetType, emitFinish); - this.emitDecoderTransformerCase( - ["String", "Date"], - "stringValue", - xfer.stringTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - ["StartObject"], - "objectValue", - xfer.objectTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - ["StartArray"], - "arrayValue", - xfer.arrayTransformer, - targetType, - emitFinish - ); - }); - return false; - } else { - return panic("Unknown transformer"); - } - } - - private stringCaseValue(t: Type, stringCase: string): Sourcelike { - if (t.kind === "string") { - return ['"', utf16StringEscape(stringCase), '"']; - } else if (t instanceof EnumType) { - return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; - } - - return panic(`Type ${t.kind} does not have string cases`); - } - - private emitTransformer( - variable: Sourcelike, - xfer: Transformer, - targetType: Type, - emitFinish: (value: Sourcelike) => void - ): boolean { - function directTargetType(continuation: Transformer | undefined): Type { - if (continuation === undefined) { - return targetType; - } - - return followTargetType(continuation.sourceType); - } - - if (xfer instanceof ChoiceTransformer) { - const caseXfers = xfer.transformers; - if (caseXfers.length > 1 && caseXfers.every(caseXfer => caseXfer instanceof StringMatchTransformer)) { - this.emitLine("switch (", variable, ")"); - this.emitBlock(() => { - for (const caseXfer of caseXfers) { - const matchXfer = caseXfer as StringMatchTransformer; - const value = this.stringCaseValue( - followTargetType(matchXfer.sourceType), - matchXfer.stringCase - ); - this.emitLine("case ", value, ":"); - this.indent(() => { - const allDone = this.emitTransformer( - variable, - matchXfer.transformer, - targetType, - emitFinish - ); - if (!allDone) { - this.emitLine("break;"); - } - }); - } - }); - // FIXME: Can we check for exhaustiveness? For enums it should be easy. - return false; - } else { - for (const caseXfer of caseXfers) { - this.emitTransformer(variable, caseXfer, targetType, emitFinish); - } - } - } else if (xfer instanceof UnionMemberMatchTransformer) { - const memberType = xfer.memberType; - const maybeNullable = nullableFromUnion(xfer.sourceType); - let test: Sourcelike; - let member: Sourcelike; - if (maybeNullable !== null) { - if (memberType.kind === "null") { - test = [variable, " == null"]; - member = "null"; - } else { - test = [variable, " != null"]; - member = variable; - } - } else if (memberType.kind === "null") { - test = [variable, ".IsNull"]; - member = "null"; - } else { - const memberName = this.nameForUnionMember(xfer.sourceType, memberType); - member = [variable, ".", memberName]; - test = [member, " != null"]; - } - - if (memberType.kind !== "null" && isValueType(memberType)) { - member = [member, ".Value"]; - } - - this.emitLine("if (", test, ")"); - this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); - } else if (xfer instanceof StringMatchTransformer) { - const value = this.stringCaseValue(followTargetType(xfer.sourceType), xfer.stringCase); - this.emitLine("if (", variable, " == ", value, ")"); - this.emitBlock(() => this.emitTransformer(variable, xfer.transformer, targetType, emitFinish)); - } else if (xfer instanceof EncodingTransformer) { - const converter = this.converterForType(xfer.sourceType); - if (converter !== undefined) { - this.emitLine("var converter = ", this.converterObject(converter), ";"); - this.emitLine("converter.WriteJson(writer, ", variable, ", serializer);"); - } else { - this.emitLine(this.serializeValueCode(variable), ";"); - } - - emitFinish([]); - return true; - } else if (xfer instanceof ArrayEncodingTransformer) { - this.emitLine("writer.WriteStartArray();"); - const itemVariable = "arrayItem"; - this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); - this.emitBlock(() => { - this.emitTransformer(itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { - return; - }); - }); - this.emitLine("writer.WriteEndArray();"); - emitFinish([]); - return true; - } else if (xfer instanceof ParseStringTransformer) { - const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; - switch (immediateTargetType.kind) { - case "date-time": - this.emitLine("DateTimeOffset dt;"); - this.emitLine("if (DateTimeOffset.TryParse(", variable, ", out dt))"); - this.emitBlock(() => this.emitConsume("dt", xfer.consumer, targetType, emitFinish)); - break; - case "uuid": - this.emitLine("Guid guid;"); - this.emitLine("if (Guid.TryParse(", variable, ", out guid))"); - this.emitBlock(() => this.emitConsume("guid", xfer.consumer, targetType, emitFinish)); - break; - case "uri": - this.emitLine("try"); - this.emitBlock(() => { - this.emitLine("var uri = new Uri(", variable, ");"); - this.emitConsume("uri", xfer.consumer, targetType, emitFinish); - }); - this.emitLine("catch (UriFormatException) {}"); - break; - case "integer": - this.emitLine("long l;"); - this.emitLine("if (Int64.TryParse(", variable, ", out l))"); - this.emitBlock(() => this.emitConsume("l", xfer.consumer, targetType, emitFinish)); - break; - case "bool": - this.emitLine("bool b;"); - this.emitLine("if (Boolean.TryParse(", variable, ", out b))"); - this.emitBlock(() => this.emitConsume("b", xfer.consumer, targetType, emitFinish)); - break; - default: - return panic(`Parsing string to ${immediateTargetType.kind} not supported`); - } - } else if (xfer instanceof StringifyTransformer) { - switch (xfer.sourceType.kind) { - case "date-time": - return this.emitConsume( - [variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)'], - xfer.consumer, - targetType, - emitFinish - ); - case "uuid": - return this.emitConsume( - [variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)'], - xfer.consumer, - targetType, - emitFinish - ); - case "integer": - case "uri": - return this.emitConsume([variable, ".ToString()"], xfer.consumer, targetType, emitFinish); - case "bool": - this.emitLine("var boolString = ", variable, ' ? "true" : "false";'); - return this.emitConsume("boolString", xfer.consumer, targetType, emitFinish); - default: - return panic(`Stringifying ${xfer.sourceType.kind} not supported`); - } - } else if (xfer instanceof StringProducerTransformer) { - const value = this.stringCaseValue(directTargetType(xfer.consumer), xfer.result); - return this.emitConsume(value, xfer.consumer, targetType, emitFinish); - } else if (xfer instanceof MinMaxLengthCheckTransformer) { - const min = xfer.minLength; - const max = xfer.maxLength; - const conditions: Sourcelike[] = []; - - if (min !== undefined) { - conditions.push([variable, ".Length >= ", min.toString()]); - } - - if (max !== undefined) { - conditions.push([variable, ".Length <= ", max.toString()]); - } - - this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); - return false; - } else if (xfer instanceof MinMaxValueTransformer) { - const min = xfer.minimum; - const max = xfer.maximum; - const conditions: Sourcelike[] = []; - - if (min !== undefined) { - conditions.push([variable, " >= ", min.toString()]); - } - - if (max !== undefined) { - conditions.push([variable, " <= ", max.toString()]); - } - - this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); - return false; - } else if (xfer instanceof UnionInstantiationTransformer) { - if (!(targetType instanceof UnionType)) { - return panic("Union instantiation transformer must produce a union type"); - } - - const maybeNullable = nullableFromUnion(targetType); - if (maybeNullable !== null) { - emitFinish(variable); - } else { - const unionName = this.nameForNamedType(targetType); - let initializer: Sourcelike; - if (xfer.sourceType.kind === "null") { - initializer = " "; - } else { - const memberName = this.nameForUnionMember(targetType, xfer.sourceType); - initializer = [" ", memberName, " = ", variable, " "]; - } - - emitFinish(["new ", unionName, " {", initializer, "}"]); - } - - return true; - } else { - return panic("Unknown transformer"); - } - - return false; - } - - private emitTransformation(converterName: Name, t: Type): void { - const xf = defined(transformationForType(t)); - const reverse = xf.reverse; - const targetType = xf.targetType; - const xfer = xf.transformer; - this.emitType(undefined, AccessModifier.Internal, "class", converterName, "JsonConverter", () => { - const csType = this.csType(targetType); - let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; - const haveNullable = isValueType(targetType); - if (haveNullable) { - canConvertExpr = [canConvertExpr, " || t == typeof(", csType, "?)"]; - } - - this.emitCanConvert(canConvertExpr); - this.ensureBlankLine(); - this.emitReadJson(() => { - // FIXME: It's unsatisfying that we need this. The reason is that we not - // only match T, but also T?. If we didn't, then the T in T? would not be - // deserialized with our converter but with the default one. Can we check - // whether the type is a nullable? - // FIXME: This could duplicate one of the cases handled below in - // `emitDecodeTransformer`. - if (haveNullable && !(targetType instanceof UnionType)) { - this.emitLine("if (reader.TokenType == JsonToken.Null) return null;"); - } - - const allHandled = this.emitDecodeTransformer(xfer, targetType, v => this.emitLine("return ", v, ";")); - if (!allHandled) { - this.emitThrow(['"Cannot unmarshal type ', csType, '"']); - } - }); - this.ensureBlankLine(); - this.emitWriteJson("untypedValue", () => { - // FIXME: See above. - if (haveNullable && !(targetType instanceof UnionType)) { - this.emitLine("if (untypedValue == null)"); - this.emitBlock(() => { - this.emitLine("serializer.Serialize(writer, null);"); - this.emitLine("return;"); - }); - } - - this.emitLine("var value = (", csType, ")untypedValue;"); - const allHandled = this.emitTransformer("value", reverse.transformer, reverse.targetType, () => - this.emitLine("return;") - ); - if (!allHandled) { - this.emitThrow(['"Cannot marshal type ', csType, '"']); - } - }); - this.ensureBlankLine(); - this.emitLine("public static readonly ", converterName, " Singleton = new ", converterName, "();"); - }); - } - - protected emitRequiredHelpers(): void { - if (this._needHelpers) { - this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n)); - this.ensureBlankLine(); - this.emitSerializeClass(); - } - - if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { - this.ensureBlankLine(); - this.emitConverterClass(); - this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t)); - } - } - - protected needNamespace(): boolean { - return this._needNamespaces; - } -} - -export const systemTextJsonCSharpOptions = Object.assign({}, cSharpOptions, {}); - -export class SystemTextJsonCSharpRenderer extends CSharpRenderer { - private readonly _enumExtensionsNames = new Map(); - - private readonly _needHelpers: boolean; - - private readonly _needAttributes: boolean; - - private readonly _needNamespaces: boolean; - - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - private readonly _options: OptionValues - ) { - super(targetLanguage, renderContext, _options); - this._needHelpers = _options.features.helpers; - this._needAttributes = _options.features.attributes; - this._needNamespaces = _options.features.namespaces; - } - - protected forbiddenNamesForGlobalNamespace(): string[] { - const forbidden = [ - "Converter", - "JsonConverter", - "JsonSerializer", - "JsonWriter", - "JsonToken", - "Serialize", - "JsonSerializerOptions", - // "Newtonsoft", - // "MetadataPropertyHandling", - // "DateParseHandling", - "FromJson", - "Required" - ]; - if (this._options.dense) { - forbidden.push("J", "R", "N"); - } - - if (this._options.baseclass !== undefined) { - forbidden.push(this._options.baseclass); - } - - return super.forbiddenNamesForGlobalNamespace().concat(forbidden); - } - - protected forbiddenForObjectProperties(c: ClassType, className: Name): ForbiddenWordsInfo { - const result = super.forbiddenForObjectProperties(c, className); - result.names = result.names.concat(["ToJson", "FromJson", "Required"]); - return result; - } - - protected makeNameForTransformation(xf: Transformation, typeName: Name | undefined): Name { - if (typeName === undefined) { - let xfer = xf.transformer; - if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { - xfer = xfer.consumer; - } - - return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); - } - - return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); - } - - protected makeNamedTypeDependencyNames(t: Type, name: Name): DependencyName[] { - if (!(t instanceof EnumType)) return []; - - const extensionsName = new DependencyName( - namingFunction, - name.order + 30, - lookup => `${lookup(name)}_extensions` - ); - this._enumExtensionsNames.set(name, extensionsName); - return [extensionsName]; - } - - protected emitUsings(): void { - // FIXME: We need System.Collections.Generic whenever we have maps or use List. - if (!this._needAttributes && !this._needHelpers) return; - - super.emitUsings(); - this.ensureBlankLine(); - - for (const ns of ["System.Text.Json", "System.Text.Json.Serialization", "System.Globalization"]) { - this.emitUsing(ns); - } - - if (this._options.dense) { - this.emitUsing([denseJsonPropertyName, " = System.Text.Json.Serialization.JsonPropertyNameAttribute"]); - // this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); - this.emitUsing([denseNullValueHandlingEnumName, " = System.Text.Json.Serialization.JsonIgnoreCondition"]); - } - - if (this._options.baseclass === "EntityData") { - this.emitUsing("Microsoft.Azure.Mobile.Server"); - } - } - - protected baseclassForType(_t: Type): Sourcelike | undefined { - return this._options.baseclass; - } - - protected emitDefaultFollowingComments(): void { - if (!this._needHelpers) return; - - this.emitLine("#pragma warning restore CS8618"); - this.emitLine("#pragma warning restore CS8601"); - this.emitLine("#pragma warning restore CS8603"); - } - - protected emitDefaultLeadingComments(): void { - if (!this._needHelpers) return; - - this.emitLine("// "); - this.emitLine("//"); - this.emitLine( - "// To parse this JSON data, add NuGet 'System.Text.Json' then do", - this.topLevels.size === 1 ? "" : " one of these", - ":" - ); - this.emitLine("//"); - this.emitLine("// using ", this._options.namespace, ";"); - this.emitLine("//"); - this.forEachTopLevel("none", (t, topLevelName) => { - let rhs: Sourcelike; - if (t instanceof EnumType) { - rhs = ["JsonSerializer.Deserialize<", topLevelName, ">(jsonString)"]; - } else { - rhs = [topLevelName, ".FromJson(jsonString)"]; - } - - this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); - }); - - // fix: should this be an option? Or respond to an existing option? - this.emitLine("#nullable enable"); - this.emitLine("#pragma warning disable CS8618"); - this.emitLine("#pragma warning disable CS8601"); - this.emitLine("#pragma warning disable CS8603"); - } - - private converterForType(t: Type): Name | undefined { - let xf = transformationForType(t); - - if (xf === undefined && t instanceof UnionType) { - const maybeNullable = nullableFromUnion(t); - if (maybeNullable !== null) { - t = maybeNullable; - xf = transformationForType(t); - } - } - - if (xf === undefined) return undefined; - - if (alwaysApplyTransformation(xf)) return undefined; - - return defined(this.nameForTransformation(t)); - } - - protected attributesForProperty( - property: ClassProperty, - _name: Name, - _c: ClassType, - jsonName: string - ): Sourcelike[] | undefined { - if (!this._needAttributes) return undefined; - - const attributes: Sourcelike[] = []; - - const jsonPropertyName = this._options.dense ? denseJsonPropertyName : "JsonPropertyName"; - const escapedName = utf16StringEscape(jsonName); - const isNullable = followTargetType(property.type).isNullable; - const isOptional = property.isOptional; - - if (isOptional && !isNullable) { - attributes.push(["[", "JsonIgnore", "(Condition = JsonIgnoreCondition.WhenWritingNull)]"]); - } - - // const requiredClass = this._options.dense ? "R" : "Required"; - // const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; - // const nullValueHandling = isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : []; - // let required: Sourcelike; - // if (!this._options.checkRequired || (isOptional && isNullable)) { - // required = [nullValueHandling]; - // } else if (isOptional && !isNullable) { - // required = [", Required = ", requiredClass, ".DisallowNull", nullValueHandling]; - // } else if (!isOptional && isNullable) { - // required = [", Required = ", requiredClass, ".AllowNull"]; - // } else { - // required = [", Required = ", requiredClass, ".Always", nullValueHandling]; - // } - - attributes.push(["[", jsonPropertyName, '("', escapedName, '")]']); - - const converter = this.converterForType(property.type); - if (converter !== undefined) { - attributes.push(["[JsonConverter(typeof(", converter, "))]"]); - } - - return attributes; - } - - protected blankLinesBetweenAttributes(): boolean { - return this._needAttributes && !this._options.dense; - } - - // The "this" type can't be `dynamic`, so we have to force it to `object`. - private topLevelResultType(t: Type): Sourcelike { - return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); - } - - private emitFromJsonForTopLevel(t: Type, name: Name): void { - if (t instanceof EnumType) return; - - let partial: string; - let typeKind: string; - const definedType = this.namedTypeToNameForTopLevel(t); - if (definedType !== undefined) { - partial = "partial "; - typeKind = definedType instanceof ClassType ? "class" : "struct"; - } else { - partial = ""; - typeKind = "class"; - } - - const csType = this.topLevelResultType(t); - this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { - // FIXME: Make FromJson a Named - this.emitExpressionMember( - ["public static ", csType, " FromJson(string json)"], - ["JsonSerializer.Deserialize<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)"] - ); - }); - } - - private emitDecoderSwitch(emitBody: () => void): void { - this.emitLine("switch (reader.TokenType)"); - this.emitBlock(emitBody); - } - - private emitTokenCase(tokenType: string): void { - this.emitLine("case JsonTokenType.", tokenType, ":"); - } - - private emitThrow(message: Sourcelike): void { - this.emitLine("throw new Exception(", message, ");"); - } - - private deserializeTypeCode(typeName: Sourcelike): Sourcelike { - switch (typeName) { - case "bool": - return ["reader.GetBoolean()"]; - case "long": - return ["reader.GetInt64()"]; - case "decimal": - return ["reader.GetDecimal()"]; - case "double": - return ["reader.GetDouble()"]; - case "string": - return ["reader.GetString()"]; - default: - return ["JsonSerializer.Deserialize<", typeName, ">(ref reader, options)"]; - } - } - - private serializeValueCode(value: Sourcelike): Sourcelike { - if (value !== "null") return ["JsonSerializer.Serialize(writer, ", value, ", options)"]; - else return ["writer.WriteNullValue()"]; - } - - private emitSerializeClass(): void { - // FIXME: Make Serialize a Named - this.emitType(undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { - // Sometimes multiple top-levels will resolve to the same type, so we have to take care - // not to emit more than one extension method for the same type. - const seenTypes = new Set(); - this.forEachTopLevel("none", t => { - // FIXME: Make ToJson a Named - if (!seenTypes.has(t)) { - seenTypes.add(t); - this.emitExpressionMember( - ["public static string ToJson(this ", this.topLevelResultType(t), " self)"], - ["JsonSerializer.Serialize(self, ", this._options.namespace, ".Converter.Settings)"] - ); - } - }); - }); - } - - private emitCanConvert(expr: Sourcelike): void { - this.emitExpressionMember("public override bool CanConvert(Type t)", expr); - } - - private emitReadJson(emitBody: () => void, csType: Sourcelike): void { - this.emitLine( - "public override ", - csType, - " Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)" - ); - this.emitBlock(emitBody); - } - - private emitWriteJson(variable: string, emitBody: () => void, csType: Sourcelike): void { - this.emitLine( - "public override void Write(Utf8JsonWriter writer, ", - csType, - " ", - variable, - ", JsonSerializerOptions options)" - ); - this.emitBlock(emitBody); - } - - private converterObject(converterName: Name): Sourcelike { - // FIXME: Get a singleton - return [converterName, ".Singleton"]; - } - - private emitConverterClass(): void { - // FIXME: Make Converter a Named - const converterName: Sourcelike = ["Converter"]; - this.emitType(undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { - // Do not use .Web as defaults. That turns on caseInsensitive property names and will fail the keywords test. - this.emitLine( - "public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)" - ); - this.emitBlock(() => { - // this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); - // this.emitLine("DateParseHandling = DateParseHandling.None,"); - this.emitLine("Converters ="); - this.emitLine("{"); - this.indent(() => { - for (const [t, converter] of this.typesWithNamedTransformations) { - if (alwaysApplyTransformation(defined(transformationForType(t)))) { - this.emitLine(this.converterObject(converter), ","); - } - } - - this.emitLine("new DateOnlyConverter(),"); - this.emitLine("new TimeOnlyConverter(),"); - this.emitLine("IsoDateTimeOffsetConverter.Singleton"); - // this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); - }); - this.emitLine("},"); - }, true); - }); - } - - private emitDecoderTransformerCase( - tokenCases: string[], - variableName: string, - xfer: Transformer | undefined, - targetType: Type, - emitFinish: (value: Sourcelike) => void - ): void { - if (xfer === undefined) return; - - for (const tokenCase of tokenCases) { - this.emitTokenCase(tokenCase); - } - - this.indent(() => { - const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); - if (!allHandled) { - this.emitLine("break;"); - } - }); - } - - private emitConsume( - value: Sourcelike, - consumer: Transformer | undefined, - targetType: Type, - emitFinish: (variableName: Sourcelike) => void - ): boolean { - if (consumer === undefined) { - emitFinish(value); - return true; - } else { - return this.emitTransformer(value, consumer, targetType, emitFinish); - } - } - - private emitDecodeTransformer( - xfer: Transformer, - targetType: Type, - emitFinish: (value: Sourcelike) => void, - variableName = "value" - ): boolean { - if (xfer instanceof DecodingTransformer) { - const source = xfer.sourceType; - const converter = this.converterForType(targetType); - if (converter !== undefined) { - const typeSource = this.csType(targetType); - this.emitLine("var converter = ", this.converterObject(converter), ";"); - this.emitLine( - "var ", - variableName, - " = (", - typeSource, - ")converter.ReadJson(reader, typeof(", - typeSource, - "), null, serializer);" - ); - } else if (source.kind !== "null") { - let output = targetType.kind === "double" ? targetType : source; - this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); - } - - return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); - } else if (xfer instanceof ArrayDecodingTransformer) { - // FIXME: Consume StartArray - if (!(targetType instanceof ArrayType)) { - return panic("Array decoding must produce an array type"); - } - - // FIXME: handle EOF - this.emitLine("reader.Read();"); - this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); - this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); - this.emitBlock(() => { - this.emitDecodeTransformer( - xfer.itemTransformer, - xfer.itemTargetType, - v => this.emitLine(variableName, ".Add(", v, ");"), - "arrayItem" - ); - // FIXME: handle EOF - this.emitLine("reader.Read();"); - }); - let result: Sourcelike = variableName; - if (!this._options.useList) { - result = [result, ".ToArray()"]; - } - - emitFinish(result); - return true; - } else if (xfer instanceof DecodingChoiceTransformer) { - this.emitDecoderSwitch(() => { - const nullTransformer = xfer.nullTransformer; - if (nullTransformer !== undefined) { - this.emitTokenCase("Null"); - this.indent(() => { - const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null"); - if (!allHandled) { - this.emitLine("break"); - } - }); - } - - this.emitDecoderTransformerCase( - ["Number"], - "integerValue", - xfer.integerTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - ["Number"], - // xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"], - "doubleValue", - xfer.doubleTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - ["True", "False"], - "boolValue", - xfer.boolTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - // ["String", "Date"], - ["String"], - "stringValue", - xfer.stringTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - ["StartObject"], - "objectValue", - xfer.objectTransformer, - targetType, - emitFinish - ); - this.emitDecoderTransformerCase( - ["StartArray"], - "arrayValue", - xfer.arrayTransformer, - targetType, - emitFinish - ); - }); - return false; - } else { - return panic("Unknown transformer"); - } - } - - private stringCaseValue(t: Type, stringCase: string): Sourcelike { - if (t.kind === "string") { - return ['"', utf16StringEscape(stringCase), '"']; - } else if (t instanceof EnumType) { - return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; - } - - return panic(`Type ${t.kind} does not have string cases`); - } - - private emitTransformer( - variable: Sourcelike, - xfer: Transformer, - targetType: Type, - emitFinish: (value: Sourcelike) => void - ): boolean { - function directTargetType(continuation: Transformer | undefined): Type { - if (continuation === undefined) { - return targetType; - } - - return followTargetType(continuation.sourceType); - } - - if (xfer instanceof ChoiceTransformer) { - const caseXfers = xfer.transformers; - if (caseXfers.length > 1 && caseXfers.every(caseXfer => caseXfer instanceof StringMatchTransformer)) { - this.emitLine("switch (", variable, ")"); - this.emitBlock(() => { - for (const caseXfer of caseXfers) { - const matchXfer = caseXfer as StringMatchTransformer; - const value = this.stringCaseValue( - followTargetType(matchXfer.sourceType), - matchXfer.stringCase - ); - this.emitLine("case ", value, ":"); - this.indent(() => { - const allDone = this.emitTransformer( - variable, - matchXfer.transformer, - targetType, - emitFinish - ); - if (!allDone) { - this.emitLine("break;"); - } - }); - } - }); - // FIXME: Can we check for exhaustiveness? For enums it should be easy. - return false; - } else { - for (const caseXfer of caseXfers) { - this.emitTransformer(variable, caseXfer, targetType, emitFinish); - } - } - } else if (xfer instanceof UnionMemberMatchTransformer) { - const memberType = xfer.memberType; - const maybeNullable = nullableFromUnion(xfer.sourceType); - let test: Sourcelike; - let member: Sourcelike; - if (maybeNullable !== null) { - if (memberType.kind === "null") { - test = [variable, " == null"]; - member = "null"; - } else { - test = [variable, " != null"]; - member = variable; - } - } else if (memberType.kind === "null") { - test = [variable, ".IsNull"]; - member = "null"; - } else { - const memberName = this.nameForUnionMember(xfer.sourceType, memberType); - member = [variable, ".", memberName]; - test = [member, " != null"]; - } - - if (memberType.kind !== "null" && isValueType(memberType)) { - member = [member, ".Value"]; - } - - this.emitLine("if (", test, ")"); - this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); - } else if (xfer instanceof StringMatchTransformer) { - const value = this.stringCaseValue(followTargetType(xfer.sourceType), xfer.stringCase); - this.emitLine("if (", variable, " == ", value, ")"); - this.emitBlock(() => this.emitTransformer(variable, xfer.transformer, targetType, emitFinish)); - } else if (xfer instanceof EncodingTransformer) { - const converter = this.converterForType(xfer.sourceType); - if (converter !== undefined) { - this.emitLine("var converter = ", this.converterObject(converter), ";"); - this.emitLine("converter.WriteJson(writer, ", variable, ", serializer);"); - } else { - this.emitLine(this.serializeValueCode(variable), ";"); - } - - emitFinish([]); - return true; - } else if (xfer instanceof ArrayEncodingTransformer) { - this.emitLine("writer.WriteStartArray();"); - const itemVariable = "arrayItem"; - this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); - this.emitBlock(() => { - this.emitTransformer(itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { - return; - }); - }); - this.emitLine("writer.WriteEndArray();"); - emitFinish([]); - return true; - } else if (xfer instanceof ParseStringTransformer) { - const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; - switch (immediateTargetType.kind) { - case "date-time": - this.emitLine("DateTimeOffset dt;"); - this.emitLine("if (DateTimeOffset.TryParse(", variable, ", out dt))"); - this.emitBlock(() => this.emitConsume("dt", xfer.consumer, targetType, emitFinish)); - break; - case "uuid": - this.emitLine("Guid guid;"); - this.emitLine("if (Guid.TryParse(", variable, ", out guid))"); - this.emitBlock(() => this.emitConsume("guid", xfer.consumer, targetType, emitFinish)); - break; - case "uri": - this.emitLine("try"); - this.emitBlock(() => { - // this.emitLine("var uri = new Uri(", variable, ");"); - // The default value about:blank should never happen, but this way we avoid a null reference warning. - this.emitLine('var uri = new Uri("about:blank");'); - this.emitLine("if (!string.IsNullOrEmpty(stringValue))"); - this.emitBlock(() => { - this.emitLine("uri = new Uri(", variable, ");"); - }); - this.emitConsume("uri", xfer.consumer, targetType, emitFinish); - }); - this.emitLine("catch (UriFormatException) {}"); - break; - case "integer": - this.emitLine("long l;"); - this.emitLine("if (Int64.TryParse(", variable, ", out l))"); - this.emitBlock(() => this.emitConsume("l", xfer.consumer, targetType, emitFinish)); - break; - case "bool": - this.emitLine("bool b;"); - this.emitLine("if (Boolean.TryParse(", variable, ", out b))"); - this.emitBlock(() => this.emitConsume("b", xfer.consumer, targetType, emitFinish)); - break; - default: - return panic(`Parsing string to ${immediateTargetType.kind} not supported`); - } - } else if (xfer instanceof StringifyTransformer) { - switch (xfer.sourceType.kind) { - case "date-time": - return this.emitConsume( - [variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)'], - xfer.consumer, - targetType, - emitFinish - ); - case "uuid": - return this.emitConsume( - [variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)'], - xfer.consumer, - targetType, - emitFinish - ); - case "integer": - case "uri": - return this.emitConsume([variable, ".ToString()"], xfer.consumer, targetType, emitFinish); - case "bool": - this.emitLine("var boolString = ", variable, ' ? "true" : "false";'); - return this.emitConsume("boolString", xfer.consumer, targetType, emitFinish); - default: - return panic(`Stringifying ${xfer.sourceType.kind} not supported`); - } - } else if (xfer instanceof StringProducerTransformer) { - const value = this.stringCaseValue(directTargetType(xfer.consumer), xfer.result); - return this.emitConsume(value, xfer.consumer, targetType, emitFinish); - } else if (xfer instanceof MinMaxLengthCheckTransformer) { - const min = xfer.minLength; - const max = xfer.maxLength; - const conditions: Sourcelike[] = []; - - if (min !== undefined) { - conditions.push([variable, ".Length >= ", min.toString()]); - } - - if (max !== undefined) { - conditions.push([variable, ".Length <= ", max.toString()]); - } - - this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); - return false; - } else if (xfer instanceof MinMaxValueTransformer) { - const min = xfer.minimum; - const max = xfer.maximum; - const conditions: Sourcelike[] = []; - - if (min !== undefined) { - conditions.push([variable, " >= ", min.toString()]); - } - - if (max !== undefined) { - conditions.push([variable, " <= ", max.toString()]); - } - - this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); - return false; - } else if (xfer instanceof UnionInstantiationTransformer) { - if (!(targetType instanceof UnionType)) { - return panic("Union instantiation transformer must produce a union type"); - } - - const maybeNullable = nullableFromUnion(targetType); - if (maybeNullable !== null) { - emitFinish(variable); - } else { - const unionName = this.nameForNamedType(targetType); - let initializer: Sourcelike; - if (xfer.sourceType.kind === "null") { - initializer = " "; - } else { - const memberName = this.nameForUnionMember(targetType, xfer.sourceType); - initializer = [" ", memberName, " = ", variable, " "]; - } - - emitFinish(["new ", unionName, " {", initializer, "}"]); - } - - return true; - } else { - return panic("Unknown transformer"); - } - - return false; - } - - private emitTransformation(converterName: Name, t: Type): void { - const xf = defined(transformationForType(t)); - const reverse = xf.reverse; - const targetType = xf.targetType; - const xfer = xf.transformer; - const csType = this.csType(targetType); - // const haveNullable = isValueType(targetType); - - // if (haveNullable) { - // converterName = ['Nullable', converterName]; - // csType = [csType, "?"]; - // } - this.emitType( - undefined, - AccessModifier.Internal, - "class", - converterName, - ["JsonConverter<", csType, ">"], - () => { - let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; - this.emitCanConvert(canConvertExpr); - this.ensureBlankLine(); - this.emitReadJson(() => { - // FIXME: It's unsatisfying that we need this. The reason is that we not - // only match T, but also T?. If we didn't, then the T in T? would not be - // deserialized with our converter but with the default one. Can we check - // whether the type is a nullable? - // FIXME: This could duplicate one of the cases handled below in - // `emitDecodeTransformer`. - // if (haveNullable && !(targetType instanceof UnionType)) { - // this.emitLine("if (reader.TokenType == JsonTokenType.Null) return null;"); - // } - - const allHandled = this.emitDecodeTransformer(xfer, targetType, v => - this.emitLine("return ", v, ";") - ); - if (!allHandled) { - this.emitThrow(['"Cannot unmarshal type ', csType, '"']); - } - }, csType); - this.ensureBlankLine(); - this.emitWriteJson( - "value", - () => { - // FIXME: See above. - // if (haveNullable && !(targetType instanceof UnionType)) { - // this.emitLine("if (value == null)"); - // this.emitBlock(() => { - // this.emitLine("writer.WriteNullValue();"); - // this.emitLine("return;"); - // }); - // } - - const allHandled = this.emitTransformer("value", reverse.transformer, reverse.targetType, () => - this.emitLine("return;") - ); - if (!allHandled) { - this.emitThrow(['"Cannot marshal type ', csType, '"']); - } - }, - csType - ); - this.ensureBlankLine(); - this.emitLine("public static readonly ", converterName, " Singleton = new ", converterName, "();"); - } - ); - } - - protected emitRequiredHelpers(): void { - if (this._needHelpers) { - this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n)); - this.ensureBlankLine(); - this.emitSerializeClass(); - } - - if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { - this.ensureBlankLine(); - this.emitConverterClass(); - this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t)); - this.emitMultiline(` -public class DateOnlyConverter : JsonConverter -{ - private readonly string serializationFormat; - public DateOnlyConverter() : this(null) { } - - public DateOnlyConverter(string? serializationFormat) - { - this.serializationFormat = serializationFormat ?? "yyyy-MM-dd"; - } - - public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - var value = reader.GetString(); - return DateOnly.Parse(value!); - } - - public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options) - => writer.WriteStringValue(value.ToString(serializationFormat)); -} - -public class TimeOnlyConverter : JsonConverter -{ - private readonly string serializationFormat; - - public TimeOnlyConverter() : this(null) { } - - public TimeOnlyConverter(string? serializationFormat) - { - this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff"; - } - - public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - var value = reader.GetString(); - return TimeOnly.Parse(value!); - } - - public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options) - => writer.WriteStringValue(value.ToString(serializationFormat)); -} - -internal class IsoDateTimeOffsetConverter : JsonConverter -{ - public override bool CanConvert(Type t) => t == typeof(DateTimeOffset); - - private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK"; - - private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind; - private string? _dateTimeFormat; - private CultureInfo? _culture; - - public DateTimeStyles DateTimeStyles - { - get => _dateTimeStyles; - set => _dateTimeStyles = value; - } - - public string? DateTimeFormat - { - get => _dateTimeFormat ?? string.Empty; - set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value; - } - - public CultureInfo Culture - { - get => _culture ?? CultureInfo.CurrentCulture; - set => _culture = value; - } - - public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options) - { - string text; - - - if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal - || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal) - { - value = value.ToUniversalTime(); - } - - text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture); - - writer.WriteStringValue(text); - } - - public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - string? dateText = reader.GetString(); - - if (string.IsNullOrEmpty(dateText) == false) - { - if (!string.IsNullOrEmpty(_dateTimeFormat)) - { - return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles); - } - else - { - return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles); - } - } - else - { - return default(DateTimeOffset); - } - } - - - public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter(); -}`); - } - } - - protected needNamespace(): boolean { - return this._needNamespaces; - } -} diff --git a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts new file mode 100644 index 000000000..09cfcc3ca --- /dev/null +++ b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts @@ -0,0 +1,390 @@ +import { arrayIntercalate } from "collection-utils"; + +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { assert } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { followTargetType } from "../../Transformers"; +import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { type cSharpOptions } from "./language"; +import { + AccessModifier, + csTypeForTransformedStringType, + isValueType, + namingFunction, + namingFunctionKeep, + noFollow +} from "./utils"; + +export class CSharpRenderer extends ConvenienceRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + private readonly _csOptions: OptionValues + ) { + super(targetLanguage, renderContext); + } + + protected forbiddenNamesForGlobalNamespace(): string[] { + return ["QuickType", "Type", "System", "Console", "Exception", "DateTimeOffset", "Guid", "Uri"]; + } + + protected forbiddenForObjectProperties(_: ClassType, classNamed: Name): ForbiddenWordsInfo { + return { + names: [ + classNamed, + "ToString", + "GetHashCode", + "Finalize", + "Equals", + "GetType", + "MemberwiseClone", + "ReferenceEquals" + ], + includeGlobalForbidden: false + }; + } + + protected forbiddenForUnionMembers(_: UnionType, unionNamed: Name): ForbiddenWordsInfo { + return { names: [unionNamed], includeGlobalForbidden: true }; + } + + protected makeNamedTypeNamer(): Namer { + return namingFunction; + } + + protected namerForObjectProperty(): Namer { + return this._csOptions.keepPropertyName ? namingFunctionKeep : namingFunction; + } + + protected makeUnionMemberNamer(): Namer { + return namingFunction; + } + + protected makeEnumCaseNamer(): Namer { + return namingFunction; + } + + protected unionNeedsName(u: UnionType): boolean { + return nullableFromUnion(u) === null; + } + + protected namedTypeToNameForTopLevel(type: Type): Type | undefined { + // If the top-level type doesn't contain any classes or unions + // we have to define a class just for the `FromJson` method, in + // emitFromJsonForTopLevel. + return directlyReachableSingleNamedType(type); + } + + protected emitBlock(f: () => void, semicolon = false): void { + this.emitLine("{"); + this.indent(f); + this.emitLine("}", semicolon ? ";" : ""); + } + + protected get doubleType(): string { + return this._csOptions.useDecimal ? "decimal" : "double"; + } + + protected csType(t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false): Sourcelike { + const actualType = follow(t); + return matchType( + actualType, + _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, this._csOptions.typeForAny), + _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, this._csOptions.typeForAny), + _boolType => "bool", + _integerType => "long", + _doubleType => this.doubleType, + _stringType => "string", + arrayType => { + const itemsType = this.csType(arrayType.items, follow, withIssues); + if (this._csOptions.useList) { + return ["List<", itemsType, ">"]; + } else { + return [itemsType, "[]"]; + } + }, + classType => this.nameForNamedType(classType), + mapType => ["Dictionary"], + enumType => this.nameForNamedType(enumType), + unionType => { + const nullable = nullableFromUnion(unionType); + if (nullable !== null) return this.nullableCSType(nullable, noFollow); + return this.nameForNamedType(unionType); + }, + transformedStringType => csTypeForTransformedStringType(transformedStringType) + ); + } + + protected nullableCSType(t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false): Sourcelike { + t = followTargetType(t); + const csType = this.csType(t, follow, withIssues); + if (isValueType(t)) { + return [csType, "?"]; + } else { + return csType; + } + } + + protected baseclassForType(_t: Type): Sourcelike | undefined { + return undefined; + } + + protected emitType( + description: string[] | undefined, + accessModifier: AccessModifier, + declaration: Sourcelike, + name: Sourcelike, + baseclass: Sourcelike | undefined, + emitter: () => void + ): void { + switch (accessModifier) { + case AccessModifier.Public: + declaration = ["public ", declaration]; + break; + case AccessModifier.Internal: + declaration = ["internal ", declaration]; + break; + default: + break; + } + + this.emitDescription(description); + if (baseclass === undefined) { + this.emitLine(declaration, " ", name); + } else { + this.emitLine(declaration, " ", name, " : ", baseclass); + } + + this.emitBlock(emitter); + } + + protected attributesForProperty( + _property: ClassProperty, + _name: Name, + _c: ClassType, + _jsonName: string + ): Sourcelike[] | undefined { + return undefined; + } + + protected propertyDefinition(property: ClassProperty, name: Name, _c: ClassType, _jsonName: string): Sourcelike { + const t = property.type; + const csType = property.isOptional + ? this.nullableCSType(t, followTargetType, true) + : this.csType(t, followTargetType, true); + + const propertyArray = ["public "]; + + if (this._csOptions.virtual) propertyArray.push("virtual "); + + return [...propertyArray, csType, " ", name, " { get; set; }"]; + } + + protected emitDescriptionBlock(lines: Sourcelike[]): void { + const start = "/// "; + if (this._csOptions.dense) { + this.emitLine(start, lines.join("; "), ""); + } else { + this.emitCommentLines(lines, { lineStart: "/// ", beforeComment: start, afterComment: "/// " }); + } + } + + protected blankLinesBetweenAttributes(): boolean { + return false; + } + + private emitClassDefinition(c: ClassType, className: Name): void { + this.emitType( + this.descriptionForType(c), + AccessModifier.Public, + "partial class", + className, + this.baseclassForType(c), + () => { + if (c.getProperties().size === 0) return; + const blankLines = this.blankLinesBetweenAttributes() ? "interposing" : "none"; + let columns: Sourcelike[][] = []; + let isFirstProperty = true; + let previousDescription: string[] | undefined = undefined; + this.forEachClassProperty(c, blankLines, (name, jsonName, p) => { + const attributes = this.attributesForProperty(p, name, c, jsonName); + const description = this.descriptionForClassProperty(c, jsonName); + const property = this.propertyDefinition(p, name, c, jsonName); + if (attributes === undefined) { + if ( + // Descriptions should be preceded by an empty line + (!isFirstProperty && description !== undefined) || + // If the previous property has a description, leave an empty line + previousDescription !== undefined + ) { + this.ensureBlankLine(); + } + + this.emitDescription(description); + this.emitLine(property); + } else if (this._csOptions.dense && attributes.length > 0) { + const comment = description === undefined ? "" : ` // ${description.join("; ")}`; + columns.push([attributes, " ", property, comment]); + } else { + this.emitDescription(description); + for (const attribute of attributes) { + this.emitLine(attribute); + } + + this.emitLine(property); + } + + isFirstProperty = false; + previousDescription = description; + }); + if (columns.length > 0) { + this.emitTable(columns); + } + } + ); + } + + private emitUnionDefinition(u: UnionType, unionName: Name): void { + const nonNulls = removeNullFromUnion(u, true)[1]; + this.emitType( + this.descriptionForType(u), + AccessModifier.Public, + "partial struct", + unionName, + this.baseclassForType(u), + () => { + this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { + const csType = this.nullableCSType(t); + this.emitLine("public ", csType, " ", fieldName, ";"); + }); + this.ensureBlankLine(); + const nullTests: Sourcelike[] = Array.from(nonNulls).map(t => [ + this.nameForUnionMember(u, t), + " == null" + ]); + this.ensureBlankLine(); + this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { + const csType = this.csType(t); + this.emitExpressionMember( + ["public static implicit operator ", unionName, "(", csType, " ", fieldName, ")"], + ["new ", unionName, " { ", fieldName, " = ", fieldName, " }"] + ); + }); + if (u.findMember("null") === undefined) return; + this.emitExpressionMember("public bool IsNull", arrayIntercalate(" && ", nullTests), true); + } + ); + } + + private emitEnumDefinition(e: EnumType, enumName: Name): void { + const caseNames: Sourcelike[] = []; + this.forEachEnumCase(e, "none", name => { + if (caseNames.length > 0) caseNames.push(", "); + caseNames.push(name); + }); + this.emitDescription(this.descriptionForType(e)); + this.emitLine("public enum ", enumName, " { ", caseNames, " };"); + } + + protected emitExpressionMember(declare: Sourcelike, define: Sourcelike, isProperty = false): void { + if (this._csOptions.version === 5) { + this.emitLine(declare); + this.emitBlock(() => { + const stmt = ["return ", define, ";"]; + if (isProperty) { + this.emitLine("get"); + this.emitBlock(() => this.emitLine(stmt)); + } else { + this.emitLine(stmt); + } + }); + } else { + this.emitLine(declare, " => ", define, ";"); + } + } + + protected emitTypeSwitch( + types: Iterable, + condition: (t: T) => Sourcelike, + withBlock: boolean, + withReturn: boolean, + f: (t: T) => void + ): void { + assert(!withReturn || withBlock, "Can only have return with block"); + for (const t of types) { + this.emitLine("if (", condition(t), ")"); + if (withBlock) { + this.emitBlock(() => { + f(t); + if (withReturn) { + this.emitLine("return;"); + } + }); + } else { + this.indent(() => f(t)); + } + } + } + + protected emitUsing(ns: Sourcelike): void { + this.emitLine("using ", ns, ";"); + } + + protected emitUsings(): void { + for (const ns of ["System", "System.Collections.Generic"]) { + this.emitUsing(ns); + } + } + + protected emitRequiredHelpers(): void { + return; + } + + private emitTypesAndSupport(): void { + this.forEachObject("leading-and-interposing", (c: ClassType, name: Name) => this.emitClassDefinition(c, name)); + this.forEachEnum("leading-and-interposing", (e, name) => this.emitEnumDefinition(e, name)); + this.forEachUnion("leading-and-interposing", (u, name) => this.emitUnionDefinition(u, name)); + this.emitRequiredHelpers(); + } + + protected emitDefaultLeadingComments(): void { + return; + } + + protected emitDefaultFollowingComments(): void { + return; + } + + protected needNamespace(): boolean { + return true; + } + + protected emitSourceStructure(): void { + if (this.leadingComments !== undefined) { + this.emitComments(this.leadingComments); + } else { + this.emitDefaultLeadingComments(); + } + + this.ensureBlankLine(); + if (this.needNamespace()) { + this.emitLine("namespace ", this._csOptions.namespace); + this.emitBlock(() => { + this.emitUsings(); + this.emitTypesAndSupport(); + }); + } else { + this.emitUsings(); + this.emitTypesAndSupport(); + } + + this.emitDefaultFollowingComments(); + } +} diff --git a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts new file mode 100644 index 000000000..4d6b09da6 --- /dev/null +++ b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts @@ -0,0 +1,803 @@ +import { arrayIntercalate } from "collection-utils"; + +import { type ForbiddenWordsInfo, inferredNameOrder } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, SimpleName } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { camelCase, utf16StringEscape } from "../../support/Strings"; +import { defined, panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { + ArrayDecodingTransformer, + ArrayEncodingTransformer, + ChoiceTransformer, + DecodingChoiceTransformer, + DecodingTransformer, + EncodingTransformer, + MinMaxLengthCheckTransformer, + MinMaxValueTransformer, + ParseStringTransformer, + StringMatchTransformer, + StringProducerTransformer, + StringifyTransformer, + type Transformation, + type Transformer, + UnionInstantiationTransformer, + UnionMemberMatchTransformer, + followTargetType, + transformationForType +} from "../../Transformers"; +import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; +import { nullableFromUnion } from "../../TypeUtils"; + +import { CSharpRenderer } from "./CSharpRenderer"; +import { type newtonsoftCSharpOptions } from "./language"; +import { + AccessModifier, + alwaysApplyTransformation, + denseJsonPropertyName, + denseNullValueHandlingEnumName, + denseRequiredEnumName, + isValueType, + namingFunction +} from "./utils"; + +export class NewtonsoftCSharpRenderer extends CSharpRenderer { + private readonly _enumExtensionsNames = new Map(); + + private readonly _needHelpers: boolean; + + private readonly _needAttributes: boolean; + + private readonly _needNamespaces: boolean; + + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + private readonly _options: OptionValues + ) { + super(targetLanguage, renderContext, _options); + this._needHelpers = _options.features.helpers; + this._needAttributes = _options.features.attributes; + this._needNamespaces = _options.features.namespaces; + } + + protected forbiddenNamesForGlobalNamespace(): string[] { + const forbidden = [ + "Converter", + "JsonConverter", + "JsonSerializer", + "JsonWriter", + "JsonToken", + "Serialize", + "Newtonsoft", + "MetadataPropertyHandling", + "DateParseHandling", + "FromJson", + "Required" + ]; + if (this._options.dense) { + forbidden.push("J", "R", "N"); + } + + if (this._options.baseclass !== undefined) { + forbidden.push(this._options.baseclass); + } + + return super.forbiddenNamesForGlobalNamespace().concat(forbidden); + } + + protected forbiddenForObjectProperties(c: ClassType, className: Name): ForbiddenWordsInfo { + const result = super.forbiddenForObjectProperties(c, className); + result.names = result.names.concat(["ToJson", "FromJson", "Required"]); + return result; + } + + protected makeNameForTransformation(xf: Transformation, typeName: Name | undefined): Name { + if (typeName === undefined) { + let xfer = xf.transformer; + if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { + xfer = xfer.consumer; + } + + return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); + } + + return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); + } + + protected makeNamedTypeDependencyNames(t: Type, name: Name): DependencyName[] { + if (!(t instanceof EnumType)) return []; + + const extensionsName = new DependencyName( + namingFunction, + name.order + 30, + lookup => `${lookup(name)}_extensions` + ); + this._enumExtensionsNames.set(name, extensionsName); + return [extensionsName]; + } + + protected emitUsings(): void { + // FIXME: We need System.Collections.Generic whenever we have maps or use List. + if (!this._needAttributes && !this._needHelpers) return; + + super.emitUsings(); + this.ensureBlankLine(); + + for (const ns of ["System.Globalization", "Newtonsoft.Json", "Newtonsoft.Json.Converters"]) { + this.emitUsing(ns); + } + + if (this._options.dense) { + this.emitUsing([denseJsonPropertyName, " = Newtonsoft.Json.JsonPropertyAttribute"]); + this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); + this.emitUsing([denseNullValueHandlingEnumName, " = Newtonsoft.Json.NullValueHandling"]); + } + + if (this._options.baseclass === "EntityData") { + this.emitUsing("Microsoft.Azure.Mobile.Server"); + } + } + + protected baseclassForType(_t: Type): Sourcelike | undefined { + return this._options.baseclass; + } + + protected emitDefaultLeadingComments(): void { + if (!this._needHelpers) return; + + this.emitLine("// "); + this.emitLine("//"); + this.emitLine( + "// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do", + this.topLevels.size === 1 ? "" : " one of these", + ":" + ); + this.emitLine("//"); + this.emitLine("// using ", this._options.namespace, ";"); + this.emitLine("//"); + this.forEachTopLevel("none", (t, topLevelName) => { + let rhs: Sourcelike; + if (t instanceof EnumType) { + rhs = ["JsonConvert.DeserializeObject<", topLevelName, ">(jsonString)"]; + } else { + rhs = [topLevelName, ".FromJson(jsonString)"]; + } + + this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); + }); + } + + private converterForType(t: Type): Name | undefined { + let xf = transformationForType(t); + + if (xf === undefined && t instanceof UnionType) { + const maybeNullable = nullableFromUnion(t); + if (maybeNullable !== null) { + t = maybeNullable; + xf = transformationForType(t); + } + } + + if (xf === undefined) return undefined; + + if (alwaysApplyTransformation(xf)) return undefined; + + return defined(this.nameForTransformation(t)); + } + + protected attributesForProperty( + property: ClassProperty, + _name: Name, + _c: ClassType, + jsonName: string + ): Sourcelike[] | undefined { + if (!this._needAttributes) return undefined; + + const attributes: Sourcelike[] = []; + + const jsonProperty = this._options.dense ? denseJsonPropertyName : "JsonProperty"; + const escapedName = utf16StringEscape(jsonName); + const isNullable = followTargetType(property.type).isNullable; + const isOptional = property.isOptional; + const requiredClass = this._options.dense ? "R" : "Required"; + const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; + const nullValueHandling = + isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : []; + let required: Sourcelike; + if (!this._options.checkRequired || (isOptional && isNullable)) { + required = [nullValueHandling]; + } else if (isOptional && !isNullable) { + required = [", Required = ", requiredClass, ".DisallowNull", nullValueHandling]; + } else if (!isOptional && isNullable) { + required = [", Required = ", requiredClass, ".AllowNull"]; + } else { + required = [", Required = ", requiredClass, ".Always", nullValueHandling]; + } + + attributes.push(["[", jsonProperty, '("', escapedName, '"', required, ")]"]); + + const converter = this.converterForType(property.type); + if (converter !== undefined) { + attributes.push(["[JsonConverter(typeof(", converter, "))]"]); + } + + return attributes; + } + + protected blankLinesBetweenAttributes(): boolean { + return this._needAttributes && !this._options.dense; + } + + // The "this" type can't be `dynamic`, so we have to force it to `object`. + private topLevelResultType(t: Type): Sourcelike { + return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); + } + + private emitFromJsonForTopLevel(t: Type, name: Name): void { + if (t instanceof EnumType) return; + + let partial: string; + let typeKind: string; + const definedType = this.namedTypeToNameForTopLevel(t); + if (definedType !== undefined) { + partial = "partial "; + typeKind = definedType instanceof ClassType ? "class" : "struct"; + } else { + partial = ""; + typeKind = "class"; + } + + const csType = this.topLevelResultType(t); + this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { + // FIXME: Make FromJson a Named + this.emitExpressionMember( + ["public static ", csType, " FromJson(string json)"], + ["JsonConvert.DeserializeObject<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)"] + ); + }); + } + + private emitDecoderSwitch(emitBody: () => void): void { + this.emitLine("switch (reader.TokenType)"); + this.emitBlock(emitBody); + } + + private emitTokenCase(tokenType: string): void { + this.emitLine("case JsonToken.", tokenType, ":"); + } + + private emitThrow(message: Sourcelike): void { + this.emitLine("throw new Exception(", message, ");"); + } + + private deserializeTypeCode(typeName: Sourcelike): Sourcelike { + return ["serializer.Deserialize<", typeName, ">(reader)"]; + } + + private serializeValueCode(value: Sourcelike): Sourcelike { + return ["serializer.Serialize(writer, ", value, ")"]; + } + + private emitSerializeClass(): void { + // FIXME: Make Serialize a Named + this.emitType(undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { + // Sometimes multiple top-levels will resolve to the same type, so we have to take care + // not to emit more than one extension method for the same type. + const seenTypes = new Set(); + this.forEachTopLevel("none", t => { + // FIXME: Make ToJson a Named + if (!seenTypes.has(t)) { + seenTypes.add(t); + this.emitExpressionMember( + ["public static string ToJson(this ", this.topLevelResultType(t), " self)"], + ["JsonConvert.SerializeObject(self, ", this._options.namespace, ".Converter.Settings)"] + ); + } + }); + }); + } + + private emitCanConvert(expr: Sourcelike): void { + this.emitExpressionMember("public override bool CanConvert(Type t)", expr); + } + + private emitReadJson(emitBody: () => void): void { + this.emitLine( + "public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)" + ); + this.emitBlock(emitBody); + } + + private emitWriteJson(variable: string, emitBody: () => void): void { + this.emitLine( + "public override void WriteJson(JsonWriter writer, object ", + variable, + ", JsonSerializer serializer)" + ); + this.emitBlock(emitBody); + } + + private converterObject(converterName: Name): Sourcelike { + // FIXME: Get a singleton + return [converterName, ".Singleton"]; + } + + private emitConverterClass(): void { + // FIXME: Make Converter a Named + const converterName: Sourcelike = ["Converter"]; + this.emitType(undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { + this.emitLine("public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings"); + this.emitBlock(() => { + this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); + this.emitLine("DateParseHandling = DateParseHandling.None,"); + this.emitLine("Converters ="); + this.emitLine("{"); + this.indent(() => { + for (const [t, converter] of this.typesWithNamedTransformations) { + if (alwaysApplyTransformation(defined(transformationForType(t)))) { + this.emitLine(this.converterObject(converter), ","); + } + } + + this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); + }); + this.emitLine("},"); + }, true); + }); + } + + private emitDecoderTransformerCase( + tokenCases: string[], + variableName: string, + xfer: Transformer | undefined, + targetType: Type, + emitFinish: (value: Sourcelike) => void + ): void { + if (xfer === undefined) return; + + for (const tokenCase of tokenCases) { + this.emitTokenCase(tokenCase); + } + + this.indent(() => { + const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); + if (!allHandled) { + this.emitLine("break;"); + } + }); + } + + private emitConsume( + value: Sourcelike, + consumer: Transformer | undefined, + targetType: Type, + emitFinish: (variableName: Sourcelike) => void + ): boolean { + if (consumer === undefined) { + emitFinish(value); + return true; + } else { + return this.emitTransformer(value, consumer, targetType, emitFinish); + } + } + + private emitDecodeTransformer( + xfer: Transformer, + targetType: Type, + emitFinish: (value: Sourcelike) => void, + variableName = "value" + ): boolean { + if (xfer instanceof DecodingTransformer) { + const source = xfer.sourceType; + const converter = this.converterForType(targetType); + if (converter !== undefined) { + const typeSource = this.csType(targetType); + this.emitLine("var converter = ", this.converterObject(converter), ";"); + this.emitLine( + "var ", + variableName, + " = (", + typeSource, + ")converter.ReadJson(reader, typeof(", + typeSource, + "), null, serializer);" + ); + } else if (source.kind !== "null") { + let output = targetType.kind === "double" ? targetType : source; + this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); + } + + return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); + } else if (xfer instanceof ArrayDecodingTransformer) { + // FIXME: Consume StartArray + if (!(targetType instanceof ArrayType)) { + return panic("Array decoding must produce an array type"); + } + + // FIXME: handle EOF + this.emitLine("reader.Read();"); + this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); + this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); + this.emitBlock(() => { + this.emitDecodeTransformer( + xfer.itemTransformer, + xfer.itemTargetType, + v => this.emitLine(variableName, ".Add(", v, ");"), + "arrayItem" + ); + // FIXME: handle EOF + this.emitLine("reader.Read();"); + }); + let result: Sourcelike = variableName; + if (!this._options.useList) { + result = [result, ".ToArray()"]; + } + + emitFinish(result); + return true; + } else if (xfer instanceof DecodingChoiceTransformer) { + this.emitDecoderSwitch(() => { + const nullTransformer = xfer.nullTransformer; + if (nullTransformer !== undefined) { + this.emitTokenCase("Null"); + this.indent(() => { + const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null"); + if (!allHandled) { + this.emitLine("break"); + } + }); + } + + this.emitDecoderTransformerCase( + ["Integer"], + "integerValue", + xfer.integerTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"], + "doubleValue", + xfer.doubleTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase(["Boolean"], "boolValue", xfer.boolTransformer, targetType, emitFinish); + this.emitDecoderTransformerCase( + ["String", "Date"], + "stringValue", + xfer.stringTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + ["StartObject"], + "objectValue", + xfer.objectTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + ["StartArray"], + "arrayValue", + xfer.arrayTransformer, + targetType, + emitFinish + ); + }); + return false; + } else { + return panic("Unknown transformer"); + } + } + + private stringCaseValue(t: Type, stringCase: string): Sourcelike { + if (t.kind === "string") { + return ['"', utf16StringEscape(stringCase), '"']; + } else if (t instanceof EnumType) { + return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; + } + + return panic(`Type ${t.kind} does not have string cases`); + } + + private emitTransformer( + variable: Sourcelike, + xfer: Transformer, + targetType: Type, + emitFinish: (value: Sourcelike) => void + ): boolean { + function directTargetType(continuation: Transformer | undefined): Type { + if (continuation === undefined) { + return targetType; + } + + return followTargetType(continuation.sourceType); + } + + if (xfer instanceof ChoiceTransformer) { + const caseXfers = xfer.transformers; + if (caseXfers.length > 1 && caseXfers.every(caseXfer => caseXfer instanceof StringMatchTransformer)) { + this.emitLine("switch (", variable, ")"); + this.emitBlock(() => { + for (const caseXfer of caseXfers) { + const matchXfer = caseXfer as StringMatchTransformer; + const value = this.stringCaseValue( + followTargetType(matchXfer.sourceType), + matchXfer.stringCase + ); + this.emitLine("case ", value, ":"); + this.indent(() => { + const allDone = this.emitTransformer( + variable, + matchXfer.transformer, + targetType, + emitFinish + ); + if (!allDone) { + this.emitLine("break;"); + } + }); + } + }); + // FIXME: Can we check for exhaustiveness? For enums it should be easy. + return false; + } else { + for (const caseXfer of caseXfers) { + this.emitTransformer(variable, caseXfer, targetType, emitFinish); + } + } + } else if (xfer instanceof UnionMemberMatchTransformer) { + const memberType = xfer.memberType; + const maybeNullable = nullableFromUnion(xfer.sourceType); + let test: Sourcelike; + let member: Sourcelike; + if (maybeNullable !== null) { + if (memberType.kind === "null") { + test = [variable, " == null"]; + member = "null"; + } else { + test = [variable, " != null"]; + member = variable; + } + } else if (memberType.kind === "null") { + test = [variable, ".IsNull"]; + member = "null"; + } else { + const memberName = this.nameForUnionMember(xfer.sourceType, memberType); + member = [variable, ".", memberName]; + test = [member, " != null"]; + } + + if (memberType.kind !== "null" && isValueType(memberType)) { + member = [member, ".Value"]; + } + + this.emitLine("if (", test, ")"); + this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); + } else if (xfer instanceof StringMatchTransformer) { + const value = this.stringCaseValue(followTargetType(xfer.sourceType), xfer.stringCase); + this.emitLine("if (", variable, " == ", value, ")"); + this.emitBlock(() => this.emitTransformer(variable, xfer.transformer, targetType, emitFinish)); + } else if (xfer instanceof EncodingTransformer) { + const converter = this.converterForType(xfer.sourceType); + if (converter !== undefined) { + this.emitLine("var converter = ", this.converterObject(converter), ";"); + this.emitLine("converter.WriteJson(writer, ", variable, ", serializer);"); + } else { + this.emitLine(this.serializeValueCode(variable), ";"); + } + + emitFinish([]); + return true; + } else if (xfer instanceof ArrayEncodingTransformer) { + this.emitLine("writer.WriteStartArray();"); + const itemVariable = "arrayItem"; + this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); + this.emitBlock(() => { + this.emitTransformer(itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { + return; + }); + }); + this.emitLine("writer.WriteEndArray();"); + emitFinish([]); + return true; + } else if (xfer instanceof ParseStringTransformer) { + const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; + switch (immediateTargetType.kind) { + case "date-time": + this.emitLine("DateTimeOffset dt;"); + this.emitLine("if (DateTimeOffset.TryParse(", variable, ", out dt))"); + this.emitBlock(() => this.emitConsume("dt", xfer.consumer, targetType, emitFinish)); + break; + case "uuid": + this.emitLine("Guid guid;"); + this.emitLine("if (Guid.TryParse(", variable, ", out guid))"); + this.emitBlock(() => this.emitConsume("guid", xfer.consumer, targetType, emitFinish)); + break; + case "uri": + this.emitLine("try"); + this.emitBlock(() => { + this.emitLine("var uri = new Uri(", variable, ");"); + this.emitConsume("uri", xfer.consumer, targetType, emitFinish); + }); + this.emitLine("catch (UriFormatException) {}"); + break; + case "integer": + this.emitLine("long l;"); + this.emitLine("if (Int64.TryParse(", variable, ", out l))"); + this.emitBlock(() => this.emitConsume("l", xfer.consumer, targetType, emitFinish)); + break; + case "bool": + this.emitLine("bool b;"); + this.emitLine("if (Boolean.TryParse(", variable, ", out b))"); + this.emitBlock(() => this.emitConsume("b", xfer.consumer, targetType, emitFinish)); + break; + default: + return panic(`Parsing string to ${immediateTargetType.kind} not supported`); + } + } else if (xfer instanceof StringifyTransformer) { + switch (xfer.sourceType.kind) { + case "date-time": + return this.emitConsume( + [variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)'], + xfer.consumer, + targetType, + emitFinish + ); + case "uuid": + return this.emitConsume( + [variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)'], + xfer.consumer, + targetType, + emitFinish + ); + case "integer": + case "uri": + return this.emitConsume([variable, ".ToString()"], xfer.consumer, targetType, emitFinish); + case "bool": + this.emitLine("var boolString = ", variable, ' ? "true" : "false";'); + return this.emitConsume("boolString", xfer.consumer, targetType, emitFinish); + default: + return panic(`Stringifying ${xfer.sourceType.kind} not supported`); + } + } else if (xfer instanceof StringProducerTransformer) { + const value = this.stringCaseValue(directTargetType(xfer.consumer), xfer.result); + return this.emitConsume(value, xfer.consumer, targetType, emitFinish); + } else if (xfer instanceof MinMaxLengthCheckTransformer) { + const min = xfer.minLength; + const max = xfer.maxLength; + const conditions: Sourcelike[] = []; + + if (min !== undefined) { + conditions.push([variable, ".Length >= ", min.toString()]); + } + + if (max !== undefined) { + conditions.push([variable, ".Length <= ", max.toString()]); + } + + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); + this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + return false; + } else if (xfer instanceof MinMaxValueTransformer) { + const min = xfer.minimum; + const max = xfer.maximum; + const conditions: Sourcelike[] = []; + + if (min !== undefined) { + conditions.push([variable, " >= ", min.toString()]); + } + + if (max !== undefined) { + conditions.push([variable, " <= ", max.toString()]); + } + + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); + this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + return false; + } else if (xfer instanceof UnionInstantiationTransformer) { + if (!(targetType instanceof UnionType)) { + return panic("Union instantiation transformer must produce a union type"); + } + + const maybeNullable = nullableFromUnion(targetType); + if (maybeNullable !== null) { + emitFinish(variable); + } else { + const unionName = this.nameForNamedType(targetType); + let initializer: Sourcelike; + if (xfer.sourceType.kind === "null") { + initializer = " "; + } else { + const memberName = this.nameForUnionMember(targetType, xfer.sourceType); + initializer = [" ", memberName, " = ", variable, " "]; + } + + emitFinish(["new ", unionName, " {", initializer, "}"]); + } + + return true; + } else { + return panic("Unknown transformer"); + } + + return false; + } + + private emitTransformation(converterName: Name, t: Type): void { + const xf = defined(transformationForType(t)); + const reverse = xf.reverse; + const targetType = xf.targetType; + const xfer = xf.transformer; + this.emitType(undefined, AccessModifier.Internal, "class", converterName, "JsonConverter", () => { + const csType = this.csType(targetType); + let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; + const haveNullable = isValueType(targetType); + if (haveNullable) { + canConvertExpr = [canConvertExpr, " || t == typeof(", csType, "?)"]; + } + + this.emitCanConvert(canConvertExpr); + this.ensureBlankLine(); + this.emitReadJson(() => { + // FIXME: It's unsatisfying that we need this. The reason is that we not + // only match T, but also T?. If we didn't, then the T in T? would not be + // deserialized with our converter but with the default one. Can we check + // whether the type is a nullable? + // FIXME: This could duplicate one of the cases handled below in + // `emitDecodeTransformer`. + if (haveNullable && !(targetType instanceof UnionType)) { + this.emitLine("if (reader.TokenType == JsonToken.Null) return null;"); + } + + const allHandled = this.emitDecodeTransformer(xfer, targetType, v => this.emitLine("return ", v, ";")); + if (!allHandled) { + this.emitThrow(['"Cannot unmarshal type ', csType, '"']); + } + }); + this.ensureBlankLine(); + this.emitWriteJson("untypedValue", () => { + // FIXME: See above. + if (haveNullable && !(targetType instanceof UnionType)) { + this.emitLine("if (untypedValue == null)"); + this.emitBlock(() => { + this.emitLine("serializer.Serialize(writer, null);"); + this.emitLine("return;"); + }); + } + + this.emitLine("var value = (", csType, ")untypedValue;"); + const allHandled = this.emitTransformer("value", reverse.transformer, reverse.targetType, () => + this.emitLine("return;") + ); + if (!allHandled) { + this.emitThrow(['"Cannot marshal type ', csType, '"']); + } + }); + this.ensureBlankLine(); + this.emitLine("public static readonly ", converterName, " Singleton = new ", converterName, "();"); + }); + } + + protected emitRequiredHelpers(): void { + if (this._needHelpers) { + this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n)); + this.ensureBlankLine(); + this.emitSerializeClass(); + } + + if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { + this.ensureBlankLine(); + this.emitConverterClass(); + this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t)); + } + } + + protected needNamespace(): boolean { + return this._needNamespaces; + } +} diff --git a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts new file mode 100644 index 000000000..77afed6da --- /dev/null +++ b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts @@ -0,0 +1,982 @@ +import { arrayIntercalate } from "collection-utils"; + +import { type ForbiddenWordsInfo, inferredNameOrder } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, SimpleName } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { camelCase, utf16StringEscape } from "../../support/Strings"; +import { defined, panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { + ArrayDecodingTransformer, + ArrayEncodingTransformer, + ChoiceTransformer, + DecodingChoiceTransformer, + DecodingTransformer, + EncodingTransformer, + MinMaxLengthCheckTransformer, + MinMaxValueTransformer, + ParseStringTransformer, + StringMatchTransformer, + StringProducerTransformer, + StringifyTransformer, + type Transformation, + type Transformer, + UnionInstantiationTransformer, + UnionMemberMatchTransformer, + followTargetType, + transformationForType +} from "../../Transformers"; +import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; +import { nullableFromUnion } from "../../TypeUtils"; + +import { CSharpRenderer } from "./CSharpRenderer"; +import { type systemTextJsonCSharpOptions } from "./language"; +import { + AccessModifier, + alwaysApplyTransformation, + denseJsonPropertyName, + denseNullValueHandlingEnumName, + isValueType, + namingFunction +} from "./utils"; + +export class SystemTextJsonCSharpRenderer extends CSharpRenderer { + private readonly _enumExtensionsNames = new Map(); + + private readonly _needHelpers: boolean; + + private readonly _needAttributes: boolean; + + private readonly _needNamespaces: boolean; + + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + private readonly _options: OptionValues + ) { + super(targetLanguage, renderContext, _options); + this._needHelpers = _options.features.helpers; + this._needAttributes = _options.features.attributes; + this._needNamespaces = _options.features.namespaces; + } + + protected forbiddenNamesForGlobalNamespace(): string[] { + const forbidden = [ + "Converter", + "JsonConverter", + "JsonSerializer", + "JsonWriter", + "JsonToken", + "Serialize", + "JsonSerializerOptions", + // "Newtonsoft", + // "MetadataPropertyHandling", + // "DateParseHandling", + "FromJson", + "Required" + ]; + if (this._options.dense) { + forbidden.push("J", "R", "N"); + } + + if (this._options.baseclass !== undefined) { + forbidden.push(this._options.baseclass); + } + + return super.forbiddenNamesForGlobalNamespace().concat(forbidden); + } + + protected forbiddenForObjectProperties(c: ClassType, className: Name): ForbiddenWordsInfo { + const result = super.forbiddenForObjectProperties(c, className); + result.names = result.names.concat(["ToJson", "FromJson", "Required"]); + return result; + } + + protected makeNameForTransformation(xf: Transformation, typeName: Name | undefined): Name { + if (typeName === undefined) { + let xfer = xf.transformer; + if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { + xfer = xfer.consumer; + } + + return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); + } + + return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); + } + + protected makeNamedTypeDependencyNames(t: Type, name: Name): DependencyName[] { + if (!(t instanceof EnumType)) return []; + + const extensionsName = new DependencyName( + namingFunction, + name.order + 30, + lookup => `${lookup(name)}_extensions` + ); + this._enumExtensionsNames.set(name, extensionsName); + return [extensionsName]; + } + + protected emitUsings(): void { + // FIXME: We need System.Collections.Generic whenever we have maps or use List. + if (!this._needAttributes && !this._needHelpers) return; + + super.emitUsings(); + this.ensureBlankLine(); + + for (const ns of ["System.Text.Json", "System.Text.Json.Serialization", "System.Globalization"]) { + this.emitUsing(ns); + } + + if (this._options.dense) { + this.emitUsing([denseJsonPropertyName, " = System.Text.Json.Serialization.JsonPropertyNameAttribute"]); + // this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); + this.emitUsing([denseNullValueHandlingEnumName, " = System.Text.Json.Serialization.JsonIgnoreCondition"]); + } + + if (this._options.baseclass === "EntityData") { + this.emitUsing("Microsoft.Azure.Mobile.Server"); + } + } + + protected baseclassForType(_t: Type): Sourcelike | undefined { + return this._options.baseclass; + } + + protected emitDefaultFollowingComments(): void { + if (!this._needHelpers) return; + + this.emitLine("#pragma warning restore CS8618"); + this.emitLine("#pragma warning restore CS8601"); + this.emitLine("#pragma warning restore CS8603"); + } + + protected emitDefaultLeadingComments(): void { + if (!this._needHelpers) return; + + this.emitLine("// "); + this.emitLine("//"); + this.emitLine( + "// To parse this JSON data, add NuGet 'System.Text.Json' then do", + this.topLevels.size === 1 ? "" : " one of these", + ":" + ); + this.emitLine("//"); + this.emitLine("// using ", this._options.namespace, ";"); + this.emitLine("//"); + this.forEachTopLevel("none", (t, topLevelName) => { + let rhs: Sourcelike; + if (t instanceof EnumType) { + rhs = ["JsonSerializer.Deserialize<", topLevelName, ">(jsonString)"]; + } else { + rhs = [topLevelName, ".FromJson(jsonString)"]; + } + + this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); + }); + + // fix: should this be an option? Or respond to an existing option? + this.emitLine("#nullable enable"); + this.emitLine("#pragma warning disable CS8618"); + this.emitLine("#pragma warning disable CS8601"); + this.emitLine("#pragma warning disable CS8603"); + } + + private converterForType(t: Type): Name | undefined { + let xf = transformationForType(t); + + if (xf === undefined && t instanceof UnionType) { + const maybeNullable = nullableFromUnion(t); + if (maybeNullable !== null) { + t = maybeNullable; + xf = transformationForType(t); + } + } + + if (xf === undefined) return undefined; + + if (alwaysApplyTransformation(xf)) return undefined; + + return defined(this.nameForTransformation(t)); + } + + protected attributesForProperty( + property: ClassProperty, + _name: Name, + _c: ClassType, + jsonName: string + ): Sourcelike[] | undefined { + if (!this._needAttributes) return undefined; + + const attributes: Sourcelike[] = []; + + const jsonPropertyName = this._options.dense ? denseJsonPropertyName : "JsonPropertyName"; + const escapedName = utf16StringEscape(jsonName); + const isNullable = followTargetType(property.type).isNullable; + const isOptional = property.isOptional; + + if (isOptional && !isNullable) { + attributes.push(["[", "JsonIgnore", "(Condition = JsonIgnoreCondition.WhenWritingNull)]"]); + } + + // const requiredClass = this._options.dense ? "R" : "Required"; + // const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; + // const nullValueHandling = isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : []; + // let required: Sourcelike; + // if (!this._options.checkRequired || (isOptional && isNullable)) { + // required = [nullValueHandling]; + // } else if (isOptional && !isNullable) { + // required = [", Required = ", requiredClass, ".DisallowNull", nullValueHandling]; + // } else if (!isOptional && isNullable) { + // required = [", Required = ", requiredClass, ".AllowNull"]; + // } else { + // required = [", Required = ", requiredClass, ".Always", nullValueHandling]; + // } + + attributes.push(["[", jsonPropertyName, '("', escapedName, '")]']); + + const converter = this.converterForType(property.type); + if (converter !== undefined) { + attributes.push(["[JsonConverter(typeof(", converter, "))]"]); + } + + return attributes; + } + + protected blankLinesBetweenAttributes(): boolean { + return this._needAttributes && !this._options.dense; + } + + // The "this" type can't be `dynamic`, so we have to force it to `object`. + private topLevelResultType(t: Type): Sourcelike { + return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); + } + + private emitFromJsonForTopLevel(t: Type, name: Name): void { + if (t instanceof EnumType) return; + + let partial: string; + let typeKind: string; + const definedType = this.namedTypeToNameForTopLevel(t); + if (definedType !== undefined) { + partial = "partial "; + typeKind = definedType instanceof ClassType ? "class" : "struct"; + } else { + partial = ""; + typeKind = "class"; + } + + const csType = this.topLevelResultType(t); + this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { + // FIXME: Make FromJson a Named + this.emitExpressionMember( + ["public static ", csType, " FromJson(string json)"], + ["JsonSerializer.Deserialize<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)"] + ); + }); + } + + private emitDecoderSwitch(emitBody: () => void): void { + this.emitLine("switch (reader.TokenType)"); + this.emitBlock(emitBody); + } + + private emitTokenCase(tokenType: string): void { + this.emitLine("case JsonTokenType.", tokenType, ":"); + } + + private emitThrow(message: Sourcelike): void { + this.emitLine("throw new Exception(", message, ");"); + } + + private deserializeTypeCode(typeName: Sourcelike): Sourcelike { + switch (typeName) { + case "bool": + return ["reader.GetBoolean()"]; + case "long": + return ["reader.GetInt64()"]; + case "decimal": + return ["reader.GetDecimal()"]; + case "double": + return ["reader.GetDouble()"]; + case "string": + return ["reader.GetString()"]; + default: + return ["JsonSerializer.Deserialize<", typeName, ">(ref reader, options)"]; + } + } + + private serializeValueCode(value: Sourcelike): Sourcelike { + if (value !== "null") return ["JsonSerializer.Serialize(writer, ", value, ", options)"]; + else return ["writer.WriteNullValue()"]; + } + + private emitSerializeClass(): void { + // FIXME: Make Serialize a Named + this.emitType(undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { + // Sometimes multiple top-levels will resolve to the same type, so we have to take care + // not to emit more than one extension method for the same type. + const seenTypes = new Set(); + this.forEachTopLevel("none", t => { + // FIXME: Make ToJson a Named + if (!seenTypes.has(t)) { + seenTypes.add(t); + this.emitExpressionMember( + ["public static string ToJson(this ", this.topLevelResultType(t), " self)"], + ["JsonSerializer.Serialize(self, ", this._options.namespace, ".Converter.Settings)"] + ); + } + }); + }); + } + + private emitCanConvert(expr: Sourcelike): void { + this.emitExpressionMember("public override bool CanConvert(Type t)", expr); + } + + private emitReadJson(emitBody: () => void, csType: Sourcelike): void { + this.emitLine( + "public override ", + csType, + " Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)" + ); + this.emitBlock(emitBody); + } + + private emitWriteJson(variable: string, emitBody: () => void, csType: Sourcelike): void { + this.emitLine( + "public override void Write(Utf8JsonWriter writer, ", + csType, + " ", + variable, + ", JsonSerializerOptions options)" + ); + this.emitBlock(emitBody); + } + + private converterObject(converterName: Name): Sourcelike { + // FIXME: Get a singleton + return [converterName, ".Singleton"]; + } + + private emitConverterClass(): void { + // FIXME: Make Converter a Named + const converterName: Sourcelike = ["Converter"]; + this.emitType(undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { + // Do not use .Web as defaults. That turns on caseInsensitive property names and will fail the keywords test. + this.emitLine( + "public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)" + ); + this.emitBlock(() => { + // this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); + // this.emitLine("DateParseHandling = DateParseHandling.None,"); + this.emitLine("Converters ="); + this.emitLine("{"); + this.indent(() => { + for (const [t, converter] of this.typesWithNamedTransformations) { + if (alwaysApplyTransformation(defined(transformationForType(t)))) { + this.emitLine(this.converterObject(converter), ","); + } + } + + this.emitLine("new DateOnlyConverter(),"); + this.emitLine("new TimeOnlyConverter(),"); + this.emitLine("IsoDateTimeOffsetConverter.Singleton"); + // this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); + }); + this.emitLine("},"); + }, true); + }); + } + + private emitDecoderTransformerCase( + tokenCases: string[], + variableName: string, + xfer: Transformer | undefined, + targetType: Type, + emitFinish: (value: Sourcelike) => void + ): void { + if (xfer === undefined) return; + + for (const tokenCase of tokenCases) { + this.emitTokenCase(tokenCase); + } + + this.indent(() => { + const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); + if (!allHandled) { + this.emitLine("break;"); + } + }); + } + + private emitConsume( + value: Sourcelike, + consumer: Transformer | undefined, + targetType: Type, + emitFinish: (variableName: Sourcelike) => void + ): boolean { + if (consumer === undefined) { + emitFinish(value); + return true; + } else { + return this.emitTransformer(value, consumer, targetType, emitFinish); + } + } + + private emitDecodeTransformer( + xfer: Transformer, + targetType: Type, + emitFinish: (value: Sourcelike) => void, + variableName = "value" + ): boolean { + if (xfer instanceof DecodingTransformer) { + const source = xfer.sourceType; + const converter = this.converterForType(targetType); + if (converter !== undefined) { + const typeSource = this.csType(targetType); + this.emitLine("var converter = ", this.converterObject(converter), ";"); + this.emitLine( + "var ", + variableName, + " = (", + typeSource, + ")converter.ReadJson(reader, typeof(", + typeSource, + "), null, serializer);" + ); + } else if (source.kind !== "null") { + let output = targetType.kind === "double" ? targetType : source; + this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); + } + + return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); + } else if (xfer instanceof ArrayDecodingTransformer) { + // FIXME: Consume StartArray + if (!(targetType instanceof ArrayType)) { + return panic("Array decoding must produce an array type"); + } + + // FIXME: handle EOF + this.emitLine("reader.Read();"); + this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); + this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); + this.emitBlock(() => { + this.emitDecodeTransformer( + xfer.itemTransformer, + xfer.itemTargetType, + v => this.emitLine(variableName, ".Add(", v, ");"), + "arrayItem" + ); + // FIXME: handle EOF + this.emitLine("reader.Read();"); + }); + let result: Sourcelike = variableName; + if (!this._options.useList) { + result = [result, ".ToArray()"]; + } + + emitFinish(result); + return true; + } else if (xfer instanceof DecodingChoiceTransformer) { + this.emitDecoderSwitch(() => { + const nullTransformer = xfer.nullTransformer; + if (nullTransformer !== undefined) { + this.emitTokenCase("Null"); + this.indent(() => { + const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null"); + if (!allHandled) { + this.emitLine("break"); + } + }); + } + + this.emitDecoderTransformerCase( + ["Number"], + "integerValue", + xfer.integerTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + ["Number"], + // xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"], + "doubleValue", + xfer.doubleTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + ["True", "False"], + "boolValue", + xfer.boolTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + // ["String", "Date"], + ["String"], + "stringValue", + xfer.stringTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + ["StartObject"], + "objectValue", + xfer.objectTransformer, + targetType, + emitFinish + ); + this.emitDecoderTransformerCase( + ["StartArray"], + "arrayValue", + xfer.arrayTransformer, + targetType, + emitFinish + ); + }); + return false; + } else { + return panic("Unknown transformer"); + } + } + + private stringCaseValue(t: Type, stringCase: string): Sourcelike { + if (t.kind === "string") { + return ['"', utf16StringEscape(stringCase), '"']; + } else if (t instanceof EnumType) { + return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; + } + + return panic(`Type ${t.kind} does not have string cases`); + } + + private emitTransformer( + variable: Sourcelike, + xfer: Transformer, + targetType: Type, + emitFinish: (value: Sourcelike) => void + ): boolean { + function directTargetType(continuation: Transformer | undefined): Type { + if (continuation === undefined) { + return targetType; + } + + return followTargetType(continuation.sourceType); + } + + if (xfer instanceof ChoiceTransformer) { + const caseXfers = xfer.transformers; + if (caseXfers.length > 1 && caseXfers.every(caseXfer => caseXfer instanceof StringMatchTransformer)) { + this.emitLine("switch (", variable, ")"); + this.emitBlock(() => { + for (const caseXfer of caseXfers) { + const matchXfer = caseXfer as StringMatchTransformer; + const value = this.stringCaseValue( + followTargetType(matchXfer.sourceType), + matchXfer.stringCase + ); + this.emitLine("case ", value, ":"); + this.indent(() => { + const allDone = this.emitTransformer( + variable, + matchXfer.transformer, + targetType, + emitFinish + ); + if (!allDone) { + this.emitLine("break;"); + } + }); + } + }); + // FIXME: Can we check for exhaustiveness? For enums it should be easy. + return false; + } else { + for (const caseXfer of caseXfers) { + this.emitTransformer(variable, caseXfer, targetType, emitFinish); + } + } + } else if (xfer instanceof UnionMemberMatchTransformer) { + const memberType = xfer.memberType; + const maybeNullable = nullableFromUnion(xfer.sourceType); + let test: Sourcelike; + let member: Sourcelike; + if (maybeNullable !== null) { + if (memberType.kind === "null") { + test = [variable, " == null"]; + member = "null"; + } else { + test = [variable, " != null"]; + member = variable; + } + } else if (memberType.kind === "null") { + test = [variable, ".IsNull"]; + member = "null"; + } else { + const memberName = this.nameForUnionMember(xfer.sourceType, memberType); + member = [variable, ".", memberName]; + test = [member, " != null"]; + } + + if (memberType.kind !== "null" && isValueType(memberType)) { + member = [member, ".Value"]; + } + + this.emitLine("if (", test, ")"); + this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); + } else if (xfer instanceof StringMatchTransformer) { + const value = this.stringCaseValue(followTargetType(xfer.sourceType), xfer.stringCase); + this.emitLine("if (", variable, " == ", value, ")"); + this.emitBlock(() => this.emitTransformer(variable, xfer.transformer, targetType, emitFinish)); + } else if (xfer instanceof EncodingTransformer) { + const converter = this.converterForType(xfer.sourceType); + if (converter !== undefined) { + this.emitLine("var converter = ", this.converterObject(converter), ";"); + this.emitLine("converter.WriteJson(writer, ", variable, ", serializer);"); + } else { + this.emitLine(this.serializeValueCode(variable), ";"); + } + + emitFinish([]); + return true; + } else if (xfer instanceof ArrayEncodingTransformer) { + this.emitLine("writer.WriteStartArray();"); + const itemVariable = "arrayItem"; + this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); + this.emitBlock(() => { + this.emitTransformer(itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { + return; + }); + }); + this.emitLine("writer.WriteEndArray();"); + emitFinish([]); + return true; + } else if (xfer instanceof ParseStringTransformer) { + const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; + switch (immediateTargetType.kind) { + case "date-time": + this.emitLine("DateTimeOffset dt;"); + this.emitLine("if (DateTimeOffset.TryParse(", variable, ", out dt))"); + this.emitBlock(() => this.emitConsume("dt", xfer.consumer, targetType, emitFinish)); + break; + case "uuid": + this.emitLine("Guid guid;"); + this.emitLine("if (Guid.TryParse(", variable, ", out guid))"); + this.emitBlock(() => this.emitConsume("guid", xfer.consumer, targetType, emitFinish)); + break; + case "uri": + this.emitLine("try"); + this.emitBlock(() => { + // this.emitLine("var uri = new Uri(", variable, ");"); + // The default value about:blank should never happen, but this way we avoid a null reference warning. + this.emitLine('var uri = new Uri("about:blank");'); + this.emitLine("if (!string.IsNullOrEmpty(stringValue))"); + this.emitBlock(() => { + this.emitLine("uri = new Uri(", variable, ");"); + }); + this.emitConsume("uri", xfer.consumer, targetType, emitFinish); + }); + this.emitLine("catch (UriFormatException) {}"); + break; + case "integer": + this.emitLine("long l;"); + this.emitLine("if (Int64.TryParse(", variable, ", out l))"); + this.emitBlock(() => this.emitConsume("l", xfer.consumer, targetType, emitFinish)); + break; + case "bool": + this.emitLine("bool b;"); + this.emitLine("if (Boolean.TryParse(", variable, ", out b))"); + this.emitBlock(() => this.emitConsume("b", xfer.consumer, targetType, emitFinish)); + break; + default: + return panic(`Parsing string to ${immediateTargetType.kind} not supported`); + } + } else if (xfer instanceof StringifyTransformer) { + switch (xfer.sourceType.kind) { + case "date-time": + return this.emitConsume( + [variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)'], + xfer.consumer, + targetType, + emitFinish + ); + case "uuid": + return this.emitConsume( + [variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)'], + xfer.consumer, + targetType, + emitFinish + ); + case "integer": + case "uri": + return this.emitConsume([variable, ".ToString()"], xfer.consumer, targetType, emitFinish); + case "bool": + this.emitLine("var boolString = ", variable, ' ? "true" : "false";'); + return this.emitConsume("boolString", xfer.consumer, targetType, emitFinish); + default: + return panic(`Stringifying ${xfer.sourceType.kind} not supported`); + } + } else if (xfer instanceof StringProducerTransformer) { + const value = this.stringCaseValue(directTargetType(xfer.consumer), xfer.result); + return this.emitConsume(value, xfer.consumer, targetType, emitFinish); + } else if (xfer instanceof MinMaxLengthCheckTransformer) { + const min = xfer.minLength; + const max = xfer.maxLength; + const conditions: Sourcelike[] = []; + + if (min !== undefined) { + conditions.push([variable, ".Length >= ", min.toString()]); + } + + if (max !== undefined) { + conditions.push([variable, ".Length <= ", max.toString()]); + } + + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); + this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + return false; + } else if (xfer instanceof MinMaxValueTransformer) { + const min = xfer.minimum; + const max = xfer.maximum; + const conditions: Sourcelike[] = []; + + if (min !== undefined) { + conditions.push([variable, " >= ", min.toString()]); + } + + if (max !== undefined) { + conditions.push([variable, " <= ", max.toString()]); + } + + this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); + this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + return false; + } else if (xfer instanceof UnionInstantiationTransformer) { + if (!(targetType instanceof UnionType)) { + return panic("Union instantiation transformer must produce a union type"); + } + + const maybeNullable = nullableFromUnion(targetType); + if (maybeNullable !== null) { + emitFinish(variable); + } else { + const unionName = this.nameForNamedType(targetType); + let initializer: Sourcelike; + if (xfer.sourceType.kind === "null") { + initializer = " "; + } else { + const memberName = this.nameForUnionMember(targetType, xfer.sourceType); + initializer = [" ", memberName, " = ", variable, " "]; + } + + emitFinish(["new ", unionName, " {", initializer, "}"]); + } + + return true; + } else { + return panic("Unknown transformer"); + } + + return false; + } + + private emitTransformation(converterName: Name, t: Type): void { + const xf = defined(transformationForType(t)); + const reverse = xf.reverse; + const targetType = xf.targetType; + const xfer = xf.transformer; + const csType = this.csType(targetType); + // const haveNullable = isValueType(targetType); + + // if (haveNullable) { + // converterName = ['Nullable', converterName]; + // csType = [csType, "?"]; + // } + this.emitType( + undefined, + AccessModifier.Internal, + "class", + converterName, + ["JsonConverter<", csType, ">"], + () => { + let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; + this.emitCanConvert(canConvertExpr); + this.ensureBlankLine(); + this.emitReadJson(() => { + // FIXME: It's unsatisfying that we need this. The reason is that we not + // only match T, but also T?. If we didn't, then the T in T? would not be + // deserialized with our converter but with the default one. Can we check + // whether the type is a nullable? + // FIXME: This could duplicate one of the cases handled below in + // `emitDecodeTransformer`. + // if (haveNullable && !(targetType instanceof UnionType)) { + // this.emitLine("if (reader.TokenType == JsonTokenType.Null) return null;"); + // } + + const allHandled = this.emitDecodeTransformer(xfer, targetType, v => + this.emitLine("return ", v, ";") + ); + if (!allHandled) { + this.emitThrow(['"Cannot unmarshal type ', csType, '"']); + } + }, csType); + this.ensureBlankLine(); + this.emitWriteJson( + "value", + () => { + // FIXME: See above. + // if (haveNullable && !(targetType instanceof UnionType)) { + // this.emitLine("if (value == null)"); + // this.emitBlock(() => { + // this.emitLine("writer.WriteNullValue();"); + // this.emitLine("return;"); + // }); + // } + + const allHandled = this.emitTransformer("value", reverse.transformer, reverse.targetType, () => + this.emitLine("return;") + ); + if (!allHandled) { + this.emitThrow(['"Cannot marshal type ', csType, '"']); + } + }, + csType + ); + this.ensureBlankLine(); + this.emitLine("public static readonly ", converterName, " Singleton = new ", converterName, "();"); + } + ); + } + + protected emitRequiredHelpers(): void { + if (this._needHelpers) { + this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n)); + this.ensureBlankLine(); + this.emitSerializeClass(); + } + + if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { + this.ensureBlankLine(); + this.emitConverterClass(); + this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t)); + this.emitMultiline(` +public class DateOnlyConverter : JsonConverter +{ + private readonly string serializationFormat; + public DateOnlyConverter() : this(null) { } + + public DateOnlyConverter(string? serializationFormat) + { + this.serializationFormat = serializationFormat ?? "yyyy-MM-dd"; + } + + public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var value = reader.GetString(); + return DateOnly.Parse(value!); + } + + public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options) + => writer.WriteStringValue(value.ToString(serializationFormat)); +} + +public class TimeOnlyConverter : JsonConverter +{ + private readonly string serializationFormat; + + public TimeOnlyConverter() : this(null) { } + + public TimeOnlyConverter(string? serializationFormat) + { + this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff"; + } + + public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var value = reader.GetString(); + return TimeOnly.Parse(value!); + } + + public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options) + => writer.WriteStringValue(value.ToString(serializationFormat)); +} + +internal class IsoDateTimeOffsetConverter : JsonConverter +{ + public override bool CanConvert(Type t) => t == typeof(DateTimeOffset); + + private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK"; + + private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind; + private string? _dateTimeFormat; + private CultureInfo? _culture; + + public DateTimeStyles DateTimeStyles + { + get => _dateTimeStyles; + set => _dateTimeStyles = value; + } + + public string? DateTimeFormat + { + get => _dateTimeFormat ?? string.Empty; + set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value; + } + + public CultureInfo Culture + { + get => _culture ?? CultureInfo.CurrentCulture; + set => _culture = value; + } + + public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options) + { + string text; + + + if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal + || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal) + { + value = value.ToUniversalTime(); + } + + text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture); + + writer.WriteStringValue(text); + } + + public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + string? dateText = reader.GetString(); + + if (string.IsNullOrEmpty(dateText) == false) + { + if (!string.IsNullOrEmpty(_dateTimeFormat)) + { + return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles); + } + else + { + return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles); + } + } + else + { + return default(DateTimeOffset); + } + } + + + public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter(); +}`); + } + } + + protected needNamespace(): boolean { + return this._needNamespaces; + } +} diff --git a/packages/quicktype-core/src/language/CSharp/constants.ts b/packages/quicktype-core/src/language/CSharp/constants.ts new file mode 100644 index 000000000..bbe7f3dfb --- /dev/null +++ b/packages/quicktype-core/src/language/CSharp/constants.ts @@ -0,0 +1,79 @@ +export const keywords = [ + "abstract", + "as", + "base", + "bool", + "break", + "byte", + "case", + "catch", + "char", + "checked", + "class", + "const", + "continue", + "decimal", + "default", + "delegate", + "do", + "double", + "else", + "enum", + "event", + "explicit", + "extern", + "false", + "finally", + "fixed", + "float", + "for", + "foreach", + "goto", + "if", + "implicit", + "in", + "int", + "interface", + "internal", + "is", + "lock", + "long", + "namespace", + "new", + "null", + "object", + "operator", + "out", + "override", + "params", + "private", + "protected", + "public", + "readonly", + "ref", + "return", + "sbyte", + "sealed", + "short", + "sizeof", + "stackalloc", + "static", + "string", + "struct", + "switch", + "this", + "throw", + "true", + "try", + "typeof", + "uint", + "ulong", + "unchecked", + "unsafe", + "ushort", + "using", + "virtual", + "void", + "volatile", + "while" +] as const; diff --git a/packages/quicktype-core/src/language/CSharp/index.ts b/packages/quicktype-core/src/language/CSharp/index.ts new file mode 100644 index 000000000..c9f7c6d8c --- /dev/null +++ b/packages/quicktype-core/src/language/CSharp/index.ts @@ -0,0 +1,4 @@ +export { CSharpTargetLanguage, cSharpOptions, newtonsoftCSharpOptions, systemTextJsonCSharpOptions } from "./language"; +export { CSharpRenderer } from "./CSharpRenderer"; +export { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; +export { SystemTextJsonCSharpRenderer } from "./SystemTextJsonCSharpRenderer"; diff --git a/packages/quicktype-core/src/language/CSharp/language.ts b/packages/quicktype-core/src/language/CSharp/language.ts new file mode 100644 index 000000000..e2b460582 --- /dev/null +++ b/packages/quicktype-core/src/language/CSharp/language.ts @@ -0,0 +1,175 @@ +import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { assertNever } from "../../support/Support"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; +import { SystemTextJsonCSharpRenderer } from "./SystemTextJsonCSharpRenderer"; +import { needTransformerForType } from "./utils"; + +export enum Framework { + Newtonsoft = "Newtonsoft", + SystemTextJson = "SystemTextJson" +} + +export type Version = 5 | 6; +export interface OutputFeatures { + attributes: boolean; + helpers: boolean; +} + +export type CSharpTypeForAny = "object" | "dynamic"; + +export const cSharpOptions = { + framework: new EnumOption( + "framework", + "Serialization framework", + [ + ["NewtonSoft", Framework.Newtonsoft], + ["SystemTextJson", Framework.SystemTextJson] + ], + "NewtonSoft" + ), + useList: new EnumOption("array-type", "Use T[] or List", [ + ["array", false], + ["list", true] + ]), + dense: new EnumOption( + "density", + "Property density", + [ + ["normal", false], + ["dense", true] + ], + "normal", + "secondary" + ), + // FIXME: Do this via a configurable named eventually. + namespace: new StringOption("namespace", "Generated namespace", "NAME", "QuickType"), + version: new EnumOption( + "csharp-version", + "C# version", + [ + ["5", 5], + ["6", 6] + ], + "6", + "secondary" + ), + virtual: new BooleanOption("virtual", "Generate virtual properties", false), + typeForAny: new EnumOption( + "any-type", + 'Type to use for "any"', + [ + ["object", "object"], + ["dynamic", "dynamic"] + ], + "object", + "secondary" + ), + useDecimal: new EnumOption( + "number-type", + "Type to use for numbers", + [ + ["double", false], + ["decimal", true] + ], + "double", + "secondary" + ), + features: new EnumOption("features", "Output features", [ + ["complete", { namespaces: true, helpers: true, attributes: true }], + ["attributes-only", { namespaces: true, helpers: false, attributes: true }], + ["just-types-and-namespace", { namespaces: true, helpers: false, attributes: false }], + ["just-types", { namespaces: true, helpers: false, attributes: false }] + ]), + baseclass: new EnumOption( + "base-class", + "Base class", + [ + ["EntityData", "EntityData"], + ["Object", undefined] + ], + "Object", + "secondary" + ), + checkRequired: new BooleanOption("check-required", "Fail if required properties are missing", false), + keepPropertyName: new BooleanOption("keep-property-name", "Keep original field name generate", false) +}; + +export const newtonsoftCSharpOptions = Object.assign({}, cSharpOptions, {}); + +export const systemTextJsonCSharpOptions = Object.assign({}, cSharpOptions, {}); + +export class CSharpTargetLanguage extends TargetLanguage { + public constructor() { + super("C#", ["cs", "csharp"], "cs"); + } + + protected getOptions(): Array> { + return [ + cSharpOptions.framework, + cSharpOptions.namespace, + cSharpOptions.version, + cSharpOptions.dense, + cSharpOptions.useList, + cSharpOptions.useDecimal, + cSharpOptions.typeForAny, + cSharpOptions.virtual, + cSharpOptions.features, + cSharpOptions.baseclass, + cSharpOptions.checkRequired, + cSharpOptions.keepPropertyName + ]; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + mapping.set("date", "date-time"); + mapping.set("time", "date-time"); + mapping.set("date-time", "date-time"); + mapping.set("uuid", "uuid"); + mapping.set("uri", "uri"); + mapping.set("integer-string", "integer-string"); + mapping.set("bool-string", "bool-string"); + return mapping; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public needsTransformerForType(t: Type): boolean { + const need = needTransformerForType(t); + return need !== "none" && need !== "nullable"; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { + const options = getOptionValues(cSharpOptions, untypedOptionValues); + + switch (options.framework) { + case Framework.Newtonsoft: + return new NewtonsoftCSharpRenderer( + this, + renderContext, + getOptionValues(newtonsoftCSharpOptions, untypedOptionValues) + ); + case Framework.SystemTextJson: + return new SystemTextJsonCSharpRenderer( + this, + renderContext, + getOptionValues(systemTextJsonCSharpOptions, untypedOptionValues) + ); + default: + return assertNever(options.framework); + } + } +} diff --git a/packages/quicktype-core/src/language/CSharp/utils.ts b/packages/quicktype-core/src/language/CSharp/utils.ts new file mode 100644 index 000000000..856de95ca --- /dev/null +++ b/packages/quicktype-core/src/language/CSharp/utils.ts @@ -0,0 +1,147 @@ +import unicode from "unicode-properties"; + +import { minMaxLengthForType, minMaxValueForType } from "../../attributes/Constraints"; +import { funPrefixNamer } from "../../Naming"; +import { type Sourcelike } from "../../Source"; +import { + type WordInName, + combineWords, + firstUpperWordStyle, + splitIntoWords, + utf16LegalizeCharacters +} from "../../support/Strings"; +import { panic } from "../../support/Support"; +import { type Transformation } from "../../Transformers"; +import { ArrayType, EnumType, type PrimitiveType, type Type, UnionType } from "../../Type"; +import { nullableFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; + +export enum AccessModifier { + None = "None", + Public = "Public", + Internal = "Internal" +} + +export function noFollow(t: Type): Type { + return t; +} + +export function needTransformerForType(t: Type): "automatic" | "manual" | "nullable" | "none" { + if (t instanceof UnionType) { + const maybeNullable = nullableFromUnion(t); + if (maybeNullable === null) return "automatic"; + if (needTransformerForType(maybeNullable) === "manual") return "nullable"; + return "none"; + } + + if (t instanceof ArrayType) { + const itemsNeed = needTransformerForType(t.items); + if (itemsNeed === "manual" || itemsNeed === "nullable") return "automatic"; + return "none"; + } + + if (t instanceof EnumType) return "automatic"; + if (t.kind === "double") return minMaxValueForType(t) !== undefined ? "manual" : "none"; + if (t.kind === "integer-string" || t.kind === "bool-string") return "manual"; + if (t.kind === "string") { + return minMaxLengthForType(t) !== undefined ? "manual" : "none"; + } + + return "none"; +} + +export function alwaysApplyTransformation(xf: Transformation): boolean { + const t = xf.targetType; + if (t instanceof EnumType) return true; + if (t instanceof UnionType) return nullableFromUnion(t) === null; + return false; +} + +/** + * The C# type for a given transformed string type. + */ +export function csTypeForTransformedStringType(t: PrimitiveType): Sourcelike { + switch (t.kind) { + case "date-time": + return "DateTimeOffset"; + case "uuid": + return "Guid"; + case "uri": + return "Uri"; + default: + return panic(`Transformed string type ${t.kind} not supported`); + } +} + +export const namingFunction = funPrefixNamer("namer", csNameStyle); +export const namingFunctionKeep = funPrefixNamer("namerKeep", csNameStyleKeep); + +// FIXME: Make a Named? +export const denseJsonPropertyName = "J"; +export const denseRequiredEnumName = "R"; +export const denseNullValueHandlingEnumName = "N"; + +export function isStartCharacter(utf16Unit: number): boolean { + if (unicode.isAlphabetic(utf16Unit)) { + return true; + } + + return utf16Unit === 0x5f; // underscore +} + +function isPartCharacter(utf16Unit: number): boolean { + const category: string = unicode.getCategory(utf16Unit); + if (["Nd", "Pc", "Mn", "Mc"].includes(category)) { + return true; + } + + return isStartCharacter(utf16Unit); +} + +const legalizeName = utf16LegalizeCharacters(isPartCharacter); + +export function csNameStyle(original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + firstUpperWordStyle, + firstUpperWordStyle, + firstUpperWordStyle, + firstUpperWordStyle, + "", + isStartCharacter + ); +} + +function csNameStyleKeep(original: string): string { + const words: WordInName[] = [ + { + word: original, + isAcronym: false + } + ]; + + const result = combineWords( + words, + legalizeName, + x => x, + x => x, + x => x, + x => x, + "", + isStartCharacter + ); + + // @ts-expect-error needs strong type + return keywords.includes(result) ? "@" + result : result; +} + +export function isValueType(t: Type): boolean { + if (t instanceof UnionType) { + return nullableFromUnion(t) === null; + } + + return ["integer", "double", "bool", "enum", "date-time", "uuid"].includes(t.kind); +} diff --git a/packages/quicktype-core/src/language/Crystal.ts b/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts similarity index 56% rename from packages/quicktype-core/src/language/Crystal.ts rename to packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts index 9816191bc..e699b9b9b 100644 --- a/packages/quicktype-core/src/language/Crystal.ts +++ b/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts @@ -1,234 +1,14 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { type Option } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated } from "../Source"; -import { - allLowerWordStyle, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - intToHex, - isAscii, - isLetterOrUnderscore, - isLetterOrUnderscoreOrDigit, - isPrintable, - legalizeCharacters, - splitIntoWords, - utf32ConcatMap -} from "../support/Strings"; -import { TargetLanguage } from "../TargetLanguage"; -import { type ClassType, type EnumType, type Type, type UnionType } from "../Type"; -import { type FixMeOptionsAnyType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export class CrystalTargetLanguage extends TargetLanguage { - protected makeRenderer(renderContext: RenderContext): CrystalRenderer { - return new CrystalRenderer(this, renderContext); - } - - public constructor() { - super("Crystal", ["crystal", "cr", "crystallang"], "cr"); - } - - protected get defaultIndentation(): string { - return " "; - } - - protected getOptions(): Array> { - return []; - } -} - -const keywords = [ - "Any", - "Array", - "Atomic", - "Bool", - "Channel", - "Char", - "Class", - "Enum", - "Enumerable", - "Event", - "Extern", - "Exception", - "File", - "Float", - "Float32", - "Float64", - "GC", - "GZip", - "Hash", - "HTML", - "HTTP", - "Int", - "Int128", - "Int16", - "Int32", - "Int64", - "Int8", - "Iterable", - "Link", - "Logger", - "Math", - "Mutex", - "Nil", - "Number", - "JSON", - "IO", - "Object", - "Pointer", - "Proc", - "Process", - "Range", - "Random", - "Regex", - "Reference", - "Set", - "Signal", - "Slice", - "Spec", - "StaticArray", - "String", - "Struct", - "Symbol", - "System", - "TCPServer", - "TCPSocket", - "Socket", - "Tempfile", - "Termios", - "Time", - "Tuple", - "ThreadLocal", - "UDPSocket", - "UInt128", - "UInt16", - "UInt32", - "UInt64", - "UInt8", - "Union", - "UNIXServer", - "UNIXSocket", - "UUID", - "URI", - "VaList", - "Value", - "Void", - "WeakRef", - "XML", - "YAML", - "Zip", - "Zlib", - "abstract", - "alias", - "as", - "as?", - "asm", - "begin", - "break", - "case", - "class", - "def", - "do", - "else", - "elsif", - "end", - "ensure", - "enum", - "extend", - "false", - "for", - "fun", - "if", - "in", - "include", - "instance_sizeof", - "is_a?", - "lib", - "macro", - "module", - "next", - "nil", - "nil?", - "of", - "out", - "pointerof", - "private", - "protected", - "require", - "rescue", - "return", - "select", - "self", - "sizeof", - "struct", - "super", - "then", - "true", - "type", - "typeof", - "uninitialized", - "union", - "unless", - "until", - "when", - "while", - "with", - "yield" -]; - -function isAsciiLetterOrUnderscoreOrDigit(codePoint: number): boolean { - if (!isAscii(codePoint)) { - return false; - } - - return isLetterOrUnderscoreOrDigit(codePoint); -} - -function isAsciiLetterOrUnderscore(codePoint: number): boolean { - if (!isAscii(codePoint)) { - return false; - } - - return isLetterOrUnderscore(codePoint); -} - -const legalizeName = legalizeCharacters(isAsciiLetterOrUnderscoreOrDigit); - -function crystalStyle(original: string, isSnakeCase: boolean): string { - const words = splitIntoWords(original); - - const wordStyle = isSnakeCase ? allLowerWordStyle : firstUpperWordStyle; - - const combined = combineWords( - words, - legalizeName, - wordStyle, - wordStyle, - wordStyle, - wordStyle, - isSnakeCase ? "_" : "", - isAsciiLetterOrUnderscore - ); - - return combined === "_" ? "_underscore" : combined; -} - -const snakeNamingFunction = funPrefixNamer("default", (original: string) => crystalStyle(original, true)); -const camelNamingFunction = funPrefixNamer("camel", (original: string) => crystalStyle(original, false)); - -function standardUnicodeCrystalEscape(codePoint: number): string { - if (codePoint <= 0xffff) { - return "\\u{" + intToHex(codePoint, 4) + "}"; - } else { - return "\\u{" + intToHex(codePoint, 6) + "}"; - } -} - -const crystalStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeCrystalEscape)); +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { camelNamingFunction, crystalStringEscape, snakeNamingFunction } from "./utils"; export class CrystalRenderer extends ConvenienceRenderer { public constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { @@ -251,7 +31,7 @@ export class CrystalRenderer extends ConvenienceRenderer { return camelNamingFunction; } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } diff --git a/packages/quicktype-core/src/language/Crystal/constants.ts b/packages/quicktype-core/src/language/Crystal/constants.ts new file mode 100644 index 000000000..9f9f99c5b --- /dev/null +++ b/packages/quicktype-core/src/language/Crystal/constants.ts @@ -0,0 +1,138 @@ +export const keywords = [ + "Any", + "Array", + "Atomic", + "Bool", + "Channel", + "Char", + "Class", + "Enum", + "Enumerable", + "Event", + "Extern", + "Exception", + "File", + "Float", + "Float32", + "Float64", + "GC", + "GZip", + "Hash", + "HTML", + "HTTP", + "Int", + "Int128", + "Int16", + "Int32", + "Int64", + "Int8", + "Iterable", + "Link", + "Logger", + "Math", + "Mutex", + "Nil", + "Number", + "JSON", + "IO", + "Object", + "Pointer", + "Proc", + "Process", + "Range", + "Random", + "Regex", + "Reference", + "Set", + "Signal", + "Slice", + "Spec", + "StaticArray", + "String", + "Struct", + "Symbol", + "System", + "TCPServer", + "TCPSocket", + "Socket", + "Tempfile", + "Termios", + "Time", + "Tuple", + "ThreadLocal", + "UDPSocket", + "UInt128", + "UInt16", + "UInt32", + "UInt64", + "UInt8", + "Union", + "UNIXServer", + "UNIXSocket", + "UUID", + "URI", + "VaList", + "Value", + "Void", + "WeakRef", + "XML", + "YAML", + "Zip", + "Zlib", + "abstract", + "alias", + "as", + "as?", + "asm", + "begin", + "break", + "case", + "class", + "def", + "do", + "else", + "elsif", + "end", + "ensure", + "enum", + "extend", + "false", + "for", + "fun", + "if", + "in", + "include", + "instance_sizeof", + "is_a?", + "lib", + "macro", + "module", + "next", + "nil", + "nil?", + "of", + "out", + "pointerof", + "private", + "protected", + "require", + "rescue", + "return", + "select", + "self", + "sizeof", + "struct", + "super", + "then", + "true", + "type", + "typeof", + "uninitialized", + "union", + "unless", + "until", + "when", + "while", + "with", + "yield" +] as const; diff --git a/packages/quicktype-core/src/language/Crystal/index.ts b/packages/quicktype-core/src/language/Crystal/index.ts new file mode 100644 index 000000000..d6b0ce5bc --- /dev/null +++ b/packages/quicktype-core/src/language/Crystal/index.ts @@ -0,0 +1,2 @@ +export { CrystalTargetLanguage } from "./language"; +export { CrystalRenderer } from "./CrystalRenderer"; diff --git a/packages/quicktype-core/src/language/Crystal/language.ts b/packages/quicktype-core/src/language/Crystal/language.ts new file mode 100644 index 000000000..ba8c81c67 --- /dev/null +++ b/packages/quicktype-core/src/language/Crystal/language.ts @@ -0,0 +1,24 @@ +import { type RenderContext } from "../../Renderer"; +import { type Option } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType } from "../../types"; + +import { CrystalRenderer } from "./CrystalRenderer"; + +export class CrystalTargetLanguage extends TargetLanguage { + protected makeRenderer(renderContext: RenderContext): CrystalRenderer { + return new CrystalRenderer(this, renderContext); + } + + public constructor() { + super("Crystal", ["crystal", "cr", "crystallang"], "cr"); + } + + protected get defaultIndentation(): string { + return " "; + } + + protected getOptions(): Array> { + return []; + } +} diff --git a/packages/quicktype-core/src/language/Crystal/utils.ts b/packages/quicktype-core/src/language/Crystal/utils.ts new file mode 100644 index 000000000..a4d95da50 --- /dev/null +++ b/packages/quicktype-core/src/language/Crystal/utils.ts @@ -0,0 +1,65 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allLowerWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + intToHex, + isAscii, + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap +} from "../../support/Strings"; + +function isAsciiLetterOrUnderscoreOrDigit(codePoint: number): boolean { + if (!isAscii(codePoint)) { + return false; + } + + return isLetterOrUnderscoreOrDigit(codePoint); +} + +function isAsciiLetterOrUnderscore(codePoint: number): boolean { + if (!isAscii(codePoint)) { + return false; + } + + return isLetterOrUnderscore(codePoint); +} + +const legalizeName = legalizeCharacters(isAsciiLetterOrUnderscoreOrDigit); + +function crystalStyle(original: string, isSnakeCase: boolean): string { + const words = splitIntoWords(original); + + const wordStyle = isSnakeCase ? allLowerWordStyle : firstUpperWordStyle; + + const combined = combineWords( + words, + legalizeName, + wordStyle, + wordStyle, + wordStyle, + wordStyle, + isSnakeCase ? "_" : "", + isAsciiLetterOrUnderscore + ); + + return combined === "_" ? "_underscore" : combined; +} + +export const snakeNamingFunction = funPrefixNamer("default", (original: string) => crystalStyle(original, true)); +export const camelNamingFunction = funPrefixNamer("camel", (original: string) => crystalStyle(original, false)); + +function standardUnicodeCrystalEscape(codePoint: number): string { + if (codePoint <= 0xffff) { + return "\\u{" + intToHex(codePoint, 4) + "}"; + } else { + return "\\u{" + intToHex(codePoint, 6) + "}"; + } +} + +export const crystalStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeCrystalEscape)); diff --git a/packages/quicktype-core/src/language/Dart.ts b/packages/quicktype-core/src/language/Dart/DartRenderer.ts similarity index 80% rename from packages/quicktype-core/src/language/Dart.ts rename to packages/quicktype-core/src/language/Dart/DartRenderer.ts index d8d471ec9..75508c7b8 100644 --- a/packages/quicktype-core/src/language/Dart.ts +++ b/packages/quicktype-core/src/language/Dart/DartRenderer.ts @@ -1,218 +1,18 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; -import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - decapitalize, - escapeNonPrintableMapper, - firstUpperWordStyle, - isAscii, - isDigit, - isLetter, - isPrintable, - snakeCase, - splitIntoWords, - standardUnicodeHexEscape, - utf16ConcatMap, - utf16LegalizeCharacters -} from "../support/Strings"; -import { defined } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - type ClassProperty, - type ClassType, - EnumType, - type PrimitiveStringTypeKind, - type TransformedStringTypeKind, - type Type, - type UnionType -} from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../TypeUtils"; - -export const dartOptions = { - nullSafety: new BooleanOption("null-safety", "Null Safety", true), - justTypes: new BooleanOption("just-types", "Types only", false), - codersInClass: new BooleanOption("coders-in-class", "Put encoder & decoder in Class", false), - methodNamesWithMap: new BooleanOption("from-map", "Use method names fromMap() & toMap()", false, "secondary"), - requiredProperties: new BooleanOption("required-props", "Make all properties required", false), - finalProperties: new BooleanOption("final-props", "Make all properties final", false), - generateCopyWith: new BooleanOption("copy-with", "Generate CopyWith method", false), - useFreezed: new BooleanOption( - "use-freezed", - "Generate class definitions with @freezed compatibility", - false, - "secondary" - ), - useHive: new BooleanOption("use-hive", "Generate annotations for Hive type adapters", false, "secondary"), - useJsonAnnotation: new BooleanOption( - "use-json-annotation", - "Generate annotations for json_serializable", - false, - "secondary" - ), - partName: new StringOption("part-name", "Use this name in `part` directive", "NAME", "", "secondary") -}; - -export class DartTargetLanguage extends TargetLanguage { - public constructor() { - super("Dart", ["dart"], "dart"); - } - - protected getOptions(): Array> { - return [ - dartOptions.nullSafety, - dartOptions.justTypes, - dartOptions.codersInClass, - dartOptions.methodNamesWithMap, - dartOptions.requiredProperties, - dartOptions.finalProperties, - dartOptions.generateCopyWith, - dartOptions.useFreezed, - dartOptions.useHive, - dartOptions.useJsonAnnotation, - dartOptions.partName - ]; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - mapping.set("date", "date"); - mapping.set("date-time", "date-time"); - return mapping; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): DartRenderer { - const options = getOptionValues(dartOptions, untypedOptionValues); - return new DartRenderer(this, renderContext, options); - } -} - -const keywords = [ - "abstract", - "do", - "import", - "super", - "as", - "dynamic", - "in", - "switch", - "assert", - "else", - "interface", - "sync*", - "async", - "enum", - "is", - "this", - "async*", - "export", - "library", - "throw", - "await", - "external", - "mixin", - "true", - "break", - "extends", - "new", - "try", - "case", - "factory", - "null", - "typedef", - "catch", - "false", - "operator", - "var", - "class", - "final", - "part", - "void", - "const", - "finally", - "rethrow", - "while", - "continue", - "for", - "return", - "with", - "covariant", - "get", - "set", - "yield", - "default", - "if", - "static", - "yield*", - "deferred", - "implements", - "int", - "double", - "bool", - "Map", - "List", - "String", - "File", - "fromJson", - "toJson", - "fromMap", - "toMap" -]; - -const typeNamingFunction = funPrefixNamer("types", n => dartNameStyle(true, false, n)); -const propertyNamingFunction = funPrefixNamer("properties", n => dartNameStyle(false, false, n)); -const enumCaseNamingFunction = funPrefixNamer("enum-cases", n => dartNameStyle(true, true, n)); - -// Escape the dollar sign, which is used in string interpolation -const stringEscape = utf16ConcatMap( - escapeNonPrintableMapper(cp => isPrintable(cp) && cp !== 0x24, standardUnicodeHexEscape) -); - -function isStartCharacter(codePoint: number): boolean { - if (codePoint === 0x5f) return false; // underscore - return isAscii(codePoint) && isLetter(codePoint); -} - -function isPartCharacter(codePoint: number): boolean { - return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); -} - -const legalizeName = utf16LegalizeCharacters(isPartCharacter); - -// FIXME: Handle acronyms consistently. In particular, that means that -// we have to use namers to produce the getter and setter names - we can't -// just capitalize and concatenate. -// https://stackoverflow.com/questions/8277355/naming-convention-for-upper-case-abbreviations -function dartNameStyle(startWithUpper: boolean, upperUnderscore: boolean, original: string): string { - const words = splitIntoWords(original); - const firstWordStyle = upperUnderscore - ? allUpperWordStyle - : startWithUpper - ? firstUpperWordStyle - : allLowerWordStyle; - const restWordStyle = upperUnderscore ? allUpperWordStyle : firstUpperWordStyle; - return combineWords( - words, - legalizeName, - firstWordStyle, - restWordStyle, - firstWordStyle, - restWordStyle, - upperUnderscore ? "_" : "", - isStartCharacter - ); -} +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; +import { decapitalize, snakeCase } from "../../support/Strings"; +import { defined } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassProperty, type ClassType, EnumType, type Type, type UnionType } from "../../Type"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { type dartOptions } from "./language"; +import { enumCaseNamingFunction, propertyNamingFunction, stringEscape, typeNamingFunction } from "./utils"; interface TopLevelDependents { decoder: Name; @@ -240,7 +40,7 @@ export class DartRenderer extends ConvenienceRenderer { super(targetLanguage, renderContext); } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } @@ -879,15 +679,15 @@ export class DartRenderer extends ConvenienceRenderer { protected emitEnumValues(): void { this.ensureBlankLine(); this.emitMultiline(`class EnumValues { - Map map; - late Map reverseMap; + Map map; + late Map reverseMap; - EnumValues(this.map); + EnumValues(this.map); - Map get reverse { - reverseMap = map.map((k, v) => MapEntry(v, k)); - return reverseMap; - } + Map get reverse { + reverseMap = map.map((k, v) => MapEntry(v, k)); + return reverseMap; + } }`); } diff --git a/packages/quicktype-core/src/language/Dart/constants.ts b/packages/quicktype-core/src/language/Dart/constants.ts new file mode 100644 index 000000000..1251a6d8e --- /dev/null +++ b/packages/quicktype-core/src/language/Dart/constants.ts @@ -0,0 +1,71 @@ +export const keywords = [ + "abstract", + "do", + "import", + "super", + "as", + "dynamic", + "in", + "switch", + "assert", + "else", + "interface", + "sync*", + "async", + "enum", + "is", + "this", + "async*", + "export", + "library", + "throw", + "await", + "external", + "mixin", + "true", + "break", + "extends", + "new", + "try", + "case", + "factory", + "null", + "typedef", + "catch", + "false", + "operator", + "var", + "class", + "final", + "part", + "void", + "const", + "finally", + "rethrow", + "while", + "continue", + "for", + "return", + "with", + "covariant", + "get", + "set", + "yield", + "default", + "if", + "static", + "yield*", + "deferred", + "implements", + "int", + "double", + "bool", + "Map", + "List", + "String", + "File", + "fromJson", + "toJson", + "fromMap", + "toMap" +] as const; diff --git a/packages/quicktype-core/src/language/Dart/index.ts b/packages/quicktype-core/src/language/Dart/index.ts new file mode 100644 index 000000000..3820d5ad9 --- /dev/null +++ b/packages/quicktype-core/src/language/Dart/index.ts @@ -0,0 +1,2 @@ +export { DartTargetLanguage, dartOptions } from "./language"; +export { DartRenderer } from "./DartRenderer"; diff --git a/packages/quicktype-core/src/language/Dart/language.ts b/packages/quicktype-core/src/language/Dart/language.ts new file mode 100644 index 000000000..4598079f9 --- /dev/null +++ b/packages/quicktype-core/src/language/Dart/language.ts @@ -0,0 +1,70 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { DartRenderer } from "./DartRenderer"; + +export const dartOptions = { + nullSafety: new BooleanOption("null-safety", "Null Safety", true), + justTypes: new BooleanOption("just-types", "Types only", false), + codersInClass: new BooleanOption("coders-in-class", "Put encoder & decoder in Class", false), + methodNamesWithMap: new BooleanOption("from-map", "Use method names fromMap() & toMap()", false, "secondary"), + requiredProperties: new BooleanOption("required-props", "Make all properties required", false), + finalProperties: new BooleanOption("final-props", "Make all properties final", false), + generateCopyWith: new BooleanOption("copy-with", "Generate CopyWith method", false), + useFreezed: new BooleanOption( + "use-freezed", + "Generate class definitions with @freezed compatibility", + false, + "secondary" + ), + useHive: new BooleanOption("use-hive", "Generate annotations for Hive type adapters", false, "secondary"), + useJsonAnnotation: new BooleanOption( + "use-json-annotation", + "Generate annotations for json_serializable", + false, + "secondary" + ), + partName: new StringOption("part-name", "Use this name in `part` directive", "NAME", "", "secondary") +}; + +export class DartTargetLanguage extends TargetLanguage { + public constructor() { + super("Dart", ["dart"], "dart"); + } + + protected getOptions(): Array> { + return [ + dartOptions.nullSafety, + dartOptions.justTypes, + dartOptions.codersInClass, + dartOptions.methodNamesWithMap, + dartOptions.requiredProperties, + dartOptions.finalProperties, + dartOptions.generateCopyWith, + dartOptions.useFreezed, + dartOptions.useHive, + dartOptions.useJsonAnnotation, + dartOptions.partName + ]; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + mapping.set("date", "date"); + mapping.set("date-time", "date-time"); + return mapping; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): DartRenderer { + const options = getOptionValues(dartOptions, untypedOptionValues); + return new DartRenderer(this, renderContext, options); + } +} diff --git a/packages/quicktype-core/src/language/Dart/utils.ts b/packages/quicktype-core/src/language/Dart/utils.ts new file mode 100644 index 000000000..2fb4a783d --- /dev/null +++ b/packages/quicktype-core/src/language/Dart/utils.ts @@ -0,0 +1,60 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + isAscii, + isDigit, + isLetter, + isPrintable, + splitIntoWords, + standardUnicodeHexEscape, + utf16ConcatMap, + utf16LegalizeCharacters +} from "../../support/Strings"; + +export const typeNamingFunction = funPrefixNamer("types", n => dartNameStyle(true, false, n)); +export const propertyNamingFunction = funPrefixNamer("properties", n => dartNameStyle(false, false, n)); +export const enumCaseNamingFunction = funPrefixNamer("enum-cases", n => dartNameStyle(true, true, n)); + +// Escape the dollar sign, which is used in string interpolation +export const stringEscape = utf16ConcatMap( + escapeNonPrintableMapper(cp => isPrintable(cp) && cp !== 0x24, standardUnicodeHexEscape) +); + +function isStartCharacter(codePoint: number): boolean { + if (codePoint === 0x5f) return false; // underscore + return isAscii(codePoint) && isLetter(codePoint); +} + +function isPartCharacter(codePoint: number): boolean { + return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); +} + +const legalizeName = utf16LegalizeCharacters(isPartCharacter); + +// FIXME: Handle acronyms consistently. In particular, that means that +// we have to use namers to produce the getter and setter names - we can't +// just capitalize and concatenate. +// https://stackoverflow.com/questions/8277355/naming-convention-for-upper-case-abbreviations +export function dartNameStyle(startWithUpper: boolean, upperUnderscore: boolean, original: string): string { + const words = splitIntoWords(original); + const firstWordStyle = upperUnderscore + ? allUpperWordStyle + : startWithUpper + ? firstUpperWordStyle + : allLowerWordStyle; + const restWordStyle = upperUnderscore ? allUpperWordStyle : firstUpperWordStyle; + return combineWords( + words, + legalizeName, + firstWordStyle, + restWordStyle, + firstWordStyle, + restWordStyle, + upperUnderscore ? "_" : "", + isStartCharacter + ); +} diff --git a/packages/quicktype-core/src/language/Elixir.ts b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts similarity index 85% rename from packages/quicktype-core/src/language/Elixir.ts rename to packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts index 3762dae7e..3665836a5 100644 --- a/packages/quicktype-core/src/language/Elixir.ts +++ b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts @@ -1,214 +1,22 @@ -import * as unicode from "unicode-properties"; - -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, Namer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; -import { type Sourcelike } from "../Source"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike } from "../../Source"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, ClassType, EnumType, MapType, PrimitiveType, type Type, UnionType } from "../../Type"; +import { matchType, nullableFromUnion } from "../../TypeUtils"; + +import { forbiddenModuleNames, reservedWords } from "./constants"; +import { type elixirOptions } from "./language"; import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - intToHex, - isLetterOrUnderscore, - isPrintable, - legalizeCharacters, - splitIntoWords, - utf32ConcatMap -} from "../support/Strings"; -import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, ClassType, EnumType, MapType, PrimitiveType, type Type, UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion } from "../TypeUtils"; - -const forbiddenModuleNames = [ - "Access", - "Agent", - "Any", - "Application", - "ArgumentError", - "ArithmeticError", - "Atom", - "BadArityError", - "BadBooleanError", - "BadFunctionError", - "BadMapError", - "BadStructError", - "Base", - "Behaviour", - "Bitwise", - "Calendar", - "CaseClauseError", - "Code", - "Collectable", - "CondClauseError", - "Config", - "Date", - "DateTime", - "Dict", - "DynamicSupervisor", - "Enum", - "ErlangError", - "Exception", - "File", - "Float", - "Function", - "FunctionClauseError", - "GenEvent", - "GenServer", - "HashDict", - "HashSet", - "IO", - "Inspect", - "Integer", - "Kernel", - "KeyError", - "Keyword", - "List", - "Macro", - "Map", - "MapSet", - "MatchError", - "Module", - "Node", - "OptionParser", - "Path", - "Port", - "Process", - "Protocol", - "Range", - "Record", - "Regex", - "Registry", - "RuntimeError", - "Set", - "Stream", - "String", - "StringIO", - "Supervisor", - "SyntaxError", - "System", - "SystemLimitError", - "Task", - "Time", - "TokenMissingError", - "Tuple", - "URI", - "UndefinedFunctionError", - "UnicodeConversionError", - "Version", - "WithClauseError" -]; -const reservedWords = [ - "def", - "defmodule", - "use", - "import", - "alias", - "true", - "false", - "nil", - "when", - "and", - "or", - "not", - "in", - "fn", - "do", - "end", - "catch", - "rescue", - "after", - "else" -]; - -function unicodeEscape(codePoint: number): string { - return `\\u{${intToHex(codePoint, 0)}}`; -} - -function capitalizeFirstLetter(str: string): string { - return str.charAt(0).toUpperCase() + str.slice(1); -} - -const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); - -function escapeDoubleQuotes(str: string): string { - return str.replace(/"/g, '\\"'); -} - -function escapeNewLines(str: string): string { - return str.replace(/\n/g, "\\n"); -} - -export const elixirOptions = { - justTypes: new BooleanOption("just-types", "Plain types only", false), - namespace: new StringOption("namespace", "Specify a module namespace", "NAME", "") -}; - -export class ElixirTargetLanguage extends TargetLanguage { - public constructor() { - super("Elixir", ["elixir"], "ex"); - } - - protected getOptions(): Array> { - return [elixirOptions.justTypes, elixirOptions.namespace]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - protected get defaultIndentation(): string { - return " "; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ElixirRenderer { - return new ElixirRenderer(this, renderContext, getOptionValues(elixirOptions, untypedOptionValues)); - } -} - -const isStartCharacter = isLetterOrUnderscore; - -function isPartCharacter(utf16Unit: number): boolean { - const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); -} - -const legalizeName = legalizeCharacters(isPartCharacter); - -function simpleNameStyle(original: string, uppercase: boolean): string { - if (/^[0-9]+$/.test(original)) { - original = `${original}N`; - } - - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - uppercase ? firstUpperWordStyle : allLowerWordStyle, - uppercase ? firstUpperWordStyle : allLowerWordStyle, - allUpperWordStyle, - allUpperWordStyle, - "", - isStartCharacter - ); -} - -function memberNameStyle(original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - allLowerWordStyle, - allLowerWordStyle, - allLowerWordStyle, - allLowerWordStyle, - "_", - isStartCharacter - ); -} + capitalizeFirstLetter, + escapeDoubleQuotes, + escapeNewLines, + memberNameStyle, + simpleNameStyle, + stringEscape +} from "./utils"; export class ElixirRenderer extends ConvenienceRenderer { public constructor( @@ -236,7 +44,7 @@ export class ElixirRenderer extends ConvenienceRenderer { } protected forbiddenForObjectProperties(_c: ClassType, _classNamed: Name): ForbiddenWordsInfo { - return { names: reservedWords, includeGlobalForbidden: true }; + return { names: reservedWords as unknown as string[], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { @@ -890,8 +698,8 @@ export class ElixirRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitBlock("def from_json(json) do", () => { this.emitMultiline(`json - |> Jason.decode!() - |> from_map()`); + |> Jason.decode!() + |> from_map()`); }); this.ensureBlankLine(); this.emitBlock([`def to_map(${isEmpty ? "_" : ""}struct) do`], () => { @@ -907,8 +715,8 @@ export class ElixirRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitBlock("def to_json(struct) do", () => { this.emitMultiline(`struct - |> to_map() - |> Jason.encode!()`); + |> to_map() + |> Jason.encode!()`); }); }); } @@ -963,40 +771,40 @@ export class ElixirRenderer extends ConvenienceRenderer { this.emitMultiline(`def valid_atom?(value), do: value in @valid_enum_members def valid_atom_string?(value) do - try do - atom = String.to_existing_atom(value) - atom in @valid_enum_members - rescue - ArgumentError -> false - end + try do + atom = String.to_existing_atom(value) + atom in @valid_enum_members + rescue + ArgumentError -> false + end end def encode(value) do - if valid_atom?(value) do - Atom.to_string(value) - else - {:error, "Unexpected value when encoding atom: #{inspect(value)}"} - end + if valid_atom?(value) do + Atom.to_string(value) + else + {:error, "Unexpected value when encoding atom: #{inspect(value)}"} + end end def decode(value) do - if valid_atom_string?(value) do - String.to_existing_atom(value) - else - {:error, "Unexpected value when decoding atom: #{inspect(value)}"} - end + if valid_atom_string?(value) do + String.to_existing_atom(value) + else + {:error, "Unexpected value when decoding atom: #{inspect(value)}"} + end end def from_json(json) do - json - |> Jason.decode!() - |> decode() + json + |> Jason.decode!() + |> decode() end def to_json(data) do - data - |> encode() - |> Jason.encode!() + data + |> encode() + |> Jason.encode!() end`); }); } diff --git a/packages/quicktype-core/src/language/Elixir/constants.ts b/packages/quicktype-core/src/language/Elixir/constants.ts new file mode 100644 index 000000000..89866c9f5 --- /dev/null +++ b/packages/quicktype-core/src/language/Elixir/constants.ts @@ -0,0 +1,101 @@ +export const forbiddenModuleNames = [ + "Access", + "Agent", + "Any", + "Application", + "ArgumentError", + "ArithmeticError", + "Atom", + "BadArityError", + "BadBooleanError", + "BadFunctionError", + "BadMapError", + "BadStructError", + "Base", + "Behaviour", + "Bitwise", + "Calendar", + "CaseClauseError", + "Code", + "Collectable", + "CondClauseError", + "Config", + "Date", + "DateTime", + "Dict", + "DynamicSupervisor", + "Enum", + "ErlangError", + "Exception", + "File", + "Float", + "Function", + "FunctionClauseError", + "GenEvent", + "GenServer", + "HashDict", + "HashSet", + "IO", + "Inspect", + "Integer", + "Kernel", + "KeyError", + "Keyword", + "List", + "Macro", + "Map", + "MapSet", + "MatchError", + "Module", + "Node", + "OptionParser", + "Path", + "Port", + "Process", + "Protocol", + "Range", + "Record", + "Regex", + "Registry", + "RuntimeError", + "Set", + "Stream", + "String", + "StringIO", + "Supervisor", + "SyntaxError", + "System", + "SystemLimitError", + "Task", + "Time", + "TokenMissingError", + "Tuple", + "URI", + "UndefinedFunctionError", + "UnicodeConversionError", + "Version", + "WithClauseError" +] as const; + +export const reservedWords = [ + "def", + "defmodule", + "use", + "import", + "alias", + "true", + "false", + "nil", + "when", + "and", + "or", + "not", + "in", + "fn", + "do", + "end", + "catch", + "rescue", + "after", + "else" +] as const; diff --git a/packages/quicktype-core/src/language/Elixir/index.ts b/packages/quicktype-core/src/language/Elixir/index.ts new file mode 100644 index 000000000..59a6f6eb3 --- /dev/null +++ b/packages/quicktype-core/src/language/Elixir/index.ts @@ -0,0 +1,2 @@ +export { ElixirTargetLanguage, elixirOptions } from "./language"; +export { ElixirRenderer } from "./ElixirRenderer"; diff --git a/packages/quicktype-core/src/language/Elixir/language.ts b/packages/quicktype-core/src/language/Elixir/language.ts new file mode 100644 index 000000000..fceaa7063 --- /dev/null +++ b/packages/quicktype-core/src/language/Elixir/language.ts @@ -0,0 +1,33 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { ElixirRenderer } from "./ElixirRenderer"; + +export const elixirOptions = { + justTypes: new BooleanOption("just-types", "Plain types only", false), + namespace: new StringOption("namespace", "Specify a module namespace", "NAME", "") +}; + +export class ElixirTargetLanguage extends TargetLanguage { + public constructor() { + super("Elixir", ["elixir"], "ex"); + } + + protected getOptions(): Array> { + return [elixirOptions.justTypes, elixirOptions.namespace]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + protected get defaultIndentation(): string { + return " "; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ElixirRenderer { + return new ElixirRenderer(this, renderContext, getOptionValues(elixirOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/Elixir/utils.ts b/packages/quicktype-core/src/language/Elixir/utils.ts new file mode 100644 index 000000000..4e81841fe --- /dev/null +++ b/packages/quicktype-core/src/language/Elixir/utils.ts @@ -0,0 +1,74 @@ +import unicode from "unicode-properties"; + +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + intToHex, + isLetterOrUnderscore, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap +} from "../../support/Strings"; + +function unicodeEscape(codePoint: number): string { + return `\\u{${intToHex(codePoint, 0)}}`; +} + +export function capitalizeFirstLetter(str: string): string { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); + +export function escapeDoubleQuotes(str: string): string { + return str.replace(/"/g, '\\"'); +} + +export function escapeNewLines(str: string): string { + return str.replace(/\n/g, "\\n"); +} + +const isStartCharacter = isLetterOrUnderscore; + +function isPartCharacter(utf16Unit: number): boolean { + const category: string = unicode.getCategory(utf16Unit); + return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); +} + +const legalizeName = legalizeCharacters(isPartCharacter); + +export function simpleNameStyle(original: string, uppercase: boolean): string { + if (/^[0-9]+$/.test(original)) { + original = `${original}N`; + } + + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + uppercase ? firstUpperWordStyle : allLowerWordStyle, + uppercase ? firstUpperWordStyle : allLowerWordStyle, + allUpperWordStyle, + allUpperWordStyle, + "", + isStartCharacter + ); +} + +export function memberNameStyle(original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + allLowerWordStyle, + allLowerWordStyle, + allLowerWordStyle, + allLowerWordStyle, + "_", + isStartCharacter + ); +} diff --git a/packages/quicktype-core/src/language/Elm.ts b/packages/quicktype-core/src/language/Elm/ElmRenderer.ts similarity index 84% rename from packages/quicktype-core/src/language/Elm.ts rename to packages/quicktype-core/src/language/Elm/ElmRenderer.ts index ced7837b4..8ae5a9d70 100644 --- a/packages/quicktype-core/src/language/Elm.ts +++ b/packages/quicktype-core/src/language/Elm/ElmRenderer.ts @@ -1,150 +1,20 @@ import { arrayIntercalate, mapContains } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../RendererOptions"; -import { type MultiWord, type Sourcelike, annotated, multiWord, parenIfNeeded, singleWord } from "../Source"; -import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - decapitalize, - firstUpperWordStyle, - isAscii, - isLetterOrUnderscore, - isLetterOrUnderscoreOrDigit, - legalizeCharacters, - splitIntoWords, - stringEscape -} from "../support/Strings"; -import { defined } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion } from "../TypeUtils"; - -export const elmOptions = { - justTypes: new BooleanOption("just-types", "Plain types only", false), - useList: new EnumOption("array-type", "Use Array or List", [ - ["array", false], - ["list", true] - ]), - // FIXME: Do this via a configurable named eventually. - moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") -}; - -export class ElmTargetLanguage extends TargetLanguage { - public constructor() { - super("Elm", ["elm"], "elm"); - } - - protected getOptions(): Array> { - return [elmOptions.justTypes, elmOptions.moduleName, elmOptions.useList]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ElmRenderer { - return new ElmRenderer(this, renderContext, getOptionValues(elmOptions, untypedOptionValues)); - } -} - -const forbiddenNames = [ - "if", - "then", - "else", - "case", - "of", - "let", - "in", - "infix", - "type", - "module", - "where", - "import", - "exposing", - "as", - "port", - "int", - "float", - "bool", - "string", - "Jenc", - "Jdec", - "Jpipe", - "always", - "identity", - "Array", - "List", - "Dict", - "Maybe", - "map", - "toList", - "makeArrayEncoder", - "makeDictEncoder", - "makeNullableEncoder", - "Int", - "True", - "False", - "String", - "Float" -]; - -const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); - -function elmNameStyle(original: string, upper: boolean): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - upper ? firstUpperWordStyle : allLowerWordStyle, - firstUpperWordStyle, - upper ? allUpperWordStyle : allLowerWordStyle, - allUpperWordStyle, - "", - isLetterOrUnderscore - ); -} - -const upperNamingFunction = funPrefixNamer("upper", n => elmNameStyle(n, true)); -const lowerNamingFunction = funPrefixNamer("lower", n => elmNameStyle(n, false)); - -interface RequiredOrOptional { - fallback: string; - reqOrOpt: string; -} - -function requiredOrOptional(p: ClassProperty): RequiredOrOptional { - function optional(fallback: string): RequiredOrOptional { - return { reqOrOpt: "Jpipe.optional", fallback }; - } - - const t = p.type; - if (p.isOptional || (t instanceof UnionType && nullableFromUnion(t) !== null)) { - return optional(" Nothing"); - } - - if (t.kind === "null") { - return optional(" ()"); - } - - return { reqOrOpt: "Jpipe.required", fallback: "" }; -} +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type MultiWord, type Sourcelike, annotated, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { decapitalize, stringEscape } from "../../support/Strings"; +import { defined } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; +import { matchType, nullableFromUnion } from "../../TypeUtils"; + +import { forbiddenNames } from "./constants"; +import { type elmOptions } from "./language"; +import { lowerNamingFunction, requiredOrOptional, upperNamingFunction } from "./utils"; interface TopLevelDependent { decoder?: Name; @@ -169,7 +39,7 @@ export class ElmRenderer extends ConvenienceRenderer { super(targetLanguage, renderContext); } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return forbiddenNames; } @@ -690,12 +560,12 @@ import Dict exposing (Dict, map, toList)`); this.ensureBlankLine(); this.emitMultiline(`makeDictEncoder : (a -> Jenc.Value) -> Dict String a -> Jenc.Value makeDictEncoder f dict = - Jenc.object (toList (Dict.map (\\k -> f) dict)) + Jenc.object (toList (Dict.map (\\k -> f) dict)) makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value makeNullableEncoder f m = - case m of - Just x -> f x - Nothing -> Jenc.null`); + case m of + Just x -> f x + Nothing -> Jenc.null`); } } diff --git a/packages/quicktype-core/src/language/Elm/constants.ts b/packages/quicktype-core/src/language/Elm/constants.ts new file mode 100644 index 000000000..e7a331f86 --- /dev/null +++ b/packages/quicktype-core/src/language/Elm/constants.ts @@ -0,0 +1,40 @@ +export const forbiddenNames = [ + "if", + "then", + "else", + "case", + "of", + "let", + "in", + "infix", + "type", + "module", + "where", + "import", + "exposing", + "as", + "port", + "int", + "float", + "bool", + "string", + "Jenc", + "Jdec", + "Jpipe", + "always", + "identity", + "Array", + "List", + "Dict", + "Maybe", + "map", + "toList", + "makeArrayEncoder", + "makeDictEncoder", + "makeNullableEncoder", + "Int", + "True", + "False", + "String", + "Float" +] as const; diff --git a/packages/quicktype-core/src/language/Elm/index.ts b/packages/quicktype-core/src/language/Elm/index.ts new file mode 100644 index 000000000..9dcf263d0 --- /dev/null +++ b/packages/quicktype-core/src/language/Elm/index.ts @@ -0,0 +1,2 @@ +export { ElmTargetLanguage, elmOptions } from "./language"; +export { ElmRenderer } from "./ElmRenderer"; diff --git a/packages/quicktype-core/src/language/Elm/language.ts b/packages/quicktype-core/src/language/Elm/language.ts new file mode 100644 index 000000000..6a193fbae --- /dev/null +++ b/packages/quicktype-core/src/language/Elm/language.ts @@ -0,0 +1,38 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { ElmRenderer } from "./ElmRenderer"; + +export const elmOptions = { + justTypes: new BooleanOption("just-types", "Plain types only", false), + useList: new EnumOption("array-type", "Use Array or List", [ + ["array", false], + ["list", true] + ]), + // FIXME: Do this via a configurable named eventually. + moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") +}; + +export class ElmTargetLanguage extends TargetLanguage { + public constructor() { + super("Elm", ["elm"], "elm"); + } + + protected getOptions(): Array> { + return [elmOptions.justTypes, elmOptions.moduleName, elmOptions.useList]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ElmRenderer { + return new ElmRenderer(this, renderContext, getOptionValues(elmOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/Elm/utils.ts b/packages/quicktype-core/src/language/Elm/utils.ts new file mode 100644 index 000000000..2b09265cf --- /dev/null +++ b/packages/quicktype-core/src/language/Elm/utils.ts @@ -0,0 +1,55 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + isAscii, + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + legalizeCharacters, + splitIntoWords +} from "../../support/Strings"; +import { type ClassProperty, UnionType } from "../../Type"; +import { nullableFromUnion } from "../../TypeUtils"; + +const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); + +function elmNameStyle(original: string, upper: boolean): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + upper ? firstUpperWordStyle : allLowerWordStyle, + firstUpperWordStyle, + upper ? allUpperWordStyle : allLowerWordStyle, + allUpperWordStyle, + "", + isLetterOrUnderscore + ); +} + +export const upperNamingFunction = funPrefixNamer("upper", n => elmNameStyle(n, true)); +export const lowerNamingFunction = funPrefixNamer("lower", n => elmNameStyle(n, false)); + +interface RequiredOrOptional { + fallback: string; + reqOrOpt: string; +} + +export function requiredOrOptional(p: ClassProperty): RequiredOrOptional { + function optional(fallback: string): RequiredOrOptional { + return { reqOrOpt: "Jpipe.optional", fallback }; + } + + const t = p.type; + if (p.isOptional || (t instanceof UnionType && nullableFromUnion(t) !== null)) { + return optional(" Nothing"); + } + + if (t.kind === "null") { + return optional(" ()"); + } + + return { reqOrOpt: "Jpipe.required", fallback: "" }; +} diff --git a/packages/quicktype-core/src/language/Golang.ts b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts similarity index 73% rename from packages/quicktype-core/src/language/Golang.ts rename to packages/quicktype-core/src/language/Golang/GolangRenderer.ts index 9a2081af6..708666452 100644 --- a/packages/quicktype-core/src/language/Golang.ts +++ b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts @@ -1,111 +1,17 @@ -import { type PrimitiveStringTypeKind, type StringTypeMapping, type TransformedStringTypeKind } from ".."; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; -import { - allUpperWordStyle, - camelCase, - combineWords, - firstUpperWordStyle, - isLetterOrUnderscore, - isLetterOrUnderscoreOrDigit, - legalizeCharacters, - splitIntoWords, - stringEscape -} from "../support/Strings"; -import { assert, defined } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type TypeKind, UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export const goOptions = { - justTypes: new BooleanOption("just-types", "Plain types only", false), - justTypesAndPackage: new BooleanOption("just-types-and-package", "Plain types with package only", false), - packageName: new StringOption("package", "Generated package name", "NAME", "main"), - multiFileOutput: new BooleanOption("multi-file-output", "Renders each top-level object in its own Go file", false), - fieldTags: new StringOption("field-tags", "list of tags which should be generated for fields", "TAGS", "json"), - omitEmpty: new BooleanOption( - "omit-empty", - 'If set, all non-required objects will be tagged with ",omitempty"', - false - ) -}; - -export class GoTargetLanguage extends TargetLanguage { - public constructor() { - super("Go", ["go", "golang"], "go"); - } - - protected getOptions(): Array> { - return [ - goOptions.justTypes, - goOptions.justTypesAndPackage, - goOptions.packageName, - goOptions.multiFileOutput, - goOptions.fieldTags, - goOptions.omitEmpty - ]; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - mapping.set("date-time", "date-time"); - return mapping; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): GoRenderer { - return new GoRenderer(this, renderContext, getOptionValues(goOptions, untypedOptionValues)); - } - - protected get defaultIndentation(): string { - return "\t"; - } -} - -const namingFunction = funPrefixNamer("namer", goNameStyle); - -const legalizeName = legalizeCharacters(isLetterOrUnderscoreOrDigit); - -function goNameStyle(original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - firstUpperWordStyle, - firstUpperWordStyle, - allUpperWordStyle, - allUpperWordStyle, - "", - isLetterOrUnderscore - ); -} - -const primitiveValueTypeKinds: TypeKind[] = ["integer", "double", "bool", "string"]; -const compoundTypeKinds: TypeKind[] = ["array", "class", "map", "enum"]; - -function isValueType(t: Type): boolean { - const kind = t.kind; - return primitiveValueTypeKinds.includes(kind) || kind === "class" || kind === "enum" || kind === "date-time"; -} - -function canOmitEmpty(cp: ClassProperty, omitEmptyOption: boolean): boolean { - if (!cp.isOptional) return false; - if (omitEmptyOption) return true; - const t = cp.type; - return !["union", "null", "any"].includes(t.kind); -} +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; +import { camelCase, stringEscape } from "../../support/Strings"; +import { assert, defined } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassProperty, type ClassType, type EnumType, type Type, type TypeKind, UnionType } from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { type goOptions } from "./language"; +import { canOmitEmpty, compoundTypeKinds, isValueType, namingFunction, primitiveValueTypeKinds } from "./utils"; export class GoRenderer extends ConvenienceRenderer { private readonly _topLevelUnmarshalNames = new Map(); @@ -495,117 +401,117 @@ export class GoRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this .emitMultiline(`func unmarshalUnion(data []byte, pi **int64, pf **float64, pb **bool, ps **string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) (bool, error) { - if pi != nil { - *pi = nil - } - if pf != nil { - *pf = nil - } - if pb != nil { - *pb = nil - } - if ps != nil { - *ps = nil - } - - dec := json.NewDecoder(bytes.NewReader(data)) - dec.UseNumber() - tok, err := dec.Token() - if err != nil { - return false, err - } - - switch v := tok.(type) { - case json.Number: - if pi != nil { - i, err := v.Int64() - if err == nil { - *pi = &i - return false, nil - } - } - if pf != nil { - f, err := v.Float64() - if err == nil { - *pf = &f - return false, nil - } - return false, errors.New("Unparsable number") - } - return false, errors.New("Union does not contain number") - case float64: - return false, errors.New("Decoder should not return float64") - case bool: - if pb != nil { - *pb = &v - return false, nil - } - return false, errors.New("Union does not contain bool") - case string: - if haveEnum { - return false, json.Unmarshal(data, pe) - } - if ps != nil { - *ps = &v - return false, nil - } - return false, errors.New("Union does not contain string") - case nil: - if nullable { - return false, nil - } - return false, errors.New("Union does not contain null") - case json.Delim: - if v == '{' { - if haveObject { - return true, json.Unmarshal(data, pc) - } - if haveMap { - return false, json.Unmarshal(data, pm) - } - return false, errors.New("Union does not contain object") - } - if v == '[' { - if haveArray { - return false, json.Unmarshal(data, pa) - } - return false, errors.New("Union does not contain array") - } - return false, errors.New("Cannot handle delimiter") - } - return false, errors.New("Cannot unmarshal union") + if pi != nil { + *pi = nil + } + if pf != nil { + *pf = nil + } + if pb != nil { + *pb = nil + } + if ps != nil { + *ps = nil + } + + dec := json.NewDecoder(bytes.NewReader(data)) + dec.UseNumber() + tok, err := dec.Token() + if err != nil { + return false, err + } + + switch v := tok.(type) { + case json.Number: + if pi != nil { + i, err := v.Int64() + if err == nil { + *pi = &i + return false, nil + } + } + if pf != nil { + f, err := v.Float64() + if err == nil { + *pf = &f + return false, nil + } + return false, errors.New("Unparsable number") + } + return false, errors.New("Union does not contain number") + case float64: + return false, errors.New("Decoder should not return float64") + case bool: + if pb != nil { + *pb = &v + return false, nil + } + return false, errors.New("Union does not contain bool") + case string: + if haveEnum { + return false, json.Unmarshal(data, pe) + } + if ps != nil { + *ps = &v + return false, nil + } + return false, errors.New("Union does not contain string") + case nil: + if nullable { + return false, nil + } + return false, errors.New("Union does not contain null") + case json.Delim: + if v == '{' { + if haveObject { + return true, json.Unmarshal(data, pc) + } + if haveMap { + return false, json.Unmarshal(data, pm) + } + return false, errors.New("Union does not contain object") + } + if v == '[' { + if haveArray { + return false, json.Unmarshal(data, pa) + } + return false, errors.New("Union does not contain array") + } + return false, errors.New("Cannot handle delimiter") + } + return false, errors.New("Cannot unmarshal union") } func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) ([]byte, error) { - if pi != nil { - return json.Marshal(*pi) - } - if pf != nil { - return json.Marshal(*pf) - } - if pb != nil { - return json.Marshal(*pb) - } - if ps != nil { - return json.Marshal(*ps) - } - if haveArray { - return json.Marshal(pa) - } - if haveObject { - return json.Marshal(pc) - } - if haveMap { - return json.Marshal(pm) - } - if haveEnum { - return json.Marshal(pe) - } - if nullable { - return json.Marshal(nil) - } - return nil, errors.New("Union must not be null") + if pi != nil { + return json.Marshal(*pi) + } + if pf != nil { + return json.Marshal(*pf) + } + if pb != nil { + return json.Marshal(*pb) + } + if ps != nil { + return json.Marshal(*ps) + } + if haveArray { + return json.Marshal(pa) + } + if haveObject { + return json.Marshal(pc) + } + if haveMap { + return json.Marshal(pm) + } + if haveEnum { + return json.Marshal(pe) + } + if nullable { + return json.Marshal(nil) + } + return nil, errors.New("Union must not be null") }`); this.endFile(); } diff --git a/packages/quicktype-core/src/language/Golang/index.ts b/packages/quicktype-core/src/language/Golang/index.ts new file mode 100644 index 000000000..04d294d43 --- /dev/null +++ b/packages/quicktype-core/src/language/Golang/index.ts @@ -0,0 +1,2 @@ +export { GoTargetLanguage, goOptions } from "./language"; +export { GoRenderer } from "./GolangRenderer"; diff --git a/packages/quicktype-core/src/language/Golang/language.ts b/packages/quicktype-core/src/language/Golang/language.ts new file mode 100644 index 000000000..f38edff15 --- /dev/null +++ b/packages/quicktype-core/src/language/Golang/language.ts @@ -0,0 +1,60 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { GoRenderer } from "./GolangRenderer"; + +export const goOptions = { + justTypes: new BooleanOption("just-types", "Plain types only", false), + justTypesAndPackage: new BooleanOption("just-types-and-package", "Plain types with package only", false), + packageName: new StringOption("package", "Generated package name", "NAME", "main"), + multiFileOutput: new BooleanOption("multi-file-output", "Renders each top-level object in its own Go file", false), + fieldTags: new StringOption("field-tags", "list of tags which should be generated for fields", "TAGS", "json"), + omitEmpty: new BooleanOption( + "omit-empty", + 'If set, all non-required objects will be tagged with ",omitempty"', + false + ) +}; + +export class GoTargetLanguage extends TargetLanguage { + public constructor() { + super("Go", ["go", "golang"], "go"); + } + + protected getOptions(): Array> { + return [ + goOptions.justTypes, + goOptions.justTypesAndPackage, + goOptions.packageName, + goOptions.multiFileOutput, + goOptions.fieldTags, + goOptions.omitEmpty + ]; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + mapping.set("date-time", "date-time"); + return mapping; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): GoRenderer { + return new GoRenderer(this, renderContext, getOptionValues(goOptions, untypedOptionValues)); + } + + protected get defaultIndentation(): string { + return "\t"; + } +} diff --git a/packages/quicktype-core/src/language/Golang/utils.ts b/packages/quicktype-core/src/language/Golang/utils.ts new file mode 100644 index 000000000..ce67443af --- /dev/null +++ b/packages/quicktype-core/src/language/Golang/utils.ts @@ -0,0 +1,44 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + legalizeCharacters, + splitIntoWords +} from "../../support/Strings"; +import { type ClassProperty, type Type, type TypeKind } from "../../Type"; + +export const namingFunction = funPrefixNamer("namer", goNameStyle); + +const legalizeName = legalizeCharacters(isLetterOrUnderscoreOrDigit); + +function goNameStyle(original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + firstUpperWordStyle, + firstUpperWordStyle, + allUpperWordStyle, + allUpperWordStyle, + "", + isLetterOrUnderscore + ); +} + +export const primitiveValueTypeKinds: TypeKind[] = ["integer", "double", "bool", "string"]; +export const compoundTypeKinds: TypeKind[] = ["array", "class", "map", "enum"]; + +export function isValueType(t: Type): boolean { + const kind = t.kind; + return primitiveValueTypeKinds.includes(kind) || kind === "class" || kind === "enum" || kind === "date-time"; +} + +export function canOmitEmpty(cp: ClassProperty, omitEmptyOption: boolean): boolean { + if (!cp.isOptional) return false; + if (omitEmptyOption) return true; + const t = cp.type; + return !["union", "null", "any"].includes(t.kind); +} diff --git a/packages/quicktype-core/src/language/Haskell.ts b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts similarity index 82% rename from packages/quicktype-core/src/language/Haskell.ts rename to packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts index 16cd16a35..b5a2143b4 100644 --- a/packages/quicktype-core/src/language/Haskell.ts +++ b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts @@ -1,138 +1,18 @@ import { mapContains } from "collection-utils"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../RendererOptions"; -import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../Source"; -import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - firstUpperWordStyle, - isAscii, - isLetterOrUnderscore, - isLetterOrUnderscoreOrDigit, - legalizeCharacters, - splitIntoWords, - stringEscape -} from "../support/Strings"; -import { TargetLanguage } from "../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion } from "../TypeUtils"; - -export const haskellOptions = { - justTypes: new BooleanOption("just-types", "Plain types only", false), - useList: new EnumOption("array-type", "Use Array or List", [ - ["array", false], - ["list", true] - ]), - moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") -}; - -export class HaskellTargetLanguage extends TargetLanguage { - public constructor() { - super("Haskell", ["haskell"], "haskell"); - } - - protected getOptions(): Array> { - return [haskellOptions.justTypes, haskellOptions.moduleName, haskellOptions.useList]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): HaskellRenderer { - return new HaskellRenderer(this, renderContext, getOptionValues(haskellOptions, untypedOptionValues)); - } -} - -const forbiddenNames = [ - // reserved keywords - "as", - "case", - "class", - "data", - "default", - "deriving", - "do", - "else", - "family", - "forall", - "foreign", - "hiding", - "if", - "import", - "in", - "infix", - "infixl", - "infixr", - "instance", - "let", - "of", - "mdo", - "module", - "newtype", - "proc", - "qualified", - "rec", - "then", - "type", - "where", - // in Prelude keywords ... - "id", - "Array", - "HashMap", - "Map", - "Maybe", - "Bool", - "Int", - "True", - "False", - "Enum", - // Aeson types - "encode", - "decode", - "text", - "Text", - "Value", - "Object", - "Result", - "Series", - "Error" -]; - -const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); - -function haskellNameStyle(original: string, upper: boolean): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - upper ? firstUpperWordStyle : allLowerWordStyle, - firstUpperWordStyle, - upper ? allUpperWordStyle : allLowerWordStyle, - allUpperWordStyle, - "", - isLetterOrUnderscore - ); -} - -const upperNamingFunction = funPrefixNamer("upper", n => haskellNameStyle(n, true)); -const lowerNamingFunction = funPrefixNamer("lower", n => haskellNameStyle(n, false)); +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { stringEscape } from "../../support/Strings"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; +import { matchType, nullableFromUnion } from "../../TypeUtils"; + +import { forbiddenNames } from "./constants"; +import { type haskellOptions } from "./language"; +import { lowerNamingFunction, upperNamingFunction } from "./utils"; export class HaskellRenderer extends ConvenienceRenderer { public constructor( @@ -143,7 +23,7 @@ export class HaskellRenderer extends ConvenienceRenderer { super(targetLanguage, renderContext); } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return forbiddenNames; } diff --git a/packages/quicktype-core/src/language/Haskell/constants.ts b/packages/quicktype-core/src/language/Haskell/constants.ts new file mode 100644 index 000000000..5e09e6702 --- /dev/null +++ b/packages/quicktype-core/src/language/Haskell/constants.ts @@ -0,0 +1,54 @@ +export const forbiddenNames = [ + // reserved keywords + "as", + "case", + "class", + "data", + "default", + "deriving", + "do", + "else", + "family", + "forall", + "foreign", + "hiding", + "if", + "import", + "in", + "infix", + "infixl", + "infixr", + "instance", + "let", + "of", + "mdo", + "module", + "newtype", + "proc", + "qualified", + "rec", + "then", + "type", + "where", + // in Prelude keywords ... + "id", + "Array", + "HashMap", + "Map", + "Maybe", + "Bool", + "Int", + "True", + "False", + "Enum", + // Aeson types + "encode", + "decode", + "text", + "Text", + "Value", + "Object", + "Result", + "Series", + "Error" +] as const; diff --git a/packages/quicktype-core/src/language/Haskell/index.ts b/packages/quicktype-core/src/language/Haskell/index.ts new file mode 100644 index 000000000..9658076f0 --- /dev/null +++ b/packages/quicktype-core/src/language/Haskell/index.ts @@ -0,0 +1,2 @@ +export { HaskellTargetLanguage, haskellOptions } from "./language"; +export { HaskellRenderer } from "./HaskellRenderer"; diff --git a/packages/quicktype-core/src/language/Haskell/language.ts b/packages/quicktype-core/src/language/Haskell/language.ts new file mode 100644 index 000000000..84ad167f3 --- /dev/null +++ b/packages/quicktype-core/src/language/Haskell/language.ts @@ -0,0 +1,37 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { HaskellRenderer } from "./HaskellRenderer"; + +export const haskellOptions = { + justTypes: new BooleanOption("just-types", "Plain types only", false), + useList: new EnumOption("array-type", "Use Array or List", [ + ["array", false], + ["list", true] + ]), + moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") +}; + +export class HaskellTargetLanguage extends TargetLanguage { + public constructor() { + super("Haskell", ["haskell"], "haskell"); + } + + protected getOptions(): Array> { + return [haskellOptions.justTypes, haskellOptions.moduleName, haskellOptions.useList]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): HaskellRenderer { + return new HaskellRenderer(this, renderContext, getOptionValues(haskellOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/Haskell/utils.ts b/packages/quicktype-core/src/language/Haskell/utils.ts new file mode 100644 index 000000000..3f4b1357f --- /dev/null +++ b/packages/quicktype-core/src/language/Haskell/utils.ts @@ -0,0 +1,31 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + isAscii, + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + legalizeCharacters, + splitIntoWords +} from "../../support/Strings"; + +const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); + +function haskellNameStyle(original: string, upper: boolean): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + upper ? firstUpperWordStyle : allLowerWordStyle, + firstUpperWordStyle, + upper ? allUpperWordStyle : allLowerWordStyle, + allUpperWordStyle, + "", + isLetterOrUnderscore + ); +} + +export const upperNamingFunction = funPrefixNamer("upper", n => haskellNameStyle(n, true)); +export const lowerNamingFunction = funPrefixNamer("lower", n => haskellNameStyle(n, false)); diff --git a/packages/quicktype-core/src/language/JSONSchema.ts b/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts similarity index 75% rename from packages/quicktype-core/src/language/JSONSchema.ts rename to packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts index 978906075..9b24306fa 100644 --- a/packages/quicktype-core/src/language/JSONSchema.ts +++ b/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts @@ -1,73 +1,19 @@ import { iterableFirst, mapFirst } from "collection-utils"; -import { addDescriptionToSchema } from "../attributes/Description"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { type Option } from "../RendererOptions"; -import { - allUpperWordStyle, - combineWords, - firstUpperWordStyle, - legalizeCharacters, - splitIntoWords -} from "../support/Strings"; -import { defined, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; +import { addDescriptionToSchema } from "../../attributes/Description"; +import { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type Name, type Namer } from "../../Naming"; +import { defined, panic } from "../../support/Support"; import { type EnumType, type ObjectType, type Type, type UnionType, transformedStringTypeTargetTypeKindsMap -} from "../Type"; -import { type StringTypeMapping, getNoStringTypeMapping } from "../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchTypeExhaustive } from "../TypeUtils"; - -export class JSONSchemaTargetLanguage extends TargetLanguage { - public constructor() { - super("JSON Schema", ["schema", "json-schema"], "schema"); - } - - protected getOptions(): Array> { - return []; - } - - public get stringTypeMapping(): StringTypeMapping { - return getNoStringTypeMapping(); - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsFullObjectType(): boolean { - return true; - } +} from "../../Type"; +import { matchTypeExhaustive } from "../../TypeUtils"; - protected makeRenderer(renderContext: RenderContext, _untypedOptionValues: FixMeOptionsType): JSONSchemaRenderer { - return new JSONSchemaRenderer(this, renderContext); - } -} - -const namingFunction = funPrefixNamer("namer", jsonNameStyle); - -const legalizeName = legalizeCharacters(cp => cp >= 32 && cp < 128 && cp !== 0x2f /* slash */); - -function jsonNameStyle(original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - firstUpperWordStyle, - firstUpperWordStyle, - allUpperWordStyle, - allUpperWordStyle, - "", - _ => true - ); -} +import { namingFunction } from "./utils"; interface Schema { // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/quicktype-core/src/language/JSONSchema/index.ts b/packages/quicktype-core/src/language/JSONSchema/index.ts new file mode 100644 index 000000000..6cb0b7958 --- /dev/null +++ b/packages/quicktype-core/src/language/JSONSchema/index.ts @@ -0,0 +1,2 @@ +export { JSONSchemaTargetLanguage } from "./language"; +export { JSONSchemaRenderer } from "./JSONSchemaRenderer"; diff --git a/packages/quicktype-core/src/language/JSONSchema/language.ts b/packages/quicktype-core/src/language/JSONSchema/language.ts new file mode 100644 index 000000000..7374537a1 --- /dev/null +++ b/packages/quicktype-core/src/language/JSONSchema/language.ts @@ -0,0 +1,33 @@ +import { type RenderContext } from "../../Renderer"; +import { type Option } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type StringTypeMapping, getNoStringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { JSONSchemaRenderer } from "./JSONSchemaRenderer"; + +export class JSONSchemaTargetLanguage extends TargetLanguage { + public constructor() { + super("JSON Schema", ["schema", "json-schema"], "schema"); + } + + protected getOptions(): Array> { + return []; + } + + public get stringTypeMapping(): StringTypeMapping { + return getNoStringTypeMapping(); + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsFullObjectType(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, _untypedOptionValues: FixMeOptionsType): JSONSchemaRenderer { + return new JSONSchemaRenderer(this, renderContext); + } +} diff --git a/packages/quicktype-core/src/language/JSONSchema/utils.ts b/packages/quicktype-core/src/language/JSONSchema/utils.ts new file mode 100644 index 000000000..5c3a10e48 --- /dev/null +++ b/packages/quicktype-core/src/language/JSONSchema/utils.ts @@ -0,0 +1,26 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + legalizeCharacters, + splitIntoWords +} from "../../support/Strings"; + +export const namingFunction = funPrefixNamer("namer", jsonNameStyle); + +const legalizeName = legalizeCharacters(cp => cp >= 32 && cp < 128 && cp !== 0x2f /* slash */); + +function jsonNameStyle(original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + firstUpperWordStyle, + firstUpperWordStyle, + allUpperWordStyle, + allUpperWordStyle, + "", + _ => true + ); +} diff --git a/packages/quicktype-core/src/language/Java/DateTimeProvider.ts b/packages/quicktype-core/src/language/Java/DateTimeProvider.ts new file mode 100644 index 000000000..78228db01 --- /dev/null +++ b/packages/quicktype-core/src/language/Java/DateTimeProvider.ts @@ -0,0 +1,261 @@ +import { type Sourcelike } from "../../Source"; + +import { type JavaRenderer } from "./JavaRenderer"; + +export abstract class JavaDateTimeProvider { + public constructor( + protected readonly _renderer: JavaRenderer, + protected readonly _className: string + ) {} + + public abstract keywords: string[]; + + public abstract dateTimeImports: string[]; + + public abstract dateImports: string[]; + + public abstract timeImports: string[]; + + public abstract converterImports: string[]; + + public abstract dateTimeType: string; + + public abstract dateType: string; + + public abstract timeType: string; + + public abstract dateTimeJacksonAnnotations: string[]; + + public abstract dateJacksonAnnotations: string[]; + + public abstract timeJacksonAnnotations: string[]; + + public abstract emitDateTimeConverters(): void; + + public shouldEmitDateTimeConverter = true; + + public shouldEmitTimeConverter = true; + + public shouldEmitDateConverter = true; + + public abstract convertStringToDateTime(variable: Sourcelike): Sourcelike; + public abstract convertStringToTime(variable: Sourcelike): Sourcelike; + public abstract convertStringToDate(variable: Sourcelike): Sourcelike; + + public abstract convertDateTimeToString(variable: Sourcelike): Sourcelike; + public abstract convertTimeToString(variable: Sourcelike): Sourcelike; + public abstract convertDateToString(variable: Sourcelike): Sourcelike; +} + +export class Java8DateTimeProvider extends JavaDateTimeProvider { + public keywords = [ + "LocalDate", + "OffsetDateTime", + "OffsetTime", + "ZoneOffset", + "ZonedDateTime", + "DateTimeFormatter", + "DateTimeFormatterBuilder", + "ChronoField" + ]; + + public dateTimeImports: string[] = ["java.time.OffsetDateTime"]; + + public dateImports: string[] = ["java.time.LocalDate"]; + + public timeImports: string[] = ["java.time.OffsetTime"]; + + public converterImports: string[] = [ + "java.time.LocalDate", + "java.time.OffsetDateTime", + "java.time.OffsetTime", + "java.time.ZoneOffset", + "java.time.ZonedDateTime", + "java.time.format.DateTimeFormatter", + "java.time.format.DateTimeFormatterBuilder", + "java.time.temporal.ChronoField" + ]; + + public dateTimeType = "OffsetDateTime"; + + public dateType = "LocalDate"; + + public timeType = "OffsetTime"; + + public dateTimeJacksonAnnotations: string[] = []; + + public dateJacksonAnnotations: string[] = []; + + public timeJacksonAnnotations: string[] = []; + + public emitDateTimeConverters(): void { + this._renderer.ensureBlankLine(); + this._renderer.emitLine( + "private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()" + ); + this._renderer.indent(() => + this._renderer.indent(() => { + this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_DATE_TIME)"); + this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)"); + this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_INSTANT)"); + this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))'); + this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))'); + this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))'); + this._renderer.emitLine(".toFormatter()"); + this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); + }) + ); + this._renderer.ensureBlankLine(); + this._renderer.emitBlock("public static OffsetDateTime parseDateTimeString(String str)", () => { + this._renderer.emitLine( + "return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();" + ); + }); + + this._renderer.ensureBlankLine(); + this._renderer.emitLine( + "private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()" + ); + this._renderer.indent(() => + this._renderer.indent(() => { + this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_TIME)"); + this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)"); + this._renderer.emitLine(".parseDefaulting(ChronoField.YEAR, 2020)"); + this._renderer.emitLine(".parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)"); + this._renderer.emitLine(".parseDefaulting(ChronoField.DAY_OF_MONTH, 1)"); + this._renderer.emitLine(".toFormatter()"); + this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); + }) + ); + this._renderer.ensureBlankLine(); + this._renderer.emitBlock("public static OffsetTime parseTimeString(String str)", () => { + this._renderer.emitLine( + "return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();" + ); + }); + } + + public convertStringToDateTime(variable: Sourcelike): Sourcelike { + return [this._className, ".parseDateTimeString(", variable, ")"]; + } + + public convertStringToTime(variable: Sourcelike): Sourcelike { + return [this._className, ".parseTimeString(", variable, ")"]; + } + + public convertStringToDate(variable: Sourcelike): Sourcelike { + return ["LocalDate.parse(", variable, ")"]; + } + + public convertDateTimeToString(variable: Sourcelike): Sourcelike { + return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME)"]; + } + + public convertTimeToString(variable: Sourcelike): Sourcelike { + return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_TIME)"]; + } + + public convertDateToString(variable: Sourcelike): Sourcelike { + return [variable, ".format(java.time.format.DateTimeFormatter.ISO_DATE)"]; + } +} +export class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { + public keywords = ["SimpleDateFormat", "Date"]; + + public dateTimeImports: string[] = ["java.util.Date"]; + + public dateImports: string[] = ["java.util.Date"]; + + public timeImports: string[] = ["java.util.Date"]; + + public converterImports: string[] = ["java.util.Date", "java.text.SimpleDateFormat"]; + + public dateTimeType = "Date"; + + public dateType = "Date"; + + public timeType = "Date"; + + public dateTimeJacksonAnnotations: string[] = [ + '@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ssX", timezone = "UTC")' + ]; + + public dateJacksonAnnotations: string[] = ['@JsonFormat(pattern = "yyyy-MM-dd")']; + + public timeJacksonAnnotations: string[] = ['@JsonFormat(pattern = "HH:mm:ssX", timezone = "UTC")']; + + public shouldEmitTimeConverter = false; + + public shouldEmitDateConverter = false; + + public emitDateTimeConverters(): void { + this._renderer.ensureBlankLine(); + this._renderer.emitLine("private static final String[] DATE_TIME_FORMATS = {"); + this._renderer.indent(() => + this._renderer.indent(() => { + this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.SX\","); + this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.S\","); + this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ssX\","); + this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss\","); + this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.SX",'); + this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.S",'); + this._renderer.emitLine('"yyyy-MM-dd HH:mm:ssX",'); + this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss",'); + this._renderer.emitLine('"HH:mm:ss.SZ",'); + this._renderer.emitLine('"HH:mm:ss.S",'); + this._renderer.emitLine('"HH:mm:ssZ",'); + this._renderer.emitLine('"HH:mm:ss",'); + this._renderer.emitLine('"yyyy-MM-dd",'); + }) + ); + this._renderer.emitLine("};"); + this._renderer.ensureBlankLine(); + this._renderer.emitBlock("public static Date parseAllDateTimeString(String str)", () => { + this._renderer.emitBlock("for (String format : DATE_TIME_FORMATS)", () => { + this._renderer.emitIgnoredTryCatchBlock(() => { + this._renderer.emitLine("return new SimpleDateFormat(format).parse(str);"); + }); + }); + this._renderer.emitLine("return null;"); + }); + + this._renderer.ensureBlankLine(); + this._renderer.emitBlock("public static String serializeDateTime(Date datetime)", () => { + this._renderer.emitLine("return new SimpleDateFormat(\"yyyy-MM-dd'T'hh:mm:ssZ\").format(datetime);"); + }); + + this._renderer.ensureBlankLine(); + this._renderer.emitBlock("public static String serializeDate(Date datetime)", () => { + this._renderer.emitLine('return new SimpleDateFormat("yyyy-MM-dd").format(datetime);'); + }); + + this._renderer.ensureBlankLine(); + this._renderer.emitBlock("public static String serializeTime(Date datetime)", () => { + this._renderer.emitLine('return new SimpleDateFormat("hh:mm:ssZ").format(datetime);'); + }); + } + + public convertStringToDateTime(variable: Sourcelike): Sourcelike { + return [this._className, ".parseAllDateTimeString(", variable, ")"]; + } + + public convertStringToTime(variable: Sourcelike): Sourcelike { + return [this._className, ".parseAllDateTimeString(", variable, ")"]; + } + + public convertStringToDate(variable: Sourcelike): Sourcelike { + return [this._className, ".parseAllDateTimeString(", variable, ")"]; + } + + public convertDateTimeToString(variable: Sourcelike): Sourcelike { + return [this._className, ".serializeDateTime(", variable, ")"]; + } + + public convertTimeToString(variable: Sourcelike): Sourcelike { + return [this._className, ".serializeTime(", variable, ")"]; + } + + public convertDateToString(variable: Sourcelike): Sourcelike { + return [this._className, ".serializeDate(", variable, ")"]; + } +} diff --git a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts new file mode 100644 index 000000000..3329b61cd --- /dev/null +++ b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts @@ -0,0 +1,567 @@ +import { type Name } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike } from "../../Source"; +import { assertNever, panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, type TypeKind, UnionType } from "../../Type"; +import { removeNullFromUnion } from "../../TypeUtils"; + +import { JavaRenderer } from "./JavaRenderer"; +import { type javaOptions } from "./language"; +import { stringEscape } from "./utils"; + + +export class JacksonRenderer extends JavaRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + options: OptionValues + ) { + super(targetLanguage, renderContext, options); + } + + protected readonly _converterKeywords: string[] = [ + "JsonProperty", + "JsonDeserialize", + "JsonDeserializer", + "JsonSerialize", + "JsonSerializer", + "JsonParser", + "JsonProcessingException", + "DeserializationContext", + "SerializerProvider" + ]; + + protected emitClassAttributes(c: ClassType, _className: Name): void { + if (c.getProperties().size === 0) + this.emitLine("@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)"); + + super.emitClassAttributes(c, _className); + } + + protected annotationsForAccessor( + _c: ClassType, + _className: Name, + _propertyName: Name, + jsonName: string, + p: ClassProperty, + _isSetter: boolean + ): string[] { + const superAnnotations = super.annotationsForAccessor(_c, _className, _propertyName, jsonName, p, _isSetter); + + const annotations: string[] = ['@JsonProperty("' + stringEscape(jsonName) + '")']; + + switch (p.type.kind) { + case "date-time": + this._dateTimeProvider.dateTimeJacksonAnnotations.forEach(annotation => annotations.push(annotation)); + break; + case "date": + this._dateTimeProvider.dateJacksonAnnotations.forEach(annotation => annotations.push(annotation)); + break; + case "time": + this._dateTimeProvider.timeJacksonAnnotations.forEach(annotation => annotations.push(annotation)); + break; + default: + break; + } + + return [...superAnnotations, ...annotations]; + } + + protected importsForType(t: ClassType | UnionType | EnumType): string[] { + if (t instanceof ClassType) { + const imports = super.importsForType(t); + imports.push("com.fasterxml.jackson.annotation.*"); + return imports; + } + + if (t instanceof UnionType) { + const imports = super.importsForType(t); + imports.push( + "java.io.IOException", + "com.fasterxml.jackson.core.*", + "com.fasterxml.jackson.databind.*", + "com.fasterxml.jackson.databind.annotation.*" + ); + if (this._options.useList) { + imports.push("com.fasterxml.jackson.core.type.*"); + } + + return imports; + } + + if (t instanceof EnumType) { + const imports = super.importsForType(t); + imports.push("com.fasterxml.jackson.annotation.*"); + return imports; + } + + return assertNever(t); + } + + protected emitUnionAttributes(_u: UnionType, unionName: Name): void { + this.emitLine("@JsonDeserialize(using = ", unionName, ".Deserializer.class)"); + this.emitLine("@JsonSerialize(using = ", unionName, ".Serializer.class)"); + } + + protected emitUnionSerializer(u: UnionType, unionName: Name): void { + const stringBasedObjects: TypeKind[] = ["uuid", "time", "date", "date-time"]; + + const tokenCase = (tokenType: string): void => { + this.emitLine("case ", tokenType, ":"); + }; + + const emitNullDeserializer = (): void => { + this.indent(() => { + tokenCase("VALUE_NULL"); + this.indent(() => this.emitLine("break;")); + }); + }; + + const emitDeserializerCodeForStringObjects = ( + fieldName: Sourcelike, + kind: TypeKind, + parseFrom: string + ): void => { + switch (kind) { + case "date": + this.emitLine( + "value.", + fieldName, + " = ", + this._dateTimeProvider.convertStringToDate(parseFrom), + ";" + ); + + break; + case "time": + this.emitLine( + "value.", + fieldName, + " = ", + this._dateTimeProvider.convertStringToTime(parseFrom), + ";" + ); + + break; + case "date-time": + this.emitLine( + "value.", + fieldName, + " = ", + this._dateTimeProvider.convertStringToDateTime(parseFrom), + ";" + ); + break; + case "uuid": + this.emitLine("value.", fieldName, " = UUID.fromString(", parseFrom, ");"); + + break; + default: + return panic("Requested type isnt an object!"); + } + }; + + const emitDeserializeType = (t: Type, variableFieldName = ""): void => { + const { fieldName } = this.unionField(u, t); + const rendered = this.javaTypeWithoutGenerics(true, t); + if (this._options.useList && t instanceof ArrayType) { + this.emitLine( + "value.", + fieldName, + " = jsonParser.readValueAs(new TypeReference<", + rendered, + ">() {});" + ); + } else if (stringBasedObjects.some(stringBasedTypeKind => t.kind === stringBasedTypeKind)) { + emitDeserializerCodeForStringObjects(fieldName, t.kind, variableFieldName); + } else if (t.kind === "string") { + this.emitLine("value.", fieldName, " = ", variableFieldName, ";"); + } else if (t.kind === "enum") { + const { fieldType } = this.unionField(u, t, true); + this.emitLine("value.", fieldName, " = ", fieldType, ".forValue(", variableFieldName, ");"); + } else { + this.emitLine("value.", fieldName, " = jsonParser.readValueAs(", rendered, ".class);"); + } + }; + + const emitDeserializer = (tokenTypes: string[], kind: TypeKind): void => { + const t = u.findMember(kind); + if (t === undefined) return; + + this.indent(() => { + for (const tokenType of tokenTypes) { + tokenCase(tokenType); + } + + this.indent(() => { + emitDeserializeType(t); + this.emitLine("break;"); + }); + }); + }; + + const emitStringDeserializer = (): void => { + const enumType = u.findMember("enum"); + const stringType = u.findMember("string"); + + if ( + stringBasedObjects.every(kind => u.findMember(kind) === undefined) && + stringType === undefined && + enumType === undefined + ) + return; + + this.indent(() => { + tokenCase("VALUE_STRING"); + + this.indent(() => { + const fromVariable = "string"; + this.emitLine("String " + fromVariable + " = jsonParser.readValueAs(String.class);"); + + stringBasedObjects.forEach(kind => { + const type = u.findMember(kind); + if (type !== undefined) { + this.emitIgnoredTryCatchBlock(() => { + emitDeserializeType(type, fromVariable); + }); + } + }); + + if (enumType !== undefined) { + this.emitIgnoredTryCatchBlock(() => { + emitDeserializeType(enumType, fromVariable); + }); + } + + // String should be the last one if exists, because it cannot fail, unlike the parsers. + if (stringType !== undefined) { + emitDeserializeType(stringType, fromVariable); + } + + this.emitLine("break;"); + }); + }); + }; + + const emitNumberDeserializer = (): void => { + const integerType = u.findMember("integer"); + const doubleType = u.findMember("double"); + if (doubleType === undefined && integerType === undefined) return; + + this.indent(() => { + tokenCase("VALUE_NUMBER_INT"); + if (integerType !== undefined) { + this.indent(() => { + emitDeserializeType(integerType); + this.emitLine("break;"); + }); + } + + if (doubleType !== undefined) { + tokenCase("VALUE_NUMBER_FLOAT"); + this.indent(() => { + emitDeserializeType(doubleType); + this.emitLine("break;"); + }); + } + }); + }; + + const customObjectSerializer: TypeKind[] = ["time", "date", "date-time"]; + + const serializerCodeForType = (type: Type, fieldName: Sourcelike): Sourcelike => { + switch (type.kind) { + case "date": + return this._dateTimeProvider.convertDateToString(fieldName); + case "time": + return this._dateTimeProvider.convertTimeToString(fieldName); + case "date-time": + return this._dateTimeProvider.convertDateTimeToString(fieldName); + default: + return panic("Requested type doesn't have custom serializer code!"); + } + }; + + const emitSerializeType = (t: Type): void => { + let { fieldName } = this.unionField(u, t, true); + + this.emitBlock(["if (obj.", fieldName, " != null)"], () => { + if (customObjectSerializer.some(customSerializerType => t.kind === customSerializerType)) { + this.emitLine("jsonGenerator.writeObject(", serializerCodeForType(t, ["obj.", fieldName]), ");"); + } else { + this.emitLine("jsonGenerator.writeObject(obj.", fieldName, ");"); + } + + this.emitLine("return;"); + }); + }; + + const [maybeNull, nonNulls] = removeNullFromUnion(u); + + this.ensureBlankLine(); + this.emitBlock(["static class Deserializer extends JsonDeserializer<", unionName, ">"], () => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + unionName, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException" + ], + () => { + this.emitLine(unionName, " value = new ", unionName, "();"); + this.emitLine("switch (jsonParser.currentToken()) {"); + if (maybeNull !== null) emitNullDeserializer(); + emitNumberDeserializer(); + emitDeserializer(["VALUE_TRUE", "VALUE_FALSE"], "bool"); + emitStringDeserializer(); + emitDeserializer(["START_ARRAY"], "array"); + emitDeserializer(["START_OBJECT"], "class"); + emitDeserializer(["START_OBJECT"], "map"); + this.indent(() => + this.emitLine('default: throw new IOException("Cannot deserialize ', unionName, '");') + ); + this.emitLine("}"); + this.emitLine("return value;"); + } + ); + }); + this.ensureBlankLine(); + this.emitBlock(["static class Serializer extends JsonSerializer<", unionName, ">"], () => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public void serialize(", + unionName, + " obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException" + ], + () => { + for (const t of nonNulls) { + emitSerializeType(t); + } + + if (maybeNull !== null) { + this.emitLine("jsonGenerator.writeNull();"); + } else { + this.emitLine('throw new IOException("', unionName, ' must not be null");'); + } + } + ); + }); + } + + protected emitEnumSerializationAttributes(_e: EnumType): void { + this.emitLine("@JsonValue"); + } + + protected emitEnumDeserializationAttributes(_e: EnumType): void { + this.emitLine("@JsonCreator"); + } + + protected emitOffsetDateTimeConverterModule(): void { + this.emitLine("SimpleModule module = new SimpleModule();"); + + if (this._dateTimeProvider.shouldEmitDateTimeConverter) { + this.emitLine( + "module.addDeserializer(", + this._dateTimeProvider.dateTimeType, + ".class, new JsonDeserializer<", + this._dateTimeProvider.dateTimeType, + ">() {" + ); + this.indent(() => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + this._dateTimeProvider.dateTimeType, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", + "throws IOException, JsonProcessingException" + ], + () => { + this.emitLine("String value = jsonParser.getText();"); + this.emitLine("return ", this._dateTimeProvider.convertStringToDateTime("value"), ";"); + } + ); + }); + this.emitLine("});"); + } + + if (!this._dateTimeProvider.shouldEmitTimeConverter) { + this.emitLine( + "module.addDeserializer(", + this._dateTimeProvider.timeType, + ".class, new JsonDeserializer<", + this._dateTimeProvider.timeType, + ">() {" + ); + this.indent(() => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + this._dateTimeProvider.timeType, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", + "throws IOException, JsonProcessingException" + ], + () => { + this.emitLine("String value = jsonParser.getText();"); + this.emitLine("return ", this._dateTimeProvider.convertStringToTime("value"), ";"); + } + ); + }); + this.emitLine("});"); + } + + if (!this._dateTimeProvider.shouldEmitDateConverter) { + this.emitLine( + "module.addDeserializer(", + this._dateTimeProvider.dateType, + ".class, new JsonDeserializer<", + this._dateTimeProvider.dateType, + ">() {" + ); + this.indent(() => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + this._dateTimeProvider.dateType, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", + "throws IOException, JsonProcessingException" + ], + () => { + this.emitLine("String value = jsonParser.getText();"); + this.emitLine("return ", this._dateTimeProvider.convertStringToDate("value"), ";"); + } + ); + }); + this.emitLine("});"); + } + + this.emitLine("mapper.registerModule(module);"); + } + + protected emitConverterClass(): void { + this.startFile(this._converterClassname); + this.emitCommentLines([ + "To use this code, add the following Maven dependency to your project:", + "", + this._options.lombok ? " org.projectlombok : lombok : 1.18.2" : "", + " com.fasterxml.jackson.core : jackson-databind : 2.9.0", + this._options.dateTimeProvider === "java8" + ? " com.fasterxml.jackson.datatype : jackson-datatype-jsr310 : 2.9.0" + : "", + "", + "Import this package:", + "" + ]); + this.emitLine("// import ", this._options.packageName, ".Converter;"); + this.emitMultiline(`// +// Then you can deserialize a JSON string with +//`); + this.forEachTopLevel("none", (t, name) => { + this.emitLine( + "// ", + this.javaType(false, t), + " data = Converter.", + this.decoderName(name), + "(jsonString);" + ); + }); + this.ensureBlankLine(); + const imports = [ + "java.io.IOException", + "com.fasterxml.jackson.databind.*", + "com.fasterxml.jackson.databind.module.SimpleModule", + "com.fasterxml.jackson.core.JsonParser", + "com.fasterxml.jackson.core.JsonProcessingException", + "java.util.*" + ].concat(this._dateTimeProvider.converterImports); + this.emitPackageAndImports(imports); + this.ensureBlankLine(); + this.emitBlock(["public class Converter"], () => { + this.emitLine("// Date-time helpers"); + this._dateTimeProvider.emitDateTimeConverters(); + + this.emitLine("// Serialize/deserialize helpers"); + this.forEachTopLevel("leading-and-interposing", (topLevelType, topLevelName) => { + const topLevelTypeRendered = this.javaType(false, topLevelType); + this.emitBlock( + [ + "public static ", + topLevelTypeRendered, + " ", + this.decoderName(topLevelName), + "(String json) throws IOException" + ], + () => { + this.emitLine("return ", this.readerGetterName(topLevelName), "().readValue(json);"); + } + ); + this.ensureBlankLine(); + this.emitBlock( + [ + "public static String ", + this.encoderName(topLevelName), + "(", + topLevelTypeRendered, + " obj) throws JsonProcessingException" + ], + () => { + this.emitLine("return ", this.writerGetterName(topLevelName), "().writeValueAsString(obj);"); + } + ); + }); + this.forEachTopLevel("leading-and-interposing", (topLevelType, topLevelName) => { + const readerName = this.fieldOrMethodName("reader", topLevelName); + const writerName = this.fieldOrMethodName("writer", topLevelName); + this.emitLine("private static ObjectReader ", readerName, ";"); + this.emitLine("private static ObjectWriter ", writerName, ";"); + this.ensureBlankLine(); + this.emitBlock( + ["private static void ", this.methodName("instantiate", "Mapper", topLevelName), "()"], + () => { + const renderedForClass = this.javaTypeWithoutGenerics(false, topLevelType); + this.emitLine("ObjectMapper mapper = new ObjectMapper();"); + this.emitLine("mapper.findAndRegisterModules();"); + this.emitLine("mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);"); + this.emitLine("mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);"); + this.emitOffsetDateTimeConverterModule(); + this.emitLine(readerName, " = mapper.readerFor(", renderedForClass, ".class);"); + this.emitLine(writerName, " = mapper.writerFor(", renderedForClass, ".class);"); + } + ); + this.ensureBlankLine(); + this.emitBlock(["private static ObjectReader ", this.readerGetterName(topLevelName), "()"], () => { + this.emitLine( + "if (", + readerName, + " == null) ", + this.methodName("instantiate", "Mapper", topLevelName), + "();" + ); + this.emitLine("return ", readerName, ";"); + }); + this.ensureBlankLine(); + this.emitBlock(["private static ObjectWriter ", this.writerGetterName(topLevelName), "()"], () => { + this.emitLine( + "if (", + writerName, + " == null) ", + this.methodName("instantiate", "Mapper", topLevelName), + "();" + ); + this.emitLine("return ", writerName, ";"); + }); + }); + }); + this.finishFile(); + } + + protected emitSourceStructure(): void { + this.emitConverterClass(); + super.emitSourceStructure(); + } +} diff --git a/packages/quicktype-core/src/language/Java/JavaRenderer.ts b/packages/quicktype-core/src/language/Java/JavaRenderer.ts new file mode 100644 index 000000000..1054df770 --- /dev/null +++ b/packages/quicktype-core/src/language/Java/JavaRenderer.ts @@ -0,0 +1,514 @@ +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { acronymStyle } from "../../support/Acronyms"; +import { capitalize } from "../../support/Strings"; +import { assert, assertNever, defined } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { javaKeywords } from "./constants"; +import { Java8DateTimeProvider, type JavaDateTimeProvider, JavaLegacyDateTimeProvider } from "./DateTimeProvider"; +import { type javaOptions } from "./language"; +import { javaNameStyle, stringEscape } from "./utils"; + +export class JavaRenderer extends ConvenienceRenderer { + private _currentFilename: string | undefined; + + private readonly _gettersAndSettersForPropertyName = new Map(); + + private _haveEmittedLeadingComments = false; + + protected readonly _dateTimeProvider: JavaDateTimeProvider; + + protected readonly _converterClassname: string = "Converter"; + + protected readonly _converterKeywords: string[] = []; + + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + protected readonly _options: OptionValues + ) { + super(targetLanguage, renderContext); + + switch (_options.dateTimeProvider) { + default: + case "java8": + this._dateTimeProvider = new Java8DateTimeProvider(this, this._converterClassname); + break; + case "legacy": + this._dateTimeProvider = new JavaLegacyDateTimeProvider(this, this._converterClassname); + break; + } + } + + protected forbiddenNamesForGlobalNamespace(): string[] { + const keywords = [ + ...javaKeywords, + ...this._converterKeywords, + this._converterClassname, + ...this._dateTimeProvider.keywords + ]; + return keywords; + } + + protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + return { names: [], includeGlobalForbidden: true }; + } + + protected makeNamedTypeNamer(): Namer { + return this.getNameStyling("typeNamingFunction"); + } + + protected namerForObjectProperty(): Namer { + return this.getNameStyling("propertyNamingFunction"); + } + + protected makeUnionMemberNamer(): Namer { + return this.getNameStyling("propertyNamingFunction"); + } + + protected makeEnumCaseNamer(): Namer { + return this.getNameStyling("enumCaseNamingFunction"); + } + + protected unionNeedsName(u: UnionType): boolean { + return nullableFromUnion(u) === null; + } + + protected namedTypeToNameForTopLevel(type: Type): Type | undefined { + // If the top-level type doesn't contain any classes or unions + // we have to define a class just for the `FromJson` method, in + // emitFromJsonForTopLevel. + return directlyReachableSingleNamedType(type); + } + + protected makeNamesForPropertyGetterAndSetter( + _c: ClassType, + _className: Name, + _p: ClassProperty, + _jsonName: string, + name: Name + ): [Name, Name] { + const getterName = new DependencyName( + this.getNameStyling("propertyNamingFunction"), + name.order, + lookup => `get_${lookup(name)}` + ); + const setterName = new DependencyName( + this.getNameStyling("propertyNamingFunction"), + name.order, + lookup => `set_${lookup(name)}` + ); + return [getterName, setterName]; + } + + protected makePropertyDependencyNames( + c: ClassType, + className: Name, + p: ClassProperty, + jsonName: string, + name: Name + ): Name[] { + const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter(c, className, p, jsonName, name); + this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); + return getterAndSetterNames; + } + + private getNameStyling(convention: string): Namer { + const styling: { [key: string]: Namer } = { + typeNamingFunction: funPrefixNamer("types", n => + javaNameStyle(true, false, n, acronymStyle(this._options.acronymStyle)) + ), + propertyNamingFunction: funPrefixNamer("properties", n => + javaNameStyle(false, false, n, acronymStyle(this._options.acronymStyle)) + ), + enumCaseNamingFunction: funPrefixNamer("enum-cases", n => + javaNameStyle(true, true, n, acronymStyle(this._options.acronymStyle)) + ) + }; + return styling[convention]; + } + + protected fieldOrMethodName(methodName: string, topLevelName: Name): Sourcelike { + if (this.topLevels.size === 1) { + return methodName; + } + + return [topLevelName, capitalize(methodName)]; + } + + protected methodName(prefix: string, suffix: string, topLevelName: Name): Sourcelike { + if (this.topLevels.size === 1) { + return [prefix, suffix]; + } + + return [prefix, topLevelName, suffix]; + } + + protected decoderName(topLevelName: Name): Sourcelike { + return this.fieldOrMethodName("fromJsonString", topLevelName); + } + + protected encoderName(topLevelName: Name): Sourcelike { + return this.fieldOrMethodName("toJsonString", topLevelName); + } + + protected readerGetterName(topLevelName: Name): Sourcelike { + return this.methodName("get", "ObjectReader", topLevelName); + } + + protected writerGetterName(topLevelName: Name): Sourcelike { + return this.methodName("get", "ObjectWriter", topLevelName); + } + + protected startFile(basename: Sourcelike): void { + assert(this._currentFilename === undefined, "Previous file wasn't finished"); + // FIXME: The filenames should actually be Sourcelikes, too + this._currentFilename = `${this.sourcelikeToString(basename)}.java`; + // FIXME: Why is this necessary? + this.ensureBlankLine(); + if (!this._haveEmittedLeadingComments && this.leadingComments !== undefined) { + this.emitComments(this.leadingComments); + this.ensureBlankLine(); + this._haveEmittedLeadingComments = true; + } + } + + protected finishFile(): void { + super.finishFile(defined(this._currentFilename)); + this._currentFilename = undefined; + } + + protected emitPackageAndImports(imports: string[]): void { + this.emitLine("package ", this._options.packageName, ";"); + this.ensureBlankLine(); + for (const pkg of imports) { + this.emitLine("import ", pkg, ";"); + } + } + + protected emitFileHeader(fileName: Sourcelike, imports: string[]): void { + this.startFile(fileName); + this.emitPackageAndImports(imports); + this.ensureBlankLine(); + } + + public emitDescriptionBlock(lines: Sourcelike[]): void { + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + } + + public emitBlock(line: Sourcelike, f: () => void): void { + this.emitLine(line, " {"); + this.indent(f); + this.emitLine("}"); + } + + public emitTryCatch(main: () => void, handler: () => void, exception = "Exception"): void { + this.emitLine("try {"); + this.indent(main); + this.emitLine("} catch (", exception, " ex) {"); + this.indent(handler); + this.emitLine("}"); + } + + public emitIgnoredTryCatchBlock(f: () => void): void { + this.emitTryCatch(f, () => this.emitLine("// Ignored")); + } + + protected javaType(reference: boolean, t: Type, withIssues = false): Sourcelike { + return matchType( + t, + _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "Object"), + _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Object"), + _boolType => (reference ? "Boolean" : "boolean"), + _integerType => (reference ? "Long" : "long"), + _doubleType => (reference ? "Double" : "double"), + _stringType => "String", + arrayType => { + if (this._options.useList) { + return ["List<", this.javaType(true, arrayType.items, withIssues), ">"]; + } else { + return [this.javaType(false, arrayType.items, withIssues), "[]"]; + } + }, + classType => this.nameForNamedType(classType), + mapType => ["Map"], + enumType => this.nameForNamedType(enumType), + unionType => { + const nullable = nullableFromUnion(unionType); + if (nullable !== null) return this.javaType(true, nullable, withIssues); + return this.nameForNamedType(unionType); + }, + transformedStringType => { + if (transformedStringType.kind === "time") { + return this._dateTimeProvider.timeType; + } + + if (transformedStringType.kind === "date") { + return this._dateTimeProvider.dateType; + } + + if (transformedStringType.kind === "date-time") { + return this._dateTimeProvider.dateTimeType; + } + + if (transformedStringType.kind === "uuid") { + return "UUID"; + } + + return "String"; + } + ); + } + + protected javaImport(t: Type): string[] { + return matchType( + t, + _anyType => [], + _nullType => [], + _boolType => [], + _integerType => [], + _doubleType => [], + _stringType => [], + arrayType => { + if (this._options.useList) { + return [...this.javaImport(arrayType.items), "java.util.List"]; + } else { + return [...this.javaImport(arrayType.items)]; + } + }, + _classType => [], + mapType => [...this.javaImport(mapType.values), "java.util.Map"], + _enumType => [], + unionType => { + const imports: string[] = []; + unionType.members.forEach(type => this.javaImport(type).forEach(imp => imports.push(imp))); + return imports; + }, + transformedStringType => { + if (transformedStringType.kind === "time") { + return this._dateTimeProvider.timeImports; + } + + if (transformedStringType.kind === "date") { + return this._dateTimeProvider.dateImports; + } + + if (transformedStringType.kind === "date-time") { + return this._dateTimeProvider.dateTimeImports; + } + + if (transformedStringType.kind === "uuid") { + return ["java.util.UUID"]; + } + + return []; + } + ); + } + + protected javaTypeWithoutGenerics(reference: boolean, t: Type): Sourcelike { + if (t instanceof ArrayType) { + if (this._options.useList) { + return ["List"]; + } else { + return [this.javaTypeWithoutGenerics(false, t.items), "[]"]; + } + } else if (t instanceof MapType) { + return "Map"; + } else if (t instanceof UnionType) { + const nullable = nullableFromUnion(t); + if (nullable !== null) return this.javaTypeWithoutGenerics(true, nullable); + return this.nameForNamedType(t); + } else { + return this.javaType(reference, t); + } + } + + protected emitClassAttributes(_c: ClassType, _className: Name): void { + if (this._options.lombok) { + this.emitLine("@lombok.Data"); + } + } + + protected annotationsForAccessor( + _c: ClassType, + _className: Name, + _propertyName: Name, + _jsonName: string, + _p: ClassProperty, + _isSetter: boolean + ): string[] { + return []; + } + + protected importsForType(t: ClassType | UnionType | EnumType): string[] { + if (t instanceof ClassType) { + return []; + } + + if (t instanceof UnionType) { + return ["java.io.IOException"]; + } + + if (t instanceof EnumType) { + return ["java.io.IOException"]; + } + + return assertNever(t); + } + + protected importsForClass(c: ClassType): string[] { + const imports: string[] = []; + this.forEachClassProperty(c, "none", (_name, _jsonName, p) => { + this.javaImport(p.type).forEach(imp => imports.push(imp)); + }); + imports.sort(); + return [...new Set(imports)]; + } + + protected importsForUnionMembers(u: UnionType): string[] { + const imports: string[] = []; + const [, nonNulls] = removeNullFromUnion(u); + this.forEachUnionMember(u, nonNulls, "none", null, (_fieldName, t) => { + this.javaImport(t).forEach(imp => imports.push(imp)); + }); + imports.sort(); + return [...new Set(imports)]; + } + + protected emitClassDefinition(c: ClassType, className: Name): void { + let imports = [...this.importsForType(c), ...this.importsForClass(c)]; + + this.emitFileHeader(className, imports); + this.emitDescription(this.descriptionForType(c)); + this.emitClassAttributes(c, className); + this.emitBlock(["public class ", className], () => { + this.forEachClassProperty(c, "none", (name, jsonName, p) => { + if (this._options.lombok && this._options.lombokCopyAnnotations) { + const getter = this.annotationsForAccessor(c, className, name, jsonName, p, false); + const setter = this.annotationsForAccessor(c, className, name, jsonName, p, true); + if (getter.length !== 0) { + this.emitLine("@lombok.Getter(onMethod_ = {" + getter.join(", ") + "})"); + } + + if (setter.length !== 0) { + this.emitLine("@lombok.Setter(onMethod_ = {" + setter.join(", ") + "})"); + } + } + + this.emitLine("private ", this.javaType(false, p.type, true), " ", name, ";"); + }); + if (!this._options.lombok) { + this.forEachClassProperty(c, "leading-and-interposing", (name, jsonName, p) => { + this.emitDescription(this.descriptionForClassProperty(c, jsonName)); + const [getterName, setterName] = defined(this._gettersAndSettersForPropertyName.get(name)); + const rendered = this.javaType(false, p.type); + this.annotationsForAccessor(c, className, name, jsonName, p, false).forEach(annotation => + this.emitLine(annotation) + ); + this.emitLine("public ", rendered, " ", getterName, "() { return ", name, "; }"); + this.annotationsForAccessor(c, className, name, jsonName, p, true).forEach(annotation => + this.emitLine(annotation) + ); + this.emitLine("public void ", setterName, "(", rendered, " value) { this.", name, " = value; }"); + }); + } + }); + this.finishFile(); + } + + protected unionField(u: UnionType, t: Type, withIssues = false): { fieldName: Sourcelike; fieldType: Sourcelike } { + const fieldType = this.javaType(true, t, withIssues); + // FIXME: "Value" should be part of the name. + const fieldName = [this.nameForUnionMember(u, t), "Value"]; + return { fieldType, fieldName }; + } + + protected emitUnionAttributes(_u: UnionType, _unionName: Name): void { + // empty + } + + protected emitUnionSerializer(_u: UnionType, _unionName: Name): void { + // empty + } + + protected emitUnionDefinition(u: UnionType, unionName: Name): void { + const imports = [...this.importsForType(u), ...this.importsForUnionMembers(u)]; + + this.emitFileHeader(unionName, imports); + this.emitDescription(this.descriptionForType(u)); + const [, nonNulls] = removeNullFromUnion(u); + + this.emitUnionAttributes(u, unionName); + this.emitBlock(["public class ", unionName], () => { + for (const t of nonNulls) { + const { fieldType, fieldName } = this.unionField(u, t, true); + this.emitLine("public ", fieldType, " ", fieldName, ";"); + } + + this.emitUnionSerializer(u, unionName); + }); + this.finishFile(); + } + + protected emitEnumSerializationAttributes(_e: EnumType): void { + // Empty + } + + protected emitEnumDeserializationAttributes(_e: EnumType): void { + // Empty + } + + protected emitEnumDefinition(e: EnumType, enumName: Name): void { + this.emitFileHeader(enumName, this.importsForType(e)); + this.emitDescription(this.descriptionForType(e)); + const caseNames: Sourcelike[] = []; + this.forEachEnumCase(e, "none", name => { + if (caseNames.length > 0) caseNames.push(", "); + caseNames.push(name); + }); + caseNames.push(";"); + this.emitBlock(["public enum ", enumName], () => { + this.emitLine(caseNames); + this.ensureBlankLine(); + + this.emitEnumSerializationAttributes(e); + this.emitBlock("public String toValue()", () => { + this.emitLine("switch (this) {"); + this.indent(() => { + this.forEachEnumCase(e, "none", (name, jsonName) => { + this.emitLine("case ", name, ': return "', stringEscape(jsonName), '";'); + }); + }); + this.emitLine("}"); + this.emitLine("return null;"); + }); + this.ensureBlankLine(); + + this.emitEnumDeserializationAttributes(e); + this.emitBlock(["public static ", enumName, " forValue(String value) throws IOException"], () => { + this.forEachEnumCase(e, "none", (name, jsonName) => { + this.emitLine('if (value.equals("', stringEscape(jsonName), '")) return ', name, ";"); + }); + this.emitLine('throw new IOException("Cannot deserialize ', enumName, '");'); + }); + }); + this.finishFile(); + } + + protected emitSourceStructure(): void { + this.forEachNamedType( + "leading-and-interposing", + (c: ClassType, n: Name) => this.emitClassDefinition(c, n), + (e, n) => this.emitEnumDefinition(e, n), + (u, n) => this.emitUnionDefinition(u, n) + ); + } +} diff --git a/packages/quicktype-core/src/language/Java/constants.ts b/packages/quicktype-core/src/language/Java/constants.ts new file mode 100644 index 000000000..d1e2f797e --- /dev/null +++ b/packages/quicktype-core/src/language/Java/constants.ts @@ -0,0 +1,69 @@ +export const javaKeywords = [ + "_", // as of release 9, '_' is a keyword, and may not be used as an identifier + "Object", + "Class", + "System", + "Long", + "Double", + "Boolean", + "String", + "List", + "Map", + "UUID", + "Exception", + "IOException", + "Override", + "abstract", + "continue", + "for", + "new", + "switch", + "assert", + "default", + "goto", + "package", + "synchronized", + "boolean", + "do", + "if", + "private", + "this", + "break", + "double", + "implements", + "protected", + "throw", + "byte", + "else", + "import", + "public", + "throws", + "case", + "enum", + "instanceof", + "return", + "transient", + "catch", + "extends", + "int", + "short", + "try", + "char", + "final", + "interface", + "static", + "void", + "class", + "finally", + "long", + "strictfp", + "volatile", + "const", + "float", + "native", + "super", + "while", + "null", + "false", + "true" +] as const; diff --git a/packages/quicktype-core/src/language/Java/index.ts b/packages/quicktype-core/src/language/Java/index.ts new file mode 100644 index 000000000..ea2ba695e --- /dev/null +++ b/packages/quicktype-core/src/language/Java/index.ts @@ -0,0 +1,3 @@ +export { JavaTargetLanguage, javaOptions } from "./language"; +export { JavaRenderer } from "./JavaRenderer"; +export { JacksonRenderer } from "./JavaJacksonRenderer"; diff --git a/packages/quicktype-core/src/language/Java/language.ts b/packages/quicktype-core/src/language/Java/language.ts new file mode 100644 index 000000000..3d22278b5 --- /dev/null +++ b/packages/quicktype-core/src/language/Java/language.ts @@ -0,0 +1,77 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { JacksonRenderer } from "./JavaJacksonRenderer"; +import { JavaRenderer } from "./JavaRenderer"; + +export const javaOptions = { + useList: new EnumOption( + "array-type", + "Use T[] or List", + [ + ["array", false], + ["list", true] + ], + "array" + ), + justTypes: new BooleanOption("just-types", "Plain types only", false), + dateTimeProvider: new EnumOption( + "datetime-provider", + "Date time provider type", + [ + ["java8", "java8"], + ["legacy", "legacy"] + ], + "java8" + ), + acronymStyle: acronymOption(AcronymStyleOptions.Pascal), + // FIXME: Do this via a configurable named eventually. + packageName: new StringOption("package", "Generated package name", "NAME", "io.quicktype"), + lombok: new BooleanOption("lombok", "Use lombok", false, "primary"), + lombokCopyAnnotations: new BooleanOption("lombok-copy-annotations", "Copy accessor annotations", true, "secondary") +}; + +export class JavaTargetLanguage extends TargetLanguage { + public constructor() { + super("Java", ["java"], "java"); + } + + protected getOptions(): Array> { + return [ + javaOptions.useList, + javaOptions.justTypes, + javaOptions.dateTimeProvider, + javaOptions.acronymStyle, + javaOptions.packageName, + javaOptions.lombok, + javaOptions.lombokCopyAnnotations + ]; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): JavaRenderer { + const options = getOptionValues(javaOptions, untypedOptionValues); + if (options.justTypes) { + return new JavaRenderer(this, renderContext, options); + } + + return new JacksonRenderer(this, renderContext, options); + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + mapping.set("date", "date"); + mapping.set("time", "time"); + mapping.set("date-time", "date-time"); + mapping.set("uuid", "uuid"); + return mapping; + } +} diff --git a/packages/quicktype-core/src/language/Java/utils.ts b/packages/quicktype-core/src/language/Java/utils.ts new file mode 100644 index 000000000..abc461f47 --- /dev/null +++ b/packages/quicktype-core/src/language/Java/utils.ts @@ -0,0 +1,46 @@ +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + isAscii, + isDigit, + isLetter, + splitIntoWords, + standardUnicodeHexEscape, + utf16ConcatMap, + utf16LegalizeCharacters +} from "../../support/Strings"; + +export const stringEscape = utf16ConcatMap(escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape)); + +function isStartCharacter(codePoint: number): boolean { + if (codePoint === 0x5f) return true; // underscore + return isAscii(codePoint) && isLetter(codePoint); +} + +function isPartCharacter(codePoint: number): boolean { + return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); +} + +const legalizeName = utf16LegalizeCharacters(isPartCharacter); + +export function javaNameStyle( + startWithUpper: boolean, + upperUnderscore: boolean, + original: string, + acronymsStyle: (s: string) => string = allUpperWordStyle +): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, + upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, + upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, + acronymsStyle, + upperUnderscore ? "_" : "", + isStartCharacter + ); +} diff --git a/packages/quicktype-core/src/language/JavaScript.ts b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts similarity index 84% rename from packages/quicktype-core/src/language/JavaScript.ts rename to packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts index 440502cff..7dfa79b33 100644 --- a/packages/quicktype-core/src/language/JavaScript.ts +++ b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts @@ -1,12 +1,12 @@ import { arrayIntercalate } from "collection-utils"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, modifySource } from "../Source"; -import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; -import { ConvertersOptions, convertersOption } from "../support/Converters"; +import { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { acronymStyle } from "../../support/Acronyms"; +import { ConvertersOptions } from "../../support/Converters"; import { allLowerWordStyle, camelCase, @@ -14,46 +14,16 @@ import { combineWords, firstUpperWordStyle, splitIntoWords, - utf16LegalizeCharacters, utf16StringEscape -} from "../support/Strings"; -import { panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - type ClassProperty, - type ClassType, - type ObjectType, - type PrimitiveStringTypeKind, - type TransformedStringTypeKind, - type Type -} from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { directlyReachableSingleNamedType, matchType } from "../TypeUtils"; - -import { isES3IdentifierPart, isES3IdentifierStart } from "./JavaScriptUnicodeMaps"; - -export const javaScriptOptions = { - acronymStyle: acronymOption(AcronymStyleOptions.Pascal), - runtimeTypecheck: new BooleanOption("runtime-typecheck", "Verify JSON.parse results at runtime", true), - runtimeTypecheckIgnoreUnknownProperties: new BooleanOption( - "runtime-typecheck-ignore-unknown-properties", - "Ignore unknown properties when verifying at runtime", - false, - "secondary" - ), - converters: convertersOption(), - rawType: new EnumOption<"json" | "any">( - "raw-type", - "Type of raw input (json by default)", - [ - ["json", "json"], - ["any", "any"] - ], - "json", - "secondary" - ) -}; +} from "../../support/Strings"; +import { panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassProperty, type ClassType, type ObjectType, type Type } from "../../Type"; +import { directlyReachableSingleNamedType, matchType } from "../../TypeUtils"; + +import { type javaScriptOptions } from "./language"; +import { isES3IdentifierStart } from "./unicodeMaps"; +import { legalizeName } from "./utils"; export interface JavaScriptTypeAnnotations { any: string; @@ -65,44 +35,6 @@ export interface JavaScriptTypeAnnotations { stringArray: string; } -export class JavaScriptTargetLanguage extends TargetLanguage { - public constructor(displayName = "JavaScript", names: string[] = ["javascript", "js", "jsx"], extension = "js") { - super(displayName, names, extension); - } - - protected getOptions(): Array> { - return [ - javaScriptOptions.runtimeTypecheck, - javaScriptOptions.runtimeTypecheckIgnoreUnknownProperties, - javaScriptOptions.acronymStyle, - javaScriptOptions.converters, - javaScriptOptions.rawType - ]; - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - const dateTimeType = "date-time"; - mapping.set("date", dateTimeType); - mapping.set("date-time", dateTimeType); - return mapping; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsFullObjectType(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): JavaScriptRenderer { - return new JavaScriptRenderer(this, renderContext, getOptionValues(javaScriptOptions, untypedOptionValues)); - } -} - -export const legalizeName = utf16LegalizeCharacters(isES3IdentifierPart); - const identityNamingFunction = funPrefixNamer("properties", s => s); export class JavaScriptRenderer extends ConvenienceRenderer { diff --git a/packages/quicktype-core/src/language/JavaScript/index.ts b/packages/quicktype-core/src/language/JavaScript/index.ts new file mode 100644 index 000000000..12526b3d9 --- /dev/null +++ b/packages/quicktype-core/src/language/JavaScript/index.ts @@ -0,0 +1,2 @@ +export { JavaScriptTargetLanguage, javaScriptOptions } from "./language"; +export { JavaScriptRenderer, type JavaScriptTypeAnnotations } from "./JavaScriptRenderer"; diff --git a/packages/quicktype-core/src/language/JavaScript/language.ts b/packages/quicktype-core/src/language/JavaScript/language.ts new file mode 100644 index 000000000..85d61bbb6 --- /dev/null +++ b/packages/quicktype-core/src/language/JavaScript/language.ts @@ -0,0 +1,68 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; +import { convertersOption } from "../../support/Converters"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { JavaScriptRenderer } from "./JavaScriptRenderer"; + +export const javaScriptOptions = { + acronymStyle: acronymOption(AcronymStyleOptions.Pascal), + runtimeTypecheck: new BooleanOption("runtime-typecheck", "Verify JSON.parse results at runtime", true), + runtimeTypecheckIgnoreUnknownProperties: new BooleanOption( + "runtime-typecheck-ignore-unknown-properties", + "Ignore unknown properties when verifying at runtime", + false, + "secondary" + ), + converters: convertersOption(), + rawType: new EnumOption<"json" | "any">( + "raw-type", + "Type of raw input (json by default)", + [ + ["json", "json"], + ["any", "any"] + ], + "json", + "secondary" + ) +}; + +export class JavaScriptTargetLanguage extends TargetLanguage { + public constructor(displayName = "JavaScript", names: string[] = ["javascript", "js", "jsx"], extension = "js") { + super(displayName, names, extension); + } + + protected getOptions(): Array> { + return [ + javaScriptOptions.runtimeTypecheck, + javaScriptOptions.runtimeTypecheckIgnoreUnknownProperties, + javaScriptOptions.acronymStyle, + javaScriptOptions.converters, + javaScriptOptions.rawType + ]; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + const dateTimeType = "date-time"; + mapping.set("date", dateTimeType); + mapping.set("date-time", dateTimeType); + return mapping; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsFullObjectType(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): JavaScriptRenderer { + return new JavaScriptRenderer(this, renderContext, getOptionValues(javaScriptOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/JavaScriptUnicodeMaps.ts b/packages/quicktype-core/src/language/JavaScript/unicodeMaps.ts similarity index 100% rename from packages/quicktype-core/src/language/JavaScriptUnicodeMaps.ts rename to packages/quicktype-core/src/language/JavaScript/unicodeMaps.ts diff --git a/packages/quicktype-core/src/language/JavaScript/utils.ts b/packages/quicktype-core/src/language/JavaScript/utils.ts new file mode 100644 index 000000000..7acc4c931 --- /dev/null +++ b/packages/quicktype-core/src/language/JavaScript/utils.ts @@ -0,0 +1,5 @@ +import { utf16LegalizeCharacters } from "../../support/Strings"; + +import { isES3IdentifierPart } from "./unicodeMaps"; + +export const legalizeName = utf16LegalizeCharacters(isES3IdentifierPart); diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts similarity index 80% rename from packages/quicktype-core/src/language/JavaScriptPropTypes.ts rename to packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts index 6754e83e2..7c7fe659e 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts @@ -1,13 +1,11 @@ -import { panic } from "@glideapps/ts-necessities"; import { arrayIntercalate } from "collection-utils"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type Sourcelike } from "../Source"; -import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; -import { convertersOption } from "../support/Converters"; +import { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike } from "../../Source"; +import { acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, capitalize, @@ -15,53 +13,22 @@ import { firstUpperWordStyle, splitIntoWords, utf16StringEscape -} from "../support/Strings"; -import { TargetLanguage } from "../TargetLanguage"; -import { type ArrayType, type ClassProperty, type ClassType, type ObjectType, PrimitiveType, type Type } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { directlyReachableSingleNamedType, matchType } from "../TypeUtils"; - -import { legalizeName } from "./JavaScript"; -import { isES3IdentifierStart } from "./JavaScriptUnicodeMaps"; - -export const javaScriptPropTypesOptions = { - acronymStyle: acronymOption(AcronymStyleOptions.Pascal), - converters: convertersOption(), - moduleSystem: new EnumOption( - "module-system", - "Which module system to use", - [ - ["common-js", false], - ["es6", true] - ], - "es6" - ) -}; - -export class JavaScriptPropTypesTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return [javaScriptPropTypesOptions.acronymStyle, javaScriptPropTypesOptions.converters]; - } - - public constructor( - displayName = "JavaScript PropTypes", - names: string[] = ["javascript-prop-types"], - extension = "js" - ) { - super(displayName, names, extension); - } - - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: FixMeOptionsType - ): JavaScriptPropTypesRenderer { - return new JavaScriptPropTypesRenderer( - this, - renderContext, - getOptionValues(javaScriptPropTypesOptions, untypedOptionValues) - ); - } -} +} from "../../support/Strings"; +import { panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { + type ArrayType, + type ClassProperty, + type ClassType, + type ObjectType, + PrimitiveType, + type Type +} from "../../Type"; +import { directlyReachableSingleNamedType, matchType } from "../../TypeUtils"; +import { isES3IdentifierStart } from "../JavaScript/unicodeMaps"; +import { legalizeName } from "../JavaScript/utils"; + +import { type javaScriptPropTypesOptions } from "./language"; const identityNamingFunction = funPrefixNamer("properties", s => s); diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts new file mode 100644 index 000000000..273e81878 --- /dev/null +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts @@ -0,0 +1,2 @@ +export { JavaScriptPropTypesTargetLanguage, javaScriptPropTypesOptions } from "./language"; +export { JavaScriptPropTypesRenderer } from "./JavaScriptPropTypesRenderer"; diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts new file mode 100644 index 000000000..8ba620927 --- /dev/null +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts @@ -0,0 +1,47 @@ +import { type RenderContext } from "../../Renderer"; +import { EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; +import { convertersOption } from "../../support/Converters"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { JavaScriptPropTypesRenderer } from "./JavaScriptPropTypesRenderer"; + +export const javaScriptPropTypesOptions = { + acronymStyle: acronymOption(AcronymStyleOptions.Pascal), + converters: convertersOption(), + moduleSystem: new EnumOption( + "module-system", + "Which module system to use", + [ + ["common-js", false], + ["es6", true] + ], + "es6" + ) +}; + +export class JavaScriptPropTypesTargetLanguage extends TargetLanguage { + protected getOptions(): Array> { + return [javaScriptPropTypesOptions.acronymStyle, javaScriptPropTypesOptions.converters]; + } + + public constructor( + displayName = "JavaScript PropTypes", + names: string[] = ["javascript-prop-types"], + extension = "js" + ) { + super(displayName, names, extension); + } + + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: FixMeOptionsType + ): JavaScriptPropTypesRenderer { + return new JavaScriptPropTypesRenderer( + this, + renderContext, + getOptionValues(javaScriptPropTypesOptions, untypedOptionValues) + ); + } +} diff --git a/packages/quicktype-core/src/language/Kotlin.ts b/packages/quicktype-core/src/language/Kotlin.ts deleted file mode 100644 index d2f759506..000000000 --- a/packages/quicktype-core/src/language/Kotlin.ts +++ /dev/null @@ -1,1129 +0,0 @@ -import { arrayIntercalate, iterableSome } from "collection-utils"; - -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; -import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; -import { - allLowerWordStyle, - allUpperWordStyle, - camelCase, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - intToHex, - isDigit, - isLetterOrUnderscore, - isNumeric, - isPrintable, - legalizeCharacters, - splitIntoWords, - utf32ConcatMap -} from "../support/Strings"; -import { assertNever, mustNotHappen } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayType, - type ClassProperty, - ClassType, - type EnumType, - MapType, - type ObjectType, - type PrimitiveType, - type Type, - UnionType -} from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export enum Framework { - None = "None", - Jackson = "Jackson", - Klaxon = "Klaxon", - KotlinX = "KotlinX" -} - -export const kotlinOptions = { - framework: new EnumOption( - "framework", - "Serialization framework", - [ - ["just-types", Framework.None], - ["jackson", Framework.Jackson], - ["klaxon", Framework.Klaxon], - ["kotlinx", Framework.KotlinX] - ], - "klaxon" - ), - acronymStyle: acronymOption(AcronymStyleOptions.Pascal), - packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") -}; - -export class KotlinTargetLanguage extends TargetLanguage { - public constructor() { - super("Kotlin", ["kotlin"], "kt"); - } - - protected getOptions(): Array> { - return [kotlinOptions.framework, kotlinOptions.acronymStyle, kotlinOptions.packageName]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { - const options = getOptionValues(kotlinOptions, untypedOptionValues); - - switch (options.framework) { - case Framework.None: - return new KotlinRenderer(this, renderContext, options); - case Framework.Jackson: - return new KotlinJacksonRenderer(this, renderContext, options); - case Framework.Klaxon: - return new KotlinKlaxonRenderer(this, renderContext, options); - case Framework.KotlinX: - return new KotlinXRenderer(this, renderContext, options); - default: - return assertNever(options.framework); - } - } -} - -const keywords = [ - "package", - "as", - "typealias", - "class", - "this", - "super", - "val", - "var", - "fun", - "for", - "null", - "true", - "false", - "is", - "in", - "throw", - "return", - "break", - "continue", - "object", - "if", - "try", - "else", - "while", - "do", - "when", - "interface", - "typeof", - "klaxon", - "toJson", - "Any", - "Boolean", - "Double", - "Float", - "Long", - "Int", - "Short", - "System", - "Byte", - "String", - "Array", - "List", - "Map", - "Enum", - "Class", - "JsonObject", - "JsonValue", - "Converter", - "Klaxon" -]; - -function isPartCharacter(codePoint: number): boolean { - return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); -} - -function isStartCharacter(codePoint: number): boolean { - return isPartCharacter(codePoint) && !isDigit(codePoint); -} - -const legalizeName = legalizeCharacters(isPartCharacter); - -function kotlinNameStyle( - isUpper: boolean, - original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle -): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - isUpper ? firstUpperWordStyle : allLowerWordStyle, - firstUpperWordStyle, - isUpper ? allUpperWordStyle : allLowerWordStyle, - acronymsStyle, - "", - isStartCharacter - ); -} - -function unicodeEscape(codePoint: number): string { - return "\\u" + intToHex(codePoint, 4); -} - -// eslint-disable-next-line @typescript-eslint/naming-convention -const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); - -function stringEscape(s: string): string { - // "$this" is a template string in Kotlin so we have to escape $ - return _stringEscape(s).replace(/\$/g, "\\$"); -} - -export class KotlinRenderer extends ConvenienceRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - protected readonly _kotlinOptions: OptionValues - ) { - super(targetLanguage, renderContext); - } - - protected forbiddenNamesForGlobalNamespace(): string[] { - return keywords; - } - - protected forbiddenForObjectProperties(_o: ObjectType, _classNamed: Name): ForbiddenWordsInfo { - return { names: [], includeGlobalForbidden: true }; - } - - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { - return { names: [], includeGlobalForbidden: true }; - } - - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { - return { names: [], includeGlobalForbidden: false }; - } - - protected topLevelNameStyle(rawName: string): string { - return kotlinNameStyle(true, rawName); - } - - protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("upper", s => kotlinNameStyle(true, s, acronymStyle(this._kotlinOptions.acronymStyle))); - } - - protected namerForObjectProperty(): Namer { - return funPrefixNamer("lower", s => kotlinNameStyle(false, s, acronymStyle(this._kotlinOptions.acronymStyle))); - } - - protected makeUnionMemberNamer(): Namer { - return funPrefixNamer("upper", s => kotlinNameStyle(true, s) + "Value"); - } - - protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("upper", s => kotlinNameStyle(true, s, acronymStyle(this._kotlinOptions.acronymStyle))); - } - - protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); - } - - protected emitBlock(line: Sourcelike, f: () => void, delimiter: "curly" | "paren" | "lambda" = "curly"): void { - const [open, close] = delimiter === "curly" ? ["{", "}"] : delimiter === "paren" ? ["(", ")"] : ["{", "})"]; - this.emitLine(line, " ", open); - this.indent(f); - this.emitLine(close); - } - - protected anySourceType(optional: string): Sourcelike { - return ["Any", optional]; - } - - // (asarazan): I've broken out the following two functions - // because some renderers, such as kotlinx, can cope with `any`, while some get mad. - protected arrayType(arrayType: ArrayType, withIssues = false, _noOptional = false): Sourcelike { - return ["List<", this.kotlinType(arrayType.items, withIssues), ">"]; - } - - protected mapType(mapType: MapType, withIssues = false, _noOptional = false): Sourcelike { - return ["Map"]; - } - - protected kotlinType(t: Type, withIssues = false, noOptional = false): Sourcelike { - const optional = noOptional ? "" : "?"; - return matchType( - t, - _anyType => { - return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(optional)); - }, - _nullType => { - return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(optional)); - }, - _boolType => "Boolean", - _integerType => "Long", - _doubleType => "Double", - _stringType => "String", - arrayType => this.arrayType(arrayType, withIssues), - classType => this.nameForNamedType(classType), - mapType => this.mapType(mapType, withIssues), - enumType => this.nameForNamedType(enumType), - unionType => { - const nullable = nullableFromUnion(unionType); - if (nullable !== null) return [this.kotlinType(nullable, withIssues), optional]; - return this.nameForNamedType(unionType); - } - ); - } - - protected emitUsageHeader(): void { - // To be overridden - } - - protected emitHeader(): void { - if (this.leadingComments !== undefined) { - this.emitComments(this.leadingComments); - } else { - this.emitUsageHeader(); - } - - this.ensureBlankLine(); - this.emitLine("package ", this._kotlinOptions.packageName); - this.ensureBlankLine(); - } - - protected emitTopLevelPrimitive(t: PrimitiveType, name: Name): void { - const elementType = this.kotlinType(t); - this.emitLine(["typealias ", name, " = ", elementType, ""]); - } - - protected emitTopLevelArray(t: ArrayType, name: Name): void { - const elementType = this.kotlinType(t.items); - this.emitLine(["typealias ", name, " = ArrayList<", elementType, ">"]); - } - - protected emitTopLevelMap(t: MapType, name: Name): void { - const elementType = this.kotlinType(t.values); - this.emitLine(["typealias ", name, " = HashMap"]); - } - - protected emitEmptyClassDefinition(c: ClassType, className: Name): void { - this.emitDescription(this.descriptionForType(c)); - this.emitClassAnnotations(c, className); - this.emitLine("class ", className, "()"); - } - - protected emitClassDefinition(c: ClassType, className: Name): void { - if (c.getProperties().size === 0) { - this.emitEmptyClassDefinition(c, className); - return; - } - - const kotlinType = (p: ClassProperty): Sourcelike => { - if (p.isOptional) { - return [this.kotlinType(p.type, true, true), "?"]; - } else { - return this.kotlinType(p.type, true); - } - }; - - this.emitDescription(this.descriptionForType(c)); - this.emitClassAnnotations(c, className); - this.emitLine("data class ", className, " ("); - this.indent(() => { - let count = c.getProperties().size; - let first = true; - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; - const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; - const last = --count === 0; - let meta: Array<() => void> = []; - - const description = this.descriptionForClassProperty(c, jsonName); - if (description !== undefined) { - meta.push(() => this.emitDescription(description)); - } - - this.renameAttribute(name, jsonName, !nullableOrOptional, meta); - - if (meta.length > 0 && !first) { - this.ensureBlankLine(); - } - - for (const emit of meta) { - emit(); - } - - this.emitLine("val ", name, ": ", kotlinType(p), nullableOrOptional ? " = null" : "", last ? "" : ","); - - if (meta.length > 0 && !last) { - this.ensureBlankLine(); - } - - first = false; - }); - }); - - this.emitClassDefinitionMethods(c, className); - } - - protected emitClassDefinitionMethods(_c: ClassType, _className: Name): void { - this.emitLine(")"); - } - - protected emitClassAnnotations(_c: Type, _className: Name): void { - // to be overridden - } - - protected renameAttribute(_name: Name, _jsonName: string, _required: boolean, _meta: Array<() => void>): void { - // to be overridden - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - this.emitBlock(["enum class ", enumName], () => { - let count = e.cases.size; - this.forEachEnumCase(e, "none", name => { - this.emitLine(name, --count === 0 ? "" : ","); - }); - }); - } - - protected emitUnionDefinition(u: UnionType, unionName: Name): void { - function sortBy(t: Type): string { - const kind = t.kind; - if (kind === "class") return kind; - return "_" + kind; - } - - this.emitDescription(this.descriptionForType(u)); - - const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - this.emitClassAnnotations(u, unionName); - this.emitBlock(["sealed class ", unionName], () => { - { - let table: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - table.push([ - ["class ", name, "(val value: ", this.kotlinType(t), ")"], - [" : ", unionName, "()"] - ]); - }); - if (maybeNull !== null) { - table.push([ - ["class ", this.nameForUnionMember(u, maybeNull), "()"], - [" : ", unionName, "()"] - ]); - } - - this.emitTable(table); - } - - this.emitUnionDefinitionMethods(u, nonNulls, maybeNull, unionName); - }); - } - - protected emitUnionDefinitionMethods( - _u: UnionType, - _nonNulls: ReadonlySet, - _maybeNull: PrimitiveType | null, - _unionName: Name - ): void { - // to be overridden - } - - protected emitSourceStructure(): void { - this.emitHeader(); - - // Top-level arrays, maps - this.forEachTopLevel("leading", (t, name) => { - if (t instanceof ArrayType) { - this.emitTopLevelArray(t, name); - } else if (t instanceof MapType) { - this.emitTopLevelMap(t, name); - } else if (t.isPrimitive()) { - this.emitTopLevelPrimitive(t, name); - } - }); - - this.forEachNamedType( - "leading-and-interposing", - (c: ClassType, n: Name) => this.emitClassDefinition(c, n), - (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) - ); - } -} - -export class KotlinKlaxonRenderer extends KotlinRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - _kotlinOptions: OptionValues - ) { - super(targetLanguage, renderContext, _kotlinOptions); - } - - private unionMemberFromJsonValue(t: Type, e: Sourcelike): Sourcelike { - return matchType( - t, - _anyType => [e, ".inside"], - _nullType => "null", - _boolType => [e, ".boolean"], - _integerType => ["(", e, ".int?.toLong() ?: ", e, ".longValue)"], - _doubleType => [e, ".double"], - _stringType => [e, ".string"], - arrayType => [e, ".array?.let { klaxon.parseFromJsonArray<", this.kotlinType(arrayType.items), ">(it) }"], - _classType => [e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }"], - _mapType => [e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }"], - enumType => [e, ".string?.let { ", this.kotlinType(enumType), ".fromValue(it) }"], - _unionType => mustNotHappen() - ); - } - - private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { - return matchType( - t, - _anyType => "is Any", - _nullType => "null", - _boolType => "is Boolean", - _integerType => "is Int, is Long", - _doubleType => "is Double", - _stringType => "is String", - _arrayType => "is JsonArray<*>", - // These could be stricter, but for now we don't allow maps - // and objects in the same union - _classType => "is JsonObject", - _mapType => "is JsonObject", - // This could be stricter, but for now we don't allow strings - // and enums in the same union - _enumType => "is String", - _unionType => mustNotHappen() - ); - } - - protected emitUsageHeader(): void { - this.emitLine("// To parse the JSON, install Klaxon and do:"); - this.emitLine("//"); - this.forEachTopLevel("none", (_, name) => { - this.emitLine("// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)"); - }); - } - - protected emitHeader(): void { - super.emitHeader(); - - this.emitLine("import com.beust.klaxon.*"); - - const hasUnions = iterableSome( - this.typeGraph.allNamedTypes(), - t => t instanceof UnionType && nullableFromUnion(t) === null - ); - const hasEmptyObjects = iterableSome( - this.typeGraph.allNamedTypes(), - c => c instanceof ClassType && c.getProperties().size === 0 - ); - if (hasUnions || this.haveEnums || hasEmptyObjects) { - this.emitGenericConverter(); - } - - let converters: Sourcelike[][] = []; - if (hasEmptyObjects) { - converters.push([[".convert(JsonObject::class,"], [" { it.obj!! },"], [" { it.toJsonString() })"]]); - } - - this.forEachEnum("none", (_, name) => { - converters.push([ - [".convert(", name, "::class,"], - [" { ", name, ".fromValue(it.string!!) },"], - [' { "\\"${it.value}\\"" })'] - ]); - }); - this.forEachUnion("none", (_, name) => { - converters.push([ - [".convert(", name, "::class,"], - [" { ", name, ".fromJson(it) },"], - [" { it.toJson() }, true)"] - ]); - }); - - this.ensureBlankLine(); - this.emitLine("private val klaxon = Klaxon()"); - if (converters.length > 0) { - this.indent(() => this.emitTable(converters)); - } - } - - protected emitTopLevelArray(t: ArrayType, name: Name): void { - const elementType = this.kotlinType(t.items); - this.emitBlock( - ["class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)"], - () => { - this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitLine( - "public fun fromJson(json: String) = ", - name, - "(klaxon.parseArray<", - elementType, - ">(json)!!)" - ); - }); - } - ); - } - - protected emitTopLevelMap(t: MapType, name: Name): void { - const elementType = this.kotlinType(t.values); - this.emitBlock( - [ - "class ", - name, - "(elements: Map) : HashMap(elements)" - ], - () => { - this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitBlock( - ["public fun fromJson(json: String) = ", name], - () => { - this.emitLine( - "klaxon.parseJsonObject(java.io.StringReader(json)) as Map" - ); - }, - "paren" - ); - }); - } - ); - } - - private klaxonRenameAttribute(propName: Name, jsonName: string, ignore = false): Sourcelike | undefined { - const escapedName = stringEscape(jsonName); - const namesDiffer = this.sourcelikeToString(propName) !== escapedName; - const properties: Sourcelike[] = []; - if (namesDiffer) { - properties.push(['name = "', escapedName, '"']); - } - - if (ignore) { - properties.push("ignored = true"); - } - - return properties.length === 0 ? undefined : ["@Json(", arrayIntercalate(", ", properties), ")"]; - } - - protected emitEmptyClassDefinition(c: ClassType, className: Name): void { - this.emitDescription(this.descriptionForType(c)); - - this.emitLine("typealias ", className, " = JsonObject"); - } - - protected emitClassDefinitionMethods(c: ClassType, className: Name): void { - const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); - if (isTopLevel) { - this.emitBlock(")", () => { - this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitLine("public fun fromJson(json: String) = klaxon.parse<", className, ">(json)"); - }); - }); - } else { - this.emitLine(")"); - } - } - - protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { - const rename = this.klaxonRenameAttribute(name, jsonName); - if (rename !== undefined) { - meta.push(() => this.emitLine(rename)); - } - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { - let count = e.cases.size; - this.forEachEnumCase(e, "none", (name, json) => { - this.emitLine(name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ","); - }); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitBlock(["public fun fromValue(value: String): ", enumName, " = when (value)"], () => { - let table: Sourcelike[][] = []; - this.forEachEnumCase(e, "none", (name, json) => { - table.push([[`"${stringEscape(json)}"`], [" -> ", name]]); - }); - table.push([["else"], [" -> throw IllegalArgumentException()"]]); - this.emitTable(table); - }); - }); - }); - } - - private emitGenericConverter(): void { - this.ensureBlankLine(); - this.emitLine( - "private fun Klaxon.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonValue) -> T, toJson: (T) -> String, isUnion: Boolean = false) =" - ); - this.indent(() => { - this.emitLine("this.converter(object: Converter {"); - this.indent(() => { - this.emitLine('@Suppress("UNCHECKED_CAST")'); - this.emitTable([ - ["override fun toJson(value: Any)", " = toJson(value as T)"], - ["override fun fromJson(jv: JsonValue)", " = fromJson(jv) as Any"], - [ - "override fun canConvert(cls: Class<*>)", - " = cls == k.java || (isUnion && cls.superclass == k.java)" - ] - ]); - }); - this.emitLine("})"); - }); - } - - protected emitUnionDefinitionMethods( - u: UnionType, - nonNulls: ReadonlySet, - maybeNull: PrimitiveType | null, - unionName: Name - ): void { - this.ensureBlankLine(); - this.emitLine("public fun toJson(): String = klaxon.toJsonString(when (this) {"); - this.indent(() => { - let toJsonTable: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, name => { - toJsonTable.push([["is ", name], [" -> this.value"]]); - }); - if (maybeNull !== null) { - const name = this.nameForUnionMember(u, maybeNull); - toJsonTable.push([["is ", name], [' -> "null"']]); - } - - this.emitTable(toJsonTable); - }); - this.emitLine("})"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitLine("public fun fromJson(jv: JsonValue): ", unionName, " = when (jv.inside) {"); - this.indent(() => { - let table: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - table.push([ - [this.unionMemberJsonValueGuard(t, "jv.inside")], - [" -> ", name, "(", this.unionMemberFromJsonValue(t, "jv"), "!!)"] - ]); - }); - if (maybeNull !== null) { - const name = this.nameForUnionMember(u, maybeNull); - table.push([[this.unionMemberJsonValueGuard(maybeNull, "jv.inside")], [" -> ", name, "()"]]); - } - - table.push([["else"], [" -> throw IllegalArgumentException()"]]); - this.emitTable(table); - }); - this.emitLine("}"); - }); - } -} - -export class KotlinJacksonRenderer extends KotlinRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - _kotlinOptions: OptionValues - ) { - super(targetLanguage, renderContext, _kotlinOptions); - } - - private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { - return matchType( - t, - _anyType => "is Any", - _nullType => "null", - _boolType => "is BooleanNode", - _integerType => "is IntNode, is LongNode", - _doubleType => "is DoubleNode", - _stringType => "is TextNode", - _arrayType => "is ArrayNode", - // These could be stricter, but for now we don't allow maps - // and objects in the same union - _classType => "is ObjectNode", - _mapType => "is ObjectNode", - // This could be stricter, but for now we don't allow strings - // and enums in the same union - _enumType => "is TextNode", - _unionType => mustNotHappen() - ); - } - - protected emitUsageHeader(): void { - this.emitLine("// To parse the JSON, install jackson-module-kotlin and do:"); - this.emitLine("//"); - this.forEachTopLevel("none", (_, name) => { - this.emitLine("// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)"); - }); - } - - protected emitHeader(): void { - super.emitHeader(); - - this.emitMultiline(`import com.fasterxml.jackson.annotation.* -import com.fasterxml.jackson.core.* -import com.fasterxml.jackson.databind.* -import com.fasterxml.jackson.databind.deser.std.StdDeserializer -import com.fasterxml.jackson.databind.module.SimpleModule -import com.fasterxml.jackson.databind.node.* -import com.fasterxml.jackson.databind.ser.std.StdSerializer -import com.fasterxml.jackson.module.kotlin.*`); - - const hasUnions = iterableSome( - this.typeGraph.allNamedTypes(), - t => t instanceof UnionType && nullableFromUnion(t) === null - ); - const hasEmptyObjects = iterableSome( - this.typeGraph.allNamedTypes(), - c => c instanceof ClassType && c.getProperties().size === 0 - ); - if (hasUnions || this.haveEnums || hasEmptyObjects) { - this.emitGenericConverter(); - } - - let converters: Sourcelike[][] = []; - // if (hasEmptyObjects) { - // converters.push([["convert(JsonNode::class,"], [" { it },"], [" { writeValueAsString(it) })"]]); - // } - this.forEachEnum("none", (_, name) => { - converters.push([ - ["convert(", name, "::class,"], - [" { ", name, ".fromValue(it.asText()) },"], - [' { "\\"${it.value}\\"" })'] - ]); - }); - this.forEachUnion("none", (_, name) => { - converters.push([ - ["convert(", name, "::class,"], - [" { ", name, ".fromJson(it) },"], - [" { it.toJson() }, true)"] - ]); - }); - - this.ensureBlankLine(); - this.emitLine("val mapper = jacksonObjectMapper().apply {"); - this.indent(() => { - this.emitLine("propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE"); - this.emitLine("setSerializationInclusion(JsonInclude.Include.NON_NULL)"); - }); - - if (converters.length > 0) { - this.indent(() => this.emitTable(converters)); - } - - this.emitLine("}"); - } - - protected emitTopLevelArray(t: ArrayType, name: Name): void { - const elementType = this.kotlinType(t.items); - this.emitBlock( - ["class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)"], - () => { - this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(json: String) = mapper.readValue<", name, ">(json)"); - }); - } - ); - } - - protected emitTopLevelMap(t: MapType, name: Name): void { - const elementType = this.kotlinType(t.values); - this.emitBlock( - [ - "class ", - name, - "(elements: Map) : HashMap(elements)" - ], - () => { - this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(json: String) = mapper.readValue<", name, ">(json)"); - }); - } - ); - } - - private jacksonRenameAttribute( - propName: Name, - jsonName: string, - required: boolean, - ignore = false - ): Sourcelike | undefined { - const escapedName = stringEscape(jsonName); - const namesDiffer = this.sourcelikeToString(propName) !== escapedName; - const properties: Sourcelike[] = []; - const isPrefixBool = jsonName.startsWith("is"); // https://github.com/FasterXML/jackson-module-kotlin/issues/80 - const propertyOpts: Sourcelike[] = []; - - if (namesDiffer || isPrefixBool) { - propertyOpts.push('"' + escapedName + '"'); - } - - if (required) { - propertyOpts.push("required=true"); - } - - if (propertyOpts.length > 0) { - properties.push(["@get:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")"]); - properties.push(["@field:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")"]); - } - - if (ignore) { - properties.push("@get:JsonIgnore"); - properties.push("@field:JsonIgnore"); - } - - return properties.length === 0 ? undefined : properties; - } - - protected emitEmptyClassDefinition(c: ClassType, className: Name): void { - this.emitDescription(this.descriptionForType(c)); - - this.emitLine("typealias ", className, " = JsonNode"); - } - - protected emitClassDefinitionMethods(c: ClassType, className: Name): void { - const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); - if (isTopLevel) { - this.emitBlock(")", () => { - this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(json: String) = mapper.readValue<", className, ">(json)"); - }); - }); - } else { - this.emitLine(")"); - } - } - - protected renameAttribute(name: Name, jsonName: string, required: boolean, meta: Array<() => void>): void { - const rename = this.jacksonRenameAttribute(name, jsonName, required); - if (rename !== undefined) { - meta.push(() => this.emitLine(rename)); - } - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { - let count = e.cases.size; - this.forEachEnumCase(e, "none", (name, json) => { - this.emitLine(name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ","); - }); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitBlock(["fun fromValue(value: String): ", enumName, " = when (value)"], () => { - let table: Sourcelike[][] = []; - this.forEachEnumCase(e, "none", (name, json) => { - table.push([[`"${stringEscape(json)}"`], [" -> ", name]]); - }); - table.push([["else"], [" -> throw IllegalArgumentException()"]]); - this.emitTable(table); - }); - }); - }); - } - - private emitGenericConverter(): void { - this.ensureBlankLine(); - this.emitMultiline(` -@Suppress("UNCHECKED_CAST") -private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonNode) -> T, toJson: (T) -> String, isUnion: Boolean = false) = registerModule(SimpleModule().apply { - addSerializer(k.java as Class, object : StdSerializer(k.java as Class) { - override fun serialize(value: T, gen: JsonGenerator, provider: SerializerProvider) = gen.writeRawValue(toJson(value)) - }) - addDeserializer(k.java as Class, object : StdDeserializer(k.java as Class) { - override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = fromJson(p.readValueAsTree()) - }) -})`); - } - - protected emitUnionDefinitionMethods( - u: UnionType, - nonNulls: ReadonlySet, - maybeNull: PrimitiveType | null, - unionName: Name - ): void { - this.ensureBlankLine(); - this.emitLine("fun toJson(): String = mapper.writeValueAsString(when (this) {"); - this.indent(() => { - let toJsonTable: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, name => { - toJsonTable.push([["is ", name], [" -> this.value"]]); - }); - if (maybeNull !== null) { - const name = this.nameForUnionMember(u, maybeNull); - toJsonTable.push([["is ", name], [' -> "null"']]); - } - - this.emitTable(toJsonTable); - }); - this.emitLine("})"); - this.ensureBlankLine(); - this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(jn: JsonNode): ", unionName, " = when (jn) {"); - this.indent(() => { - let table: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - table.push([[this.unionMemberJsonValueGuard(t, "jn")], [" -> ", name, "(mapper.treeToValue(jn))"]]); - }); - if (maybeNull !== null) { - const name = this.nameForUnionMember(u, maybeNull); - table.push([[this.unionMemberJsonValueGuard(maybeNull, "jn")], [" -> ", name, "()"]]); - } - - table.push([["else"], [" -> throw IllegalArgumentException()"]]); - this.emitTable(table); - }); - this.emitLine("}"); - }); - } -} - -/** - * Currently supports simple classes, enums, and TS string unions (which are also enums). - * TODO: Union, Any, Top Level Array, Top Level Map - */ -export class KotlinXRenderer extends KotlinRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - _kotlinOptions: OptionValues - ) { - super(targetLanguage, renderContext, _kotlinOptions); - } - - protected anySourceType(optional: string): Sourcelike { - return ["JsonElement", optional]; - } - - protected arrayType(arrayType: ArrayType, withIssues = false, noOptional = false): Sourcelike { - const valType = this.kotlinType(arrayType.items, withIssues, true); - const name = this.sourcelikeToString(valType); - if (name === "JsonObject" || name === "JsonElement") { - return "JsonArray"; - } - - return super.arrayType(arrayType, withIssues, noOptional); - } - - protected mapType(mapType: MapType, withIssues = false, noOptional = false): Sourcelike { - const valType = this.kotlinType(mapType.values, withIssues, true); - const name = this.sourcelikeToString(valType); - if (name === "JsonObject" || name === "JsonElement") { - return "JsonObject"; - } - - return super.mapType(mapType, withIssues, noOptional); - } - - protected emitTopLevelMap(t: MapType, name: Name): void { - const elementType = this.kotlinType(t.values); - if (elementType === "JsonObject") { - this.emitLine(["typealias ", name, " = JsonObject"]); - } else { - super.emitTopLevelMap(t, name); - } - } - - protected emitTopLevelArray(t: ArrayType, name: Name): void { - const elementType = this.kotlinType(t.items); - this.emitLine(["typealias ", name, " = JsonArray<", elementType, ">"]); - } - - protected emitUsageHeader(): void { - this.emitLine("// To parse the JSON, install kotlin's serialization plugin and do:"); - this.emitLine("//"); - const table: Sourcelike[][] = []; - table.push(["// val ", "json", " = Json { allowStructuredMapKeys = true }"]); - this.forEachTopLevel("none", (_, name) => { - table.push([ - "// val ", - modifySource(camelCase, name), - ` = json.parse(${this.sourcelikeToString(name)}.serializer(), jsonString)` - ]); - }); - this.emitTable(table); - } - - protected emitHeader(): void { - super.emitHeader(); - - this.emitLine("import kotlinx.serialization.*"); - this.emitLine("import kotlinx.serialization.json.*"); - this.emitLine("import kotlinx.serialization.descriptors.*"); - this.emitLine("import kotlinx.serialization.encoding.*"); - } - - protected emitClassAnnotations(_c: Type, _className: Name): void { - this.emitLine("@Serializable"); - } - - protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { - const rename = this._rename(name, jsonName); - if (rename !== undefined) { - meta.push(() => this.emitLine(rename)); - } - } - - private _rename(propName: Name, jsonName: string): Sourcelike | undefined { - const escapedName = stringEscape(jsonName); - const namesDiffer = this.sourcelikeToString(propName) !== escapedName; - if (namesDiffer) { - return ['@SerialName("', escapedName, '")']; - } - - return undefined; - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - this.emitLine(["@Serializable"]); - this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { - let count = e.cases.size; - this.forEachEnumCase(e, "none", (name, json) => { - const jsonEnum = stringEscape(json); - this.emitLine(`@SerialName("${jsonEnum}") `, name, `("${jsonEnum}")`, --count === 0 ? ";" : ","); - }); - }); - } -} diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts new file mode 100644 index 000000000..0b840946a --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts @@ -0,0 +1,293 @@ +import { arrayIntercalate, iterableSome } from "collection-utils"; + +import { type Name } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { camelCase } from "../../support/Strings"; +import { mustNotHappen } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { + type ArrayType, + ClassType, + type EnumType, + type MapType, + type PrimitiveType, + type Type, + UnionType +} from "../../Type"; +import { matchType, nullableFromUnion } from "../../TypeUtils"; + +import { KotlinRenderer } from "./KotlinRenderer"; +import { type kotlinOptions } from "./language"; +import { stringEscape } from "./utils"; + +export class KotlinJacksonRenderer extends KotlinRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + _kotlinOptions: OptionValues + ) { + super(targetLanguage, renderContext, _kotlinOptions); + } + + private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { + return matchType( + t, + _anyType => "is Any", + _nullType => "null", + _boolType => "is BooleanNode", + _integerType => "is IntNode, is LongNode", + _doubleType => "is DoubleNode", + _stringType => "is TextNode", + _arrayType => "is ArrayNode", + // These could be stricter, but for now we don't allow maps + // and objects in the same union + _classType => "is ObjectNode", + _mapType => "is ObjectNode", + // This could be stricter, but for now we don't allow strings + // and enums in the same union + _enumType => "is TextNode", + _unionType => mustNotHappen() + ); + } + + protected emitUsageHeader(): void { + this.emitLine("// To parse the JSON, install jackson-module-kotlin and do:"); + this.emitLine("//"); + this.forEachTopLevel("none", (_, name) => { + this.emitLine("// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)"); + }); + } + + protected emitHeader(): void { + super.emitHeader(); + + this.emitMultiline(`import com.fasterxml.jackson.annotation.* +import com.fasterxml.jackson.core.* +import com.fasterxml.jackson.databind.* +import com.fasterxml.jackson.databind.deser.std.StdDeserializer +import com.fasterxml.jackson.databind.module.SimpleModule +import com.fasterxml.jackson.databind.node.* +import com.fasterxml.jackson.databind.ser.std.StdSerializer +import com.fasterxml.jackson.module.kotlin.*`); + + const hasUnions = iterableSome( + this.typeGraph.allNamedTypes(), + t => t instanceof UnionType && nullableFromUnion(t) === null + ); + const hasEmptyObjects = iterableSome( + this.typeGraph.allNamedTypes(), + c => c instanceof ClassType && c.getProperties().size === 0 + ); + if (hasUnions || this.haveEnums || hasEmptyObjects) { + this.emitGenericConverter(); + } + + let converters: Sourcelike[][] = []; + // if (hasEmptyObjects) { + // converters.push([["convert(JsonNode::class,"], [" { it },"], [" { writeValueAsString(it) })"]]); + // } + this.forEachEnum("none", (_, name) => { + converters.push([ + ["convert(", name, "::class,"], + [" { ", name, ".fromValue(it.asText()) },"], + [' { "\\"${it.value}\\"" })'] + ]); + }); + this.forEachUnion("none", (_, name) => { + converters.push([ + ["convert(", name, "::class,"], + [" { ", name, ".fromJson(it) },"], + [" { it.toJson() }, true)"] + ]); + }); + + this.ensureBlankLine(); + this.emitLine("val mapper = jacksonObjectMapper().apply {"); + this.indent(() => { + this.emitLine("propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE"); + this.emitLine("setSerializationInclusion(JsonInclude.Include.NON_NULL)"); + }); + + if (converters.length > 0) { + this.indent(() => this.emitTable(converters)); + } + + this.emitLine("}"); + } + + protected emitTopLevelArray(t: ArrayType, name: Name): void { + const elementType = this.kotlinType(t.items); + this.emitBlock( + ["class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)"], + () => { + this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitLine("fun fromJson(json: String) = mapper.readValue<", name, ">(json)"); + }); + } + ); + } + + protected emitTopLevelMap(t: MapType, name: Name): void { + const elementType = this.kotlinType(t.values); + this.emitBlock( + [ + "class ", + name, + "(elements: Map) : HashMap(elements)" + ], + () => { + this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitLine("fun fromJson(json: String) = mapper.readValue<", name, ">(json)"); + }); + } + ); + } + + private jacksonRenameAttribute( + propName: Name, + jsonName: string, + required: boolean, + ignore = false + ): Sourcelike | undefined { + const escapedName = stringEscape(jsonName); + const namesDiffer = this.sourcelikeToString(propName) !== escapedName; + const properties: Sourcelike[] = []; + const isPrefixBool = jsonName.startsWith("is"); // https://github.com/FasterXML/jackson-module-kotlin/issues/80 + const propertyOpts: Sourcelike[] = []; + + if (namesDiffer || isPrefixBool) { + propertyOpts.push('"' + escapedName + '"'); + } + + if (required) { + propertyOpts.push("required=true"); + } + + if (propertyOpts.length > 0) { + properties.push(["@get:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")"]); + properties.push(["@field:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")"]); + } + + if (ignore) { + properties.push("@get:JsonIgnore"); + properties.push("@field:JsonIgnore"); + } + + return properties.length === 0 ? undefined : properties; + } + + protected emitEmptyClassDefinition(c: ClassType, className: Name): void { + this.emitDescription(this.descriptionForType(c)); + + this.emitLine("typealias ", className, " = JsonNode"); + } + + protected emitClassDefinitionMethods(c: ClassType, className: Name): void { + const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); + if (isTopLevel) { + this.emitBlock(")", () => { + this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitLine("fun fromJson(json: String) = mapper.readValue<", className, ">(json)"); + }); + }); + } else { + this.emitLine(")"); + } + } + + protected renameAttribute(name: Name, jsonName: string, required: boolean, meta: Array<() => void>): void { + const rename = this.jacksonRenameAttribute(name, jsonName, required); + if (rename !== undefined) { + meta.push(() => this.emitLine(rename)); + } + } + + protected emitEnumDefinition(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + + this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { + let count = e.cases.size; + this.forEachEnumCase(e, "none", (name, json) => { + this.emitLine(name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ","); + }); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitBlock(["fun fromValue(value: String): ", enumName, " = when (value)"], () => { + let table: Sourcelike[][] = []; + this.forEachEnumCase(e, "none", (name, json) => { + table.push([[`"${stringEscape(json)}"`], [" -> ", name]]); + }); + table.push([["else"], [" -> throw IllegalArgumentException()"]]); + this.emitTable(table); + }); + }); + }); + } + + private emitGenericConverter(): void { + this.ensureBlankLine(); + this.emitMultiline(` +@Suppress("UNCHECKED_CAST") +private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonNode) -> T, toJson: (T) -> String, isUnion: Boolean = false) = registerModule(SimpleModule().apply { + addSerializer(k.java as Class, object : StdSerializer(k.java as Class) { + override fun serialize(value: T, gen: JsonGenerator, provider: SerializerProvider) = gen.writeRawValue(toJson(value)) + }) + addDeserializer(k.java as Class, object : StdDeserializer(k.java as Class) { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = fromJson(p.readValueAsTree()) + }) +})`); + } + + protected emitUnionDefinitionMethods( + u: UnionType, + nonNulls: ReadonlySet, + maybeNull: PrimitiveType | null, + unionName: Name + ): void { + this.ensureBlankLine(); + this.emitLine("fun toJson(): String = mapper.writeValueAsString(when (this) {"); + this.indent(() => { + let toJsonTable: Sourcelike[][] = []; + this.forEachUnionMember(u, nonNulls, "none", null, name => { + toJsonTable.push([["is ", name], [" -> this.value"]]); + }); + if (maybeNull !== null) { + const name = this.nameForUnionMember(u, maybeNull); + toJsonTable.push([["is ", name], [' -> "null"']]); + } + + this.emitTable(toJsonTable); + }); + this.emitLine("})"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitLine("fun fromJson(jn: JsonNode): ", unionName, " = when (jn) {"); + this.indent(() => { + let table: Sourcelike[][] = []; + this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { + table.push([[this.unionMemberJsonValueGuard(t, "jn")], [" -> ", name, "(mapper.treeToValue(jn))"]]); + }); + if (maybeNull !== null) { + const name = this.nameForUnionMember(u, maybeNull); + table.push([[this.unionMemberJsonValueGuard(maybeNull, "jn")], [" -> ", name, "()"]]); + } + + table.push([["else"], [" -> throw IllegalArgumentException()"]]); + this.emitTable(table); + }); + this.emitLine("}"); + }); + } +} diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts new file mode 100644 index 000000000..bcfaf9043 --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts @@ -0,0 +1,306 @@ +import { arrayIntercalate, iterableSome } from "collection-utils"; + +import { type Name } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { camelCase } from "../../support/Strings"; +import { mustNotHappen } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { + type ArrayType, + ClassType, + type EnumType, + type MapType, + type PrimitiveType, + type Type, + UnionType +} from "../../Type"; +import { matchType, nullableFromUnion } from "../../TypeUtils"; + +import { KotlinRenderer } from "./KotlinRenderer"; +import { type kotlinOptions } from "./language"; +import { stringEscape } from "./utils"; + +export class KotlinKlaxonRenderer extends KotlinRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + _kotlinOptions: OptionValues + ) { + super(targetLanguage, renderContext, _kotlinOptions); + } + + private unionMemberFromJsonValue(t: Type, e: Sourcelike): Sourcelike { + return matchType( + t, + _anyType => [e, ".inside"], + _nullType => "null", + _boolType => [e, ".boolean"], + _integerType => ["(", e, ".int?.toLong() ?: ", e, ".longValue)"], + _doubleType => [e, ".double"], + _stringType => [e, ".string"], + arrayType => [e, ".array?.let { klaxon.parseFromJsonArray<", this.kotlinType(arrayType.items), ">(it) }"], + _classType => [e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }"], + _mapType => [e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }"], + enumType => [e, ".string?.let { ", this.kotlinType(enumType), ".fromValue(it) }"], + _unionType => mustNotHappen() + ); + } + + private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { + return matchType( + t, + _anyType => "is Any", + _nullType => "null", + _boolType => "is Boolean", + _integerType => "is Int, is Long", + _doubleType => "is Double", + _stringType => "is String", + _arrayType => "is JsonArray<*>", + // These could be stricter, but for now we don't allow maps + // and objects in the same union + _classType => "is JsonObject", + _mapType => "is JsonObject", + // This could be stricter, but for now we don't allow strings + // and enums in the same union + _enumType => "is String", + _unionType => mustNotHappen() + ); + } + + protected emitUsageHeader(): void { + this.emitLine("// To parse the JSON, install Klaxon and do:"); + this.emitLine("//"); + this.forEachTopLevel("none", (_, name) => { + this.emitLine("// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)"); + }); + } + + protected emitHeader(): void { + super.emitHeader(); + + this.emitLine("import com.beust.klaxon.*"); + + const hasUnions = iterableSome( + this.typeGraph.allNamedTypes(), + t => t instanceof UnionType && nullableFromUnion(t) === null + ); + const hasEmptyObjects = iterableSome( + this.typeGraph.allNamedTypes(), + c => c instanceof ClassType && c.getProperties().size === 0 + ); + if (hasUnions || this.haveEnums || hasEmptyObjects) { + this.emitGenericConverter(); + } + + let converters: Sourcelike[][] = []; + if (hasEmptyObjects) { + converters.push([[".convert(JsonObject::class,"], [" { it.obj!! },"], [" { it.toJsonString() })"]]); + } + + this.forEachEnum("none", (_, name) => { + converters.push([ + [".convert(", name, "::class,"], + [" { ", name, ".fromValue(it.string!!) },"], + [' { "\\"${it.value}\\"" })'] + ]); + }); + this.forEachUnion("none", (_, name) => { + converters.push([ + [".convert(", name, "::class,"], + [" { ", name, ".fromJson(it) },"], + [" { it.toJson() }, true)"] + ]); + }); + + this.ensureBlankLine(); + this.emitLine("private val klaxon = Klaxon()"); + if (converters.length > 0) { + this.indent(() => this.emitTable(converters)); + } + } + + protected emitTopLevelArray(t: ArrayType, name: Name): void { + const elementType = this.kotlinType(t.items); + this.emitBlock( + ["class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)"], + () => { + this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitLine( + "public fun fromJson(json: String) = ", + name, + "(klaxon.parseArray<", + elementType, + ">(json)!!)" + ); + }); + } + ); + } + + protected emitTopLevelMap(t: MapType, name: Name): void { + const elementType = this.kotlinType(t.values); + this.emitBlock( + [ + "class ", + name, + "(elements: Map) : HashMap(elements)" + ], + () => { + this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitBlock( + ["public fun fromJson(json: String) = ", name], + () => { + this.emitLine( + "klaxon.parseJsonObject(java.io.StringReader(json)) as Map" + ); + }, + "paren" + ); + }); + } + ); + } + + private klaxonRenameAttribute(propName: Name, jsonName: string, ignore = false): Sourcelike | undefined { + const escapedName = stringEscape(jsonName); + const namesDiffer = this.sourcelikeToString(propName) !== escapedName; + const properties: Sourcelike[] = []; + if (namesDiffer) { + properties.push(['name = "', escapedName, '"']); + } + + if (ignore) { + properties.push("ignored = true"); + } + + return properties.length === 0 ? undefined : ["@Json(", arrayIntercalate(", ", properties), ")"]; + } + + protected emitEmptyClassDefinition(c: ClassType, className: Name): void { + this.emitDescription(this.descriptionForType(c)); + + this.emitLine("typealias ", className, " = JsonObject"); + } + + protected emitClassDefinitionMethods(c: ClassType, className: Name): void { + const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); + if (isTopLevel) { + this.emitBlock(")", () => { + this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitLine("public fun fromJson(json: String) = klaxon.parse<", className, ">(json)"); + }); + }); + } else { + this.emitLine(")"); + } + } + + protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { + const rename = this.klaxonRenameAttribute(name, jsonName); + if (rename !== undefined) { + meta.push(() => this.emitLine(rename)); + } + } + + protected emitEnumDefinition(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + + this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { + let count = e.cases.size; + this.forEachEnumCase(e, "none", (name, json) => { + this.emitLine(name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ","); + }); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitBlock(["public fun fromValue(value: String): ", enumName, " = when (value)"], () => { + let table: Sourcelike[][] = []; + this.forEachEnumCase(e, "none", (name, json) => { + table.push([[`"${stringEscape(json)}"`], [" -> ", name]]); + }); + table.push([["else"], [" -> throw IllegalArgumentException()"]]); + this.emitTable(table); + }); + }); + }); + } + + private emitGenericConverter(): void { + this.ensureBlankLine(); + this.emitLine( + "private fun Klaxon.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonValue) -> T, toJson: (T) -> String, isUnion: Boolean = false) =" + ); + this.indent(() => { + this.emitLine("this.converter(object: Converter {"); + this.indent(() => { + this.emitLine('@Suppress("UNCHECKED_CAST")'); + this.emitTable([ + ["override fun toJson(value: Any)", " = toJson(value as T)"], + ["override fun fromJson(jv: JsonValue)", " = fromJson(jv) as Any"], + [ + "override fun canConvert(cls: Class<*>)", + " = cls == k.java || (isUnion && cls.superclass == k.java)" + ] + ]); + }); + this.emitLine("})"); + }); + } + + protected emitUnionDefinitionMethods( + u: UnionType, + nonNulls: ReadonlySet, + maybeNull: PrimitiveType | null, + unionName: Name + ): void { + this.ensureBlankLine(); + this.emitLine("public fun toJson(): String = klaxon.toJsonString(when (this) {"); + this.indent(() => { + let toJsonTable: Sourcelike[][] = []; + this.forEachUnionMember(u, nonNulls, "none", null, name => { + toJsonTable.push([["is ", name], [" -> this.value"]]); + }); + if (maybeNull !== null) { + const name = this.nameForUnionMember(u, maybeNull); + toJsonTable.push([["is ", name], [' -> "null"']]); + } + + this.emitTable(toJsonTable); + }); + this.emitLine("})"); + this.ensureBlankLine(); + this.emitBlock("companion object", () => { + this.emitLine("public fun fromJson(jv: JsonValue): ", unionName, " = when (jv.inside) {"); + this.indent(() => { + let table: Sourcelike[][] = []; + this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { + table.push([ + [this.unionMemberJsonValueGuard(t, "jv.inside")], + [" -> ", name, "(", this.unionMemberFromJsonValue(t, "jv"), "!!)"] + ]); + }); + if (maybeNull !== null) { + const name = this.nameForUnionMember(u, maybeNull); + table.push([[this.unionMemberJsonValueGuard(maybeNull, "jv.inside")], [" -> ", name, "()"]]); + } + + table.push([["else"], [" -> throw IllegalArgumentException()"]]); + this.emitTable(table); + }); + this.emitLine("}"); + }); + } +} diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts new file mode 100644 index 000000000..d7e5abaaa --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts @@ -0,0 +1,300 @@ +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { acronymStyle } from "../../support/Acronyms"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + type ClassType, + type EnumType, + MapType, + type ObjectType, + type PrimitiveType, + type Type, + type UnionType +} from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { type kotlinOptions } from "./language"; +import { kotlinNameStyle } from "./utils"; + +export class KotlinRenderer extends ConvenienceRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + protected readonly _kotlinOptions: OptionValues + ) { + super(targetLanguage, renderContext); + } + + protected forbiddenNamesForGlobalNamespace(): readonly string[] { + return keywords; + } + + protected forbiddenForObjectProperties(_o: ObjectType, _classNamed: Name): ForbiddenWordsInfo { + return { names: [], includeGlobalForbidden: true }; + } + + protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + return { names: [], includeGlobalForbidden: true }; + } + + protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + return { names: [], includeGlobalForbidden: false }; + } + + protected topLevelNameStyle(rawName: string): string { + return kotlinNameStyle(true, rawName); + } + + protected makeNamedTypeNamer(): Namer { + return funPrefixNamer("upper", s => kotlinNameStyle(true, s, acronymStyle(this._kotlinOptions.acronymStyle))); + } + + protected namerForObjectProperty(): Namer { + return funPrefixNamer("lower", s => kotlinNameStyle(false, s, acronymStyle(this._kotlinOptions.acronymStyle))); + } + + protected makeUnionMemberNamer(): Namer { + return funPrefixNamer("upper", s => kotlinNameStyle(true, s) + "Value"); + } + + protected makeEnumCaseNamer(): Namer { + return funPrefixNamer("upper", s => kotlinNameStyle(true, s, acronymStyle(this._kotlinOptions.acronymStyle))); + } + + protected emitDescriptionBlock(lines: Sourcelike[]): void { + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + } + + protected emitBlock(line: Sourcelike, f: () => void, delimiter: "curly" | "paren" | "lambda" = "curly"): void { + const [open, close] = delimiter === "curly" ? ["{", "}"] : delimiter === "paren" ? ["(", ")"] : ["{", "})"]; + this.emitLine(line, " ", open); + this.indent(f); + this.emitLine(close); + } + + protected anySourceType(optional: string): Sourcelike { + return ["Any", optional]; + } + + // (asarazan): I've broken out the following two functions + // because some renderers, such as kotlinx, can cope with `any`, while some get mad. + protected arrayType(arrayType: ArrayType, withIssues = false, _noOptional = false): Sourcelike { + return ["List<", this.kotlinType(arrayType.items, withIssues), ">"]; + } + + protected mapType(mapType: MapType, withIssues = false, _noOptional = false): Sourcelike { + return ["Map"]; + } + + protected kotlinType(t: Type, withIssues = false, noOptional = false): Sourcelike { + const optional = noOptional ? "" : "?"; + return matchType( + t, + _anyType => { + return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(optional)); + }, + _nullType => { + return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(optional)); + }, + _boolType => "Boolean", + _integerType => "Long", + _doubleType => "Double", + _stringType => "String", + arrayType => this.arrayType(arrayType, withIssues), + classType => this.nameForNamedType(classType), + mapType => this.mapType(mapType, withIssues), + enumType => this.nameForNamedType(enumType), + unionType => { + const nullable = nullableFromUnion(unionType); + if (nullable !== null) return [this.kotlinType(nullable, withIssues), optional]; + return this.nameForNamedType(unionType); + } + ); + } + + protected emitUsageHeader(): void { + // To be overridden + } + + protected emitHeader(): void { + if (this.leadingComments !== undefined) { + this.emitComments(this.leadingComments); + } else { + this.emitUsageHeader(); + } + + this.ensureBlankLine(); + this.emitLine("package ", this._kotlinOptions.packageName); + this.ensureBlankLine(); + } + + protected emitTopLevelPrimitive(t: PrimitiveType, name: Name): void { + const elementType = this.kotlinType(t); + this.emitLine(["typealias ", name, " = ", elementType, ""]); + } + + protected emitTopLevelArray(t: ArrayType, name: Name): void { + const elementType = this.kotlinType(t.items); + this.emitLine(["typealias ", name, " = ArrayList<", elementType, ">"]); + } + + protected emitTopLevelMap(t: MapType, name: Name): void { + const elementType = this.kotlinType(t.values); + this.emitLine(["typealias ", name, " = HashMap"]); + } + + protected emitEmptyClassDefinition(c: ClassType, className: Name): void { + this.emitDescription(this.descriptionForType(c)); + this.emitClassAnnotations(c, className); + this.emitLine("class ", className, "()"); + } + + protected emitClassDefinition(c: ClassType, className: Name): void { + if (c.getProperties().size === 0) { + this.emitEmptyClassDefinition(c, className); + return; + } + + const kotlinType = (p: ClassProperty): Sourcelike => { + if (p.isOptional) { + return [this.kotlinType(p.type, true, true), "?"]; + } else { + return this.kotlinType(p.type, true); + } + }; + + this.emitDescription(this.descriptionForType(c)); + this.emitClassAnnotations(c, className); + this.emitLine("data class ", className, " ("); + this.indent(() => { + let count = c.getProperties().size; + let first = true; + this.forEachClassProperty(c, "none", (name, jsonName, p) => { + const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; + const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; + const last = --count === 0; + let meta: Array<() => void> = []; + + const description = this.descriptionForClassProperty(c, jsonName); + if (description !== undefined) { + meta.push(() => this.emitDescription(description)); + } + + this.renameAttribute(name, jsonName, !nullableOrOptional, meta); + + if (meta.length > 0 && !first) { + this.ensureBlankLine(); + } + + for (const emit of meta) { + emit(); + } + + this.emitLine("val ", name, ": ", kotlinType(p), nullableOrOptional ? " = null" : "", last ? "" : ","); + + if (meta.length > 0 && !last) { + this.ensureBlankLine(); + } + + first = false; + }); + }); + + this.emitClassDefinitionMethods(c, className); + } + + protected emitClassDefinitionMethods(_c: ClassType, _className: Name): void { + this.emitLine(")"); + } + + protected emitClassAnnotations(_c: Type, _className: Name): void { + // to be overridden + } + + protected renameAttribute(_name: Name, _jsonName: string, _required: boolean, _meta: Array<() => void>): void { + // to be overridden + } + + protected emitEnumDefinition(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + + this.emitBlock(["enum class ", enumName], () => { + let count = e.cases.size; + this.forEachEnumCase(e, "none", name => { + this.emitLine(name, --count === 0 ? "" : ","); + }); + }); + } + + protected emitUnionDefinition(u: UnionType, unionName: Name): void { + function sortBy(t: Type): string { + const kind = t.kind; + if (kind === "class") return kind; + return "_" + kind; + } + + this.emitDescription(this.descriptionForType(u)); + + const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); + this.emitClassAnnotations(u, unionName); + this.emitBlock(["sealed class ", unionName], () => { + { + let table: Sourcelike[][] = []; + this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { + table.push([ + ["class ", name, "(val value: ", this.kotlinType(t), ")"], + [" : ", unionName, "()"] + ]); + }); + if (maybeNull !== null) { + table.push([ + ["class ", this.nameForUnionMember(u, maybeNull), "()"], + [" : ", unionName, "()"] + ]); + } + + this.emitTable(table); + } + + this.emitUnionDefinitionMethods(u, nonNulls, maybeNull, unionName); + }); + } + + protected emitUnionDefinitionMethods( + _u: UnionType, + _nonNulls: ReadonlySet, + _maybeNull: PrimitiveType | null, + _unionName: Name + ): void { + // to be overridden + } + + protected emitSourceStructure(): void { + this.emitHeader(); + + // Top-level arrays, maps + this.forEachTopLevel("leading", (t, name) => { + if (t instanceof ArrayType) { + this.emitTopLevelArray(t, name); + } else if (t instanceof MapType) { + this.emitTopLevelMap(t, name); + } else if (t.isPrimitive()) { + this.emitTopLevelPrimitive(t, name); + } + }); + + this.forEachNamedType( + "leading-and-interposing", + (c: ClassType, n: Name) => this.emitClassDefinition(c, n), + (e, n) => this.emitEnumDefinition(e, n), + (u, n) => this.emitUnionDefinition(u, n) + ); + } +} diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts new file mode 100644 index 000000000..66a579b45 --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts @@ -0,0 +1,121 @@ +import { type Name } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { camelCase } from "../../support/Strings"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ArrayType, type EnumType, type MapType, type Type } from "../../Type"; + +import { KotlinRenderer } from "./KotlinRenderer"; +import { type kotlinOptions } from "./language"; +import { stringEscape } from "./utils"; + +/** + * Currently supports simple classes, enums, and TS string unions (which are also enums). + * TODO: Union, Any, Top Level Array, Top Level Map + */ +export class KotlinXRenderer extends KotlinRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + _kotlinOptions: OptionValues + ) { + super(targetLanguage, renderContext, _kotlinOptions); + } + + protected anySourceType(optional: string): Sourcelike { + return ["JsonElement", optional]; + } + + protected arrayType(arrayType: ArrayType, withIssues = false, noOptional = false): Sourcelike { + const valType = this.kotlinType(arrayType.items, withIssues, true); + const name = this.sourcelikeToString(valType); + if (name === "JsonObject" || name === "JsonElement") { + return "JsonArray"; + } + + return super.arrayType(arrayType, withIssues, noOptional); + } + + protected mapType(mapType: MapType, withIssues = false, noOptional = false): Sourcelike { + const valType = this.kotlinType(mapType.values, withIssues, true); + const name = this.sourcelikeToString(valType); + if (name === "JsonObject" || name === "JsonElement") { + return "JsonObject"; + } + + return super.mapType(mapType, withIssues, noOptional); + } + + protected emitTopLevelMap(t: MapType, name: Name): void { + const elementType = this.kotlinType(t.values); + if (elementType === "JsonObject") { + this.emitLine(["typealias ", name, " = JsonObject"]); + } else { + super.emitTopLevelMap(t, name); + } + } + + protected emitTopLevelArray(t: ArrayType, name: Name): void { + const elementType = this.kotlinType(t.items); + this.emitLine(["typealias ", name, " = JsonArray<", elementType, ">"]); + } + + protected emitUsageHeader(): void { + this.emitLine("// To parse the JSON, install kotlin's serialization plugin and do:"); + this.emitLine("//"); + const table: Sourcelike[][] = []; + table.push(["// val ", "json", " = Json { allowStructuredMapKeys = true }"]); + this.forEachTopLevel("none", (_, name) => { + table.push([ + "// val ", + modifySource(camelCase, name), + ` = json.parse(${this.sourcelikeToString(name)}.serializer(), jsonString)` + ]); + }); + this.emitTable(table); + } + + protected emitHeader(): void { + super.emitHeader(); + + this.emitLine("import kotlinx.serialization.*"); + this.emitLine("import kotlinx.serialization.json.*"); + this.emitLine("import kotlinx.serialization.descriptors.*"); + this.emitLine("import kotlinx.serialization.encoding.*"); + } + + protected emitClassAnnotations(_c: Type, _className: Name): void { + this.emitLine("@Serializable"); + } + + protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { + const rename = this._rename(name, jsonName); + if (rename !== undefined) { + meta.push(() => this.emitLine(rename)); + } + } + + private _rename(propName: Name, jsonName: string): Sourcelike | undefined { + const escapedName = stringEscape(jsonName); + const namesDiffer = this.sourcelikeToString(propName) !== escapedName; + if (namesDiffer) { + return ['@SerialName("', escapedName, '")']; + } + + return undefined; + } + + protected emitEnumDefinition(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + + this.emitLine(["@Serializable"]); + this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { + let count = e.cases.size; + this.forEachEnumCase(e, "none", (name, json) => { + const jsonEnum = stringEscape(json); + this.emitLine(`@SerialName("${jsonEnum}") `, name, `("${jsonEnum}")`, --count === 0 ? ";" : ","); + }); + }); + } +} diff --git a/packages/quicktype-core/src/language/Kotlin/constants.ts b/packages/quicktype-core/src/language/Kotlin/constants.ts new file mode 100644 index 000000000..8e83c7388 --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/constants.ts @@ -0,0 +1,51 @@ +export const keywords = [ + "package", + "as", + "typealias", + "class", + "this", + "super", + "val", + "var", + "fun", + "for", + "null", + "true", + "false", + "is", + "in", + "throw", + "return", + "break", + "continue", + "object", + "if", + "try", + "else", + "while", + "do", + "when", + "interface", + "typeof", + "klaxon", + "toJson", + "Any", + "Boolean", + "Double", + "Float", + "Long", + "Int", + "Short", + "System", + "Byte", + "String", + "Array", + "List", + "Map", + "Enum", + "Class", + "JsonObject", + "JsonValue", + "Converter", + "Klaxon" +] as const; diff --git a/packages/quicktype-core/src/language/Kotlin/index.ts b/packages/quicktype-core/src/language/Kotlin/index.ts new file mode 100644 index 000000000..e6459d694 --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/index.ts @@ -0,0 +1,5 @@ +export { KotlinTargetLanguage, kotlinOptions } from "./language"; +export { KotlinRenderer } from "./KotlinRenderer"; +export { KotlinJacksonRenderer } from "./KotlinJacksonRenderer"; +export { KotlinKlaxonRenderer } from "./KotlinKlaxonRenderer"; +export { KotlinXRenderer } from "./KotlinXRenderer"; diff --git a/packages/quicktype-core/src/language/Kotlin/language.ts b/packages/quicktype-core/src/language/Kotlin/language.ts new file mode 100644 index 000000000..59a150dc9 --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/language.ts @@ -0,0 +1,70 @@ +import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type RenderContext } from "../../Renderer"; +import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; +import { assertNever } from "../../support/Support"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { KotlinJacksonRenderer } from "./KotlinJacksonRenderer"; +import { KotlinKlaxonRenderer } from "./KotlinKlaxonRenderer"; +import { KotlinRenderer } from "./KotlinRenderer"; +import { KotlinXRenderer } from "./KotlinXRenderer"; + +export enum Framework { + None = "None", + Jackson = "Jackson", + Klaxon = "Klaxon", + KotlinX = "KotlinX" +} + +export const kotlinOptions = { + framework: new EnumOption( + "framework", + "Serialization framework", + [ + ["just-types", Framework.None], + ["jackson", Framework.Jackson], + ["klaxon", Framework.Klaxon], + ["kotlinx", Framework.KotlinX] + ], + "klaxon" + ), + acronymStyle: acronymOption(AcronymStyleOptions.Pascal), + packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") +}; + +export class KotlinTargetLanguage extends TargetLanguage { + public constructor() { + super("Kotlin", ["kotlin"], "kt"); + } + + protected getOptions(): Array> { + return [kotlinOptions.framework, kotlinOptions.acronymStyle, kotlinOptions.packageName]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { + const options = getOptionValues(kotlinOptions, untypedOptionValues); + + switch (options.framework) { + case Framework.None: + return new KotlinRenderer(this, renderContext, options); + case Framework.Jackson: + return new KotlinJacksonRenderer(this, renderContext, options); + case Framework.Klaxon: + return new KotlinKlaxonRenderer(this, renderContext, options); + case Framework.KotlinX: + return new KotlinXRenderer(this, renderContext, options); + default: + return assertNever(options.framework); + } + } +} diff --git a/packages/quicktype-core/src/language/Kotlin/utils.ts b/packages/quicktype-core/src/language/Kotlin/utils.ts new file mode 100644 index 000000000..69fc8fb0c --- /dev/null +++ b/packages/quicktype-core/src/language/Kotlin/utils.ts @@ -0,0 +1,55 @@ +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + intToHex, + isDigit, + isLetterOrUnderscore, + isNumeric, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap +} from "../../support/Strings"; + +function isPartCharacter(codePoint: number): boolean { + return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); +} + +function isStartCharacter(codePoint: number): boolean { + return isPartCharacter(codePoint) && !isDigit(codePoint); +} + +const legalizeName = legalizeCharacters(isPartCharacter); + +export function kotlinNameStyle( + isUpper: boolean, + original: string, + acronymsStyle: (s: string) => string = allUpperWordStyle +): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + isUpper ? firstUpperWordStyle : allLowerWordStyle, + firstUpperWordStyle, + isUpper ? allUpperWordStyle : allLowerWordStyle, + acronymsStyle, + "", + isStartCharacter + ); +} + +function unicodeEscape(codePoint: number): string { + return "\\u" + intToHex(codePoint, 4); +} + +// eslint-disable-next-line @typescript-eslint/naming-convention +const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); + +export function stringEscape(s: string): string { + // "$this" is a template string in Kotlin so we have to escape $ + return _stringEscape(s).replace(/\$/g, "\\$"); +} diff --git a/packages/quicktype-core/src/language/Objective-C.ts b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts similarity index 84% rename from packages/quicktype-core/src/language/Objective-C.ts rename to packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts index 3b46b914b..faca214c8 100644 --- a/packages/quicktype-core/src/language/Objective-C.ts +++ b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts @@ -1,231 +1,28 @@ import { iterableFirst, iterableSome, mapContains, mapFirst, mapSome } from "collection-utils"; -import unicode from "unicode-properties"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { camelCase, fastIsUpperCase, repeatString, stringEscape } from "../../support/Strings"; +import { assert, defined } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, Type, UnionType } from "../../Type"; +import { isAnyOrNull, matchType, nullableFromUnion } from "../../TypeUtils"; + +import { forbiddenPropertyNames, keywords } from "./constants"; +import { type MemoryAttribute, type objectiveCOptions } from "./language"; import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../RendererOptions"; -import { type Sourcelike, modifySource } from "../Source"; -import { - addPrefixIfNecessary, - allLowerWordStyle, - allUpperWordStyle, - camelCase, - combineWords, - fastIsUpperCase, - firstUpperWordStyle, - repeatString, - splitIntoWords, - stringEscape, - utf16LegalizeCharacters -} from "../support/Strings"; -import { assert, defined } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, Type, UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { isAnyOrNull, matchType, nullableFromUnion } from "../TypeUtils"; - -export type MemoryAttribute = "assign" | "strong" | "copy"; -export interface OutputFeatures { - implementation: boolean; - interface: boolean; -} + DEFAULT_CLASS_PREFIX, + forbiddenForEnumCases, + propertyNameStyle, + splitExtension, + staticEnumValuesIdentifier, + typeNameStyle +} from "./utils"; const DEBUG = false; -const DEFAULT_CLASS_PREFIX = "QT"; - -export const objcOptions = { - features: new EnumOption("features", "Interface and implementation", [ - ["all", { interface: true, implementation: true }], - ["interface", { interface: true, implementation: false }], - ["implementation", { interface: false, implementation: true }] - ]), - justTypes: new BooleanOption("just-types", "Plain types only", false), - marshallingFunctions: new BooleanOption("functions", "C-style functions", false), - classPrefix: new StringOption("class-prefix", "Class prefix", "PREFIX", DEFAULT_CLASS_PREFIX), - extraComments: new BooleanOption("extra-comments", "Extra comments", false) -}; - -export class ObjectiveCTargetLanguage extends TargetLanguage { - public constructor() { - super("Objective-C", ["objc", "objective-c", "objectivec"], "m"); - } - - protected getOptions(): Array> { - return [ - objcOptions.justTypes, - objcOptions.classPrefix, - objcOptions.features, - objcOptions.extraComments, - objcOptions.marshallingFunctions - ]; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ObjectiveCRenderer { - return new ObjectiveCRenderer(this, renderContext, getOptionValues(objcOptions, untypedOptionValues)); - } -} - -function typeNameStyle(prefix: string, original: string): string { - const words = splitIntoWords(original); - const result = combineWords( - words, - legalizeName, - firstUpperWordStyle, - firstUpperWordStyle, - allUpperWordStyle, - allUpperWordStyle, - "", - isStartCharacter - ); - return addPrefixIfNecessary(prefix, result); -} - -function propertyNameStyle(original: string, isBool = false): string { - // Objective-C developers are uncomfortable with property "id" - // so we use an alternate name in this special case. - if (original === "id") { - original = "identifier"; - } - - let words = splitIntoWords(original); - - if (isBool) { - if (words.length === 0) { - words = [{ word: "flag", isAcronym: false }]; - } else if (!words[0].isAcronym && !booleanPrefixes.includes(words[0].word)) { - words = [{ word: "is", isAcronym: false }, ...words]; - } - } - - // Properties cannot even begin with any of the forbidden names - // For example, properies named new* are treated differently by ARC - if (words.length > 0 && forbiddenPropertyNames.includes(words[0].word)) { - words = [{ word: "the", isAcronym: false }, ...words]; - } - - return combineWords( - words, - legalizeName, - allLowerWordStyle, - firstUpperWordStyle, - allLowerWordStyle, - allUpperWordStyle, - "", - isStartCharacter - ); -} - -const keywords = [ - /* - "_Bool", - "_Complex", - "_Imaginary", - */ - "asm", - "atomic", - "auto", - "bool", - "break", - "case", - "char", - "const", - "continue", - "default", - "do", - "double", - "else", - "enum", - "extern", - "false", - "float", - "for", - "goto", - "if", - "inline", - "int", - "long", - "nil", - "nonatomic", - "register", - "restrict", - "retain", - "return", - "short", - "signed", - "sizeof", - "static", - "struct", - "switch", - "typedef", - "typeof", - "true", - "union", - "unsigned", - "void", - "volatile", - "while" -]; - -const forbiddenPropertyNames = [ - "id", - "hash", - "description", - "init", - "copy", - "mutableCopy", - "superclass", - "debugDescription", - "new" -]; - -const booleanPrefixes = [ - "is", - "are", - "were", - "was", - "will", - "all", - "some", - "many", - "has", - "have", - "had", - "does", - "do", - "requires", - "require", - "needs", - "need" -]; - -function isStartCharacter(utf16Unit: number): boolean { - return unicode.isAlphabetic(utf16Unit) || utf16Unit === 0x5f; // underscore -} - -function isPartCharacter(utf16Unit: number): boolean { - const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); -} - -const legalizeName = utf16LegalizeCharacters(isPartCharacter); - -const staticEnumValuesIdentifier = "values"; -const forbiddenForEnumCases = ["new", staticEnumValuesIdentifier]; - -function splitExtension(filename: string): [string, string] { - const i = filename.lastIndexOf("."); - const extension = i !== -1 ? filename.split(".").pop() : "m"; - filename = i !== -1 ? filename.slice(0, i) : filename; - return [filename, extension ?? "m"]; -} export class ObjectiveCRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; @@ -235,7 +32,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues ) { super(targetLanguage, renderContext); @@ -259,12 +56,12 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { return name.slice(0, firstNonUpper - 1); } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { - return { names: forbiddenPropertyNames, includeGlobalForbidden: true }; + return { names: forbiddenPropertyNames as unknown as string[], includeGlobalForbidden: true }; } protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { @@ -1087,15 +884,15 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { protected emitMapFunction(): void { if (this.needsMap) { this.emitMultiline(`static id map(id collection, id (^f)(id value)) { - id result = nil; - if ([collection isKindOfClass:NSArray.class]) { - result = [NSMutableArray arrayWithCapacity:[collection count]]; - for (id x in collection) [result addObject:f(x)]; - } else if ([collection isKindOfClass:NSDictionary.class]) { - result = [NSMutableDictionary dictionaryWithCapacity:[collection count]]; - for (id key in collection) [result setObject:f([collection objectForKey:key]) forKey:key]; - } - return result; + id result = nil; + if ([collection isKindOfClass:NSArray.class]) { + result = [NSMutableArray arrayWithCapacity:[collection count]]; + for (id x in collection) [result addObject:f(x)]; + } else if ([collection isKindOfClass:NSDictionary.class]) { + result = [NSMutableDictionary dictionaryWithCapacity:[collection count]]; + for (id key in collection) [result setObject:f([collection objectForKey:key]) forKey:key]; + } + return result; }`); } } diff --git a/packages/quicktype-core/src/language/Objective-C/constants.ts b/packages/quicktype-core/src/language/Objective-C/constants.ts new file mode 100644 index 000000000..84ec8f95f --- /dev/null +++ b/packages/quicktype-core/src/language/Objective-C/constants.ts @@ -0,0 +1,82 @@ +export const keywords = [ + /* + "_Bool", + "_Complex", + "_Imaginary", + */ + "asm", + "atomic", + "auto", + "bool", + "break", + "case", + "char", + "const", + "continue", + "default", + "do", + "double", + "else", + "enum", + "extern", + "false", + "float", + "for", + "goto", + "if", + "inline", + "int", + "long", + "nil", + "nonatomic", + "register", + "restrict", + "retain", + "return", + "short", + "signed", + "sizeof", + "static", + "struct", + "switch", + "typedef", + "typeof", + "true", + "union", + "unsigned", + "void", + "volatile", + "while" +] as const; + +export const forbiddenPropertyNames = [ + "id", + "hash", + "description", + "init", + "copy", + "mutableCopy", + "superclass", + "debugDescription", + "new" +] as const; + +export const booleanPrefixes = [ + "is", + "are", + "were", + "was", + "will", + "all", + "some", + "many", + "has", + "have", + "had", + "does", + "do", + "requires", + "require", + "needs", + "need" +] as const; diff --git a/packages/quicktype-core/src/language/Objective-C/index.ts b/packages/quicktype-core/src/language/Objective-C/index.ts new file mode 100644 index 000000000..46926c8c6 --- /dev/null +++ b/packages/quicktype-core/src/language/Objective-C/index.ts @@ -0,0 +1,2 @@ +export { ObjectiveCTargetLanguage, objectiveCOptions } from "./language"; +export { ObjectiveCRenderer } from "./ObjectiveCRenderer"; diff --git a/packages/quicktype-core/src/language/Objective-C/language.ts b/packages/quicktype-core/src/language/Objective-C/language.ts new file mode 100644 index 000000000..cb34271f9 --- /dev/null +++ b/packages/quicktype-core/src/language/Objective-C/language.ts @@ -0,0 +1,45 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { ObjectiveCRenderer } from "./ObjectiveCRenderer"; +import { DEFAULT_CLASS_PREFIX } from "./utils"; + +export type MemoryAttribute = "assign" | "strong" | "copy"; +export interface OutputFeatures { + implementation: boolean; + interface: boolean; +} + +export const objectiveCOptions = { + features: new EnumOption("features", "Interface and implementation", [ + ["all", { interface: true, implementation: true }], + ["interface", { interface: true, implementation: false }], + ["implementation", { interface: false, implementation: true }] + ]), + justTypes: new BooleanOption("just-types", "Plain types only", false), + marshallingFunctions: new BooleanOption("functions", "C-style functions", false), + classPrefix: new StringOption("class-prefix", "Class prefix", "PREFIX", DEFAULT_CLASS_PREFIX), + extraComments: new BooleanOption("extra-comments", "Extra comments", false) +}; + +export class ObjectiveCTargetLanguage extends TargetLanguage { + public constructor() { + super("Objective-C", ["objc", "objective-c", "objectivec"], "m"); + } + + protected getOptions(): Array> { + return [ + objectiveCOptions.justTypes, + objectiveCOptions.classPrefix, + objectiveCOptions.features, + objectiveCOptions.extraComments, + objectiveCOptions.marshallingFunctions + ]; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ObjectiveCRenderer { + return new ObjectiveCRenderer(this, renderContext, getOptionValues(objectiveCOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/Objective-C/utils.ts b/packages/quicktype-core/src/language/Objective-C/utils.ts new file mode 100644 index 000000000..cdff7db57 --- /dev/null +++ b/packages/quicktype-core/src/language/Objective-C/utils.ts @@ -0,0 +1,88 @@ +import unicode from "unicode-properties"; + +import { + addPrefixIfNecessary, + allLowerWordStyle, + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + splitIntoWords, + utf16LegalizeCharacters +} from "../../support/Strings"; + +import { booleanPrefixes, forbiddenPropertyNames } from "./constants"; + +export const DEFAULT_CLASS_PREFIX = "QT"; + +export function typeNameStyle(prefix: string, original: string): string { + const words = splitIntoWords(original); + const result = combineWords( + words, + legalizeName, + firstUpperWordStyle, + firstUpperWordStyle, + allUpperWordStyle, + allUpperWordStyle, + "", + isStartCharacter + ); + return addPrefixIfNecessary(prefix, result); +} + +export function propertyNameStyle(original: string, isBool = false): string { + // Objective-C developers are uncomfortable with property "id" + // so we use an alternate name in this special case. + if (original === "id") { + original = "identifier"; + } + + let words = splitIntoWords(original); + + if (isBool) { + if (words.length === 0) { + words = [{ word: "flag", isAcronym: false }]; + // @ts-expect-error needs strict type + } else if (!words[0].isAcronym && !booleanPrefixes.includes(words[0].word)) { + words = [{ word: "is", isAcronym: false }, ...words]; + } + } + + // Properties cannot even begin with any of the forbidden names + // For example, properies named new* are treated differently by ARC + // @ts-expect-error needs strict type + if (words.length > 0 && forbiddenPropertyNames.includes(words[0].word)) { + words = [{ word: "the", isAcronym: false }, ...words]; + } + + return combineWords( + words, + legalizeName, + allLowerWordStyle, + firstUpperWordStyle, + allLowerWordStyle, + allUpperWordStyle, + "", + isStartCharacter + ); +} + +function isStartCharacter(utf16Unit: number): boolean { + return unicode.isAlphabetic(utf16Unit) || utf16Unit === 0x5f; // underscore +} + +function isPartCharacter(utf16Unit: number): boolean { + const category: string = unicode.getCategory(utf16Unit); + return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); +} + +const legalizeName = utf16LegalizeCharacters(isPartCharacter); + +export const staticEnumValuesIdentifier = "values"; +export const forbiddenForEnumCases = ["new", staticEnumValuesIdentifier]; + +export function splitExtension(filename: string): [string, string] { + const i = filename.lastIndexOf("."); + const extension = i !== -1 ? filename.split(".").pop() : "m"; + filename = i !== -1 ? filename.slice(0, i) : filename; + return [filename, extension ?? "m"]; +} diff --git a/packages/quicktype-core/src/language/Php.ts b/packages/quicktype-core/src/language/Php/PhpRenderer.ts similarity index 91% rename from packages/quicktype-core/src/language/Php.ts rename to packages/quicktype-core/src/language/Php/PhpRenderer.ts index e448bb1ee..720f5b6e4 100644 --- a/packages/quicktype-core/src/language/Php.ts +++ b/packages/quicktype-core/src/language/Php/PhpRenderer.ts @@ -1,100 +1,19 @@ import * as _ from "lodash"; -import { type PrimitiveStringTypeKind, type StringTypeMapping, type TransformedStringTypeKind } from ".."; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated } from "../Source"; -import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; -import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - isAscii, - isDigit, - isLetter, - splitIntoWords, - standardUnicodeHexEscape, - utf16ConcatMap, - utf16LegalizeCharacters -} from "../support/Strings"; -import { defined } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../TypeUtils"; - -export const phpOptions = { - withGet: new BooleanOption("with-get", "Create Getter", true), - fastGet: new BooleanOption("fast-get", "getter without validation", false), - withSet: new BooleanOption("with-set", "Create Setter", false), - withClosing: new BooleanOption("with-closing", "PHP Closing Tag", false), - acronymStyle: acronymOption(AcronymStyleOptions.Pascal) -}; - -export class PhpTargetLanguage extends TargetLanguage { - public constructor() { - super("PHP", ["php"], "php"); - } - - protected getOptions(): Array> { - return _.values(phpOptions); - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PhpRenderer { - const options = getOptionValues(phpOptions, untypedOptionValues); - return new PhpRenderer(this, renderContext, options); - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - mapping.set("date", "date"); // TODO is not implemented yet - mapping.set("time", "time"); // TODO is not implemented yet - mapping.set("uuid", "uuid"); // TODO is not implemented yet - mapping.set("date-time", "date-time"); - return mapping; - } -} - -export const stringEscape = utf16ConcatMap(escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape)); - -function isStartCharacter(codePoint: number): boolean { - if (codePoint === 0x5f) return true; // underscore - return isAscii(codePoint) && isLetter(codePoint); -} - -function isPartCharacter(codePoint: number): boolean { - return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); -} - -const legalizeName = utf16LegalizeCharacters(isPartCharacter); - -export function phpNameStyle( - startWithUpper: boolean, - upperUnderscore: boolean, - original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle -): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, - upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, - upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, - acronymsStyle, - upperUnderscore ? "_" : "", - isStartCharacter - ); -} +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { acronymStyle } from "../../support/Acronyms"; +import { defined } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../TypeUtils"; + +import { type phpOptions } from "./language"; +import { phpNameStyle, stringEscape } from "./utils"; export interface FunctionNames { readonly from: Name; diff --git a/packages/quicktype-core/src/language/Php/index.ts b/packages/quicktype-core/src/language/Php/index.ts new file mode 100644 index 000000000..2e11f2650 --- /dev/null +++ b/packages/quicktype-core/src/language/Php/index.ts @@ -0,0 +1,2 @@ +export { PhpTargetLanguage, phpOptions } from "./language"; +export { PhpRenderer } from "./PhpRenderer"; diff --git a/packages/quicktype-core/src/language/Php/language.ts b/packages/quicktype-core/src/language/Php/language.ts new file mode 100644 index 000000000..cfcfe9654 --- /dev/null +++ b/packages/quicktype-core/src/language/Php/language.ts @@ -0,0 +1,46 @@ +import * as _ from "lodash"; + +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; +import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { PhpRenderer } from "./PhpRenderer"; + +export const phpOptions = { + withGet: new BooleanOption("with-get", "Create Getter", true), + fastGet: new BooleanOption("fast-get", "getter without validation", false), + withSet: new BooleanOption("with-set", "Create Setter", false), + withClosing: new BooleanOption("with-closing", "PHP Closing Tag", false), + acronymStyle: acronymOption(AcronymStyleOptions.Pascal) +}; +export class PhpTargetLanguage extends TargetLanguage { + public constructor() { + super("PHP", ["php"], "php"); + } + + protected getOptions(): Array> { + return _.values(phpOptions); + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PhpRenderer { + const options = getOptionValues(phpOptions, untypedOptionValues); + return new PhpRenderer(this, renderContext, options); + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + mapping.set("date", "date"); // TODO is not implemented yet + mapping.set("time", "time"); // TODO is not implemented yet + mapping.set("uuid", "uuid"); // TODO is not implemented yet + mapping.set("date-time", "date-time"); + return mapping; + } +} diff --git a/packages/quicktype-core/src/language/Php/utils.ts b/packages/quicktype-core/src/language/Php/utils.ts new file mode 100644 index 000000000..2ccb0e228 --- /dev/null +++ b/packages/quicktype-core/src/language/Php/utils.ts @@ -0,0 +1,48 @@ +import * as _ from "lodash"; + +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + isAscii, + isDigit, + isLetter, + splitIntoWords, + standardUnicodeHexEscape, + utf16ConcatMap, + utf16LegalizeCharacters +} from "../../support/Strings"; + +export const stringEscape = utf16ConcatMap(escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape)); + +function isStartCharacter(codePoint: number): boolean { + if (codePoint === 0x5f) return true; // underscore + return isAscii(codePoint) && isLetter(codePoint); +} + +function isPartCharacter(codePoint: number): boolean { + return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); +} + +const legalizeName = utf16LegalizeCharacters(isPartCharacter); + +export function phpNameStyle( + startWithUpper: boolean, + upperUnderscore: boolean, + original: string, + acronymsStyle: (s: string) => string = allUpperWordStyle +): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, + upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, + upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, + acronymsStyle, + upperUnderscore ? "_" : "", + isStartCharacter + ); +} diff --git a/packages/quicktype-core/src/language/Pike.ts b/packages/quicktype-core/src/language/Pike/PikeRenderer.ts similarity index 81% rename from packages/quicktype-core/src/language/Pike.ts rename to packages/quicktype-core/src/language/Pike/PikeRenderer.ts index ea7f9d3a5..01e383c6e 100644 --- a/packages/quicktype-core/src/language/Pike.ts +++ b/packages/quicktype-core/src/language/Pike/PikeRenderer.ts @@ -1,89 +1,20 @@ -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { type Option } from "../RendererOptions"; -import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../Source"; -import { isLetterOrUnderscoreOrDigit, legalizeCharacters, makeNameStyle, stringEscape } from "../support/Strings"; -import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, type ClassType, type EnumType, MapType, PrimitiveType, type Type, type UnionType } from "../Type"; -import { type FixMeOptionsAnyType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export const pikeOptions = {}; - -const keywords = [ - "auto", - "nomask", - "final", - "static", - "extern", - "private", - "local", - "public", - "protected", - "inline", - "optional", - "variant", - "void", - "mixed", - "array", - "__attribute__", - "__deprecated__", - "mapping", - "multiset", - "object", - "function", - "__func__", - "program", - "string", - "float", - "int", - "enum", - "typedef", - "if", - "do", - "for", - "while", - "else", - "foreach", - "catch", - "gauge", - "class", - "break", - "case", - "const", - "constant", - "continue", - "default", - "import", - "inherit", - "lambda", - "predef", - "return", - "sscanf", - "switch", - "typeof", - "global" -]; - -const legalizeName = legalizeCharacters(isLetterOrUnderscoreOrDigit); -const enumNamingFunction = funPrefixNamer("enumNamer", makeNameStyle("upper-underscore", legalizeName)); -const namingFunction = funPrefixNamer("genericNamer", makeNameStyle("underscore", legalizeName)); -const namedTypeNamingFunction = funPrefixNamer("typeNamer", makeNameStyle("pascal", legalizeName)); - -export class PikeTargetLanguage extends TargetLanguage { - public constructor() { - super("Pike", ["pike", "pikelang"], "pmod"); - } - - protected getOptions(): Array> { - return []; - } - - protected makeRenderer(renderContext: RenderContext): PikeRenderer { - return new PikeRenderer(this, renderContext); - } -} +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer } from "../../Naming"; +import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { stringEscape } from "../../support/Strings"; +import { + ArrayType, + type ClassType, + type EnumType, + MapType, + PrimitiveType, + type Type, + type UnionType +} from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { enumNamingFunction, namedTypeNamingFunction, namingFunction } from "./utils"; export class PikeRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { diff --git a/packages/quicktype-core/src/language/Pike/constants.ts b/packages/quicktype-core/src/language/Pike/constants.ts new file mode 100644 index 000000000..d3927948f --- /dev/null +++ b/packages/quicktype-core/src/language/Pike/constants.ts @@ -0,0 +1,54 @@ +export const keywords = [ + "auto", + "nomask", + "final", + "static", + "extern", + "private", + "local", + "public", + "protected", + "inline", + "optional", + "variant", + "void", + "mixed", + "array", + "__attribute__", + "__deprecated__", + "mapping", + "multiset", + "object", + "function", + "__func__", + "program", + "string", + "float", + "int", + "enum", + "typedef", + "if", + "do", + "for", + "while", + "else", + "foreach", + "catch", + "gauge", + "class", + "break", + "case", + "const", + "constant", + "continue", + "default", + "import", + "inherit", + "lambda", + "predef", + "return", + "sscanf", + "switch", + "typeof", + "global" +] as const; diff --git a/packages/quicktype-core/src/language/Pike/index.ts b/packages/quicktype-core/src/language/Pike/index.ts new file mode 100644 index 000000000..2b80f3674 --- /dev/null +++ b/packages/quicktype-core/src/language/Pike/index.ts @@ -0,0 +1,2 @@ +export { PikeTargetLanguage, pikeOptions } from "./language"; +export { PikeRenderer } from "./PikeRenderer"; diff --git a/packages/quicktype-core/src/language/Pike/language.ts b/packages/quicktype-core/src/language/Pike/language.ts new file mode 100644 index 000000000..1772085a0 --- /dev/null +++ b/packages/quicktype-core/src/language/Pike/language.ts @@ -0,0 +1,22 @@ +import { type RenderContext } from "../../Renderer"; +import { type Option } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType } from "../../types"; + +import { PikeRenderer } from "./PikeRenderer"; + +export const pikeOptions = {}; + +export class PikeTargetLanguage extends TargetLanguage { + public constructor() { + super("Pike", ["pike", "pikelang"], "pmod"); + } + + protected getOptions(): Array> { + return []; + } + + protected makeRenderer(renderContext: RenderContext): PikeRenderer { + return new PikeRenderer(this, renderContext); + } +} diff --git a/packages/quicktype-core/src/language/Pike/utils.ts b/packages/quicktype-core/src/language/Pike/utils.ts new file mode 100644 index 000000000..f097ad2c6 --- /dev/null +++ b/packages/quicktype-core/src/language/Pike/utils.ts @@ -0,0 +1,7 @@ +import { funPrefixNamer } from "../../Naming"; +import { isLetterOrUnderscoreOrDigit, legalizeCharacters, makeNameStyle } from "../../support/Strings"; + +const legalizeName = legalizeCharacters(isLetterOrUnderscoreOrDigit); +export const enumNamingFunction = funPrefixNamer("enumNamer", makeNameStyle("upper-underscore", legalizeName)); +export const namingFunction = funPrefixNamer("genericNamer", makeNameStyle("underscore", legalizeName)); +export const namedTypeNamingFunction = funPrefixNamer("typeNamer", makeNameStyle("pascal", legalizeName)); diff --git a/packages/quicktype-core/src/language/Python.ts b/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts similarity index 63% rename from packages/quicktype-core/src/language/Python.ts rename to packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts index dc3f5b9e9..28d16eece 100644 --- a/packages/quicktype-core/src/language/Python.ts +++ b/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts @@ -1,31 +1,9 @@ -import { - arrayIntercalate, - iterableFirst, - iterableSome, - mapSortBy, - mapUpdateInto, - setUnionInto -} from "collection-utils"; -import unicode from "unicode-properties"; - -import { ConvenienceRenderer, type ForbiddenWordsInfo, topLevelNameOrder } from "../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type MultiWord, type Sourcelike, modifySource, multiWord, parenIfNeeded, singleWord } from "../Source"; -import { - type WordStyle, - allLowerWordStyle, - allUpperWordStyle, - combineWords, - firstUpperWordStyle, - originalWord, - splitIntoWords, - stringEscape, - utf16LegalizeCharacters -} from "../support/Strings"; -import { assertNever, defined, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; +import { arrayIntercalate } from "collection-utils"; + +import { topLevelNameOrder } from "../../ConvenienceRenderer"; +import { DependencyName, type Name, funPrefixNamer } from "../../Naming"; +import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { assertNever, defined, panic } from "../../support/Support"; import { ChoiceTransformer, DecodingChoiceTransformer, @@ -36,512 +14,13 @@ import { type Transformer, UnionInstantiationTransformer, UnionMemberMatchTransformer, - followTargetType, transformationForType -} from "../Transformers"; -import { - type ClassProperty, - ClassType, - EnumType, - type PrimitiveStringTypeKind, - type TransformedStringTypeKind, - type Type, - UnionType -} from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -const forbiddenTypeNames = [ - "Any", - "True", - "False", - "None", - "Enum", - "List", - "Dict", - "Optional", - "Union", - "Iterable", - "Type", - "TypeVar", - "T", - "EnumT" -]; -const forbiddenPropertyNames = [ - "and", - "as", - "assert", - "async", - "await", - "bool", - "break", - "class", - "continue", - "datetime", - "def", - "del", - "dict", - "elif", - "else", - "except", - "finally", - "float", - "for", - "from", - "global", - "if", - "import", - "in", - "int", - "is", - "lambda", - "nonlocal", - "not", - "or", - "pass", - "print", - "raise", - "return", - "self", - "str", - "try", - "while", - "with", - "yield" -]; - -export interface PythonFeatures { - dataClasses: boolean; - typeHints: boolean; -} - -export const pythonOptions = { - features: new EnumOption( - "python-version", - "Python version", - [ - ["3.5", { typeHints: false, dataClasses: false }], - ["3.6", { typeHints: true, dataClasses: false }], - ["3.7", { typeHints: true, dataClasses: true }] - ], - "3.6" - ), - justTypes: new BooleanOption("just-types", "Classes only", false), - nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be Pythonic", true) -}; - -export class PythonTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return [pythonOptions.features, pythonOptions.justTypes, pythonOptions.nicePropertyNames]; - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - const dateTimeType = "date-time"; - mapping.set("date", dateTimeType); - mapping.set("time", dateTimeType); - mapping.set("date-time", dateTimeType); - mapping.set("uuid", "uuid"); - mapping.set("integer-string", "integer-string"); - mapping.set("bool-string", "bool-string"); - return mapping; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - public get supportsOptionalClassProperties(): boolean { - return false; - } - - public needsTransformerForType(t: Type): boolean { - if (t instanceof UnionType) { - return iterableSome(t.members, m => this.needsTransformerForType(m)); - } - - return t.kind === "integer-string" || t.kind === "bool-string"; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PythonRenderer { - const options = getOptionValues(pythonOptions, untypedOptionValues); - if (options.justTypes) { - return new PythonRenderer(this, renderContext, options); - } else { - return new JSONPythonRenderer(this, renderContext, options); - } - } -} - -function isNormalizedStartCharacter3(utf16Unit: number): boolean { - // FIXME: add Other_ID_Start - https://docs.python.org/3/reference/lexical_analysis.html#identifiers - const category: string = unicode.getCategory(utf16Unit); - return ["Lu", "Ll", "Lt", "Lm", "Lo", "Nl"].includes(category); -} - -function isNormalizedPartCharacter3(utf16Unit: number): boolean { - // FIXME: add Other_ID_Continue - https://docs.python.org/3/reference/lexical_analysis.html#identifiers - if (isNormalizedStartCharacter3(utf16Unit)) return true; - const category: string = unicode.getCategory(utf16Unit); - return ["Mn", "Mc", "Nd", "Pc"].includes(category); -} - -function isStartCharacter3(utf16Unit: number): boolean { - const s = String.fromCharCode(utf16Unit).normalize("NFKC"); - const l = s.length; - if (l === 0 || !isNormalizedStartCharacter3(s.charCodeAt(0))) return false; - for (let i = 1; i < l; i++) { - if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; - } - - return true; -} - -function isPartCharacter3(utf16Unit: number): boolean { - const s = String.fromCharCode(utf16Unit).normalize("NFKC"); - const l = s.length; - for (let i = 0; i < l; i++) { - if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; - } - - return true; -} - -const legalizeName3 = utf16LegalizeCharacters(isPartCharacter3); - -function classNameStyle(original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName3, - firstUpperWordStyle, - firstUpperWordStyle, - allUpperWordStyle, - allUpperWordStyle, - "", - isStartCharacter3 - ); -} - -function getWordStyle(uppercase: boolean, forceSnakeNameStyle: boolean): WordStyle { - if (!forceSnakeNameStyle) { - return originalWord; - } - - return uppercase ? allUpperWordStyle : allLowerWordStyle; -} - -function snakeNameStyle(original: string, uppercase: boolean, forceSnakeNameStyle: boolean): string { - const wordStyle = getWordStyle(uppercase, forceSnakeNameStyle); - const separator = forceSnakeNameStyle ? "_" : ""; - const words = splitIntoWords(original); - return combineWords(words, legalizeName3, wordStyle, wordStyle, wordStyle, wordStyle, separator, isStartCharacter3); -} - -export class PythonRenderer extends ConvenienceRenderer { - private readonly imports: Map> = new Map(); - - private readonly declaredTypes: Set = new Set(); - - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - protected readonly pyOptions: OptionValues - ) { - super(targetLanguage, renderContext); - } - - protected forbiddenNamesForGlobalNamespace(): string[] { - return forbiddenTypeNames; - } - - protected forbiddenForObjectProperties(_: ClassType, _classNamed: Name): ForbiddenWordsInfo { - return { names: forbiddenPropertyNames, includeGlobalForbidden: false }; - } - - protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("type", classNameStyle); - } - - protected namerForObjectProperty(): Namer { - return funPrefixNamer("property", s => snakeNameStyle(s, false, this.pyOptions.nicePropertyNames)); - } - - protected makeUnionMemberNamer(): null { - return null; - } - - protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enum-case", s => snakeNameStyle(s, true, this.pyOptions.nicePropertyNames)); - } - - protected get commentLineStart(): string { - return "# "; - } - - protected emitDescriptionBlock(lines: Sourcelike[]): void { - if (lines.length === 1) { - const docstring = modifySource(content => { - if (content.endsWith('"')) { - return content.slice(0, -1) + '\\"'; - } - - return content; - }, lines[0]); - this.emitComments([{ customLines: [docstring], lineStart: '"""', lineEnd: '"""' }]); - } else { - this.emitCommentLines(lines, { - firstLineStart: '"""', - lineStart: "", - afterComment: '"""' - }); - } - } - - protected get needsTypeDeclarationBeforeUse(): boolean { - return true; - } - - protected canBeForwardDeclared(t: Type): boolean { - const kind = t.kind; - return kind === "class" || kind === "enum"; - } - - protected emitBlock(line: Sourcelike, f: () => void): void { - this.emitLine(line); - this.indent(f); - } - - protected string(s: string): Sourcelike { - const openQuote = '"'; - return [openQuote, stringEscape(s), '"']; - } - - protected withImport(module: string, name: string): Sourcelike { - if (this.pyOptions.features.typeHints || module !== "typing") { - // FIXME: This is ugly. We should rather not generate that import in the first - // place, but right now we just make the type source and then throw it away. It's - // not a performance issue, so it's fine, I just bemoan this special case, and - // potential others down the road. - mapUpdateInto(this.imports, module, s => (s ? setUnionInto(s, [name]) : new Set([name]))); - } - - return name; - } - - protected withTyping(name: string): Sourcelike { - return this.withImport("typing", name); - } - - protected namedType(t: Type): Sourcelike { - const name = this.nameForNamedType(t); - if (this.declaredTypes.has(t)) return name; - return ["'", name, "'"]; - } - - protected pythonType(t: Type, _isRootTypeDef = false): Sourcelike { - const actualType = followTargetType(t); - - return matchType( - actualType, - _anyType => this.withTyping("Any"), - _nullType => "None", - _boolType => "bool", - _integerType => "int", - _doubletype => "float", - _stringType => "str", - arrayType => [this.withTyping("List"), "[", this.pythonType(arrayType.items), "]"], - classType => this.namedType(classType), - mapType => [this.withTyping("Dict"), "[str, ", this.pythonType(mapType.values), "]"], - enumType => this.namedType(enumType), - unionType => { - const [hasNull, nonNulls] = removeNullFromUnion(unionType); - const memberTypes = Array.from(nonNulls).map(m => this.pythonType(m)); - - if (hasNull !== null) { - let rest: string[] = []; - if (!this.getAlphabetizeProperties() && this.pyOptions.features.dataClasses && _isRootTypeDef) { - // Only push "= None" if this is a root level type def - // otherwise we may get type defs like List[Optional[int] = None] - // which are invalid - rest.push(" = None"); - } - - if (nonNulls.size > 1) { - this.withImport("typing", "Union"); - return [ - this.withTyping("Optional"), - "[Union[", - arrayIntercalate(", ", memberTypes), - "]]", - ...rest - ]; - } else { - return [this.withTyping("Optional"), "[", defined(iterableFirst(memberTypes)), "]", ...rest]; - } - } else { - return [this.withTyping("Union"), "[", arrayIntercalate(", ", memberTypes), "]"]; - } - }, - transformedStringType => { - if (transformedStringType.kind === "date-time") { - return this.withImport("datetime", "datetime"); - } - - if (transformedStringType.kind === "uuid") { - return this.withImport("uuid", "UUID"); - } - - return panic(`Transformed type ${transformedStringType.kind} not supported`); - } - ); - } - - protected declarationLine(t: Type): Sourcelike { - if (t instanceof ClassType) { - return ["class ", this.nameForNamedType(t), ":"]; - } - - if (t instanceof EnumType) { - return ["class ", this.nameForNamedType(t), "(", this.withImport("enum", "Enum"), "):"]; - } - - return panic(`Can't declare type ${t.kind}`); - } +} from "../../Transformers"; +import { type ClassType, type Type } from "../../Type"; +import { matchType } from "../../TypeUtils"; - protected declareType(t: T, emitter: () => void): void { - this.emitBlock(this.declarationLine(t), () => { - this.emitDescription(this.descriptionForType(t)); - emitter(); - }); - this.declaredTypes.add(t); - } - - protected emitClassMembers(t: ClassType): void { - if (this.pyOptions.features.dataClasses) return; - - const args: Sourcelike[] = []; - this.forEachClassProperty(t, "none", (name, _, cp) => { - args.push([name, this.typeHint(": ", this.pythonType(cp.type))]); - }); - this.emitBlock( - ["def __init__(self, ", arrayIntercalate(", ", args), ")", this.typeHint(" -> None"), ":"], - () => { - if (args.length === 0) { - this.emitLine("pass"); - } else { - this.forEachClassProperty(t, "none", name => { - this.emitLine("self.", name, " = ", name); - }); - } - } - ); - } - - protected typeHint(...sl: Sourcelike[]): Sourcelike { - if (this.pyOptions.features.typeHints) { - return sl; - } - - return []; - } - - protected typingDecl(name: Sourcelike, type: string): Sourcelike { - return [name, this.typeHint(": ", this.withTyping(type))]; - } - - protected typingReturn(type: string): Sourcelike { - return this.typeHint(" -> ", this.withTyping(type)); - } - - protected sortClassProperties( - properties: ReadonlyMap, - propertyNames: ReadonlyMap - ): ReadonlyMap { - if (this.pyOptions.features.dataClasses) { - return mapSortBy(properties, (p: ClassProperty) => { - return (p.type instanceof UnionType && nullableFromUnion(p.type) != null) || p.isOptional ? 1 : 0; - }); - } else { - return super.sortClassProperties(properties, propertyNames); - } - } - - protected emitClass(t: ClassType): void { - if (this.pyOptions.features.dataClasses) { - this.emitLine("@", this.withImport("dataclasses", "dataclass")); - } - - this.declareType(t, () => { - if (this.pyOptions.features.typeHints) { - if (t.getProperties().size === 0) { - this.emitLine("pass"); - } else { - this.forEachClassProperty(t, "none", (name, jsonName, cp) => { - this.emitLine(name, this.typeHint(": ", this.pythonType(cp.type, true))); - this.emitDescription(this.descriptionForClassProperty(t, jsonName)); - }); - } - - this.ensureBlankLine(); - } - - this.emitClassMembers(t); - }); - } - - protected emitEnum(t: EnumType): void { - this.declareType(t, () => { - this.forEachEnumCase(t, "none", (name, jsonName) => { - this.emitLine([name, " = ", this.string(jsonName)]); - }); - }); - } - - protected emitImports(): void { - this.imports.forEach((names, module) => { - this.emitLine("from ", module, " import ", Array.from(names).join(", ")); - }); - } - - protected emitSupportCode(): void { - return; - } - - protected emitClosingCode(): void { - return; - } - - protected emitSourceStructure(_givenOutputFilename: string): void { - const declarationLines = this.gatherSource(() => { - this.forEachNamedType( - ["interposing", 2], - (c: ClassType) => this.emitClass(c), - e => this.emitEnum(e), - _u => { - return; - } - ); - }); - - const closingLines = this.gatherSource(() => this.emitClosingCode()); - const supportLines = this.gatherSource(() => this.emitSupportCode()); - - if (this.leadingComments !== undefined) { - this.emitComments(this.leadingComments); - } - - this.ensureBlankLine(); - this.emitImports(); - this.ensureBlankLine(2); - this.emitGatheredSource(supportLines); - this.ensureBlankLine(2); - this.emitGatheredSource(declarationLines); - this.ensureBlankLine(2); - this.emitGatheredSource(closingLines); - } -} +import { PythonRenderer } from "./PythonRenderer"; +import { snakeNameStyle } from "./utils"; export type ConverterFunction = | "none" diff --git a/packages/quicktype-core/src/language/Python/PythonRenderer.ts b/packages/quicktype-core/src/language/Python/PythonRenderer.ts new file mode 100644 index 000000000..63ec3c70d --- /dev/null +++ b/packages/quicktype-core/src/language/Python/PythonRenderer.ts @@ -0,0 +1,321 @@ +import { arrayIntercalate, iterableFirst, mapSortBy, mapUpdateInto, setUnionInto } from "collection-utils"; + +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, modifySource } from "../../Source"; +import { stringEscape } from "../../support/Strings"; +import { defined, panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { followTargetType } from "../../Transformers"; +import { type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { forbiddenPropertyNames, forbiddenTypeNames } from "./constants"; +import { type pythonOptions } from "./language"; +import { classNameStyle, snakeNameStyle } from "./utils"; + +export class PythonRenderer extends ConvenienceRenderer { + private readonly imports: Map> = new Map(); + + private readonly declaredTypes: Set = new Set(); + + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + protected readonly pyOptions: OptionValues + ) { + super(targetLanguage, renderContext); + } + + protected forbiddenNamesForGlobalNamespace(): readonly string[] { + return forbiddenTypeNames; + } + + protected forbiddenForObjectProperties(_: ClassType, _classNamed: Name): ForbiddenWordsInfo { + return { names: forbiddenPropertyNames as unknown as string[], includeGlobalForbidden: false }; + } + + protected makeNamedTypeNamer(): Namer { + return funPrefixNamer("type", classNameStyle); + } + + protected namerForObjectProperty(): Namer { + return funPrefixNamer("property", s => snakeNameStyle(s, false, this.pyOptions.nicePropertyNames)); + } + + protected makeUnionMemberNamer(): null { + return null; + } + + protected makeEnumCaseNamer(): Namer { + return funPrefixNamer("enum-case", s => snakeNameStyle(s, true, this.pyOptions.nicePropertyNames)); + } + + protected get commentLineStart(): string { + return "# "; + } + + protected emitDescriptionBlock(lines: Sourcelike[]): void { + if (lines.length === 1) { + const docstring = modifySource(content => { + if (content.endsWith('"')) { + return content.slice(0, -1) + '\\"'; + } + + return content; + }, lines[0]); + this.emitComments([{ customLines: [docstring], lineStart: '"""', lineEnd: '"""' }]); + } else { + this.emitCommentLines(lines, { + firstLineStart: '"""', + lineStart: "", + afterComment: '"""' + }); + } + } + + protected get needsTypeDeclarationBeforeUse(): boolean { + return true; + } + + protected canBeForwardDeclared(t: Type): boolean { + const kind = t.kind; + return kind === "class" || kind === "enum"; + } + + protected emitBlock(line: Sourcelike, f: () => void): void { + this.emitLine(line); + this.indent(f); + } + + protected string(s: string): Sourcelike { + const openQuote = '"'; + return [openQuote, stringEscape(s), '"']; + } + + protected withImport(module: string, name: string): Sourcelike { + if (this.pyOptions.features.typeHints || module !== "typing") { + // FIXME: This is ugly. We should rather not generate that import in the first + // place, but right now we just make the type source and then throw it away. It's + // not a performance issue, so it's fine, I just bemoan this special case, and + // potential others down the road. + mapUpdateInto(this.imports, module, s => (s ? setUnionInto(s, [name]) : new Set([name]))); + } + + return name; + } + + protected withTyping(name: string): Sourcelike { + return this.withImport("typing", name); + } + + protected namedType(t: Type): Sourcelike { + const name = this.nameForNamedType(t); + if (this.declaredTypes.has(t)) return name; + return ["'", name, "'"]; + } + + protected pythonType(t: Type, _isRootTypeDef = false): Sourcelike { + const actualType = followTargetType(t); + + return matchType( + actualType, + _anyType => this.withTyping("Any"), + _nullType => "None", + _boolType => "bool", + _integerType => "int", + _doubletype => "float", + _stringType => "str", + arrayType => [this.withTyping("List"), "[", this.pythonType(arrayType.items), "]"], + classType => this.namedType(classType), + mapType => [this.withTyping("Dict"), "[str, ", this.pythonType(mapType.values), "]"], + enumType => this.namedType(enumType), + unionType => { + const [hasNull, nonNulls] = removeNullFromUnion(unionType); + const memberTypes = Array.from(nonNulls).map(m => this.pythonType(m)); + + if (hasNull !== null) { + let rest: string[] = []; + if (!this.getAlphabetizeProperties() && this.pyOptions.features.dataClasses && _isRootTypeDef) { + // Only push "= None" if this is a root level type def + // otherwise we may get type defs like List[Optional[int] = None] + // which are invalid + rest.push(" = None"); + } + + if (nonNulls.size > 1) { + this.withImport("typing", "Union"); + return [ + this.withTyping("Optional"), + "[Union[", + arrayIntercalate(", ", memberTypes), + "]]", + ...rest + ]; + } else { + return [this.withTyping("Optional"), "[", defined(iterableFirst(memberTypes)), "]", ...rest]; + } + } else { + return [this.withTyping("Union"), "[", arrayIntercalate(", ", memberTypes), "]"]; + } + }, + transformedStringType => { + if (transformedStringType.kind === "date-time") { + return this.withImport("datetime", "datetime"); + } + + if (transformedStringType.kind === "uuid") { + return this.withImport("uuid", "UUID"); + } + + return panic(`Transformed type ${transformedStringType.kind} not supported`); + } + ); + } + + protected declarationLine(t: Type): Sourcelike { + if (t instanceof ClassType) { + return ["class ", this.nameForNamedType(t), ":"]; + } + + if (t instanceof EnumType) { + return ["class ", this.nameForNamedType(t), "(", this.withImport("enum", "Enum"), "):"]; + } + + return panic(`Can't declare type ${t.kind}`); + } + + protected declareType(t: T, emitter: () => void): void { + this.emitBlock(this.declarationLine(t), () => { + this.emitDescription(this.descriptionForType(t)); + emitter(); + }); + this.declaredTypes.add(t); + } + + protected emitClassMembers(t: ClassType): void { + if (this.pyOptions.features.dataClasses) return; + + const args: Sourcelike[] = []; + this.forEachClassProperty(t, "none", (name, _, cp) => { + args.push([name, this.typeHint(": ", this.pythonType(cp.type))]); + }); + this.emitBlock( + ["def __init__(self, ", arrayIntercalate(", ", args), ")", this.typeHint(" -> None"), ":"], + () => { + if (args.length === 0) { + this.emitLine("pass"); + } else { + this.forEachClassProperty(t, "none", name => { + this.emitLine("self.", name, " = ", name); + }); + } + } + ); + } + + protected typeHint(...sl: Sourcelike[]): Sourcelike { + if (this.pyOptions.features.typeHints) { + return sl; + } + + return []; + } + + protected typingDecl(name: Sourcelike, type: string): Sourcelike { + return [name, this.typeHint(": ", this.withTyping(type))]; + } + + protected typingReturn(type: string): Sourcelike { + return this.typeHint(" -> ", this.withTyping(type)); + } + + protected sortClassProperties( + properties: ReadonlyMap, + propertyNames: ReadonlyMap + ): ReadonlyMap { + if (this.pyOptions.features.dataClasses) { + return mapSortBy(properties, (p: ClassProperty) => { + return (p.type instanceof UnionType && nullableFromUnion(p.type) != null) || p.isOptional ? 1 : 0; + }); + } else { + return super.sortClassProperties(properties, propertyNames); + } + } + + protected emitClass(t: ClassType): void { + if (this.pyOptions.features.dataClasses) { + this.emitLine("@", this.withImport("dataclasses", "dataclass")); + } + + this.declareType(t, () => { + if (this.pyOptions.features.typeHints) { + if (t.getProperties().size === 0) { + this.emitLine("pass"); + } else { + this.forEachClassProperty(t, "none", (name, jsonName, cp) => { + this.emitLine(name, this.typeHint(": ", this.pythonType(cp.type, true))); + this.emitDescription(this.descriptionForClassProperty(t, jsonName)); + }); + } + + this.ensureBlankLine(); + } + + this.emitClassMembers(t); + }); + } + + protected emitEnum(t: EnumType): void { + this.declareType(t, () => { + this.forEachEnumCase(t, "none", (name, jsonName) => { + this.emitLine([name, " = ", this.string(jsonName)]); + }); + }); + } + + protected emitImports(): void { + this.imports.forEach((names, module) => { + this.emitLine("from ", module, " import ", Array.from(names).join(", ")); + }); + } + + protected emitSupportCode(): void { + return; + } + + protected emitClosingCode(): void { + return; + } + + protected emitSourceStructure(_givenOutputFilename: string): void { + const declarationLines = this.gatherSource(() => { + this.forEachNamedType( + ["interposing", 2], + (c: ClassType) => this.emitClass(c), + e => this.emitEnum(e), + _u => { + return; + } + ); + }); + + const closingLines = this.gatherSource(() => this.emitClosingCode()); + const supportLines = this.gatherSource(() => this.emitSupportCode()); + + if (this.leadingComments !== undefined) { + this.emitComments(this.leadingComments); + } + + this.ensureBlankLine(); + this.emitImports(); + this.ensureBlankLine(2); + this.emitGatheredSource(supportLines); + this.ensureBlankLine(2); + this.emitGatheredSource(declarationLines); + this.ensureBlankLine(2); + this.emitGatheredSource(closingLines); + } +} diff --git a/packages/quicktype-core/src/language/Python/constants.ts b/packages/quicktype-core/src/language/Python/constants.ts new file mode 100644 index 000000000..0e725bf50 --- /dev/null +++ b/packages/quicktype-core/src/language/Python/constants.ts @@ -0,0 +1,59 @@ +export const forbiddenTypeNames = [ + "Any", + "True", + "False", + "None", + "Enum", + "List", + "Dict", + "Optional", + "Union", + "Iterable", + "Type", + "TypeVar", + "T", + "EnumT" +] as const; + +export const forbiddenPropertyNames = [ + "and", + "as", + "assert", + "async", + "await", + "bool", + "break", + "class", + "continue", + "datetime", + "def", + "del", + "dict", + "elif", + "else", + "except", + "finally", + "float", + "for", + "from", + "global", + "if", + "import", + "in", + "int", + "is", + "lambda", + "nonlocal", + "not", + "or", + "pass", + "print", + "raise", + "return", + "self", + "str", + "try", + "while", + "with", + "yield" +] as const; diff --git a/packages/quicktype-core/src/language/Python/index.ts b/packages/quicktype-core/src/language/Python/index.ts new file mode 100644 index 000000000..7c7b92ba3 --- /dev/null +++ b/packages/quicktype-core/src/language/Python/index.ts @@ -0,0 +1,3 @@ +export { PythonTargetLanguage, pythonOptions } from "./language"; +export { PythonRenderer } from "./PythonRenderer"; +export { JSONPythonRenderer } from "./JSONPythonRenderer"; diff --git a/packages/quicktype-core/src/language/Python/language.ts b/packages/quicktype-core/src/language/Python/language.ts new file mode 100644 index 000000000..e6aac1d87 --- /dev/null +++ b/packages/quicktype-core/src/language/Python/language.ts @@ -0,0 +1,74 @@ +import { iterableSome } from "collection-utils"; + +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type, UnionType } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { JSONPythonRenderer } from "./JSONPythonRenderer"; +import { PythonRenderer } from "./PythonRenderer"; + +export interface PythonFeatures { + dataClasses: boolean; + typeHints: boolean; +} + +export const pythonOptions = { + features: new EnumOption( + "python-version", + "Python version", + [ + ["3.5", { typeHints: false, dataClasses: false }], + ["3.6", { typeHints: true, dataClasses: false }], + ["3.7", { typeHints: true, dataClasses: true }] + ], + "3.6" + ), + justTypes: new BooleanOption("just-types", "Classes only", false), + nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be Pythonic", true) +}; + +export class PythonTargetLanguage extends TargetLanguage { + protected getOptions(): Array> { + return [pythonOptions.features, pythonOptions.justTypes, pythonOptions.nicePropertyNames]; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + const dateTimeType = "date-time"; + mapping.set("date", dateTimeType); + mapping.set("time", dateTimeType); + mapping.set("date-time", dateTimeType); + mapping.set("uuid", "uuid"); + mapping.set("integer-string", "integer-string"); + mapping.set("bool-string", "bool-string"); + return mapping; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + public get supportsOptionalClassProperties(): boolean { + return false; + } + + public needsTransformerForType(t: Type): boolean { + if (t instanceof UnionType) { + return iterableSome(t.members, m => this.needsTransformerForType(m)); + } + + return t.kind === "integer-string" || t.kind === "bool-string"; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PythonRenderer { + const options = getOptionValues(pythonOptions, untypedOptionValues); + if (options.justTypes) { + return new PythonRenderer(this, renderContext, options); + } else { + return new JSONPythonRenderer(this, renderContext, options); + } + } +} diff --git a/packages/quicktype-core/src/language/Python/utils.ts b/packages/quicktype-core/src/language/Python/utils.ts new file mode 100644 index 000000000..6ffb8c5a2 --- /dev/null +++ b/packages/quicktype-core/src/language/Python/utils.ts @@ -0,0 +1,76 @@ +import unicode from "unicode-properties"; + +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + originalWord, + splitIntoWords, + utf16LegalizeCharacters +} from "../../support/Strings"; + +function isNormalizedStartCharacter3(utf16Unit: number): boolean { + // FIXME: add Other_ID_Start - https://docs.python.org/3/reference/lexical_analysis.html#identifiers + const category: string = unicode.getCategory(utf16Unit); + return ["Lu", "Ll", "Lt", "Lm", "Lo", "Nl"].includes(category); +} + +function isNormalizedPartCharacter3(utf16Unit: number): boolean { + // FIXME: add Other_ID_Continue - https://docs.python.org/3/reference/lexical_analysis.html#identifiers + if (isNormalizedStartCharacter3(utf16Unit)) return true; + const category: string = unicode.getCategory(utf16Unit); + return ["Mn", "Mc", "Nd", "Pc"].includes(category); +} + +function isStartCharacter3(utf16Unit: number): boolean { + const s = String.fromCharCode(utf16Unit).normalize("NFKC"); + const l = s.length; + if (l === 0 || !isNormalizedStartCharacter3(s.charCodeAt(0))) return false; + for (let i = 1; i < l; i++) { + if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; + } + + return true; +} + +function isPartCharacter3(utf16Unit: number): boolean { + const s = String.fromCharCode(utf16Unit).normalize("NFKC"); + const l = s.length; + for (let i = 0; i < l; i++) { + if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; + } + + return true; +} + +const legalizeName3 = utf16LegalizeCharacters(isPartCharacter3); + +export function classNameStyle(original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName3, + firstUpperWordStyle, + firstUpperWordStyle, + allUpperWordStyle, + allUpperWordStyle, + "", + isStartCharacter3 + ); +} + +function getWordStyle(uppercase: boolean, forceSnakeNameStyle: boolean) { + if (!forceSnakeNameStyle) { + return originalWord; + } + + return uppercase ? allUpperWordStyle : allLowerWordStyle; +} + +export function snakeNameStyle(original: string, uppercase: boolean, forceSnakeNameStyle: boolean): string { + const wordStyle = getWordStyle(uppercase, forceSnakeNameStyle); + const separator = forceSnakeNameStyle ? "_" : ""; + const words = splitIntoWords(original); + return combineWords(words, legalizeName3, wordStyle, wordStyle, wordStyle, wordStyle, separator, isStartCharacter3); +} diff --git a/packages/quicktype-core/src/language/ruby/index.ts b/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts similarity index 87% rename from packages/quicktype-core/src/language/ruby/index.ts rename to packages/quicktype-core/src/language/Ruby/RubyRenderer.ts index 42466baba..081139193 100644 --- a/packages/quicktype-core/src/language/ruby/index.ts +++ b/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts @@ -1,32 +1,10 @@ -import * as unicode from "unicode-properties"; - import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; import { type Name, Namer } from "../../Naming"; import { type RenderContext } from "../../Renderer"; -import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../../RendererOptions"; +import { type OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; -import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - intToHex, - isLetterOrUnderscore, - isPrintable, - legalizeCharacters, - snakeCase, - splitIntoWords, - utf32ConcatMap -} from "../../support/Strings"; -import { TargetLanguage } from "../../TargetLanguage"; +import { snakeCase } from "../../support/Strings"; +import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -36,97 +14,11 @@ import { type Type, type UnionType } from "../../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; -import * as keywords from "./keywords"; - -const forbiddenForObjectProperties = Array.from(new Set([...keywords.keywords, ...keywords.reservedProperties])); - -function unicodeEscape(codePoint: number): string { - return "\\u{" + intToHex(codePoint, 0) + "}"; -} - -const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); - -export enum Strictness { - Coercible = "Coercible::", - None = "Types::", - Strict = "Strict::" -} - -export const rubyOptions = { - justTypes: new BooleanOption("just-types", "Plain types only", false), - strictness: new EnumOption("strictness", "Type strictness", [ - ["strict", Strictness.Strict], - ["coercible", Strictness.Coercible], - ["none", Strictness.None] - ]), - namespace: new StringOption("namespace", "Specify a wrapping Namespace", "NAME", "", "secondary") -}; - -export class RubyTargetLanguage extends TargetLanguage { - public constructor() { - super("Ruby", ["ruby"], "rb"); - } - - protected getOptions(): Array> { - return [rubyOptions.justTypes, rubyOptions.strictness, rubyOptions.namespace]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - protected get defaultIndentation(): string { - return " "; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RubyRenderer { - return new RubyRenderer(this, renderContext, getOptionValues(rubyOptions, untypedOptionValues)); - } -} - -const isStartCharacter = isLetterOrUnderscore; - -function isPartCharacter(utf16Unit: number): boolean { - const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); -} - -const legalizeName = legalizeCharacters(isPartCharacter); - -function simpleNameStyle(original: string, uppercase: boolean): string { - if (/^[0-9]+$/.test(original)) { - original = original + "N"; - } - - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - uppercase ? firstUpperWordStyle : allLowerWordStyle, - uppercase ? firstUpperWordStyle : allLowerWordStyle, - allUpperWordStyle, - allUpperWordStyle, - "", - isStartCharacter - ); -} - -function memberNameStyle(original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - allLowerWordStyle, - allLowerWordStyle, - allLowerWordStyle, - allLowerWordStyle, - "_", - isStartCharacter - ); -} +import { globals } from "./constants"; +import { type rubyOptions } from "./language"; +import { Strictness, forbiddenForObjectProperties, memberNameStyle, simpleNameStyle, stringEscape } from "./utils"; export class RubyRenderer extends ConvenienceRenderer { public constructor( @@ -149,8 +41,8 @@ export class RubyRenderer extends ConvenienceRenderer { return "class" === t.kind; } - protected forbiddenNamesForGlobalNamespace(): string[] { - return keywords.globals.concat(["Types", "JSON", "Dry", "Constructor", "Self"]); + protected forbiddenNamesForGlobalNamespace(): readonly string[] { + return [...globals, "Types", "JSON", "Dry", "Constructor", "Self"] as const; } protected forbiddenForObjectProperties(_c: ClassType, _classNamed: Name): ForbiddenWordsInfo { diff --git a/packages/quicktype-core/src/language/ruby/keywords.ts b/packages/quicktype-core/src/language/Ruby/constants.ts similarity index 97% rename from packages/quicktype-core/src/language/ruby/keywords.ts rename to packages/quicktype-core/src/language/Ruby/constants.ts index 0229d9044..9848048f5 100644 --- a/packages/quicktype-core/src/language/ruby/keywords.ts +++ b/packages/quicktype-core/src/language/Ruby/constants.ts @@ -39,8 +39,8 @@ export const keywords = [ "until", "when", "while", - "yield", -]; + "yield" +] as const; const globalClasses = [ "ArgumentError", @@ -133,8 +133,8 @@ const globalClasses = [ "Undefined", "UnicodeNormalize", "Warning", - "ZeroDivisionError", -]; + "ZeroDivisionError" +] as const; const kernel = [ "__callee__", @@ -286,10 +286,10 @@ const kernel = [ "untrace_var", "untrust", "untrusted?", - "warn", -]; + "warn" +] as const; -export const globals = kernel.concat(globalClasses); +export const globals = [...kernel, ...globalClasses] as const; export const reservedProperties = [ "__id__", @@ -355,5 +355,5 @@ export const reservedProperties = [ "undef", "untrust", "while", - "with", -]; + "with" +] as const; diff --git a/packages/quicktype-core/src/language/Ruby/index.ts b/packages/quicktype-core/src/language/Ruby/index.ts new file mode 100644 index 000000000..13ba45f36 --- /dev/null +++ b/packages/quicktype-core/src/language/Ruby/index.ts @@ -0,0 +1,2 @@ +export { RubyTargetLanguage, rubyOptions } from "./language"; +export { RubyRenderer } from "./RubyRenderer"; diff --git a/packages/quicktype-core/src/language/Ruby/language.ts b/packages/quicktype-core/src/language/Ruby/language.ts new file mode 100644 index 000000000..e85598008 --- /dev/null +++ b/packages/quicktype-core/src/language/Ruby/language.ts @@ -0,0 +1,39 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { RubyRenderer } from "./RubyRenderer"; +import { Strictness } from "./utils"; + +export const rubyOptions = { + justTypes: new BooleanOption("just-types", "Plain types only", false), + strictness: new EnumOption("strictness", "Type strictness", [ + ["strict", Strictness.Strict], + ["coercible", Strictness.Coercible], + ["none", Strictness.None] + ]), + namespace: new StringOption("namespace", "Specify a wrapping Namespace", "NAME", "", "secondary") +}; + +export class RubyTargetLanguage extends TargetLanguage { + public constructor() { + super("Ruby", ["ruby"], "rb"); + } + + protected getOptions(): Array> { + return [rubyOptions.justTypes, rubyOptions.strictness, rubyOptions.namespace]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + protected get defaultIndentation(): string { + return " "; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RubyRenderer { + return new RubyRenderer(this, renderContext, getOptionValues(rubyOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/Ruby/utils.ts b/packages/quicktype-core/src/language/Ruby/utils.ts new file mode 100644 index 000000000..1b78d957c --- /dev/null +++ b/packages/quicktype-core/src/language/Ruby/utils.ts @@ -0,0 +1,71 @@ +import unicode from "unicode-properties"; + +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + intToHex, + isLetterOrUnderscore, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap +} from "../../support/Strings"; + +import * as keywords from "./constants"; + +export enum Strictness { + Strict = "Strict::", + Coercible = "Coercible::", + None = "Types::" +} + +export const forbiddenForObjectProperties = Array.from(new Set([...keywords.keywords, ...keywords.reservedProperties])); +function unicodeEscape(codePoint: number): string { + return "\\u{" + intToHex(codePoint, 0) + "}"; +} + +export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); + +const isStartCharacter = isLetterOrUnderscore; + +function isPartCharacter(utf16Unit: number): boolean { + const category: string = unicode.getCategory(utf16Unit); + return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); +} + +const legalizeName = legalizeCharacters(isPartCharacter); + +export function simpleNameStyle(original: string, uppercase: boolean): string { + if (/^[0-9]+$/.test(original)) { + original = original + "N"; + } + + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + uppercase ? firstUpperWordStyle : allLowerWordStyle, + uppercase ? firstUpperWordStyle : allLowerWordStyle, + allUpperWordStyle, + allUpperWordStyle, + "", + isStartCharacter + ); +} + +export function memberNameStyle(original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + allLowerWordStyle, + allLowerWordStyle, + allLowerWordStyle, + allLowerWordStyle, + "_", + isStartCharacter + ); +} diff --git a/packages/quicktype-core/src/language/Rust.ts b/packages/quicktype-core/src/language/Rust/RustRenderer.ts similarity index 54% rename from packages/quicktype-core/src/language/Rust.ts rename to packages/quicktype-core/src/language/Rust/RustRenderer.ts index 8dcf5b93a..6e0a6653f 100644 --- a/packages/quicktype-core/src/language/Rust.ts +++ b/packages/quicktype-core/src/language/Rust/RustRenderer.ts @@ -1,267 +1,30 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { mapFirst } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, EnumOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated } from "../Source"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { defined } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { type ClassType, type EnumType, type Type, UnionType } from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { type rustOptions } from "./language"; import { - allLowerWordStyle, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - intToHex, - isAscii, - isLetterOrUnderscore, - isLetterOrUnderscoreOrDigit, - isPrintable, - legalizeCharacters, - splitIntoWords, - utf32ConcatMap -} from "../support/Strings"; -import { defined } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { type ClassType, type EnumType, type Type, UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export enum Density { - Normal = "Normal", - Dense = "Dense" -} - -export enum Visibility { - Private = "Private", - Crate = "Crate", - Public = "Public" -} - -export const rustOptions = { - density: new EnumOption("density", "Density", [ - ["normal", Density.Normal], - ["dense", Density.Dense] - ]), - visibility: new EnumOption("visibility", "Field visibility", [ - ["private", Visibility.Private], - ["crate", Visibility.Crate], - ["public", Visibility.Public] - ]), - deriveDebug: new BooleanOption("derive-debug", "Derive Debug impl", false), - deriveClone: new BooleanOption("derive-clone", "Derive Clone impl", false), - derivePartialEq: new BooleanOption("derive-partial-eq", "Derive PartialEq impl", false), - skipSerializingNone: new BooleanOption("skip-serializing-none", "Skip serializing empty Option fields", false), - edition2018: new BooleanOption("edition-2018", "Edition 2018", true), - leadingComments: new BooleanOption("leading-comments", "Leading Comments", true) -}; - -type NameToParts = (name: string) => string[]; -type PartsToName = (parts: string[]) => string; -interface NamingStyle { - fromParts: PartsToName; - regex: RegExp; - toParts: NameToParts; -} - -const namingStyles: Record = { - snake_case: { - regex: /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/, - toParts: (name: string): string[] => name.split("_"), - fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("_") - }, - SCREAMING_SNAKE_CASE: { - regex: /^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$/, - toParts: (name: string): string[] => name.split("_"), - fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("_") - }, - camelCase: { - regex: /^[a-z]+([A-Z0-9][a-z]*)*$/, - toParts: (name: string): string[] => namingStyles.snake_case.toParts(name.replace(/(.)([A-Z])/g, "$1_$2")), - fromParts: (parts: string[]): string => - parts - .map((p, i) => - i === 0 ? p.toLowerCase() : p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase() - ) - .join("") - }, - PascalCase: { - regex: /^[A-Z][a-z]*([A-Z0-9][a-z]*)*$/, - toParts: (name: string): string[] => namingStyles.snake_case.toParts(name.replace(/(.)([A-Z])/g, "$1_$2")), - fromParts: (parts: string[]): string => - parts.map(p => p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase()).join("") - }, - "kebab-case": { - regex: /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, - toParts: (name: string): string[] => name.split("-"), - fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("-") - }, - "SCREAMING-KEBAB-CASE": { - regex: /^[A-Z][A-Z0-9]*(-[A-Z0-9]+)*$/, - toParts: (name: string): string[] => name.split("-"), - fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("-") - }, - lowercase: { - regex: /^[a-z][a-z0-9]*$/, - toParts: (name: string): string[] => [name], - fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("") - }, - UPPERCASE: { - regex: /^[A-Z][A-Z0-9]*$/, - toParts: (name: string): string[] => [name], - fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("") - } -}; - -export class RustTargetLanguage extends TargetLanguage { - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RustRenderer { - return new RustRenderer(this, renderContext, getOptionValues(rustOptions, untypedOptionValues)); - } - - public constructor() { - super("Rust", ["rust", "rs", "rustlang"], "rs"); - } - - protected getOptions(): Array> { - return [ - rustOptions.density, - rustOptions.visibility, - rustOptions.deriveDebug, - rustOptions.deriveClone, - rustOptions.derivePartialEq, - rustOptions.edition2018, - rustOptions.leadingComments, - rustOptions.skipSerializingNone - ]; - } -} - -const keywords = [ - "Serialize", - "Deserialize", - - // Special reserved identifiers used internally for elided lifetimes, - // unnamed method parameters, crate root module, error recovery etc. - "{{root}}", - "$crate", - - // Keywords used in the language. - "as", - "async", - "box", - "break", - "const", - "continue", - "crate", - "else", - "enum", - "extern", - "false", - "fn", - "for", - "if", - "impl", - "in", - "let", - "loop", - "match", - "mod", - "move", - "mut", - "pub", - "ref", - "return", - "self", - "Self", - "static", - "struct", - "super", - "trait", - "true", - "type", - "unsafe", - "use", - "where", - "while", - - // Keywords reserved for future use. - "abstract", - "alignof", - "become", - "do", - "final", - "macro", - "offsetof", - "override", - "priv", - "proc", - "pure", - "sizeof", - "typeof", - "unsized", - "virtual", - "yield", - - // Weak keywords, have special meaning only in specific contexts. - "catch", - "default", - "dyn", - "'static", - "union", - - // Conflict between `std::Option` and potentially generated Option - "option" -]; - -const isAsciiLetterOrUnderscoreOrDigit = (codePoint: number): boolean => { - if (!isAscii(codePoint)) { - return false; - } - - return isLetterOrUnderscoreOrDigit(codePoint); -}; - -const isAsciiLetterOrUnderscore = (codePoint: number): boolean => { - if (!isAscii(codePoint)) { - return false; - } - - return isLetterOrUnderscore(codePoint); -}; - -const legalizeName = legalizeCharacters(isAsciiLetterOrUnderscoreOrDigit); - -function rustStyle(original: string, isSnakeCase: boolean): string { - const words = splitIntoWords(original); - - const wordStyle = isSnakeCase ? allLowerWordStyle : firstUpperWordStyle; - - const combined = combineWords( - words, - legalizeName, - wordStyle, - wordStyle, - wordStyle, - wordStyle, - isSnakeCase ? "_" : "", - isAsciiLetterOrUnderscore - ); - - return combined === "_" ? "_underscore" : combined; -} - -const snakeNamingFunction = funPrefixNamer("default", (original: string) => rustStyle(original, true)); -const camelNamingFunction = funPrefixNamer("camel", (original: string) => rustStyle(original, false)); - -const standardUnicodeRustEscape = (codePoint: number): string => { - if (codePoint <= 0xffff) { - return "\\u{" + intToHex(codePoint, 4) + "}"; - } else { - return "\\u{" + intToHex(codePoint, 6) + "}"; - } -}; - -const rustStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeRustEscape)); + Density, + Visibility, + camelNamingFunction, + getPreferedNamingStyle, + listMatchingNamingStyles, + nameToNamingStyle, + namingStyles, + rustStringEscape, + snakeNamingFunction +} from "./utils"; export class RustRenderer extends ConvenienceRenderer { public constructor( @@ -288,7 +51,7 @@ export class RustRenderer extends ConvenienceRenderer { return camelNamingFunction; } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } @@ -548,36 +311,3 @@ export class RustRenderer extends ConvenienceRenderer { ); } } - -function getPreferedNamingStyle(namingStyleOccurences: string[], defaultStyle: string): string { - const occurrences = Object.fromEntries(Object.keys(namingStyles).map(key => [key, 0])); - namingStyleOccurences.forEach(style => ++occurrences[style]); - const max = Math.max(...Object.values(occurrences)); - const preferedStyles = Object.entries(occurrences) - .filter(([_style, num]) => num === max) - .map(([style, _num]) => style); - if (preferedStyles.includes(defaultStyle)) { - return defaultStyle; - } - - return preferedStyles[0]; -} - -function listMatchingNamingStyles(name: string): string[] { - return Object.entries(namingStyles) - .filter(([_, { regex }]) => regex.test(name)) - .map(([namingStyle, _]) => namingStyle); -} - -function nameToNamingStyle(name: string, style: string): string { - if (namingStyles[style].regex.test(name)) { - return name; - } - - const fromStyle = listMatchingNamingStyles(name)[0]; - if (fromStyle === undefined) { - return name; - } - - return namingStyles[style].fromParts(namingStyles[fromStyle].toParts(name)); -} diff --git a/packages/quicktype-core/src/language/Rust/constants.ts b/packages/quicktype-core/src/language/Rust/constants.ts new file mode 100644 index 000000000..8ba3d3eb8 --- /dev/null +++ b/packages/quicktype-core/src/language/Rust/constants.ts @@ -0,0 +1,76 @@ +export const keywords = [ + "Serialize", + "Deserialize", + + // Special reserved identifiers used internally for elided lifetimes, + // unnamed method parameters, crate root module, error recovery etc. + "{{root}}", + "$crate", + + // Keywords used in the language. + "as", + "async", + "box", + "break", + "const", + "continue", + "crate", + "else", + "enum", + "extern", + "false", + "fn", + "for", + "if", + "impl", + "in", + "let", + "loop", + "match", + "mod", + "move", + "mut", + "pub", + "ref", + "return", + "self", + "Self", + "static", + "struct", + "super", + "trait", + "true", + "type", + "unsafe", + "use", + "where", + "while", + + // Keywords reserved for future use. + "abstract", + "alignof", + "become", + "do", + "final", + "macro", + "offsetof", + "override", + "priv", + "proc", + "pure", + "sizeof", + "typeof", + "unsized", + "virtual", + "yield", + + // Weak keywords, have special meaning only in specific contexts. + "catch", + "default", + "dyn", + "'static", + "union", + + // Conflict between `std::Option` and potentially generated Option + "option" +] as const; diff --git a/packages/quicktype-core/src/language/Rust/index.ts b/packages/quicktype-core/src/language/Rust/index.ts new file mode 100644 index 000000000..456ae1274 --- /dev/null +++ b/packages/quicktype-core/src/language/Rust/index.ts @@ -0,0 +1,2 @@ +export { RustTargetLanguage, rustOptions } from "./language"; +export { RustRenderer } from "./RustRenderer"; diff --git a/packages/quicktype-core/src/language/Rust/language.ts b/packages/quicktype-core/src/language/Rust/language.ts new file mode 100644 index 000000000..2f62883ea --- /dev/null +++ b/packages/quicktype-core/src/language/Rust/language.ts @@ -0,0 +1,48 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { RustRenderer } from "./RustRenderer"; +import { Density, Visibility } from "./utils"; + +export const rustOptions = { + density: new EnumOption("density", "Density", [ + ["normal", Density.Normal], + ["dense", Density.Dense] + ]), + visibility: new EnumOption("visibility", "Field visibility", [ + ["private", Visibility.Private], + ["crate", Visibility.Crate], + ["public", Visibility.Public] + ]), + deriveDebug: new BooleanOption("derive-debug", "Derive Debug impl", false), + deriveClone: new BooleanOption("derive-clone", "Derive Clone impl", false), + derivePartialEq: new BooleanOption("derive-partial-eq", "Derive PartialEq impl", false), + skipSerializingNone: new BooleanOption("skip-serializing-none", "Skip serializing empty Option fields", false), + edition2018: new BooleanOption("edition-2018", "Edition 2018", true), + leadingComments: new BooleanOption("leading-comments", "Leading Comments", true) +}; + +export class RustTargetLanguage extends TargetLanguage { + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RustRenderer { + return new RustRenderer(this, renderContext, getOptionValues(rustOptions, untypedOptionValues)); + } + + public constructor() { + super("Rust", ["rust", "rs", "rustlang"], "rs"); + } + + protected getOptions(): Array> { + return [ + rustOptions.density, + rustOptions.visibility, + rustOptions.deriveDebug, + rustOptions.deriveClone, + rustOptions.derivePartialEq, + rustOptions.edition2018, + rustOptions.leadingComments, + rustOptions.skipSerializingNone + ]; + } +} diff --git a/packages/quicktype-core/src/language/Rust/utils.ts b/packages/quicktype-core/src/language/Rust/utils.ts new file mode 100644 index 000000000..1b086f545 --- /dev/null +++ b/packages/quicktype-core/src/language/Rust/utils.ts @@ -0,0 +1,166 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allLowerWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + intToHex, + isAscii, + isLetterOrUnderscore, + isLetterOrUnderscoreOrDigit, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap +} from "../../support/Strings"; + +export enum Density { + Normal = "Normal", + Dense = "Dense" +} + +export enum Visibility { + Private = "Private", + Crate = "Crate", + Public = "Public" +} + +type NameToParts = (name: string) => string[]; +type PartsToName = (parts: string[]) => string; +interface NamingStyle { + fromParts: PartsToName; + regex: RegExp; + toParts: NameToParts; +} + +export const namingStyles: Record = { + snake_case: { + regex: /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/, + toParts: (name: string): string[] => name.split("_"), + fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("_") + }, + SCREAMING_SNAKE_CASE: { + regex: /^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$/, + toParts: (name: string): string[] => name.split("_"), + fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("_") + }, + camelCase: { + regex: /^[a-z]+([A-Z0-9][a-z]*)*$/, + toParts: (name: string): string[] => namingStyles.snake_case.toParts(name.replace(/(.)([A-Z])/g, "$1_$2")), + fromParts: (parts: string[]): string => + parts + .map((p, i) => + i === 0 ? p.toLowerCase() : p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase() + ) + .join("") + }, + PascalCase: { + regex: /^[A-Z][a-z]*([A-Z0-9][a-z]*)*$/, + toParts: (name: string): string[] => namingStyles.snake_case.toParts(name.replace(/(.)([A-Z])/g, "$1_$2")), + fromParts: (parts: string[]): string => + parts.map(p => p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase()).join("") + }, + "kebab-case": { + regex: /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, + toParts: (name: string): string[] => name.split("-"), + fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("-") + }, + "SCREAMING-KEBAB-CASE": { + regex: /^[A-Z][A-Z0-9]*(-[A-Z0-9]+)*$/, + toParts: (name: string): string[] => name.split("-"), + fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("-") + }, + lowercase: { + regex: /^[a-z][a-z0-9]*$/, + toParts: (name: string): string[] => [name], + fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("") + }, + UPPERCASE: { + regex: /^[A-Z][A-Z0-9]*$/, + toParts: (name: string): string[] => [name], + fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("") + } +}; + +const isAsciiLetterOrUnderscoreOrDigit = (codePoint: number): boolean => { + if (!isAscii(codePoint)) { + return false; + } + + return isLetterOrUnderscoreOrDigit(codePoint); +}; + +const isAsciiLetterOrUnderscore = (codePoint: number): boolean => { + if (!isAscii(codePoint)) { + return false; + } + + return isLetterOrUnderscore(codePoint); +}; + +const legalizeName = legalizeCharacters(isAsciiLetterOrUnderscoreOrDigit); + +function rustStyle(original: string, isSnakeCase: boolean): string { + const words = splitIntoWords(original); + + const wordStyle = isSnakeCase ? allLowerWordStyle : firstUpperWordStyle; + + const combined = combineWords( + words, + legalizeName, + wordStyle, + wordStyle, + wordStyle, + wordStyle, + isSnakeCase ? "_" : "", + isAsciiLetterOrUnderscore + ); + + return combined === "_" ? "_underscore" : combined; +} + +export const snakeNamingFunction = funPrefixNamer("default", (original: string) => rustStyle(original, true)); +export const camelNamingFunction = funPrefixNamer("camel", (original: string) => rustStyle(original, false)); + +const standardUnicodeRustEscape = (codePoint: number): string => { + if (codePoint <= 0xffff) { + return "\\u{" + intToHex(codePoint, 4) + "}"; + } else { + return "\\u{" + intToHex(codePoint, 6) + "}"; + } +}; + +export const rustStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeRustEscape)); + +export function getPreferedNamingStyle(namingStyleOccurences: string[], defaultStyle: string): string { + const occurrences = Object.fromEntries(Object.keys(namingStyles).map(key => [key, 0])); + namingStyleOccurences.forEach(style => ++occurrences[style]); + const max = Math.max(...Object.values(occurrences)); + const preferedStyles = Object.entries(occurrences) + .filter(([_style, num]) => num === max) + .map(([style, _num]) => style); + if (preferedStyles.includes(defaultStyle)) { + return defaultStyle; + } + + return preferedStyles[0]; +} + +export function listMatchingNamingStyles(name: string): string[] { + return Object.entries(namingStyles) + .filter(([_, { regex }]) => regex.test(name)) + .map(([namingStyle, _]) => namingStyle); +} + +export function nameToNamingStyle(name: string, style: string): string { + if (namingStyles[style].regex.test(name)) { + return name; + } + + const fromStyle = listMatchingNamingStyles(name)[0]; + if (fromStyle === undefined) { + return name; + } + + return namingStyles[style].fromParts(namingStyles[fromStyle].toParts(name)); +} diff --git a/packages/quicktype-core/src/language/Scala3.ts b/packages/quicktype-core/src/language/Scala3.ts deleted file mode 100644 index 75da0773f..000000000 --- a/packages/quicktype-core/src/language/Scala3.ts +++ /dev/null @@ -1,721 +0,0 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated } from "../Source"; -import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - firstUpperWordStyle, - isDigit, - isLetterOrUnderscore, - isNumeric, - legalizeCharacters, - splitIntoWords -} from "../support/Strings"; -import { assertNever } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayType, - type ClassProperty, - type ClassType, - type EnumType, - MapType, - type ObjectType, - type Type, - type UnionType -} from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export enum Framework { - None = "None", - Upickle = "Upickle", - Circe = "Circe" -} - -export const scala3Options = { - framework: new EnumOption( - "framework", - "Serialization framework", - [ - ["just-types", Framework.None], - ["circe", Framework.Circe], - ["upickle", Framework.Upickle] - ], - undefined - ), - packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") -}; - -// Use backticks for param names with symbols -const invalidSymbols = [ - ":", - "-", - "+", - "!", - "@", - "#", - "$", - "%", - "^", - "&", - "*", - "(", - ")", - ">", - "<", - "/", - ";", - "'", - '"', - "{", - "}", - ":", - "~", - "`", - "." -]; - -const keywords = [ - "abstract", - "case", - "catch", - "class", - "def", - "do", - "else", - "enum", - "extends", - "export", - "false", - "final", - "finally", - "for", - "forSome", - "if", - "implicit", - "import", - "lazy", - "match", - "new", - "null", - "object", - "override", - "package", - "private", - "protected", - "return", - "sealed", - "super", - "this", - "then", - "throw", - "trait", - "try", - "true", - "type", - "val", - "var", - "while", - "with", - "yield", - "Any", - "Boolean", - "Double", - "Float", - "Long", - "Int", - "Short", - "System", - "Byte", - "String", - "Array", - "List", - "Map", - "Enum" -]; - -/** - * Check if given parameter name should be wrapped in a backtick - * @param paramName - */ -const shouldAddBacktick = (paramName: string): boolean => { - return ( - keywords.some(s => paramName === s) || - invalidSymbols.some(s => paramName.includes(s)) || - !isNaN(+parseFloat(paramName)) || - !isNaN(parseInt(paramName.charAt(0))) - ); -}; - -const wrapOption = (s: string, optional: boolean): string => { - if (optional) { - return "Option[" + s + "]"; - } else { - return s; - } -}; - -function isPartCharacter(codePoint: number): boolean { - return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); -} - -function isStartCharacter(codePoint: number): boolean { - return isPartCharacter(codePoint) && !isDigit(codePoint); -} - -const legalizeName = legalizeCharacters(isPartCharacter); - -function scalaNameStyle(isUpper: boolean, original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - isUpper ? firstUpperWordStyle : allLowerWordStyle, - firstUpperWordStyle, - isUpper ? allUpperWordStyle : allLowerWordStyle, - allUpperWordStyle, - "", - isStartCharacter - ); -} - -/* function unicodeEscape(codePoint: number): string { - return "\\u" + intToHex(codePoint, 4); -} */ - -// const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); - -/* function stringEscape(s: string): string { - // "$this" is a template string in Kotlin so we have to escape $ - return _stringEscape(s).replace(/\$/g, "\\$"); -} */ - -const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s)); -const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); - -export class Scala3Renderer extends ConvenienceRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - protected readonly _scalaOptions: OptionValues - ) { - super(targetLanguage, renderContext); - } - - protected forbiddenNamesForGlobalNamespace(): string[] { - return keywords; - } - - protected forbiddenForObjectProperties(_: ObjectType, _classNamed: Name): ForbiddenWordsInfo { - return { names: [], includeGlobalForbidden: true }; - } - - protected forbiddenForEnumCases(_: EnumType, _enumName: Name): ForbiddenWordsInfo { - return { names: [], includeGlobalForbidden: true }; - } - - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { - return { names: [], includeGlobalForbidden: false }; - } - - protected topLevelNameStyle(rawName: string): string { - return scalaNameStyle(true, rawName); - } - - protected makeNamedTypeNamer(): Namer { - return upperNamingFunction; - } - - protected namerForObjectProperty(): Namer { - return lowerNamingFunction; - } - - protected makeUnionMemberNamer(): Namer { - return funPrefixNamer("upper", s => scalaNameStyle(true, s) + "Value"); - } - - protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("upper", s => s.replace(" ", "")); // TODO - add backticks where appropriate - } - - protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); - } - - protected emitBlock( - line: Sourcelike, - f: () => void, - delimiter: "curly" | "paren" | "lambda" | "none" = "curly" - ): void { - const [open, close] = - delimiter === "curly" - ? ["{", "}"] - : delimiter === "paren" - ? ["(", ")"] - : delimiter === "none" - ? ["", ""] - : ["{", "})"]; - this.emitLine(line, " ", open); - this.indent(f); - this.emitLine(close); - } - - protected anySourceType(optional: boolean): Sourcelike { - return [wrapOption("Any", optional)]; - } - - // (asarazan): I've broken out the following two functions - // because some renderers, such as kotlinx, can cope with `any`, while some get mad. - protected arrayType(arrayType: ArrayType, withIssues = false): Sourcelike { - return ["Seq[", this.scalaType(arrayType.items, withIssues), "]"]; - } - - protected mapType(mapType: MapType, withIssues = false): Sourcelike { - return ["Map[String, ", this.scalaType(mapType.values, withIssues), "]"]; - } - - protected scalaType(t: Type, withIssues = false, noOptional = false): Sourcelike { - return matchType( - t, - _anyType => { - return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional)); - }, - _nullType => { - // return "None.type" - return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional)); - }, - _boolType => "Boolean", - _integerType => "Long", - _doubleType => "Double", - _stringType => "String", - arrayType => this.arrayType(arrayType, withIssues), - classType => this.nameForNamedType(classType), - mapType => this.mapType(mapType, withIssues), - enumType => this.nameForNamedType(enumType), - unionType => { - const nullable = nullableFromUnion(unionType); - if (nullable !== null) { - if (noOptional) { - return [this.scalaType(nullable, withIssues)]; - } else { - return ["Option[", this.scalaType(nullable, withIssues), "]"]; - } - } - - return this.nameForNamedType(unionType); - } - ); - } - - protected emitUsageHeader(): void { - // To be overridden - } - - protected emitHeader(): void { - if (this.leadingComments !== undefined) { - this.emitComments(this.leadingComments); - } else { - this.emitUsageHeader(); - } - - this.ensureBlankLine(); - this.emitLine("package ", this._scalaOptions.packageName); - this.ensureBlankLine(); - } - - protected emitTopLevelArray(t: ArrayType, name: Name): void { - const elementType = this.scalaType(t.items); - this.emitLine(["type ", name, " = List[", elementType, "]"]); - } - - protected emitTopLevelMap(t: MapType, name: Name): void { - const elementType = this.scalaType(t.values); - this.emitLine(["type ", name, " = Map[String, ", elementType, "]"]); - } - - protected emitEmptyClassDefinition(c: ClassType, className: Name): void { - this.emitDescription(this.descriptionForType(c)); - this.emitLine("case class ", className, "()"); - } - - protected emitClassDefinition(c: ClassType, className: Name): void { - if (c.getProperties().size === 0) { - this.emitEmptyClassDefinition(c, className); - return; - } - - const scalaType = (p: ClassProperty): Sourcelike => { - if (p.isOptional) { - return ["Option[", this.scalaType(p.type, true, true), "]"]; - } else { - return this.scalaType(p.type, true); - } - }; - - this.emitDescription(this.descriptionForType(c)); - this.emitLine("case class ", className, " ("); - this.indent(() => { - let count = c.getProperties().size; - let first = true; - this.forEachClassProperty(c, "none", (_, jsonName, p) => { - const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; - const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; - const last = --count === 0; - const meta: Array<() => void> = []; - - const description = this.descriptionForClassProperty(c, jsonName); - if (description !== undefined) { - meta.push(() => this.emitDescription(description)); - } - - if (meta.length > 0 && !first) { - this.ensureBlankLine(); - } - - for (const emit of meta) { - emit(); - } - - const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); - const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; - this.emitLine( - "val ", - nameWithBackticks, - " : ", - scalaType(p), - p.isOptional ? " = None" : nullableOrOptional ? " = None" : "", - last ? "" : "," - ); - - if (meta.length > 0 && !last) { - this.ensureBlankLine(); - } - - first = false; - }); - }); - - this.emitClassDefinitionMethods(); - } - - protected emitClassDefinitionMethods(): void { - this.emitLine(")"); - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - this.emitBlock( - ["enum ", enumName, " : "], - () => { - let count = e.cases.size; - if (count > 0) { - this.emitItem("\t case "); - } - - this.forEachEnumCase(e, "none", (name, jsonName) => { - if (!(jsonName == "")) { - const backticks = - shouldAddBacktick(jsonName) || - jsonName.includes(" ") || - !isNaN(parseInt(jsonName.charAt(0))); - if (backticks) { - this.emitItem("`"); - } - - this.emitItemOnce([name]); - if (backticks) { - this.emitItem("`"); - } - - if (--count > 0) this.emitItem([","]); - } else { - --count; - } - }); - }, - "none" - ); - } - - protected emitUnionDefinition(u: UnionType, unionName: Name): void { - function sortBy(t: Type): string { - const kind = t.kind; - if (kind === "class") return kind; - return "_" + kind; - } - - this.emitDescription(this.descriptionForType(u)); - - const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Sourcelike[] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { - theTypes.push(this.scalaType(t)); - }); - if (maybeNull !== null) { - theTypes.push(this.nameForUnionMember(u, maybeNull)); - } - - this.emitItem(["type ", unionName, " = "]); - theTypes.forEach((t, i) => { - this.emitItem(i === 0 ? t : [" | ", t]); - }); - this.ensureBlankLine(); - } - - protected emitSourceStructure(): void { - this.emitHeader(); - - // Top-level arrays, maps - this.forEachTopLevel("leading", (t, name) => { - if (t instanceof ArrayType) { - this.emitTopLevelArray(t, name); - } else if (t instanceof MapType) { - this.emitTopLevelMap(t, name); - } - }); - - this.forEachNamedType( - "leading-and-interposing", - (c: ClassType, n: Name) => this.emitClassDefinition(c, n), - (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) - ); - } -} - -export class UpickleRenderer extends Scala3Renderer { - protected emitClassDefinitionMethods(): void { - this.emitLine(") derives ReadWriter "); - } - - protected emitHeader(): void { - super.emitHeader(); - - this.emitLine("import upickle.default.*"); - this.ensureBlankLine(); - } -} - -export class CirceRenderer extends Scala3Renderer { - private seenUnionTypes: string[] = []; - - protected circeEncoderForType(t: Type, __ = false, noOptional = false, paramName: string = ""): Sourcelike { - return matchType( - t, - _anyType => ["Encoder.encodeJson(", paramName, ")"], - _nullType => ["Encoder.encodeNone(", paramName, ")"], - _boolType => ["Encoder.encodeBoolean(", paramName, ")"], - _integerType => ["Encoder.encodeLong(", paramName, ")"], - _doubleType => ["Encoder.encodeDouble(", paramName, ")"], - _stringType => ["Encoder.encodeString(", paramName, ")"], - arrayType => ["Encoder.encodeSeq[", this.scalaType(arrayType.items), "].apply(", paramName, ")"], - classType => ["Encoder.AsObject[", this.scalaType(classType), "].apply(", paramName, ")"], - mapType => ["Encoder.encodeMap[String,", this.scalaType(mapType.values), "].apply(", paramName, ")"], - _ => ["Encoder.encodeString(", paramName, ")"], - unionType => { - const nullable = nullableFromUnion(unionType); - if (nullable !== null) { - if (noOptional) { - return ["Encoder.AsObject[", this.nameForNamedType(nullable), "]"]; - } else { - return ["Encoder.AsObject[Option[", this.nameForNamedType(nullable), "]]"]; - } - } - - return ["Encoder.AsObject[", this.nameForNamedType(unionType), "]"]; - } - ); - } - - protected emitEmptyClassDefinition(c: ClassType, className: Name): void { - this.emitDescription(this.descriptionForType(c)); - this.ensureBlankLine(); - this.emitLine("case class ", className, "() derives Encoder.AsObject, Decoder"); - } - - protected anySourceType(optional: boolean): Sourcelike { - return [wrapOption("Json", optional)]; - } - - protected emitClassDefinitionMethods(): void { - this.emitLine(") derives Encoder.AsObject, Decoder"); - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - this.ensureBlankLine(); - this.emitItem(["type ", enumName, " = "]); - let count = e.cases.size; - this.forEachEnumCase(e, "none", (_, jsonName) => { - // if (!(jsonName == "")) { - /* const backticks = - shouldAddBacktick(jsonName) || - jsonName.includes(" ") || - !isNaN(parseInt(jsonName.charAt(0))) - if (backticks) {this.emitItem("`")} else */ - this.emitItem(['"', jsonName, '"']); - // if (backticks) {this.emitItem("`")} - if (--count > 0) this.emitItem([" | "]); - // } else { - // --count - // } - }); - this.ensureBlankLine(); - } - - protected emitHeader(): void { - super.emitHeader(); - - this.emitLine("import scala.util.Try"); - this.emitLine("import io.circe.syntax._"); - this.emitLine("import io.circe._"); - this.emitLine("import cats.syntax.functor._"); - this.ensureBlankLine(); - - this.emitLine("// For serialising string unions"); - this.emitLine( - "given [A <: Singleton](using A <:< String): Decoder[A] = Decoder.decodeString.emapTry(x => Try(x.asInstanceOf[A])) " - ); - this.emitLine( - "given [A <: Singleton](using ev: A <:< String): Encoder[A] = Encoder.encodeString.contramap(ev) " - ); - this.ensureBlankLine(); - this.emitLine("// If a union has a null in, then we'll need this too... "); - this.emitLine("type NullValue = None.type"); - } - - protected emitTopLevelArray(t: ArrayType, name: Name): void { - super.emitTopLevelArray(t, name); - const elementType = this.scalaType(t.items); - this.emitLine([ - "given (using ev : ", - elementType, - "): Encoder[Map[String,", - elementType, - "]] = Encoder.encodeMap[String, ", - elementType, - "]" - ]); - } - - protected emitTopLevelMap(t: MapType, name: Name): void { - super.emitTopLevelMap(t, name); - const elementType = this.scalaType(t.values); - this.ensureBlankLine(); - this.emitLine([ - "given (using ev : ", - elementType, - "): Encoder[Map[String, ", - elementType, - "]] = Encoder.encodeMap[String, ", - elementType, - "]" - ]); - } - - protected emitUnionDefinition(u: UnionType, unionName: Name): void { - function sortBy(t: Type): string { - const kind = t.kind; - if (kind === "class") return kind; - return "_" + kind; - } - - this.emitDescription(this.descriptionForType(u)); - - const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - const theTypes: Sourcelike[] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { - theTypes.push(this.scalaType(t)); - }); - if (maybeNull !== null) { - theTypes.push(this.nameForUnionMember(u, maybeNull)); - } - - this.emitItem(["type ", unionName, " = "]); - theTypes.forEach((t, i) => { - this.emitItem(i === 0 ? t : [" | ", t]); - }); - const thisUnionType = theTypes.map(x => this.sourcelikeToString(x)).join(" | "); - - this.ensureBlankLine(); - if (!this.seenUnionTypes.some(y => y === thisUnionType)) { - this.seenUnionTypes.push(thisUnionType); - const sourceLikeTypes: Array<[Sourcelike, Type]> = []; - this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { - sourceLikeTypes.push([this.scalaType(t), t]); - }); - if (maybeNull !== null) { - sourceLikeTypes.push([this.nameForUnionMember(u, maybeNull), maybeNull]); - } - - this.emitLine(["given Decoder[", unionName, "] = {"]); - this.indent(() => { - this.emitLine(["List[Decoder[", unionName, "]]("]); - this.indent(() => { - sourceLikeTypes.forEach(t => { - this.emitLine(["Decoder[", t[0], "].widen,"]); - }); - }); - this.emitLine(").reduceLeft(_ or _)"); - }); - this.emitLine(["}"]); - - this.ensureBlankLine(); - - this.emitLine(["given Encoder[", unionName, "] = Encoder.instance {"]); - this.indent(() => { - sourceLikeTypes.forEach((t, i) => { - const paramTemp = `enc${i.toString()}`; - this.emitLine([ - "case ", - paramTemp, - " : ", - t[0], - " => ", - this.circeEncoderForType(t[1], false, false, paramTemp) - ]); - }); - }); - this.emitLine("}"); - } - } -} - -export class Scala3TargetLanguage extends TargetLanguage { - public constructor() { - super("Scala3", ["scala3"], "scala"); - } - - protected getOptions(): Array> { - return [scala3Options.framework, scala3Options.packageName]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { - const options = getOptionValues(scala3Options, untypedOptionValues); - - switch (options.framework) { - case Framework.None: - return new Scala3Renderer(this, renderContext, options); - case Framework.Upickle: - return new UpickleRenderer(this, renderContext, options); - case Framework.Circe: - return new CirceRenderer(this, renderContext, options); - default: - return assertNever(options.framework); - } - } -} diff --git a/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts b/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts new file mode 100644 index 000000000..8be6e660d --- /dev/null +++ b/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts @@ -0,0 +1,193 @@ +import { type Name } from "../../Naming"; +import { type Sourcelike } from "../../Source"; +import { type ArrayType, type ClassType, type EnumType, type MapType, type Type, type UnionType } from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { Scala3Renderer } from "./Scala3Renderer"; +import { wrapOption } from "./utils"; + +export class CirceRenderer extends Scala3Renderer { + private seenUnionTypes: string[] = []; + + protected circeEncoderForType(t: Type, __ = false, noOptional = false, paramName: string = ""): Sourcelike { + return matchType( + t, + _anyType => ["Encoder.encodeJson(", paramName, ")"], + _nullType => ["Encoder.encodeNone(", paramName, ")"], + _boolType => ["Encoder.encodeBoolean(", paramName, ")"], + _integerType => ["Encoder.encodeLong(", paramName, ")"], + _doubleType => ["Encoder.encodeDouble(", paramName, ")"], + _stringType => ["Encoder.encodeString(", paramName, ")"], + arrayType => ["Encoder.encodeSeq[", this.scalaType(arrayType.items), "].apply(", paramName, ")"], + classType => ["Encoder.AsObject[", this.scalaType(classType), "].apply(", paramName, ")"], + mapType => ["Encoder.encodeMap[String,", this.scalaType(mapType.values), "].apply(", paramName, ")"], + _ => ["Encoder.encodeString(", paramName, ")"], + unionType => { + const nullable = nullableFromUnion(unionType); + if (nullable !== null) { + if (noOptional) { + return ["Encoder.AsObject[", this.nameForNamedType(nullable), "]"]; + } else { + return ["Encoder.AsObject[Option[", this.nameForNamedType(nullable), "]]"]; + } + } + + return ["Encoder.AsObject[", this.nameForNamedType(unionType), "]"]; + } + ); + } + + protected emitEmptyClassDefinition(c: ClassType, className: Name): void { + this.emitDescription(this.descriptionForType(c)); + this.ensureBlankLine(); + this.emitLine("case class ", className, "() derives Encoder.AsObject, Decoder"); + } + + protected anySourceType(optional: boolean): Sourcelike { + return [wrapOption("Json", optional)]; + } + + protected emitClassDefinitionMethods(): void { + this.emitLine(") derives Encoder.AsObject, Decoder"); + } + + protected emitEnumDefinition(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + + this.ensureBlankLine(); + this.emitItem(["type ", enumName, " = "]); + let count = e.cases.size; + this.forEachEnumCase(e, "none", (_, jsonName) => { + // if (!(jsonName == "")) { + /* const backticks = + shouldAddBacktick(jsonName) || + jsonName.includes(" ") || + !isNaN(parseInt(jsonName.charAt(0))) + if (backticks) {this.emitItem("`")} else */ + this.emitItem(['"', jsonName, '"']); + // if (backticks) {this.emitItem("`")} + if (--count > 0) this.emitItem([" | "]); + // } else { + // --count + // } + }); + this.ensureBlankLine(); + } + + protected emitHeader(): void { + super.emitHeader(); + + this.emitLine("import scala.util.Try"); + this.emitLine("import io.circe.syntax._"); + this.emitLine("import io.circe._"); + this.emitLine("import cats.syntax.functor._"); + this.ensureBlankLine(); + + this.emitLine("// For serialising string unions"); + this.emitLine( + "given [A <: Singleton](using A <:< String): Decoder[A] = Decoder.decodeString.emapTry(x => Try(x.asInstanceOf[A])) " + ); + this.emitLine( + "given [A <: Singleton](using ev: A <:< String): Encoder[A] = Encoder.encodeString.contramap(ev) " + ); + this.ensureBlankLine(); + this.emitLine("// If a union has a null in, then we'll need this too... "); + this.emitLine("type NullValue = None.type"); + } + + protected emitTopLevelArray(t: ArrayType, name: Name): void { + super.emitTopLevelArray(t, name); + const elementType = this.scalaType(t.items); + this.emitLine([ + "given (using ev : ", + elementType, + "): Encoder[Map[String,", + elementType, + "]] = Encoder.encodeMap[String, ", + elementType, + "]" + ]); + } + + protected emitTopLevelMap(t: MapType, name: Name): void { + super.emitTopLevelMap(t, name); + const elementType = this.scalaType(t.values); + this.ensureBlankLine(); + this.emitLine([ + "given (using ev : ", + elementType, + "): Encoder[Map[String, ", + elementType, + "]] = Encoder.encodeMap[String, ", + elementType, + "]" + ]); + } + + protected emitUnionDefinition(u: UnionType, unionName: Name): void { + function sortBy(t: Type): string { + const kind = t.kind; + if (kind === "class") return kind; + return "_" + kind; + } + + this.emitDescription(this.descriptionForType(u)); + + const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); + const theTypes: Sourcelike[] = []; + this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { + theTypes.push(this.scalaType(t)); + }); + if (maybeNull !== null) { + theTypes.push(this.nameForUnionMember(u, maybeNull)); + } + + this.emitItem(["type ", unionName, " = "]); + theTypes.forEach((t, i) => { + this.emitItem(i === 0 ? t : [" | ", t]); + }); + const thisUnionType = theTypes.map(x => this.sourcelikeToString(x)).join(" | "); + + this.ensureBlankLine(); + if (!this.seenUnionTypes.some(y => y === thisUnionType)) { + this.seenUnionTypes.push(thisUnionType); + const sourceLikeTypes: Array<[Sourcelike, Type]> = []; + this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { + sourceLikeTypes.push([this.scalaType(t), t]); + }); + if (maybeNull !== null) { + sourceLikeTypes.push([this.nameForUnionMember(u, maybeNull), maybeNull]); + } + + this.emitLine(["given Decoder[", unionName, "] = {"]); + this.indent(() => { + this.emitLine(["List[Decoder[", unionName, "]]("]); + this.indent(() => { + sourceLikeTypes.forEach(t => { + this.emitLine(["Decoder[", t[0], "].widen,"]); + }); + }); + this.emitLine(").reduceLeft(_ or _)"); + }); + this.emitLine(["}"]); + + this.ensureBlankLine(); + + this.emitLine(["given Encoder[", unionName, "] = Encoder.instance {"]); + this.indent(() => { + sourceLikeTypes.forEach((t, i) => { + const paramTemp = `enc${i.toString()}`; + this.emitLine([ + "case ", + paramTemp, + " : ", + t[0], + " => ", + this.circeEncoderForType(t[1], false, false, paramTemp) + ]); + }); + }); + this.emitLine("}"); + } + } +} diff --git a/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts b/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts new file mode 100644 index 000000000..bc5fe7a56 --- /dev/null +++ b/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts @@ -0,0 +1,313 @@ +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + type ClassType, + type EnumType, + MapType, + type ObjectType, + type Type, + type UnionType +} from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; + +import { keywords } from "./constants"; +import { type scala3Options } from "./language"; +import { lowerNamingFunction, scalaNameStyle, shouldAddBacktick, upperNamingFunction, wrapOption } from "./utils"; + +export class Scala3Renderer extends ConvenienceRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + protected readonly _scalaOptions: OptionValues + ) { + super(targetLanguage, renderContext); + } + + protected forbiddenNamesForGlobalNamespace(): readonly string[] { + return keywords; + } + + protected forbiddenForObjectProperties(_: ObjectType, _classNamed: Name): ForbiddenWordsInfo { + return { names: [], includeGlobalForbidden: true }; + } + + protected forbiddenForEnumCases(_: EnumType, _enumName: Name): ForbiddenWordsInfo { + return { names: [], includeGlobalForbidden: true }; + } + + protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + return { names: [], includeGlobalForbidden: false }; + } + + protected topLevelNameStyle(rawName: string): string { + return scalaNameStyle(true, rawName); + } + + protected makeNamedTypeNamer(): Namer { + return upperNamingFunction; + } + + protected namerForObjectProperty(): Namer { + return lowerNamingFunction; + } + + protected makeUnionMemberNamer(): Namer { + return funPrefixNamer("upper", s => scalaNameStyle(true, s) + "Value"); + } + + protected makeEnumCaseNamer(): Namer { + return funPrefixNamer("upper", s => s.replace(" ", "")); // TODO - add backticks where appropriate + } + + protected emitDescriptionBlock(lines: Sourcelike[]): void { + this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + } + + protected emitBlock( + line: Sourcelike, + f: () => void, + delimiter: "curly" | "paren" | "lambda" | "none" = "curly" + ): void { + const [open, close] = + delimiter === "curly" + ? ["{", "}"] + : delimiter === "paren" + ? ["(", ")"] + : delimiter === "none" + ? ["", ""] + : ["{", "})"]; + this.emitLine(line, " ", open); + this.indent(f); + this.emitLine(close); + } + + protected anySourceType(optional: boolean): Sourcelike { + return [wrapOption("Any", optional)]; + } + + // (asarazan): I've broken out the following two functions + // because some renderers, such as kotlinx, can cope with `any`, while some get mad. + protected arrayType(arrayType: ArrayType, withIssues = false): Sourcelike { + return ["Seq[", this.scalaType(arrayType.items, withIssues), "]"]; + } + + protected mapType(mapType: MapType, withIssues = false): Sourcelike { + return ["Map[String, ", this.scalaType(mapType.values, withIssues), "]"]; + } + + protected scalaType(t: Type, withIssues = false, noOptional = false): Sourcelike { + return matchType( + t, + _anyType => { + return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional)); + }, + _nullType => { + // return "None.type" + return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional)); + }, + _boolType => "Boolean", + _integerType => "Long", + _doubleType => "Double", + _stringType => "String", + arrayType => this.arrayType(arrayType, withIssues), + classType => this.nameForNamedType(classType), + mapType => this.mapType(mapType, withIssues), + enumType => this.nameForNamedType(enumType), + unionType => { + const nullable = nullableFromUnion(unionType); + if (nullable !== null) { + if (noOptional) { + return [this.scalaType(nullable, withIssues)]; + } else { + return ["Option[", this.scalaType(nullable, withIssues), "]"]; + } + } + + return this.nameForNamedType(unionType); + } + ); + } + + protected emitUsageHeader(): void { + // To be overridden + } + + protected emitHeader(): void { + if (this.leadingComments !== undefined) { + this.emitComments(this.leadingComments); + } else { + this.emitUsageHeader(); + } + + this.ensureBlankLine(); + this.emitLine("package ", this._scalaOptions.packageName); + this.ensureBlankLine(); + } + + protected emitTopLevelArray(t: ArrayType, name: Name): void { + const elementType = this.scalaType(t.items); + this.emitLine(["type ", name, " = List[", elementType, "]"]); + } + + protected emitTopLevelMap(t: MapType, name: Name): void { + const elementType = this.scalaType(t.values); + this.emitLine(["type ", name, " = Map[String, ", elementType, "]"]); + } + + protected emitEmptyClassDefinition(c: ClassType, className: Name): void { + this.emitDescription(this.descriptionForType(c)); + this.emitLine("case class ", className, "()"); + } + + protected emitClassDefinition(c: ClassType, className: Name): void { + if (c.getProperties().size === 0) { + this.emitEmptyClassDefinition(c, className); + return; + } + + const scalaType = (p: ClassProperty): Sourcelike => { + if (p.isOptional) { + return ["Option[", this.scalaType(p.type, true, true), "]"]; + } else { + return this.scalaType(p.type, true); + } + }; + + this.emitDescription(this.descriptionForType(c)); + this.emitLine("case class ", className, " ("); + this.indent(() => { + let count = c.getProperties().size; + let first = true; + this.forEachClassProperty(c, "none", (_, jsonName, p) => { + const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; + const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; + const last = --count === 0; + const meta: Array<() => void> = []; + + const description = this.descriptionForClassProperty(c, jsonName); + if (description !== undefined) { + meta.push(() => this.emitDescription(description)); + } + + if (meta.length > 0 && !first) { + this.ensureBlankLine(); + } + + for (const emit of meta) { + emit(); + } + + const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); + const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; + this.emitLine( + "val ", + nameWithBackticks, + " : ", + scalaType(p), + p.isOptional ? " = None" : nullableOrOptional ? " = None" : "", + last ? "" : "," + ); + + if (meta.length > 0 && !last) { + this.ensureBlankLine(); + } + + first = false; + }); + }); + + this.emitClassDefinitionMethods(); + } + + protected emitClassDefinitionMethods(): void { + this.emitLine(")"); + } + + protected emitEnumDefinition(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + + this.emitBlock( + ["enum ", enumName, " : "], + () => { + let count = e.cases.size; + if (count > 0) { + this.emitItem("\t case "); + } + + this.forEachEnumCase(e, "none", (name, jsonName) => { + if (!(jsonName == "")) { + const backticks = + shouldAddBacktick(jsonName) || + jsonName.includes(" ") || + !isNaN(parseInt(jsonName.charAt(0))); + if (backticks) { + this.emitItem("`"); + } + + this.emitItemOnce([name]); + if (backticks) { + this.emitItem("`"); + } + + if (--count > 0) this.emitItem([","]); + } else { + --count; + } + }); + }, + "none" + ); + } + + protected emitUnionDefinition(u: UnionType, unionName: Name): void { + function sortBy(t: Type): string { + const kind = t.kind; + if (kind === "class") return kind; + return "_" + kind; + } + + this.emitDescription(this.descriptionForType(u)); + + const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); + const theTypes: Sourcelike[] = []; + this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { + theTypes.push(this.scalaType(t)); + }); + if (maybeNull !== null) { + theTypes.push(this.nameForUnionMember(u, maybeNull)); + } + + this.emitItem(["type ", unionName, " = "]); + theTypes.forEach((t, i) => { + this.emitItem(i === 0 ? t : [" | ", t]); + }); + this.ensureBlankLine(); + } + + protected emitSourceStructure(): void { + this.emitHeader(); + + // Top-level arrays, maps + this.forEachTopLevel("leading", (t, name) => { + if (t instanceof ArrayType) { + this.emitTopLevelArray(t, name); + } else if (t instanceof MapType) { + this.emitTopLevelMap(t, name); + } + }); + + this.forEachNamedType( + "leading-and-interposing", + (c: ClassType, n: Name) => this.emitClassDefinition(c, n), + (e, n) => this.emitEnumDefinition(e, n), + (u, n) => this.emitUnionDefinition(u, n) + ); + } +} diff --git a/packages/quicktype-core/src/language/Scala3/UpickleRenderer.ts b/packages/quicktype-core/src/language/Scala3/UpickleRenderer.ts new file mode 100644 index 000000000..0eb5ce354 --- /dev/null +++ b/packages/quicktype-core/src/language/Scala3/UpickleRenderer.ts @@ -0,0 +1,14 @@ +import { Scala3Renderer } from "./Scala3Renderer"; + +export class UpickleRenderer extends Scala3Renderer { + protected emitClassDefinitionMethods(): void { + this.emitLine(") derives ReadWriter "); + } + + protected emitHeader(): void { + super.emitHeader(); + + this.emitLine("import upickle.default.*"); + this.ensureBlankLine(); + } +} diff --git a/packages/quicktype-core/src/language/Scala3/constants.ts b/packages/quicktype-core/src/language/Scala3/constants.ts new file mode 100644 index 000000000..b41844e78 --- /dev/null +++ b/packages/quicktype-core/src/language/Scala3/constants.ts @@ -0,0 +1,87 @@ +// Use backticks for param names with symbols +export const invalidSymbols = [ + ":", + "-", + "+", + "!", + "@", + "#", + "$", + "%", + "^", + "&", + "*", + "(", + ")", + ">", + "<", + "/", + ";", + "'", + '"', + "{", + "}", + ":", + "~", + "`", + "." +] as const; + +export const keywords = [ + "abstract", + "case", + "catch", + "class", + "def", + "do", + "else", + "enum", + "extends", + "export", + "false", + "final", + "finally", + "for", + "forSome", + "if", + "implicit", + "import", + "lazy", + "match", + "new", + "null", + "object", + "override", + "package", + "private", + "protected", + "return", + "sealed", + "super", + "this", + "then", + "throw", + "trait", + "try", + "true", + "type", + "val", + "var", + "while", + "with", + "yield", + "Any", + "Boolean", + "Double", + "Float", + "Long", + "Int", + "Short", + "System", + "Byte", + "String", + "Array", + "List", + "Map", + "Enum" +] as const; diff --git a/packages/quicktype-core/src/language/Scala3/index.ts b/packages/quicktype-core/src/language/Scala3/index.ts new file mode 100644 index 000000000..33c5960ae --- /dev/null +++ b/packages/quicktype-core/src/language/Scala3/index.ts @@ -0,0 +1,4 @@ +export { Scala3TargetLanguage, scala3Options } from "./language"; +export { Scala3Renderer } from "./Scala3Renderer"; +export { CirceRenderer } from "./CirceRenderer"; +export { UpickleRenderer } from "./UpickleRenderer"; diff --git a/packages/quicktype-core/src/language/Scala3/language.ts b/packages/quicktype-core/src/language/Scala3/language.ts new file mode 100644 index 000000000..3b00207d0 --- /dev/null +++ b/packages/quicktype-core/src/language/Scala3/language.ts @@ -0,0 +1,63 @@ +import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type RenderContext } from "../../Renderer"; +import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { assertNever } from "../../support/Support"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { CirceRenderer } from "./CirceRenderer"; +import { Scala3Renderer } from "./Scala3Renderer"; +import { UpickleRenderer } from "./UpickleRenderer"; + +export enum Framework { + None = "None", + Upickle = "Upickle", + Circe = "Circe" +} + +export const scala3Options = { + framework: new EnumOption( + "framework", + "Serialization framework", + [ + ["just-types", Framework.None], + ["circe", Framework.Circe], + ["upickle", Framework.Upickle] + ], + undefined + ), + packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") +}; + +export class Scala3TargetLanguage extends TargetLanguage { + public constructor() { + super("Scala3", ["scala3"], "scala"); + } + + protected getOptions(): Array> { + return [scala3Options.framework, scala3Options.packageName]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { + const options = getOptionValues(scala3Options, untypedOptionValues); + + switch (options.framework) { + case Framework.None: + return new Scala3Renderer(this, renderContext, options); + case Framework.Upickle: + return new UpickleRenderer(this, renderContext, options); + case Framework.Circe: + return new CirceRenderer(this, renderContext, options); + default: + return assertNever(options.framework); + } + } +} diff --git a/packages/quicktype-core/src/language/Scala3/utils.ts b/packages/quicktype-core/src/language/Scala3/utils.ts new file mode 100644 index 000000000..1de23bcb8 --- /dev/null +++ b/packages/quicktype-core/src/language/Scala3/utils.ts @@ -0,0 +1,73 @@ +import { funPrefixNamer } from "../../Naming"; +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + isDigit, + isLetterOrUnderscore, + isNumeric, + legalizeCharacters, + splitIntoWords +} from "../../support/Strings"; + +import { invalidSymbols, keywords } from "./constants"; + +/** + * Check if given parameter name should be wrapped in a backtick + * @param paramName + */ +export const shouldAddBacktick = (paramName: string): boolean => { + return ( + keywords.some(s => paramName === s) || + invalidSymbols.some(s => paramName.includes(s)) || + !isNaN(+parseFloat(paramName)) || + !isNaN(parseInt(paramName.charAt(0))) + ); +}; + +export const wrapOption = (s: string, optional: boolean): string => { + if (optional) { + return "Option[" + s + "]"; + } else { + return s; + } +}; + +function isPartCharacter(codePoint: number): boolean { + return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); +} + +function isStartCharacter(codePoint: number): boolean { + return isPartCharacter(codePoint) && !isDigit(codePoint); +} + +const legalizeName = legalizeCharacters(isPartCharacter); + +export function scalaNameStyle(isUpper: boolean, original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + isUpper ? firstUpperWordStyle : allLowerWordStyle, + firstUpperWordStyle, + isUpper ? allUpperWordStyle : allLowerWordStyle, + allUpperWordStyle, + "", + isStartCharacter + ); +} + +/* function unicodeEscape(codePoint: number): string { + return "\\u" + intToHex(codePoint, 4); +} */ + +// const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); + +/* function stringEscape(s: string): string { + // "$this" is a template string in Kotlin so we have to escape $ + return _stringEscape(s).replace(/\$/g, "\\$"); +} */ + +export const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s)); +export const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); diff --git a/packages/quicktype-core/src/language/Smithy4s.ts b/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts similarity index 73% rename from packages/quicktype-core/src/language/Smithy4s.ts rename to packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts index 163b33073..17fda57b2 100644 --- a/packages/quicktype-core/src/language/Smithy4s.ts +++ b/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts @@ -1,22 +1,10 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { EnumOption, type Option, type OptionValues, StringOption, getOptionValues } from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated } from "../Source"; -import { - allLowerWordStyle, - allUpperWordStyle, - combineWords, - firstUpperWordStyle, - isDigit, - isLetterOrUnderscore, - isNumeric, - legalizeCharacters, - splitIntoWords -} from "../support/Strings"; -import { assertNever } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated } from "../../Source"; +import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -26,147 +14,23 @@ import { type ObjectType, type Type, type UnionType -} from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export enum Framework { - None = "None" -} +} from "../../Type"; +import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; -export const SmithyOptions = { - framework: new EnumOption("framework", "Serialization framework", [["just-types", Framework.None]], undefined), - packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") -}; - -// Use backticks for param names with symbols -const invalidSymbols = [ - ":", - "-", - "+", - "!", - "@", - "#", - "%", - "^", - "&", - "*", - "(", - ")", - ">", - "<", - "/", - ";", - "'", - '"', - "{", - "}", - ":", - "~", - "`", - "." -]; - -const keywords = [ - "abstract", - "case", - "catch", - "do", - "else", - "export", - "false", - "final", - "finally", - "for", - "forSome", - "if", - "implicit", - "import", - "new", - "override", - "package", - "private", - "protected", - "return", - "sealed", - "super", - "this", - "then", - "throw", - "trait", - "try", - "true", - "val", - "var", - "while", - "with", - "yield", - "Any", - "Boolean", - "Double", - "Float", - "Long", - "Int", - "Short", - "System", - "Byte", - "String", - "Array", - "List", - "Map", - "Enum" -]; - -/** - * Check if given parameter name should be wrapped in a backtick - * @param paramName - */ -const shouldAddBacktick = (paramName: string): boolean => { - return ( - keywords.some(s => paramName === s) || - invalidSymbols.some(s => paramName.includes(s)) || - !isNaN(parseFloat(paramName)) || - !isNaN(parseInt(paramName.charAt(0))) - ); -}; - -function isPartCharacter(codePoint: number): boolean { - return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); -} - -function isStartCharacter(codePoint: number): boolean { - return isPartCharacter(codePoint) && !isDigit(codePoint); -} - -const legalizeName = legalizeCharacters(isPartCharacter); - -function scalaNameStyle(isUpper: boolean, original: string): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - isUpper ? firstUpperWordStyle : allLowerWordStyle, - firstUpperWordStyle, - isUpper ? allUpperWordStyle : allLowerWordStyle, - allUpperWordStyle, - "", - isStartCharacter - ); -} - -const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s)); -const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); +import { keywords } from "./constants"; +import { type smithyOptions } from "./language"; +import { lowerNamingFunction, scalaNameStyle, shouldAddBacktick, upperNamingFunction } from "./utils"; export class Smithy4sRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _scalaOptions: OptionValues + protected readonly _scalaOptions: OptionValues ) { super(targetLanguage, renderContext); } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } @@ -419,10 +283,10 @@ export class Smithy4sRenderer extends ConvenienceRenderer { this.forEachEnumCase(e, "none", (name, jsonName) => { // if (!(jsonName == "")) { /* const backticks = - shouldAddBacktick(jsonName) || - jsonName.includes(" ") || - !isNaN(parseInt(jsonName.charAt(0))) - if (backticks) {this.emitItem("`")} else */ + shouldAddBacktick(jsonName) || + jsonName.includes(" ") || + !isNaN(parseInt(jsonName.charAt(0))) + if (backticks) {this.emitItem("`")} else */ this.emitLine(); this.emitItem([name, ' = "', jsonName, '"']); @@ -524,32 +388,3 @@ export class Smithy4sRenderer extends ConvenienceRenderer { ); } } - -export class SmithyTargetLanguage extends TargetLanguage { - public constructor() { - super("Smithy", ["Smithy"], "smithy"); - } - - protected getOptions(): Array> { - return [SmithyOptions.framework, SmithyOptions.packageName]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { - const options = getOptionValues(SmithyOptions, untypedOptionValues); - - switch (options.framework) { - case Framework.None: - return new Smithy4sRenderer(this, renderContext, options); - default: - return assertNever(options.framework); - } - } -} diff --git a/packages/quicktype-core/src/language/Smithy4s/constants.ts b/packages/quicktype-core/src/language/Smithy4s/constants.ts new file mode 100644 index 000000000..e015b6ea8 --- /dev/null +++ b/packages/quicktype-core/src/language/Smithy4s/constants.ts @@ -0,0 +1,77 @@ +// Use backticks for param names with symbols +export const invalidSymbols = [ + ":", + "-", + "+", + "!", + "@", + "#", + "%", + "^", + "&", + "*", + "(", + ")", + ">", + "<", + "/", + ";", + "'", + '"', + "{", + "}", + ":", + "~", + "`", + "." +] as const; + +export const keywords = [ + "abstract", + "case", + "catch", + "do", + "else", + "export", + "false", + "final", + "finally", + "for", + "forSome", + "if", + "implicit", + "import", + "new", + "override", + "package", + "private", + "protected", + "return", + "sealed", + "super", + "this", + "then", + "throw", + "trait", + "try", + "true", + "val", + "var", + "while", + "with", + "yield", + "Any", + "Boolean", + "Double", + "Float", + "Long", + "Int", + "Short", + "System", + "Byte", + "String", + "Array", + "List", + "Map", + "Enum" +] as const; diff --git a/packages/quicktype-core/src/language/Smithy4s/index.ts b/packages/quicktype-core/src/language/Smithy4s/index.ts new file mode 100644 index 000000000..1dea97f90 --- /dev/null +++ b/packages/quicktype-core/src/language/Smithy4s/index.ts @@ -0,0 +1,2 @@ +export { SmithyTargetLanguage, smithyOptions } from "./language"; +export { Smithy4sRenderer } from "./Smithy4sRenderer"; diff --git a/packages/quicktype-core/src/language/Smithy4s/language.ts b/packages/quicktype-core/src/language/Smithy4s/language.ts new file mode 100644 index 000000000..2726d0ff5 --- /dev/null +++ b/packages/quicktype-core/src/language/Smithy4s/language.ts @@ -0,0 +1,46 @@ +import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type RenderContext } from "../../Renderer"; +import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { assertNever } from "../../support/Support"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { Smithy4sRenderer } from "./Smithy4sRenderer"; + +export enum Framework { + None = "None" +} + +export const smithyOptions = { + framework: new EnumOption("framework", "Serialization framework", [["just-types", Framework.None]], undefined), + packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") +}; + +export class SmithyTargetLanguage extends TargetLanguage { + public constructor() { + super("Smithy", ["Smithy"], "smithy"); + } + + protected getOptions(): Array> { + return [smithyOptions.framework, smithyOptions.packageName]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ConvenienceRenderer { + const options = getOptionValues(smithyOptions, untypedOptionValues); + + switch (options.framework) { + case Framework.None: + return new Smithy4sRenderer(this, renderContext, options); + default: + return assertNever(options.framework); + } + } +} diff --git a/packages/quicktype-core/src/language/Smithy4s/utils.ts b/packages/quicktype-core/src/language/Smithy4s/utils.ts new file mode 100644 index 000000000..7075f6627 --- /dev/null +++ b/packages/quicktype-core/src/language/Smithy4s/utils.ts @@ -0,0 +1,55 @@ +import { isDigit } from "unicode-properties"; + +import { funPrefixNamer } from "../../Naming"; +import { + allLowerWordStyle, + allUpperWordStyle, + combineWords, + firstUpperWordStyle, + isLetterOrUnderscore, + isNumeric, + legalizeCharacters, + splitIntoWords +} from "../../support/Strings"; + +import { invalidSymbols, keywords } from "./constants"; + +/** + * Check if given parameter name should be wrapped in a backtick + * @param paramName + */ +export const shouldAddBacktick = (paramName: string): boolean => { + return ( + keywords.some(s => paramName === s) || + invalidSymbols.some(s => paramName.includes(s)) || + !isNaN(parseFloat(paramName)) || + !isNaN(parseInt(paramName.charAt(0))) + ); +}; + +function isPartCharacter(codePoint: number): boolean { + return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); +} + +function isStartCharacter(codePoint: number): boolean { + return isPartCharacter(codePoint) && !isDigit(codePoint); +} + +const legalizeName = legalizeCharacters(isPartCharacter); + +export function scalaNameStyle(isUpper: boolean, original: string): string { + const words = splitIntoWords(original); + return combineWords( + words, + legalizeName, + isUpper ? firstUpperWordStyle : allLowerWordStyle, + firstUpperWordStyle, + isUpper ? allUpperWordStyle : allLowerWordStyle, + allUpperWordStyle, + "", + isStartCharacter + ); +} + +export const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s)); +export const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); diff --git a/packages/quicktype-core/src/language/Swift.ts b/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts similarity index 66% rename from packages/quicktype-core/src/language/Swift.ts rename to packages/quicktype-core/src/language/Swift/SwiftRenderer.ts index cb801de2b..18cc7f281 100644 --- a/packages/quicktype-core/src/language/Swift.ts +++ b/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts @@ -1,337 +1,30 @@ import { arrayIntercalate } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { type DateTimeRecognizer, DefaultDateTimeRecognizer } from "../DateTime"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type ForEachPosition, type RenderContext } from "../Renderer"; -import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated, modifySource } from "../Source"; -import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; -import { - addPrefixIfNecessary, - allLowerWordStyle, - allUpperWordStyle, - camelCase, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - intToHex, - isDigit, - isLetterOrUnderscore, - isNumeric, - isPrintable, - legalizeCharacters, - splitIntoWords, - utf32ConcatMap -} from "../support/Strings"; -import { assert, defined, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; +import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; +import { acronymStyle } from "../../support/Acronyms"; +import { camelCase } from "../../support/Strings"; +import { assert, defined, panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, type ClassType, EnumType, MapType, - type PrimitiveStringTypeKind, - type TransformedStringTypeKind, type Type, type TypeKind, type UnionType -} from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -const MAX_SAMELINE_PROPERTIES = 4; - -export const swiftOptions = { - justTypes: new BooleanOption("just-types", "Plain types only", false), - convenienceInitializers: new BooleanOption("initializers", "Generate initializers and mutators", true), - explicitCodingKeys: new BooleanOption("coding-keys", "Explicit CodingKey values in Codable types", true), - codingKeysProtocol: new StringOption( - "coding-keys-protocol", - "CodingKeys implements protocols", - "protocol1, protocol2...", - "", - "secondary" - ), - alamofire: new BooleanOption("alamofire", "Alamofire extensions", false), - namedTypePrefix: new StringOption("type-prefix", "Prefix for type names", "PREFIX", "", "secondary"), - useClasses: new EnumOption("struct-or-class", "Structs or classes", [ - ["struct", false], - ["class", true] - ]), - mutableProperties: new BooleanOption("mutable-properties", "Use var instead of let for object properties", false), - acronymStyle: acronymOption(AcronymStyleOptions.Pascal), - dense: new EnumOption( - "density", - "Code density", - [ - ["dense", true], - ["normal", false] - ], - "dense", - "secondary" - ), - linux: new BooleanOption("support-linux", "Support Linux", false, "secondary"), - objcSupport: new BooleanOption( - "objective-c-support", - "Objects inherit from NSObject and @objcMembers is added to classes", - false - ), - optionalEnums: new BooleanOption("optional-enums", "If no matching case is found enum value is set to null", false), - swift5Support: new BooleanOption("swift-5-support", "Renders output in a Swift 5 compatible mode", false), - sendable: new BooleanOption("sendable", "Mark generated models as Sendable", false), - multiFileOutput: new BooleanOption( - "multi-file-output", - "Renders each top-level object in its own Swift file", - false - ), - accessLevel: new EnumOption( - "access-level", - "Access level", - [ - ["internal", "internal"], - ["public", "public"] - ], - "internal", - "secondary" - ), - protocol: new EnumOption( - "protocol", - "Make types implement protocol", - [ - ["none", { equatable: false, hashable: false }], - ["equatable", { equatable: true, hashable: false }], - ["hashable", { equatable: false, hashable: true }] - ], - "none", - "secondary" - ) -}; - -// These are all recognized by Swift as ISO8601 date-times: -// -// 2018-08-14T02:45:50+00:00 -// 2018-08-14T02:45:50+00 -// 2018-08-14T02:45:50+1 -// 2018-08-14T02:45:50+1111 -// 2018-08-14T02:45:50+1111:1:33 -// 2018-08-14T02:45:50-00 -// 2018-08-14T02:45:50z -// 2018-00008-1T002:45:3Z - -const swiftDateTimeRegex = /^\d+-\d+-\d+T\d+:\d+:\d+([zZ]|[+-]\d+(:\d+)?)$/; - -class SwiftDateTimeRecognizer extends DefaultDateTimeRecognizer { - public isDateTime(str: string): boolean { - return swiftDateTimeRegex.exec(str) !== null; - } -} - -export interface SwiftProperty { - jsonName: string; - name: Name; - parameter: ClassProperty; - position: ForEachPosition; -} - -export class SwiftTargetLanguage extends TargetLanguage { - public constructor() { - super("Swift", ["swift", "swift4"], "swift"); - } - - protected getOptions(): Array> { - return [ - swiftOptions.justTypes, - swiftOptions.useClasses, - swiftOptions.dense, - swiftOptions.convenienceInitializers, - swiftOptions.explicitCodingKeys, - swiftOptions.codingKeysProtocol, - swiftOptions.accessLevel, - swiftOptions.alamofire, - swiftOptions.linux, - swiftOptions.namedTypePrefix, - swiftOptions.protocol, - swiftOptions.acronymStyle, - swiftOptions.objcSupport, - swiftOptions.optionalEnums, - swiftOptions.sendable, - swiftOptions.swift5Support, - swiftOptions.multiFileOutput, - swiftOptions.mutableProperties - ]; - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - mapping.set("date-time", "date-time"); - return mapping; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): SwiftRenderer { - return new SwiftRenderer(this, renderContext, getOptionValues(swiftOptions, untypedOptionValues)); - } - - public get dateTimeRecognizer(): DateTimeRecognizer { - return new SwiftDateTimeRecognizer(); - } -} +} from "../../Type"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; -const keywords = [ - "await", - "associatedtype", - "class", - "deinit", - "enum", - "extension", - "fileprivate", - "func", - "import", - "init", - "inout", - "internal", - "let", - "open", - "operator", - "private", - "protocol", - "public", - "static", - "struct", - "subscript", - "typealias", - "var", - "break", - "case", - "continue", - "default", - "defer", - "do", - "else", - "fallthrough", - "for", - "guard", - "if", - "in", - "repeat", - "return", - "switch", - "where", - "while", - "as", - "Any", - "catch", - "false", - "is", - "nil", - "rethrows", - "super", - "self", - "Self", - "throw", - "throws", - "true", - "try", - "_", - "associativity", - "convenience", - "dynamic", - "didSet", - "final", - "get", - "infix", - "indirect", - "lazy", - "left", - "mutating", - "nonmutating", - "optional", - "override", - "postfix", - "precedence", - "prefix", - "Protocol", - "required", - "right", - "set", - "Type", - "unowned", - "weak", - "willSet", - "String", - "Int", - "Double", - "Bool", - "Data", - "Date", - "URL", - "CommandLine", - "FileHandle", - "JSONSerialization", - "checkNull", - "removeNSNull", - "nilToNSNull", - "convertArray", - "convertOptional", - "convertDict", - "convertDouble", - "jsonString", - "jsonData" -]; - -function isPartCharacter(codePoint: number): boolean { - return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); -} - -function isStartCharacter(codePoint: number): boolean { - return isPartCharacter(codePoint) && !isDigit(codePoint); -} - -const legalizeName = legalizeCharacters(isPartCharacter); - -function swiftNameStyle( - prefix: string, - isUpper: boolean, - original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle -): string { - const words = splitIntoWords(original); - const combined = combineWords( - words, - legalizeName, - isUpper ? firstUpperWordStyle : allLowerWordStyle, - firstUpperWordStyle, - isUpper ? allUpperWordStyle : allLowerWordStyle, - acronymsStyle, - "", - isStartCharacter - ); - return addPrefixIfNecessary(prefix, combined); -} - -function unicodeEscape(codePoint: number): string { - return "\\u{" + intToHex(codePoint, 0) + "}"; -} - -const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); +import { keywords } from "./constants"; +import { type swiftOptions } from "./language"; +import { MAX_SAMELINE_PROPERTIES, type SwiftProperty, stringEscape, swiftNameStyle } from "./utils"; export class SwiftRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; @@ -348,9 +41,9 @@ export class SwiftRenderer extends ConvenienceRenderer { super(targetLanguage, renderContext); } - protected forbiddenNamesForGlobalNamespace(): string[] { + protected forbiddenNamesForGlobalNamespace(): readonly string[] { if (this._options.alamofire) { - return ["DataRequest", ...keywords]; + return ["DataRequest", ...keywords] as const; } return keywords; @@ -859,22 +552,22 @@ export class SwiftRenderer extends ConvenienceRenderer { }); } else { this.emitMultiline(`decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in - let container = try decoder.singleValueContainer() - let dateStr = try container.decode(String.self) - - let formatter = DateFormatter() - formatter.calendar = Calendar(identifier: .iso8601) - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.timeZone = TimeZone(secondsFromGMT: 0) - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" - if let date = formatter.date(from: dateStr) { - return date - } - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX" - if let date = formatter.date(from: dateStr) { - return date - } - throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date")) + let container = try decoder.singleValueContainer() + let dateStr = try container.decode(String.self) + + let formatter = DateFormatter() + formatter.calendar = Calendar(identifier: .iso8601) + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(secondsFromGMT: 0) + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" + if let date = formatter.date(from: dateStr) { + return date + } + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX" + if let date = formatter.date(from: dateStr) { + return date + } + throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date")) })`); } @@ -1148,20 +841,20 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.ensureBlankLine(); this.emitMultiline(` public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool { - return true - }`); + return true + }`); if (this._options.objcSupport === false) { this.ensureBlankLine(); this.emitMultiline(` public var hashValue: Int { - return 0 - }`); + return 0 + }`); if (this._options.swift5Support) { this.ensureBlankLine(); this.emitMultiline(` public func hash(into hasher: inout Hasher) { - // No-op - }`); + // No-op + }`); } } @@ -1173,41 +866,41 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); } this.emitMultiline(`public init() {} - - public required init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - if !container.decodeNil() { - throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull")) - } - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encodeNil() - } + + public required init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + if !container.decodeNil() { + throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull")) + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encodeNil() + } }`); } if (this._needAny) { this.ensureBlankLine(); this.emitMultiline(`class JSONCodingKey: CodingKey { - let key: String - - required init?(intValue: Int) { - return nil - } - - required init?(stringValue: String) { - key = stringValue - } - - var intValue: Int? { - return nil - } - - var stringValue: String { - return key - } + let key: String + + required init?(intValue: Int) { + return nil + } + + required init?(stringValue: String) { + key = stringValue + } + + var intValue: Int? { + return nil + } + + var stringValue: String { + return key + } }`); this.ensureBlankLine(); @@ -1219,196 +912,196 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.ensureBlankLine(); this.emitMultiline(` ${this.accessLevel}let value: Any - - static func decodingError(forCodingPath codingPath: [CodingKey]) -> DecodingError { - let context = DecodingError.Context(codingPath: codingPath, debugDescription: "Cannot decode JSONAny") - return DecodingError.typeMismatch(JSONAny.self, context) - } - - static func encodingError(forValue value: Any, codingPath: [CodingKey]) -> EncodingError { - let context = EncodingError.Context(codingPath: codingPath, debugDescription: "Cannot encode JSONAny") - return EncodingError.invalidValue(value, context) - } - - static func decode(from container: SingleValueDecodingContainer) throws -> Any { - if let value = try? container.decode(Bool.self) { - return value - } - if let value = try? container.decode(Int64.self) { - return value - } - if let value = try? container.decode(Double.self) { - return value - } - if let value = try? container.decode(String.self) { - return value - } - if container.decodeNil() { - return JSONNull() - } - throw decodingError(forCodingPath: container.codingPath) - } - - static func decode(from container: inout UnkeyedDecodingContainer) throws -> Any { - if let value = try? container.decode(Bool.self) { - return value - } - if let value = try? container.decode(Int64.self) { - return value - } - if let value = try? container.decode(Double.self) { - return value - } - if let value = try? container.decode(String.self) { - return value - } - if let value = try? container.decodeNil() { - if value { - return JSONNull() - } - } - if var container = try? container.nestedUnkeyedContainer() { - return try decodeArray(from: &container) - } - if var container = try? container.nestedContainer(keyedBy: JSONCodingKey.self) { - return try decodeDictionary(from: &container) - } - throw decodingError(forCodingPath: container.codingPath) - } - - static func decode(from container: inout KeyedDecodingContainer, forKey key: JSONCodingKey) throws -> Any { - if let value = try? container.decode(Bool.self, forKey: key) { - return value - } - if let value = try? container.decode(Int64.self, forKey: key) { - return value - } - if let value = try? container.decode(Double.self, forKey: key) { - return value - } - if let value = try? container.decode(String.self, forKey: key) { - return value - } - if let value = try? container.decodeNil(forKey: key) { - if value { - return JSONNull() - } - } - if var container = try? container.nestedUnkeyedContainer(forKey: key) { - return try decodeArray(from: &container) - } - if var container = try? container.nestedContainer(keyedBy: JSONCodingKey.self, forKey: key) { - return try decodeDictionary(from: &container) - } - throw decodingError(forCodingPath: container.codingPath) - } - - static func decodeArray(from container: inout UnkeyedDecodingContainer) throws -> [Any] { - var arr: [Any] = [] - while !container.isAtEnd { - let value = try decode(from: &container) - arr.append(value) - } - return arr - } - - static func decodeDictionary(from container: inout KeyedDecodingContainer) throws -> [String: Any] { - var dict = [String: Any]() - for key in container.allKeys { - let value = try decode(from: &container, forKey: key) - dict[key.stringValue] = value - } - return dict - } - - static func encode(to container: inout UnkeyedEncodingContainer, array: [Any]) throws { - for value in array { - if let value = value as? Bool { - try container.encode(value) - } else if let value = value as? Int64 { - try container.encode(value) - } else if let value = value as? Double { - try container.encode(value) - } else if let value = value as? String { - try container.encode(value) - } else if value is JSONNull { - try container.encodeNil() - } else if let value = value as? [Any] { - var container = container.nestedUnkeyedContainer() - try encode(to: &container, array: value) - } else if let value = value as? [String: Any] { - var container = container.nestedContainer(keyedBy: JSONCodingKey.self) - try encode(to: &container, dictionary: value) - } else { - throw encodingError(forValue: value, codingPath: container.codingPath) - } - } - } - - static func encode(to container: inout KeyedEncodingContainer, dictionary: [String: Any]) throws { - for (key, value) in dictionary { - let key = JSONCodingKey(stringValue: key)! - if let value = value as? Bool { - try container.encode(value, forKey: key) - } else if let value = value as? Int64 { - try container.encode(value, forKey: key) - } else if let value = value as? Double { - try container.encode(value, forKey: key) - } else if let value = value as? String { - try container.encode(value, forKey: key) - } else if value is JSONNull { - try container.encodeNil(forKey: key) - } else if let value = value as? [Any] { - var container = container.nestedUnkeyedContainer(forKey: key) - try encode(to: &container, array: value) - } else if let value = value as? [String: Any] { - var container = container.nestedContainer(keyedBy: JSONCodingKey.self, forKey: key) - try encode(to: &container, dictionary: value) - } else { - throw encodingError(forValue: value, codingPath: container.codingPath) - } - } - } - - static func encode(to container: inout SingleValueEncodingContainer, value: Any) throws { - if let value = value as? Bool { - try container.encode(value) - } else if let value = value as? Int64 { - try container.encode(value) - } else if let value = value as? Double { - try container.encode(value) - } else if let value = value as? String { - try container.encode(value) - } else if value is JSONNull { - try container.encodeNil() - } else { - throw encodingError(forValue: value, codingPath: container.codingPath) - } - } - - public required init(from decoder: Decoder) throws { - if var arrayContainer = try? decoder.unkeyedContainer() { - self.value = try JSONAny.decodeArray(from: &arrayContainer) - } else if var container = try? decoder.container(keyedBy: JSONCodingKey.self) { - self.value = try JSONAny.decodeDictionary(from: &container) - } else { - let container = try decoder.singleValueContainer() - self.value = try JSONAny.decode(from: container) - } - } - - public func encode(to encoder: Encoder) throws { - if let arr = self.value as? [Any] { - var container = encoder.unkeyedContainer() - try JSONAny.encode(to: &container, array: arr) - } else if let dict = self.value as? [String: Any] { - var container = encoder.container(keyedBy: JSONCodingKey.self) - try JSONAny.encode(to: &container, dictionary: dict) - } else { - var container = encoder.singleValueContainer() - try JSONAny.encode(to: &container, value: self.value) - } - } + + static func decodingError(forCodingPath codingPath: [CodingKey]) -> DecodingError { + let context = DecodingError.Context(codingPath: codingPath, debugDescription: "Cannot decode JSONAny") + return DecodingError.typeMismatch(JSONAny.self, context) + } + + static func encodingError(forValue value: Any, codingPath: [CodingKey]) -> EncodingError { + let context = EncodingError.Context(codingPath: codingPath, debugDescription: "Cannot encode JSONAny") + return EncodingError.invalidValue(value, context) + } + + static func decode(from container: SingleValueDecodingContainer) throws -> Any { + if let value = try? container.decode(Bool.self) { + return value + } + if let value = try? container.decode(Int64.self) { + return value + } + if let value = try? container.decode(Double.self) { + return value + } + if let value = try? container.decode(String.self) { + return value + } + if container.decodeNil() { + return JSONNull() + } + throw decodingError(forCodingPath: container.codingPath) + } + + static func decode(from container: inout UnkeyedDecodingContainer) throws -> Any { + if let value = try? container.decode(Bool.self) { + return value + } + if let value = try? container.decode(Int64.self) { + return value + } + if let value = try? container.decode(Double.self) { + return value + } + if let value = try? container.decode(String.self) { + return value + } + if let value = try? container.decodeNil() { + if value { + return JSONNull() + } + } + if var container = try? container.nestedUnkeyedContainer() { + return try decodeArray(from: &container) + } + if var container = try? container.nestedContainer(keyedBy: JSONCodingKey.self) { + return try decodeDictionary(from: &container) + } + throw decodingError(forCodingPath: container.codingPath) + } + + static func decode(from container: inout KeyedDecodingContainer, forKey key: JSONCodingKey) throws -> Any { + if let value = try? container.decode(Bool.self, forKey: key) { + return value + } + if let value = try? container.decode(Int64.self, forKey: key) { + return value + } + if let value = try? container.decode(Double.self, forKey: key) { + return value + } + if let value = try? container.decode(String.self, forKey: key) { + return value + } + if let value = try? container.decodeNil(forKey: key) { + if value { + return JSONNull() + } + } + if var container = try? container.nestedUnkeyedContainer(forKey: key) { + return try decodeArray(from: &container) + } + if var container = try? container.nestedContainer(keyedBy: JSONCodingKey.self, forKey: key) { + return try decodeDictionary(from: &container) + } + throw decodingError(forCodingPath: container.codingPath) + } + + static func decodeArray(from container: inout UnkeyedDecodingContainer) throws -> [Any] { + var arr: [Any] = [] + while !container.isAtEnd { + let value = try decode(from: &container) + arr.append(value) + } + return arr + } + + static func decodeDictionary(from container: inout KeyedDecodingContainer) throws -> [String: Any] { + var dict = [String: Any]() + for key in container.allKeys { + let value = try decode(from: &container, forKey: key) + dict[key.stringValue] = value + } + return dict + } + + static func encode(to container: inout UnkeyedEncodingContainer, array: [Any]) throws { + for value in array { + if let value = value as? Bool { + try container.encode(value) + } else if let value = value as? Int64 { + try container.encode(value) + } else if let value = value as? Double { + try container.encode(value) + } else if let value = value as? String { + try container.encode(value) + } else if value is JSONNull { + try container.encodeNil() + } else if let value = value as? [Any] { + var container = container.nestedUnkeyedContainer() + try encode(to: &container, array: value) + } else if let value = value as? [String: Any] { + var container = container.nestedContainer(keyedBy: JSONCodingKey.self) + try encode(to: &container, dictionary: value) + } else { + throw encodingError(forValue: value, codingPath: container.codingPath) + } + } + } + + static func encode(to container: inout KeyedEncodingContainer, dictionary: [String: Any]) throws { + for (key, value) in dictionary { + let key = JSONCodingKey(stringValue: key)! + if let value = value as? Bool { + try container.encode(value, forKey: key) + } else if let value = value as? Int64 { + try container.encode(value, forKey: key) + } else if let value = value as? Double { + try container.encode(value, forKey: key) + } else if let value = value as? String { + try container.encode(value, forKey: key) + } else if value is JSONNull { + try container.encodeNil(forKey: key) + } else if let value = value as? [Any] { + var container = container.nestedUnkeyedContainer(forKey: key) + try encode(to: &container, array: value) + } else if let value = value as? [String: Any] { + var container = container.nestedContainer(keyedBy: JSONCodingKey.self, forKey: key) + try encode(to: &container, dictionary: value) + } else { + throw encodingError(forValue: value, codingPath: container.codingPath) + } + } + } + + static func encode(to container: inout SingleValueEncodingContainer, value: Any) throws { + if let value = value as? Bool { + try container.encode(value) + } else if let value = value as? Int64 { + try container.encode(value) + } else if let value = value as? Double { + try container.encode(value) + } else if let value = value as? String { + try container.encode(value) + } else if value is JSONNull { + try container.encodeNil() + } else { + throw encodingError(forValue: value, codingPath: container.codingPath) + } + } + + public required init(from decoder: Decoder) throws { + if var arrayContainer = try? decoder.unkeyedContainer() { + self.value = try JSONAny.decodeArray(from: &arrayContainer) + } else if var container = try? decoder.container(keyedBy: JSONCodingKey.self) { + self.value = try JSONAny.decodeDictionary(from: &container) + } else { + let container = try decoder.singleValueContainer() + self.value = try JSONAny.decode(from: container) + } + } + + public func encode(to encoder: Encoder) throws { + if let arr = self.value as? [Any] { + var container = encoder.unkeyedContainer() + try JSONAny.encode(to: &container, array: arr) + } else if let dict = self.value as? [String: Any] { + var container = encoder.container(keyedBy: JSONCodingKey.self) + try JSONAny.encode(to: &container, dictionary: dict) + } else { + var container = encoder.singleValueContainer() + try JSONAny.encode(to: &container, value: self.value) + } + } }`); } @@ -1472,20 +1165,20 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.emitBlockWithAccess("extension DataRequest", () => { this .emitMultiline(`fileprivate func decodableResponseSerializer() -> DataResponseSerializer { - return DataResponseSerializer { _, response, data, error in - guard error == nil else { return .failure(error!) } - - guard let data = data else { - return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) - } - - return Result { try newJSONDecoder().decode(T.self, from: data) } - } + return DataResponseSerializer { _, response, data, error in + guard error == nil else { return .failure(error!) } + + guard let data = data else { + return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) + } + + return Result { try newJSONDecoder().decode(T.self, from: data) } + } } @discardableResult fileprivate func responseDecodable(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse) -> Void) -> Self { - return response(queue: queue, responseSerializer: decodableResponseSerializer(), completionHandler: completionHandler) + return response(queue: queue, responseSerializer: decodableResponseSerializer(), completionHandler: completionHandler) }`); this.ensureBlankLine(); this.forEachTopLevel("leading-and-interposing", (_, name) => { diff --git a/packages/quicktype-core/src/language/Swift/constants.ts b/packages/quicktype-core/src/language/Swift/constants.ts new file mode 100644 index 000000000..4a8c4ee2f --- /dev/null +++ b/packages/quicktype-core/src/language/Swift/constants.ts @@ -0,0 +1,101 @@ +export const keywords = [ + "await", + "associatedtype", + "class", + "deinit", + "enum", + "extension", + "fileprivate", + "func", + "import", + "init", + "inout", + "internal", + "let", + "open", + "operator", + "private", + "protocol", + "public", + "static", + "struct", + "subscript", + "typealias", + "var", + "break", + "case", + "continue", + "default", + "defer", + "do", + "else", + "fallthrough", + "for", + "guard", + "if", + "in", + "repeat", + "return", + "switch", + "where", + "while", + "as", + "Any", + "catch", + "false", + "is", + "nil", + "rethrows", + "super", + "self", + "Self", + "throw", + "throws", + "true", + "try", + "_", + "associativity", + "convenience", + "dynamic", + "didSet", + "final", + "get", + "infix", + "indirect", + "lazy", + "left", + "mutating", + "nonmutating", + "optional", + "override", + "postfix", + "precedence", + "prefix", + "Protocol", + "required", + "right", + "set", + "Type", + "unowned", + "weak", + "willSet", + "String", + "Int", + "Double", + "Bool", + "Data", + "Date", + "URL", + "CommandLine", + "FileHandle", + "JSONSerialization", + "checkNull", + "removeNSNull", + "nilToNSNull", + "convertArray", + "convertOptional", + "convertDict", + "convertDouble", + "jsonString", + "jsonData" +] as const; diff --git a/packages/quicktype-core/src/language/Swift/index.ts b/packages/quicktype-core/src/language/Swift/index.ts new file mode 100644 index 000000000..902d4fff7 --- /dev/null +++ b/packages/quicktype-core/src/language/Swift/index.ts @@ -0,0 +1,2 @@ +export { SwiftTargetLanguage, swiftOptions } from "./language"; +export { SwiftRenderer } from "./SwiftRenderer"; diff --git a/packages/quicktype-core/src/language/Swift/language.ts b/packages/quicktype-core/src/language/Swift/language.ts new file mode 100644 index 000000000..152e932af --- /dev/null +++ b/packages/quicktype-core/src/language/Swift/language.ts @@ -0,0 +1,128 @@ +import { type DateTimeRecognizer } from "../../DateTime"; +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { SwiftRenderer } from "./SwiftRenderer"; +import { SwiftDateTimeRecognizer } from "./utils"; + +export const swiftOptions = { + justTypes: new BooleanOption("just-types", "Plain types only", false), + convenienceInitializers: new BooleanOption("initializers", "Generate initializers and mutators", true), + explicitCodingKeys: new BooleanOption("coding-keys", "Explicit CodingKey values in Codable types", true), + codingKeysProtocol: new StringOption( + "coding-keys-protocol", + "CodingKeys implements protocols", + "protocol1, protocol2...", + "", + "secondary" + ), + alamofire: new BooleanOption("alamofire", "Alamofire extensions", false), + namedTypePrefix: new StringOption("type-prefix", "Prefix for type names", "PREFIX", "", "secondary"), + useClasses: new EnumOption("struct-or-class", "Structs or classes", [ + ["struct", false], + ["class", true] + ]), + mutableProperties: new BooleanOption("mutable-properties", "Use var instead of let for object properties", false), + acronymStyle: acronymOption(AcronymStyleOptions.Pascal), + dense: new EnumOption( + "density", + "Code density", + [ + ["dense", true], + ["normal", false] + ], + "dense", + "secondary" + ), + linux: new BooleanOption("support-linux", "Support Linux", false, "secondary"), + objcSupport: new BooleanOption( + "objective-c-support", + "Objects inherit from NSObject and @objcMembers is added to classes", + false + ), + optionalEnums: new BooleanOption("optional-enums", "If no matching case is found enum value is set to null", false), + swift5Support: new BooleanOption("swift-5-support", "Renders output in a Swift 5 compatible mode", false), + sendable: new BooleanOption("sendable", "Mark generated models as Sendable", false), + multiFileOutput: new BooleanOption( + "multi-file-output", + "Renders each top-level object in its own Swift file", + false + ), + accessLevel: new EnumOption( + "access-level", + "Access level", + [ + ["internal", "internal"], + ["public", "public"] + ], + "internal", + "secondary" + ), + protocol: new EnumOption( + "protocol", + "Make types implement protocol", + [ + ["none", { equatable: false, hashable: false }], + ["equatable", { equatable: true, hashable: false }], + ["hashable", { equatable: false, hashable: true }] + ], + "none", + "secondary" + ) +}; + +export class SwiftTargetLanguage extends TargetLanguage { + public constructor() { + super("Swift", ["swift", "swift4"], "swift"); + } + + protected getOptions(): Array> { + return [ + swiftOptions.justTypes, + swiftOptions.useClasses, + swiftOptions.dense, + swiftOptions.convenienceInitializers, + swiftOptions.explicitCodingKeys, + swiftOptions.codingKeysProtocol, + swiftOptions.accessLevel, + swiftOptions.alamofire, + swiftOptions.linux, + swiftOptions.namedTypePrefix, + swiftOptions.protocol, + swiftOptions.acronymStyle, + swiftOptions.objcSupport, + swiftOptions.optionalEnums, + swiftOptions.sendable, + swiftOptions.swift5Support, + swiftOptions.multiFileOutput, + swiftOptions.mutableProperties + ]; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + mapping.set("date-time", "date-time"); + return mapping; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsUnionsWithBothNumberTypes(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): SwiftRenderer { + return new SwiftRenderer(this, renderContext, getOptionValues(swiftOptions, untypedOptionValues)); + } + + public get dateTimeRecognizer(): DateTimeRecognizer { + return new SwiftDateTimeRecognizer(); + } +} diff --git a/packages/quicktype-core/src/language/Swift/utils.ts b/packages/quicktype-core/src/language/Swift/utils.ts new file mode 100644 index 000000000..ce4e2fa8b --- /dev/null +++ b/packages/quicktype-core/src/language/Swift/utils.ts @@ -0,0 +1,84 @@ +import { DefaultDateTimeRecognizer } from "../../DateTime"; +import { type Name } from "../../Naming"; +import { type ForEachPosition } from "../../Renderer"; +import { + addPrefixIfNecessary, + allLowerWordStyle, + allUpperWordStyle, + combineWords, + escapeNonPrintableMapper, + firstUpperWordStyle, + intToHex, + isDigit, + isLetterOrUnderscore, + isNumeric, + isPrintable, + legalizeCharacters, + splitIntoWords, + utf32ConcatMap +} from "../../support/Strings"; +import { type ClassProperty } from "../../Type"; + +export const MAX_SAMELINE_PROPERTIES = 4; + +// These are all recognized by Swift as ISO8601 date-times: +// +// 2018-08-14T02:45:50+00:00 +// 2018-08-14T02:45:50+00 +// 2018-08-14T02:45:50+1 +// 2018-08-14T02:45:50+1111 +// 2018-08-14T02:45:50+1111:1:33 +// 2018-08-14T02:45:50-00 +// 2018-08-14T02:45:50z +// 2018-00008-1T002:45:3Z + +const swiftDateTimeRegex = /^\d+-\d+-\d+T\d+:\d+:\d+([zZ]|[+-]\d+(:\d+)?)$/; + +export class SwiftDateTimeRecognizer extends DefaultDateTimeRecognizer { + public isDateTime(str: string): boolean { + return swiftDateTimeRegex.exec(str) !== null; + } +} + +export interface SwiftProperty { + jsonName: string; + name: Name; + parameter: ClassProperty; + position: ForEachPosition; +} + +function isPartCharacter(codePoint: number): boolean { + return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); +} + +function isStartCharacter(codePoint: number): boolean { + return isPartCharacter(codePoint) && !isDigit(codePoint); +} + +const legalizeName = legalizeCharacters(isPartCharacter); + +export function swiftNameStyle( + prefix: string, + isUpper: boolean, + original: string, + acronymsStyle: (s: string) => string = allUpperWordStyle +): string { + const words = splitIntoWords(original); + const combined = combineWords( + words, + legalizeName, + isUpper ? firstUpperWordStyle : allLowerWordStyle, + firstUpperWordStyle, + isUpper ? allUpperWordStyle : allLowerWordStyle, + acronymsStyle, + "", + isStartCharacter + ); + return addPrefixIfNecessary(prefix, combined); +} + +function unicodeEscape(codePoint: number): string { + return "\\u{" + intToHex(codePoint, 0) + "}"; +} + +export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts similarity index 82% rename from packages/quicktype-core/src/language/TypeScriptEffectSchema.ts rename to packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts index c3844d847..f06807a39 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts @@ -1,11 +1,11 @@ import { arrayIntercalate } from "collection-utils"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type Sourcelike } from "../Source"; -import { AcronymStyleOptions, acronymStyle } from "../support/Acronyms"; +import { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike } from "../../Source"; +import { AcronymStyleOptions, acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, capitalize, @@ -15,43 +15,14 @@ import { splitIntoWords, stringEscape, utf16StringEscape -} from "../support/Strings"; -import { panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { ArrayType, type ClassProperty, EnumType, MapType, type ObjectType, type Type } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType } from "../TypeUtils"; - -import { legalizeName } from "./JavaScript"; - -export const typeScriptEffectSchemaOptions = { - justSchema: new BooleanOption("just-schema", "Schema only", false) -}; - -export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return []; - } - - public constructor( - displayName: string = "TypeScript Effect Schema", - names: string[] = ["typescript-effect-schema"], - extension: string = "ts" - ) { - super(displayName, names, extension); - } - - protected makeRenderer( - renderContext: RenderContext, - untypedOptionValues: FixMeOptionsType - ): TypeScriptEffectSchemaRenderer { - return new TypeScriptEffectSchemaRenderer( - this, - renderContext, - getOptionValues(typeScriptEffectSchemaOptions, untypedOptionValues) - ); - } -} +} from "../../support/Strings"; +import { panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, type ClassProperty, EnumType, MapType, type ObjectType, type Type } from "../../Type"; +import { matchType } from "../../TypeUtils"; +import { legalizeName } from "../JavaScript/utils"; + +import { type typeScriptEffectSchemaOptions } from "./language"; export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { private emittedObjects = new Set(); diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts new file mode 100644 index 000000000..ea8cf8149 --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts @@ -0,0 +1,2 @@ +export { TypeScriptEffectSchemaTargetLanguage, typeScriptEffectSchemaOptions } from "./language"; +export { TypeScriptEffectSchemaRenderer } from "./TypeScriptEffectSchemaRenderer"; diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts new file mode 100644 index 000000000..5e311edb0 --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts @@ -0,0 +1,35 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { TypeScriptEffectSchemaRenderer } from "./TypeScriptEffectSchemaRenderer"; + +export const typeScriptEffectSchemaOptions = { + justSchema: new BooleanOption("just-schema", "Schema only", false) +}; + +export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { + protected getOptions(): Array> { + return []; + } + + public constructor( + displayName: string = "TypeScript Effect Schema", + names: string[] = ["typescript-effect-schema"], + extension: string = "ts" + ) { + super(displayName, names, extension); + } + + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: FixMeOptionsType + ): TypeScriptEffectSchemaRenderer { + return new TypeScriptEffectSchemaRenderer( + this, + renderContext, + getOptionValues(typeScriptEffectSchemaOptions, untypedOptionValues) + ); + } +} diff --git a/packages/quicktype-core/src/language/TypeScriptFlow.ts b/packages/quicktype-core/src/language/TypeScriptFlow.ts deleted file mode 100644 index 202b95b4e..000000000 --- a/packages/quicktype-core/src/language/TypeScriptFlow.ts +++ /dev/null @@ -1,406 +0,0 @@ -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type MultiWord, type Sourcelike, modifySource, multiWord, parenIfNeeded, singleWord } from "../Source"; -import { camelCase, utf16StringEscape } from "../support/Strings"; -import { defined, panic } from "../support/Support"; -import { type TargetLanguage } from "../TargetLanguage"; -import { ArrayType, type ClassType, EnumType, type Type, UnionType } from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { isNamedType, matchType, nullableFromUnion } from "../TypeUtils"; - -import { - JavaScriptRenderer, - JavaScriptTargetLanguage, - type JavaScriptTypeAnnotations, - javaScriptOptions, - legalizeName -} from "./JavaScript"; -import { isES3IdentifierStart } from "./JavaScriptUnicodeMaps"; - -export const tsFlowOptions = Object.assign({}, javaScriptOptions, { - justTypes: new BooleanOption("just-types", "Interfaces only", false), - nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be JavaScripty", false), - declareUnions: new BooleanOption("explicit-unions", "Explicitly name unions", false), - preferUnions: new BooleanOption("prefer-unions", "Use union type instead of enum", false), - preferTypes: new BooleanOption("prefer-types", "Use types instead of interfaces", false), - preferConstValues: new BooleanOption( - "prefer-const-values", - "Use string instead of enum for string enums with single value", - false - ), - readonly: new BooleanOption("readonly", "Use readonly type members", false) -}); - -const tsFlowTypeAnnotations = { - any: ": any", - anyArray: ": any[]", - anyMap: ": { [k: string]: any }", - string: ": string", - stringArray: ": string[]", - boolean: ": boolean" -}; - -export abstract class TypeScriptFlowBaseTargetLanguage extends JavaScriptTargetLanguage { - protected getOptions(): Array> { - return [ - tsFlowOptions.justTypes, - tsFlowOptions.nicePropertyNames, - tsFlowOptions.declareUnions, - tsFlowOptions.runtimeTypecheck, - tsFlowOptions.runtimeTypecheckIgnoreUnknownProperties, - tsFlowOptions.acronymStyle, - tsFlowOptions.converters, - tsFlowOptions.rawType, - tsFlowOptions.preferUnions, - tsFlowOptions.preferTypes, - tsFlowOptions.preferConstValues, - tsFlowOptions.readonly - ]; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - protected abstract makeRenderer( - renderContext: RenderContext, - untypedOptionValues: FixMeOptionsType - ): JavaScriptRenderer; -} - -export class TypeScriptTargetLanguage extends TypeScriptFlowBaseTargetLanguage { - public constructor() { - super("TypeScript", ["typescript", "ts", "tsx"], "ts"); - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): TypeScriptRenderer { - return new TypeScriptRenderer(this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues)); - } -} - -function quotePropertyName(original: string): string { - const escaped = utf16StringEscape(original); - const quoted = `"${escaped}"`; - - if (original.length === 0) { - return quoted; - } else if (!isES3IdentifierStart(original.codePointAt(0) as number)) { - return quoted; - } else if (escaped !== original) { - return quoted; - } else if (legalizeName(original) !== original) { - return quoted; - } else { - return original; - } -} - -export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - protected readonly _tsFlowOptions: OptionValues - ) { - super(targetLanguage, renderContext, _tsFlowOptions); - } - - protected namerForObjectProperty(): Namer { - if (this._tsFlowOptions.nicePropertyNames) { - return funPrefixNamer("properties", s => this.nameStyle(s, false)); - } else { - return super.namerForObjectProperty(); - } - } - - protected sourceFor(t: Type): MultiWord { - if (this._tsFlowOptions.preferConstValues && t.kind === "enum" && t instanceof EnumType && t.cases.size === 1) { - const item = t.cases.values().next().value; - return singleWord(`"${utf16StringEscape(item)}"`); - } - - if (["class", "object", "enum"].includes(t.kind)) { - return singleWord(this.nameForNamedType(t)); - } - - return matchType( - t, - _anyType => singleWord("any"), - _nullType => singleWord("null"), - _boolType => singleWord("boolean"), - _integerType => singleWord("number"), - _doubleType => singleWord("number"), - _stringType => singleWord("string"), - arrayType => { - const itemType = this.sourceFor(arrayType.items); - if ( - (arrayType.items instanceof UnionType && !this._tsFlowOptions.declareUnions) || - arrayType.items instanceof ArrayType - ) { - return singleWord(["Array<", itemType.source, ">"]); - } else { - return singleWord([parenIfNeeded(itemType), "[]"]); - } - }, - _classType => panic("We handled this above"), - mapType => singleWord(["{ [key: string]: ", this.sourceFor(mapType.values).source, " }"]), - _enumType => panic("We handled this above"), - unionType => { - if (!this._tsFlowOptions.declareUnions || nullableFromUnion(unionType) !== null) { - const children = Array.from(unionType.getChildren()).map(c => parenIfNeeded(this.sourceFor(c))); - return multiWord(" | ", ...children); - } else { - return singleWord(this.nameForNamedType(unionType)); - } - }, - transformedStringType => { - if (transformedStringType.kind === "date-time") { - return singleWord("Date"); - } - - return singleWord("string"); - } - ); - } - - protected abstract emitEnum(e: EnumType, enumName: Name): void; - - protected abstract emitClassBlock(c: ClassType, className: Name): void; - - protected emitClassBlockBody(c: ClassType): void { - this.emitPropertyTable(c, (name, _jsonName, p) => { - const t = p.type; - - let propertyName: Sourcelike = name; - propertyName = modifySource(quotePropertyName, name); - - if (this._tsFlowOptions.readonly) { - propertyName = modifySource(_propertyName => "readonly " + _propertyName, propertyName); - } - - return [ - [propertyName, p.isOptional ? "?" : "", ": "], - [this.sourceFor(t).source, ";"] - ]; - }); - - const additionalProperties = c.getAdditionalProperties(); - if (additionalProperties) { - this.emitTable([["[property: string]", ": ", this.sourceFor(additionalProperties).source, ";"]]); - } - } - - private emitClass(c: ClassType, className: Name): void { - this.emitDescription(this.descriptionForType(c)); - this.emitClassBlock(c, className); - } - - protected emitUnion(u: UnionType, unionName: Name): void { - if (!this._tsFlowOptions.declareUnions) { - return; - } - - this.emitDescription(this.descriptionForType(u)); - - const children = multiWord(" | ", ...Array.from(u.getChildren()).map(c => parenIfNeeded(this.sourceFor(c)))); - this.emitLine("export type ", unionName, " = ", children.source, ";"); - } - - protected emitTypes(): void { - // emit primitive top levels - this.forEachTopLevel("none", (t, name) => { - if (!t.isPrimitive()) { - return; - } - - this.ensureBlankLine(); - this.emitDescription(this.descriptionForType(t)); - this.emitLine("type ", name, " = ", this.sourceFor(t).source, ";"); - }); - - this.forEachNamedType( - "leading-and-interposing", - (c: ClassType, n: Name) => this.emitClass(c, n), - (e, n) => this.emitEnum(e, n), - (u, n) => this.emitUnion(u, n) - ); - } - - protected emitUsageComments(): void { - if (this._tsFlowOptions.justTypes) return; - super.emitUsageComments(); - } - - protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { - const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["function to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source]; - } - - protected serializerFunctionLine(t: Type, name: Name): Sourcelike { - const camelCaseName = modifySource(camelCase, name); - const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["function ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType]; - } - - protected get moduleLine(): string | undefined { - return undefined; - } - - protected get castFunctionLines(): [string, string] { - return ["function cast(val: any, typ: any): T", "function uncast(val: T, typ: any): any"]; - } - - protected get typeAnnotations(): JavaScriptTypeAnnotations { - throw new Error("not implemented"); - } - - protected emitConvertModule(): void { - if (this._tsFlowOptions.justTypes) return; - super.emitConvertModule(); - } - - protected emitConvertModuleHelpers(): void { - if (this._tsFlowOptions.justTypes) return; - super.emitConvertModuleHelpers(); - } - - protected emitModuleExports(): void { - if (this._tsFlowOptions.justTypes) { - return; - } else { - super.emitModuleExports(); - } - } -} - -export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { - protected forbiddenNamesForGlobalNamespace(): string[] { - return ["Array", "Date"]; - } - - protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { - const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["public static to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source]; - } - - protected serializerFunctionLine(t: Type, name: Name): Sourcelike { - const camelCaseName = modifySource(camelCase, name); - const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["public static ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType]; - } - - protected get moduleLine(): string | undefined { - return "export class Convert"; - } - - protected get typeAnnotations(): JavaScriptTypeAnnotations { - return Object.assign({ never: ": never" }, tsFlowTypeAnnotations); - } - - protected emitModuleExports(): void { - return; - } - - protected emitUsageImportComment(): void { - const topLevelNames: Sourcelike[] = []; - this.forEachTopLevel( - "none", - (_t, name) => { - topLevelNames.push(", ", name); - }, - isNamedType - ); - this.emitLine("// import { Convert", topLevelNames, ' } from "./file";'); - } - - protected emitEnum(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - - // enums with only one value are emitted as constants - if (this._tsFlowOptions.preferConstValues && e.cases.size === 1) return; - - if (this._tsFlowOptions.preferUnions) { - let items = ""; - e.cases.forEach(item => { - if (items === "") { - items += `"${utf16StringEscape(item)}"`; - return; - } - - items += ` | "${utf16StringEscape(item)}"`; - }); - this.emitLine("export type ", enumName, " = ", items, ";"); - } else { - this.emitBlock(["export enum ", enumName, " "], "", () => { - this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine(name, ` = "${utf16StringEscape(jsonName)}",`); - }); - }); - } - } - - protected emitClassBlock(c: ClassType, className: Name): void { - this.emitBlock( - this._tsFlowOptions.preferTypes - ? ["export type ", className, " = "] - : ["export interface ", className, " "], - "", - () => { - this.emitClassBlockBody(c); - } - ); - } - - protected emitSourceStructure() { - super.emitSourceStructure(); - } -} - -export class FlowTargetLanguage extends TypeScriptFlowBaseTargetLanguage { - public constructor() { - super("Flow", ["flow"], "js"); - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): FlowRenderer { - return new FlowRenderer(this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues)); - } -} - -export class FlowRenderer extends TypeScriptFlowBaseRenderer { - protected forbiddenNamesForGlobalNamespace(): string[] { - return ["Class", "Date", "Object", "String", "Array", "JSON", "Error"]; - } - - protected get typeAnnotations(): JavaScriptTypeAnnotations { - return Object.assign({ never: "" }, tsFlowTypeAnnotations); - } - - protected emitEnum(e: EnumType, enumName: Name): void { - this.emitDescription(this.descriptionForType(e)); - const lines: string[][] = []; - this.forEachEnumCase(e, "none", (_, jsonName) => { - const maybeOr = lines.length === 0 ? " " : "| "; - lines.push([maybeOr, '"', utf16StringEscape(jsonName), '"']); - }); - defined(lines[lines.length - 1]).push(";"); - - this.emitLine("export type ", enumName, " ="); - this.indent(() => { - for (const line of lines) { - this.emitLine(line); - } - }); - } - - protected emitClassBlock(c: ClassType, className: Name): void { - this.emitBlock(["export type ", className, " = "], ";", () => { - this.emitClassBlockBody(c); - }); - } - - protected emitSourceStructure(): void { - this.emitLine("// @flow"); - this.ensureBlankLine(); - super.emitSourceStructure(); - } -} diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts new file mode 100644 index 000000000..eb4695583 --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts @@ -0,0 +1,47 @@ +import { type Name } from "../../Naming"; +import { utf16StringEscape } from "../../support/Strings"; +import { defined } from "../../support/Support"; +import { type ClassType, type EnumType } from "../../Type"; +import { type JavaScriptTypeAnnotations } from "../JavaScript"; + +import { TypeScriptFlowBaseRenderer } from "./TypeScriptFlowBaseRenderer"; +import { tsFlowTypeAnnotations } from "./utils"; + +export class FlowRenderer extends TypeScriptFlowBaseRenderer { + protected forbiddenNamesForGlobalNamespace(): string[] { + return ["Class", "Date", "Object", "String", "Array", "JSON", "Error"]; + } + + protected get typeAnnotations(): JavaScriptTypeAnnotations { + return Object.assign({ never: "" }, tsFlowTypeAnnotations); + } + + protected emitEnum(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + const lines: string[][] = []; + this.forEachEnumCase(e, "none", (_, jsonName) => { + const maybeOr = lines.length === 0 ? " " : "| "; + lines.push([maybeOr, '"', utf16StringEscape(jsonName), '"']); + }); + defined(lines[lines.length - 1]).push(";"); + + this.emitLine("export type ", enumName, " ="); + this.indent(() => { + for (const line of lines) { + this.emitLine(line); + } + }); + } + + protected emitClassBlock(c: ClassType, className: Name): void { + this.emitBlock(["export type ", className, " = "], ";", () => { + this.emitClassBlockBody(c); + }); + } + + protected emitSourceStructure(): void { + this.emitLine("// @flow"); + this.ensureBlankLine(); + super.emitSourceStructure(); + } +} diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts new file mode 100644 index 000000000..3cc9b09bf --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts @@ -0,0 +1,190 @@ +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type MultiWord, type Sourcelike, modifySource, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { camelCase, utf16StringEscape } from "../../support/Strings"; +import { panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; +import { ArrayType, type ClassType, EnumType, type Type, UnionType } from "../../Type"; +import { matchType, nullableFromUnion } from "../../TypeUtils"; +import { JavaScriptRenderer, type JavaScriptTypeAnnotations } from "../JavaScript"; + +import { type tsFlowOptions } from "./language"; +import { quotePropertyName } from "./utils"; + +export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + protected readonly _tsFlowOptions: OptionValues + ) { + super(targetLanguage, renderContext, _tsFlowOptions); + } + + protected namerForObjectProperty(): Namer { + if (this._tsFlowOptions.nicePropertyNames) { + return funPrefixNamer("properties", s => this.nameStyle(s, false)); + } else { + return super.namerForObjectProperty(); + } + } + + protected sourceFor(t: Type): MultiWord { + if (this._tsFlowOptions.preferConstValues && t.kind === "enum" && t instanceof EnumType && t.cases.size === 1) { + const item = t.cases.values().next().value; + return singleWord(`"${utf16StringEscape(item)}"`); + } + + if (["class", "object", "enum"].includes(t.kind)) { + return singleWord(this.nameForNamedType(t)); + } + + return matchType( + t, + _anyType => singleWord("any"), + _nullType => singleWord("null"), + _boolType => singleWord("boolean"), + _integerType => singleWord("number"), + _doubleType => singleWord("number"), + _stringType => singleWord("string"), + arrayType => { + const itemType = this.sourceFor(arrayType.items); + if ( + (arrayType.items instanceof UnionType && !this._tsFlowOptions.declareUnions) || + arrayType.items instanceof ArrayType + ) { + return singleWord(["Array<", itemType.source, ">"]); + } else { + return singleWord([parenIfNeeded(itemType), "[]"]); + } + }, + _classType => panic("We handled this above"), + mapType => singleWord(["{ [key: string]: ", this.sourceFor(mapType.values).source, " }"]), + _enumType => panic("We handled this above"), + unionType => { + if (!this._tsFlowOptions.declareUnions || nullableFromUnion(unionType) !== null) { + const children = Array.from(unionType.getChildren()).map(c => parenIfNeeded(this.sourceFor(c))); + return multiWord(" | ", ...children); + } else { + return singleWord(this.nameForNamedType(unionType)); + } + }, + transformedStringType => { + if (transformedStringType.kind === "date-time") { + return singleWord("Date"); + } + + return singleWord("string"); + } + ); + } + + protected abstract emitEnum(e: EnumType, enumName: Name): void; + + protected abstract emitClassBlock(c: ClassType, className: Name): void; + + protected emitClassBlockBody(c: ClassType): void { + this.emitPropertyTable(c, (name, _jsonName, p) => { + const t = p.type; + + let propertyName: Sourcelike = name; + propertyName = modifySource(quotePropertyName, name); + + if (this._tsFlowOptions.readonly) { + propertyName = modifySource(_propertyName => "readonly " + _propertyName, propertyName); + } + + return [ + [propertyName, p.isOptional ? "?" : "", ": "], + [this.sourceFor(t).source, ";"] + ]; + }); + + const additionalProperties = c.getAdditionalProperties(); + if (additionalProperties) { + this.emitTable([["[property: string]", ": ", this.sourceFor(additionalProperties).source, ";"]]); + } + } + + private emitClass(c: ClassType, className: Name): void { + this.emitDescription(this.descriptionForType(c)); + this.emitClassBlock(c, className); + } + + protected emitUnion(u: UnionType, unionName: Name): void { + if (!this._tsFlowOptions.declareUnions) { + return; + } + + this.emitDescription(this.descriptionForType(u)); + + const children = multiWord(" | ", ...Array.from(u.getChildren()).map(c => parenIfNeeded(this.sourceFor(c)))); + this.emitLine("export type ", unionName, " = ", children.source, ";"); + } + + protected emitTypes(): void { + // emit primitive top levels + this.forEachTopLevel("none", (t, name) => { + if (!t.isPrimitive()) { + return; + } + + this.ensureBlankLine(); + this.emitDescription(this.descriptionForType(t)); + this.emitLine("type ", name, " = ", this.sourceFor(t).source, ";"); + }); + + this.forEachNamedType( + "leading-and-interposing", + (c: ClassType, n: Name) => this.emitClass(c, n), + (e, n) => this.emitEnum(e, n), + (u, n) => this.emitUnion(u, n) + ); + } + + protected emitUsageComments(): void { + if (this._tsFlowOptions.justTypes) return; + super.emitUsageComments(); + } + + protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { + const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return ["function to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source]; + } + + protected serializerFunctionLine(t: Type, name: Name): Sourcelike { + const camelCaseName = modifySource(camelCase, name); + const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return ["function ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType]; + } + + protected get moduleLine(): string | undefined { + return undefined; + } + + protected get castFunctionLines(): [string, string] { + return ["function cast(val: any, typ: any): T", "function uncast(val: T, typ: any): any"]; + } + + protected get typeAnnotations(): JavaScriptTypeAnnotations { + throw new Error("not implemented"); + } + + protected emitConvertModule(): void { + if (this._tsFlowOptions.justTypes) return; + super.emitConvertModule(); + } + + protected emitConvertModuleHelpers(): void { + if (this._tsFlowOptions.justTypes) return; + super.emitConvertModuleHelpers(); + } + + protected emitModuleExports(): void { + if (this._tsFlowOptions.justTypes) { + return; + } else { + super.emitModuleExports(); + } + } +} diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts new file mode 100644 index 000000000..74edd55ed --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts @@ -0,0 +1,88 @@ +import { type Name } from "../../Naming"; +import { type Sourcelike, modifySource } from "../../Source"; +import { camelCase, utf16StringEscape } from "../../support/Strings"; +import { type ClassType, type EnumType, type Type } from "../../Type"; +import { isNamedType } from "../../TypeUtils"; +import { type JavaScriptTypeAnnotations } from "../JavaScript"; + +import { TypeScriptFlowBaseRenderer } from "./TypeScriptFlowBaseRenderer"; +import { tsFlowTypeAnnotations } from "./utils"; + +export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { + protected forbiddenNamesForGlobalNamespace(): string[] { + return ["Array", "Date"]; + } + + protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { + const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return ["public static to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source]; + } + + protected serializerFunctionLine(t: Type, name: Name): Sourcelike { + const camelCaseName = modifySource(camelCase, name); + const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return ["public static ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType]; + } + + protected get moduleLine(): string | undefined { + return "export class Convert"; + } + + protected get typeAnnotations(): JavaScriptTypeAnnotations { + return Object.assign({ never: ": never" }, tsFlowTypeAnnotations); + } + + protected emitModuleExports(): void { + return; + } + + protected emitUsageImportComment(): void { + const topLevelNames: Sourcelike[] = []; + this.forEachTopLevel( + "none", + (_t, name) => { + topLevelNames.push(", ", name); + }, + isNamedType + ); + this.emitLine("// import { Convert", topLevelNames, ' } from "./file";'); + } + + protected emitEnum(e: EnumType, enumName: Name): void { + this.emitDescription(this.descriptionForType(e)); + + // enums with only one value are emitted as constants + if (this._tsFlowOptions.preferConstValues && e.cases.size === 1) return; + + if (this._tsFlowOptions.preferUnions) { + let items = ""; + e.cases.forEach(item => { + if (items === "") { + items += `"${utf16StringEscape(item)}"`; + return; + } + + items += ` | "${utf16StringEscape(item)}"`; + }); + this.emitLine("export type ", enumName, " = ", items, ";"); + } else { + this.emitBlock(["export enum ", enumName, " "], "", () => { + this.forEachEnumCase(e, "none", (name, jsonName) => { + this.emitLine(name, ` = "${utf16StringEscape(jsonName)}",`); + }); + }); + } + } + + protected emitClassBlock(c: ClassType, className: Name): void { + this.emitBlock( + this._tsFlowOptions.preferTypes + ? ["export type ", className, " = "] + : ["export interface ", className, " "], + "", + () => { + this.emitClassBlockBody(c); + } + ); + } +} diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/index.ts b/packages/quicktype-core/src/language/TypeScriptFlow/index.ts new file mode 100644 index 000000000..681acaa34 --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptFlow/index.ts @@ -0,0 +1,3 @@ +export { FlowRenderer } from "./FlowRenderer"; +export { TypeScriptRenderer } from "./TypeScriptRenderer"; +export { FlowTargetLanguage, TypeScriptTargetLanguage, tsFlowOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/language.ts b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts new file mode 100644 index 000000000..8f8c37af5 --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts @@ -0,0 +1,68 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type JavaScriptRenderer, JavaScriptTargetLanguage, javaScriptOptions } from "../JavaScript"; + +import { FlowRenderer } from "./FlowRenderer"; +import { TypeScriptRenderer } from "./TypeScriptRenderer"; + +export const tsFlowOptions = Object.assign({}, javaScriptOptions, { + justTypes: new BooleanOption("just-types", "Interfaces only", false), + nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be JavaScripty", false), + declareUnions: new BooleanOption("explicit-unions", "Explicitly name unions", false), + preferUnions: new BooleanOption("prefer-unions", "Use union type instead of enum", false), + preferTypes: new BooleanOption("prefer-types", "Use types instead of interfaces", false), + preferConstValues: new BooleanOption( + "prefer-const-values", + "Use string instead of enum for string enums with single value", + false + ), + readonly: new BooleanOption("readonly", "Use readonly type members", false) +}); + +export abstract class TypeScriptFlowBaseTargetLanguage extends JavaScriptTargetLanguage { + protected getOptions(): Array> { + return [ + tsFlowOptions.justTypes, + tsFlowOptions.nicePropertyNames, + tsFlowOptions.declareUnions, + tsFlowOptions.runtimeTypecheck, + tsFlowOptions.runtimeTypecheckIgnoreUnknownProperties, + tsFlowOptions.acronymStyle, + tsFlowOptions.converters, + tsFlowOptions.rawType, + tsFlowOptions.preferUnions, + tsFlowOptions.preferTypes, + tsFlowOptions.preferConstValues, + tsFlowOptions.readonly + ]; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + protected abstract makeRenderer( + renderContext: RenderContext, + untypedOptionValues: FixMeOptionsType + ): JavaScriptRenderer; +} + +export class TypeScriptTargetLanguage extends TypeScriptFlowBaseTargetLanguage { + public constructor() { + super("TypeScript", ["typescript", "ts", "tsx"], "ts"); + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): TypeScriptRenderer { + return new TypeScriptRenderer(this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues)); + } +} +export class FlowTargetLanguage extends TypeScriptFlowBaseTargetLanguage { + public constructor() { + super("Flow", ["flow"], "js"); + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): FlowRenderer { + return new FlowRenderer(this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues)); + } +} diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/utils.ts b/packages/quicktype-core/src/language/TypeScriptFlow/utils.ts new file mode 100644 index 000000000..b15b7eb1d --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptFlow/utils.ts @@ -0,0 +1,29 @@ +import { utf16StringEscape } from "../../support/Strings"; +import { isES3IdentifierStart } from "../JavaScript/unicodeMaps"; +import { legalizeName } from "../JavaScript/utils"; + +export const tsFlowTypeAnnotations = { + any: ": any", + anyArray: ": any[]", + anyMap: ": { [k: string]: any }", + string: ": string", + stringArray: ": string[]", + boolean: ": boolean" +}; + +export function quotePropertyName(original: string): string { + const escaped = utf16StringEscape(original); + const quoted = `"${escaped}"`; + + if (original.length === 0) { + return quoted; + } else if (!isES3IdentifierStart(original.codePointAt(0) as number)) { + return quoted; + } else if (escaped !== original) { + return quoted; + } else if (legalizeName(original) !== original) { + return quoted; + } else { + return original; + } +} diff --git a/packages/quicktype-core/src/language/TypeScriptZod.ts b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts similarity index 85% rename from packages/quicktype-core/src/language/TypeScriptZod.ts rename to packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts index ada7494a9..a886288aa 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts @@ -1,11 +1,11 @@ import { arrayIntercalate } from "collection-utils"; -import { ConvenienceRenderer } from "../ConvenienceRenderer"; -import { type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { BooleanOption, type Option, type OptionValues, getOptionValues } from "../RendererOptions"; -import { type Sourcelike } from "../Source"; -import { AcronymStyleOptions, acronymStyle } from "../support/Acronyms"; +import { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import { type Name, type Namer, funPrefixNamer } from "../../Naming"; +import { type RenderContext } from "../../Renderer"; +import { type OptionValues } from "../../RendererOptions"; +import { type Sourcelike } from "../../Source"; +import { AcronymStyleOptions, acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, capitalize, @@ -15,62 +15,22 @@ import { splitIntoWords, stringEscape, utf16StringEscape -} from "../support/Strings"; -import { panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; +} from "../../support/Strings"; +import { panic } from "../../support/Support"; +import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, type EnumType, ObjectType, - type PrimitiveStringTypeKind, SetOperationType, - type TransformedStringTypeKind, type Type -} from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { matchType } from "../TypeUtils"; +} from "../../Type"; +import { matchType } from "../../TypeUtils"; +import { legalizeName } from "../JavaScript/utils"; -import { legalizeName } from "./JavaScript"; - -export const typeScriptZodOptions = { - justSchema: new BooleanOption("just-schema", "Schema only", false) -}; - -export class TypeScriptZodTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return []; - } - - public constructor( - displayName: string = "TypeScript Zod", - names: string[] = ["typescript-zod"], - extension: string = "ts" - ) { - super(displayName, names, extension); - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - const dateTimeType = "date-time"; - mapping.set("date-time", dateTimeType); - return mapping; - } - - public get supportsOptionalClassProperties(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): TypeScriptZodRenderer { - return new TypeScriptZodRenderer( - this, - renderContext, - getOptionValues(typeScriptZodOptions, untypedOptionValues) - ); - } -} +import { type typeScriptZodOptions } from "./language"; export class TypeScriptZodRenderer extends ConvenienceRenderer { public constructor( diff --git a/packages/quicktype-core/src/language/TypeScriptZod/index.ts b/packages/quicktype-core/src/language/TypeScriptZod/index.ts new file mode 100644 index 000000000..657c2f91c --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptZod/index.ts @@ -0,0 +1,2 @@ +export { TypeScriptZodTargetLanguage, typeScriptZodOptions } from "./language"; +export { TypeScriptZodRenderer } from "./TypeScriptZodRenderer"; diff --git a/packages/quicktype-core/src/language/TypeScriptZod/language.ts b/packages/quicktype-core/src/language/TypeScriptZod/language.ts new file mode 100644 index 000000000..a22f1298a --- /dev/null +++ b/packages/quicktype-core/src/language/TypeScriptZod/language.ts @@ -0,0 +1,45 @@ +import { type RenderContext } from "../../Renderer"; +import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; + +import { TypeScriptZodRenderer } from "./TypeScriptZodRenderer"; + +export const typeScriptZodOptions = { + justSchema: new BooleanOption("just-schema", "Schema only", false) +}; + +export class TypeScriptZodTargetLanguage extends TargetLanguage { + protected getOptions(): Array> { + return []; + } + + public constructor( + displayName: string = "TypeScript Zod", + names: string[] = ["typescript-zod"], + extension: string = "ts" + ) { + super(displayName, names, extension); + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + const dateTimeType = "date-time"; + mapping.set("date-time", dateTimeType); + return mapping; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): TypeScriptZodRenderer { + return new TypeScriptZodRenderer( + this, + renderContext, + getOptionValues(typeScriptZodOptions, untypedOptionValues) + ); + } +} diff --git a/packages/quicktype-core/src/language/index.ts b/packages/quicktype-core/src/language/index.ts new file mode 100644 index 000000000..024a52494 --- /dev/null +++ b/packages/quicktype-core/src/language/index.ts @@ -0,0 +1,26 @@ +export * from "./CJSON"; +export * from "./CPlusPlus"; +export * from "./Crystal"; +export * from "./CSharp"; +export * from "./Dart"; +export * from "./Elixir"; +export * from "./Elm"; +export * from "./Golang"; +export * from "./Haskell"; +export * from "./Java"; +export * from "./JavaScript"; +export * from "./JavaScriptPropTypes"; +export * from "./JSONSchema"; +export * from "./Kotlin"; +export * from "./Objective-C"; +export * from "./Php"; +export * from "./Pike"; +export * from "./Python"; +export * from "./Ruby"; +export * from "./Rust"; +export * from "./Scala3"; +export * from "./Smithy4s"; +export * from "./Swift"; +export * from "./TypeScriptFlow"; +export * from "./TypeScriptEffectSchema"; +export * from "./TypeScriptZod"; diff --git a/test/languages.ts b/test/languages.ts index 51f76bb4a..f1890a7d5 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -70,7 +70,7 @@ export const CSharpLanguage: Language = { { "number-type": "decimal" }, { "any-type": "dynamic" } ], - sourceFiles: ["src/language/CSharp.ts"] + sourceFiles: ["src/language/CSharp/index.ts"] }; export const CSharpLanguageSystemTextJson: Language = { @@ -102,7 +102,7 @@ export const CSharpLanguageSystemTextJson: Language = { { "number-type": "decimal" }, { "any-type": "dynamic" } ], - sourceFiles: ["src/language/CSharp.ts"] + sourceFiles: ["src/language/CSharp/index.ts"] }; export const JavaLanguage: Language = { @@ -125,7 +125,7 @@ export const JavaLanguage: Language = { skipSchema: ["keyword-unions.schema"], // generates classes with names that are case-insensitively equal rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/Java.ts"] + sourceFiles: ["src/language/Java/index.ts"] }; export const JavaLanguageWithLegacyDateTime: Language = { @@ -182,7 +182,7 @@ export const PythonLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [{ "python-version": "3.5" }], - sourceFiles: ["src/language/Python.ts"] + sourceFiles: ["src/language/Python/index.ts"] }; export const RustLanguage: Language = { @@ -224,7 +224,7 @@ export const RustLanguage: Language = { { visibility: "private" }, { visibility: "public" } ], - sourceFiles: ["src/language/Rust.ts"] + sourceFiles: ["src/language/Rust/index.ts"] }; export const CrystalLanguage: Language = { @@ -263,7 +263,7 @@ export const CrystalLanguage: Language = { skipMiscJSON: false, rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Crystal.ts"] + sourceFiles: ["src/language/Crystal/index.ts"] }; export const RubyLanguage: Language = { @@ -405,7 +405,7 @@ export const GoLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Golang.ts"] + sourceFiles: ["src/language/Golang/index.ts"] }; export const CJSONLanguage: Language = { @@ -483,7 +483,7 @@ export const CJSONLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [{ "source-style": "single-source" }], - sourceFiles: ["src/language/CJSON.ts"] + sourceFiles: ["src/language/CJSON/index.ts"] }; export const CPlusPlusLanguage: Language = { @@ -542,7 +542,7 @@ export const CPlusPlusLanguage: Language = { { "const-style": "east-const" }, { boost: "false" } ], - sourceFiles: ["src/language/CPlusPlus.ts"] + sourceFiles: ["src/language/CPlusPlus/index.ts"] }; export const ElmLanguage: Language = { @@ -614,7 +614,7 @@ export const ElmLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/Elm.ts"] + sourceFiles: ["src/language/Elm/index.ts"] }; export const SwiftLanguage: Language = { @@ -702,7 +702,7 @@ export const SwiftLanguage: Language = { { protocol: "equatable" }, ["simple-object.json", { protocol: "hashable" }] ], - sourceFiles: ["src/language/Swift.ts"] + sourceFiles: ["src/language/Swift/index.ts"] }; export const ObjectiveCLanguage: Language = { @@ -740,7 +740,7 @@ export const ObjectiveCLanguage: Language = { skipSchema: [], rendererOptions: { functions: "true" }, quickTestRendererOptions: [], - sourceFiles: ["src/language/Objective-C.ts"] + sourceFiles: ["src/language/Objective-C/index.ts"] }; export const TypeScriptLanguage: Language = { @@ -788,7 +788,7 @@ export const TypeScriptLanguage: Language = { { converters: "all-objects" }, { readonly: "true" } ], - sourceFiles: ["src/language/TypeScript.ts"] + sourceFiles: ["src/language/TypeScript/index.ts"] }; export const JavaScriptLanguage: Language = { @@ -815,7 +815,7 @@ export const JavaScriptLanguage: Language = { { "runtime-typecheck-ignore-unknown-properties": "true" }, { converters: "top-level" } ], - sourceFiles: ["src/language/JavaScript.ts"] + sourceFiles: ["src/language/JavaScript/index.ts"] }; export const JavaScriptPropTypesLanguage: Language = { @@ -847,7 +847,7 @@ export const JavaScriptPropTypesLanguage: Language = { { "runtime-typecheck-ignore-unknown-properties": "true" }, { converters: "top-level" } ], - sourceFiles: ["src/Language/JavaScriptPropTypes.ts"] + sourceFiles: ["src/language/JavaScriptPropTypes/index.ts"] }; export const FlowLanguage: Language = { @@ -876,7 +876,7 @@ export const FlowLanguage: Language = { { "nice-property-names": "true" }, { "declare-unions": "true" } ], - sourceFiles: ["src/language/Flow.ts"] + sourceFiles: ["src/language/Flow/index.ts"] }; export const Scala3Language: Language = { @@ -956,7 +956,7 @@ I havea no idea how to encode these tests correctly. skipMiscJSON: false, rendererOptions: { framework: "circe" }, quickTestRendererOptions: [], - sourceFiles: ["src/Language/Scala3.ts"] + sourceFiles: ["src/language/Scala3/index.ts"] }; export const Smithy4sLanguage: Language = { @@ -1022,7 +1022,7 @@ I havea no idea how to encode these tests correctly. skipMiscJSON: false, rendererOptions: { framework: "just-types" }, quickTestRendererOptions: [], - sourceFiles: ["src/Language/Smithy4s.ts"] + sourceFiles: ["src/language/Smithy4s/index.ts"] }; export const KotlinLanguage: Language = { @@ -1107,7 +1107,7 @@ export const KotlinLanguage: Language = { skipMiscJSON: false, rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/Language/Kotlin.ts"] + sourceFiles: ["src/language/Kotlin/index.ts"] }; export const KotlinJacksonLanguage: Language = { @@ -1191,7 +1191,7 @@ export const KotlinJacksonLanguage: Language = { skipMiscJSON: false, rendererOptions: { framework: "jackson" }, quickTestRendererOptions: [], - sourceFiles: ["src/Language/Kotlin.ts"] + sourceFiles: ["src/language/Kotlin/index.ts"] }; export const DartLanguage: Language = { @@ -1241,7 +1241,7 @@ export const DartLanguage: Language = { skipMiscJSON: true, rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/Language/Dart.ts"] + sourceFiles: ["src/language/Dart/index.ts"] }; export const PikeLanguage: Language = { @@ -1294,7 +1294,7 @@ export const PikeLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/Language/Pike.ts"] + sourceFiles: ["src/language/Pike/index.ts"] }; export const HaskellLanguage: Language = { @@ -1383,7 +1383,7 @@ export const HaskellLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/Haskell.ts"] + sourceFiles: ["src/language/Haskell/index.ts"] }; export const PHPLanguage: Language = { @@ -1401,7 +1401,7 @@ export const PHPLanguage: Language = { skipSchema: [], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/Language/Php.ts"] + sourceFiles: ["src/language/Php/index.ts"] }; export const TypeScriptZodLanguage: Language = { @@ -1519,7 +1519,7 @@ export const TypeScriptZodLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/TypeScriptZod.ts"] + sourceFiles: ["src/language/TypeScriptZod/index.ts"] }; export const TypeScriptEffectSchemaLanguage: Language = { @@ -1635,7 +1635,7 @@ export const TypeScriptEffectSchemaLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/TypeScriptEffectSchema.ts"] + sourceFiles: ["src/language/TypeScriptEffectSchema/index.ts"] }; export const ElixirLanguage: Language = { @@ -1696,5 +1696,5 @@ export const ElixirLanguage: Language = { ], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Elixir.ts"] + sourceFiles: ["src/language/Elixir/index.ts"] }; From 1ad532b5b34d7bd4e6ceb87985a9e79275fb563b Mon Sep 17 00:00:00 2001 From: Flo Date: Sat, 18 May 2024 19:57:58 +0200 Subject: [PATCH 75/99] Revert import order to fix imported class being not yet defined (#2599) --- packages/quicktype-core/src/TypeUtils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/TypeUtils.ts b/packages/quicktype-core/src/TypeUtils.ts index b2ae456f7..cc150de8e 100644 --- a/packages/quicktype-core/src/TypeUtils.ts +++ b/packages/quicktype-core/src/TypeUtils.ts @@ -1,7 +1,5 @@ import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion } from "collection-utils"; -// eslint-disable-next-line import/no-cycle -import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; import { type CombinationKind, type TypeAttributes, @@ -9,6 +7,7 @@ import { emptyTypeAttributes } from "./attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "./support/Support"; +// eslint-disable-next-line import/no-cycle import { ArrayType, type ClassProperty, @@ -22,6 +21,9 @@ import { UnionType, isPrimitiveStringTypeKind } from "./Type"; +// String types should be imported last to avoid circular dependency issues. +// eslint-disable-next-line import/order +import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; export function assertIsObject(t: Type): ObjectType { if (t instanceof ObjectType) { From 02d860f02af9b259b43433edf2986baffdc31dc9 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Sat, 18 May 2024 10:59:03 -0700 Subject: [PATCH 76/99] Revert "Revert import order to fix imported class being not yet defined (#2599)" (#2600) This reverts commit 1ad532b5b34d7bd4e6ceb87985a9e79275fb563b. --- packages/quicktype-core/src/TypeUtils.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/TypeUtils.ts b/packages/quicktype-core/src/TypeUtils.ts index cc150de8e..b2ae456f7 100644 --- a/packages/quicktype-core/src/TypeUtils.ts +++ b/packages/quicktype-core/src/TypeUtils.ts @@ -1,5 +1,7 @@ import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion } from "collection-utils"; +// eslint-disable-next-line import/no-cycle +import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; import { type CombinationKind, type TypeAttributes, @@ -7,7 +9,6 @@ import { emptyTypeAttributes } from "./attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "./support/Support"; -// eslint-disable-next-line import/no-cycle import { ArrayType, type ClassProperty, @@ -21,9 +22,6 @@ import { UnionType, isPrimitiveStringTypeKind } from "./Type"; -// String types should be imported last to avoid circular dependency issues. -// eslint-disable-next-line import/order -import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; export function assertIsObject(t: Type): ObjectType { if (t instanceof ObjectType) { From 8521c65958fadedb5f52bc56e617d4b06d8f645e Mon Sep 17 00:00:00 2001 From: David Siegel Date: Sat, 18 May 2024 11:17:08 -0700 Subject: [PATCH 77/99] Fail the workflow if anything earlier fails (#2601) * Fail the workflow if anything earlier fails * Update test-pr.yaml --- .github/workflows/test-pr.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index fcc5af749..1d153c309 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -187,7 +187,10 @@ jobs: - run: QUICKTEST=true FIXTURE=${{ matrix.fixture }} npm test test-complete: + if: ${{ cancelled() || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'failure') }} needs: test runs-on: ubuntu-latest steps: - - run: echo 🎉 + - run: | + echo "Some workflows have failed!" + exit 1 From 3ddcadf3323f56cbeb1467a62af50c5f9ee97f83 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Sat, 18 May 2024 12:36:23 -0700 Subject: [PATCH 78/99] =?UTF-8?q?Revert=20"Revert=20"Revert=20import=20ord?= =?UTF-8?q?er=20to=20fix=20imported=20class=20being=20not=20yet=20defin?= =?UTF-8?q?=E2=80=A6"=20(#2603)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 02d860f02af9b259b43433edf2986baffdc31dc9. --- packages/quicktype-core/src/TypeUtils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/TypeUtils.ts b/packages/quicktype-core/src/TypeUtils.ts index b2ae456f7..cc150de8e 100644 --- a/packages/quicktype-core/src/TypeUtils.ts +++ b/packages/quicktype-core/src/TypeUtils.ts @@ -1,7 +1,5 @@ import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion } from "collection-utils"; -// eslint-disable-next-line import/no-cycle -import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; import { type CombinationKind, type TypeAttributes, @@ -9,6 +7,7 @@ import { emptyTypeAttributes } from "./attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "./support/Support"; +// eslint-disable-next-line import/no-cycle import { ArrayType, type ClassProperty, @@ -22,6 +21,9 @@ import { UnionType, isPrimitiveStringTypeKind } from "./Type"; +// String types should be imported last to avoid circular dependency issues. +// eslint-disable-next-line import/order +import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; export function assertIsObject(t: Type): ObjectType { if (t instanceof ObjectType) { From ed1ffa43e9b53229f53ed21becdacc9df01cc6b3 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 18 May 2024 13:39:15 -0700 Subject: [PATCH 79/99] chore(rust): Strongly type Rust NamingStyles (#2602) * standardise json formatting * add file association for schema files * install eslint packages * add eslint config * remove tslint * eslint autofix * update eslint rules, eslintignore * add lint:fix script * update eslint rules, eslintignore * add lint:fix script * add import rules * add import rules * update import rules * reduce excess style rules * downgrade remaining to warnings * fix enum values fixup! fix enum values * add all missing accessibility modifiers fixup! add all missing accessibility modifiers fixup! add all missing accessibility modifiers * fix nullish errors * update import rules * fix all require imports * fix all imports * reduce excess style rules * fix any types fixup! fix any types fixup! fix any types * fix misc errors * downgrade remaining to warnings * return types * fix types errors * fix json import for test tsconfig * auto lint fix * fix lint errors in extension * fix lint errors in Elixir * make ref.pushElement public * fix misc * fix accidental public in CSharp raw text get * fix new lint errors * Merge branch 'refactor/imports/languages' * strongly type Rust naming styles * fix typo * unify emitDeriveHeader for Rust * :recycle: --- .../src/language/CJSON/language.ts | 2 +- .../src/language/Rust/RustRenderer.ts | 15 ++++++----- .../quicktype-core/src/language/Rust/utils.ts | 26 +++++++++++-------- tsconfig.json | 3 ++- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/packages/quicktype-core/src/language/CJSON/language.ts b/packages/quicktype-core/src/language/CJSON/language.ts index c18c6806a..82e32ffd9 100644 --- a/packages/quicktype-core/src/language/CJSON/language.ts +++ b/packages/quicktype-core/src/language/CJSON/language.ts @@ -25,7 +25,7 @@ import { type RenderContext } from "../../Renderer"; import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; import { type NamingStyle } from "../../support/Strings"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType, type FixMeOptionsAnyType } from "../../types"; +import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; import { CJSONRenderer } from "./CJSONRenderer"; diff --git a/packages/quicktype-core/src/language/Rust/RustRenderer.ts b/packages/quicktype-core/src/language/Rust/RustRenderer.ts index 6e0a6653f..be533a419 100644 --- a/packages/quicktype-core/src/language/Rust/RustRenderer.ts +++ b/packages/quicktype-core/src/language/Rust/RustRenderer.ts @@ -16,11 +16,12 @@ import { keywords } from "./constants"; import { type rustOptions } from "./language"; import { Density, + type NamingStyleKey, Visibility, camelNamingFunction, - getPreferedNamingStyle, + getPreferredNamingStyle, listMatchingNamingStyles, - nameToNamingStyle, + nameWithNamingStyle, namingStyles, rustStringEscape, snakeNamingFunction @@ -121,12 +122,12 @@ export class RustRenderer extends ConvenienceRenderer { private emitRenameAttribute( propName: Name, jsonName: string, - defaultNamingStyle: string, - preferedNamingStyle: string + defaultNamingStyle: NamingStyleKey, + preferedNamingStyle: NamingStyleKey ): void { const escapedName = rustStringEscape(jsonName); const name = namingStyles[defaultNamingStyle].fromParts(this.sourcelikeToString(propName).split(" ")); - const styledName = nameToNamingStyle(name, preferedNamingStyle); + const styledName = nameWithNamingStyle(name, preferedNamingStyle); const namesDiffer = escapedName !== styledName; if (namesDiffer) { this.emitLine('#[serde(rename = "', escapedName, '")]'); @@ -168,7 +169,7 @@ export class RustRenderer extends ConvenienceRenderer { // Set the default naming style on the struct const defaultStyle = "snake_case"; - const preferedNamingStyle = getPreferedNamingStyle(Object.values(propertiesNamingStyles).flat(), defaultStyle); + const preferedNamingStyle = getPreferredNamingStyle(Object.values(propertiesNamingStyles).flat(), defaultStyle); if (preferedNamingStyle !== defaultStyle) { this.emitLine(`#[serde(rename_all = "${preferedNamingStyle}")]`); } @@ -240,7 +241,7 @@ export class RustRenderer extends ConvenienceRenderer { // Set the default naming style on the enum const defaultStyle = "PascalCase"; - const preferedNamingStyle = getPreferedNamingStyle(Object.values(enumCasesNamingStyles).flat(), defaultStyle); + const preferedNamingStyle = getPreferredNamingStyle(Object.values(enumCasesNamingStyles).flat(), defaultStyle); if (preferedNamingStyle !== defaultStyle) { this.emitLine(`#[serde(rename_all = "${preferedNamingStyle}")]`); } diff --git a/packages/quicktype-core/src/language/Rust/utils.ts b/packages/quicktype-core/src/language/Rust/utils.ts index 1b086f545..56e22af29 100644 --- a/packages/quicktype-core/src/language/Rust/utils.ts +++ b/packages/quicktype-core/src/language/Rust/utils.ts @@ -33,7 +33,7 @@ interface NamingStyle { toParts: NameToParts; } -export const namingStyles: Record = { +export const namingStyles = { snake_case: { regex: /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/, toParts: (name: string): string[] => name.split("_"), @@ -80,7 +80,11 @@ export const namingStyles: Record = { toParts: (name: string): string[] => [name], fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("") } -}; +} as const; + +namingStyles satisfies Record; + +export type NamingStyleKey = keyof typeof namingStyles; const isAsciiLetterOrUnderscoreOrDigit = (codePoint: number): boolean => { if (!isAscii(codePoint)) { @@ -132,13 +136,13 @@ const standardUnicodeRustEscape = (codePoint: number): string => { export const rustStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeRustEscape)); -export function getPreferedNamingStyle(namingStyleOccurences: string[], defaultStyle: string): string { +export function getPreferredNamingStyle(namingStyleOccurences: string[], defaultStyle: NamingStyleKey): NamingStyleKey { const occurrences = Object.fromEntries(Object.keys(namingStyles).map(key => [key, 0])); namingStyleOccurences.forEach(style => ++occurrences[style]); const max = Math.max(...Object.values(occurrences)); - const preferedStyles = Object.entries(occurrences) - .filter(([_style, num]) => num === max) - .map(([style, _num]) => style); + const preferedStyles = Object.entries(occurrences).flatMap(([style, num]) => + num === max ? [style] : [] + ) as NamingStyleKey[]; if (preferedStyles.includes(defaultStyle)) { return defaultStyle; } @@ -146,13 +150,13 @@ export function getPreferedNamingStyle(namingStyleOccurences: string[], defaultS return preferedStyles[0]; } -export function listMatchingNamingStyles(name: string): string[] { - return Object.entries(namingStyles) - .filter(([_, { regex }]) => regex.test(name)) - .map(([namingStyle, _]) => namingStyle); +export function listMatchingNamingStyles(name: string): NamingStyleKey[] { + return Object.entries(namingStyles).flatMap(([namingStyleKey, { regex }]) => + regex.test(name) ? [namingStyleKey] : [] + ) as NamingStyleKey[]; } -export function nameToNamingStyle(name: string, style: string): string { +export function nameWithNamingStyle(name: string, style: NamingStyleKey): string { if (namingStyles[style].regex.test(name)) { return name; } diff --git a/tsconfig.json b/tsconfig.json index 60bab643b..4f1446d5e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,8 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "outDir": "dist", - "baseUrl": "src" + "baseUrl": "src", + "resolveJsonModule": true }, "include": ["src"] } From b28430299b47a50ed667ee57dff9f89176f82083 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Thu, 30 May 2024 08:16:41 -0700 Subject: [PATCH 80/99] allow running test pr workflow for release branches --- .github/workflows/test-pr.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index 1d153c309..f238c1a03 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -3,6 +3,7 @@ on: pull_request: branches: - master + - 'release/**' jobs: build: runs-on: ubuntu-latest From 29bb8160660a7daa2a837ac0cb1e92f99729ad8e Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Fri, 31 May 2024 08:43:48 -0700 Subject: [PATCH 81/99] refactor: Fixes some easier dependency cycles (#2605) * fix Acronym dep cycle * :recycle: * fix dep cycle in input dir --- packages/quicktype-core/src/index.ts | 4 +- .../src/input/FetchingJSONSchemaStore.ts | 3 +- packages/quicktype-core/src/input/Inputs.ts | 1 - .../quicktype-core/src/input/io/NodeIO.ts | 4 +- packages/quicktype-core/src/language/All.ts | 1 - .../src/support/Acronyms.const.ts | 1097 ++++++++++++++++ .../quicktype-core/src/support/Acronyms.ts | 1115 +---------------- .../quicktype-core/src/support/Strings.ts | 7 +- 8 files changed, 1115 insertions(+), 1117 deletions(-) create mode 100644 packages/quicktype-core/src/support/Acronyms.const.ts diff --git a/packages/quicktype-core/src/index.ts b/packages/quicktype-core/src/index.ts index 6da647b12..10aaeb9ee 100644 --- a/packages/quicktype-core/src/index.ts +++ b/packages/quicktype-core/src/index.ts @@ -69,9 +69,9 @@ export { type PrimitiveStringTypeKind } from "./Type"; export { getStream } from "./input/io/get-stream"; -// eslint-disable-next-line import/no-cycle + export { readableFromFileOrURL, readFromFileOrURL } from "./input/io/NodeIO"; -// eslint-disable-next-line import/no-cycle + export { FetchingJSONSchemaStore } from "./input/FetchingJSONSchemaStore"; export { JSONSchemaStore, type JSONSchema } from "./input/JSONSchemaStore"; export { sourcesFromPostmanCollection } from "./input/PostmanCollection"; diff --git a/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts b/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts index 4e7c132f5..028c73d11 100644 --- a/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts +++ b/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts @@ -1,5 +1,4 @@ -// eslint-disable-next-line import/no-cycle -import { parseJSON } from ".."; +import { parseJSON } from "../support/Support"; import { readFromFileOrURL } from "./io/NodeIO"; import { type JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; diff --git a/packages/quicktype-core/src/input/Inputs.ts b/packages/quicktype-core/src/input/Inputs.ts index 96d78756a..92eb37760 100644 --- a/packages/quicktype-core/src/input/Inputs.ts +++ b/packages/quicktype-core/src/input/Inputs.ts @@ -2,7 +2,6 @@ import { arrayMapSync, iterableFind, iterableFirst, iterableSome, setFilterMap, import { descriptionTypeAttributeKind } from "../attributes/Description"; import { makeNamesTypeAttributes } from "../attributes/TypeNames"; -// eslint-disable-next-line import/no-cycle import { languageNamed } from "../language/All"; import { messageError } from "../Messages"; import { type RunContext } from "../Run"; diff --git a/packages/quicktype-core/src/input/io/NodeIO.ts b/packages/quicktype-core/src/input/io/NodeIO.ts index f8cf94b44..885f5b57f 100644 --- a/packages/quicktype-core/src/input/io/NodeIO.ts +++ b/packages/quicktype-core/src/input/io/NodeIO.ts @@ -6,8 +6,8 @@ import _fetch from "cross-fetch"; import isURL from "is-url"; import { type Readable } from "readable-stream"; -// eslint-disable-next-line import/no-cycle -import { messageError, panic } from "../../index"; +import { messageError } from "../../Messages"; +import { panic } from "../../support/Support"; import { getStream } from "./get-stream"; diff --git a/packages/quicktype-core/src/language/All.ts b/packages/quicktype-core/src/language/All.ts index 227ca4322..7fe1c87d3 100644 --- a/packages/quicktype-core/src/language/All.ts +++ b/packages/quicktype-core/src/language/All.ts @@ -13,7 +13,6 @@ import { GoTargetLanguage } from "./Golang"; import { HaskellTargetLanguage } from "./Haskell"; import { JavaTargetLanguage } from "./Java"; import { JavaScriptTargetLanguage } from "./JavaScript"; -// eslint-disable-next-line import/no-cycle import { JavaScriptPropTypesTargetLanguage } from "./JavaScriptPropTypes"; import { JSONSchemaTargetLanguage } from "./JSONSchema"; import { KotlinTargetLanguage } from "./Kotlin"; diff --git a/packages/quicktype-core/src/support/Acronyms.const.ts b/packages/quicktype-core/src/support/Acronyms.const.ts new file mode 100644 index 000000000..385234542 --- /dev/null +++ b/packages/quicktype-core/src/support/Acronyms.const.ts @@ -0,0 +1,1097 @@ +export const acronyms = [ + "aaa", + "aabb", + "aac", + "aal", + "aalc", + "aarp", + "abac", + "abcl", + "abi", + "abm", + "abr", + "ac", + "acd", + "ack", + "acl", + "acm", + "acme", + "acp", + "acpi", + "acr", + "adb", + "adc", + "adccp", + "ado", + "adsl", + "adt", + "ae", + "aes", + "af", + "afp", + "agp", + "ai", + "aix", + "alac", + "algol", + "alsa", + "alu", + "amd", + "amoled", + "amqp", + "amr", + "ann", + "ansi", + "aop", + "apci", + "api", + "apic", + "apipa", + "apl", + "apr", + "arin", + "aros", + "arp", + "arpa", + "arpanet", + "ascii", + "aset", + "asg", + "asic", + "asimo", + "aslr", + "asm", + "asmp", + "asp", + "asr", + "assp", + "ast", + "ata", + "atag", + "atapi", + "atm", + "av", + "avc", + "avi", + "awfl", + "awk", + "awt", + "bal", + "bam", + "bbp", + "bbs", + "bcd", + "bcnf", + "beep", + "ber", + "bfd", + "bfs", + "bft", + "bgp", + "bi", + "binac", + "bios", + "bjt", + "bmp", + "bnc", + "boinc", + "bom", + "bootp", + "bpdu", + "bpel", + "bpl", + "bpm", + "brm", + "brms", + "brr", + "brs", + "bsa", + "bsb", + "bsd", + "bss", + "bt", + "bw", + "byod", + "ca", + "cad", + "cae", + "cai", + "caid", + "captcha", + "caq", + "cd", + "cde", + "cdfs", + "cdma", + "cdn", + "cdp", + "cdsa", + "cert", + "ces", + "cf", + "cfd", + "cfg", + "cg", + "cga", + "cgi", + "cgt", + "chs", + "cidr", + "cifs", + "cim", + "cio", + "cir", + "cisc", + "cjk", + "cjkv", + "cli", + "clr", + "cm", + "cmdb", + "cmmi", + "cmo", + "cmos", + "cms", + "cn", + "cnc", + "cng", + "cnr", + "cobol", + "com", + "corba", + "cots", + "cpa", + "cpan", + "cpri", + "cps", + "cpu", + "cr", + "cran", + "crc", + "crlf", + "crm", + "crs", + "crt", + "crud", + "cs", + "cse", + "csi", + "csm", + "csp", + "csrf", + "css", + "csv", + "ct", + "ctan", + "ctcp", + "ctfe", + "cti", + "ctl", + "ctm", + "cts", + "ctss", + "cua", + "cvs", + "dac", + "dal", + "dao", + "dap", + "darpa", + "dat", + "db", + "dba", + "dbcs", + "dbms", + "dcc", + "dcca", + "dccp", + "dcl", + "dcmi", + "dcom", + "dcs", + "dd", + "dde", + "ddi", + "ddl", + "ddr", + "dec", + "des", + "dfa", + "dfd", + "dfs", + "dgd", + "dhcp", + "dhtml", + "dif", + "dimm", + "din", + "dip", + "dism", + "divx", + "dkim", + "dl", + "dll", + "dlna", + "dlp", + "dma", + "dmca", + "dmi", + "dml", + "dmr", + "dmz", + "dn", + "dnd", + "dns", + "doa", + "docsis", + "dom", + "dos", + "dp", + "dpc", + "dpi", + "dpmi", + "dpms", + "dr", + "dram", + "dri", + "drm", + "dsa", + "dsdl", + "dsdm", + "dsl", + "dslam", + "dsn", + "dsp", + "dsssl", + "dtd", + "dte", + "dtp", + "dtr", + "dvd", + "dvi", + "dvr", + "dw", + "eai", + "eap", + "eas", + "ebcdic", + "ebml", + "ecc", + "ecma", + "ecn", + "ecos", + "ecrs", + "eda", + "edi", + "edo", + "edsac", + "edvac", + "eeprom", + "eff", + "efi", + "efm", + "efs", + "ega", + "egp", + "eide", + "eigrp", + "eisa", + "elf", + "emacs", + "ems", + "eniac", + "eod", + "eof", + "eol", + "eom", + "eos", + "eprom", + "erd", + "erm", + "erp", + "esb", + "escon", + "esd", + "esr", + "etl", + "etw", + "euc", + "eula", + "ewmh", + "ext", + "fap", + "faq", + "fasm", + "fbdimm", + "fcb", + "fcs", + "fdc", + "fdd", + "fddi", + "fdm", + "fdma", + "fds", + "fec", + "femb", + "fet", + "fhs", + "ficon", + "fifo", + "fips", + "fl", + "flac", + "flops", + "fmc", + "fmo", + "foldoc", + "fosdem", + "fosi", + "foss", + "fp", + "fpga", + "fps", + "fpu", + "fqdn", + "fru", + "fs", + "fsb", + "fsf", + "fsm", + "ftp", + "ftta", + "fttc", + "ftth", + "fttp", + "fud", + "fvek", + "fws", + "fxp", + "fyi", + "gb", + "gcc", + "gcj", + "gcr", + "gdb", + "gdi", + "geran", + "gfdl", + "gif", + "gigo", + "gimps", + "gis", + "gml", + "gnu", + "goms", + "gpasm", + "gpfs", + "gpg", + "gpgpu", + "gpib", + "gpl", + "gprs", + "gpt", + "gpu", + "gsm", + "gui", + "guid", + "gwt", + "gyr", + "hal", + "hasp", + "hba", + "hci", + "hcl", + "hd", + "hdd", + "hdl", + "hdmi", + "hf", + "hfs", + "hhd", + "hid", + "hig", + "hird", + "hlasm", + "hls", + "hma", + "hp", + "hpc", + "hpfs", + "hsdpa", + "hsm", + "ht", + "htc", + "htm", + "html", + "http", + "https", + "htx", + "hurd", + "hvd", + "iana", + "ibm", + "ic", + "icann", + "ich", + "icmp", + "icp", + "ics", + "ict", + "id", + "ide", + "idf", + "idl", + "ids", + "iec", + "ieee", + "ietf", + "ifl", + "igmp", + "igrp", + "ihv", + "iiop", + "iis", + "ike", + "il", + "im", + "imap", + "ime", + "infosec", + "ip", + "ipam", + "ipc", + "ipl", + "ipmi", + "ipo", + "ipp", + "ips", + "iptv", + "ipx", + "ir", + "irc", + "iri", + "irp", + "irq", + "isa", + "isam", + "isatap", + "isc", + "isdn", + "iso", + "isp", + "ispf", + "isr", + "isv", + "itil", + "itl", + "itu", + "ivcr", + "ivrs", + "jaxb", + "jaxp", + "jbod", + "jce", + "jcl", + "jcp", + "jdbc", + "jdk", + "jds", + "jee", + "jes", + "jfc", + "jfet", + "jfs", + "jini", + "jit", + "jme", + "jms", + "jmx", + "jndi", + "jni", + "jnz", + "jpeg", + "jre", + "js", + "jse", + "json", + "jsp", + "jtag", + "jvm", + "kb", + "kde", + "km", + "krl", + "kvm", + "lacp", + "lan", + "lb", + "lba", + "lcd", + "lcos", + "lcr", + "ldap", + "le", + "led", + "lf", + "lfs", + "lga", + "lgpl", + "lib", + "lif", + "lifo", + "lilo", + "lisp", + "lkml", + "lm", + "loc", + "lpc", + "lpi", + "lpt", + "lru", + "lsb", + "lsi", + "lte", + "ltl", + "ltr", + "lun", + "lv", + "lvd", + "lvm", + "lzw", + "mac", + "manet", + "mapi", + "mb", + "mbcs", + "mbd", + "mbr", + "mca", + "mcad", + "mcas", + "mcdba", + "mcdst", + "mcitp", + "mcm", + "mcp", + "mcpc", + "mcpd", + "mcsa", + "mcsd", + "mcse", + "mct", + "mcts", + "mda", + "mdf", + "mdi", + "mf", + "mfc", + "mfm", + "mgcp", + "mib", + "micr", + "midi", + "mimd", + "mime", + "mimo", + "minix", + "mips", + "mis", + "misd", + "mit", + "mmc", + "mmds", + "mmf", + "mmi", + "mmio", + "mmorpg", + "mmu", + "mmx", + "mng", + "mom", + "mos", + "mosfet", + "motd", + "mous", + "mov", + "mpaa", + "mpeg", + "mpl", + "mpls", + "mpu", + "ms", + "msa", + "msb", + "msdn", + "msi", + "msn", + "mt", + "mta", + "mtbf", + "mtu", + "mua", + "mvc", + "mvp", + "mvs", + "mwc", + "mx", + "mxf", + "nack", + "nak", + "nas", + "nasm", + "ncp", + "ncq", + "ncsa", + "ndis", + "ndps", + "nds", + "nep", + "nfa", + "nfc", + "nfs", + "ngl", + "ngscb", + "ni", + "nic", + "nim", + "nio", + "nist", + "nlp", + "nls", + "nmi", + "nntp", + "noc", + "nop", + "nos", + "np", + "npl", + "nptl", + "npu", + "ns", + "nsa", + "nsi", + "nspr", + "nss", + "nt", + "ntfs", + "ntlm", + "ntp", + "numa", + "nurbs", + "nvr", + "nvram", + "oat", + "obsai", + "odbc", + "oem", + "oes", + "ofdm", + "oftc", + "oid", + "olap", + "ole", + "oled", + "olpc", + "oltp", + "omf", + "omg", + "omr", + "oo", + "ooe", + "oom", + "oop", + "ootb", + "opml", + "orb", + "orm", + "os", + "oscon", + "osdn", + "osi", + "ospf", + "oss", + "ostg", + "oui", + "pap", + "parc", + "pata", + "pbs", + "pc", + "pcb", + "pci", + "pcl", + "pcm", + "pcmcia", + "pcre", + "pd", + "pda", + "pdf", + "pdh", + "pdp", + "pe", + "perl", + "pfa", + "pg", + "pga", + "pgo", + "pgp", + "php", + "pid", + "pim", + "pio", + "pkcs", + "pki", + "plc", + "pld", + "plt", + "pmm", + "png", + "pnrp", + "poid", + "pojo", + "posix", + "ppc", + "ppi", + "ppp", + "pptp", + "pr", + "ps", + "psa", + "psm", + "psu", + "psvi", + "pv", + "pvg", + "pvr", + "pxe", + "pxi", + "qa", + "qdr", + "qfp", + "qotd", + "qsop", + "qtam", + "racf", + "rad", + "raid", + "raii", + "rait", + "ram", + "rarp", + "ras", + "rc", + "rcs", + "rd", + "rdbms", + "rdc", + "rdf", + "rdm", + "rdos", + "rdp", + "rds", + "refal", + "rest", + "rf", + "rfc", + "rfi", + "rfid", + "rgb", + "rgba", + "rhel", + "rhl", + "ria", + "riaa", + "rip", + "rir", + "risc", + "rje", + "rle", + "rll", + "rmi", + "rms", + "rom", + "romb", + "rpc", + "rpg", + "rpm", + "rras", + "rsa", + "rsi", + "rss", + "rtai", + "rtc", + "rte", + "rtems", + "rtl", + "rtos", + "rtp", + "rts", + "rtsp", + "rtti", + "rwd", + "san", + "sas", + "sata", + "sax", + "sbod", + "sbu", + "scada", + "scid", + "scm", + "scp", + "scpc", + "scpi", + "scsa", + "scsi", + "sctp", + "sd", + "sddl", + "sdh", + "sdi", + "sdio", + "sdk", + "sdl", + "sdn", + "sdp", + "sdr", + "sdram", + "sdsl", + "se", + "sec", + "sei", + "seo", + "sftp", + "sgi", + "sgml", + "sgr", + "sha", + "shdsl", + "sigcat", + "siggraph", + "simd", + "simm", + "sip", + "sisd", + "siso", + "sles", + "sli", + "slm", + "sloc", + "sma", + "smb", + "smbios", + "sme", + "smf", + "smil", + "smp", + "smps", + "sms", + "smt", + "smtp", + "sna", + "snmp", + "sntp", + "soa", + "soe", + "soho", + "soi", + "sopa", + "sp", + "spa", + "sparc", + "spf", + "spi", + "spm", + "spmd", + "sql", + "sram", + "ssa", + "ssd", + "ssdp", + "sse", + "ssh", + "ssi", + "ssid", + "ssl", + "ssp", + "ssse", + "sssp", + "sstp", + "sus", + "suse", + "svc", + "svd", + "svg", + "svga", + "swf", + "swt", + "tao", + "tapi", + "tasm", + "tb", + "tcp", + "tcu", + "tdma", + "tft", + "tftp", + "ti", + "tla", + "tld", + "tls", + "tlv", + "tnc", + "tpf", + "tpm", + "troff", + "tron", + "trsdos", + "tso", + "tsp", + "tsr", + "tta", + "ttf", + "ttl", + "tts", + "tty", + "tucows", + "twain", + "uaag", + "uac", + "uart", + "uat", + "ucs", + "uddi", + "udma", + "udp", + "uefi", + "uhf", + "ui", + "ul", + "ula", + "uma", + "umb", + "uml", + "umpc", + "umts", + "unc", + "univac", + "ups", + "uri", + "url", + "usb", + "usr", + "utc", + "utf", + "utp", + "utran", + "uucp", + "uuid", + "uun", + "uvc", + "uwp", + "ux", + "vax", + "vb", + "vba", + "vbs", + "vcpi", + "vdm", + "vdsl", + "vesa", + "vfat", + "vfs", + "vg", + "vga", + "vhf", + "vlan", + "vlb", + "vlf", + "vliw", + "vlsi", + "vlsm", + "vm", + "vmm", + "vnc", + "vod", + "vpn", + "vpu", + "vr", + "vram", + "vrml", + "vsam", + "vsat", + "vt", + "vtam", + "vtl", + "wafs", + "wai", + "wais", + "wan", + "wap", + "wasm", + "wbem", + "wcag", + "wcf", + "wdm", + "wep", + "wfi", + "wins", + "wlan", + "wma", + "wmi", + "wmv", + "wns", + "wol", + "wor", + "wora", + "wpa", + "wpad", + "wpan", + "wpf", + "wsdl", + "wsfl", + "wusb", + "wwan", + "wwdc", + "wwid", + "wwn", + "www", + "wysiwyg", + "wzc", + "xag", + "xaml", + "xcbl", + "xdm", + "xdmcp", + "xhtml", + "xilp", + "xml", + "xmms", + "xmpp", + "xms", + "xns", + "xp", + "xpcom", + "xpi", + "xpidl", + "xps", + "xsd", + "xsl", + "xslt", + "xss", + "xtf", + "xul", + "xvga", + "yaaf", + "yacc", + "yaml", + "zcav", + "zcs", + "zif", + "zifs", + "zisc", + "zma", + "zoi", + "zope", + "zpl" +] as const; diff --git a/packages/quicktype-core/src/support/Acronyms.ts b/packages/quicktype-core/src/support/Acronyms.ts index d24c85e97..fa9d29f1b 100644 --- a/packages/quicktype-core/src/support/Acronyms.ts +++ b/packages/quicktype-core/src/support/Acronyms.ts @@ -1,1106 +1,7 @@ import { EnumOption } from "../RendererOptions"; -// eslint-disable-next-line import/no-cycle import { allLowerWordStyle, allUpperWordStyle, firstUpperWordStyle, originalWord } from "./Strings"; -export const acronyms: string[] = [ - "aaa", - "aabb", - "aac", - "aal", - "aalc", - "aarp", - "abac", - "abcl", - "abi", - "abm", - "abr", - "ac", - "acd", - "ack", - "acl", - "acm", - "acme", - "acp", - "acpi", - "acr", - "adb", - "adc", - "adccp", - "ado", - "adsl", - "adt", - "ae", - "aes", - "af", - "afp", - "agp", - "ai", - "aix", - "alac", - "algol", - "alsa", - "alu", - "amd", - "amoled", - "amqp", - "amr", - "ann", - "ansi", - "aop", - "apci", - "api", - "apic", - "apipa", - "apl", - "apr", - "arin", - "aros", - "arp", - "arpa", - "arpanet", - "ascii", - "aset", - "asg", - "asic", - "asimo", - "aslr", - "asm", - "asmp", - "asp", - "asr", - "assp", - "ast", - "ata", - "atag", - "atapi", - "atm", - "av", - "avc", - "avi", - "awfl", - "awk", - "awt", - "bal", - "bam", - "bbp", - "bbs", - "bcd", - "bcnf", - "beep", - "ber", - "bfd", - "bfs", - "bft", - "bgp", - "bi", - "binac", - "bios", - "bjt", - "bmp", - "bnc", - "boinc", - "bom", - "bootp", - "bpdu", - "bpel", - "bpl", - "bpm", - "brm", - "brms", - "brr", - "brs", - "bsa", - "bsb", - "bsd", - "bss", - "bt", - "bw", - "byod", - "ca", - "cad", - "cae", - "cai", - "caid", - "captcha", - "caq", - "cd", - "cde", - "cdfs", - "cdma", - "cdn", - "cdp", - "cdsa", - "cert", - "ces", - "cf", - "cfd", - "cfg", - "cg", - "cga", - "cgi", - "cgt", - "chs", - "cidr", - "cifs", - "cim", - "cio", - "cir", - "cisc", - "cjk", - "cjkv", - "cli", - "clr", - "cm", - "cmdb", - "cmmi", - "cmo", - "cmos", - "cms", - "cn", - "cnc", - "cng", - "cnr", - "cobol", - "com", - "corba", - "cots", - "cpa", - "cpan", - "cpri", - "cps", - "cpu", - "cr", - "cran", - "crc", - "crlf", - "crm", - "crs", - "crt", - "crud", - "cs", - "cse", - "csi", - "csm", - "csp", - "csrf", - "css", - "csv", - "ct", - "ctan", - "ctcp", - "ctfe", - "cti", - "ctl", - "ctm", - "cts", - "ctss", - "cua", - "cvs", - "dac", - "dal", - "dao", - "dap", - "darpa", - "dat", - "db", - "dba", - "dbcs", - "dbms", - "dcc", - "dcca", - "dccp", - "dcl", - "dcmi", - "dcom", - "dcs", - "dd", - "dde", - "ddi", - "ddl", - "ddr", - "dec", - "des", - "dfa", - "dfd", - "dfs", - "dgd", - "dhcp", - "dhtml", - "dif", - "dimm", - "din", - "dip", - "dism", - "divx", - "dkim", - "dl", - "dll", - "dlna", - "dlp", - "dma", - "dmca", - "dmi", - "dml", - "dmr", - "dmz", - "dn", - "dnd", - "dns", - "doa", - "docsis", - "dom", - "dos", - "dp", - "dpc", - "dpi", - "dpmi", - "dpms", - "dr", - "dram", - "dri", - "drm", - "dsa", - "dsdl", - "dsdm", - "dsl", - "dslam", - "dsn", - "dsp", - "dsssl", - "dtd", - "dte", - "dtp", - "dtr", - "dvd", - "dvi", - "dvr", - "dw", - "eai", - "eap", - "eas", - "ebcdic", - "ebml", - "ecc", - "ecma", - "ecn", - "ecos", - "ecrs", - "eda", - "edi", - "edo", - "edsac", - "edvac", - "eeprom", - "eff", - "efi", - "efm", - "efs", - "ega", - "egp", - "eide", - "eigrp", - "eisa", - "elf", - "emacs", - "ems", - "eniac", - "eod", - "eof", - "eol", - "eom", - "eos", - "eprom", - "erd", - "erm", - "erp", - "esb", - "escon", - "esd", - "esr", - "etl", - "etw", - "euc", - "eula", - "ewmh", - "ext", - "fap", - "faq", - "fasm", - "fbdimm", - "fcb", - "fcs", - "fdc", - "fdd", - "fddi", - "fdm", - "fdma", - "fds", - "fec", - "femb", - "fet", - "fhs", - "ficon", - "fifo", - "fips", - "fl", - "flac", - "flops", - "fmc", - "fmo", - "foldoc", - "fosdem", - "fosi", - "foss", - "fp", - "fpga", - "fps", - "fpu", - "fqdn", - "fru", - "fs", - "fsb", - "fsf", - "fsm", - "ftp", - "ftta", - "fttc", - "ftth", - "fttp", - "fud", - "fvek", - "fws", - "fxp", - "fyi", - "gb", - "gcc", - "gcj", - "gcr", - "gdb", - "gdi", - "geran", - "gfdl", - "gif", - "gigo", - "gimps", - "gis", - "gml", - "gnu", - "goms", - "gpasm", - "gpfs", - "gpg", - "gpgpu", - "gpib", - "gpl", - "gprs", - "gpt", - "gpu", - "gsm", - "gui", - "guid", - "gwt", - "gyr", - "hal", - "hasp", - "hba", - "hci", - "hcl", - "hd", - "hdd", - "hdl", - "hdmi", - "hf", - "hfs", - "hhd", - "hid", - "hig", - "hird", - "hlasm", - "hls", - "hma", - "hp", - "hpc", - "hpfs", - "hsdpa", - "hsm", - "ht", - "htc", - "htm", - "html", - "http", - "https", - "htx", - "hurd", - "hvd", - "iana", - "ibm", - "ic", - "icann", - "ich", - "icmp", - "icp", - "ics", - "ict", - "id", - "ide", - "idf", - "idl", - "ids", - "iec", - "ieee", - "ietf", - "ifl", - "igmp", - "igrp", - "ihv", - "iiop", - "iis", - "ike", - "il", - "im", - "imap", - "ime", - "infosec", - "ip", - "ipam", - "ipc", - "ipl", - "ipmi", - "ipo", - "ipp", - "ips", - "iptv", - "ipx", - "ir", - "irc", - "iri", - "irp", - "irq", - "isa", - "isam", - "isatap", - "isc", - "isdn", - "iso", - "isp", - "ispf", - "isr", - "isv", - "itil", - "itl", - "itu", - "ivcr", - "ivrs", - "jaxb", - "jaxp", - "jbod", - "jce", - "jcl", - "jcp", - "jdbc", - "jdk", - "jds", - "jee", - "jes", - "jfc", - "jfet", - "jfs", - "jini", - "jit", - "jme", - "jms", - "jmx", - "jndi", - "jni", - "jnz", - "jpeg", - "jre", - "js", - "jse", - "json", - "jsp", - "jtag", - "jvm", - "kb", - "kde", - "km", - "krl", - "kvm", - "lacp", - "lan", - "lb", - "lba", - "lcd", - "lcos", - "lcr", - "ldap", - "le", - "led", - "lf", - "lfs", - "lga", - "lgpl", - "lib", - "lif", - "lifo", - "lilo", - "lisp", - "lkml", - "lm", - "loc", - "lpc", - "lpi", - "lpt", - "lru", - "lsb", - "lsi", - "lte", - "ltl", - "ltr", - "lun", - "lv", - "lvd", - "lvm", - "lzw", - "mac", - "manet", - "mapi", - "mb", - "mbcs", - "mbd", - "mbr", - "mca", - "mcad", - "mcas", - "mcdba", - "mcdst", - "mcitp", - "mcm", - "mcp", - "mcpc", - "mcpd", - "mcsa", - "mcsd", - "mcse", - "mct", - "mcts", - "mda", - "mdf", - "mdi", - "mf", - "mfc", - "mfm", - "mgcp", - "mib", - "micr", - "midi", - "mimd", - "mime", - "mimo", - "minix", - "mips", - "mis", - "misd", - "mit", - "mmc", - "mmds", - "mmf", - "mmi", - "mmio", - "mmorpg", - "mmu", - "mmx", - "mng", - "mom", - "mos", - "mosfet", - "motd", - "mous", - "mov", - "mpaa", - "mpeg", - "mpl", - "mpls", - "mpu", - "ms", - "msa", - "msb", - "msdn", - "msi", - "msn", - "mt", - "mta", - "mtbf", - "mtu", - "mua", - "mvc", - "mvp", - "mvs", - "mwc", - "mx", - "mxf", - "nack", - "nak", - "nas", - "nasm", - "ncp", - "ncq", - "ncsa", - "ndis", - "ndps", - "nds", - "nep", - "nfa", - "nfc", - "nfs", - "ngl", - "ngscb", - "ni", - "nic", - "nim", - "nio", - "nist", - "nlp", - "nls", - "nmi", - "nntp", - "noc", - "nop", - "nos", - "np", - "npl", - "nptl", - "npu", - "ns", - "nsa", - "nsi", - "nspr", - "nss", - "nt", - "ntfs", - "ntlm", - "ntp", - "numa", - "nurbs", - "nvr", - "nvram", - "oat", - "obsai", - "odbc", - "oem", - "oes", - "ofdm", - "oftc", - "oid", - "olap", - "ole", - "oled", - "olpc", - "oltp", - "omf", - "omg", - "omr", - "oo", - "ooe", - "oom", - "oop", - "ootb", - "opml", - "orb", - "orm", - "os", - "oscon", - "osdn", - "osi", - "ospf", - "oss", - "ostg", - "oui", - "pap", - "parc", - "pata", - "pbs", - "pc", - "pcb", - "pci", - "pcl", - "pcm", - "pcmcia", - "pcre", - "pd", - "pda", - "pdf", - "pdh", - "pdp", - "pe", - "perl", - "pfa", - "pg", - "pga", - "pgo", - "pgp", - "php", - "pid", - "pim", - "pio", - "pkcs", - "pki", - "plc", - "pld", - "plt", - "pmm", - "png", - "pnrp", - "poid", - "pojo", - "posix", - "ppc", - "ppi", - "ppp", - "pptp", - "pr", - "ps", - "psa", - "psm", - "psu", - "psvi", - "pv", - "pvg", - "pvr", - "pxe", - "pxi", - "qa", - "qdr", - "qfp", - "qotd", - "qsop", - "qtam", - "racf", - "rad", - "raid", - "raii", - "rait", - "ram", - "rarp", - "ras", - "rc", - "rcs", - "rd", - "rdbms", - "rdc", - "rdf", - "rdm", - "rdos", - "rdp", - "rds", - "refal", - "rest", - "rf", - "rfc", - "rfi", - "rfid", - "rgb", - "rgba", - "rhel", - "rhl", - "ria", - "riaa", - "rip", - "rir", - "risc", - "rje", - "rle", - "rll", - "rmi", - "rms", - "rom", - "romb", - "rpc", - "rpg", - "rpm", - "rras", - "rsa", - "rsi", - "rss", - "rtai", - "rtc", - "rte", - "rtems", - "rtl", - "rtos", - "rtp", - "rts", - "rtsp", - "rtti", - "rwd", - "san", - "sas", - "sata", - "sax", - "sbod", - "sbu", - "scada", - "scid", - "scm", - "scp", - "scpc", - "scpi", - "scsa", - "scsi", - "sctp", - "sd", - "sddl", - "sdh", - "sdi", - "sdio", - "sdk", - "sdl", - "sdn", - "sdp", - "sdr", - "sdram", - "sdsl", - "se", - "sec", - "sei", - "seo", - "sftp", - "sgi", - "sgml", - "sgr", - "sha", - "shdsl", - "sigcat", - "siggraph", - "simd", - "simm", - "sip", - "sisd", - "siso", - "sles", - "sli", - "slm", - "sloc", - "sma", - "smb", - "smbios", - "sme", - "smf", - "smil", - "smp", - "smps", - "sms", - "smt", - "smtp", - "sna", - "snmp", - "sntp", - "soa", - "soe", - "soho", - "soi", - "sopa", - "sp", - "spa", - "sparc", - "spf", - "spi", - "spm", - "spmd", - "sql", - "sram", - "ssa", - "ssd", - "ssdp", - "sse", - "ssh", - "ssi", - "ssid", - "ssl", - "ssp", - "ssse", - "sssp", - "sstp", - "sus", - "suse", - "svc", - "svd", - "svg", - "svga", - "swf", - "swt", - "tao", - "tapi", - "tasm", - "tb", - "tcp", - "tcu", - "tdma", - "tft", - "tftp", - "ti", - "tla", - "tld", - "tls", - "tlv", - "tnc", - "tpf", - "tpm", - "troff", - "tron", - "trsdos", - "tso", - "tsp", - "tsr", - "tta", - "ttf", - "ttl", - "tts", - "tty", - "tucows", - "twain", - "uaag", - "uac", - "uart", - "uat", - "ucs", - "uddi", - "udma", - "udp", - "uefi", - "uhf", - "ui", - "ul", - "ula", - "uma", - "umb", - "uml", - "umpc", - "umts", - "unc", - "univac", - "ups", - "uri", - "url", - "usb", - "usr", - "utc", - "utf", - "utp", - "utran", - "uucp", - "uuid", - "uun", - "uvc", - "uwp", - "ux", - "vax", - "vb", - "vba", - "vbs", - "vcpi", - "vdm", - "vdsl", - "vesa", - "vfat", - "vfs", - "vg", - "vga", - "vhf", - "vlan", - "vlb", - "vlf", - "vliw", - "vlsi", - "vlsm", - "vm", - "vmm", - "vnc", - "vod", - "vpn", - "vpu", - "vr", - "vram", - "vrml", - "vsam", - "vsat", - "vt", - "vtam", - "vtl", - "wafs", - "wai", - "wais", - "wan", - "wap", - "wasm", - "wbem", - "wcag", - "wcf", - "wdm", - "wep", - "wfi", - "wins", - "wlan", - "wma", - "wmi", - "wmv", - "wns", - "wol", - "wor", - "wora", - "wpa", - "wpad", - "wpan", - "wpf", - "wsdl", - "wsfl", - "wusb", - "wwan", - "wwdc", - "wwid", - "wwn", - "www", - "wysiwyg", - "wzc", - "xag", - "xaml", - "xcbl", - "xdm", - "xdmcp", - "xhtml", - "xilp", - "xml", - "xmms", - "xmpp", - "xms", - "xns", - "xp", - "xpcom", - "xpi", - "xpidl", - "xps", - "xsd", - "xsl", - "xslt", - "xss", - "xtf", - "xul", - "xvga", - "yaaf", - "yacc", - "yaml", - "zcav", - "zcs", - "zif", - "zifs", - "zisc", - "zma", - "zoi", - "zope", - "zpl" -]; - export enum AcronymStyleOptions { Camel = "camel", Lower = "lowerCase", @@ -1123,13 +24,15 @@ export const acronymOption = function (defaultOption: AcronymStyleOptions): Enum ); }; -export function acronymStyle(style: AcronymStyleOptions): (s: string) => string { - const options: { [key: string]: (s: string) => string } = { - [AcronymStyleOptions.Pascal]: allUpperWordStyle, - [AcronymStyleOptions.Camel]: firstUpperWordStyle, - [AcronymStyleOptions.Original]: originalWord, - [AcronymStyleOptions.Lower]: allLowerWordStyle - }; +const options = { + [AcronymStyleOptions.Pascal]: allUpperWordStyle, + [AcronymStyleOptions.Camel]: firstUpperWordStyle, + [AcronymStyleOptions.Original]: originalWord, + [AcronymStyleOptions.Lower]: allLowerWordStyle +} as const; +export function acronymStyle( + style: AcronymStyle +): (typeof options)[AcronymStyle] { return options[style]; } diff --git a/packages/quicktype-core/src/support/Strings.ts b/packages/quicktype-core/src/support/Strings.ts index bd76ee4f9..1b0614ad5 100644 --- a/packages/quicktype-core/src/support/Strings.ts +++ b/packages/quicktype-core/src/support/Strings.ts @@ -2,8 +2,7 @@ import unicode from "unicode-properties"; import { messageAssert } from "../Messages"; -// eslint-disable-next-line import/no-cycle -import { acronyms } from "./Acronyms"; +import { acronyms } from "./Acronyms.const"; import { assert, assertNever, defined, panic } from "./Support"; export type NamingStyle = @@ -456,7 +455,9 @@ export function splitIntoWords(s: string): WordInName[] { const words: WordInName[] = []; for (const [start, end, allUpper] of intervals) { const word = s.slice(start, end); - const isAcronym = (lastLowerCaseIndex !== undefined && allUpper) || knownAcronyms.has(word.toLowerCase()); + const isAcronym = + (lastLowerCaseIndex !== undefined && allUpper) || + knownAcronyms.has(word.toLowerCase() as (typeof acronyms)[number]); words.push({ word, isAcronym }); } From 37320e76f718b2778f90db2a89cfd69a078fb980 Mon Sep 17 00:00:00 2001 From: angus <106070053+alpoi-x@users.noreply.github.com> Date: Mon, 20 Jan 2025 18:55:37 +0000 Subject: [PATCH 82/99] feat(python): add --pydantic-base-model option (#2604) --- .../src/language/Python/PythonRenderer.ts | 15 +++++++++++---- .../src/language/Python/language.ts | 10 ++++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/quicktype-core/src/language/Python/PythonRenderer.ts b/packages/quicktype-core/src/language/Python/PythonRenderer.ts index 63ec3c70d..02dbed4e0 100644 --- a/packages/quicktype-core/src/language/Python/PythonRenderer.ts +++ b/packages/quicktype-core/src/language/Python/PythonRenderer.ts @@ -138,7 +138,11 @@ export class PythonRenderer extends ConvenienceRenderer { if (hasNull !== null) { let rest: string[] = []; - if (!this.getAlphabetizeProperties() && this.pyOptions.features.dataClasses && _isRootTypeDef) { + if ( + !this.getAlphabetizeProperties() && + (this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel) && + _isRootTypeDef + ) { // Only push "= None" if this is a root level type def // otherwise we may get type defs like List[Optional[int] = None] // which are invalid @@ -177,6 +181,9 @@ export class PythonRenderer extends ConvenienceRenderer { protected declarationLine(t: Type): Sourcelike { if (t instanceof ClassType) { + if (this.pyOptions.pydanticBaseModel) { + return ["class ", this.nameForNamedType(t), "(", this.withImport("pydantic", "BaseModel"), "):"]; + } return ["class ", this.nameForNamedType(t), ":"]; } @@ -196,7 +203,7 @@ export class PythonRenderer extends ConvenienceRenderer { } protected emitClassMembers(t: ClassType): void { - if (this.pyOptions.features.dataClasses) return; + if (this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel) return; const args: Sourcelike[] = []; this.forEachClassProperty(t, "none", (name, _, cp) => { @@ -236,7 +243,7 @@ export class PythonRenderer extends ConvenienceRenderer { properties: ReadonlyMap, propertyNames: ReadonlyMap ): ReadonlyMap { - if (this.pyOptions.features.dataClasses) { + if (this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel) { return mapSortBy(properties, (p: ClassProperty) => { return (p.type instanceof UnionType && nullableFromUnion(p.type) != null) || p.isOptional ? 1 : 0; }); @@ -246,7 +253,7 @@ export class PythonRenderer extends ConvenienceRenderer { } protected emitClass(t: ClassType): void { - if (this.pyOptions.features.dataClasses) { + if (this.pyOptions.features.dataClasses && !this.pyOptions.pydanticBaseModel) { this.emitLine("@", this.withImport("dataclasses", "dataclass")); } diff --git a/packages/quicktype-core/src/language/Python/language.ts b/packages/quicktype-core/src/language/Python/language.ts index e6aac1d87..4f57ec059 100644 --- a/packages/quicktype-core/src/language/Python/language.ts +++ b/packages/quicktype-core/src/language/Python/language.ts @@ -27,12 +27,18 @@ export const pythonOptions = { "3.6" ), justTypes: new BooleanOption("just-types", "Classes only", false), - nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be Pythonic", true) + nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be Pythonic", true), + pydanticBaseModel: new BooleanOption("pydantic-base-model", "Uses pydantic BaseModel", false) }; export class PythonTargetLanguage extends TargetLanguage { protected getOptions(): Array> { - return [pythonOptions.features, pythonOptions.justTypes, pythonOptions.nicePropertyNames]; + return [ + pythonOptions.features, + pythonOptions.justTypes, + pythonOptions.nicePropertyNames, + pythonOptions.pydanticBaseModel + ]; } public get stringTypeMapping(): StringTypeMapping { From c7837e64f893c801b6ccfb2a7d85e793d543cc5f Mon Sep 17 00:00:00 2001 From: Andrew Valleteau Date: Wed, 23 Apr 2025 17:42:59 +0200 Subject: [PATCH 83/99] fix: punycode error for non CI (#2587) * fix: punycode error for non CI * chore: remove build artifacts * fix: import add comment --------- Co-authored-by: avallete --- packages/quicktype-core/src/input/io/NodeIO.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/quicktype-core/src/input/io/NodeIO.ts b/packages/quicktype-core/src/input/io/NodeIO.ts index 885f5b57f..f93f20a0e 100644 --- a/packages/quicktype-core/src/input/io/NodeIO.ts +++ b/packages/quicktype-core/src/input/io/NodeIO.ts @@ -2,7 +2,6 @@ import * as fs from "fs"; import { defined, exceptionToString } from "@glideapps/ts-necessities"; import { isNode } from "browser-or-node"; -import _fetch from "cross-fetch"; import isURL from "is-url"; import { type Readable } from "readable-stream"; @@ -11,10 +10,9 @@ import { panic } from "../../support/Support"; import { getStream } from "./get-stream"; -// Only use cross-fetch in CI -// FIXME: type global -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const fetch = process.env.CI ? _fetch : (global as any).fetch ?? _fetch; +// We need to use cross-fetch in CI or if fetch is not available in the global scope +// We use a dynamic import to avoid punycode deprecated dependency warning on node > 20 +const fetch = process.env.CI ? require("cross-fetch").default : (global as any).fetch ?? require("cross-fetch").default; interface HttpHeaders { [key: string]: string; From 63db12c42317e198d7c1868da945b48cfbd7a85c Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Thu, 24 Apr 2025 07:38:46 -0700 Subject: [PATCH 84/99] fix: Revert GH Actions to use Ubuntu 22.04 (#2701) * update gh actions test step to use ubuntu 22.04 instead of latest due to issues with 24.04 --- .github/workflows/master.yaml | 2 +- .github/workflows/setup/action.yaml | 2 +- .github/workflows/test-pr.yaml | 22 +++++++++---------- .nvmrc | 2 +- test/fixtures.ts | 4 +++- .../csharp-SystemTextJson/test.csproj | 4 ++-- test/utils.ts | 2 +- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/.github/workflows/master.yaml b/.github/workflows/master.yaml index 5fa9ed17c..2a099c2d4 100644 --- a/.github/workflows/master.yaml +++ b/.github/workflows/master.yaml @@ -6,7 +6,7 @@ on: jobs: publish: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup diff --git a/.github/workflows/setup/action.yaml b/.github/workflows/setup/action.yaml index 89c7367ee..6eb937510 100644 --- a/.github/workflows/setup/action.yaml +++ b/.github/workflows/setup/action.yaml @@ -19,7 +19,7 @@ runs: echo "source_key=$SOURCE_KEY" >> $GITHUB_ENV - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index f238c1a03..b18612a7c 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -6,7 +6,7 @@ on: - 'release/**' jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup @@ -45,7 +45,7 @@ jobs: # Implementation is too outdated to test in GitHub Actions # - elm,schema-elm - # Language is too niche / obscure to test easily on ubuntu-latest + # Language is too niche / obscure to test easily on ubuntu-22.04 # - pike,schema-pike # Not yet started @@ -56,18 +56,18 @@ jobs: # Never tested? # - crystal - runs-on: [ubuntu-latest] + runs-on: [ubuntu-22.04] include: # Rust is very slow, so we use a larger runner - fixture: rust,schema-rust - runs-on: ubuntu-latest-8-cores + runs-on: ubuntu-latest-16-cores # Kotlin is also slow - fixture: kotlin,schema-kotlin,kotlin-jackson,schema-kotlin-jackson - runs-on: ubuntu-latest-8-cores + runs-on: ubuntu-latest-16-cores - - fixture: objective-c - runs-on: macos-11 + # - fixture: objective-c # FIXME: temp disable obj-c in ci + # runs-on: macos-latest name: ${{ matrix.fixture }} steps: @@ -190,8 +190,8 @@ jobs: test-complete: if: ${{ cancelled() || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'failure') }} needs: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - run: | - echo "Some workflows have failed!" - exit 1 + - run: | + echo "Some workflows have failed!" + exit 1 diff --git a/.nvmrc b/.nvmrc index 6aab9b43f..517f38666 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.18.0 +v22.14.0 diff --git a/test/fixtures.ts b/test/fixtures.ts index 1aa5e5c0c..2e0759db9 100644 --- a/test/fixtures.ts +++ b/test/fixtures.ts @@ -278,7 +278,9 @@ class JSONFixture extends LanguageFixture { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); } - if (this.language.runCommand === undefined) return 0; + if (this.language.runCommand === undefined) { + return 0; + } compareJsonFileToJson(comparisonArgs(this.language, filename, filename, additionalRendererOptions)); diff --git a/test/fixtures/csharp-SystemTextJson/test.csproj b/test/fixtures/csharp-SystemTextJson/test.csproj index 22a4b741a..1f5224ffd 100755 --- a/test/fixtures/csharp-SystemTextJson/test.csproj +++ b/test/fixtures/csharp-SystemTextJson/test.csproj @@ -4,6 +4,6 @@ net6 - + - \ No newline at end of file + diff --git a/test/utils.ts b/test/utils.ts index f2fa81fe9..b53715d24 100644 --- a/test/utils.ts +++ b/test/utils.ts @@ -215,7 +215,7 @@ export type ComparisonRelaxations = { export type FileOrCommand = { file: string } | { command: string; env: NodeJS.ProcessEnv }; function fileOrCommandIsFile(foc: FileOrCommand): foc is { file: string } { - return (foc as any).file !== undefined; + return "file" in foc && foc.file !== undefined; } export type ComparisonArgs = ComparisonRelaxations & { From d1a3956177b8cc39f106459794a24d8afb9c3671 Mon Sep 17 00:00:00 2001 From: Thorsten Essig Date: Thu, 24 Apr 2025 17:00:09 +0200 Subject: [PATCH 85/99] Refine Go renderer's generated file header comment. (#2708) Updated the header comment for Go files to align with standard conventions. Go tools, like golangci-lint, often rely on this comment format. see https://pkg.go.dev/cmd/go#hdr-Generate_Go_files_by_processing_source Co-authored-by: inferrinizzard --- packages/quicktype-core/src/language/Golang/GolangRenderer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts index 708666452..9c78d9860 100644 --- a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts +++ b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts @@ -161,7 +161,7 @@ export class GoRenderer extends ConvenienceRenderer { this.leadingComments === undefined ) { this.emitLineOnce( - "// This file was generated from JSON Schema using quicktype, do not modify it directly." + "// Code generated from JSON Schema using quicktype. DO NOT EDIT." ); this.emitLineOnce("// To parse and unparse this JSON data, add this code to your project and do:"); this.emitLineOnce("//"); @@ -343,7 +343,7 @@ export class GoRenderer extends ConvenienceRenderer { } private emitSingleFileHeaderComments(): void { - this.emitLineOnce("// This file was generated from JSON Schema using quicktype, do not modify it directly."); + this.emitLineOnce("// Code generated from JSON Schema using quicktype. DO NOT EDIT."); this.emitLineOnce("// To parse and unparse this JSON data, add this code to your project and do:"); this.forEachTopLevel("none", (_: Type, name: Name) => { this.emitLine("//"); From 96f888ed4b6f9062870ddeaa7b9c047ab1b4d09f Mon Sep 17 00:00:00 2001 From: Joe Hosteny Date: Thu, 24 Apr 2025 11:02:20 -0400 Subject: [PATCH 86/99] feat: expose various emit functions to subclasses (#2658) --- .../src/language/Elixir/ElixirRenderer.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts index 3665836a5..f660cd0f5 100644 --- a/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts +++ b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts @@ -231,7 +231,7 @@ export class ElixirRenderer extends ConvenienceRenderer { }); } - private emitPatternMatches( + protected emitPatternMatches( types: Type[], name: Sourcelike, parentName: Sourcelike, @@ -548,7 +548,7 @@ export class ElixirRenderer extends ConvenienceRenderer { ); } - private emitBlock(source: Sourcelike, emit: () => void): void { + protected emitBlock(source: Sourcelike, emit: () => void): void { this.emitLine(source); this.indent(emit); this.emitLine("end"); @@ -562,7 +562,7 @@ export class ElixirRenderer extends ConvenienceRenderer { }); } - private emitModule(c: ClassType, moduleName: Name): void { + protected emitModule(c: ClassType, moduleName: Name): void { this.emitBlock(["defmodule ", this.nameWithNamespace(moduleName), " do"], () => { const structDescription = this.descriptionForType(c) ?? []; const attributeDescriptions: Sourcelike[][] = []; @@ -750,7 +750,7 @@ export class ElixirRenderer extends ConvenienceRenderer { return true; } - private emitEnum(e: EnumType, enumName: Name): void { + protected emitEnum(e: EnumType, enumName: Name): void { this.emitBlock(["defmodule ", this.nameWithNamespace(enumName), " do"], () => { this.emitDescription(this.descriptionForType(e)); this.emitLine("@valid_enum_members ["); @@ -809,7 +809,7 @@ end`); }); } - private emitUnion(_u: UnionType, _unionName: Name): void { + protected emitUnion(_u: UnionType, _unionName: Name): void { return; } From 12652765eee8f9ee5a3492429940358855642d3f Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sun, 27 Apr 2025 18:20:11 -0700 Subject: [PATCH 87/99] Disable Swift CI check due to gpg issue (#2712) * temp disable swift --- .github/workflows/test-pr.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index b18612a7c..d497d9b1c 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -3,7 +3,7 @@ on: pull_request: branches: - master - - 'release/**' + - "release/**" jobs: build: runs-on: ubuntu-22.04 @@ -32,7 +32,7 @@ jobs: - csharp,schema-csharp,schema-json-csharp,graphql-csharp,csharp-SystemTextJson - json-ts-csharp - dart,schema-dart - - swift,schema-swift + # - swift,schema-swift # pgp issue - javascript-prop-types - ruby - php @@ -66,7 +66,7 @@ jobs: - fixture: kotlin,schema-kotlin,kotlin-jackson,schema-kotlin-jackson runs-on: ubuntu-latest-16-cores - # - fixture: objective-c # FIXME: temp disable obj-c in ci + # - fixture: objective-c # segfault on compiled test cmd # runs-on: macos-latest name: ${{ matrix.fixture }} From da1238c097e20e26581618134a0e1ad43adb7037 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Mon, 28 Apr 2025 08:07:23 -0700 Subject: [PATCH 88/99] release: Quicktype v23.1.0 (#2610) * feat: Add const typing for Language Names (#2554) * feat: feat: Strongly type Language Options (#2611) --- .prettierrc | 2 +- README.md | 5 + doc/CustomRenderer.md | 145 ++ package.json | 2 +- packages/quicktype-core/src/Messages.ts | 33 +- .../quicktype-core/src/RendererOptions.ts | 193 --- .../src/RendererOptions/index.ts | 178 ++ .../src/RendererOptions/types.ts | 33 + packages/quicktype-core/src/Run.ts | 14 +- packages/quicktype-core/src/TargetLanguage.ts | 45 +- packages/quicktype-core/src/TypeUtils.ts | 6 +- packages/quicktype-core/src/index.ts | 3 +- packages/quicktype-core/src/input/Inputs.ts | 3 +- packages/quicktype-core/src/language/All.ts | 41 +- .../src/language/CJSON/language.ts | 118 +- .../src/language/CPlusPlus/language.ts | 122 +- .../src/language/CSharp/language.ts | 121 +- .../src/language/Crystal/language.ts | 22 +- .../src/language/Dart/language.ts | 26 +- .../src/language/Elixir/language.ts | 18 +- .../src/language/Elm/language.ts | 31 +- .../src/language/Golang/language.ts | 25 +- .../src/language/Haskell/language.ts | 31 +- .../src/language/JSONSchema/language.ts | 17 +- packages/quicktype-core/src/language/Java.ts | 1523 ----------------- .../src/language/Java/language.ts | 41 +- .../src/language/JavaScript/language.ts | 36 +- .../language/JavaScriptPropTypes/language.ts | 32 +- .../src/language/Kotlin/language.ts | 45 +- .../Objective-C/ObjectiveCRenderer.ts | 4 +- .../src/language/Objective-C/language.ts | 45 +- .../src/language/Php/language.ts | 21 +- .../src/language/Pike/language.ts | 16 +- .../src/language/Python/language.ts | 33 +- .../src/language/Ruby/language.ts | 33 +- .../src/language/Rust/language.ts | 63 +- .../src/language/Scala3/language.ts | 42 +- .../src/language/Smithy4s/language.ts | 26 +- .../src/language/Swift/language.ts | 76 +- .../TypeScriptEffectSchema/language.ts | 24 +- .../src/language/TypeScriptFlow/language.ts | 88 +- .../src/language/TypeScriptZod/language.ts | 24 +- packages/quicktype-core/src/language/index.ts | 4 + .../src/language/options.types.ts | 15 + packages/quicktype-core/src/language/types.ts | 15 + .../quicktype-core/src/support/Acronyms.ts | 14 +- .../quicktype-core/src/support/Converters.ts | 10 +- packages/quicktype-core/src/types.ts | 7 +- packages/quicktype-vscode/src/extension.ts | 25 +- src/index.ts | 57 +- test/fixtures.ts | 11 +- test/languages.ts | 8 +- 52 files changed, 1161 insertions(+), 2411 deletions(-) create mode 100644 doc/CustomRenderer.md delete mode 100644 packages/quicktype-core/src/RendererOptions.ts create mode 100644 packages/quicktype-core/src/RendererOptions/index.ts create mode 100644 packages/quicktype-core/src/RendererOptions/types.ts delete mode 100644 packages/quicktype-core/src/language/Java.ts create mode 100644 packages/quicktype-core/src/language/options.types.ts create mode 100644 packages/quicktype-core/src/language/types.ts diff --git a/.prettierrc b/.prettierrc index 1e80e79ea..994784875 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1 +1 @@ -{ "tabWidth": 4, "printWidth": 120, "trailingComma": "none", "arrowParens": "avoid" } +{ "tabWidth": 4, "printWidth": 120, "trailingComma": "none", "arrowParens": "avoid", "quoteProps": "consistent" } diff --git a/README.md b/README.md index b8a93cb39..9d9fcbbf9 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,11 @@ main(); The argument to `quicktype` is a complex object with many optional properties. [Explore its definition](https://github.com/quicktype/quicktype/blob/master/packages/quicktype-core/src/Run.ts#L637) to understand what options are allowed. +### Adding Custom logic or Rendering: + +Quicktype supports creating your own custom languages and rendering output, you can extend existing classes or create your own to be using by the `quicktype function`.
      +Check out [this guide](./doc/CustomRenderer.md) for more info. + ## Contributing `quicktype` is [Open Source](LICENSE) and we love contributors! In fact, we have a [list of issues](https://github.com/quicktype/quicktype/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3Ahelp-wanted) that are low-priority for us, but for which we'd happily accept contributions. Support for new target languages is also strongly desired. If you'd like to contribute, need help with anything at all, or would just like to talk things over, come [join us on Slack](http://slack.quicktype.io/). diff --git a/doc/CustomRenderer.md b/doc/CustomRenderer.md new file mode 100644 index 000000000..42040e393 --- /dev/null +++ b/doc/CustomRenderer.md @@ -0,0 +1,145 @@ +# Extending quicktype functionality with a Custom Renderer + +## quicktype Interface + +To customise your rendering output, you can extend existing quicktype classes and override existing methods to achieve the behaviour you want. + +This process requires 3 main steps: + +1. [Extending a `Renderer` Class](#creating-a-custom-renderer) +2. [Wrapping your `Renderer` in a `TargetLanguage` Class](#creating-a-targetlanguage) +3. [Using your new classes in the `quicktype` function](#using-your-custom-language) +4. [Advanced Usage: Creating an entirely new Language](#creating-a-new-language) + +## Creating a custom `Renderer` + +Adding custom render logic for an existing language often involves extending a Renderer class and simply overriding or amending one of the `emit` methods: + +```ts +// MyCustomRenderer.ts +import { CSharpRenderer } from "quicktype-core"; + +export class MyCustomRenderer extends CSharpRenderer { + // Add your custom logic here, feel free to reference the source code for how existing methods work + // + // ex. + protected superclassForType(t: Type): Sourcelike | undefined { + // if the type is a class, it should extend `GameObject` when rendered in C# + if (t instanceof ClassType) { + return "GameObject"; + } + return undefined; + } + // See: http://blog.quicktype.io/customizing-quicktype/ for more context +} +``` + +## Creating a `TargetLanguage` + +If you just want to change the rendering logic for an existing language, you can just extend an exported Language class (`CSharpTargetLanguage` in this example) and override the `makeRenderer` method: + +```ts +// MyCustomLanguage.ts +import { CSharpTargetLanguage } from "quicktype-core"; + +import { MyCustomRenderer } from "./MyCustomRenderer"; + +export class MyCustomLanguage extends CSharpTargetLanguage { + // `makeRenderer` instantiates the Renderer class for the TargetLanguage + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: Record + ): MyCustomRenderer { + // use your new custom renderer class here + return new MyCustomRenderer(this, renderContext, getOptionValues(cSharpOptions, untypedOptionValues)); + } +} +``` + +## Using your custom Language + +```ts +import { quicktype } from "quicktype-core"; + +import { MyCustomLanguage } from './MyCustomLanguage'; + +const lang = new MyCustomLanguage(); + +const lines = await quicktype({ + lang: lang, // use your new TargetLanguage in the `lang` field here + ... +}); + +console.log(lines); +``` + +## Creating a new Language + +If none of the existing `quicktype` Language classes suit your needs, you can creating your own `TargetLanguge` and `Renderer` classes from scratch. If this satisfies your use cases for a language we don't currently support, please consider opening a PR with your new language and we'd love to take a look. + +If you run into any issues, you can open a GitHub issue and we'll help you take a look. + +### Creating a `TargetLanguage` from scratch + +Instead of just extending an existing language, a new Language requires two additional steps: + +- Defining the language config +- Adding any language-specific options + +```ts +import { TargetLanguage, BooleanOption } from "quicktype-core"; + +// language config +const brandNewLanguageConfig = { + displayName: "Scratch", // these can be the same + names: ["scratch"], // these can be the same + extension: "sb" // the file extension that this language commonly has +} as const; + +// language options +const brandNewLanguageOptions = { + allowFoo: new BooleanOption( + "allow-foo", // option name + "Allows Foo", // description + true // default value + ) + // The default available Option classes are: StringOption, BooleanOption, EnumOption + // Please visit the source code for more examples and usage +}; + +class BrandNewLanguage extends TargetLanguage { + public constructor() { + super(brandNewLanguageConfig); + } + + public getOptions(): typeof brandNewLanguageOptions { + return brandNewLanguageOptions; + } + + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: Record + ): BrandNewRenderer { + return new BrandNewRenderer(this, renderContext, getOptionValues(brandNewLanguageOptions, untypedOptionValues)); + } +} +``` + +### Creating a `Renderer` from scratch + +Creating a brand new `Renderer` class is very similar to extending an existing class: + +```ts +export class BrandNewRenderer extends ConvenienceRenderer { + public constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { + super(targetLanguage, renderContext); + } + + // Additional render methods go here + // Please reference existing Renderer classes and open a GitHub issue if you need help +} +``` + +## Links + +Blog post with an older example: http://blog.quicktype.io/customizing-quicktype/ diff --git a/package.json b/package.json index 2c8c4aede..c3bf3c397 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "quicktype", - "version": "23.0.0", + "version": "23.1.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/quicktype-core/src/Messages.ts b/packages/quicktype-core/src/Messages.ts index 0c945480a..28407960a 100644 --- a/packages/quicktype-core/src/Messages.ts +++ b/packages/quicktype-core/src/Messages.ts @@ -80,7 +80,7 @@ export type ErrorProperties = // TypeScript input | { kind: "TypeScriptCompilerError"; properties: { message: string } }; -export type ErrorKinds = ErrorProperties extends { kind: infer K } ? K : never; +export type ErrorKinds = ErrorProperties["kind"]; type ErrorMessages = { readonly [K in ErrorKinds]: string }; @@ -165,7 +165,7 @@ const errorMessages: ErrorMessages = { TypeScriptCompilerError: "TypeScript error: ${message}" }; -export type ErrorPropertiesForName = +export type ErrorPropertiesForKind = Extract extends { properties: infer P } ? P : never; export class QuickTypeError extends Error { @@ -179,31 +179,30 @@ export class QuickTypeError extends Error { } } -export function messageError(kind: N, properties: ErrorPropertiesForName): never { +export function messageError(kind: Kind, properties: ErrorPropertiesForKind): never { const message = errorMessages[kind]; let userMessage: string = message; - const propertiesMap = properties as StringMap; - - for (const name of Object.getOwnPropertyNames(propertiesMap)) { - let value = propertiesMap[name]; - if (typeof value === "object" && typeof value.toString === "function") { - value = value.toString(); - } else if (typeof value.message === "string") { - value = value.message; + + for (const [name, value] of Object.entries(properties as StringMap)) { + let valueString = ""; + if (typeof value === "object" && typeof value?.toString === "function") { + valueString = value.toString(); + } else if (typeof value?.message === "string") { + valueString = value.message; } else if (typeof value !== "string") { - value = JSON.stringify(value); + valueString = JSON.stringify(value); } - userMessage = userMessage.replace("${" + name + "}", value); + userMessage = userMessage.replace("${" + name + "}", valueString); } - throw new QuickTypeError(message, kind, userMessage, propertiesMap); + throw new QuickTypeError(message, kind, userMessage, properties as StringMap); } -export function messageAssert( +export function messageAssert( assertion: boolean, - kind: N, - properties: ErrorPropertiesForName + kind: Kind, + properties: ErrorPropertiesForKind ): void { if (assertion) return; return messageError(kind, properties); diff --git a/packages/quicktype-core/src/RendererOptions.ts b/packages/quicktype-core/src/RendererOptions.ts deleted file mode 100644 index 77f95c228..000000000 --- a/packages/quicktype-core/src/RendererOptions.ts +++ /dev/null @@ -1,193 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-redeclare -import { hasOwnProperty } from "collection-utils"; - -import { messageError } from "./Messages"; -import { assert } from "./support/Support"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "./types"; - -/** - * Primary options show up in the web UI in the "Language" settings tab, - * secondary options in "Other". - */ -export type OptionKind = "primary" | "secondary"; - -export interface OptionDefinition { - alias?: string; - defaultOption?: boolean; - defaultValue?: FixMeOptionsAnyType; - description: string; - kind?: OptionKind; - legalValues?: string[]; - multiple?: boolean; - name: string; - renderer?: boolean; - type: StringConstructor | BooleanConstructor; - typeLabel?: string; -} - -/** - * The superclass for target language options. You probably want to use one of its - * subclasses, `BooleanOption`, `EnumOption`, or `StringOption`. - */ -export abstract class Option { - public readonly definition: OptionDefinition; - - public constructor(definition: OptionDefinition) { - definition.renderer = true; - this.definition = definition; - assert(definition.kind !== undefined, "Renderer option kind must be defined"); - } - - public getValue(values: FixMeOptionsType): T { - const value = values[this.definition.name]; - if (value === undefined) { - return this.definition.defaultValue; - } - - return value; - } - - public get cliDefinitions(): { actual: OptionDefinition[]; display: OptionDefinition[] } { - return { actual: [this.definition], display: [this.definition] }; - } -} - -export type OptionValueType = O extends Option ? T : never; -export type OptionValues = { [P in keyof T]: OptionValueType }; - -export function getOptionValues }>( - options: T, - untypedOptionValues: FixMeOptionsType -): OptionValues { - const optionValues: FixMeOptionsType = {}; - for (const name of Object.getOwnPropertyNames(options)) { - optionValues[name] = options[name].getValue(untypedOptionValues); - } - - return optionValues as OptionValues; -} - -/** - * A target language option that allows setting a boolean flag. - */ -export class BooleanOption extends Option { - /** - * @param name The shorthand name. - * @param description Short-ish description of the option. - * @param defaultValue The default value. - * @param kind Whether it's a primary or secondary option. - */ - public constructor(name: string, description: string, defaultValue: boolean, kind: OptionKind = "primary") { - super({ - name, - kind, - type: Boolean, - description, - defaultValue - }); - } - - public get cliDefinitions(): { actual: OptionDefinition[]; display: OptionDefinition[] } { - const negated = Object.assign({}, this.definition, { - name: `no-${this.definition.name}`, - defaultValue: !this.definition.defaultValue - }); - const display = Object.assign({}, this.definition, { - name: `[no-]${this.definition.name}`, - description: `${this.definition.description} (${this.definition.defaultValue ? "on" : "off"} by default)` - }); - return { - display: [display], - actual: [this.definition, negated] - }; - } - - public getValue(values: FixMeOptionsType): boolean { - let value = values[this.definition.name]; - if (value === undefined) { - value = this.definition.defaultValue; - } - - let negated = values[`no-${this.definition.name}`]; - if (negated === undefined) { - negated = !this.definition.defaultValue; - } - - if (value === "true") { - value = true; - } else if (value === "false") { - value = false; - } - - if (this.definition.defaultValue) { - return value && !negated; - } else { - return value || !negated; - } - } -} - -export class StringOption extends Option { - public constructor( - name: string, - description: string, - typeLabel: string, - defaultValue: string, - kind: OptionKind = "primary" - ) { - const definition = { - name, - kind, - type: String, - description, - typeLabel, - defaultValue - }; - super(definition); - } -} - -export class EnumOption extends Option { - private readonly _values: { [name: string]: T }; - - public constructor( - name: string, - description: string, - values: Array<[string, T]>, - defaultValue: string | undefined = undefined, - kind: OptionKind = "primary" - ) { - if (defaultValue === undefined) { - defaultValue = values[0][0]; - } - - const definition = { - name, - kind, - type: String, - description, - typeLabel: values.map(([n, _]) => n).join("|"), - legalValues: values.map(([n, _]) => n), - defaultValue - }; - super(definition); - - this._values = {}; - for (const [n, v] of values) { - this._values[n] = v; - } - } - - public getValue(values: FixMeOptionsType): T { - let name: string = values[this.definition.name]; - if (name === undefined) { - name = this.definition.defaultValue; - } - - if (!hasOwnProperty(this._values, name)) { - return messageError("RendererUnknownOptionValue", { value: name, name: this.definition.name }); - } - - return this._values[name]; - } -} diff --git a/packages/quicktype-core/src/RendererOptions/index.ts b/packages/quicktype-core/src/RendererOptions/index.ts new file mode 100644 index 000000000..c8a9f66e9 --- /dev/null +++ b/packages/quicktype-core/src/RendererOptions/index.ts @@ -0,0 +1,178 @@ +import { messageError } from "../Messages"; +import { assert } from "../support/Support"; +import { type FixMeOptionsType, type NoInfer } from "../types"; + +import type { OptionDefinition, OptionKind, OptionValues } from "./types"; + +export * from "./types"; + +/** + * The superclass for target language options. You probably want to use one of its + * subclasses, `BooleanOption`, `EnumOption`, or `StringOption`. + */ +export abstract class Option { + public readonly definition: OptionDefinition; + + public constructor(definition: OptionDefinition) { + this.definition = definition; + assert(definition.kind !== undefined, "Renderer option kind must be defined"); + } + + public get name(): Name { + return this.definition.name; + } + + public getValue(values: Record): T { + return (values[this.name] ?? this.definition.defaultValue) as T; + } + + public get cliDefinitions(): { + actual: Array>; + display: Array>; + } { + return { actual: [this.definition], display: [this.definition] }; + } +} + +export function getOptionValues>>( + options: Options, + untypedOptionValues: FixMeOptionsType +): OptionValues { + const optionValues: FixMeOptionsType = {}; + + for (const [key, option] of Object.entries(options)) { + const value = option.getValue(untypedOptionValues); + if (option instanceof EnumOption) { + optionValues[key] = option.getEnumValue(value as string); + } else { + optionValues[key] = value; + } + } + + return optionValues as OptionValues; +} + +/** + * A target language option that allows setting a boolean flag. + */ +export class BooleanOption extends Option { + /** + * @param name The shorthand name. + * @param description Short-ish description of the option. + * @param defaultValue The default value. + * @param kind Whether it's a primary or secondary option. + */ + public constructor(name: Name, description: string, defaultValue: boolean, kind: OptionKind = "primary") { + super({ + name, + kind, + type: Boolean, + description, + defaultValue + }); + } + + public get cliDefinitions(): { + actual: Array>; + display: Array>; + } { + const negated = Object.assign({}, this.definition, { + name: `no-${this.name}`, + defaultValue: !this.definition.defaultValue + }); + const display = Object.assign({}, this.definition, { + name: `[no-]${this.name}`, + description: `${this.definition.description} (${this.definition.defaultValue ? "on" : "off"} by default)` + }); + return { + display: [display], + actual: [this.definition, negated] + }; + } + + public getValue(values: Record): boolean { + let value = values[this.name]; + if (value === undefined) { + value = this.definition.defaultValue; + } + + let negated = values[`no-${this.name}`]; + if (negated === undefined) { + negated = !this.definition.defaultValue; + } + + if (value === "true") { + value = true; + } else if (value === "false") { + value = false; + } + + if (this.definition.defaultValue) { + return (value && !negated) as boolean; + } else { + return (value || !negated) as boolean; + } + } +} + +export class StringOption extends Option { + public constructor( + name: Name, + description: string, + typeLabel: string, + defaultValue: string, + kind: OptionKind = "primary" + ) { + const definition = { + name, + kind, + type: String, + description, + typeLabel, + defaultValue + }; + super(definition); + } +} + +// FIXME: use const generics here +export class EnumOption< + Name extends string, + EnumMap extends Record, + EnumKey extends Extract = Extract +> extends Option { + private readonly _values: EnumMap; + + public constructor( + name: Name, + description: string, + values: EnumMap, + defaultValue: NoInfer, + kind: OptionKind = "primary" + ) { + const definition = { + name, + kind, + type: String, + description, + typeLabel: Object.keys(values).join("|"), + defaultValue + }; + super(definition); + + this._values = values; + } + + public getEnumValue(name: Key): EnumMap[Key] { + if (!name) { + const defaultKey = this.definition.defaultValue as NonNullable; + return this._values[defaultKey]; + } + + if (!(name in this._values)) { + return messageError("RendererUnknownOptionValue", { value: name, name: this.name }); + } + + return this._values[name]; + } +} diff --git a/packages/quicktype-core/src/RendererOptions/types.ts b/packages/quicktype-core/src/RendererOptions/types.ts new file mode 100644 index 000000000..cdca12570 --- /dev/null +++ b/packages/quicktype-core/src/RendererOptions/types.ts @@ -0,0 +1,33 @@ +import type { EnumOption, Option } from "./index"; + +/** + * Primary options show up in the web UI in the "Language" settings tab, + * secondary options in "Other". + */ +export type OptionKind = "primary" | "secondary"; + +export interface OptionDefinition { + alias?: string; + defaultOption?: boolean; + defaultValue?: T; + description: string; + kind?: OptionKind; + multiple?: boolean; + name: Name; + type: StringConstructor | BooleanConstructor; + typeLabel?: string; +} + +export type OptionName = O extends Option ? Name : never; +export type OptionValue = + O extends EnumOption + ? EnumMap[EnumKey] + : O extends Option + ? Value + : never; + +export type OptionKey = O extends EnumOption, infer EnumKey> ? EnumKey : O; + +// FIXME: Merge these and use camelCase user-facing keys (v24) +export type OptionMap = { [K in keyof T as OptionName]: OptionKey }; // user-facing, keys are `name` property of Option, values are the available input type +export type OptionValues = { [K in keyof T]: OptionValue }; // internal, keys are keys of `_Options` object in each language file diff --git a/packages/quicktype-core/src/Run.ts b/packages/quicktype-core/src/Run.ts index dac66c17e..e05efe5c6 100644 --- a/packages/quicktype-core/src/Run.ts +++ b/packages/quicktype-core/src/Run.ts @@ -4,6 +4,8 @@ import { initTypeNames } from "./attributes/TypeNames"; import { gatherNames } from "./GatherNames"; import { InputData } from "./input/Inputs"; import * as targetLanguages from "./language/All"; +import type { RendererOptions } from "./language/options.types"; +import type { LanguageName } from "./language/types"; import { makeTransformations } from "./MakeTransformations"; import { messageError } from "./Messages"; import { combineClasses } from "./rewrites/CombineClasses"; @@ -22,7 +24,7 @@ import { type StringTypeMapping, TypeBuilder } from "./TypeBuilder"; import { type TypeGraph, noneToAny, optionalToNullable, removeIndirectionIntersections } from "./TypeGraph"; import { type FixMeOptionsType } from "./types"; -export function getTargetLanguage(nameOrInstance: string | TargetLanguage): TargetLanguage { +export function getTargetLanguage(nameOrInstance: LanguageName | TargetLanguage): TargetLanguage { if (typeof nameOrInstance === "object") { return nameOrInstance; } @@ -35,10 +37,6 @@ export function getTargetLanguage(nameOrInstance: string | TargetLanguage): Targ return messageError("DriverUnknownOutputLanguage", { lang: nameOrInstance }); } -export interface RendererOptions { - [name: string]: string | boolean; -} - export interface InferenceFlag { description: string; explanation: string; @@ -122,7 +120,7 @@ export type InferenceFlags = { [F in InferenceFlagName]: boolean }; * The options type for the main quicktype entry points, * `quicktypeMultiFile` and `quicktype`. */ -export interface NonInferenceOptions { +export interface NonInferenceOptions { /** Make all class property optional */ allPropertiesOptional: boolean; /** Put class properties in alphabetical order, instead of in the order found in the JSON */ @@ -161,7 +159,7 @@ export interface NonInferenceOptions { * or a string specifying one of the names for quicktype's built-in target languages. For example, * both `cs` and `csharp` will generate C#. */ - lang: string | TargetLanguage; + lang: Lang | TargetLanguage; /** If given, output these comments at the beginning of the main output file */ leadingComments?: Comment[]; /** Don't render output. This is mainly useful for benchmarking. */ @@ -171,7 +169,7 @@ export interface NonInferenceOptions { */ outputFilename: string; /** Options for the target language's renderer */ - rendererOptions: RendererOptions; + rendererOptions: RendererOptions; } export type Options = NonInferenceOptions & InferenceFlags; diff --git a/packages/quicktype-core/src/TargetLanguage.ts b/packages/quicktype-core/src/TargetLanguage.ts index 19f6bfea7..13301bccd 100644 --- a/packages/quicktype-core/src/TargetLanguage.ts +++ b/packages/quicktype-core/src/TargetLanguage.ts @@ -10,27 +10,42 @@ import { defined } from "./support/Support"; import { type Type } from "./Type"; import { type StringTypeMapping } from "./TypeBuilder"; import { type TypeGraph } from "./TypeGraph"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "./types"; +import { type FixMeOptionsType } from "./types"; export type MultiFileRenderResult = ReadonlyMap; -export abstract class TargetLanguage { - public constructor( - public readonly displayName: string, - public readonly names: string[], - public readonly extension: string - ) {} +export interface LanguageConfig { + readonly displayName: string; + readonly extension: string; + readonly names: readonly string[]; +} + +export abstract class TargetLanguage { + public readonly displayName: Config["displayName"]; + + public readonly names: Config["names"]; + + public readonly extension: Config["extension"]; + + public constructor({ displayName, names, extension }: Config) { + this.displayName = displayName; + this.names = names; + this.extension = extension; + } - protected abstract getOptions(): Array>; + protected abstract getOptions(): Record>; - public get optionDefinitions(): OptionDefinition[] { - return this.getOptions().map(o => o.definition); + public get optionDefinitions(): Array> { + return Object.values(this.getOptions()).map(o => o.definition); } - public get cliOptionDefinitions(): { actual: OptionDefinition[]; display: OptionDefinition[] } { - let actual: OptionDefinition[] = []; - let display: OptionDefinition[] = []; - for (const { cliDefinitions } of this.getOptions()) { + public get cliOptionDefinitions(): { + actual: Array>; + display: Array>; + } { + let actual: Array> = []; + let display: Array> = []; + for (const { cliDefinitions } of Object.values(this.getOptions())) { actual = actual.concat(cliDefinitions.actual); display = display.concat(cliDefinitions.display); } @@ -38,7 +53,7 @@ export abstract class TargetLanguage { return { actual, display }; } - public get name(): string { + public get name(): (typeof this.names)[0] { return defined(this.names[0]); } diff --git a/packages/quicktype-core/src/TypeUtils.ts b/packages/quicktype-core/src/TypeUtils.ts index cc150de8e..b2ae456f7 100644 --- a/packages/quicktype-core/src/TypeUtils.ts +++ b/packages/quicktype-core/src/TypeUtils.ts @@ -1,5 +1,7 @@ import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion } from "collection-utils"; +// eslint-disable-next-line import/no-cycle +import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; import { type CombinationKind, type TypeAttributes, @@ -7,7 +9,6 @@ import { emptyTypeAttributes } from "./attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "./support/Support"; -// eslint-disable-next-line import/no-cycle import { ArrayType, type ClassProperty, @@ -21,9 +22,6 @@ import { UnionType, isPrimitiveStringTypeKind } from "./Type"; -// String types should be imported last to avoid circular dependency issues. -// eslint-disable-next-line import/order -import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; export function assertIsObject(t: Type): ObjectType { if (t instanceof ObjectType) { diff --git a/packages/quicktype-core/src/index.ts b/packages/quicktype-core/src/index.ts index 10aaeb9ee..53a790253 100644 --- a/packages/quicktype-core/src/index.ts +++ b/packages/quicktype-core/src/index.ts @@ -1,6 +1,5 @@ export { type Options, - type RendererOptions, getTargetLanguage, quicktypeMultiFile, quicktypeMultiFileSync, @@ -21,7 +20,7 @@ export { Ref, type JSONSchemaType, type JSONSchemaAttributes } from "./input/JSO export type { RenderContext } from "./Renderer"; export { Option, type OptionDefinition, getOptionValues, type OptionValues } from "./RendererOptions"; export { TargetLanguage, type MultiFileRenderResult } from "./TargetLanguage"; -export { all as defaultTargetLanguages, languageNamed } from "./language/All"; + export { type MultiWord, type Sourcelike, diff --git a/packages/quicktype-core/src/input/Inputs.ts b/packages/quicktype-core/src/input/Inputs.ts index 92eb37760..f4ced2c92 100644 --- a/packages/quicktype-core/src/input/Inputs.ts +++ b/packages/quicktype-core/src/input/Inputs.ts @@ -8,6 +8,7 @@ import { type RunContext } from "../Run"; import { defined, errorMessage, panic } from "../support/Support"; import { type TargetLanguage } from "../TargetLanguage"; import { type TypeBuilder } from "../TypeBuilder"; +import { type LanguageName } from "../types"; import { type CompressedJSON, CompressedJSONFromString, type Value } from "./CompressedJSON"; import { TypeInference } from "./Inference"; @@ -151,7 +152,7 @@ export class JSONInput implements Input> { } export function jsonInputForTargetLanguage( - targetLanguage: string | TargetLanguage, + targetLanguage: LanguageName | TargetLanguage, languages?: TargetLanguage[], handleJSONRefs = false ): JSONInput { diff --git a/packages/quicktype-core/src/language/All.ts b/packages/quicktype-core/src/language/All.ts index 7fe1c87d3..637edb373 100644 --- a/packages/quicktype-core/src/language/All.ts +++ b/packages/quicktype-core/src/language/All.ts @@ -1,5 +1,3 @@ -import { iterableFind } from "collection-utils"; - import { type TargetLanguage } from "../TargetLanguage"; import { CJSONTargetLanguage } from "./CJSON"; @@ -25,11 +23,12 @@ import { RustTargetLanguage } from "./Rust"; import { Scala3TargetLanguage } from "./Scala3"; import { SmithyTargetLanguage } from "./Smithy4s"; import { SwiftTargetLanguage } from "./Swift"; +import { type LanguageDisplayName, type LanguageName, type LanguageNameMap } from "./types"; import { TypeScriptEffectSchemaTargetLanguage } from "./TypeScriptEffectSchema"; import { FlowTargetLanguage, TypeScriptTargetLanguage } from "./TypeScriptFlow"; import { TypeScriptZodTargetLanguage } from "./TypeScriptZod"; -export const all: TargetLanguage[] = [ +export const all = [ new CJSONTargetLanguage(), new CPlusPlusTargetLanguage(), new CrystalTargetLanguage(), @@ -48,7 +47,7 @@ export const all: TargetLanguage[] = [ new ObjectiveCTargetLanguage(), new PhpTargetLanguage(), new PikeTargetLanguage(), - new PythonTargetLanguage("Python", ["python", "py"], "py"), + new PythonTargetLanguage(), new RubyTargetLanguage(), new RustTargetLanguage(), new Scala3TargetLanguage(), @@ -57,14 +56,34 @@ export const all: TargetLanguage[] = [ new TypeScriptTargetLanguage(), new TypeScriptEffectSchemaTargetLanguage(), new TypeScriptZodTargetLanguage() -]; +] as const; + +all satisfies readonly TargetLanguage[]; + +export function languageNamed( + name: Name, + targetLanguages: readonly TargetLanguage[] = all +): LanguageNameMap[Name] { + const foundLanguage = targetLanguages.find(language => language.names.includes(name)); + if (!foundLanguage) { + throw new Error(`Unknown language name: ${name}`); + } + + return foundLanguage as LanguageNameMap[Name]; +} + +export function isLanguageName(maybeName: string): maybeName is LanguageName { + if (all.some(lang => (lang.names as readonly string[]).includes(maybeName))) { + return true; + } + + return false; +} -export function languageNamed(name: string, targetLanguages?: TargetLanguage[]): TargetLanguage | undefined { - if (targetLanguages === undefined) { - targetLanguages = all; +export function isLanguageDisplayName(maybeName: string): maybeName is LanguageDisplayName { + if (all.some(lang => lang.displayName === maybeName)) { + return true; } - const maybeTargetLanguage = iterableFind(targetLanguages, l => l.names.includes(name) || l.displayName === name); - if (maybeTargetLanguage !== undefined) return maybeTargetLanguage; - return iterableFind(targetLanguages, l => l.extension === name); + return false; } diff --git a/packages/quicktype-core/src/language/CJSON/language.ts b/packages/quicktype-core/src/language/CJSON/language.ts index 82e32ffd9..7c3854c9c 100644 --- a/packages/quicktype-core/src/language/CJSON/language.ts +++ b/packages/quicktype-core/src/language/CJSON/language.ts @@ -22,42 +22,43 @@ */ import { type RenderContext } from "../../Renderer"; -import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; -import { type NamingStyle } from "../../support/Strings"; +import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { CJSONRenderer } from "./CJSONRenderer"; /* Naming styles */ -const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; -const underscoreValue: [string, NamingStyle] = ["underscore-case", "underscore"]; -const camelValue: [string, NamingStyle] = ["camel-case", "camel"]; -const upperUnderscoreValue: [string, NamingStyle] = ["upper-underscore-case", "upper-underscore"]; -const pascalUpperAcronymsValue: [string, NamingStyle] = ["pascal-case-upper-acronyms", "pascal-upper-acronyms"]; -const camelUpperAcronymsValue: [string, NamingStyle] = ["camel-case-upper-acronyms", "camel-upper-acronyms"]; +const namingStyles = { + "pascal-case": "pascal", + "underscore-case": "underscore", + "camel-case": "camel", + "upper-underscore-case": "upper-underscore", + "pascal-case-upper-acronyms": "pascal-upper-acronyms", + "camel-case-upper-acronyms": "camel-upper-acronyms" +} as const; /* cJSON generator options */ export const cJSONOptions = { typeSourceStyle: new EnumOption( "source-style", "Source code generation type, whether to generate single or multiple source files", - [ - ["single-source", true], - ["multi-source", false] - ], + { + "single-source": true, + "multi-source": false + } as const, "single-source", "secondary" ), typeIntegerSize: new EnumOption( "integer-size", "Integer code generation type (int64_t by default)", - [ - ["int8_t", "int8_t"], - ["int16_t", "int16_t"], - ["int32_t", "int32_t"], - ["int64_t", "int64_t"] - ], + { + int8_t: "int8_t", + int16_t: "int16_t", + int32_t: "int32_t", + int64_t: "int64_t" + } as const, "int64_t", "secondary" ), @@ -70,76 +71,51 @@ export const cJSONOptions = { addTypedefAlias: new EnumOption( "typedef-alias", "Add typedef alias to unions, structs, and enums (no typedef by default)", - [ - ["no-typedef", false], - ["add-typedef", true] - ], + { + "no-typedef": false, + "add-typedef": true + } as const, "no-typedef", "secondary" ), printStyle: new EnumOption( "print-style", "Which cJSON print should be used (formatted by default)", - [ - ["print-formatted", false], - ["print-unformatted", true] - ], + { + "print-formatted": false, + "print-unformatted": true + } as const, "print-formatted", "secondary" ), - typeNamingStyle: new EnumOption("type-style", "Naming style for types", [ - pascalValue, - underscoreValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - memberNamingStyle: new EnumOption("member-style", "Naming style for members", [ - underscoreValue, - pascalValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - enumeratorNamingStyle: new EnumOption("enumerator-style", "Naming style for enumerators", [ - upperUnderscoreValue, - underscoreValue, - pascalValue, - camelValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]) + typeNamingStyle: new EnumOption("type-style", "Naming style for types", namingStyles, "pascal-case"), + memberNamingStyle: new EnumOption("member-style", "Naming style for members", namingStyles, "underscore-case"), + enumeratorNamingStyle: new EnumOption( + "enumerator-style", + "Naming style for enumerators", + namingStyles, + "upper-underscore-case" + ) }; /* cJSON generator target language */ -export class CJSONTargetLanguage extends TargetLanguage { - /** - * Constructor - * @param displayName: display name - * @params names: names - * @param extension: extension of files - */ - public constructor(displayName = "C (cJSON)", names: string[] = ["cjson", "cJSON"], extension = "h") { - super(displayName, names, extension); +export const cJSONLanguageConfig = { + displayName: "C (cJSON)", + names: ["cjson", "cJSON"], + extension: "h" +} as const; + +export class CJSONTargetLanguage extends TargetLanguage { + public constructor() { + super(cJSONLanguageConfig); } /** * Return cJSON generator options * @return cJSON generator options array */ - protected getOptions(): Array> { - return [ - cJSONOptions.typeSourceStyle, - cJSONOptions.typeIntegerSize, - cJSONOptions.addTypedefAlias, - cJSONOptions.printStyle, - cJSONOptions.hashtableSize, - cJSONOptions.typeNamingStyle, - cJSONOptions.memberNamingStyle, - cJSONOptions.enumeratorNamingStyle - ]; + public getOptions(): typeof cJSONOptions { + return cJSONOptions; } /** diff --git a/packages/quicktype-core/src/language/CPlusPlus/language.ts b/packages/quicktype-core/src/language/CPlusPlus/language.ts index 292d21a11..730d5750e 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/language.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/language.ts @@ -1,118 +1,96 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; -import { type NamingStyle } from "../../support/Strings"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { CPlusPlusRenderer } from "./CPlusPlusRenderer"; -const pascalValue: [string, NamingStyle] = ["pascal-case", "pascal"]; -const underscoreValue: [string, NamingStyle] = ["underscore-case", "underscore"]; -const camelValue: [string, NamingStyle] = ["camel-case", "camel"]; -const upperUnderscoreValue: [string, NamingStyle] = ["upper-underscore-case", "upper-underscore"]; -const pascalUpperAcronymsValue: [string, NamingStyle] = ["pascal-case-upper-acronyms", "pascal-upper-acronyms"]; -const camelUpperAcronymsValue: [string, NamingStyle] = ["camel-case-upper-acronyms", "camel-upper-acronyms"]; +// FIXME: share with CJSON +const namingStyles = { + "pascal-case": "pascal", + "underscore-case": "underscore", + "camel-case": "camel", + "upper-underscore-case": "upper-underscore", + "pascal-case-upper-acronyms": "pascal-upper-acronyms", + "camel-case-upper-acronyms": "camel-upper-acronyms" +} as const; export const cPlusPlusOptions = { typeSourceStyle: new EnumOption( "source-style", "Source code generation type, whether to generate single or multiple source files", - [ - ["single-source", true], - ["multi-source", false] - ], + { + "single-source": true, + "multi-source": false + } as const, "single-source", "secondary" ), includeLocation: new EnumOption( "include-location", "Whether json.hpp is to be located globally or locally", - [ - ["local-include", true], - ["global-include", false] - ], + { + "local-include": true, + "global-include": false + } as const, "local-include", "secondary" ), codeFormat: new EnumOption( "code-format", "Generate classes with getters/setters, instead of structs", - [ - ["with-struct", false], - ["with-getter-setter", true] - ], + { + "with-struct": false, + "with-getter-setter": true + } as const, "with-getter-setter" ), wstring: new EnumOption( "wstring", "Store strings using Utf-16 std::wstring, rather than Utf-8 std::string", - [ - ["use-string", false], - ["use-wstring", true] - ], + { + "use-string": false, + "use-wstring": true + } as const, "use-string" ), westConst: new EnumOption( "const-style", "Put const to the left/west (const T) or right/east (T const)", - [ - ["west-const", true], - ["east-const", false] - ], + { + "west-const": true, + "east-const": false + } as const, "west-const" ), justTypes: new BooleanOption("just-types", "Plain types only", false), namespace: new StringOption("namespace", "Name of the generated namespace(s)", "NAME", "quicktype"), enumType: new StringOption("enum-type", "Type of enum class", "NAME", "int", "secondary"), - typeNamingStyle: new EnumOption("type-style", "Naming style for types", [ - pascalValue, - underscoreValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - memberNamingStyle: new EnumOption("member-style", "Naming style for members", [ - underscoreValue, - pascalValue, - camelValue, - upperUnderscoreValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), - enumeratorNamingStyle: new EnumOption("enumerator-style", "Naming style for enumerators", [ - upperUnderscoreValue, - underscoreValue, - pascalValue, - camelValue, - pascalUpperAcronymsValue, - camelUpperAcronymsValue - ]), + typeNamingStyle: new EnumOption("type-style", "Naming style for types", namingStyles, "pascal-case"), + memberNamingStyle: new EnumOption("member-style", "Naming style for members", namingStyles, "underscore-case"), + enumeratorNamingStyle: new EnumOption( + "enumerator-style", + "Naming style for enumerators", + namingStyles, + "upper-underscore-case" + ), boost: new BooleanOption("boost", "Require a dependency on boost. Without boost, C++17 is required", true), hideNullOptional: new BooleanOption("hide-null-optional", "Hide null value for optional field", false) }; -export class CPlusPlusTargetLanguage extends TargetLanguage { - public constructor(displayName = "C++", names: string[] = ["c++", "cpp", "cplusplus"], extension = "cpp") { - super(displayName, names, extension); +export const cPlusPlusLanguageConfig = { + displayName: "C++", + names: ["c++", "cpp", "cplusplus"], + extension: "cpp" +} as const; + +export class CPlusPlusTargetLanguage extends TargetLanguage { + public constructor() { + super(cPlusPlusLanguageConfig); } - protected getOptions(): Array> { - return [ - cPlusPlusOptions.justTypes, - cPlusPlusOptions.namespace, - cPlusPlusOptions.codeFormat, - cPlusPlusOptions.wstring, - cPlusPlusOptions.westConst, - cPlusPlusOptions.typeSourceStyle, - cPlusPlusOptions.includeLocation, - cPlusPlusOptions.typeNamingStyle, - cPlusPlusOptions.memberNamingStyle, - cPlusPlusOptions.enumeratorNamingStyle, - cPlusPlusOptions.enumType, - cPlusPlusOptions.boost, - cPlusPlusOptions.hideNullOptional - ]; + public getOptions(): typeof cPlusPlusOptions { + return cPlusPlusOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { diff --git a/packages/quicktype-core/src/language/CSharp/language.ts b/packages/quicktype-core/src/language/CSharp/language.ts index e2b460582..293dc101d 100644 --- a/packages/quicktype-core/src/language/CSharp/language.ts +++ b/packages/quicktype-core/src/language/CSharp/language.ts @@ -1,22 +1,16 @@ import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; import { SystemTextJsonCSharpRenderer } from "./SystemTextJsonCSharpRenderer"; import { needTransformerForType } from "./utils"; -export enum Framework { - Newtonsoft = "Newtonsoft", - SystemTextJson = "SystemTextJson" -} - -export type Version = 5 | 6; export interface OutputFeatures { attributes: boolean; helpers: boolean; @@ -28,103 +22,102 @@ export const cSharpOptions = { framework: new EnumOption( "framework", "Serialization framework", - [ - ["NewtonSoft", Framework.Newtonsoft], - ["SystemTextJson", Framework.SystemTextJson] - ], + { + NewtonSoft: "NewtonSoft", + SystemTextJson: "SystemTextJson" + } as const, "NewtonSoft" ), - useList: new EnumOption("array-type", "Use T[] or List", [ - ["array", false], - ["list", true] - ]), + useList: new EnumOption( + "array-type", + "Use T[] or List", + { + array: false, + list: true + }, + "array" + ), dense: new EnumOption( "density", "Property density", - [ - ["normal", false], - ["dense", true] - ], + { + normal: false, + dense: true + } as const, "normal", "secondary" ), // FIXME: Do this via a configurable named eventually. namespace: new StringOption("namespace", "Generated namespace", "NAME", "QuickType"), - version: new EnumOption( + version: new EnumOption( "csharp-version", "C# version", - [ - ["5", 5], - ["6", 6] - ], + { + "5": 5, + "6": 6 + } as const, "6", "secondary" ), virtual: new BooleanOption("virtual", "Generate virtual properties", false), - typeForAny: new EnumOption( + typeForAny: new EnumOption( "any-type", 'Type to use for "any"', - [ - ["object", "object"], - ["dynamic", "dynamic"] - ], + { + object: "object", + dynamic: "dynamic" + } as const, "object", "secondary" ), useDecimal: new EnumOption( "number-type", "Type to use for numbers", - [ - ["double", false], - ["decimal", true] - ], + { + double: false, + decimal: true + } as const, "double", "secondary" ), - features: new EnumOption("features", "Output features", [ - ["complete", { namespaces: true, helpers: true, attributes: true }], - ["attributes-only", { namespaces: true, helpers: false, attributes: true }], - ["just-types-and-namespace", { namespaces: true, helpers: false, attributes: false }], - ["just-types", { namespaces: true, helpers: false, attributes: false }] - ]), + features: new EnumOption( + "features", + "Output features", + { + "complete": { namespaces: true, helpers: true, attributes: true }, + "attributes-only": { namespaces: true, helpers: false, attributes: true }, + "just-types-and-namespace": { namespaces: true, helpers: false, attributes: false }, + "just-types": { namespaces: true, helpers: false, attributes: false } + } as const, + "complete" + ), baseclass: new EnumOption( "base-class", "Base class", - [ - ["EntityData", "EntityData"], - ["Object", undefined] - ], + { + EntityData: "EntityData", + Object: undefined + } as const, "Object", "secondary" ), checkRequired: new BooleanOption("check-required", "Fail if required properties are missing", false), keepPropertyName: new BooleanOption("keep-property-name", "Keep original field name generate", false) -}; +} as const; export const newtonsoftCSharpOptions = Object.assign({}, cSharpOptions, {}); export const systemTextJsonCSharpOptions = Object.assign({}, cSharpOptions, {}); -export class CSharpTargetLanguage extends TargetLanguage { +export const cSharpLanguageConfig = { displayName: "C#", names: ["cs", "csharp"], extension: "cs" } as const; + +export class CSharpTargetLanguage extends TargetLanguage { public constructor() { - super("C#", ["cs", "csharp"], "cs"); + super(cSharpLanguageConfig); } - protected getOptions(): Array> { - return [ - cSharpOptions.framework, - cSharpOptions.namespace, - cSharpOptions.version, - cSharpOptions.dense, - cSharpOptions.useList, - cSharpOptions.useDecimal, - cSharpOptions.typeForAny, - cSharpOptions.virtual, - cSharpOptions.features, - cSharpOptions.baseclass, - cSharpOptions.checkRequired, - cSharpOptions.keepPropertyName - ]; + public getOptions(): typeof cSharpOptions { + return cSharpOptions; } public get stringTypeMapping(): StringTypeMapping { @@ -156,13 +149,13 @@ export class CSharpTargetLanguage extends TargetLanguage { const options = getOptionValues(cSharpOptions, untypedOptionValues); switch (options.framework) { - case Framework.Newtonsoft: + case "NewtonSoft": return new NewtonsoftCSharpRenderer( this, renderContext, getOptionValues(newtonsoftCSharpOptions, untypedOptionValues) ); - case Framework.SystemTextJson: + case "SystemTextJson": return new SystemTextJsonCSharpRenderer( this, renderContext, diff --git a/packages/quicktype-core/src/language/Crystal/language.ts b/packages/quicktype-core/src/language/Crystal/language.ts index ba8c81c67..db61e48be 100644 --- a/packages/quicktype-core/src/language/Crystal/language.ts +++ b/packages/quicktype-core/src/language/Crystal/language.ts @@ -1,24 +1,28 @@ import { type RenderContext } from "../../Renderer"; -import { type Option } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType } from "../../types"; import { CrystalRenderer } from "./CrystalRenderer"; -export class CrystalTargetLanguage extends TargetLanguage { - protected makeRenderer(renderContext: RenderContext): CrystalRenderer { - return new CrystalRenderer(this, renderContext); - } +export const crystalLanguageConfig = { + displayName: "Crystal", + names: ["crystal", "cr", "crystallang"], + extension: "cr" +} as const; +export class CrystalTargetLanguage extends TargetLanguage { public constructor() { - super("Crystal", ["crystal", "cr", "crystallang"], "cr"); + super(crystalLanguageConfig); + } + + protected makeRenderer(renderContext: RenderContext): CrystalRenderer { + return new CrystalRenderer(this, renderContext); } protected get defaultIndentation(): string { return " "; } - protected getOptions(): Array> { - return []; + public getOptions(): {} { + return {}; } } diff --git a/packages/quicktype-core/src/language/Dart/language.ts b/packages/quicktype-core/src/language/Dart/language.ts index 4598079f9..ffbe59f02 100644 --- a/packages/quicktype-core/src/language/Dart/language.ts +++ b/packages/quicktype-core/src/language/Dart/language.ts @@ -1,9 +1,9 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { DartRenderer } from "./DartRenderer"; @@ -31,25 +31,15 @@ export const dartOptions = { partName: new StringOption("part-name", "Use this name in `part` directive", "NAME", "", "secondary") }; -export class DartTargetLanguage extends TargetLanguage { +export const dartLanguageConfig = { displayName: "Dart", names: ["dart"], extension: "dart" } as const; + +export class DartTargetLanguage extends TargetLanguage { public constructor() { - super("Dart", ["dart"], "dart"); + super(dartLanguageConfig); } - protected getOptions(): Array> { - return [ - dartOptions.nullSafety, - dartOptions.justTypes, - dartOptions.codersInClass, - dartOptions.methodNamesWithMap, - dartOptions.requiredProperties, - dartOptions.finalProperties, - dartOptions.generateCopyWith, - dartOptions.useFreezed, - dartOptions.useHive, - dartOptions.useJsonAnnotation, - dartOptions.partName - ]; + public getOptions(): typeof dartOptions { + return dartOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { diff --git a/packages/quicktype-core/src/language/Elixir/language.ts b/packages/quicktype-core/src/language/Elixir/language.ts index fceaa7063..37b15d4cc 100644 --- a/packages/quicktype-core/src/language/Elixir/language.ts +++ b/packages/quicktype-core/src/language/Elixir/language.ts @@ -1,7 +1,7 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { ElixirRenderer } from "./ElixirRenderer"; @@ -10,13 +10,19 @@ export const elixirOptions = { namespace: new StringOption("namespace", "Specify a module namespace", "NAME", "") }; -export class ElixirTargetLanguage extends TargetLanguage { +export const elixirLanguageConfig = { + displayName: "Elixir", + names: ["elixir"], + extension: "ex" +} as const; + +export class ElixirTargetLanguage extends TargetLanguage { public constructor() { - super("Elixir", ["elixir"], "ex"); + super(elixirLanguageConfig); } - protected getOptions(): Array> { - return [elixirOptions.justTypes, elixirOptions.namespace]; + public getOptions(): typeof elixirOptions { + return elixirOptions; } public get supportsOptionalClassProperties(): boolean { diff --git a/packages/quicktype-core/src/language/Elm/language.ts b/packages/quicktype-core/src/language/Elm/language.ts index 6a193fbae..d77d3b332 100644 --- a/packages/quicktype-core/src/language/Elm/language.ts +++ b/packages/quicktype-core/src/language/Elm/language.ts @@ -1,27 +1,38 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { ElmRenderer } from "./ElmRenderer"; export const elmOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), - useList: new EnumOption("array-type", "Use Array or List", [ - ["array", false], - ["list", true] - ]), + useList: new EnumOption( + "array-type", + "Use Array or List", + { + array: false, + list: true + } as const, + "array" + ), // FIXME: Do this via a configurable named eventually. moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") }; -export class ElmTargetLanguage extends TargetLanguage { +export const elmLanguageConfig = { + displayName: "Elm", + names: ["elm"], + extension: "elm" +} as const; + +export class ElmTargetLanguage extends TargetLanguage { public constructor() { - super("Elm", ["elm"], "elm"); + super(elmLanguageConfig); } - protected getOptions(): Array> { - return [elmOptions.justTypes, elmOptions.moduleName, elmOptions.useList]; + public getOptions(): typeof elmOptions { + return elmOptions; } public get supportsOptionalClassProperties(): boolean { diff --git a/packages/quicktype-core/src/language/Golang/language.ts b/packages/quicktype-core/src/language/Golang/language.ts index f38edff15..bf20cae3f 100644 --- a/packages/quicktype-core/src/language/Golang/language.ts +++ b/packages/quicktype-core/src/language/Golang/language.ts @@ -1,9 +1,9 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { GoRenderer } from "./GolangRenderer"; @@ -20,20 +20,19 @@ export const goOptions = { ) }; -export class GoTargetLanguage extends TargetLanguage { +const golangLanguageConfig = { + displayName: "Go", + names: ["go", "golang"], + extension: "go" +} as const; + +export class GoTargetLanguage extends TargetLanguage { public constructor() { - super("Go", ["go", "golang"], "go"); + super(golangLanguageConfig); } - protected getOptions(): Array> { - return [ - goOptions.justTypes, - goOptions.justTypesAndPackage, - goOptions.packageName, - goOptions.multiFileOutput, - goOptions.fieldTags, - goOptions.omitEmpty - ]; + public getOptions(): typeof goOptions { + return goOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { diff --git a/packages/quicktype-core/src/language/Haskell/language.ts b/packages/quicktype-core/src/language/Haskell/language.ts index 84ad167f3..e7c35f9cf 100644 --- a/packages/quicktype-core/src/language/Haskell/language.ts +++ b/packages/quicktype-core/src/language/Haskell/language.ts @@ -1,26 +1,37 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { HaskellRenderer } from "./HaskellRenderer"; export const haskellOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), - useList: new EnumOption("array-type", "Use Array or List", [ - ["array", false], - ["list", true] - ]), + useList: new EnumOption( + "array-type", + "Use Array or List", + { + array: false, + list: true + } as const, + "array" + ), moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") }; -export class HaskellTargetLanguage extends TargetLanguage { +export const haskellLanguageConfig = { + displayName: "Haskell", + names: ["haskell"], + extension: "haskell" +} as const; + +export class HaskellTargetLanguage extends TargetLanguage { public constructor() { - super("Haskell", ["haskell"], "haskell"); + super(haskellLanguageConfig); } - protected getOptions(): Array> { - return [haskellOptions.justTypes, haskellOptions.moduleName, haskellOptions.useList]; + public getOptions(): typeof haskellOptions { + return haskellOptions; } public get supportsOptionalClassProperties(): boolean { diff --git a/packages/quicktype-core/src/language/JSONSchema/language.ts b/packages/quicktype-core/src/language/JSONSchema/language.ts index 7374537a1..f3caf14c0 100644 --- a/packages/quicktype-core/src/language/JSONSchema/language.ts +++ b/packages/quicktype-core/src/language/JSONSchema/language.ts @@ -1,18 +1,23 @@ import { type RenderContext } from "../../Renderer"; -import { type Option } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type StringTypeMapping, getNoStringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { JSONSchemaRenderer } from "./JSONSchemaRenderer"; -export class JSONSchemaTargetLanguage extends TargetLanguage { +export const JSONSchemaLanguageConfig = { + displayName: "JSON Schema", + names: ["schema", "json-schema"], + extension: "schema" +} as const; + +export class JSONSchemaTargetLanguage extends TargetLanguage { public constructor() { - super("JSON Schema", ["schema", "json-schema"], "schema"); + super(JSONSchemaLanguageConfig); } - protected getOptions(): Array> { - return []; + public getOptions(): {} { + return {}; } public get stringTypeMapping(): StringTypeMapping { diff --git a/packages/quicktype-core/src/language/Java.ts b/packages/quicktype-core/src/language/Java.ts deleted file mode 100644 index d800e9fbf..000000000 --- a/packages/quicktype-core/src/language/Java.ts +++ /dev/null @@ -1,1523 +0,0 @@ -import { type PrimitiveStringTypeKind, type StringTypeMapping, type TransformedStringTypeKind } from ".."; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../Naming"; -import { type RenderContext } from "../Renderer"; -import { - BooleanOption, - EnumOption, - type Option, - type OptionValues, - StringOption, - getOptionValues -} from "../RendererOptions"; -import { type Sourcelike, maybeAnnotated } from "../Source"; -import { AcronymStyleOptions, acronymOption, acronymStyle } from "../support/Acronyms"; -import { - allLowerWordStyle, - allUpperWordStyle, - capitalize, - combineWords, - escapeNonPrintableMapper, - firstUpperWordStyle, - isAscii, - isDigit, - isLetter, - splitIntoWords, - standardUnicodeHexEscape, - utf16ConcatMap, - utf16LegalizeCharacters -} from "../support/Strings"; -import { assert, assertNever, defined, panic } from "../support/Support"; -import { TargetLanguage } from "../TargetLanguage"; -import { - ArrayType, - type ClassProperty, - ClassType, - EnumType, - MapType, - type Type, - type TypeKind, - UnionType -} from "../Type"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../types"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../TypeUtils"; - -export const javaOptions = { - useList: new EnumOption( - "array-type", - "Use T[] or List", - [ - ["array", false], - ["list", true] - ], - "array" - ), - justTypes: new BooleanOption("just-types", "Plain types only", false), - dateTimeProvider: new EnumOption( - "datetime-provider", - "Date time provider type", - [ - ["java8", "java8"], - ["legacy", "legacy"] - ], - "java8" - ), - acronymStyle: acronymOption(AcronymStyleOptions.Pascal), - // FIXME: Do this via a configurable named eventually. - packageName: new StringOption("package", "Generated package name", "NAME", "io.quicktype"), - lombok: new BooleanOption("lombok", "Use lombok", false, "primary"), - lombokCopyAnnotations: new BooleanOption("lombok-copy-annotations", "Copy accessor annotations", true, "secondary") -}; - -export class JavaTargetLanguage extends TargetLanguage { - public constructor() { - super("Java", ["java"], "java"); - } - - protected getOptions(): Array> { - return [ - javaOptions.useList, - javaOptions.justTypes, - javaOptions.dateTimeProvider, - javaOptions.acronymStyle, - javaOptions.packageName, - javaOptions.lombok, - javaOptions.lombokCopyAnnotations - ]; - } - - public get supportsUnionsWithBothNumberTypes(): boolean { - return true; - } - - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): JavaRenderer { - const options = getOptionValues(javaOptions, untypedOptionValues); - if (options.justTypes) { - return new JavaRenderer(this, renderContext, options); - } - - return new JacksonRenderer(this, renderContext, options); - } - - public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); - mapping.set("date", "date"); - mapping.set("time", "time"); - mapping.set("date-time", "date-time"); - mapping.set("uuid", "uuid"); - return mapping; - } -} - -const javaKeywords = [ - "_", // as of release 9, '_' is a keyword, and may not be used as an identifier - "Object", - "Class", - "System", - "Long", - "Double", - "Boolean", - "String", - "List", - "Map", - "UUID", - "Exception", - "IOException", - "Override", - "abstract", - "continue", - "for", - "new", - "switch", - "assert", - "default", - "goto", - "package", - "synchronized", - "boolean", - "do", - "if", - "private", - "this", - "break", - "double", - "implements", - "protected", - "throw", - "byte", - "else", - "import", - "public", - "throws", - "case", - "enum", - "instanceof", - "return", - "transient", - "catch", - "extends", - "int", - "short", - "try", - "char", - "final", - "interface", - "static", - "void", - "class", - "finally", - "long", - "strictfp", - "volatile", - "const", - "float", - "native", - "super", - "while", - "null", - "false", - "true" -]; - -export const stringEscape = utf16ConcatMap(escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape)); - -function isStartCharacter(codePoint: number): boolean { - if (codePoint === 0x5f) return true; // underscore - return isAscii(codePoint) && isLetter(codePoint); -} - -function isPartCharacter(codePoint: number): boolean { - return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); -} - -const legalizeName = utf16LegalizeCharacters(isPartCharacter); - -export function javaNameStyle( - startWithUpper: boolean, - upperUnderscore: boolean, - original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle -): string { - const words = splitIntoWords(original); - return combineWords( - words, - legalizeName, - upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, - upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, - upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, - acronymsStyle, - upperUnderscore ? "_" : "", - isStartCharacter - ); -} - -abstract class JavaDateTimeProvider { - public constructor( - protected readonly _renderer: JavaRenderer, - protected readonly _className: string - ) {} - - public abstract keywords: string[]; - - public abstract dateTimeImports: string[]; - - public abstract dateImports: string[]; - - public abstract timeImports: string[]; - - public abstract converterImports: string[]; - - public abstract dateTimeType: string; - - public abstract dateType: string; - - public abstract timeType: string; - - public abstract dateTimeJacksonAnnotations: string[]; - - public abstract dateJacksonAnnotations: string[]; - - public abstract timeJacksonAnnotations: string[]; - - public abstract emitDateTimeConverters(): void; - - public shouldEmitDateTimeConverter = true; - - public shouldEmitTimeConverter = true; - - public shouldEmitDateConverter = true; - - public abstract convertStringToDateTime(variable: Sourcelike): Sourcelike; - public abstract convertStringToTime(variable: Sourcelike): Sourcelike; - public abstract convertStringToDate(variable: Sourcelike): Sourcelike; - - public abstract convertDateTimeToString(variable: Sourcelike): Sourcelike; - public abstract convertTimeToString(variable: Sourcelike): Sourcelike; - public abstract convertDateToString(variable: Sourcelike): Sourcelike; -} - -class Java8DateTimeProvider extends JavaDateTimeProvider { - public keywords = [ - "LocalDate", - "OffsetDateTime", - "OffsetTime", - "ZoneOffset", - "ZonedDateTime", - "DateTimeFormatter", - "DateTimeFormatterBuilder", - "ChronoField" - ]; - - public dateTimeImports: string[] = ["java.time.OffsetDateTime"]; - - public dateImports: string[] = ["java.time.LocalDate"]; - - public timeImports: string[] = ["java.time.OffsetTime"]; - - public converterImports: string[] = [ - "java.time.LocalDate", - "java.time.OffsetDateTime", - "java.time.OffsetTime", - "java.time.ZoneOffset", - "java.time.ZonedDateTime", - "java.time.format.DateTimeFormatter", - "java.time.format.DateTimeFormatterBuilder", - "java.time.temporal.ChronoField" - ]; - - public dateTimeType = "OffsetDateTime"; - - public dateType = "LocalDate"; - - public timeType = "OffsetTime"; - - public dateTimeJacksonAnnotations: string[] = []; - - public dateJacksonAnnotations: string[] = []; - - public timeJacksonAnnotations: string[] = []; - - public emitDateTimeConverters(): void { - this._renderer.ensureBlankLine(); - this._renderer.emitLine( - "private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()" - ); - this._renderer.indent(() => - this._renderer.indent(() => { - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_DATE_TIME)"); - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)"); - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_INSTANT)"); - this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))'); - this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))'); - this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))'); - this._renderer.emitLine(".toFormatter()"); - this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); - }) - ); - this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static OffsetDateTime parseDateTimeString(String str)", () => { - this._renderer.emitLine( - "return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();" - ); - }); - - this._renderer.ensureBlankLine(); - this._renderer.emitLine( - "private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()" - ); - this._renderer.indent(() => - this._renderer.indent(() => { - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_TIME)"); - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)"); - this._renderer.emitLine(".parseDefaulting(ChronoField.YEAR, 2020)"); - this._renderer.emitLine(".parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)"); - this._renderer.emitLine(".parseDefaulting(ChronoField.DAY_OF_MONTH, 1)"); - this._renderer.emitLine(".toFormatter()"); - this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); - }) - ); - this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static OffsetTime parseTimeString(String str)", () => { - this._renderer.emitLine( - "return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();" - ); - }); - } - - public convertStringToDateTime(variable: Sourcelike): Sourcelike { - return [this._className, ".parseDateTimeString(", variable, ")"]; - } - - public convertStringToTime(variable: Sourcelike): Sourcelike { - return [this._className, ".parseTimeString(", variable, ")"]; - } - - public convertStringToDate(variable: Sourcelike): Sourcelike { - return ["LocalDate.parse(", variable, ")"]; - } - - public convertDateTimeToString(variable: Sourcelike): Sourcelike { - return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME)"]; - } - - public convertTimeToString(variable: Sourcelike): Sourcelike { - return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_TIME)"]; - } - - public convertDateToString(variable: Sourcelike): Sourcelike { - return [variable, ".format(java.time.format.DateTimeFormatter.ISO_DATE)"]; - } -} - -class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { - public keywords = ["SimpleDateFormat", "Date"]; - - public dateTimeImports: string[] = ["java.util.Date"]; - - public dateImports: string[] = ["java.util.Date"]; - - public timeImports: string[] = ["java.util.Date"]; - - public converterImports: string[] = ["java.util.Date", "java.text.SimpleDateFormat"]; - - public dateTimeType = "Date"; - - public dateType = "Date"; - - public timeType = "Date"; - - public dateTimeJacksonAnnotations: string[] = [ - '@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ssX", timezone = "UTC")' - ]; - - public dateJacksonAnnotations: string[] = ['@JsonFormat(pattern = "yyyy-MM-dd")']; - - public timeJacksonAnnotations: string[] = ['@JsonFormat(pattern = "HH:mm:ssX", timezone = "UTC")']; - - public shouldEmitTimeConverter = false; - - public shouldEmitDateConverter = false; - - public emitDateTimeConverters(): void { - this._renderer.ensureBlankLine(); - this._renderer.emitLine("private static final String[] DATE_TIME_FORMATS = {"); - this._renderer.indent(() => - this._renderer.indent(() => { - this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.SX\","); - this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.S\","); - this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ssX\","); - this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss\","); - this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.SX",'); - this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.S",'); - this._renderer.emitLine('"yyyy-MM-dd HH:mm:ssX",'); - this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss",'); - this._renderer.emitLine('"HH:mm:ss.SZ",'); - this._renderer.emitLine('"HH:mm:ss.S",'); - this._renderer.emitLine('"HH:mm:ssZ",'); - this._renderer.emitLine('"HH:mm:ss",'); - this._renderer.emitLine('"yyyy-MM-dd",'); - }) - ); - this._renderer.emitLine("};"); - this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static Date parseAllDateTimeString(String str)", () => { - this._renderer.emitBlock("for (String format : DATE_TIME_FORMATS)", () => { - this._renderer.emitIgnoredTryCatchBlock(() => { - this._renderer.emitLine("return new SimpleDateFormat(format).parse(str);"); - }); - }); - this._renderer.emitLine("return null;"); - }); - - this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static String serializeDateTime(Date datetime)", () => { - this._renderer.emitLine("return new SimpleDateFormat(\"yyyy-MM-dd'T'hh:mm:ssZ\").format(datetime);"); - }); - - this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static String serializeDate(Date datetime)", () => { - this._renderer.emitLine('return new SimpleDateFormat("yyyy-MM-dd").format(datetime);'); - }); - - this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static String serializeTime(Date datetime)", () => { - this._renderer.emitLine('return new SimpleDateFormat("hh:mm:ssZ").format(datetime);'); - }); - } - - public convertStringToDateTime(variable: Sourcelike): Sourcelike { - return [this._className, ".parseAllDateTimeString(", variable, ")"]; - } - - public convertStringToTime(variable: Sourcelike): Sourcelike { - return [this._className, ".parseAllDateTimeString(", variable, ")"]; - } - - public convertStringToDate(variable: Sourcelike): Sourcelike { - return [this._className, ".parseAllDateTimeString(", variable, ")"]; - } - - public convertDateTimeToString(variable: Sourcelike): Sourcelike { - return [this._className, ".serializeDateTime(", variable, ")"]; - } - - public convertTimeToString(variable: Sourcelike): Sourcelike { - return [this._className, ".serializeTime(", variable, ")"]; - } - - public convertDateToString(variable: Sourcelike): Sourcelike { - return [this._className, ".serializeDate(", variable, ")"]; - } -} - -export class JavaRenderer extends ConvenienceRenderer { - private _currentFilename: string | undefined; - - private readonly _gettersAndSettersForPropertyName = new Map(); - - private _haveEmittedLeadingComments = false; - - protected readonly _dateTimeProvider: JavaDateTimeProvider; - - protected readonly _converterClassname: string = "Converter"; - - protected readonly _converterKeywords: string[] = []; - - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - protected readonly _options: OptionValues - ) { - super(targetLanguage, renderContext); - - switch (_options.dateTimeProvider) { - default: - case "java8": - this._dateTimeProvider = new Java8DateTimeProvider(this, this._converterClassname); - break; - case "legacy": - this._dateTimeProvider = new JavaLegacyDateTimeProvider(this, this._converterClassname); - break; - } - } - - protected forbiddenNamesForGlobalNamespace(): string[] { - const keywords = [ - ...javaKeywords, - ...this._converterKeywords, - this._converterClassname, - ...this._dateTimeProvider.keywords - ]; - return keywords; - } - - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { - return { names: [], includeGlobalForbidden: true }; - } - - protected makeNamedTypeNamer(): Namer { - return this.getNameStyling("typeNamingFunction"); - } - - protected namerForObjectProperty(): Namer { - return this.getNameStyling("propertyNamingFunction"); - } - - protected makeUnionMemberNamer(): Namer { - return this.getNameStyling("propertyNamingFunction"); - } - - protected makeEnumCaseNamer(): Namer { - return this.getNameStyling("enumCaseNamingFunction"); - } - - protected unionNeedsName(u: UnionType): boolean { - return nullableFromUnion(u) === null; - } - - protected namedTypeToNameForTopLevel(type: Type): Type | undefined { - // If the top-level type doesn't contain any classes or unions - // we have to define a class just for the `FromJson` method, in - // emitFromJsonForTopLevel. - return directlyReachableSingleNamedType(type); - } - - protected makeNamesForPropertyGetterAndSetter( - _c: ClassType, - _className: Name, - _p: ClassProperty, - _jsonName: string, - name: Name - ): [Name, Name] { - const getterName = new DependencyName( - this.getNameStyling("propertyNamingFunction"), - name.order, - lookup => `get_${lookup(name)}` - ); - const setterName = new DependencyName( - this.getNameStyling("propertyNamingFunction"), - name.order, - lookup => `set_${lookup(name)}` - ); - return [getterName, setterName]; - } - - protected makePropertyDependencyNames( - c: ClassType, - className: Name, - p: ClassProperty, - jsonName: string, - name: Name - ): Name[] { - const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter(c, className, p, jsonName, name); - this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); - return getterAndSetterNames; - } - - private getNameStyling(convention: string): Namer { - const styling: { [key: string]: Namer } = { - typeNamingFunction: funPrefixNamer("types", n => - javaNameStyle(true, false, n, acronymStyle(this._options.acronymStyle)) - ), - propertyNamingFunction: funPrefixNamer("properties", n => - javaNameStyle(false, false, n, acronymStyle(this._options.acronymStyle)) - ), - enumCaseNamingFunction: funPrefixNamer("enum-cases", n => - javaNameStyle(true, true, n, acronymStyle(this._options.acronymStyle)) - ) - }; - return styling[convention]; - } - - protected fieldOrMethodName(methodName: string, topLevelName: Name): Sourcelike { - if (this.topLevels.size === 1) { - return methodName; - } - - return [topLevelName, capitalize(methodName)]; - } - - protected methodName(prefix: string, suffix: string, topLevelName: Name): Sourcelike { - if (this.topLevels.size === 1) { - return [prefix, suffix]; - } - - return [prefix, topLevelName, suffix]; - } - - protected decoderName(topLevelName: Name): Sourcelike { - return this.fieldOrMethodName("fromJsonString", topLevelName); - } - - protected encoderName(topLevelName: Name): Sourcelike { - return this.fieldOrMethodName("toJsonString", topLevelName); - } - - protected readerGetterName(topLevelName: Name): Sourcelike { - return this.methodName("get", "ObjectReader", topLevelName); - } - - protected writerGetterName(topLevelName: Name): Sourcelike { - return this.methodName("get", "ObjectWriter", topLevelName); - } - - protected startFile(basename: Sourcelike): void { - assert(this._currentFilename === undefined, "Previous file wasn't finished"); - // FIXME: The filenames should actually be Sourcelikes, too - this._currentFilename = `${this.sourcelikeToString(basename)}.java`; - // FIXME: Why is this necessary? - this.ensureBlankLine(); - if (!this._haveEmittedLeadingComments && this.leadingComments !== undefined) { - this.emitComments(this.leadingComments); - this.ensureBlankLine(); - this._haveEmittedLeadingComments = true; - } - } - - protected finishFile(): void { - super.finishFile(defined(this._currentFilename)); - this._currentFilename = undefined; - } - - protected emitPackageAndImports(imports: string[]): void { - this.emitLine("package ", this._options.packageName, ";"); - this.ensureBlankLine(); - for (const pkg of imports) { - this.emitLine("import ", pkg, ";"); - } - } - - protected emitFileHeader(fileName: Sourcelike, imports: string[]): void { - this.startFile(fileName); - this.emitPackageAndImports(imports); - this.ensureBlankLine(); - } - - public emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); - } - - public emitBlock(line: Sourcelike, f: () => void): void { - this.emitLine(line, " {"); - this.indent(f); - this.emitLine("}"); - } - - public emitTryCatch(main: () => void, handler: () => void, exception = "Exception"): void { - this.emitLine("try {"); - this.indent(main); - this.emitLine("} catch (", exception, " ex) {"); - this.indent(handler); - this.emitLine("}"); - } - - public emitIgnoredTryCatchBlock(f: () => void): void { - this.emitTryCatch(f, () => this.emitLine("// Ignored")); - } - - protected javaType(reference: boolean, t: Type, withIssues = false): Sourcelike { - return matchType( - t, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "Object"), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Object"), - _boolType => (reference ? "Boolean" : "boolean"), - _integerType => (reference ? "Long" : "long"), - _doubleType => (reference ? "Double" : "double"), - _stringType => "String", - arrayType => { - if (this._options.useList) { - return ["List<", this.javaType(true, arrayType.items, withIssues), ">"]; - } else { - return [this.javaType(false, arrayType.items, withIssues), "[]"]; - } - }, - classType => this.nameForNamedType(classType), - mapType => ["Map"], - enumType => this.nameForNamedType(enumType), - unionType => { - const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.javaType(true, nullable, withIssues); - return this.nameForNamedType(unionType); - }, - transformedStringType => { - if (transformedStringType.kind === "time") { - return this._dateTimeProvider.timeType; - } - - if (transformedStringType.kind === "date") { - return this._dateTimeProvider.dateType; - } - - if (transformedStringType.kind === "date-time") { - return this._dateTimeProvider.dateTimeType; - } - - if (transformedStringType.kind === "uuid") { - return "UUID"; - } - - return "String"; - } - ); - } - - protected javaImport(t: Type): string[] { - return matchType( - t, - _anyType => [], - _nullType => [], - _boolType => [], - _integerType => [], - _doubleType => [], - _stringType => [], - arrayType => { - if (this._options.useList) { - return [...this.javaImport(arrayType.items), "java.util.List"]; - } else { - return [...this.javaImport(arrayType.items)]; - } - }, - _classType => [], - mapType => [...this.javaImport(mapType.values), "java.util.Map"], - _enumType => [], - unionType => { - const imports: string[] = []; - unionType.members.forEach(type => this.javaImport(type).forEach(imp => imports.push(imp))); - return imports; - }, - transformedStringType => { - if (transformedStringType.kind === "time") { - return this._dateTimeProvider.timeImports; - } - - if (transformedStringType.kind === "date") { - return this._dateTimeProvider.dateImports; - } - - if (transformedStringType.kind === "date-time") { - return this._dateTimeProvider.dateTimeImports; - } - - if (transformedStringType.kind === "uuid") { - return ["java.util.UUID"]; - } - - return []; - } - ); - } - - protected javaTypeWithoutGenerics(reference: boolean, t: Type): Sourcelike { - if (t instanceof ArrayType) { - if (this._options.useList) { - return ["List"]; - } else { - return [this.javaTypeWithoutGenerics(false, t.items), "[]"]; - } - } else if (t instanceof MapType) { - return "Map"; - } else if (t instanceof UnionType) { - const nullable = nullableFromUnion(t); - if (nullable !== null) return this.javaTypeWithoutGenerics(true, nullable); - return this.nameForNamedType(t); - } else { - return this.javaType(reference, t); - } - } - - protected emitClassAttributes(_c: ClassType, _className: Name): void { - if (this._options.lombok) { - this.emitLine("@lombok.Data"); - } - } - - protected annotationsForAccessor( - _c: ClassType, - _className: Name, - _propertyName: Name, - _jsonName: string, - _p: ClassProperty, - _isSetter: boolean - ): string[] { - return []; - } - - protected importsForType(t: ClassType | UnionType | EnumType): string[] { - if (t instanceof ClassType) { - return []; - } - - if (t instanceof UnionType) { - return ["java.io.IOException"]; - } - - if (t instanceof EnumType) { - return ["java.io.IOException"]; - } - - return assertNever(t); - } - - protected importsForClass(c: ClassType): string[] { - const imports: string[] = []; - this.forEachClassProperty(c, "none", (_name, _jsonName, p) => { - this.javaImport(p.type).forEach(imp => imports.push(imp)); - }); - imports.sort(); - return [...new Set(imports)]; - } - - protected importsForUnionMembers(u: UnionType): string[] { - const imports: string[] = []; - const [, nonNulls] = removeNullFromUnion(u); - this.forEachUnionMember(u, nonNulls, "none", null, (_fieldName, t) => { - this.javaImport(t).forEach(imp => imports.push(imp)); - }); - imports.sort(); - return [...new Set(imports)]; - } - - protected emitClassDefinition(c: ClassType, className: Name): void { - let imports = [...this.importsForType(c), ...this.importsForClass(c)]; - - this.emitFileHeader(className, imports); - this.emitDescription(this.descriptionForType(c)); - this.emitClassAttributes(c, className); - this.emitBlock(["public class ", className], () => { - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - if (this._options.lombok && this._options.lombokCopyAnnotations) { - const getter = this.annotationsForAccessor(c, className, name, jsonName, p, false); - const setter = this.annotationsForAccessor(c, className, name, jsonName, p, true); - if (getter.length !== 0) { - this.emitLine("@lombok.Getter(onMethod_ = {" + getter.join(", ") + "})"); - } - - if (setter.length !== 0) { - this.emitLine("@lombok.Setter(onMethod_ = {" + setter.join(", ") + "})"); - } - } - - this.emitLine("private ", this.javaType(false, p.type, true), " ", name, ";"); - }); - if (!this._options.lombok) { - this.forEachClassProperty(c, "leading-and-interposing", (name, jsonName, p) => { - this.emitDescription(this.descriptionForClassProperty(c, jsonName)); - const [getterName, setterName] = defined(this._gettersAndSettersForPropertyName.get(name)); - const rendered = this.javaType(false, p.type); - this.annotationsForAccessor(c, className, name, jsonName, p, false).forEach(annotation => - this.emitLine(annotation) - ); - this.emitLine("public ", rendered, " ", getterName, "() { return ", name, "; }"); - this.annotationsForAccessor(c, className, name, jsonName, p, true).forEach(annotation => - this.emitLine(annotation) - ); - this.emitLine("public void ", setterName, "(", rendered, " value) { this.", name, " = value; }"); - }); - } - }); - this.finishFile(); - } - - protected unionField(u: UnionType, t: Type, withIssues = false): { fieldName: Sourcelike; fieldType: Sourcelike } { - const fieldType = this.javaType(true, t, withIssues); - // FIXME: "Value" should be part of the name. - const fieldName = [this.nameForUnionMember(u, t), "Value"]; - return { fieldType, fieldName }; - } - - protected emitUnionAttributes(_u: UnionType, _unionName: Name): void { - // empty - } - - protected emitUnionSerializer(_u: UnionType, _unionName: Name): void { - // empty - } - - protected emitUnionDefinition(u: UnionType, unionName: Name): void { - const imports = [...this.importsForType(u), ...this.importsForUnionMembers(u)]; - - this.emitFileHeader(unionName, imports); - this.emitDescription(this.descriptionForType(u)); - const [, nonNulls] = removeNullFromUnion(u); - - this.emitUnionAttributes(u, unionName); - this.emitBlock(["public class ", unionName], () => { - for (const t of nonNulls) { - const { fieldType, fieldName } = this.unionField(u, t, true); - this.emitLine("public ", fieldType, " ", fieldName, ";"); - } - - this.emitUnionSerializer(u, unionName); - }); - this.finishFile(); - } - - protected emitEnumSerializationAttributes(_e: EnumType): void { - // Empty - } - - protected emitEnumDeserializationAttributes(_e: EnumType): void { - // Empty - } - - protected emitEnumDefinition(e: EnumType, enumName: Name): void { - this.emitFileHeader(enumName, this.importsForType(e)); - this.emitDescription(this.descriptionForType(e)); - const caseNames: Sourcelike[] = []; - this.forEachEnumCase(e, "none", name => { - if (caseNames.length > 0) caseNames.push(", "); - caseNames.push(name); - }); - caseNames.push(";"); - this.emitBlock(["public enum ", enumName], () => { - this.emitLine(caseNames); - this.ensureBlankLine(); - - this.emitEnumSerializationAttributes(e); - this.emitBlock("public String toValue()", () => { - this.emitLine("switch (this) {"); - this.indent(() => { - this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine("case ", name, ': return "', stringEscape(jsonName), '";'); - }); - }); - this.emitLine("}"); - this.emitLine("return null;"); - }); - this.ensureBlankLine(); - - this.emitEnumDeserializationAttributes(e); - this.emitBlock(["public static ", enumName, " forValue(String value) throws IOException"], () => { - this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine('if (value.equals("', stringEscape(jsonName), '")) return ', name, ";"); - }); - this.emitLine('throw new IOException("Cannot deserialize ', enumName, '");'); - }); - }); - this.finishFile(); - } - - protected emitSourceStructure(): void { - this.forEachNamedType( - "leading-and-interposing", - (c: ClassType, n: Name) => this.emitClassDefinition(c, n), - (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) - ); - } -} - -export class JacksonRenderer extends JavaRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - options: OptionValues - ) { - super(targetLanguage, renderContext, options); - } - - protected readonly _converterKeywords: string[] = [ - "JsonProperty", - "JsonDeserialize", - "JsonDeserializer", - "JsonSerialize", - "JsonSerializer", - "JsonParser", - "JsonProcessingException", - "DeserializationContext", - "SerializerProvider" - ]; - - protected emitClassAttributes(c: ClassType, _className: Name): void { - if (c.getProperties().size === 0) - this.emitLine("@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)"); - - super.emitClassAttributes(c, _className); - } - - protected annotationsForAccessor( - _c: ClassType, - _className: Name, - _propertyName: Name, - jsonName: string, - p: ClassProperty, - _isSetter: boolean - ): string[] { - const superAnnotations = super.annotationsForAccessor(_c, _className, _propertyName, jsonName, p, _isSetter); - - const annotations: string[] = ['@JsonProperty("' + stringEscape(jsonName) + '")']; - - switch (p.type.kind) { - case "date-time": - this._dateTimeProvider.dateTimeJacksonAnnotations.forEach(annotation => annotations.push(annotation)); - break; - case "date": - this._dateTimeProvider.dateJacksonAnnotations.forEach(annotation => annotations.push(annotation)); - break; - case "time": - this._dateTimeProvider.timeJacksonAnnotations.forEach(annotation => annotations.push(annotation)); - break; - default: - break; - } - - return [...superAnnotations, ...annotations]; - } - - protected importsForType(t: ClassType | UnionType | EnumType): string[] { - if (t instanceof ClassType) { - const imports = super.importsForType(t); - imports.push("com.fasterxml.jackson.annotation.*"); - return imports; - } - - if (t instanceof UnionType) { - const imports = super.importsForType(t); - imports.push( - "java.io.IOException", - "com.fasterxml.jackson.core.*", - "com.fasterxml.jackson.databind.*", - "com.fasterxml.jackson.databind.annotation.*" - ); - if (this._options.useList) { - imports.push("com.fasterxml.jackson.core.type.*"); - } - - return imports; - } - - if (t instanceof EnumType) { - const imports = super.importsForType(t); - imports.push("com.fasterxml.jackson.annotation.*"); - return imports; - } - - return assertNever(t); - } - - protected emitUnionAttributes(_u: UnionType, unionName: Name): void { - this.emitLine("@JsonDeserialize(using = ", unionName, ".Deserializer.class)"); - this.emitLine("@JsonSerialize(using = ", unionName, ".Serializer.class)"); - } - - protected emitUnionSerializer(u: UnionType, unionName: Name): void { - const stringBasedObjects: TypeKind[] = ["uuid", "time", "date", "date-time"]; - - const tokenCase = (tokenType: string): void => { - this.emitLine("case ", tokenType, ":"); - }; - - const emitNullDeserializer = (): void => { - this.indent(() => { - tokenCase("VALUE_NULL"); - this.indent(() => this.emitLine("break;")); - }); - }; - - const emitDeserializerCodeForStringObjects = ( - fieldName: Sourcelike, - kind: TypeKind, - parseFrom: string - ): void => { - switch (kind) { - case "date": - this.emitLine( - "value.", - fieldName, - " = ", - this._dateTimeProvider.convertStringToDate(parseFrom), - ";" - ); - - break; - case "time": - this.emitLine( - "value.", - fieldName, - " = ", - this._dateTimeProvider.convertStringToTime(parseFrom), - ";" - ); - - break; - case "date-time": - this.emitLine( - "value.", - fieldName, - " = ", - this._dateTimeProvider.convertStringToDateTime(parseFrom), - ";" - ); - break; - case "uuid": - this.emitLine("value.", fieldName, " = UUID.fromString(", parseFrom, ");"); - - break; - default: - return panic("Requested type isnt an object!"); - } - }; - - const emitDeserializeType = (t: Type, variableFieldName = ""): void => { - const { fieldName } = this.unionField(u, t); - const rendered = this.javaTypeWithoutGenerics(true, t); - if (this._options.useList && t instanceof ArrayType) { - this.emitLine( - "value.", - fieldName, - " = jsonParser.readValueAs(new TypeReference<", - rendered, - ">() {});" - ); - } else if (stringBasedObjects.some(stringBasedTypeKind => t.kind === stringBasedTypeKind)) { - emitDeserializerCodeForStringObjects(fieldName, t.kind, variableFieldName); - } else if (t.kind === "string") { - this.emitLine("value.", fieldName, " = ", variableFieldName, ";"); - } else if (t.kind === "enum") { - const { fieldType } = this.unionField(u, t, true); - this.emitLine("value.", fieldName, " = ", fieldType, ".forValue(", variableFieldName, ");"); - } else { - this.emitLine("value.", fieldName, " = jsonParser.readValueAs(", rendered, ".class);"); - } - }; - - const emitDeserializer = (tokenTypes: string[], kind: TypeKind): void => { - const t = u.findMember(kind); - if (t === undefined) return; - - this.indent(() => { - for (const tokenType of tokenTypes) { - tokenCase(tokenType); - } - - this.indent(() => { - emitDeserializeType(t); - this.emitLine("break;"); - }); - }); - }; - - const emitStringDeserializer = (): void => { - const enumType = u.findMember("enum"); - const stringType = u.findMember("string"); - - if ( - stringBasedObjects.every(kind => u.findMember(kind) === undefined) && - stringType === undefined && - enumType === undefined - ) - return; - - this.indent(() => { - tokenCase("VALUE_STRING"); - - this.indent(() => { - const fromVariable = "string"; - this.emitLine("String " + fromVariable + " = jsonParser.readValueAs(String.class);"); - - stringBasedObjects.forEach(kind => { - const type = u.findMember(kind); - if (type !== undefined) { - this.emitIgnoredTryCatchBlock(() => { - emitDeserializeType(type, fromVariable); - }); - } - }); - - if (enumType !== undefined) { - this.emitIgnoredTryCatchBlock(() => { - emitDeserializeType(enumType, fromVariable); - }); - } - - // String should be the last one if exists, because it cannot fail, unlike the parsers. - if (stringType !== undefined) { - emitDeserializeType(stringType, fromVariable); - } - - this.emitLine("break;"); - }); - }); - }; - - const emitNumberDeserializer = (): void => { - const integerType = u.findMember("integer"); - const doubleType = u.findMember("double"); - if (doubleType === undefined && integerType === undefined) return; - - this.indent(() => { - tokenCase("VALUE_NUMBER_INT"); - if (integerType !== undefined) { - this.indent(() => { - emitDeserializeType(integerType); - this.emitLine("break;"); - }); - } - - if (doubleType !== undefined) { - tokenCase("VALUE_NUMBER_FLOAT"); - this.indent(() => { - emitDeserializeType(doubleType); - this.emitLine("break;"); - }); - } - }); - }; - - const customObjectSerializer: TypeKind[] = ["time", "date", "date-time"]; - - const serializerCodeForType = (type: Type, fieldName: Sourcelike): Sourcelike => { - switch (type.kind) { - case "date": - return this._dateTimeProvider.convertDateToString(fieldName); - case "time": - return this._dateTimeProvider.convertTimeToString(fieldName); - case "date-time": - return this._dateTimeProvider.convertDateTimeToString(fieldName); - default: - return panic("Requested type doesn't have custom serializer code!"); - } - }; - - const emitSerializeType = (t: Type): void => { - let { fieldName } = this.unionField(u, t, true); - - this.emitBlock(["if (obj.", fieldName, " != null)"], () => { - if (customObjectSerializer.some(customSerializerType => t.kind === customSerializerType)) { - this.emitLine("jsonGenerator.writeObject(", serializerCodeForType(t, ["obj.", fieldName]), ");"); - } else { - this.emitLine("jsonGenerator.writeObject(obj.", fieldName, ");"); - } - - this.emitLine("return;"); - }); - }; - - const [maybeNull, nonNulls] = removeNullFromUnion(u); - - this.ensureBlankLine(); - this.emitBlock(["static class Deserializer extends JsonDeserializer<", unionName, ">"], () => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - unionName, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException" - ], - () => { - this.emitLine(unionName, " value = new ", unionName, "();"); - this.emitLine("switch (jsonParser.currentToken()) {"); - if (maybeNull !== null) emitNullDeserializer(); - emitNumberDeserializer(); - emitDeserializer(["VALUE_TRUE", "VALUE_FALSE"], "bool"); - emitStringDeserializer(); - emitDeserializer(["START_ARRAY"], "array"); - emitDeserializer(["START_OBJECT"], "class"); - emitDeserializer(["START_OBJECT"], "map"); - this.indent(() => - this.emitLine('default: throw new IOException("Cannot deserialize ', unionName, '");') - ); - this.emitLine("}"); - this.emitLine("return value;"); - } - ); - }); - this.ensureBlankLine(); - this.emitBlock(["static class Serializer extends JsonSerializer<", unionName, ">"], () => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public void serialize(", - unionName, - " obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException" - ], - () => { - for (const t of nonNulls) { - emitSerializeType(t); - } - - if (maybeNull !== null) { - this.emitLine("jsonGenerator.writeNull();"); - } else { - this.emitLine('throw new IOException("', unionName, ' must not be null");'); - } - } - ); - }); - } - - protected emitEnumSerializationAttributes(_e: EnumType): void { - this.emitLine("@JsonValue"); - } - - protected emitEnumDeserializationAttributes(_e: EnumType): void { - this.emitLine("@JsonCreator"); - } - - protected emitOffsetDateTimeConverterModule(): void { - this.emitLine("SimpleModule module = new SimpleModule();"); - - if (this._dateTimeProvider.shouldEmitDateTimeConverter) { - this.emitLine( - "module.addDeserializer(", - this._dateTimeProvider.dateTimeType, - ".class, new JsonDeserializer<", - this._dateTimeProvider.dateTimeType, - ">() {" - ); - this.indent(() => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - this._dateTimeProvider.dateTimeType, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", - "throws IOException, JsonProcessingException" - ], - () => { - this.emitLine("String value = jsonParser.getText();"); - this.emitLine("return ", this._dateTimeProvider.convertStringToDateTime("value"), ";"); - } - ); - }); - this.emitLine("});"); - } - - if (!this._dateTimeProvider.shouldEmitTimeConverter) { - this.emitLine( - "module.addDeserializer(", - this._dateTimeProvider.timeType, - ".class, new JsonDeserializer<", - this._dateTimeProvider.timeType, - ">() {" - ); - this.indent(() => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - this._dateTimeProvider.timeType, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", - "throws IOException, JsonProcessingException" - ], - () => { - this.emitLine("String value = jsonParser.getText();"); - this.emitLine("return ", this._dateTimeProvider.convertStringToTime("value"), ";"); - } - ); - }); - this.emitLine("});"); - } - - if (!this._dateTimeProvider.shouldEmitDateConverter) { - this.emitLine( - "module.addDeserializer(", - this._dateTimeProvider.dateType, - ".class, new JsonDeserializer<", - this._dateTimeProvider.dateType, - ">() {" - ); - this.indent(() => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - this._dateTimeProvider.dateType, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", - "throws IOException, JsonProcessingException" - ], - () => { - this.emitLine("String value = jsonParser.getText();"); - this.emitLine("return ", this._dateTimeProvider.convertStringToDate("value"), ";"); - } - ); - }); - this.emitLine("});"); - } - - this.emitLine("mapper.registerModule(module);"); - } - - protected emitConverterClass(): void { - this.startFile(this._converterClassname); - this.emitCommentLines([ - "To use this code, add the following Maven dependency to your project:", - "", - this._options.lombok ? " org.projectlombok : lombok : 1.18.2" : "", - " com.fasterxml.jackson.core : jackson-databind : 2.9.0", - this._options.dateTimeProvider === "java8" - ? " com.fasterxml.jackson.datatype : jackson-datatype-jsr310 : 2.9.0" - : "", - "", - "Import this package:", - "" - ]); - this.emitLine("// import ", this._options.packageName, ".Converter;"); - this.emitMultiline(`// -// Then you can deserialize a JSON string with -//`); - this.forEachTopLevel("none", (t, name) => { - this.emitLine( - "// ", - this.javaType(false, t), - " data = Converter.", - this.decoderName(name), - "(jsonString);" - ); - }); - this.ensureBlankLine(); - const imports = [ - "java.io.IOException", - "com.fasterxml.jackson.databind.*", - "com.fasterxml.jackson.databind.module.SimpleModule", - "com.fasterxml.jackson.core.JsonParser", - "com.fasterxml.jackson.core.JsonProcessingException", - "java.util.*" - ].concat(this._dateTimeProvider.converterImports); - this.emitPackageAndImports(imports); - this.ensureBlankLine(); - this.emitBlock(["public class Converter"], () => { - this.emitLine("// Date-time helpers"); - this._dateTimeProvider.emitDateTimeConverters(); - - this.emitLine("// Serialize/deserialize helpers"); - this.forEachTopLevel("leading-and-interposing", (topLevelType, topLevelName) => { - const topLevelTypeRendered = this.javaType(false, topLevelType); - this.emitBlock( - [ - "public static ", - topLevelTypeRendered, - " ", - this.decoderName(topLevelName), - "(String json) throws IOException" - ], - () => { - this.emitLine("return ", this.readerGetterName(topLevelName), "().readValue(json);"); - } - ); - this.ensureBlankLine(); - this.emitBlock( - [ - "public static String ", - this.encoderName(topLevelName), - "(", - topLevelTypeRendered, - " obj) throws JsonProcessingException" - ], - () => { - this.emitLine("return ", this.writerGetterName(topLevelName), "().writeValueAsString(obj);"); - } - ); - }); - this.forEachTopLevel("leading-and-interposing", (topLevelType, topLevelName) => { - const readerName = this.fieldOrMethodName("reader", topLevelName); - const writerName = this.fieldOrMethodName("writer", topLevelName); - this.emitLine("private static ObjectReader ", readerName, ";"); - this.emitLine("private static ObjectWriter ", writerName, ";"); - this.ensureBlankLine(); - this.emitBlock( - ["private static void ", this.methodName("instantiate", "Mapper", topLevelName), "()"], - () => { - const renderedForClass = this.javaTypeWithoutGenerics(false, topLevelType); - this.emitLine("ObjectMapper mapper = new ObjectMapper();"); - this.emitLine("mapper.findAndRegisterModules();"); - this.emitLine("mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);"); - this.emitLine("mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);"); - this.emitOffsetDateTimeConverterModule(); - this.emitLine(readerName, " = mapper.readerFor(", renderedForClass, ".class);"); - this.emitLine(writerName, " = mapper.writerFor(", renderedForClass, ".class);"); - } - ); - this.ensureBlankLine(); - this.emitBlock(["private static ObjectReader ", this.readerGetterName(topLevelName), "()"], () => { - this.emitLine( - "if (", - readerName, - " == null) ", - this.methodName("instantiate", "Mapper", topLevelName), - "();" - ); - this.emitLine("return ", readerName, ";"); - }); - this.ensureBlankLine(); - this.emitBlock(["private static ObjectWriter ", this.writerGetterName(topLevelName), "()"], () => { - this.emitLine( - "if (", - writerName, - " == null) ", - this.methodName("instantiate", "Mapper", topLevelName), - "();" - ); - this.emitLine("return ", writerName, ";"); - }); - }); - }); - this.finishFile(); - } - - protected emitSourceStructure(): void { - this.emitConverterClass(); - super.emitSourceStructure(); - } -} diff --git a/packages/quicktype-core/src/language/Java/language.ts b/packages/quicktype-core/src/language/Java/language.ts index 3d22278b5..368757a02 100644 --- a/packages/quicktype-core/src/language/Java/language.ts +++ b/packages/quicktype-core/src/language/Java/language.ts @@ -1,32 +1,21 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { JacksonRenderer } from "./JavaJacksonRenderer"; import { JavaRenderer } from "./JavaRenderer"; export const javaOptions = { - useList: new EnumOption( - "array-type", - "Use T[] or List", - [ - ["array", false], - ["list", true] - ], - "array" - ), + useList: new EnumOption("array-type", "Use T[] or List", { array: false, list: true } as const, "array"), justTypes: new BooleanOption("just-types", "Plain types only", false), dateTimeProvider: new EnumOption( "datetime-provider", "Date time provider type", - [ - ["java8", "java8"], - ["legacy", "legacy"] - ], + { java8: "java8", legacy: "legacy" } as const, "java8" ), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), @@ -36,21 +25,19 @@ export const javaOptions = { lombokCopyAnnotations: new BooleanOption("lombok-copy-annotations", "Copy accessor annotations", true, "secondary") }; -export class JavaTargetLanguage extends TargetLanguage { +export const javaLanguageConfig = { + displayName: "Java", + names: ["java"], + extension: "java" +} as const; + +export class JavaTargetLanguage extends TargetLanguage { public constructor() { - super("Java", ["java"], "java"); + super(javaLanguageConfig); } - protected getOptions(): Array> { - return [ - javaOptions.useList, - javaOptions.justTypes, - javaOptions.dateTimeProvider, - javaOptions.acronymStyle, - javaOptions.packageName, - javaOptions.lombok, - javaOptions.lombokCopyAnnotations - ]; + public getOptions(): typeof javaOptions { + return javaOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { diff --git a/packages/quicktype-core/src/language/JavaScript/language.ts b/packages/quicktype-core/src/language/JavaScript/language.ts index 85d61bbb6..b781a2044 100644 --- a/packages/quicktype-core/src/language/JavaScript/language.ts +++ b/packages/quicktype-core/src/language/JavaScript/language.ts @@ -1,11 +1,11 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { convertersOption } from "../../support/Converters"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { JavaScriptRenderer } from "./JavaScriptRenderer"; @@ -19,31 +19,31 @@ export const javaScriptOptions = { "secondary" ), converters: convertersOption(), - rawType: new EnumOption<"json" | "any">( + rawType: new EnumOption( "raw-type", "Type of raw input (json by default)", - [ - ["json", "json"], - ["any", "any"] - ], + { + json: "json", + any: "any" + } as const, "json", "secondary" ) }; -export class JavaScriptTargetLanguage extends TargetLanguage { - public constructor(displayName = "JavaScript", names: string[] = ["javascript", "js", "jsx"], extension = "js") { - super(displayName, names, extension); +export const javaScriptLanguageConfig = { + displayName: "JavaScript", + names: ["javascript", "js", "jsx"], + extension: "js" +} as const; + +export class JavaScriptTargetLanguage extends TargetLanguage { + public constructor() { + super(javaScriptLanguageConfig); } - protected getOptions(): Array> { - return [ - javaScriptOptions.runtimeTypecheck, - javaScriptOptions.runtimeTypecheckIgnoreUnknownProperties, - javaScriptOptions.acronymStyle, - javaScriptOptions.converters, - javaScriptOptions.rawType - ]; + public getOptions(): typeof javaScriptOptions { + return javaScriptOptions; } public get stringTypeMapping(): StringTypeMapping { diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts index 8ba620927..317ac8596 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts @@ -1,9 +1,9 @@ import { type RenderContext } from "../../Renderer"; -import { EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { EnumOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { convertersOption } from "../../support/Converters"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { JavaScriptPropTypesRenderer } from "./JavaScriptPropTypesRenderer"; @@ -13,25 +13,27 @@ export const javaScriptPropTypesOptions = { moduleSystem: new EnumOption( "module-system", "Which module system to use", - [ - ["common-js", false], - ["es6", true] - ], + { + "common-js": false, + "es6": true + } as const, "es6" ) }; -export class JavaScriptPropTypesTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return [javaScriptPropTypesOptions.acronymStyle, javaScriptPropTypesOptions.converters]; +export const javaScriptPropTypesLanguageConfig = { + displayName: "JavaScript PropTypes", + names: ["javascript-prop-types"], + extension: "js" +} as const; + +export class JavaScriptPropTypesTargetLanguage extends TargetLanguage { + public constructor() { + super(javaScriptPropTypesLanguageConfig); } - public constructor( - displayName = "JavaScript PropTypes", - names: string[] = ["javascript-prop-types"], - extension = "js" - ) { - super(displayName, names, extension); + public getOptions(): typeof javaScriptPropTypesOptions { + return javaScriptPropTypesOptions; } protected makeRenderer( diff --git a/packages/quicktype-core/src/language/Kotlin/language.ts b/packages/quicktype-core/src/language/Kotlin/language.ts index 59a150dc9..27d149a3b 100644 --- a/packages/quicktype-core/src/language/Kotlin/language.ts +++ b/packages/quicktype-core/src/language/Kotlin/language.ts @@ -1,46 +1,45 @@ import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type RenderContext } from "../../Renderer"; -import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { KotlinJacksonRenderer } from "./KotlinJacksonRenderer"; import { KotlinKlaxonRenderer } from "./KotlinKlaxonRenderer"; import { KotlinRenderer } from "./KotlinRenderer"; import { KotlinXRenderer } from "./KotlinXRenderer"; -export enum Framework { - None = "None", - Jackson = "Jackson", - Klaxon = "Klaxon", - KotlinX = "KotlinX" -} - export const kotlinOptions = { framework: new EnumOption( "framework", "Serialization framework", - [ - ["just-types", Framework.None], - ["jackson", Framework.Jackson], - ["klaxon", Framework.Klaxon], - ["kotlinx", Framework.KotlinX] - ], + { + "just-types": "None", + "jackson": "Jackson", + "klaxon": "Klaxon", + "kotlinx": "KotlinX" + } as const, "klaxon" ), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") }; -export class KotlinTargetLanguage extends TargetLanguage { +export const kotlinLanguageConfig = { + displayName: "Kotlin", + names: ["kotlin"], + extension: "kt" +} as const; + +export class KotlinTargetLanguage extends TargetLanguage { public constructor() { - super("Kotlin", ["kotlin"], "kt"); + super(kotlinLanguageConfig); } - protected getOptions(): Array> { - return [kotlinOptions.framework, kotlinOptions.acronymStyle, kotlinOptions.packageName]; + public getOptions(): typeof kotlinOptions { + return kotlinOptions; } public get supportsOptionalClassProperties(): boolean { @@ -55,13 +54,13 @@ export class KotlinTargetLanguage extends TargetLanguage { const options = getOptionValues(kotlinOptions, untypedOptionValues); switch (options.framework) { - case Framework.None: + case "None": return new KotlinRenderer(this, renderContext, options); - case Framework.Jackson: + case "Jackson": return new KotlinJacksonRenderer(this, renderContext, options); - case Framework.Klaxon: + case "Klaxon": return new KotlinKlaxonRenderer(this, renderContext, options); - case Framework.KotlinX: + case "KotlinX": return new KotlinXRenderer(this, renderContext, options); default: return assertNever(options.framework); diff --git a/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts index faca214c8..0814a9e94 100644 --- a/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts +++ b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts @@ -12,7 +12,7 @@ import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, Type, Unio import { isAnyOrNull, matchType, nullableFromUnion } from "../../TypeUtils"; import { forbiddenPropertyNames, keywords } from "./constants"; -import { type MemoryAttribute, type objectiveCOptions } from "./language"; +import { type objectiveCOptions } from "./language"; import { DEFAULT_CLASS_PREFIX, forbiddenForEnumCases, @@ -22,6 +22,8 @@ import { typeNameStyle } from "./utils"; +type MemoryAttribute = "assign" | "strong" | "copy"; + const DEBUG = false; export class ObjectiveCRenderer extends ConvenienceRenderer { diff --git a/packages/quicktype-core/src/language/Objective-C/language.ts b/packages/quicktype-core/src/language/Objective-C/language.ts index cb34271f9..a8b8b88ad 100644 --- a/packages/quicktype-core/src/language/Objective-C/language.ts +++ b/packages/quicktype-core/src/language/Objective-C/language.ts @@ -1,42 +1,41 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { ObjectiveCRenderer } from "./ObjectiveCRenderer"; import { DEFAULT_CLASS_PREFIX } from "./utils"; -export type MemoryAttribute = "assign" | "strong" | "copy"; -export interface OutputFeatures { - implementation: boolean; - interface: boolean; -} - export const objectiveCOptions = { - features: new EnumOption("features", "Interface and implementation", [ - ["all", { interface: true, implementation: true }], - ["interface", { interface: true, implementation: false }], - ["implementation", { interface: false, implementation: true }] - ]), + features: new EnumOption( + "features", + "Interface and implementation", + { + all: { interface: true, implementation: true }, + interface: { interface: true, implementation: false }, + implementation: { interface: false, implementation: true } + } as const, + "all" + ), justTypes: new BooleanOption("just-types", "Plain types only", false), marshallingFunctions: new BooleanOption("functions", "C-style functions", false), classPrefix: new StringOption("class-prefix", "Class prefix", "PREFIX", DEFAULT_CLASS_PREFIX), extraComments: new BooleanOption("extra-comments", "Extra comments", false) }; -export class ObjectiveCTargetLanguage extends TargetLanguage { +export const objectiveCLanguageConfig = { + displayName: "Objective-C", + names: ["objc", "objective-c", "objectivec"], + extension: "m" +} as const; + +export class ObjectiveCTargetLanguage extends TargetLanguage { public constructor() { - super("Objective-C", ["objc", "objective-c", "objectivec"], "m"); + super(objectiveCLanguageConfig); } - protected getOptions(): Array> { - return [ - objectiveCOptions.justTypes, - objectiveCOptions.classPrefix, - objectiveCOptions.features, - objectiveCOptions.extraComments, - objectiveCOptions.marshallingFunctions - ]; + public getOptions(): typeof objectiveCOptions { + return objectiveCOptions; } protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ObjectiveCRenderer { diff --git a/packages/quicktype-core/src/language/Php/language.ts b/packages/quicktype-core/src/language/Php/language.ts index cfcfe9654..2177ffa5f 100644 --- a/packages/quicktype-core/src/language/Php/language.ts +++ b/packages/quicktype-core/src/language/Php/language.ts @@ -1,12 +1,10 @@ -import * as _ from "lodash"; - import { type RenderContext } from "../../Renderer"; -import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { PhpRenderer } from "./PhpRenderer"; @@ -17,13 +15,20 @@ export const phpOptions = { withClosing: new BooleanOption("with-closing", "PHP Closing Tag", false), acronymStyle: acronymOption(AcronymStyleOptions.Pascal) }; -export class PhpTargetLanguage extends TargetLanguage { + +export const phpLanguageConfig = { + displayName: "PHP", + names: ["php"], + extension: "php" +} as const; + +export class PhpTargetLanguage extends TargetLanguage { public constructor() { - super("PHP", ["php"], "php"); + super(phpLanguageConfig); } - protected getOptions(): Array> { - return _.values(phpOptions); + public getOptions(): typeof phpOptions { + return phpOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { diff --git a/packages/quicktype-core/src/language/Pike/language.ts b/packages/quicktype-core/src/language/Pike/language.ts index 1772085a0..35be5b5a0 100644 --- a/packages/quicktype-core/src/language/Pike/language.ts +++ b/packages/quicktype-core/src/language/Pike/language.ts @@ -1,19 +1,23 @@ import { type RenderContext } from "../../Renderer"; -import { type Option } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType } from "../../types"; import { PikeRenderer } from "./PikeRenderer"; export const pikeOptions = {}; -export class PikeTargetLanguage extends TargetLanguage { +export const pikeLanguageConfig = { + displayName: "Pike", + names: ["pike", "pikelang"], + extension: "pmod" +} as const; + +export class PikeTargetLanguage extends TargetLanguage { public constructor() { - super("Pike", ["pike", "pikelang"], "pmod"); + super(pikeLanguageConfig); } - protected getOptions(): Array> { - return []; + public getOptions(): {} { + return {}; } protected makeRenderer(renderContext: RenderContext): PikeRenderer { diff --git a/packages/quicktype-core/src/language/Python/language.ts b/packages/quicktype-core/src/language/Python/language.ts index 4f57ec059..5b02fab98 100644 --- a/packages/quicktype-core/src/language/Python/language.ts +++ b/packages/quicktype-core/src/language/Python/language.ts @@ -1,11 +1,11 @@ import { iterableSome } from "collection-utils"; import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type, UnionType } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { JSONPythonRenderer } from "./JSONPythonRenderer"; import { PythonRenderer } from "./PythonRenderer"; @@ -16,14 +16,14 @@ export interface PythonFeatures { } export const pythonOptions = { - features: new EnumOption( + features: new EnumOption( "python-version", "Python version", - [ - ["3.5", { typeHints: false, dataClasses: false }], - ["3.6", { typeHints: true, dataClasses: false }], - ["3.7", { typeHints: true, dataClasses: true }] - ], + { + "3.5": { typeHints: false, dataClasses: false }, + "3.6": { typeHints: true, dataClasses: false }, + "3.7": { typeHints: true, dataClasses: true } + }, "3.6" ), justTypes: new BooleanOption("just-types", "Classes only", false), @@ -31,14 +31,15 @@ export const pythonOptions = { pydanticBaseModel: new BooleanOption("pydantic-base-model", "Uses pydantic BaseModel", false) }; -export class PythonTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return [ - pythonOptions.features, - pythonOptions.justTypes, - pythonOptions.nicePropertyNames, - pythonOptions.pydanticBaseModel - ]; +export const pythonLanguageConfig = { displayName: "Python", names: ["python", "py"], extension: "py" } as const; + +export class PythonTargetLanguage extends TargetLanguage { + public constructor() { + super(pythonLanguageConfig); + } + + public getOptions(): typeof pythonOptions { + return pythonOptions; } public get stringTypeMapping(): StringTypeMapping { diff --git a/packages/quicktype-core/src/language/Ruby/language.ts b/packages/quicktype-core/src/language/Ruby/language.ts index e85598008..e96c0109c 100644 --- a/packages/quicktype-core/src/language/Ruby/language.ts +++ b/packages/quicktype-core/src/language/Ruby/language.ts @@ -1,28 +1,39 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { RubyRenderer } from "./RubyRenderer"; import { Strictness } from "./utils"; export const rubyOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), - strictness: new EnumOption("strictness", "Type strictness", [ - ["strict", Strictness.Strict], - ["coercible", Strictness.Coercible], - ["none", Strictness.None] - ]), + strictness: new EnumOption( + "strictness", + "Type strictness", + { + strict: Strictness.Strict, + coercible: Strictness.Coercible, + none: Strictness.None + } as const, + "strict" + ), namespace: new StringOption("namespace", "Specify a wrapping Namespace", "NAME", "", "secondary") }; -export class RubyTargetLanguage extends TargetLanguage { +export const rubyLanguageConfig = { + displayName: "Ruby", + names: ["ruby"], + extension: "rb" +} as const; + +export class RubyTargetLanguage extends TargetLanguage { public constructor() { - super("Ruby", ["ruby"], "rb"); + super(rubyLanguageConfig); } - protected getOptions(): Array> { - return [rubyOptions.justTypes, rubyOptions.strictness, rubyOptions.namespace]; + public getOptions(): typeof rubyOptions { + return rubyOptions; } public get supportsOptionalClassProperties(): boolean { diff --git a/packages/quicktype-core/src/language/Rust/language.ts b/packages/quicktype-core/src/language/Rust/language.ts index 2f62883ea..ac61b6fca 100644 --- a/packages/quicktype-core/src/language/Rust/language.ts +++ b/packages/quicktype-core/src/language/Rust/language.ts @@ -1,48 +1,55 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { RustRenderer } from "./RustRenderer"; import { Density, Visibility } from "./utils"; export const rustOptions = { - density: new EnumOption("density", "Density", [ - ["normal", Density.Normal], - ["dense", Density.Dense] - ]), - visibility: new EnumOption("visibility", "Field visibility", [ - ["private", Visibility.Private], - ["crate", Visibility.Crate], - ["public", Visibility.Public] - ]), + density: new EnumOption( + "density", + "Density", + { + normal: Density.Normal, + dense: Density.Dense + } as const, + "normal" + ), + visibility: new EnumOption( + "visibility", + "Field visibility", + { + private: Visibility.Private, + crate: Visibility.Crate, + public: Visibility.Public + } as const, + "private" + ), deriveDebug: new BooleanOption("derive-debug", "Derive Debug impl", false), deriveClone: new BooleanOption("derive-clone", "Derive Clone impl", false), derivePartialEq: new BooleanOption("derive-partial-eq", "Derive PartialEq impl", false), skipSerializingNone: new BooleanOption("skip-serializing-none", "Skip serializing empty Option fields", false), edition2018: new BooleanOption("edition-2018", "Edition 2018", true), leadingComments: new BooleanOption("leading-comments", "Leading Comments", true) -}; +} as const; -export class RustTargetLanguage extends TargetLanguage { - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RustRenderer { - return new RustRenderer(this, renderContext, getOptionValues(rustOptions, untypedOptionValues)); - } +export const rustLanguageConfig = { + displayName: "Rust", + names: ["rust", "rs", "rustlang"], + extension: "rs" +} as const; +export class RustTargetLanguage extends TargetLanguage { public constructor() { - super("Rust", ["rust", "rs", "rustlang"], "rs"); + super(rustLanguageConfig); } - protected getOptions(): Array> { - return [ - rustOptions.density, - rustOptions.visibility, - rustOptions.deriveDebug, - rustOptions.deriveClone, - rustOptions.derivePartialEq, - rustOptions.edition2018, - rustOptions.leadingComments, - rustOptions.skipSerializingNone - ]; + public getOptions(): typeof rustOptions { + return rustOptions; + } + + protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): RustRenderer { + return new RustRenderer(this, renderContext, getOptionValues(rustOptions, untypedOptionValues)); } } diff --git a/packages/quicktype-core/src/language/Scala3/language.ts b/packages/quicktype-core/src/language/Scala3/language.ts index 3b00207d0..519034caf 100644 --- a/packages/quicktype-core/src/language/Scala3/language.ts +++ b/packages/quicktype-core/src/language/Scala3/language.ts @@ -1,41 +1,41 @@ import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type RenderContext } from "../../Renderer"; -import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { CirceRenderer } from "./CirceRenderer"; import { Scala3Renderer } from "./Scala3Renderer"; import { UpickleRenderer } from "./UpickleRenderer"; -export enum Framework { - None = "None", - Upickle = "Upickle", - Circe = "Circe" -} - export const scala3Options = { framework: new EnumOption( "framework", "Serialization framework", - [ - ["just-types", Framework.None], - ["circe", Framework.Circe], - ["upickle", Framework.Upickle] - ], - undefined + { + "just-types": "None", + "circe": "Circe", + "upickle": "Upickle" + } as const, + "just-types" ), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") }; -export class Scala3TargetLanguage extends TargetLanguage { +export const scala3LanguageConfig = { + displayName: "Scala3", + names: ["scala3"], + extension: "scala" +} as const; + +export class Scala3TargetLanguage extends TargetLanguage { public constructor() { - super("Scala3", ["scala3"], "scala"); + super(scala3LanguageConfig); } - protected getOptions(): Array> { - return [scala3Options.framework, scala3Options.packageName]; + public getOptions(): typeof scala3Options { + return scala3Options; } public get supportsOptionalClassProperties(): boolean { @@ -50,11 +50,11 @@ export class Scala3TargetLanguage extends TargetLanguage { const options = getOptionValues(scala3Options, untypedOptionValues); switch (options.framework) { - case Framework.None: + case "None": return new Scala3Renderer(this, renderContext, options); - case Framework.Upickle: + case "Upickle": return new UpickleRenderer(this, renderContext, options); - case Framework.Circe: + case "Circe": return new CirceRenderer(this, renderContext, options); default: return assertNever(options.framework); diff --git a/packages/quicktype-core/src/language/Smithy4s/language.ts b/packages/quicktype-core/src/language/Smithy4s/language.ts index 2726d0ff5..25b0b1c09 100644 --- a/packages/quicktype-core/src/language/Smithy4s/language.ts +++ b/packages/quicktype-core/src/language/Smithy4s/language.ts @@ -1,9 +1,9 @@ import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type RenderContext } from "../../Renderer"; -import { EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { Smithy4sRenderer } from "./Smithy4sRenderer"; @@ -12,17 +12,29 @@ export enum Framework { } export const smithyOptions = { - framework: new EnumOption("framework", "Serialization framework", [["just-types", Framework.None]], undefined), + // FIXME: why does this exist + framework: new EnumOption( + "framework", + "Serialization framework", + { "just-types": Framework.None } as const, + "just-types" + ), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") }; -export class SmithyTargetLanguage extends TargetLanguage { +export const smithyLanguageConfig = { + displayName: "Smithy", + names: ["smithy4a"], + extension: "smithy" +} as const; + +export class SmithyTargetLanguage extends TargetLanguage { public constructor() { - super("Smithy", ["Smithy"], "smithy"); + super(smithyLanguageConfig); } - protected getOptions(): Array> { - return [smithyOptions.framework, smithyOptions.packageName]; + public getOptions(): typeof smithyOptions { + return smithyOptions; } public get supportsOptionalClassProperties(): boolean { diff --git a/packages/quicktype-core/src/language/Swift/language.ts b/packages/quicktype-core/src/language/Swift/language.ts index 152e932af..6f10c198d 100644 --- a/packages/quicktype-core/src/language/Swift/language.ts +++ b/packages/quicktype-core/src/language/Swift/language.ts @@ -1,11 +1,11 @@ import { type DateTimeRecognizer } from "../../DateTime"; import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, type Option, StringOption, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { SwiftRenderer } from "./SwiftRenderer"; import { SwiftDateTimeRecognizer } from "./utils"; @@ -23,19 +23,24 @@ export const swiftOptions = { ), alamofire: new BooleanOption("alamofire", "Alamofire extensions", false), namedTypePrefix: new StringOption("type-prefix", "Prefix for type names", "PREFIX", "", "secondary"), - useClasses: new EnumOption("struct-or-class", "Structs or classes", [ - ["struct", false], - ["class", true] - ]), + useClasses: new EnumOption( + "struct-or-class", + "Structs or classes", + { + struct: false, + class: true + } as const, + "struct" + ), mutableProperties: new BooleanOption("mutable-properties", "Use var instead of let for object properties", false), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), dense: new EnumOption( "density", "Code density", - [ - ["dense", true], - ["normal", false] - ], + { + dense: true, + normal: false + } as const, "dense", "secondary" ), @@ -56,52 +61,39 @@ export const swiftOptions = { accessLevel: new EnumOption( "access-level", "Access level", - [ - ["internal", "internal"], - ["public", "public"] - ], + { + internal: "internal", + public: "public" + } as const, "internal", "secondary" ), protocol: new EnumOption( "protocol", "Make types implement protocol", - [ - ["none", { equatable: false, hashable: false }], - ["equatable", { equatable: true, hashable: false }], - ["hashable", { equatable: false, hashable: true }] - ], + { + none: { equatable: false, hashable: false }, + equatable: { equatable: true, hashable: false }, + hashable: { equatable: false, hashable: true } + } as const, "none", "secondary" ) }; -export class SwiftTargetLanguage extends TargetLanguage { +export const swiftLanguageConfig = { + displayName: "Swift", + names: ["swift", "swift4"], + extension: "swift" +} as const; + +export class SwiftTargetLanguage extends TargetLanguage { public constructor() { - super("Swift", ["swift", "swift4"], "swift"); + super(swiftLanguageConfig); } - protected getOptions(): Array> { - return [ - swiftOptions.justTypes, - swiftOptions.useClasses, - swiftOptions.dense, - swiftOptions.convenienceInitializers, - swiftOptions.explicitCodingKeys, - swiftOptions.codingKeysProtocol, - swiftOptions.accessLevel, - swiftOptions.alamofire, - swiftOptions.linux, - swiftOptions.namedTypePrefix, - swiftOptions.protocol, - swiftOptions.acronymStyle, - swiftOptions.objcSupport, - swiftOptions.optionalEnums, - swiftOptions.sendable, - swiftOptions.swift5Support, - swiftOptions.multiFileOutput, - swiftOptions.mutableProperties - ]; + public getOptions(): typeof swiftOptions { + return swiftOptions; } public get stringTypeMapping(): StringTypeMapping { diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts index 5e311edb0..9d14bf29d 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts @@ -1,7 +1,7 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { TypeScriptEffectSchemaRenderer } from "./TypeScriptEffectSchemaRenderer"; @@ -9,17 +9,19 @@ export const typeScriptEffectSchemaOptions = { justSchema: new BooleanOption("just-schema", "Schema only", false) }; -export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return []; +export const typeScriptEffectSchemaLanguageConfig = { + displayName: "TypeScript Effect Schema", + names: ["typescript-effect-schema"], + extension: "ts" +} as const; + +export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { + public constructor() { + super(typeScriptEffectSchemaLanguageConfig); } - public constructor( - displayName: string = "TypeScript Effect Schema", - names: string[] = ["typescript-effect-schema"], - extension: string = "ts" - ) { - super(displayName, names, extension); + public getOptions(): {} { + return {}; } protected makeRenderer( diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/language.ts b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts index 8f8c37af5..c2285d9fc 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts @@ -1,7 +1,10 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; -import { type JavaScriptRenderer, JavaScriptTargetLanguage, javaScriptOptions } from "../JavaScript"; +import { BooleanOption, getOptionValues } from "../../RendererOptions"; +import { TargetLanguage } from "../../TargetLanguage"; +import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; +import { type StringTypeMapping } from "../../TypeBuilder"; +import { type FixMeOptionsType } from "../../types"; +import { javaScriptOptions } from "../JavaScript"; import { FlowRenderer } from "./FlowRenderer"; import { TypeScriptRenderer } from "./TypeScriptRenderer"; @@ -20,46 +23,71 @@ export const tsFlowOptions = Object.assign({}, javaScriptOptions, { readonly: new BooleanOption("readonly", "Use readonly type members", false) }); -export abstract class TypeScriptFlowBaseTargetLanguage extends JavaScriptTargetLanguage { - protected getOptions(): Array> { - return [ - tsFlowOptions.justTypes, - tsFlowOptions.nicePropertyNames, - tsFlowOptions.declareUnions, - tsFlowOptions.runtimeTypecheck, - tsFlowOptions.runtimeTypecheckIgnoreUnknownProperties, - tsFlowOptions.acronymStyle, - tsFlowOptions.converters, - tsFlowOptions.rawType, - tsFlowOptions.preferUnions, - tsFlowOptions.preferTypes, - tsFlowOptions.preferConstValues, - tsFlowOptions.readonly - ]; +export const typeScriptLanguageConfig = { + displayName: "TypeScript", + names: ["typescript", "ts", "tsx"], + extension: "ts" +} as const; + +export class TypeScriptTargetLanguage extends TargetLanguage { + public constructor() { + super(typeScriptLanguageConfig); + } + + public getOptions(): typeof tsFlowOptions { + return tsFlowOptions; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + const dateTimeType = "date-time"; + mapping.set("date", dateTimeType); + mapping.set("date-time", dateTimeType); + return mapping; } public get supportsOptionalClassProperties(): boolean { return true; } - protected abstract makeRenderer( - renderContext: RenderContext, - untypedOptionValues: FixMeOptionsType - ): JavaScriptRenderer; -} - -export class TypeScriptTargetLanguage extends TypeScriptFlowBaseTargetLanguage { - public constructor() { - super("TypeScript", ["typescript", "ts", "tsx"], "ts"); + public get supportsFullObjectType(): boolean { + return true; } protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): TypeScriptRenderer { return new TypeScriptRenderer(this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues)); } } -export class FlowTargetLanguage extends TypeScriptFlowBaseTargetLanguage { + +export const flowLanguageConfig = { + displayName: "Flow", + names: ["flow"], + extension: "js" +} as const; + +export class FlowTargetLanguage extends TargetLanguage { public constructor() { - super("Flow", ["flow"], "js"); + super(flowLanguageConfig); + } + + public getOptions(): typeof tsFlowOptions { + return tsFlowOptions; + } + + public get stringTypeMapping(): StringTypeMapping { + const mapping: Map = new Map(); + const dateTimeType = "date-time"; + mapping.set("date", dateTimeType); + mapping.set("date-time", dateTimeType); + return mapping; + } + + public get supportsOptionalClassProperties(): boolean { + return true; + } + + public get supportsFullObjectType(): boolean { + return true; } protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): FlowRenderer { diff --git a/packages/quicktype-core/src/language/TypeScriptZod/language.ts b/packages/quicktype-core/src/language/TypeScriptZod/language.ts index a22f1298a..9f119aec5 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod/language.ts @@ -1,9 +1,9 @@ import { type RenderContext } from "../../Renderer"; -import { BooleanOption, type Option, getOptionValues } from "../../RendererOptions"; +import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; import { type StringTypeMapping } from "../../TypeBuilder"; -import { type FixMeOptionsAnyType, type FixMeOptionsType } from "../../types"; +import { type FixMeOptionsType } from "../../types"; import { TypeScriptZodRenderer } from "./TypeScriptZodRenderer"; @@ -11,17 +11,19 @@ export const typeScriptZodOptions = { justSchema: new BooleanOption("just-schema", "Schema only", false) }; -export class TypeScriptZodTargetLanguage extends TargetLanguage { - protected getOptions(): Array> { - return []; +export const typeScriptZodLanguageConfig = { + displayName: "TypeScript Zod", + names: ["typescript-zod"], + extension: "ts" +} as const; + +export class TypeScriptZodTargetLanguage extends TargetLanguage { + public constructor() { + super(typeScriptZodLanguageConfig); } - public constructor( - displayName: string = "TypeScript Zod", - names: string[] = ["typescript-zod"], - extension: string = "ts" - ) { - super(displayName, names, extension); + public getOptions(): {} { + return {}; } public get stringTypeMapping(): StringTypeMapping { diff --git a/packages/quicktype-core/src/language/index.ts b/packages/quicktype-core/src/language/index.ts index 024a52494..ee9515c3b 100644 --- a/packages/quicktype-core/src/language/index.ts +++ b/packages/quicktype-core/src/language/index.ts @@ -24,3 +24,7 @@ export * from "./Swift"; export * from "./TypeScriptFlow"; export * from "./TypeScriptEffectSchema"; export * from "./TypeScriptZod"; + +export { all as defaultTargetLanguages, languageNamed, isLanguageName } from "./All"; +export type { LanguageName, LanguageDisplayName } from "./types"; +export type { RendererOptions } from "./options.types"; diff --git a/packages/quicktype-core/src/language/options.types.ts b/packages/quicktype-core/src/language/options.types.ts new file mode 100644 index 000000000..c0addc16a --- /dev/null +++ b/packages/quicktype-core/src/language/options.types.ts @@ -0,0 +1,15 @@ +import type { OptionMap } from "../RendererOptions"; + +import type { LanguageName, LanguageNameMap } from "./types"; + +export type LanguageRawOptionMap = Readonly<{ + [Lang in keyof LanguageNameMap]: ReturnType; +}>; + +export type LanguageOptionMap = Readonly<{ + [Lang in keyof LanguageRawOptionMap]: OptionMap; +}>; + +export type RendererOptions = { + -readonly [K in keyof Options]: Options[K]; +}; diff --git a/packages/quicktype-core/src/language/types.ts b/packages/quicktype-core/src/language/types.ts new file mode 100644 index 000000000..1a685e627 --- /dev/null +++ b/packages/quicktype-core/src/language/types.ts @@ -0,0 +1,15 @@ +import { type TargetLanguage } from "../TargetLanguage"; + +import { type all } from "./All"; + +type AllLanguages = (typeof all)[number]; + +export type LanguageDisplayName = Language["displayName"]; +export type LanguageName = Language["names"][number]; + +export type LanguageDisplayNameMap = { + [Language in AllLanguages as LanguageDisplayName]: Language; +}; +export type LanguageNameMap = { + [Language in AllLanguages as LanguageName]: Language; +}; diff --git a/packages/quicktype-core/src/support/Acronyms.ts b/packages/quicktype-core/src/support/Acronyms.ts index fa9d29f1b..a5c715408 100644 --- a/packages/quicktype-core/src/support/Acronyms.ts +++ b/packages/quicktype-core/src/support/Acronyms.ts @@ -9,16 +9,16 @@ export enum AcronymStyleOptions { Pascal = "pascal" } -export const acronymOption = function (defaultOption: AcronymStyleOptions): EnumOption { +export const acronymOption = function (defaultOption: AcronymStyleOptions) { return new EnumOption( "acronym-style", "Acronym naming style", - [ - [AcronymStyleOptions.Original, AcronymStyleOptions.Original], - [AcronymStyleOptions.Pascal, AcronymStyleOptions.Pascal], - [AcronymStyleOptions.Camel, AcronymStyleOptions.Camel], - [AcronymStyleOptions.Lower, AcronymStyleOptions.Lower] - ], + { + [AcronymStyleOptions.Original]: AcronymStyleOptions.Original, + [AcronymStyleOptions.Pascal]: AcronymStyleOptions.Pascal, + [AcronymStyleOptions.Camel]: AcronymStyleOptions.Camel, + [AcronymStyleOptions.Lower]: AcronymStyleOptions.Lower + } as const, defaultOption, "secondary" ); diff --git a/packages/quicktype-core/src/support/Converters.ts b/packages/quicktype-core/src/support/Converters.ts index caec348bf..0bc2f58fb 100644 --- a/packages/quicktype-core/src/support/Converters.ts +++ b/packages/quicktype-core/src/support/Converters.ts @@ -5,14 +5,14 @@ export enum ConvertersOptions { TopLevel = "top-level" } -export function convertersOption(): EnumOption { +export function convertersOption() { return new EnumOption( "converters", "Which converters to generate (top-level by default)", - [ - [ConvertersOptions.TopLevel, ConvertersOptions.TopLevel], - [ConvertersOptions.AllObjects, ConvertersOptions.AllObjects] - ], + { + [ConvertersOptions.TopLevel]: ConvertersOptions.TopLevel, + [ConvertersOptions.AllObjects]: ConvertersOptions.AllObjects + } as const, ConvertersOptions.TopLevel, "secondary" ); diff --git a/packages/quicktype-core/src/types.ts b/packages/quicktype-core/src/types.ts index 2b26cc2be..22a702b5a 100644 --- a/packages/quicktype-core/src/types.ts +++ b/packages/quicktype-core/src/types.ts @@ -1,6 +1,9 @@ -// FIXME: remove these when options are strongly types +export * from "./language/types"; +export * from "./language/options.types"; +// FIXME: remove these when options are strongly typed /* eslint-disable @typescript-eslint/no-explicit-any */ export type FixMeOptionsType = Record; -export type FixMeOptionsAnyType = any; +// FIXME: Remove this post TS5.4 +export type NoInfer = [T][T extends any ? 0 : never]; diff --git a/packages/quicktype-vscode/src/extension.ts b/packages/quicktype-vscode/src/extension.ts index 3e8083721..fecc619aa 100644 --- a/packages/quicktype-vscode/src/extension.ts +++ b/packages/quicktype-vscode/src/extension.ts @@ -11,6 +11,7 @@ import { type TargetLanguage, defaultTargetLanguages, inferenceFlagNames, + isLanguageName, jsonInputForTargetLanguage, languageNamed, quicktype @@ -64,17 +65,17 @@ async function pickTargetLanguage(): Promise { const languageChoices = defaultTargetLanguages.map(l => l.displayName).sort(); let chosenName = await vscode.window.showQuickPick(languageChoices); const cancelled = chosenName === undefined; - if (chosenName === undefined) { - chosenName = "typescript"; + if (chosenName === undefined || !isLanguageName(chosenName)) { + return { cancelled, lang: languageNamed("typescript") }; } - // @ts-expect-error languageNamed is not strongly typed yet return { cancelled, lang: languageNamed(chosenName) }; } async function getTargetLanguage(editor: vscode.TextEditor): Promise { const documentLanguage = editor.document.languageId; - const currentLanguage = languageNamed(documentLanguage); + const languageName = isLanguageName(documentLanguage) ? documentLanguage : "typescript"; + const currentLanguage = languageNamed(languageName); if (currentLanguage !== undefined) { return { cancelled: false, @@ -102,10 +103,10 @@ async function runQuicktype( if (justTypes) { // FIXME: The target language should have a property to return these options. if (lang.name === "csharp") { - rendererOptions.features = "just-types"; + (rendererOptions as RendererOptions<"csharp">).features = "just-types"; } else if (lang.name === "kotlin") { - rendererOptions.framework = "just-types"; - } else { + (rendererOptions as RendererOptions<"kotlin">).framework = "just-types"; + } else if ("just-types" in rendererOptions) { rendererOptions["just-types"] = "true"; } } @@ -202,7 +203,7 @@ async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justType } } - // @ts-expect-error FIXME: resolve this after above ^ + // @ts-expect-error const text = result.lines.join("\n"); const selection = editor.selection; return await editor.edit(builder => { @@ -364,11 +365,11 @@ function deduceTargetLanguage(): TargetLanguage { const sorted = Array.from(counts).sort(([_na, ca], [_nb, cb]) => cb - ca); for (const [name] of sorted) { - const lang = languageNamed(name); - if (lang !== undefined) return lang; + if (isLanguageName(name)) { + return languageNamed(name); + } } - // @ts-expect-error languageNamed is not yet strongly typed return languageNamed("typescript"); } @@ -481,7 +482,7 @@ export async function activate(context: vscode.ExtensionContext): Promise ); const maybeName = extensionContext.workspaceState.get(lastTargetLanguageUsedKey); - if (typeof maybeName === "string") { + if (typeof maybeName === "string" && isLanguageName(maybeName)) { explicitlySetTargetLanguage = languageNamed(maybeName); } } diff --git a/src/index.ts b/src/index.ts index 6d6f799c1..ad9f3d82b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,6 +20,7 @@ import { JSONInput, JSONSchemaInput, type JSONSourceData, + type LanguageName, type OptionDefinition, type Options, type RendererOptions, @@ -34,6 +35,7 @@ import { getTargetLanguage, inferenceFlagNames, inferenceFlags, + isLanguageName, languageNamed, messageAssert, messageError, @@ -59,7 +61,7 @@ const packageJSON = require("../package.json"); const wordWrap: (s: string) => string = _wordwrap(90); -export interface CLIOptions { +export interface CLIOptions { // We use this to access the inference flags // eslint-disable-next-line @typescript-eslint/no-explicit-any [option: string]: any; @@ -73,13 +75,13 @@ export interface CLIOptions { help: boolean; httpHeader?: string[]; httpMethod?: string; - lang: string; + lang: Lang; noRender: boolean; out?: string; quiet: boolean; - rendererOptions: RendererOptions; + rendererOptions: RendererOptions; src: string[]; srcLang: string; @@ -222,7 +224,7 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr return sources; } -function inferLang(options: Partial, defaultLanguage: string): string { +function inferLang(options: Partial, defaultLanguage: LanguageName): string | LanguageName { // Output file extension determines the language if language is undefined if (options.out !== undefined) { let extension = path.extname(options.out); @@ -272,19 +274,19 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua language = targetLanguage; } else { const languageName = opts.lang ?? inferLang(opts, defaultDefaultTargetLanguageName); - const maybeLanguage = languageNamed(languageName); - if (maybeLanguage === undefined) { + + if (isLanguageName(languageName)) { + language = languageNamed(languageName); + } else { return messageError("DriverUnknownOutputLanguage", { lang: languageName }); } - - language = maybeLanguage; } const options: CLIOptions = { src: opts.src ?? [], srcUrls: opts.srcUrls, srcLang: srcLang, - lang: language.displayName, + lang: language.name as LanguageName, topLevel: opts.topLevel ?? inferTopLevel(opts), noRender: !!opts.noRender, alphabetizeProperties: !!opts.alphabetizeProperties, @@ -311,7 +313,7 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua return options; } -function makeLangTypeLabel(targetLanguages: TargetLanguage[]): string { +function makeLangTypeLabel(targetLanguages: readonly TargetLanguage[]): string { assert(targetLanguages.length > 0, "Must have at least one target language"); return targetLanguages.map(r => _.minBy(r.names, s => s.length)).join("|"); } @@ -331,7 +333,7 @@ function dashedFromCamelCase(name: string): string { .join("-"); } -function makeOptionDefinitions(targetLanguages: TargetLanguage[]): OptionDefinition[] { +function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): OptionDefinition[] { const beforeLang: OptionDefinition[] = [ { name: "out", @@ -513,7 +515,7 @@ const tableOptionsForOptions: TableOptions = { ] }; -function makeSectionsBeforeRenderers(targetLanguages: TargetLanguage[]): UsageSection[] { +function makeSectionsBeforeRenderers(targetLanguages: readonly TargetLanguage[]): UsageSection[] { const langDisplayNames = targetLanguages.map(r => r.displayName).join(", "); return [ @@ -583,7 +585,8 @@ export function parseCLIOptions(argv: string[], targetLanguage?: TargetLanguage) // twice. This is the first parse to get the renderer: const incompleteOptions = inferCLIOptions(parseOptions(optionDefinitions, argv, true), targetLanguage); if (targetLanguage === undefined) { - targetLanguage = getTargetLanguage(incompleteOptions.lang); + const languageName = isLanguageName(incompleteOptions.lang) ? incompleteOptions.lang : "typescript"; + targetLanguage = getTargetLanguage(languageName); } const rendererOptionDefinitions = targetLanguage.cliOptionDefinitions.actual; @@ -615,14 +618,16 @@ function parseOptions(definitions: OptionDefinition[], argv: string[], partial: } } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const options: { [key: string]: any; rendererOptions: RendererOptions } = { rendererOptions: {} }; - for (const o of definitions) { - if (!hasOwnProperty(opts, o.name)) continue; - const v = opts[o.name] as string; - if (o.renderer !== undefined) options.rendererOptions[o.name] = v; - else { - const k = _.lowerFirst(o.name.split("-").map(_.upperFirst).join("")); + const options: { [key: string]: unknown; rendererOptions: RendererOptions } = { rendererOptions: {} }; + for (const optionDefinition of definitions) { + if (!hasOwnProperty(opts, optionDefinition.name)) { + continue; + } + const v = opts[optionDefinition.name] as string; + if (optionDefinition.name in options.rendererOptions) { + (options.rendererOptions as Record)[optionDefinition.name] = v; + } else { + const k = _.lowerFirst(optionDefinition.name.split("-").map(_.upperFirst).join("")); options[k] = v; } } @@ -630,7 +635,7 @@ function parseOptions(definitions: OptionDefinition[], argv: string[], partial: return options; } -function usage(targetLanguages: TargetLanguage[]): void { +function usage(targetLanguages: readonly TargetLanguage[]): void { const rendererSections: UsageSection[] = []; for (const language of targetLanguages) { @@ -711,7 +716,8 @@ export function jsonInputForTargetLanguage( handleJSONRefs = false ): JSONInput { if (typeof targetLanguage === "string") { - targetLanguage = defined(languageNamed(targetLanguage, languages)); + const languageName = isLanguageName(targetLanguage) ? targetLanguage : "typescript"; + targetLanguage = defined(languageNamed(languageName, languages)); } const compressedJSON = new CompressedJSONFromStream(targetLanguage.dateTimeRecognizer, handleJSONRefs); @@ -901,11 +907,12 @@ export async function makeQuicktypeOptions( } } - const lang = languageNamed(options.lang, targetLanguages); - if (lang === undefined) { + if (!isLanguageName(options.lang)) { return messageError("DriverUnknownOutputLanguage", { lang: options.lang }); } + const lang = languageNamed(options.lang, targetLanguages); + const quicktypeOptions: Partial = { lang, alphabetizeProperties: options.alphabetizeProperties, diff --git a/test/fixtures.ts b/test/fixtures.ts index 2e0759db9..d8279f864 100644 --- a/test/fixtures.ts +++ b/test/fixtures.ts @@ -23,7 +23,7 @@ import { callAndExpectFailure } from "./utils"; import * as languages from "./languages"; -import { RendererOptions } from "quicktype-core"; +import type { LanguageName, Option, RendererOptions } from "quicktype-core"; import { mustNotHappen, defined } from "../packages/quicktype-core/dist/support/Support"; import { DefaultDateTimeRecognizer } from "../packages/quicktype-core/dist/DateTime"; @@ -80,8 +80,11 @@ function additionalTestFiles(base: string, extension: string, features: string[] function runEnvForLanguage(additionalRendererOptions: RendererOptions): NodeJS.ProcessEnv { const newEnv = Object.assign({}, process.env); - for (const o of Object.getOwnPropertyNames(additionalRendererOptions)) { - newEnv["QUICKTYPE_" + o.toUpperCase().replace("-", "_")] = additionalRendererOptions[o].toString(); + + for (const option of Object.keys(additionalRendererOptions)) { + newEnv["QUICKTYPE_" + option.toUpperCase().replace("-", "_")] = ( + additionalRendererOptions[option as keyof typeof additionalRendererOptions] as Option + ).name; } return newEnv; } @@ -379,7 +382,7 @@ class JSONToXToYFixture extends JSONFixture { constructor( private readonly _fixturePrefix: string, - languageXName: string, + languageXName: LanguageName, languageXOutputFilename: string, rendererOptions: RendererOptions, skipJSON: string[], diff --git a/test/languages.ts b/test/languages.ts index f1890a7d5..95d3e3ea7 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -1,3 +1,5 @@ +import { type LanguageName } from "quicktype-core"; + import * as process from "process"; // @ts-ignore import { RendererOptions } from "../dist/quicktype-core/Run"; @@ -18,7 +20,7 @@ export type LanguageFeature = | "pattern"; export interface Language { - name: string; + name: LanguageName; base: string; setupCommand?: string; compileCommand?: string; @@ -94,7 +96,7 @@ export const CSharpLanguageSystemTextJson: Language = { skipSchema: [ "top-level-enum.schema" // The code we generate for top-level enums is incompatible with the driver ], - rendererOptions: { "check-required": "true", framework: "SystemTextJson" }, + rendererOptions: { "check-required": "true", "framework": "SystemTextJson" }, quickTestRendererOptions: [ { "array-type": "list" }, { "csharp-version": "6" }, @@ -147,7 +149,7 @@ export const JavaLanguageWithLegacyDateTime: Language = { export const JavaLanguageWithLombok: Language = { ...JavaLanguage, base: "test/fixtures/java-lombok", - quickTestRendererOptions: [{ "array-type": "list", lombok: "true" }] + quickTestRendererOptions: [{ "array-type": "list", "lombok": "true" }] }; export const PythonLanguage: Language = { From 472075a54ddc15fb6d5fa4e93f95b33449abbb2c Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 29 Apr 2025 12:34:54 +1200 Subject: [PATCH 89/99] update to latest effect/Schema (#2646) --- .../TypeScriptEffectSchemaRenderer.ts | 31 +++++++++++++----- .../fixtures/typescript-effect-schema/main.ts | 2 +- .../package-lock.json | 32 ++++++++----------- .../typescript-effect-schema/package.json | 2 +- 4 files changed, 38 insertions(+), 29 deletions(-) diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts index f06807a39..e7979d269 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts @@ -76,12 +76,15 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { protected emitImports(): void { this.ensureBlankLine(); - this.emitLine(this.importStatement("* as S", '"@effect/schema/Schema"')); + this.emitLine(this.importStatement("* as S", '"effect/Schema"')); } private typeMapTypeForProperty(p: ClassProperty): Sourcelike { - const typeMap = this.typeMapTypeFor(p.type); - return p.isOptional ? ["S.optional(", typeMap, ")"] : typeMap; + if (!p.isOptional) { + return this.typeMapTypeFor(p.type); + } + + return ["S.optional(", this.typeMapTypeFor(p.type), ")"]; } private typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { @@ -104,13 +107,25 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { _stringType => "S.String", arrayType => ["S.Array(", this.typeMapTypeFor(arrayType.items, false), ")"], _classType => panic("Should already be handled."), - _mapType => ["S.Record(S.String, ", this.typeMapTypeFor(_mapType.values, false), ")"], + _mapType => ["S.Record({ key: S.String, value: ", this.typeMapTypeFor(_mapType.values, false), "})"], _enumType => panic("Should already be handled."), unionType => { - const children = Array.from(unionType.getChildren()).map((type: Type) => - this.typeMapTypeFor(type, false) - ); - return ["S.Union(", ...arrayIntercalate(", ", children), ")"]; + const types = Array.from(unionType.getChildren()); + let children: Sourcelike[] = []; + let nullable = false; + for (const type of types) { + if (type.kind === "null") { + nullable = true; + } else { + children.push(this.typeMapTypeFor(type, false)); + } + } + + if (nullable && children.length === 1) { + return ["S.NullOr(", children[0], ")"]; + } + + return ["S.Union(", ...arrayIntercalate(", ", children), nullable ? ", S.Null)" : ")"]; }, _transformedStringType => { return "S.String"; diff --git a/test/fixtures/typescript-effect-schema/main.ts b/test/fixtures/typescript-effect-schema/main.ts index 9894cc4e5..c2bf066b2 100644 --- a/test/fixtures/typescript-effect-schema/main.ts +++ b/test/fixtures/typescript-effect-schema/main.ts @@ -1,7 +1,7 @@ import * as TopLevel from "./TopLevel"; import fs from "fs"; import process from "process"; -import * as Schema from "@effect/schema/Schema"; +import * as Schema from "effect/Schema"; const sample = process.argv[2]; const json = fs.readFileSync(sample); diff --git a/test/fixtures/typescript-effect-schema/package-lock.json b/test/fixtures/typescript-effect-schema/package-lock.json index 949bf3c2b..118b2e72c 100644 --- a/test/fixtures/typescript-effect-schema/package-lock.json +++ b/test/fixtures/typescript-effect-schema/package-lock.json @@ -9,22 +9,13 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@effect/schema": "^0.66.5" + "effect": "^3.10.0" }, "devDependencies": { "tsx": "^3.12.2", "typescript": "^5.4.0" } }, - "node_modules/@effect/schema": { - "version": "0.66.5", - "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.66.5.tgz", - "integrity": "sha512-xfu5161JyrfAS1Ruwv0RXd4QFiCALbm3iu9nlW9N9K+52wbS0WdO6XUekPZ9V/O7LN+XmlIh5Y9xhJaIWCZ/gw==", - "peerDependencies": { - "effect": "^3.0.3", - "fast-check": "^3.13.2" - } - }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -384,10 +375,13 @@ "dev": true }, "node_modules/effect": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/effect/-/effect-3.0.3.tgz", - "integrity": "sha512-mgG+FoWrM4sny8OxDFWCpq+6LwGf9cK/JztVhxZQeZM9ZMXY+lKbdMEQmemNYce0QVAz2+YqUKwhKzOidwbZzg==", - "peer": true + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.10.2.tgz", + "integrity": "sha512-Sj73q9jwwR4t3WV6E0sw4KMhx0fAHebXavYS5rsHLrWKcf4fzhDh6IixJB6mDhT7rEax/9UsoYjzrc1p7VLwbw==", + "license": "MIT", + "dependencies": { + "fast-check": "^3.21.0" + } }, "node_modules/esbuild": { "version": "0.18.20", @@ -427,9 +421,9 @@ } }, "node_modules/fast-check": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.17.2.tgz", - "integrity": "sha512-+3DPTxtxABLgmmVpYxrash3DHoq0cMa1jjLYNp3qqokKKhqVEaS4lbnaDKqWU5Dd6C2pEudPPBAEEQ9nUou9OQ==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.22.0.tgz", + "integrity": "sha512-8HKz3qXqnHYp/VCNn2qfjHdAdcI8zcSqOyX64GOMukp7SL2bfzfeDKjSd+UyECtejccaZv3LcvZTm9YDD22iCQ==", "funding": [ { "type": "individual", @@ -440,7 +434,7 @@ "url": "https://opencollective.com/fast-check" } ], - "peer": true, + "license": "MIT", "dependencies": { "pure-rand": "^6.1.0" }, @@ -488,7 +482,7 @@ "url": "https://opencollective.com/fast-check" } ], - "peer": true + "license": "MIT" }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", diff --git a/test/fixtures/typescript-effect-schema/package.json b/test/fixtures/typescript-effect-schema/package.json index 81e8e5e6e..91b3ad6ce 100644 --- a/test/fixtures/typescript-effect-schema/package.json +++ b/test/fixtures/typescript-effect-schema/package.json @@ -13,6 +13,6 @@ "typescript": "^5.4.0" }, "dependencies": { - "@effect/schema": "^0.66.5" + "effect": "^3.10.0" } } From 8a9178971b7a176ac1d78c83ec8aacb7ab7f243f Mon Sep 17 00:00:00 2001 From: Crayon Date: Wed, 30 Apr 2025 11:53:57 -0400 Subject: [PATCH 90/99] Fix text in C++ default statement (#2623) * Fix typos * Fix text in C++ default statement * Remove whitespace characters in cpp file --- .../src/language/CPlusPlus/CPlusPlusRenderer.ts | 8 +++++--- packages/quicktype-core/src/rewrites/ExpandStrings.ts | 2 +- test/fixtures/cplusplus/main.cpp | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index 4b70339f2..e9694d857 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -198,7 +198,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { // }; // // checking to see if the collapse of the variant has - // occured and then doing the isCycleBreakerType check + // occurred and then doing the isCycleBreakerType check // on the single type the variant would contain seems // to solve the problem. But does this point to a problem // with the core library or with the CPlusPlus package @@ -916,7 +916,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (constraints === undefined) return; const { minMax, minMaxLength, pattern } = constraints; - // TODO is there a better way to check if property.type is an interger or a number? + // TODO is there a better way to check if property.type is an integer or a number? const cppType = this.cppType( property.type, { @@ -1627,7 +1627,9 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ); }); this.emitLine( - `default: throw std::runtime_error("Unexpected value in enumeration \\"${enumName}\\": " + std::to_string(static_cast(x)));` + `default: throw std::runtime_error("Unexpected value in enumeration \\"`, + enumName, + `\\": " + std::to_string(static_cast(x)));` ); }); } diff --git a/packages/quicktype-core/src/rewrites/ExpandStrings.ts b/packages/quicktype-core/src/rewrites/ExpandStrings.ts index abddcfab5..f8a86385a 100644 --- a/packages/quicktype-core/src/rewrites/ExpandStrings.ts +++ b/packages/quicktype-core/src/rewrites/ExpandStrings.ts @@ -173,7 +173,7 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum const transformations = mappedStringTypes.transformations; // FIXME: This is probably wrong, or at least overly conservative. This is for the case // where some attributes are identity ones, i.e. where we can't merge the primitive types, - // like it happens in the line after the `if`. The case where this occured was with URI + // like it happens in the line after the `if`. The case where this occurred was with URI // attributes: we had two separate string types with different URI attributes, but because // both are rewritten via `getPrimitiveType` below without any attributes, they end up // being the same string type. diff --git a/test/fixtures/cplusplus/main.cpp b/test/fixtures/cplusplus/main.cpp index 3052e3c21..d963530b5 100644 --- a/test/fixtures/cplusplus/main.cpp +++ b/test/fixtures/cplusplus/main.cpp @@ -14,14 +14,14 @@ int main(int argc, const char * argv[]) { std::cerr << "Usage: " << argv[0] << " FILE"; return 1; } - + std::ifstream t(argv[1]); std::string str((std::istreambuf_iterator(t)), std::istreambuf_iterator()); TopLevel tl = json::parse(str); json j2 = tl; - + std::cout << j2 << std::endl; return 0; From 088dadca2afb8200b083e1b73321638398c266d3 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Thu, 1 May 2025 08:35:06 -0700 Subject: [PATCH 91/99] fix: Options parse check (#2723) * update options parse to filter by cli option kind --- package-lock.json | 4 +- .../src/RendererOptions/types.ts | 5 +- src/index.ts | 77 ++++++++++++------- 3 files changed, 54 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1dd564e76..b362c04c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "quicktype", - "version": "23.0.0", + "version": "23.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "quicktype", - "version": "23.0.0", + "version": "23.1.0", "license": "Apache-2.0", "workspaces": [ "./packages/quicktype-core", diff --git a/packages/quicktype-core/src/RendererOptions/types.ts b/packages/quicktype-core/src/RendererOptions/types.ts index cdca12570..79fe7f19e 100644 --- a/packages/quicktype-core/src/RendererOptions/types.ts +++ b/packages/quicktype-core/src/RendererOptions/types.ts @@ -2,9 +2,10 @@ import type { EnumOption, Option } from "./index"; /** * Primary options show up in the web UI in the "Language" settings tab, - * secondary options in "Other". + * Secondary options in "Other". + * CLI is only for cli */ -export type OptionKind = "primary" | "secondary"; +export type OptionKind = "primary" | "secondary" | "cli"; export interface OptionDefinition { alias?: string; diff --git a/src/index.ts b/src/index.ts index ad9f3d82b..82099eefc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -340,14 +340,16 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti alias: "o", type: String, typeLabel: "FILE", - description: "The output file. Determines --lang and --top-level." + description: "The output file. Determines --lang and --top-level.", + kind: "cli" }, { name: "top-level", alias: "t", type: String, typeLabel: "NAME", - description: "The name for the top level type." + description: "The name for the top level type.", + kind: "cli" } ]; const lang: OptionDefinition[] = @@ -359,7 +361,8 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti alias: "l", type: String, typeLabel: "LANG", - description: "The target language." + description: "The target language.", + kind: "cli" } ]; const afterLang: OptionDefinition[] = [ @@ -369,7 +372,8 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti type: String, defaultValue: undefined, typeLabel: "SRC_LANG", - description: "The source language (default is json)." + description: "The source language (default is json).", + kind: "cli" }, { name: "src", @@ -377,13 +381,15 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti multiple: true, defaultOption: true, typeLabel: "FILE|URL|DIRECTORY", - description: "The file, url, or data directory to type." + description: "The file, url, or data directory to type.", + kind: "cli" }, { name: "src-urls", type: String, typeLabel: "FILE", - description: "Tracery grammar describing URLs to crawl." + description: "Tracery grammar describing URLs to crawl.", + kind: "cli" } ]; const inference: OptionDefinition[] = Array.from( @@ -391,7 +397,8 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti return { name: dashedFromCamelCase(negatedInferenceFlagName(name)), type: Boolean, - description: flag.negationDescription + "." + description: flag.negationDescription + ".", + kind: "cli" as const }; }).values() ); @@ -400,26 +407,30 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti name: "graphql-schema", type: String, typeLabel: "FILE", - description: "GraphQL introspection file." + description: "GraphQL introspection file.", + kind: "cli" }, { name: "graphql-introspect", type: String, typeLabel: "URL", - description: "Introspect GraphQL schema from a server." + description: "Introspect GraphQL schema from a server.", + kind: "cli" }, { name: "http-method", type: String, typeLabel: "METHOD", - description: "HTTP method to use for the GraphQL introspection query." + description: "HTTP method to use for the GraphQL introspection query.", + kind: "cli" }, { name: "http-header", type: String, multiple: true, typeLabel: "HEADER", - description: "Header(s) to attach to all HTTP requests, including the GraphQL introspection query." + description: "Header(s) to attach to all HTTP requests, including the GraphQL introspection query.", + kind: "cli" }, { name: "additional-schema", @@ -427,58 +438,68 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti type: String, multiple: true, typeLabel: "FILE", - description: "Register the $id's of additional JSON Schema files." + description: "Register the $id's of additional JSON Schema files.", + kind: "cli" }, { name: "no-render", type: Boolean, - description: "Don't render output." + description: "Don't render output.", + kind: "cli" }, { name: "alphabetize-properties", type: Boolean, - description: "Alphabetize order of class properties." + description: "Alphabetize order of class properties.", + kind: "cli" }, { name: "all-properties-optional", type: Boolean, - description: "Make all class properties optional." + description: "Make all class properties optional.", + kind: "cli" }, { name: "build-markov-chain", type: String, typeLabel: "FILE", - description: "Markov chain corpus filename." + description: "Markov chain corpus filename.", + kind: "cli" }, { name: "quiet", type: Boolean, - description: "Don't show issues in the generated code." + description: "Don't show issues in the generated code.", + kind: "cli" }, { name: "debug", type: String, typeLabel: "OPTIONS or all", description: - "Comma separated debug options: print-graph, print-reconstitution, print-gather-names, print-transformations, print-schema-resolving, print-times, provenance" + "Comma separated debug options: print-graph, print-reconstitution, print-gather-names, print-transformations, print-schema-resolving, print-times, provenance", + kind: "cli" }, { name: "telemetry", type: String, typeLabel: "enable|disable", - description: "Enable anonymous telemetry to help improve quicktype" + description: "Enable anonymous telemetry to help improve quicktype", + kind: "cli" }, { name: "help", alias: "h", type: Boolean, - description: "Get some help." + description: "Get some help.", + kind: "cli" }, { name: "version", alias: "v", type: Boolean, - description: "Display the version of quicktype" + description: "Display the version of quicktype", + kind: "cli" } ]; return beforeLang.concat(lang, afterLang, inference, afterInference); @@ -600,9 +621,7 @@ export function parseCLIOptions(argv: string[], targetLanguage?: TargetLanguage) // according to each option definition's `renderer` field. If `partial` is false this // will throw if it encounters an unknown option. function parseOptions(definitions: OptionDefinition[], argv: string[], partial: boolean): Partial { - // FIXME: update this when options strongly typed - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let opts: { [key: string]: any }; + let opts: commandLineArgs.CommandLineOptions; try { opts = commandLineArgs(definitions, { argv, partial }); } catch (e) { @@ -623,12 +642,14 @@ function parseOptions(definitions: OptionDefinition[], argv: string[], partial: if (!hasOwnProperty(opts, optionDefinition.name)) { continue; } - const v = opts[optionDefinition.name] as string; - if (optionDefinition.name in options.rendererOptions) { - (options.rendererOptions as Record)[optionDefinition.name] = v; + + const optionValue = opts[optionDefinition.name] as string; + if (optionDefinition.kind !== "cli") { + (options.rendererOptions as Record)[optionDefinition.name] = + optionValue; } else { const k = _.lowerFirst(optionDefinition.name.split("-").map(_.upperFirst).join("")); - options[k] = v; + options[k] = optionValue; } } From 7143aeedb63f2202a426b964e5356c2afa681477 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sun, 11 May 2025 18:29:03 -0700 Subject: [PATCH 92/99] Refactor out import cycles (#2733) * refactor out PathElement dependency cycle * refactor out type transformed string util cycle * separate index for re-exports * rename to TransformedStringType * move Type files into dir * refactor out TypeBuilderUtils * fix imports * split TypeGraph utils to own file * move provenance type attribute kind to own file * fix getGraph instanceof * recomment cycle * export through index * assign TypeGraph to TypeBuilder after init * update comments --- .../quicktype-core/src/ConvenienceRenderer.ts | 4 +- packages/quicktype-core/src/DeclarationIR.ts | 4 +- packages/quicktype-core/src/GatherNames.ts | 6 +- packages/quicktype-core/src/GraphRewriting.ts | 11 +- .../quicktype-core/src/MakeTransformations.ts | 3 +- packages/quicktype-core/src/Renderer.ts | 2 +- packages/quicktype-core/src/Run.ts | 8 +- packages/quicktype-core/src/TargetLanguage.ts | 6 +- packages/quicktype-core/src/Transformers.ts | 3 +- .../src/Type/ProvenanceTypeAttributeKind.ts | 34 +++ .../src/Type/TransformedStringType.ts | 86 +++++++ .../quicktype-core/src/{ => Type}/Type.ts | 100 ++------ .../src/{ => Type}/TypeBuilder.ts | 93 ++----- .../src/Type/TypeBuilderUtils.ts | 27 ++ .../src/{ => Type}/TypeGraph.ts | 236 +++--------------- .../quicktype-core/src/Type/TypeGraphUtils.ts | 125 ++++++++++ packages/quicktype-core/src/Type/TypeRef.ts | 66 +++++ .../src/{ => Type}/TypeUtils.ts | 12 +- packages/quicktype-core/src/Type/index.ts | 7 + packages/quicktype-core/src/UnifyClasses.ts | 8 +- packages/quicktype-core/src/UnionBuilder.ts | 6 +- .../src/attributes/AccessorNames.ts | 2 +- .../src/attributes/Description.ts | 9 +- .../src/attributes/EnumValues.ts | 2 +- .../src/attributes/StringTypes.ts | 5 +- .../src/attributes/URIAttributes.ts | 2 +- packages/quicktype-core/src/index.ts | 9 +- .../quicktype-core/src/input/Inference.ts | 6 +- packages/quicktype-core/src/input/Inputs.ts | 2 +- .../src/input/JSONSchemaInput.ts | 25 +- .../quicktype-core/src/input/PathElement.ts | 12 + .../src/language/CJSON/CJSONRenderer.ts | 2 +- .../language/CPlusPlus/CPlusPlusRenderer.ts | 2 +- .../src/language/CSharp/CSharpRenderer.ts | 2 +- .../CSharp/NewtonSoftCSharpRenderer.ts | 2 +- .../CSharp/SystemTextJsonCSharpRenderer.ts | 2 +- .../src/language/CSharp/language.ts | 2 +- .../src/language/CSharp/utils.ts | 2 +- .../src/language/Crystal/CrystalRenderer.ts | 2 +- .../src/language/Dart/DartRenderer.ts | 2 +- .../src/language/Dart/language.ts | 2 +- .../src/language/Elixir/ElixirRenderer.ts | 2 +- .../src/language/Elm/ElmRenderer.ts | 2 +- .../quicktype-core/src/language/Elm/utils.ts | 2 +- .../src/language/Golang/GolangRenderer.ts | 2 +- .../src/language/Golang/language.ts | 2 +- .../src/language/Haskell/HaskellRenderer.ts | 2 +- .../language/JSONSchema/JSONSchemaRenderer.ts | 2 +- .../src/language/JSONSchema/language.ts | 2 +- .../src/language/Java/JavaJacksonRenderer.ts | 2 +- .../src/language/Java/JavaRenderer.ts | 2 +- .../src/language/Java/language.ts | 2 +- .../language/JavaScript/JavaScriptRenderer.ts | 2 +- .../src/language/JavaScript/language.ts | 2 +- .../JavaScriptPropTypesRenderer.ts | 2 +- .../language/Kotlin/KotlinJacksonRenderer.ts | 2 +- .../language/Kotlin/KotlinKlaxonRenderer.ts | 2 +- .../src/language/Kotlin/KotlinRenderer.ts | 2 +- .../Objective-C/ObjectiveCRenderer.ts | 2 +- .../src/language/Php/PhpRenderer.ts | 2 +- .../src/language/Php/language.ts | 2 +- .../src/language/Pike/PikeRenderer.ts | 2 +- .../src/language/Python/JSONPythonRenderer.ts | 2 +- .../src/language/Python/PythonRenderer.ts | 2 +- .../src/language/Python/language.ts | 2 +- .../src/language/Ruby/RubyRenderer.ts | 2 +- .../src/language/Rust/RustRenderer.ts | 2 +- .../src/language/Scala3/CirceRenderer.ts | 2 +- .../src/language/Scala3/Scala3Renderer.ts | 2 +- .../src/language/Smithy4s/Smithy4sRenderer.ts | 2 +- .../src/language/Swift/SwiftRenderer.ts | 2 +- .../src/language/Swift/language.ts | 2 +- .../TypeScriptEffectSchemaRenderer.ts | 2 +- .../TypeScriptFlowBaseRenderer.ts | 2 +- .../TypeScriptFlow/TypeScriptRenderer.ts | 2 +- .../src/language/TypeScriptFlow/language.ts | 2 +- .../TypeScriptZod/TypeScriptZodRenderer.ts | 2 +- .../src/language/TypeScriptZod/language.ts | 2 +- .../src/rewrites/CombineClasses.ts | 7 +- .../src/rewrites/ExpandStrings.ts | 7 +- .../src/rewrites/FlattenStrings.ts | 9 +- .../src/rewrites/FlattenUnions.ts | 9 +- .../quicktype-core/src/rewrites/InferMaps.ts | 7 +- .../src/rewrites/ReplaceObjectType.ts | 7 +- .../src/rewrites/ResolveIntersections.ts | 8 +- 85 files changed, 569 insertions(+), 500 deletions(-) create mode 100644 packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts create mode 100644 packages/quicktype-core/src/Type/TransformedStringType.ts rename packages/quicktype-core/src/{ => Type}/Type.ts (87%) rename packages/quicktype-core/src/{ => Type}/TypeBuilder.ts (87%) create mode 100644 packages/quicktype-core/src/Type/TypeBuilderUtils.ts rename packages/quicktype-core/src/{ => Type}/TypeGraph.ts (65%) create mode 100644 packages/quicktype-core/src/Type/TypeGraphUtils.ts create mode 100644 packages/quicktype-core/src/Type/TypeRef.ts rename packages/quicktype-core/src/{ => Type}/TypeUtils.ts (97%) create mode 100644 packages/quicktype-core/src/Type/index.ts create mode 100644 packages/quicktype-core/src/input/PathElement.ts diff --git a/packages/quicktype-core/src/ConvenienceRenderer.ts b/packages/quicktype-core/src/ConvenienceRenderer.ts index aef41b181..ff4797ffa 100644 --- a/packages/quicktype-core/src/ConvenienceRenderer.ts +++ b/packages/quicktype-core/src/ConvenienceRenderer.ts @@ -32,8 +32,8 @@ import { type TypeKind, UnionType } from "./Type"; -import { TypeAttributeStoreView } from "./TypeGraph"; -import { isNamedType, matchTypeExhaustive, nullableFromUnion, separateNamedTypes } from "./TypeUtils"; +import { TypeAttributeStoreView } from "./Type/TypeGraph"; +import { isNamedType, matchTypeExhaustive, nullableFromUnion, separateNamedTypes } from "./Type/TypeUtils"; const wordWrap: (s: string) => string = _wordwrap(90); diff --git a/packages/quicktype-core/src/DeclarationIR.ts b/packages/quicktype-core/src/DeclarationIR.ts index f3f15ce0f..30b763ee0 100644 --- a/packages/quicktype-core/src/DeclarationIR.ts +++ b/packages/quicktype-core/src/DeclarationIR.ts @@ -3,8 +3,8 @@ import { iterableFirst, setFilter, setIntersect, setSubtract, setUnionInto } fro import { Graph } from "./Graph"; import { messageError } from "./Messages"; import { assert, defined, panic } from "./support/Support"; -import { type Type } from "./Type"; -import { type TypeGraph } from "./TypeGraph"; +import { type Type } from "./Type/Type"; +import { type TypeGraph } from "./Type/TypeGraph"; export type DeclarationKind = "forward" | "define"; diff --git a/packages/quicktype-core/src/GatherNames.ts b/packages/quicktype-core/src/GatherNames.ts index 4d8142d07..bf325c697 100644 --- a/packages/quicktype-core/src/GatherNames.ts +++ b/packages/quicktype-core/src/GatherNames.ts @@ -4,9 +4,9 @@ import * as pluralize from "pluralize"; import { TooManyTypeNames, TypeNames, namesTypeAttributeKind, tooManyNamesThreshold } from "./attributes/TypeNames"; import { assert, defined, panic } from "./support/Support"; import { transformationForType } from "./Transformers"; -import { ObjectType, type Type } from "./Type"; -import { type TypeGraph } from "./TypeGraph"; -import { matchCompoundType, nullableFromUnion } from "./TypeUtils"; +import { ObjectType, type Type } from "./Type/Type"; +import { type TypeGraph } from "./Type/TypeGraph"; +import { matchCompoundType, nullableFromUnion } from "./Type/TypeUtils"; class UniqueQueue { private readonly _present = new Set(); diff --git a/packages/quicktype-core/src/GraphRewriting.ts b/packages/quicktype-core/src/GraphRewriting.ts index d3c78d811..060afe34f 100644 --- a/packages/quicktype-core/src/GraphRewriting.ts +++ b/packages/quicktype-core/src/GraphRewriting.ts @@ -3,18 +3,18 @@ import { EqualityMap, mapMap } from "collection-utils"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; import { assert, indentationString, panic } from "./support/Support"; import { type ClassProperty, type MaybeTypeIdentity, type PrimitiveTypeKind, type Type } from "./Type"; -// eslint-disable-next-line import/no-cycle -import { type StringTypeMapping, TypeBuilder } from "./TypeBuilder"; +import { TypeBuilder } from "./Type/TypeBuilder"; +import { type StringTypeMapping } from "./Type/TypeBuilderUtils"; +import { type TypeGraph } from "./Type/TypeGraph"; import { - type TypeGraph, type TypeRef, assertTypeRefGraph, derefTypeRef, isTypeRef, typeAndAttributesForTypeRef, typeRefIndex -} from "./TypeGraph"; -import { combineTypeAttributesOfTypes } from "./TypeUtils"; +} from "./Type/TypeRef"; +import { combineTypeAttributesOfTypes } from "./Type/TypeUtils"; export interface TypeLookerUp { lookupTypeRefs: (typeRefs: TypeRef[], forwardingRef?: TypeRef) => TypeRef | undefined; @@ -229,7 +229,6 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ protected readonly debugPrint: boolean ) { super( - originalGraph.serial + 1, stringTypeMapping, alphabetizeProperties, false, diff --git a/packages/quicktype-core/src/MakeTransformations.ts b/packages/quicktype-core/src/MakeTransformations.ts index 106eebbd5..bc42e628b 100644 --- a/packages/quicktype-core/src/MakeTransformations.ts +++ b/packages/quicktype-core/src/MakeTransformations.ts @@ -34,7 +34,8 @@ import { isPrimitiveStringTypeKind, targetTypeKindForTransformedStringTypeKind } from "./Type"; -import { type TypeGraph, type TypeRef, typeRefIndex } from "./TypeGraph"; +import { type TypeGraph } from "./Type/TypeGraph"; +import { type TypeRef, typeRefIndex } from "./Type/TypeRef"; function transformationAttributes( graph: TypeGraph, diff --git a/packages/quicktype-core/src/Renderer.ts b/packages/quicktype-core/src/Renderer.ts index 9c8f04e6d..dc8543af9 100644 --- a/packages/quicktype-core/src/Renderer.ts +++ b/packages/quicktype-core/src/Renderer.ts @@ -6,7 +6,7 @@ import { type NewlineSource, type Source, type Sourcelike, annotated, newline, s import { type Comment } from "./support/Comments"; import { assert, panic } from "./support/Support"; import { type TargetLanguage } from "./TargetLanguage"; -import { type TypeGraph } from "./TypeGraph"; +import { type TypeGraph } from "./Type/TypeGraph"; export interface RenderResult { names: ReadonlyMap; diff --git a/packages/quicktype-core/src/Run.ts b/packages/quicktype-core/src/Run.ts index e05efe5c6..f415aeb8a 100644 --- a/packages/quicktype-core/src/Run.ts +++ b/packages/quicktype-core/src/Run.ts @@ -20,8 +20,10 @@ import { type Comment } from "./support/Comments"; import { assert } from "./support/Support"; import { type MultiFileRenderResult, type TargetLanguage } from "./TargetLanguage"; import { type TransformedStringTypeKind } from "./Type"; -import { type StringTypeMapping, TypeBuilder } from "./TypeBuilder"; -import { type TypeGraph, noneToAny, optionalToNullable, removeIndirectionIntersections } from "./TypeGraph"; +import { TypeBuilder } from "./Type/TypeBuilder"; +import { type StringTypeMapping } from "./Type/TypeBuilderUtils"; +import { TypeGraph } from "./Type/TypeGraph"; +import { noneToAny, optionalToNullable, removeIndirectionIntersections } from "./Type/TypeGraphUtils"; import { type FixMeOptionsType } from "./types"; export function getTargetLanguage(nameOrInstance: LanguageName | TargetLanguage): TargetLanguage { @@ -289,13 +291,13 @@ class Run implements RunContext { const stringTypeMapping = this.stringTypeMapping; const conflateNumbers = !targetLanguage.supportsUnionsWithBothNumberTypes; const typeBuilder = new TypeBuilder( - 0, stringTypeMapping, this._options.alphabetizeProperties, this._options.allPropertiesOptional, this._options.checkProvenance, false ); + typeBuilder.typeGraph = new TypeGraph(typeBuilder, 0, this._options.checkProvenance); return { targetLanguage, stringTypeMapping, conflateNumbers, typeBuilder }; } diff --git a/packages/quicktype-core/src/TargetLanguage.ts b/packages/quicktype-core/src/TargetLanguage.ts index 13301bccd..3c8933c74 100644 --- a/packages/quicktype-core/src/TargetLanguage.ts +++ b/packages/quicktype-core/src/TargetLanguage.ts @@ -7,9 +7,9 @@ import { type Option, type OptionDefinition } from "./RendererOptions"; import { type SerializedRenderResult, serializeRenderResult } from "./Source"; import { type Comment } from "./support/Comments"; import { defined } from "./support/Support"; -import { type Type } from "./Type"; -import { type StringTypeMapping } from "./TypeBuilder"; -import { type TypeGraph } from "./TypeGraph"; +import { type Type } from "./Type/Type"; +import { type StringTypeMapping } from "./Type/TypeBuilderUtils"; +import { type TypeGraph } from "./Type/TypeGraph"; import { type FixMeOptionsType } from "./types"; export type MultiFileRenderResult = ReadonlyMap; diff --git a/packages/quicktype-core/src/Transformers.ts b/packages/quicktype-core/src/Transformers.ts index d6bbb49f7..1cb2e016e 100644 --- a/packages/quicktype-core/src/Transformers.ts +++ b/packages/quicktype-core/src/Transformers.ts @@ -13,7 +13,8 @@ import { TypeAttributeKind } from "./attributes/TypeAttributes"; import { type BaseGraphRewriteBuilder } from "./GraphRewriting"; import { assert, indentationString, panic } from "./support/Support"; import { EnumType, PrimitiveType, type Type, type TypeKind, UnionType } from "./Type"; -import { type TypeGraph, type TypeRef, derefTypeRef } from "./TypeGraph"; +import { type TypeGraph } from "./Type/TypeGraph"; +import { type TypeRef, derefTypeRef } from "./Type/TypeRef"; function debugStringForType(t: Type): string { const target = followTargetType(t); diff --git a/packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts b/packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts new file mode 100644 index 000000000..60e656743 --- /dev/null +++ b/packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts @@ -0,0 +1,34 @@ +import { setUnionManyInto } from "collection-utils"; + +import { TypeAttributeKind } from "../attributes/TypeAttributes"; + +import { type TypeKind } from "./TransformedStringType"; + +// FIXME: Don't infer provenance. All original types should be present in +// non-inferred form in the final graph. +class ProvenanceTypeAttributeKind extends TypeAttributeKind> { + public constructor() { + super("provenance"); + } + + public appliesToTypeKind(_kind: TypeKind): boolean { + return true; + } + + public combine(arr: Array>): Set { + return setUnionManyInto(new Set(), arr); + } + + public makeInferred(p: Set): Set { + return p; + } + + public stringify(p: Set): string { + return Array.from(p) + .sort() + .map(i => i.toString()) + .join(","); + } +} + +export const provenanceTypeAttributeKind: TypeAttributeKind> = new ProvenanceTypeAttributeKind(); diff --git a/packages/quicktype-core/src/Type/TransformedStringType.ts b/packages/quicktype-core/src/Type/TransformedStringType.ts new file mode 100644 index 000000000..617ca9230 --- /dev/null +++ b/packages/quicktype-core/src/Type/TransformedStringType.ts @@ -0,0 +1,86 @@ +import { + // eslint-disable-next-line @typescript-eslint/no-redeclare + hasOwnProperty, + mapFromObject +} from "collection-utils"; + +import { type TypeAttributes } from "../attributes/TypeAttributes"; +import { uriInferenceAttributesProducer } from "../attributes/URIAttributes"; + +import { type Type } from "./Type"; + +/** + * `jsonSchema` is the `format` to be used to represent this string type in + * JSON Schema. It's ok to "invent" a new one if the JSON Schema standard doesn't + * have that particular type yet. + * + * For transformed type kinds that map to an existing primitive type, `primitive` + * must specify that type kind. + */ +export interface TransformedStringTypeTargets { + attributesProducer?: (s: string) => TypeAttributes; + jsonSchema: string; + primitive: PrimitiveNonStringTypeKind | undefined; +} + +/** + * All the transformed string type kinds and the JSON Schema formats and + * primitive type kinds they map to. Not all transformed string types map to + * primitive types. Date-time types, for example, stand on their own, but + * stringified integers map to integers. + */ +const transformedStringTypeTargetTypeKinds = { + "date": { jsonSchema: "date", primitive: undefined }, + "time": { jsonSchema: "time", primitive: undefined }, + "date-time": { jsonSchema: "date-time", primitive: undefined }, + "uuid": { jsonSchema: "uuid", primitive: undefined }, + "uri": { jsonSchema: "uri", primitive: undefined, attributesProducer: uriInferenceAttributesProducer }, + "integer-string": { jsonSchema: "integer", primitive: "integer" } as TransformedStringTypeTargets, + "bool-string": { jsonSchema: "boolean", primitive: "bool" } as TransformedStringTypeTargets +}; + +export const transformedStringTypeTargetTypeKindsMap = mapFromObject( + transformedStringTypeTargetTypeKinds as { + [kind: string]: TransformedStringTypeTargets; + } +); + +export type TransformedStringTypeKind = keyof typeof transformedStringTypeTargetTypeKinds; +export type PrimitiveStringTypeKind = "string" | TransformedStringTypeKind; +export type PrimitiveNonStringTypeKind = "none" | "any" | "null" | "bool" | "integer" | "double"; +export type PrimitiveTypeKind = PrimitiveNonStringTypeKind | PrimitiveStringTypeKind; +export type NamedTypeKind = "class" | "enum" | "union"; +export type TypeKind = PrimitiveTypeKind | NamedTypeKind | "array" | "object" | "map" | "intersection"; +export type ObjectTypeKind = "object" | "map" | "class"; + +export const transformedStringTypeKinds = new Set( + Object.getOwnPropertyNames(transformedStringTypeTargetTypeKinds) +) as ReadonlySet; + +export function isPrimitiveStringTypeKind(kind: string): kind is PrimitiveStringTypeKind { + return kind === "string" || hasOwnProperty(transformedStringTypeTargetTypeKinds, kind); +} + +export function targetTypeKindForTransformedStringTypeKind( + kind: PrimitiveStringTypeKind +): PrimitiveNonStringTypeKind | undefined { + const target = transformedStringTypeTargetTypeKindsMap.get(kind); + if (target === undefined) return undefined; + return target.primitive; +} + +export function isNumberTypeKind(kind: TypeKind): kind is "integer" | "double" { + return kind === "integer" || kind === "double"; +} + +export function isPrimitiveTypeKind(kind: TypeKind): kind is PrimitiveTypeKind { + if (isPrimitiveStringTypeKind(kind)) return true; + if (isNumberTypeKind(kind)) return true; + return kind === "none" || kind === "any" || kind === "null" || kind === "bool"; +} + +export function triviallyStructurallyCompatible(x: Type, y: Type): boolean { + if (x.index === y.index) return true; + if (x.kind === "none" || y.kind === "none") return true; + return false; +} diff --git a/packages/quicktype-core/src/Type.ts b/packages/quicktype-core/src/Type/Type.ts similarity index 87% rename from packages/quicktype-core/src/Type.ts rename to packages/quicktype-core/src/Type/Type.ts index cdbae768e..37f8a5aff 100644 --- a/packages/quicktype-core/src/Type.ts +++ b/packages/quicktype-core/src/Type/Type.ts @@ -2,15 +2,12 @@ import { addHashCode, areEqual, definedMap, - // eslint-disable-next-line @typescript-eslint/no-redeclare - hasOwnProperty, hashCodeInit, hashCodeOf, iterableEvery, iterableFind, iterableSome, mapFilter, - mapFromObject, mapMap, mapSome, mapSortByKey, @@ -22,90 +19,21 @@ import { toReadonlySet } from "collection-utils"; -import { type TypeAttributes } from "./attributes/TypeAttributes"; -import { type TypeNames, namesTypeAttributeKind } from "./attributes/TypeNames"; -import { uriInferenceAttributesProducer } from "./attributes/URIAttributes"; -import { type BaseGraphRewriteBuilder, type TypeReconstituter } from "./GraphRewriting"; -import { messageAssert } from "./Messages"; -import { assert, defined, panic } from "./support/Support"; -// eslint-disable-next-line import/no-cycle -import { type TypeGraph, type TypeRef, attributesForTypeRef, derefTypeRef, typeRefIndex } from "./TypeGraph"; - -/** - * `jsonSchema` is the `format` to be used to represent this string type in - * JSON Schema. It's ok to "invent" a new one if the JSON Schema standard doesn't - * have that particular type yet. - * - * For transformed type kinds that map to an existing primitive type, `primitive` - * must specify that type kind. - */ -export interface TransformedStringTypeTargets { - attributesProducer?: (s: string) => TypeAttributes; - jsonSchema: string; - primitive: PrimitiveNonStringTypeKind | undefined; -} - -/** - * All the transformed string type kinds and the JSON Schema formats and - * primitive type kinds they map to. Not all transformed string types map to - * primitive types. Date-time types, for example, stand on their own, but - * stringified integers map to integers. - */ -const transformedStringTypeTargetTypeKinds = { - date: { jsonSchema: "date", primitive: undefined }, - time: { jsonSchema: "time", primitive: undefined }, - "date-time": { jsonSchema: "date-time", primitive: undefined }, - uuid: { jsonSchema: "uuid", primitive: undefined }, - uri: { jsonSchema: "uri", primitive: undefined, attributesProducer: uriInferenceAttributesProducer }, - "integer-string": { jsonSchema: "integer", primitive: "integer" } as TransformedStringTypeTargets, - "bool-string": { jsonSchema: "boolean", primitive: "bool" } as TransformedStringTypeTargets -}; - -export const transformedStringTypeTargetTypeKindsMap = mapFromObject( - transformedStringTypeTargetTypeKinds as { - [kind: string]: TransformedStringTypeTargets; - } -); - -export type TransformedStringTypeKind = keyof typeof transformedStringTypeTargetTypeKinds; -export type PrimitiveStringTypeKind = "string" | TransformedStringTypeKind; -export type PrimitiveNonStringTypeKind = "none" | "any" | "null" | "bool" | "integer" | "double"; -export type PrimitiveTypeKind = PrimitiveNonStringTypeKind | PrimitiveStringTypeKind; -export type NamedTypeKind = "class" | "enum" | "union"; -export type TypeKind = PrimitiveTypeKind | NamedTypeKind | "array" | "object" | "map" | "intersection"; -export type ObjectTypeKind = "object" | "map" | "class"; - -export const transformedStringTypeKinds = new Set( - Object.getOwnPropertyNames(transformedStringTypeTargetTypeKinds) -) as ReadonlySet; - -export function isPrimitiveStringTypeKind(kind: string): kind is PrimitiveStringTypeKind { - return kind === "string" || hasOwnProperty(transformedStringTypeTargetTypeKinds, kind); -} +import { type TypeAttributes } from "../attributes/TypeAttributes"; +import { type TypeNames, namesTypeAttributeKind } from "../attributes/TypeNames"; +import { type BaseGraphRewriteBuilder, type TypeReconstituter } from "../GraphRewriting"; +import { messageAssert } from "../Messages"; +import { assert, defined, panic } from "../support/Support"; -export function targetTypeKindForTransformedStringTypeKind( - kind: PrimitiveStringTypeKind -): PrimitiveNonStringTypeKind | undefined { - const target = transformedStringTypeTargetTypeKindsMap.get(kind); - if (target === undefined) return undefined; - return target.primitive; -} - -export function isNumberTypeKind(kind: TypeKind): kind is "integer" | "double" { - return kind === "integer" || kind === "double"; -} - -export function isPrimitiveTypeKind(kind: TypeKind): kind is PrimitiveTypeKind { - if (isPrimitiveStringTypeKind(kind)) return true; - if (isNumberTypeKind(kind)) return true; - return kind === "none" || kind === "any" || kind === "null" || kind === "bool"; -} - -function triviallyStructurallyCompatible(x: Type, y: Type): boolean { - if (x.index === y.index) return true; - if (x.kind === "none" || y.kind === "none") return true; - return false; -} +import { + type ObjectTypeKind, + type PrimitiveTypeKind, + type TypeKind, + isPrimitiveStringTypeKind, + triviallyStructurallyCompatible +} from "./TransformedStringType"; +import { type TypeGraph } from "./TypeGraph"; +import { type TypeRef, attributesForTypeRef, derefTypeRef, typeRefIndex } from "./TypeRef"; export class TypeIdentity { private readonly _hashCode: number; diff --git a/packages/quicktype-core/src/TypeBuilder.ts b/packages/quicktype-core/src/Type/TypeBuilder.ts similarity index 87% rename from packages/quicktype-core/src/TypeBuilder.ts rename to packages/quicktype-core/src/Type/TypeBuilder.ts index 2b4275be8..d732312de 100644 --- a/packages/quicktype-core/src/TypeBuilder.ts +++ b/packages/quicktype-core/src/Type/TypeBuilder.ts @@ -7,20 +7,15 @@ import { mapFind, mapMap, mapSortByKey, - setUnionManyInto, withDefault } from "collection-utils"; -// eslint-disable-next-line import/no-cycle -import { StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; -import { - TypeAttributeKind, - type TypeAttributes, - combineTypeAttributes, - emptyTypeAttributes -} from "./attributes/TypeAttributes"; -import { assert, defined, panic } from "./support/Support"; -// eslint-disable-next-line import/no-cycle +import { StringTypes, stringTypesTypeAttributeKind } from "../attributes/StringTypes"; +import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { assert, defined, panic } from "../support/Support"; + +import { provenanceTypeAttributeKind } from "./ProvenanceTypeAttributeKind"; +import { type PrimitiveTypeKind, isPrimitiveStringTypeKind } from "./TransformedStringType"; import { ArrayType, ClassProperty, @@ -30,79 +25,25 @@ import { MapType, type MaybeTypeIdentity, ObjectType, - type PrimitiveStringTypeKind, PrimitiveType, - type PrimitiveTypeKind, - type TransformedStringTypeKind, type Type, type TypeIdentity, - type TypeKind, UnionType, arrayTypeIdentity, classTypeIdentity, enumTypeIdentity, intersectionTypeIdentity, - isPrimitiveStringTypeKind, mapTypeIdentify, primitiveTypeIdentity, - transformedStringTypeKinds, unionTypeIdentity } from "./Type"; -import { TypeGraph, type TypeRef, assertTypeRefGraph, derefTypeRef, makeTypeRef, typeRefIndex } from "./TypeGraph"; - -// FIXME: Don't infer provenance. All original types should be present in -// non-inferred form in the final graph. -class ProvenanceTypeAttributeKind extends TypeAttributeKind> { - public constructor() { - super("provenance"); - } - - public appliesToTypeKind(_kind: TypeKind): boolean { - return true; - } - - public combine(arr: Array>): Set { - return setUnionManyInto(new Set(), arr); - } - - public makeInferred(p: Set): Set { - return p; - } - - public stringify(p: Set): string { - return Array.from(p) - .sort() - .map(i => i.toString()) - .join(","); - } -} - -export const provenanceTypeAttributeKind: TypeAttributeKind> = new ProvenanceTypeAttributeKind(); - -export type StringTypeMapping = ReadonlyMap; - -export function stringTypeMappingGet(stm: StringTypeMapping, kind: TransformedStringTypeKind): PrimitiveStringTypeKind { - const mapped = stm.get(kind); - if (mapped === undefined) return "string"; - return mapped; -} - -let noStringTypeMapping: StringTypeMapping | undefined; - -export function getNoStringTypeMapping(): StringTypeMapping { - if (noStringTypeMapping === undefined) { - noStringTypeMapping = new Map( - Array.from(transformedStringTypeKinds).map( - k => [k, k] as [TransformedStringTypeKind, PrimitiveStringTypeKind] - ) - ); - } - - return noStringTypeMapping; -} +import { type StringTypeMapping, stringTypeMappingGet } from "./TypeBuilderUtils"; +import { type TypeGraph } from "./TypeGraph"; +import { type TypeRef, assertTypeRefGraph, derefTypeRef, makeTypeRef, typeRefIndex } from "./TypeRef"; export class TypeBuilder { - public readonly typeGraph: TypeGraph; + // @ts-expect-error must manually set TypeGraph + private _typeGraph: TypeGraph; protected readonly topLevels: Map = new Map(); @@ -113,7 +54,6 @@ export class TypeBuilder { private _addedForwardingIntersection = false; public constructor( - typeGraphSerial: number, private readonly _stringTypeMapping: StringTypeMapping, public readonly canonicalOrder: boolean, private readonly _allPropertiesOptional: boolean, @@ -124,7 +64,16 @@ export class TypeBuilder { !_addProvenanceAttributes || !inheritsProvenanceAttributes, "We can't both inherit as well as add provenance" ); - this.typeGraph = new TypeGraph(this, typeGraphSerial, _addProvenanceAttributes || inheritsProvenanceAttributes); + } + + public get typeGraph(): TypeGraph { + assert(!!this._typeGraph, "TypeBuilder must have a TypeGraph"); + return this._typeGraph; + } + + /** typeGraph must be set externally to prevent import cycle of TypeGraph constructor */ + public set typeGraph(typeGraph: TypeGraph) { + this._typeGraph = typeGraph; } public addTopLevel(name: string, tref: TypeRef): void { diff --git a/packages/quicktype-core/src/Type/TypeBuilderUtils.ts b/packages/quicktype-core/src/Type/TypeBuilderUtils.ts new file mode 100644 index 000000000..f2006fad4 --- /dev/null +++ b/packages/quicktype-core/src/Type/TypeBuilderUtils.ts @@ -0,0 +1,27 @@ +import { + type PrimitiveStringTypeKind, + type TransformedStringTypeKind, + transformedStringTypeKinds +} from "./TransformedStringType"; + +export type StringTypeMapping = ReadonlyMap; + +export function stringTypeMappingGet(stm: StringTypeMapping, kind: TransformedStringTypeKind): PrimitiveStringTypeKind { + const mapped = stm.get(kind); + if (mapped === undefined) return "string"; + return mapped; +} + +let noStringTypeMapping: StringTypeMapping | undefined; + +export function getNoStringTypeMapping(): StringTypeMapping { + if (noStringTypeMapping === undefined) { + noStringTypeMapping = new Map( + Array.from(transformedStringTypeKinds).map( + k => [k, k] as [TransformedStringTypeKind, PrimitiveStringTypeKind] + ) + ); + } + + return noStringTypeMapping; +} diff --git a/packages/quicktype-core/src/TypeGraph.ts b/packages/quicktype-core/src/Type/TypeGraph.ts similarity index 65% rename from packages/quicktype-core/src/TypeGraph.ts rename to packages/quicktype-core/src/Type/TypeGraph.ts index cdd8d5ea6..7d34591fb 100644 --- a/packages/quicktype-core/src/TypeGraph.ts +++ b/packages/quicktype-core/src/Type/TypeGraph.ts @@ -1,78 +1,18 @@ -import { iterableFirst, mapMap, mapSome, setFilter, setMap, setSubtract, setUnionManyInto } from "collection-utils"; - -import { type TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; -import { TypeNames, namesTypeAttributeKind } from "./attributes/TypeNames"; -import { Graph } from "./Graph"; -// eslint-disable-next-line import/no-cycle -import { type BaseGraphRewriteBuilder, GraphRemapBuilder, GraphRewriteBuilder } from "./GraphRewriting"; -import { messageError } from "./Messages"; -import { assert, defined, mustNotHappen, panic } from "./support/Support"; -// eslint-disable-next-line import/no-cycle -import { ClassType, IntersectionType, type Type, UnionType } from "./Type"; -// eslint-disable-next-line import/no-cycle -import { - type StringTypeMapping, - type TypeBuilder, - getNoStringTypeMapping, - provenanceTypeAttributeKind -} from "./TypeBuilder"; -import { type SeparatedNamedTypes, combineTypeAttributesOfTypes, isNamedType, separateNamedTypes } from "./TypeUtils"; - -export type TypeRef = number; - -const indexBits = 26; -const indexMask = (1 << indexBits) - 1; -const serialBits = 31 - indexBits; -const serialMask = (1 << serialBits) - 1; - -export function isTypeRef(x: unknown): x is TypeRef { - return typeof x === "number"; -} - -export function makeTypeRef(graph: TypeGraph, index: number): TypeRef { - assert(index <= indexMask, "Too many types in graph"); - return ((graph.serial & serialMask) << indexBits) | index; -} - -export function typeRefIndex(tref: TypeRef): number { - return tref & indexMask; -} - -export function assertTypeRefGraph(tref: TypeRef, graph: TypeGraph): void { - assert( - ((tref >> indexBits) & serialMask) === (graph.serial & serialMask), - "Mixing the wrong type reference and graph" - ); -} - -function getGraph(graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder): TypeGraph { - if (graphOrBuilder instanceof TypeGraph) return graphOrBuilder; - return graphOrBuilder.originalGraph; -} - -export function derefTypeRef(tref: TypeRef, graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder): Type { - const graph = getGraph(graphOrBuilder); - assertTypeRefGraph(tref, graph); - return graph.typeAtIndex(typeRefIndex(tref)); -} - -export function attributesForTypeRef( - tref: TypeRef, - graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder -): TypeAttributes { - const graph = getGraph(graphOrBuilder); - assertTypeRefGraph(tref, graph); - return graph.atIndex(typeRefIndex(tref))[1]; -} - -export function typeAndAttributesForTypeRef( - tref: TypeRef, - graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder -): [Type, TypeAttributes] { - const graph = getGraph(graphOrBuilder); - assertTypeRefGraph(tref, graph); - return graph.atIndex(typeRefIndex(tref)); -} +import { mapMap, setSubtract, setUnionManyInto } from "collection-utils"; + +import { type TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { Graph } from "../Graph"; +import { type BaseGraphRewriteBuilder, GraphRemapBuilder, GraphRewriteBuilder } from "../GraphRewriting"; +import { messageError } from "../Messages"; +import { assert, defined, mustNotHappen } from "../support/Support"; + +import { provenanceTypeAttributeKind } from "./ProvenanceTypeAttributeKind"; +import { type Type } from "./Type"; +import { type TypeBuilder } from "./TypeBuilder"; +import { type StringTypeMapping, getNoStringTypeMapping } from "./TypeBuilderUtils"; +import { removeIndirectionIntersections } from "./TypeGraphUtils"; +import { type TypeRef, assertTypeRefGraph, derefTypeRef, typeRefIndex } from "./TypeRef"; +import { type SeparatedNamedTypes, isNamedType, separateNamedTypes } from "./TypeUtils"; export class TypeAttributeStore { private readonly _topLevelValues: Map = new Map(); @@ -223,6 +163,7 @@ export class TypeGraph { public get topLevels(): ReadonlyMap { assert(this.isFrozen, "Cannot get top-levels from a non-frozen graph"); + return this._topLevels; } @@ -240,6 +181,7 @@ export class TypeGraph { } const t = this.typeAtIndex(index); + return [t, defined(this._attributeStore).attributesForType(t)]; } @@ -248,7 +190,10 @@ export class TypeGraph { let types: Type[] = []; function addFromType(t: Type): void { - if (seen.has(t)) return; + if (seen.has(t)) { + return; + } + seen.add(t); const required = predicate === undefined || predicate(t); @@ -275,6 +220,7 @@ export class TypeGraph { public allNamedTypesSeparated(): SeparatedNamedTypes { const types = this.allNamedTypes(); + return separateNamedTypes(types); } @@ -289,6 +235,7 @@ export class TypeGraph { }); const result = new Set(); setUnionManyInto(result, sets); + return result; } @@ -297,7 +244,9 @@ export class TypeGraph { } private checkLostTypeAttributes(builder: BaseGraphRewriteBuilder, newGraph: TypeGraph): void { - if (!this._haveProvenanceAttributes || builder.lostTypeAttributes) return; + if (!this._haveProvenanceAttributes || builder.lostTypeAttributes) { + return; + } const oldProvenance = this.allProvenance(); const newProvenance = newGraph.allProvenance(); @@ -309,7 +258,9 @@ export class TypeGraph { } private printRewrite(title: string): void { - if (!this._printOnRewrite) return; + if (!this._printOnRewrite) { + return; + } console.log(`\n# ${title}`); } @@ -331,7 +282,9 @@ export class TypeGraph { ): TypeGraph { this.printRewrite(title); - if (!force && replacementGroups.length === 0) return this; + if (!force && replacementGroups.length === 0) { + return this; + } const builder = new GraphRewriteBuilder( this, @@ -342,6 +295,7 @@ export class TypeGraph { debugPrintReconstitution, replacer ); + builder.typeGraph = new TypeGraph(builder, this.serial + 1, this._haveProvenanceAttributes); const newGraph = builder.finish(); this.checkLostTypeAttributes(builder, newGraph); @@ -351,7 +305,9 @@ export class TypeGraph { newGraph.printGraph(); } - if (!builder.didAddForwardingIntersection) return newGraph; + if (!builder.didAddForwardingIntersection) { + return newGraph; + } return removeIndirectionIntersections(newGraph, stringTypeMapping, debugPrintReconstitution); } @@ -366,7 +322,9 @@ export class TypeGraph { ): TypeGraph { this.printRewrite(title); - if (!force && map.size === 0) return this; + if (!force && map.size === 0) { + return this; + } const builder = new GraphRemapBuilder( this, @@ -376,6 +334,7 @@ export class TypeGraph { map, debugPrintRemapping ); + builder.typeGraph = new TypeGraph(builder, this.serial + 1, this._haveProvenanceAttributes); const newGraph = builder.finish(); this.checkLostTypeAttributes(builder, newGraph); @@ -399,6 +358,7 @@ export class TypeGraph { debugPrintReconstitution, true ); + return newGraph; } @@ -475,117 +435,3 @@ export class TypeGraph { } } } - -export function noneToAny( - graph: TypeGraph, - stringTypeMapping: StringTypeMapping, - debugPrintReconstitution: boolean -): TypeGraph { - const noneTypes = setFilter(graph.allTypesUnordered(), t => t.kind === "none"); - if (noneTypes.size === 0) { - return graph; - } - - assert(noneTypes.size === 1, "Cannot have more than one none type"); - return graph.rewrite( - "none to any", - stringTypeMapping, - false, - [Array.from(noneTypes)], - debugPrintReconstitution, - (types, builder, forwardingRef) => { - const attributes = combineTypeAttributesOfTypes("union", types); - const tref = builder.getPrimitiveType("any", attributes, forwardingRef); - return tref; - } - ); -} - -export function optionalToNullable( - graph: TypeGraph, - stringTypeMapping: StringTypeMapping, - debugPrintReconstitution: boolean -): TypeGraph { - function rewriteClass(c: ClassType, builder: GraphRewriteBuilder, forwardingRef: TypeRef): TypeRef { - const properties = mapMap(c.getProperties(), (p, name) => { - const t = p.type; - let ref: TypeRef; - if (!p.isOptional || t.isNullable) { - ref = builder.reconstituteType(t); - } else { - const nullType = builder.getPrimitiveType("null"); - let members: ReadonlySet; - if (t instanceof UnionType) { - members = setMap(t.members, m => builder.reconstituteType(m)).add(nullType); - } else { - members = new Set([builder.reconstituteType(t), nullType]); - } - - const attributes = namesTypeAttributeKind.setDefaultInAttributes(t.getAttributes(), () => - TypeNames.make(new Set([name]), new Set(), true) - ); - ref = builder.getUnionType(attributes, members); - } - - return builder.makeClassProperty(ref, p.isOptional); - }); - if (c.isFixed) { - return builder.getUniqueClassType(c.getAttributes(), true, properties, forwardingRef); - } else { - return builder.getClassType(c.getAttributes(), properties, forwardingRef); - } - } - - const classesWithOptional = setFilter( - graph.allTypesUnordered(), - t => t instanceof ClassType && mapSome(t.getProperties(), p => p.isOptional) - ); - const replacementGroups = Array.from(classesWithOptional).map(c => [c as ClassType]); - if (classesWithOptional.size === 0) { - return graph; - } - - return graph.rewrite( - "optional to nullable", - stringTypeMapping, - false, - replacementGroups, - debugPrintReconstitution, - (setOfClass, builder, forwardingRef) => { - assert(setOfClass.size === 1); - const c = defined(iterableFirst(setOfClass)); - return rewriteClass(c, builder, forwardingRef); - } - ); -} - -export function removeIndirectionIntersections( - graph: TypeGraph, - stringTypeMapping: StringTypeMapping, - debugPrintRemapping: boolean -): TypeGraph { - const map: Array<[Type, Type]> = []; - - for (const t of graph.allTypesUnordered()) { - if (!(t instanceof IntersectionType)) continue; - const seen = new Set([t]); - let current = t; - while (current.members.size === 1) { - const member = defined(iterableFirst(current.members)); - if (!(member instanceof IntersectionType)) { - map.push([t, member]); - break; - } - - if (seen.has(member)) { - // FIXME: Technically, this is an any type. - return panic("There's a cycle of intersection types"); - } - - seen.add(member); - current = member; - } - } - - return graph.remap("remove indirection intersections", stringTypeMapping, false, new Map(map), debugPrintRemapping); -} diff --git a/packages/quicktype-core/src/Type/TypeGraphUtils.ts b/packages/quicktype-core/src/Type/TypeGraphUtils.ts new file mode 100644 index 000000000..af1634358 --- /dev/null +++ b/packages/quicktype-core/src/Type/TypeGraphUtils.ts @@ -0,0 +1,125 @@ +import { iterableFirst, mapMap, mapSome, setFilter, setMap } from "collection-utils"; + +import { TypeNames, namesTypeAttributeKind } from "../attributes/TypeNames"; +import { type GraphRewriteBuilder } from "../GraphRewriting"; +import { assert, defined, panic } from "../support/Support"; + +import { ClassType, IntersectionType, type Type, UnionType } from "./Type"; +import { type StringTypeMapping } from "./TypeBuilderUtils"; +import { type TypeGraph } from "./TypeGraph"; +import { type TypeRef } from "./TypeRef"; +import { combineTypeAttributesOfTypes } from "./TypeUtils"; + +export function noneToAny( + graph: TypeGraph, + stringTypeMapping: StringTypeMapping, + debugPrintReconstitution: boolean +): TypeGraph { + const noneTypes = setFilter(graph.allTypesUnordered(), t => t.kind === "none"); + if (noneTypes.size === 0) { + return graph; + } + + assert(noneTypes.size === 1, "Cannot have more than one none type"); + return graph.rewrite( + "none to any", + stringTypeMapping, + false, + [Array.from(noneTypes)], + debugPrintReconstitution, + (types, builder, forwardingRef) => { + const attributes = combineTypeAttributesOfTypes("union", types); + const tref = builder.getPrimitiveType("any", attributes, forwardingRef); + return tref; + } + ); +} + +export function optionalToNullable( + graph: TypeGraph, + stringTypeMapping: StringTypeMapping, + debugPrintReconstitution: boolean +): TypeGraph { + function rewriteClass(c: ClassType, builder: GraphRewriteBuilder, forwardingRef: TypeRef): TypeRef { + const properties = mapMap(c.getProperties(), (p, name) => { + const t = p.type; + let ref: TypeRef; + if (!p.isOptional || t.isNullable) { + ref = builder.reconstituteType(t); + } else { + const nullType = builder.getPrimitiveType("null"); + let members: ReadonlySet; + if (t instanceof UnionType) { + members = setMap(t.members, m => builder.reconstituteType(m)).add(nullType); + } else { + members = new Set([builder.reconstituteType(t), nullType]); + } + + const attributes = namesTypeAttributeKind.setDefaultInAttributes(t.getAttributes(), () => + TypeNames.make(new Set([name]), new Set(), true) + ); + ref = builder.getUnionType(attributes, members); + } + + return builder.makeClassProperty(ref, p.isOptional); + }); + if (c.isFixed) { + return builder.getUniqueClassType(c.getAttributes(), true, properties, forwardingRef); + } else { + return builder.getClassType(c.getAttributes(), properties, forwardingRef); + } + } + + const classesWithOptional = setFilter( + graph.allTypesUnordered(), + t => t instanceof ClassType && mapSome(t.getProperties(), p => p.isOptional) + ); + const replacementGroups = Array.from(classesWithOptional).map(c => [c as ClassType]); + if (classesWithOptional.size === 0) { + return graph; + } + + return graph.rewrite( + "optional to nullable", + stringTypeMapping, + false, + replacementGroups, + debugPrintReconstitution, + (setOfClass, builder, forwardingRef) => { + assert(setOfClass.size === 1); + const c = defined(iterableFirst(setOfClass)); + return rewriteClass(c, builder, forwardingRef); + } + ); +} + +export function removeIndirectionIntersections( + graph: TypeGraph, + stringTypeMapping: StringTypeMapping, + debugPrintRemapping: boolean +): TypeGraph { + const map: Array<[Type, Type]> = []; + + for (const t of graph.allTypesUnordered()) { + if (!(t instanceof IntersectionType)) continue; + const seen = new Set([t]); + let current = t; + while (current.members.size === 1) { + const member = defined(iterableFirst(current.members)); + if (!(member instanceof IntersectionType)) { + map.push([t, member]); + break; + } + + if (seen.has(member)) { + // FIXME: Technically, this is an any type. + return panic("There's a cycle of intersection types"); + } + + seen.add(member); + current = member; + } + } + + return graph.remap("remove indirection intersections", stringTypeMapping, false, new Map(map), debugPrintRemapping); +} diff --git a/packages/quicktype-core/src/Type/TypeRef.ts b/packages/quicktype-core/src/Type/TypeRef.ts new file mode 100644 index 000000000..4e8c3e583 --- /dev/null +++ b/packages/quicktype-core/src/Type/TypeRef.ts @@ -0,0 +1,66 @@ +import { type TypeAttributes } from "../attributes/TypeAttributes"; +import { type BaseGraphRewriteBuilder } from "../GraphRewriting"; +import { assert } from "../support/Support"; + +import { type Type } from "./Type"; +import { type TypeGraph } from "./TypeGraph"; + +const indexBits = 26; +const indexMask = (1 << indexBits) - 1; +const serialBits = 31 - indexBits; +const serialMask = (1 << serialBits) - 1; + +export type TypeRef = number; + +export function isTypeRef(x: unknown): x is TypeRef { + return typeof x === "number"; +} + +export function makeTypeRef(graph: TypeGraph, index: number): TypeRef { + assert(index <= indexMask, "Too many types in graph"); + return ((graph.serial & serialMask) << indexBits) | index; +} + +export function typeRefIndex(tref: TypeRef): number { + return tref & indexMask; +} + +export function assertTypeRefGraph(tref: TypeRef, graph: TypeGraph): void { + assert( + ((tref >> indexBits) & serialMask) === (graph.serial & serialMask), + "Mixing the wrong type reference and graph" + ); +} + +function getGraph(graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder): TypeGraph { + if ("originalGraph" in graphOrBuilder) { + return graphOrBuilder.originalGraph; + } + + // do not use `graphOrBuilder instanceof TypeGraph` to check if is TypeGraph to prevent import cycle + return graphOrBuilder; +} + +export function derefTypeRef(tref: TypeRef, graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder): Type { + const graph = getGraph(graphOrBuilder); + assertTypeRefGraph(tref, graph); + return graph.typeAtIndex(typeRefIndex(tref)); +} + +export function attributesForTypeRef( + tref: TypeRef, + graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder +): TypeAttributes { + const graph = getGraph(graphOrBuilder); + assertTypeRefGraph(tref, graph); + return graph.atIndex(typeRefIndex(tref))[1]; +} + +export function typeAndAttributesForTypeRef( + tref: TypeRef, + graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder +): [Type, TypeAttributes] { + const graph = getGraph(graphOrBuilder); + assertTypeRefGraph(tref, graph); + return graph.atIndex(typeRefIndex(tref)); +} diff --git a/packages/quicktype-core/src/TypeUtils.ts b/packages/quicktype-core/src/Type/TypeUtils.ts similarity index 97% rename from packages/quicktype-core/src/TypeUtils.ts rename to packages/quicktype-core/src/Type/TypeUtils.ts index b2ae456f7..ac1816c59 100644 --- a/packages/quicktype-core/src/TypeUtils.ts +++ b/packages/quicktype-core/src/Type/TypeUtils.ts @@ -1,14 +1,15 @@ import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion } from "collection-utils"; -// eslint-disable-next-line import/no-cycle -import { type StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; +import { type StringTypes, stringTypesTypeAttributeKind } from "../attributes/StringTypes"; import { type CombinationKind, type TypeAttributes, combineTypeAttributes, emptyTypeAttributes -} from "./attributes/TypeAttributes"; -import { assert, assertNever, defined, panic } from "./support/Support"; +} from "../attributes/TypeAttributes"; +import { assert, assertNever, defined, panic } from "../support/Support"; + +import { isPrimitiveStringTypeKind } from "./TransformedStringType"; import { ArrayType, type ClassProperty, @@ -19,8 +20,7 @@ import { type PrimitiveType, type SetOperationType, type Type, - UnionType, - isPrimitiveStringTypeKind + UnionType } from "./Type"; export function assertIsObject(t: Type): ObjectType { diff --git a/packages/quicktype-core/src/Type/index.ts b/packages/quicktype-core/src/Type/index.ts new file mode 100644 index 000000000..b9639f9fe --- /dev/null +++ b/packages/quicktype-core/src/Type/index.ts @@ -0,0 +1,7 @@ +export * from "./Type"; +export * from "./TypeBuilder"; +export * from "./TypeGraph"; +export * from "./TypeUtils"; + +// TODO: update this to type * post TS upgrade +export * from "./TransformedStringType"; diff --git a/packages/quicktype-core/src/UnifyClasses.ts b/packages/quicktype-core/src/UnifyClasses.ts index 8fe16817c..be20b55ef 100644 --- a/packages/quicktype-core/src/UnifyClasses.ts +++ b/packages/quicktype-core/src/UnifyClasses.ts @@ -3,10 +3,10 @@ import { iterableFirst, setUnionInto } from "collection-utils"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; import { type BaseGraphRewriteBuilder, type GraphRewriteBuilder, type TypeLookerUp } from "./GraphRewriting"; import { assert, defined, panic } from "./support/Support"; -import { type ClassProperty, type ObjectType, type Type, UnionType } from "./Type"; -import { type TypeBuilder } from "./TypeBuilder"; -import { type TypeRef, derefTypeRef } from "./TypeGraph"; -import { assertIsObject } from "./TypeUtils"; +import { type ClassProperty, type ObjectType, type Type, UnionType } from "./Type/Type"; +import { type TypeBuilder } from "./Type/TypeBuilder"; +import { type TypeRef, derefTypeRef } from "./Type/TypeRef"; +import { assertIsObject } from "./Type/TypeUtils"; import { TypeRefUnionAccumulator, UnionBuilder } from "./UnionBuilder"; function getCliqueProperties( diff --git a/packages/quicktype-core/src/UnionBuilder.ts b/packages/quicktype-core/src/UnionBuilder.ts index 4c93a6ac6..bea77e361 100644 --- a/packages/quicktype-core/src/UnionBuilder.ts +++ b/packages/quicktype-core/src/UnionBuilder.ts @@ -17,9 +17,9 @@ import { UnionType, isPrimitiveTypeKind } from "./Type"; -import { type TypeBuilder } from "./TypeBuilder"; -import { type TypeRef } from "./TypeGraph"; -import { matchTypeExhaustive } from "./TypeUtils"; +import { type TypeBuilder } from "./Type/TypeBuilder"; +import { type TypeRef } from "./Type/TypeRef"; +import { matchTypeExhaustive } from "./Type/TypeUtils"; // FIXME: This interface is badly designed. All the properties // should use immutable types, and getMemberKinds should be diff --git a/packages/quicktype-core/src/attributes/AccessorNames.ts b/packages/quicktype-core/src/attributes/AccessorNames.ts index 01621a65b..c27cf2a09 100644 --- a/packages/quicktype-core/src/attributes/AccessorNames.ts +++ b/packages/quicktype-core/src/attributes/AccessorNames.ts @@ -11,7 +11,7 @@ import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../inp import { type JSONSchema } from "../input/JSONSchemaStore"; import { messageAssert } from "../Messages"; import { checkArray, checkStringMap, defined, isStringMap } from "../support/Support"; -import { type EnumType, type ObjectType, type Type, type UnionType } from "../Type"; +import { type EnumType, type ObjectType, type Type, type UnionType } from "../Type/Type"; import { TypeAttributeKind, type TypeAttributes } from "./TypeAttributes"; diff --git a/packages/quicktype-core/src/attributes/Description.ts b/packages/quicktype-core/src/attributes/Description.ts index a1f64efcd..266003832 100644 --- a/packages/quicktype-core/src/attributes/Description.ts +++ b/packages/quicktype-core/src/attributes/Description.ts @@ -8,19 +8,14 @@ import { setUnionManyInto } from "collection-utils"; -// There's a cyclic import here. Ignoring now because it requires a large refactor. -// skipcq: JS-E1008 -// FIXME: This is a circular import -// eslint-disable-next-line import/no-cycle import { type JSONSchemaAttributes, type JSONSchemaType, - type PathElement, - PathElementKind, type Ref } from "../input/JSONSchemaInput"; import { type JSONSchema } from "../input/JSONSchemaStore"; -import { type Type } from "../Type"; +import { type PathElement, PathElementKind } from "../input/PathElement"; +import { type Type } from "../Type/Type"; import { TypeAttributeKind, emptyTypeAttributes } from "./TypeAttributes"; diff --git a/packages/quicktype-core/src/attributes/EnumValues.ts b/packages/quicktype-core/src/attributes/EnumValues.ts index 05885ada9..6f59630ae 100644 --- a/packages/quicktype-core/src/attributes/EnumValues.ts +++ b/packages/quicktype-core/src/attributes/EnumValues.ts @@ -2,7 +2,7 @@ import { mapMap } from "collection-utils"; import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; import { type JSONSchema } from "../input/JSONSchemaStore"; -import { type EnumType } from "../Type"; +import { type EnumType } from "../Type/Type"; import { type AccessorNames, lookupKey, makeAccessorNames } from "./AccessorNames"; import { TypeAttributeKind } from "./TypeAttributes"; diff --git a/packages/quicktype-core/src/attributes/StringTypes.ts b/packages/quicktype-core/src/attributes/StringTypes.ts index ae8539a24..742f31224 100644 --- a/packages/quicktype-core/src/attributes/StringTypes.ts +++ b/packages/quicktype-core/src/attributes/StringTypes.ts @@ -12,9 +12,8 @@ import { import { type DateTimeRecognizer } from "../DateTime"; import { assert, defined } from "../support/Support"; -import { type TransformedStringTypeKind } from "../Type"; -// eslint-disable-next-line import/no-cycle -import { type StringTypeMapping, stringTypeMappingGet } from "../TypeBuilder"; +import { type TransformedStringTypeKind } from "../Type/TransformedStringType"; +import { type StringTypeMapping, stringTypeMappingGet } from "../Type/TypeBuilderUtils"; import { TypeAttributeKind } from "./TypeAttributes"; diff --git a/packages/quicktype-core/src/attributes/URIAttributes.ts b/packages/quicktype-core/src/attributes/URIAttributes.ts index f2b5cb560..2e51278cc 100644 --- a/packages/quicktype-core/src/attributes/URIAttributes.ts +++ b/packages/quicktype-core/src/attributes/URIAttributes.ts @@ -4,7 +4,7 @@ import URI from "urijs"; import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; import { type JSONSchema } from "../input/JSONSchemaStore"; import { checkArray, checkString } from "../support/Support"; -import { type Type } from "../Type"; +import { type Type } from "../Type/Type"; import { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./TypeAttributes"; diff --git a/packages/quicktype-core/src/index.ts b/packages/quicktype-core/src/index.ts index 53a790253..4988763b6 100644 --- a/packages/quicktype-core/src/index.ts +++ b/packages/quicktype-core/src/index.ts @@ -62,8 +62,8 @@ export { EnumType, MapType, UnionType, - type TypeKind, ObjectType, + type TypeKind, type TransformedStringTypeKind, type PrimitiveStringTypeKind } from "./Type"; @@ -74,12 +74,13 @@ export { readableFromFileOrURL, readFromFileOrURL } from "./input/io/NodeIO"; export { FetchingJSONSchemaStore } from "./input/FetchingJSONSchemaStore"; export { JSONSchemaStore, type JSONSchema } from "./input/JSONSchemaStore"; export { sourcesFromPostmanCollection } from "./input/PostmanCollection"; -export { TypeBuilder, type StringTypeMapping } from "./TypeBuilder"; -export { type TypeRef, derefTypeRef } from "./TypeGraph"; +export { TypeBuilder } from "./Type/TypeBuilder"; +export { type StringTypeMapping } from "./Type/TypeBuilderUtils"; +export { type TypeRef, derefTypeRef } from "./Type/TypeRef"; export { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; export { TypeNames, makeNamesTypeAttributes, namesTypeAttributeKind } from "./attributes/TypeNames"; export { StringTypes } from "./attributes/StringTypes"; -export { removeNullFromUnion, matchType, nullableFromUnion } from "./TypeUtils"; +export { removeNullFromUnion, matchType, nullableFromUnion } from "./Type/TypeUtils"; export { ConvenienceRenderer } from "./ConvenienceRenderer"; export { uriTypeAttributeKind } from "./attributes/URIAttributes"; diff --git a/packages/quicktype-core/src/input/Inference.ts b/packages/quicktype-core/src/input/Inference.ts index 85c544c7b..ca08b57da 100644 --- a/packages/quicktype-core/src/input/Inference.ts +++ b/packages/quicktype-core/src/input/Inference.ts @@ -10,9 +10,9 @@ import { UnionType, transformedStringTypeTargetTypeKindsMap } from "../Type"; -import { type TypeBuilder } from "../TypeBuilder"; -import { type TypeRef, derefTypeRef } from "../TypeGraph"; -import { nullableFromUnion } from "../TypeUtils"; +import { type TypeBuilder } from "../Type/TypeBuilder"; +import { type TypeRef, derefTypeRef } from "../Type/TypeRef"; +import { nullableFromUnion } from "../Type/TypeUtils"; import { UnionAccumulator, UnionBuilder } from "../UnionBuilder"; import { type CompressedJSON, Tag, type Value, valueTag } from "./CompressedJSON"; diff --git a/packages/quicktype-core/src/input/Inputs.ts b/packages/quicktype-core/src/input/Inputs.ts index f4ced2c92..64bc71f4f 100644 --- a/packages/quicktype-core/src/input/Inputs.ts +++ b/packages/quicktype-core/src/input/Inputs.ts @@ -7,7 +7,7 @@ import { messageError } from "../Messages"; import { type RunContext } from "../Run"; import { defined, errorMessage, panic } from "../support/Support"; import { type TargetLanguage } from "../TargetLanguage"; -import { type TypeBuilder } from "../TypeBuilder"; +import { type TypeBuilder } from "../Type/TypeBuilder"; import { type LanguageName } from "../types"; import { type CompressedJSON, CompressedJSONFromString, type Value } from "./CompressedJSON"; diff --git a/packages/quicktype-core/src/input/JSONSchemaInput.ts b/packages/quicktype-core/src/input/JSONSchemaInput.ts index e000f7f40..eebcb377a 100644 --- a/packages/quicktype-core/src/input/JSONSchemaInput.ts +++ b/packages/quicktype-core/src/input/JSONSchemaInput.ts @@ -28,7 +28,6 @@ import { minMaxLengthAttributeProducer, patternAttributeProducer } from "../attributes/Constraints"; -// eslint-disable-next-line import/no-cycle import { descriptionAttributeProducer } from "../attributes/Description"; import { enumValuesAttributeProducer } from "../attributes/EnumValues"; import { StringTypes } from "../attributes/StringTypes"; @@ -49,27 +48,12 @@ import { isNumberTypeKind, transformedStringTypeTargetTypeKindsMap } from "../Type"; -import { type TypeBuilder } from "../TypeBuilder"; -import { type TypeRef } from "../TypeGraph"; +import { type TypeBuilder } from "../Type/TypeBuilder"; +import { type TypeRef } from "../Type/TypeRef"; import { type Input } from "./Inputs"; import { type JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; - -// There's a cyclic import here. Ignoring now because it requires a large refactor. -// skipcq: JS-E1008 - -export enum PathElementKind { - Root = 1, - KeyOrIndex = 2, - Type = 3, - Object = 4 -} - -export type PathElement = - | { kind: PathElementKind.Root } - | { key: string; kind: PathElementKind.KeyOrIndex } - | { index: number; kind: PathElementKind.Type } - | { kind: PathElementKind.Object }; +import { type PathElement, PathElementKind } from "./PathElement"; function keyOrIndex(pe: PathElement): string | undefined { if (pe.kind !== PathElementKind.KeyOrIndex) return undefined; @@ -972,8 +956,7 @@ async function addTypesInSchema( const includeArray = enumArray === undefined && !isConst && (typeSet === undefined || typeSet.has("array")); const needStringEnum = includedTypes.has("string") && - enumArray !== undefined && - enumArray.find(x => typeof x === "string") !== undefined; + enumArray?.find(x => typeof x === "string") !== undefined; const needUnion = typeSet !== undefined || schema.properties !== undefined || diff --git a/packages/quicktype-core/src/input/PathElement.ts b/packages/quicktype-core/src/input/PathElement.ts new file mode 100644 index 000000000..eba390d7e --- /dev/null +++ b/packages/quicktype-core/src/input/PathElement.ts @@ -0,0 +1,12 @@ +export enum PathElementKind { + Root = 1, + KeyOrIndex = 2, + Type = 3, + Object = 4 +} + +export type PathElement = + | { kind: PathElementKind.Root } + | { key: string; kind: PathElementKind.KeyOrIndex } + | { index: number; kind: PathElementKind.Type } + | { kind: PathElementKind.Object }; diff --git a/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts b/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts index 6f9dc33b9..f52702d91 100644 --- a/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts +++ b/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts @@ -13,7 +13,7 @@ import { type NamingStyle, allUpperWordStyle, makeNameStyle } from "../../suppor import { assert, assertNever, defined, numberEnumValues, panic } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type cJSONOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index e9694d857..1a2323447 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -27,7 +27,7 @@ import { matchType, nullableFromUnion, removeNullFromUnion -} from "../../TypeUtils"; +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type cPlusPlusOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts index 09cfcc3ca..0c655a5ea 100644 --- a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts @@ -10,7 +10,7 @@ import { assert } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { followTargetType } from "../../Transformers"; import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { type cSharpOptions } from "./language"; import { diff --git a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts index 4d6b09da6..7e89da0a5 100644 --- a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts @@ -29,7 +29,7 @@ import { transformationForType } from "../../Transformers"; import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; -import { nullableFromUnion } from "../../TypeUtils"; +import { nullableFromUnion } from "../../Type/TypeUtils"; import { CSharpRenderer } from "./CSharpRenderer"; import { type newtonsoftCSharpOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts index 77afed6da..29c3e9733 100644 --- a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts @@ -29,7 +29,7 @@ import { transformationForType } from "../../Transformers"; import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; -import { nullableFromUnion } from "../../TypeUtils"; +import { nullableFromUnion } from "../../Type/TypeUtils"; import { CSharpRenderer } from "./CSharpRenderer"; import { type systemTextJsonCSharpOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/CSharp/language.ts b/packages/quicktype-core/src/language/CSharp/language.ts index 293dc101d..6337ab39e 100644 --- a/packages/quicktype-core/src/language/CSharp/language.ts +++ b/packages/quicktype-core/src/language/CSharp/language.ts @@ -4,7 +4,7 @@ import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../ import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; diff --git a/packages/quicktype-core/src/language/CSharp/utils.ts b/packages/quicktype-core/src/language/CSharp/utils.ts index 856de95ca..6976efa78 100644 --- a/packages/quicktype-core/src/language/CSharp/utils.ts +++ b/packages/quicktype-core/src/language/CSharp/utils.ts @@ -13,7 +13,7 @@ import { import { panic } from "../../support/Support"; import { type Transformation } from "../../Transformers"; import { ArrayType, EnumType, type PrimitiveType, type Type, UnionType } from "../../Type"; -import { nullableFromUnion } from "../../TypeUtils"; +import { nullableFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; diff --git a/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts b/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts index e699b9b9b..cb97ede76 100644 --- a/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts +++ b/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts @@ -5,7 +5,7 @@ import { type RenderContext } from "../../Renderer"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { camelNamingFunction, crystalStringEscape, snakeNamingFunction } from "./utils"; diff --git a/packages/quicktype-core/src/language/Dart/DartRenderer.ts b/packages/quicktype-core/src/language/Dart/DartRenderer.ts index 75508c7b8..9eb8be9da 100644 --- a/packages/quicktype-core/src/language/Dart/DartRenderer.ts +++ b/packages/quicktype-core/src/language/Dart/DartRenderer.ts @@ -8,7 +8,7 @@ import { decapitalize, snakeCase } from "../../support/Strings"; import { defined } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, EnumType, type Type, type UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../TypeUtils"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type dartOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Dart/language.ts b/packages/quicktype-core/src/language/Dart/language.ts index ffbe59f02..5687c893c 100644 --- a/packages/quicktype-core/src/language/Dart/language.ts +++ b/packages/quicktype-core/src/language/Dart/language.ts @@ -2,7 +2,7 @@ import { type RenderContext } from "../../Renderer"; import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { DartRenderer } from "./DartRenderer"; diff --git a/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts index f660cd0f5..6edb55930 100644 --- a/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts +++ b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts @@ -5,7 +5,7 @@ import { type OptionValues } from "../../RendererOptions"; import { type Sourcelike } from "../../Source"; import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, ClassType, EnumType, MapType, PrimitiveType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenModuleNames, reservedWords } from "./constants"; import { type elixirOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Elm/ElmRenderer.ts b/packages/quicktype-core/src/language/Elm/ElmRenderer.ts index 8ae5a9d70..fcfd06b10 100644 --- a/packages/quicktype-core/src/language/Elm/ElmRenderer.ts +++ b/packages/quicktype-core/src/language/Elm/ElmRenderer.ts @@ -10,7 +10,7 @@ import { decapitalize, stringEscape } from "../../support/Strings"; import { defined } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenNames } from "./constants"; import { type elmOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Elm/utils.ts b/packages/quicktype-core/src/language/Elm/utils.ts index 2b09265cf..51f9d9628 100644 --- a/packages/quicktype-core/src/language/Elm/utils.ts +++ b/packages/quicktype-core/src/language/Elm/utils.ts @@ -11,7 +11,7 @@ import { splitIntoWords } from "../../support/Strings"; import { type ClassProperty, UnionType } from "../../Type"; -import { nullableFromUnion } from "../../TypeUtils"; +import { nullableFromUnion } from "../../Type/TypeUtils"; const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); diff --git a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts index 9c78d9860..a37eadb56 100644 --- a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts +++ b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts @@ -8,7 +8,7 @@ import { camelCase, stringEscape } from "../../support/Strings"; import { assert, defined } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, type EnumType, type Type, type TypeKind, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { type goOptions } from "./language"; import { canOmitEmpty, compoundTypeKinds, isValueType, namingFunction, primitiveValueTypeKinds } from "./utils"; diff --git a/packages/quicktype-core/src/language/Golang/language.ts b/packages/quicktype-core/src/language/Golang/language.ts index bf20cae3f..bc295869d 100644 --- a/packages/quicktype-core/src/language/Golang/language.ts +++ b/packages/quicktype-core/src/language/Golang/language.ts @@ -2,7 +2,7 @@ import { type RenderContext } from "../../Renderer"; import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { GoRenderer } from "./GolangRenderer"; diff --git a/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts index b5a2143b4..a986ed24b 100644 --- a/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts +++ b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts @@ -8,7 +8,7 @@ import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } import { stringEscape } from "../../support/Strings"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenNames } from "./constants"; import { type haskellOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts b/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts index 9b24306fa..dced59411 100644 --- a/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts +++ b/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts @@ -11,7 +11,7 @@ import { type UnionType, transformedStringTypeTargetTypeKindsMap } from "../../Type"; -import { matchTypeExhaustive } from "../../TypeUtils"; +import { matchTypeExhaustive } from "../../Type/TypeUtils"; import { namingFunction } from "./utils"; diff --git a/packages/quicktype-core/src/language/JSONSchema/language.ts b/packages/quicktype-core/src/language/JSONSchema/language.ts index f3caf14c0..30e497e2e 100644 --- a/packages/quicktype-core/src/language/JSONSchema/language.ts +++ b/packages/quicktype-core/src/language/JSONSchema/language.ts @@ -1,6 +1,6 @@ import { type RenderContext } from "../../Renderer"; import { TargetLanguage } from "../../TargetLanguage"; -import { type StringTypeMapping, getNoStringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping, getNoStringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { JSONSchemaRenderer } from "./JSONSchemaRenderer"; diff --git a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts index 3329b61cd..560adadd5 100644 --- a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts @@ -5,7 +5,7 @@ import { type Sourcelike } from "../../Source"; import { assertNever, panic } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, type TypeKind, UnionType } from "../../Type"; -import { removeNullFromUnion } from "../../TypeUtils"; +import { removeNullFromUnion } from "../../Type/TypeUtils"; import { JavaRenderer } from "./JavaRenderer"; import { type javaOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Java/JavaRenderer.ts b/packages/quicktype-core/src/language/Java/JavaRenderer.ts index 1054df770..7555be5f7 100644 --- a/packages/quicktype-core/src/language/Java/JavaRenderer.ts +++ b/packages/quicktype-core/src/language/Java/JavaRenderer.ts @@ -9,7 +9,7 @@ import { capitalize } from "../../support/Strings"; import { assert, assertNever, defined } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { javaKeywords } from "./constants"; import { Java8DateTimeProvider, type JavaDateTimeProvider, JavaLegacyDateTimeProvider } from "./DateTimeProvider"; diff --git a/packages/quicktype-core/src/language/Java/language.ts b/packages/quicktype-core/src/language/Java/language.ts index 368757a02..a1f3d2d1f 100644 --- a/packages/quicktype-core/src/language/Java/language.ts +++ b/packages/quicktype-core/src/language/Java/language.ts @@ -3,7 +3,7 @@ import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../ import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { JacksonRenderer } from "./JavaJacksonRenderer"; diff --git a/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts index 7dfa79b33..2220107ae 100644 --- a/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts +++ b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts @@ -19,7 +19,7 @@ import { import { panic } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, type ObjectType, type Type } from "../../Type"; -import { directlyReachableSingleNamedType, matchType } from "../../TypeUtils"; +import { directlyReachableSingleNamedType, matchType } from "../../Type/TypeUtils"; import { type javaScriptOptions } from "./language"; import { isES3IdentifierStart } from "./unicodeMaps"; diff --git a/packages/quicktype-core/src/language/JavaScript/language.ts b/packages/quicktype-core/src/language/JavaScript/language.ts index b781a2044..61d1d93e0 100644 --- a/packages/quicktype-core/src/language/JavaScript/language.ts +++ b/packages/quicktype-core/src/language/JavaScript/language.ts @@ -4,7 +4,7 @@ import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { convertersOption } from "../../support/Converters"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { JavaScriptRenderer } from "./JavaScriptRenderer"; diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts index 7c7fe659e..a84f96265 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts @@ -24,7 +24,7 @@ import { PrimitiveType, type Type } from "../../Type"; -import { directlyReachableSingleNamedType, matchType } from "../../TypeUtils"; +import { directlyReachableSingleNamedType, matchType } from "../../Type/TypeUtils"; import { isES3IdentifierStart } from "../JavaScript/unicodeMaps"; import { legalizeName } from "../JavaScript/utils"; diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts index 0b840946a..0207fd670 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts @@ -16,7 +16,7 @@ import { type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { KotlinRenderer } from "./KotlinRenderer"; import { type kotlinOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts index bcfaf9043..d5dadf8cd 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts @@ -16,7 +16,7 @@ import { type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { KotlinRenderer } from "./KotlinRenderer"; import { type kotlinOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts index d7e5abaaa..b200677ba 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts @@ -17,7 +17,7 @@ import { type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type kotlinOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts index 0814a9e94..e8c247574 100644 --- a/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts +++ b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts @@ -9,7 +9,7 @@ import { camelCase, fastIsUpperCase, repeatString, stringEscape } from "../../su import { assert, defined } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, Type, UnionType } from "../../Type"; -import { isAnyOrNull, matchType, nullableFromUnion } from "../../TypeUtils"; +import { isAnyOrNull, matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenPropertyNames, keywords } from "./constants"; import { type objectiveCOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Php/PhpRenderer.ts b/packages/quicktype-core/src/language/Php/PhpRenderer.ts index 720f5b6e4..b9d2a9512 100644 --- a/packages/quicktype-core/src/language/Php/PhpRenderer.ts +++ b/packages/quicktype-core/src/language/Php/PhpRenderer.ts @@ -10,7 +10,7 @@ import { acronymStyle } from "../../support/Acronyms"; import { defined } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../TypeUtils"; +import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { type phpOptions } from "./language"; import { phpNameStyle, stringEscape } from "./utils"; diff --git a/packages/quicktype-core/src/language/Php/language.ts b/packages/quicktype-core/src/language/Php/language.ts index 2177ffa5f..f4860749d 100644 --- a/packages/quicktype-core/src/language/Php/language.ts +++ b/packages/quicktype-core/src/language/Php/language.ts @@ -3,7 +3,7 @@ import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { PhpRenderer } from "./PhpRenderer"; diff --git a/packages/quicktype-core/src/language/Pike/PikeRenderer.ts b/packages/quicktype-core/src/language/Pike/PikeRenderer.ts index 01e383c6e..dca335b92 100644 --- a/packages/quicktype-core/src/language/Pike/PikeRenderer.ts +++ b/packages/quicktype-core/src/language/Pike/PikeRenderer.ts @@ -11,7 +11,7 @@ import { type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { enumNamingFunction, namedTypeNamingFunction, namingFunction } from "./utils"; diff --git a/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts b/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts index 28d16eece..67c1e64bc 100644 --- a/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts +++ b/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts @@ -17,7 +17,7 @@ import { transformationForType } from "../../Transformers"; import { type ClassType, type Type } from "../../Type"; -import { matchType } from "../../TypeUtils"; +import { matchType } from "../../Type/TypeUtils"; import { PythonRenderer } from "./PythonRenderer"; import { snakeNameStyle } from "./utils"; diff --git a/packages/quicktype-core/src/language/Python/PythonRenderer.ts b/packages/quicktype-core/src/language/Python/PythonRenderer.ts index 02dbed4e0..0e17b49ba 100644 --- a/packages/quicktype-core/src/language/Python/PythonRenderer.ts +++ b/packages/quicktype-core/src/language/Python/PythonRenderer.ts @@ -10,7 +10,7 @@ import { defined, panic } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { followTargetType } from "../../Transformers"; import { type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { forbiddenPropertyNames, forbiddenTypeNames } from "./constants"; import { type pythonOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Python/language.ts b/packages/quicktype-core/src/language/Python/language.ts index 5b02fab98..6a444c072 100644 --- a/packages/quicktype-core/src/language/Python/language.ts +++ b/packages/quicktype-core/src/language/Python/language.ts @@ -4,7 +4,7 @@ import { type RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type, UnionType } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { JSONPythonRenderer } from "./JSONPythonRenderer"; diff --git a/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts b/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts index 081139193..224b4ddb8 100644 --- a/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts +++ b/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts @@ -14,7 +14,7 @@ import { type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { globals } from "./constants"; import { type rubyOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Rust/RustRenderer.ts b/packages/quicktype-core/src/language/Rust/RustRenderer.ts index be533a419..136f643fb 100644 --- a/packages/quicktype-core/src/language/Rust/RustRenderer.ts +++ b/packages/quicktype-core/src/language/Rust/RustRenderer.ts @@ -10,7 +10,7 @@ import { type Sourcelike, maybeAnnotated } from "../../Source"; import { defined } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { type ClassType, type EnumType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type rustOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts b/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts index 8be6e660d..36ee0cd6e 100644 --- a/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts +++ b/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts @@ -1,7 +1,7 @@ import { type Name } from "../../Naming"; import { type Sourcelike } from "../../Source"; import { type ArrayType, type ClassType, type EnumType, type MapType, type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { Scala3Renderer } from "./Scala3Renderer"; import { wrapOption } from "./utils"; diff --git a/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts b/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts index bc5fe7a56..1d5bdec76 100644 --- a/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts +++ b/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts @@ -15,7 +15,7 @@ import { type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type scala3Options } from "./language"; diff --git a/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts b/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts index 17fda57b2..c7e293a7b 100644 --- a/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts +++ b/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts @@ -15,7 +15,7 @@ import { type Type, type UnionType } from "../../Type"; -import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type smithyOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts b/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts index 18cc7f281..aeba703a4 100644 --- a/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts +++ b/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts @@ -20,7 +20,7 @@ import { type TypeKind, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { type swiftOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/Swift/language.ts b/packages/quicktype-core/src/language/Swift/language.ts index 6f10c198d..6d9c81d59 100644 --- a/packages/quicktype-core/src/language/Swift/language.ts +++ b/packages/quicktype-core/src/language/Swift/language.ts @@ -4,7 +4,7 @@ import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../ import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { SwiftRenderer } from "./SwiftRenderer"; diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts index e7979d269..7ca8d840b 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts @@ -19,7 +19,7 @@ import { import { panic } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, EnumType, MapType, type ObjectType, type Type } from "../../Type"; -import { matchType } from "../../TypeUtils"; +import { matchType } from "../../Type/TypeUtils"; import { legalizeName } from "../JavaScript/utils"; import { type typeScriptEffectSchemaOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts index 3cc9b09bf..371aad61d 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts @@ -6,7 +6,7 @@ import { camelCase, utf16StringEscape } from "../../support/Strings"; import { panic } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassType, EnumType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion } from "../../TypeUtils"; +import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { JavaScriptRenderer, type JavaScriptTypeAnnotations } from "../JavaScript"; import { type tsFlowOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts index 74edd55ed..42a79b325 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts @@ -2,7 +2,7 @@ import { type Name } from "../../Naming"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import { type ClassType, type EnumType, type Type } from "../../Type"; -import { isNamedType } from "../../TypeUtils"; +import { isNamedType } from "../../Type/TypeUtils"; import { type JavaScriptTypeAnnotations } from "../JavaScript"; import { TypeScriptFlowBaseRenderer } from "./TypeScriptFlowBaseRenderer"; diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/language.ts b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts index c2285d9fc..909fec0be 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts @@ -2,7 +2,7 @@ import { type RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { javaScriptOptions } from "../JavaScript"; diff --git a/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts index a886288aa..7a6f8560a 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts @@ -27,7 +27,7 @@ import { SetOperationType, type Type } from "../../Type"; -import { matchType } from "../../TypeUtils"; +import { matchType } from "../../Type/TypeUtils"; import { legalizeName } from "../JavaScript/utils"; import { type typeScriptZodOptions } from "./language"; diff --git a/packages/quicktype-core/src/language/TypeScriptZod/language.ts b/packages/quicktype-core/src/language/TypeScriptZod/language.ts index 9f119aec5..88e2a9a89 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod/language.ts @@ -2,7 +2,7 @@ import { type RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../TypeBuilder"; +import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; import { type FixMeOptionsType } from "../../types"; import { TypeScriptZodRenderer } from "./TypeScriptZodRenderer"; diff --git a/packages/quicktype-core/src/rewrites/CombineClasses.ts b/packages/quicktype-core/src/rewrites/CombineClasses.ts index 3fc7a29fc..30d58ebfc 100644 --- a/packages/quicktype-core/src/rewrites/CombineClasses.ts +++ b/packages/quicktype-core/src/rewrites/CombineClasses.ts @@ -1,9 +1,10 @@ import { type GraphRewriteBuilder } from "../GraphRewriting"; import { type RunContext } from "../Run"; import { assert, panic } from "../support/Support"; -import { type ClassProperty, ClassType, type Type, setOperationCasesEqual } from "../Type"; -import { type TypeGraph, type TypeRef } from "../TypeGraph"; -import { combineTypeAttributesOfTypes, nonNullTypeCases } from "../TypeUtils"; +import { type ClassProperty, ClassType, type Type, setOperationCasesEqual } from "../Type/Type"; +import { type TypeGraph } from "../Type/TypeGraph"; +import { type TypeRef } from "../Type/TypeRef"; +import { combineTypeAttributesOfTypes, nonNullTypeCases } from "../Type/TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; const REQUIRED_OVERLAP = 3 / 4; diff --git a/packages/quicktype-core/src/rewrites/ExpandStrings.ts b/packages/quicktype-core/src/rewrites/ExpandStrings.ts index f8a86385a..a1ca39850 100644 --- a/packages/quicktype-core/src/rewrites/ExpandStrings.ts +++ b/packages/quicktype-core/src/rewrites/ExpandStrings.ts @@ -14,9 +14,10 @@ import { emptyTypeAttributes } from "../attributes/TypeAttributes"; import { type GraphRewriteBuilder } from "../GraphRewriting"; import { type RunContext } from "../Run"; import { assert, defined } from "../support/Support"; -import { type PrimitiveType } from "../Type"; -import { type TypeGraph, type TypeRef } from "../TypeGraph"; -import { stringTypesForType } from "../TypeUtils"; +import { type PrimitiveType } from "../Type/Type"; +import { type TypeGraph } from "../Type/TypeGraph"; +import { type TypeRef } from "../Type/TypeRef"; +import { stringTypesForType } from "../Type/TypeUtils"; const MIN_LENGTH_FOR_ENUM = 10; diff --git a/packages/quicktype-core/src/rewrites/FlattenStrings.ts b/packages/quicktype-core/src/rewrites/FlattenStrings.ts index 6982a94da..12299a07f 100644 --- a/packages/quicktype-core/src/rewrites/FlattenStrings.ts +++ b/packages/quicktype-core/src/rewrites/FlattenStrings.ts @@ -3,10 +3,11 @@ import { iterableFirst } from "collection-utils"; import { combineTypeAttributes } from "../attributes/TypeAttributes"; import { type GraphRewriteBuilder } from "../GraphRewriting"; import { assert, defined } from "../support/Support"; -import { type PrimitiveType, type Type, type UnionType } from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type TypeGraph, type TypeRef } from "../TypeGraph"; -import { combineTypeAttributesOfTypes, stringTypesForType } from "../TypeUtils"; +import { type PrimitiveType, type Type, type UnionType } from "../Type/Type"; +import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; +import { type TypeGraph } from "../Type/TypeGraph"; +import { type TypeRef } from "../Type/TypeRef"; +import { combineTypeAttributesOfTypes, stringTypesForType } from "../Type/TypeUtils"; // A union needs replacing if it contains more than one string type, one of them being // a basic string type. diff --git a/packages/quicktype-core/src/rewrites/FlattenUnions.ts b/packages/quicktype-core/src/rewrites/FlattenUnions.ts index cca90fca4..fe78aa6fc 100644 --- a/packages/quicktype-core/src/rewrites/FlattenUnions.ts +++ b/packages/quicktype-core/src/rewrites/FlattenUnions.ts @@ -4,10 +4,11 @@ import { emptyTypeAttributes } from "../attributes/TypeAttributes"; import { type GraphRewriteBuilder } from "../GraphRewriting"; import { messageAssert } from "../Messages"; import { assert } from "../support/Support"; -import { IntersectionType, type Type, UnionType } from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type TypeGraph, type TypeRef, derefTypeRef } from "../TypeGraph"; -import { makeGroupsToFlatten } from "../TypeUtils"; +import { IntersectionType, type Type, UnionType } from "../Type/Type"; +import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; +import { type TypeGraph } from "../Type/TypeGraph"; +import { type TypeRef, derefTypeRef } from "../Type/TypeRef"; +import { makeGroupsToFlatten } from "../Type/TypeUtils"; import { UnifyUnionBuilder, unifyTypes } from "../UnifyClasses"; export function flattenUnions( diff --git a/packages/quicktype-core/src/rewrites/InferMaps.ts b/packages/quicktype-core/src/rewrites/InferMaps.ts index e63803745..5949a9e03 100644 --- a/packages/quicktype-core/src/rewrites/InferMaps.ts +++ b/packages/quicktype-core/src/rewrites/InferMaps.ts @@ -4,9 +4,10 @@ import { type GraphRewriteBuilder } from "../GraphRewriting"; import { type MarkovChain, evaluate, load } from "../MarkovChain"; import { defined, panic } from "../support/Support"; import { type ClassProperty, ClassType, type Type, isPrimitiveStringTypeKind, setOperationCasesEqual } from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type TypeGraph, type TypeRef } from "../TypeGraph"; -import { removeNullFromType } from "../TypeUtils"; +import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; +import { type TypeGraph } from "../Type/TypeGraph"; +import { type TypeRef } from "../Type/TypeRef"; +import { removeNullFromType } from "../Type/TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; const mapSizeThreshold = 20; diff --git a/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts b/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts index 2e8504d62..a4ad5c063 100644 --- a/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts +++ b/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts @@ -3,9 +3,10 @@ import { iterableFirst, mapMap, setFilter, setMap } from "collection-utils"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; import { type GraphRewriteBuilder } from "../GraphRewriting"; import { defined } from "../support/Support"; -import { type ClassProperty, type ObjectType } from "../Type"; -import { type StringTypeMapping } from "../TypeBuilder"; -import { type TypeGraph, type TypeRef } from "../TypeGraph"; +import { type ClassProperty, type ObjectType } from "../Type/Type"; +import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; +import { type TypeGraph } from "../Type/TypeGraph"; +import { type TypeRef } from "../Type/TypeRef"; export function replaceObjectType( graph: TypeGraph, diff --git a/packages/quicktype-core/src/rewrites/ResolveIntersections.ts b/packages/quicktype-core/src/rewrites/ResolveIntersections.ts index a992ead9f..67111f9e4 100644 --- a/packages/quicktype-core/src/rewrites/ResolveIntersections.ts +++ b/packages/quicktype-core/src/rewrites/ResolveIntersections.ts @@ -33,9 +33,11 @@ import { isNumberTypeKind, isPrimitiveTypeKind } from "../Type"; -import { type StringTypeMapping, type TypeBuilder } from "../TypeBuilder"; -import { type TypeGraph, type TypeRef } from "../TypeGraph"; -import { makeGroupsToFlatten, matchTypeExhaustive, setOperationMembersRecursively } from "../TypeUtils"; +import { type TypeBuilder } from "../Type/TypeBuilder"; +import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; +import { type TypeGraph } from "../Type/TypeGraph"; +import { type TypeRef } from "../Type/TypeRef"; +import { makeGroupsToFlatten, matchTypeExhaustive, setOperationMembersRecursively } from "../Type/TypeUtils"; import { type TypeAttributeMap, UnionBuilder, type UnionTypeProvider } from "../UnionBuilder"; function canResolve(t: IntersectionType): boolean { From 7cd667e5c81db876f9c63091a79adf1a44bce982 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Thu, 15 May 2025 09:29:12 -0700 Subject: [PATCH 93/99] release: Quicktype v23.2.0 (#2743) * chore: Update typescript to latest version (#2735) * install and configure biome (#2741) * Remove FixMeAnyOptionsType, fix lint issues (#2742) * bump version to 23.2.0 --- .eslintignore | 8 - .eslintrc.json | 104 - .prettierignore | 2 - .prettierrc | 1 - .vscode/settings.json | 2 +- biome.json | 16 + package-lock.json | 8154 ++++------------- package.json | 18 +- packages/quicktype-core/package.json | 6 +- packages/quicktype-core/src/Annotation.ts | 4 +- .../quicktype-core/src/ConvenienceRenderer.ts | 653 +- packages/quicktype-core/src/CycleBreaker.ts | 9 +- packages/quicktype-core/src/DateTime.ts | 6 +- packages/quicktype-core/src/DeclarationIR.ts | 45 +- packages/quicktype-core/src/GatherNames.ts | 145 +- packages/quicktype-core/src/Graph.ts | 59 +- packages/quicktype-core/src/GraphRewriting.ts | 458 +- packages/quicktype-core/src/Inference.ts | 97 + .../quicktype-core/src/MakeTransformations.ts | 305 +- packages/quicktype-core/src/MarkovChain.ts | 22 +- packages/quicktype-core/src/Messages.ts | 210 +- packages/quicktype-core/src/Naming.ts | 166 +- packages/quicktype-core/src/Renderer.ts | 101 +- .../src/RendererOptions/index.ts | 58 +- .../src/RendererOptions/types.ts | 31 +- packages/quicktype-core/src/Run.ts | 490 +- packages/quicktype-core/src/Source.ts | 77 +- packages/quicktype-core/src/TargetLanguage.ts | 35 +- packages/quicktype-core/src/Transformers.ts | 566 +- .../src/Type/ProvenanceTypeAttributeKind.ts | 7 +- .../src/Type/TransformedStringType.ts | 70 +- packages/quicktype-core/src/Type/Type.ts | 338 +- .../quicktype-core/src/Type/TypeBuilder.ts | 306 +- .../src/Type/TypeBuilderUtils.ts | 20 +- packages/quicktype-core/src/Type/TypeGraph.ts | 175 +- .../quicktype-core/src/Type/TypeGraphUtils.ts | 84 +- packages/quicktype-core/src/Type/TypeRef.ts | 25 +- packages/quicktype-core/src/Type/TypeUtils.ts | 124 +- packages/quicktype-core/src/UnifyClasses.ts | 210 +- packages/quicktype-core/src/UnionBuilder.ts | 331 +- .../src/attributes/AccessorNames.ts | 157 +- .../src/attributes/Constraints.ts | 80 +- .../src/attributes/Description.ts | 81 +- .../src/attributes/EnumValues.ts | 45 +- .../src/attributes/StringTypes.ts | 94 +- .../src/attributes/TypeAttributes.ts | 55 +- .../src/attributes/TypeNames.ts | 115 +- .../src/attributes/URIAttributes.ts | 48 +- packages/quicktype-core/src/index.ts | 60 +- .../src/input/CompressedJSON.ts | 74 +- .../src/input/FetchingJSONSchemaStore.ts | 6 +- .../quicktype-core/src/input/Inference.ts | 245 +- packages/quicktype-core/src/input/Inputs.ts | 152 +- .../src/input/JSONSchemaInput.ts | 742 +- .../src/input/JSONSchemaStore.ts | 10 +- .../quicktype-core/src/input/PathElement.ts | 2 +- .../src/input/PostmanCollection.ts | 61 +- .../quicktype-core/src/input/io/NodeIO.ts | 42 +- .../src/input/io/get-stream/buffer-stream.ts | 18 +- .../src/input/io/get-stream/index.ts | 10 +- packages/quicktype-core/src/language/All.ts | 28 +- .../src/language/CJSON/CJSONRenderer.ts | 7093 +++++++++----- .../src/language/CJSON/constants.ts | 239 +- .../src/language/CJSON/language.ts | 65 +- .../src/language/CJSON/utils.ts | 20 +- .../language/CPlusPlus/CPlusPlusRenderer.ts | 1921 ++-- .../src/language/CPlusPlus/constants.ts | 201 +- .../src/language/CPlusPlus/language.ts | 93 +- .../src/language/CPlusPlus/utils.ts | 42 +- .../src/language/CSharp/CSharpRenderer.ts | 325 +- .../CSharp/NewtonSoftCSharpRenderer.ts | 744 +- .../CSharp/SystemTextJsonCSharpRenderer.ts | 654 +- .../src/language/CSharp/constants.ts | 154 +- .../src/language/CSharp/index.ts | 7 +- .../src/language/CSharp/language.ts | 118 +- .../src/language/CSharp/utils.ts | 59 +- .../src/language/Crystal/CrystalRenderer.ts | 124 +- .../src/language/Crystal/constants.ts | 2 +- .../src/language/Crystal/language.ts | 8 +- .../src/language/Crystal/utils.ts | 17 +- .../src/language/Dart/DartRenderer.ts | 538 +- .../src/language/Dart/constants.ts | 2 +- .../src/language/Dart/language.ts | 85 +- .../quicktype-core/src/language/Dart/utils.ts | 36 +- .../src/language/Elixir/ElixirRenderer.ts | 1190 ++- .../src/language/Elixir/constants.ts | 4 +- .../src/language/Elixir/language.ts | 34 +- .../src/language/Elixir/utils.ts | 15 +- .../src/language/Elm/ElmRenderer.ts | 437 +- .../src/language/Elm/constants.ts | 2 +- .../src/language/Elm/language.ts | 39 +- .../quicktype-core/src/language/Elm/utils.ts | 21 +- .../src/language/Golang/GolangRenderer.ts | 343 +- .../src/language/Golang/language.ts | 67 +- .../src/language/Golang/utils.ts | 25 +- .../src/language/Haskell/HaskellRenderer.ts | 236 +- .../src/language/Haskell/constants.ts | 2 +- .../src/language/Haskell/language.ts | 39 +- .../src/language/Haskell/utils.ts | 16 +- .../language/JSONSchema/JSONSchemaRenderer.ts | 78 +- .../src/language/JSONSchema/language.ts | 20 +- .../src/language/JSONSchema/utils.ts | 8 +- .../src/language/Java/DateTimeProvider.ts | 181 +- .../src/language/Java/JavaJacksonRenderer.ts | 1346 +-- .../src/language/Java/JavaRenderer.ts | 425 +- .../src/language/Java/constants.ts | 2 +- .../src/language/Java/language.ts | 55 +- .../quicktype-core/src/language/Java/utils.ts | 25 +- .../language/JavaScript/JavaScriptRenderer.ts | 202 +- .../src/language/JavaScript/index.ts | 5 +- .../src/language/JavaScript/language.ts | 51 +- .../src/language/JavaScript/unicodeMaps.ts | 175 +- .../JavaScriptPropTypesRenderer.ts | 145 +- .../src/language/JavaScriptPropTypes/index.ts | 5 +- .../language/JavaScriptPropTypes/language.ts | 22 +- .../language/Kotlin/KotlinJacksonRenderer.ts | 206 +- .../language/Kotlin/KotlinKlaxonRenderer.ts | 272 +- .../src/language/Kotlin/KotlinRenderer.ts | 237 +- .../src/language/Kotlin/KotlinXRenderer.ts | 57 +- .../src/language/Kotlin/constants.ts | 2 +- .../src/language/Kotlin/language.ts | 33 +- .../src/language/Kotlin/utils.ts | 10 +- .../Objective-C/ObjectiveCRenderer.ts | 916 +- .../src/language/Objective-C/constants.ts | 6 +- .../src/language/Objective-C/language.ts | 47 +- .../src/language/Objective-C/utils.ts | 16 +- .../src/language/Php/PhpRenderer.ts | 1018 +- .../src/language/Php/language.ts | 27 +- .../quicktype-core/src/language/Php/utils.ts | 25 +- .../src/language/Pike/PikeRenderer.ts | 175 +- .../src/language/Pike/constants.ts | 2 +- .../src/language/Pike/language.ts | 8 +- .../quicktype-core/src/language/Pike/utils.ts | 21 +- .../src/language/Python/JSONPythonRenderer.ts | 695 +- .../src/language/Python/PythonRenderer.ts | 228 +- .../src/language/Python/constants.ts | 4 +- .../src/language/Python/language.ts | 61 +- .../src/language/Python/utils.ts | 21 +- .../src/language/Ruby/RubyRenderer.ts | 701 +- .../src/language/Ruby/constants.ts | 8 +- .../src/language/Ruby/language.ts | 40 +- .../quicktype-core/src/language/Ruby/utils.ts | 21 +- .../src/language/Rust/RustRenderer.ts | 198 +- .../src/language/Rust/constants.ts | 2 +- .../src/language/Rust/language.ts | 53 +- .../quicktype-core/src/language/Rust/utils.ts | 91 +- .../src/language/Scala3/CirceRenderer.ts | 127 +- .../src/language/Scala3/Scala3Renderer.ts | 163 +- .../src/language/Scala3/constants.ts | 4 +- .../src/language/Scala3/language.ts | 31 +- .../src/language/Scala3/utils.ts | 20 +- .../src/language/Smithy4s/Smithy4sRenderer.ts | 172 +- .../src/language/Smithy4s/constants.ts | 4 +- .../src/language/Smithy4s/language.ts | 29 +- .../src/language/Smithy4s/utils.ts | 20 +- .../src/language/Swift/SwiftRenderer.ts | 963 +- .../src/language/Swift/constants.ts | 2 +- .../src/language/Swift/language.ts | 115 +- .../src/language/Swift/utils.ts | 16 +- .../TypeScriptEffectSchemaRenderer.ts | 142 +- .../language/TypeScriptEffectSchema/index.ts | 5 +- .../TypeScriptEffectSchema/language.ts | 20 +- .../language/TypeScriptFlow/FlowRenderer.ts | 6 +- .../TypeScriptFlowBaseRenderer.ts | 154 +- .../TypeScriptFlow/TypeScriptRenderer.ts | 42 +- .../src/language/TypeScriptFlow/index.ts | 6 +- .../src/language/TypeScriptFlow/language.ts | 79 +- .../src/language/TypeScriptFlow/utils.ts | 2 +- .../TypeScriptZod/TypeScriptZodRenderer.ts | 152 +- .../src/language/TypeScriptZod/language.ts | 29 +- packages/quicktype-core/src/language/index.ts | 6 +- .../src/language/options.types.ts | 9 +- packages/quicktype-core/src/language/types.ts | 11 +- .../src/rewrites/CombineClasses.ts | 78 +- .../src/rewrites/ExpandStrings.ts | 89 +- .../src/rewrites/FlattenStrings.ts | 38 +- .../src/rewrites/FlattenUnions.ts | 75 +- .../quicktype-core/src/rewrites/InferMaps.ts | 71 +- .../src/rewrites/ReplaceObjectType.ts | 74 +- .../src/rewrites/ResolveIntersections.ts | 323 +- .../src/support/Acronyms.const.ts | 2190 ++--- .../quicktype-core/src/support/Acronyms.ts | 21 +- packages/quicktype-core/src/support/Chance.ts | 58 +- .../quicktype-core/src/support/Comments.ts | 7 +- .../quicktype-core/src/support/Converters.ts | 6 +- .../quicktype-core/src/support/Strings.ts | 116 +- .../quicktype-core/src/support/Support.ts | 49 +- packages/quicktype-core/src/types.ts | 7 - packages/quicktype-graphql-input/package.json | 6 +- .../src/GraphQLSchema.ts | 4 +- packages/quicktype-graphql-input/src/index.ts | 245 +- .../quicktype-typescript-input/package.json | 4 +- .../quicktype-typescript-input/src/index.ts | 57 +- packages/quicktype-vscode/package.json | 11 +- packages/quicktype-vscode/src/extension.ts | 177 +- packages/quicktype-vscode/tsconfig.json | 12 +- script/patch-npm-version.ts | 8 +- script/publish.sh | 4 +- src/CompressedJSONFromStream.ts | 19 +- src/GraphQLIntrospection.ts | 22 +- src/TypeSource.ts | 6 +- src/URLGrammar.ts | 4 +- src/index.ts | 518 +- test/buildkite.ts | 43 +- test/fixtures.ts | 518 +- .../csharp-SystemTextJson/.vscode/launch.json | 12 +- .../csharp-SystemTextJson/.vscode/tasks.json | 6 +- test/fixtures/csharp/.vscode/launch.json | 12 +- test/fixtures/csharp/.vscode/tasks.json | 6 +- test/fixtures/elm/elm-package.json | 4 +- test/fixtures/elm/runner.js | 12 +- test/fixtures/flow/main.js | 4 +- test/fixtures/javascript-prop-types/main.js | 11 +- .../javascript-prop-types/package.json | 26 +- test/fixtures/javascript/main.js | 4 +- test/fixtures/kotlin/sample.json | 2 +- test/fixtures/objective-c/sample.json | 3725 ++++---- .../fixtures/typescript-effect-schema/main.ts | 4 +- .../typescript-effect-schema/tsconfig.json | 6 +- test/fixtures/typescript-zod/main.ts | 10 +- test/fixtures/typescript-zod/tsconfig.json | 6 +- test/fixtures/typescript/main.ts | 4 +- test/fixtures/typescript/tsconfig.json | 6 +- test/languages.ts | 276 +- test/lib/deepEquals.ts | 42 +- test/lib/multicore.ts | 30 +- test/test.ts | 42 +- test/utils.ts | 106 +- 228 files changed, 29208 insertions(+), 20963 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json delete mode 100644 .prettierignore delete mode 100644 .prettierrc create mode 100644 biome.json create mode 100644 packages/quicktype-core/src/Inference.ts diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 135b09976..000000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -dist -node_modules -packages/*/dist -packages/*/node_modules -test/runs -test/input - -license diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index f35b5c03c..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "overrides": [ - { - "extends": ["canonical/json"], - "files": "*.json" - }, - { - "extends": [ - "eslint:recommended", - "canonical/typescript", - "canonical/typescript-type-checking", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript" - ], - "plugins": ["canonical"], - "parserOptions": { - "tsconfigRootDir": "./", - "project": ["./tsconfig.json", "./packages/*/tsconfig.json"] - }, - "settings": { - "import/resolver": { - "typescript": true, - "node": true - } - }, - "rules": { - "comma-dangle": "off", - "no-extra-parens": "off", - "no-case-declarations": "warn", - "no-duplicate-imports": "error", - "canonical/prefer-inline-type-import": "error", - "typescript-sort-keys/string-enum": "off", - - "sort-imports": [ - "error", - { - "ignoreDeclarationSort": true - } - ], - "import/first": "error", - "import/order": [ - "error", - { - "newlines-between": "always", - "groups": ["builtin", "external", "internal", "parent", "sibling", "index", "object", "type"], - "pathGroups": [ - { - "pattern": "@/**", - "group": "internal", - "position": "before" - } - ], - "alphabetize": { - "order": "asc" /* sort in ascending order. Options: ['ignore', 'asc', 'desc'] */, - "caseInsensitive": true /* ignore case. Options: [true, false] */ - } - } - ], - - "import/no-absolute-path": "error", - "import/no-cycle": "error", - "import/no-duplicates": "error", - "import/no-extraneous-dependencies": "error", - "import/no-named-as-default": "off", - "import/no-useless-path-segments": "error", - - "@typescript-eslint/class-literal-property-style": "off", - "@typescript-eslint/comma-dangle": "off", - "@typescript-eslint/consistent-type-definitions": ["error", "interface"], - "@typescript-eslint/consistent-type-imports": ["error", { "prefer": "type-imports" }], - "@typescript-eslint/explicit-function-return-type": "warn", - "@typescript-eslint/indent": "off", - "@typescript-eslint/quotes": ["error", "double", { "avoidEscape": true }], - "@typescript-eslint/member-delimiter-style": "off", - "@typescript-eslint/no-base-to-string": "warn", - "@typescript-eslint/no-empty-interface": "warn", - "@typescript-eslint/no-extra-parens": "off", - "@typescript-eslint/no-loop-func": "warn", - "@typescript-eslint/no-misused-promises": ["error", { "checksVoidReturn": false }], - "@typescript-eslint/no-unused-vars": ["error", { "vars": "local", "args": "none" }], - "@typescript-eslint/no-use-before-define": "warn", - "@typescript-eslint/no-useless-empty-export": "error", - "@typescript-eslint/prefer-readonly": "warn", - "@typescript-eslint/prefer-reduce-type-parameter": "off", - "@typescript-eslint/require-array-sort-compare": "off", - "@typescript-eslint/space-before-function-paren": "off", - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/unbound-method": "warn", - "@typescript-eslint/unified-signatures": "error" - }, - "overrides": [ - { - "files": "*.d.ts", - "rules": { - "no-var": "off" - } - } - ], - "files": "*.ts" - } - ], - "root": true -} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 24d3c3b54..000000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -test/runs -test/inputs diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 994784875..000000000 --- a/.prettierrc +++ /dev/null @@ -1 +0,0 @@ -{ "tabWidth": 4, "printWidth": 120, "trailingComma": "none", "arrowParens": "avoid", "quoteProps": "consistent" } diff --git a/.vscode/settings.json b/.vscode/settings.json index f57596256..b666505db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,7 +23,7 @@ }, "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.defaultFormatter": "biomejs.biome", "editor.wordWrap": "on", "editor.insertSpaces": true, "editor.tabSize": 4, diff --git a/biome.json b/biome.json new file mode 100644 index 000000000..a1af651fa --- /dev/null +++ b/biome.json @@ -0,0 +1,16 @@ +{ + "files": { + "ignore": [ + "test/runs", + "test/inputs", + "dist", + "node_modules", + "packages/*/dist", + "packages/*/node_modules" + ] + }, + "formatter": { + "indentStyle": "space", + "indentWidth": 4 + } +} diff --git a/package-lock.json b/package-lock.json index b362c04c5..b6ddb0397 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "quicktype", - "version": "23.1.0", + "version": "23.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "quicktype", - "version": "23.1.0", + "version": "23.2.0", "license": "Apache-2.0", "workspaces": [ "./packages/quicktype-core", @@ -30,12 +30,13 @@ "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", - "typescript": "4.9.5" + "typescript": "~5.8.3" }, "bin": { "quicktype": "dist/index.js" }, "devDependencies": { + "@biomejs/biome": "^1.9.4", "@tsconfig/node18": "^1.0.1", "@types/command-line-args": "^5.2.0", "@types/command-line-usage": "^5.0.4", @@ -51,16 +52,7 @@ "ajv": "^5.5.2", "deep-equal": "^2.2.3", "esbuild": "^0.20.2", - "eslint": "^8.57.0", - "eslint-config-canonical": "^41.1.7", - "eslint-config-prettier": "^6.10.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-canonical": "^3.4.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-json": "^3.1.0", - "eslint-plugin-prettier": "^4.2.1", "exit": "^0.1.2", - "prettier": "^3.2.5", "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", @@ -97,5100 +89,2319 @@ "node": ">=0.10.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "license": "MIT" + }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" }, "engines": { - "node": ">=6.0.0" + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" } }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" } }, - "node_modules/@ardatan/sync-fetch": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", - "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "node-fetch": "^2.6.1" - }, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">=14.21.3" } }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=14.21.3" } }, - "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=14.21.3" } }, - "node_modules/@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=14.21.3" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" } }, - "node_modules/@babel/eslint-parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz", - "integrity": "sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ==", + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + "node": ">=14.21.3" } }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/eslint-plugin": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.24.5.tgz", - "integrity": "sha512-5n3K9Zv13VOa9SG2ZiX0WV7A0ddApRn6vsV8zBojCsxnCbYKLjCDvzDfVxS7C4STmjQDOXU1uk/ppxxDTC860w==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, + "license": "MIT", "dependencies": { - "eslint-rule-composer": "^0.3.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@babel/eslint-parser": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", "dev": true, - "dependencies": { - "@babel/types": "^7.24.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, + "license": "MIT", "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, "bin": { - "semver": "bin/semver.js" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "node_modules/@eslint/js": { + "version": "8.57.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "node_modules/@glideapps/ts-necessities": { + "version": "2.2.3", + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=6.9.0" + "node": ">=10.10.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "Apache-2.0", "engines": { - "node": ">=6.9.0" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", "dev": true, + "license": "ISC", "dependencies": { - "@babel/types": "^7.24.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" - }, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.5" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.5" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "license": "MIT" }, - "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", - "dev": true, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "node_modules/@mark.probst/typescript-json-schema": { + "version": "0.55.0", + "license": "BSD-3-Clause", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@types/json-schema": "^7.0.9", + "@types/node": "^16.9.2", + "glob": "^7.1.7", + "path-equal": "^1.1.2", + "safe-stable-stringify": "^2.2.0", + "ts-node": "^10.9.1", + "typescript": "4.9.4", + "yargs": "^17.1.1" }, - "engines": { - "node": ">=4" + "bin": { + "typescript-json-schema": "bin/typescript-json-schema" } }, - "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", - "dev": true, + "node_modules/@mark.probst/typescript-json-schema/node_modules/@types/node": { + "version": "16.18.11", + "license": "MIT" + }, + "node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { + "version": "4.9.4", + "license": "Apache-2.0", "bin": { - "parser": "bin/babel-parser.js" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=6.0.0" + "node": ">=4.2.0" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", - "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 8" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, + "license": "MIT", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 8" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 8" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", "dev": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "node_modules/@tootallnate/once": { + "version": "1.1.2", "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">= 6" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.5.tgz", - "integrity": "sha512-GWO0mgzNMLWaSYM4z4NVIuY0Cd1fl8cPnuetuddu5w/qGuvt5Y7oUi/kvvQGK9xgOkFJDQX2heIvTRn/OQ1XTg==", + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/@tsconfig/node18": { + "version": "1.0.1", "dev": true, - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } + "license": "MIT" }, - "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "node_modules/@types/browser-or-node": { + "version": "1.3.2", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } + "license": "MIT" }, - "node_modules/@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", + "node_modules/@types/command-line-args": { + "version": "5.2.0", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } + "license": "MIT" }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/@types/command-line-usage": { + "version": "5.0.4", "dev": true, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "node_modules/@types/glob": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", + "node_modules/@types/graphql": { + "version": "0.11.8", "dev": true, "license": "MIT" }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } + "node_modules/@types/is-url": { + "version": "1.2.32", + "resolved": "https://registry.npmjs.org/@types/is-url/-/is-url-1.2.32.tgz", + "integrity": "sha512-46VLdbWI8Sc+hPexQ6NLNR2YpoDyDZIpASHkJQ2Yr+Kf9Giw6LdCTkwOdsnHKPQeh7xTjTmSnxbE8qpxYuCiHA==", + "dev": true }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", - "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", "dev": true, - "dependencies": { - "comment-parser": "1.4.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - }, - "engines": { - "node": ">=16" - } + "license": "MIT" }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "cpu": [ - "x64" - ], + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@types/mocha": { + "version": "10.0.6", "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.19.31", "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "undici-types": "~5.26.4" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", + "node_modules/@types/node-persist": { + "version": "3.1.8", "dev": true, "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", + "node_modules/@types/pako": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pluralize": { + "version": "0.0.30", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/readable-stream": { + "version": "4.0.10", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "@types/node": "*", + "safe-buffer": "~5.1.1" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", + "node_modules/@types/semver": { + "version": "7.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/shelljs": { + "version": "0.8.15", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@types/glob": "~7.2.0", + "@types/node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { + "node_modules/@types/stream-chain": { "version": "2.0.1", "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/@types/stream-json": { + "version": "1.7.3", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "@types/node": "*", + "@types/stream-chain": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", + "node_modules/@types/unicode-properties": { + "version": "1.3.0", "dev": true, "license": "MIT" }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } + "node_modules/@types/urijs": { + "version": "1.19.25", + "license": "MIT" }, - "node_modules/@glideapps/ts-necessities": { - "version": "2.2.3", + "node_modules/@types/vscode": { + "version": "1.88.0", + "dev": true, "license": "MIT" }, - "node_modules/@graphql-eslint/eslint-plugin": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz", - "integrity": "sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw==", + "node_modules/@types/wordwrap": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/wordwrap/-/wordwrap-1.0.3.tgz", + "integrity": "sha512-jx39cOYWJxZxVOZeNHvLVoDLRUFcYtIJaurC6C0qzCovIB3GPDbMDbYvoWi9D1B2PtIE16rElQOFR4Y+8QbUgw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@graphql-tools/code-file-loader": "^7.3.6", - "@graphql-tools/graphql-tag-pluck": "^7.3.6", - "@graphql-tools/utils": "^9.0.0", - "chalk": "^4.1.2", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", - "fast-glob": "^3.2.12", - "graphql-config": "^4.4.0", - "graphql-depth-limit": "^1.1.0", - "lodash.lowercase": "^4.3.0", - "tslib": "^2.4.1" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/code-file-loader": { - "version": "7.3.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", - "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@graphql-tools/graphql-tag-pluck": "7.5.2", - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", - "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@babel/parser": "^7.16.8", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@graphql-eslint/eslint-plugin/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "ISC", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "balanced-match": "^1.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "MIT", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, - "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@vscode/test-cli": { + "version": "0.0.6", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "@types/mocha": "^10.0.2", + "c8": "^9.1.0", + "chokidar": "^3.5.3", + "enhanced-resolve": "^5.15.0", + "glob": "^10.3.10", + "minimatch": "^9.0.3", + "mocha": "^10.2.0", + "supports-color": "^9.4.0", + "yargs": "^17.7.2" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "bin": { + "vscode-test": "out/bin.mjs" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", + "node_modules/@vscode/test-cli/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@vscode/test-cli/node_modules/glob": { + "version": "10.3.12", "dev": true, + "license": "ISC", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=6.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@vscode/test-cli/node_modules/minimatch": { + "version": "9.0.4", "dev": true, + "license": "ISC", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "license": "MIT", + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@vscode/test-cli/node_modules/supports-color": { + "version": "9.4.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", + "node_modules/@vscode/test-cli/node_modules/yargs": { + "version": "17.7.2", + "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@mark.probst/typescript-json-schema": { - "version": "0.55.0", - "license": "BSD-3-Clause", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/node": "^16.9.2", - "glob": "^7.1.7", - "path-equal": "^1.1.2", - "safe-stable-stringify": "^2.2.0", - "ts-node": "^10.9.1", - "typescript": "4.9.4", - "yargs": "^17.1.1" - }, - "bin": { - "typescript-json-schema": "bin/typescript-json-schema" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/@types/node": { - "version": "16.18.11", - "license": "MIT" - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { - "version": "4.9.4", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=4.2.0" + "node": ">=12" } }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", - "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", + "node_modules/@vscode/test-electron": { + "version": "2.3.9", "dev": true, + "license": "MIT", "dependencies": { - "glob": "7.1.7" + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=16" } }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/@vscode/vsce": { + "version": "2.25.0", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^6.2.1", + "form-data": "^4.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" }, "engines": { - "node": "*" + "node": ">= 16" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "dependencies": { - "eslint-scope": "5.1.1" + "optionalDependencies": { + "keytar": "^7.7.0" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "2.4.2", "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "6.2.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 6" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, + "node_modules/abort-controller": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6.5" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/acorn": { + "version": "8.11.3", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", "dev": true, "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=0.4.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/agent-base": { + "version": "6.0.2", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "debug": "4" }, "engines": { - "node": ">= 8" + "node": ">= 6.0.0" } }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", - "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", + "node_modules/ajv": { + "version": "5.5.2", "dev": true, + "license": "MIT", "dependencies": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, - "node_modules/@peculiar/asn1-schema/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "node_modules/ansi-colors": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/@peculiar/json-schema/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@peculiar/webcrypto": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.6.tgz", - "integrity": "sha512-YBcMfqNSwn3SujUJvAaySy5tlYbYm6tVt9SKoXu8BaTdKGROiJDgPR3TXpZdAKUfklzm3lRapJEAltiMQtBgZg==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, + "license": "ISC", "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.7.9" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=10.12.0" + "node": ">= 8" } }, - "node_modules/@peculiar/webcrypto/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "node_modules/arg": { + "version": "4.1.3", + "license": "MIT" }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, + "node_modules/array-back": { + "version": "3.1.0", "license": "MIT", - "optional": true, "engines": { - "node": ">=14" + "node": ">=6" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@repeaterjs/repeater": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", - "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", - "dev": true - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", - "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/@tsconfig/node18": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/browser-or-node": { - "version": "1.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/command-line-args": { - "version": "5.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.4", + "node_modules/asynckit": { + "version": "0.4.0", "dev": true, "license": "MIT" }, - "node_modules/@types/glob": { - "version": "7.2.0", + "node_modules/available-typed-arrays": { + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/graphql": { - "version": "0.11.8", + "node_modules/azure-devops-node-api": { + "version": "12.5.0", "dev": true, - "license": "MIT" - }, - "node_modules/@types/is-url": { - "version": "1.2.32", - "resolved": "https://registry.npmjs.org/@types/is-url/-/is-url-1.2.32.tgz", - "integrity": "sha512-46VLdbWI8Sc+hPexQ6NLNR2YpoDyDZIpASHkJQ2Yr+Kf9Giw6LdCTkwOdsnHKPQeh7xTjTmSnxbE8qpxYuCiHA==", - "dev": true + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "dev": true, + "node_modules/balanced-match": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/@types/json-schema": { - "version": "7.0.15", + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", + "node_modules/binary-extensions": { + "version": "2.3.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@types/mocha": { - "version": "10.0.6", + "node_modules/bl": { + "version": "4.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.19.31", "license": "MIT", + "optional": true, "dependencies": { - "undici-types": "~5.26.4" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@types/node-persist": { - "version": "3.1.8", + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", + "optional": true, "dependencies": { - "@types/node": "*" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/pako": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/pluralize": { - "version": "0.0.30", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/readable-stream": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/shelljs": { - "version": "0.8.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "~7.2.0", - "@types/node": "*" - } - }, - "node_modules/@types/stream-chain": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stream-json": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/stream-chain": "*" - } - }, - "node_modules/@types/unicode-properties": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/urijs": { - "version": "1.19.25", - "license": "MIT" - }, - "node_modules/@types/vscode": { - "version": "1.88.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/wordwrap": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/wordwrap/-/wordwrap-1.0.3.tgz", - "integrity": "sha512-jx39cOYWJxZxVOZeNHvLVoDLRUFcYtIJaurC6C0qzCovIB3GPDbMDbYvoWi9D1B2PtIE16rElQOFR4Y+8QbUgw==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@vscode/test-cli": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mocha": "^10.0.2", - "c8": "^9.1.0", - "chokidar": "^3.5.3", - "enhanced-resolve": "^5.15.0", - "glob": "^10.3.10", - "minimatch": "^9.0.3", - "mocha": "^10.2.0", - "supports-color": "^9.4.0", - "yargs": "^17.7.2" - }, - "bin": { - "vscode-test": "out/bin.mjs" - } - }, - "node_modules/@vscode/test-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vscode/test-cli/node_modules/glob": { - "version": "10.3.12", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/test-cli/node_modules/minimatch": { - "version": "9.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/test-cli/node_modules/supports-color": { - "version": "9.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/@vscode/test-cli/node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@vscode/test-electron": { - "version": "2.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@vscode/vsce": { - "version": "2.25.0", - "dev": true, - "license": "MIT", - "dependencies": { - "azure-devops-node-api": "^12.5.0", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "cockatiel": "^3.1.2", - "commander": "^6.2.1", - "form-data": "^4.0.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "jsonc-parser": "^3.2.0", - "leven": "^3.1.0", - "markdown-it": "^12.3.2", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^7.5.2", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.5.0", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "bin": { - "vsce": "vsce" - }, - "engines": { - "node": ">= 16" - }, - "optionalDependencies": { - "keytar": "^7.7.0" - } - }, - "node_modules/@vscode/vsce/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vscode/vsce/node_modules/commander": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@whatwg-node/events": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", - "integrity": "sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==", - "dev": true - }, - "node_modules/@whatwg-node/fetch": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.8.tgz", - "integrity": "sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==", - "dev": true, - "dependencies": { - "@peculiar/webcrypto": "^1.4.0", - "@whatwg-node/node-fetch": "^0.3.6", - "busboy": "^1.6.0", - "urlpattern-polyfill": "^8.0.0", - "web-streams-polyfill": "^3.2.1" - } - }, - "node_modules/@whatwg-node/node-fetch": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz", - "integrity": "sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==", - "dev": true, - "dependencies": { - "@whatwg-node/events": "^0.0.3", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", - "tslib": "^2.3.1" - } - }, - "node_modules/@whatwg-node/node-fetch/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "5.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "license": "MIT" - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-back": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1js": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", - "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", - "dev": true, - "dependencies": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/asn1js/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true - }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/azure-devops-node-api": { - "version": "12.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brfs": { - "version": "1.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" - }, - "bin": { - "brfs": "bin/cmd.js" - } - }, - "node_modules/browser-or-node": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/c8": { - "version": "9.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=14.14.0" - } - }, - "node_modules/c8/node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001614", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", - "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk-template": { - "version": "0.4.0", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chance": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.11.tgz", - "integrity": "sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==", - "dev": true - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "dev": true, - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/cockatiel": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/collection-utils": { - "version": "1.0.1", - "license": "Apache-2.0" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^3.0.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "6.2.2", - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "7.1.1", - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js-pure": { - "version": "3.37.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.0.tgz", - "integrity": "sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", - "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/create-eslint-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/create-eslint-index/-/create-eslint-index-1.0.0.tgz", - "integrity": "sha512-nXvJjnfDytOOaPOonX0h0a1ggMoqrhdekGeZkD6hkcWYvlCWhU719tKFVh8eU04CnMwu3uwe1JjwuUF2C3k2qg==", - "dev": true, - "dependencies": { - "lodash.get": "^4.3.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dataloader": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", - "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-equal": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dset": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", - "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.751", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", - "integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/encoding": { - "version": "0.1.13", - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhance-visitors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", - "integrity": "sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==", - "dev": true, - "dependencies": { - "lodash": "^4.13.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/es-object-atoms": { + "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } + "license": "ISC" }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/esbuild": { - "version": "0.20.2", + "node_modules/braces": { + "version": "3.0.2", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" + "dependencies": { + "fill-range": "^7.0.1" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/brfs": { + "version": "1.6.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.9.1", - "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" }, "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "brfs": "bin/cmd.js" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } + "node_modules/browser-or-node": { + "version": "3.0.0", + "license": "MIT" }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", + "node_modules/browser-stdout": { + "version": "1.3.1", "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } + "license": "ISC" }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "dev": true, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", + "node_modules/buffer-crc32": { + "version": "0.2.13", "dev": true, "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "node": "*" } }, - "node_modules/eslint": { - "version": "8.57.0", + "node_modules/buffer-equal": { + "version": "0.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.4.0" } }, - "node_modules/eslint-ast-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", - "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/c8": { + "version": "9.1.0", "dev": true, + "license": "ISC", "dependencies": { - "lodash.get": "^4.4.2", - "lodash.zip": "^4.2.0" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" }, "engines": { - "node": ">=4" + "node": ">=14.14.0" } }, - "node_modules/eslint-compat-utils": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", - "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", + "node_modules/c8/node_modules/yargs": { + "version": "17.7.2", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.5.4" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-config-canonical": { - "version": "41.4.2", - "resolved": "https://registry.npmjs.org/eslint-config-canonical/-/eslint-config-canonical-41.4.2.tgz", - "integrity": "sha512-ayP7OPe7Mh0Vf1K8PXQshekyeM3dNcEVwoJAu5ozrZXftaY36NPaH57Oj1FcmMzr2gpc3WbjQ5frVqxnqjnKMg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.0", - "@babel/eslint-parser": "^7.22.15", - "@babel/eslint-plugin": "^7.22.10", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@graphql-eslint/eslint-plugin": "^3.20.1", - "@next/eslint-plugin-next": "^13.5.4", - "@rushstack/eslint-patch": "^1.5.1", - "@typescript-eslint/eslint-plugin": "^6.7.5", - "@typescript-eslint/parser": "^6.7.5", - "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-ava": "^14.0.0", - "eslint-plugin-canonical": "^4.14.0", - "eslint-plugin-cypress": "^2.15.1", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-fp": "^2.3.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jest": "^27.4.2", - "eslint-plugin-jsdoc": "^46.8.2", - "eslint-plugin-jsonc": "^2.10.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-lodash": "^7.4.0", - "eslint-plugin-mocha": "^10.2.0", - "eslint-plugin-modules-newline": "0.0.6", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-regexp": "^1.15.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-typescript-sort-keys": "^3.0.0", - "eslint-plugin-unicorn": "^48.0.1", - "eslint-plugin-vitest": "^0.3.2", - "eslint-plugin-yml": "^1.10.0", - "eslint-plugin-zod": "^1.4.0", - "prettier": "^3.0.3", - "ramda": "^0.29.1", - "yaml-eslint-parser": "^1.2.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "eslint": "^8.30.0" } }, - "node_modules/eslint-config-canonical/node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/call-bind": { + "version": "1.0.7", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-config-canonical/node_modules/eslint-plugin-canonical": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-4.18.0.tgz", - "integrity": "sha512-0Egc0FKOnCRdu3bFEJhfHkdkusIgW0UxdemukkowZQnQsnf12FHSJ7K26b+tZ5pKB7cTyECSaqvEpoIJfplX4g==", + "node_modules/callsites": { + "version": "3.1.0", "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^6.1.0", - "chance": "^1.1.11", - "debug": "^4.3.4", - "eslint-import-resolver-typescript": "^3.5.3", - "eslint-module-utils": "^2.7.4", - "is-get-set-prop": "^1.0.0", - "is-js-type": "^2.0.0", - "is-obj-prop": "^1.0.0", - "is-proto-prop": "^2.0.0", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "recast": "^0.23.2", - "roarr": "^7.14.2", - "ts-unused-exports": "^9.0.3", - "xregexp": "^5.1.1" - }, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=6" } }, - "node_modules/eslint-config-canonical/node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "node_modules/camelcase": { + "version": "6.3.0", "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" - }, + "license": "MIT", "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-canonical/node_modules/synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", - "dev": true, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-config-canonical/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, + "node_modules/chalk-template": { + "version": "0.4.0", + "license": "MIT", "dependencies": { - "get-stdin": "^6.0.0" + "chalk": "^4.1.2" }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "engines": { + "node": ">=12" }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">=7.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-ava": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-14.0.0.tgz", - "integrity": "sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw==", - "dev": true, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", "dependencies": { - "enhance-visitors": "^1.0.0", - "eslint-utils": "^3.0.0", - "espree": "^9.0.0", - "espurify": "^2.1.1", - "import-modules": "^2.1.0", - "micro-spelling-correcter": "^1.1.1", - "pkg-dir": "^5.0.0", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=14.17 <15 || >=16.4" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "eslint": ">=8.26.0" - } - }, - "node_modules/eslint-plugin-ava/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, "engines": { "node": ">=8" } }, - "node_modules/eslint-plugin-canonical": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-canonical/-/eslint-plugin-canonical-3.4.0.tgz", - "integrity": "sha512-akY2RpJD3VC2XXsU/02VsbzkHfybsZTsruOKPI7pJzQ+lZaS3UGM1H0vUKf0itXsbMHHJbIT78hUXU2d2HemZQ==", + "node_modules/cheerio": { + "version": "1.0.0-rc.12", "dev": true, + "license": "MIT", "dependencies": { - "is-get-set-prop": "^1.0.0", - "is-js-type": "^2.0.0", - "is-obj-prop": "^1.0.0", - "is-proto-prop": "^2.0.0", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "ts-unused-exports": "^9.0.3", - "xregexp": "^5.1.1" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/eslint-plugin-cypress": { - "version": "2.15.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", - "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", + "node_modules/cheerio-select": { + "version": "2.1.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "globals": "^13.20.0" + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" }, - "peerDependencies": { - "eslint": ">= 3.2.1" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/chokidar": { + "version": "3.6.0", "dev": true, + "license": "MIT", "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=8.10.0" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://paulmillr.com/funding/" }, - "peerDependencies": { - "eslint": ">=4.19.1" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/chownr": { + "version": "1.1.4", "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=12" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/co": { + "version": "4.6.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/eslint-plugin-eslint-comments": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", - "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "node_modules/cockatiel": { + "version": "3.1.2", "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - }, + "license": "MIT", "engines": { - "node": ">=6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "node": ">=16" + } + }, + "node_modules/collection-utils": { + "version": "1.0.1", + "license": "Apache-2.0" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" + "node": ">= 0.8" } }, - "node_modules/eslint-plugin-fp": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-fp/-/eslint-plugin-fp-2.3.0.tgz", - "integrity": "sha512-3n2oHibwoIxAht9/+ZaTldhI6brXORgl8oNXqZd+d9xuAQt2SBJ2/aml0oQRMWvXrgsz2WG6wfC++NjzSG3prA==", - "dev": true, + "node_modules/command-line-args": { + "version": "5.2.1", + "license": "MIT", "dependencies": { - "create-eslint-index": "^1.0.0", - "eslint-ast-utils": "^1.0.0", - "lodash": "^4.13.1", - "req-all": "^0.1.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, "engines": { "node": ">=4.0.0" - }, - "peerDependencies": { - "eslint": ">=3" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, + "node_modules/command-line-usage": { + "version": "7.0.1", + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^3.0.0", + "typical": "^7.1.1" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "node": ">=12.20.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "6.2.2", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "7.1.1", + "license": "MIT", + "engines": { + "node": ">=12.17" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/convert-source-map": { + "version": "2.0.0", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" } }, - "node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "node_modules/cross-spawn": { + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/css-select": { + "version": "5.1.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/css-what": { + "version": "6.1.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/debug": { + "version": "4.3.4", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ms": "2.1.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.0" }, "peerDependenciesMeta": { - "typescript": { + "supports-color": { "optional": true } } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/decamelize": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "node_modules/decompress-response": { + "version": "6.0.0", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jest/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/deep-equal": { + "version": "2.2.3", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^1.8.1" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "46.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", - "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", "dev": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.41.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.5.4", - "spdx-expression-parse": "^4.0.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } + "license": "MIT" }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/deep-extend": { + "version": "0.6.0", "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/eslint-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "node_modules/deep-is": { + "version": "0.1.4", "dev": true, - "dependencies": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - }, - "engines": { - "node": ">=12.0" - } + "license": "MIT" }, - "node_modules/eslint-plugin-jsonc": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.15.1.tgz", - "integrity": "sha512-PVFrqIJa8BbM/e828RSn0SwB/Z5ye+2LDuy2XqG6AymNgPsfApRRcznsbxP7VrjdLEU4Nb+g9n/d6opyp0jp9A==", + "node_modules/define-data-property": { + "version": "1.1.4", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "eslint-compat-utils": "^0.5.0", - "espree": "^9.6.1", - "graphemer": "^1.4.0", - "jsonc-eslint-parser": "^2.0.4", - "natural-compare": "^1.4.0", - "synckit": "^0.6.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/eslint-plugin-lodash": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz", - "integrity": "sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A==", + "node_modules/detect-libc": { + "version": "2.0.3", "dev": true, - "dependencies": { - "lodash": "^4.17.21" - }, + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": ">=2" + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" } }, - "node_modules/eslint-plugin-mocha": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz", - "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "eslint-utils": "^3.0.0", - "globals": "^13.24.0", - "rambda": "^7.4.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-modules-newline": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-modules-newline/-/eslint-plugin-modules-newline-0.0.6.tgz", - "integrity": "sha512-69NpBr68U6pmXL+y+KHl/64PwRarceC3/sCNUVxRbe0gPI32SIw8AtdpkqNiJYCa2yMd4lRrkrnU09Yio7KVzA==", + "node_modules/doctrine": { + "version": "3.0.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "requireindex": "~1.1.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/dom-serializer": { + "version": "2.0.0", "dev": true, + "license": "MIT", "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, - "peerDependencies": { - "eslint": ">=5.16.0" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=6" + "node": ">= 4" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/domutils": { + "version": "3.1.0", "dev": true, - "engines": { - "node": ">=4" + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/duplexer2": { + "version": "0.1.4", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, + "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "node_modules/eastasianwidth": { + "version": "0.2.0", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } + "license": "MIT" }, - "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", - "dev": true, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "iconv-lite": "^0.6.2" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "node_modules/end-of-stream": { + "version": "1.4.4", "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/enhanced-resolve": { + "version": "5.16.0", "dev": true, + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "node_modules/entities": { + "version": "4.5.0", "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/eslint-plugin-regexp": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz", - "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==", + "node_modules/es-define-property": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "comment-parser": "^1.1.2", - "grapheme-splitter": "^1.0.4", - "jsdoctypeparser": "^9.0.0", - "refa": "^0.11.0", - "regexp-ast-analysis": "^0.6.0", - "scslre": "^0.2.0" + "get-intrinsic": "^1.2.4" }, "engines": { - "node": "^12 || >=14" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "node": ">= 0.4" } }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "node_modules/es-errors": { + "version": "1.3.0", "dev": true, - "peerDependencies": { - "eslint": ">=5.0.0" + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "node_modules/eslint-plugin-typescript-sort-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-typescript-sort-keys/-/eslint-plugin-typescript-sort-keys-3.2.0.tgz", - "integrity": "sha512-GutszvriaVtwmn7pQjuj9/9o0iXhD7XZs0/424+zsozdRr/fdg5e8206t478Vnqnqi1GjuxcAolj1kf74KnhPA==", + "node_modules/es-get-iterator": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0", - "json-schema": "^0.4.0", - "natural-compare-lite": "^1.4.0" - }, - "engines": { - "node": ">= 16" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, - "peerDependencies": { - "@typescript-eslint/parser": "^6 || ^7", - "eslint": "^7 || ^8", - "typescript": "^3 || ^4 || ^5" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-unicorn": { - "version": "48.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz", - "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==", + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", - "clean-regexp": "^1.0.0", - "esquery": "^1.5.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.2.1", - "jsesc": "^3.0.2", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.10.0", - "semver": "^7.5.4", - "strip-indent": "^3.0.0" + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.20.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + "node": ">=12" }, - "peerDependencies": { - "eslint": ">=8.44.0" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, - "node_modules/eslint-plugin-unicorn/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/eslint-plugin-unicorn/node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.8.0" } }, - "node_modules/eslint-plugin-vitest": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.26.tgz", - "integrity": "sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg==", + "node_modules/escodegen": { + "version": "1.9.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/utils": "^7.1.1" - }, - "engines": { - "node": "^18.0.0 || >= 20.0.0" - }, - "peerDependencies": { - "eslint": ">=8.0.0", - "vitest": "*" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=4.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=4.0" } }, - "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 0.8.0" } }, - "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "node": ">= 0.8.0" } }, - "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "eslint-visitor-keys": "^3.4.3" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-vitest/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node": ">= 0.8.0" } }, - "node_modules/eslint-plugin-vitest/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.8.0" } }, - "node_modules/eslint-plugin-yml": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.14.0.tgz", - "integrity": "sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==", + "node_modules/eslint": { + "version": "8.57.0", "dev": true, + "license": "MIT", "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "eslint-compat-utils": "^0.5.0", - "lodash": "^4.17.21", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "yaml-eslint-parser": "^1.2.1" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" + "bin": { + "eslint": "bin/eslint.js" }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-zod": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-zod/-/eslint-plugin-zod-1.4.0.tgz", - "integrity": "sha512-i9WzQGw2X5fQcuQh33mA8DQjZJM/yuyZvs1Fc5EyTidX7Ed/g832+1FEQ4u5gtXy+jZ+DVsB5+oMHj4tIOfeZg==", - "dev": true, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "eslint": ">=8.1.0" - } - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-scope": { @@ -5208,33 +2419,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "dev": true, @@ -5337,12 +2521,6 @@ "node": ">=4" } }, - "node_modules/espurify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", - "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", - "dev": true - }, "node_modules/esquery": { "version": "1.5.0", "dev": true, @@ -5418,18 +2596,6 @@ "node": ">=6" } }, - "node_modules/extract-files": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", - "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", - "dev": true, - "engines": { - "node": "^12.20 || >= 14.13" - }, - "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, "node_modules/falafel": { "version": "2.2.5", "dev": true, @@ -5455,26 +2621,14 @@ }, "node_modules/falafel/node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-decode-uri-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "1.1.0", "dev": true, "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -5501,42 +2655,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-printf": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", - "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", - "dev": true, - "dependencies": { - "boolean": "^3.1.4" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/fast-querystring": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", - "dev": true, - "dependencies": { - "fast-decode-uri-component": "^1.0.1" - } - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dev": true, - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, "node_modules/fastq": { "version": "1.17.1", "dev": true, @@ -5680,24 +2798,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/functions-have-names": { "version": "1.2.3", "dev": true, @@ -5706,15 +2806,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "license": "ISC", @@ -5740,53 +2831,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-set-props": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", - "integrity": "sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", - "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "dev": true, @@ -5836,22 +2880,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -5884,405 +2912,20 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/graphql": { - "version": "0.11.7", - "license": "MIT", - "dependencies": { - "iterall": "1.1.3" - } - }, - "node_modules/graphql-config": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.5.0.tgz", - "integrity": "sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==", - "dev": true, - "dependencies": { - "@graphql-tools/graphql-file-loader": "^7.3.7", - "@graphql-tools/json-file-loader": "^7.3.7", - "@graphql-tools/load": "^7.5.5", - "@graphql-tools/merge": "^8.2.6", - "@graphql-tools/url-loader": "^7.9.7", - "@graphql-tools/utils": "^9.0.0", - "cosmiconfig": "8.0.0", - "jiti": "1.17.1", - "minimatch": "4.2.3", - "string-env-interpolation": "1.0.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "cosmiconfig-toml-loader": "^1.0.0", - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - }, - "peerDependenciesMeta": { - "cosmiconfig-toml-loader": { - "optional": true - } - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/graphql-file-loader": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.17.tgz", - "integrity": "sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==", - "dev": true, - "dependencies": { - "@graphql-tools/import": "6.7.18", - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/graphql-file-loader/node_modules/@graphql-tools/import": { - "version": "6.7.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.18.tgz", - "integrity": "sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "resolve-from": "5.0.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/json-file-loader": { - "version": "7.4.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.18.tgz", - "integrity": "sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/load": { - "version": "7.8.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.14.tgz", - "integrity": "sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==", - "dev": true, - "dependencies": { - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "p-limit": "3.1.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/load/node_modules/@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "dev": true, - "dependencies": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/merge": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", - "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader": { - "version": "7.17.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz", - "integrity": "sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==", - "dev": true, - "dependencies": { - "@ardatan/sync-fetch": "^0.0.1", - "@graphql-tools/delegate": "^9.0.31", - "@graphql-tools/executor-graphql-ws": "^0.0.14", - "@graphql-tools/executor-http": "^0.1.7", - "@graphql-tools/executor-legacy-ws": "^0.0.11", - "@graphql-tools/utils": "^9.2.1", - "@graphql-tools/wrap": "^9.4.2", - "@types/ws": "^8.0.0", - "@whatwg-node/fetch": "^0.8.0", - "isomorphic-ws": "^5.0.0", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.11", - "ws": "^8.12.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate": { - "version": "9.0.35", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.35.tgz", - "integrity": "sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==", - "dev": true, - "dependencies": { - "@graphql-tools/batch-execute": "^8.5.22", - "@graphql-tools/executor": "^0.0.20", - "@graphql-tools/schema": "^9.0.19", - "@graphql-tools/utils": "^9.2.1", - "dataloader": "^2.2.2", - "tslib": "^2.5.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/batch-execute": { - "version": "8.5.22", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz", - "integrity": "sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "dataloader": "^2.2.2", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/executor": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.20.tgz", - "integrity": "sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "@graphql-typed-document-node/core": "3.2.0", - "@repeaterjs/repeater": "^3.0.4", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/delegate/node_modules/@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "dev": true, - "dependencies": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/executor-graphql-ws": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.14.tgz", - "integrity": "sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "@repeaterjs/repeater": "3.0.4", - "@types/ws": "^8.0.0", - "graphql-ws": "5.12.1", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.13.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/executor-http": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.1.10.tgz", - "integrity": "sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "@repeaterjs/repeater": "^3.0.4", - "@whatwg-node/fetch": "^0.8.1", - "dset": "^3.1.2", - "extract-files": "^11.0.0", - "meros": "^1.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/executor-legacy-ws": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.11.tgz", - "integrity": "sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "@types/ws": "^8.0.0", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.13.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/wrap": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.4.2.tgz", - "integrity": "sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==", - "dev": true, - "dependencies": { - "@graphql-tools/delegate": "^9.0.31", - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/url-loader/node_modules/@graphql-tools/wrap/node_modules/@graphql-tools/schema": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", - "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", - "dev": true, - "dependencies": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dev": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/graphql-config/node_modules/minimatch": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", - "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/graphql-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/graphql-config/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/graphql-config/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/graphql-depth-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz", - "integrity": "sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "graphql": "*" - } + "version": "4.2.11", + "dev": true, + "license": "ISC" }, - "node_modules/graphql-ws": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.12.1.tgz", - "integrity": "sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==", + "node_modules/graphemer": { + "version": "1.4.0", "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": ">=0.11 <=16" + "license": "MIT" + }, + "node_modules/graphql": { + "version": "0.11.7", + "license": "MIT", + "dependencies": { + "iterall": "1.1.3" } }, "node_modules/has": { @@ -6494,18 +3137,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-modules": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", - "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "dev": true, @@ -6514,15 +3145,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "license": "ISC", @@ -6591,27 +3213,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-bigint": { "version": "1.0.4", "dev": true, @@ -6649,33 +3250,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-builtin-module/node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-callable": { "version": "1.2.7", "dev": true, @@ -6699,21 +3273,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "dev": true, @@ -6736,18 +3295,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "license": "MIT", @@ -6755,31 +3302,6 @@ "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-get-set-prop": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", - "integrity": "sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==", - "dev": true, - "dependencies": { - "get-set-props": "^0.1.0", - "lowercase-keys": "^1.0.0" - } - }, "node_modules/is-glob": { "version": "4.0.3", "dev": true, @@ -6791,15 +3313,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-js-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", - "integrity": "sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==", - "dev": true, - "dependencies": { - "js-types": "^1.0.0" - } - }, "node_modules/is-map": { "version": "2.0.2", "dev": true, @@ -6808,18 +3321,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "dev": true, @@ -6842,16 +3343,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj-prop": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", - "integrity": "sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w==", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0", - "obj-props": "^1.0.0" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "dev": true, @@ -6868,16 +3359,6 @@ "node": ">=8" } }, - "node_modules/is-proto-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", - "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0", - "proto-props": "^2.0.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", "dev": true, @@ -6951,21 +3432,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "dev": true, @@ -6989,18 +3455,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-weakset": { "version": "2.0.2", "dev": true, @@ -7022,15 +3476,6 @@ "dev": true, "license": "ISC" }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "dev": true, - "peerDependencies": { - "ws": "*" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "dev": true, @@ -7087,19 +3532,6 @@ "version": "1.1.3", "license": "MIT" }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, "node_modules/jackspeak": { "version": "2.3.6", "dev": true, @@ -7117,84 +3549,15 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jiti": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.1.tgz", - "integrity": "sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, "node_modules/js-base64": { "version": "3.7.7", "license": "BSD-3-Clause" }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", - "integrity": "sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoctypeparser": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", - "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", - "dev": true, - "bin": { - "jsdoctypeparser": "bin/jsdoctypeparser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "dev": true, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.3.1", "dev": true, @@ -7205,56 +3568,11 @@ "dev": true, "license": "MIT" }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-eslint-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", - "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", - "dev": true, - "dependencies": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, "node_modules/jsonc-parser": { "version": "3.2.1", "dev": true, "license": "MIT" }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, "node_modules/jszip": { "version": "3.10.1", "dev": true, @@ -7299,24 +3617,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/leven": { "version": "3.1.0", "dev": true, @@ -7345,12 +3645,6 @@ "immediate": "~3.0.5" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "node_modules/linkify-it": { "version": "3.0.3", "dev": true, @@ -7385,29 +3679,11 @@ "version": "4.3.0", "license": "MIT" }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "node_modules/lodash.lowercase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz", - "integrity": "sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "dev": true, "license": "MIT" }, - "node_modules/lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true - }, "node_modules/log-symbols": { "version": "4.1.0", "dev": true, @@ -7420,28 +3696,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lru-cache": { @@ -7544,29 +3799,6 @@ "node": ">= 8" } }, - "node_modules/meros": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", - "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", - "dev": true, - "engines": { - "node": ">=13" - }, - "peerDependencies": { - "@types/node": ">=13" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/micro-spelling-correcter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", - "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", - "dev": true - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -7622,15 +3854,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "license": "ISC", @@ -7885,12 +4108,6 @@ "dev": true, "license": "MIT" }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/node-abi": { "version": "3.57.0", "dev": true, @@ -7935,39 +4152,6 @@ "node": ">=10.12.0" } }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "dev": true, @@ -7987,24 +4171,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/obj-props": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.4.0.tgz", - "integrity": "sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "dev": true, @@ -8054,86 +4220,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "license": "ISC", @@ -8185,15 +4271,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/pako": { "version": "1.0.6", "license": "(MIT AND Zlib)" @@ -8209,24 +4286,6 @@ "node": ">=6" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parse-semver": { "version": "1.1.1", "dev": true, @@ -8335,12 +4394,6 @@ "dev": true, "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "node_modules/picomatch": { "version": "2.3.1", "dev": true, @@ -8352,18 +4405,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/pluralize": { "version": "7.0.0", "license": "MIT", @@ -8413,32 +4454,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prettier": { - "version": "3.2.5", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/process": { "version": "0.11.10", "license": "MIT", @@ -8455,26 +4470,6 @@ "dev": true, "license": "MIT" }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/proto-props": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", - "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/pump": { "version": "3.0.0", "dev": true, @@ -8493,30 +4488,6 @@ "node": ">=6" } }, - "node_modules/pvtsutils": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", - "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", - "dev": true, - "dependencies": { - "tslib": "^2.6.1" - } - }, - "node_modules/pvtsutils/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/qs": { "version": "6.12.1", "dev": true, @@ -8579,22 +4550,6 @@ "quote-stream": "bin/cmd.js" } }, - "node_modules/rambda": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", - "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", - "dev": true - }, - "node_modules/ramda": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", - "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, "node_modules/randombytes": { "version": "2.1.0", "dev": true, @@ -8622,128 +4577,20 @@ "version": "2.0.1", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/read": { - "version": "1.0.7", - "dev": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, + "optional": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/read": { + "version": "1.0.7", "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, "engines": { - "node": ">=8" + "node": ">=0.8" } }, "node_modules/readable-stream": { @@ -8796,41 +4643,6 @@ "node": ">=8.10.0" } }, - "node_modules/recast": { - "version": "0.23.6", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz", - "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==", - "dev": true, - "dependencies": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/recast/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/rechoir": { "version": "0.6.2", "dev": true, @@ -8841,67 +4653,6 @@ "node": ">= 0.10" } }, - "node_modules/refa": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz", - "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.0" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "node_modules/regexp-ast-analysis": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz", - "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.0", - "refa": "^0.11.0" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/regexp-tree": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", - "dev": true, - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "dev": true, @@ -8919,54 +4670,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regjsparser": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", - "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/req-all": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/req-all/-/req-all-0.1.0.tgz", - "integrity": "sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/require-directory": { "version": "2.1.1", "license": "MIT", @@ -8974,15 +4677,6 @@ "node": ">=0.10.0" } }, - "node_modules/requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -9008,15 +4702,6 @@ "node": ">=4" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, "node_modules/reusify": { "version": "1.0.4", "dev": true, @@ -9040,20 +4725,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/roarr": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.1.tgz", - "integrity": "sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==", - "dev": true, - "dependencies": { - "fast-printf": "^1.6.9", - "safe-stable-stringify": "^2.4.3", - "semver-compare": "^1.0.0" - }, - "engines": { - "node": ">=18.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "dev": true, @@ -9076,51 +4747,10 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/safe-buffer": { "version": "5.1.2", "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-stable-stringify": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", @@ -9138,17 +4768,6 @@ "dev": true, "license": "ISC" }, - "node_modules/scslre": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz", - "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.0", - "refa": "^0.11.0", - "regexp-ast-analysis": "^0.6.0" - } - }, "node_modules/semver": { "version": "7.6.0", "dev": true, @@ -9163,12 +4782,6 @@ "node": ">=10" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, "node_modules/serialize-javascript": { "version": "6.0.0", "dev": true, @@ -9338,52 +4951,11 @@ "version": "0.6.1", "dev": true, "license": "BSD-3-Clause", + "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true - }, "node_modules/static-eval": { "version": "2.1.1", "dev": true, @@ -9498,15 +5070,6 @@ "node": ">=10" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "license": "MIT", @@ -9514,18 +5077,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/string-env-interpolation": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", - "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", - "dev": true - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, "node_modules/string-to-stream": { "version": "3.0.1", "license": "MIT", @@ -9571,81 +5122,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", @@ -9668,27 +5144,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "dev": true, @@ -9717,30 +5172,12 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.6.2.tgz", - "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=12.20" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/table-layout": { "version": "3.0.2", "license": "MIT", @@ -9869,12 +5306,6 @@ "version": "1.0.2", "license": "MIT" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true - }, "node_modules/tmp": { "version": "0.2.3", "dev": true, @@ -9883,15 +5314,6 @@ "node": ">=14.14" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "dev": true, @@ -9959,59 +5381,6 @@ } } }, - "node_modules/ts-unused-exports": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ts-unused-exports/-/ts-unused-exports-9.0.5.tgz", - "integrity": "sha512-1XAXaH2i4Al/aZO06pWDn9MUgTN0KQi+fvWudiWfHUTHAav45gzrx7Xq6JAsu6+LoMlVoyGvNvZSPW3KTjDncA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "tsconfig-paths": "^3.9.0" - }, - "bin": { - "ts-unused-exports": "bin/ts-unused-exports" - }, - "funding": { - "url": "https://github.com/pzavolinsky/ts-unused-exports?sponsor=1" - }, - "peerDependencies": { - "typescript": ">=3.8.3" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": false - } - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, "node_modules/tunnel": { "version": "0.0.6", "dev": true, @@ -10054,79 +5423,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typed-rest-client": { "version": "1.8.11", "dev": true, @@ -10143,14 +5439,16 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "4.9.5", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typical": { @@ -10165,21 +5463,6 @@ "dev": true, "license": "MIT" }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/underscore": { "version": "1.13.6", "dev": true, @@ -10223,60 +5506,6 @@ "dev": true, "license": "MIT" }, - "node_modules/unixify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", - "dev": true, - "dependencies": { - "normalize-path": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unixify/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "dev": true, @@ -10294,12 +5523,6 @@ "dev": true, "license": "MIT" }, - "node_modules/urlpattern-polyfill": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", - "dev": true - }, "node_modules/util-deprecate": { "version": "1.0.2", "license": "MIT" @@ -10330,77 +5553,11 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/vlq": { "version": "0.2.3", "dev": true, "license": "MIT" }, - "node_modules/vscode-json-languageservice": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true - }, - "node_modules/vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true - }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true - }, "node_modules/watch": { "version": "1.0.2", "dev": true, @@ -10416,34 +5573,6 @@ "node": ">=0.1.95" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/webcrypto-core": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.9.tgz", - "integrity": "sha512-FE+a4PPkOmBbgNDIyRmcHhgXn+2ClRl3JzJdDu/P4+B8y81LqKe6RAsI9b3lAOHe1T1BMkSjsRHTYRikImZnVA==", - "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" - } - }, - "node_modules/webcrypto-core/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/webidl-conversions": { "version": "3.0.1", "license": "BSD-2-Clause" @@ -10489,38 +5618,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/which-collection": { "version": "1.0.1", "dev": true, @@ -10661,28 +5758,6 @@ "version": "1.0.2", "license": "ISC" }, - "node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xml2js": { "version": "0.5.0", "dev": true, @@ -10703,15 +5778,6 @@ "node": ">=4.0" } }, - "node_modules/xregexp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", - "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs3": "^7.16.5" - } - }, "node_modules/xtend": { "version": "4.0.2", "dev": true, @@ -10742,23 +5808,6 @@ "node": ">= 14" } }, - "node_modules/yaml-eslint-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", - "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "lodash": "^4.17.21", - "yaml": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, "node_modules/yargs": { "version": "17.6.2", "license": "MIT", @@ -10860,7 +5909,7 @@ "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.25", "@types/wordwrap": "^1.0.3", - "typescript": "4.9.5" + "typescript": "~5.8.3" } }, "packages/quicktype-core/node_modules/pluralize": { @@ -10881,7 +5930,7 @@ "devDependencies": { "@types/graphql": "^0.11.7", "@types/node": "18.19.31", - "typescript": "4.9.5" + "typescript": "~5.8.3" } }, "packages/quicktype-typescript-input": { @@ -10958,6 +6007,19 @@ "util-deprecate": "~1.0.1" } }, + "packages/quicktype-typescript-input/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "packages/quicktype-typescript-input/node_modules/yaml": { "version": "1.10.2", "license": "ISC", @@ -10983,7 +6045,7 @@ "node-persist": "^4.0.1", "quicktype-core": "file:../quicktype-core", "quicktype-typescript-input": "file:../quicktype-typescript-input", - "typescript": "^5.3.3", + "typescript": "~5.8.3", "unicode-properties": "github:quicktype/unicode-properties#dist" }, "engines": { @@ -11204,18 +6266,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/quicktype-vscode/node_modules/typescript": { - "version": "5.4.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "packages/quicktype-vscode/node_modules/unicode-properties": { "version": "1.1.0", "resolved": "git+ssh://git@github.com/quicktype/unicode-properties.git#d5fddfea1ef9d05c6479a979e225476063e13f52", diff --git a/package.json b/package.json index c3bf3c397..7f2c3bc82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "quicktype", - "version": "23.1.0", + "version": "23.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -40,9 +40,10 @@ "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", - "typescript": "4.9.5" + "typescript": "~5.8.3" }, "devDependencies": { + "@biomejs/biome": "^1.9.4", "@tsconfig/node18": "^1.0.1", "@types/command-line-args": "^5.2.0", "@types/command-line-usage": "^5.0.4", @@ -58,24 +59,13 @@ "ajv": "^5.5.2", "deep-equal": "^2.2.3", "esbuild": "^0.20.2", - "eslint": "^8.57.0", - "eslint-config-canonical": "^41.1.7", - "eslint-config-prettier": "^6.10.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-canonical": "^3.4.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-json": "^3.1.0", - "eslint-plugin-prettier": "^4.2.1", "exit": "^0.1.2", - "prettier": "^3.2.5", "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", "ts-node": "^10.9.2", "watch": "^1.0.2" }, - "files": [ - "dist" - ], + "files": ["dist"], "bin": "dist/index.js" } diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 580100e8d..6a66b53d5 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -36,11 +36,9 @@ "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.25", "@types/wordwrap": "^1.0.3", - "typescript": "4.9.5" + "typescript": "~5.8.3" }, - "files": [ - "dist" - ], + "files": ["dist"], "browser": { "fs": false } diff --git a/packages/quicktype-core/src/Annotation.ts b/packages/quicktype-core/src/Annotation.ts index 1b3a937bf..61431cde0 100644 --- a/packages/quicktype-core/src/Annotation.ts +++ b/packages/quicktype-core/src/Annotation.ts @@ -8,8 +8,8 @@ export class IssueAnnotationData extends AnnotationData { } export const anyTypeIssueAnnotation = new IssueAnnotationData( - "quicktype cannot infer this type because there is no data about it in the input." + "quicktype cannot infer this type because there is no data about it in the input.", ); export const nullTypeIssueAnnotation = new IssueAnnotationData( - "The only value for this in the input is null, which means you probably need a more complete input sample." + "The only value for this in the input is null, which means you probably need a more complete input sample.", ); diff --git a/packages/quicktype-core/src/ConvenienceRenderer.ts b/packages/quicktype-core/src/ConvenienceRenderer.ts index ff4797ffa..41ae7e4dd 100644 --- a/packages/quicktype-core/src/ConvenienceRenderer.ts +++ b/packages/quicktype-core/src/ConvenienceRenderer.ts @@ -6,22 +6,60 @@ import { mapSome, mapSortBy, setFilter, - setUnion + setUnion, } from "collection-utils"; import _wordwrap from "wordwrap"; -import { enumCaseNames, getAccessorName, objectPropertyNames, unionMemberName } from "./attributes/AccessorNames"; -import { descriptionTypeAttributeKind, propertyDescriptionsTypeAttributeKind } from "./attributes/Description"; +import { + enumCaseNames, + getAccessorName, + objectPropertyNames, + unionMemberName, +} from "./attributes/AccessorNames"; +import { + descriptionTypeAttributeKind, + propertyDescriptionsTypeAttributeKind, +} from "./attributes/Description"; import { TypeAttributeKind } from "./attributes/TypeAttributes"; -import { type Declaration, type DeclarationIR, cycleBreakerTypesForGraph, declarationsForGraph } from "./DeclarationIR"; -import { DependencyName, FixedName, type Name, type Namer, Namespace, SimpleName, keywordNamespace } from "./Naming"; -import { type BlankLineConfig, type ForEachPosition, type RenderContext, Renderer } from "./Renderer"; -import { type Sourcelike, serializeRenderResult, sourcelikeToSource } from "./Source"; -import { type Comment, type CommentOptions, isStringComment } from "./support/Comments"; +import { + type Declaration, + type DeclarationIR, + cycleBreakerTypesForGraph, + declarationsForGraph, +} from "./DeclarationIR"; +import { + DependencyName, + FixedName, + type Name, + type Namer, + Namespace, + SimpleName, + keywordNamespace, +} from "./Naming"; +import { + type BlankLineConfig, + type ForEachPosition, + type RenderContext, + Renderer, +} from "./Renderer"; +import { + type Sourcelike, + serializeRenderResult, + sourcelikeToSource, +} from "./Source"; +import { + type Comment, + type CommentOptions, + isStringComment, +} from "./support/Comments"; import { trimEnd } from "./support/Strings"; import { assert, defined, nonNull, panic } from "./support/Support"; -import { type TargetLanguage } from "./TargetLanguage"; -import { type Transformation, followTargetType, transformationForType } from "./Transformers"; +import type { TargetLanguage } from "./TargetLanguage"; +import { + type Transformation, + followTargetType, + transformationForType, +} from "./Transformers"; import { type ClassProperty, ClassType, @@ -30,10 +68,15 @@ import { ObjectType, type Type, type TypeKind, - UnionType + UnionType, } from "./Type"; import { TypeAttributeStoreView } from "./Type/TypeGraph"; -import { isNamedType, matchTypeExhaustive, nullableFromUnion, separateNamedTypes } from "./Type/TypeUtils"; +import { + isNamedType, + matchTypeExhaustive, + nullableFromUnion, + separateNamedTypes, +} from "./Type/TypeUtils"; const wordWrap: (s: string) => string = _wordwrap(90); @@ -50,13 +93,15 @@ const assignedEnumCaseNameOrder = 10; const unionMemberNameOrder = 40; -function splitDescription(descriptions: Iterable | undefined): string[] | undefined { +function splitDescription( + descriptions: Iterable | undefined, +): string[] | undefined { if (descriptions === undefined) return undefined; const description = Array.from(descriptions).join("\n\n").trim(); if (description === "") return undefined; return wordWrap(description) .split("\n") - .map(l => l.trim()); + .map((l) => l.trim()); } export interface ForbiddenWordsInfo { @@ -65,9 +110,15 @@ export interface ForbiddenWordsInfo { } const assignedNameAttributeKind = new TypeAttributeKind("assignedName"); -const assignedPropertyNamesAttributeKind = new TypeAttributeKind>("assignedPropertyNames"); -const assignedMemberNamesAttributeKind = new TypeAttributeKind>("assignedMemberNames"); -const assignedCaseNamesAttributeKind = new TypeAttributeKind>("assignedCaseNames"); +const assignedPropertyNamesAttributeKind = new TypeAttributeKind< + ReadonlyMap +>("assignedPropertyNames"); +const assignedMemberNamesAttributeKind = new TypeAttributeKind< + ReadonlyMap +>("assignedMemberNames"); +const assignedCaseNamesAttributeKind = new TypeAttributeKind< + ReadonlyMap +>("assignedCaseNames"); export abstract class ConvenienceRenderer extends Renderer { private _globalForbiddenNamespace: Namespace | undefined; @@ -78,11 +129,17 @@ export abstract class ConvenienceRenderer extends Renderer { private _nameStoreView: TypeAttributeStoreView | undefined; - private _propertyNamesStoreView: TypeAttributeStoreView> | undefined; + private _propertyNamesStoreView: + | TypeAttributeStoreView> + | undefined; - private _memberNamesStoreView: TypeAttributeStoreView> | undefined; + private _memberNamesStoreView: + | TypeAttributeStoreView> + | undefined; - private _caseNamesStoreView: TypeAttributeStoreView> | undefined; + private _caseNamesStoreView: + | TypeAttributeStoreView> + | undefined; private _namesForTransformations: Map | undefined; @@ -114,7 +171,10 @@ export abstract class ConvenienceRenderer extends Renderer { private _alphabetizeProperties = false; - public constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + ) { super(targetLanguage, renderContext); } @@ -143,33 +203,54 @@ export abstract class ConvenienceRenderer extends Renderer { * Note: That doesn't mean that the names in the global namespace will be * forbidden, too! */ - protected forbiddenForObjectProperties(_o: ObjectType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _o: ObjectType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } - protected makeTopLevelDependencyNames(_t: Type, _topLevelName: Name): DependencyName[] { + protected makeTopLevelDependencyNames( + _t: Type, + _topLevelName: Name, + ): DependencyName[] { return []; } - protected makeNamedTypeDependencyNames(_t: Type, _name: Name): DependencyName[] { + protected makeNamedTypeDependencyNames( + _t: Type, + _name: Name, + ): DependencyName[] { return []; } protected abstract makeNamedTypeNamer(): Namer; - protected abstract namerForObjectProperty(o: ObjectType, p: ClassProperty): Namer | null; + protected abstract namerForObjectProperty( + o: ObjectType, + p: ClassProperty, + ): Namer | null; protected abstract makeUnionMemberNamer(): Namer | null; protected abstract makeEnumCaseNamer(): Namer | null; protected abstract emitSourceStructure(givenOutputFilename: string): void; - protected makeNameForTransformation(_xf: Transformation, _typeName: Name | undefined): Name | undefined { + protected makeNameForTransformation( + _xf: Transformation, + _typeName: Name | undefined, + ): Name | undefined { return undefined; } @@ -194,7 +275,9 @@ export abstract class ConvenienceRenderer extends Renderer { } protected canBeForwardDeclared(_t: Type): boolean { - return panic("If needsTypeDeclarationBeforeUse returns true, canBeForwardDeclared must be implemented"); + return panic( + "If needsTypeDeclarationBeforeUse returns true, canBeForwardDeclared must be implemented", + ); } protected unionNeedsName(u: UnionType): boolean { @@ -210,29 +293,41 @@ export abstract class ConvenienceRenderer extends Renderer { } protected descriptionForType(t: Type): string[] | undefined { - let description = this.typeGraph.attributeStore.tryGet(descriptionTypeAttributeKind, t); + const description = this.typeGraph.attributeStore.tryGet( + descriptionTypeAttributeKind, + t, + ); return splitDescription(description); } - protected descriptionForClassProperty(o: ObjectType, name: string): string[] | undefined { - const descriptions = this.typeGraph.attributeStore.tryGet(propertyDescriptionsTypeAttributeKind, o); + protected descriptionForClassProperty( + o: ObjectType, + name: string, + ): string[] | undefined { + const descriptions = this.typeGraph.attributeStore.tryGet( + propertyDescriptionsTypeAttributeKind, + o, + ); if (descriptions === undefined) return undefined; return splitDescription(descriptions.get(name)); } protected setUpNaming(): ReadonlySet { - this._nameStoreView = new TypeAttributeStoreView(this.typeGraph.attributeStore, assignedNameAttributeKind); + this._nameStoreView = new TypeAttributeStoreView( + this.typeGraph.attributeStore, + assignedNameAttributeKind, + ); this._propertyNamesStoreView = new TypeAttributeStoreView( this.typeGraph.attributeStore, - assignedPropertyNamesAttributeKind + assignedPropertyNamesAttributeKind, ); this._memberNamesStoreView = new TypeAttributeStoreView( this.typeGraph.attributeStore, - assignedMemberNamesAttributeKind + assignedMemberNamesAttributeKind, ); this._caseNamesStoreView = new TypeAttributeStoreView( this.typeGraph.attributeStore, - assignedCaseNamesAttributeKind + assignedCaseNamesAttributeKind, ); this._namesForTransformations = new Map(); @@ -240,13 +335,25 @@ export abstract class ConvenienceRenderer extends Renderer { this._unionMemberNamer = this.makeUnionMemberNamer(); this._enumCaseNamer = this.makeEnumCaseNamer(); - this._globalForbiddenNamespace = keywordNamespace("forbidden", this.forbiddenNamesForGlobalNamespace()); + this._globalForbiddenNamespace = keywordNamespace( + "forbidden", + this.forbiddenNamesForGlobalNamespace(), + ); this._otherForbiddenNamespaces = new Map(); - this._globalNamespace = new Namespace("global", undefined, [this._globalForbiddenNamespace], []); - const { objects, enums, unions } = this.typeGraph.allNamedTypesSeparated(); - const namedUnions = setFilter(unions, u => this.unionNeedsName(u)); + this._globalNamespace = new Namespace( + "global", + undefined, + [this._globalForbiddenNamespace], + [], + ); + const { objects, enums, unions } = + this.typeGraph.allNamedTypesSeparated(); + const namedUnions = setFilter(unions, (u) => this.unionNeedsName(u)); for (const [name, t] of this.topLevels) { - this.nameStoreView.setForTopLevel(name, this.addNameForTopLevel(t, name)); + this.nameStoreView.setForTopLevel( + name, + this.addNameForTopLevel(t, name), + ); } for (const o of objects) { @@ -270,7 +377,7 @@ export abstract class ConvenienceRenderer extends Renderer { return setUnion( [this._globalForbiddenNamespace, this._globalNamespace], - this._otherForbiddenNamespaces.values() + this._otherForbiddenNamespaces.values(), ); } @@ -281,8 +388,16 @@ export abstract class ConvenienceRenderer extends Renderer { } } - protected makeNameForTopLevel(_t: Type, givenName: string, _maybeNamedType: Type | undefined): Name { - return new SimpleName([givenName], defined(this._namedTypeNamer), topLevelNameOrder); + protected makeNameForTopLevel( + _t: Type, + givenName: string, + _maybeNamedType: Type | undefined, + ): Name { + return new SimpleName( + [givenName], + defined(this._namedTypeNamer), + topLevelNameOrder, + ); } private addNameForTopLevel(type: Type, givenName: string): Name { @@ -302,14 +417,24 @@ export abstract class ConvenienceRenderer extends Renderer { return name; } - private makeNameForType(t: Type, namer: Namer, givenOrder: number, inferredOrder: number): Name { + private makeNameForType( + t: Type, + namer: Namer, + givenOrder: number, + inferredOrder: number, + ): Name { const names = t.getNames(); const order = names.areInferred ? inferredOrder : givenOrder; return new SimpleName(names.proposedNames, namer, order); } protected makeNameForNamedType(t: Type): Name { - return this.makeNameForType(t, defined(this._namedTypeNamer), givenNameOrder, inferredNameOrder); + return this.makeNameForType( + t, + defined(this._namedTypeNamer), + givenNameOrder, + inferredNameOrder, + ); } private addNameForNamedType(type: Type): Name { @@ -346,10 +471,13 @@ export abstract class ConvenienceRenderer extends Renderer { assert( defined(this._namesForTransformations).get(t) === undefined, - "Tried to give two names to the same transformation" + "Tried to give two names to the same transformation", ); - const name = this.makeNameForTransformation(xf, this.nameStoreView.tryGet(xf.targetType)); + const name = this.makeNameForTransformation( + xf, + this.nameStoreView.tryGet(xf.targetType), + ); if (name === undefined) return; this.globalNamespace.add(name); @@ -358,8 +486,11 @@ export abstract class ConvenienceRenderer extends Renderer { private processForbiddenWordsInfo( info: ForbiddenWordsInfo, - namespaceName: string - ): { forbiddenNames: ReadonlySet; forbiddenNamespaces: ReadonlySet } { + namespaceName: string, + ): { + forbiddenNames: ReadonlySet; + forbiddenNamespaces: ReadonlySet; + } { const forbiddenNames: Name[] = []; const forbiddenStrings: string[] = []; for (const nameOrString of info.names) { @@ -370,15 +501,21 @@ export abstract class ConvenienceRenderer extends Renderer { } } - let namespace = defined(this._otherForbiddenNamespaces).get(namespaceName); + let namespace = defined(this._otherForbiddenNamespaces).get( + namespaceName, + ); if (forbiddenStrings.length > 0 && namespace === undefined) { namespace = keywordNamespace(namespaceName, forbiddenStrings); - this._otherForbiddenNamespaces = defined(this._otherForbiddenNamespaces).set(namespaceName, namespace); + this._otherForbiddenNamespaces = defined( + this._otherForbiddenNamespaces, + ).set(namespaceName, namespace); } let forbiddenNamespaces = new Set(); if (info.includeGlobalForbidden) { - forbiddenNamespaces = forbiddenNamespaces.add(defined(this._globalForbiddenNamespace)); + forbiddenNamespaces = forbiddenNamespaces.add( + defined(this._globalForbiddenNamespace), + ); } if (namespace !== undefined) { @@ -393,7 +530,7 @@ export abstract class ConvenienceRenderer extends Renderer { _className: Name, p: ClassProperty, jsonName: string, - assignedName: string | undefined + assignedName: string | undefined, ): Name | undefined { const namer = this.namerForObjectProperty(o, p); if (namer === null) return undefined; @@ -407,8 +544,14 @@ export abstract class ConvenienceRenderer extends Renderer { // maybe we'll need global properties for some weird language at // some point. const alternative = `${o.getCombinedName()}_${jsonName}`; - const order = assignedName === undefined ? classPropertyNameOrder : assignedClassPropertyNameOrder; - const names = assignedName === undefined ? [jsonName, alternative] : [assignedName]; + const order = + assignedName === undefined + ? classPropertyNameOrder + : assignedClassPropertyNameOrder; + const names = + assignedName === undefined + ? [jsonName, alternative] + : [assignedName]; return new SimpleName(names, namer, order); } @@ -417,36 +560,57 @@ export abstract class ConvenienceRenderer extends Renderer { _className: Name, _p: ClassProperty, _jsonName: string, - _name: Name + _name: Name, ): Name[] { return []; } private addPropertyNames(o: ObjectType, className: Name): void { - const { forbiddenNames, forbiddenNamespaces } = this.processForbiddenWordsInfo( - this.forbiddenForObjectProperties(o, className), - "forbidden-for-properties" - ); + const { forbiddenNames, forbiddenNamespaces } = + this.processForbiddenWordsInfo( + this.forbiddenForObjectProperties(o, className), + "forbidden-for-properties", + ); let ns: Namespace | undefined; const accessorNames = objectPropertyNames(o, this.targetLanguage.name); const names = mapFilterMap(o.getSortedProperties(), (p, jsonName) => { - const [assignedName, isFixed] = getAccessorName(accessorNames, jsonName); + const [assignedName, isFixed] = getAccessorName( + accessorNames, + jsonName, + ); let name: Name | undefined; if (isFixed) { name = new FixedName(defined(assignedName)); } else { - name = this.makeNameForProperty(o, className, p, jsonName, assignedName); + name = this.makeNameForProperty( + o, + className, + p, + jsonName, + assignedName, + ); } if (name === undefined) return undefined; if (ns === undefined) { - ns = new Namespace(o.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames); + ns = new Namespace( + o.getCombinedName(), + this.globalNamespace, + forbiddenNamespaces, + forbiddenNames, + ); } ns.add(name); - for (const depName of this.makePropertyDependencyNames(o, className, p, jsonName, name)) { + for (const depName of this.makePropertyDependencyNames( + o, + className, + p, + jsonName, + name, + )) { ns.add(depName); } @@ -455,37 +619,59 @@ export abstract class ConvenienceRenderer extends Renderer { defined(this._propertyNamesStoreView).set(o, names); } - protected makeNameForUnionMember(u: UnionType, unionName: Name, t: Type): Name { - const [assignedName, isFixed] = unionMemberName(u, t, this.targetLanguage.name); + protected makeNameForUnionMember( + u: UnionType, + unionName: Name, + t: Type, + ): Name { + const [assignedName, isFixed] = unionMemberName( + u, + t, + this.targetLanguage.name, + ); if (isFixed) { return new FixedName(defined(assignedName)); } - return new DependencyName(nonNull(this._unionMemberNamer), unionMemberNameOrder, lookup => { - if (assignedName !== undefined) return assignedName; - return this.proposeUnionMemberName(u, unionName, t, lookup); - }); + return new DependencyName( + nonNull(this._unionMemberNamer), + unionMemberNameOrder, + (lookup) => { + if (assignedName !== undefined) return assignedName; + return this.proposeUnionMemberName(u, unionName, t, lookup); + }, + ); } private addUnionMemberNames(u: UnionType, unionName: Name): void { const memberNamer = this._unionMemberNamer; if (memberNamer === null) return; - const { forbiddenNames, forbiddenNamespaces } = this.processForbiddenWordsInfo( - this.forbiddenForUnionMembers(u, unionName), - "forbidden-for-union-members" - ); + const { forbiddenNames, forbiddenNamespaces } = + this.processForbiddenWordsInfo( + this.forbiddenForUnionMembers(u, unionName), + "forbidden-for-union-members", + ); let ns: Namespace; if (this.unionMembersInGlobalNamespace) { ns = this.globalNamespace; } else { - ns = new Namespace(u.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames); + ns = new Namespace( + u.getCombinedName(), + this.globalNamespace, + forbiddenNamespaces, + forbiddenNames, + ); } - let names = new Map(); + const names = new Map(); for (const t of u.members) { - const name = this.makeNameForUnionMember(u, unionName, followTargetType(t)); + const name = this.makeNameForUnionMember( + u, + unionName, + followTargetType(t), + ); names.set(t, ns.add(name)); } @@ -496,13 +682,19 @@ export abstract class ConvenienceRenderer extends Renderer { e: EnumType, _enumName: Name, caseName: string, - assignedName: string | undefined + assignedName: string | undefined, ): Name { // FIXME: See the FIXME in `makeNameForProperty`. We do have global // enum cases, though (in Go), so this is actually useful already. const alternative = `${e.getCombinedName()}_${caseName}`; - const order = assignedName === undefined ? enumCaseNameOrder : assignedEnumCaseNameOrder; - const names = assignedName === undefined ? [caseName, alternative] : [assignedName]; + const order = + assignedName === undefined + ? enumCaseNameOrder + : assignedEnumCaseNameOrder; + const names = + assignedName === undefined + ? [caseName, alternative] + : [assignedName]; return new SimpleName(names, nonNull(this._enumCaseNamer), order); } @@ -510,27 +702,41 @@ export abstract class ConvenienceRenderer extends Renderer { private addEnumCaseNames(e: EnumType, enumName: Name): void { if (this._enumCaseNamer === null) return; - const { forbiddenNames, forbiddenNamespaces } = this.processForbiddenWordsInfo( - this.forbiddenForEnumCases(e, enumName), - "forbidden-for-enum-cases" - ); + const { forbiddenNames, forbiddenNamespaces } = + this.processForbiddenWordsInfo( + this.forbiddenForEnumCases(e, enumName), + "forbidden-for-enum-cases", + ); let ns: Namespace; if (this.enumCasesInGlobalNamespace) { ns = this.globalNamespace; } else { - ns = new Namespace(e.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames); + ns = new Namespace( + e.getCombinedName(), + this.globalNamespace, + forbiddenNamespaces, + forbiddenNames, + ); } - let names = new Map(); + const names = new Map(); const accessorNames = enumCaseNames(e, this.targetLanguage.name); for (const caseName of e.cases) { - const [assignedName, isFixed] = getAccessorName(accessorNames, caseName); + const [assignedName, isFixed] = getAccessorName( + accessorNames, + caseName, + ); let name: Name; if (isFixed) { name = new FixedName(defined(assignedName)); } else { - name = this.makeNameForEnumCase(e, enumName, caseName, assignedName); + name = this.makeNameForEnumCase( + e, + enumName, + caseName, + assignedName, + ); } names.set(caseName, ns.add(name)); @@ -547,7 +753,9 @@ export abstract class ConvenienceRenderer extends Renderer { if (propertyNameds.get(n) === undefined) return undefined; return p.type; }); - const sortedMap = mapSortBy(filteredMap, (_, n) => defined(names.get(defined(propertyNameds.get(n))))); + const sortedMap = mapSortBy(filteredMap, (_, n) => + defined(names.get(defined(propertyNameds.get(n)))), + ); return new Set(sortedMap.values()); } @@ -588,7 +796,9 @@ export abstract class ConvenienceRenderer extends Renderer { return this.enums.size > 0; } - protected proposedUnionMemberNameForTypeKind(_kind: TypeKind): string | null { + protected proposedUnionMemberNameForTypeKind( + _kind: TypeKind, + ): string | null { return null; } @@ -596,9 +806,11 @@ export abstract class ConvenienceRenderer extends Renderer { _u: UnionType, _unionName: Name, fieldType: Type, - lookup: (n: Name) => string + lookup: (n: Name) => string, ): string { - const simpleName = this.proposedUnionMemberNameForTypeKind(fieldType.kind); + const simpleName = this.proposedUnionMemberNameForTypeKind( + fieldType.kind, + ); if (simpleName !== null) { return simpleName; } @@ -606,28 +818,29 @@ export abstract class ConvenienceRenderer extends Renderer { const typeNameForUnionMember = (t: Type): string => matchTypeExhaustive( t, - _noneType => { + (_noneType) => { return panic("none type should have been replaced"); }, - _anyType => "anything", - _nullType => "null", - _boolType => "bool", - _integerType => "integer", - _doubleType => "double", - _stringType => "string", - arrayType => typeNameForUnionMember(arrayType.items) + "_array", - classType => lookup(this.nameForNamedType(classType)), - mapType => typeNameForUnionMember(mapType.values) + "_map", - objectType => { + (_anyType) => "anything", + (_nullType) => "null", + (_boolType) => "bool", + (_integerType) => "integer", + (_doubleType) => "double", + (_stringType) => "string", + (arrayType) => + typeNameForUnionMember(arrayType.items) + "_array", + (classType) => lookup(this.nameForNamedType(classType)), + (mapType) => typeNameForUnionMember(mapType.values) + "_map", + (objectType) => { assert( this.targetLanguage.supportsFullObjectType, - "Object type should have been replaced in `replaceObjectType`" + "Object type should have been replaced in `replaceObjectType`", ); return lookup(this.nameForNamedType(objectType)); }, - _enumType => "enum", - _unionType => "union", - transformedType => transformedType.kind.replace("-", "_") + (_enumType) => "enum", + (_unionType) => "union", + (transformedType) => transformedType.kind.replace("-", "_"), ); return typeNameForUnionMember(fieldType); @@ -642,7 +855,9 @@ export abstract class ConvenienceRenderer extends Renderer { } protected isImplicitCycleBreaker(_t: Type): boolean { - return panic("A renderer that invokes isCycleBreakerType must implement isImplicitCycleBreaker"); + return panic( + "A renderer that invokes isCycleBreakerType must implement isImplicitCycleBreaker", + ); } protected canBreakCycles(_t: Type): boolean { @@ -653,8 +868,8 @@ export abstract class ConvenienceRenderer extends Renderer { if (this._cycleBreakerTypes === undefined) { this._cycleBreakerTypes = cycleBreakerTypesForGraph( this.typeGraph, - s => this.isImplicitCycleBreaker(s), - s => this.canBreakCycles(s) + (s) => this.isImplicitCycleBreaker(s), + (s) => this.canBreakCycles(s), ); } @@ -664,7 +879,7 @@ export abstract class ConvenienceRenderer extends Renderer { protected forEachTopLevel( blankLocations: BlankLineConfig, f: (t: Type, name: Name, position: ForEachPosition) => void, - predicate?: (t: Type) => boolean + predicate?: (t: Type) => boolean, ): boolean { let topLevels: ReadonlyMap; if (predicate !== undefined) { @@ -673,19 +888,22 @@ export abstract class ConvenienceRenderer extends Renderer { topLevels = this.topLevels; } - return this.forEachWithBlankLines(topLevels, blankLocations, (t, name, pos) => - f(t, this.nameStoreView.getForTopLevel(name), pos) + return this.forEachWithBlankLines( + topLevels, + blankLocations, + (t, name, pos) => + f(t, this.nameStoreView.getForTopLevel(name), pos), ); } protected forEachDeclaration( blankLocations: BlankLineConfig, - f: (decl: Declaration, position: ForEachPosition) => void + f: (decl: Declaration, position: ForEachPosition) => void, ): void { this.forEachWithBlankLines( iterableEnumerate(defined(this._declarationIR).declarations), blankLocations, - (decl, _, pos) => f(decl, pos) + (decl, _, pos) => f(decl, pos), ); } @@ -705,29 +923,44 @@ export abstract class ConvenienceRenderer extends Renderer { protected sortClassProperties( properties: ReadonlyMap, - propertyNames: ReadonlyMap + propertyNames: ReadonlyMap, ): ReadonlyMap { if (this._alphabetizeProperties) { - return mapSortBy(properties, (_p: ClassProperty, jsonName: string) => { - const name = defined(propertyNames.get(jsonName)); - return defined(this.names.get(name)); - }); - } else { - return properties; + return mapSortBy( + properties, + (_p: ClassProperty, jsonName: string) => { + const name = defined(propertyNames.get(jsonName)); + return defined(this.names.get(name)); + }, + ); } + + return properties; } protected forEachClassProperty( o: ObjectType, blankLocations: BlankLineConfig, - f: (name: Name, jsonName: string, p: ClassProperty, position: ForEachPosition) => void + f: ( + name: Name, + jsonName: string, + p: ClassProperty, + position: ForEachPosition, + ) => void, ): void { const propertyNames = defined(this._propertyNamesStoreView).get(o); - const sortedProperties = this.sortClassProperties(o.getProperties(), propertyNames); - this.forEachWithBlankLines(sortedProperties, blankLocations, (p, jsonName, pos) => { - const name = defined(propertyNames.get(jsonName)); - f(name, jsonName, p, pos); - }); + const sortedProperties = this.sortClassProperties( + o.getProperties(), + propertyNames, + ); + this.forEachWithBlankLines( + sortedProperties, + blankLocations, + (p, jsonName, pos) => { + const name = defined(propertyNames.get(jsonName)); + f(name, jsonName, p, pos); + }, + ); } protected nameForUnionMember(u: UnionType, t: Type): Name { @@ -744,14 +977,17 @@ export abstract class ConvenienceRenderer extends Renderer { members: ReadonlySet | null, blankLocations: BlankLineConfig, sortOrder: ((n: Name, t: Type) => string) | null, - f: (name: Name, t: Type, position: ForEachPosition) => void + f: (name: Name, t: Type, position: ForEachPosition) => void, ): void { const iterateMembers = members ?? u.members; if (sortOrder === null) { sortOrder = (n): string => defined(this.names.get(n)); } - const memberNames = mapFilter(defined(this._memberNamesStoreView).get(u), (_, t) => iterateMembers.has(t)); + const memberNames = mapFilter( + defined(this._memberNamesStoreView).get(u), + (_, t) => iterateMembers.has(t), + ); const sortedMemberNames = mapSortBy(memberNames, sortOrder); this.forEachWithBlankLines(sortedMemberNames, blankLocations, f); } @@ -759,56 +995,80 @@ export abstract class ConvenienceRenderer extends Renderer { protected forEachEnumCase( e: EnumType, blankLocations: BlankLineConfig, - f: (name: Name, jsonName: string, position: ForEachPosition) => void + f: (name: Name, jsonName: string, position: ForEachPosition) => void, ): void { const caseNames = defined(this._caseNamesStoreView).get(e); - const sortedCaseNames = mapSortBy(caseNames, n => defined(this.names.get(n))); + const sortedCaseNames = mapSortBy(caseNames, (n) => + defined(this.names.get(n)), + ); this.forEachWithBlankLines(sortedCaseNames, blankLocations, f); } protected forEachTransformation( blankLocations: BlankLineConfig, - f: (n: Name, t: Type, position: ForEachPosition) => void + f: (n: Name, t: Type, position: ForEachPosition) => void, ): void { - this.forEachWithBlankLines(defined(this._namesForTransformations), blankLocations, f); + this.forEachWithBlankLines( + defined(this._namesForTransformations), + blankLocations, + f, + ); } protected forEachSpecificNamedType( blankLocations: BlankLineConfig, types: Iterable<[T, T]>, - f: (t: T, name: Name, position: ForEachPosition) => void + f: (t: T, name: Name, position: ForEachPosition) => void, ): void { - this.forEachWithBlankLines(types, blankLocations, (t, _, pos) => f(t, this.nameForNamedType(t), pos)); + this.forEachWithBlankLines(types, blankLocations, (t, _, pos) => + f(t, this.nameForNamedType(t), pos), + ); } protected forEachObject( blankLocations: BlankLineConfig, f: - | ((c: ClassType, className: Name, position: ForEachPosition) => void) - | ((o: ObjectType, objectName: Name, position: ForEachPosition) => void) + | (( + c: ClassType, + className: Name, + position: ForEachPosition, + ) => void) + | (( + o: ObjectType, + objectName: Name, + position: ForEachPosition, + ) => void), ): void { // FIXME: This is ugly. - this.forEachSpecificNamedType(blankLocations, defined(this._namedObjects).entries(), f); + this.forEachSpecificNamedType( + blankLocations, + defined(this._namedObjects).entries(), + f, + ); } protected forEachEnum( blankLocations: BlankLineConfig, - f: (u: EnumType, enumName: Name, position: ForEachPosition) => void + f: (u: EnumType, enumName: Name, position: ForEachPosition) => void, ): void { this.forEachSpecificNamedType(blankLocations, this.enums.entries(), f); } protected forEachUnion( blankLocations: BlankLineConfig, - f: (u: UnionType, unionName: Name, position: ForEachPosition) => void + f: (u: UnionType, unionName: Name, position: ForEachPosition) => void, ): void { - this.forEachSpecificNamedType(blankLocations, this.namedUnions.entries(), f); + this.forEachSpecificNamedType( + blankLocations, + this.namedUnions.entries(), + f, + ); } protected forEachUniqueUnion( blankLocations: BlankLineConfig, uniqueValue: (u: UnionType) => T, - f: (firstUnion: UnionType, value: T, position: ForEachPosition) => void + f: (firstUnion: UnionType, value: T, position: ForEachPosition) => void, ): void { const firstUnionByValue = new Map(); for (const u of this.namedUnions) { @@ -824,32 +1084,56 @@ export abstract class ConvenienceRenderer extends Renderer { protected forEachNamedType( blankLocations: BlankLineConfig, objectFunc: - | ((c: ClassType, className: Name, position: ForEachPosition) => void) - | ((o: ObjectType, objectName: Name, position: ForEachPosition) => void), - enumFunc: (e: EnumType, enumName: Name, position: ForEachPosition) => void, - unionFunc: (u: UnionType, unionName: Name, position: ForEachPosition) => void + | (( + c: ClassType, + className: Name, + position: ForEachPosition, + ) => void) + | (( + o: ObjectType, + objectName: Name, + position: ForEachPosition, + ) => void), + enumFunc: ( + e: EnumType, + enumName: Name, + position: ForEachPosition, + ) => void, + unionFunc: ( + u: UnionType, + unionName: Name, + position: ForEachPosition, + ) => void, ): void { - this.forEachWithBlankLines(defined(this._namedTypes).entries(), blankLocations, (t, _, pos) => { - const name = this.nameForNamedType(t); - if (t instanceof ObjectType) { - // FIXME: This is ugly. We can't runtime check that the function - // takes full object types if we have them. - objectFunc(t, name, pos); - } else if (t instanceof EnumType) { - enumFunc(t, name, pos); - } else if (t instanceof UnionType) { - unionFunc(t, name, pos); - } else { - return panic("Named type that's neither a class nor union"); - } - }); + this.forEachWithBlankLines( + defined(this._namedTypes).entries(), + blankLocations, + (t, _, pos) => { + const name = this.nameForNamedType(t); + if (t instanceof ObjectType) { + // FIXME: This is ugly. We can't runtime check that the function + // takes full object types if we have them. + objectFunc(t, name, pos); + } else if (t instanceof EnumType) { + enumFunc(t, name, pos); + } else if (t instanceof UnionType) { + unionFunc(t, name, pos); + } else { + return panic("Named type that's neither a class nor union"); + } + }, + ); } // You should never have to use this to produce parts of your generated // code. If you need to modify a Name, for example to change its casing, // use `modifySource`. protected sourcelikeToString(src: Sourcelike): string { - return serializeRenderResult(sourcelikeToSource(src), this.names, "").lines.join("\n"); + return serializeRenderResult( + sourcelikeToSource(src), + this.names, + "", + ).lines.join("\n"); } protected get commentLineStart(): string { @@ -857,7 +1141,7 @@ export abstract class ConvenienceRenderer extends Renderer { } protected emitComments(comments: Comment[]): void { - comments.forEach(comment => { + comments.forEach((comment) => { if (isStringComment(comment)) { this.emitCommentLines([comment]); } else if ("lines" in comment) { @@ -879,8 +1163,8 @@ export abstract class ConvenienceRenderer extends Renderer { firstLineStart = lineStart, lineEnd, beforeComment, - afterComment - }: CommentOptions = {} + afterComment, + }: CommentOptions = {}, ): void { if (beforeComment !== undefined) { this.emitLine(beforeComment); @@ -919,7 +1203,11 @@ export abstract class ConvenienceRenderer extends Renderer { protected emitPropertyTable( c: ClassType, - makePropertyRow: (name: Name, jsonName: string, p: ClassProperty) => Sourcelike[] + makePropertyRow: ( + name: Name, + jsonName: string, + p: ClassProperty, + ) => Sourcelike[], ): void { let table: Sourcelike[][] = []; const emitTable = (): void => { @@ -943,23 +1231,32 @@ export abstract class ConvenienceRenderer extends Renderer { private processGraph(): void { this._declarationIR = declarationsForGraph( this.typeGraph, - this.needsTypeDeclarationBeforeUse ? (t): boolean => this.canBeForwardDeclared(t) : undefined, - t => this.childrenOfType(t), - t => { + this.needsTypeDeclarationBeforeUse + ? (t): boolean => this.canBeForwardDeclared(t) + : undefined, + (t) => this.childrenOfType(t), + (t) => { if (t instanceof UnionType) { return this.unionNeedsName(t); } return isNamedType(t); - } + }, ); const types = this.typeGraph.allTypesUnordered(); - this._haveUnions = iterableSome(types, t => t instanceof UnionType); - this._haveMaps = iterableSome(types, t => t instanceof MapType); - const classTypes = setFilter(types, t => t instanceof ClassType) as Set; - this._haveOptionalProperties = iterableSome(classTypes, c => mapSome(c.getProperties(), p => p.isOptional)); - this._namedTypes = this._declarationIR.declarations.filter(d => d.kind === "define").map(d => d.type); + this._haveUnions = iterableSome(types, (t) => t instanceof UnionType); + this._haveMaps = iterableSome(types, (t) => t instanceof MapType); + const classTypes = setFilter( + types, + (t) => t instanceof ClassType, + ) as Set; + this._haveOptionalProperties = iterableSome(classTypes, (c) => + mapSome(c.getProperties(), (p) => p.isOptional), + ); + this._namedTypes = this._declarationIR.declarations + .filter((d) => d.kind === "define") + .map((d) => d.type); const { objects, enums, unions } = separateNamedTypes(this._namedTypes); this._namedObjects = new Set(objects); this._namedEnums = new Set(enums); @@ -971,7 +1268,9 @@ export abstract class ConvenienceRenderer extends Renderer { this.emitSourceStructure(givenOutputFilename); } - protected forEachType(process: (t: Type) => TResult): Set { + protected forEachType( + process: (t: Type) => TResult, + ): Set { const visitedTypes = new Set(); const processed = new Set(); const queue = Array.from(this.typeGraph.topLevels.values()); diff --git a/packages/quicktype-core/src/CycleBreaker.ts b/packages/quicktype-core/src/CycleBreaker.ts index 9497d9140..818b25c38 100644 --- a/packages/quicktype-core/src/CycleBreaker.ts +++ b/packages/quicktype-core/src/CycleBreaker.ts @@ -2,7 +2,7 @@ import { assert, panic } from "./support/Support"; export function breakCycles( outEdges: number[][], - chooseBreaker: (cycle: number[]) => [number, T] + chooseBreaker: (cycle: number[]) => [number, T], ): Array<[number, T]> { const numNodes = outEdges.length; const inEdges: number[][] = []; @@ -59,7 +59,10 @@ export function breakCycles( continue; } - assert(inDegree[i] === 0 || outDegree[i] === 0, "Can't have nodes in the worklist with in and out edges"); + assert( + inDegree[i] === 0 || outDegree[i] === 0, + "Can't have nodes in the worklist with in and out edges", + ); removeNode(i); continue; @@ -83,7 +86,7 @@ export function breakCycles( // We could count the number of reachable nodes for all nodes in the graph, // and then pick one of the nodes with the lowest number, which would pick // the dependee cycle. - const maybeEdge = outEdges[n].find(x => !done[x]); + const maybeEdge = outEdges[n].find((x) => !done[x]); if (maybeEdge === undefined) { return panic("Presumed cycle is not a cycle"); } diff --git a/packages/quicktype-core/src/DateTime.ts b/packages/quicktype-core/src/DateTime.ts index 9f2bc4ae8..7c2f4b049 100644 --- a/packages/quicktype-core/src/DateTime.ts +++ b/packages/quicktype-core/src/DateTime.ts @@ -61,6 +61,10 @@ export class DefaultDateTimeRecognizer implements DateTimeRecognizer { isDateTime(str: string): boolean { // http://tools.ietf.org/html/rfc3339#section-5.6 const dateTime = str.split(DATE_TIME_SEPARATOR); - return dateTime.length === 2 && this.isDate(dateTime[0]) && this.isTime(dateTime[1]); + return ( + dateTime.length === 2 && + this.isDate(dateTime[0]) && + this.isTime(dateTime[1]) + ); } } diff --git a/packages/quicktype-core/src/DeclarationIR.ts b/packages/quicktype-core/src/DeclarationIR.ts index 30b763ee0..8ee30c34f 100644 --- a/packages/quicktype-core/src/DeclarationIR.ts +++ b/packages/quicktype-core/src/DeclarationIR.ts @@ -1,10 +1,16 @@ -import { iterableFirst, setFilter, setIntersect, setSubtract, setUnionInto } from "collection-utils"; +import { + iterableFirst, + setFilter, + setIntersect, + setSubtract, + setUnionInto, +} from "collection-utils"; import { Graph } from "./Graph"; import { messageError } from "./Messages"; import { assert, defined, panic } from "./support/Support"; -import { type Type } from "./Type/Type"; -import { type TypeGraph } from "./Type/TypeGraph"; +import type { Type } from "./Type/Type"; +import type { TypeGraph } from "./Type/TypeGraph"; export type DeclarationKind = "forward" | "define"; @@ -18,13 +24,17 @@ export class DeclarationIR { public constructor( declarations: Iterable, - public readonly forwardedTypes: Set + public readonly forwardedTypes: Set, ) { this.declarations = Array.from(declarations); } } -function findBreaker(t: Type, path: readonly Type[], canBreak: ((t: Type) => boolean) | undefined): Type | undefined { +function findBreaker( + t: Type, + path: readonly Type[], + canBreak: ((t: Type) => boolean) | undefined, +): Type | undefined { const index = path.indexOf(t); if (index < 0) return undefined; if (canBreak === undefined) { @@ -43,7 +53,7 @@ function findBreaker(t: Type, path: readonly Type[], canBreak: ((t: Type) => boo export function cycleBreakerTypesForGraph( graph: TypeGraph, isImplicitCycleBreaker: (t: Type) => boolean, - canBreakCycles: (t: Type) => boolean + canBreakCycles: (t: Type) => boolean, ): Set { const visitedTypes = new Set(); const cycleBreakerTypes = new Set(); @@ -88,7 +98,7 @@ export function declarationsForGraph( typeGraph: TypeGraph, canBeForwardDeclared: ((t: Type) => boolean) | undefined, childrenOfType: (t: Type) => ReadonlySet, - needsDeclaration: (t: Type) => boolean + needsDeclaration: (t: Type) => boolean, ): DeclarationIR { /* function nodeTitle(t: Type): string { @@ -122,7 +132,10 @@ export function declarationsForGraph( // 1. Only one node in the cycle needs a declaration, in which // case it's the breaker, and no forward declaration is necessary. if (declarationNeeded.size === 1) { - declarations.push({ kind: "define", type: defined(iterableFirst(declarationNeeded)) }); + declarations.push({ + kind: "define", + type: defined(iterableFirst(declarationNeeded)), + }); return; } @@ -137,7 +150,10 @@ export function declarationsForGraph( // declaration, so we can pick any one. This is not a forward // declaration, either. if (declarationNeeded.size === 0) { - declarations.push({ kind: "define", type: defined(iterableFirst(component)) }); + declarations.push({ + kind: "define", + type: defined(iterableFirst(component)), + }); return; } @@ -158,9 +174,12 @@ export function declarationsForGraph( // there are none, we're stuck. If there are, we take them out of // the component and try the whole thing again recursively. Then // we declare the types we previously forward-declared. - const forwardDeclarable = setFilter(component, canBeForwardDeclared); + const forwardDeclarable = setFilter( + component, + canBeForwardDeclared, + ); if (forwardDeclarable.size === 0) { - return messageError("IRNoForwardDeclarableTypeInCycle", {}); + messageError("IRNoForwardDeclarableTypeInCycle", {}); } for (const t of forwardDeclarable) { @@ -169,7 +188,9 @@ export function declarationsForGraph( setUnionInto(forwardedTypes, forwardDeclarable); const rest = setSubtract(component, forwardDeclarable); - const restGraph = new Graph(rest, true, t => setIntersect(childrenOfType(t), rest)); + const restGraph = new Graph(rest, true, (t) => + setIntersect(childrenOfType(t), rest), + ); processGraph(restGraph, false); for (const t of forwardDeclarable) { declarations.push({ kind: "define", type: t }); diff --git a/packages/quicktype-core/src/GatherNames.ts b/packages/quicktype-core/src/GatherNames.ts index bf325c697..c99da4bfb 100644 --- a/packages/quicktype-core/src/GatherNames.ts +++ b/packages/quicktype-core/src/GatherNames.ts @@ -1,11 +1,16 @@ import { setMap, setSortBy, setUnion } from "collection-utils"; import * as pluralize from "pluralize"; -import { TooManyTypeNames, TypeNames, namesTypeAttributeKind, tooManyNamesThreshold } from "./attributes/TypeNames"; +import { + TooManyTypeNames, + TypeNames, + namesTypeAttributeKind, + tooManyNamesThreshold, +} from "./attributes/TypeNames"; import { assert, defined, panic } from "./support/Support"; import { transformationForType } from "./Transformers"; import { ObjectType, type Type } from "./Type/Type"; -import { type TypeGraph } from "./Type/TypeGraph"; +import type { TypeGraph } from "./Type/TypeGraph"; import { matchCompoundType, nullableFromUnion } from "./Type/TypeUtils"; class UniqueQueue { @@ -85,7 +90,11 @@ class UniqueQueue { // step 1, and its alternatives to a union of its direct and ancestor // alternatives, gathered in steps 2 and 3. -export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: boolean): void { +export function gatherNames( + graph: TypeGraph, + destructive: boolean, + debugPrint: boolean, +): void { function setNames(t: Type, tn: TypeNames): void { graph.attributeStore.set(namesTypeAttributeKind, t, tn); } @@ -161,23 +170,34 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: const values = t.getAdditionalProperties(); if (values !== undefined) { - addNames(values, names === null ? null : setMap(names, pluralize.singular)); + addNames( + values, + names === null ? null : setMap(names, pluralize.singular), + ); } } else { matchCompoundType( t, - arrayType => { - addNames(arrayType.items, names === null ? null : setMap(names, pluralize.singular)); + (arrayType) => { + addNames( + arrayType.items, + names === null + ? null + : setMap(names, pluralize.singular), + ); }, - _classType => panic("We handled this above"), - _mapType => panic("We handled this above"), - _objectType => panic("We handled this above"), - unionType => { - const members = setSortBy(unionType.members, member => member.kind); + (_classType) => panic("We handled this above"), + (_mapType) => panic("We handled this above"), + (_objectType) => panic("We handled this above"), + (unionType) => { + const members = setSortBy( + unionType.members, + (member) => member.kind, + ); for (const memberType of members) { addNames(memberType, names); } - } + }, ); } } @@ -188,18 +208,26 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: if (names === undefined) return; const index = t.index; - console.log(`${index}: ${names === null ? "*** too many ***" : Array.from(names).join(" ")}`); + console.log( + `${index}: ${names === null ? "*** too many ***" : Array.from(names).join(" ")}`, + ); } } // null means there are too many - const directAlternativesForType = new Map | null>(); - const ancestorAlternativesForType = new Map | null>(); + const directAlternativesForType = new Map< + Type, + ReadonlySet | null + >(); + const ancestorAlternativesForType = new Map< + Type, + ReadonlySet | null + >(); const pairsProcessed = new Map>(); function addAlternatives( existing: ReadonlySet | undefined, - alternatives: string[] + alternatives: string[], ): ReadonlySet | undefined | null { if (alternatives.length === 0) { return existing; @@ -217,7 +245,11 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: return null; } - function processType(ancestor: Type | undefined, t: Type, alternativeSuffix: string | undefined): void { + function processType( + ancestor: Type | undefined, + t: Type, + alternativeSuffix: string | undefined, + ): void { const names = defined(namesForType.get(t)); let processedEntry = pairsProcessed.get(ancestor); @@ -244,25 +276,42 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: } else if (ancestorNames !== undefined) { const alternatives: string[] = []; for (const name of names) { - alternatives.push(...Array.from(ancestorNames).map(an => `${an}_${name}`)); + alternatives.push( + ...Array.from(ancestorNames).map( + (an) => `${an}_${name}`, + ), + ); // FIXME: add alternatives with the suffix here, too? - alternatives.push(...Array.from(ancestorNames).map(an => `${an}_${name}_${t.kind}`)); + alternatives.push( + ...Array.from(ancestorNames).map( + (an) => `${an}_${name}_${t.kind}`, + ), + ); // FIXME: add alternatives with the suffix here, too? } - ancestorAlternatives = addAlternatives(ancestorAlternatives, alternatives); + ancestorAlternatives = addAlternatives( + ancestorAlternatives, + alternatives, + ); } } - if (alternativeSuffix !== undefined && directAlternatives !== null) { + if ( + alternativeSuffix !== undefined && + directAlternatives !== null + ) { const alternatives: string[] = []; for (const name of names) { // FIXME: we should only add these for names we couldn't singularize alternatives.push(`${name}_${alternativeSuffix}`); } - directAlternatives = addAlternatives(directAlternatives, alternatives); + directAlternatives = addAlternatives( + directAlternatives, + alternatives, + ); } } @@ -282,26 +331,38 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: const values = t.getAdditionalProperties(); if (values !== undefined) { - processType(properties.size === 0 ? ancestor : t, values, "value"); + processType( + properties.size === 0 ? ancestor : t, + values, + "value", + ); } } else { matchCompoundType( t, - arrayType => { + (arrayType) => { processType(ancestor, arrayType.items, "element"); }, - _classType => panic("We handled this above"), - _mapType => panic("We handled this above"), - _objectType => panic("We handled this above"), - unionType => { - const members = setSortBy(unionType.members, member => member.kind); - const unionHasGivenName = unionType.hasNames && !unionType.getNames().areInferred; - const unionIsAncestor = unionHasGivenName || nullableFromUnion(unionType) === null; - const ancestorForMembers = unionIsAncestor ? unionType : ancestor; + (_classType) => panic("We handled this above"), + (_mapType) => panic("We handled this above"), + (_objectType) => panic("We handled this above"), + (unionType) => { + const members = setSortBy( + unionType.members, + (member) => member.kind, + ); + const unionHasGivenName = + unionType.hasNames && !unionType.getNames().areInferred; + const unionIsAncestor = + unionHasGivenName || + nullableFromUnion(unionType) === null; + const ancestorForMembers = unionIsAncestor + ? unionType + : ancestor; for (const memberType of members) { processType(ancestorForMembers, memberType, undefined); } - } + }, ); } } @@ -326,7 +387,7 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: alternatives = setUnion( alternatives, - setMap(names, name => `${name}_${t.kind}`) + setMap(names, (name) => `${name}_${t.kind}`), ); directAlternativesForType.set(t, alternatives); } @@ -346,18 +407,28 @@ export function gatherNames(graph: TypeGraph, destructive: boolean, debugPrint: if (ancestorAlternatives === null && directAlternatives === null) { alternatives = undefined; } else { - if (directAlternatives !== null && directAlternatives !== undefined) { + if ( + directAlternatives !== null && + directAlternatives !== undefined + ) { alternatives = directAlternatives; } else { alternatives = new Set(); } - if (ancestorAlternatives !== null && ancestorAlternatives !== undefined) { + if ( + ancestorAlternatives !== null && + ancestorAlternatives !== undefined + ) { alternatives = setUnion(alternatives, ancestorAlternatives); } } - typeNames = TypeNames.makeWithDistance(names, alternatives, destructive ? 1 : 10); + typeNames = TypeNames.makeWithDistance( + names, + alternatives, + destructive ? 1 : 10, + ); } setNames(t, t.hasNames ? t.getNames().add([typeNames]) : typeNames); diff --git a/packages/quicktype-core/src/Graph.ts b/packages/quicktype-core/src/Graph.ts index df186ce9c..16690398e 100644 --- a/packages/quicktype-core/src/Graph.ts +++ b/packages/quicktype-core/src/Graph.ts @@ -75,21 +75,33 @@ function stronglyConnectedComponents(successors: number[][]): number[][] { } } - assert(countComponentGraphNodes(sccs) === numNodes, "We didn't put all the nodes into SCCs"); + assert( + countComponentGraphNodes(sccs) === numNodes, + "We didn't put all the nodes into SCCs", + ); return sccs; } -function buildComponentOfNodeMap(successors: number[][], components: number[][]): number[] { +function buildComponentOfNodeMap( + successors: number[][], + components: number[][], +): number[] { const numComponents = components.length; const numNodes = successors.length; - assert(numNodes === countComponentGraphNodes(components), "Components don't match up with graph"); + assert( + numNodes === countComponentGraphNodes(components), + "Components don't match up with graph", + ); const componentOfNode: number[] = repeated(numNodes, -1); for (let c = 0; c < numComponents; c++) { for (const n of components[c]) { - assert(componentOfNode[n] < 0, "We have a node that's in two components"); + assert( + componentOfNode[n] < 0, + "We have a node that's in two components", + ); componentOfNode[n] = c; } } @@ -97,7 +109,10 @@ function buildComponentOfNodeMap(successors: number[][], components: number[][]) return componentOfNode; } -function buildMetaSuccessors(successors: number[][], components: number[][]): number[][] { +function buildMetaSuccessors( + successors: number[][], + components: number[][], +): number[][] { const numComponents = components.length; const componentOfNode = buildComponentOfNodeMap(successors, components); const componentAdded: boolean[] = repeated(numComponents, false); @@ -177,15 +192,21 @@ export class Graph { public constructor( nodes: Iterable, invertDirection: boolean, - edges: number[][] | ((node: T) => ReadonlySet) + edges: number[][] | ((node: T) => ReadonlySet), ) { this._nodes = Array.from(nodes); - this._indexByNode = new Map(this._nodes.map((n, i): [T, number] => [n, i])); + this._indexByNode = new Map( + this._nodes.map((n, i): [T, number] => [n, i]), + ); let edgesArray: number[][]; if (Array.isArray(edges)) { edgesArray = edges; } else { - edgesArray = this._nodes.map(n => Array.from(edges(n)).map(s => defined(this._indexByNode.get(s)))); + edgesArray = this._nodes.map((n) => + Array.from(edges(n)).map((s) => + defined(this._indexByNode.get(s)), + ), + ); } if (invertDirection) { @@ -205,11 +226,15 @@ export class Graph { public findRoots(): ReadonlySet { const roots = findRoots(this._successors); - return new Set(roots.map(n => this._nodes[n])); + return new Set(roots.map((n) => this._nodes[n])); } // The subgraph starting at `root` must be acyclic. - public dfsTraversal(root: T, preOrder: boolean, process: (node: T) => void): void { + public dfsTraversal( + root: T, + preOrder: boolean, + process: (node: T) => void, + ): void { const visited = repeated(this.size, false); const visit = (v: number): void => { @@ -234,15 +259,21 @@ export class Graph { public stronglyConnectedComponents(): Graph> { const components = stronglyConnectedComponents(this._successors); - const componentSuccessors = buildMetaSuccessors(this._successors, components); + const componentSuccessors = buildMetaSuccessors( + this._successors, + components, + ); return new Graph( - components.map(ns => setMap(ns, n => this._nodes[n])), + components.map((ns) => setMap(ns, (n) => this._nodes[n])), false, - componentSuccessors + componentSuccessors, ); } - public makeDot(includeNode: (n: T) => boolean, nodeLabel: (n: T) => string): string { + public makeDot( + includeNode: (n: T) => boolean, + nodeLabel: (n: T) => string, + ): string { const lines: string[] = []; lines.push("digraph G {"); lines.push(" ordering = out;"); diff --git a/packages/quicktype-core/src/GraphRewriting.ts b/packages/quicktype-core/src/GraphRewriting.ts index 060afe34f..71cb44a8a 100644 --- a/packages/quicktype-core/src/GraphRewriting.ts +++ b/packages/quicktype-core/src/GraphRewriting.ts @@ -1,24 +1,40 @@ import { EqualityMap, mapMap } from "collection-utils"; -import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; +import { + type TypeAttributes, + combineTypeAttributes, + emptyTypeAttributes, +} from "./attributes/TypeAttributes"; import { assert, indentationString, panic } from "./support/Support"; -import { type ClassProperty, type MaybeTypeIdentity, type PrimitiveTypeKind, type Type } from "./Type"; +import type { + ClassProperty, + MaybeTypeIdentity, + PrimitiveTypeKind, + Type, +} from "./Type"; import { TypeBuilder } from "./Type/TypeBuilder"; -import { type StringTypeMapping } from "./Type/TypeBuilderUtils"; -import { type TypeGraph } from "./Type/TypeGraph"; +import type { StringTypeMapping } from "./Type/TypeBuilderUtils"; +import type { TypeGraph } from "./Type/TypeGraph"; import { type TypeRef, assertTypeRefGraph, derefTypeRef, isTypeRef, typeAndAttributesForTypeRef, - typeRefIndex + typeRefIndex, } from "./Type/TypeRef"; import { combineTypeAttributesOfTypes } from "./Type/TypeUtils"; export interface TypeLookerUp { - lookupTypeRefs: (typeRefs: TypeRef[], forwardingRef?: TypeRef) => TypeRef | undefined; - reconstituteTypeRef: (typeRef: TypeRef, attributes?: TypeAttributes, forwardingRef?: TypeRef) => TypeRef; + lookupTypeRefs: ( + typeRefs: TypeRef[], + forwardingRef?: TypeRef, + ) => TypeRef | undefined; + reconstituteTypeRef: ( + typeRef: TypeRef, + attributes?: TypeAttributes, + forwardingRef?: TypeRef, + ) => TypeRef; } export class TypeReconstituter { @@ -31,7 +47,7 @@ export class TypeReconstituter { private readonly _makeClassUnique: boolean, private readonly _typeAttributes: TypeAttributes, private readonly _forwardingRef: TypeRef | undefined, - private readonly _register: (tref: TypeRef) => void + private readonly _register: (tref: TypeRef) => void, ) {} private builderForNewType(): TBuilder { @@ -41,7 +57,10 @@ export class TypeReconstituter { } private builderForSetting(): TBuilder { - assert(this._wasUsed && this._typeRef !== undefined, "Can't set type members before constructing a type"); + assert( + this._wasUsed && this._typeRef !== undefined, + "Can't set type members before constructing a type", + ); return this._typeBuilder; } @@ -67,21 +86,36 @@ export class TypeReconstituter { public lookup(tref: TypeRef): TypeRef | undefined; public lookup(trefs: Iterable): readonly TypeRef[] | undefined; - public lookup(trefs: TypeRef | Iterable): TypeRef | readonly TypeRef[] | undefined { - assert(!this._wasUsed, "Cannot lookup constituents after building type"); + public lookup( + trefs: TypeRef | Iterable, + ): TypeRef | readonly TypeRef[] | undefined { + assert( + !this._wasUsed, + "Cannot lookup constituents after building type", + ); if (isTypeRef(trefs)) { return this._typeBuilder.lookupTypeRefs([trefs], undefined, false); - } else { - const maybeRefs = Array.from(trefs).map(tref => this._typeBuilder.lookupTypeRefs([tref], undefined, false)); - if (maybeRefs.some(tref => tref === undefined)) return undefined; - return maybeRefs as readonly TypeRef[]; } + + const maybeRefs = Array.from(trefs).map((tref) => + this._typeBuilder.lookupTypeRefs([tref], undefined, false), + ); + if (maybeRefs.some((tref) => tref === undefined)) { + return undefined; + } + + return maybeRefs as readonly TypeRef[]; } - public lookupMap(trefs: ReadonlyMap): ReadonlyMap | undefined { + public lookupMap( + trefs: ReadonlyMap, + ): ReadonlyMap | undefined { const resultValues = this.lookup(trefs.values()); if (resultValues === undefined) return undefined; - assert(resultValues.length === trefs.size, "Didn't get back the correct number of types"); + assert( + resultValues.length === trefs.size, + "Didn't get back the correct number of types", + ); const result = new Map(); let i = 0; for (const k of trefs.keys()) { @@ -94,76 +128,118 @@ export class TypeReconstituter { public reconstitute(tref: TypeRef): TypeRef; public reconstitute(trefs: Iterable): readonly TypeRef[]; - public reconstitute(trefs: TypeRef | Iterable): TypeRef | readonly TypeRef[] { - assert(this._wasUsed, "Cannot reconstitute constituents before building type"); + public reconstitute( + trefs: TypeRef | Iterable, + ): TypeRef | readonly TypeRef[] { + assert( + this._wasUsed, + "Cannot reconstitute constituents before building type", + ); if (isTypeRef(trefs)) { return this._typeBuilder.reconstituteTypeRef(trefs); - } else { - return Array.from(trefs).map(tref => this._typeBuilder.reconstituteTypeRef(tref)); } + + return Array.from(trefs).map((tref) => + this._typeBuilder.reconstituteTypeRef(tref), + ); } - public reconstituteMap(trefs: ReadonlyMap): ReadonlyMap { - return mapMap(trefs, tref => this._typeBuilder.reconstituteTypeRef(tref)); + public reconstituteMap( + trefs: ReadonlyMap, + ): ReadonlyMap { + return mapMap(trefs, (tref) => + this._typeBuilder.reconstituteTypeRef(tref), + ); } public getPrimitiveType(kind: PrimitiveTypeKind): void { - this.register(this.builderForNewType().getPrimitiveType(kind, this._typeAttributes, this._forwardingRef)); + this.register( + this.builderForNewType().getPrimitiveType( + kind, + this._typeAttributes, + this._forwardingRef, + ), + ); } public getEnumType(cases: ReadonlySet): void { - this.register(this.builderForNewType().getEnumType(this._typeAttributes, cases, this._forwardingRef)); + this.register( + this.builderForNewType().getEnumType( + this._typeAttributes, + cases, + this._forwardingRef, + ), + ); } public getUniqueMapType(): void { - this.registerAndAddAttributes(this.builderForNewType().getUniqueMapType(this._forwardingRef)); + this.registerAndAddAttributes( + this.builderForNewType().getUniqueMapType(this._forwardingRef), + ); } public getMapType(values: TypeRef): void { - this.register(this.builderForNewType().getMapType(this._typeAttributes, values, this._forwardingRef)); + this.register( + this.builderForNewType().getMapType( + this._typeAttributes, + values, + this._forwardingRef, + ), + ); } public getUniqueArrayType(): void { - this.registerAndAddAttributes(this.builderForNewType().getUniqueArrayType(this._forwardingRef)); + this.registerAndAddAttributes( + this.builderForNewType().getUniqueArrayType(this._forwardingRef), + ); } public getArrayType(items: TypeRef): void { - this.register(this.builderForNewType().getArrayType(this._typeAttributes, items, this._forwardingRef)); + this.register( + this.builderForNewType().getArrayType( + this._typeAttributes, + items, + this._forwardingRef, + ), + ); } public setArrayItems(items: TypeRef): void { this.builderForSetting().setArrayItems(this.getResult(), items); } - public makeClassProperty(tref: TypeRef, isOptional: boolean): ClassProperty { + public makeClassProperty( + tref: TypeRef, + isOptional: boolean, + ): ClassProperty { return this._typeBuilder.makeClassProperty(tref, isOptional); } public getObjectType( properties: ReadonlyMap, - additionalProperties: TypeRef | undefined + additionalProperties: TypeRef | undefined, ): void { this.register( this.builderForNewType().getUniqueObjectType( this._typeAttributes, properties, additionalProperties, - this._forwardingRef - ) + this._forwardingRef, + ), ); } public getUniqueObjectType( properties: ReadonlyMap | undefined, - additionalProperties: TypeRef | undefined + additionalProperties: TypeRef | undefined, ): void { this.register( this.builderForNewType().getUniqueObjectType( this._typeAttributes, properties, additionalProperties, - this._forwardingRef - ) + this._forwardingRef, + ), ); } @@ -173,48 +249,92 @@ export class TypeReconstituter { return; } - this.register(this.builderForNewType().getClassType(this._typeAttributes, properties, this._forwardingRef)); + this.register( + this.builderForNewType().getClassType( + this._typeAttributes, + properties, + this._forwardingRef, + ), + ); } - public getUniqueClassType(isFixed: boolean, properties: ReadonlyMap | undefined): void { + public getUniqueClassType( + isFixed: boolean, + properties: ReadonlyMap | undefined, + ): void { this.register( - this.builderForNewType().getUniqueClassType(this._typeAttributes, isFixed, properties, this._forwardingRef) + this.builderForNewType().getUniqueClassType( + this._typeAttributes, + isFixed, + properties, + this._forwardingRef, + ), ); } public setObjectProperties( properties: ReadonlyMap, - additionalProperties: TypeRef | undefined + additionalProperties: TypeRef | undefined, ): void { - this.builderForSetting().setObjectProperties(this.getResult(), properties, additionalProperties); + this.builderForSetting().setObjectProperties( + this.getResult(), + properties, + additionalProperties, + ); } public getUnionType(members: ReadonlySet): void { - this.register(this.builderForNewType().getUnionType(this._typeAttributes, members, this._forwardingRef)); + this.register( + this.builderForNewType().getUnionType( + this._typeAttributes, + members, + this._forwardingRef, + ), + ); } public getUniqueUnionType(): void { this.register( - this.builderForNewType().getUniqueUnionType(this._typeAttributes, undefined, this._forwardingRef) + this.builderForNewType().getUniqueUnionType( + this._typeAttributes, + undefined, + this._forwardingRef, + ), ); } public getIntersectionType(members: ReadonlySet): void { - this.register(this.builderForNewType().getIntersectionType(this._typeAttributes, members, this._forwardingRef)); + this.register( + this.builderForNewType().getIntersectionType( + this._typeAttributes, + members, + this._forwardingRef, + ), + ); } public getUniqueIntersectionType(members?: ReadonlySet): void { this.register( - this.builderForNewType().getUniqueIntersectionType(this._typeAttributes, members, this._forwardingRef) + this.builderForNewType().getUniqueIntersectionType( + this._typeAttributes, + members, + this._forwardingRef, + ), ); } public setSetOperationMembers(members: ReadonlySet): void { - this.builderForSetting().setSetOperationMembers(this.getResult(), members); + this.builderForSetting().setSetOperationMembers( + this.getResult(), + members, + ); } } -export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements TypeLookerUp { +export abstract class BaseGraphRewriteBuilder + extends TypeBuilder + implements TypeLookerUp +{ protected readonly reconstitutedTypes: Map = new Map(); private _lostTypeAttributes = false; @@ -226,20 +346,20 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, graphHasProvenanceAttributes: boolean, - protected readonly debugPrint: boolean + protected readonly debugPrint: boolean, ) { super( stringTypeMapping, alphabetizeProperties, false, false, - graphHasProvenanceAttributes + graphHasProvenanceAttributes, ); } public withForwardingRef( maybeForwardingRef: TypeRef | undefined, - typeCreator: (forwardingRef: TypeRef) => TypeRef + typeCreator: (forwardingRef: TypeRef) => TypeRef, ): TypeRef { if (maybeForwardingRef !== undefined) { return typeCreator(maybeForwardingRef); @@ -247,29 +367,36 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ const forwardingRef = this.reserveTypeRef(); const actualRef = typeCreator(forwardingRef); - assert(actualRef === forwardingRef, "Type creator didn't return its forwarding ref"); + assert( + actualRef === forwardingRef, + "Type creator didn't return its forwarding ref", + ); return actualRef; } - public reconstituteType(t: Type, attributes?: TypeAttributes, forwardingRef?: TypeRef): TypeRef { + public reconstituteType( + t: Type, + attributes?: TypeAttributes, + forwardingRef?: TypeRef, + ): TypeRef { return this.reconstituteTypeRef(t.typeRef, attributes, forwardingRef); } public abstract lookupTypeRefs( typeRefs: TypeRef[], forwardingRef?: TypeRef, - replaceSet?: boolean + replaceSet?: boolean, ): TypeRef | undefined; protected abstract forceReconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, - maybeForwardingRef?: TypeRef + maybeForwardingRef?: TypeRef, ): TypeRef; public reconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, - maybeForwardingRef?: TypeRef + maybeForwardingRef?: TypeRef, ): TypeRef { const maybeRef = this.lookupTypeRefs([originalRef], maybeForwardingRef); if (maybeRef !== undefined) { @@ -280,15 +407,27 @@ export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements Typ return maybeRef; } - return this.forceReconstituteTypeRef(originalRef, attributes, maybeForwardingRef); + return this.forceReconstituteTypeRef( + originalRef, + attributes, + maybeForwardingRef, + ); } - public reconstituteTypeAttributes(attributes: TypeAttributes): TypeAttributes { + public reconstituteTypeAttributes( + attributes: TypeAttributes, + ): TypeAttributes { return mapMap(attributes, (v, a) => a.reconstitute(this, v)); } - protected assertTypeRefsToReconstitute(typeRefs: TypeRef[], forwardingRef?: TypeRef): void { - assert(typeRefs.length > 0, "Must have at least one type to reconstitute"); + protected assertTypeRefsToReconstitute( + typeRefs: TypeRef[], + forwardingRef?: TypeRef, + ): void { + assert( + typeRefs.length > 0, + "Must have at least one type to reconstitute", + ); for (const originalRef of typeRefs) { assertTypeRefGraph(originalRef, this.originalGraph); } @@ -332,14 +471,14 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { alphabetizeProperties: boolean, graphHasProvenanceAttributes: boolean, private readonly _map: ReadonlyMap, - debugPrintRemapping: boolean + debugPrintRemapping: boolean, ) { super( originalGraph, stringTypeMapping, alphabetizeProperties, graphHasProvenanceAttributes, - debugPrintRemapping + debugPrintRemapping, ); for (const [source, target] of _map) { @@ -360,24 +499,42 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { private getMapTarget(tref: TypeRef): TypeRef { const maybeType = this._map.get(derefTypeRef(tref, this.originalGraph)); if (maybeType === undefined) return tref; - assert(this._map.get(maybeType) === undefined, "We have a type that's remapped to a remapped type"); + assert( + this._map.get(maybeType) === undefined, + "We have a type that's remapped to a remapped type", + ); return maybeType.typeRef; } - protected addForwardingIntersection(_forwardingRef: TypeRef, _tref: TypeRef): TypeRef { - return panic("We can't add forwarding intersections when we're removing forwarding intersections"); + protected addForwardingIntersection( + _forwardingRef: TypeRef, + _tref: TypeRef, + ): TypeRef { + return panic( + "We can't add forwarding intersections when we're removing forwarding intersections", + ); } - public lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef): TypeRef | undefined { - assert(forwardingRef === undefined, "We can't have a forwarding ref when we remap"); + public lookupTypeRefs( + typeRefs: TypeRef[], + forwardingRef?: TypeRef, + ): TypeRef | undefined { + assert( + forwardingRef === undefined, + "We can't have a forwarding ref when we remap", + ); this.assertTypeRefsToReconstitute(typeRefs, forwardingRef); - const first = this.reconstitutedTypes.get(typeRefIndex(this.getMapTarget(typeRefs[0]))); + const first = this.reconstitutedTypes.get( + typeRefIndex(this.getMapTarget(typeRefs[0])), + ); if (first === undefined) return undefined; for (let i = 1; i < typeRefs.length; i++) { - const other = this.reconstitutedTypes.get(typeRefIndex(this.getMapTarget(typeRefs[i]))); + const other = this.reconstitutedTypes.get( + typeRefIndex(this.getMapTarget(typeRefs[i])), + ); if (first !== other) return undefined; } @@ -387,24 +544,33 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { protected forceReconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, - maybeForwardingRef?: TypeRef + maybeForwardingRef?: TypeRef, ): TypeRef { originalRef = this.getMapTarget(originalRef); const index = typeRefIndex(originalRef); - assert(this.reconstitutedTypes.get(index) === undefined, "Type has already been reconstituted"); + assert( + this.reconstitutedTypes.get(index) === undefined, + "Type has already been reconstituted", + ); - assert(maybeForwardingRef === undefined, "We can't have a forwarding ref when we remap"); + assert( + maybeForwardingRef === undefined, + "We can't have a forwarding ref when we remap", + ); - return this.withForwardingRef(undefined, forwardingRef => { + return this.withForwardingRef(undefined, (forwardingRef) => { this.reconstitutedTypes.set(index, forwardingRef); if (this.debugPrint) { - console.log(`${this.debugPrintIndentation}reconstituting ${index} as ${typeRefIndex(forwardingRef)}`); + console.log( + `${this.debugPrintIndentation}reconstituting ${index} as ${typeRefIndex(forwardingRef)}`, + ); this.changeDebugPrintIndent(1); } - const [originalType, originalAttributes] = typeAndAttributesForTypeRef(originalRef, this.originalGraph); + const [originalType, originalAttributes] = + typeAndAttributesForTypeRef(originalRef, this.originalGraph); const attributeSources = this._attributeSources.get(originalType); if (attributes === undefined) { @@ -415,13 +581,15 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { attributes = combineTypeAttributes( "union", attributes, - this.reconstituteTypeAttributes(originalAttributes) + this.reconstituteTypeAttributes(originalAttributes), ); } else { attributes = combineTypeAttributes( "union", attributes, - this.reconstituteTypeAttributes(combineTypeAttributesOfTypes("union", attributeSources)) + this.reconstituteTypeAttributes( + combineTypeAttributesOfTypes("union", attributeSources), + ), ); } @@ -432,13 +600,18 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { this.canonicalOrder, newAttributes, forwardingRef, - tref => { - assert(tref === forwardingRef, "Reconstituted type as a different ref"); + (tref) => { + assert( + tref === forwardingRef, + "Reconstituted type as a different ref", + ); if (this.debugPrint) { this.changeDebugPrintIndent(-1); - console.log(`${this.debugPrintIndentation}reconstituted ${index} as ${typeRefIndex(tref)}`); + console.log( + `${this.debugPrintIndentation}reconstituted ${index} as ${typeRefIndex(tref)}`, + ); } - } + }, ); originalType.reconstitute(reconstituter, this.canonicalOrder); return reconstituter.getResult(); @@ -446,10 +619,13 @@ export class GraphRemapBuilder extends BaseGraphRewriteBuilder { } } -export class GraphRewriteBuilder extends BaseGraphRewriteBuilder { +export class GraphRewriteBuilder< + T extends Type, +> extends BaseGraphRewriteBuilder { private readonly _setsToReplaceByMember: Map>; - private readonly _reconstitutedUnions: EqualityMap, TypeRef> = new EqualityMap(); + private readonly _reconstitutedUnions: EqualityMap, TypeRef> = + new EqualityMap(); public constructor( originalGraph: TypeGraph, @@ -461,15 +637,15 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder private readonly _replacer: ( typesToReplace: ReadonlySet, builder: GraphRewriteBuilder, - forwardingRef: TypeRef - ) => TypeRef + forwardingRef: TypeRef, + ) => TypeRef, ) { super( originalGraph, stringTypeMapping, alphabetizeProperties, graphHasProvenanceAttributes, - debugPrintReconstitution + debugPrintReconstitution, ); this._setsToReplaceByMember = new Map(); @@ -477,7 +653,10 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder const set = new Set(types); for (const t of set) { const index = t.index; - assert(!this._setsToReplaceByMember.has(index), "A type is member of more than one set to be replaced"); + assert( + !this._setsToReplaceByMember.has(index), + "A type is member of more than one set to be replaced", + ); this._setsToReplaceByMember.set(index, set); } } @@ -485,17 +664,25 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder public registerUnion(typeRefs: TypeRef[], reconstituted: TypeRef): void { const set = new Set(typeRefs); - assert(!this._reconstitutedUnions.has(set), "Cannot register reconstituted set twice"); + assert( + !this._reconstitutedUnions.has(set), + "Cannot register reconstituted set twice", + ); this._reconstitutedUnions.set(set, reconstituted); } - private replaceSet(typesToReplace: ReadonlySet, maybeForwardingRef: TypeRef | undefined): TypeRef { - return this.withForwardingRef(maybeForwardingRef, forwardingRef => { + private replaceSet( + typesToReplace: ReadonlySet, + maybeForwardingRef: TypeRef | undefined, + ): TypeRef { + return this.withForwardingRef(maybeForwardingRef, (forwardingRef) => { if (this.debugPrint) { console.log( - `${this.debugPrintIndentation}replacing set ${Array.from(typesToReplace) - .map(t => t.index.toString()) - .join(",")} as ${typeRefIndex(forwardingRef)}` + `${this.debugPrintIndentation}replacing set ${Array.from( + typesToReplace, + ) + .map((t) => t.index.toString()) + .join(",")} as ${typeRefIndex(forwardingRef)}`, ); this.changeDebugPrintIndent(1); } @@ -508,14 +695,19 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder } const result = this._replacer(typesToReplace, this, forwardingRef); - assert(result === forwardingRef, "The forwarding ref got lost when replacing"); + assert( + result === forwardingRef, + "The forwarding ref got lost when replacing", + ); if (this.debugPrint) { this.changeDebugPrintIndent(-1); console.log( - `${this.debugPrintIndentation}replaced set ${Array.from(typesToReplace) - .map(t => t.index.toString()) - .join(",")} as ${typeRefIndex(forwardingRef)}` + `${this.debugPrintIndentation}replaced set ${Array.from( + typesToReplace, + ) + .map((t) => t.index.toString()) + .join(",")} as ${typeRefIndex(forwardingRef)}`, ); } @@ -526,9 +718,12 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder protected forceReconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, - maybeForwardingRef?: TypeRef + maybeForwardingRef?: TypeRef, ): TypeRef { - const [originalType, originalAttributes] = typeAndAttributesForTypeRef(originalRef, this.originalGraph); + const [originalType, originalAttributes] = typeAndAttributesForTypeRef( + originalRef, + this.originalGraph, + ); const index = typeRefIndex(originalRef); if (this.debugPrint) { @@ -542,27 +737,42 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder attributes = combineTypeAttributes( "union", attributes, - this.reconstituteTypeAttributes(originalAttributes) + this.reconstituteTypeAttributes(originalAttributes), ); } - const reconstituter = new TypeReconstituter(this, this.canonicalOrder, attributes, maybeForwardingRef, tref => { - if (this.debugPrint) { - this.changeDebugPrintIndent(-1); - console.log(`${this.debugPrintIndentation}reconstituted ${index} as ${typeRefIndex(tref)}`); - } + const reconstituter = new TypeReconstituter( + this, + this.canonicalOrder, + attributes, + maybeForwardingRef, + (tref) => { + if (this.debugPrint) { + this.changeDebugPrintIndent(-1); + console.log( + `${this.debugPrintIndentation}reconstituted ${index} as ${typeRefIndex(tref)}`, + ); + } - if (maybeForwardingRef !== undefined) { - assert(tref === maybeForwardingRef, "We didn't pass the forwarding ref"); - } + if (maybeForwardingRef !== undefined) { + assert( + tref === maybeForwardingRef, + "We didn't pass the forwarding ref", + ); + } - const alreadyReconstitutedType = this.reconstitutedTypes.get(index); - if (alreadyReconstitutedType === undefined) { - this.reconstitutedTypes.set(index, tref); - } else { - assert(tref === alreadyReconstitutedType, "We reconstituted a type twice differently"); - } - }); + const alreadyReconstitutedType = + this.reconstitutedTypes.get(index); + if (alreadyReconstitutedType === undefined) { + this.reconstitutedTypes.set(index, tref); + } else { + assert( + tref === alreadyReconstitutedType, + "We reconstituted a type twice differently", + ); + } + }, + ); originalType.reconstitute(reconstituter, this.canonicalOrder); return reconstituter.getResult(); } @@ -583,7 +793,11 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder // If the union of these type refs have been, or are supposed to be, reconstituted to // one target type, return it. Otherwise return undefined. - public lookupTypeRefs(typeRefs: TypeRef[], forwardingRef?: TypeRef, replaceSet = true): TypeRef | undefined { + public lookupTypeRefs( + typeRefs: TypeRef[], + forwardingRef?: TypeRef, + replaceSet = true, + ): TypeRef | undefined { this.assertTypeRefsToReconstitute(typeRefs, forwardingRef); // Check whether we have already reconstituted them. That means ensuring @@ -592,7 +806,10 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder if (maybeRef !== undefined && maybeRef !== forwardingRef) { let allEqual = true; for (let i = 1; i < typeRefs.length; i++) { - if (this.reconstitutedTypes.get(typeRefIndex(typeRefs[i])) !== maybeRef) { + if ( + this.reconstitutedTypes.get(typeRefIndex(typeRefs[i])) !== + maybeRef + ) { allEqual = false; break; } @@ -610,13 +827,18 @@ export class GraphRewriteBuilder extends BaseGraphRewriteBuilder } // Is this set requested to be replaced? If not, we're out of options. - const maybeSet = this._setsToReplaceByMember.get(typeRefIndex(typeRefs[0])); + const maybeSet = this._setsToReplaceByMember.get( + typeRefIndex(typeRefs[0]), + ); if (maybeSet === undefined) { return undefined; } for (let i = 1; i < typeRefs.length; i++) { - if (this._setsToReplaceByMember.get(typeRefIndex(typeRefs[i])) !== maybeSet) { + if ( + this._setsToReplaceByMember.get(typeRefIndex(typeRefs[i])) !== + maybeSet + ) { return undefined; } } diff --git a/packages/quicktype-core/src/Inference.ts b/packages/quicktype-core/src/Inference.ts new file mode 100644 index 000000000..94bf2e829 --- /dev/null +++ b/packages/quicktype-core/src/Inference.ts @@ -0,0 +1,97 @@ +import type { TransformedStringTypeKind } from "./Type"; + +export interface InferenceFlag { + description: string; + explanation: string; + negationDescription: string; + order: number; + stringType?: TransformedStringTypeKind; +} + +export const inferenceFlagsObject = { + /** Whether to infer map types from JSON data */ + inferMaps: { + description: "Detect maps", + negationDescription: "Don't infer maps, always use classes", + explanation: "Infer maps when object keys look like map keys.", + order: 1, + }, + /** Whether to infer enum types from JSON data */ + inferEnums: { + description: "Detect enums", + negationDescription: "Don't infer enums, always use strings", + explanation: + "If string values occur within a relatively small domain,\ninfer them as enum values.", + order: 2, + }, + /** Whether to convert UUID strings to UUID objects */ + inferUuids: { + description: "Detect UUIDs", + negationDescription: "Don't convert UUIDs to UUID objects", + explanation: + "Detect UUIDs like '123e4567-e89b-12d3-a456-426655440000' (partial support).", + stringType: "uuid" as TransformedStringTypeKind, + order: 3, + }, + /** Whether to assume that JSON strings that look like dates are dates */ + inferDateTimes: { + description: "Detect dates & times", + negationDescription: "Don't infer dates or times", + explanation: "Infer dates from strings (partial support).", + stringType: "date-time" as TransformedStringTypeKind, + order: 4, + }, + /** Whether to convert stringified integers to integers */ + inferIntegerStrings: { + description: "Detect integers in strings", + negationDescription: "Don't convert stringified integers to integers", + explanation: + 'Automatically convert stringified integers to integers.\nFor example, "1" is converted to 1.', + stringType: "integer-string" as TransformedStringTypeKind, + order: 5, + }, + /** Whether to convert stringified booleans to boolean values */ + inferBooleanStrings: { + description: "Detect booleans in strings", + negationDescription: "Don't convert stringified booleans to booleans", + explanation: + 'Automatically convert stringified booleans to booleans.\nFor example, "true" is converted to true.', + stringType: "bool-string" as TransformedStringTypeKind, + order: 6, + }, + /** Combine similar classes. This doesn't apply to classes from a schema, only from inference. */ + combineClasses: { + description: "Merge similar classes", + negationDescription: "Don't combine similar classes", + explanation: + "Combine classes with significantly overlapping properties,\ntreating contingent properties as nullable.", + order: 7, + }, + /** Whether to treat $ref as references within JSON */ + ignoreJsonRefs: { + description: "Don't treat $ref as a reference in JSON", + negationDescription: "Treat $ref as a reference in JSON", + explanation: + "Like in JSON Schema, allow objects like\n'{ $ref: \"#/foo/bar\" }' to refer\nto another part of the input.", + order: 8, + }, +}; +export type InferenceFlagName = keyof typeof inferenceFlagsObject; +export const inferenceFlagNames = Object.getOwnPropertyNames( + inferenceFlagsObject, +) as InferenceFlagName[]; +export const inferenceFlags: { [F in InferenceFlagName]: InferenceFlag } = + inferenceFlagsObject; + +export type InferenceFlags = { [F in InferenceFlagName]: boolean }; + +function makeDefaultInferenceFlags(): InferenceFlags { + const flags = {} as InferenceFlags; + for (const flag of inferenceFlagNames) { + flags[flag] = true; + } + + return flags; +} + +export const defaultInferenceFlags = makeDefaultInferenceFlags(); diff --git a/packages/quicktype-core/src/MakeTransformations.ts b/packages/quicktype-core/src/MakeTransformations.ts index bc42e628b..9707357a3 100644 --- a/packages/quicktype-core/src/MakeTransformations.ts +++ b/packages/quicktype-core/src/MakeTransformations.ts @@ -1,12 +1,26 @@ -import { arraySortByInto, iterableFirst, iterableSome, mapMapEntries, setFilter, withDefault } from "collection-utils"; +import { + arraySortByInto, + iterableFirst, + iterableSome, + mapMapEntries, + setFilter, + withDefault, +} from "collection-utils"; -import { minMaxLengthForType, minMaxValueForType } from "./attributes/Constraints"; +import { + minMaxLengthForType, + minMaxValueForType, +} from "./attributes/Constraints"; import { StringTypes } from "./attributes/StringTypes"; -import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; -import { type GraphRewriteBuilder } from "./GraphRewriting"; -import { type RunContext } from "./Run"; +import { + type TypeAttributes, + combineTypeAttributes, + emptyTypeAttributes, +} from "./attributes/TypeAttributes"; +import type { GraphRewriteBuilder } from "./GraphRewriting"; +import type { RunContext } from "./Run"; import { assert, defined, panic } from "./support/Support"; -import { type TargetLanguage } from "./TargetLanguage"; +import type { TargetLanguage } from "./TargetLanguage"; import { ArrayDecodingTransformer, ChoiceTransformer, @@ -20,7 +34,7 @@ import { Transformation, type Transformer, UnionInstantiationTransformer, - transformationTypeAttributeKind + transformationTypeAttributeKind, } from "./Transformers"; import { ArrayType, @@ -32,20 +46,26 @@ import { UnionType, isNumberTypeKind, isPrimitiveStringTypeKind, - targetTypeKindForTransformedStringTypeKind + targetTypeKindForTransformedStringTypeKind, } from "./Type"; -import { type TypeGraph } from "./Type/TypeGraph"; +import type { TypeGraph } from "./Type/TypeGraph"; import { type TypeRef, typeRefIndex } from "./Type/TypeRef"; function transformationAttributes( graph: TypeGraph, reconstitutedTargetType: TypeRef, transformer: Transformer, - debugPrintTransformations: boolean + debugPrintTransformations: boolean, ): TypeAttributes { - const transformation = new Transformation(graph, reconstitutedTargetType, transformer); + const transformation = new Transformation( + graph, + reconstitutedTargetType, + transformer, + ); if (debugPrintTransformations) { - console.log(`transformation for ${typeRefIndex(reconstitutedTargetType)}:`); + console.log( + `transformation for ${typeRefIndex(reconstitutedTargetType)}:`, + ); transformation.debugPrint(); console.log("reverse:"); transformation.reverse.debugPrint(); @@ -58,17 +78,22 @@ function makeEnumTransformer( graph: TypeGraph, enumType: EnumType, stringType: TypeRef, - continuation?: Transformer + continuation?: Transformer, ): Transformer { const sortedCases = Array.from(enumType.cases).sort(); const caseTransformers = sortedCases.map( - c => + (c) => new StringMatchTransformer( graph, stringType, - new StringProducerTransformer(graph, stringType, continuation, c), - c - ) + new StringProducerTransformer( + graph, + stringType, + continuation, + c, + ), + c, + ), ); return new ChoiceTransformer(graph, stringType, caseTransformers); } @@ -78,7 +103,7 @@ function replaceUnion( builder: GraphRewriteBuilder, forwardingRef: TypeRef, transformedTypes: Set, - debugPrintTransformations: boolean + debugPrintTransformations: boolean, ): TypeRef { const graph = builder.typeGraph; @@ -92,10 +117,16 @@ function replaceUnion( // the union must be the target type, so if one already exists, use that // one, otherwise make a new one. if (isPrimitiveStringTypeKind(t.kind)) { - const targetTypeKind = targetTypeKindForTransformedStringTypeKind(t.kind); + const targetTypeKind = targetTypeKindForTransformedStringTypeKind( + t.kind, + ); if (targetTypeKind !== undefined) { const targetTypeMember = union.findMember(targetTypeKind); - additionalAttributes = combineTypeAttributes("union", additionalAttributes, t.getAttributes()); + additionalAttributes = combineTypeAttributes( + "union", + additionalAttributes, + t.getAttributes(), + ); if (targetTypeMember !== undefined) { return builder.reconstituteType(targetTypeMember); } @@ -107,7 +138,10 @@ function replaceUnion( return builder.reconstituteType(t); } - const reconstitutedMembersByKind = mapMapEntries(union.members.entries(), m => [m.kind, reconstituteMember(m)]); + const reconstitutedMembersByKind = mapMapEntries( + union.members.entries(), + (m) => [m.kind, reconstituteMember(m)], + ); const reconstitutedMemberSet = new Set(reconstitutedMembersByKind.values()); const haveUnion = reconstitutedMemberSet.size > 1; @@ -128,17 +162,26 @@ function replaceUnion( return new UnionInstantiationTransformer(graph, memberTypeRef); } - function transformerForKind(kind: TypeKind): DecodingTransformer | undefined { + function transformerForKind( + kind: TypeKind, + ): DecodingTransformer | undefined { const member = union.findMember(kind); if (member === undefined) return undefined; const memberTypeRef = memberForKind(kind); - return new DecodingTransformer(graph, memberTypeRef, consumer(memberTypeRef)); + return new DecodingTransformer( + graph, + memberTypeRef, + consumer(memberTypeRef), + ); } let maybeStringType: TypeRef | undefined = undefined; function getStringType(): TypeRef { if (maybeStringType === undefined) { - maybeStringType = builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted); + maybeStringType = builder.getStringType( + emptyTypeAttributes, + StringTypes.unrestricted, + ); } return maybeStringType; @@ -153,21 +196,44 @@ function replaceUnion( } const [min, max] = minMax; - return new MinMaxLengthCheckTransformer(graph, getStringType(), consumer(memberRef), min, max); - } else if (t instanceof EnumType && transformedTypes.has(t)) { - return makeEnumTransformer(graph, t, getStringType(), consumer(memberRef)); - } else { - return new ParseStringTransformer(graph, getStringType(), consumer(memberRef)); + return new MinMaxLengthCheckTransformer( + graph, + getStringType(), + consumer(memberRef), + min, + max, + ); } + if (t instanceof EnumType && transformedTypes.has(t)) { + return makeEnumTransformer( + graph, + t, + getStringType(), + consumer(memberRef), + ); + } + + return new ParseStringTransformer( + graph, + getStringType(), + consumer(memberRef), + ); } - const stringTypes = arraySortByInto(Array.from(union.stringTypeMembers), t => t.kind); + const stringTypes = arraySortByInto( + Array.from(union.stringTypeMembers), + (t) => t.kind, + ); let transformerForString: Transformer | undefined; if (stringTypes.length === 0) { transformerForString = undefined; } else if (stringTypes.length === 1) { const t = stringTypes[0]; - transformerForString = new DecodingTransformer(graph, getStringType(), transformerForStringType(t)); + transformerForString = new DecodingTransformer( + graph, + getStringType(), + transformerForStringType(t), + ); } else { transformerForString = new DecodingTransformer( graph, @@ -175,8 +241,8 @@ function replaceUnion( new ChoiceTransformer( graph, getStringType(), - stringTypes.map(t => defined(transformerForStringType(t))) - ) + stringTypes.map((t) => defined(transformerForStringType(t))), + ), ); } @@ -184,7 +250,7 @@ function replaceUnion( const transformerForMap = transformerForKind("map"); assert( transformerForClass === undefined || transformerForMap === undefined, - "Can't have both class and map in a transformed union" + "Can't have both class and map in a transformed union", ); const transformerForObject = transformerForClass ?? transformerForMap; @@ -197,13 +263,18 @@ function replaceUnion( transformerForKind("bool"), transformerForString, transformerForKind("array"), - transformerForObject + transformerForObject, + ); + const attributes = transformationAttributes( + graph, + reconstitutedTargetType, + transformer, + debugPrintTransformations, ); - const attributes = transformationAttributes(graph, reconstitutedTargetType, transformer, debugPrintTransformations); return builder.getPrimitiveType( "any", combineTypeAttributes("union", attributes, additionalAttributes), - forwardingRef + forwardingRef, ); } @@ -211,7 +282,7 @@ function replaceArray( arrayType: ArrayType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, - debugPrintTransformations: boolean + debugPrintTransformations: boolean, ): TypeRef { const anyType = builder.getPrimitiveType("any"); const anyArrayType = builder.getArrayType(emptyTypeAttributes, anyType); @@ -221,19 +292,19 @@ function replaceArray( anyArrayType, undefined, reconstitutedItems, - new DecodingTransformer(builder.typeGraph, anyType, undefined) + new DecodingTransformer(builder.typeGraph, anyType, undefined), ); const reconstitutedArray = builder.getArrayType( builder.reconstituteTypeAttributes(arrayType.getAttributes()), - reconstitutedItems + reconstitutedItems, ); const attributes = transformationAttributes( builder.typeGraph, reconstitutedArray, transformer, - debugPrintTransformations + debugPrintTransformations, ); return builder.getArrayType(attributes, anyType, forwardingRef); @@ -243,43 +314,64 @@ function replaceEnum( enumType: EnumType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, - debugPrintTransformations: boolean + debugPrintTransformations: boolean, ): TypeRef { - const stringType = builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted); + const stringType = builder.getStringType( + emptyTypeAttributes, + StringTypes.unrestricted, + ); const transformer = new DecodingTransformer( builder.typeGraph, stringType, - makeEnumTransformer(builder.typeGraph, enumType, stringType) + makeEnumTransformer(builder.typeGraph, enumType, stringType), + ); + const reconstitutedEnum = builder.getEnumType( + enumType.getAttributes(), + enumType.cases, ); - const reconstitutedEnum = builder.getEnumType(enumType.getAttributes(), enumType.cases); const attributes = transformationAttributes( builder.typeGraph, reconstitutedEnum, transformer, - debugPrintTransformations + debugPrintTransformations, + ); + return builder.getStringType( + attributes, + StringTypes.unrestricted, + forwardingRef, ); - return builder.getStringType(attributes, StringTypes.unrestricted, forwardingRef); } function replaceNumber( t: PrimitiveType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, - debugPrintTransformations: boolean + debugPrintTransformations: boolean, ): TypeRef { - const stringType = builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted); + const stringType = builder.getStringType( + emptyTypeAttributes, + StringTypes.unrestricted, + ); const [min, max] = defined(minMaxValueForType(t)); const transformer = new DecodingTransformer( builder.typeGraph, stringType, - new MinMaxValueTransformer(builder.typeGraph, stringType, undefined, min, max) + new MinMaxValueTransformer( + builder.typeGraph, + stringType, + undefined, + min, + max, + ), + ); + const reconstitutedAttributes = builder.reconstituteTypeAttributes( + t.getAttributes(), ); - const reconstitutedAttributes = builder.reconstituteTypeAttributes(t.getAttributes()); const attributes = transformationAttributes( builder.typeGraph, builder.getPrimitiveType("double", reconstitutedAttributes, undefined), transformer, - debugPrintTransformations + debugPrintTransformations, ); return builder.getPrimitiveType("double", attributes, forwardingRef); } @@ -288,23 +380,38 @@ function replaceString( t: PrimitiveType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, - debugPrintTransformations: boolean + debugPrintTransformations: boolean, ): TypeRef { const [min, max] = defined(minMaxLengthForType(t)); - const reconstitutedAttributes = builder.reconstituteTypeAttributes(t.getAttributes()); - const stringType = builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted); + const reconstitutedAttributes = builder.reconstituteTypeAttributes( + t.getAttributes(), + ); + const stringType = builder.getStringType( + emptyTypeAttributes, + StringTypes.unrestricted, + ); const transformer = new DecodingTransformer( builder.typeGraph, stringType, - new MinMaxLengthCheckTransformer(builder.typeGraph, stringType, undefined, min, max) + new MinMaxLengthCheckTransformer( + builder.typeGraph, + stringType, + undefined, + min, + max, + ), ); const attributes = transformationAttributes( builder.typeGraph, builder.getStringType(reconstitutedAttributes, undefined), transformer, - debugPrintTransformations + debugPrintTransformations, + ); + return builder.getStringType( + attributes, + StringTypes.unrestricted, + forwardingRef, ); - return builder.getStringType(attributes, StringTypes.unrestricted, forwardingRef); } function replaceTransformedStringType( @@ -312,58 +419,102 @@ function replaceTransformedStringType( kind: PrimitiveStringTypeKind, builder: GraphRewriteBuilder, forwardingRef: TypeRef, - debugPrintTransformations: boolean + debugPrintTransformations: boolean, ): TypeRef { - const reconstitutedAttributes = builder.reconstituteTypeAttributes(t.getAttributes()); - const targetTypeKind = withDefault(targetTypeKindForTransformedStringTypeKind(kind), kind); - const stringType = builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted); + const reconstitutedAttributes = builder.reconstituteTypeAttributes( + t.getAttributes(), + ); + const targetTypeKind = withDefault( + targetTypeKindForTransformedStringTypeKind(kind), + kind, + ); + const stringType = builder.getStringType( + emptyTypeAttributes, + StringTypes.unrestricted, + ); const transformer = new DecodingTransformer( builder.typeGraph, stringType, - new ParseStringTransformer(builder.typeGraph, stringType, undefined) + new ParseStringTransformer(builder.typeGraph, stringType, undefined), ); const attributes = transformationAttributes( builder.typeGraph, builder.getPrimitiveType(targetTypeKind, reconstitutedAttributes), transformer, - debugPrintTransformations + debugPrintTransformations, + ); + return builder.getStringType( + attributes, + StringTypes.unrestricted, + forwardingRef, ); - return builder.getStringType(attributes, StringTypes.unrestricted, forwardingRef); } -export function makeTransformations(ctx: RunContext, graph: TypeGraph, targetLanguage: TargetLanguage): TypeGraph { - const transformedTypes = setFilter(graph.allTypesUnordered(), t => { +export function makeTransformations( + ctx: RunContext, + graph: TypeGraph, + targetLanguage: TargetLanguage, +): TypeGraph { + const transformedTypes = setFilter(graph.allTypesUnordered(), (t) => { if (targetLanguage.needsTransformerForType(t)) return true; if (!(t instanceof UnionType)) return false; const stringMembers = t.stringTypeMembers; if (stringMembers.size <= 1) return false; - return iterableSome(stringMembers, m => targetLanguage.needsTransformerForType(m)); + return iterableSome(stringMembers, (m) => + targetLanguage.needsTransformerForType(m), + ); }); function replace( setOfOneUnion: ReadonlySet, builder: GraphRewriteBuilder, - forwardingRef: TypeRef + forwardingRef: TypeRef, ): TypeRef { const t = defined(iterableFirst(setOfOneUnion)); if (t instanceof UnionType) { - return replaceUnion(t, builder, forwardingRef, transformedTypes, ctx.debugPrintTransformations); + return replaceUnion( + t, + builder, + forwardingRef, + transformedTypes, + ctx.debugPrintTransformations, + ); } if (t instanceof ArrayType) { - return replaceArray(t, builder, forwardingRef, ctx.debugPrintTransformations); + return replaceArray( + t, + builder, + forwardingRef, + ctx.debugPrintTransformations, + ); } if (t instanceof EnumType) { - return replaceEnum(t, builder, forwardingRef, ctx.debugPrintTransformations); + return replaceEnum( + t, + builder, + forwardingRef, + ctx.debugPrintTransformations, + ); } if (t.kind === "string") { - return replaceString(t as PrimitiveType, builder, forwardingRef, ctx.debugPrintTransformations); + return replaceString( + t as PrimitiveType, + builder, + forwardingRef, + ctx.debugPrintTransformations, + ); } if (isNumberTypeKind(t.kind)) { - return replaceNumber(t as PrimitiveType, builder, forwardingRef, ctx.debugPrintTransformations); + return replaceNumber( + t as PrimitiveType, + builder, + forwardingRef, + ctx.debugPrintTransformations, + ); } if (isPrimitiveStringTypeKind(t.kind)) { @@ -372,20 +523,20 @@ export function makeTransformations(ctx: RunContext, graph: TypeGraph, targetLan t.kind, builder, forwardingRef, - ctx.debugPrintTransformations + ctx.debugPrintTransformations, ); } return panic(`Cannot make transformation for type ${t.kind}`); } - const groups = Array.from(transformedTypes).map(t => [t]); + const groups = Array.from(transformedTypes).map((t) => [t]); return graph.rewrite( "make-transformations", ctx.stringTypeMapping, false, groups, ctx.debugPrintReconstitution, - replace + replace, ); } diff --git a/packages/quicktype-core/src/MarkovChain.ts b/packages/quicktype-core/src/MarkovChain.ts index dec67dc1f..cd36d4b56 100644 --- a/packages/quicktype-core/src/MarkovChain.ts +++ b/packages/quicktype-core/src/MarkovChain.ts @@ -94,7 +94,10 @@ export function load(): MarkovChain { return JSON.parse(inflateBase64(encodedMarkovChain)); } -export function evaluateFull(mc: MarkovChain, word: string): [number, number[]] { +export function evaluateFull( + mc: MarkovChain, + word: string, +): [number, number[]] { const { trie, depth } = mc; if (word.length < depth) { return [1, []]; @@ -128,8 +131,15 @@ function randomInt(lower: number, upper: number): number { return lower + Math.floor(Math.random() * range); } -export function generate(mc: MarkovChain, state: string, unseenWeight: number): string { - assert(state.length === mc.depth - 1, "State and chain length don't match up"); +export function generate( + mc: MarkovChain, + state: string, + unseenWeight: number, +): string { + assert( + state.length === mc.depth - 1, + "State and chain length don't match up", + ); const t = lookup(mc.trie, state, 0); if (typeof t === "number") { return panic("Wrong depth?"); @@ -139,7 +149,9 @@ export function generate(mc: MarkovChain, state: string, unseenWeight: number): return String.fromCharCode(randomInt(32, 127)); } - const counts = t.arr.map((x, i) => (x === null ? (i === 0 ? 0 : unseenWeight) : (x as number))); + const counts = t.arr.map((x, i) => + x === null ? (i === 0 ? 0 : unseenWeight) : (x as number), + ); let n = 0; for (const c of counts) { n += c; @@ -185,6 +197,6 @@ export function test(): void { testWord( mc, - "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7" + "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7", ); } diff --git a/packages/quicktype-core/src/Messages.ts b/packages/quicktype-core/src/Messages.ts index 28407960a..285207c76 100644 --- a/packages/quicktype-core/src/Messages.ts +++ b/packages/quicktype-core/src/Messages.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { type Ref } from "./input/JSONSchemaInput"; -import { type StringMap } from "./support/Support"; +import type { Ref } from "./input/JSONSchemaInput"; +import type { StringMap } from "./support/Support"; export type ErrorProperties = | { kind: "InternalError"; properties: { message: string } } @@ -10,39 +10,87 @@ export type ErrorProperties = kind: "MiscJSONParseError"; properties: { address: string; description: string; message: string }; } - | { kind: "MiscReadError"; properties: { fileOrURL: string; message: string } } + | { + kind: "MiscReadError"; + properties: { fileOrURL: string; message: string }; + } | { kind: "MiscUnicodeHighSurrogateWithoutLowSurrogate"; properties: {} } - | { kind: "MiscInvalidMinMaxConstraint"; properties: { max: number; min: number } } + | { + kind: "MiscInvalidMinMaxConstraint"; + properties: { max: number; min: number }; + } // Inference - | { kind: "InferenceJSONReferenceNotRooted"; properties: { reference: string } } - | { kind: "InferenceJSONReferenceToUnion"; properties: { reference: string } } - | { kind: "InferenceJSONReferenceWrongProperty"; properties: { reference: string } } - | { kind: "InferenceJSONReferenceInvalidArrayIndex"; properties: { reference: string } } + | { + kind: "InferenceJSONReferenceNotRooted"; + properties: { reference: string }; + } + | { + kind: "InferenceJSONReferenceToUnion"; + properties: { reference: string }; + } + | { + kind: "InferenceJSONReferenceWrongProperty"; + properties: { reference: string }; + } + | { + kind: "InferenceJSONReferenceInvalidArrayIndex"; + properties: { reference: string }; + } // JSON Schema input | { kind: "SchemaArrayIsInvalidSchema"; properties: { ref: Ref } } | { kind: "SchemaNullIsInvalidSchema"; properties: { ref: Ref } } - | { kind: "SchemaRefMustBeString"; properties: { actual: string; ref: Ref } } + | { + kind: "SchemaRefMustBeString"; + properties: { actual: string; ref: Ref }; + } | { kind: "SchemaAdditionalTypesForbidRequired"; properties: { ref: Ref } } | { kind: "SchemaNoTypeSpecified"; properties: { ref: Ref } } | { kind: "SchemaInvalidType"; properties: { ref: Ref; type: string } } | { kind: "SchemaFalseNotSupported"; properties: { ref: Ref } } - | { kind: "SchemaInvalidJSONSchemaType"; properties: { ref: Ref; type: string } } - | { kind: "SchemaRequiredMustBeStringOrStringArray"; properties: { actual: any; ref: Ref } } - | { kind: "SchemaRequiredElementMustBeString"; properties: { element: any; ref: Ref } } - | { kind: "SchemaTypeMustBeStringOrStringArray"; properties: { actual: any } } - | { kind: "SchemaTypeElementMustBeString"; properties: { element: any; ref: Ref } } - | { kind: "SchemaArrayItemsMustBeStringOrArray"; properties: { actual: any; ref: Ref } } + | { + kind: "SchemaInvalidJSONSchemaType"; + properties: { ref: Ref; type: string }; + } + | { + kind: "SchemaRequiredMustBeStringOrStringArray"; + properties: { actual: any; ref: Ref }; + } + | { + kind: "SchemaRequiredElementMustBeString"; + properties: { element: any; ref: Ref }; + } + | { + kind: "SchemaTypeMustBeStringOrStringArray"; + properties: { actual: any }; + } + | { + kind: "SchemaTypeElementMustBeString"; + properties: { element: any; ref: Ref }; + } + | { + kind: "SchemaArrayItemsMustBeStringOrArray"; + properties: { actual: any; ref: Ref }; + } | { kind: "SchemaIDMustHaveAddress"; properties: { id: string; ref: Ref } } - | { kind: "SchemaWrongAccessorEntryArrayLength"; properties: { operation: string; ref: Ref } } + | { + kind: "SchemaWrongAccessorEntryArrayLength"; + properties: { operation: string; ref: Ref }; + } | { kind: "SchemaSetOperationCasesIsNotArray"; properties: { cases: any; operation: string; ref: Ref }; } - | { kind: "SchemaMoreThanOneUnionMemberName"; properties: { names: string[] } } + | { + kind: "SchemaMoreThanOneUnionMemberName"; + properties: { names: string[] }; + } | { kind: "SchemaCannotGetTypesFromBoolean"; properties: { ref: string } } - | { kind: "SchemaCannotIndexArrayWithNonNumber"; properties: { actual: string; ref: Ref } } + | { + kind: "SchemaCannotIndexArrayWithNonNumber"; + properties: { actual: string; ref: Ref }; + } | { kind: "SchemaIndexNotInArray"; properties: { index: number; ref: Ref } } | { kind: "SchemaKeyNotInObject"; properties: { key: string; ref: Ref } } | { kind: "SchemaFetchError"; properties: { address: string; base: Ref } } @@ -59,11 +107,17 @@ export type ErrorProperties = | { kind: "DriverCannotInferNameForSchema"; properties: { uri: string } } | { kind: "DriverNoGraphQLQueryGiven"; properties: {} } | { kind: "DriverNoGraphQLSchemaInDir"; properties: { dir: string } } - | { kind: "DriverMoreThanOneGraphQLSchemaInDir"; properties: { dir: string } } + | { + kind: "DriverMoreThanOneGraphQLSchemaInDir"; + properties: { dir: string }; + } | { kind: "DriverSourceLangMustBeGraphQL"; properties: {} } | { kind: "DriverGraphQLSchemaNeeded"; properties: {} } | { kind: "DriverInputFileDoesNotExist"; properties: { filename: string } } - | { kind: "DriverCannotMixJSONWithOtherSamples"; properties: { dir: string } } + | { + kind: "DriverCannotMixJSONWithOtherSamples"; + properties: { dir: string }; + } | { kind: "DriverCannotMixNonJSONInputs"; properties: { dir: string } } | { kind: "DriverUnknownDebugOption"; properties: { option: string } } | { kind: "DriverNoLanguageOrExtension"; properties: {} } @@ -71,11 +125,17 @@ export type ErrorProperties = // IR | { kind: "IRNoForwardDeclarableTypeInCycle"; properties: {} } - | { kind: "IRTypeAttributesNotPropagated"; properties: { count: number; indexes: number[] } } + | { + kind: "IRTypeAttributesNotPropagated"; + properties: { count: number; indexes: number[] }; + } | { kind: "IRNoEmptyUnions"; properties: {} } // Rendering - | { kind: "RendererUnknownOptionValue"; properties: { name: string; value: string } } + | { + kind: "RendererUnknownOptionValue"; + properties: { name: string; value: string }; + } // TypeScript input | { kind: "TypeScriptCompilerError"; properties: { message: string } }; @@ -88,45 +148,62 @@ const errorMessages: ErrorMessages = { InternalError: "Internal error: ${message}", // Misc - MiscJSONParseError: "Syntax error in ${description} JSON ${address}: ${message}", + MiscJSONParseError: + "Syntax error in ${description} JSON ${address}: ${message}", MiscReadError: "Cannot read from file or URL ${fileOrURL}: ${message}", - MiscUnicodeHighSurrogateWithoutLowSurrogate: "Malformed unicode: High surrogate not followed by low surrogate", + MiscUnicodeHighSurrogateWithoutLowSurrogate: + "Malformed unicode: High surrogate not followed by low surrogate", MiscInvalidMinMaxConstraint: "Invalid min-max constraint: ${min}-${max}", // Inference - InferenceJSONReferenceNotRooted: "JSON reference doesn't start with '#/': ${reference}", - InferenceJSONReferenceToUnion: "JSON reference points to a union type: ${reference}", - InferenceJSONReferenceWrongProperty: "JSON reference points to a non-existant property: ${reference}", - InferenceJSONReferenceInvalidArrayIndex: "JSON reference uses invalid array index: ${reference}", + InferenceJSONReferenceNotRooted: + "JSON reference doesn't start with '#/': ${reference}", + InferenceJSONReferenceToUnion: + "JSON reference points to a union type: ${reference}", + InferenceJSONReferenceWrongProperty: + "JSON reference points to a non-existant property: ${reference}", + InferenceJSONReferenceInvalidArrayIndex: + "JSON reference uses invalid array index: ${reference}", // JSON Schema input SchemaArrayIsInvalidSchema: "An array is not a valid JSON Schema at ${ref}", SchemaNullIsInvalidSchema: "null is not a valid JSON Schema at ${ref}", - SchemaRefMustBeString: "$ref must be a string, but is an ${actual} at ${ref}", + SchemaRefMustBeString: + "$ref must be a string, but is an ${actual} at ${ref}", SchemaAdditionalTypesForbidRequired: "Can't have non-specified required properties but forbidden additionalTypes at ${ref}", - SchemaNoTypeSpecified: "JSON Schema must specify at least one type at ${ref}", + SchemaNoTypeSpecified: + "JSON Schema must specify at least one type at ${ref}", SchemaInvalidType: "Invalid type ${type} in JSON Schema at ${ref}", SchemaFalseNotSupported: 'Schema "false" is not supported at ${ref}', - SchemaInvalidJSONSchemaType: "Value of type ${type} is not valid JSON Schema at ${ref}", + SchemaInvalidJSONSchemaType: + "Value of type ${type} is not valid JSON Schema at ${ref}", SchemaRequiredMustBeStringOrStringArray: "`required` must be string or array of strings, but is ${actual} at ${ref}", - SchemaRequiredElementMustBeString: "`required` must contain only strings, but it has ${element}, at ${ref}", - SchemaTypeMustBeStringOrStringArray: "`type` must be string or array of strings, but is ${actual}", - SchemaTypeElementMustBeString: "`type` must contain only strings, but it has ${element}", - SchemaArrayItemsMustBeStringOrArray: "Array items must be an array or an object, but is ${actual}", + SchemaRequiredElementMustBeString: + "`required` must contain only strings, but it has ${element}, at ${ref}", + SchemaTypeMustBeStringOrStringArray: + "`type` must be string or array of strings, but is ${actual}", + SchemaTypeElementMustBeString: + "`type` must contain only strings, but it has ${element}", + SchemaArrayItemsMustBeStringOrArray: + "Array items must be an array or an object, but is ${actual}", SchemaIDMustHaveAddress: "$id ${id} doesn't have an address at ${ref}", SchemaWrongAccessorEntryArrayLength: "Accessor entry array must have the same number of entries as the ${operation} at ${ref}", - SchemaSetOperationCasesIsNotArray: "${operation} cases must be an array, but is ${cases}, at ${ref}", - SchemaMoreThanOneUnionMemberName: "More than one name given for union member: ${names}", + SchemaSetOperationCasesIsNotArray: + "${operation} cases must be an array, but is ${cases}, at ${ref}", + SchemaMoreThanOneUnionMemberName: + "More than one name given for union member: ${names}", SchemaCannotGetTypesFromBoolean: "Schema value to get top-level types from must be an object, but is boolean, at ${ref}", SchemaCannotIndexArrayWithNonNumber: "Trying to index array in schema with key that is not a number, but is ${actual} at ${ref}", - SchemaIndexNotInArray: "Index ${index} out of range of schema array at ${ref}", + SchemaIndexNotInArray: + "Index ${index} out of range of schema array at ${ref}", SchemaKeyNotInObject: "Key ${key} not in schema object at ${ref}", - SchemaFetchError: "Could not fetch schema ${address}, referred to from ${base}", + SchemaFetchError: + "Could not fetch schema ${address}, referred to from ${base}", SchemaFetchErrorTopLevel: "Could not fetch top-level schema ${address}", SchemaFetchErrorAdditional: "Could not fetch additional schema ${address}", @@ -136,19 +213,26 @@ const errorMessages: ErrorMessages = { // Driver DriverUnknownSourceLanguage: "Unknown source language ${lang}", DriverUnknownOutputLanguage: "Unknown output language ${lang}", - DriverMoreThanOneInputGiven: "More than one input given for top-level ${topLevel}", + DriverMoreThanOneInputGiven: + "More than one input given for top-level ${topLevel}", DriverCannotInferNameForSchema: "Cannot infer name for schema ${uri}", - DriverNoGraphQLQueryGiven: "Please specify at least one GraphQL query as input", + DriverNoGraphQLQueryGiven: + "Please specify at least one GraphQL query as input", DriverNoGraphQLSchemaInDir: "No GraphQL schema in ${dir}", - DriverMoreThanOneGraphQLSchemaInDir: "More than one GraphQL schema in ${dir}", - DriverSourceLangMustBeGraphQL: "If a GraphQL schema is specified, the source language must be GraphQL", - DriverGraphQLSchemaNeeded: "Please specify a GraphQL schema with --graphql-schema or --graphql-introspect", + DriverMoreThanOneGraphQLSchemaInDir: + "More than one GraphQL schema in ${dir}", + DriverSourceLangMustBeGraphQL: + "If a GraphQL schema is specified, the source language must be GraphQL", + DriverGraphQLSchemaNeeded: + "Please specify a GraphQL schema with --graphql-schema or --graphql-introspect", DriverInputFileDoesNotExist: "Input file ${filename} does not exist", DriverCannotMixJSONWithOtherSamples: "Cannot mix JSON samples with JSON Schems, GraphQL, or TypeScript in input subdirectory ${dir}", - DriverCannotMixNonJSONInputs: "Cannot mix JSON Schema, GraphQL, and TypeScript in an input subdirectory ${dir}", + DriverCannotMixNonJSONInputs: + "Cannot mix JSON Schema, GraphQL, and TypeScript in an input subdirectory ${dir}", DriverUnknownDebugOption: "Unknown debug option ${option}", - DriverNoLanguageOrExtension: "Please specify a language (--lang) or an output file extension", + DriverNoLanguageOrExtension: + "Please specify a language (--lang) or an output file extension", DriverCLIOptionParsingFailed: "Option parsing failed: ${message}", // IR @@ -156,36 +240,47 @@ const errorMessages: ErrorMessages = { "Cannot resolve cycle because it doesn't contain types that can be forward declared", IRTypeAttributesNotPropagated: "Type attributes for ${count} types were not carried over to the new graph: ${indexes}", - IRNoEmptyUnions: "Trying to make an empty union - do you have an impossible type in your schema?", + IRNoEmptyUnions: + "Trying to make an empty union - do you have an impossible type in your schema?", // Rendering RendererUnknownOptionValue: "Unknown value ${value} for option ${name}", // TypeScript input - TypeScriptCompilerError: "TypeScript error: ${message}" + TypeScriptCompilerError: "TypeScript error: ${message}", }; -export type ErrorPropertiesForKind = - Extract extends { properties: infer P } ? P : never; +export type ErrorPropertiesForKind = Extract< + ErrorProperties, + { kind: K } +> extends { properties: infer P } + ? P + : never; export class QuickTypeError extends Error { public constructor( public readonly errorMessage: string, public readonly messageName: string, public userMessage: string, - public readonly properties: StringMap + public readonly properties: StringMap, ) { super(userMessage); } } -export function messageError(kind: Kind, properties: ErrorPropertiesForKind): never { +export function messageError( + kind: Kind, + properties: ErrorPropertiesForKind, +): never { const message = errorMessages[kind]; let userMessage: string = message; for (const [name, value] of Object.entries(properties as StringMap)) { let valueString = ""; - if (typeof value === "object" && typeof value?.toString === "function") { + if ( + typeof value === "object" && + typeof value?.toString === "function" + ) { valueString = value.toString(); } else if (typeof value?.message === "string") { valueString = value.message; @@ -196,13 +291,18 @@ export function messageError(kind: Kind, properties: Er userMessage = userMessage.replace("${" + name + "}", valueString); } - throw new QuickTypeError(message, kind, userMessage, properties as StringMap); + throw new QuickTypeError( + message, + kind, + userMessage, + properties as StringMap, + ); } export function messageAssert( assertion: boolean, kind: Kind, - properties: ErrorPropertiesForKind + properties: ErrorPropertiesForKind, ): void { if (assertion) return; return messageError(kind, properties); diff --git a/packages/quicktype-core/src/Naming.ts b/packages/quicktype-core/src/Naming.ts index cc98c50fc..73df1ed72 100644 --- a/packages/quicktype-core/src/Naming.ts +++ b/packages/quicktype-core/src/Naming.ts @@ -10,7 +10,7 @@ import { setGroupBy, setMap, setUnion, - setUnionInto + setUnionInto, } from "collection-utils"; import { assert, defined, panic } from "./support/Support"; @@ -28,7 +28,7 @@ export class Namespace { _name: string, parent: Namespace | undefined, forbiddenNamespaces: Iterable, - additionalForbidden: Iterable + additionalForbidden: Iterable, ) { this.forbiddenNamespaces = new Set(forbiddenNamespaces); this.additionalForbidden = new Set(additionalForbidden); @@ -51,7 +51,10 @@ export class Namespace { public get forbiddenNameds(): ReadonlySet { // FIXME: cache - return setUnion(this.additionalForbidden, ...Array.from(this.forbiddenNamespaces).map(ns => ns.members)); + return setUnion( + this.additionalForbidden, + ...Array.from(this.forbiddenNamespaces).map((ns) => ns.members), + ); } public add(named: TName): TName { @@ -83,7 +86,7 @@ export class Namer { public constructor( public readonly name: string, public readonly nameStyle: NameStyle, - public prefixes: string[] + public prefixes: string[], ) { this._prefixes = new Set(prefixes); } @@ -93,16 +96,19 @@ export class Namer { public assignNames( names: ReadonlyMap, forbiddenNamesIterable: Iterable, - namesToAssignIterable: Iterable + namesToAssignIterable: Iterable, ): ReadonlyMap { const forbiddenNames = new Set(forbiddenNamesIterable); const namesToAssign = Array.from(namesToAssignIterable); - assert(namesToAssign.length > 0, "Number of names can't be less than 1"); + assert( + namesToAssign.length > 0, + "Number of names can't be less than 1", + ); const allAssignedNames = new Map(); - let namesToPrefix: Name[] = []; + const namesToPrefix: Name[] = []; for (const name of namesToAssign) { const proposedNames = name.proposeUnstyledNames(names); const namingFunction = name.namingFunction; @@ -110,13 +116,20 @@ export class Namer { // any of the other names and that isn't already forbidden. const maybeUniqueName = iterableFind( proposedNames, - proposed => + (proposed) => !forbiddenNames.has(namingFunction.nameStyle(proposed)) && - namesToAssign.every(n => n === name || !n.proposeUnstyledNames(names).has(proposed)) + namesToAssign.every( + (n) => + n === name || + !n.proposeUnstyledNames(names).has(proposed), + ), ); if (maybeUniqueName !== undefined) { const styledName = namingFunction.nameStyle(maybeUniqueName); - const assigned = name.nameAssignments(forbiddenNames, styledName); + const assigned = name.nameAssignments( + forbiddenNames, + styledName, + ); if (assigned !== null) { mapMergeInto(allAssignedNames, assigned); setUnionInto(forbiddenNames, assigned.values()); @@ -129,10 +142,12 @@ export class Namer { namesToPrefix.push(name); } - let prefixes = this._prefixes.values(); + const prefixes = this._prefixes.values(); let suffixNumber = 1; for (const name of namesToPrefix) { - const originalName: string = defined(iterableFirst(name.proposeUnstyledNames(names))); + const originalName: string = defined( + iterableFirst(name.proposeUnstyledNames(names)), + ); for (;;) { let nameToTry: string; const { done, value: prefix } = prefixes.next(); @@ -144,7 +159,10 @@ export class Namer { } const styledName = name.namingFunction.nameStyle(nameToTry); - const assigned = name.nameAssignments(forbiddenNames, styledName); + const assigned = name.nameAssignments( + forbiddenNames, + styledName, + ); if (assigned === null) continue; mapMergeInto(allAssignedNames, assigned); setUnionInto(forbiddenNames, assigned.values()); @@ -169,7 +187,7 @@ const funPrefixes = [ "Magenta", "Frisky", "Mischievous", - "Braggadocious" + "Braggadocious", ]; export function funPrefixNamer(name: string, nameStyle: NameStyle): Namer { @@ -187,7 +205,7 @@ export abstract class Name { // If a Named is fixed, the namingFunction is undefined. public constructor( private readonly _namingFunction: Namer | undefined, - public readonly order: number + public readonly order: number, ) {} public addAssociate(associate: AssociatedName): void { @@ -205,7 +223,9 @@ export abstract class Name { } // Must return at least one proposal. The proposals are considered in order. - public abstract proposeUnstyledNames(names: ReadonlyMap): ReadonlySet; + public abstract proposeUnstyledNames( + names: ReadonlyMap, + ): ReadonlySet; public firstProposedName(names: ReadonlyMap): string { return defined(iterableFirst(this.proposeUnstyledNames(names))); @@ -213,7 +233,7 @@ export abstract class Name { public nameAssignments( forbiddenNames: ReadonlySet, - assignedName: string + assignedName: string, ): ReadonlyMap | null { if (forbiddenNames.has(assignedName)) return null; const assignments = new Map([[this, assignedName]]); @@ -248,7 +268,9 @@ export class FixedName extends Name { return this._fixedName; } - public proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet { + public proposeUnstyledNames( + _?: ReadonlyMap, + ): ReadonlySet { return panic("Only fixedName should be called on FixedName."); } } @@ -256,7 +278,11 @@ export class FixedName extends Name { export class SimpleName extends Name { private readonly _unstyledNames: ReadonlySet; - public constructor(unstyledNames: Iterable, namingFunction: Namer, order: number) { + public constructor( + unstyledNames: Iterable, + namingFunction: Namer, + order: number, + ) { super(namingFunction, order); this._unstyledNames = new Set(unstyledNames); } @@ -265,7 +291,9 @@ export class SimpleName extends Name { return []; } - public proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet { + public proposeUnstyledNames( + _?: ReadonlyMap, + ): ReadonlySet { return this._unstyledNames; } } @@ -274,7 +302,7 @@ export class AssociatedName extends Name { public constructor( private readonly _sponsor: Name, order: number, - public readonly getName: (sponsorName: string) => string + public readonly getName: (sponsorName: string) => string, ) { super(undefined, order); } @@ -294,11 +322,13 @@ export class DependencyName extends Name { public constructor( namingFunction: Namer | undefined, order: number, - private readonly _proposeUnstyledName: (lookup: (n: Name) => string) => string + private readonly _proposeUnstyledName: ( + lookup: (n: Name) => string, + ) => string, ) { super(namingFunction, order); const dependencies: Name[] = []; - _proposeUnstyledName(n => { + _proposeUnstyledName((n) => { dependencies.push(n); return "0xDEADBEEF"; }); @@ -309,17 +339,25 @@ export class DependencyName extends Name { return Array.from(this._dependencies); } - public proposeUnstyledNames(names: ReadonlyMap): ReadonlySet { + public proposeUnstyledNames( + names: ReadonlyMap, + ): ReadonlySet { return new Set([ - this._proposeUnstyledName(n => { - assert(this._dependencies.has(n), "DependencyName proposer is not pure"); + this._proposeUnstyledName((n) => { + assert( + this._dependencies.has(n), + "DependencyName proposer is not pure", + ); return defined(names.get(n)); - }) + }), ]); } } -export function keywordNamespace(name: string, keywords: readonly string[]): Namespace { +export function keywordNamespace( + name: string, + keywords: readonly string[], +): Namespace { const ns = new Namespace(name, undefined, [], []); for (const kw of keywords) { ns.add(new FixedName(kw)); @@ -328,8 +366,15 @@ export function keywordNamespace(name: string, keywords: readonly string[]): Nam return ns; } -function allNamespacesRecursively(namespaces: Iterable): ReadonlySet { - return setUnion(namespaces, ...Array.from(setMap(namespaces, ns => allNamespacesRecursively(ns.children)))); +function allNamespacesRecursively( + namespaces: Iterable, +): ReadonlySet { + return setUnion( + namespaces, + ...Array.from( + setMap(namespaces, (ns) => allNamespacesRecursively(ns.children)), + ), + ); } class NamingContext { @@ -353,7 +398,9 @@ class NamingContext { } public areForbiddensFullyNamed(namespace: Namespace): boolean { - return iterableEvery(namespace.forbiddenNameds, n => this._names.has(n)); + return iterableEvery(namespace.forbiddenNameds, (n) => + this._names.has(n), + ); } public isConflicting(namedNamespace: Namespace, proposed: string): boolean { @@ -362,7 +409,10 @@ class NamingContext { if (namedsForProposed === undefined) return false; // The name is assigned, but it might still not be forbidden. for (const n of namedsForProposed) { - if (namedNamespace.members.has(n) || namedNamespace.forbiddenNameds.has(n)) { + if ( + namedNamespace.members.has(n) || + namedNamespace.forbiddenNameds.has(n) + ) { return true; } } @@ -372,7 +422,10 @@ class NamingContext { public assign(named: Name, namedNamespace: Namespace, name: string): void { assert(!this.names.has(named), `Name "${name}" assigned twice`); - assert(!this.isConflicting(namedNamespace, name), `Assigned name "${name}" conflicts`); + assert( + !this.isConflicting(namedNamespace, name), + `Assigned name "${name}" conflicts`, + ); this._names.set(named, name); let namedsForName = this._namedsForName.get(name); if (namedsForName === undefined) { @@ -385,7 +438,9 @@ class NamingContext { } // Naming algorithm -export function assignNames(rootNamespaces: Iterable): ReadonlyMap { +export function assignNames( + rootNamespaces: Iterable, +): ReadonlyMap { const ctx = new NamingContext(rootNamespaces); // Assign all fixed names. @@ -402,9 +457,11 @@ export function assignNames(rootNamespaces: Iterable): ReadonlyMap ctx.areForbiddensFullyNamed(ns)); - const readyNamespace = iterableFind(unfinishedNamespaces, ns => - iterableSome(ns.members, member => ctx.isReadyToBeNamed(member)) + const unfinishedNamespaces = setFilter(ctx.namespaces, (ns) => + ctx.areForbiddensFullyNamed(ns), + ); + const readyNamespace = iterableFind(unfinishedNamespaces, (ns) => + iterableSome(ns.members, (member) => ctx.isReadyToBeNamed(member)), ); if (readyNamespace === undefined) { @@ -412,31 +469,48 @@ export function assignNames(rootNamespaces: Iterable): ReadonlyMap ctx.names.get(n)); + const allForbiddenNames = setUnion( + readyNamespace.members, + readyNamespace.forbiddenNameds, + ); + const forbiddenNames = setFilterMap(allForbiddenNames, (n) => + ctx.names.get(n), + ); // 2. From low order to high order, sort those names into sets where all // members of a set propose the same name and have the same naming // function. for (;;) { - const allReadyNames = setFilter(readyNamespace.members, member => ctx.isReadyToBeNamed(member)); - const minOrderName = iterableMinBy(allReadyNames, n => n.order); + const allReadyNames = setFilter(readyNamespace.members, (member) => + ctx.isReadyToBeNamed(member), + ); + const minOrderName = iterableMinBy(allReadyNames, (n) => n.order); if (minOrderName === undefined) break; const minOrder = minOrderName.order; - const readyNames = setFilter(allReadyNames, n => n.order === minOrder); + const readyNames = setFilter( + allReadyNames, + (n) => n.order === minOrder, + ); // It would be nice if we had tuples, then we wouldn't have to do this in // two steps. - const byNamingFunction = setGroupBy(readyNames, n => n.namingFunction); + const byNamingFunction = setGroupBy( + readyNames, + (n) => n.namingFunction, + ); for (const [namer, namedsForNamingFunction] of byNamingFunction) { - const byProposed = setGroupBy(namedsForNamingFunction, n => - n.namingFunction.nameStyle(n.firstProposedName(ctx.names)) + const byProposed = setGroupBy(namedsForNamingFunction, (n) => + n.namingFunction.nameStyle(n.firstProposedName(ctx.names)), ); for (const [, nameds] of byProposed) { // 3. Use each set's naming function to name its members. - const names = namer.assignNames(ctx.names, forbiddenNames, nameds); + const names = namer.assignNames( + ctx.names, + forbiddenNames, + nameds, + ); for (const [name, assigned] of names) { ctx.assign(name, readyNamespace, assigned); } diff --git a/packages/quicktype-core/src/Renderer.ts b/packages/quicktype-core/src/Renderer.ts index dc8543af9..f151da0b5 100644 --- a/packages/quicktype-core/src/Renderer.ts +++ b/packages/quicktype-core/src/Renderer.ts @@ -2,21 +2,35 @@ import { iterableEnumerate } from "collection-utils"; import { type AnnotationData, IssueAnnotationData } from "./Annotation"; import { type Name, type Namespace, assignNames } from "./Naming"; -import { type NewlineSource, type Source, type Sourcelike, annotated, newline, sourcelikeToSource } from "./Source"; -import { type Comment } from "./support/Comments"; +import { + type NewlineSource, + type Source, + type Sourcelike, + annotated, + newline, + sourcelikeToSource, +} from "./Source"; +import type { Comment } from "./support/Comments"; import { assert, panic } from "./support/Support"; -import { type TargetLanguage } from "./TargetLanguage"; -import { type TypeGraph } from "./Type/TypeGraph"; +import type { TargetLanguage } from "./TargetLanguage"; +import type { TypeGraph } from "./Type/TypeGraph"; export interface RenderResult { names: ReadonlyMap; sources: ReadonlyMap; } -export type BlankLinePosition = "none" | "interposing" | "leading" | "leading-and-interposing"; +export type BlankLinePosition = + | "none" + | "interposing" + | "leading" + | "leading-and-interposing"; export type BlankLineConfig = BlankLinePosition | [BlankLinePosition, number]; -function getBlankLineConfig(cfg: BlankLineConfig): { count: number; position: BlankLinePosition } { +function getBlankLineConfig(cfg: BlankLineConfig): { + count: number; + position: BlankLinePosition; +} { if (Array.isArray(cfg)) { return { position: cfg[0], count: cfg[1] }; } @@ -24,7 +38,10 @@ function getBlankLineConfig(cfg: BlankLineConfig): { count: number; position: Bl return { position: cfg, count: 1 }; } -function lineIndentation(line: string): { indent: number; text: string | null } { +function lineIndentation(line: string): { + indent: number; + text: string | null; +} { const len = line.length; let indent = 0; for (let i = 0; i < len; i++) { @@ -100,13 +117,18 @@ class EmitContext { } public containsItem(item: Sourcelike): boolean { - const existingItem = this._currentEmitTarget.find((value: Sourcelike) => item === value); + const existingItem = this._currentEmitTarget.find( + (value: Sourcelike) => item === value, + ); return existingItem !== undefined; } public ensureBlankLine(numBlankLines: number): void { if (this._preventBlankLine) return; - this._numBlankLinesNeeded = Math.max(this._numBlankLinesNeeded, numBlankLines); + this._numBlankLinesNeeded = Math.max( + this._numBlankLinesNeeded, + numBlankLines, + ); } public preventBlankLine(): void { @@ -116,7 +138,7 @@ class EmitContext { public changeIndent(offset: number): void { if (this._lastNewline === undefined) { - return panic("Cannot change indent for the first line"); + panic("Cannot change indent for the first line"); } this._lastNewline.indentationChange += offset; @@ -138,7 +160,7 @@ export abstract class Renderer { public constructor( protected readonly targetLanguage: TargetLanguage, - renderContext: RenderContext + renderContext: RenderContext, ) { this.typeGraph = renderContext.typeGraph; this.leadingComments = renderContext.leadingComments; @@ -223,7 +245,10 @@ export abstract class Renderer { const oldEmitContext = this._emitContext; this._emitContext = new EmitContext(); emitter(); - assert(!this._emitContext.isNested, "emit context not restored correctly"); + assert( + !this._emitContext.isNested, + "emit context not restored correctly", + ); const source = this._emitContext.source; this._emitContext = oldEmitContext; return source; @@ -235,7 +260,10 @@ export abstract class Renderer { } } - protected emitAnnotated(annotation: AnnotationData, emitter: () => void): void { + protected emitAnnotated( + annotation: AnnotationData, + emitter: () => void, + ): void { const lines = this.gatherSource(emitter); const source = sourcelikeToSource(lines); this._emitContext.emitItem(annotated(annotation, source)); @@ -247,7 +275,9 @@ export abstract class Renderer { protected emitTable = (tableArray: Sourcelike[][]): void => { if (tableArray.length === 0) return; - const table = tableArray.map(r => r.map(sl => sourcelikeToSource(sl))); + const table = tableArray.map((r) => + r.map((sl) => sourcelikeToSource(sl)), + ); this._emitContext.emitItem({ kind: "table", table }); this._emitContext.emitNewline(); }; @@ -256,12 +286,21 @@ export abstract class Renderer { this._emitContext.changeIndent(offset); } - protected iterableForEach(iterable: Iterable, emitter: (v: T, position: ForEachPosition) => void): void { + protected iterableForEach( + iterable: Iterable, + emitter: (v: T, position: ForEachPosition) => void, + ): void { const items = Array.from(iterable); let onFirst = true; for (const [i, v] of iterableEnumerate(items)) { const position = - items.length === 1 ? "only" : onFirst ? "first" : i === items.length - 1 ? "last" : "middle"; + items.length === 1 + ? "only" + : onFirst + ? "first" + : i === items.length - 1 + ? "last" + : "middle"; emitter(v, position); onFirst = false; } @@ -271,7 +310,7 @@ export abstract class Renderer { iterable: Iterable<[K, V]>, interposedBlankLines: number, leadingBlankLines: number, - emitter: (v: V, k: K, position: ForEachPosition) => void + emitter: (v: V, k: K, position: ForEachPosition) => void, ): boolean { let didEmit = false; this.iterableForEach(iterable, ([k, v], position) => { @@ -290,12 +329,21 @@ export abstract class Renderer { protected forEachWithBlankLines( iterable: Iterable<[K, V]>, blankLineConfig: BlankLineConfig, - emitter: (v: V, k: K, position: ForEachPosition) => void + emitter: (v: V, k: K, position: ForEachPosition) => void, ): boolean { const { position, count } = getBlankLineConfig(blankLineConfig); - const interposing = ["interposing", "leading-and-interposing"].includes(position); - const leading = ["leading", "leading-and-interposing"].includes(position); - return this.forEach(iterable, interposing ? count : 0, leading ? count : 0, emitter); + const interposing = ["interposing", "leading-and-interposing"].includes( + position, + ); + const leading = ["leading", "leading-and-interposing"].includes( + position, + ); + return this.forEach( + iterable, + interposing ? count : 0, + leading ? count : 0, + emitter, + ); } // FIXME: make protected once JavaDateTimeRenderer is refactored @@ -314,7 +362,9 @@ export abstract class Renderer { protected initializeEmitContextForFilename(filename: string): void { if (this._finishedEmitContexts.has(filename.toLowerCase())) { - const existingEmitContext = this._finishedEmitContexts.get(filename.toLowerCase()); + const existingEmitContext = this._finishedEmitContexts.get( + filename.toLowerCase(), + ); if (existingEmitContext !== undefined) { this._emitContext = existingEmitContext; } @@ -324,7 +374,7 @@ export abstract class Renderer { protected finishFile(filename: string): void { if (this._finishedFiles.has(filename)) { console.log( - `[WARNING] Tried to emit file ${filename} more than once. If performing multi-file output this warning can be safely ignored.` + `[WARNING] Tried to emit file ${filename} more than once. If performing multi-file output this warning can be safely ignored.`, ); } @@ -332,7 +382,10 @@ export abstract class Renderer { this._finishedFiles.set(filename, source); // [Michael Fey (@MrRooni), 2019-5-9] We save the current EmitContext for possible reuse later. We put it into the map with a lowercased version of the key so we can do a case-insensitive lookup later. The reason we lowercase it is because some schema (looking at you keyword-unions.schema) define objects of the same name with different casing. BOOL vs. bool, for example. - this._finishedEmitContexts.set(filename.toLowerCase(), this._emitContext); + this._finishedEmitContexts.set( + filename.toLowerCase(), + this._emitContext, + ); this._emitContext = new EmitContext(); } diff --git a/packages/quicktype-core/src/RendererOptions/index.ts b/packages/quicktype-core/src/RendererOptions/index.ts index c8a9f66e9..3c61dcbdb 100644 --- a/packages/quicktype-core/src/RendererOptions/index.ts +++ b/packages/quicktype-core/src/RendererOptions/index.ts @@ -1,6 +1,6 @@ import { messageError } from "../Messages"; import { assert } from "../support/Support"; -import { type FixMeOptionsType, type NoInfer } from "../types"; +import type { LanguageName, RendererOptions } from "../types"; import type { OptionDefinition, OptionKind, OptionValues } from "./types"; @@ -15,7 +15,10 @@ export abstract class Option { public constructor(definition: OptionDefinition) { this.definition = definition; - assert(definition.kind !== undefined, "Renderer option kind must be defined"); + assert( + definition.kind !== undefined, + "Renderer option kind must be defined", + ); } public get name(): Name { @@ -34,11 +37,14 @@ export abstract class Option { } } -export function getOptionValues>>( +export function getOptionValues< + const Options extends Record>, + Lang extends LanguageName, +>( options: Options, - untypedOptionValues: FixMeOptionsType + untypedOptionValues: RendererOptions, ): OptionValues { - const optionValues: FixMeOptionsType = {}; + const optionValues: Record = {}; for (const [key, option] of Object.entries(options)) { const value = option.getValue(untypedOptionValues); @@ -62,13 +68,18 @@ export class BooleanOption extends Option { * @param defaultValue The default value. * @param kind Whether it's a primary or secondary option. */ - public constructor(name: Name, description: string, defaultValue: boolean, kind: OptionKind = "primary") { + public constructor( + name: Name, + description: string, + defaultValue: boolean, + kind: OptionKind = "primary", + ) { super({ name, kind, type: Boolean, description, - defaultValue + defaultValue, }); } @@ -78,15 +89,15 @@ export class BooleanOption extends Option { } { const negated = Object.assign({}, this.definition, { name: `no-${this.name}`, - defaultValue: !this.definition.defaultValue + defaultValue: !this.definition.defaultValue, }); const display = Object.assign({}, this.definition, { name: `[no-]${this.name}`, - description: `${this.definition.description} (${this.definition.defaultValue ? "on" : "off"} by default)` + description: `${this.definition.description} (${this.definition.defaultValue ? "on" : "off"} by default)`, }); return { display: [display], - actual: [this.definition, negated] + actual: [this.definition, negated], }; } @@ -109,9 +120,9 @@ export class BooleanOption extends Option { if (this.definition.defaultValue) { return (value && !negated) as boolean; - } else { - return (value || !negated) as boolean; } + + return (value || !negated) as boolean; } } @@ -121,7 +132,7 @@ export class StringOption extends Option { description: string, typeLabel: string, defaultValue: string, - kind: OptionKind = "primary" + kind: OptionKind = "primary", ) { const definition = { name, @@ -129,17 +140,19 @@ export class StringOption extends Option { type: String, description, typeLabel, - defaultValue + defaultValue, }; super(definition); } } -// FIXME: use const generics here export class EnumOption< Name extends string, - EnumMap extends Record, - EnumKey extends Extract = Extract + const EnumMap extends Record, + EnumKey extends Extract = Extract< + keyof EnumMap, + string + >, > extends Option { private readonly _values: EnumMap; @@ -148,7 +161,7 @@ export class EnumOption< description: string, values: EnumMap, defaultValue: NoInfer, - kind: OptionKind = "primary" + kind: OptionKind = "primary", ) { const definition = { name, @@ -156,21 +169,24 @@ export class EnumOption< type: String, description, typeLabel: Object.keys(values).join("|"), - defaultValue + defaultValue, }; super(definition); this._values = values; } - public getEnumValue(name: Key): EnumMap[Key] { + public getEnumValue(name: Key): EnumMap[Key] { if (!name) { const defaultKey = this.definition.defaultValue as NonNullable; return this._values[defaultKey]; } if (!(name in this._values)) { - return messageError("RendererUnknownOptionValue", { value: name, name: this.name }); + return messageError("RendererUnknownOptionValue", { + value: name, + name: this.name, + }); } return this._values[name]; diff --git a/packages/quicktype-core/src/RendererOptions/types.ts b/packages/quicktype-core/src/RendererOptions/types.ts index 79fe7f19e..cc8ff70eb 100644 --- a/packages/quicktype-core/src/RendererOptions/types.ts +++ b/packages/quicktype-core/src/RendererOptions/types.ts @@ -19,16 +19,29 @@ export interface OptionDefinition { typeLabel?: string; } -export type OptionName = O extends Option ? Name : never; -export type OptionValue = - O extends EnumOption - ? EnumMap[EnumKey] - : O extends Option - ? Value - : never; +export type OptionName = O extends Option + ? Name + : never; +export type OptionValue = O extends EnumOption< + string, + infer EnumMap, + infer EnumKey +> + ? EnumMap[EnumKey] + : O extends Option + ? Value + : never; -export type OptionKey = O extends EnumOption, infer EnumKey> ? EnumKey : O; +export type OptionKey = O extends EnumOption< + string, + Record, + infer EnumKey +> + ? EnumKey + : O; // FIXME: Merge these and use camelCase user-facing keys (v24) -export type OptionMap = { [K in keyof T as OptionName]: OptionKey }; // user-facing, keys are `name` property of Option, values are the available input type +export type OptionMap = { + [K in keyof T as OptionName]: OptionKey; +}; // user-facing, keys are `name` property of Option, values are the available input type export type OptionValues = { [K in keyof T]: OptionValue }; // internal, keys are keys of `_Options` object in each language file diff --git a/packages/quicktype-core/src/Run.ts b/packages/quicktype-core/src/Run.ts index f415aeb8a..85a48c848 100644 --- a/packages/quicktype-core/src/Run.ts +++ b/packages/quicktype-core/src/Run.ts @@ -1,13 +1,10 @@ import { mapFirst } from "collection-utils"; import { initTypeNames } from "./attributes/TypeNames"; -import { gatherNames } from "./GatherNames"; import { InputData } from "./input/Inputs"; import * as targetLanguages from "./language/All"; import type { RendererOptions } from "./language/options.types"; import type { LanguageName } from "./language/types"; -import { makeTransformations } from "./MakeTransformations"; -import { messageError } from "./Messages"; import { combineClasses } from "./rewrites/CombineClasses"; import { expandStrings } from "./rewrites/ExpandStrings"; import { flattenStrings } from "./rewrites/FlattenStrings"; @@ -15,18 +12,37 @@ import { flattenUnions } from "./rewrites/FlattenUnions"; import { inferMaps } from "./rewrites/InferMaps"; import { replaceObjectType } from "./rewrites/ReplaceObjectType"; import { resolveIntersections } from "./rewrites/ResolveIntersections"; -import { type Annotation, type Location, type SerializedRenderResult, type Span } from "./Source"; -import { type Comment } from "./support/Comments"; +import type { Comment } from "./support/Comments"; import { assert } from "./support/Support"; -import { type MultiFileRenderResult, type TargetLanguage } from "./TargetLanguage"; -import { type TransformedStringTypeKind } from "./Type"; + +import { gatherNames } from "./GatherNames"; +import { + type InferenceFlags, + defaultInferenceFlags, + inferenceFlagNames, + inferenceFlags, +} from "./Inference"; +import { makeTransformations } from "./MakeTransformations"; +import { messageError } from "./Messages"; +import type { + Annotation, + Location, + SerializedRenderResult, + Span, +} from "./Source"; +import type { MultiFileRenderResult, TargetLanguage } from "./TargetLanguage"; import { TypeBuilder } from "./Type/TypeBuilder"; -import { type StringTypeMapping } from "./Type/TypeBuilderUtils"; +import type { StringTypeMapping } from "./Type/TypeBuilderUtils"; import { TypeGraph } from "./Type/TypeGraph"; -import { noneToAny, optionalToNullable, removeIndirectionIntersections } from "./Type/TypeGraphUtils"; -import { type FixMeOptionsType } from "./types"; - -export function getTargetLanguage(nameOrInstance: LanguageName | TargetLanguage): TargetLanguage { +import { + noneToAny, + optionalToNullable, + removeIndirectionIntersections, +} from "./Type/TypeGraphUtils"; + +export function getTargetLanguage( + nameOrInstance: LanguageName | TargetLanguage, +): TargetLanguage { if (typeof nameOrInstance === "object") { return nameOrInstance; } @@ -36,88 +52,11 @@ export function getTargetLanguage(nameOrInstance: LanguageName | TargetLanguage) return language; } - return messageError("DriverUnknownOutputLanguage", { lang: nameOrInstance }); -} - -export interface InferenceFlag { - description: string; - explanation: string; - negationDescription: string; - order: number; - stringType?: TransformedStringTypeKind; + return messageError("DriverUnknownOutputLanguage", { + lang: nameOrInstance, + }); } -export const inferenceFlagsObject = { - /** Whether to infer map types from JSON data */ - inferMaps: { - description: "Detect maps", - negationDescription: "Don't infer maps, always use classes", - explanation: "Infer maps when object keys look like map keys.", - order: 1 - }, - /** Whether to infer enum types from JSON data */ - inferEnums: { - description: "Detect enums", - negationDescription: "Don't infer enums, always use strings", - explanation: "If string values occur within a relatively small domain,\ninfer them as enum values.", - order: 2 - }, - /** Whether to convert UUID strings to UUID objects */ - inferUuids: { - description: "Detect UUIDs", - negationDescription: "Don't convert UUIDs to UUID objects", - explanation: "Detect UUIDs like '123e4567-e89b-12d3-a456-426655440000' (partial support).", - stringType: "uuid" as TransformedStringTypeKind, - order: 3 - }, - /** Whether to assume that JSON strings that look like dates are dates */ - inferDateTimes: { - description: "Detect dates & times", - negationDescription: "Don't infer dates or times", - explanation: "Infer dates from strings (partial support).", - stringType: "date-time" as TransformedStringTypeKind, - order: 4 - }, - /** Whether to convert stringified integers to integers */ - inferIntegerStrings: { - description: "Detect integers in strings", - negationDescription: "Don't convert stringified integers to integers", - explanation: 'Automatically convert stringified integers to integers.\nFor example, "1" is converted to 1.', - stringType: "integer-string" as TransformedStringTypeKind, - order: 5 - }, - /** Whether to convert stringified booleans to boolean values */ - inferBooleanStrings: { - description: "Detect booleans in strings", - negationDescription: "Don't convert stringified booleans to booleans", - explanation: - 'Automatically convert stringified booleans to booleans.\nFor example, "true" is converted to true.', - stringType: "bool-string" as TransformedStringTypeKind, - order: 6 - }, - /** Combine similar classes. This doesn't apply to classes from a schema, only from inference. */ - combineClasses: { - description: "Merge similar classes", - negationDescription: "Don't combine similar classes", - explanation: - "Combine classes with significantly overlapping properties,\ntreating contingent properties as nullable.", - order: 7 - }, - /** Whether to treat $ref as references within JSON */ - ignoreJsonRefs: { - description: "Don't treat $ref as a reference in JSON", - negationDescription: "Treat $ref as a reference in JSON", - explanation: - "Like in JSON Schema, allow objects like\n'{ $ref: \"#/foo/bar\" }' to refer\nto another part of the input.", - order: 8 - } -}; -export type InferenceFlagName = keyof typeof inferenceFlagsObject; -export const inferenceFlagNames = Object.getOwnPropertyNames(inferenceFlagsObject) as InferenceFlagName[]; -export const inferenceFlags: { [F in InferenceFlagName]: InferenceFlag } = inferenceFlagsObject; - -export type InferenceFlags = { [F in InferenceFlagName]: boolean }; - /** * The options type for the main quicktype entry points, * `quicktypeMultiFile` and `quicktype`. @@ -193,7 +132,7 @@ const defaultOptions: NonInferenceOptions = { debugPrintGatherNames: false, debugPrintTransformations: false, debugPrintTimes: false, - debugPrintSchemaResolving: false + debugPrintSchemaResolving: false, }; export interface RunContext { @@ -213,30 +152,17 @@ interface GraphInputs { typeBuilder: TypeBuilder; } -function makeDefaultInferenceFlags(): InferenceFlags { - const flags = {} as InferenceFlags; - for (const flag of inferenceFlagNames) { - flags[flag] = true; - } - - return flags; -} - -export const defaultInferenceFlags = makeDefaultInferenceFlags(); - class Run implements RunContext { private readonly _options: Options; public constructor(options: Partial) { // We must not overwrite defaults with undefined values, which // we sometimes get. - this._options = Object.assign({}, defaultOptions, defaultInferenceFlags); - for (const k of Object.getOwnPropertyNames(options)) { - const v = (options as FixMeOptionsType)[k]; - if (v !== undefined) { - (this._options as FixMeOptionsType)[k] = v; - } - } + this._options = Object.fromEntries( + Object.entries( + Object.assign({}, defaultOptions, defaultInferenceFlags), + ).map(([k, v]) => [k, options[k as keyof typeof options] ?? v]), + ) as Required; } public get stringTypeMapping(): StringTypeMapping { @@ -289,17 +215,27 @@ class Run implements RunContext { private makeGraphInputs(): GraphInputs { const targetLanguage = getTargetLanguage(this._options.lang); const stringTypeMapping = this.stringTypeMapping; - const conflateNumbers = !targetLanguage.supportsUnionsWithBothNumberTypes; + const conflateNumbers = + !targetLanguage.supportsUnionsWithBothNumberTypes; const typeBuilder = new TypeBuilder( stringTypeMapping, this._options.alphabetizeProperties, this._options.allPropertiesOptional, this._options.checkProvenance, - false + false, + ); + typeBuilder.typeGraph = new TypeGraph( + typeBuilder, + 0, + this._options.checkProvenance, ); - typeBuilder.typeGraph = new TypeGraph(typeBuilder, 0, this._options.checkProvenance); - return { targetLanguage, stringTypeMapping, conflateNumbers, typeBuilder }; + return { + targetLanguage, + stringTypeMapping, + conflateNumbers, + typeBuilder, + }; } private async makeGraph(allInputs: InputData): Promise { @@ -313,8 +249,8 @@ class Run implements RunContext { graphInputs.typeBuilder, this._options.inferMaps, this._options.inferEnums, - this._options.fixedTopLevels - ) + this._options.fixedTopLevels, + ), ); return this.processGraph(allInputs, graphInputs); @@ -329,15 +265,23 @@ class Run implements RunContext { graphInputs.typeBuilder, this._options.inferMaps, this._options.inferEnums, - this._options.fixedTopLevels - ) + this._options.fixedTopLevels, + ), ); return this.processGraph(allInputs, graphInputs); } - private processGraph(allInputs: InputData, graphInputs: GraphInputs): TypeGraph { - const { targetLanguage, stringTypeMapping, conflateNumbers, typeBuilder } = graphInputs; + private processGraph( + allInputs: InputData, + graphInputs: GraphInputs, + ): TypeGraph { + const { + targetLanguage, + stringTypeMapping, + conflateNumbers, + typeBuilder, + } = graphInputs; let graph = typeBuilder.finish(); if (this._options.debugPrintGraph) { @@ -347,11 +291,17 @@ class Run implements RunContext { const debugPrintReconstitution = this.debugPrintReconstitution; - if (typeBuilder.didAddForwardingIntersection || !this._options.ignoreJsonRefs) { - this.time( - "remove indirection intersections", - () => (graph = removeIndirectionIntersections(graph, stringTypeMapping, debugPrintReconstitution)) - ); + if ( + typeBuilder.didAddForwardingIntersection || + !this._options.ignoreJsonRefs + ) { + this.time("remove indirection intersections", () => { + graph = removeIndirectionIntersections( + graph, + stringTypeMapping, + debugPrintReconstitution, + ); + }); } let unionsDone = false; @@ -360,88 +310,93 @@ class Run implements RunContext { do { const graphBeforeRewrites = graph; if (!intersectionsDone) { - this.time( - "resolve intersections", - () => - ([graph, intersectionsDone] = resolveIntersections( - graph, - stringTypeMapping, - debugPrintReconstitution - )) - ); + this.time("resolve intersections", () => { + [graph, intersectionsDone] = resolveIntersections( + graph, + stringTypeMapping, + debugPrintReconstitution, + ); + }); } if (!unionsDone) { - this.time( - "flatten unions", - () => - ([graph, unionsDone] = flattenUnions( - graph, - stringTypeMapping, - conflateNumbers, - true, - debugPrintReconstitution - )) - ); + this.time("flatten unions", () => { + [graph, unionsDone] = flattenUnions( + graph, + stringTypeMapping, + conflateNumbers, + true, + debugPrintReconstitution, + ); + }); } if (graph === graphBeforeRewrites) { - assert(intersectionsDone && unionsDone, "Graph didn't change but we're not done"); + assert( + intersectionsDone && unionsDone, + "Graph didn't change but we're not done", + ); } } while (!intersectionsDone || !unionsDone); } - this.time( - "replace object type", - () => - (graph = replaceObjectType( + this.time("replace object type", () => { + graph = replaceObjectType( + graph, + stringTypeMapping, + conflateNumbers, + targetLanguage.supportsFullObjectType, + debugPrintReconstitution, + ); + }); + do { + this.time("flatten unions", () => { + [graph, unionsDone] = flattenUnions( graph, stringTypeMapping, conflateNumbers, - targetLanguage.supportsFullObjectType, - debugPrintReconstitution - )) - ); - do { - this.time( - "flatten unions", - () => - ([graph, unionsDone] = flattenUnions( - graph, - stringTypeMapping, - conflateNumbers, - false, - debugPrintReconstitution - )) - ); + false, + debugPrintReconstitution, + ); + }); } while (!unionsDone); if (this._options.combineClasses) { const combinedGraph = this.time("combine classes", () => - combineClasses(this, graph, this._options.alphabetizeProperties, true, false, debugPrintReconstitution) + combineClasses( + this, + graph, + this._options.alphabetizeProperties, + true, + false, + debugPrintReconstitution, + ), ); if (combinedGraph === graph) { graph = combinedGraph; } else { - this.time( - "combine classes cleanup", - () => - (graph = combineClasses( - this, - combinedGraph, - this._options.alphabetizeProperties, - false, - true, - debugPrintReconstitution - )) - ); + this.time("combine classes cleanup", () => { + graph = combineClasses( + this, + combinedGraph, + this._options.alphabetizeProperties, + false, + true, + debugPrintReconstitution, + ); + }); } } if (this._options.inferMaps) { for (;;) { const newGraph = this.time("infer maps", () => - inferMaps(graph, stringTypeMapping, true, debugPrintReconstitution) + inferMaps( + graph, + stringTypeMapping, + true, + debugPrintReconstitution, + ), ); if (newGraph === graph) { break; @@ -451,52 +406,76 @@ class Run implements RunContext { } } - const enumInference = allInputs.needSchemaProcessing ? "all" : this._options.inferEnums ? "infer" : "none"; - this.time("expand strings", () => (graph = expandStrings(this, graph, enumInference))); - this.time( - "flatten unions", - () => - ([graph, unionsDone] = flattenUnions( - graph, - stringTypeMapping, - conflateNumbers, - false, - debugPrintReconstitution - )) + const enumInference = allInputs.needSchemaProcessing + ? "all" + : this._options.inferEnums + ? "infer" + : "none"; + this.time("expand strings", () => { + graph = expandStrings(this, graph, enumInference); + }); + this.time("flatten unions", () => { + [graph, unionsDone] = flattenUnions( + graph, + stringTypeMapping, + conflateNumbers, + false, + debugPrintReconstitution, + ); + }); + assert( + unionsDone, + "We should only have to flatten unions once after expanding strings", ); - assert(unionsDone, "We should only have to flatten unions once after expanding strings"); if (allInputs.needSchemaProcessing) { - this.time( - "flatten strings", - () => (graph = flattenStrings(graph, stringTypeMapping, debugPrintReconstitution)) - ); + this.time("flatten strings", () => { + graph = flattenStrings( + graph, + stringTypeMapping, + debugPrintReconstitution, + ); + }); } - this.time("none to any", () => (graph = noneToAny(graph, stringTypeMapping, debugPrintReconstitution))); - if (!targetLanguage.supportsOptionalClassProperties) { - this.time( - "optional to nullable", - () => (graph = optionalToNullable(graph, stringTypeMapping, debugPrintReconstitution)) + this.time("none to any", () => { + graph = noneToAny( + graph, + stringTypeMapping, + debugPrintReconstitution, ); - } - - this.time("fixed point", () => (graph = graph.rewriteFixedPoint(false, debugPrintReconstitution))); - - this.time("make transformations", () => (graph = makeTransformations(this, graph, targetLanguage))); - - this.time( - "flatten unions", - () => - ([graph, unionsDone] = flattenUnions( + }); + if (!targetLanguage.supportsOptionalClassProperties) { + this.time("optional to nullable", () => { + graph = optionalToNullable( graph, stringTypeMapping, - conflateNumbers, - false, - debugPrintReconstitution - )) + debugPrintReconstitution, + ); + }); + } + + this.time("fixed point", () => { + graph = graph.rewriteFixedPoint(false, debugPrintReconstitution); + }); + + this.time("make transformations", () => { + graph = makeTransformations(this, graph, targetLanguage); + }); + + this.time("flatten unions", () => { + [graph, unionsDone] = flattenUnions( + graph, + stringTypeMapping, + conflateNumbers, + false, + debugPrintReconstitution, + ); + }); + assert( + unionsDone, + "We should only have to flatten unions once after making transformations", ); - assert(unionsDone, "We should only have to flatten unions once after making transformations"); // Sometimes we combine classes in ways that will the order come out // differently compared to what it would be from the equivalent schema, @@ -505,17 +484,23 @@ class Run implements RunContext { // FIXME: We don't actually have to do this if any of the above graph // rewrites did anything. We could just check whether the current graph // is different from the one we started out with. - this.time( - "GC", - () => (graph = graph.garbageCollect(this._options.alphabetizeProperties, debugPrintReconstitution)) - ); + this.time("GC", () => { + graph = graph.garbageCollect( + this._options.alphabetizeProperties, + debugPrintReconstitution, + ); + }); if (this._options.debugPrintGraph) { console.log("\n# gather names"); } this.time("gather names", () => - gatherNames(graph, !allInputs.needSchemaProcessing, this._options.debugPrintGatherNames) + gatherNames( + graph, + !allInputs.needSchemaProcessing, + this._options.debugPrintGatherNames, + ), ); if (this._options.debugPrintGraph) { graph.printGraph(); @@ -525,9 +510,9 @@ class Run implements RunContext { } private makeSimpleTextResult(lines: string[]): MultiFileRenderResult { - return new Map([[this._options.outputFilename, { lines, annotations: [] }]] as Array< - [string, SerializedRenderResult] - >); + return new Map([ + [this._options.outputFilename, { lines, annotations: [] }], + ] as Array<[string, SerializedRenderResult]>); } private preRun(): MultiFileRenderResult | [InputData, TargetLanguage] { @@ -536,14 +521,26 @@ class Run implements RunContext { const targetLanguage = getTargetLanguage(this._options.lang); const inputData = this._options.inputData; - const needIR = inputData.needIR || !targetLanguage.names.includes("schema"); + const needIR = + inputData.needIR || !targetLanguage.names.includes("schema"); - const schemaString = needIR ? undefined : inputData.singleStringSchemaSource(); + const schemaString = needIR + ? undefined + : inputData.singleStringSchemaSource(); if (schemaString !== undefined) { - const lines = JSON.stringify(JSON.parse(schemaString), undefined, 4).split("\n"); + const lines = JSON.stringify( + JSON.parse(schemaString), + undefined, + 4, + ).split("\n"); lines.push(""); const srr = { lines, annotations: [] }; - return new Map([[this._options.outputFilename, srr] as [string, SerializedRenderResult]]); + return new Map([ + [this._options.outputFilename, srr] as [ + string, + SerializedRenderResult, + ], + ]); } return [inputData, targetLanguage]; @@ -575,7 +572,10 @@ class Run implements RunContext { return this.renderGraph(targetLanguage, graph); } - private renderGraph(targetLanguage: TargetLanguage, graph: TypeGraph): MultiFileRenderResult { + private renderGraph( + targetLanguage: TargetLanguage, + graph: TypeGraph, + ): MultiFileRenderResult { if (this._options.noRender) { return this.makeSimpleTextResult(["Done.", ""]); } @@ -586,7 +586,7 @@ class Run implements RunContext { this._options.alphabetizeProperties, this._options.leadingComments, this._options.rendererOptions, - this._options.indentation + this._options.indentation, ); } } @@ -597,11 +597,15 @@ class Run implements RunContext { * @param options Partial options. For options that are not defined, the * defaults will be used. */ -export async function quicktypeMultiFile(options: Partial): Promise { +export async function quicktypeMultiFile( + options: Partial, +): Promise { return await new Run(options).run(); } -export function quicktypeMultiFileSync(options: Partial): MultiFileRenderResult { +export function quicktypeMultiFileSync( + options: Partial, +): MultiFileRenderResult { return new Run(options).runSync(); } @@ -610,7 +614,10 @@ function offsetLocation(loc: Location, lineOffset: number): Location { } function offsetSpan(span: Span, lineOffset: number): Span { - return { start: offsetLocation(span.start, lineOffset), end: offsetLocation(span.end, lineOffset) }; + return { + start: offsetLocation(span.start, lineOffset), + end: offsetLocation(span.end, lineOffset), + }; } /** @@ -618,7 +625,9 @@ function offsetSpan(span: Span, lineOffset: number): Span { * are concatenated and prefixed with a `//`-style comment giving the * filename. */ -export function combineRenderResults(result: MultiFileRenderResult): SerializedRenderResult { +export function combineRenderResults( + result: MultiFileRenderResult, +): SerializedRenderResult { if (result.size <= 1) { const first = mapFirst(result); if (first === undefined) { @@ -634,7 +643,10 @@ export function combineRenderResults(result: MultiFileRenderResult): SerializedR const offset = lines.length + 2; lines = lines.concat([`// ${filename}`, ""], srr.lines); annotations = annotations.concat( - srr.annotations.map(ann => ({ annotation: ann.annotation, span: offsetSpan(ann.span, offset) })) + srr.annotations.map((ann) => ({ + annotation: ann.annotation, + span: offsetSpan(ann.span, offset), + })), ); } @@ -649,7 +661,9 @@ export function combineRenderResults(result: MultiFileRenderResult): SerializedR * @param options Partial options. For options that are not defined, the * defaults will be used. */ -export async function quicktype(options: Partial): Promise { +export async function quicktype( + options: Partial, +): Promise { const result = await quicktypeMultiFile(options); return combineRenderResults(result); } diff --git a/packages/quicktype-core/src/Source.ts b/packages/quicktype-core/src/Source.ts index fcf004546..5286d8ab2 100644 --- a/packages/quicktype-core/src/Source.ts +++ b/packages/quicktype-core/src/Source.ts @@ -1,6 +1,6 @@ import { arrayIntercalate, iterableMax, withDefault } from "collection-utils"; -import { type AnnotationData } from "./Annotation"; +import type { AnnotationData } from "./Annotation"; import { Name } from "./Naming"; import { repeatString } from "./support/Strings"; import { assert, assertNever, defined, panic } from "./support/Support"; @@ -69,7 +69,7 @@ export function sourcelikeToSource(sl: Sourcelike): Source { if (sl instanceof Array) { return { kind: "sequence", - sequence: sl.map(sourcelikeToSource) + sequence: sl.map(sourcelikeToSource), }; } @@ -83,8 +83,8 @@ export function sourcelikeToSource(sl: Sourcelike): Source { kind: "sequence", sequence: arrayIntercalate( newline(), - lines.map((l: string) => ({ kind: "text", text: l }) as Source) - ) + lines.map((l: string) => ({ kind: "text", text: l }) as Source), + ), }; } @@ -99,11 +99,15 @@ export function annotated(annotation: AnnotationData, sl: Sourcelike): Source { return { kind: "annotated", annotation, - source: sourcelikeToSource(sl) + source: sourcelikeToSource(sl), }; } -export function maybeAnnotated(doAnnotate: boolean, annotation: AnnotationData, sl: Sourcelike): Sourcelike { +export function maybeAnnotated( + doAnnotate: boolean, + annotation: AnnotationData, + sl: Sourcelike, +): Sourcelike { if (!doAnnotate) { return sl; } @@ -111,11 +115,14 @@ export function maybeAnnotated(doAnnotate: boolean, annotation: AnnotationData, return annotated(annotation, sl); } -export function modifySource(modifier: (serialized: string) => string, sl: Sourcelike): Sourcelike { +export function modifySource( + modifier: (serialized: string) => string, + sl: Sourcelike, +): Sourcelike { return { kind: "modified", modifier, - source: sourcelikeToSource(sl) + source: sourcelikeToSource(sl), }; } @@ -140,7 +147,10 @@ export interface SerializedRenderResult { lines: string[]; } -function sourceLineLength(source: Source, names: ReadonlyMap): number { +function sourceLineLength( + source: Source, + names: ReadonlyMap, +): number { switch (source.kind) { case "text": return source.text.length; @@ -157,7 +167,8 @@ function sourceLineLength(source: Source, names: ReadonlyMap): num case "name": return defined(names.get(source.named)).length; case "modified": - return serializeRenderResult(source, names, "").lines.join("\n").length; + return serializeRenderResult(source, names, "").lines.join("\n") + .length; default: return assertNever(source); } @@ -166,7 +177,7 @@ function sourceLineLength(source: Source, names: ReadonlyMap): num export function serializeRenderResult( rootSource: Source, names: ReadonlyMap, - indentation: string + indentation: string, ): SerializedRenderResult { let indent = 0; let indentNeeded = 0; @@ -217,12 +228,20 @@ export function serializeRenderResult( const t = source.table; const numRows = t.length; if (numRows === 0) break; - const widths = t.map(l => l.map(s => sourceLineLength(s, names))); - const numColumns = defined(iterableMax(t.map(l => l.length))); + const widths = t.map((l) => + l.map((s) => sourceLineLength(s, names)), + ); + const numColumns = defined(iterableMax(t.map((l) => l.length))); if (numColumns === 0) break; const columnWidths: number[] = []; for (let i = 0; i < numColumns; i++) { - columnWidths.push(defined(iterableMax(widths.map(l => withDefault(l[i], 0))))); + columnWidths.push( + defined( + iterableMax( + widths.map((l) => withDefault(l[i], 0)), + ), + ), + ); } for (let y = 0; y < numRows; y++) { @@ -231,11 +250,16 @@ export function serializeRenderResult( const rowWidths = defined(widths[y]); for (let x = 0; x < numColumns; x++) { const colWidth = columnWidths[x]; - const src = withDefault(row[x], { kind: "text", text: "" }); + const src = withDefault(row[x], { + kind: "text", + text: "", + }); const srcWidth = withDefault(rowWidths[x], 0); serializeToStringArray(src); if (x < numColumns - 1 && srcWidth < colWidth) { - currentLine.push(repeatString(" ", colWidth - srcWidth)); + currentLine.push( + repeatString(" ", colWidth - srcWidth), + ); } } @@ -250,7 +274,10 @@ export function serializeRenderResult( const start = currentLocation(); serializeToStringArray(source.source); const end = currentLocation(); - annotations.push({ annotation: source.annotation, span: { start, end } }); + annotations.push({ + annotation: source.annotation, + span: { start, end }, + }); break; case "name": assert(names.has(source.named), "No name for Named"); @@ -259,8 +286,15 @@ export function serializeRenderResult( break; case "modified": indentIfNeeded(); - const serialized = serializeRenderResult(source.source, names, indentation).lines; - assert(serialized.length === 1, "Cannot modify more than one line."); + const serialized = serializeRenderResult( + source.source, + names, + indentation, + ).lines; + assert( + serialized.length === 1, + "Cannot modify more than one line.", + ); currentLine.push(source.modifier(serialized[0])); break; default: @@ -282,7 +316,10 @@ export function singleWord(...source: Sourcelike[]): MultiWord { return { source, needsParens: false }; } -export function multiWord(separator: Sourcelike, ...words: Sourcelike[]): MultiWord { +export function multiWord( + separator: Sourcelike, + ...words: Sourcelike[] +): MultiWord { assert(words.length > 0, "Zero words is not multiple"); if (words.length === 1) { return singleWord(words[0]); diff --git a/packages/quicktype-core/src/TargetLanguage.ts b/packages/quicktype-core/src/TargetLanguage.ts index 3c8933c74..84fce85cd 100644 --- a/packages/quicktype-core/src/TargetLanguage.ts +++ b/packages/quicktype-core/src/TargetLanguage.ts @@ -2,15 +2,15 @@ import { mapMap } from "collection-utils"; import { ConvenienceRenderer } from "./ConvenienceRenderer"; import { type DateTimeRecognizer, DefaultDateTimeRecognizer } from "./DateTime"; -import { type RenderContext, type Renderer } from "./Renderer"; -import { type Option, type OptionDefinition } from "./RendererOptions"; +import type { RenderContext, Renderer } from "./Renderer"; +import type { Option, OptionDefinition } from "./RendererOptions"; import { type SerializedRenderResult, serializeRenderResult } from "./Source"; -import { type Comment } from "./support/Comments"; +import type { Comment } from "./support/Comments"; import { defined } from "./support/Support"; -import { type Type } from "./Type/Type"; -import { type StringTypeMapping } from "./Type/TypeBuilderUtils"; -import { type TypeGraph } from "./Type/TypeGraph"; -import { type FixMeOptionsType } from "./types"; +import type { Type } from "./Type/Type"; +import type { StringTypeMapping } from "./Type/TypeBuilderUtils"; +import type { TypeGraph } from "./Type/TypeGraph"; +import type { LanguageName, RendererOptions } from "./types"; export type MultiFileRenderResult = ReadonlyMap; @@ -20,7 +20,9 @@ export interface LanguageConfig { readonly names: readonly string[]; } -export abstract class TargetLanguage { +export abstract class TargetLanguage< + Config extends LanguageConfig = LanguageConfig, +> { public readonly displayName: Config["displayName"]; public readonly names: Config["names"]; @@ -36,7 +38,7 @@ export abstract class TargetLanguage>; public get optionDefinitions(): Array> { - return Object.values(this.getOptions()).map(o => o.definition); + return Object.values(this.getOptions()).map((o) => o.definition); } public get cliOptionDefinitions(): { @@ -57,15 +59,18 @@ export abstract class TargetLanguage( + renderContext: RenderContext, + optionValues: RendererOptions, + ): Renderer; - public renderGraphAndSerialize( + public renderGraphAndSerialize( typeGraph: TypeGraph, givenOutputFilename: string, alphabetizeProperties: boolean, leadingComments: Comment[] | undefined, - rendererOptions: FixMeOptionsType, - indentation?: string + rendererOptions: RendererOptions, + indentation?: string, ): MultiFileRenderResult { if (indentation === undefined) { indentation = this.defaultIndentation; @@ -78,7 +83,9 @@ export abstract class TargetLanguage serializeRenderResult(s, renderResult.names, defined(indentation))); + return mapMap(renderResult.sources, (s) => + serializeRenderResult(s, renderResult.names, defined(indentation)), + ); } protected get defaultIndentation(): string { diff --git a/packages/quicktype-core/src/Transformers.ts b/packages/quicktype-core/src/Transformers.ts index 1cb2e016e..3827c92c1 100644 --- a/packages/quicktype-core/src/Transformers.ts +++ b/packages/quicktype-core/src/Transformers.ts @@ -6,14 +6,20 @@ import { definedMapWithDefault, hashCodeOf, hashString, - setUnionInto + setUnionInto, } from "collection-utils"; import { TypeAttributeKind } from "./attributes/TypeAttributes"; -import { type BaseGraphRewriteBuilder } from "./GraphRewriting"; +import type { BaseGraphRewriteBuilder } from "./GraphRewriting"; import { assert, indentationString, panic } from "./support/Support"; -import { EnumType, PrimitiveType, type Type, type TypeKind, UnionType } from "./Type"; -import { type TypeGraph } from "./Type/TypeGraph"; +import { + EnumType, + PrimitiveType, + type Type, + type TypeKind, + UnionType, +} from "./Type"; +import type { TypeGraph } from "./Type/TypeGraph"; import { type TypeRef, derefTypeRef } from "./Type/TypeRef"; function debugStringForType(t: Type): string { @@ -26,14 +32,14 @@ function debugStringForType(t: Type): string { } function getNumberOfNodes(xfer: Transformer | undefined): number { - return definedMapWithDefault(xfer, 0, x => x.getNumberOfNodes()); + return definedMapWithDefault(xfer, 0, (x) => x.getNumberOfNodes()); } export abstract class Transformer { public constructor( public readonly kind: string, protected readonly graph: TypeGraph, - public readonly sourceTypeRef: TypeRef + public readonly sourceTypeRef: TypeRef, ) {} public get sourceType(): Type { @@ -51,9 +57,14 @@ export abstract class Transformer { public abstract get canFail(): boolean; - public abstract reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer; + public abstract reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer; - public abstract reconstitute(builder: TBuilder): Transformer; + public abstract reconstitute( + builder: TBuilder, + ): Transformer; public equals(other: T): boolean { return this.sourceTypeRef === other.sourceTypeRef; @@ -82,7 +93,7 @@ export abstract class ProducerTransformer extends Transformer { kind: string, graph: TypeGraph, sourceTypeRef: TypeRef, - public readonly consumer: Transformer | undefined + public readonly consumer: Transformer | undefined, ) { super(kind, graph, sourceTypeRef); } @@ -119,13 +130,16 @@ export abstract class MatchTransformer extends Transformer { kind: string, graph: TypeGraph, sourceTypeRef: TypeRef, - public readonly transformer: Transformer + public readonly transformer: Transformer, ) { super(kind, graph, sourceTypeRef); } public getChildren(): Set { - return setUnionInto(super.getChildren(), this.transformer.getChildren()); + return setUnionInto( + super.getChildren(), + this.transformer.getChildren(), + ); } public getNumberOfNodes(): number { @@ -149,7 +163,11 @@ export abstract class MatchTransformer extends Transformer { } export class DecodingTransformer extends ProducerTransformer { - public constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { + public constructor( + graph: TypeGraph, + sourceTypeRef: TypeRef, + consumer: Transformer | undefined, + ) { super("decode", graph, sourceTypeRef, consumer); } @@ -157,26 +175,33 @@ export class DecodingTransformer extends ProducerTransformer { return false; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (continuationTransformer !== undefined) { - return panic("Reversing a decoding transformer cannot have a continuation"); + return panic( + "Reversing a decoding transformer cannot have a continuation", + ); } if (this.consumer === undefined) { return new EncodingTransformer(this.graph, targetTypeRef); - } else { - return this.consumer.reverse( - targetTypeRef, - new EncodingTransformer(this.graph, this.consumer.sourceTypeRef) - ); } + + return this.consumer.reverse( + targetTypeRef, + new EncodingTransformer(this.graph, this.consumer.sourceTypeRef), + ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new DecodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - definedMap(this.consumer, xfer => xfer.reconstitute(builder)) + definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), ); } @@ -195,12 +220,20 @@ export class EncodingTransformer extends Transformer { return false; } - public reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { + public reverse( + _targetTypeRef: TypeRef, + _continuationTransformer: Transformer | undefined, + ): Transformer { return panic("Can't reverse encoding transformer"); } - public reconstitute(builder: TBuilder): Transformer { - return new EncodingTransformer(builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef)); + public reconstitute( + builder: TBuilder, + ): Transformer { + return new EncodingTransformer( + builder.typeGraph, + builder.reconstituteTypeRef(this.sourceTypeRef), + ); } public equals(other: T): boolean { @@ -216,7 +249,7 @@ export class ArrayDecodingTransformer extends ProducerTransformer { sourceTypeRef: TypeRef, consumer: Transformer | undefined, private readonly _itemTargetTypeRef: TypeRef, - public readonly itemTransformer: Transformer + public readonly itemTransformer: Transformer, ) { super("decode-array", graph, sourceTypeRef, consumer); } @@ -228,7 +261,9 @@ export class ArrayDecodingTransformer extends ProducerTransformer { } public getNumberOfNodes(): number { - return super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes(); + return ( + super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes() + ); } public get canFail(): boolean { @@ -239,40 +274,50 @@ export class ArrayDecodingTransformer extends ProducerTransformer { return derefTypeRef(this._itemTargetTypeRef, this.graph); } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (continuationTransformer !== undefined) { - return panic("Reversing a decoding transformer cannot have a continuation"); + return panic( + "Reversing a decoding transformer cannot have a continuation", + ); } - const itemTransformer = this.itemTransformer.reverse(this._itemTargetTypeRef, undefined); + const itemTransformer = this.itemTransformer.reverse( + this._itemTargetTypeRef, + undefined, + ); if (this.consumer === undefined) { return new ArrayEncodingTransformer( this.graph, targetTypeRef, this.itemTransformer.sourceTypeRef, - itemTransformer - ); - } else { - return this.consumer.reverse( - targetTypeRef, - new ArrayEncodingTransformer( - this.graph, - this.consumer.sourceTypeRef, - this.itemTransformer.sourceTypeRef, - itemTransformer - ) + itemTransformer, ); } + + return this.consumer.reverse( + targetTypeRef, + new ArrayEncodingTransformer( + this.graph, + this.consumer.sourceTypeRef, + this.itemTransformer.sourceTypeRef, + itemTransformer, + ), + ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new ArrayDecodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - definedMap(this.consumer, xfer => xfer.reconstitute(builder)), + definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), builder.reconstituteTypeRef(this._itemTargetTypeRef), - this.itemTransformer.reconstitute(builder) + this.itemTransformer.reconstitute(builder), ); } @@ -286,7 +331,8 @@ export class ArrayDecodingTransformer extends ProducerTransformer { public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ArrayDecodingTransformer)) return false; - if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) return false; + if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) + return false; return this.itemTransformer.equals(other.itemTransformer); } @@ -301,7 +347,7 @@ export class ArrayEncodingTransformer extends Transformer { graph: TypeGraph, sourceTypeRef: TypeRef, private readonly _itemTargetTypeRef: TypeRef, - public readonly itemTransformer: Transformer + public readonly itemTransformer: Transformer, ) { super("encode-array", graph, sourceTypeRef); } @@ -313,7 +359,9 @@ export class ArrayEncodingTransformer extends Transformer { } public getNumberOfNodes(): number { - return super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes(); + return ( + super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes() + ); } public get canFail(): boolean { @@ -324,16 +372,21 @@ export class ArrayEncodingTransformer extends Transformer { return derefTypeRef(this._itemTargetTypeRef, this.graph); } - public reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { + public reverse( + _targetTypeRef: TypeRef, + _continuationTransformer: Transformer | undefined, + ): Transformer { return panic("Can't reverse array encoding transformer"); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new ArrayEncodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), builder.reconstituteTypeRef(this._itemTargetTypeRef), - this.itemTransformer.reconstitute(builder) + this.itemTransformer.reconstitute(builder), ); } @@ -346,7 +399,8 @@ export class ArrayEncodingTransformer extends Transformer { public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ArrayEncodingTransformer)) return false; - if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) return false; + if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) + return false; return this.itemTransformer.equals(other.itemTransformer); } @@ -360,14 +414,17 @@ export class ChoiceTransformer extends Transformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, - public readonly transformers: readonly Transformer[] + public readonly transformers: readonly Transformer[], ) { super("choice", graph, sourceTypeRef); - assert(transformers.length > 0, "Choice must have at least one transformer"); + assert( + transformers.length > 0, + "Choice must have at least one transformer", + ); } public getChildren(): Set { - let children = super.getChildren(); + const children = super.getChildren(); for (const xfer of this.transformers) { setUnionInto(children, xfer.getChildren()); } @@ -385,21 +442,41 @@ export class ChoiceTransformer extends Transformer { } public get canFail(): boolean { - return this.transformers.some(xfer => xfer.canFail); + return this.transformers.some((xfer) => xfer.canFail); } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { - const transformers = this.transformers.map(xfer => xfer.reverse(targetTypeRef, continuationTransformer)); - if (transformers.every(xfer => xfer instanceof UnionMemberMatchTransformer)) { - const memberMatchers = transformers as UnionMemberMatchTransformer[]; + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { + const transformers = this.transformers.map((xfer) => + xfer.reverse(targetTypeRef, continuationTransformer), + ); + if ( + transformers.every( + (xfer) => xfer instanceof UnionMemberMatchTransformer, + ) + ) { + const memberMatchers = + transformers as UnionMemberMatchTransformer[]; const first = memberMatchers[0]; - if (memberMatchers.every(xfer => first.memberType.equals(xfer.memberType))) { - const subTransformers = memberMatchers.map(xfer => xfer.transformer); + if ( + memberMatchers.every((xfer) => + first.memberType.equals(xfer.memberType), + ) + ) { + const subTransformers = memberMatchers.map( + (xfer) => xfer.transformer, + ); return new UnionMemberMatchTransformer( this.graph, targetTypeRef, - new ChoiceTransformer(this.graph, subTransformers[0].sourceTypeRef, subTransformers), - first.memberTypeRef + new ChoiceTransformer( + this.graph, + subTransformers[0].sourceTypeRef, + subTransformers, + ), + first.memberTypeRef, ); } } @@ -407,11 +484,13 @@ export class ChoiceTransformer extends Transformer { return new ChoiceTransformer(this.graph, targetTypeRef, transformers); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new ChoiceTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - this.transformers.map(xfer => xfer.reconstitute(builder)) + this.transformers.map((xfer) => xfer.reconstitute(builder)), ); } @@ -443,7 +522,7 @@ export class DecodingChoiceTransformer extends Transformer { public readonly boolTransformer: Transformer | undefined, public readonly stringTransformer: Transformer | undefined, public readonly arrayTransformer: Transformer | undefined, - public readonly objectTransformer: Transformer | undefined + public readonly objectTransformer: Transformer | undefined, ) { super("decoding-choice", graph, sourceTypeRef); } @@ -467,7 +546,7 @@ export class DecodingChoiceTransformer extends Transformer { } public getChildren(): Set { - let children = super.getChildren(); + const children = super.getChildren(); for (const xfer of this.transformers) { setUnionInto(children, xfer.getChildren()); } @@ -488,14 +567,17 @@ export class DecodingChoiceTransformer extends Transformer { return false; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { assert( continuationTransformer === undefined, - "Reversing a decoding transformer can't have a target transformer" + "Reversing a decoding transformer can't have a target transformer", ); - let transformers = new Map(); - let memberMatchTransformers = new Map(); + const transformers = new Map(); + const memberMatchTransformers = new Map(); function addCase(reversed: Transformer): void { if (reversed instanceof UnionMemberMatchTransformer) { @@ -544,7 +626,7 @@ export class DecodingChoiceTransformer extends Transformer { function filter(xfers: Transformer[]): Transformer[] { assert(xfers.length > 0, "Must have at least one transformer"); - const nonfailing = xfers.filter(xfer => { + const nonfailing = xfers.filter((xfer) => { // For member match transformers we're deciding between // multiple that match against the same member, so the fact // that the match can fail is not important, since if it fails @@ -552,34 +634,48 @@ export class DecodingChoiceTransformer extends Transformer { // its continuation can fail. if (xfer instanceof UnionMemberMatchTransformer) { return !xfer.transformer.canFail; - } else { - return !xfer.canFail; } + + return !xfer.canFail; }); if (nonfailing.length === 0) return xfers; const smallest = arraySortByInto( - nonfailing.map(x => [x.getNumberOfNodes(), x] as [number, Transformer]), - ([c, _]) => c + nonfailing.map( + (x) => [x.getNumberOfNodes(), x] as [number, Transformer], + ), + ([c, _]) => c, )[0][1]; return [smallest]; } this.transformers.forEach(reverseAndAdd); - const allTransformers = Array.from(transformers.values()).concat(Array.from(memberMatchTransformers.values())); - const resultingTransformers = ([] as Transformer[]).concat(...allTransformers.map(filter)); + const allTransformers = Array.from(transformers.values()).concat( + Array.from(memberMatchTransformers.values()), + ); + const resultingTransformers = ([] as Transformer[]).concat( + ...allTransformers.map(filter), + ); // No choice needed if there's only one if (resultingTransformers.length === 1) { return resultingTransformers[0]; } - return new ChoiceTransformer(this.graph, targetTypeRef, resultingTransformers); + return new ChoiceTransformer( + this.graph, + targetTypeRef, + resultingTransformers, + ); } - public reconstitute(builder: TBuilder): Transformer { - function reconstitute(xf: Transformer | undefined): Transformer | undefined { + public reconstitute( + builder: TBuilder, + ): Transformer { + function reconstitute( + xf: Transformer | undefined, + ): Transformer | undefined { if (xf === undefined) return undefined; return xf.reconstitute(builder); } @@ -593,20 +689,27 @@ export class DecodingChoiceTransformer extends Transformer { reconstitute(this.boolTransformer), reconstitute(this.stringTransformer), reconstitute(this.arrayTransformer), - reconstitute(this.objectTransformer) + reconstitute(this.objectTransformer), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof DecodingChoiceTransformer)) return false; - if (!areEqual(this.nullTransformer, other.nullTransformer)) return false; - if (!areEqual(this.integerTransformer, other.integerTransformer)) return false; - if (!areEqual(this.doubleTransformer, other.doubleTransformer)) return false; - if (!areEqual(this.boolTransformer, other.boolTransformer)) return false; - if (!areEqual(this.stringTransformer, other.stringTransformer)) return false; - if (!areEqual(this.arrayTransformer, other.arrayTransformer)) return false; - if (!areEqual(this.objectTransformer, other.objectTransformer)) return false; + if (!areEqual(this.nullTransformer, other.nullTransformer)) + return false; + if (!areEqual(this.integerTransformer, other.integerTransformer)) + return false; + if (!areEqual(this.doubleTransformer, other.doubleTransformer)) + return false; + if (!areEqual(this.boolTransformer, other.boolTransformer)) + return false; + if (!areEqual(this.stringTransformer, other.stringTransformer)) + return false; + if (!areEqual(this.arrayTransformer, other.arrayTransformer)) + return false; + if (!areEqual(this.objectTransformer, other.objectTransformer)) + return false; return true; } @@ -634,7 +737,7 @@ export class UnionMemberMatchTransformer extends MatchTransformer { graph: TypeGraph, sourceTypeRef: TypeRef, transformer: Transformer, - public readonly memberTypeRef: TypeRef + public readonly memberTypeRef: TypeRef, ) { super("union-member-match", graph, sourceTypeRef, transformer); } @@ -642,7 +745,9 @@ export class UnionMemberMatchTransformer extends MatchTransformer { public get sourceType(): UnionType { const t = derefTypeRef(this.sourceTypeRef, this.graph); if (!(t instanceof UnionType)) { - return panic("The source of a union member match transformer must be a union type"); + return panic( + "The source of a union member match transformer must be a union type", + ); } return t; @@ -660,16 +765,21 @@ export class UnionMemberMatchTransformer extends MatchTransformer { return super.getChildren().add(this.memberType); } - public reverse(_targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined): Transformer { + public reverse( + _targetTypeRef: TypeRef, + _continuationTransformer: Transformer | undefined, + ): Transformer { return panic("Can't reverse union member match transformer"); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new UnionMemberMatchTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), this.transformer.reconstitute(builder), - builder.reconstituteTypeRef(this.memberTypeRef) + builder.reconstituteTypeRef(this.memberTypeRef), ); } @@ -697,15 +807,20 @@ export class StringMatchTransformer extends MatchTransformer { graph: TypeGraph, sourceTypeRef: TypeRef, transformer: Transformer, - public readonly stringCase: string + public readonly stringCase: string, ) { super("string-match", graph, sourceTypeRef, transformer); } public get sourceType(): EnumType | PrimitiveType { const t = derefTypeRef(this.sourceTypeRef, this.graph); - if (!(t instanceof EnumType) && !(t instanceof PrimitiveType && t.kind === "string")) { - return panic("The source of a string match transformer must be an enum or string type"); + if ( + !(t instanceof EnumType) && + !(t instanceof PrimitiveType && t.kind === "string") + ) { + return panic( + "The source of a string match transformer must be an enum or string type", + ); } return t; @@ -715,24 +830,29 @@ export class StringMatchTransformer extends MatchTransformer { return true; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { return this.transformer.reverse( targetTypeRef, new StringProducerTransformer( this.graph, this.transformer.sourceTypeRef, continuationTransformer, - this.stringCase - ) + this.stringCase, + ), ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new StringMatchTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), this.transformer.reconstitute(builder), - this.stringCase + this.stringCase, ); } @@ -761,16 +881,31 @@ export class UnionInstantiationTransformer extends Transformer { return false; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (continuationTransformer === undefined) { - return panic("Union instantiation transformer reverse must have a continuation"); + return panic( + "Union instantiation transformer reverse must have a continuation", + ); } - return new UnionMemberMatchTransformer(this.graph, targetTypeRef, continuationTransformer, this.sourceTypeRef); + return new UnionMemberMatchTransformer( + this.graph, + targetTypeRef, + continuationTransformer, + this.sourceTypeRef, + ); } - public reconstitute(builder: TBuilder): Transformer { - return new UnionInstantiationTransformer(builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef)); + public reconstitute( + builder: TBuilder, + ): Transformer { + return new UnionInstantiationTransformer( + builder.typeGraph, + builder.reconstituteTypeRef(this.sourceTypeRef), + ); } public equals(other: T): boolean { @@ -787,7 +922,7 @@ export class StringProducerTransformer extends ProducerTransformer { graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, - public readonly result: string + public readonly result: string, ) { super("string-producer", graph, sourceTypeRef, consumer); } @@ -796,32 +931,44 @@ export class StringProducerTransformer extends ProducerTransformer { return false; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (continuationTransformer === undefined) { - return panic("Reversing a string producer transformer must have a continuation"); + return panic( + "Reversing a string producer transformer must have a continuation", + ); } if (this.consumer === undefined) { - return new StringMatchTransformer(this.graph, targetTypeRef, continuationTransformer, this.result); - } else { - return this.consumer.reverse( + return new StringMatchTransformer( + this.graph, targetTypeRef, - new StringMatchTransformer( - this.graph, - this.consumer.sourceTypeRef, - continuationTransformer, - this.result - ) + continuationTransformer, + this.result, ); } + + return this.consumer.reverse( + targetTypeRef, + new StringMatchTransformer( + this.graph, + this.consumer.sourceTypeRef, + continuationTransformer, + this.result, + ), + ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new StringProducerTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - definedMap(this.consumer, xfer => xfer.reconstitute(builder)), - this.result + definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), + this.result, ); } @@ -842,7 +989,11 @@ export class StringProducerTransformer extends ProducerTransformer { } export class ParseStringTransformer extends ProducerTransformer { - public constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { + public constructor( + graph: TypeGraph, + sourceTypeRef: TypeRef, + consumer: Transformer | undefined, + ) { super("parse-string", graph, sourceTypeRef, consumer); } @@ -850,22 +1001,35 @@ export class ParseStringTransformer extends ProducerTransformer { return true; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (this.consumer === undefined) { - return new StringifyTransformer(this.graph, targetTypeRef, continuationTransformer); - } else { - return this.consumer.reverse( + return new StringifyTransformer( + this.graph, targetTypeRef, - new StringifyTransformer(this.graph, this.consumer.sourceTypeRef, continuationTransformer) + continuationTransformer, ); } + + return this.consumer.reverse( + targetTypeRef, + new StringifyTransformer( + this.graph, + this.consumer.sourceTypeRef, + continuationTransformer, + ), + ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new ParseStringTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - definedMap(this.consumer, xfer => xfer.reconstitute(builder)) + definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), ); } @@ -876,7 +1040,11 @@ export class ParseStringTransformer extends ProducerTransformer { } export class StringifyTransformer extends ProducerTransformer { - public constructor(graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined) { + public constructor( + graph: TypeGraph, + sourceTypeRef: TypeRef, + consumer: Transformer | undefined, + ) { super("stringify", graph, sourceTypeRef, consumer); } @@ -884,22 +1052,35 @@ export class StringifyTransformer extends ProducerTransformer { return false; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (this.consumer === undefined) { - return new ParseStringTransformer(this.graph, targetTypeRef, continuationTransformer); - } else { - return this.consumer.reverse( + return new ParseStringTransformer( + this.graph, targetTypeRef, - new ParseStringTransformer(this.graph, this.consumer.sourceTypeRef, continuationTransformer) + continuationTransformer, ); } + + return this.consumer.reverse( + targetTypeRef, + new ParseStringTransformer( + this.graph, + this.consumer.sourceTypeRef, + continuationTransformer, + ), + ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new StringifyTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - definedMap(this.consumer, xfer => xfer.reconstitute(builder)) + definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), ); } @@ -915,7 +1096,7 @@ export class MinMaxLengthCheckTransformer extends ProducerTransformer { sourceTypeRef: TypeRef, consumer: Transformer | undefined, public readonly minLength: number | undefined, - public readonly maxLength: number | undefined + public readonly maxLength: number | undefined, ) { super("min-max-length-check", graph, sourceTypeRef, consumer); } @@ -924,36 +1105,41 @@ export class MinMaxLengthCheckTransformer extends ProducerTransformer { return true; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (this.consumer === undefined) { return new MinMaxLengthCheckTransformer( this.graph, targetTypeRef, continuationTransformer, this.minLength, - this.maxLength - ); - } else { - return this.consumer.reverse( - targetTypeRef, - new MinMaxLengthCheckTransformer( - this.graph, - this.consumer.sourceTypeRef, - continuationTransformer, - this.minLength, - this.maxLength - ) + this.maxLength, ); } + + return this.consumer.reverse( + targetTypeRef, + new MinMaxLengthCheckTransformer( + this.graph, + this.consumer.sourceTypeRef, + continuationTransformer, + this.minLength, + this.maxLength, + ), + ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new MinMaxLengthCheckTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - definedMap(this.consumer, xfer => xfer.reconstitute(builder)), + definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), this.minLength, - this.maxLength + this.maxLength, ); } @@ -973,7 +1159,7 @@ export class MinMaxValueTransformer extends ProducerTransformer { sourceTypeRef: TypeRef, consumer: Transformer | undefined, public readonly minimum: number | undefined, - public readonly maximum: number | undefined + public readonly maximum: number | undefined, ) { super("min-max-value-check", graph, sourceTypeRef, consumer); } @@ -982,43 +1168,50 @@ export class MinMaxValueTransformer extends ProducerTransformer { return true; } - public reverse(targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined): Transformer { + public reverse( + targetTypeRef: TypeRef, + continuationTransformer: Transformer | undefined, + ): Transformer { if (this.consumer === undefined) { return new MinMaxValueTransformer( this.graph, targetTypeRef, continuationTransformer, this.minimum, - this.maximum - ); - } else { - return this.consumer.reverse( - targetTypeRef, - new MinMaxValueTransformer( - this.graph, - this.consumer.sourceTypeRef, - continuationTransformer, - this.minimum, - this.maximum - ) + this.maximum, ); } + + return this.consumer.reverse( + targetTypeRef, + new MinMaxValueTransformer( + this.graph, + this.consumer.sourceTypeRef, + continuationTransformer, + this.minimum, + this.maximum, + ), + ); } - public reconstitute(builder: TBuilder): Transformer { + public reconstitute( + builder: TBuilder, + ): Transformer { return new MinMaxValueTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), - definedMap(this.consumer, xfer => xfer.reconstitute(builder)), + definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), this.minimum, - this.maximum + this.maximum, ); } public equals(other: T): boolean { if (!super.equals(other)) return false; return ( - other instanceof MinMaxValueTransformer && this.minimum === other.minimum && this.maximum === other.maximum + other instanceof MinMaxValueTransformer && + this.minimum === other.minimum && + this.maximum === other.maximum ); } } @@ -1027,7 +1220,7 @@ export class Transformation { public constructor( private readonly _graph: TypeGraph, private readonly _targetTypeRef: TypeRef, - public readonly transformer: Transformer + public readonly transformer: Transformer, ) {} public get sourceType(): Type { @@ -1042,7 +1235,7 @@ export class Transformation { return new Transformation( this._graph, this.transformer.sourceTypeRef, - this.transformer.reverse(this._targetTypeRef, undefined) + this.transformer.reverse(this._targetTypeRef, undefined), ); } @@ -1050,17 +1243,22 @@ export class Transformation { return this.transformer.getChildren().add(this.targetType); } - public reconstitute(builder: TBuilder): Transformation { + public reconstitute( + builder: TBuilder, + ): Transformation { return new Transformation( builder.typeGraph, builder.reconstituteTypeRef(this._targetTypeRef), - this.transformer.reconstitute(builder) + this.transformer.reconstitute(builder), ); } public equals(other: T): boolean { if (!(other instanceof Transformation)) return false; - return this._targetTypeRef === other._targetTypeRef && this.transformer.equals(other.transformer); + return ( + this._targetTypeRef === other._targetTypeRef && + this.transformer.equals(other.transformer) + ); } public hashCode(): number { @@ -1094,7 +1292,7 @@ class TransformationTypeAttributeKind extends TypeAttributeKind public reconstitute( builder: TBuilder, - xf: Transformation + xf: Transformation, ): Transformation { return xf.reconstitute(builder); } @@ -1104,16 +1302,22 @@ class TransformationTypeAttributeKind extends TypeAttributeKind } } -export const transformationTypeAttributeKind: TypeAttributeKind = new TransformationTypeAttributeKind(); +export const transformationTypeAttributeKind: TypeAttributeKind = + new TransformationTypeAttributeKind(); export function transformationForType(t: Type): Transformation | undefined { - return transformationTypeAttributeKind.tryGetInAttributes(t.getAttributes()); + return transformationTypeAttributeKind.tryGetInAttributes( + t.getAttributes(), + ); } export function followTargetType(t: Type): Type { for (;;) { const xf = transformationForType(t); - if (xf === undefined) return t; + if (xf === undefined) { + return t; + } + t = xf.targetType; } } diff --git a/packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts b/packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts index 60e656743..2b4ece435 100644 --- a/packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts +++ b/packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts @@ -2,7 +2,7 @@ import { setUnionManyInto } from "collection-utils"; import { TypeAttributeKind } from "../attributes/TypeAttributes"; -import { type TypeKind } from "./TransformedStringType"; +import type { TypeKind } from "./TransformedStringType"; // FIXME: Don't infer provenance. All original types should be present in // non-inferred form in the final graph. @@ -26,9 +26,10 @@ class ProvenanceTypeAttributeKind extends TypeAttributeKind> { public stringify(p: Set): string { return Array.from(p) .sort() - .map(i => i.toString()) + .map((i) => i.toString()) .join(","); } } -export const provenanceTypeAttributeKind: TypeAttributeKind> = new ProvenanceTypeAttributeKind(); +export const provenanceTypeAttributeKind: TypeAttributeKind> = + new ProvenanceTypeAttributeKind(); diff --git a/packages/quicktype-core/src/Type/TransformedStringType.ts b/packages/quicktype-core/src/Type/TransformedStringType.ts index 617ca9230..6a230611c 100644 --- a/packages/quicktype-core/src/Type/TransformedStringType.ts +++ b/packages/quicktype-core/src/Type/TransformedStringType.ts @@ -1,13 +1,13 @@ import { // eslint-disable-next-line @typescript-eslint/no-redeclare hasOwnProperty, - mapFromObject + mapFromObject, } from "collection-utils"; -import { type TypeAttributes } from "../attributes/TypeAttributes"; +import type { TypeAttributes } from "../attributes/TypeAttributes"; import { uriInferenceAttributesProducer } from "../attributes/URIAttributes"; -import { type Type } from "./Type"; +import type { Type } from "./Type"; /** * `jsonSchema` is the `format` to be used to represent this string type in @@ -30,39 +30,69 @@ export interface TransformedStringTypeTargets { * stringified integers map to integers. */ const transformedStringTypeTargetTypeKinds = { - "date": { jsonSchema: "date", primitive: undefined }, - "time": { jsonSchema: "time", primitive: undefined }, + date: { jsonSchema: "date", primitive: undefined }, + time: { jsonSchema: "time", primitive: undefined }, "date-time": { jsonSchema: "date-time", primitive: undefined }, - "uuid": { jsonSchema: "uuid", primitive: undefined }, - "uri": { jsonSchema: "uri", primitive: undefined, attributesProducer: uriInferenceAttributesProducer }, - "integer-string": { jsonSchema: "integer", primitive: "integer" } as TransformedStringTypeTargets, - "bool-string": { jsonSchema: "boolean", primitive: "bool" } as TransformedStringTypeTargets + uuid: { jsonSchema: "uuid", primitive: undefined }, + uri: { + jsonSchema: "uri", + primitive: undefined, + attributesProducer: uriInferenceAttributesProducer, + }, + "integer-string": { + jsonSchema: "integer", + primitive: "integer", + } as TransformedStringTypeTargets, + "bool-string": { + jsonSchema: "boolean", + primitive: "bool", + } as TransformedStringTypeTargets, }; export const transformedStringTypeTargetTypeKindsMap = mapFromObject( transformedStringTypeTargetTypeKinds as { [kind: string]: TransformedStringTypeTargets; - } + }, ); -export type TransformedStringTypeKind = keyof typeof transformedStringTypeTargetTypeKinds; +export type TransformedStringTypeKind = + keyof typeof transformedStringTypeTargetTypeKinds; export type PrimitiveStringTypeKind = "string" | TransformedStringTypeKind; -export type PrimitiveNonStringTypeKind = "none" | "any" | "null" | "bool" | "integer" | "double"; -export type PrimitiveTypeKind = PrimitiveNonStringTypeKind | PrimitiveStringTypeKind; +export type PrimitiveNonStringTypeKind = + | "none" + | "any" + | "null" + | "bool" + | "integer" + | "double"; +export type PrimitiveTypeKind = + | PrimitiveNonStringTypeKind + | PrimitiveStringTypeKind; export type NamedTypeKind = "class" | "enum" | "union"; -export type TypeKind = PrimitiveTypeKind | NamedTypeKind | "array" | "object" | "map" | "intersection"; +export type TypeKind = + | PrimitiveTypeKind + | NamedTypeKind + | "array" + | "object" + | "map" + | "intersection"; export type ObjectTypeKind = "object" | "map" | "class"; export const transformedStringTypeKinds = new Set( - Object.getOwnPropertyNames(transformedStringTypeTargetTypeKinds) + Object.getOwnPropertyNames(transformedStringTypeTargetTypeKinds), ) as ReadonlySet; -export function isPrimitiveStringTypeKind(kind: string): kind is PrimitiveStringTypeKind { - return kind === "string" || hasOwnProperty(transformedStringTypeTargetTypeKinds, kind); +export function isPrimitiveStringTypeKind( + kind: string, +): kind is PrimitiveStringTypeKind { + return ( + kind === "string" || + hasOwnProperty(transformedStringTypeTargetTypeKinds, kind) + ); } export function targetTypeKindForTransformedStringTypeKind( - kind: PrimitiveStringTypeKind + kind: PrimitiveStringTypeKind, ): PrimitiveNonStringTypeKind | undefined { const target = transformedStringTypeTargetTypeKindsMap.get(kind); if (target === undefined) return undefined; @@ -76,7 +106,9 @@ export function isNumberTypeKind(kind: TypeKind): kind is "integer" | "double" { export function isPrimitiveTypeKind(kind: TypeKind): kind is PrimitiveTypeKind { if (isPrimitiveStringTypeKind(kind)) return true; if (isNumberTypeKind(kind)) return true; - return kind === "none" || kind === "any" || kind === "null" || kind === "bool"; + return ( + kind === "none" || kind === "any" || kind === "null" || kind === "bool" + ); } export function triviallyStructurallyCompatible(x: Type, y: Type): boolean { diff --git a/packages/quicktype-core/src/Type/Type.ts b/packages/quicktype-core/src/Type/Type.ts index 37f8a5aff..f7bb83721 100644 --- a/packages/quicktype-core/src/Type/Type.ts +++ b/packages/quicktype-core/src/Type/Type.ts @@ -16,12 +16,18 @@ import { setMap, setSortBy, setUnionInto, - toReadonlySet + toReadonlySet, } from "collection-utils"; -import { type TypeAttributes } from "../attributes/TypeAttributes"; -import { type TypeNames, namesTypeAttributeKind } from "../attributes/TypeNames"; -import { type BaseGraphRewriteBuilder, type TypeReconstituter } from "../GraphRewriting"; +import type { TypeAttributes } from "../attributes/TypeAttributes"; +import { + type TypeNames, + namesTypeAttributeKind, +} from "../attributes/TypeNames"; +import type { + BaseGraphRewriteBuilder, + TypeReconstituter, +} from "../GraphRewriting"; import { messageAssert } from "../Messages"; import { assert, defined, panic } from "../support/Support"; @@ -30,10 +36,15 @@ import { type PrimitiveTypeKind, type TypeKind, isPrimitiveStringTypeKind, - triviallyStructurallyCompatible + triviallyStructurallyCompatible, } from "./TransformedStringType"; -import { type TypeGraph } from "./TypeGraph"; -import { type TypeRef, attributesForTypeRef, derefTypeRef, typeRefIndex } from "./TypeRef"; +import type { TypeGraph } from "./TypeGraph"; +import { + type TypeRef, + attributesForTypeRef, + derefTypeRef, + typeRefIndex, +} from "./TypeRef"; export class TypeIdentity { private readonly _hashCode: number; @@ -41,7 +52,7 @@ export class TypeIdentity { public constructor( private readonly _kind: TypeKind, // FIXME: strongly type this - private readonly _components: readonly unknown[] + private readonly _components: readonly unknown[], ) { let h = hashCodeInit; h = addHashCode(h, hashCodeOf(this._kind)); @@ -56,9 +67,13 @@ export class TypeIdentity { if (!(other instanceof TypeIdentity)) return false; if (this._kind !== other._kind) return false; const n = this._components.length; - assert(n === other._components.length, "Components of a type kind's identity must have the same length"); + assert( + n === other._components.length, + "Components of a type kind's identity must have the same length", + ); for (let i = 0; i < n; i++) { - if (!areEqual(this._components[i], other._components[i])) return false; + if (!areEqual(this._components[i], other._components[i])) + return false; } return true; @@ -77,7 +92,7 @@ export abstract class Type { public constructor( public readonly typeRef: TypeRef, - protected readonly graph: TypeGraph + protected readonly graph: TypeGraph, ) {} public get index(): number { @@ -88,7 +103,7 @@ export abstract class Type { public abstract getNonAttributeChildren(): Set; public getChildren(): ReadonlySet { - let result = this.getNonAttributeChildren(); + const result = this.getNonAttributeChildren(); for (const [k, v] of this.getAttributes()) { if (k.children === undefined) continue; setUnionInto(result, k.children(v)); @@ -102,11 +117,16 @@ export abstract class Type { } public get hasNames(): boolean { - return namesTypeAttributeKind.tryGetInAttributes(this.getAttributes()) !== undefined; + return ( + namesTypeAttributeKind.tryGetInAttributes(this.getAttributes()) !== + undefined + ); } public getNames(): TypeNames { - return defined(namesTypeAttributeKind.tryGetInAttributes(this.getAttributes())); + return defined( + namesTypeAttributeKind.tryGetInAttributes(this.getAttributes()), + ); } public getCombinedName(): string { @@ -119,7 +139,7 @@ export abstract class Type { public abstract get identity(): MaybeTypeIdentity; public abstract reconstitute( builder: TypeReconstituter, - canonicalOrder: boolean + canonicalOrder: boolean, ): void; public get debugPrintKind(): string { @@ -140,10 +160,13 @@ export abstract class Type { protected abstract structuralEqualityStep( other: Type, conflateNumbers: boolean, - queue: (a: Type, b: Type) => boolean + queue: (a: Type, b: Type) => boolean, ): boolean; - public structurallyCompatible(other: Type, conflateNumbers = false): boolean { + public structurallyCompatible( + other: Type, + conflateNumbers = false, + ): boolean { function kindsCompatible(kind1: TypeKind, kind2: TypeKind): boolean { if (kind1 === kind2) return true; if (!conflateNumbers) return false; @@ -180,8 +203,8 @@ export abstract class Type { } if (!a.isPrimitive()) { - let ai = a.index; - let bi = b.index; + const ai = a.index; + const bi = b.index; let found = false; for (const [dai, dbi] of done) { @@ -196,7 +219,8 @@ export abstract class Type { } failed = false; - if (!a.structuralEqualityStep(b, conflateNumbers, queue)) return false; + if (!a.structuralEqualityStep(b, conflateNumbers, queue)) + return false; if (failed) return false; } @@ -242,7 +266,10 @@ function identityAttributes(attributes: TypeAttributes): TypeAttributes { return mapFilter(attributes, (_, kind) => kind.inIdentity); } -export function primitiveTypeIdentity(kind: PrimitiveTypeKind, attributes: TypeAttributes): MaybeTypeIdentity { +export function primitiveTypeIdentity( + kind: PrimitiveTypeKind, + attributes: TypeAttributes, +): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity(kind, [identityAttributes(attributes)]); } @@ -251,13 +278,15 @@ export class PrimitiveType extends Type { public constructor( typeRef: TypeRef, graph: TypeGraph, - public readonly kind: PrimitiveTypeKind + public readonly kind: PrimitiveTypeKind, ) { super(typeRef, graph); } public get isNullable(): boolean { - return this.kind === "null" || this.kind === "any" || this.kind === "none"; + return ( + this.kind === "null" || this.kind === "any" || this.kind === "none" + ); } public isPrimitive(): this is PrimitiveType { @@ -272,22 +301,30 @@ export class PrimitiveType extends Type { return primitiveTypeIdentity(this.kind, this.getAttributes()); } - public reconstitute(builder: TypeReconstituter): void { + public reconstitute( + builder: TypeReconstituter, + ): void { builder.getPrimitiveType(this.kind); } protected structuralEqualityStep( _other: Type, _conflateNumbers: boolean, - _queue: (a: Type, b: Type) => boolean + _queue: (a: Type, b: Type) => boolean, ): boolean { return true; } } -export function arrayTypeIdentity(attributes: TypeAttributes, itemsRef: TypeRef): MaybeTypeIdentity { +export function arrayTypeIdentity( + attributes: TypeAttributes, + itemsRef: TypeRef, +): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; - return new TypeIdentity("array", [identityAttributes(attributes), itemsRef]); + return new TypeIdentity("array", [ + identityAttributes(attributes), + itemsRef, + ]); } export class ArrayType extends Type { @@ -296,14 +333,14 @@ export class ArrayType extends Type { public constructor( typeRef: TypeRef, graph: TypeGraph, - private _itemsRef?: TypeRef + private _itemsRef?: TypeRef, ) { super(typeRef, graph); } public setItems(itemsRef: TypeRef): void { if (this._itemsRef !== undefined) { - return panic("Can only set array items once"); + panic("Can only set array items once"); } this._itemsRef = itemsRef; @@ -337,7 +374,9 @@ export class ArrayType extends Type { return arrayTypeIdentity(this.getAttributes(), this.getItemsRef()); } - public reconstitute(builder: TypeReconstituter): void { + public reconstitute( + builder: TypeReconstituter, + ): void { const itemsRef = this.getItemsRef(); const maybeItems = builder.lookup(itemsRef); if (maybeItems === undefined) { @@ -351,7 +390,7 @@ export class ArrayType extends Type { protected structuralEqualityStep( other: ArrayType, _conflateNumbers: boolean, - queue: (a: Type, b: Type) => boolean + queue: (a: Type, b: Type) => boolean, ): boolean { return queue(this.items, other.items); } @@ -360,7 +399,7 @@ export class ArrayType extends Type { export class GenericClassProperty { public constructor( public readonly typeData: T, - public readonly isOptional: boolean + public readonly isOptional: boolean, ) {} public equals(other: GenericClassProperty): boolean { @@ -368,7 +407,10 @@ export class GenericClassProperty { return false; } - return areEqual(this.typeData, other.typeData) && this.isOptional === other.isOptional; + return ( + areEqual(this.typeData, other.typeData) && + this.isOptional === other.isOptional + ); } public hashCode(): number { @@ -380,7 +422,7 @@ export class ClassProperty extends GenericClassProperty { public constructor( typeRef: TypeRef, public readonly graph: TypeGraph, - isOptional: boolean + isOptional: boolean, ) { super(typeRef, isOptional); } @@ -398,24 +440,33 @@ function objectTypeIdentify( kind: ObjectTypeKind, attributes: TypeAttributes, properties: ReadonlyMap, - additionalPropertiesRef: TypeRef | undefined + additionalPropertiesRef: TypeRef | undefined, ): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; - return new TypeIdentity(kind, [identityAttributes(attributes), properties, additionalPropertiesRef]); + return new TypeIdentity(kind, [ + identityAttributes(attributes), + properties, + additionalPropertiesRef, + ]); } export function classTypeIdentity( attributes: TypeAttributes, - properties: ReadonlyMap + properties: ReadonlyMap, ): MaybeTypeIdentity { return objectTypeIdentify("class", attributes, properties, undefined); } export function mapTypeIdentify( attributes: TypeAttributes, - additionalPropertiesRef: TypeRef | undefined + additionalPropertiesRef: TypeRef | undefined, ): MaybeTypeIdentity { - return objectTypeIdentify("map", attributes, new Map(), additionalPropertiesRef); + return objectTypeIdentify( + "map", + attributes, + new Map(), + additionalPropertiesRef, + ); } export class ObjectType extends Type { @@ -425,7 +476,7 @@ export class ObjectType extends Type { public readonly kind: ObjectTypeKind, public readonly isFixed: boolean, private _properties: ReadonlyMap | undefined, - private _additionalPropertiesRef: TypeRef | undefined + private _additionalPropertiesRef: TypeRef | undefined, ) { super(typeRef, graph); @@ -444,16 +495,22 @@ export class ObjectType extends Type { public setProperties( properties: ReadonlyMap, - additionalPropertiesRef: TypeRef | undefined + additionalPropertiesRef: TypeRef | undefined, ): void { - assert(this._properties === undefined, "Tried to set object properties twice"); + assert( + this._properties === undefined, + "Tried to set object properties twice", + ); if (this instanceof MapType) { assert(properties.size === 0, "Cannot set properties on map type"); } if (this instanceof ClassType) { - assert(additionalPropertiesRef === undefined, "Cannot set additional properties of class type"); + assert( + additionalPropertiesRef === undefined, + "Cannot set additional properties of class type", + ); } this._properties = properties; @@ -480,7 +537,9 @@ export class ObjectType extends Type { } public getNonAttributeChildren(): Set { - const types = mapSortToArray(this.getProperties(), (_, k) => k).map(([_, p]) => p.type); + const types = mapSortToArray(this.getProperties(), (_, k) => k).map( + ([_, p]) => p.type, + ); const additionalProperties = this.getAdditionalProperties(); if (additionalProperties !== undefined) { types.push(additionalProperties); @@ -503,31 +562,45 @@ export class ObjectType extends Type { this.kind, this.getAttributes(), this.getProperties(), - this.getAdditionalPropertiesRef() + this.getAdditionalPropertiesRef(), ); } public reconstitute( builder: TypeReconstituter, - canonicalOrder: boolean + canonicalOrder: boolean, ): void { const sortedProperties = this.getSortedProperties(); - const propertiesInNewOrder = canonicalOrder ? sortedProperties : this.getProperties(); - const maybePropertyTypes = builder.lookupMap(mapMap(sortedProperties, cp => cp.typeRef)); - const maybeAdditionalProperties = definedMap(this._additionalPropertiesRef, r => builder.lookup(r)); + const propertiesInNewOrder = canonicalOrder + ? sortedProperties + : this.getProperties(); + const maybePropertyTypes = builder.lookupMap( + mapMap(sortedProperties, (cp) => cp.typeRef), + ); + const maybeAdditionalProperties = definedMap( + this._additionalPropertiesRef, + (r) => builder.lookup(r), + ); if ( maybePropertyTypes !== undefined && - (maybeAdditionalProperties !== undefined || this._additionalPropertiesRef === undefined) + (maybeAdditionalProperties !== undefined || + this._additionalPropertiesRef === undefined) ) { const properties = mapMap(propertiesInNewOrder, (cp, n) => - builder.makeClassProperty(defined(maybePropertyTypes.get(n)), cp.isOptional) + builder.makeClassProperty( + defined(maybePropertyTypes.get(n)), + cp.isOptional, + ), ); switch (this.kind) { case "object": assert(this.isFixed); - builder.getObjectType(properties, maybeAdditionalProperties); + builder.getObjectType( + properties, + maybeAdditionalProperties, + ); break; case "map": builder.getMapType(defined(maybeAdditionalProperties)); @@ -541,7 +614,7 @@ export class ObjectType extends Type { break; default: - return panic(`Invalid object type kind ${this.kind}`); + panic(`Invalid object type kind ${this.kind}`); } } else { switch (this.kind) { @@ -556,14 +629,22 @@ export class ObjectType extends Type { builder.getUniqueClassType(this.isFixed, undefined); break; default: - return panic(`Invalid object type kind ${this.kind}`); + panic(`Invalid object type kind ${this.kind}`); } - const reconstitutedTypes = mapMap(sortedProperties, cp => builder.reconstitute(cp.typeRef)); + const reconstitutedTypes = mapMap(sortedProperties, (cp) => + builder.reconstitute(cp.typeRef), + ); const properties = mapMap(propertiesInNewOrder, (cp, n) => - builder.makeClassProperty(defined(reconstitutedTypes.get(n)), cp.isOptional) + builder.makeClassProperty( + defined(reconstitutedTypes.get(n)), + cp.isOptional, + ), + ); + const additionalProperties = definedMap( + this._additionalPropertiesRef, + (r) => builder.reconstitute(r), ); - const additionalProperties = definedMap(this._additionalPropertiesRef, r => builder.reconstitute(r)); builder.setObjectProperties(properties, additionalProperties); } } @@ -571,7 +652,7 @@ export class ObjectType extends Type { protected structuralEqualityStep( other: ObjectType, _conflateNumbers: boolean, - queue: (a: Type, b: Type) => boolean + queue: (a: Type, b: Type) => boolean, ): boolean { const pa = this.getProperties(); const pb = other.getProperties(); @@ -579,7 +660,11 @@ export class ObjectType extends Type { let failed = false; for (const [name, cpa] of pa) { const cpb = pb.get(name); - if (cpb === undefined || cpa.isOptional !== cpb.isOptional || !queue(cpa.type, cpb.type)) { + if ( + cpb === undefined || + cpa.isOptional !== cpb.isOptional || + !queue(cpa.type, cpb.type) + ) { failed = true; return false; } @@ -589,8 +674,16 @@ export class ObjectType extends Type { const thisAdditionalProperties = this.getAdditionalProperties(); const otherAdditionalProperties = other.getAdditionalProperties(); - if ((thisAdditionalProperties === undefined) !== (otherAdditionalProperties === undefined)) return false; - if (thisAdditionalProperties === undefined || otherAdditionalProperties === undefined) return true; + if ( + (thisAdditionalProperties === undefined) !== + (otherAdditionalProperties === undefined) + ) + return false; + if ( + thisAdditionalProperties === undefined || + otherAdditionalProperties === undefined + ) + return true; return queue(thisAdditionalProperties, otherAdditionalProperties); } } @@ -600,21 +693,25 @@ export class ClassType extends ObjectType { typeRef: TypeRef, graph: TypeGraph, isFixed: boolean, - properties: ReadonlyMap | undefined + properties: ReadonlyMap | undefined, ) { super(typeRef, graph, "class", isFixed, properties, undefined); } } export class MapType extends ObjectType { - public constructor(typeRef: TypeRef, graph: TypeGraph, valuesRef: TypeRef | undefined) { + public constructor( + typeRef: TypeRef, + graph: TypeGraph, + valuesRef: TypeRef | undefined, + ) { super( typeRef, graph, "map", false, definedMap(valuesRef, () => new Map()), - valuesRef + valuesRef, ); } @@ -624,7 +721,10 @@ export class MapType extends ObjectType { } } -export function enumTypeIdentity(attributes: TypeAttributes, cases: ReadonlySet): MaybeTypeIdentity { +export function enumTypeIdentity( + attributes: TypeAttributes, + cases: ReadonlySet, +): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity("enum", [identityAttributes(attributes), cases]); } @@ -635,7 +735,7 @@ export class EnumType extends Type { public constructor( typeRef: TypeRef, graph: TypeGraph, - public readonly cases: ReadonlySet + public readonly cases: ReadonlySet, ) { super(typeRef, graph); } @@ -656,14 +756,16 @@ export class EnumType extends Type { return new Set(); } - public reconstitute(builder: TypeReconstituter): void { + public reconstitute( + builder: TypeReconstituter, + ): void { builder.getEnumType(this.cases); } protected structuralEqualityStep( other: EnumType, _conflateNumbers: boolean, - _queue: (a: Type, b: Type) => void + _queue: (a: Type, b: Type) => void, ): boolean { return areEqual(this.cases, other.cases); } @@ -673,20 +775,28 @@ export function setOperationCasesEqual( typesA: Iterable, typesB: Iterable, conflateNumbers: boolean, - membersEqual: (a: Type, b: Type) => boolean + membersEqual: (a: Type, b: Type) => boolean, ): boolean { const ma = toReadonlySet(typesA); const mb = toReadonlySet(typesB); if (ma.size !== mb.size) return false; - return iterableEvery(ma, ta => { - const tb = iterableFind(mb, t => t.kind === ta.kind); + return iterableEvery(ma, (ta) => { + const tb = iterableFind(mb, (t) => t.kind === ta.kind); if (tb !== undefined) { if (membersEqual(ta, tb)) return true; } if (conflateNumbers) { - if (ta.kind === "integer" && iterableSome(mb, t => t.kind === "double")) return true; - if (ta.kind === "double" && iterableSome(mb, t => t.kind === "integer")) return true; + if ( + ta.kind === "integer" && + iterableSome(mb, (t) => t.kind === "double") + ) + return true; + if ( + ta.kind === "double" && + iterableSome(mb, (t) => t.kind === "integer") + ) + return true; } return false; @@ -696,19 +806,22 @@ export function setOperationCasesEqual( export function setOperationTypeIdentity( kind: TypeKind, attributes: TypeAttributes, - memberRefs: ReadonlySet + memberRefs: ReadonlySet, ): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity(kind, [identityAttributes(attributes), memberRefs]); } -export function unionTypeIdentity(attributes: TypeAttributes, memberRefs: ReadonlySet): MaybeTypeIdentity { +export function unionTypeIdentity( + attributes: TypeAttributes, + memberRefs: ReadonlySet, +): MaybeTypeIdentity { return setOperationTypeIdentity("union", attributes, memberRefs); } export function intersectionTypeIdentity( attributes: TypeAttributes, - memberRefs: ReadonlySet + memberRefs: ReadonlySet, ): MaybeTypeIdentity { return setOperationTypeIdentity("intersection", attributes, memberRefs); } @@ -718,14 +831,14 @@ export abstract class SetOperationType extends Type { typeRef: TypeRef, graph: TypeGraph, public readonly kind: TypeKind, - private _memberRefs?: ReadonlySet + private _memberRefs?: ReadonlySet, ) { super(typeRef, graph); } public setMembers(memberRefs: ReadonlySet): void { if (this._memberRefs !== undefined) { - return panic("Can only set map members once"); + panic("Can only set map members once"); } this._memberRefs = memberRefs; @@ -740,7 +853,9 @@ export abstract class SetOperationType extends Type { } public get members(): ReadonlySet { - return setMap(this.getMemberRefs(), tref => derefTypeRef(tref, this.graph)); + return setMap(this.getMemberRefs(), (tref) => + derefTypeRef(tref, this.graph), + ); } public get sortedMembers(): ReadonlySet { @@ -749,7 +864,7 @@ export abstract class SetOperationType extends Type { public getNonAttributeChildren(): Set { // FIXME: We're assuming no two members of the same kind. - return setSortBy(this.members, t => t.kind); + return setSortBy(this.members, (t) => t.kind); } public isPrimitive(): this is PrimitiveType { @@ -757,37 +872,59 @@ export abstract class SetOperationType extends Type { } public get identity(): MaybeTypeIdentity { - return setOperationTypeIdentity(this.kind, this.getAttributes(), this.getMemberRefs()); + return setOperationTypeIdentity( + this.kind, + this.getAttributes(), + this.getMemberRefs(), + ); } protected reconstituteSetOperation( builder: TypeReconstituter, canonicalOrder: boolean, - getType: (members: ReadonlySet | undefined) => void + getType: (members: ReadonlySet | undefined) => void, ): void { - const sortedMemberRefs = mapMap(this.sortedMembers.entries(), t => t.typeRef); - const membersInOrder = canonicalOrder ? this.sortedMembers : this.members; + const sortedMemberRefs = mapMap( + this.sortedMembers.entries(), + (t) => t.typeRef, + ); + const membersInOrder = canonicalOrder + ? this.sortedMembers + : this.members; const maybeMembers = builder.lookupMap(sortedMemberRefs); if (maybeMembers === undefined) { getType(undefined); const reconstituted = builder.reconstituteMap(sortedMemberRefs); - builder.setSetOperationMembers(setMap(membersInOrder, t => defined(reconstituted.get(t)))); + builder.setSetOperationMembers( + setMap(membersInOrder, (t) => defined(reconstituted.get(t))), + ); } else { - getType(setMap(membersInOrder, t => defined(maybeMembers.get(t)))); + getType( + setMap(membersInOrder, (t) => defined(maybeMembers.get(t))), + ); } } protected structuralEqualityStep( other: SetOperationType, conflateNumbers: boolean, - queue: (a: Type, b: Type) => boolean + queue: (a: Type, b: Type) => boolean, ): boolean { - return setOperationCasesEqual(this.members, other.members, conflateNumbers, queue); + return setOperationCasesEqual( + this.members, + other.members, + conflateNumbers, + queue, + ); } } export class IntersectionType extends SetOperationType { - public constructor(typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet) { + public constructor( + typeRef: TypeRef, + graph: TypeGraph, + memberRefs?: ReadonlySet, + ) { super(typeRef, graph, "intersection", memberRefs); } @@ -797,9 +934,9 @@ export class IntersectionType extends SetOperationType { public reconstitute( builder: TypeReconstituter, - canonicalOrder: boolean + canonicalOrder: boolean, ): void { - this.reconstituteSetOperation(builder, canonicalOrder, members => { + this.reconstituteSetOperation(builder, canonicalOrder, (members) => { if (members === undefined) { builder.getUniqueIntersectionType(); } else { @@ -810,7 +947,11 @@ export class IntersectionType extends SetOperationType { } export class UnionType extends SetOperationType { - public constructor(typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet) { + public constructor( + typeRef: TypeRef, + graph: TypeGraph, + memberRefs?: ReadonlySet, + ) { super(typeRef, graph, "union", memberRefs); if (memberRefs !== undefined) { messageAssert(memberRefs.size > 0, "IRNoEmptyUnions", {}); @@ -823,11 +964,14 @@ export class UnionType extends SetOperationType { } public get stringTypeMembers(): ReadonlySet { - return setFilter(this.members, t => isPrimitiveStringTypeKind(t.kind) || t.kind === "enum"); + return setFilter( + this.members, + (t) => isPrimitiveStringTypeKind(t.kind) || t.kind === "enum", + ); } public findMember(kind: TypeKind): Type | undefined { - return iterableFind(this.members, t => t.kind === kind); + return iterableFind(this.members, (t) => t.kind === kind); } public get isNullable(): boolean { @@ -837,7 +981,7 @@ export class UnionType extends SetOperationType { public get isCanonical(): boolean { const members = this.members; if (members.size <= 1) return false; - const kinds = setMap(members, t => t.kind); + const kinds = setMap(members, (t) => t.kind); if (kinds.size < members.size) return false; if (kinds.has("union") || kinds.has("intersection")) return false; if (kinds.has("none") || kinds.has("any")) return false; @@ -854,9 +998,9 @@ export class UnionType extends SetOperationType { public reconstitute( builder: TypeReconstituter, - canonicalOrder: boolean + canonicalOrder: boolean, ): void { - this.reconstituteSetOperation(builder, canonicalOrder, members => { + this.reconstituteSetOperation(builder, canonicalOrder, (members) => { if (members === undefined) { builder.getUniqueUnionType(); } else { diff --git a/packages/quicktype-core/src/Type/TypeBuilder.ts b/packages/quicktype-core/src/Type/TypeBuilder.ts index d732312de..9f04812d9 100644 --- a/packages/quicktype-core/src/Type/TypeBuilder.ts +++ b/packages/quicktype-core/src/Type/TypeBuilder.ts @@ -7,15 +7,25 @@ import { mapFind, mapMap, mapSortByKey, - withDefault + withDefault, } from "collection-utils"; -import { StringTypes, stringTypesTypeAttributeKind } from "../attributes/StringTypes"; -import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { + StringTypes, + stringTypesTypeAttributeKind, +} from "../attributes/StringTypes"; +import { + type TypeAttributes, + combineTypeAttributes, + emptyTypeAttributes, +} from "../attributes/TypeAttributes"; import { assert, defined, panic } from "../support/Support"; import { provenanceTypeAttributeKind } from "./ProvenanceTypeAttributeKind"; -import { type PrimitiveTypeKind, isPrimitiveStringTypeKind } from "./TransformedStringType"; +import { + type PrimitiveTypeKind, + isPrimitiveStringTypeKind, +} from "./TransformedStringType"; import { ArrayType, ClassProperty, @@ -35,11 +45,20 @@ import { intersectionTypeIdentity, mapTypeIdentify, primitiveTypeIdentity, - unionTypeIdentity + unionTypeIdentity, } from "./Type"; -import { type StringTypeMapping, stringTypeMappingGet } from "./TypeBuilderUtils"; -import { type TypeGraph } from "./TypeGraph"; -import { type TypeRef, assertTypeRefGraph, derefTypeRef, makeTypeRef, typeRefIndex } from "./TypeRef"; +import { + type StringTypeMapping, + stringTypeMappingGet, +} from "./TypeBuilderUtils"; +import type { TypeGraph } from "./TypeGraph"; +import { + type TypeRef, + assertTypeRefGraph, + derefTypeRef, + makeTypeRef, + typeRefIndex, +} from "./TypeRef"; export class TypeBuilder { // @ts-expect-error must manually set TypeGraph @@ -58,11 +77,11 @@ export class TypeBuilder { public readonly canonicalOrder: boolean, private readonly _allPropertiesOptional: boolean, private readonly _addProvenanceAttributes: boolean, - inheritsProvenanceAttributes: boolean + inheritsProvenanceAttributes: boolean, ) { assert( !_addProvenanceAttributes || !inheritsProvenanceAttributes, - "We can't both inherit as well as add provenance" + "We can't both inherit as well as add provenance", ); } @@ -71,17 +90,20 @@ export class TypeBuilder { return this._typeGraph; } - /** typeGraph must be set externally to prevent import cycle of TypeGraph constructor */ + /** typeGraph must be set externally to prevent import cycle of TypeGraph constructor */ public set typeGraph(typeGraph: TypeGraph) { this._typeGraph = typeGraph; } public addTopLevel(name: string, tref: TypeRef): void { // assert(t.typeGraph === this.typeGraph, "Adding top-level to wrong type graph"); - assert(!this.topLevels.has(name), "Trying to add top-level with existing name"); + assert( + !this.topLevels.has(name), + "Trying to add top-level with existing name", + ); assert( this.types[typeRefIndex(tref)] !== undefined, - "Trying to add a top-level type that doesn't exist (yet?)" + "Trying to add a top-level type that doesn't exist (yet?)", ); this.topLevels.set(name, tref); } @@ -103,13 +125,20 @@ export class TypeBuilder { assertTypeRefGraph(tref, this.typeGraph); } - private assertTypeRefSetGraph(trefs: ReadonlySet | undefined): void { + private assertTypeRefSetGraph( + trefs: ReadonlySet | undefined, + ): void { if (trefs === undefined) return; - trefs.forEach(tref => this.assertTypeRefGraph(tref)); + trefs.forEach((tref) => this.assertTypeRefGraph(tref)); } - private filterTypeAttributes(t: Type, attributes: TypeAttributes): TypeAttributes { - const filtered = mapFilter(attributes, (_, k) => k.appliesToTypeKind(t.kind)); + private filterTypeAttributes( + t: Type, + attributes: TypeAttributes, + ): TypeAttributes { + const filtered = mapFilter(attributes, (_, k) => + k.appliesToTypeKind(t.kind), + ); if (attributes.size !== filtered.size) { this.setLostTypeAttributes(); } @@ -122,15 +151,21 @@ export class TypeBuilder { const index = typeRefIndex(tref); // const name = names !== undefined ? ` ${names.combinedName}` : ""; // console.log(`committing ${t.kind}${name} to ${index}`); - assert(this.types[index] === undefined, "A type index was committed twice"); + assert( + this.types[index] === undefined, + "A type index was committed twice", + ); this.types[index] = t; - this.typeAttributes[index] = this.filterTypeAttributes(t, this.typeAttributes[index]); + this.typeAttributes[index] = this.filterTypeAttributes( + t, + this.typeAttributes[index], + ); } protected addType( forwardingRef: TypeRef | undefined, creator: (tref: TypeRef) => T, - attributes: TypeAttributes | undefined + attributes: TypeAttributes | undefined, ): TypeRef { if (forwardingRef !== undefined) { this.assertTypeRefGraph(forwardingRef); @@ -140,7 +175,11 @@ export class TypeBuilder { const tref = forwardingRef ?? this.reserveTypeRef(); if (attributes !== undefined) { const index = typeRefIndex(tref); - this.typeAttributes[index] = combineTypeAttributes("union", this.typeAttributes[index], attributes); + this.typeAttributes[index] = combineTypeAttributes( + "union", + this.typeAttributes[index], + attributes, + ); } const t = creator(tref); @@ -174,32 +213,62 @@ export class TypeBuilder { if (existing === undefined) return false; return areEqual(existing, v); }), - "Can't add different identity type attributes to an existing type" + "Can't add different identity type attributes to an existing type", ); const maybeType = this.types[index]; if (maybeType !== undefined) { attributes = this.filterTypeAttributes(maybeType, attributes); } - const nonIdentityAttributes = mapFilter(attributes, (_, k) => !k.inIdentity); - this.typeAttributes[index] = combineTypeAttributes("union", existingAttributes, nonIdentityAttributes); + const nonIdentityAttributes = mapFilter( + attributes, + (_, k) => !k.inIdentity, + ); + this.typeAttributes[index] = combineTypeAttributes( + "union", + existingAttributes, + nonIdentityAttributes, + ); } public finish(): TypeGraph { - this.typeGraph.freeze(this.topLevels, this.types.map(defined), this.typeAttributes); + this.typeGraph.freeze( + this.topLevels, + this.types.map(defined), + this.typeAttributes, + ); return this.typeGraph; } - protected addForwardingIntersection(forwardingRef: TypeRef, tref: TypeRef): TypeRef { + protected addForwardingIntersection( + forwardingRef: TypeRef, + tref: TypeRef, + ): TypeRef { this.assertTypeRefGraph(tref); this._addedForwardingIntersection = true; - return this.addType(forwardingRef, tr => new IntersectionType(tr, this.typeGraph, new Set([tref])), undefined); + return this.addType( + forwardingRef, + (tr) => new IntersectionType(tr, this.typeGraph, new Set([tref])), + undefined, + ); } - protected forwardIfNecessary(forwardingRef: TypeRef | undefined, tref: undefined): undefined; - protected forwardIfNecessary(forwardingRef: TypeRef | undefined, tref: TypeRef): TypeRef; - protected forwardIfNecessary(forwardingRef: TypeRef | undefined, tref: TypeRef | undefined): TypeRef | undefined; - protected forwardIfNecessary(forwardingRef: TypeRef | undefined, tref: TypeRef | undefined): TypeRef | undefined { + protected forwardIfNecessary( + forwardingRef: TypeRef | undefined, + tref: undefined, + ): undefined; + protected forwardIfNecessary( + forwardingRef: TypeRef | undefined, + tref: TypeRef, + ): TypeRef; + protected forwardIfNecessary( + forwardingRef: TypeRef | undefined, + tref: TypeRef | undefined, + ): TypeRef | undefined; + protected forwardIfNecessary( + forwardingRef: TypeRef | undefined, + tref: TypeRef | undefined, + ): TypeRef | undefined { if (tref === undefined) return undefined; if (forwardingRef === undefined) return tref; return this.addForwardingIntersection(forwardingRef, tref); @@ -209,9 +278,13 @@ export class TypeBuilder { return this._addedForwardingIntersection; } - private readonly _typeForIdentity: EqualityMap = new EqualityMap(); + private readonly _typeForIdentity: EqualityMap = + new EqualityMap(); - private registerTypeForIdentity(identity: MaybeTypeIdentity, tref: TypeRef): void { + private registerTypeForIdentity( + identity: MaybeTypeIdentity, + tref: TypeRef, + ): void { if (identity === undefined) return; this._typeForIdentity.set(identity, tref); } @@ -224,7 +297,7 @@ export class TypeBuilder { identityMaker: () => MaybeTypeIdentity, creator: (tr: TypeRef) => Type, attributes: TypeAttributes | undefined, - forwardingRef: TypeRef | undefined + forwardingRef: TypeRef | undefined, ): TypeRef { const identity = this.makeIdentity(identityMaker); let maybeTypeRef: TypeRef | undefined; @@ -243,7 +316,7 @@ export class TypeBuilder { // asserts that no identity attributes are added later. this.addAttributes( result, - mapFilter(attributes, (_, k) => !k.inIdentity) + mapFilter(attributes, (_, k) => !k.inIdentity), ); } @@ -262,12 +335,13 @@ export class TypeBuilder { public getPrimitiveType( kind: PrimitiveTypeKind, maybeAttributes?: TypeAttributes, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { const attributes = withDefault(maybeAttributes, emptyTypeAttributes); // FIXME: Why do date/time types need a StringTypes attribute? // FIXME: Remove this from here and put it into flattenStrings - let stringTypes = kind === "string" ? undefined : StringTypes.unrestricted; + const stringTypes = + kind === "string" ? undefined : StringTypes.unrestricted; if (isPrimitiveStringTypeKind(kind) && kind !== "string") { kind = stringTypeMappingGet(this._stringTypeMapping, kind); } @@ -278,48 +352,60 @@ export class TypeBuilder { return this.getOrAddType( () => primitiveTypeIdentity(kind, attributes), - tr => new PrimitiveType(tr, this.typeGraph, kind), + (tr) => new PrimitiveType(tr, this.typeGraph, kind), attributes, - forwardingRef + forwardingRef, ); } public getStringType( attributes: TypeAttributes, stringTypes: StringTypes | undefined, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { - const existingStringTypes = mapFind(attributes, (_, k) => k === stringTypesTypeAttributeKind); + const existingStringTypes = mapFind( + attributes, + (_, k) => k === stringTypesTypeAttributeKind, + ); assert( (stringTypes === undefined) !== (existingStringTypes === undefined), - "Must instantiate string type with one enum case attribute" + "Must instantiate string type with one enum case attribute", ); if (existingStringTypes === undefined) { attributes = combineTypeAttributes( "union", attributes, - stringTypesTypeAttributeKind.makeAttributes(defined(stringTypes)) + stringTypesTypeAttributeKind.makeAttributes( + defined(stringTypes), + ), ); } return this.getOrAddType( () => primitiveTypeIdentity("string", attributes), - tr => new PrimitiveType(tr, this.typeGraph, "string"), + (tr) => new PrimitiveType(tr, this.typeGraph, "string"), attributes, - forwardingRef + forwardingRef, ); } - public getEnumType(attributes: TypeAttributes, cases: ReadonlySet, forwardingRef?: TypeRef): TypeRef { + public getEnumType( + attributes: TypeAttributes, + cases: ReadonlySet, + forwardingRef?: TypeRef, + ): TypeRef { return this.getOrAddType( () => enumTypeIdentity(attributes, cases), - tr => new EnumType(tr, this.typeGraph, cases), + (tr) => new EnumType(tr, this.typeGraph, cases), attributes, - forwardingRef + forwardingRef, ); } - public makeClassProperty(tref: TypeRef, isOptional: boolean): ClassProperty { + public makeClassProperty( + tref: TypeRef, + isOptional: boolean, + ): ClassProperty { return new ClassProperty(tref, this.typeGraph, isOptional); } @@ -327,37 +413,55 @@ export class TypeBuilder { attributes: TypeAttributes, properties: ReadonlyMap | undefined, additionalProperties: TypeRef | undefined, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefGraph(additionalProperties); - properties = definedMap(properties, p => this.modifyPropertiesIfNecessary(p)); + properties = definedMap(properties, (p) => + this.modifyPropertiesIfNecessary(p), + ); return this.addType( forwardingRef, - tref => new ObjectType(tref, this.typeGraph, "object", true, properties, additionalProperties), - attributes + (tref) => + new ObjectType( + tref, + this.typeGraph, + "object", + true, + properties, + additionalProperties, + ), + attributes, ); } public getUniqueMapType(forwardingRef?: TypeRef): TypeRef { - return this.addType(forwardingRef, tr => new MapType(tr, this.typeGraph, undefined), undefined); + return this.addType( + forwardingRef, + (tr) => new MapType(tr, this.typeGraph, undefined), + undefined, + ); } - public getMapType(attributes: TypeAttributes, values: TypeRef, forwardingRef?: TypeRef): TypeRef { + public getMapType( + attributes: TypeAttributes, + values: TypeRef, + forwardingRef?: TypeRef, + ): TypeRef { this.assertTypeRefGraph(values); return this.getOrAddType( () => mapTypeIdentify(attributes, values), - tr => new MapType(tr, this.typeGraph, values), + (tr) => new MapType(tr, this.typeGraph, values), attributes, - forwardingRef + forwardingRef, ); } public setObjectProperties( ref: TypeRef, properties: ReadonlyMap, - additionalProperties: TypeRef | undefined + additionalProperties: TypeRef | undefined, ): void { this.assertTypeRefGraph(additionalProperties); @@ -366,22 +470,33 @@ export class TypeBuilder { return panic("Tried to set properties of non-object type"); } - type.setProperties(this.modifyPropertiesIfNecessary(properties), additionalProperties); + type.setProperties( + this.modifyPropertiesIfNecessary(properties), + additionalProperties, + ); this.registerType(type); } public getUniqueArrayType(forwardingRef?: TypeRef): TypeRef { - return this.addType(forwardingRef, tr => new ArrayType(tr, this.typeGraph, undefined), undefined); + return this.addType( + forwardingRef, + (tr) => new ArrayType(tr, this.typeGraph, undefined), + undefined, + ); } - public getArrayType(attributes: TypeAttributes, items: TypeRef, forwardingRef?: TypeRef): TypeRef { + public getArrayType( + attributes: TypeAttributes, + items: TypeRef, + forwardingRef?: TypeRef, + ): TypeRef { this.assertTypeRefGraph(items); return this.getOrAddType( () => arrayTypeIdentity(attributes, items), - tr => new ArrayType(tr, this.typeGraph, items), + (tr) => new ArrayType(tr, this.typeGraph, items), attributes, - forwardingRef + forwardingRef, ); } @@ -390,7 +505,7 @@ export class TypeBuilder { const type = derefTypeRef(ref, this.typeGraph); if (!(type instanceof ArrayType)) { - return panic("Tried to set items of non-array type"); + panic("Tried to set items of non-array type"); } type.setItems(items); @@ -398,16 +513,18 @@ export class TypeBuilder { } public modifyPropertiesIfNecessary( - properties: ReadonlyMap + properties: ReadonlyMap, ): ReadonlyMap { - properties.forEach(p => this.assertTypeRefGraph(p.typeRef)); + properties.forEach((p) => this.assertTypeRefGraph(p.typeRef)); if (this.canonicalOrder) { properties = mapSortByKey(properties); } if (this._allPropertiesOptional) { - properties = mapMap(properties, cp => this.makeClassProperty(cp.typeRef, true)); + properties = mapMap(properties, (cp) => + this.makeClassProperty(cp.typeRef, true), + ); } return properties; @@ -416,14 +533,14 @@ export class TypeBuilder { public getClassType( attributes: TypeAttributes, properties: ReadonlyMap, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { properties = this.modifyPropertiesIfNecessary(properties); return this.getOrAddType( () => classTypeIdentity(attributes, properties), - tr => new ClassType(tr, this.typeGraph, false, properties), + (tr) => new ClassType(tr, this.typeGraph, false, properties), attributes, - forwardingRef + forwardingRef, ); } @@ -433,24 +550,30 @@ export class TypeBuilder { attributes: TypeAttributes, isFixed: boolean, properties: ReadonlyMap | undefined, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { - properties = definedMap(properties, p => this.modifyPropertiesIfNecessary(p)); + properties = definedMap(properties, (p) => + this.modifyPropertiesIfNecessary(p), + ); return this.addType( forwardingRef, - tref => new ClassType(tref, this.typeGraph, isFixed, properties), - attributes + (tref) => new ClassType(tref, this.typeGraph, isFixed, properties), + attributes, ); } - public getUnionType(attributes: TypeAttributes, members: ReadonlySet, forwardingRef?: TypeRef): TypeRef { + public getUnionType( + attributes: TypeAttributes, + members: ReadonlySet, + forwardingRef?: TypeRef, + ): TypeRef { this.assertTypeRefSetGraph(members); return this.getOrAddType( () => unionTypeIdentity(attributes, members), - tr => new UnionType(tr, this.typeGraph, members), + (tr) => new UnionType(tr, this.typeGraph, members), attributes, - forwardingRef + forwardingRef, ); } @@ -458,25 +581,29 @@ export class TypeBuilder { public getUniqueUnionType( attributes: TypeAttributes, members: ReadonlySet | undefined, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefSetGraph(members); - return this.addType(forwardingRef, tref => new UnionType(tref, this.typeGraph, members), attributes); + return this.addType( + forwardingRef, + (tref) => new UnionType(tref, this.typeGraph, members), + attributes, + ); } public getIntersectionType( attributes: TypeAttributes, members: ReadonlySet, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefSetGraph(members); return this.getOrAddType( () => intersectionTypeIdentity(attributes, members), - tr => new IntersectionType(tr, this.typeGraph, members), + (tr) => new IntersectionType(tr, this.typeGraph, members), attributes, - forwardingRef + forwardingRef, ); } @@ -484,19 +611,26 @@ export class TypeBuilder { public getUniqueIntersectionType( attributes: TypeAttributes, members: ReadonlySet | undefined, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefSetGraph(members); - return this.addType(forwardingRef, tref => new IntersectionType(tref, this.typeGraph, members), attributes); + return this.addType( + forwardingRef, + (tref) => new IntersectionType(tref, this.typeGraph, members), + attributes, + ); } - public setSetOperationMembers(ref: TypeRef, members: ReadonlySet): void { + public setSetOperationMembers( + ref: TypeRef, + members: ReadonlySet, + ): void { this.assertTypeRefSetGraph(members); const type = derefTypeRef(ref, this.typeGraph); if (!(type instanceof UnionType || type instanceof IntersectionType)) { - return panic("Tried to set members of non-set-operation type"); + panic("Tried to set members of non-set-operation type"); } type.setMembers(members); diff --git a/packages/quicktype-core/src/Type/TypeBuilderUtils.ts b/packages/quicktype-core/src/Type/TypeBuilderUtils.ts index f2006fad4..7743f361b 100644 --- a/packages/quicktype-core/src/Type/TypeBuilderUtils.ts +++ b/packages/quicktype-core/src/Type/TypeBuilderUtils.ts @@ -1,12 +1,18 @@ import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, - transformedStringTypeKinds + transformedStringTypeKinds, } from "./TransformedStringType"; -export type StringTypeMapping = ReadonlyMap; +export type StringTypeMapping = ReadonlyMap< + TransformedStringTypeKind, + PrimitiveStringTypeKind +>; -export function stringTypeMappingGet(stm: StringTypeMapping, kind: TransformedStringTypeKind): PrimitiveStringTypeKind { +export function stringTypeMappingGet( + stm: StringTypeMapping, + kind: TransformedStringTypeKind, +): PrimitiveStringTypeKind { const mapped = stm.get(kind); if (mapped === undefined) return "string"; return mapped; @@ -18,8 +24,12 @@ export function getNoStringTypeMapping(): StringTypeMapping { if (noStringTypeMapping === undefined) { noStringTypeMapping = new Map( Array.from(transformedStringTypeKinds).map( - k => [k, k] as [TransformedStringTypeKind, PrimitiveStringTypeKind] - ) + (k) => + [k, k] as [ + TransformedStringTypeKind, + PrimitiveStringTypeKind, + ], + ), ); } diff --git a/packages/quicktype-core/src/Type/TypeGraph.ts b/packages/quicktype-core/src/Type/TypeGraph.ts index 7d34591fb..f20f3a209 100644 --- a/packages/quicktype-core/src/Type/TypeGraph.ts +++ b/packages/quicktype-core/src/Type/TypeGraph.ts @@ -1,25 +1,45 @@ import { mapMap, setSubtract, setUnionManyInto } from "collection-utils"; -import { type TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { + type TypeAttributeKind, + type TypeAttributes, + emptyTypeAttributes, +} from "../attributes/TypeAttributes"; import { Graph } from "../Graph"; -import { type BaseGraphRewriteBuilder, GraphRemapBuilder, GraphRewriteBuilder } from "../GraphRewriting"; +import { + type BaseGraphRewriteBuilder, + GraphRemapBuilder, + GraphRewriteBuilder, +} from "../GraphRewriting"; import { messageError } from "../Messages"; import { assert, defined, mustNotHappen } from "../support/Support"; import { provenanceTypeAttributeKind } from "./ProvenanceTypeAttributeKind"; -import { type Type } from "./Type"; -import { type TypeBuilder } from "./TypeBuilder"; -import { type StringTypeMapping, getNoStringTypeMapping } from "./TypeBuilderUtils"; +import type { Type } from "./Type"; +import type { TypeBuilder } from "./TypeBuilder"; +import { + type StringTypeMapping, + getNoStringTypeMapping, +} from "./TypeBuilderUtils"; import { removeIndirectionIntersections } from "./TypeGraphUtils"; -import { type TypeRef, assertTypeRefGraph, derefTypeRef, typeRefIndex } from "./TypeRef"; -import { type SeparatedNamedTypes, isNamedType, separateNamedTypes } from "./TypeUtils"; +import { + type TypeRef, + assertTypeRefGraph, + derefTypeRef, + typeRefIndex, +} from "./TypeRef"; +import { + type SeparatedNamedTypes, + isNamedType, + separateNamedTypes, +} from "./TypeUtils"; export class TypeAttributeStore { private readonly _topLevelValues: Map = new Map(); public constructor( private readonly _typeGraph: TypeGraph, - private _values: Array + private _values: Array, ) {} private getTypeIndex(t: Type): number { @@ -47,7 +67,11 @@ export class TypeAttributeStore { return emptyTypeAttributes; } - public setInMap(attributes: TypeAttributes, kind: TypeAttributeKind, value: T): TypeAttributes { + public setInMap( + attributes: TypeAttributes, + kind: TypeAttributeKind, + value: T, + ): TypeAttributes { // FIXME: This is potentially super slow return new Map(attributes).set(kind, value); } @@ -58,14 +82,32 @@ export class TypeAttributeStore { this._values.push(undefined); } - this._values[index] = this.setInMap(this.attributesForType(t), kind, value); + this._values[index] = this.setInMap( + this.attributesForType(t), + kind, + value, + ); } - public setForTopLevel(kind: TypeAttributeKind, topLevelName: string, value: T): void { - this._topLevelValues.set(topLevelName, this.setInMap(this.attributesForTopLevel(topLevelName), kind, value)); + public setForTopLevel( + kind: TypeAttributeKind, + topLevelName: string, + value: T, + ): void { + this._topLevelValues.set( + topLevelName, + this.setInMap( + this.attributesForTopLevel(topLevelName), + kind, + value, + ), + ); } - public tryGetInMap(attributes: TypeAttributes, kind: TypeAttributeKind): T | undefined { + public tryGetInMap( + attributes: TypeAttributes, + kind: TypeAttributeKind, + ): T | undefined { return attributes.get(kind); } @@ -73,7 +115,10 @@ export class TypeAttributeStore { return this.tryGetInMap(this.attributesForType(t), kind); } - public tryGetForTopLevel(kind: TypeAttributeKind, topLevelName: string): T | undefined { + public tryGetForTopLevel( + kind: TypeAttributeKind, + topLevelName: string, + ): T | undefined { return this.tryGetInMap(this.attributesForTopLevel(topLevelName), kind); } } @@ -81,7 +126,7 @@ export class TypeAttributeStore { export class TypeAttributeStoreView { public constructor( private readonly _attributeStore: TypeAttributeStore, - private readonly _definition: TypeAttributeKind + private readonly _definition: TypeAttributeKind, ) {} public set(t: Type, value: T): void { @@ -127,7 +172,7 @@ export class TypeGraph { public constructor( typeBuilder: TypeBuilder, public readonly serial: number, - private readonly _haveProvenanceAttributes: boolean + private readonly _haveProvenanceAttributes: boolean, ) { this._typeBuilder = typeBuilder; } @@ -143,7 +188,7 @@ export class TypeGraph { public freeze( topLevels: ReadonlyMap, types: Type[], - typeAttributes: Array + typeAttributes: Array, ): void { assert(!this.isFrozen, "Tried to freeze TypeGraph a second time"); for (const t of types) { @@ -158,7 +203,7 @@ export class TypeGraph { // either a _typeBuilder or a _types. this._types = types; this._typeBuilder = undefined; - this._topLevels = mapMap(topLevels, tref => derefTypeRef(tref, this)); + this._topLevels = mapMap(topLevels, (tref) => derefTypeRef(tref, this)); } public get topLevels(): ReadonlyMap { @@ -185,9 +230,11 @@ export class TypeGraph { return [t, defined(this._attributeStore).attributesForType(t)]; } - private filterTypes(predicate: ((t: Type) => boolean) | undefined): ReadonlySet { + private filterTypes( + predicate: ((t: Type) => boolean) | undefined, + ): ReadonlySet { const seen = new Set(); - let types: Type[] = []; + const types: Type[] = []; function addFromType(t: Type): void { if (seen.has(t)) { @@ -227,8 +274,11 @@ export class TypeGraph { private allProvenance(): ReadonlySet { assert(this._haveProvenanceAttributes); - const view = new TypeAttributeStoreView(this.attributeStore, provenanceTypeAttributeKind); - const sets = Array.from(this.allTypesUnordered()).map(t => { + const view = new TypeAttributeStoreView( + this.attributeStore, + provenanceTypeAttributeKind, + ); + const sets = Array.from(this.allTypesUnordered()).map((t) => { const maybeSet = view.tryGet(t); if (maybeSet !== undefined) return maybeSet; return new Set(); @@ -243,7 +293,10 @@ export class TypeGraph { this._printOnRewrite = true; } - private checkLostTypeAttributes(builder: BaseGraphRewriteBuilder, newGraph: TypeGraph): void { + private checkLostTypeAttributes( + builder: BaseGraphRewriteBuilder, + newGraph: TypeGraph, + ): void { if (!this._haveProvenanceAttributes || builder.lostTypeAttributes) { return; } @@ -253,7 +306,10 @@ export class TypeGraph { if (oldProvenance.size !== newProvenance.size) { const difference = setSubtract(oldProvenance, newProvenance); const indexes = Array.from(difference); - return messageError("IRTypeAttributesNotPropagated", { count: difference.size, indexes }); + messageError("IRTypeAttributesNotPropagated", { + count: difference.size, + indexes, + }); } } @@ -277,8 +333,12 @@ export class TypeGraph { alphabetizeProperties: boolean, replacementGroups: T[][], debugPrintReconstitution: boolean, - replacer: (typesToReplace: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef) => TypeRef, - force = false + replacer: ( + typesToReplace: ReadonlySet, + builder: GraphRewriteBuilder, + forwardingRef: TypeRef, + ) => TypeRef, + force = false, ): TypeGraph { this.printRewrite(title); @@ -293,9 +353,13 @@ export class TypeGraph { this._haveProvenanceAttributes, replacementGroups, debugPrintReconstitution, - replacer + replacer, + ); + builder.typeGraph = new TypeGraph( + builder, + this.serial + 1, + this._haveProvenanceAttributes, ); - builder.typeGraph = new TypeGraph(builder, this.serial + 1, this._haveProvenanceAttributes); const newGraph = builder.finish(); this.checkLostTypeAttributes(builder, newGraph); @@ -309,7 +373,11 @@ export class TypeGraph { return newGraph; } - return removeIndirectionIntersections(newGraph, stringTypeMapping, debugPrintReconstitution); + return removeIndirectionIntersections( + newGraph, + stringTypeMapping, + debugPrintReconstitution, + ); } public remap( @@ -318,7 +386,7 @@ export class TypeGraph { alphabetizeProperties: boolean, map: ReadonlyMap, debugPrintRemapping: boolean, - force = false + force = false, ): TypeGraph { this.printRewrite(title); @@ -332,9 +400,13 @@ export class TypeGraph { alphabetizeProperties, this._haveProvenanceAttributes, map, - debugPrintRemapping + debugPrintRemapping, + ); + builder.typeGraph = new TypeGraph( + builder, + this.serial + 1, + this._haveProvenanceAttributes, ); - builder.typeGraph = new TypeGraph(builder, this.serial + 1, this._haveProvenanceAttributes); const newGraph = builder.finish(); this.checkLostTypeAttributes(builder, newGraph); @@ -349,20 +421,26 @@ export class TypeGraph { return newGraph; } - public garbageCollect(alphabetizeProperties: boolean, debugPrintReconstitution: boolean): TypeGraph { + public garbageCollect( + alphabetizeProperties: boolean, + debugPrintReconstitution: boolean, + ): TypeGraph { const newGraph = this.remap( "GC", getNoStringTypeMapping(), alphabetizeProperties, new Map(), debugPrintReconstitution, - true + true, ); return newGraph; } - public rewriteFixedPoint(alphabetizeProperties: boolean, debugPrintReconstitution: boolean): TypeGraph { + public rewriteFixedPoint( + alphabetizeProperties: boolean, + debugPrintReconstitution: boolean, + ): TypeGraph { // eslint-disable-next-line @typescript-eslint/no-this-alias let graph: TypeGraph = this; for (;;) { @@ -373,9 +451,12 @@ export class TypeGraph { [], debugPrintReconstitution, mustNotHappen, - true + true, ); - if (graph.allTypesUnordered().size === newGraph.allTypesUnordered().size) { + if ( + graph.allTypesUnordered().size === + newGraph.allTypesUnordered().size + ) { return graph; } @@ -384,18 +465,24 @@ export class TypeGraph { } public allTypesUnordered(): ReadonlySet { - assert(this.isFrozen, "Tried to get all graph types before it was frozen"); + assert( + this.isFrozen, + "Tried to get all graph types before it was frozen", + ); return new Set(defined(this._types)); } - public makeGraph(invertDirection: boolean, childrenOfType: (t: Type) => ReadonlySet): Graph { + public makeGraph( + invertDirection: boolean, + childrenOfType: (t: Type) => ReadonlySet, + ): Graph { return new Graph(defined(this._types), invertDirection, childrenOfType); } public getParentsOfType(t: Type): Set { assertTypeRefGraph(t.typeRef, this); if (this._parents === undefined) { - const parents = defined(this._types).map(_ => new Set()); + const parents = defined(this._types).map((_) => new Set()); for (const p of this.allTypesUnordered()) { for (const c of p.getChildren()) { const index = c.index; @@ -414,13 +501,15 @@ export class TypeGraph { for (let i = 0; i < types.length; i++) { const t = types[i]; const parts: string[] = []; - parts.push(`${t.debugPrintKind}${t.hasNames ? ` ${t.getCombinedName()}` : ""}`); + parts.push( + `${t.debugPrintKind}${t.hasNames ? ` ${t.getCombinedName()}` : ""}`, + ); const children = t.getChildren(); if (children.size > 0) { parts.push( `children ${Array.from(children) - .map(c => c.index) - .join(",")}` + .map((c) => c.index) + .join(",")}`, ); } diff --git a/packages/quicktype-core/src/Type/TypeGraphUtils.ts b/packages/quicktype-core/src/Type/TypeGraphUtils.ts index af1634358..cecc04fb9 100644 --- a/packages/quicktype-core/src/Type/TypeGraphUtils.ts +++ b/packages/quicktype-core/src/Type/TypeGraphUtils.ts @@ -1,21 +1,30 @@ -import { iterableFirst, mapMap, mapSome, setFilter, setMap } from "collection-utils"; +import { + iterableFirst, + mapMap, + mapSome, + setFilter, + setMap, +} from "collection-utils"; import { TypeNames, namesTypeAttributeKind } from "../attributes/TypeNames"; -import { type GraphRewriteBuilder } from "../GraphRewriting"; +import type { GraphRewriteBuilder } from "../GraphRewriting"; import { assert, defined, panic } from "../support/Support"; import { ClassType, IntersectionType, type Type, UnionType } from "./Type"; -import { type StringTypeMapping } from "./TypeBuilderUtils"; -import { type TypeGraph } from "./TypeGraph"; -import { type TypeRef } from "./TypeRef"; +import type { StringTypeMapping } from "./TypeBuilderUtils"; +import type { TypeGraph } from "./TypeGraph"; +import type { TypeRef } from "./TypeRef"; import { combineTypeAttributesOfTypes } from "./TypeUtils"; export function noneToAny( graph: TypeGraph, stringTypeMapping: StringTypeMapping, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): TypeGraph { - const noneTypes = setFilter(graph.allTypesUnordered(), t => t.kind === "none"); + const noneTypes = setFilter( + graph.allTypesUnordered(), + (t) => t.kind === "none", + ); if (noneTypes.size === 0) { return graph; } @@ -29,18 +38,26 @@ export function noneToAny( debugPrintReconstitution, (types, builder, forwardingRef) => { const attributes = combineTypeAttributesOfTypes("union", types); - const tref = builder.getPrimitiveType("any", attributes, forwardingRef); + const tref = builder.getPrimitiveType( + "any", + attributes, + forwardingRef, + ); return tref; - } + }, ); } export function optionalToNullable( graph: TypeGraph, stringTypeMapping: StringTypeMapping, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): TypeGraph { - function rewriteClass(c: ClassType, builder: GraphRewriteBuilder, forwardingRef: TypeRef): TypeRef { + function rewriteClass( + c: ClassType, + builder: GraphRewriteBuilder, + forwardingRef: TypeRef, + ): TypeRef { const properties = mapMap(c.getProperties(), (p, name) => { const t = p.type; let ref: TypeRef; @@ -50,31 +67,48 @@ export function optionalToNullable( const nullType = builder.getPrimitiveType("null"); let members: ReadonlySet; if (t instanceof UnionType) { - members = setMap(t.members, m => builder.reconstituteType(m)).add(nullType); + members = setMap(t.members, (m) => + builder.reconstituteType(m), + ).add(nullType); } else { members = new Set([builder.reconstituteType(t), nullType]); } - const attributes = namesTypeAttributeKind.setDefaultInAttributes(t.getAttributes(), () => - TypeNames.make(new Set([name]), new Set(), true) - ); + const attributes = + namesTypeAttributeKind.setDefaultInAttributes( + t.getAttributes(), + () => TypeNames.make(new Set([name]), new Set(), true), + ); ref = builder.getUnionType(attributes, members); } return builder.makeClassProperty(ref, p.isOptional); }); if (c.isFixed) { - return builder.getUniqueClassType(c.getAttributes(), true, properties, forwardingRef); + return builder.getUniqueClassType( + c.getAttributes(), + true, + properties, + forwardingRef, + ); } else { - return builder.getClassType(c.getAttributes(), properties, forwardingRef); + return builder.getClassType( + c.getAttributes(), + properties, + forwardingRef, + ); } } const classesWithOptional = setFilter( graph.allTypesUnordered(), - t => t instanceof ClassType && mapSome(t.getProperties(), p => p.isOptional) + (t) => + t instanceof ClassType && + mapSome(t.getProperties(), (p) => p.isOptional), ); - const replacementGroups = Array.from(classesWithOptional).map(c => [c as ClassType]); + const replacementGroups = Array.from(classesWithOptional).map((c) => [ + c as ClassType, + ]); if (classesWithOptional.size === 0) { return graph; } @@ -89,14 +123,14 @@ export function optionalToNullable( assert(setOfClass.size === 1); const c = defined(iterableFirst(setOfClass)); return rewriteClass(c, builder, forwardingRef); - } + }, ); } export function removeIndirectionIntersections( graph: TypeGraph, stringTypeMapping: StringTypeMapping, - debugPrintRemapping: boolean + debugPrintRemapping: boolean, ): TypeGraph { const map: Array<[Type, Type]> = []; @@ -121,5 +155,11 @@ export function removeIndirectionIntersections( } } - return graph.remap("remove indirection intersections", stringTypeMapping, false, new Map(map), debugPrintRemapping); + return graph.remap( + "remove indirection intersections", + stringTypeMapping, + false, + new Map(map), + debugPrintRemapping, + ); } diff --git a/packages/quicktype-core/src/Type/TypeRef.ts b/packages/quicktype-core/src/Type/TypeRef.ts index 4e8c3e583..c7afd16e7 100644 --- a/packages/quicktype-core/src/Type/TypeRef.ts +++ b/packages/quicktype-core/src/Type/TypeRef.ts @@ -1,9 +1,9 @@ -import { type TypeAttributes } from "../attributes/TypeAttributes"; -import { type BaseGraphRewriteBuilder } from "../GraphRewriting"; +import type { TypeAttributes } from "../attributes/TypeAttributes"; +import type { BaseGraphRewriteBuilder } from "../GraphRewriting"; import { assert } from "../support/Support"; -import { type Type } from "./Type"; -import { type TypeGraph } from "./TypeGraph"; +import type { Type } from "./Type"; +import type { TypeGraph } from "./TypeGraph"; const indexBits = 26; const indexMask = (1 << indexBits) - 1; @@ -28,20 +28,25 @@ export function typeRefIndex(tref: TypeRef): number { export function assertTypeRefGraph(tref: TypeRef, graph: TypeGraph): void { assert( ((tref >> indexBits) & serialMask) === (graph.serial & serialMask), - "Mixing the wrong type reference and graph" + "Mixing the wrong type reference and graph", ); } -function getGraph(graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder): TypeGraph { +function getGraph( + graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, +): TypeGraph { if ("originalGraph" in graphOrBuilder) { return graphOrBuilder.originalGraph; } - // do not use `graphOrBuilder instanceof TypeGraph` to check if is TypeGraph to prevent import cycle + // do not use `graphOrBuilder instanceof TypeGraph` to check if is TypeGraph to prevent import cycle return graphOrBuilder; } -export function derefTypeRef(tref: TypeRef, graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder): Type { +export function derefTypeRef( + tref: TypeRef, + graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, +): Type { const graph = getGraph(graphOrBuilder); assertTypeRefGraph(tref, graph); return graph.typeAtIndex(typeRefIndex(tref)); @@ -49,7 +54,7 @@ export function derefTypeRef(tref: TypeRef, graphOrBuilder: TypeGraph | BaseGrap export function attributesForTypeRef( tref: TypeRef, - graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder + graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, ): TypeAttributes { const graph = getGraph(graphOrBuilder); assertTypeRefGraph(tref, graph); @@ -58,7 +63,7 @@ export function attributesForTypeRef( export function typeAndAttributesForTypeRef( tref: TypeRef, - graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder + graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, ): [Type, TypeAttributes] { const graph = getGraph(graphOrBuilder); assertTypeRefGraph(tref, graph); diff --git a/packages/quicktype-core/src/Type/TypeUtils.ts b/packages/quicktype-core/src/Type/TypeUtils.ts index ac1816c59..499f7c05b 100644 --- a/packages/quicktype-core/src/Type/TypeUtils.ts +++ b/packages/quicktype-core/src/Type/TypeUtils.ts @@ -1,11 +1,20 @@ -import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion } from "collection-utils"; +import { + EqualityMap, + iterableFirst, + setFilter, + setSortBy, + setUnion, +} from "collection-utils"; -import { type StringTypes, stringTypesTypeAttributeKind } from "../attributes/StringTypes"; +import { + type StringTypes, + stringTypesTypeAttributeKind, +} from "../attributes/StringTypes"; import { type CombinationKind, type TypeAttributes, combineTypeAttributes, - emptyTypeAttributes + emptyTypeAttributes, } from "../attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "../support/Support"; @@ -20,7 +29,7 @@ import { type PrimitiveType, type SetOperationType, type Type, - UnionType + UnionType, } from "./Type"; export function assertIsObject(t: Type): ObjectType { @@ -41,11 +50,11 @@ export function assertIsClass(t: Type): ClassType { export function setOperationMembersRecursively( setOperations: T | T[], - combinationKind: CombinationKind | undefined + combinationKind: CombinationKind | undefined, ): [ReadonlySet, TypeAttributes]; export function setOperationMembersRecursively( oneOrMany: T | T[], - combinationKind: CombinationKind | undefined + combinationKind: CombinationKind | undefined, ): [ReadonlySet, TypeAttributes] { const setOperations = Array.isArray(oneOrMany) ? oneOrMany : [oneOrMany]; const kind = setOperations[0].kind; @@ -60,7 +69,11 @@ export function setOperationMembersRecursively( if (processedSetOperations.has(so)) return; processedSetOperations.add(so); if (combinationKind !== undefined) { - attributes = combineTypeAttributes(combinationKind, attributes, t.getAttributes()); + attributes = combineTypeAttributes( + combinationKind, + attributes, + t.getAttributes(), + ); } for (const m of so.members) { @@ -70,7 +83,11 @@ export function setOperationMembersRecursively( members.add(t); } else { if (combinationKind !== undefined) { - attributes = combineTypeAttributes(combinationKind, attributes, t.getAttributes()); + attributes = combineTypeAttributes( + combinationKind, + attributes, + t.getAttributes(), + ); } } } @@ -84,13 +101,15 @@ export function setOperationMembersRecursively( export function makeGroupsToFlatten( setOperations: Iterable, - include: ((members: ReadonlySet) => boolean) | undefined + include: ((members: ReadonlySet) => boolean) | undefined, ): Type[][] { const typeGroups = new EqualityMap, Set>(); for (const u of setOperations) { // FIXME: We shouldn't have to make a new set here once we got rid // of immutable. - const members = new Set(setOperationMembersRecursively(u, undefined)[0]); + const members = new Set( + setOperationMembersRecursively(u, undefined)[0], + ); if (include !== undefined) { if (!include(members)) continue; @@ -108,13 +127,16 @@ export function makeGroupsToFlatten( typeGroups.set(members, maybeSet); } - return Array.from(typeGroups.values()).map(ts => Array.from(ts)); + return Array.from(typeGroups.values()).map((ts) => Array.from(ts)); } -export function combineTypeAttributesOfTypes(combinationKind: CombinationKind, types: Iterable): TypeAttributes { +export function combineTypeAttributesOfTypes( + combinationKind: CombinationKind, + types: Iterable, +): TypeAttributes { return combineTypeAttributes( combinationKind, - Array.from(types).map(t => t.getAttributes()) + Array.from(types).map((t) => t.getAttributes()), ); } @@ -127,11 +149,11 @@ export function isAnyOrNull(t: Type): boolean { // introduced. export function removeNullFromUnion( t: UnionType, - sortBy: boolean | ((t: Type) => string | number) = false + sortBy: boolean | ((t: Type) => string | number) = false, ): [PrimitiveType | null, ReadonlySet] { function sort(s: ReadonlySet): ReadonlySet { if (sortBy === false) return s; - if (sortBy === true) return setSortBy(s, m => m.kind); + if (sortBy === true) return setSortBy(s, (m) => m.kind); return setSortBy(s, sortBy); } @@ -140,10 +162,15 @@ export function removeNullFromUnion( return [null, sort(t.members)]; } - return [nullType as PrimitiveType, sort(setFilter(t.members, m => m.kind !== "null"))]; + return [ + nullType as PrimitiveType, + sort(setFilter(t.members, (m) => m.kind !== "null")), + ]; } -export function removeNullFromType(t: Type): [PrimitiveType | null, ReadonlySet] { +export function removeNullFromType( + t: Type, +): [PrimitiveType | null, ReadonlySet] { if (t.kind === "null") { return [t as PrimitiveType, new Set()]; } @@ -166,7 +193,9 @@ export function nonNullTypeCases(t: Type): ReadonlySet { return removeNullFromType(t)[1]; } -export function getNullAsOptional(cp: ClassProperty): [boolean, ReadonlySet] { +export function getNullAsOptional( + cp: ClassProperty, +): [boolean, ReadonlySet] { const [maybeNull, nonNulls] = removeNullFromType(cp.type); if (cp.isOptional) { return [true, nonNulls]; @@ -190,22 +219,35 @@ export interface SeparatedNamedTypes { export function separateNamedTypes(types: Iterable): SeparatedNamedTypes { const objects = setFilter( types, - t => t.kind === "object" || t.kind === "class" + (t) => t.kind === "object" || t.kind === "class", ) as Set as ReadonlySet; - const enums = setFilter(types, t => t instanceof EnumType) as Set as ReadonlySet; - const unions = setFilter(types, t => t instanceof UnionType) as Set as ReadonlySet; + const enums = setFilter( + types, + (t) => t instanceof EnumType, + ) as Set as ReadonlySet; + const unions = setFilter( + types, + (t) => t instanceof UnionType, + ) as Set as ReadonlySet; return { objects, enums, unions }; } -export function directlyReachableTypes(t: Type, setForType: (t: Type) => ReadonlySet | null): ReadonlySet { +export function directlyReachableTypes( + t: Type, + setForType: (t: Type) => ReadonlySet | null, +): ReadonlySet { const set = setForType(t); if (set !== null) return set; - return setUnion(...Array.from(t.getNonAttributeChildren()).map(c => directlyReachableTypes(c, setForType))); + return setUnion( + ...Array.from(t.getNonAttributeChildren()).map((c) => + directlyReachableTypes(c, setForType), + ), + ); } export function directlyReachableSingleNamedType(type: Type): Type | undefined { - const definedTypes = directlyReachableTypes(type, t => { + const definedTypes = directlyReachableTypes(type, (t) => { if ( (!(t instanceof UnionType) && isNamedType(t)) || (t instanceof UnionType && nullableFromUnion(t) === null) @@ -215,13 +257,18 @@ export function directlyReachableSingleNamedType(type: Type): Type | undefined { return null; }); - assert(definedTypes.size <= 1, "Cannot have more than one defined type per top-level"); + assert( + definedTypes.size <= 1, + "Cannot have more than one defined type per top-level", + ); return iterableFirst(definedTypes); } export function stringTypesForType(t: PrimitiveType): StringTypes { assert(t.kind === "string", "Only strings can have string types"); - const stringTypes = stringTypesTypeAttributeKind.tryGetInAttributes(t.getAttributes()); + const stringTypes = stringTypesTypeAttributeKind.tryGetInAttributes( + t.getAttributes(), + ); if (stringTypes === undefined) { return panic("All strings must have a string type attribute"); } @@ -250,7 +297,7 @@ export function matchTypeExhaustive( objectType: (objectType: ObjectType) => U, enumType: (enumType: EnumType) => U, unionType: (unionType: UnionType) => U, - transformedStringType: (transformedStringType: PrimitiveType) => U + transformedStringType: (transformedStringType: PrimitiveType) => U, ): U { if (t.isPrimitive()) { if (isPrimitiveStringTypeKind(t.kind)) { @@ -268,16 +315,17 @@ export function matchTypeExhaustive( null: nullType, bool: boolType, integer: integerType, - double: doubleType + double: doubleType, }[kind]; if (f !== undefined) return f(t); return assertNever(f); - } else if (t instanceof ArrayType) return arrayType(t); - else if (t instanceof ClassType) return classType(t); - else if (t instanceof MapType) return mapType(t); - else if (t instanceof ObjectType) return objectType(t); - else if (t instanceof EnumType) return enumType(t); - else if (t instanceof UnionType) return unionType(t); + } + if (t instanceof ArrayType) return arrayType(t); + if (t instanceof ClassType) return classType(t); + if (t instanceof MapType) return mapType(t); + if (t instanceof ObjectType) return objectType(t); + if (t instanceof EnumType) return enumType(t); + if (t instanceof UnionType) return unionType(t); return panic(`Unknown type ${t.kind}`); } @@ -294,7 +342,7 @@ export function matchType( mapType: (mapType: MapType) => U, enumType: (enumType: EnumType) => U, unionType: (unionType: UnionType) => U, - transformedStringType?: (transformedStringType: PrimitiveType) => U + transformedStringType?: (transformedStringType: PrimitiveType) => U, ): U { function typeNotSupported(t: Type): never { return panic(`Unsupported type ${t.kind} in non-exhaustive match`); @@ -315,7 +363,7 @@ export function matchType( typeNotSupported, enumType, unionType, - transformedStringType ?? typeNotSupported + transformedStringType ?? typeNotSupported, ); } @@ -325,7 +373,7 @@ export function matchCompoundType( classType: (classType: ClassType) => void, mapType: (mapType: MapType) => void, objectType: (objectType: ObjectType) => void, - unionType: (unionType: UnionType) => void + unionType: (unionType: UnionType) => void, ): void { function ignore(_: T): void { return; @@ -346,6 +394,6 @@ export function matchCompoundType( objectType, ignore, unionType, - ignore + ignore, ); } diff --git a/packages/quicktype-core/src/UnifyClasses.ts b/packages/quicktype-core/src/UnifyClasses.ts index be20b55ef..5c1e0094e 100644 --- a/packages/quicktype-core/src/UnifyClasses.ts +++ b/packages/quicktype-core/src/UnifyClasses.ts @@ -1,10 +1,23 @@ import { iterableFirst, setUnionInto } from "collection-utils"; -import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; -import { type BaseGraphRewriteBuilder, type GraphRewriteBuilder, type TypeLookerUp } from "./GraphRewriting"; +import { + type TypeAttributes, + combineTypeAttributes, + emptyTypeAttributes, +} from "./attributes/TypeAttributes"; +import type { + BaseGraphRewriteBuilder, + GraphRewriteBuilder, + TypeLookerUp, +} from "./GraphRewriting"; import { assert, defined, panic } from "./support/Support"; -import { type ClassProperty, type ObjectType, type Type, UnionType } from "./Type/Type"; -import { type TypeBuilder } from "./Type/TypeBuilder"; +import { + type ClassProperty, + type ObjectType, + type Type, + UnionType, +} from "./Type/Type"; +import type { TypeBuilder } from "./Type/TypeBuilder"; import { type TypeRef, derefTypeRef } from "./Type/TypeRef"; import { assertIsObject } from "./Type/TypeUtils"; import { TypeRefUnionAccumulator, UnionBuilder } from "./UnionBuilder"; @@ -12,18 +25,20 @@ import { TypeRefUnionAccumulator, UnionBuilder } from "./UnionBuilder"; function getCliqueProperties( clique: ObjectType[], builder: TypeBuilder, - makePropertyType: (types: ReadonlySet) => TypeRef + makePropertyType: (types: ReadonlySet) => TypeRef, ): [ReadonlyMap, TypeRef | undefined, boolean] { - let lostTypeAttributes = false; - let propertyNames = new Set(); + const lostTypeAttributes = false; + const propertyNames = new Set(); for (const o of clique) { setUnionInto(propertyNames, o.getProperties().keys()); } - let properties = Array.from(propertyNames).map(name => [name, new Set(), false] as [string, Set, boolean]); + const properties = Array.from(propertyNames).map( + (name) => [name, new Set(), false] as [string, Set, boolean], + ); let additionalProperties: Set | undefined = undefined; for (const o of clique) { - let additional = o.getAdditionalProperties(); + const additional = o.getAdditionalProperties(); if (additional !== undefined) { if (additionalProperties === undefined) { additionalProperties = new Set(); @@ -57,11 +72,18 @@ function getCliqueProperties( } const unifiedAdditionalProperties = - additionalProperties === undefined ? undefined : makePropertyType(additionalProperties); + additionalProperties === undefined + ? undefined + : makePropertyType(additionalProperties); - const unifiedPropertiesArray = properties.map(([name, types, isOptional]) => { - return [name, builder.makeClassProperty(makePropertyType(types), isOptional)] as [string, ClassProperty]; - }); + const unifiedPropertiesArray = properties.map( + ([name, types, isOptional]) => { + return [ + name, + builder.makeClassProperty(makePropertyType(types), isOptional), + ] as [string, ClassProperty]; + }, + ); const unifiedProperties = new Map(unifiedPropertiesArray); return [unifiedProperties, unifiedAdditionalProperties, lostTypeAttributes]; @@ -89,15 +111,23 @@ function countProperties(clique: ObjectType[]): { } } - return { hasProperties, hasAdditionalProperties, hasNonAnyAdditionalProperties }; + return { + hasProperties, + hasAdditionalProperties, + hasNonAnyAdditionalProperties, + }; } -export class UnifyUnionBuilder extends UnionBuilder { +export class UnifyUnionBuilder extends UnionBuilder< + BaseGraphRewriteBuilder, + TypeRef[], + TypeRef[] +> { public constructor( typeBuilder: BaseGraphRewriteBuilder, private readonly _makeObjectTypes: boolean, private readonly _makeClassesFixed: boolean, - private readonly _unifyTypes: (typesToUnify: TypeRef[]) => TypeRef + private readonly _unifyTypes: (typesToUnify: TypeRef[]) => TypeRef, ) { super(typeBuilder); } @@ -105,50 +135,71 @@ export class UnifyUnionBuilder extends UnionBuilder assertIsObject(derefTypeRef(r, this.typeBuilder))); - const { hasProperties, hasAdditionalProperties, hasNonAnyAdditionalProperties } = countProperties(objectTypes); + const objectTypes = objectRefs.map((r) => + assertIsObject(derefTypeRef(r, this.typeBuilder)), + ); + const { + hasProperties, + hasAdditionalProperties, + hasNonAnyAdditionalProperties, + } = countProperties(objectTypes); - if (!this._makeObjectTypes && (hasNonAnyAdditionalProperties || (!hasProperties && hasAdditionalProperties))) { + if ( + !this._makeObjectTypes && + (hasNonAnyAdditionalProperties || + (!hasProperties && hasAdditionalProperties)) + ) { const propertyTypes = new Set(); for (const o of objectTypes) { setUnionInto( propertyTypes, - Array.from(o.getProperties().values()).map(cp => cp.typeRef) + Array.from(o.getProperties().values()).map( + (cp) => cp.typeRef, + ), ); } const additionalPropertyTypes = new Set( objectTypes - .filter(o => o.getAdditionalProperties() !== undefined) - .map(o => defined(o.getAdditionalProperties()).typeRef) + .filter((o) => o.getAdditionalProperties() !== undefined) + .map((o) => defined(o.getAdditionalProperties()).typeRef), ); setUnionInto(propertyTypes, additionalPropertyTypes); - return this.typeBuilder.getMapType(typeAttributes, this._unifyTypes(Array.from(propertyTypes))); + return this.typeBuilder.getMapType( + typeAttributes, + this._unifyTypes(Array.from(propertyTypes)), + ); } else { - const [properties, additionalProperties, lostTypeAttributes] = getCliqueProperties( - objectTypes, - this.typeBuilder, - types => { + const [properties, additionalProperties, lostTypeAttributes] = + getCliqueProperties(objectTypes, this.typeBuilder, (types) => { assert(types.size > 0, "Property has no type"); - return this._unifyTypes(Array.from(types).map(t => t.typeRef)); - } - ); + return this._unifyTypes( + Array.from(types).map((t) => t.typeRef), + ); + }); if (lostTypeAttributes) { this.typeBuilder.setLostTypeAttributes(); } @@ -158,15 +209,18 @@ export class UnifyUnionBuilder extends UnionBuilder( typeBuilder: GraphRewriteBuilder, makeObjectTypes: boolean, makeClassesFixed: boolean, - conflateNumbers: boolean + conflateNumbers: boolean, ): UnionBuilder { - return new UnifyUnionBuilder(typeBuilder, makeObjectTypes, makeClassesFixed, trefs => - unifyTypes( - new Set(trefs.map(tref => derefTypeRef(tref, typeBuilder))), - emptyTypeAttributes, - typeBuilder, - unionBuilderForUnification(typeBuilder, makeObjectTypes, makeClassesFixed, conflateNumbers), - conflateNumbers - ) + return new UnifyUnionBuilder( + typeBuilder, + makeObjectTypes, + makeClassesFixed, + (trefs) => + unifyTypes( + new Set(trefs.map((tref) => derefTypeRef(tref, typeBuilder))), + emptyTypeAttributes, + typeBuilder, + unionBuilderForUnification( + typeBuilder, + makeObjectTypes, + makeClassesFixed, + conflateNumbers, + ), + conflateNumbers, + ), ); } @@ -205,9 +272,13 @@ export function unifyTypes( types: ReadonlySet, typeAttributes: TypeAttributes, typeBuilder: GraphRewriteBuilder, - unionBuilder: UnionBuilder, + unionBuilder: UnionBuilder< + TypeBuilder & TypeLookerUp, + TypeRef[], + TypeRef[] + >, conflateNumbers: boolean, - maybeForwardingRef?: TypeRef + maybeForwardingRef?: TypeRef, ): TypeRef { typeAttributes = typeBuilder.reconstituteTypeAttributes(typeAttributes); if (types.size === 0) { @@ -215,23 +286,44 @@ export function unifyTypes( } else if (types.size === 1) { const first = defined(iterableFirst(types)); if (!(first instanceof UnionType)) { - return typeBuilder.reconstituteTypeRef(first.typeRef, typeAttributes, maybeForwardingRef); + return typeBuilder.reconstituteTypeRef( + first.typeRef, + typeAttributes, + maybeForwardingRef, + ); } } - const typeRefs = Array.from(types).map(t => t.typeRef); - const maybeTypeRef = typeBuilder.lookupTypeRefs(typeRefs, maybeForwardingRef); + const typeRefs = Array.from(types).map((t) => t.typeRef); + const maybeTypeRef = typeBuilder.lookupTypeRefs( + typeRefs, + maybeForwardingRef, + ); if (maybeTypeRef !== undefined) { typeBuilder.addAttributes(maybeTypeRef, typeAttributes); return maybeTypeRef; } const accumulator = new TypeRefUnionAccumulator(conflateNumbers); - const nestedAttributes = typeBuilder.reconstituteTypeAttributes(accumulator.addTypes(types)); - typeAttributes = combineTypeAttributes("union", typeAttributes, nestedAttributes); + const nestedAttributes = typeBuilder.reconstituteTypeAttributes( + accumulator.addTypes(types), + ); + typeAttributes = combineTypeAttributes( + "union", + typeAttributes, + nestedAttributes, + ); - return typeBuilder.withForwardingRef(maybeForwardingRef, forwardingRef => { - typeBuilder.registerUnion(typeRefs, forwardingRef); - return unionBuilder.buildUnion(accumulator, false, typeAttributes, forwardingRef); - }); + return typeBuilder.withForwardingRef( + maybeForwardingRef, + (forwardingRef) => { + typeBuilder.registerUnion(typeRefs, forwardingRef); + return unionBuilder.buildUnion( + accumulator, + false, + typeAttributes, + forwardingRef, + ); + }, + ); } diff --git a/packages/quicktype-core/src/UnionBuilder.ts b/packages/quicktype-core/src/UnionBuilder.ts index bea77e361..d5ed2b033 100644 --- a/packages/quicktype-core/src/UnionBuilder.ts +++ b/packages/quicktype-core/src/UnionBuilder.ts @@ -1,12 +1,20 @@ -import { mapMap, mapMerge, mapUpdateInto, setUnionInto } from "collection-utils"; +import { + mapMap, + mapMerge, + mapUpdateInto, + setUnionInto, +} from "collection-utils"; -import { StringTypes, stringTypesTypeAttributeKind } from "./attributes/StringTypes"; +import { + StringTypes, + stringTypesTypeAttributeKind, +} from "./attributes/StringTypes"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, increaseTypeAttributesDistance, - makeTypeAttributesInferred + makeTypeAttributesInferred, } from "./attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "./support/Support"; import { @@ -15,10 +23,10 @@ import { type Type, type TypeKind, UnionType, - isPrimitiveTypeKind + isPrimitiveTypeKind, } from "./Type"; -import { type TypeBuilder } from "./Type/TypeBuilder"; -import { type TypeRef } from "./Type/TypeRef"; +import type { TypeBuilder } from "./Type/TypeBuilder"; +import type { TypeRef } from "./Type/TypeRef"; import { matchTypeExhaustive } from "./Type/TypeUtils"; // FIXME: This interface is badly designed. All the properties @@ -44,7 +52,7 @@ type TypeAttributeMapBuilder = Map; function addAttributes( accumulatorAttributes: TypeAttributes | undefined, - newAttributes: TypeAttributes + newAttributes: TypeAttributes, ): TypeAttributes { if (accumulatorAttributes === undefined) return newAttributes; return combineTypeAttributes("union", accumulatorAttributes, newAttributes); @@ -53,15 +61,18 @@ function addAttributes( function setAttributes( attributeMap: TypeAttributeMap, kind: T, - newAttributes: TypeAttributes + newAttributes: TypeAttributes, ): void { - attributeMap.set(kind, addAttributes(attributeMap.get(kind), newAttributes)); + attributeMap.set( + kind, + addAttributes(attributeMap.get(kind), newAttributes), + ); } function addAttributesToBuilder( builder: TypeAttributeMapBuilder, kind: T, - newAttributes: TypeAttributes + newAttributes: TypeAttributes, ): void { let arr = builder.get(kind); if (arr === undefined) { @@ -72,20 +83,30 @@ function addAttributesToBuilder( arr.push(newAttributes); } -function buildTypeAttributeMap(builder: TypeAttributeMapBuilder): TypeAttributeMap { - return mapMap(builder, arr => combineTypeAttributes("union", arr)); +function buildTypeAttributeMap( + builder: TypeAttributeMapBuilder, +): TypeAttributeMap { + return mapMap(builder, (arr) => combineTypeAttributes("union", arr)); } -function moveAttributes(map: TypeAttributeMap, fromKind: T, toKind: T): void { +function moveAttributes( + map: TypeAttributeMap, + fromKind: T, + toKind: T, +): void { const fromAttributes = defined(map.get(fromKind)); map.delete(fromKind); setAttributes(map, toKind, fromAttributes); } -export class UnionAccumulator implements UnionTypeProvider { - private readonly _nonStringTypeAttributes: TypeAttributeMapBuilder = new Map(); +export class UnionAccumulator + implements UnionTypeProvider +{ + private readonly _nonStringTypeAttributes: TypeAttributeMapBuilder = + new Map(); - private readonly _stringTypeAttributes: TypeAttributeMapBuilder = new Map(); + private readonly _stringTypeAttributes: TypeAttributeMapBuilder = + new Map(); public readonly arrayData: TArray[] = []; @@ -99,7 +120,8 @@ export class UnionAccumulator implements UnionTypeProvider implements UnionTypeProvider implements UnionTypeProvider, attributes: TypeAttributes): void { + public addEnum( + cases: ReadonlySet, + attributes: TypeAttributes, + ): void { const maybeStringAttributes = this._stringTypeAttributes.get("string"); if (maybeStringAttributes !== undefined) { - addAttributesToBuilder(this._stringTypeAttributes, "string", attributes); + addAttributesToBuilder( + this._stringTypeAttributes, + "string", + attributes, + ); return; } - addAttributesToBuilder(this._nonStringTypeAttributes, "enum", attributes); + addAttributesToBuilder( + this._nonStringTypeAttributes, + "enum", + attributes, + ); setUnionInto(this._enumCases, cases); } @@ -188,7 +254,11 @@ export class UnionAccumulator implements UnionTypeProvider implements UnionTypeProvider { - assert(!(this.have("enum") && this.have("string")), "We can't have both strings and enums in the same union"); + assert( + !(this.have("enum") && this.have("string")), + "We can't have both strings and enums in the same union", + ); - let merged = mapMerge( + const merged = mapMerge( buildTypeAttributeMap(this._nonStringTypeAttributes), - buildTypeAttributeMap(this._stringTypeAttributes) + buildTypeAttributeMap(this._stringTypeAttributes), ); if (merged.size === 0) { - return new Map([["none", emptyTypeAttributes] as [TypeKind, TypeAttributes]]); + return new Map([ + ["none", emptyTypeAttributes] as [TypeKind, TypeAttributes], + ]); } if (this._nonStringTypeAttributes.has("any")) { - assert(this._lostTypeAttributes, "This had to be set when we added 'any'"); + assert( + this._lostTypeAttributes, + "This had to be set when we added 'any'", + ); - const allAttributes = combineTypeAttributes("union", Array.from(merged.values())); - return new Map([["any", allAttributes] as [TypeKind, TypeAttributes]]); + const allAttributes = combineTypeAttributes( + "union", + Array.from(merged.values()), + ); + return new Map([ + ["any", allAttributes] as [TypeKind, TypeAttributes], + ]); } - if (this._conflateNumbers && this.have("integer") && this.have("double")) { + if ( + this._conflateNumbers && + this.have("integer") && + this.have("double") + ) { moveAttributes(merged, "integer", "double"); } @@ -239,7 +326,9 @@ class FauxUnion { type UnionOrFaux = UnionType | FauxUnion; -function attributesForTypes(types: Iterable): [ReadonlyMap, TypeAttributes] { +function attributesForTypes( + types: Iterable, +): [ReadonlyMap, TypeAttributes] { // These two maps are the reverse of each other. unionsForType is all the unions // that are ancestors of that type, when going from one of the given types, only // following unions. @@ -251,7 +340,11 @@ function attributesForTypes(types: Iterable): [ReadonlyMap = new Set(); - function traverse(t: Type, path: UnionOrFaux[], isEquivalentToRoot: boolean): void { + function traverse( + t: Type, + path: UnionOrFaux[], + isEquivalentToRoot: boolean, + ): void { if (t instanceof UnionType) { unions.add(t); if (isEquivalentToRoot) { @@ -266,9 +359,13 @@ function attributesForTypes(types: Iterable): [ReadonlyMap (s === undefined ? new Set(path) : setUnionInto(s, path))); + mapUpdateInto(unionsForType, t, (s) => + s === undefined ? new Set(path) : setUnionInto(s, path), + ); for (const u of path) { - mapUpdateInto(typesForUnion, u, s => (s === undefined ? new Set([t]) : s.add(t))); + mapUpdateInto(typesForUnion, u, (s) => + s === undefined ? new Set([t]) : s.add(t), + ); } } } @@ -280,15 +377,22 @@ function attributesForTypes(types: Iterable): [ReadonlyMap { - const singleAncestors = Array.from(unionForType).filter(u => defined(typesForUnion.get(u)).size === 1); + const singleAncestors = Array.from(unionForType).filter( + (u) => defined(typesForUnion.get(u)).size === 1, + ); assert( - singleAncestors.every(u => defined(typesForUnion.get(u)).has(t)), - "We messed up bookkeeping" + singleAncestors.every((u) => defined(typesForUnion.get(u)).has(t)), + "We messed up bookkeeping", + ); + const inheritedAttributes = singleAncestors.map((u) => + u.getAttributes(), + ); + return combineTypeAttributes( + "union", + [t.getAttributes()].concat(inheritedAttributes), ); - const inheritedAttributes = singleAncestors.map(u => u.getAttributes()); - return combineTypeAttributes("union", [t.getAttributes()].concat(inheritedAttributes)); }); - const unionAttributes = Array.from(unions).map(u => { + const unionAttributes = Array.from(unions).map((u) => { const t = typesForUnion.get(u); if (t !== undefined && t.size === 1) { return emptyTypeAttributes; @@ -305,32 +409,40 @@ function attributesForTypes(types: Iterable): [ReadonlyMap { +export class TypeRefUnionAccumulator extends UnionAccumulator< + TypeRef, + TypeRef +> { // There is a method analogous to this in the IntersectionAccumulator. It might // make sense to find a common interface. private addType(t: Type, attributes: TypeAttributes): void { matchTypeExhaustive( t, - _noneType => this.addNone(attributes), - _anyType => this.addAny(attributes), - _nullType => this.addPrimitive("null", attributes), - _boolType => this.addPrimitive("bool", attributes), - _integerType => this.addPrimitive("integer", attributes), - _doubleType => this.addPrimitive("double", attributes), - _stringType => this.addStringType("string", attributes), - arrayType => this.addArray(arrayType.items.typeRef, attributes), - classType => this.addObject(classType.typeRef, attributes), - mapType => this.addObject(mapType.typeRef, attributes), - objectType => this.addObject(objectType.typeRef, attributes), + (_noneType) => this.addNone(attributes), + (_anyType) => this.addAny(attributes), + (_nullType) => this.addPrimitive("null", attributes), + (_boolType) => this.addPrimitive("bool", attributes), + (_integerType) => this.addPrimitive("integer", attributes), + (_doubleType) => this.addPrimitive("double", attributes), + (_stringType) => this.addStringType("string", attributes), + (arrayType) => this.addArray(arrayType.items.typeRef, attributes), + (classType) => this.addObject(classType.typeRef, attributes), + (mapType) => this.addObject(mapType.typeRef, attributes), + (objectType) => this.addObject(objectType.typeRef, attributes), // FIXME: We're not carrying counts, so this is not correct if we do enum // inference. JSON Schema input uses this case, however, without enum // inference, which is fine, but still a bit ugly. - enumType => this.addEnum(enumType.cases, attributes), - _unionType => { - return panic("The unions should have been eliminated in attributesForTypesInUnion"); + (enumType) => this.addEnum(enumType.cases, attributes), + (_unionType) => { + return panic( + "The unions should have been eliminated in attributesForTypesInUnion", + ); }, - transformedStringType => - this.addStringType(transformedStringType.kind as PrimitiveStringTypeKind, attributes) + (transformedStringType) => + this.addStringType( + transformedStringType.kind as PrimitiveStringTypeKind, + attributes, + ), ); } @@ -344,41 +456,70 @@ export class TypeRefUnionAccumulator extends UnionAccumulator } } -export abstract class UnionBuilder { +export abstract class UnionBuilder< + TBuilder extends TypeBuilder, + TArrayData, + TObjectData, +> { public constructor(protected readonly typeBuilder: TBuilder) {} protected abstract makeObject( objects: TObjectData, typeAttributes: TypeAttributes, - forwardingRef: TypeRef | undefined + forwardingRef: TypeRef | undefined, ): TypeRef; protected abstract makeArray( arrays: TArrayData, typeAttributes: TypeAttributes, - forwardingRef: TypeRef | undefined + forwardingRef: TypeRef | undefined, ): TypeRef; private makeTypeOfKind( typeProvider: UnionTypeProvider, kind: TypeKind, typeAttributes: TypeAttributes, - forwardingRef: TypeRef | undefined + forwardingRef: TypeRef | undefined, ): TypeRef { switch (kind) { case "string": - return this.typeBuilder.getStringType(typeAttributes, undefined, forwardingRef); + return this.typeBuilder.getStringType( + typeAttributes, + undefined, + forwardingRef, + ); case "enum": - return this.typeBuilder.getEnumType(typeAttributes, typeProvider.enumCases, forwardingRef); + return this.typeBuilder.getEnumType( + typeAttributes, + typeProvider.enumCases, + forwardingRef, + ); case "object": - return this.makeObject(typeProvider.objectData, typeAttributes, forwardingRef); + return this.makeObject( + typeProvider.objectData, + typeAttributes, + forwardingRef, + ); case "array": - return this.makeArray(typeProvider.arrayData, typeAttributes, forwardingRef); + return this.makeArray( + typeProvider.arrayData, + typeAttributes, + forwardingRef, + ); default: if (isPrimitiveTypeKind(kind)) { - return this.typeBuilder.getPrimitiveType(kind, typeAttributes, forwardingRef); + return this.typeBuilder.getPrimitiveType( + kind, + typeAttributes, + forwardingRef, + ); } - if (kind === "union" || kind === "class" || kind === "map" || kind === "intersection") { + if ( + kind === "union" || + kind === "class" || + kind === "map" || + kind === "intersection" + ) { return panic(`getMemberKinds() shouldn't return ${kind}`); } @@ -390,7 +531,7 @@ export abstract class UnionBuilder, unique: boolean, typeAttributes: TypeAttributes, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { const kinds = typeProvider.getMemberKinds(); @@ -407,19 +548,35 @@ export abstract class UnionBuilder { } } -export const accessorNamesTypeAttributeKind: TypeAttributeKind = new AccessorNamesTypeAttributeKind(); +export const accessorNamesTypeAttributeKind: TypeAttributeKind = + new AccessorNamesTypeAttributeKind(); // Returns [name, isFixed]. -function getFromEntry(entry: AccessorEntry, language: string): [string, boolean] | undefined { +function getFromEntry( + entry: AccessorEntry, + language: string, +): [string, boolean] | undefined { if (typeof entry === "string") return [entry, false]; const maybeForLanguage = entry.get(language); @@ -44,28 +62,43 @@ function getFromEntry(entry: AccessorEntry, language: string): [string, boolean] return undefined; } -export function lookupKey(accessors: AccessorNames, key: string, language: string): [string, boolean] | undefined { +export function lookupKey( + accessors: AccessorNames, + key: string, + language: string, +): [string, boolean] | undefined { const entry = accessors.get(key); if (entry === undefined) return undefined; return getFromEntry(entry, language); } -export function objectPropertyNames(o: ObjectType, language: string): Map { - const accessors = accessorNamesTypeAttributeKind.tryGetInAttributes(o.getAttributes()); +export function objectPropertyNames( + o: ObjectType, + language: string, +): Map { + const accessors = accessorNamesTypeAttributeKind.tryGetInAttributes( + o.getAttributes(), + ); const map = o.getProperties(); - if (accessors === undefined) return mapMap(map, _ => undefined); + if (accessors === undefined) return mapMap(map, (_) => undefined); return mapMap(map, (_cp, n) => lookupKey(accessors, n, language)); } -export function enumCaseNames(e: EnumType, language: string): Map { - const accessors = accessorNamesTypeAttributeKind.tryGetInAttributes(e.getAttributes()); - if (accessors === undefined) return mapMap(e.cases.entries(), _ => undefined); - return mapMap(e.cases.entries(), c => lookupKey(accessors, c, language)); +export function enumCaseNames( + e: EnumType, + language: string, +): Map { + const accessors = accessorNamesTypeAttributeKind.tryGetInAttributes( + e.getAttributes(), + ); + if (accessors === undefined) + return mapMap(e.cases.entries(), (_) => undefined); + return mapMap(e.cases.entries(), (c) => lookupKey(accessors, c, language)); } export function getAccessorName( names: Map, - original: string + original: string, ): [string | undefined, boolean] { const maybeName = names.get(original); if (maybeName === undefined) return [undefined, false]; @@ -79,7 +112,9 @@ export function getAccessorName( // That way, no matter how the types are recombined, if we find a union member, we can look // up its union's identifier(s), and then look up the member's accessor entries for that // identifier. Of course we might find more than one, potentially conflicting. -class UnionIdentifierTypeAttributeKind extends TypeAttributeKind> { +class UnionIdentifierTypeAttributeKind extends TypeAttributeKind< + ReadonlySet +> { public constructor() { super("unionIdentifier"); } @@ -93,23 +128,30 @@ class UnionIdentifierTypeAttributeKind extends TypeAttributeKind> = - new UnionIdentifierTypeAttributeKind(); +export const unionIdentifierTypeAttributeKind: TypeAttributeKind< + ReadonlySet +> = new UnionIdentifierTypeAttributeKind(); let nextUnionIdentifier = 0; export function makeUnionIdentifierAttribute(): TypeAttributes { - const attributes = unionIdentifierTypeAttributeKind.makeAttributes(new Set([nextUnionIdentifier])); + const attributes = unionIdentifierTypeAttributeKind.makeAttributes( + new Set([nextUnionIdentifier]), + ); nextUnionIdentifier += 1; return attributes; } -class UnionMemberNamesTypeAttributeKind extends TypeAttributeKind> { +class UnionMemberNamesTypeAttributeKind extends TypeAttributeKind< + Map +> { public constructor() { super("unionMemberNames"); } - public combine(arr: Array>): Map { + public combine( + arr: Array>, + ): Map { const result = new Map(); for (const m of arr) { mapMergeInto(result, m); @@ -119,20 +161,34 @@ class UnionMemberNamesTypeAttributeKind extends TypeAttributeKind> = - new UnionMemberNamesTypeAttributeKind(); - -export function makeUnionMemberNamesAttribute(unionAttributes: TypeAttributes, entry: AccessorEntry): TypeAttributes { - const identifiers = defined(unionIdentifierTypeAttributeKind.tryGetInAttributes(unionAttributes)); - const map = mapFromIterable(identifiers, _ => entry); +export const unionMemberNamesTypeAttributeKind: TypeAttributeKind< + Map +> = new UnionMemberNamesTypeAttributeKind(); + +export function makeUnionMemberNamesAttribute( + unionAttributes: TypeAttributes, + entry: AccessorEntry, +): TypeAttributes { + const identifiers = defined( + unionIdentifierTypeAttributeKind.tryGetInAttributes(unionAttributes), + ); + const map = mapFromIterable(identifiers, (_) => entry); return unionMemberNamesTypeAttributeKind.makeAttributes(map); } -export function unionMemberName(u: UnionType, member: Type, language: string): [string | undefined, boolean] { - const identifiers = unionIdentifierTypeAttributeKind.tryGetInAttributes(u.getAttributes()); +export function unionMemberName( + u: UnionType, + member: Type, + language: string, +): [string | undefined, boolean] { + const identifiers = unionIdentifierTypeAttributeKind.tryGetInAttributes( + u.getAttributes(), + ); if (identifiers === undefined) return [undefined, false]; - const memberNames = unionMemberNamesTypeAttributeKind.tryGetInAttributes(member.getAttributes()); + const memberNames = unionMemberNamesTypeAttributeKind.tryGetInAttributes( + member.getAttributes(), + ); if (memberNames === undefined) return [undefined, false]; const names = new Set(); @@ -164,11 +220,15 @@ export function unionMemberName(u: UnionType, member: Type, language: string): [ isFixed = false; } - messageAssert(size === 1, "SchemaMoreThanOneUnionMemberName", { names: Array.from(names) }); + messageAssert(size === 1, "SchemaMoreThanOneUnionMemberName", { + names: Array.from(names), + }); return [first, isFixed]; } -function isAccessorEntry(x: unknown): x is string | { [language: string]: string } { +function isAccessorEntry( + x: unknown, +): x is string | { [language: string]: string } { if (typeof x === "string") { return true; } @@ -176,7 +236,9 @@ function isAccessorEntry(x: unknown): x is string | { [language: string]: string return isStringMap(x, (v: unknown): v is string => typeof v === "string"); } -function makeAccessorEntry(ae: string | { [language: string]: string }): AccessorEntry { +function makeAccessorEntry( + ae: string | { [language: string]: string }, +): AccessorEntry { if (typeof ae === "string") return ae; return mapFromObject(ae); } @@ -191,24 +253,35 @@ export function accessorNamesAttributeProducer( schema: JSONSchema, canonicalRef: Ref, _types: Set, - cases: JSONSchema[] | undefined + cases: JSONSchema[] | undefined, ): JSONSchemaAttributes | undefined { if (typeof schema !== "object") return undefined; const maybeAccessors = schema["qt-accessors"]; if (maybeAccessors === undefined) return undefined; if (cases === undefined) { - return { forType: accessorNamesTypeAttributeKind.makeAttributes(makeAccessorNames(maybeAccessors)) }; + return { + forType: accessorNamesTypeAttributeKind.makeAttributes( + makeAccessorNames(maybeAccessors), + ), + }; } else { const identifierAttribute = makeUnionIdentifierAttribute(); const accessors = checkArray(maybeAccessors, isAccessorEntry); - messageAssert(cases.length === accessors.length, "SchemaWrongAccessorEntryArrayLength", { - operation: "oneOf", - ref: canonicalRef.push("oneOf") - }); - const caseAttributes = accessors.map(accessor => - makeUnionMemberNamesAttribute(identifierAttribute, makeAccessorEntry(accessor)) + messageAssert( + cases.length === accessors.length, + "SchemaWrongAccessorEntryArrayLength", + { + operation: "oneOf", + ref: canonicalRef.push("oneOf"), + }, + ); + const caseAttributes = accessors.map((accessor) => + makeUnionMemberNamesAttribute( + identifierAttribute, + makeAccessorEntry(accessor), + ), ); return { forUnion: identifierAttribute, forCases: caseAttributes }; } diff --git a/packages/quicktype-core/src/attributes/Constraints.ts b/packages/quicktype-core/src/attributes/Constraints.ts index 09fb79564..3266e9bc5 100644 --- a/packages/quicktype-core/src/attributes/Constraints.ts +++ b/packages/quicktype-core/src/attributes/Constraints.ts @@ -1,8 +1,12 @@ -import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; -import { type JSONSchema } from "../input/JSONSchemaStore"; +import type { + JSONSchemaAttributes, + JSONSchemaType, + Ref, +} from "../input/JSONSchemaInput"; +import type { JSONSchema } from "../input/JSONSchemaStore"; import { messageError } from "../Messages"; import { assert } from "../support/Support"; -import { type Type, type TypeKind } from "../Type"; +import type { Type, TypeKind } from "../Type"; import { TypeAttributeKind } from "./TypeAttributes"; @@ -11,7 +15,9 @@ import { TypeAttributeKind } from "./TypeAttributes"; // `areEqual`, `hashCodeOf`. export type MinMaxConstraint = [number | undefined, number | undefined]; -function checkMinMaxConstraint(minmax: MinMaxConstraint): MinMaxConstraint | undefined { +function checkMinMaxConstraint( + minmax: MinMaxConstraint, +): MinMaxConstraint | undefined { const [min, max] = minmax; if (typeof min === "number" && typeof max === "number" && min > max) { return messageError("MiscInvalidMinMaxConstraint", { min, max }); @@ -29,7 +35,7 @@ export class MinMaxConstraintTypeAttributeKind extends TypeAttributeKind, private _minSchemaProperty: string, - private _maxSchemaProperty: string + private _maxSchemaProperty: string, ) { super(name); } @@ -86,7 +92,11 @@ export class MinMaxConstraintTypeAttributeKind extends TypeAttributeKind = new MinMaxConstraintTypeAttributeKind( - "minMax", - new Set(["integer", "double"]), - "minimum", - "maximum" -); - -export const minMaxLengthTypeAttributeKind: TypeAttributeKind = new MinMaxConstraintTypeAttributeKind( - "minMaxLength", - new Set(["string"]), - "minLength", - "maxLength" -); - -function producer(schema: JSONSchema, minProperty: string, maxProperty: string): MinMaxConstraint | undefined { +export const minMaxTypeAttributeKind: TypeAttributeKind = + new MinMaxConstraintTypeAttributeKind( + "minMax", + new Set(["integer", "double"]), + "minimum", + "maximum", + ); + +export const minMaxLengthTypeAttributeKind: TypeAttributeKind = + new MinMaxConstraintTypeAttributeKind( + "minMaxLength", + new Set(["string"]), + "minLength", + "maxLength", + ); + +function producer( + schema: JSONSchema, + minProperty: string, + maxProperty: string, +): MinMaxConstraint | undefined { if (!(typeof schema === "object")) return undefined; let min: number | undefined = undefined; @@ -139,7 +155,7 @@ function producer(schema: JSONSchema, minProperty: string, maxProperty: string): export function minMaxAttributeProducer( schema: JSONSchema, _ref: Ref, - types: Set + types: Set, ): JSONSchemaAttributes | undefined { if (!types.has("number") && !types.has("integer")) return undefined; @@ -151,13 +167,16 @@ export function minMaxAttributeProducer( export function minMaxLengthAttributeProducer( schema: JSONSchema, _ref: Ref, - types: Set + types: Set, ): JSONSchemaAttributes | undefined { if (!types.has("string")) return undefined; const maybeMinMaxLength = producer(schema, "minLength", "maxLength"); if (maybeMinMaxLength === undefined) return undefined; - return { forString: minMaxLengthTypeAttributeKind.makeAttributes(maybeMinMaxLength) }; + return { + forString: + minMaxLengthTypeAttributeKind.makeAttributes(maybeMinMaxLength), + }; } export function minMaxValueForType(t: Type): MinMaxConstraint | undefined { @@ -179,7 +198,7 @@ export class PatternTypeAttributeKind extends TypeAttributeKind { public combine(arr: string[]): string { assert(arr.length > 0); - return arr.map(p => `(${p})`).join("|"); + return arr.map((p) => `(${p})`).join("|"); } public intersect(_arr: string[]): string | undefined { @@ -191,18 +210,23 @@ export class PatternTypeAttributeKind extends TypeAttributeKind { return undefined; } - public addToSchema(schema: { [name: string]: unknown }, t: Type, attr: string): void { + public addToSchema( + schema: { [name: string]: unknown }, + t: Type, + attr: string, + ): void { if (t.kind !== "string") return; schema.pattern = attr; } } -export const patternTypeAttributeKind: TypeAttributeKind = new PatternTypeAttributeKind(); +export const patternTypeAttributeKind: TypeAttributeKind = + new PatternTypeAttributeKind(); export function patternAttributeProducer( schema: JSONSchema, _ref: Ref, - types: Set + types: Set, ): JSONSchemaAttributes | undefined { if (!(typeof schema === "object")) return undefined; if (!types.has("string")) return undefined; diff --git a/packages/quicktype-core/src/attributes/Description.ts b/packages/quicktype-core/src/attributes/Description.ts index 266003832..e6a568d8e 100644 --- a/packages/quicktype-core/src/attributes/Description.ts +++ b/packages/quicktype-core/src/attributes/Description.ts @@ -5,29 +5,31 @@ import { mapMergeWithInto, setSubtract, setUnion, - setUnionManyInto + setUnionManyInto, } from "collection-utils"; -import { - type JSONSchemaAttributes, - type JSONSchemaType, - type Ref +import type { + JSONSchemaAttributes, + JSONSchemaType, + Ref, } from "../input/JSONSchemaInput"; -import { type JSONSchema } from "../input/JSONSchemaStore"; +import type { JSONSchema } from "../input/JSONSchemaStore"; import { type PathElement, PathElementKind } from "../input/PathElement"; -import { type Type } from "../Type/Type"; +import type { Type } from "../Type/Type"; import { TypeAttributeKind, emptyTypeAttributes } from "./TypeAttributes"; export function addDescriptionToSchema( schema: { [name: string]: unknown }, - description: Iterable | undefined + description: Iterable | undefined, ): void { if (description === undefined) return; schema.description = Array.from(description).join("\n"); } -class DescriptionTypeAttributeKind extends TypeAttributeKind> { +class DescriptionTypeAttributeKind extends TypeAttributeKind< + ReadonlySet +> { public constructor() { super("description"); } @@ -40,7 +42,11 @@ class DescriptionTypeAttributeKind extends TypeAttributeKind return undefined; } - public addToSchema(schema: { [name: string]: unknown }, _t: Type, attrs: ReadonlySet): void { + public addToSchema( + schema: { [name: string]: unknown }, + _t: Type, + attrs: ReadonlySet, + ): void { addDescriptionToSchema(schema, attrs); } @@ -59,14 +65,20 @@ class DescriptionTypeAttributeKind extends TypeAttributeKind } } -export const descriptionTypeAttributeKind: TypeAttributeKind> = new DescriptionTypeAttributeKind(); +export const descriptionTypeAttributeKind: TypeAttributeKind< + ReadonlySet +> = new DescriptionTypeAttributeKind(); -class PropertyDescriptionsTypeAttributeKind extends TypeAttributeKind>> { +class PropertyDescriptionsTypeAttributeKind extends TypeAttributeKind< + Map> +> { public constructor() { super("propertyDescriptions"); } - public combine(attrs: Array>>): Map> { + public combine( + attrs: Array>>, + ): Map> { // FIXME: Implement this with mutable sets const result = new Map>(); for (const attr of attrs) { @@ -80,14 +92,17 @@ class PropertyDescriptionsTypeAttributeKind extends TypeAttributeKind>): string | undefined { + public stringify( + propertyDescriptions: Map>, + ): string | undefined { if (propertyDescriptions.size === 0) return undefined; return `prop descs: ${propertyDescriptions.size}`; } } -export const propertyDescriptionsTypeAttributeKind: TypeAttributeKind>> = - new PropertyDescriptionsTypeAttributeKind(); +export const propertyDescriptionsTypeAttributeKind: TypeAttributeKind< + Map> +> = new PropertyDescriptionsTypeAttributeKind(); function isPropertiesKey(el: PathElement): boolean { return el.kind === PathElementKind.KeyOrIndex && el.key === "properties"; @@ -96,7 +111,7 @@ function isPropertiesKey(el: PathElement): boolean { export function descriptionAttributeProducer( schema: JSONSchema, ref: Ref, - types: Set + types: Set, ): JSONSchemaAttributes | undefined { if (!(typeof schema === "object")) return undefined; @@ -113,23 +128,35 @@ export function descriptionAttributeProducer( ) { const maybeDescription = schema.description; if (typeof maybeDescription === "string") { - description = descriptionTypeAttributeKind.makeAttributes(new Set([maybeDescription])); + description = descriptionTypeAttributeKind.makeAttributes( + new Set([maybeDescription]), + ); } } if (types.has("object") && typeof schema.properties === "object") { - const propertyDescriptions = mapFilterMap(mapFromObject(schema.properties), propSchema => { - if (propSchema && typeof propSchema === "object" && "description" in propSchema) { - const desc = propSchema.description; - if (typeof desc === "string") { - return new Set([desc]); + const propertyDescriptions = mapFilterMap( + mapFromObject(schema.properties), + (propSchema) => { + if ( + propSchema && + typeof propSchema === "object" && + "description" in propSchema + ) { + const desc = propSchema.description; + if (typeof desc === "string") { + return new Set([desc]); + } } - } - return undefined; - }); + return undefined; + }, + ); if (propertyDescriptions.size > 0) { - propertyDescription = propertyDescriptionsTypeAttributeKind.makeAttributes(propertyDescriptions); + propertyDescription = + propertyDescriptionsTypeAttributeKind.makeAttributes( + propertyDescriptions, + ); } } diff --git a/packages/quicktype-core/src/attributes/EnumValues.ts b/packages/quicktype-core/src/attributes/EnumValues.ts index 6f59630ae..6c1c83199 100644 --- a/packages/quicktype-core/src/attributes/EnumValues.ts +++ b/packages/quicktype-core/src/attributes/EnumValues.ts @@ -1,10 +1,18 @@ import { mapMap } from "collection-utils"; -import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; -import { type JSONSchema } from "../input/JSONSchemaStore"; -import { type EnumType } from "../Type/Type"; - -import { type AccessorNames, lookupKey, makeAccessorNames } from "./AccessorNames"; +import type { + JSONSchemaAttributes, + JSONSchemaType, + Ref, +} from "../input/JSONSchemaInput"; +import type { JSONSchema } from "../input/JSONSchemaStore"; +import type { EnumType } from "../Type/Type"; + +import { + type AccessorNames, + lookupKey, + makeAccessorNames, +} from "./AccessorNames"; import { TypeAttributeKind } from "./TypeAttributes"; class EnumValuesTypeAttributeKind extends TypeAttributeKind { @@ -17,18 +25,25 @@ class EnumValuesTypeAttributeKind extends TypeAttributeKind { } } -export const enumValuesTypeAttributeKind: TypeAttributeKind = new EnumValuesTypeAttributeKind(); - -export function enumCaseValues(e: EnumType, language: string): Map { - const enumValues = enumValuesTypeAttributeKind.tryGetInAttributes(e.getAttributes()); - if (enumValues === undefined) return mapMap(e.cases.entries(), _ => undefined); - return mapMap(e.cases.entries(), c => lookupKey(enumValues, c, language)); +export const enumValuesTypeAttributeKind: TypeAttributeKind = + new EnumValuesTypeAttributeKind(); + +export function enumCaseValues( + e: EnumType, + language: string, +): Map { + const enumValues = enumValuesTypeAttributeKind.tryGetInAttributes( + e.getAttributes(), + ); + if (enumValues === undefined) + return mapMap(e.cases.entries(), (_) => undefined); + return mapMap(e.cases.entries(), (c) => lookupKey(enumValues, c, language)); } export function enumValuesAttributeProducer( schema: JSONSchema, _canonicalRef: Ref | undefined, - _types: Set + _types: Set, ): JSONSchemaAttributes | undefined { if (typeof schema !== "object") return undefined; @@ -36,5 +51,9 @@ export function enumValuesAttributeProducer( if (maybeEnumValues === undefined) return undefined; - return { forType: enumValuesTypeAttributeKind.makeAttributes(makeAccessorNames(maybeEnumValues)) }; + return { + forType: enumValuesTypeAttributeKind.makeAttributes( + makeAccessorNames(maybeEnumValues), + ), + }; } diff --git a/packages/quicktype-core/src/attributes/StringTypes.ts b/packages/quicktype-core/src/attributes/StringTypes.ts index 742f31224..ea890bd0e 100644 --- a/packages/quicktype-core/src/attributes/StringTypes.ts +++ b/packages/quicktype-core/src/attributes/StringTypes.ts @@ -7,23 +7,32 @@ import { mapMap, mapMergeWithInto, setIntersect, - setUnionInto + setUnionInto, } from "collection-utils"; -import { type DateTimeRecognizer } from "../DateTime"; +import type { DateTimeRecognizer } from "../DateTime"; import { assert, defined } from "../support/Support"; -import { type TransformedStringTypeKind } from "../Type/TransformedStringType"; -import { type StringTypeMapping, stringTypeMappingGet } from "../Type/TypeBuilderUtils"; +import type { TransformedStringTypeKind } from "../Type/TransformedStringType"; +import { + type StringTypeMapping, + stringTypeMappingGet, +} from "../Type/TypeBuilderUtils"; import { TypeAttributeKind } from "./TypeAttributes"; export class StringTypes { - public static readonly unrestricted: StringTypes = new StringTypes(undefined, new Set()); + public static readonly unrestricted: StringTypes = new StringTypes( + undefined, + new Set(), + ); public static fromCase(s: string, count: number): StringTypes { const caseMap: { [name: string]: number } = {}; caseMap[s] = count; - return new StringTypes(new Map([[s, count] as [string, number]]), new Set()); + return new StringTypes( + new Map([[s, count] as [string, number]]), + new Set(), + ); } public static fromCases(cases: string[]): StringTypes { @@ -32,16 +41,22 @@ export class StringTypes { caseMap[s] = 1; } - return new StringTypes(new Map(cases.map(s => [s, 1] as [string, number])), new Set()); + return new StringTypes( + new Map(cases.map((s) => [s, 1] as [string, number])), + new Set(), + ); } // undefined means no restrictions public constructor( public readonly cases: ReadonlyMap | undefined, - public readonly transformations: ReadonlySet + public readonly transformations: ReadonlySet, ) { if (cases === undefined) { - assert(transformations.size === 0, "We can't have an unrestricted string that also allows transformations"); + assert( + transformations.size === 0, + "We can't have an unrestricted string that also allows transformations", + ); } } @@ -67,7 +82,10 @@ export class StringTypes { return new StringTypes(cases, transformations); } - public intersect(othersArray: StringTypes[], startIndex: number): StringTypes { + public intersect( + othersArray: StringTypes[], + startIndex: number, + ): StringTypes { let cases = this.cases; let transformations = this.transformations; @@ -75,21 +93,30 @@ export class StringTypes { const other = othersArray[i]; if (cases === undefined) { - cases = definedMap(other.cases, m => new Map(m)); + cases = definedMap(other.cases, (m) => new Map(m)); } else if (other.cases !== undefined) { const thisCases = cases; const otherCases = other.cases; - const intersects = setIntersect(thisCases.keys(), new Set(otherCases.keys())); - const entries = intersects.size > 0 ? intersects.entries() : new Set(thisCases.keys()).entries(); - cases = mapMap(entries, k => { + const intersects = setIntersect( + thisCases.keys(), + new Set(otherCases.keys()), + ); + const entries = + intersects.size > 0 + ? intersects.entries() + : new Set(thisCases.keys()).entries(); + cases = mapMap(entries, (k) => { const thisValue = defined(thisCases.get(k)); const otherValue = otherCases.get(k) ?? Math.min(); return Math.min(thisValue, otherValue); }); } - transformations = setIntersect(transformations, other.transformations); + transformations = setIntersect( + transformations, + other.transformations, + ); } return new StringTypes(cases, transformations); @@ -110,7 +137,10 @@ export class StringTypes { public equals(other: T): boolean { if (!(other instanceof StringTypes)) return false; - return areEqual(this.cases, other.cases) && areEqual(this.transformations, other.transformations); + return ( + areEqual(this.cases, other.cases) && + areEqual(this.transformations, other.transformations) + ); } public hashCode(): number { @@ -130,7 +160,9 @@ export class StringTypes { if (firstKey === undefined) { parts.push("enum with no cases"); } else { - parts.push(`${enumCases.size.toString()} enums: ${firstKey} (${enumCases.get(firstKey)}), ...`); + parts.push( + `${enumCases.size.toString()} enums: ${firstKey} (${enumCases.get(firstKey)}), ...`, + ); } } @@ -170,7 +202,8 @@ class StringTypesTypeAttributeKind extends TypeAttributeKind { } } -export const stringTypesTypeAttributeKind: TypeAttributeKind = new StringTypesTypeAttributeKind(); +export const stringTypesTypeAttributeKind: TypeAttributeKind = + new StringTypesTypeAttributeKind(); const INTEGER_STRING = /^(0|-?[1-9]\d*)$/; // We're restricting numbers to what's representable as 32 bit @@ -183,7 +216,7 @@ function isIntegerString(s: string): boolean { return false; } - const i = parseInt(s, 10); + const i = Number.parseInt(s, 10); return i >= MIN_INTEGER_STRING && i <= MAX_INTEGER_STRING; } @@ -211,23 +244,30 @@ function isURI(s: string): boolean { */ export function inferTransformedStringTypeKindForString( s: string, - recognizer: DateTimeRecognizer + recognizer: DateTimeRecognizer, ): TransformedStringTypeKind | undefined { - if (s.length === 0 || !"0123456789-abcdefth".includes(s[0])) return undefined; + if (s.length === 0 || !"0123456789-abcdefth".includes(s[0])) + return undefined; if (recognizer.isDate(s)) { return "date"; - } else if (recognizer.isTime(s)) { + } + if (recognizer.isTime(s)) { return "time"; - } else if (recognizer.isDateTime(s)) { + } + if (recognizer.isDateTime(s)) { return "date-time"; - } else if (isIntegerString(s)) { + } + if (isIntegerString(s)) { return "integer-string"; - } else if (s === "false" || s === "true") { + } + if (s === "false" || s === "true") { return "bool-string"; - } else if (isUUID(s)) { + } + if (isUUID(s)) { return "uuid"; - } else if (isURI(s)) { + } + if (isURI(s)) { return "uri"; } diff --git a/packages/quicktype-core/src/attributes/TypeAttributes.ts b/packages/quicktype-core/src/attributes/TypeAttributes.ts index e8a3a61cd..069377e80 100644 --- a/packages/quicktype-core/src/attributes/TypeAttributes.ts +++ b/packages/quicktype-core/src/attributes/TypeAttributes.ts @@ -1,8 +1,13 @@ -import { hashString, mapFilter, mapFilterMap, mapTranspose } from "collection-utils"; - -import { type BaseGraphRewriteBuilder } from "../GraphRewriting"; +import { + hashString, + mapFilter, + mapFilterMap, + mapTranspose, +} from "collection-utils"; + +import type { BaseGraphRewriteBuilder } from "../GraphRewriting"; import { assert, panic } from "../support/Support"; -import { type Type, type TypeKind } from "../Type"; +import type { Type, TypeKind } from "../Type"; export class TypeAttributeKind { public constructor(public readonly name: string) {} @@ -27,7 +32,11 @@ export class TypeAttributeKind { return attrs; } - public addToSchema(_schema: { [name: string]: unknown }, _t: Type, _attrs: T): void { + public addToSchema( + _schema: { [name: string]: unknown }, + _t: Type, + _attrs: T, + ): void { return; } @@ -47,7 +56,10 @@ export class TypeAttributeKind { return false; } - public reconstitute(_builder: TBuilder, a: T): T { + public reconstitute( + _builder: TBuilder, + a: T, + ): T { return a; } @@ -65,7 +77,10 @@ export class TypeAttributeKind { return new Map(a).set(this, value); } - public modifyInAttributes(a: TypeAttributes, modify: (value: T | undefined) => T | undefined): TypeAttributes { + public modifyInAttributes( + a: TypeAttributes, + modify: (value: T | undefined) => T | undefined, + ): TypeAttributes { const modified = modify(this.tryGetInAttributes(a)); if (modified === undefined) { // FIXME: This is potentially super slow @@ -77,7 +92,10 @@ export class TypeAttributeKind { return this.setInAttributes(a, modified); } - public setDefaultInAttributes(a: TypeAttributes, makeDefault: () => T): TypeAttributes { + public setDefaultInAttributes( + a: TypeAttributes, + makeDefault: () => T, + ): TypeAttributes { if (this.tryGetInAttributes(a) !== undefined) return a; return this.modifyInAttributes(a, makeDefault); } @@ -107,12 +125,19 @@ export const emptyTypeAttributes: TypeAttributes = new Map(); export type CombinationKind = "union" | "intersect"; -export function combineTypeAttributes(kind: CombinationKind, attributeArray: TypeAttributes[]): TypeAttributes; -export function combineTypeAttributes(kind: CombinationKind, a: TypeAttributes, b: TypeAttributes): TypeAttributes; +export function combineTypeAttributes( + kind: CombinationKind, + attributeArray: TypeAttributes[], +): TypeAttributes; +export function combineTypeAttributes( + kind: CombinationKind, + a: TypeAttributes, + b: TypeAttributes, +): TypeAttributes; export function combineTypeAttributes( combinationKind: CombinationKind, firstOrArray: TypeAttributes[] | TypeAttributes, - second?: TypeAttributes + second?: TypeAttributes, ): TypeAttributes { const union = combinationKind === "union"; let attributeArray: TypeAttributes[]; @@ -143,10 +168,14 @@ export function combineTypeAttributes( return mapFilterMap(attributesByKind, combine); } -export function makeTypeAttributesInferred(attr: TypeAttributes): TypeAttributes { +export function makeTypeAttributesInferred( + attr: TypeAttributes, +): TypeAttributes { return mapFilterMap(attr, (value, kind) => kind.makeInferred(value)); } -export function increaseTypeAttributesDistance(attr: TypeAttributes): TypeAttributes { +export function increaseTypeAttributesDistance( + attr: TypeAttributes, +): TypeAttributes { return mapFilterMap(attr, (value, kind) => kind.increaseDistance(value)); } diff --git a/packages/quicktype-core/src/attributes/TypeNames.ts b/packages/quicktype-core/src/attributes/TypeNames.ts index f5d96a7ac..dbc583c32 100644 --- a/packages/quicktype-core/src/attributes/TypeNames.ts +++ b/packages/quicktype-core/src/attributes/TypeNames.ts @@ -1,4 +1,10 @@ -import { definedMap, iterableFirst, iterableSkip, setMap, setUnionInto } from "collection-utils"; +import { + definedMap, + iterableFirst, + iterableSkip, + setMap, + setUnionInto, +} from "collection-utils"; import * as pluralize from "pluralize"; import { Chance } from "../support/Chance"; @@ -33,7 +39,7 @@ export type NameOrNames = string | TypeNames; // the names "aaa" and "aaaa" we have the common prefix "aaa" and the // common suffix "aaa", so we will produce the combined name "aaaaaa". function combineNames(names: ReadonlySet): string { - let originalFirst = iterableFirst(names); + const originalFirst = iterableFirst(names); if (originalFirst === undefined) { return panic("Named type has no names"); } @@ -42,10 +48,10 @@ function combineNames(names: ReadonlySet): string { return originalFirst; } - const namesSet = setMap(names, s => + const namesSet = setMap(names, (s) => splitIntoWords(s) - .map(w => w.word.toLowerCase()) - .join("_") + .map((w) => w.word.toLowerCase()) + .join("_"), ); const first = defined(iterableFirst(namesSet)); if (namesSet.size === 1) { @@ -73,7 +79,8 @@ function combineNames(names: ReadonlySet): string { } const prefix = prefixLength > 2 ? first.slice(0, prefixLength) : ""; - const suffix = suffixLength > 2 ? first.slice(first.length - suffixLength) : ""; + const suffix = + suffixLength > 2 ? first.slice(first.length - suffixLength) : ""; const combined = prefix + suffix; if (combined.length > 2) { return combined; @@ -88,13 +95,16 @@ export abstract class TypeNames { public static makeWithDistance( names: ReadonlySet, alternativeNames: ReadonlySet | undefined, - distance: number + distance: number, ): TypeNames { if (names.size >= tooManyNamesThreshold) { return new TooManyTypeNames(distance); } - if (alternativeNames === undefined || alternativeNames.size > tooManyNamesThreshold) { + if ( + alternativeNames === undefined || + alternativeNames.size > tooManyNamesThreshold + ) { alternativeNames = undefined; } @@ -104,9 +114,13 @@ export abstract class TypeNames { public static make( names: ReadonlySet, alternativeNames: ReadonlySet | undefined, - areInferred: boolean + areInferred: boolean, ): TypeNames { - return TypeNames.makeWithDistance(names, alternativeNames, areInferred ? 1 : 0); + return TypeNames.makeWithDistance( + names, + alternativeNames, + areInferred ? 1 : 0, + ); } public constructor(public readonly distance: number) {} @@ -119,7 +133,10 @@ export abstract class TypeNames { public abstract get combinedName(): string; public abstract get proposedNames(): ReadonlySet; - public abstract add(namesArray: TypeNames[], startIndex?: number): TypeNames; + public abstract add( + namesArray: TypeNames[], + startIndex?: number, + ): TypeNames; public abstract clearInferred(): TypeNames; public abstract makeInferred(): TypeNames; public abstract singularize(): TypeNames; @@ -130,7 +147,7 @@ export class RegularTypeNames extends TypeNames { public constructor( public readonly names: ReadonlySet, private readonly _alternativeNames: ReadonlySet | undefined, - distance: number + distance: number, ) { super(distance); } @@ -138,12 +155,18 @@ export class RegularTypeNames extends TypeNames { public add(namesArray: TypeNames[], startIndex = 0): TypeNames { let newNames = new Set(this.names); let newDistance = this.distance; - let newAlternativeNames = definedMap(this._alternativeNames, s => new Set(s)); + let newAlternativeNames = definedMap( + this._alternativeNames, + (s) => new Set(s), + ); for (let i = startIndex; i < namesArray.length; i++) { const other = namesArray[i]; - if (other instanceof RegularTypeNames && other._alternativeNames !== undefined) { + if ( + other instanceof RegularTypeNames && + other._alternativeNames !== undefined + ) { if (newAlternativeNames === undefined) { newAlternativeNames = new Set(); } @@ -154,7 +177,10 @@ export class RegularTypeNames extends TypeNames { if (other.distance > newDistance) continue; if (!(other instanceof RegularTypeNames)) { - assert(other instanceof TooManyTypeNames, "Unknown TypeNames instance"); + assert( + other instanceof TooManyTypeNames, + "Unknown TypeNames instance", + ); // The other one is at most our distance, so let it sort it out return other.add(namesArray, i + 1); } @@ -163,15 +189,25 @@ export class RegularTypeNames extends TypeNames { // The other one is closer, so take its names newNames = new Set(other.names); newDistance = other.distance; - newAlternativeNames = definedMap(other._alternativeNames, s => new Set(s)); + newAlternativeNames = definedMap( + other._alternativeNames, + (s) => new Set(s), + ); } else { // Same distance, merge them - assert(other.distance === newDistance, "This should be the only case left"); + assert( + other.distance === newDistance, + "This should be the only case left", + ); setUnionInto(newNames, other.names); } } - return TypeNames.makeWithDistance(newNames, newAlternativeNames, newDistance); + return TypeNames.makeWithDistance( + newNames, + newAlternativeNames, + newDistance, + ); } public clearInferred(): TypeNames { @@ -194,19 +230,27 @@ export class RegularTypeNames extends TypeNames { } public makeInferred(): TypeNames { - return TypeNames.makeWithDistance(this.names, this._alternativeNames, this.distance + 1); + return TypeNames.makeWithDistance( + this.names, + this._alternativeNames, + this.distance + 1, + ); } public singularize(): TypeNames { return TypeNames.makeWithDistance( setMap(this.names, pluralize.singular), - definedMap(this._alternativeNames, an => setMap(an, pluralize.singular)), - this.distance + 1 + definedMap(this._alternativeNames, (an) => + setMap(an, pluralize.singular), + ), + this.distance + 1, ); } public toString(): string { - const inferred = this.areInferred ? `distance ${this.distance}` : "given"; + const inferred = this.areInferred + ? `distance ${this.distance}` + : "given"; const names = `${inferred} ${Array.from(this.names).join(",")}`; if (this._alternativeNames === undefined) { return names; @@ -259,7 +303,10 @@ export class TooManyTypeNames extends TypeNames { } public makeInferred(): TypeNames { - return new TooManyTypeNames(this.distance + 1, iterableFirst(this.names)); + return new TooManyTypeNames( + this.distance + 1, + iterableFirst(this.names), + ); } public singularize(): TypeNames { @@ -295,26 +342,36 @@ class TypeNamesTypeAttributeKind extends TypeAttributeKind { } } -export const namesTypeAttributeKind: TypeAttributeKind = new TypeNamesTypeAttributeKind(); +export const namesTypeAttributeKind: TypeAttributeKind = + new TypeNamesTypeAttributeKind(); export function modifyTypeNames( attributes: TypeAttributes, - modifier: (tn: TypeNames | undefined) => TypeNames | undefined + modifier: (tn: TypeNames | undefined) => TypeNames | undefined, ): TypeAttributes { return namesTypeAttributeKind.modifyInAttributes(attributes, modifier); } -export function singularizeTypeNames(attributes: TypeAttributes): TypeAttributes { - return modifyTypeNames(attributes, maybeNames => { +export function singularizeTypeNames( + attributes: TypeAttributes, +): TypeAttributes { + return modifyTypeNames(attributes, (maybeNames) => { if (maybeNames === undefined) return undefined; return maybeNames.singularize(); }); } -export function makeNamesTypeAttributes(nameOrNames: NameOrNames, areNamesInferred?: boolean): TypeAttributes { +export function makeNamesTypeAttributes( + nameOrNames: NameOrNames, + areNamesInferred?: boolean, +): TypeAttributes { let typeNames: TypeNames; if (typeof nameOrNames === "string") { - typeNames = TypeNames.make(new Set([nameOrNames]), new Set(), defined(areNamesInferred)); + typeNames = TypeNames.make( + new Set([nameOrNames]), + new Set(), + defined(areNamesInferred), + ); } else { typeNames = nameOrNames as TypeNames; } diff --git a/packages/quicktype-core/src/attributes/URIAttributes.ts b/packages/quicktype-core/src/attributes/URIAttributes.ts index 2e51278cc..29c6f917b 100644 --- a/packages/quicktype-core/src/attributes/URIAttributes.ts +++ b/packages/quicktype-core/src/attributes/URIAttributes.ts @@ -1,12 +1,20 @@ import { setUnionManyInto } from "collection-utils"; import URI from "urijs"; -import { type JSONSchemaAttributes, type JSONSchemaType, type Ref } from "../input/JSONSchemaInput"; -import { type JSONSchema } from "../input/JSONSchemaStore"; +import type { + JSONSchemaAttributes, + JSONSchemaType, + Ref, +} from "../input/JSONSchemaInput"; +import type { JSONSchema } from "../input/JSONSchemaStore"; import { checkArray, checkString } from "../support/Support"; -import { type Type } from "../Type/Type"; +import type { Type } from "../Type/Type"; -import { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./TypeAttributes"; +import { + TypeAttributeKind, + type TypeAttributes, + emptyTypeAttributes, +} from "./TypeAttributes"; const protocolsSchemaProperty = "qt-uri-protocols"; const extensionsSchemaProperty = "qt-uri-extensions"; @@ -24,16 +32,23 @@ class URITypeAttributeKind extends TypeAttributeKind { } public combine(attrs: URIAttributes[]): URIAttributes { - const protocolSets = attrs.map(a => a[0]); - const extensionSets = attrs.map(a => a[1]); - return [setUnionManyInto(new Set(), protocolSets), setUnionManyInto(new Set(), extensionSets)]; + const protocolSets = attrs.map((a) => a[0]); + const extensionSets = attrs.map((a) => a[1]); + return [ + setUnionManyInto(new Set(), protocolSets), + setUnionManyInto(new Set(), extensionSets), + ]; } public makeInferred(_: URIAttributes): undefined { return undefined; } - public addToSchema(schema: { [name: string]: unknown }, t: Type, attrs: URIAttributes): void { + public addToSchema( + schema: { [name: string]: unknown }, + t: Type, + attrs: URIAttributes, + ): void { if (t.kind !== "string" && t.kind !== "uri") return; const [protocols, extensions] = attrs; @@ -47,7 +62,8 @@ class URITypeAttributeKind extends TypeAttributeKind { } } -export const uriTypeAttributeKind: TypeAttributeKind = new URITypeAttributeKind(); +export const uriTypeAttributeKind: TypeAttributeKind = + new URITypeAttributeKind(); const extensionRegex = /^.+(\.[^./\\]+)$/; @@ -61,8 +77,12 @@ export function uriInferenceAttributesProducer(s: string): TypeAttributes { try { const uri = URI(s); const extension = pathExtension(uri.path()); - const extensions = extension === undefined ? [] : [extension.toLowerCase()]; - return uriTypeAttributeKind.makeAttributes([new Set([uri.protocol().toLowerCase()]), new Set(extensions)]); + const extensions = + extension === undefined ? [] : [extension.toLowerCase()]; + return uriTypeAttributeKind.makeAttributes([ + new Set([uri.protocol().toLowerCase()]), + new Set(extensions), + ]); } catch { return emptyTypeAttributes; } @@ -71,7 +91,7 @@ export function uriInferenceAttributesProducer(s: string): TypeAttributes { export function uriSchemaAttributesProducer( schema: JSONSchema, _ref: Ref, - types: Set + types: Set, ): JSONSchemaAttributes | undefined { if (!(typeof schema === "object")) return undefined; if (!types.has("string")) return undefined; @@ -94,5 +114,7 @@ export function uriSchemaAttributesProducer( if (protocols.size === 0 && extensions.size === 0) return undefined; - return { forString: uriTypeAttributeKind.makeAttributes([protocols, extensions]) }; + return { + forString: uriTypeAttributeKind.makeAttributes([protocols, extensions]), + }; } diff --git a/packages/quicktype-core/src/index.ts b/packages/quicktype-core/src/index.ts index 4988763b6..840052701 100644 --- a/packages/quicktype-core/src/index.ts +++ b/packages/quicktype-core/src/index.ts @@ -5,20 +5,40 @@ export { quicktypeMultiFileSync, quicktype, combineRenderResults, + type RunContext, +} from "./Run"; +export { inferenceFlags, inferenceFlagNames, defaultInferenceFlags, inferenceFlagsObject, type InferenceFlags, type InferenceFlagName, - type RunContext -} from "./Run"; +} from "./Inference"; export { CompressedJSON, type Value } from "./input/CompressedJSON"; -export { type Input, InputData, JSONInput, type JSONSourceData, jsonInputForTargetLanguage } from "./input/Inputs"; -export { JSONSchemaInput, type JSONSchemaSourceData } from "./input/JSONSchemaInput"; -export { Ref, type JSONSchemaType, type JSONSchemaAttributes } from "./input/JSONSchemaInput"; +export { + type Input, + InputData, + JSONInput, + type JSONSourceData, + jsonInputForTargetLanguage, +} from "./input/Inputs"; +export { + JSONSchemaInput, + type JSONSchemaSourceData, +} from "./input/JSONSchemaInput"; +export { + Ref, + type JSONSchemaType, + type JSONSchemaAttributes, +} from "./input/JSONSchemaInput"; export type { RenderContext } from "./Renderer"; -export { Option, type OptionDefinition, getOptionValues, type OptionValues } from "./RendererOptions"; +export { + Option, + type OptionDefinition, + getOptionValues, + type OptionValues, +} from "./RendererOptions"; export { TargetLanguage, type MultiFileRenderResult } from "./TargetLanguage"; export { @@ -28,7 +48,7 @@ export { type Annotation, modifySource, singleWord, - parenIfNeeded + parenIfNeeded, } from "./Source"; export { Name, funPrefixNamer, Namer } from "./Naming"; export { IssueAnnotationData } from "./Annotation"; @@ -40,7 +60,7 @@ export { parseJSON, checkStringMap, checkArray, - inflateBase64 + inflateBase64, } from "./support/Support"; export { splitIntoWords, @@ -49,7 +69,7 @@ export { firstUpperWordStyle, allUpperWordStyle, legalizeCharacters, - isLetterOrDigit + isLetterOrDigit, } from "./support/Strings"; export { train as trainMarkovChain } from "./MarkovChain"; export { QuickTypeError, messageError, messageAssert } from "./Messages"; @@ -65,7 +85,7 @@ export { ObjectType, type TypeKind, type TransformedStringTypeKind, - type PrimitiveStringTypeKind + type PrimitiveStringTypeKind, } from "./Type"; export { getStream } from "./input/io/get-stream"; @@ -75,12 +95,24 @@ export { FetchingJSONSchemaStore } from "./input/FetchingJSONSchemaStore"; export { JSONSchemaStore, type JSONSchema } from "./input/JSONSchemaStore"; export { sourcesFromPostmanCollection } from "./input/PostmanCollection"; export { TypeBuilder } from "./Type/TypeBuilder"; -export { type StringTypeMapping } from "./Type/TypeBuilderUtils"; +export type { StringTypeMapping } from "./Type/TypeBuilderUtils"; export { type TypeRef, derefTypeRef } from "./Type/TypeRef"; -export { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes } from "./attributes/TypeAttributes"; -export { TypeNames, makeNamesTypeAttributes, namesTypeAttributeKind } from "./attributes/TypeNames"; +export { + TypeAttributeKind, + type TypeAttributes, + emptyTypeAttributes, +} from "./attributes/TypeAttributes"; +export { + TypeNames, + makeNamesTypeAttributes, + namesTypeAttributeKind, +} from "./attributes/TypeNames"; export { StringTypes } from "./attributes/StringTypes"; -export { removeNullFromUnion, matchType, nullableFromUnion } from "./Type/TypeUtils"; +export { + removeNullFromUnion, + matchType, + nullableFromUnion, +} from "./Type/TypeUtils"; export { ConvenienceRenderer } from "./ConvenienceRenderer"; export { uriTypeAttributeKind } from "./attributes/URIAttributes"; diff --git a/packages/quicktype-core/src/input/CompressedJSON.ts b/packages/quicktype-core/src/input/CompressedJSON.ts index 15e6122d0..40f9d9a49 100644 --- a/packages/quicktype-core/src/input/CompressedJSON.ts +++ b/packages/quicktype-core/src/input/CompressedJSON.ts @@ -1,12 +1,12 @@ import { addHashCode, hashCodeInit, hashString } from "collection-utils"; import { inferTransformedStringTypeKindForString } from "../attributes/StringTypes"; -import { type DateTimeRecognizer } from "../DateTime"; +import type { DateTimeRecognizer } from "../DateTime"; import { assert, defined, panic } from "../support/Support"; import { type TransformedStringTypeKind, isPrimitiveStringTypeKind, - transformedStringTypeTargetTypeKindsMap + transformedStringTypeTargetTypeKindsMap, } from "../Type"; export enum Tag { @@ -20,7 +20,7 @@ export enum Tag { Object = 8, Array = 9, StringFormat = 10, - TransformedString = 11 + TransformedString = 11, } export type Value = number; @@ -33,7 +33,10 @@ export function makeValue(t: Tag, index: number): Value { } function getIndex(v: Value, tag: Tag): number { - assert(valueTag(v) === tag, "Trying to get index for value with invalid tag"); + assert( + valueTag(v) === tag, + "Trying to get index for value with invalid tag", + ); return v >> TAG_BITS; } @@ -65,7 +68,7 @@ export abstract class CompressedJSON { public constructor( public readonly dateTimeRecognizer: DateTimeRecognizer, - public readonly handleRefs: boolean + public readonly handleRefs: boolean, ) {} public abstract parse(input: T): Promise; @@ -114,7 +117,10 @@ export abstract class CompressedJSON { protected makeString(s: string): Value { const value = makeValue(Tag.InternedString, this.internString(s)); - assert(typeof value === "number", `Interned string value is not a number: ${value}`); + assert( + typeof value === "number", + `Interned string value is not a number: ${value}`, + ); return value; } @@ -135,19 +141,27 @@ export abstract class CompressedJSON { } protected commitValue(value: Value): void { - assert(typeof value === "number", `CompressedJSON value is not a number: ${value}`); + assert( + typeof value === "number", + `CompressedJSON value is not a number: ${value}`, + ); if (this._ctx === undefined) { assert( this._rootValue === undefined, - "Committing value but nowhere to commit to - root value still there." + "Committing value but nowhere to commit to - root value still there.", ); this._rootValue = value; } else if (this._ctx.currentObject !== undefined) { if (this._ctx.currentKey === undefined) { - return panic("Must have key and can't have string when committing"); + return panic( + "Must have key and can't have string when committing", + ); } - this._ctx.currentObject.push(this.makeString(this._ctx.currentKey), value); + this._ctx.currentObject.push( + this.makeString(this._ctx.currentKey), + value, + ); this._ctx.currentKey = undefined; } else if (this._ctx.currentArray !== undefined) { this._ctx.currentArray.push(value); @@ -174,12 +188,24 @@ export abstract class CompressedJSON { if (this.handleRefs && this.isExpectingRef) { value = this.makeString(s); } else { - const format = inferTransformedStringTypeKindForString(s, this.dateTimeRecognizer); + const format = inferTransformedStringTypeKindForString( + s, + this.dateTimeRecognizer, + ); if (format !== undefined) { - if (defined(transformedStringTypeTargetTypeKindsMap.get(format)).attributesProducer !== undefined) { - value = makeValue(Tag.TransformedString, this.internString(s)); + if ( + defined(transformedStringTypeTargetTypeKindsMap.get(format)) + .attributesProducer !== undefined + ) { + value = makeValue( + Tag.TransformedString, + this.internString(s), + ); } else { - value = makeValue(Tag.StringFormat, this.internString(format)); + value = makeValue( + Tag.StringFormat, + this.internString(format), + ); } } else if (s.length <= 64) { value = this.makeString(s); @@ -197,7 +223,10 @@ export abstract class CompressedJSON { return panic("Finished without root document"); } - assert(this._ctx === undefined && this._contextStack.length === 0, "Finished with contexts present"); + assert( + this._ctx === undefined && this._contextStack.length === 0, + "Finished with contexts present", + ); this._rootValue = undefined; return value; } @@ -211,7 +240,7 @@ export abstract class CompressedJSON { currentObject: undefined, currentArray: undefined, currentKey: undefined, - currentNumberIsDouble: false + currentNumberIsDouble: false, }; } @@ -265,9 +294,14 @@ export abstract class CompressedJSON { hashAccumulator = addHashCode(hashAccumulator, hashString(s)); } - for (const s of Object.getOwnPropertyNames(this._stringIndexes).sort()) { + for (const s of Object.getOwnPropertyNames( + this._stringIndexes, + ).sort()) { hashAccumulator = addHashCode(hashAccumulator, hashString(s)); - hashAccumulator = addHashCode(hashAccumulator, this._stringIndexes[s]); + hashAccumulator = addHashCode( + hashAccumulator, + this._stringIndexes[s], + ); } for (const o of this._objects) { @@ -306,7 +340,9 @@ export class CompressedJSONFromString extends CompressedJSON { this.commitString(json); } else if (typeof json === "number") { const isDouble = - json !== Math.floor(json) || json < Number.MIN_SAFE_INTEGER || json > Number.MAX_SAFE_INTEGER; + json !== Math.floor(json) || + json < Number.MIN_SAFE_INTEGER || + json > Number.MAX_SAFE_INTEGER; this.commitNumber(isDouble); } else if (Array.isArray(json)) { this.pushArrayContext(); diff --git a/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts b/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts index 028c73d11..ab0c6afa0 100644 --- a/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts +++ b/packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts @@ -10,6 +10,10 @@ export class FetchingJSONSchemaStore extends JSONSchemaStore { public async fetch(address: string): Promise { // console.log(`Fetching ${address}`); - return parseJSON(await readFromFileOrURL(address, this._httpHeaders), "JSON Schema", address); + return parseJSON( + await readFromFileOrURL(address, this._httpHeaders), + "JSON Schema", + address, + ); } } diff --git a/packages/quicktype-core/src/input/Inference.ts b/packages/quicktype-core/src/input/Inference.ts index ca08b57da..4c3154623 100644 --- a/packages/quicktype-core/src/input/Inference.ts +++ b/packages/quicktype-core/src/input/Inference.ts @@ -1,5 +1,11 @@ -import { StringTypes, inferTransformedStringTypeKindForString } from "../attributes/StringTypes"; -import { type TypeAttributes, emptyTypeAttributes } from "../attributes/TypeAttributes"; +import { + StringTypes, + inferTransformedStringTypeKindForString, +} from "../attributes/StringTypes"; +import { + type TypeAttributes, + emptyTypeAttributes, +} from "../attributes/TypeAttributes"; import { messageError } from "../Messages"; import { assert, assertNever, defined, panic } from "../support/Support"; import { @@ -8,14 +14,19 @@ import { ClassType, MapType, UnionType, - transformedStringTypeTargetTypeKindsMap + transformedStringTypeTargetTypeKindsMap, } from "../Type"; -import { type TypeBuilder } from "../Type/TypeBuilder"; +import type { TypeBuilder } from "../Type/TypeBuilder"; import { type TypeRef, derefTypeRef } from "../Type/TypeRef"; import { nullableFromUnion } from "../Type/TypeUtils"; import { UnionAccumulator, UnionBuilder } from "../UnionBuilder"; -import { type CompressedJSON, Tag, type Value, valueTag } from "./CompressedJSON"; +import { + type CompressedJSON, + Tag, + type Value, + valueTag, +} from "./CompressedJSON"; // This should be the recursive type // Value[] | NestedValueArray[] @@ -24,7 +35,10 @@ import { type CompressedJSON, Tag, type Value, valueTag } from "./CompressedJSON // eslint-disable-next-line @typescript-eslint/no-explicit-any export type NestedValueArray = any; -function forEachArrayInNestedValueArray(va: NestedValueArray, f: (va: Value[]) => void): void { +function forEachArrayInNestedValueArray( + va: NestedValueArray, + f: (va: Value[]) => void, +): void { if (va.length === 0) { return; } @@ -38,19 +52,26 @@ function forEachArrayInNestedValueArray(va: NestedValueArray, f: (va: Value[]) = } } -function forEachValueInNestedValueArray(va: NestedValueArray, f: (v: Value) => void): void { - forEachArrayInNestedValueArray(va, a => { +function forEachValueInNestedValueArray( + va: NestedValueArray, + f: (v: Value) => void, +): void { + forEachArrayInNestedValueArray(va, (a) => { for (const x of a) { f(x); } }); } -class InferenceUnionBuilder extends UnionBuilder { +class InferenceUnionBuilder extends UnionBuilder< + TypeBuilder, + NestedValueArray, + NestedValueArray +> { public constructor( typeBuilder: TypeBuilder, private readonly _typeInference: TypeInference, - private readonly _fixed: boolean + private readonly _fixed: boolean, ) { super(typeBuilder); } @@ -58,19 +79,29 @@ class InferenceUnionBuilder extends UnionBuilder, private readonly _typeBuilder: TypeBuilder, private readonly _inferMaps: boolean, - private readonly _inferEnums: boolean + private readonly _inferEnums: boolean, ) {} - private addValuesToAccumulator(valueArray: NestedValueArray, accumulator: Accumulator): void { - forEachValueInNestedValueArray(valueArray, value => { + private addValuesToAccumulator( + valueArray: NestedValueArray, + accumulator: Accumulator, + ): void { + forEachValueInNestedValueArray(valueArray, (value) => { const t = valueTag(value); switch (t) { case Tag.Null: @@ -112,12 +146,22 @@ export class TypeInference { if (this._inferEnums) { const s = this._cjson.getStringForValue(value); if (canBeEnumCase(s)) { - accumulator.addStringCase(s, 1, emptyTypeAttributes); + accumulator.addStringCase( + s, + 1, + emptyTypeAttributes, + ); } else { - accumulator.addStringType("string", emptyTypeAttributes); + accumulator.addStringType( + "string", + emptyTypeAttributes, + ); } } else { - accumulator.addStringType("string", emptyTypeAttributes); + accumulator.addStringType( + "string", + emptyTypeAttributes, + ); } break; @@ -125,34 +169,51 @@ export class TypeInference { accumulator.addStringType("string", emptyTypeAttributes); break; case Tag.Object: - accumulator.addObject(this._cjson.getObjectForValue(value), emptyTypeAttributes); + accumulator.addObject( + this._cjson.getObjectForValue(value), + emptyTypeAttributes, + ); break; case Tag.Array: - accumulator.addArray(this._cjson.getArrayForValue(value), emptyTypeAttributes); + accumulator.addArray( + this._cjson.getArrayForValue(value), + emptyTypeAttributes, + ); break; case Tag.StringFormat: { const kind = this._cjson.getStringFormatTypeKind(value); accumulator.addStringType( "string", emptyTypeAttributes, - new StringTypes(new Map(), new Set([kind])) + new StringTypes(new Map(), new Set([kind])), ); break; } case Tag.TransformedString: { const s = this._cjson.getStringForValue(value); - const kind = inferTransformedStringTypeKindForString(s, this._cjson.dateTimeRecognizer); + const kind = inferTransformedStringTypeKindForString( + s, + this._cjson.dateTimeRecognizer, + ); if (kind === undefined) { return panic("TransformedString does not have a kind"); } - const producer = defined(transformedStringTypeTargetTypeKindsMap.get(kind)).attributesProducer; + const producer = defined( + transformedStringTypeTargetTypeKindsMap.get(kind), + ).attributesProducer; if (producer === undefined) { - return panic("TransformedString does not have attribute producer"); + return panic( + "TransformedString does not have attribute producer", + ); } - accumulator.addStringType("string", producer(s), new StringTypes(new Map(), new Set([kind]))); + accumulator.addStringType( + "string", + producer(s), + new StringTypes(new Map(), new Set([kind])), + ); break; } @@ -166,15 +227,22 @@ export class TypeInference { typeAttributes: TypeAttributes, valueArray: NestedValueArray, fixed: boolean, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { const accumulator = this.accumulatorForArray(valueArray); - return this.makeTypeFromAccumulator(accumulator, typeAttributes, fixed, forwardingRef); + return this.makeTypeFromAccumulator( + accumulator, + typeAttributes, + fixed, + forwardingRef, + ); } private resolveRef(ref: string, topLevel: TypeRef): TypeRef { if (!ref.startsWith("#/")) { - return messageError("InferenceJSONReferenceNotRooted", { reference: ref }); + return messageError("InferenceJSONReferenceNotRooted", { + reference: ref, + }); } const parts = ref.split("/").slice(1); @@ -186,7 +254,9 @@ export class TypeInference { const nullable = nullableFromUnion(t); if (nullable === null) { // FIXME: handle unions - return messageError("InferenceJSONReferenceToUnion", { reference: ref }); + return messageError("InferenceJSONReferenceToUnion", { + reference: ref, + }); } t = nullable; @@ -195,7 +265,9 @@ export class TypeInference { if (t instanceof ClassType) { const cp = t.getProperties().get(part); if (cp === undefined) { - return messageError("InferenceJSONReferenceWrongProperty", { reference: ref }); + return messageError("InferenceJSONReferenceWrongProperty", { + reference: ref, + }); } tref = cp.typeRef; @@ -203,20 +275,32 @@ export class TypeInference { tref = t.values.typeRef; } else if (t instanceof ArrayType) { if (/^[0-9]+$/.exec(part) === null) { - return messageError("InferenceJSONReferenceInvalidArrayIndex", { reference: ref }); + return messageError( + "InferenceJSONReferenceInvalidArrayIndex", + { reference: ref }, + ); } tref = t.items.typeRef; } else { - return messageError("InferenceJSONReferenceWrongProperty", { reference: ref }); + return messageError("InferenceJSONReferenceWrongProperty", { + reference: ref, + }); } } return tref; } - public inferTopLevelType(typeAttributes: TypeAttributes, valueArray: NestedValueArray, fixed: boolean): TypeRef { - assert(this._refIntersections === undefined, "Didn't reset ref intersections - nested invocations?"); + public inferTopLevelType( + typeAttributes: TypeAttributes, + valueArray: NestedValueArray, + fixed: boolean, + ): TypeRef { + assert( + this._refIntersections === undefined, + "Didn't reset ref intersections - nested invocations?", + ); if (this._cjson.handleRefs) { this._refIntersections = []; } @@ -224,8 +308,11 @@ export class TypeInference { const topLevel = this.inferType(typeAttributes, valueArray, fixed); if (this._cjson.handleRefs) { for (const [tref, refs] of defined(this._refIntersections)) { - const resolved = refs.map(r => this.resolveRef(r, topLevel)); - this._typeBuilder.setSetOperationMembers(tref, new Set(resolved)); + const resolved = refs.map((r) => this.resolveRef(r, topLevel)); + this._typeBuilder.setSetOperationMembers( + tref, + new Set(resolved), + ); } this._refIntersections = undefined; @@ -235,7 +322,10 @@ export class TypeInference { } private accumulatorForArray(valueArray: NestedValueArray): Accumulator { - const accumulator = new UnionAccumulator(true); + const accumulator = new UnionAccumulator< + NestedValueArray, + NestedValueArray + >(true); this.addValuesToAccumulator(valueArray, accumulator); return accumulator; } @@ -244,26 +334,37 @@ export class TypeInference { accumulator: Accumulator, typeAttributes: TypeAttributes, fixed: boolean, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { - const unionBuilder = new InferenceUnionBuilder(this._typeBuilder, this, fixed); - return unionBuilder.buildUnion(accumulator, false, typeAttributes, forwardingRef); + const unionBuilder = new InferenceUnionBuilder( + this._typeBuilder, + this, + fixed, + ); + return unionBuilder.buildUnion( + accumulator, + false, + typeAttributes, + forwardingRef, + ); } public inferClassType( typeAttributes: TypeAttributes, objects: NestedValueArray, fixed: boolean, - forwardingRef?: TypeRef + forwardingRef?: TypeRef, ): TypeRef { const propertyNames: string[] = []; const propertyValues: { [name: string]: Value[] } = {}; - forEachArrayInNestedValueArray(objects, arr => { + forEachArrayInNestedValueArray(objects, (arr) => { for (let i = 0; i < arr.length; i += 2) { const key = this._cjson.getStringForValue(arr[i]); const value = arr[i + 1]; - if (!Object.prototype.hasOwnProperty.call(propertyValues, key)) { + if ( + !Object.prototype.hasOwnProperty.call(propertyValues, key) + ) { propertyNames.push(key); propertyValues[key] = []; } @@ -272,25 +373,45 @@ export class TypeInference { } }); - if (this._cjson.handleRefs && propertyNames.length === 1 && propertyNames[0] === "$ref") { + if ( + this._cjson.handleRefs && + propertyNames.length === 1 && + propertyNames[0] === "$ref" + ) { const values = propertyValues.$ref; - if (values.every(v => valueTag(v) === Tag.InternedString)) { - const allRefs = values.map(v => this._cjson.getStringForValue(v)); + if (values.every((v) => valueTag(v) === Tag.InternedString)) { + const allRefs = values.map((v) => + this._cjson.getStringForValue(v), + ); // FIXME: Add is-ref attribute - const tref = this._typeBuilder.getUniqueIntersectionType(typeAttributes, undefined); + const tref = this._typeBuilder.getUniqueIntersectionType( + typeAttributes, + undefined, + ); defined(this._refIntersections).push([tref, allRefs]); return tref; } } if (this._inferMaps && propertyNames.length > 500) { - const accumulator = new UnionAccumulator(true); + const accumulator = new UnionAccumulator< + NestedValueArray, + NestedValueArray + >(true); for (const key of propertyNames) { this.addValuesToAccumulator(propertyValues[key], accumulator); } - const values = this.makeTypeFromAccumulator(accumulator, emptyTypeAttributes, fixed); - return this._typeBuilder.getMapType(typeAttributes, values, forwardingRef); + const values = this.makeTypeFromAccumulator( + accumulator, + emptyTypeAttributes, + fixed, + ); + return this._typeBuilder.getMapType( + typeAttributes, + values, + forwardingRef, + ); } const properties = new Map(); @@ -298,13 +419,25 @@ export class TypeInference { const values = propertyValues[key]; const t = this.inferType(emptyTypeAttributes, values, false); const isOptional = values.length < objects.length; - properties.set(key, this._typeBuilder.makeClassProperty(t, isOptional)); + properties.set( + key, + this._typeBuilder.makeClassProperty(t, isOptional), + ); } if (fixed) { - return this._typeBuilder.getUniqueClassType(typeAttributes, true, properties, forwardingRef); - } else { - return this._typeBuilder.getClassType(typeAttributes, properties, forwardingRef); + return this._typeBuilder.getUniqueClassType( + typeAttributes, + true, + properties, + forwardingRef, + ); } + + return this._typeBuilder.getClassType( + typeAttributes, + properties, + forwardingRef, + ); } } diff --git a/packages/quicktype-core/src/input/Inputs.ts b/packages/quicktype-core/src/input/Inputs.ts index 64bc71f4f..080924332 100644 --- a/packages/quicktype-core/src/input/Inputs.ts +++ b/packages/quicktype-core/src/input/Inputs.ts @@ -1,16 +1,27 @@ -import { arrayMapSync, iterableFind, iterableFirst, iterableSome, setFilterMap, withDefault } from "collection-utils"; +import { + arrayMapSync, + iterableFind, + iterableFirst, + iterableSome, + setFilterMap, + withDefault, +} from "collection-utils"; import { descriptionTypeAttributeKind } from "../attributes/Description"; import { makeNamesTypeAttributes } from "../attributes/TypeNames"; import { languageNamed } from "../language/All"; import { messageError } from "../Messages"; -import { type RunContext } from "../Run"; +import type { RunContext } from "../Run"; import { defined, errorMessage, panic } from "../support/Support"; -import { type TargetLanguage } from "../TargetLanguage"; -import { type TypeBuilder } from "../Type/TypeBuilder"; -import { type LanguageName } from "../types"; - -import { type CompressedJSON, CompressedJSONFromString, type Value } from "./CompressedJSON"; +import type { TargetLanguage } from "../TargetLanguage"; +import type { TypeBuilder } from "../Type/TypeBuilder"; +import type { LanguageName } from "../types"; + +import { + type CompressedJSON, + CompressedJSONFromString, + type Value, +} from "./CompressedJSON"; import { TypeInference } from "./Inference"; export interface Input { @@ -21,7 +32,7 @@ export interface Input { typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, - fixedTopLevels: boolean + fixedTopLevels: boolean, ) => Promise; addTypesSync: ( @@ -29,7 +40,7 @@ export interface Input { typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, - fixedTopLevels: boolean + fixedTopLevels: boolean, ) => void; readonly kind: string; @@ -50,11 +61,15 @@ export interface JSONSourceData { samples: T[]; } -function messageParseError(name: string, description: string | undefined, e: unknown): never { +function messageParseError( + name: string, + description: string | undefined, + e: unknown, +): never { return messageError("MiscJSONParseError", { description: withDefault(description, "input"), address: name, - message: errorMessage(e) + message: errorMessage(e), }); } @@ -80,15 +95,21 @@ export class JSONInput implements Input> { } private setDescription(topLevelName: string, description: string): void { - let topLevel = this._topLevels.get(topLevelName); + const topLevel = this._topLevels.get(topLevelName); if (topLevel === undefined) { - return panic("Trying to set description for a top-level that doesn't exist"); + panic( + "Trying to set description for a top-level that doesn't exist", + ); } topLevel.description = description; } - private addSamples(name: string, values: Value[], description: string | undefined): void { + private addSamples( + name: string, + values: Value[], + description: string | undefined, + ): void { for (const value of values) { this.addSample(name, value); if (description !== undefined) { @@ -100,7 +121,10 @@ export class JSONInput implements Input> { public async addSource(source: JSONSourceData): Promise { const { name, samples, description } = source; try { - const values = await arrayMapSync(samples, async s => await this._compressedJSON.parse(s)); + const values = await arrayMapSync( + samples, + async (s) => await this._compressedJSON.parse(s), + ); this.addSamples(name, values, description); } catch (e) { return messageParseError(name, description, e); @@ -110,10 +134,12 @@ export class JSONInput implements Input> { public addSourceSync(source: JSONSourceData): void { const { name, samples, description } = source; try { - const values = samples.map(s => this._compressedJSON.parseSync(s)); + const values = samples.map((s) => + this._compressedJSON.parseSync(s), + ); this.addSamples(name, values, description); } catch (e) { - return messageParseError(name, description, e); + messageParseError(name, description, e); } } @@ -126,9 +152,15 @@ export class JSONInput implements Input> { typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, - fixedTopLevels: boolean + fixedTopLevels: boolean, ): Promise { - this.addTypesSync(ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels); + this.addTypesSync( + ctx, + typeBuilder, + inferMaps, + inferEnums, + fixedTopLevels, + ); } public addTypesSync( @@ -136,15 +168,26 @@ export class JSONInput implements Input> { typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, - fixedTopLevels: boolean + fixedTopLevels: boolean, ): void { - const inference = new TypeInference(this._compressedJSON, typeBuilder, inferMaps, inferEnums); + const inference = new TypeInference( + this._compressedJSON, + typeBuilder, + inferMaps, + inferEnums, + ); for (const [name, { samples, description }] of this._topLevels) { - const tref = inference.inferTopLevelType(makeNamesTypeAttributes(name, false), samples, fixedTopLevels); + const tref = inference.inferTopLevelType( + makeNamesTypeAttributes(name, false), + samples, + fixedTopLevels, + ); typeBuilder.addTopLevel(name, tref); if (description !== undefined) { - const attributes = descriptionTypeAttributeKind.makeAttributes(new Set([description])); + const attributes = descriptionTypeAttributeKind.makeAttributes( + new Set([description]), + ); typeBuilder.addAttributes(tref, attributes); } } @@ -154,27 +197,36 @@ export class JSONInput implements Input> { export function jsonInputForTargetLanguage( targetLanguage: LanguageName | TargetLanguage, languages?: TargetLanguage[], - handleJSONRefs = false + handleJSONRefs = false, ): JSONInput { if (typeof targetLanguage === "string") { targetLanguage = defined(languageNamed(targetLanguage, languages)); } - const compressedJSON = new CompressedJSONFromString(targetLanguage.dateTimeRecognizer, handleJSONRefs); + const compressedJSON = new CompressedJSONFromString( + targetLanguage.dateTimeRecognizer, + handleJSONRefs, + ); return new JSONInput(compressedJSON); } export class InputData { // FIXME: Make into a Map, indexed by kind. - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // biome-ignore lint/suspicious/noExplicitAny: private _inputs: Set> = new Set(); public addInput(input: Input): void { this._inputs = this._inputs.add(input); } - private getOrAddInput(kind: string, makeInput: () => Input): Input { - let input: Input | undefined = iterableFind(this._inputs, i => i.kind === kind); + private getOrAddInput( + kind: string, + makeInput: () => Input, + ): Input { + let input: Input | undefined = iterableFind( + this._inputs, + (i) => i.kind === kind, + ); if (input === undefined) { input = makeInput(); this.addInput(input); @@ -183,12 +235,20 @@ export class InputData { return input; } - public async addSource(kind: string, source: T, makeInput: () => Input): Promise { + public async addSource( + kind: string, + source: T, + makeInput: () => Input, + ): Promise { const input = this.getOrAddInput(kind, makeInput); await input.addSource(source); } - public addSourceSync(kind: string, source: T, makeInput: () => Input): void { + public addSourceSync( + kind: string, + source: T, + makeInput: () => Input, + ): void { const input = this.getOrAddInput(kind, makeInput); input.addSourceSync(source); } @@ -198,10 +258,16 @@ export class InputData { typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, - fixedTopLevels: boolean + fixedTopLevels: boolean, ): Promise { for (const input of this._inputs) { - await input.addTypes(ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels); + await input.addTypes( + ctx, + typeBuilder, + inferMaps, + inferEnums, + fixedTopLevels, + ); } } @@ -210,25 +276,35 @@ export class InputData { typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, - fixedTopLevels: boolean + fixedTopLevels: boolean, ): void { for (const input of this._inputs) { - input.addTypesSync(ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels); + input.addTypesSync( + ctx, + typeBuilder, + inferMaps, + inferEnums, + fixedTopLevels, + ); } } public get needIR(): boolean { - return iterableSome(this._inputs, i => i.needIR); + return iterableSome(this._inputs, (i) => i.needIR); } public get needSchemaProcessing(): boolean { - return iterableSome(this._inputs, i => i.needSchemaProcessing); + return iterableSome(this._inputs, (i) => i.needSchemaProcessing); } public singleStringSchemaSource(): string | undefined { - const schemaStrings = setFilterMap(this._inputs, i => i.singleStringSchemaSource()); + const schemaStrings = setFilterMap(this._inputs, (i) => + i.singleStringSchemaSource(), + ); if (schemaStrings.size > 1) { - return panic("We have more than one input with a string schema source"); + return panic( + "We have more than one input with a string schema source", + ); } return iterableFirst(schemaStrings); diff --git a/packages/quicktype-core/src/input/JSONSchemaInput.ts b/packages/quicktype-core/src/input/JSONSchemaInput.ts index eebcb377a..6907c0e48 100644 --- a/packages/quicktype-core/src/input/JSONSchemaInput.ts +++ b/packages/quicktype-core/src/input/JSONSchemaInput.ts @@ -5,7 +5,7 @@ import { arrayLast, arrayMapSync, definedMap, - // eslint-disable-next-line @typescript-eslint/no-redeclare + // biome-ignore lint/suspicious/noShadowRestrictedNames: hasOwnProperty, hashCodeOf, hashString, @@ -18,7 +18,7 @@ import { mapMergeInto, mapSortBy, setFilter, - setSubtract + setSubtract, } from "collection-utils"; import URI from "urijs"; @@ -26,7 +26,7 @@ import { accessorNamesAttributeProducer } from "../attributes/AccessorNames"; import { minMaxAttributeProducer, minMaxLengthAttributeProducer, - patternAttributeProducer + patternAttributeProducer, } from "../attributes/Constraints"; import { descriptionAttributeProducer } from "../attributes/Description"; import { enumValuesAttributeProducer } from "../attributes/EnumValues"; @@ -35,23 +35,35 @@ import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, - makeTypeAttributesInferred + makeTypeAttributesInferred, } from "../attributes/TypeAttributes"; -import { TypeNames, makeNamesTypeAttributes, modifyTypeNames, singularizeTypeNames } from "../attributes/TypeNames"; +import { + TypeNames, + makeNamesTypeAttributes, + modifyTypeNames, + singularizeTypeNames, +} from "../attributes/TypeNames"; import { uriSchemaAttributesProducer } from "../attributes/URIAttributes"; import { messageAssert, messageError } from "../Messages"; -import { type RunContext } from "../Run"; -import { type StringMap, assert, assertNever, defined, panic, parseJSON } from "../support/Support"; +import type { RunContext } from "../Run"; +import { + type StringMap, + assert, + assertNever, + defined, + panic, + parseJSON, +} from "../support/Support"; import { type PrimitiveTypeKind, type TransformedStringTypeKind, isNumberTypeKind, - transformedStringTypeTargetTypeKindsMap + transformedStringTypeTargetTypeKindsMap, } from "../Type"; -import { type TypeBuilder } from "../Type/TypeBuilder"; -import { type TypeRef } from "../Type/TypeRef"; +import type { TypeBuilder } from "../Type/TypeBuilder"; +import type { TypeRef } from "../Type/TypeRef"; -import { type Input } from "./Inputs"; +import type { Input } from "./Inputs"; import { type JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; import { type PathElement, PathElementKind } from "./PathElement"; @@ -67,7 +79,10 @@ function pathElementEquals(a: PathElement, b: PathElement): boolean { return a.index === b.index; } - if (a.kind === PathElementKind.KeyOrIndex && b.kind === PathElementKind.KeyOrIndex) { + if ( + a.kind === PathElementKind.KeyOrIndex && + b.kind === PathElementKind.KeyOrIndex + ) { return a.key === b.key; } @@ -75,14 +90,27 @@ function pathElementEquals(a: PathElement, b: PathElement): boolean { } function withRef(refOrLoc: Ref | (() => Ref) | Location): { ref: Ref }; -function withRef(refOrLoc: Ref | (() => Ref) | Location, props?: T): T & { ref: Ref }; -function withRef(refOrLoc: Ref | (() => Ref) | Location, props?: T): unknown { +function withRef( + refOrLoc: Ref | (() => Ref) | Location, + props?: T, +): T & { ref: Ref }; +function withRef( + refOrLoc: Ref | (() => Ref) | Location, + props?: T, +): unknown { const ref = - typeof refOrLoc === "function" ? refOrLoc() : refOrLoc instanceof Ref ? refOrLoc : refOrLoc.canonicalRef; + typeof refOrLoc === "function" + ? refOrLoc() + : refOrLoc instanceof Ref + ? refOrLoc + : refOrLoc.canonicalRef; return Object.assign({ ref }, props ?? {}); } -function checkJSONSchemaObject(x: unknown, refOrLoc: Ref | (() => Ref)): StringMap { +function checkJSONSchemaObject( + x: unknown, + refOrLoc: Ref | (() => Ref), +): StringMap { if (Array.isArray(x)) { return messageError("SchemaArrayIsInvalidSchema", withRef(refOrLoc)); } @@ -92,7 +120,10 @@ function checkJSONSchemaObject(x: unknown, refOrLoc: Ref | (() => Ref)): StringM } if (typeof x !== "object") { - return messageError("SchemaInvalidJSONSchemaType", withRef(refOrLoc, { type: typeof x })); + return messageError( + "SchemaInvalidJSONSchemaType", + withRef(refOrLoc, { type: typeof x }), + ); } return x; @@ -103,7 +134,7 @@ function checkJSONSchema(x: unknown, refOrLoc: Ref | (() => Ref)): JSONSchema { return checkJSONSchemaObject(x, refOrLoc); } -const numberRegexp = new RegExp("^[0-9]+$"); +const numberRegexp = /^[0-9]+$/; function normalizeURI(uri: string | URI): URI { // FIXME: This is overly complicated and a bit shady. The problem is @@ -120,7 +151,7 @@ function normalizeURI(uri: string | URI): URI { export class Ref { public static root(address: string | undefined): Ref { - const uri = definedMap(address, a => new URI(a)); + const uri = definedMap(address, (a) => new URI(a)); return new Ref(uri, []); } @@ -134,7 +165,9 @@ export class Ref { if (path !== "") { const parts = path.split("/"); - parts.forEach(part => elements.push({ kind: PathElementKind.KeyOrIndex, key: part })); + parts.forEach((part) => + elements.push({ kind: PathElementKind.KeyOrIndex, key: part }), + ); } return elements; @@ -163,10 +196,13 @@ export class Ref { public constructor( addressURI: URI | undefined, - public readonly path: readonly PathElement[] + public readonly path: readonly PathElement[], ) { if (addressURI !== undefined) { - assert(addressURI.fragment() === "", `Ref URI with fragment is not allowed: ${addressURI.toString()}`); + assert( + addressURI.fragment() === "", + `Ref URI with fragment is not allowed: ${addressURI.toString()}`, + ); this.addressURI = normalizeURI(addressURI); } else { this.addressURI = undefined; @@ -182,7 +218,9 @@ export class Ref { } public get isRoot(): boolean { - return this.path.length === 1 && this.path[0].kind === PathElementKind.Root; + return ( + this.path.length === 1 && this.path[0].kind === PathElementKind.Root + ); } private pushElement(pe: PathElement): Ref { @@ -212,7 +250,10 @@ export class Ref { public resolveAgainst(base: Ref | undefined): Ref { let addressURI = this.addressURI; if (base?.addressURI !== undefined) { - addressURI = addressURI === undefined ? base.addressURI : addressURI.absoluteTo(base.addressURI); + addressURI = + addressURI === undefined + ? base.addressURI + : addressURI.absoluteTo(base.addressURI); } return new Ref(addressURI, this.path); @@ -224,8 +265,14 @@ export class Ref { for (;;) { const e = path.pop(); if (e === undefined || e.kind === PathElementKind.Root) { - let name = this.addressURI !== undefined ? this.addressURI.filename() : ""; - const suffix = this.addressURI !== undefined ? this.addressURI.suffix() : ""; + let name = + this.addressURI !== undefined + ? this.addressURI.filename() + : ""; + const suffix = + this.addressURI !== undefined + ? this.addressURI.suffix() + : ""; if (name.length > suffix.length + 1) { name = name.slice(0, name.length - suffix.length - 1); } @@ -246,7 +293,9 @@ export class Ref { break; case PathElementKind.Type: case PathElementKind.Object: - return panic("We shouldn't try to get the name of Type or Object refs"); + return panic( + "We shouldn't try to get the name of Type or Object refs", + ); default: return assertNever(e); } @@ -256,7 +305,8 @@ export class Ref { public get definitionName(): string | undefined { const pe = arrayGetFromEnd(this.path, 2); if (pe === undefined) return undefined; - if (keyOrIndex(pe) === "definitions") return keyOrIndex(defined(arrayLast(this.path))); + if (keyOrIndex(pe) === "definitions") + return keyOrIndex(defined(arrayLast(this.path))); return undefined; } @@ -276,11 +326,16 @@ export class Ref { } } - const address = this.addressURI === undefined ? "" : this.addressURI.toString(); - return address + "#" + this.path.map(elementToString).join("/"); + const address = + this.addressURI === undefined ? "" : this.addressURI.toString(); + return `${address}#${this.path.map(elementToString).join("/")}`; } - private lookup(local: unknown, path: readonly PathElement[], root: JSONSchema): JSONSchema { + private lookup( + local: unknown, + path: readonly PathElement[], + root: JSONSchema, + ): JSONSchema { const refMaker = (): Ref => new Ref(this.addressURI, path); const first = path[0]; if (first === undefined) { @@ -295,23 +350,36 @@ export class Ref { const key = first.key; if (Array.isArray(local)) { if (!/^\d+$/.test(key)) { - return messageError("SchemaCannotIndexArrayWithNonNumber", withRef(refMaker, { actual: key })); + return messageError( + "SchemaCannotIndexArrayWithNonNumber", + withRef(refMaker, { actual: key }), + ); } - const index = parseInt(first.key, 10); + const index = Number.parseInt(first.key, 10); if (index >= local.length) { - return messageError("SchemaIndexNotInArray", withRef(refMaker, { index })); + return messageError( + "SchemaIndexNotInArray", + withRef(refMaker, { index }), + ); } return this.lookup(local[index], rest, root); - } else { - if (!hasOwnProperty(local, key)) { - return messageError("SchemaKeyNotInObject", withRef(refMaker, { key })); - } + } - return this.lookup(checkJSONSchemaObject(local, refMaker)[first.key], rest, root); + if (!hasOwnProperty(local, key)) { + return messageError( + "SchemaKeyNotInObject", + withRef(refMaker, { key }), + ); } + return this.lookup( + checkJSONSchemaObject(local, refMaker)[first.key], + rest, + root, + ); + case PathElementKind.Type: return panic('Cannot look up path that indexes "type"'); case PathElementKind.Object: @@ -330,7 +398,11 @@ export class Ref { if (this.addressURI !== undefined && other.addressURI !== undefined) { if (!this.addressURI.equals(other.addressURI)) return false; } else { - if ((this.addressURI === undefined) !== (other.addressURI === undefined)) return false; + if ( + (this.addressURI === undefined) !== + (other.addressURI === undefined) + ) + return false; } const l = this.path.length; @@ -343,7 +415,7 @@ export class Ref { } public hashCode(): number { - let acc = hashCodeOf(definedMap(this.addressURI, u => u.toString())); + let acc = hashCodeOf(definedMap(this.addressURI, (u) => u.toString())); for (const pe of this.path) { acc = addHashCode(acc, pe.kind); switch (pe.kind) { @@ -370,7 +442,7 @@ class Location { public constructor( canonicalRef: Ref, virtualRef?: Ref, - public readonly haveID: boolean = false + public readonly haveID: boolean = false, ) { this.canonicalRef = canonicalRef; this.virtualRef = virtualRef ?? canonicalRef; @@ -379,24 +451,42 @@ class Location { public updateWithID(id: string | unknown): Location { if (typeof id !== "string") return this; const parsed = Ref.parse(id); - const virtual = this.haveID ? parsed.resolveAgainst(this.virtualRef) : parsed; + const virtual = this.haveID + ? parsed.resolveAgainst(this.virtualRef) + : parsed; if (!this.haveID) { - messageAssert(virtual.hasAddress, "SchemaIDMustHaveAddress", withRef(this, { id })); + messageAssert( + virtual.hasAddress, + "SchemaIDMustHaveAddress", + withRef(this, { id }), + ); } return new Location(this.canonicalRef, virtual, true); } public push(...keys: string[]): Location { - return new Location(this.canonicalRef.push(...keys), this.virtualRef.push(...keys), this.haveID); + return new Location( + this.canonicalRef.push(...keys), + this.virtualRef.push(...keys), + this.haveID, + ); } public pushObject(): Location { - return new Location(this.canonicalRef.pushObject(), this.virtualRef.pushObject(), this.haveID); + return new Location( + this.canonicalRef.pushObject(), + this.virtualRef.pushObject(), + this.haveID, + ); } public pushType(index: number): Location { - return new Location(this.canonicalRef.pushType(index), this.virtualRef.pushType(index), this.haveID); + return new Location( + this.canonicalRef.pushType(index), + this.virtualRef.pushType(index), + this.haveID, + ); } public toString(): string { @@ -440,14 +530,20 @@ class Canonizer { } for (const property of Object.getOwnPropertyNames(schema)) { - this.addIDs(schema[property as keyof typeof schema], loc.push(property)); + this.addIDs( + schema[property as keyof typeof schema], + loc.push(property), + ); } } public addSchema(schema: unknown, address: string): boolean { if (this._schemaAddressesAdded.has(address)) return false; - this.addIDs(schema, new Location(Ref.root(address), Ref.root(undefined))); + this.addIDs( + schema, + new Location(Ref.root(address), Ref.root(undefined)), + ); this._schemaAddressesAdded.add(address); return true; } @@ -461,12 +557,17 @@ class Canonizer { } const canonicalRef = - virtual.addressURI === undefined ? new Ref(base.canonicalRef.addressURI, virtual.path) : virtual; + virtual.addressURI === undefined + ? new Ref(base.canonicalRef.addressURI, virtual.path) + : virtual; return new Location(canonicalRef, new Ref(undefined, virtual.path)); } } -function checkTypeList(typeOrTypes: string | string[], loc: Location): ReadonlySet { +function checkTypeList( + typeOrTypes: string | string[], + loc: Location, +): ReadonlySet { let set: Set; if (typeof typeOrTypes === "string") { set = new Set([typeOrTypes]); @@ -474,7 +575,10 @@ function checkTypeList(typeOrTypes: string | string[], loc: Location): ReadonlyS const arr: string[] = []; for (const t of typeOrTypes) { if (typeof t !== "string") { - return messageError("SchemaTypeElementMustBeString", withRef(loc, { element: t })); + return messageError( + "SchemaTypeElementMustBeString", + withRef(loc, { element: t }), + ); } arr.push(t); @@ -482,14 +586,28 @@ function checkTypeList(typeOrTypes: string | string[], loc: Location): ReadonlyS set = new Set(arr); } else { - return messageError("SchemaTypeMustBeStringOrStringArray", withRef(loc, { actual: typeOrTypes })); + return messageError( + "SchemaTypeMustBeStringOrStringArray", + withRef(loc, { actual: typeOrTypes }), + ); } messageAssert(set.size > 0, "SchemaNoTypeSpecified", withRef(loc)); - const validTypes = ["null", "boolean", "object", "array", "number", "string", "integer"]; - const maybeInvalid = iterableFind(set, s => !validTypes.includes(s)); + const validTypes = [ + "null", + "boolean", + "object", + "array", + "number", + "string", + "integer", + ]; + const maybeInvalid = iterableFind(set, (s) => !validTypes.includes(s)); if (maybeInvalid !== undefined) { - return messageError("SchemaInvalidType", withRef(loc, { type: maybeInvalid })); + return messageError( + "SchemaInvalidType", + withRef(loc, { type: maybeInvalid }), + ); } return set; @@ -497,12 +615,18 @@ function checkTypeList(typeOrTypes: string | string[], loc: Location): ReadonlyS function checkRequiredArray(arr: string[], loc: Location): string[] { if (!Array.isArray(arr)) { - return messageError("SchemaRequiredMustBeStringOrStringArray", withRef(loc, { actual: arr })); + return messageError( + "SchemaRequiredMustBeStringOrStringArray", + withRef(loc, { actual: arr }), + ); } for (const e of arr) { if (typeof e !== "string") { - return messageError("SchemaRequiredElementMustBeString", withRef(loc, { element: e })); + return messageError( + "SchemaRequiredElementMustBeString", + withRef(loc, { element: e }), + ); } } @@ -516,11 +640,13 @@ export const schemaTypeDict = { integer: true, number: true, array: true, - object: true + object: true, }; export type JSONSchemaType = keyof typeof schemaTypeDict; -const schemaTypes = Object.getOwnPropertyNames(schemaTypeDict) as JSONSchemaType[]; +const schemaTypes = Object.getOwnPropertyNames( + schemaTypeDict, +) as JSONSchemaType[]; export interface JSONSchemaAttributes { forCases?: TypeAttributes[]; @@ -534,13 +660,15 @@ export type JSONSchemaAttributeProducer = ( schema: JSONSchema, canonicalRef: Ref, types: Set, - unionCases: JSONSchema[] | undefined + unionCases: JSONSchema[] | undefined, ) => JSONSchemaAttributes | undefined; -function typeKindForJSONSchemaFormat(format: string): TransformedStringTypeKind | undefined { +function typeKindForJSONSchemaFormat( + format: string, +): TransformedStringTypeKind | undefined { const target = iterableFind( transformedStringTypeTargetTypeKindsMap, - ([_, { jsonSchema }]) => jsonSchema === format + ([_, { jsonSchema }]) => jsonSchema === format, ); if (target === undefined) return undefined; return target[0] as TransformedStringTypeKind; @@ -549,22 +677,25 @@ function typeKindForJSONSchemaFormat(format: string): TransformedStringTypeKind function schemaFetchError(base: Location | undefined, address: string): never { if (base === undefined) { return messageError("SchemaFetchErrorTopLevel", { address }); - } else { - return messageError("SchemaFetchError", { address, base: base.canonicalRef }); } + + return messageError("SchemaFetchError", { + address, + base: base.canonicalRef, + }); } class Resolver { public constructor( private readonly _ctx: RunContext, private readonly _store: JSONSchemaStore, - private readonly _canonizer: Canonizer + private readonly _canonizer: Canonizer, ) {} private async tryResolveVirtualRef( fetchBase: Location, lookupBase: Location, - virtualRef: Ref + virtualRef: Ref, ): Promise<[JSONSchema | undefined, Location]> { let didAdd = false; // If we are resolving into a schema file that we haven't seen yet then @@ -574,13 +705,19 @@ class Resolver { for (;;) { const loc = this._canonizer.canonize(fetchBase, virtualRef); const canonical = loc.canonicalRef; - assert(canonical.hasAddress, "Canonical ref can't be resolved without an address"); + assert( + canonical.hasAddress, + "Canonical ref can't be resolved without an address", + ); const address = canonical.address; - let schema = + const schema = canonical.addressURI === undefined ? undefined - : await this._store.get(address, this._ctx.debugPrintSchemaResolving); + : await this._store.get( + address, + this._ctx.debugPrintSchemaResolving, + ); if (schema === undefined) { return [undefined, loc]; } @@ -589,12 +726,18 @@ class Resolver { assert(!didAdd, "We can't add a schema twice"); didAdd = true; } else { - let lookupLoc = this._canonizer.canonize(lookupBase, virtualRef); + let lookupLoc = this._canonizer.canonize( + lookupBase, + virtualRef, + ); if (fetchBase !== undefined) { lookupLoc = new Location( - new Ref(loc.canonicalRef.addressURI, lookupLoc.canonicalRef.path), + new Ref( + loc.canonicalRef.addressURI, + lookupLoc.canonicalRef.path, + ), lookupLoc.virtualRef, - lookupLoc.haveID + lookupLoc.haveID, ); } @@ -603,9 +746,14 @@ class Resolver { } } - public async resolveVirtualRef(base: Location, virtualRef: Ref): Promise<[JSONSchema, Location]> { + public async resolveVirtualRef( + base: Location, + virtualRef: Ref, + ): Promise<[JSONSchema, Location]> { if (this._ctx.debugPrintSchemaResolving) { - console.log(`resolving ${virtualRef.toString()} relative to ${base.toString()}`); + console.log( + `resolving ${virtualRef.toString()} relative to ${base.toString()}`, + ); } // Try with the virtual base first. If that doesn't work, use the @@ -623,7 +771,7 @@ class Resolver { const altBase = new Location( base.canonicalRef, new Ref(base.canonicalRef.addressURI, base.virtualRef.path), - base.haveID + base.haveID, ); result = await this.tryResolveVirtualRef(altBase, base, virtualRef); schema = result[0]; @@ -639,7 +787,10 @@ class Resolver { } public async resolveTopLevelRef(ref: Ref): Promise<[JSONSchema, Location]> { - return await this.resolveVirtualRef(new Location(new Ref(ref.addressURI, [])), new Ref(undefined, ref.path)); + return await this.resolveVirtualRef( + new Location(new Ref(ref.addressURI, [])), + new Ref(undefined, ref.path), + ); } } @@ -647,14 +798,17 @@ async function addTypesInSchema( resolver: Resolver, typeBuilder: TypeBuilder, references: ReadonlyMap, - attributeProducers: JSONSchemaAttributeProducer[] + attributeProducers: JSONSchemaAttributeProducer[], ): Promise { - let typeForCanonicalRef = new EqualityMap(); + const typeForCanonicalRef = new EqualityMap(); function setTypeForLocation(loc: Location, t: TypeRef): void { const maybeRef = typeForCanonicalRef.get(loc.canonicalRef); if (maybeRef !== undefined) { - assert(maybeRef === t, "Trying to set path again to different type"); + assert( + maybeRef === t, + "Trying to set path again to different type", + ); } typeForCanonicalRef.set(loc.canonicalRef, t); @@ -666,31 +820,43 @@ async function addTypesInSchema( properties: StringMap, requiredArray: string[], additionalProperties: unknown, - sortKey: (k: string) => number | string = (k: string): string => k.toLowerCase() + sortKey: (k: string) => number | string = (k: string): string => + k.toLowerCase(), ): Promise { const required = new Set(requiredArray); - const propertiesMap = mapSortBy(mapFromObject(properties), (_, k) => sortKey(k)); - const props = await mapMapSync(propertiesMap, async (propSchema, propName) => { - const propLoc = loc.push("properties", propName); - const t = await toType( - checkJSONSchema(propSchema, propLoc.canonicalRef), - propLoc, - makeNamesTypeAttributes(propName, true) - ); - const isOptional = !required.has(propName); - return typeBuilder.makeClassProperty(t, isOptional); - }); + const propertiesMap = mapSortBy(mapFromObject(properties), (_, k) => + sortKey(k), + ); + const props = await mapMapSync( + propertiesMap, + async (propSchema, propName) => { + const propLoc = loc.push("properties", propName); + const t = await toType( + checkJSONSchema(propSchema, propLoc.canonicalRef), + propLoc, + makeNamesTypeAttributes(propName, true), + ); + const isOptional = !required.has(propName); + return typeBuilder.makeClassProperty(t, isOptional); + }, + ); let additionalPropertiesType: TypeRef | undefined; - if (additionalProperties === undefined || additionalProperties === true) { + if ( + additionalProperties === undefined || + additionalProperties === true + ) { additionalPropertiesType = typeBuilder.getPrimitiveType("any"); } else if (additionalProperties === false) { additionalPropertiesType = undefined; } else { const additionalLoc = loc.push("additionalProperties"); additionalPropertiesType = await toType( - checkJSONSchema(additionalProperties, additionalLoc.canonicalRef), + checkJSONSchema( + additionalProperties, + additionalLoc.canonicalRef, + ), additionalLoc, - singularizeTypeNames(attributes) + singularizeTypeNames(attributes), ); } @@ -698,22 +864,34 @@ async function addTypesInSchema( if (additionalRequired.size > 0) { const t = additionalPropertiesType; if (t === undefined) { - return messageError("SchemaAdditionalTypesForbidRequired", withRef(loc)); + return messageError( + "SchemaAdditionalTypesForbidRequired", + withRef(loc), + ); } - const additionalProps = mapFromIterable(additionalRequired, _name => - typeBuilder.makeClassProperty(t, false) + const additionalProps = mapFromIterable( + additionalRequired, + (_name) => typeBuilder.makeClassProperty(t, false), ); mapMergeInto(props, additionalProps); } - return typeBuilder.getUniqueObjectType(attributes, props, additionalPropertiesType); + return typeBuilder.getUniqueObjectType( + attributes, + props, + additionalPropertiesType, + ); } - async function convertToType(schema: StringMap, loc: Location, typeAttributes: TypeAttributes): Promise { + async function convertToType( + schema: StringMap, + loc: Location, + typeAttributes: TypeAttributes, + ): Promise { const enumArray = Array.isArray(schema.enum) ? schema.enum : undefined; const isConst = schema.const !== undefined; - const typeSet = definedMap(schema.type, t => checkTypeList(t, loc)); + const typeSet = definedMap(schema.type, (t) => checkTypeList(t, loc)); function isTypeIncluded(name: JSONSchemaType): boolean { if (typeSet !== undefined && !typeSet.has(name)) { @@ -727,7 +905,8 @@ async function addTypesInSchema( predicate = (x): x is null => x === null; break; case "integer": - predicate = (x): x is number => typeof x === "number" && x === Math.floor(x); + predicate = (x): x is number => + typeof x === "number" && x === Math.floor(x); break; default: predicate = (x): x is typeof name => typeof x === name; @@ -745,19 +924,28 @@ async function addTypesInSchema( } const includedTypes = setFilter(schemaTypes, isTypeIncluded); - let producedAttributesForNoCases: JSONSchemaAttributes[] | undefined = undefined; + let producedAttributesForNoCases: JSONSchemaAttributes[] | undefined = + undefined; function forEachProducedAttribute( cases: JSONSchema[] | undefined, - f: (attributes: JSONSchemaAttributes) => void + f: (attributes: JSONSchemaAttributes) => void, ): void { let attributes: JSONSchemaAttributes[]; - if (cases === undefined && producedAttributesForNoCases !== undefined) { + if ( + cases === undefined && + producedAttributesForNoCases !== undefined + ) { attributes = producedAttributesForNoCases; } else { attributes = []; for (const producer of attributeProducers) { - const newAttributes = producer(schema, loc.canonicalRef, includedTypes, cases); + const newAttributes = producer( + schema, + loc.canonicalRef, + includedTypes, + cases, + ); if (newAttributes === undefined) continue; attributes.push(newAttributes); } @@ -773,13 +961,17 @@ async function addTypesInSchema( } function combineProducedAttributes( - f: (attributes: JSONSchemaAttributes) => TypeAttributes | undefined + f: (attributes: JSONSchemaAttributes) => TypeAttributes | undefined, ): TypeAttributes { let result = emptyTypeAttributes; - forEachProducedAttribute(undefined, attr => { + forEachProducedAttribute(undefined, (attr) => { const maybeAttributes = f(attr); if (maybeAttributes === undefined) return; - result = combineTypeAttributes("union", result, maybeAttributes); + result = combineTypeAttributes( + "union", + result, + maybeAttributes, + ); }); return result; } @@ -789,17 +981,20 @@ async function addTypesInSchema( attributes = combineTypeAttributes( "union", attributes, - combineProducedAttributes(({ forType, forUnion, forCases }) => { - assert( - forUnion === undefined && forCases === undefined, - "We can't have attributes for unions and cases if we don't have a union" - ); - return forType; - }) + combineProducedAttributes( + ({ forType, forUnion, forCases }) => { + assert( + forUnion === undefined && + forCases === undefined, + "We can't have attributes for unions and cases if we don't have a union", + ); + return forType; + }, + ), ); } - return modifyTypeNames(attributes, maybeTypeNames => { + return modifyTypeNames(attributes, (maybeTypeNames) => { const typeNames = defined(maybeTypeNames); if (!typeNames.areInferred) { return typeNames; @@ -811,10 +1006,14 @@ async function addTypesInSchema( } if (typeof title === "string") { - return TypeNames.make(new Set([title]), new Set(), schema.$ref !== undefined); - } else { - return typeNames.makeInferred(); + return TypeNames.make( + new Set([title]), + new Set(), + schema.$ref !== undefined, + ); } + + return typeNames.makeInferred(); }); } @@ -824,10 +1023,13 @@ async function addTypesInSchema( function makeStringType(attributes: TypeAttributes): TypeRef { const kind = typeKindForJSONSchemaFormat(schema.format); if (kind === undefined) { - return typeBuilder.getStringType(attributes, StringTypes.unrestricted); - } else { - return typeBuilder.getPrimitiveType(kind, attributes); + return typeBuilder.getStringType( + attributes, + StringTypes.unrestricted, + ); } + + return typeBuilder.getPrimitiveType(kind, attributes); } async function makeArrayType(): Promise { @@ -838,14 +1040,28 @@ async function addTypesInSchema( const itemsLoc = loc.push("items"); const itemTypes = await arrayMapSync(items, async (item, i) => { const itemLoc = itemsLoc.push(i.toString()); - return await toType(checkJSONSchema(item, itemLoc.canonicalRef), itemLoc, singularAttributes); + return await toType( + checkJSONSchema(item, itemLoc.canonicalRef), + itemLoc, + singularAttributes, + ); }); - itemType = typeBuilder.getUnionType(emptyTypeAttributes, new Set(itemTypes)); + itemType = typeBuilder.getUnionType( + emptyTypeAttributes, + new Set(itemTypes), + ); } else if (typeof items === "object") { const itemsLoc = loc.push("items"); - itemType = await toType(checkJSONSchema(items, itemsLoc.canonicalRef), itemsLoc, singularAttributes); + itemType = await toType( + checkJSONSchema(items, itemsLoc.canonicalRef), + itemsLoc, + singularAttributes, + ); } else if (items !== undefined && items !== true) { - return messageError("SchemaArrayItemsMustBeStringOrArray", withRef(loc, { actual: items })); + return messageError( + "SchemaArrayItemsMustBeStringOrArray", + withRef(loc, { actual: items }), + ); } else { itemType = typeBuilder.getPrimitiveType("any"); } @@ -856,7 +1072,10 @@ async function addTypesInSchema( async function makeObjectType(): Promise { let required: string[]; - if (schema.required === undefined || typeof schema.required === "boolean") { + if ( + schema.required === undefined || + typeof schema.required === "boolean" + ) { required = []; } else { required = Array.from(checkRequiredArray(schema.required, loc)); @@ -866,7 +1085,10 @@ async function addTypesInSchema( if (schema.properties === undefined) { properties = {}; } else { - properties = checkJSONSchemaObject(schema.properties, loc.canonicalRef); + properties = checkJSONSchemaObject( + schema.properties, + loc.canonicalRef, + ); } // In Schema Draft 3, `required` is `true` on a property that's required. @@ -890,9 +1112,11 @@ async function addTypesInSchema( const objectAttributes = combineTypeAttributes( "union", inferredAttributes, - combineProducedAttributes(({ forObject }) => forObject) + combineProducedAttributes(({ forObject }) => forObject), ); - const order = schema.quicktypePropertyOrder ? schema.quicktypePropertyOrder : []; + const order = schema.quicktypePropertyOrder + ? schema.quicktypePropertyOrder + : []; const orderKey = (propertyName: string): string => { // use the index of the order array const index = order.indexOf(propertyName); @@ -900,13 +1124,26 @@ async function addTypesInSchema( return index !== -1 ? index : propertyName.toLowerCase(); }; - return await makeObject(loc, objectAttributes, properties, required, additionalProperties, orderKey); + return await makeObject( + loc, + objectAttributes, + properties, + required, + additionalProperties, + orderKey, + ); } - async function makeTypesFromCases(cases: unknown[], kind: string): Promise { + async function makeTypesFromCases( + cases: unknown[], + kind: string, + ): Promise { const kindLoc = loc.push(kind); if (!Array.isArray(cases)) { - return messageError("SchemaSetOperationCasesIsNotArray", withRef(kindLoc, { operation: kind, cases })); + return messageError( + "SchemaSetOperationCasesIsNotArray", + withRef(kindLoc, { operation: kind, cases }), + ); } return await arrayMapSync(cases, async (t, index) => { @@ -914,49 +1151,77 @@ async function addTypesInSchema( return await toType( checkJSONSchema(t, caseLoc.canonicalRef), caseLoc, - makeTypeAttributesInferred(typeAttributes) + makeTypeAttributesInferred(typeAttributes), ); }); } - const intersectionType = typeBuilder.getUniqueIntersectionType(typeAttributes, undefined); + const intersectionType = typeBuilder.getUniqueIntersectionType( + typeAttributes, + undefined, + ); setTypeForLocation(loc, intersectionType); - async function convertOneOrAnyOf(cases: unknown[], kind: string): Promise { + async function convertOneOrAnyOf( + cases: unknown[], + kind: string, + ): Promise { const typeRefs = await makeTypesFromCases(cases, kind); let unionAttributes = makeTypeAttributesInferred(typeAttributes); if (kind === "oneOf") { - forEachProducedAttribute(cases as JSONSchema[], ({ forType, forUnion, forCases }) => { - if (forType !== undefined) { - typeBuilder.addAttributes(intersectionType, forType); - } + forEachProducedAttribute( + cases as JSONSchema[], + ({ forType, forUnion, forCases }) => { + if (forType !== undefined) { + typeBuilder.addAttributes( + intersectionType, + forType, + ); + } - if (forUnion !== undefined) { - unionAttributes = combineTypeAttributes("union", unionAttributes, forUnion); - } + if (forUnion !== undefined) { + unionAttributes = combineTypeAttributes( + "union", + unionAttributes, + forUnion, + ); + } - if (forCases !== undefined) { - assert( - forCases.length === typeRefs.length, - "Number of case attributes doesn't match number of cases" - ); - for (let i = 0; i < typeRefs.length; i++) { - typeBuilder.addAttributes(typeRefs[i], forCases[i]); + if (forCases !== undefined) { + assert( + forCases.length === typeRefs.length, + "Number of case attributes doesn't match number of cases", + ); + for (let i = 0; i < typeRefs.length; i++) { + typeBuilder.addAttributes( + typeRefs[i], + forCases[i], + ); + } } - } - }); + }, + ); } - const unionType = typeBuilder.getUniqueUnionType(unionAttributes, undefined); + const unionType = typeBuilder.getUniqueUnionType( + unionAttributes, + undefined, + ); typeBuilder.setSetOperationMembers(unionType, new Set(typeRefs)); return unionType; } - const includeObject = enumArray === undefined && !isConst && (typeSet === undefined || typeSet.has("object")); - const includeArray = enumArray === undefined && !isConst && (typeSet === undefined || typeSet.has("array")); + const includeObject = + enumArray === undefined && + !isConst && + (typeSet === undefined || typeSet.has("object")); + const includeArray = + enumArray === undefined && + !isConst && + (typeSet === undefined || typeSet.has("array")); const needStringEnum = includedTypes.has("string") && - enumArray?.find(x => typeof x === "string") !== undefined; + enumArray?.find((x) => typeof x === "string") !== undefined; const needUnion = typeSet !== undefined || schema.properties !== undefined || @@ -971,29 +1236,40 @@ async function addTypesInSchema( if (needUnion) { const unionTypes: TypeRef[] = []; - const numberAttributes = combineProducedAttributes(({ forNumber }) => forNumber); + const numberAttributes = combineProducedAttributes( + ({ forNumber }) => forNumber, + ); for (const [name, kind] of [ ["null", "null"], ["number", "double"], ["integer", "integer"], - ["boolean", "bool"] + ["boolean", "bool"], ] as Array<[JSONSchemaType, PrimitiveTypeKind]>) { if (!includedTypes.has(name)) continue; - const attributes = isNumberTypeKind(kind) ? numberAttributes : undefined; + const attributes = isNumberTypeKind(kind) + ? numberAttributes + : undefined; unionTypes.push(typeBuilder.getPrimitiveType(kind, attributes)); } const stringAttributes = combineTypeAttributes( "union", inferredAttributes, - combineProducedAttributes(({ forString }) => forString) + combineProducedAttributes(({ forString }) => forString), ); if (needStringEnum || isConst) { - const cases = isConst ? [schema.const] : enumArray?.filter(x => typeof x === "string") ?? []; - unionTypes.push(typeBuilder.getStringType(stringAttributes, StringTypes.fromCases(cases))); + const cases = isConst + ? [schema.const] + : (enumArray?.filter((x) => typeof x === "string") ?? []); + unionTypes.push( + typeBuilder.getStringType( + stringAttributes, + StringTypes.fromCases(cases), + ), + ); } else if (includedTypes.has("string")) { unionTypes.push(makeStringType(stringAttributes)); } @@ -1006,19 +1282,34 @@ async function addTypesInSchema( unionTypes.push(await makeObjectType()); } - types.push(typeBuilder.getUniqueUnionType(inferredAttributes, new Set(unionTypes))); + types.push( + typeBuilder.getUniqueUnionType( + inferredAttributes, + new Set(unionTypes), + ), + ); } if (schema.$ref !== undefined) { if (typeof schema.$ref !== "string") { - return messageError("SchemaRefMustBeString", withRef(loc, { actual: typeof schema.$ref })); + return messageError( + "SchemaRefMustBeString", + withRef(loc, { actual: typeof schema.$ref }), + ); } const virtualRef = Ref.parse(schema.$ref); - const [target, newLoc] = await resolver.resolveVirtualRef(loc, virtualRef); - const attributes = modifyTypeNames(typeAttributes, tn => { + const [target, newLoc] = await resolver.resolveVirtualRef( + loc, + virtualRef, + ); + const attributes = modifyTypeNames(typeAttributes, (tn) => { if (!defined(tn).areInferred) return tn; - return TypeNames.make(new Set([newLoc.canonicalRef.name]), new Set(), true); + return TypeNames.make( + new Set([newLoc.canonicalRef.name]), + new Set(), + true, + ); }); types.push(await toType(target, newLoc, attributes)); } @@ -1039,7 +1330,11 @@ async function addTypesInSchema( return intersectionType; } - async function toType(schema: JSONSchema, loc: Location, typeAttributes: TypeAttributes): Promise { + async function toType( + schema: JSONSchema, + loc: Location, + typeAttributes: TypeAttributes, + ): Promise { const maybeType = typeForCanonicalRef.get(loc.canonicalRef); if (maybeType !== undefined) { return maybeType; @@ -1049,7 +1344,11 @@ async function addTypesInSchema( if (typeof schema === "boolean") { // FIXME: Empty union. We'd have to check that it's supported everywhere, // in particular in union flattening. - messageAssert(schema === true, "SchemaFalseNotSupported", withRef(loc)); + messageAssert( + schema === true, + "SchemaFalseNotSupported", + withRef(loc), + ); result = typeBuilder.getPrimitiveType("any"); } else { loc = loc.updateWithID(schema.$id); @@ -1062,7 +1361,11 @@ async function addTypesInSchema( for (const [topLevelName, topLevelRef] of references) { const [target, loc] = await resolver.resolveTopLevelRef(topLevelRef); - const t = await toType(target, loc, makeNamesTypeAttributes(topLevelName, false)); + const t = await toType( + target, + loc, + makeNamesTypeAttributes(topLevelName, false), + ); typeBuilder.addTopLevel(topLevelName, t); } } @@ -1101,13 +1404,15 @@ function nameFromURI(uri: URI): string | undefined { return removeExtension(filename); } - return messageError("DriverCannotInferNameForSchema", { uri: uri.toString() }); + return messageError("DriverCannotInferNameForSchema", { + uri: uri.toString(), + }); } async function refsInSchemaForURI( resolver: Resolver, uri: URI, - defaultName: string + defaultName: string, ): Promise | [string, Ref]> { const fragment = uri.fragment(); let propertiesAreTypes = fragment.endsWith("/"); @@ -1124,27 +1429,29 @@ async function refsInSchemaForURI( if (propertiesAreTypes) { if (typeof schema !== "object") { - return messageError("SchemaCannotGetTypesFromBoolean", { ref: ref.toString() }); + return messageError("SchemaCannotGetTypesFromBoolean", { + ref: ref.toString(), + }); } return mapMap(mapFromObject(schema), (_, name) => ref.push(name)); - } else { - let name: string; - if (typeof schema === "object" && typeof schema.title === "string") { - name = schema.title; - } else { - const maybeName = nameFromURI(uri); - name = maybeName ?? defaultName; - } + } - return [name, ref]; + let name: string; + if (typeof schema === "object" && typeof schema.title === "string") { + name = schema.title; + } else { + const maybeName = nameFromURI(uri); + name = maybeName ?? defaultName; } + + return [name, ref]; } class InputJSONSchemaStore extends JSONSchemaStore { public constructor( private readonly _inputs: Map, - private readonly _delegate?: JSONSchemaStore + private readonly _delegate?: JSONSchemaStore, ) { super(); } @@ -1152,7 +1459,10 @@ class InputJSONSchemaStore extends JSONSchemaStore { public async fetch(address: string): Promise { const maybeInput = this._inputs.get(address); if (maybeInput !== undefined) { - return checkJSONSchema(parseJSON(maybeInput, "JSON Schema", address), () => Ref.root(address)); + return checkJSONSchema( + parseJSON(maybeInput, "JSON Schema", address), + () => Ref.root(address), + ); } if (this._delegate === undefined) { @@ -1188,7 +1498,7 @@ export class JSONSchemaInput implements Input { public constructor( private _schemaStore: JSONSchemaStore | undefined, additionalAttributeProducers: JSONSchemaAttributeProducer[] = [], - private readonly _additionalSchemaAddresses: readonly string[] = [] + private readonly _additionalSchemaAddresses: readonly string[] = [], ) { this._attributeProducers = [ descriptionAttributeProducer, @@ -1197,7 +1507,7 @@ export class JSONSchemaInput implements Input { uriSchemaAttributesProducer, minMaxAttributeProducer, minMaxLengthAttributeProducer, - patternAttributeProducer + patternAttributeProducer, ].concat(additionalAttributeProducers); } @@ -1209,7 +1519,10 @@ export class JSONSchemaInput implements Input { this._topLevels.set(name, ref); } - public async addTypes(ctx: RunContext, typeBuilder: TypeBuilder): Promise { + public async addTypes( + ctx: RunContext, + typeBuilder: TypeBuilder, + ): Promise { if (this._schemaSources.length === 0) return; let maybeSchemaStore = this._schemaStore; @@ -1218,14 +1531,20 @@ export class JSONSchemaInput implements Input { return panic("Must have a schema store to process JSON Schema"); } } else { - maybeSchemaStore = this._schemaStore = new InputJSONSchemaStore(this._schemaInputs, maybeSchemaStore); + maybeSchemaStore = this._schemaStore = new InputJSONSchemaStore( + this._schemaInputs, + maybeSchemaStore, + ); } const schemaStore = maybeSchemaStore; const canonizer = new Canonizer(ctx); for (const address of this._additionalSchemaAddresses) { - const schema = await schemaStore.get(address, ctx.debugPrintSchemaResolving); + const schema = await schemaStore.get( + address, + ctx.debugPrintSchemaResolving, + ); if (schema === undefined) { return messageError("SchemaFetchErrorAdditional", { address }); } @@ -1233,15 +1552,26 @@ export class JSONSchemaInput implements Input { canonizer.addSchema(schema, address); } - const resolver = new Resolver(ctx, defined(this._schemaStore), canonizer); + const resolver = new Resolver( + ctx, + defined(this._schemaStore), + canonizer, + ); for (const [normalizedURI, source] of this._schemaSources) { const givenName = source.name; - const refs = await refsInSchemaForURI(resolver, normalizedURI, givenName); + const refs = await refsInSchemaForURI( + resolver, + normalizedURI, + givenName, + ); if (Array.isArray(refs)) { let name: string; - if (this._schemaSources.length === 1 && givenName !== undefined) { + if ( + this._schemaSources.length === 1 && + givenName !== undefined + ) { name = givenName; } else { name = refs[0]; @@ -1255,11 +1585,16 @@ export class JSONSchemaInput implements Input { } } - await addTypesInSchema(resolver, typeBuilder, this._topLevels, this._attributeProducers); + await addTypesInSchema( + resolver, + typeBuilder, + this._topLevels, + this._attributeProducers, + ); } public addTypesSync(): void { - return panic("addTypesSync not supported in JSONSchemaInput"); + panic("addTypesSync not supported in JSONSchemaInput"); } public async addSource(schemaSource: JSONSchemaSourceData): Promise { @@ -1277,7 +1612,7 @@ export class JSONSchemaInput implements Input { if (uris === undefined) { normalizedURIs = [new URI(name)]; } else { - normalizedURIs = uris.map(uri => { + normalizedURIs = uris.map((uri) => { const normalizedURI = normalizeURI(uri); if (normalizedURI.clone().hash("").toString() === "") { normalizedURI.path(name); @@ -1288,7 +1623,10 @@ export class JSONSchemaInput implements Input { } if (schema === undefined) { - assert(uris !== undefined, "URIs must be given if schema source is not specified"); + assert( + uris !== undefined, + "URIs must be given if schema source is not specified", + ); } else { for (let i = 0; i < normalizedURIs.length; i++) { const normalizedURI = normalizedURIs[i]; @@ -1315,11 +1653,17 @@ export class JSONSchemaInput implements Input { } public singleStringSchemaSource(): string | undefined { - if (!this._schemaSources.every(([_, { schema }]) => typeof schema === "string")) { + if ( + !this._schemaSources.every( + ([_, { schema }]) => typeof schema === "string", + ) + ) { return undefined; } - const set = new Set(this._schemaSources.map(([_, { schema }]) => schema as string)); + const set = new Set( + this._schemaSources.map(([_, { schema }]) => schema as string), + ); if (set.size === 1) { return defined(iterableFirst(set)); } diff --git a/packages/quicktype-core/src/input/JSONSchemaStore.ts b/packages/quicktype-core/src/input/JSONSchemaStore.ts index 02d93e8e0..d0519e4a4 100644 --- a/packages/quicktype-core/src/input/JSONSchemaStore.ts +++ b/packages/quicktype-core/src/input/JSONSchemaStore.ts @@ -6,14 +6,20 @@ export abstract class JSONSchemaStore { private readonly _schemas = new Map(); private add(address: string, schema: JSONSchema): void { - assert(!this._schemas.has(address), "Cannot set a schema for an address twice"); + assert( + !this._schemas.has(address), + "Cannot set a schema for an address twice", + ); this._schemas.set(address, schema); } // FIXME: Remove the undefined option public abstract fetch(_address: string): Promise; - public async get(address: string, debugPrint: boolean): Promise { + public async get( + address: string, + debugPrint: boolean, + ): Promise { let schema = this._schemas.get(address); if (schema !== undefined) { return schema; diff --git a/packages/quicktype-core/src/input/PathElement.ts b/packages/quicktype-core/src/input/PathElement.ts index eba390d7e..440484534 100644 --- a/packages/quicktype-core/src/input/PathElement.ts +++ b/packages/quicktype-core/src/input/PathElement.ts @@ -2,7 +2,7 @@ export enum PathElementKind { Root = 1, KeyOrIndex = 2, Type = 3, - Object = 4 + Object = 4, } export type PathElement = diff --git a/packages/quicktype-core/src/input/PostmanCollection.ts b/packages/quicktype-core/src/input/PostmanCollection.ts index fd191a8c6..cc4432682 100644 --- a/packages/quicktype-core/src/input/PostmanCollection.ts +++ b/packages/quicktype-core/src/input/PostmanCollection.ts @@ -1,6 +1,7 @@ import { parseJSON } from "../support/Support"; -import { type JSONSourceData } from "./Inputs"; +import type { JSONSourceData } from "./Inputs"; +import type { JSONSchema } from "./JSONSchemaStore"; function isValidJSON(s: string): boolean { try { @@ -13,20 +14,27 @@ function isValidJSON(s: string): boolean { export function sourcesFromPostmanCollection( collectionJSON: string, - collectionJSONAddress?: string + collectionJSONAddress?: string, ): { description: string | undefined; sources: Array> } { const sources: Array> = []; const descriptions: string[] = []; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - function processCollection(c: any): void { - if (typeof c !== "object") return; + function processCollection(c: JSONSchema | undefined): void { + if (typeof c !== "object") { + return; + } + if (Array.isArray(c.item)) { for (const item of c.item) { processCollection(item); } - if (typeof c.info === "object" && typeof c.info.description === "string") { + if ( + c.info && + typeof c.info === "object" && + "description" in c.info && + typeof c.info?.description === "string" + ) { descriptions.push(c.info.description); } } @@ -34,33 +42,58 @@ export function sourcesFromPostmanCollection( if (typeof c.name === "string" && Array.isArray(c.response)) { const samples: string[] = []; for (const r of c.response) { - if (typeof r === "object" && typeof r.body === "string" && isValidJSON(r.body)) { + if ( + typeof r === "object" && + typeof r.body === "string" && + isValidJSON(r.body) + ) { samples.push(r.body); } } if (samples.length > 0) { - const source: JSONSourceData = { name: c.name, samples }; + const source: JSONSourceData = { + name: c.name, + samples, + }; const sourceDescription = [c.name]; - if (typeof c.request === "object") { - const { method, url } = c.request; - if (method !== undefined && typeof url === "object" && url.raw !== undefined) { + if (c.request && typeof c.request === "object") { + const { method, url } = c.request as { + method: unknown; + url: object; + }; + if ( + method !== undefined && + typeof url === "object" && + "raw" in url && + url.raw !== undefined + ) { sourceDescription.push(`${method} ${url.raw}`); } } - if (typeof c.request === "object" && typeof c.request.description === "string") { + if ( + c.request && + typeof c.request === "object" && + "description" in c.request && + typeof c.request.description === "string" + ) { sourceDescription.push(c.request.description); } - source.description = sourceDescription.length === 0 ? undefined : sourceDescription.join("\n\n"); + source.description = + sourceDescription.length === 0 + ? undefined + : sourceDescription.join("\n\n"); sources.push(source); } } } - processCollection(parseJSON(collectionJSON, "Postman collection", collectionJSONAddress)); + processCollection( + parseJSON(collectionJSON, "Postman collection", collectionJSONAddress), + ); const joinedDescription = descriptions.join("\n\n").trim(); let description: string | undefined = undefined; diff --git a/packages/quicktype-core/src/input/io/NodeIO.ts b/packages/quicktype-core/src/input/io/NodeIO.ts index f93f20a0e..d417d8ab2 100644 --- a/packages/quicktype-core/src/input/io/NodeIO.ts +++ b/packages/quicktype-core/src/input/io/NodeIO.ts @@ -3,7 +3,7 @@ import * as fs from "fs"; import { defined, exceptionToString } from "@glideapps/ts-necessities"; import { isNode } from "browser-or-node"; import isURL from "is-url"; -import { type Readable } from "readable-stream"; +import type { Readable } from "readable-stream"; import { messageError } from "../../Messages"; import { panic } from "../../support/Support"; @@ -12,7 +12,9 @@ import { getStream } from "./get-stream"; // We need to use cross-fetch in CI or if fetch is not available in the global scope // We use a dynamic import to avoid punycode deprecated dependency warning on node > 20 -const fetch = process.env.CI ? require("cross-fetch").default : (global as any).fetch ?? require("cross-fetch").default; +const fetch = process.env.CI + ? require("cross-fetch").default + : ((global as any).fetch ?? require("cross-fetch").default); interface HttpHeaders { [key: string]: string; @@ -23,7 +25,10 @@ function parseHeaders(httpHeaders?: string[]): HttpHeaders { return {}; } - return httpHeaders.reduce(function (result: HttpHeaders, httpHeader: string) { + return httpHeaders.reduce(( + result: HttpHeaders, + httpHeader: string, + ) => { if (httpHeader !== undefined && httpHeader.length > 0) { const split = httpHeader.indexOf(":"); @@ -40,11 +45,14 @@ function parseHeaders(httpHeaders?: string[]): HttpHeaders { }, {} as HttpHeaders); } -export async function readableFromFileOrURL(fileOrURL: string, httpHeaders?: string[]): Promise { +export async function readableFromFileOrURL( + fileOrURL: string, + httpHeaders?: string[], +): Promise { try { if (isURL(fileOrURL)) { const response = await fetch(fileOrURL, { - headers: parseHeaders(httpHeaders) + headers: parseHeaders(httpHeaders), }); return defined(response.body) as unknown as Readable; @@ -54,24 +62,38 @@ export async function readableFromFileOrURL(fileOrURL: string, httpHeaders?: str return process.stdin as unknown as Readable; } - const filePath = fs.lstatSync(fileOrURL).isSymbolicLink() ? fs.readlinkSync(fileOrURL) : fileOrURL; + const filePath = fs.lstatSync(fileOrURL).isSymbolicLink() + ? fs.readlinkSync(fileOrURL) + : fileOrURL; if (fs.existsSync(filePath)) { // Cast node readable to isomorphic readable from readable-stream - return fs.createReadStream(filePath, "utf8") as unknown as Readable; + return fs.createReadStream( + filePath, + "utf8", + ) as unknown as Readable; } } } catch (e) { - return messageError("MiscReadError", { fileOrURL, message: exceptionToString(e) }); + return messageError("MiscReadError", { + fileOrURL, + message: exceptionToString(e), + }); } return messageError("DriverInputFileDoesNotExist", { filename: fileOrURL }); } -export async function readFromFileOrURL(fileOrURL: string, httpHeaders?: string[]): Promise { +export async function readFromFileOrURL( + fileOrURL: string, + httpHeaders?: string[], +): Promise { const readable = await readableFromFileOrURL(fileOrURL, httpHeaders); try { return await getStream(readable); } catch (e) { - return messageError("MiscReadError", { fileOrURL, message: exceptionToString(e) }); + return messageError("MiscReadError", { + fileOrURL, + message: exceptionToString(e), + }); } } diff --git a/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts b/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts index 846f6a0a5..b578abf3c 100644 --- a/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts +++ b/packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts @@ -1,7 +1,15 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { PassThrough } from "readable-stream"; -import { type Options } from "."; +import type { Options } from "./index"; + +export interface BufferedPassThrough extends PassThrough { + getBufferedValue: () => any; + getBufferedLength: () => number; + + // for compat with _Readable.Writable + readonly writableObjectMode: never; +} export default function bufferStream(opts: Options) { opts = Object.assign({}, opts); @@ -12,10 +20,8 @@ export default function bufferStream(opts: Options) { let objectMode = false; if (array) { - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing objectMode = !(encoding || buffer); } else { - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing encoding = encoding || "utf8"; } @@ -26,11 +32,11 @@ export default function bufferStream(opts: Options) { let len = 0; const ret: any[] = []; const stream = new PassThrough({ - objectMode - }) as any; + objectMode, + }) as BufferedPassThrough; if (encoding) { - stream.setEncoding(encoding); + stream.setEncoding(encoding as BufferEncoding); } stream.on("data", (chunk: any) => { diff --git a/packages/quicktype-core/src/input/io/get-stream/index.ts b/packages/quicktype-core/src/input/io/get-stream/index.ts index 3f1dcbc4b..04c7024b3 100644 --- a/packages/quicktype-core/src/input/io/get-stream/index.ts +++ b/packages/quicktype-core/src/input/io/get-stream/index.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { type Readable } from "readable-stream"; +import type { Readable } from "readable-stream"; -import bufferStream from "./buffer-stream"; +import bufferStream, { type BufferedPassThrough } from "./buffer-stream"; export interface Options { array?: boolean; @@ -14,10 +14,10 @@ export async function getStream(inputStream: Readable, opts: Options = {}) { return await Promise.reject(new Error("Expected a stream")); } - opts = Object.assign({ maxBuffer: Infinity }, opts); + opts = Object.assign({ maxBuffer: Number.POSITIVE_INFINITY }, opts); - const maxBuffer = opts.maxBuffer ?? Infinity; - let stream: any; + const maxBuffer = opts.maxBuffer ?? Number.POSITIVE_INFINITY; + let stream: BufferedPassThrough; let clean; const p = new Promise((resolve, reject) => { diff --git a/packages/quicktype-core/src/language/All.ts b/packages/quicktype-core/src/language/All.ts index 637edb373..be1a29a4c 100644 --- a/packages/quicktype-core/src/language/All.ts +++ b/packages/quicktype-core/src/language/All.ts @@ -1,4 +1,4 @@ -import { type TargetLanguage } from "../TargetLanguage"; +import type { TargetLanguage } from "../TargetLanguage"; import { CJSONTargetLanguage } from "./CJSON"; import { CPlusPlusTargetLanguage } from "./CPlusPlus"; @@ -23,7 +23,11 @@ import { RustTargetLanguage } from "./Rust"; import { Scala3TargetLanguage } from "./Scala3"; import { SmithyTargetLanguage } from "./Smithy4s"; import { SwiftTargetLanguage } from "./Swift"; -import { type LanguageDisplayName, type LanguageName, type LanguageNameMap } from "./types"; +import type { + LanguageDisplayName, + LanguageName, + LanguageNameMap, +} from "./types"; import { TypeScriptEffectSchemaTargetLanguage } from "./TypeScriptEffectSchema"; import { FlowTargetLanguage, TypeScriptTargetLanguage } from "./TypeScriptFlow"; import { TypeScriptZodTargetLanguage } from "./TypeScriptZod"; @@ -55,16 +59,18 @@ export const all = [ new SwiftTargetLanguage(), new TypeScriptTargetLanguage(), new TypeScriptEffectSchemaTargetLanguage(), - new TypeScriptZodTargetLanguage() + new TypeScriptZodTargetLanguage(), ] as const; all satisfies readonly TargetLanguage[]; export function languageNamed( name: Name, - targetLanguages: readonly TargetLanguage[] = all + targetLanguages: readonly TargetLanguage[] = all, ): LanguageNameMap[Name] { - const foundLanguage = targetLanguages.find(language => language.names.includes(name)); + const foundLanguage = targetLanguages.find((language) => + language.names.includes(name), + ); if (!foundLanguage) { throw new Error(`Unknown language name: ${name}`); } @@ -73,15 +79,21 @@ export function languageNamed( } export function isLanguageName(maybeName: string): maybeName is LanguageName { - if (all.some(lang => (lang.names as readonly string[]).includes(maybeName))) { + if ( + all.some((lang) => + (lang.names as readonly string[]).includes(maybeName), + ) + ) { return true; } return false; } -export function isLanguageDisplayName(maybeName: string): maybeName is LanguageDisplayName { - if (all.some(lang => lang.displayName === maybeName)) { +export function isLanguageDisplayName( + maybeName: string, +): maybeName is LanguageDisplayName { + if (all.some((lang) => lang.displayName === maybeName)) { return true; } diff --git a/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts b/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts index f52702d91..936a0baa4 100644 --- a/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts +++ b/packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts @@ -4,19 +4,48 @@ import { getAccessorName } from "../../attributes/AccessorNames"; import { enumCaseValues } from "../../attributes/EnumValues"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { type Name, type NameStyle, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type Sourcelike } from "../../Source"; -import { type NamingStyle, allUpperWordStyle, makeNameStyle } from "../../support/Strings"; -import { assert, assertNever, defined, numberEnumValues, panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import { + type Name, + type NameStyle, + type Namer, + funPrefixNamer, +} from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import type { Sourcelike } from "../../Source"; +import { + type NamingStyle, + allUpperWordStyle, + makeNameStyle, +} from "../../support/Strings"; +import { + assert, + assertNever, + defined, + numberEnumValues, + panic, +} from "../../support/Support"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + ClassType, + EnumType, + MapType, + type Type, + UnionType, +} from "../../Type"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type cJSONOptions } from "./language"; +import type { cJSONOptions } from "./language"; import { GlobalNames, IncludeKind, @@ -24,7 +53,7 @@ import { type IncludeRecord, type TypeCJSON, type TypeRecord, - legalizeName + legalizeName, } from "./utils"; export class CJSONRenderer extends ConvenienceRenderer { @@ -44,6 +73,8 @@ export class CJSONRenderer extends ConvenienceRenderer { protected readonly enumeratorNamingStyle: NamingStyle; /* Enum naming style */ + private includes: string[]; + /** * Constructor * @param targetLanguage: target language @@ -53,16 +84,23 @@ export class CJSONRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); this.typeIntegerSize = _options.typeIntegerSize; this.hashtableSize = _options.hashtableSize; this.typeNamingStyle = _options.typeNamingStyle; - this.namedTypeNameStyle = makeNameStyle(this.typeNamingStyle, legalizeName); + this.namedTypeNameStyle = makeNameStyle( + this.typeNamingStyle, + legalizeName, + ); this.enumeratorNamingStyle = _options.enumeratorNamingStyle; - this.memberNameStyle = makeNameStyle(_options.memberNamingStyle, legalizeName); + this.memberNameStyle = makeNameStyle( + _options.memberNamingStyle, + legalizeName, + ); this.forbiddenGlobalNames = []; + this.includes = []; for (const type of numberEnumValues(GlobalNames)) { const genName = this.namedTypeNameStyle(GlobalNames[type]); this.forbiddenGlobalNames.push(genName); @@ -81,7 +119,10 @@ export class CJSONRenderer extends ConvenienceRenderer { * Build forbidden names for enums * @return Forbidden names for enums */ - protected forbiddenForEnumCases(_enumType: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _enumType: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -89,7 +130,10 @@ export class CJSONRenderer extends ConvenienceRenderer { * Build forbidden names for unions members * @return Forbidden names for unions members */ - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -97,7 +141,10 @@ export class CJSONRenderer extends ConvenienceRenderer { * Build forbidden names for objects * @return Forbidden names for objects */ - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -130,7 +177,10 @@ export class CJSONRenderer extends ConvenienceRenderer { * @return enum member namer */ protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enumerators", makeNameStyle(this.enumeratorNamingStyle, legalizeName)); + return funPrefixNamer( + "enumerators", + makeNameStyle(this.enumeratorNamingStyle, legalizeName), + ); } /** @@ -145,9 +195,14 @@ export class CJSONRenderer extends ConvenienceRenderer { unionType: UnionType, unionName: Name, fieldType: Type, - lookup: (n: Name) => string + lookup: (n: Name) => string, ): string { - let fieldName = super.proposeUnionMemberName(unionType, unionName, fieldType, lookup); + let fieldName = super.proposeUnionMemberName( + unionType, + unionName, + fieldType, + lookup, + ); if ("bool" === fieldName) { fieldName = "boolean"; } else if ("double" === fieldName) { @@ -164,7 +219,13 @@ export class CJSONRenderer extends ConvenienceRenderer { */ protected emitTypedefAlias(fieldType: Type, fieldName: Name): void { if (this._options.addTypedefAlias) { - this.emitLine("typedef ", this.quicktypeTypeToCJSON(fieldType, false).cType, " ", fieldName, ";"); + this.emitLine( + "typedef ", + this.quicktypeTypeToCJSON(fieldType, false).cType, + " ", + fieldName, + ";", + ); this.ensureBlankLine(); } } @@ -191,7 +252,7 @@ export class CJSONRenderer extends ConvenienceRenderer { this.startFile(proposedFilename); /* Create types */ - this.forEachDeclaration("leading-and-interposing", decl => { + this.forEachDeclaration("leading-and-interposing", (decl) => { if (decl.kind === "forward") { this.emitLine("struct ", this.nameForNamedType(decl.type), ";"); } else if (decl.kind === "define") { @@ -213,48 +274,63 @@ export class CJSONRenderer extends ConvenienceRenderer { /* Create top level type */ this.forEachTopLevel( "leading", - (type: Type, className: Name) => this.emitTopLevelTypedef(type, className), - type => this.namedTypeToNameForTopLevel(type) === undefined + (type: Type, className: Name) => + this.emitTopLevelTypedef(type, className), + (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); /* Create enum prototypes */ - this.forEachEnum("leading-and-interposing", (enumType: EnumType, _enumName: Name) => - this.emitEnumPrototypes(enumType) + this.forEachEnum( + "leading-and-interposing", + (enumType: EnumType, _enumName: Name) => + this.emitEnumPrototypes(enumType), ); /* Create union prototypes */ - this.forEachUnion("leading-and-interposing", (unionType: UnionType) => this.emitUnionPrototypes(unionType)); + this.forEachUnion("leading-and-interposing", (unionType: UnionType) => + this.emitUnionPrototypes(unionType), + ); /* Create class prototypes */ - this.forEachObject("leading-and-interposing", (classType: ClassType, _className: Name) => - this.emitClassPrototypes(classType) + this.forEachObject( + "leading-and-interposing", + (classType: ClassType, _className: Name) => + this.emitClassPrototypes(classType), ); /* Create top level prototypes */ this.forEachTopLevel( "leading", - (type: Type, className: Name) => this.emitTopLevelPrototypes(type, className), - type => this.namedTypeToNameForTopLevel(type) === undefined + (type: Type, className: Name) => + this.emitTopLevelPrototypes(type, className), + (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); /* Create enum functions */ - this.forEachEnum("leading-and-interposing", (enumType: EnumType, _enumName: Name) => - this.emitEnumFunctions(enumType) + this.forEachEnum( + "leading-and-interposing", + (enumType: EnumType, _enumName: Name) => + this.emitEnumFunctions(enumType), ); /* Create union functions */ - this.forEachUnion("leading-and-interposing", (unionType: UnionType) => this.emitUnionFunctions(unionType)); + this.forEachUnion("leading-and-interposing", (unionType: UnionType) => + this.emitUnionFunctions(unionType), + ); /* Create class functions */ - this.forEachObject("leading-and-interposing", (classType: ClassType, _className: Name) => - this.emitClassFunctions(classType) + this.forEachObject( + "leading-and-interposing", + (classType: ClassType, _className: Name) => + this.emitClassFunctions(classType), ); /* Create top level functions */ this.forEachTopLevel( "leading", - (type: Type, className: Name) => this.emitTopLevelFunctions(type, className), - type => this.namedTypeToNameForTopLevel(type) === undefined + (type: Type, className: Name) => + this.emitTopLevelFunctions(type, className), + (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); /* Close file */ @@ -265,41 +341,38 @@ export class CJSONRenderer extends ConvenienceRenderer { * Function called to create a multiple header files with types and generators */ protected emitMultiSourceStructure(): void { - /* Array of includes */ - let includes: string[]; - /* Create each file */ this.forEachNamedType( "leading-and-interposing", (classType: ClassType, _name: Name) => { - this.emitClass(classType, includes); + this.emitClass(classType); }, (enumType, _name) => { - this.emitEnum(enumType, includes); + this.emitEnum(enumType); }, (unionType, _name) => { - this.emitUnion(unionType, includes); - } + this.emitUnion(unionType); + }, ); /* Create top level file */ this.forEachTopLevel( "leading", - (type: Type, className: Name) => this.emitTopLevel(type, className, includes), - type => this.namedTypeToNameForTopLevel(type) === undefined + (type: Type, className: Name) => + this.emitTopLevel(type, className, this.includes), + (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); } /** * Function called to create an enum header files with types and generators * @param enumType: enum type - * @param includes: Array of includes */ - protected emitEnum(enumType: EnumType, includes: string[]): void { + protected emitEnum(enumType: EnumType): void { /* Create file */ const enumName = this.nameForNamedType(enumType); const filename = this.sourcelikeToString(enumName).concat(".h"); - includes.push(filename); + this.includes.push(filename); this.startFile(filename); /* Create includes */ @@ -332,12 +405,24 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitBlock( ["enum ", enumName], () => { - const combinedName = allUpperWordStyle(this.sourcelikeToString(enumName)); + const combinedName = allUpperWordStyle( + this.sourcelikeToString(enumName), + ); this.forEachEnumCase(enumType, "none", (name, jsonName) => { if (enumValues !== undefined) { - const [enumValue] = getAccessorName(enumValues, jsonName); + const [enumValue] = getAccessorName( + enumValues, + jsonName, + ); if (enumValue !== undefined) { - this.emitLine(combinedName, "_", name, " = ", enumValue.toString(), ","); + this.emitLine( + combinedName, + "_", + name, + " = ", + enumValue.toString(), + ",", + ); } else { this.emitLine(combinedName, "_", name, ","); } @@ -347,7 +432,7 @@ export class CJSONRenderer extends ConvenienceRenderer { }); }, "", - true + true, ); this.ensureBlankLine(); this.emitTypedefAlias(enumType, enumName); @@ -360,8 +445,22 @@ export class CJSONRenderer extends ConvenienceRenderer { protected emitEnumPrototypes(enumType: EnumType): void { const enumName = this.nameForNamedType(enumType); - this.emitLine("enum ", enumName, " cJSON_Get", enumName, "Value(", this.withConst("cJSON"), " * j);"); - this.emitLine("cJSON * cJSON_Create", enumName, "(", this.withConst(["enum ", enumName]), " x);"); + this.emitLine( + "enum ", + enumName, + " cJSON_Get", + enumName, + "Value(", + this.withConst("cJSON"), + " * j);", + ); + this.emitLine( + "cJSON * cJSON_Create", + enumName, + "(", + this.withConst(["enum ", enumName]), + " x);", + ); this.ensureBlankLine(); } @@ -373,61 +472,84 @@ export class CJSONRenderer extends ConvenienceRenderer { const enumName = this.nameForNamedType(enumType); /* Create cJSON to enumName generator function */ - this.emitBlock(["enum ", enumName, " cJSON_Get", enumName, "Value(", this.withConst("cJSON"), " * j)"], () => { - this.emitLine("enum ", enumName, " x = 0;"); - this.emitBlock(["if (NULL != j)"], () => { - let onFirst = true; - const combinedName = allUpperWordStyle(this.sourcelikeToString(enumName)); - this.forEachEnumCase(enumType, "none", (name, jsonName) => { - this.emitLine( - onFirst ? "" : "else ", - 'if (!strcmp(cJSON_GetStringValue(j), "', - jsonName, - '")) x = ', - combinedName, - "_", - name, - ";" + this.emitBlock( + [ + "enum ", + enumName, + " cJSON_Get", + enumName, + "Value(", + this.withConst("cJSON"), + " * j)", + ], + () => { + this.emitLine("enum ", enumName, " x = 0;"); + this.emitBlock(["if (NULL != j)"], () => { + let onFirst = true; + const combinedName = allUpperWordStyle( + this.sourcelikeToString(enumName), ); - onFirst = false; + this.forEachEnumCase(enumType, "none", (name, jsonName) => { + this.emitLine( + onFirst ? "" : "else ", + 'if (!strcmp(cJSON_GetStringValue(j), "', + jsonName, + '")) x = ', + combinedName, + "_", + name, + ";", + ); + onFirst = false; + }); }); - }); - this.emitLine("return x;"); - }); + this.emitLine("return x;"); + }, + ); this.ensureBlankLine(); /* Create enumName to cJSON generator function */ - this.emitBlock(["cJSON * cJSON_Create", enumName, "(", this.withConst(["enum ", enumName]), " x)"], () => { - this.emitLine("cJSON * j = NULL;"); - this.emitBlock(["switch (x)"], () => { - const combinedName = allUpperWordStyle(this.sourcelikeToString(enumName)); - this.forEachEnumCase(enumType, "none", (name, jsonName) => { - this.emitLine( - "case ", - combinedName, - "_", - name, - ': j = cJSON_CreateString("', - jsonName, - '"); break;' + this.emitBlock( + [ + "cJSON * cJSON_Create", + enumName, + "(", + this.withConst(["enum ", enumName]), + " x)", + ], + () => { + this.emitLine("cJSON * j = NULL;"); + this.emitBlock(["switch (x)"], () => { + const combinedName = allUpperWordStyle( + this.sourcelikeToString(enumName), ); + this.forEachEnumCase(enumType, "none", (name, jsonName) => { + this.emitLine( + "case ", + combinedName, + "_", + name, + ': j = cJSON_CreateString("', + jsonName, + '"); break;', + ); + }); }); - }); - this.emitLine("return j;"); - }); + this.emitLine("return j;"); + }, + ); this.ensureBlankLine(); } /** * Function called to create a union header files with types and generators * @param unionType: union type - * @param includes: Array of includes */ - protected emitUnion(unionType: UnionType, includes: string[]): void { + protected emitUnion(unionType: UnionType): void { /* Create file */ const unionName = this.nameForNamedType(unionType); const filename = this.sourcelikeToString(unionName).concat(".h"); - includes.push(filename); + this.includes.push(filename); this.startFile(filename); /* Create includes */ @@ -464,23 +586,26 @@ export class CJSONRenderer extends ConvenienceRenderer { ["union"], () => { for (const type of nonNulls) { - const cJSON = this.quicktypeTypeToCJSON(type, false); + const cJSON = this.quicktypeTypeToCJSON( + type, + false, + ); this.emitLine( cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, " ", this.nameForUnionMember(unionType, type), - ";" + ";", ); } }, "value", - true + true, ); }, "", - true + true, ); this.ensureBlankLine(); this.emitTypedefAlias(unionType, unionName); @@ -493,9 +618,27 @@ export class CJSONRenderer extends ConvenienceRenderer { protected emitUnionPrototypes(unionType: UnionType): void { const unionName = this.nameForNamedType(unionType); - this.emitLine("struct ", unionName, " * cJSON_Get", unionName, "Value(const cJSON * j);"); - this.emitLine("cJSON * cJSON_Create", unionName, "(", this.withConst(["struct ", unionName]), " * x);"); - this.emitLine("void cJSON_Delete", unionName, "(struct ", unionName, " * x);"); + this.emitLine( + "struct ", + unionName, + " * cJSON_Get", + unionName, + "Value(const cJSON * j);", + ); + this.emitLine( + "cJSON * cJSON_Create", + unionName, + "(", + this.withConst(["struct ", unionName]), + " * x);", + ); + this.emitLine( + "void cJSON_Delete", + unionName, + "(struct ", + unionName, + " * x);", + ); this.ensureBlankLine(); } @@ -508,332 +651,32 @@ export class CJSONRenderer extends ConvenienceRenderer { const unionName = this.nameForNamedType(unionType); /* Create cJSON to unionType generator function */ - this.emitBlock(["struct ", unionName, " * cJSON_Get", unionName, "Value(const cJSON * j)"], () => { - let onFirst = true; - this.emitLine("struct ", unionName, " * x = cJSON_malloc(sizeof(struct ", unionName, "));"); - this.emitBlock(["if (NULL != x)"], () => { - this.emitLine("memset(x, 0, sizeof(struct ", unionName, "));"); - if (hasNull !== null) { - this.emitBlock(["if (cJSON_IsNull(j))"], () => { - this.emitLine("x->type = cJSON_NULL;"); - }); - onFirst = false; - } - - for (const type of nonNulls) { - const cJSON = this.quicktypeTypeToCJSON(type, false); - this.emitBlock([onFirst === true ? "if (" : "else if (", cJSON.isType, "(j))"], () => { - this.emitLine("x->type = ", cJSON.cjsonType, ";"); - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { - const level = 0; - const child_level = 1; - this.emitLine(cJSON.cType, " * x", child_level.toString(), " = list_create(false, NULL);"); - this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => { - this.emitLine("cJSON * e", child_level.toString(), " = NULL;"); - this.emitBlock( - [ - "cJSON_ArrayForEach(e", - child_level.toString(), - ", j", - level > 0 ? level.toString() : "", - ")" - ], - () => { - const add = (cJSON: TypeCJSON, level: number, child_level: number) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", (", - cJSON.items?.cType, - " *)0xDEADBEEF, sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if (cJSON.items?.cjsonType === "cJSON_String") { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", strdup(", - cJSON.items?.getValue, - "(e", - child_level.toString(), - ")), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", ", - cJSON.items?.getValue, - "(e", - child_level.toString(), - "), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * tmp", - level > 0 ? level.toString() : "", - " = cJSON_malloc(sizeof(", - cJSON.items?.cType, - "));" - ); - this.emitBlock( - ["if (NULL != tmp", level > 0 ? level.toString() : "", ")"], - () => { - this.emitLine( - "* tmp", - level > 0 ? level.toString() : "", - " = ", - // @ts-expect-error awaiting refactor - cJSON.items?.getValue, - "(e", - child_level.toString(), - ");" - ); - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", tmp", - level > 0 ? level.toString() : "", - ", sizeof(", - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *));" - ); - } - ); - } - }; - - if (cJSON.items?.isNullable) { - this.emitBlock( - ["if (!cJSON_IsNull(e", child_level.toString(), "))"], - () => { - add(cJSON, level, child_level); - } - ); - this.emitBlock(["else"], () => { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", (void *)0xDEADBEEF, sizeof(void *));" - ); - }); - } else { - add(cJSON, level, child_level); - } - } - ); - this.emitLine( - "x->value.", - this.nameForUnionMember(unionType, type), - " = x", - child_level.toString(), - ";" - ); - }); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { - const level = 0; - const child_level = 1; - this.emitLine( - cJSON.cType, - " * x", - child_level.toString(), - " = hashtable_create(", - this.hashtableSize, - ", false);" - ); - this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => { - this.emitLine("cJSON * e", child_level.toString(), " = NULL;"); - this.emitBlock( - [ - "cJSON_ArrayForEach(e", - child_level.toString(), - ", j", - level > 0 ? level.toString() : "", - ")" - ], - () => { - const add = (cJSON: TypeCJSON, level: number, child_level: number) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, (", - cJSON.items?.cType, - " *)0xDEADBEEF, sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if (cJSON.items?.cjsonType === "cJSON_String") { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, strdup(", - cJSON.items?.getValue, - "(e", - child_level.toString(), - ")), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, ", - cJSON.items?.getValue, - "(e", - child_level.toString(), - "), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * tmp", - level > 0 ? level.toString() : "", - " = cJSON_malloc(sizeof(", - cJSON.items?.cType, - "));" - ); - this.emitBlock( - ["if (NULL != tmp", level > 0 ? level.toString() : "", ")"], - () => { - this.emitLine( - "* tmp", - level > 0 ? level.toString() : "", - " = ", - // @ts-expect-error awaiting refactor - cJSON.items?.getValue, - "(e", - child_level.toString(), - ");" - ); - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, tmp", - level > 0 ? level.toString() : "", - ", sizeof(", - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *));" - ); - } - ); - } - }; - - if (cJSON.items?.isNullable) { - this.emitBlock( - ["if (!cJSON_IsNull(e", child_level.toString(), "))"], - () => { - add(cJSON, level, child_level); - } - ); - this.emitBlock(["else"], () => { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, (void *)0xDEADBEEF, sizeof(void *));" - ); - }); - } else { - add(cJSON, level, child_level); - } - } - ); - this.emitLine( - "x->value.", - this.nameForUnionMember(unionType, type), - " = x", - child_level.toString(), - ";" - ); - }); - } else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") { - this.emitLine( - "x->value.", - this.nameForUnionMember(unionType, type), - " = (", - cJSON.cType, - " *)0xDEADBEEF;" - ); - } else if (cJSON.cjsonType === "cJSON_String") { - this.emitLine( - "x->value.", - this.nameForUnionMember(unionType, type), - " = strdup(", - cJSON.getValue, - "(j));" - ); - } else { - this.emitLine( - "x->value.", - this.nameForUnionMember(unionType, type), - " = ", - cJSON.getValue, - "(j);" - ); - } - }); - onFirst = false; - } - }); - this.emitLine("return x;"); - }); - this.ensureBlankLine(); - - /* Create unionName to cJSON generator function */ this.emitBlock( - ["cJSON * cJSON_Create", unionName, "(", this.withConst(["struct ", unionName]), " * x)"], + [ + "struct ", + unionName, + " * cJSON_Get", + unionName, + "Value(const cJSON * j)", + ], () => { - this.emitLine("cJSON * j = NULL;"); + let onFirst = true; + this.emitLine( + "struct ", + unionName, + " * x = cJSON_malloc(sizeof(struct ", + unionName, + "));", + ); this.emitBlock(["if (NULL != x)"], () => { - let onFirst = true; + this.emitLine( + "memset(x, 0, sizeof(struct ", + unionName, + "));", + ); if (hasNull !== null) { - this.emitBlock(["if (cJSON_NULL == x->type)"], () => { - this.emitLine("j = cJSON_CreateNull();"); + this.emitBlock(["if (cJSON_IsNull(j))"], () => { + this.emitLine("x->type = cJSON_NULL;"); }); onFirst = false; } @@ -841,496 +684,1321 @@ export class CJSONRenderer extends ConvenienceRenderer { for (const type of nonNulls) { const cJSON = this.quicktypeTypeToCJSON(type, false); this.emitBlock( - [onFirst === true ? "if (" : "else if (", cJSON.cjsonType, " == x->type)"], + [ + onFirst === true ? "if (" : "else if (", + cJSON.isType, + "(j))", + ], () => { - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { + this.emitLine( + "x->type = ", + cJSON.cjsonType, + ";", + ); + if ( + cJSON.cjsonType === "cJSON_Array" && + cJSON.items !== undefined + ) { const level = 0; const child_level = 1; this.emitLine( - "cJSON * j", + cJSON.cType, + " * x", child_level.toString(), - " = ", - cJSON.createObject, - "();" + " = list_create(false, NULL);", ); - this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * x", + this.emitBlock( + [ + "if (NULL != x", child_level.toString(), - " = list_get_head(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ");" - ); - this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { - const add = (cJSON: TypeCJSON, child_level: number) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.items?.cjsonType === "cJSON_NULL") { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - cJSON.items?.createObject, - "());" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_String" || - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - cJSON.items?.createObject, - "(x", - child_level.toString(), - "));" - ); - } else { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - // @ts-expect-error awaiting refactor - cJSON.items?.createObject, - "(*x", - child_level.toString(), - "));" - ); - } - }; + ")", + ], + () => { + this.emitLine( + "cJSON * e", + child_level.toString(), + " = NULL;", + ); + this.emitBlock( + [ + "cJSON_ArrayForEach(e", + child_level.toString(), + ", j", + level > 0 + ? level.toString() + : "", + ")", + ], + () => { + const add = ( + cJSON: TypeCJSON, + level: number, + child_level: number, + ) => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" || + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", (", + cJSON.items + ?.cType, + " *)0xDEADBEEF, sizeof(", + cJSON.items + ?.cType, + " *));", + ); + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_String" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", strdup(", + cJSON.items + ?.getValue, + "(e", + child_level.toString(), + ")), sizeof(", + cJSON.items + ?.cType, + " *));", + ); + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Object" || + cJSON.items + ?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", ", + cJSON.items + ?.getValue, + "(e", + child_level.toString(), + "), sizeof(", + cJSON.items + ?.cType, + " *));", + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.cType, + " * tmp", + level > 0 + ? level.toString() + : "", + " = cJSON_malloc(sizeof(", + cJSON.items + ?.cType, + "));", + ); + this.emitBlock( + [ + "if (NULL != tmp", + level > 0 + ? level.toString() + : "", + ")", + ], + () => { + this.emitLine( + "* tmp", + level > + 0 + ? level.toString() + : "", + " = ", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + ");", + ); + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", tmp", + level > + 0 + ? level.toString() + : "", + ", sizeof(", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.cType, + " *));", + ); + }, + ); + } + }; - if (cJSON.items?.isNullable) { - this.emitBlock( - ["if ((void *)0xDEADBEEF != x", child_level.toString(), ")"], - () => { - add(cJSON, child_level); + if ( + cJSON.items?.isNullable + ) { + this.emitBlock( + [ + "if (!cJSON_IsNull(e", + child_level.toString(), + "))", + ], + () => { + add( + cJSON, + level, + child_level, + ); + }, + ); + this.emitBlock( + ["else"], + () => { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", (void *)0xDEADBEEF, sizeof(void *));", + ); + }, + ); + } else { + add( + cJSON, + level, + child_level, + ); } - ); - this.emitBlock(["else"], () => { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", cJSON_CreateNull());" - ); - }); - } else { - add(cJSON, child_level); - } - + }, + ); this.emitLine( - "x", + "x->value.", + this.nameForUnionMember( + unionType, + type, + ), + " = x", child_level.toString(), - " = list_get_next(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ");" + ";", ); - }); - this.emitLine("j = j", child_level.toString(), ";"); - }); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Map" && + cJSON.items !== undefined + ) { const level = 0; const child_level = 1; this.emitLine( - "cJSON * j", + cJSON.cType, + " * x", child_level.toString(), - " = ", - cJSON.createObject, - "();" + " = hashtable_create(", + this.hashtableSize, + ", false);", ); - this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => { - this.emitLine("char **keys", child_level.toString(), " = NULL;"); - this.emitLine( - "size_t count", - child_level.toString(), - " = hashtable_get_keys(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ", &keys", + this.emitBlock( + [ + "if (NULL != x", child_level.toString(), - ");" - ); - this.emitBlock(["if (NULL != keys", child_level.toString(), ")"], () => { + ")", + ], + () => { + this.emitLine( + "cJSON * e", + child_level.toString(), + " = NULL;", + ); this.emitBlock( [ - "for (size_t index", - child_level.toString(), - " = 0; index", - child_level.toString(), - " < count", + "cJSON_ArrayForEach(e", child_level.toString(), - "; index", - child_level.toString(), - "++)" + ", j", + level > 0 + ? level.toString() + : "", + ")", ], () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *x", - child_level.toString(), - " = hashtable_lookup(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ", keys", - child_level.toString(), - "[index", - child_level.toString(), - "]);" - ); - const add = (cJSON: TypeCJSON, child_level: number) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { + const add = ( + cJSON: TypeCJSON, + level: number, + child_level: number, + ) => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.items?.cjsonType === "cJSON_NULL") { + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" || + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { this.emitLine( - cJSON.addToObject, - "(j", + "hashtable_add(x", child_level.toString(), - ", keys", - child_level.toString(), - "[index", + ", e", child_level.toString(), - "], ", - cJSON.items?.createObject, - "());" + "->string, (", + cJSON.items + ?.cType, + " *)0xDEADBEEF, sizeof(", + cJSON.items + ?.cType, + " *));", ); } else if ( - cJSON.items?.cjsonType === "cJSON_String" || - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" + cJSON.items + ?.cjsonType === + "cJSON_String" ) { this.emitLine( - cJSON.addToObject, - "(j", - child_level.toString(), - ", keys", + "hashtable_add(x", child_level.toString(), - "[index", + ", e", child_level.toString(), - "], ", - cJSON.items?.createObject, - "(x", + "->string, strdup(", + cJSON.items + ?.getValue, + "(e", child_level.toString(), - "));" + ")), sizeof(", + cJSON.items + ?.cType, + " *));", ); - } else { + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Object" || + cJSON.items + ?.cjsonType === + "cJSON_Union" + ) { this.emitLine( - cJSON.addToObject, - "(j", + "hashtable_add(x", child_level.toString(), - ", keys", + ", e", child_level.toString(), - "[index", + "->string, ", + cJSON.items + ?.getValue, + "(e", child_level.toString(), - "], ", + "), sizeof(", + cJSON.items + ?.cType, + " *));", + ); + } else { + this.emitLine( // @ts-expect-error awaiting refactor - cJSON.items?.createObject, - "(*x", - child_level.toString(), - "));" + cJSON.items + ?.cType, + " * tmp", + level > 0 + ? level.toString() + : "", + " = cJSON_malloc(sizeof(", + cJSON.items + ?.cType, + "));", + ); + this.emitBlock( + [ + "if (NULL != tmp", + level > 0 + ? level.toString() + : "", + ")", + ], + () => { + this.emitLine( + "* tmp", + level > + 0 + ? level.toString() + : "", + " = ", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + ");", + ); + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, tmp", + level > + 0 + ? level.toString() + : "", + ", sizeof(", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.cType, + " *));", + ); + }, ); } }; - if (cJSON.items?.isNullable) { + if ( + cJSON.items?.isNullable + ) { this.emitBlock( [ - "if ((void *)0xDEADBEEF != x", + "if (!cJSON_IsNull(e", child_level.toString(), - ")" + "))", ], () => { - add(cJSON, child_level); - } + add( + cJSON, + level, + child_level, + ); + }, + ); + this.emitBlock( + ["else"], + () => { + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, (void *)0xDEADBEEF, sizeof(void *));", + ); + }, ); - this.emitBlock(["else"], () => { - this.emitLine( - cJSON.addToObject, - "(j", - child_level.toString(), - ", keys", - child_level.toString(), - "[index", - child_level.toString(), - "], cJSON_CreateNull());" - ); - }); } else { - add(cJSON, child_level); + add( + cJSON, + level, + child_level, + ); } - } + }, ); - this.emitLine("cJSON_free(keys", child_level.toString(), ");"); - }); - this.emitLine("j = j", child_level.toString(), ";"); - }); - } else if (cJSON.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.cjsonType === "cJSON_NULL") { - this.emitLine("j = ", cJSON.createObject, "();"); + this.emitLine( + "x->value.", + this.nameForUnionMember( + unionType, + type, + ), + " = x", + child_level.toString(), + ";", + ); + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Invalid" || + cJSON.cjsonType === "cJSON_NULL" + ) { + this.emitLine( + "x->value.", + this.nameForUnionMember( + unionType, + type, + ), + " = (", + cJSON.cType, + " *)0xDEADBEEF;", + ); + } else if (cJSON.cjsonType === "cJSON_String") { + this.emitLine( + "x->value.", + this.nameForUnionMember( + unionType, + type, + ), + " = strdup(", + cJSON.getValue, + "(j));", + ); } else { this.emitLine( - "j = ", - cJSON.createObject, - "(x->value.", - this.nameForUnionMember(unionType, type), - ");" + "x->value.", + this.nameForUnionMember( + unionType, + type, + ), + " = ", + cJSON.getValue, + "(j);", ); } - } + }, ); onFirst = false; } }); - this.emitLine("return j;"); - } + this.emitLine("return x;"); + }, ); this.ensureBlankLine(); - /* Create unionName delete function */ - this.emitBlock(["void cJSON_Delete", unionName, "(struct ", unionName, " * x)"], () => { - this.emitBlock(["if (NULL != x)"], () => { - let onFirst = true; - for (const type of nonNulls) { - const cJSON = this.quicktypeTypeToCJSON(type, false); - this.emitBlock([onFirst === true ? "if (" : "else if (", cJSON.cjsonType, " == x->type)"], () => { - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { - const level = 0; - const child_level = 1; - this.emitBlock( - [ - "if (NULL != x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ")" - ], - () => { + /* Create unionName to cJSON generator function */ + this.emitBlock( + [ + "cJSON * cJSON_Create", + unionName, + "(", + this.withConst(["struct ", unionName]), + " * x)", + ], + () => { + this.emitLine("cJSON * j = NULL;"); + this.emitBlock(["if (NULL != x)"], () => { + let onFirst = true; + if (hasNull !== null) { + this.emitBlock(["if (cJSON_NULL == x->type)"], () => { + this.emitLine("j = cJSON_CreateNull();"); + }); + onFirst = false; + } + + for (const type of nonNulls) { + const cJSON = this.quicktypeTypeToCJSON(type, false); + this.emitBlock( + [ + onFirst === true ? "if (" : "else if (", + cJSON.cjsonType, + " == x->type)", + ], + () => { + if ( + cJSON.cjsonType === "cJSON_Array" && + cJSON.items !== undefined + ) { + const level = 0; + const child_level = 1; this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * x", + "cJSON * j", child_level.toString(), - " = list_get_head(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ");" + " = ", + cJSON.createObject, + "();", ); - this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - /* Nothing to do */ - } else { - if (cJSON.items?.isNullable) { - this.emitBlock( - ["if ((void *)0xDEADBEEF != x", child_level.toString(), ")"], - () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" + this.emitBlock( + [ + "if (NULL != j", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.cType, + " * x", + child_level.toString(), + " = list_get_head(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", + ); + this.emitBlock( + [ + "while (NULL != x", + child_level.toString(), + ")", + ], + () => { + const add = ( + cJSON: TypeCJSON, + child_level: number, + ) => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + cJSON.items + ?.createObject, + "());", + ); + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_String" || + cJSON.items + ?.cjsonType === + "cJSON_Object" || + cJSON.items + ?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + cJSON.items + ?.createObject, + "(x", + child_level.toString(), + "));", + ); + } else { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + // @ts-expect-error awaiting refactor + cJSON.items + ?.createObject, + "(*x", + child_level.toString(), + "));", + ); + } + }; + + if ( + cJSON.items?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + add( + cJSON, + child_level, + ); + }, + ); + this.emitBlock( + ["else"], + () => { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", cJSON_CreateNull());", + ); + }, ); + } else { + add(cJSON, child_level); } - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" - ); - } - } - this.emitLine( - "x", - child_level.toString(), - " = list_get_next(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ");" - ); - }); - this.emitLine( - cJSON.deleteType, - "(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ");" + this.emitLine( + "x", + child_level.toString(), + " = list_get_next(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", + ); + }, + ); + this.emitLine( + "j = j", + child_level.toString(), + ";", + ); + }, ); - } - ); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { - const level = 0; - const child_level = 1; - this.emitBlock( - [ - "if (NULL != x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ")" - ], - () => { - this.emitLine("char **keys", child_level.toString(), " = NULL;"); + } else if ( + cJSON.cjsonType === "cJSON_Map" && + cJSON.items !== undefined + ) { + const level = 0; + const child_level = 1; this.emitLine( - "size_t count", - child_level.toString(), - " = hashtable_get_keys(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ", &keys", + "cJSON * j", child_level.toString(), - ");" + " = ", + cJSON.createObject, + "();", ); - this.emitBlock(["if (NULL != keys", child_level.toString(), ")"], () => { - this.emitBlock( - [ - "for (size_t index", - child_level.toString(), - " = 0; index", + this.emitBlock( + [ + "if (NULL != j", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + "char **keys", child_level.toString(), - " < count", + " = NULL;", + ); + this.emitLine( + "size_t count", child_level.toString(), - "; index", + " = hashtable_get_keys(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ", &keys", child_level.toString(), - "++)" - ], - () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *x", - child_level.toString(), - " = hashtable_lookup(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ", keys", - child_level.toString(), - "[index", + ");", + ); + this.emitBlock( + [ + "if (NULL != keys", child_level.toString(), - "]);" - ); - this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - /* Nothing to do */ - } else { - if (cJSON.items?.isNullable) { - this.emitBlock( - [ - "if ((void *)0xDEADBEEF != x", - child_level.toString(), - ")" - ], - () => { + ")", + ], + () => { + this.emitBlock( + [ + "for (size_t index", + child_level.toString(), + " = 0; index", + child_level.toString(), + " < count", + child_level.toString(), + "; index", + child_level.toString(), + "++)", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.cType, + " *x", + child_level.toString(), + " = hashtable_lookup(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "]);", + ); + const add = ( + cJSON: TypeCJSON, + child_level: number, + ) => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], ", + cJSON + .items + ?.createObject, + "());", + ); + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_String" || + cJSON.items + ?.cjsonType === + "cJSON_Object" || + cJSON.items + ?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], ", + cJSON + .items + ?.createObject, "(x", child_level.toString(), - ");" + "));", + ); + } else { + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], ", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.createObject, + "(*x", + child_level.toString(), + "));", ); } - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" - ); - } - } - }); - } - ); - this.emitLine("cJSON_free(keys", child_level.toString(), ");"); - }); + }; + + if ( + cJSON.items + ?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + add( + cJSON, + child_level, + ); + }, + ); + this.emitBlock( + ["else"], + () => { + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], cJSON_CreateNull());", + ); + }, + ); + } else { + add( + cJSON, + child_level, + ); + } + }, + ); + this.emitLine( + "cJSON_free(keys", + child_level.toString(), + ");", + ); + }, + ); + this.emitLine( + "j = j", + child_level.toString(), + ";", + ); + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if (cJSON.cjsonType === "cJSON_NULL") { this.emitLine( - cJSON.deleteType, - "(x", - level > 0 ? level.toString() : "", - "->value.", - this.nameForUnionMember(unionType, type), - ");" + "j = ", + cJSON.createObject, + "();", + ); + } else { + this.emitLine( + "j = ", + cJSON.createObject, + "(x->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", ); } - ); - } else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") { - /* Nothing to do */ - } else if ( - cJSON.cjsonType === "cJSON_String" || - cJSON.cjsonType === "cJSON_Object" || - cJSON.cjsonType === "cJSON_Union" - ) { - this.emitLine( - cJSON.deleteType, - "(x->value.", - this.nameForUnionMember(unionType, type), - ");" - ); - } else { - /* Nothing to do */ - } - }); - onFirst = false; - } - - this.emitLine("cJSON_free(x);"); - }); - }); + }, + ); + onFirst = false; + } + }); + this.emitLine("return j;"); + }, + ); + this.ensureBlankLine(); + + /* Create unionName delete function */ + this.emitBlock( + ["void cJSON_Delete", unionName, "(struct ", unionName, " * x)"], + () => { + this.emitBlock(["if (NULL != x)"], () => { + let onFirst = true; + for (const type of nonNulls) { + const cJSON = this.quicktypeTypeToCJSON(type, false); + this.emitBlock( + [ + onFirst === true ? "if (" : "else if (", + cJSON.cjsonType, + " == x->type)", + ], + () => { + if ( + cJSON.cjsonType === "cJSON_Array" && + cJSON.items !== undefined + ) { + const level = 0; + const child_level = 1; + this.emitBlock( + [ + "if (NULL != x", + level > 0 ? level.toString() : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.cType, + " * x", + child_level.toString(), + " = list_get_head(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", + ); + this.emitBlock( + [ + "while (NULL != x", + child_level.toString(), + ")", + ], + () => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" || + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { + /* Nothing to do */ + } else { + if ( + cJSON.items + ?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + }, + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + } + } + + this.emitLine( + "x", + child_level.toString(), + " = list_get_next(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", + ); + }, + ); + this.emitLine( + cJSON.deleteType, + "(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", + ); + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Map" && + cJSON.items !== undefined + ) { + const level = 0; + const child_level = 1; + this.emitBlock( + [ + "if (NULL != x", + level > 0 ? level.toString() : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ")", + ], + () => { + this.emitLine( + "char **keys", + child_level.toString(), + " = NULL;", + ); + this.emitLine( + "size_t count", + child_level.toString(), + " = hashtable_get_keys(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ", &keys", + child_level.toString(), + ");", + ); + this.emitBlock( + [ + "if (NULL != keys", + child_level.toString(), + ")", + ], + () => { + this.emitBlock( + [ + "for (size_t index", + child_level.toString(), + " = 0; index", + child_level.toString(), + " < count", + child_level.toString(), + "; index", + child_level.toString(), + "++)", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.cType, + " *x", + child_level.toString(), + " = hashtable_lookup(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "]);", + ); + this.emitBlock( + [ + "if (NULL != x", + child_level.toString(), + ")", + ], + () => { + if ( + cJSON + .items + ?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Invalid" || + cJSON + .items + ?.cjsonType === + "cJSON_NULL" + ) { + /* Nothing to do */ + } else { + if ( + cJSON + .items + ?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + }, + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + } + } + }, + ); + }, + ); + this.emitLine( + "cJSON_free(keys", + child_level.toString(), + ");", + ); + }, + ); + this.emitLine( + cJSON.deleteType, + "(x", + level > 0 + ? level.toString() + : "", + "->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", + ); + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Invalid" || + cJSON.cjsonType === "cJSON_NULL" + ) { + /* Nothing to do */ + } else if ( + cJSON.cjsonType === "cJSON_String" || + cJSON.cjsonType === "cJSON_Object" || + cJSON.cjsonType === "cJSON_Union" + ) { + this.emitLine( + cJSON.deleteType, + "(x->value.", + this.nameForUnionMember( + unionType, + type, + ), + ");", + ); + } else { + /* Nothing to do */ + } + }, + ); + onFirst = false; + } + + this.emitLine("cJSON_free(x);"); + }); + }, + ); this.ensureBlankLine(); } /** * Function called to create a class header files with types and generators * @param classType: class type - * @param includes: Array of includes */ - protected emitClass(classType: ClassType, includes: string[]): void { + protected emitClass(classType: ClassType): void { /* Create file */ const className = this.nameForNamedType(classType); const filename = this.sourcelikeToString(className).concat(".h"); - includes.push(filename); + this.includes.push(filename); this.startFile(filename); /* Create includes */ @@ -1360,21 +2028,33 @@ export class CJSONRenderer extends ConvenienceRenderer { this.emitBlock( ["struct ", className], () => { - this.forEachClassProperty(classType, "none", (name, jsonName, property) => { - this.emitDescription(this.descriptionForClassProperty(classType, jsonName)); - const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional); - this.emitLine( - cJSON.cType, - cJSON.optionalQualifier !== "" ? " " : "", - cJSON.optionalQualifier, - " ", - name, - ";" - ); - }); + this.forEachClassProperty( + classType, + "none", + (name, jsonName, property) => { + this.emitDescription( + this.descriptionForClassProperty( + classType, + jsonName, + ), + ); + const cJSON = this.quicktypeTypeToCJSON( + property.type, + property.isOptional, + ); + this.emitLine( + cJSON.cType, + cJSON.optionalQualifier !== "" ? " " : "", + cJSON.optionalQualifier, + " ", + name, + ";", + ); + }, + ); }, "", - true + true, ); this.ensureBlankLine(); this.emitTypedefAlias(classType, className); @@ -1387,11 +2067,45 @@ export class CJSONRenderer extends ConvenienceRenderer { protected emitClassPrototypes(classType: ClassType): void { const className = this.nameForNamedType(classType); - this.emitLine("struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s);"); - this.emitLine("struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j);"); - this.emitLine("cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x);"); - this.emitLine("char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x);"); - this.emitLine("void cJSON_Delete", className, "(struct ", className, " * x);"); + this.emitLine( + "struct ", + className, + " * cJSON_Parse", + className, + "(", + this.withConst("char"), + " * s);", + ); + this.emitLine( + "struct ", + className, + " * cJSON_Get", + className, + "Value(", + this.withConst("cJSON"), + " * j);", + ); + this.emitLine( + "cJSON * cJSON_Create", + className, + "(", + this.withConst(["struct ", className]), + " * x);", + ); + this.emitLine( + "char * cJSON_Print", + className, + "(", + this.withConst(["struct ", className]), + " * x);", + ); + this.emitLine( + "void cJSON_Delete", + className, + "(struct ", + className, + " * x);", + ); this.ensureBlankLine(); } @@ -1404,7 +2118,15 @@ export class CJSONRenderer extends ConvenienceRenderer { /* Create string to className generator function */ this.emitBlock( - ["struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s)"], + [ + "struct ", + className, + " * cJSON_Parse", + className, + "(", + this.withConst("char"), + " * s)", + ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != s)"], () => { @@ -1415,1529 +2137,2470 @@ export class CJSONRenderer extends ConvenienceRenderer { }); }); this.emitLine("return x;"); - } + }, ); this.ensureBlankLine(); /* Create cJSON to className generator function */ this.emitBlock( - ["struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j)"], + [ + "struct ", + className, + " * cJSON_Get", + className, + "Value(", + this.withConst("cJSON"), + " * j)", + ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != j)"], () => { - this.emitBlock(["if (NULL != (x = cJSON_malloc(sizeof(struct ", className, "))))"], () => { - this.emitLine("memset(x, 0, sizeof(struct ", className, "));"); - const recur = (type: Type, level: number) => { - if (type instanceof ArrayType) { - const child_level = level + 1; - const cJSON = this.quicktypeTypeToCJSON(type.items, false); - this.emitLine("list_t * x", child_level.toString(), " = list_create(false, NULL);"); - this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => { - this.emitLine("cJSON * e", child_level.toString(), " = NULL;"); + this.emitBlock( + [ + "if (NULL != (x = cJSON_malloc(sizeof(struct ", + className, + "))))", + ], + () => { + this.emitLine( + "memset(x, 0, sizeof(struct ", + className, + "));", + ); + const recur = (type: Type, level: number) => { + if (type instanceof ArrayType) { + const child_level = level + 1; + const cJSON = this.quicktypeTypeToCJSON( + type.items, + false, + ); + this.emitLine( + "list_t * x", + child_level.toString(), + " = list_create(false, NULL);", + ); this.emitBlock( - ["cJSON_ArrayForEach(e", child_level.toString(), ", e", level.toString(), ")"], + [ + "if (NULL != x", + child_level.toString(), + ")", + ], () => { - if (cJSON.cjsonType === "cJSON_Array") { - const child_level2 = child_level + 1; - recur(type.items, child_level); - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", x", - child_level2.toString(), - ", sizeof(", - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *));" - ); - } else if (cJSON.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.cjsonType === "cJSON_Invalid" || - cJSON.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", (", - cJSON.cType, - " *)0xDEADBEEF, sizeof(", - cJSON.cType, - " *));" - ); - } else if (cJSON.cjsonType === "cJSON_String") { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", strdup(", - cJSON.getValue, - "(e", - child_level.toString(), - ")), sizeof(", - cJSON.cType, - " *));" - ); - } else if ( - cJSON.cjsonType === "cJSON_Object" || - cJSON.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", ", - cJSON.getValue, - "(e", + this.emitLine( + "cJSON * e", + child_level.toString(), + " = NULL;", + ); + this.emitBlock( + [ + "cJSON_ArrayForEach(e", child_level.toString(), - "), sizeof(", - cJSON.cType, - " *));" - ); - } else { - this.emitLine( - cJSON.cType, - " * tmp", - level > 0 ? level.toString() : "", - " = cJSON_malloc(sizeof(", - cJSON.cType, - "));" - ); - this.emitBlock( - ["if (NULL != tmp", level > 0 ? level.toString() : "", ")"], - () => { + ", e", + level.toString(), + ")", + ], + () => { + if ( + cJSON.cjsonType === + "cJSON_Array" + ) { + const child_level2 = + child_level + 1; + recur( + type.items, + child_level, + ); this.emitLine( - "* tmp", - level > 0 ? level.toString() : "", - " = ", + "list_add_tail(x", + child_level.toString(), + ", x", + child_level2.toString(), + ", sizeof(", + // @ts-expect-error awaiting refactor + cJSON.items?.cType, + " *));", + ); + } else if ( + cJSON.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.cjsonType === + "cJSON_Invalid" || + cJSON.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", (", + cJSON.cType, + " *)0xDEADBEEF, sizeof(", + cJSON.cType, + " *));", + ); + } else if ( + cJSON.cjsonType === + "cJSON_String" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", strdup(", cJSON.getValue, "(e", child_level.toString(), - ");" + ")), sizeof(", + cJSON.cType, + " *));", ); + } else if ( + cJSON.cjsonType === + "cJSON_Object" || + cJSON.cjsonType === + "cJSON_Union" + ) { this.emitLine( "list_add_tail(x", child_level.toString(), - ", tmp", - level > 0 ? level.toString() : "", - ", sizeof(", + ", ", + cJSON.getValue, + "(e", + child_level.toString(), + "), sizeof(", cJSON.cType, - " *));" + " *));", ); - } - ); - } - } - ); - }); - } else if (type instanceof ClassType) { - this.forEachClassProperty(type, "none", (name, jsonName, property) => { - const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional); - this.emitBlock( - !cJSON.isNullable - ? [ - "if (cJSON_HasObjectItem(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '"))' - ] - : [ - "if ((cJSON_HasObjectItem(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '")) && (!cJSON_IsNull(cJSON_GetObjectItemCaseSensitive(j', - level > 0 ? level.toString() : "", - ', "', - jsonName, - '"))))' - ], - () => { - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { - const child_level = level + 1; - this.emitLine( - cJSON.cType, - " * x", - child_level.toString(), - " = list_create(false, NULL);" + } else { + this.emitLine( + cJSON.cType, + " * tmp", + level > 0 + ? level.toString() + : "", + " = cJSON_malloc(sizeof(", + cJSON.cType, + "));", + ); + this.emitBlock( + [ + "if (NULL != tmp", + level > 0 + ? level.toString() + : "", + ")", + ], + () => { + this.emitLine( + "* tmp", + level > 0 + ? level.toString() + : "", + " = ", + cJSON.getValue, + "(e", + child_level.toString(), + ");", + ); + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", tmp", + level > 0 + ? level.toString() + : "", + ", sizeof(", + cJSON.cType, + " *));", + ); + }, + ); + } + }, + ); + }, + ); + } else if (type instanceof ClassType) { + this.forEachClassProperty( + type, + "none", + (name, jsonName, property) => { + const cJSON = + this.quicktypeTypeToCJSON( + property.type, + property.isOptional, ); - this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => { - this.emitLine("cJSON * e", child_level.toString(), " = NULL;"); - this.emitLine( - "cJSON * j", - child_level.toString(), - " = cJSON_GetObjectItemCaseSensitive(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '");' - ); - this.emitBlock( - [ - "cJSON_ArrayForEach(e", - child_level.toString(), - ", j", + this.emitBlock( + !cJSON.isNullable + ? [ + "if (cJSON_HasObjectItem(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '"))', + ] + : [ + "if ((cJSON_HasObjectItem(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '")) && (!cJSON_IsNull(cJSON_GetObjectItemCaseSensitive(j', + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '"))))', + ], + () => { + if ( + cJSON.cjsonType === + "cJSON_Array" && + cJSON.items !== + undefined + ) { + const child_level = + level + 1; + this.emitLine( + cJSON.cType, + " * x", child_level.toString(), - ")" - ], - () => { - const add = ( - type: Type, - cJSON: TypeCJSON, - level: number, - child_level: number - ) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - if (type instanceof ArrayType) { - const child_level2 = child_level + 1; - recur(type.items, child_level); - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", x", - child_level2.toString(), - ", sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - panic("Invalid type"); - } - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", (", - cJSON.items?.cType, - " *)0xDEADBEEF, sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if (cJSON.items?.cjsonType === "cJSON_String") { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", strdup(", - cJSON.items?.getValue, - "(e", - child_level.toString(), - ")), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", ", - cJSON.items?.getValue, - "(e", - child_level.toString(), - "), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * tmp", - level > 0 ? level.toString() : "", - " = cJSON_malloc(sizeof(", - cJSON.items?.cType, - "));" - ); - this.emitBlock( - [ - "if (NULL != tmp", - level > 0 ? level.toString() : "", - ")" - ], - () => { - this.emitLine( - "* tmp", - level > 0 ? level.toString() : "", - " = ", - // @ts-expect-error awaiting refactor - cJSON.items?.getValue, - "(e", - child_level.toString(), - ");" - ); - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", tmp", - level > 0 ? level.toString() : "", - ", sizeof(", - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *));" - ); - } - ); - } - }; - - if (cJSON.items?.isNullable) { + " = list_create(false, NULL);", + ); + this.emitBlock( + [ + "if (NULL != x", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + "cJSON * e", + child_level.toString(), + " = NULL;", + ); + this.emitLine( + "cJSON * j", + child_level.toString(), + " = cJSON_GetObjectItemCaseSensitive(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '");', + ); this.emitBlock( [ - "if (!cJSON_IsNull(e", + "cJSON_ArrayForEach(e", + child_level.toString(), + ", j", child_level.toString(), - "))" + ")", ], () => { - add(property.type, cJSON, level, child_level); - } - ); - this.emitBlock(["else"], () => { - this.emitLine( - "list_add_tail(x", - child_level.toString(), - ", (void *)0xDEADBEEF, sizeof(void *));" - ); - }); - } else { - add(property.type, cJSON, level, child_level); - } - } - ); - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = x", - child_level.toString(), - ";" - ); - }); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { - const child_level = level + 1; - this.emitLine( - cJSON.cType, - " * x", - child_level.toString(), - " = hashtable_create(", - this.hashtableSize, - ", false);" - ); - this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => { - this.emitLine("cJSON * e", child_level.toString(), " = NULL;"); - this.emitLine( - "cJSON * j", - child_level.toString(), - " = cJSON_GetObjectItemCaseSensitive(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '");' - ); - this.emitBlock( - [ - "cJSON_ArrayForEach(e", - child_level.toString(), - ", j", - child_level.toString(), - ")" - ], - () => { - const add = ( - type: Type, - cJSON: TypeCJSON, - level: number, - child_level: number - ) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - if (type instanceof MapType) { - const child_level2 = child_level + 1; - recur(type.values, child_level); - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, x", - child_level2.toString(), - ", sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - panic("Invalid type"); - } - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, (", - cJSON.items?.cType, - " *)0xDEADBEEF, sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if (cJSON.items?.cjsonType === "cJSON_String") { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, strdup(", - cJSON.items?.getValue, - "(e", - child_level.toString(), - ")), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, ", - cJSON.items?.getValue, - "(e", - child_level.toString(), - "), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * tmp", - level > 0 ? level.toString() : "", - " = cJSON_malloc(sizeof(", - cJSON.items?.cType, - "));" - ); - this.emitBlock( - [ - "if (NULL != tmp", - level > 0 ? level.toString() : "", - ")" - ], - () => { - this.emitLine( - "* tmp", - level > 0 ? level.toString() : "", - " = ", - // @ts-expect-error awaiting refactor - cJSON.items?.getValue, - "(e", - child_level.toString(), - ");" + const add = + ( + type: Type, + cJSON: TypeCJSON, + level: number, + child_level: number, + ) => { + if ( + cJSON + .items + ?.cjsonType === + "cJSON_Array" + ) { + if ( + type instanceof + ArrayType + ) { + const child_level2 = + child_level + + 1; + recur( + type.items, + child_level, + ); + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", x", + child_level2.toString(), + ", sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else { + panic( + "Invalid type", + ); + } + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Invalid" || + cJSON + .items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", (", + cJSON + .items + ?.cType, + " *)0xDEADBEEF, sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_String" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", strdup(", + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + ")), sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Object" || + cJSON + .items + ?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", ", + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + "), sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.cType, + " * tmp", + level > + 0 + ? level.toString() + : "", + " = cJSON_malloc(sizeof(", + cJSON + .items + ?.cType, + "));", + ); + this.emitBlock( + [ + "if (NULL != tmp", + level > + 0 + ? level.toString() + : "", + ")", + ], + () => { + this.emitLine( + "* tmp", + level > + 0 + ? level.toString() + : "", + " = ", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + ");", + ); + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", tmp", + level > + 0 + ? level.toString() + : "", + ", sizeof(", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.cType, + " *));", + ); + }, + ); + } + }; + + if ( + cJSON + .items + ?.isNullable + ) { + this.emitBlock( + [ + "if (!cJSON_IsNull(e", + child_level.toString(), + "))", + ], + () => { + add( + property.type, + cJSON, + level, + child_level, + ); + }, ); - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, tmp", - level > 0 ? level.toString() : "", - ", sizeof(", - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *));" + this.emitBlock( + [ + "else", + ], + () => { + this.emitLine( + "list_add_tail(x", + child_level.toString(), + ", (void *)0xDEADBEEF, sizeof(void *));", + ); + }, + ); + } else { + add( + property.type, + cJSON, + level, + child_level, ); } - ); - } - }; - - if (cJSON.items?.isNullable) { + }, + ); + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = x", + child_level.toString(), + ";", + ); + }, + ); + } else if ( + cJSON.cjsonType === + "cJSON_Map" && + cJSON.items !== + undefined + ) { + const child_level = + level + 1; + this.emitLine( + cJSON.cType, + " * x", + child_level.toString(), + " = hashtable_create(", + this.hashtableSize, + ", false);", + ); + this.emitBlock( + [ + "if (NULL != x", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + "cJSON * e", + child_level.toString(), + " = NULL;", + ); + this.emitLine( + "cJSON * j", + child_level.toString(), + " = cJSON_GetObjectItemCaseSensitive(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '");', + ); this.emitBlock( [ - "if (!cJSON_IsNull(e", + "cJSON_ArrayForEach(e", + child_level.toString(), + ", j", child_level.toString(), - "))" + ")", ], () => { - add(property.type, cJSON, level, child_level); - } + const add = + ( + type: Type, + cJSON: TypeCJSON, + level: number, + child_level: number, + ) => { + if ( + cJSON + .items + ?.cjsonType === + "cJSON_Array" + ) { + if ( + type instanceof + MapType + ) { + const child_level2 = + child_level + + 1; + recur( + type.values, + child_level, + ); + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, x", + child_level2.toString(), + ", sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else { + panic( + "Invalid type", + ); + } + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Invalid" || + cJSON + .items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, (", + cJSON + .items + ?.cType, + " *)0xDEADBEEF, sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_String" + ) { + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, strdup(", + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + ")), sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Object" || + cJSON + .items + ?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, ", + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + "), sizeof(", + cJSON + .items + ?.cType, + " *));", + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.cType, + " * tmp", + level > + 0 + ? level.toString() + : "", + " = cJSON_malloc(sizeof(", + cJSON + .items + ?.cType, + "));", + ); + this.emitBlock( + [ + "if (NULL != tmp", + level > + 0 + ? level.toString() + : "", + ")", + ], + () => { + this.emitLine( + "* tmp", + level > + 0 + ? level.toString() + : "", + " = ", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.getValue, + "(e", + child_level.toString(), + ");", + ); + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, tmp", + level > + 0 + ? level.toString() + : "", + ", sizeof(", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.cType, + " *));", + ); + }, + ); + } + }; + + if ( + cJSON + .items + ?.isNullable + ) { + this.emitBlock( + [ + "if (!cJSON_IsNull(e", + child_level.toString(), + "))", + ], + () => { + add( + property.type, + cJSON, + level, + child_level, + ); + }, + ); + this.emitBlock( + [ + "else", + ], + () => { + this.emitLine( + "hashtable_add(x", + child_level.toString(), + ", e", + child_level.toString(), + "->string, (void *)0xDEADBEEF, sizeof(void *));", + ); + }, + ); + } else { + add( + property.type, + cJSON, + level, + child_level, + ); + } + }, ); - this.emitBlock(["else"], () => { - this.emitLine( - "hashtable_add(x", - child_level.toString(), - ", e", - child_level.toString(), - "->string, (void *)0xDEADBEEF, sizeof(void *));" - ); - }); - } else { - add(property.type, cJSON, level, child_level); - } - } - ); - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = x", - child_level.toString(), - ";" - ); - }); - } else if ( - cJSON.cjsonType === "cJSON_Invalid" || - cJSON.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = (", - cJSON.cType, - " *)0xDEADBEEF;" - ); - } else if (cJSON.cjsonType === "cJSON_String") { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = strdup(", - cJSON.getValue, - "(cJSON_GetObjectItemCaseSensitive(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '")));' - ); - } else if ( - cJSON.cjsonType === "cJSON_Object" || - cJSON.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = ", - cJSON.getValue, - "(cJSON_GetObjectItemCaseSensitive(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '"));' - ); - } else { - if (property.isOptional || cJSON.isNullable) { - this.emitBlock( - [ - "if (NULL != (x", - level > 0 ? level.toString() : "", + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = x", + child_level.toString(), + ";", + ); + }, + ); + } else if ( + cJSON.cjsonType === + "cJSON_Invalid" || + cJSON.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", "->", name, - " = cJSON_malloc(sizeof(", + " = (", cJSON.cType, - "))))" - ], - () => { + " *)0xDEADBEEF;", + ); + } else if ( + cJSON.cjsonType === + "cJSON_String" + ) { + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = strdup(", + cJSON.getValue, + "(cJSON_GetObjectItemCaseSensitive(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '")));', + ); + } else if ( + cJSON.cjsonType === + "cJSON_Object" || + cJSON.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = ", + cJSON.getValue, + "(cJSON_GetObjectItemCaseSensitive(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '"));', + ); + } else { + if ( + property.isOptional || + cJSON.isNullable + ) { + this.emitBlock( + [ + "if (NULL != (x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = cJSON_malloc(sizeof(", + cJSON.cType, + "))))", + ], + () => { + this.emitLine( + "*x", + level > + 0 + ? level.toString() + : "", + "->", + name, + " = ", + cJSON.getValue, + "(cJSON_GetObjectItemCaseSensitive(j", + level > + 0 + ? level.toString() + : "", + ', "', + jsonName, + '"));', + ); + }, + ); + } else { this.emitLine( - "*x", - level > 0 ? level.toString() : "", + "x", + level > 0 + ? level.toString() + : "", "->", name, " = ", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", - level > 0 ? level.toString() : "", + level > 0 + ? level.toString() + : "", ', "', jsonName, - '"));' + '"));', ); } + } + }, + ); + if ( + !property.isOptional && + !cJSON.isNullable + ) { + if ( + cJSON.cjsonType === + "cJSON_Array" + ) { + this.emitBlock( + ["else"], + () => { + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = list_create(false, NULL);", + ); + }, ); - } else { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = ", - cJSON.getValue, - "(cJSON_GetObjectItemCaseSensitive(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '"));' + } else if ( + cJSON.cjsonType === + "cJSON_Map" + ) { + this.emitBlock( + ["else"], + () => { + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = hashtable_create(", + this + .hashtableSize, + ", false);", + ); + }, + ); + } else if ( + cJSON.cjsonType === + "cJSON_Invalid" || + cJSON.cjsonType === + "cJSON_NULL" + ) { + this.emitBlock( + ["else"], + () => { + this.emitLine( + "x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = (", + cJSON.cType, + " *)0xDEADBEEF;", + ); + }, + ); + } else if ( + cJSON.cjsonType === + "cJSON_String" + ) { + this.emitBlock( + ["else"], + () => { + this.emitBlock( + [ + "if (NULL != (x", + level > 0 + ? level.toString() + : "", + "->", + name, + " = cJSON_malloc(sizeof(", + cJSON.cType, + "))))", + ], + () => { + this.emitLine( + "x", + level > + 0 + ? level.toString() + : "", + "->", + name, + "[0] = '\\0';", + ); + }, + ); + }, ); + } else { + /* Nothing to do */ } } - } + }, ); - if (!property.isOptional && !cJSON.isNullable) { - if (cJSON.cjsonType === "cJSON_Array") { - this.emitBlock(["else"], () => { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = list_create(false, NULL);" - ); - }); - } else if (cJSON.cjsonType === "cJSON_Map") { - this.emitBlock(["else"], () => { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = hashtable_create(", - this.hashtableSize, - ", false);" - ); - }); - } else if ( - cJSON.cjsonType === "cJSON_Invalid" || - cJSON.cjsonType === "cJSON_NULL" - ) { - this.emitBlock(["else"], () => { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - " = (", - cJSON.cType, - " *)0xDEADBEEF;" - ); - }); - } else if (cJSON.cjsonType === "cJSON_String") { - this.emitBlock(["else"], () => { - this.emitBlock( - [ - "if (NULL != (x", - level > 0 ? level.toString() : "", - "->", - name, - " = cJSON_malloc(sizeof(", - cJSON.cType, - "))))" - ], - () => { - this.emitLine( - "x", - level > 0 ? level.toString() : "", - "->", - name, - "[0] = '\\0';" - ); - } - ); - }); - } else { - /* Nothing to do */ - } - } - }); - } - }; + } + }; - recur(classType, 0); - }); + recur(classType, 0); + }, + ); }); this.emitLine("return x;"); - } + }, ); this.ensureBlankLine(); /* Create className to cJSON generator function */ this.emitBlock( - ["cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x)"], + [ + "cJSON * cJSON_Create", + className, + "(", + this.withConst(["struct ", className]), + " * x)", + ], () => { this.emitLine("cJSON * j = NULL;"); this.emitBlock(["if (NULL != x)"], () => { - this.emitBlock(["if (NULL != (j = cJSON_CreateObject()))"], () => { - const recur = (type: Type, level: number) => { - if (type instanceof ArrayType) { - const child_level = level + 1; - const cJSON = this.quicktypeTypeToCJSON(type.items, false); - this.emitLine("cJSON * j", child_level.toString(), " = cJSON_CreateArray();"); - this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => { + this.emitBlock( + ["if (NULL != (j = cJSON_CreateObject()))"], + () => { + const recur = (type: Type, level: number) => { + if (type instanceof ArrayType) { + const child_level = level + 1; + const cJSON = this.quicktypeTypeToCJSON( + type.items, + false, + ); this.emitLine( - cJSON.cType, - " * x", + "cJSON * j", child_level.toString(), - " = list_get_head(x", - level.toString(), - ");" + " = cJSON_CreateArray();", ); - this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.cjsonType === "cJSON_Array") { - const child_level2 = child_level + 1; - recur(type.items, child_level); - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", j", - child_level2.toString(), - ");" - ); - } else if (cJSON.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if (cJSON.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.cjsonType === "cJSON_NULL") { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - cJSON.createObject, - "());" - ); - } else if ( - cJSON.cjsonType === "cJSON_String" || - cJSON.cjsonType === "cJSON_Object" || - cJSON.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - cJSON.createObject, - "(x", - child_level.toString(), - "));" - ); - } else { + this.emitBlock( + [ + "if (NULL != j", + child_level.toString(), + ")", + ], + () => { this.emitLine( - "cJSON_AddItemToArray(j", + cJSON.cType, + " * x", child_level.toString(), - ", ", - cJSON.createObject, - "(*x", - child_level.toString(), - "));" + " = list_get_head(x", + level.toString(), + ");", ); - } - - this.emitLine( - "x", - child_level.toString(), - " = list_get_next(x", - level.toString(), - ");" - ); - }); - }); - } else if (type instanceof ClassType) { - this.forEachClassProperty(type, "none", (name, jsonName, property) => { - const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional); - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { - const child_level = level + 1; - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { - this.emitLine( - "cJSON * j", + this.emitBlock( + [ + "while (NULL != x", child_level.toString(), - " = cJSON_AddArrayToObject(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '");' - ); - this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => { + ")", + ], + () => { + if ( + cJSON.cjsonType === + "cJSON_Array" + ) { + const child_level2 = + child_level + 1; + recur( + type.items, + child_level, + ); + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", j", + child_level2.toString(), + ");", + ); + } else if ( + cJSON.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.cjsonType === + "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if ( + cJSON.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + cJSON.createObject, + "());", + ); + } else if ( + cJSON.cjsonType === + "cJSON_String" || + cJSON.cjsonType === + "cJSON_Object" || + cJSON.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + cJSON.createObject, + "(x", + child_level.toString(), + "));", + ); + } else { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + cJSON.createObject, + "(*x", + child_level.toString(), + "));", + ); + } + this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * x", + "x", child_level.toString(), - " = list_get_head(x", - level > 0 ? level.toString() : "", + " = list_get_next(x", + level.toString(), + ");", + ); + }, + ); + }, + ); + } else if (type instanceof ClassType) { + this.forEachClassProperty( + type, + "none", + (name, jsonName, property) => { + const cJSON = + this.quicktypeTypeToCJSON( + property.type, + property.isOptional, + ); + if ( + cJSON.cjsonType === + "cJSON_Array" && + cJSON.items !== undefined + ) { + const child_level = level + 1; + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", "->", name, - ");" - ); - this.emitBlock( - ["while (NULL != x", child_level.toString(), ")"], - () => { - const add = ( - type: Type, - cJSON: TypeCJSON, - child_level: number - ) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - if (type instanceof ArrayType) { - const child_level2 = child_level + 1; - recur(type.items, child_level); - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", j", - child_level2.toString(), - ");" - ); - } else { - panic("Invalid type"); - } - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.items?.cjsonType === "cJSON_NULL") { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - cJSON.items?.createObject, - "());" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_String" || - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - cJSON.items?.createObject, - "(x", - child_level.toString(), - "));" - ); - } else { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", ", - // @ts-expect-error awaiting refactor - cJSON.items?.createObject, - "(*x", - child_level.toString(), - "));" - ); - } - }; - - if (cJSON.items?.isNullable) { + ")", + ], + () => { + this.emitLine( + "cJSON * j", + child_level.toString(), + " = cJSON_AddArrayToObject(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '");', + ); + this.emitBlock( + [ + "if (NULL != j", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.cType, + " * x", + child_level.toString(), + " = list_get_head(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); this.emitBlock( [ - "if ((void *)0xDEADBEEF != x", + "while (NULL != x", child_level.toString(), - ")" + ")", ], () => { - add(property.type, cJSON, child_level); - } - ); - this.emitBlock(["else"], () => { - this.emitLine( - "cJSON_AddItemToArray(j", - child_level.toString(), - ", cJSON_CreateNull());" - ); - }); - } else { - add(property.type, cJSON, child_level); - } + const add = + ( + type: Type, + cJSON: TypeCJSON, + child_level: number, + ) => { + if ( + cJSON + .items + ?.cjsonType === + "cJSON_Array" + ) { + if ( + type instanceof + ArrayType + ) { + const child_level2 = + child_level + + 1; + recur( + type.items, + child_level, + ); + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", j", + child_level2.toString(), + ");", + ); + } else { + panic( + "Invalid type", + ); + } + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + cJSON + .items + ?.createObject, + "());", + ); + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_String" || + cJSON + .items + ?.cjsonType === + "cJSON_Object" || + cJSON + .items + ?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + cJSON + .items + ?.createObject, + "(x", + child_level.toString(), + "));", + ); + } else { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", ", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.createObject, + "(*x", + child_level.toString(), + "));", + ); + } + }; + + if ( + cJSON + .items + ?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + add( + property.type, + cJSON, + child_level, + ); + }, + ); + this.emitBlock( + [ + "else", + ], + () => { + this.emitLine( + "cJSON_AddItemToArray(j", + child_level.toString(), + ", cJSON_CreateNull());", + ); + }, + ); + } else { + add( + property.type, + cJSON, + child_level, + ); + } - this.emitLine( - "x", - child_level.toString(), - " = list_get_next(x", - level > 0 ? level.toString() : "", - "->", - name, - ");" - ); - } - ); - }); - } - ); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { - const child_level = level + 1; - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { - this.emitLine( - "cJSON * j", - child_level.toString(), - " = ", - cJSON.createObject, - "();" + this.emitLine( + "x", + child_level.toString(), + " = list_get_next(x", + level > + 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + }, + ); + }, + ); + }, ); - this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => { - this.emitLine("char **keys", child_level.toString(), " = NULL;"); - this.emitLine( - "size_t count", - child_level.toString(), - " = hashtable_get_keys(x", - level > 0 ? level.toString() : "", + } else if ( + cJSON.cjsonType === + "cJSON_Map" && + cJSON.items !== undefined + ) { + const child_level = level + 1; + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", "->", name, - ", &keys", - child_level.toString(), - ");" - ); - this.emitBlock( - ["if (NULL != keys", child_level.toString(), ")"], - () => { - this.emitBlock( - [ - "for (size_t index", - child_level.toString(), - " = 0; index", + ")", + ], + () => { + this.emitLine( + "cJSON * j", + child_level.toString(), + " = ", + cJSON.createObject, + "();", + ); + this.emitBlock( + [ + "if (NULL != j", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + "char **keys", child_level.toString(), - " < count", + " = NULL;", + ); + this.emitLine( + "size_t count", child_level.toString(), - "; index", + " = hashtable_get_keys(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ", &keys", child_level.toString(), - "++)" - ], - () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *x", - child_level.toString(), - " = hashtable_lookup(x", - level > 0 ? level.toString() : "", - "->", - name, - ", keys", - child_level.toString(), - "[index", + ");", + ); + this.emitBlock( + [ + "if (NULL != keys", child_level.toString(), - "]);" - ); - const add = ( - type: Type, - cJSON: TypeCJSON, - child_level: number - ) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - if (type instanceof MapType) { - const child_level2 = child_level + 1; - recur(type.values, child_level); + ")", + ], + () => { + this.emitBlock( + [ + "for (size_t index", + child_level.toString(), + " = 0; index", + child_level.toString(), + " < count", + child_level.toString(), + "; index", + child_level.toString(), + "++)", + ], + () => { this.emitLine( - cJSON.addToObject, - "(j", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.cType, + " *x", child_level.toString(), + " = hashtable_lookup(x", + level > + 0 + ? level.toString() + : "", + "->", + name, ", keys", child_level.toString(), "[index", child_level.toString(), - "], j", - child_level2.toString(), - ");" + "]);", ); - } else { - panic("Invalid type"); - } - } else if ( - cJSON.items?.cjsonType === "cJSON_Map" - ) { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" - ) { - /* Nothing to do */ - } else if ( - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - cJSON.addToObject, - "(j", - child_level.toString(), - ", keys", - child_level.toString(), - "[index", - child_level.toString(), - "], ", - cJSON.items?.createObject, - "());" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_String" || - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - cJSON.addToObject, - "(j", - child_level.toString(), - ", keys", - child_level.toString(), - "[index", - child_level.toString(), - "], ", - cJSON.items?.createObject, - "(x", - child_level.toString(), - "));" - ); - } else { - this.emitLine( - cJSON.addToObject, - "(j", - child_level.toString(), - ", keys", - child_level.toString(), - "[index", - child_level.toString(), - "], ", - // @ts-expect-error awaiting refactor - cJSON.items?.createObject, - "(*x", - child_level.toString(), - "));" - ); - } - }; - - if (cJSON.items?.isNullable) { - this.emitBlock( - [ - "if ((void *)0xDEADBEEF != x", - child_level.toString(), - ")" - ], - () => { - add(property.type, cJSON, child_level); - } + const add = + ( + type: Type, + cJSON: TypeCJSON, + child_level: number, + ) => { + if ( + cJSON + .items + ?.cjsonType === + "cJSON_Array" + ) { + if ( + type instanceof + MapType + ) { + const child_level2 = + child_level + + 1; + recur( + type.values, + child_level, + ); + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], j", + child_level2.toString(), + ");", + ); + } else { + panic( + "Invalid type", + ); + } + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], ", + cJSON + .items + ?.createObject, + "());", + ); + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_String" || + cJSON + .items + ?.cjsonType === + "cJSON_Object" || + cJSON + .items + ?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], ", + cJSON + .items + ?.createObject, + "(x", + child_level.toString(), + "));", + ); + } else { + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], ", + // @ts-expect-error awaiting refactor + cJSON + .items + ?.createObject, + "(*x", + child_level.toString(), + "));", + ); + } + }; + + if ( + cJSON + .items + ?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + add( + property.type, + cJSON, + child_level, + ); + }, + ); + this.emitBlock( + [ + "else", + ], + () => { + this.emitLine( + cJSON.addToObject, + "(j", + child_level.toString(), + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "], cJSON_CreateNull());", + ); + }, + ); + } else { + add( + property.type, + cJSON, + child_level, + ); + } + }, ); - this.emitBlock(["else"], () => { - this.emitLine( - cJSON.addToObject, - "(j", - child_level.toString(), - ", keys", - child_level.toString(), - "[index", - child_level.toString(), - "], cJSON_CreateNull());" - ); - }); - } else { - add(property.type, cJSON, child_level); - } - } - ); + this.emitLine( + "cJSON_free(keys", + child_level.toString(), + ");", + ); + }, + ); + this.emitLine( + cJSON.addToObject, + "(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '", j', + child_level.toString(), + ");", + ); + }, + ); + }, + ); + } else if ( + cJSON.cjsonType === + "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if ( + cJSON.cjsonType === "cJSON_NULL" + ) { + if (property.isOptional) { + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", + ], + () => { this.emitLine( - "cJSON_free(keys", - child_level.toString(), - ");" + cJSON.addToObject, + "(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '");', ); - } + }, ); + } else { this.emitLine( cJSON.addToObject, "(j", - level > 0 ? level.toString() : "", + level > 0 + ? level.toString() + : "", ', "', jsonName, - '", j', - child_level.toString(), - ");" + '");', ); - }); - } - ); - } else if (cJSON.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.cjsonType === "cJSON_NULL") { - if (property.isOptional) { - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { + } + } else if ( + cJSON.cjsonType === + "cJSON_String" + ) { + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", + ], + () => { + this.emitLine( + cJSON.addToObject, + "(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '", x', + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + }, + ); + if ( + !property.isOptional && + !cJSON.isNullable + ) { + this.emitBlock( + ["else"], + () => { + this.emitLine( + cJSON.addToObject, + "(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '", "");', + ); + }, + ); + } + } else if ( + cJSON.cjsonType === + "cJSON_Object" || + cJSON.cjsonType === + "cJSON_Union" + ) { + if ( + property.isOptional || + cJSON.isNullable + ) { + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", + ], + () => { + this.emitLine( + cJSON.addToObject, + "(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '", ', + cJSON.createObject, + "(x", + level > 0 + ? level.toString() + : "", + "->", + name, + "));", + ); + }, + ); + } else { this.emitLine( cJSON.addToObject, "(j", - level > 0 ? level.toString() : "", + level > 0 + ? level.toString() + : "", ', "', jsonName, - '");' + '", ', + cJSON.createObject, + "(x", + level > 0 + ? level.toString() + : "", + "->", + name, + "));", ); } - ); - } else { - this.emitLine( - cJSON.addToObject, - "(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '");' - ); - } - } else if (cJSON.cjsonType === "cJSON_String") { - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { - this.emitLine( - cJSON.addToObject, - "(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '", x', - level > 0 ? level.toString() : "", - "->", - name, - ");" - ); - } - ); - if (!property.isOptional && !cJSON.isNullable) { - this.emitBlock(["else"], () => { - this.emitLine( - cJSON.addToObject, - "(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '", "");' - ); - }); - } - } else if ( - cJSON.cjsonType === "cJSON_Object" || - cJSON.cjsonType === "cJSON_Union" - ) { - if (property.isOptional || cJSON.isNullable) { - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { + } else if ( + cJSON.cjsonType === "cJSON_Enum" + ) { + if ( + property.isOptional || + cJSON.isNullable + ) { + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", + ], + () => { + this.emitLine( + cJSON.addToObject, + "(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '", ', + cJSON.createObject, + "(*x", + level > 0 + ? level.toString() + : "", + "->", + name, + "));", + ); + }, + ); + } else { this.emitLine( cJSON.addToObject, "(j", - level > 0 ? level.toString() : "", + level > 0 + ? level.toString() + : "", ', "', jsonName, '", ', cJSON.createObject, "(x", - level > 0 ? level.toString() : "", + level > 0 + ? level.toString() + : "", "->", name, - "));" + "));", ); } - ); - } else { - this.emitLine( - cJSON.addToObject, - "(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '", ', - cJSON.createObject, - "(x", - level > 0 ? level.toString() : "", - "->", - name, - "));" - ); - } - } else if (cJSON.cjsonType === "cJSON_Enum") { - if (property.isOptional || cJSON.isNullable) { - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { + } else { + if ( + property.isOptional || + cJSON.isNullable + ) { + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", + ], + () => { + this.emitLine( + cJSON.addToObject, + "(j", + level > 0 + ? level.toString() + : "", + ', "', + jsonName, + '", *x', + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + }, + ); + } else { this.emitLine( cJSON.addToObject, "(j", - level > 0 ? level.toString() : "", + level > 0 + ? level.toString() + : "", ', "', jsonName, - '", ', - cJSON.createObject, - "(*x", - level > 0 ? level.toString() : "", + '", x', + level > 0 + ? level.toString() + : "", "->", name, - "));" + ");", ); } - ); - } else { - this.emitLine( - cJSON.addToObject, - "(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '", ', - cJSON.createObject, - "(x", - level > 0 ? level.toString() : "", - "->", - name, - "));" - ); - } - } else { - if (property.isOptional || cJSON.isNullable) { - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { + } + + if (cJSON.isNullable) { + this.emitBlock(["else"], () => { this.emitLine( - cJSON.addToObject, - "(j", - level > 0 ? level.toString() : "", + "cJSON_AddNullToObject(j", + level > 0 + ? level.toString() + : "", ', "', jsonName, - '", *x', - level > 0 ? level.toString() : "", - "->", - name, - ");" + '");', ); - } - ); - } else { - this.emitLine( - cJSON.addToObject, - "(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '", x', - level > 0 ? level.toString() : "", - "->", - name, - ");" - ); - } - } - - if (cJSON.isNullable) { - this.emitBlock(["else"], () => { - this.emitLine( - "cJSON_AddNullToObject(j", - level > 0 ? level.toString() : "", - ', "', - jsonName, - '");' - ); - }); - } - }); - } - }; + }); + } + }, + ); + } + }; - recur(classType, 0); - }); + recur(classType, 0); + }, + ); }); this.emitLine("return j;"); - } + }, ); this.ensureBlankLine(); /* Create className to string generator function */ - this.emitBlock(["char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x)"], () => { - this.emitLine("char * s = NULL;"); - this.emitBlock(["if (NULL != x)"], () => { - this.emitLine("cJSON * j = cJSON_Create", className, "(x);"); - this.emitBlock(["if (NULL != j)"], () => { - this.emitLine(this._options.printStyle ? "s = cJSON_PrintUnformatted(j);" : "s = cJSON_Print(j);"); - this.emitLine("cJSON_Delete(j);"); + this.emitBlock( + [ + "char * cJSON_Print", + className, + "(", + this.withConst(["struct ", className]), + " * x)", + ], + () => { + this.emitLine("char * s = NULL;"); + this.emitBlock(["if (NULL != x)"], () => { + this.emitLine( + "cJSON * j = cJSON_Create", + className, + "(x);", + ); + this.emitBlock(["if (NULL != j)"], () => { + this.emitLine( + this._options.printStyle + ? "s = cJSON_PrintUnformatted(j);" + : "s = cJSON_Print(j);", + ); + this.emitLine("cJSON_Delete(j);"); + }); }); - }); - this.emitLine("return s;"); - }); + this.emitLine("return s;"); + }, + ); this.ensureBlankLine(); /* Create className delete function */ - this.emitBlock(["void cJSON_Delete", className, "(struct ", className, " * x)"], () => { - this.emitBlock(["if (NULL != x)"], () => { - const recur = (type: Type, level: number) => { - if (type instanceof ArrayType) { - const child_level = level + 1; - const cJSON = this.quicktypeTypeToCJSON(type.items, false); - this.emitLine( - cJSON.cType, - " * x", - child_level.toString(), - " = list_get_head(x", - level.toString(), - ");" - ); - this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.cjsonType === "cJSON_Array") { - recur(type.items, child_level); - this.emitLine(cJSON.deleteType, "(x", child_level.toString(), ");"); - } else if (cJSON.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") { - /* Nothing to do */ - } else { - this.emitLine(cJSON.deleteType, "(x", child_level.toString(), ");"); - } - - this.emitLine("x", child_level.toString(), " = list_get_next(x", level.toString(), ");"); - }); - } else if (type instanceof ClassType) { - this.forEachClassProperty(type, "none", (name, _jsonName, property) => { - const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional); - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { - const child_level = level + 1; - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { + this.emitBlock( + ["void cJSON_Delete", className, "(struct ", className, " * x)"], + () => { + this.emitBlock(["if (NULL != x)"], () => { + const recur = (type: Type, level: number) => { + if (type instanceof ArrayType) { + const child_level = level + 1; + const cJSON = this.quicktypeTypeToCJSON( + type.items, + false, + ); + this.emitLine( + cJSON.cType, + " * x", + child_level.toString(), + " = list_get_head(x", + level.toString(), + ");", + ); + this.emitBlock( + [ + "while (NULL != x", + child_level.toString(), + ")", + ], + () => { + if (cJSON.cjsonType === "cJSON_Array") { + recur(type.items, child_level); this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " * x", + cJSON.deleteType, + "(x", child_level.toString(), - " = list_get_head(x", - level > 0 ? level.toString() : "", - "->", - name, - ");" + ");", ); - this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - if (property.type instanceof ArrayType) { - recur(property.type.items, child_level); - this.emitLine( - cJSON.items?.deleteType, - "(x", + } else if ( + cJSON.cjsonType === "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.cjsonType === "cJSON_Invalid" || + cJSON.cjsonType === "cJSON_NULL" + ) { + /* Nothing to do */ + } else { + this.emitLine( + cJSON.deleteType, + "(x", + child_level.toString(), + ");", + ); + } + + this.emitLine( + "x", + child_level.toString(), + " = list_get_next(x", + level.toString(), + ");", + ); + }, + ); + } else if (type instanceof ClassType) { + this.forEachClassProperty( + type, + "none", + (name, _jsonName, property) => { + const cJSON = this.quicktypeTypeToCJSON( + property.type, + property.isOptional, + ); + if ( + cJSON.cjsonType === "cJSON_Array" && + cJSON.items !== undefined + ) { + const child_level = level + 1; + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.cType, + " * x", + child_level.toString(), + " = list_get_head(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + this.emitBlock( + [ + "while (NULL != x", child_level.toString(), - ");" - ); - } else { - panic("Invalid type"); - } - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - /* Nothing to do */ - } else { - if (cJSON.items?.isNullable) { - this.emitBlock( - ["if ((void *)0xDEADBEEF != x", child_level.toString(), ")"], - () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" - ); + ")", + ], + () => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { + if ( + property.type instanceof + ArrayType + ) { + recur( + property + .type + .items, + child_level, + ); + this.emitLine( + cJSON.items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + } else { + panic( + "Invalid type", + ); + } + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" || + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { + /* Nothing to do */ + } else { + if ( + cJSON.items + ?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + }, + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + } } - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" - ); - } - } - this.emitLine( - "x", - child_level.toString(), - " = list_get_next(x", - level > 0 ? level.toString() : "", + this.emitLine( + "x", + child_level.toString(), + " = list_get_next(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + }, + ); + this.emitLine( + cJSON.deleteType, + "(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Map" && + cJSON.items !== undefined + ) { + const child_level = level + 1; + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", + ], + () => { + this.emitLine( + "char **keys", + child_level.toString(), + " = NULL;", + ); + this.emitLine( + "size_t count", + child_level.toString(), + " = hashtable_get_keys(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ", &keys", + child_level.toString(), + ");", + ); + this.emitBlock( + [ + "if (NULL != keys", + child_level.toString(), + ")", + ], + () => { + this.emitBlock( + [ + "for (size_t index", + child_level.toString(), + " = 0; index", + child_level.toString(), + " < count", + child_level.toString(), + "; index", + child_level.toString(), + "++)", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.cType, + " *x", + child_level.toString(), + " = hashtable_lookup(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ", keys", + child_level.toString(), + "[index", + child_level.toString(), + "]);", + ); + this.emitBlock( + [ + "if (NULL != x", + child_level.toString(), + ")", + ], + () => { + if ( + cJSON + .items + ?.cjsonType === + "cJSON_Array" + ) { + if ( + property.type instanceof + MapType + ) { + recur( + property + .type + .values, + child_level, + ); + this.emitLine( + cJSON + .items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + } else { + panic( + "Invalid type", + ); + } + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON + .items + ?.cjsonType === + "cJSON_Invalid" || + cJSON + .items + ?.cjsonType === + "cJSON_NULL" + ) { + /* Nothing to do */ + } else { + if ( + cJSON + .items + ?.isNullable + ) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x", + child_level.toString(), + ")", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + }, + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON + .items + ?.deleteType, + "(x", + child_level.toString(), + ");", + ); + } + } + }, + ); + }, + ); + this.emitLine( + "cJSON_free(keys", + child_level.toString(), + ");", + ); + }, + ); + this.emitLine( + cJSON.deleteType, + "(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Invalid" || + cJSON.cjsonType === "cJSON_NULL" + ) { + /* Nothing to do */ + } else if ( + cJSON.cjsonType === "cJSON_String" || + cJSON.cjsonType === "cJSON_Object" || + cJSON.cjsonType === "cJSON_Union" + ) { + this.emitBlock( + [ + "if (NULL != x", + level > 0 + ? level.toString() + : "", "->", name, - ");" - ); - }); - this.emitLine( - cJSON.deleteType, - "(x", - level > 0 ? level.toString() : "", - "->", - name, - ");" - ); - } - ); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { - const child_level = level + 1; - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { - this.emitLine("char **keys", child_level.toString(), " = NULL;"); - this.emitLine( - "size_t count", - child_level.toString(), - " = hashtable_get_keys(x", - level > 0 ? level.toString() : "", - "->", - name, - ", &keys", - child_level.toString(), - ");" + ")", + ], + () => { + this.emitLine( + cJSON.deleteType, + "(x", + level > 0 + ? level.toString() + : "", + "->", + name, + ");", + ); + }, ); - this.emitBlock(["if (NULL != keys", child_level.toString(), ")"], () => { + } else { + if ( + property.isOptional || + cJSON.isNullable + ) { this.emitBlock( [ - "for (size_t index", - child_level.toString(), - " = 0; index", - child_level.toString(), - " < count", - child_level.toString(), - "; index", - child_level.toString(), - "++)" + "if (NULL != x", + level > 0 + ? level.toString() + : "", + "->", + name, + ")", ], () => { this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *x", - child_level.toString(), - " = hashtable_lookup(x", - level > 0 ? level.toString() : "", + cJSON.deleteType, + "(x", + level > 0 + ? level.toString() + : "", "->", name, - ", keys", - child_level.toString(), - "[index", - child_level.toString(), - "]);" + ");", ); - this.emitBlock( - ["if (NULL != x", child_level.toString(), ")"], - () => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - if (property.type instanceof MapType) { - recur(property.type.values, child_level); - this.emitLine( - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" - ); - } else { - panic("Invalid type"); - } - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - /* Nothing to do */ - } else { - if (cJSON.items?.isNullable) { - this.emitBlock( - [ - "if ((void *)0xDEADBEEF != x", - child_level.toString(), - ")" - ], - () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" - ); - } - ); - } else { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.deleteType, - "(x", - child_level.toString(), - ");" - ); - } - } - } - ); - } - ); - this.emitLine("cJSON_free(keys", child_level.toString(), ");"); - }); - this.emitLine( - cJSON.deleteType, - "(x", - level > 0 ? level.toString() : "", - "->", - name, - ");" - ); - } - ); - } else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") { - /* Nothing to do */ - } else if ( - cJSON.cjsonType === "cJSON_String" || - cJSON.cjsonType === "cJSON_Object" || - cJSON.cjsonType === "cJSON_Union" - ) { - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { - this.emitLine( - cJSON.deleteType, - "(x", - level > 0 ? level.toString() : "", - "->", - name, - ");" - ); - } - ); - } else { - if (property.isOptional || cJSON.isNullable) { - this.emitBlock( - ["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], - () => { - this.emitLine( - cJSON.deleteType, - "(x", - level > 0 ? level.toString() : "", - "->", - name, - ");" + }, ); } - ); - } - } - }); - } - }; + } + }, + ); + } + }; - recur(classType, 0); - this.emitLine("cJSON_free(x);"); - }); - }); + recur(classType, 0); + this.emitLine("cJSON_free(x);"); + }); + }, + ); this.ensureBlankLine(); } @@ -2947,13 +4610,17 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param className: top level class name * @param includes: Array of includes */ - protected emitTopLevel(type: Type, className: Name, includes: string[]): void { + protected emitTopLevel( + type: Type, + className: Name, + includes: string[], + ): void { /* Create file */ const filename = this.sourcelikeToString(className).concat(".h"); this.startFile(filename); /* Create includes - This create too much includes but this is safer because of specific corner cases */ - includes.forEach(name => { + includes.forEach((name) => { this.emitIncludeLine(name); }); this.ensureBlankLine(); @@ -2985,11 +4652,11 @@ export class CJSONRenderer extends ConvenienceRenderer { cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, - " value;" + " value;", ); }, "", - true + true, ); this.ensureBlankLine(); this.emitTypedefAlias(type, className); @@ -3001,11 +4668,45 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param className: top level class name */ protected emitTopLevelPrototypes(_type: Type, className: Name): void { - this.emitLine("struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s);"); - this.emitLine("struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j);"); - this.emitLine("cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x);"); - this.emitLine("char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x);"); - this.emitLine("void cJSON_Delete", className, "(struct ", className, " * x);"); + this.emitLine( + "struct ", + className, + " * cJSON_Parse", + className, + "(", + this.withConst("char"), + " * s);", + ); + this.emitLine( + "struct ", + className, + " * cJSON_Get", + className, + "Value(", + this.withConst("cJSON"), + " * j);", + ); + this.emitLine( + "cJSON * cJSON_Create", + className, + "(", + this.withConst(["struct ", className]), + " * x);", + ); + this.emitLine( + "char * cJSON_Print", + className, + "(", + this.withConst(["struct ", className]), + " * x);", + ); + this.emitLine( + "void cJSON_Delete", + className, + "(struct ", + className, + " * x);", + ); this.ensureBlankLine(); } @@ -3017,7 +4718,15 @@ export class CJSONRenderer extends ConvenienceRenderer { protected emitTopLevelFunctions(type: Type, className: Name): void { /* Create string to className generator function */ this.emitBlock( - ["struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s)"], + [ + "struct ", + className, + " * cJSON_Parse", + className, + "(", + this.withConst("char"), + " * s)", + ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != s)"], () => { @@ -3028,270 +4737,451 @@ export class CJSONRenderer extends ConvenienceRenderer { }); }); this.emitLine("return x;"); - } + }, ); this.ensureBlankLine(); /* Create cJSON to className generator function */ this.emitBlock( - ["struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j)"], + [ + "struct ", + className, + " * cJSON_Get", + className, + "Value(", + this.withConst("cJSON"), + " * j)", + ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != j)"], () => { - this.emitBlock(["if (NULL != (x = cJSON_malloc(sizeof(struct ", className, "))))"], () => { - this.emitLine("memset(x, 0, sizeof(struct ", className, "));"); - const cJSON = this.quicktypeTypeToCJSON(type, false); - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { - this.emitLine("x->value = list_create(false, NULL);"); - this.emitBlock(["if (NULL != x->value)"], () => { - this.emitLine("cJSON * e = NULL;"); - this.emitBlock(["cJSON_ArrayForEach(e, j)"], () => { - const add = (cJSON: TypeCJSON) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "list_add_tail(x->value, (", - cJSON.items?.cType, - " *)0xDEADBEAF, sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if (cJSON.items?.cjsonType === "cJSON_String") { - this.emitLine( - "list_add_tail(x->value, strdup(", - cJSON.items?.getValue, - "(e)), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - this.emitLine( - "list_add_tail(x->value, ", - // @ts-expect-error awaiting refactor - cJSON.items?.getValue, - "(e), sizeof(", - cJSON.items?.cType, - " *));" - ); - } - }; + this.emitBlock( + [ + "if (NULL != (x = cJSON_malloc(sizeof(struct ", + className, + "))))", + ], + () => { + this.emitLine( + "memset(x, 0, sizeof(struct ", + className, + "));", + ); + const cJSON = this.quicktypeTypeToCJSON( + type, + false, + ); + if ( + cJSON.cjsonType === "cJSON_Array" && + cJSON.items !== undefined + ) { + this.emitLine( + "x->value = list_create(false, NULL);", + ); + this.emitBlock( + ["if (NULL != x->value)"], + () => { + this.emitLine("cJSON * e = NULL;"); + this.emitBlock( + ["cJSON_ArrayForEach(e, j)"], + () => { + const add = ( + cJSON: TypeCJSON, + ) => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" || + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "list_add_tail(x->value, (", + cJSON.items?.cType, + " *)0xDEADBEAF, sizeof(", + cJSON.items?.cType, + " *));", + ); + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_String" + ) { + this.emitLine( + "list_add_tail(x->value, strdup(", + cJSON.items + ?.getValue, + "(e)), sizeof(", + cJSON.items?.cType, + " *));", + ); + } else { + this.emitLine( + "list_add_tail(x->value, ", + // @ts-expect-error awaiting refactor + cJSON.items + ?.getValue, + "(e), sizeof(", + cJSON.items?.cType, + " *));", + ); + } + }; - if (cJSON.items?.isNullable) { - this.emitBlock(["if (!cJSON_IsNull(e))"], () => { - add(cJSON); - }); - this.emitBlock(["else"], () => { - this.emitLine( - "list_add_tail(x->value, (void *)0xDEADBEEF, sizeof(void *));" - ); - }); - } else { - add(cJSON); - } - }); - }); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { - this.emitLine("x->value = hashtable_create(", this.hashtableSize, ", false);"); - this.emitBlock(["if (NULL != x->value)"], () => { - this.emitLine("cJSON * e = NULL;"); - this.emitBlock(["cJSON_ArrayForEach(e, j)"], () => { - const add = (cJSON: TypeCJSON) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if ( - cJSON.items?.cjsonType === "cJSON_Invalid" || - cJSON.items?.cjsonType === "cJSON_NULL" - ) { - this.emitLine( - "hashtable_add(x->value, e->string, (", - cJSON.items?.cType, - " *)0xDEADBEEF, sizeof(", - cJSON.items?.cType, - " *));" - ); - } else if (cJSON.items?.cjsonType === "cJSON_String") { - this.emitLine( - "hashtable_add(x->value, e->string, strdup(", - cJSON.items?.getValue, - "(e)), sizeof(", - cJSON.items?.cType, - " *));" - ); - } else { - this.emitLine( - "hashtable_add(x->value, e->string, ", - // @ts-expect-error awaiting refactor - cJSON.items?.getValue, - "(e), sizeof(", - cJSON.items?.cType, - " *));" - ); - } - }; + if (cJSON.items?.isNullable) { + this.emitBlock( + [ + "if (!cJSON_IsNull(e))", + ], + () => { + add(cJSON); + }, + ); + this.emitBlock( + ["else"], + () => { + this.emitLine( + "list_add_tail(x->value, (void *)0xDEADBEEF, sizeof(void *));", + ); + }, + ); + } else { + add(cJSON); + } + }, + ); + }, + ); + } else if ( + cJSON.cjsonType === "cJSON_Map" && + cJSON.items !== undefined + ) { + this.emitLine( + "x->value = hashtable_create(", + this.hashtableSize, + ", false);", + ); + this.emitBlock( + ["if (NULL != x->value)"], + () => { + this.emitLine("cJSON * e = NULL;"); + this.emitBlock( + ["cJSON_ArrayForEach(e, j)"], + () => { + const add = ( + cJSON: TypeCJSON, + ) => { + if ( + cJSON.items + ?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_Invalid" || + cJSON.items + ?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + "hashtable_add(x->value, e->string, (", + cJSON.items?.cType, + " *)0xDEADBEEF, sizeof(", + cJSON.items?.cType, + " *));", + ); + } else if ( + cJSON.items + ?.cjsonType === + "cJSON_String" + ) { + this.emitLine( + "hashtable_add(x->value, e->string, strdup(", + cJSON.items + ?.getValue, + "(e)), sizeof(", + cJSON.items?.cType, + " *));", + ); + } else { + this.emitLine( + "hashtable_add(x->value, e->string, ", + // @ts-expect-error awaiting refactor + cJSON.items + ?.getValue, + "(e), sizeof(", + cJSON.items?.cType, + " *));", + ); + } + }; - if (cJSON.items?.isNullable) { - this.emitBlock(["if (!cJSON_IsNull(e))"], () => { - add(cJSON); - }); - this.emitBlock(["else"], () => { - this.emitLine( - "hashtable_add(x->value, e->string, (void *)0xDEADBEEF, sizeof(void *));" - ); - }); - } else { - add(cJSON); - } - }); - }); - } else if (cJSON.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.cjsonType === "cJSON_NULL") { - this.emitLine("x->value = (", cJSON.cType, " *)0xDEADBEEF;"); - } else if (cJSON.cjsonType === "cJSON_String") { - this.emitLine("x->value = strdup(", cJSON.getValue, "(j));"); - } else { - this.emitLine("x->value = ", cJSON.getValue, "(j);"); - } - }); + if (cJSON.items?.isNullable) { + this.emitBlock( + [ + "if (!cJSON_IsNull(e))", + ], + () => { + add(cJSON); + }, + ); + this.emitBlock( + ["else"], + () => { + this.emitLine( + "hashtable_add(x->value, e->string, (void *)0xDEADBEEF, sizeof(void *));", + ); + }, + ); + } else { + add(cJSON); + } + }, + ); + }, + ); + } else if (cJSON.cjsonType === "cJSON_Invalid") { + /* Nothing to do */ + } else if (cJSON.cjsonType === "cJSON_NULL") { + this.emitLine( + "x->value = (", + cJSON.cType, + " *)0xDEADBEEF;", + ); + } else if (cJSON.cjsonType === "cJSON_String") { + this.emitLine( + "x->value = strdup(", + cJSON.getValue, + "(j));", + ); + } else { + this.emitLine( + "x->value = ", + cJSON.getValue, + "(j);", + ); + } + }, + ); }); this.emitLine("return x;"); - } + }, ); this.ensureBlankLine(); /* Create className to cJSON generator function */ this.emitBlock( - ["cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x)"], + [ + "cJSON * cJSON_Create", + className, + "(", + this.withConst(["struct ", className]), + " * x)", + ], () => { this.emitLine("cJSON * j = NULL;"); this.emitBlock(["if (NULL != x)"], () => { const cJSON = this.quicktypeTypeToCJSON(type, false); - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { + if ( + cJSON.cjsonType === "cJSON_Array" && + cJSON.items !== undefined + ) { this.emitBlock(["if (NULL != x->value)"], () => { this.emitLine("j = ", cJSON.createObject, "();"); this.emitBlock(["if (NULL != j)"], () => { - // @ts-expect-error awaiting refactor - this.emitLine(cJSON.items?.cType, " * x1 = list_get_head(x->value);"); + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.cType, + " * x1 = list_get_head(x->value);", + ); this.emitBlock(["while (NULL != x1)"], () => { const add = (cJSON: TypeCJSON) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { + if ( + cJSON.items?.cjsonType === + "cJSON_Array" + ) { /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { + } else if ( + cJSON.items?.cjsonType === + "cJSON_Map" + ) { /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { + } else if ( + cJSON.items?.cjsonType === + "cJSON_Invalid" + ) { /* Nothing to do */ - } else if (cJSON.items?.cjsonType === "cJSON_NULL") { + } else if ( + cJSON.items?.cjsonType === + "cJSON_NULL" + ) { this.emitLine( "cJSON_AddItemToArray(j, ", cJSON.items?.createObject, - "());" + "());", ); } else if ( - cJSON.items?.cjsonType === "cJSON_String" || - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" + cJSON.items?.cjsonType === + "cJSON_String" || + cJSON.items?.cjsonType === + "cJSON_Object" || + cJSON.items?.cjsonType === + "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j, ", cJSON.items?.createObject, - "(x1));" + "(x1));", ); } else { this.emitLine( "cJSON_AddItemToArray(j, ", // @ts-expect-error awaiting refactor cJSON.items?.createObject, - "(*x1));" + "(*x1));", ); } }; if (cJSON.items?.isNullable) { - this.emitBlock(["if ((void *)0xDEADBEEF != x1)"], () => { - add(cJSON); - }); + this.emitBlock( + ["if ((void *)0xDEADBEEF != x1)"], + () => { + add(cJSON); + }, + ); this.emitBlock(["else"], () => { - this.emitLine("cJSON_AddItemToArray(j, cJSON_CreateNull());"); + this.emitLine( + "cJSON_AddItemToArray(j, cJSON_CreateNull());", + ); }); } else { add(cJSON); } - this.emitLine("x1 = list_get_next(x->value);"); + this.emitLine( + "x1 = list_get_next(x->value);", + ); }); }); }); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { + } else if ( + cJSON.cjsonType === "cJSON_Map" && + cJSON.items !== undefined + ) { this.emitBlock(["if (NULL != x->value)"], () => { this.emitLine("j = ", cJSON.createObject, "();"); this.emitBlock(["if (NULL != j)"], () => { this.emitLine("char **keys = NULL;"); - this.emitLine("size_t count = hashtable_get_keys(x->value, &keys);"); + this.emitLine( + "size_t count = hashtable_get_keys(x->value, &keys);", + ); this.emitBlock(["if (NULL != keys)"], () => { - this.emitBlock(["for (size_t index = 0; index < count; index++)"], () => { - this.emitLine( - // @ts-expect-error awaiting refactor - cJSON.items?.cType, - " *x2 = hashtable_lookup(x->value, keys[index]);" - ); - const add = (cJSON: TypeCJSON) => { - if (cJSON.items?.cjsonType === "cJSON_Array") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Map") { - /* Not supported */ - } else if (cJSON.items?.cjsonType === "cJSON_Invalid") { - /* Nothing to do */ - } else if (cJSON.items?.cjsonType === "cJSON_NULL") { - this.emitLine( - cJSON.addToObject, - "(j, keys[index], ", - cJSON.items?.createObject, - "());" - ); - } else if ( - cJSON.items?.cjsonType === "cJSON_String" || - cJSON.items?.cjsonType === "cJSON_Object" || - cJSON.items?.cjsonType === "cJSON_Union" - ) { - this.emitLine( - cJSON.addToObject, - "(j, keys[index], ", - cJSON.items?.createObject, - "(x2));" + this.emitBlock( + [ + "for (size_t index = 0; index < count; index++)", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.cType, + " *x2 = hashtable_lookup(x->value, keys[index]);", + ); + const add = (cJSON: TypeCJSON) => { + if ( + cJSON.items?.cjsonType === + "cJSON_Array" + ) { + /* Not supported */ + } else if ( + cJSON.items?.cjsonType === + "cJSON_Map" + ) { + /* Not supported */ + } else if ( + cJSON.items?.cjsonType === + "cJSON_Invalid" + ) { + /* Nothing to do */ + } else if ( + cJSON.items?.cjsonType === + "cJSON_NULL" + ) { + this.emitLine( + cJSON.addToObject, + "(j, keys[index], ", + cJSON.items + ?.createObject, + "());", + ); + } else if ( + cJSON.items?.cjsonType === + "cJSON_String" || + cJSON.items?.cjsonType === + "cJSON_Object" || + cJSON.items?.cjsonType === + "cJSON_Union" + ) { + this.emitLine( + cJSON.addToObject, + "(j, keys[index], ", + cJSON.items + ?.createObject, + "(x2));", + ); + } else { + this.emitLine( + cJSON.addToObject, + "(j, keys[index], ", + // @ts-expect-error awaiting refactor + cJSON.items + ?.createObject, + "(*x2));", + ); + } + }; + + if (cJSON.items?.isNullable) { + this.emitBlock( + [ + "if ((void *)0xDEADBEEF != x2)", + ], + () => { + add(cJSON); + }, ); + this.emitBlock(["else"], () => { + this.emitLine( + cJSON.addToObject, + "(j, keys[index], cJSON_CreateNull());", + ); + }); } else { - this.emitLine( - cJSON.addToObject, - "(j, keys[index], ", - // @ts-expect-error awaiting refactor - cJSON.items?.createObject, - "(*x2));" - ); - } - }; - - if (cJSON.items?.isNullable) { - this.emitBlock(["if ((void *)0xDEADBEEF != x2)"], () => { add(cJSON); - }); - this.emitBlock(["else"], () => { - this.emitLine( - cJSON.addToObject, - "(j, keys[index], cJSON_CreateNull());" - ); - }); - } else { - add(cJSON); - } - }); + } + }, + ); this.emitLine("cJSON_free(keys);"); }); }); @@ -3301,90 +5191,158 @@ export class CJSONRenderer extends ConvenienceRenderer { } else if (cJSON.cjsonType === "cJSON_NULL") { this.emitLine("j = ", cJSON.createObject, "();"); } else { - this.emitLine("j = ", cJSON.createObject, "(x->value);"); + this.emitLine( + "j = ", + cJSON.createObject, + "(x->value);", + ); } }); this.emitLine("return j;"); - } + }, ); this.ensureBlankLine(); /* Create className to string generator function */ - this.emitBlock(["char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x)"], () => { - this.emitLine("char * s = NULL;"); - this.emitBlock(["if (NULL != x)"], () => { - this.emitLine("cJSON * j = cJSON_Create", className, "(x);"); - this.emitBlock(["if (NULL != j)"], () => { - this.emitLine("s = cJSON_Print(j);"); - this.emitLine("cJSON_Delete(j);"); + this.emitBlock( + [ + "char * cJSON_Print", + className, + "(", + this.withConst(["struct ", className]), + " * x)", + ], + () => { + this.emitLine("char * s = NULL;"); + this.emitBlock(["if (NULL != x)"], () => { + this.emitLine( + "cJSON * j = cJSON_Create", + className, + "(x);", + ); + this.emitBlock(["if (NULL != j)"], () => { + this.emitLine("s = cJSON_Print(j);"); + this.emitLine("cJSON_Delete(j);"); + }); }); - }); - this.emitLine("return s;"); - }); + this.emitLine("return s;"); + }, + ); this.ensureBlankLine(); /* Create className delete function */ - this.emitBlock(["void cJSON_Delete", className, "(struct ", className, " * x)"], () => { - this.emitBlock(["if (NULL != x)"], () => { - const cJSON = this.quicktypeTypeToCJSON(type, false); - if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) { - this.emitBlock(["if (NULL != x->value)"], () => { - // @ts-expect-error awaiting refactor - this.emitLine(cJSON.items?.cType, " * x1 = list_get_head(x->value);"); - this.emitBlock(["while (NULL != x1)"], () => { - if (cJSON.items?.isNullable) { - this.emitBlock(["if ((void *)0xDEADBEEF != x1)"], () => { - // @ts-expect-error awaiting refactor - this.emitLine(cJSON.items?.deleteType, "(x1);"); - }); - } else { + this.emitBlock( + ["void cJSON_Delete", className, "(struct ", className, " * x)"], + () => { + this.emitBlock(["if (NULL != x)"], () => { + const cJSON = this.quicktypeTypeToCJSON(type, false); + if ( + cJSON.cjsonType === "cJSON_Array" && + cJSON.items !== undefined + ) { + this.emitBlock(["if (NULL != x->value)"], () => { + this.emitLine( // @ts-expect-error awaiting refactor - this.emitLine(cJSON.items?.deleteType, "(x1);"); - } + cJSON.items?.cType, + " * x1 = list_get_head(x->value);", + ); + this.emitBlock(["while (NULL != x1)"], () => { + if (cJSON.items?.isNullable) { + this.emitBlock( + ["if ((void *)0xDEADBEEF != x1)"], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, + "(x1);", + ); + }, + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, + "(x1);", + ); + } - this.emitLine("x1 = list_get_next(x->value);"); + this.emitLine("x1 = list_get_next(x->value);"); + }); + this.emitLine(cJSON.deleteType, "(x->value);"); }); - this.emitLine(cJSON.deleteType, "(x->value);"); - }); - } else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) { - this.emitBlock(["if (NULL != x->value)"], () => { - this.emitLine("char **keys = NULL;"); - this.emitLine("size_t count = hashtable_get_keys(x->value, &keys);"); - this.emitBlock(["if (NULL != keys)"], () => { - this.emitBlock(["for (size_t index = 0; index < count; index++)"], () => { - // @ts-expect-error awaiting refactor - this.emitLine(cJSON.items?.cType, " *x2 = hashtable_lookup(x->value, keys[index]);"); - this.emitBlock(["if (NULL != x2)"], () => { - if (cJSON.items?.isNullable) { - this.emitBlock(["if ((", cJSON.items?.cType, " *)0xDEADBEEF != x2)"], () => { + } else if ( + cJSON.cjsonType === "cJSON_Map" && + cJSON.items !== undefined + ) { + this.emitBlock(["if (NULL != x->value)"], () => { + this.emitLine("char **keys = NULL;"); + this.emitLine( + "size_t count = hashtable_get_keys(x->value, &keys);", + ); + this.emitBlock(["if (NULL != keys)"], () => { + this.emitBlock( + [ + "for (size_t index = 0; index < count; index++)", + ], + () => { + this.emitLine( // @ts-expect-error awaiting refactor - this.emitLine(cJSON.items?.deleteType, "(x2);"); - }); - } else { - // @ts-expect-error awaiting refactor - this.emitLine(cJSON.items?.deleteType, "(x2);"); - } - }); + cJSON.items?.cType, + " *x2 = hashtable_lookup(x->value, keys[index]);", + ); + this.emitBlock( + ["if (NULL != x2)"], + () => { + if (cJSON.items?.isNullable) { + this.emitBlock( + [ + "if ((", + cJSON.items?.cType, + " *)0xDEADBEEF != x2)", + ], + () => { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items + ?.deleteType, + "(x2);", + ); + }, + ); + } else { + this.emitLine( + // @ts-expect-error awaiting refactor + cJSON.items?.deleteType, + "(x2);", + ); + } + }, + ); + }, + ); + this.emitLine("cJSON_free(keys);"); }); - this.emitLine("cJSON_free(keys);"); + this.emitLine(cJSON.deleteType, "(x->value);"); }); + } else if ( + cJSON.cjsonType === "cJSON_Invalid" || + cJSON.cjsonType === "cJSON_NULL" + ) { + /* Nothing to do */ + } else if ( + cJSON.cjsonType === "cJSON_String" || + cJSON.cjsonType === "cJSON_Object" || + cJSON.cjsonType === "cJSON_Union" + ) { this.emitLine(cJSON.deleteType, "(x->value);"); - }); - } else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") { - /* Nothing to do */ - } else if ( - cJSON.cjsonType === "cJSON_String" || - cJSON.cjsonType === "cJSON_Object" || - cJSON.cjsonType === "cJSON_Union" - ) { - this.emitLine(cJSON.deleteType, "(x->value);"); - } else { - /* Nothing to do */ - } + } else { + /* Nothing to do */ + } - this.emitLine("cJSON_free(x);"); - }); - }); + this.emitLine("cJSON_free(x);"); + }); + }, + ); this.ensureBlankLine(); } @@ -3395,11 +5353,15 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param isNullable: true if the field is nullable * @return cJSON type */ - protected quicktypeTypeToCJSON(t: Type, isOptional: boolean, isNullable = false): TypeCJSON { + protected quicktypeTypeToCJSON( + t: Type, + isOptional: boolean, + isNullable = false, + ): TypeCJSON { /* Compute cJSON type */ return matchType( t, - _anyType => { + (_anyType) => { return { cType: "void", optionalQualifier: "*", @@ -3410,10 +5372,10 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "", deleteType: "", items: undefined, - isNullable + isNullable, }; }, - _nullType => { + (_nullType) => { return { cType: "void", optionalQualifier: "*", @@ -3424,10 +5386,10 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "cJSON_CreateNull", deleteType: "cJSON_free", items: undefined, - isNullable + isNullable, }; }, - _boolType => { + (_boolType) => { return { cType: "bool", optionalQualifier: isOptional === true ? "*" : "", @@ -3438,10 +5400,10 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "cJSON_CreateBool", deleteType: "cJSON_free", items: undefined, - isNullable + isNullable, }; }, - _integerType => { + (_integerType) => { return { cType: this.typeIntegerSize, optionalQualifier: isOptional === true ? "*" : "", @@ -3452,10 +5414,10 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "cJSON_CreateNumber", deleteType: "cJSON_free", items: undefined, - isNullable + isNullable, }; }, - _doubleType => { + (_doubleType) => { return { cType: "double", optionalQualifier: isOptional === true ? "*" : "", @@ -3466,10 +5428,10 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "cJSON_CreateNumber", deleteType: "cJSON_free", items: undefined, - isNullable + isNullable, }; }, - _stringType => { + (_stringType) => { return { cType: "char", optionalQualifier: "*", @@ -3480,10 +5442,10 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "cJSON_CreateString", deleteType: "cJSON_free", items: undefined, - isNullable + isNullable, }; }, - arrayType => { + (arrayType) => { const items = this.quicktypeTypeToCJSON(arrayType.items, false); return { cType: "list_t", @@ -3495,24 +5457,34 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "cJSON_CreateArray", deleteType: "list_release", items, - isNullable + isNullable, }; }, - classType => { + (classType) => { return { cType: ["struct ", this.nameForNamedType(classType)], optionalQualifier: "*", cjsonType: "cJSON_Object", isType: "cJSON_IsObject", - getValue: ["cJSON_Get", this.nameForNamedType(classType), "Value"], + getValue: [ + "cJSON_Get", + this.nameForNamedType(classType), + "Value", + ], addToObject: "cJSON_AddItemToObject", - createObject: ["cJSON_Create", this.nameForNamedType(classType)], - deleteType: ["cJSON_Delete", this.nameForNamedType(classType)], + createObject: [ + "cJSON_Create", + this.nameForNamedType(classType), + ], + deleteType: [ + "cJSON_Delete", + this.nameForNamedType(classType), + ], items: undefined, - isNullable + isNullable, }; }, - mapType => { + (mapType) => { const items = this.quicktypeTypeToCJSON(mapType.values, false); return { cType: "hashtable_t", @@ -3524,42 +5496,59 @@ export class CJSONRenderer extends ConvenienceRenderer { createObject: "cJSON_CreateObject", deleteType: "hashtable_release", items, - isNullable + isNullable, }; }, - enumType => { + (enumType) => { return { cType: ["enum ", this.nameForNamedType(enumType)], optionalQualifier: isOptional === true ? "*" : "", cjsonType: "cJSON_Enum", isType: "cJSON_IsString", - getValue: ["cJSON_Get", this.nameForNamedType(enumType), "Value"], + getValue: [ + "cJSON_Get", + this.nameForNamedType(enumType), + "Value", + ], addToObject: "cJSON_AddItemToObject", - createObject: ["cJSON_Create", this.nameForNamedType(enumType)], + createObject: [ + "cJSON_Create", + this.nameForNamedType(enumType), + ], deleteType: "cJSON_free", items: undefined, - isNullable + isNullable, }; }, - unionType => { + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.quicktypeTypeToCJSON(nullable, true, true); - } else { - return { - cType: ["struct ", this.nameForNamedType(unionType)], - optionalQualifier: "*", - cjsonType: "cJSON_Union", - isType: "", - getValue: ["cJSON_Get", this.nameForNamedType(unionType), "Value"], - addToObject: "cJSON_AddItemToObject", - createObject: ["cJSON_Create", this.nameForNamedType(unionType)], - deleteType: ["cJSON_Delete", this.nameForNamedType(unionType)], - items: undefined, - isNullable - }; } - } + + return { + cType: ["struct ", this.nameForNamedType(unionType)], + optionalQualifier: "*", + cjsonType: "cJSON_Union", + isType: "", + getValue: [ + "cJSON_Get", + this.nameForNamedType(unionType), + "Value", + ], + addToObject: "cJSON_AddItemToObject", + createObject: [ + "cJSON_Create", + this.nameForNamedType(unionType), + ], + deleteType: [ + "cJSON_Delete", + this.nameForNamedType(unionType), + ], + items: undefined, + isNullable, + }; + }, ); } @@ -3569,7 +5558,10 @@ export class CJSONRenderer extends ConvenienceRenderer { */ protected startFile(proposedFilename: Sourcelike): void { /* Check if previous file is closed, create a new file */ - assert(this.currentFilename === undefined, "Previous file wasn't finished"); + assert( + this.currentFilename === undefined, + "Previous file wasn't finished", + ); if (proposedFilename !== undefined) { this.currentFilename = this.sourcelikeToString(proposedFilename); } @@ -3585,20 +5577,30 @@ export class CJSONRenderer extends ConvenienceRenderer { "To get json data from cJSON object use the following: struct * data = cJSON_GetValue();", "To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create();", "To print json string from json data use the following: char * string = cJSON_Print();", - "To delete json data use the following: cJSON_Delete();" + "To delete json data use the following: cJSON_Delete();", ]); this.ensureBlankLine(); /* Write include guard */ this.emitLine( "#ifndef __", - allUpperWordStyle(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/, "g"), "_")), - "__" + allUpperWordStyle( + this.currentFilename.replace( + new RegExp(/[^a-zA-Z0-9]+/, "g"), + "_", + ), + ), + "__", ); this.emitLine( "#define __", - allUpperWordStyle(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/, "g"), "_")), - "__" + allUpperWordStyle( + this.currentFilename.replace( + new RegExp(/[^a-zA-Z0-9]+/, "g"), + "_", + ), + ), + "__", ); this.ensureBlankLine(); @@ -3647,8 +5649,13 @@ export class CJSONRenderer extends ConvenienceRenderer { /* Write include guard */ this.emitLine( "#endif /* __", - allUpperWordStyle(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/, "g"), "_")), - "__ */" + allUpperWordStyle( + this.currentFilename.replace( + new RegExp(/[^a-zA-Z0-9]+/, "g"), + "_", + ), + ), + "__ */", ); this.ensureBlankLine(); @@ -3689,7 +5696,12 @@ export class CJSONRenderer extends ConvenienceRenderer { * @pram global: true if global include, false otherwise (default) */ protected emitIncludeLine(name: Sourcelike, global = false): void { - this.emitLine("#include ", global ? "<" : '"', name, global ? ">" : '"'); + this.emitLine( + "#include ", + global ? "<" : '"', + name, + global ? ">" : '"', + ); } /** @@ -3697,7 +5709,11 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param lines: description block lines */ protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } /** @@ -3713,7 +5729,7 @@ export class CJSONRenderer extends ConvenienceRenderer { f: () => void, withName = "", withSemicolon = false, - withIndent = true + withIndent = true, ): void { this.emitLine(line, " {"); this.preventBlankLine(); @@ -3744,15 +5760,22 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param type: class, union or enum type * @param filename: current file name */ - protected emitIncludes(type: ClassType | UnionType | EnumType, filename: string): void { + protected emitIncludes( + type: ClassType | UnionType | EnumType, + filename: string, + ): void { /* List required includes */ const includes: IncludeMap = new Map(); if (type instanceof UnionType) { this.updateIncludes(false, includes, type); } else if (type instanceof ClassType) { - this.forEachClassProperty(type, "none", (_name, _jsonName, property) => { - this.updateIncludes(true, includes, property.type); - }); + this.forEachClassProperty( + type, + "none", + (_name, _jsonName, property) => { + this.updateIncludes(true, includes, property.type); + }, + ); } /* Emit includes */ @@ -3774,16 +5797,26 @@ export class CJSONRenderer extends ConvenienceRenderer { * @param includes: include map * @param propertyType: property type */ - protected updateIncludes(isClassMember: boolean, includes: IncludeMap, propertyType: Type): void { + protected updateIncludes( + isClassMember: boolean, + includes: IncludeMap, + propertyType: Type, + ): void { const propTypes = this.generatedTypes(isClassMember, propertyType); for (const t of propTypes) { const typeName = this.sourcelikeToString(t.name); - const propRecord: IncludeRecord = { kind: undefined, typeKind: undefined }; + const propRecord: IncludeRecord = { + kind: undefined, + typeKind: undefined, + }; if (t.type instanceof ClassType) { /* We can NOT forward declare direct class members, e.g. a class type is included at level#0 */ /* HOWEVER if it is not a direct class member, then we can SURELY forward declare it */ propRecord.typeKind = "class"; - propRecord.kind = t.level === 0 ? IncludeKind.Include : IncludeKind.ForwardDeclare; + propRecord.kind = + t.level === 0 + ? IncludeKind.Include + : IncludeKind.ForwardDeclare; if (t.forceInclude) { propRecord.kind = IncludeKind.Include; } @@ -3809,7 +5842,10 @@ export class CJSONRenderer extends ConvenienceRenderer { if (includes.has(typeName)) { const incKind = includes.get(typeName); /* If we already include the type as typed include, do not write it over with forward declare */ - if (incKind !== undefined && incKind.kind === IncludeKind.ForwardDeclare) { + if ( + incKind !== undefined && + incKind.kind === IncludeKind.ForwardDeclare + ) { includes.set(typeName, propRecord); } } else { @@ -3826,7 +5862,12 @@ export class CJSONRenderer extends ConvenienceRenderer { */ protected generatedTypes(isClassMember: boolean, type: Type): TypeRecord[] { const result: TypeRecord[] = []; - const recur = (forceInclude: boolean, isVariant: boolean, l: number, t: Type) => { + const recur = ( + forceInclude: boolean, + isVariant: boolean, + l: number, + t: Type, + ) => { if (t instanceof ArrayType) { recur(forceInclude, isVariant, l + 1, t.items); } else if (t instanceof ClassType) { @@ -3835,7 +5876,7 @@ export class CJSONRenderer extends ConvenienceRenderer { type: t, level: l, variant: isVariant, - forceInclude + forceInclude, }); } else if (t instanceof MapType) { recur(forceInclude, isVariant, l + 1, t.values); @@ -3845,7 +5886,7 @@ export class CJSONRenderer extends ConvenienceRenderer { type: t, level: l, variant: isVariant, - forceInclude: false + forceInclude: false, }); } else if (t instanceof UnionType) { /** @@ -3869,7 +5910,7 @@ export class CJSONRenderer extends ConvenienceRenderer { type: t, level: l, variant: true, - forceInclude + forceInclude, }); /** intentional "fall-through", add all subtypes as well - but forced include */ } diff --git a/packages/quicktype-core/src/language/CJSON/constants.ts b/packages/quicktype-core/src/language/CJSON/constants.ts index cdccf419c..6a0024c05 100644 --- a/packages/quicktype-core/src/language/CJSON/constants.ts +++ b/packages/quicktype-core/src/language/CJSON/constants.ts @@ -1,123 +1,122 @@ - /* Forbidden names for namespace */ export const keywords = [ - /* C and C++ keywords */ - "alignas", - "alignof", - "and", - "and_eq", - "asm", - "atomic_cancel", - "atomic_commit", - "atomic_noexcept", - "auto", - "bitand", - "bitor", - "bool", - "break", - "case", - "catch", - "char", - "char16_t", - "char32_t", - "class", - "compl", - "concept", - "const", - "constexpr", - "const_cast", - "continue", - "co_await", - "co_return", - "co_yield", - "decltype", - "default", - "delete", - "do", - "double", - "dynamic_cast", - "else", - "enum", - "explicit", - "export", - "extern", - "false", - "float", - "for", - "friend", - "goto", - "if", - "import", - "inline", - "int", - "long", - "module", - "mutable", - "namespace", - "new", - "noexcept", - "not", - "not_eq", - "nullptr", - "operator", - "or", - "or_eq", - "private", - "protected", - "public", - "register", - "reinterpret_cast", - "requires", - "restrict", - "return", - "short", - "signed", - "sizeof", - "static", - "static_assert", - "static_cast", - "struct", - "switch", - "synchronized", - "template", - "this", - "thread_local", - "throw", - "true", - "try", - "typedef", - "typeid", - "typename", - "typeof", - "union", - "unsigned", - "using", - "virtual", - "void", - "volatile", - "wchar_t", - "while", - "xor", - "xor_eq", - "override", - "final", - "transaction_safe", - "transaction_safe_dynamic", - "NULL", - /* cJSON keywords */ - "Array", - "ArrayReference", - "Bool", - "DoubleArray", - "False", - "FloatArray", - "IntArray", - "Object", - "Null", - "Number", - "Raw", - "String", - "StringArray", - "StringReference", - "True" + /* C and C++ keywords */ + "alignas", + "alignof", + "and", + "and_eq", + "asm", + "atomic_cancel", + "atomic_commit", + "atomic_noexcept", + "auto", + "bitand", + "bitor", + "bool", + "break", + "case", + "catch", + "char", + "char16_t", + "char32_t", + "class", + "compl", + "concept", + "const", + "constexpr", + "const_cast", + "continue", + "co_await", + "co_return", + "co_yield", + "decltype", + "default", + "delete", + "do", + "double", + "dynamic_cast", + "else", + "enum", + "explicit", + "export", + "extern", + "false", + "float", + "for", + "friend", + "goto", + "if", + "import", + "inline", + "int", + "long", + "module", + "mutable", + "namespace", + "new", + "noexcept", + "not", + "not_eq", + "nullptr", + "operator", + "or", + "or_eq", + "private", + "protected", + "public", + "register", + "reinterpret_cast", + "requires", + "restrict", + "return", + "short", + "signed", + "sizeof", + "static", + "static_assert", + "static_cast", + "struct", + "switch", + "synchronized", + "template", + "this", + "thread_local", + "throw", + "true", + "try", + "typedef", + "typeid", + "typename", + "typeof", + "union", + "unsigned", + "using", + "virtual", + "void", + "volatile", + "wchar_t", + "while", + "xor", + "xor_eq", + "override", + "final", + "transaction_safe", + "transaction_safe_dynamic", + "NULL", + /* cJSON keywords */ + "Array", + "ArrayReference", + "Bool", + "DoubleArray", + "False", + "FloatArray", + "IntArray", + "Object", + "Null", + "Number", + "Raw", + "String", + "StringArray", + "StringReference", + "True", ] as const; diff --git a/packages/quicktype-core/src/language/CJSON/language.ts b/packages/quicktype-core/src/language/CJSON/language.ts index 7c3854c9c..80563c040 100644 --- a/packages/quicktype-core/src/language/CJSON/language.ts +++ b/packages/quicktype-core/src/language/CJSON/language.ts @@ -21,10 +21,14 @@ * See test/languages.ts for the test cases which are not implmented/checked. */ -import { type RenderContext } from "../../Renderer"; -import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { CJSONRenderer } from "./CJSONRenderer"; @@ -35,7 +39,7 @@ const namingStyles = { "camel-case": "camel", "upper-underscore-case": "upper-underscore", "pascal-case-upper-acronyms": "pascal-upper-acronyms", - "camel-case-upper-acronyms": "camel-upper-acronyms" + "camel-case-upper-acronyms": "camel-upper-acronyms", } as const; /* cJSON generator options */ @@ -45,10 +49,10 @@ export const cJSONOptions = { "Source code generation type, whether to generate single or multiple source files", { "single-source": true, - "multi-source": false + "multi-source": false, } as const, "single-source", - "secondary" + "secondary", ), typeIntegerSize: new EnumOption( "integer-size", @@ -57,55 +61,67 @@ export const cJSONOptions = { int8_t: "int8_t", int16_t: "int16_t", int32_t: "int32_t", - int64_t: "int64_t" + int64_t: "int64_t", } as const, "int64_t", - "secondary" + "secondary", ), hashtableSize: new StringOption( "hashtable-size", "Hashtable size, used when maps are created (64 by default)", "SIZE", - "64" + "64", ), addTypedefAlias: new EnumOption( "typedef-alias", "Add typedef alias to unions, structs, and enums (no typedef by default)", { "no-typedef": false, - "add-typedef": true + "add-typedef": true, } as const, "no-typedef", - "secondary" + "secondary", ), printStyle: new EnumOption( "print-style", "Which cJSON print should be used (formatted by default)", { "print-formatted": false, - "print-unformatted": true + "print-unformatted": true, } as const, "print-formatted", - "secondary" + "secondary", + ), + typeNamingStyle: new EnumOption( + "type-style", + "Naming style for types", + namingStyles, + "pascal-case", + ), + memberNamingStyle: new EnumOption( + "member-style", + "Naming style for members", + namingStyles, + "underscore-case", ), - typeNamingStyle: new EnumOption("type-style", "Naming style for types", namingStyles, "pascal-case"), - memberNamingStyle: new EnumOption("member-style", "Naming style for members", namingStyles, "underscore-case"), enumeratorNamingStyle: new EnumOption( "enumerator-style", "Naming style for enumerators", namingStyles, - "upper-underscore-case" - ) + "upper-underscore-case", + ), }; /* cJSON generator target language */ export const cJSONLanguageConfig = { displayName: "C (cJSON)", names: ["cjson", "cJSON"], - extension: "h" + extension: "h", } as const; -export class CJSONTargetLanguage extends TargetLanguage { +export class CJSONTargetLanguage extends TargetLanguage< + typeof cJSONLanguageConfig +> { public constructor() { super(cJSONLanguageConfig); } @@ -140,7 +156,14 @@ export class CJSONTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): CJSONRenderer { + return new CJSONRenderer( + this, + renderContext, + getOptionValues(cJSONOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/CJSON/utils.ts b/packages/quicktype-core/src/language/CJSON/utils.ts index 2e74a50c7..4a09e1c56 100644 --- a/packages/quicktype-core/src/language/CJSON/utils.ts +++ b/packages/quicktype-core/src/language/CJSON/utils.ts @@ -1,10 +1,16 @@ -import { type Name } from "../../Naming"; -import { type Sourcelike } from "../../Source"; -import { isAscii, isLetterOrUnderscoreOrDigit, legalizeCharacters } from "../../support/Strings"; -import { type Type, type TypeKind } from "../../Type"; +import type { Name } from "../../Naming"; +import type { Sourcelike } from "../../Source"; +import { + isAscii, + isLetterOrUnderscoreOrDigit, + legalizeCharacters, +} from "../../support/Strings"; +import type { Type, TypeKind } from "../../Type"; /* Function used to format names */ -export const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); +export const legalizeName = legalizeCharacters( + (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), +); /* Used to build forbidden global names */ export enum GlobalNames { @@ -15,13 +21,13 @@ export enum GlobalNames { ValueTooShortException = 5, ValueTooLongException = 6, InvalidPatternException = 7, - CheckConstraint = 8 + CheckConstraint = 8, } /* To be able to support circles in multiple files - e.g. class#A using class#B using class#A (obviously not directly) we can forward declare them */ export enum IncludeKind { ForwardDeclare = "ForwardDeclare", - Include = "Include" + Include = "Include", } /* Used to map includes */ diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index 1a2323447..4013ebc7c 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -5,32 +5,62 @@ import { iterableSome, setUnion, toReadonlyArray, - withDefault + withDefault, } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; import { getAccessorName } from "../../attributes/AccessorNames"; import { enumCaseValues } from "../../attributes/EnumValues"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { type Declaration } from "../../DeclarationIR"; -import { DependencyName, type Name, type NameStyle, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import type { Declaration } from "../../DeclarationIR"; +import { + DependencyName, + type Name, + type NameStyle, + type Namer, + funPrefixNamer, +} from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; -import { type NamingStyle, makeNameStyle, stringEscape } from "../../support/Strings"; -import { assert, assertNever, defined, numberEnumValues, panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; +import { + type NamingStyle, + makeNameStyle, + stringEscape, +} from "../../support/Strings"; +import { + assert, + assertNever, + defined, + numberEnumValues, + panic, +} from "../../support/Support"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + MapType, + type Type, + UnionType, +} from "../../Type"; import { directlyReachableTypes, isNamedType, matchType, nullableFromUnion, - removeNullFromUnion + removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type cPlusPlusOptions } from "./language"; +import type { cPlusPlusOptions } from "./language"; import { BaseString, type ConstraintMember, @@ -47,7 +77,7 @@ import { constraintsForType, legalizeName, optionalAsSharedType, - optionalFactoryAsSharedType + optionalFactoryAsSharedType, } from "./utils"; export class CPlusPlusRenderer extends ConvenienceRenderer { @@ -62,7 +92,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { private _allTypeNames: Set; - private readonly _gettersAndSettersForPropertyName = new Map(); + private readonly _gettersAndSettersForPropertyName = new Map< + Name, + [Name, Name, Name] + >(); private readonly _namespaceNames: readonly string[]; @@ -98,7 +131,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); @@ -106,11 +139,20 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this._namespaceNames = _options.namespace.split("::"); this.typeNamingStyle = _options.typeNamingStyle; - this._namedTypeNameStyle = makeNameStyle(this.typeNamingStyle, legalizeName); + this._namedTypeNameStyle = makeNameStyle( + this.typeNamingStyle, + legalizeName, + ); this.enumeratorNamingStyle = _options.enumeratorNamingStyle; - this._memberNameStyle = makeNameStyle(_options.memberNamingStyle, legalizeName); - this._memberNamingFunction = funPrefixNamer("members", this._memberNameStyle); + this._memberNameStyle = makeNameStyle( + _options.memberNamingStyle, + legalizeName, + ); + this._memberNamingFunction = funPrefixNamer( + "members", + this._memberNameStyle, + ); this._gettersAndSettersForPropertyName = new Map(); this._allTypeNames = new Set(); @@ -241,15 +283,21 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { // Classes that don't require forward declarations can be stored // in std::optional ( or boost::optional ) private optionalType(t: Type): string { - if (this.isOptionalAsValuePossible(t)) return this.optionalTypeStack(); - else return this.optionalTypeHeap(); + if (this.isOptionalAsValuePossible(t)) { + return this.optionalTypeStack(); + } + + return this.optionalTypeHeap(); } // Returns a label that can be used to distinguish between // heap and stack based optional handling methods private optionalTypeLabel(t: Type): string { - if (this.isOptionalAsValuePossible(t)) return "stack"; - else return "heap"; + if (this.isOptionalAsValuePossible(t)) { + return "stack"; + } + + return "heap"; } protected getConstraintMembers(): ConstraintMember[] { @@ -258,45 +306,45 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { name: MemberNames.MinIntValue, getter: MemberNames.GetMinIntValue, setter: MemberNames.SetMinIntValue, - cppType: "int64_t" + cppType: "int64_t", }, { name: MemberNames.MaxIntValue, getter: MemberNames.GetMaxIntValue, setter: MemberNames.SetMaxIntValue, - cppType: "int64_t" + cppType: "int64_t", }, { name: MemberNames.MinDoubleValue, getter: MemberNames.GetMinDoubleValue, setter: MemberNames.SetMinDoubleValue, - cppType: "double" + cppType: "double", }, { name: MemberNames.MaxDoubleValue, getter: MemberNames.GetMaxDoubleValue, setter: MemberNames.SetMaxDoubleValue, - cppType: "double" + cppType: "double", }, { name: MemberNames.MinLength, getter: MemberNames.GetMinLength, setter: MemberNames.SetMinLength, - cppType: "size_t" + cppType: "size_t", }, { name: MemberNames.MaxLength, getter: MemberNames.GetMaxLength, setter: MemberNames.SetMaxLength, - cppType: "size_t" + cppType: "size_t", }, { name: MemberNames.Pattern, getter: MemberNames.GetPattern, setter: MemberNames.SetPattern, cppType: this._stringType.getType(), - cppConstType: this._stringType.getConstType() - } + cppConstType: this._stringType.getConstType(), + }, ]; } @@ -315,7 +363,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } protected addMemberName(type: MemberNames): void { - this._generatedMemberNames.set(type, this._memberNameStyle(MemberNames[type])); + this._generatedMemberNames.set( + type, + this._memberNameStyle(MemberNames[type]), + ); } protected setupGlobalNames(): void { @@ -332,11 +383,17 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { return [...keywords, ...this._forbiddenGlobalNames]; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -353,7 +410,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enumerators", makeNameStyle(this.enumeratorNamingStyle, legalizeName)); + return funPrefixNamer( + "enumerators", + makeNameStyle(this.enumeratorNamingStyle, legalizeName), + ); } protected makeNamesForPropertyGetterAndSetter( @@ -361,15 +421,23 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { _className: Name, _p: ClassProperty, _jsonName: string, - name: Name + name: Name, ): [Name, Name, Name] { - const getterName = new DependencyName(this._memberNamingFunction, name.order, lookup => `get_${lookup(name)}`); + const getterName = new DependencyName( + this._memberNamingFunction, + name.order, + (lookup) => `get_${lookup(name)}`, + ); const mutableGetterName = new DependencyName( this._memberNamingFunction, name.order, - lookup => `getMutable_${lookup(name)}` + (lookup) => `getMutable_${lookup(name)}`, + ); + const setterName = new DependencyName( + this._memberNamingFunction, + name.order, + (lookup) => `set_${lookup(name)}`, ); - const setterName = new DependencyName(this._memberNamingFunction, name.order, lookup => `set_${lookup(name)}`); return [getterName, mutableGetterName, setterName]; } @@ -378,9 +446,15 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { className: Name, p: ClassProperty, jsonName: string, - name: Name + name: Name, ): Name[] { - const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter(c, className, p, jsonName, name); + const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( + c, + className, + p, + jsonName, + name, + ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return getterAndSetterNames; } @@ -388,17 +462,25 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { protected withConst(s: Sourcelike): Sourcelike { if (this._options.westConst) { return ["const ", s]; - } else { - return [s, " const"]; } + + return [s, " const"]; } protected emitInclude(global: boolean, name: Sourcelike): void { - this.emitLine("#include ", global ? "<" : '"', name, global ? ">" : '"'); + this.emitLine( + "#include ", + global ? "<" : '"', + name, + global ? ">" : '"', + ); } protected startFile(basename: Sourcelike, includeHelper = true): void { - assert(this._currentFilename === undefined, "Previous file wasn't finished"); + assert( + this._currentFilename === undefined, + "Previous file wasn't finished", + ); if (basename !== undefined) { this._currentFilename = this.sourcelikeToString(basename); } @@ -406,7 +488,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { - this.emitCommentLines([" To parse this JSON data, first install", ""]); + this.emitCommentLines([ + " To parse this JSON data, first install", + "", + ]); if (this._options.boost) { this.emitCommentLines([" Boost http://www.boost.org"]); } @@ -415,23 +500,38 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { " json.hpp https://github.com/nlohmann/json", "", " Then include this file, and then do", - "" + "", ]); if (this._options.typeSourceStyle) { this.forEachTopLevel("none", (_, topLevelName) => { - this.emitLine("// ", topLevelName, " data = nlohmann::json::parse(jsonString);"); + this.emitLine( + "// ", + topLevelName, + " data = nlohmann::json::parse(jsonString);", + ); }); } else { - this.emitLine("// ", basename, " data = nlohmann::json::parse(jsonString);"); + this.emitLine( + "// ", + basename, + " data = nlohmann::json::parse(jsonString);", + ); } if (this._options.wstring) { this.emitLine("//"); - this.emitLine("// You can get std::wstring data back out using"); + this.emitLine( + "// You can get std::wstring data back out using", + ); this.emitLine("//"); this.forEachTopLevel("none", (_, topLevelName) => { - this.emitLine("// std::wcout << ", "wdump((nlohmann::json) ", topLevelName, ");"); + this.emitLine( + "// std::wcout << ", + "wdump((nlohmann::json) ", + topLevelName, + ");", + ); }); } } @@ -487,10 +587,19 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } - protected emitBlock(line: Sourcelike, withSemicolon: boolean, f: () => void, withIndent = true): void { + protected emitBlock( + line: Sourcelike, + withSemicolon: boolean, + f: () => void, + withIndent = true, + ): void { this.emitLine(line, " {"); this.preventBlankLine(); if (withIndent) { @@ -507,7 +616,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } } - protected emitNamespaces(namespaceNames: Iterable, f: () => void): void { + protected emitNamespaces( + namespaceNames: Iterable, + f: () => void, + ): void { const namesArray = toReadonlyArray(namespaceNames); const first = namesArray[0]; if (first === undefined) { @@ -517,7 +629,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ["namespace ", first], false, () => this.emitNamespaces(namesArray.slice(1), f), - namesArray.length === 1 + namesArray.length === 1, ); } } @@ -526,10 +638,16 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { nonNulls: ReadonlySet, ctx: TypeContext, withIssues: boolean, - forceNarrowString: boolean + forceNarrowString: boolean, ): Sourcelike { if (nonNulls.size === 1) { - return this.cppType(defined(iterableFirst(nonNulls)), ctx, withIssues, forceNarrowString, false); + return this.cppType( + defined(iterableFirst(nonNulls)), + ctx, + withIssues, + forceNarrowString, + false, + ); } const typeList: Sourcelike = []; @@ -544,12 +662,12 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: false, - inJsonNamespace: ctx.inJsonNamespace + inJsonNamespace: ctx.inJsonNamespace, }, withIssues, false, - false - ) + false, + ), ); } @@ -558,17 +676,20 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { protected variantType(u: UnionType, inJsonNamespace: boolean): Sourcelike { const [maybeNull, nonNulls] = removeNullFromUnion(u, true); - assert(nonNulls.size >= 2, "Variant not needed for less than two types."); + assert( + nonNulls.size >= 2, + "Variant not needed for less than two types.", + ); const indirection = maybeNull !== null; const variant = this.cppTypeInOptional( nonNulls, { needsForwardIndirection: !indirection, needsOptionalIndirection: !indirection, - inJsonNamespace + inJsonNamespace, }, true, - false + false, ); if (!indirection) { return variant; @@ -578,14 +699,20 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } protected ourQualifier(inJsonNamespace: boolean): Sourcelike { - return inJsonNamespace ? [arrayIntercalate("::", this._namespaceNames), "::"] : []; + return inJsonNamespace + ? [arrayIntercalate("::", this._namespaceNames), "::"] + : []; } protected jsonQualifier(inJsonNamespace: boolean): Sourcelike { return inJsonNamespace ? [] : "nlohmann::"; } - protected variantIndirection(type: Type, needIndirection: boolean, typeSrc: Sourcelike): Sourcelike { + protected variantIndirection( + type: Type, + needIndirection: boolean, + typeSrc: Sourcelike, + ): Sourcelike { if (!needIndirection) return typeSrc; return [this.optionalType(type), "<", typeSrc, ">"]; } @@ -595,7 +722,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ctx: TypeContext, withIssues: boolean, forceNarrowString: boolean, - isOptional: boolean + isOptional: boolean, ): Sourcelike { const inJsonNamespace = ctx.inJsonNamespace; if (isOptional && t instanceof UnionType) { @@ -610,52 +737,57 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { const typeSource = matchType( t, - _anyType => { + (_anyType) => { isOptional = false; return maybeAnnotated(withIssues, anyTypeIssueAnnotation, [ this.jsonQualifier(inJsonNamespace), - "json" + "json", ]); }, - _nullType => { + (_nullType) => { isOptional = false; return maybeAnnotated(withIssues, nullTypeIssueAnnotation, [ this.jsonQualifier(inJsonNamespace), - "json" + "json", ]); }, - _boolType => "bool", - _integerType => "int64_t", - _doubleType => "double", - _stringType => { + (_boolType) => "bool", + (_integerType) => "int64_t", + (_doubleType) => "double", + (_stringType) => { if (forceNarrowString) { return "std::string"; - } else { - return this._stringType.getType(); } + + return this._stringType.getType(); }, - arrayType => [ + (arrayType) => [ "std::vector<", this.cppType( arrayType.items, { needsForwardIndirection: false, needsOptionalIndirection: true, - inJsonNamespace + inJsonNamespace, }, withIssues, forceNarrowString, - false + false, ), - ">" + ">", ], - classType => + (classType) => this.variantIndirection( classType, - ctx.needsForwardIndirection && this.isForwardDeclaredType(classType) && !isOptional, - [this.ourQualifier(inJsonNamespace), this.nameForNamedType(classType)] + ctx.needsForwardIndirection && + this.isForwardDeclaredType(classType) && + !isOptional, + [ + this.ourQualifier(inJsonNamespace), + this.nameForNamedType(classType), + ], ), - mapType => { + (mapType) => { let keyType = this._stringType.getType(); if (forceNarrowString) { keyType = "std::string"; @@ -670,17 +802,20 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: false, needsOptionalIndirection: true, - inJsonNamespace + inJsonNamespace, }, withIssues, forceNarrowString, - false + false, ), - ">" + ">", ]; }, - enumType => [this.ourQualifier(inJsonNamespace), this.nameForNamedType(enumType)], - unionType => { + (enumType) => [ + this.ourQualifier(inJsonNamespace), + this.nameForNamedType(enumType), + ], + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { isOptional = true; @@ -689,16 +824,19 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: false, needsOptionalIndirection: false, - inJsonNamespace + inJsonNamespace, }, withIssues, forceNarrowString, - false + false, ); - } else { - return [this.ourQualifier(inJsonNamespace), this.nameForNamedType(unionType)]; } - } + + return [ + this.ourQualifier(inJsonNamespace), + this.nameForNamedType(unionType), + ]; + }, ); if (!isOptional) return typeSource; return [this.optionalType(t), "<", typeSource, ">"]; @@ -708,9 +846,17 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { * similar to cppType, it practically gathers all the generated types within * 't'. It also records, whether a given sub-type is part of a variant or not. */ - protected generatedTypes(isClassMember: boolean, theType: Type): TypeRecord[] { + protected generatedTypes( + isClassMember: boolean, + theType: Type, + ): TypeRecord[] { const result: TypeRecord[] = []; - const recur = (forceInclude: boolean, isVariant: boolean, l: number, t: Type): void => { + const recur = ( + forceInclude: boolean, + isVariant: boolean, + l: number, + t: Type, + ): void => { if (t instanceof ArrayType) { recur(true, isVariant, l + 1, t.items); } else if (t instanceof ClassType) { @@ -719,7 +865,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { type: t, level: l, variant: isVariant, - forceInclude + forceInclude, }); } else if (t instanceof MapType) { recur(true, isVariant, l + 1, t.values); @@ -729,7 +875,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { type: t, level: l, variant: isVariant, - forceInclude: false + forceInclude: false, }); } else if (t instanceof UnionType) { /** @@ -753,7 +899,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { type: t, level: l, variant: true, - forceInclude + forceInclude, }); /** intentional "fall-through", add all subtypes as well - but forced include */ } @@ -779,7 +925,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitLine(cppType, " ", name, ";"); } - protected emitClassMembers(c: ClassType, constraints: Map | undefined): void { + protected emitClassMembers( + c: ClassType, + constraints: Map | undefined, + ): void { if (this._options.codeFormat) { this.emitLine("private:"); @@ -790,17 +939,19 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, true, false, - property.isOptional + property.isOptional, ), - name + name, ); if (constraints?.has(jsonName)) { /** FIXME!!! NameStyle will/can collide with other Names */ - const cnst = this.lookupGlobalName(GlobalNames.ClassMemberConstraints); + const cnst = this.lookupGlobalName( + GlobalNames.ClassMemberConstraints, + ); this.emitMember(cnst, this.constraintMember(jsonName)); } }); @@ -818,28 +969,28 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, true, false, - property.isOptional + property.isOptional, ), - name + name, ); } else { const [getterName, mutableGetterName, setterName] = defined( - this._gettersAndSettersForPropertyName.get(name) + this._gettersAndSettersForPropertyName.get(name), ); const rendered = this.cppType( property.type, { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, true, false, - property.isOptional + property.isOptional, ); /** @@ -847,12 +998,24 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { * One might as why the "this->xxx = value". Simple if we have * a member called 'value' value = value will screw up the compiler */ - const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); + const checkConst = this.lookupGlobalName( + GlobalNames.CheckConstraint, + ); if ( - (property.type instanceof UnionType && property.type.findMember("null") !== undefined) || - (property.isOptional && property.type.kind !== "null" && property.type.kind !== "any") + (property.type instanceof UnionType && + property.type.findMember("null") !== undefined) || + (property.isOptional && + property.type.kind !== "null" && + property.type.kind !== "any") ) { - this.emitLine(rendered, " ", getterName, "() const { return ", name, "; }"); + this.emitLine( + rendered, + " ", + getterName, + "() const { return ", + name, + "; }", + ); if (constraints?.has(jsonName)) { this.emitLine( "void ", @@ -867,14 +1030,36 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.constraintMember(jsonName), ", *value); this->", name, - " = value; }" + " = value; }", ); } else { - this.emitLine("void ", setterName, "(", rendered, " value) { this->", name, " = value; }"); + this.emitLine( + "void ", + setterName, + "(", + rendered, + " value) { this->", + name, + " = value; }", + ); } } else { - this.emitLine(this.withConst(rendered), " & ", getterName, "() const { return ", name, "; }"); - this.emitLine(rendered, " & ", mutableGetterName, "() { return ", name, "; }"); + this.emitLine( + this.withConst(rendered), + " & ", + getterName, + "() const { return ", + name, + "; }", + ); + this.emitLine( + rendered, + " & ", + mutableGetterName, + "() { return ", + name, + "; }", + ); if (constraints?.has(jsonName)) { this.emitLine( "void ", @@ -889,7 +1074,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.constraintMember(jsonName), ", value); this->", name, - " = value; }" + " = value; }", ); } else { this.emitLine( @@ -899,7 +1084,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.withConst(rendered), " & value) { this->", name, - " = value; }" + " = value; }", ); } } @@ -909,7 +1094,9 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { }); } - protected generateClassConstraints(c: ClassType): Map | undefined { + protected generateClassConstraints( + c: ClassType, + ): Map | undefined { const res: Map = new Map(); this.forEachClassProperty(c, "none", (_name, jsonName, property) => { const constraints = constraintsForType(property.type); @@ -922,23 +1109,31 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, true, false, - property.isOptional + property.isOptional, ); res.set(jsonName, [ this.constraintMember(jsonName), "(", - minMax?.[0] && cppType === "int64_t" ? String(minMax[0]) : this._nulloptType, + minMax?.[0] && cppType === "int64_t" + ? String(minMax[0]) + : this._nulloptType, ", ", - minMax?.[1] && cppType === "int64_t" ? String(minMax[1]) : this._nulloptType, + minMax?.[1] && cppType === "int64_t" + ? String(minMax[1]) + : this._nulloptType, ", ", - minMax?.[0] && cppType === "double" ? String(minMax[0]) : this._nulloptType, + minMax?.[0] && cppType === "double" + ? String(minMax[0]) + : this._nulloptType, ", ", - minMax?.[1] && cppType === "double" ? String(minMax[1]) : this._nulloptType, + minMax?.[1] && cppType === "double" + ? String(minMax[1]) + : this._nulloptType, ", ", minMaxLength?.[0] ? String(minMaxLength[0]) : this._nulloptType, ", ", @@ -949,10 +1144,12 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { : [ this._stringType.getType(), "(", - this._stringType.createStringLiteral([stringEscape(pattern)]), - ")" + this._stringType.createStringLiteral([ + stringEscape(pattern), + ]), + ")", ], - ")" + ")", ]); }); @@ -961,34 +1158,40 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { protected emitClass(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); - this.emitBlock([this._options.codeFormat ? "class " : "struct ", className], true, () => { - const constraints = this.generateClassConstraints(c); - if (this._options.codeFormat) { - this.emitLine("public:"); - if (constraints === undefined) { - this.emitLine(className, "() = default;"); - } else { - this.emitLine(className, "() :"); - let numEmits = 0; - constraints.forEach((initializer: Sourcelike, _propName: string) => { - numEmits++; - this.indent(() => { - if (numEmits === constraints.size) { - this.emitLine(initializer); - } else { - this.emitLine(initializer, ","); - } - }); - }); - this.emitLine("{}"); - } + this.emitBlock( + [this._options.codeFormat ? "class " : "struct ", className], + true, + () => { + const constraints = this.generateClassConstraints(c); + if (this._options.codeFormat) { + this.emitLine("public:"); + if (constraints === undefined) { + this.emitLine(className, "() = default;"); + } else { + this.emitLine(className, "() :"); + let numEmits = 0; + constraints.forEach( + (initializer: Sourcelike, _propName: string) => { + numEmits++; + this.indent(() => { + if (numEmits === constraints.size) { + this.emitLine(initializer); + } else { + this.emitLine(initializer, ","); + } + }); + }, + ); + this.emitLine("{}"); + } - this.emitLine("virtual ~", className, "() = default;"); - this.ensureBlankLine(); - } + this.emitLine("virtual ~", className, "() = default;"); + this.ensureBlankLine(); + } - this.emitClassMembers(c, constraints); - }); + this.emitClassMembers(c, constraints); + }, + ); } protected emitTopLevelHeaders(t: Type, className: Name): void { @@ -996,26 +1199,45 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (t instanceof MapType && this._stringType !== this.NarrowString) { const ourQualifier = this.ourQualifier(true); - this.emitBlock(["struct adl_serializer<", ourQualifier, className, ">"], true, () => { - this.emitLine("template <>"); - this.emitLine( - "static void from_json(", - this.withConst("json"), - " & j, ", - ourQualifier, - className, - " & x);" - ); - this.emitLine("static void to_json(json & j, ", this.withConst([ourQualifier, className]), " & x);"); - }); + this.emitBlock( + ["struct adl_serializer<", ourQualifier, className, ">"], + true, + () => { + this.emitLine("template <>"); + this.emitLine( + "static void from_json(", + this.withConst("json"), + " & j, ", + ourQualifier, + className, + " & x);", + ); + this.emitLine( + "static void to_json(json & j, ", + this.withConst([ourQualifier, className]), + " & x);", + ); + }, + ); } } protected emitClassHeaders(className: Name): void { const ourQualifier = this.ourQualifier(false); - this.emitLine("void from_json(", this.withConst("json"), " & j, ", ourQualifier, className, " & x);"); - this.emitLine("void to_json(json & j, ", this.withConst([ourQualifier, className]), " & x);"); + this.emitLine( + "void from_json(", + this.withConst("json"), + " & j, ", + ourQualifier, + className, + " & x);", + ); + this.emitLine( + "void to_json(json & j, ", + this.withConst([ourQualifier, className]), + " & x);", + ); } protected emitTopLevelFunction(t: Type, className: Name): void { @@ -1035,7 +1257,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { " & j, ", ourQualifier, className, - "& x)" + "& x)", ], false, () => { @@ -1044,34 +1266,35 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, true, - false + false, ); toType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, false, - false + false, ); this.emitLine([ "x = ", - this._stringType.wrapEncodingChange([ourQualifier], cppType, toType, [ - "j.get<", + this._stringType.wrapEncodingChange( + [ourQualifier], cppType, - ">()" - ]), - ";" + toType, + ["j.get<", cppType, ">()"], + ), + ";", ]); - } + }, ); this.emitBlock( @@ -1081,7 +1304,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { className, ">::to_json(json & j, ", this.withConst([ourQualifier, className]), - " & x)" + " & x)", ], false, () => { @@ -1090,30 +1313,35 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, false, - false + false, ); toType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, true, - false + false, ); this.emitLine([ "j = ", - this._stringType.wrapEncodingChange([ourQualifier], cppType, toType, "x"), - ";" + this._stringType.wrapEncodingChange( + [ourQualifier], + cppType, + toType, + "x", + ), + ";", ]); - } + }, ); } } @@ -1124,16 +1352,28 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { let toType: Sourcelike; this.emitBlock( - ["inline void from_json(", this.withConst("json"), " & j, ", ourQualifier, className, "& x)"], + [ + "inline void from_json(", + this.withConst("json"), + " & j, ", + ourQualifier, + className, + "& x)", + ], false, () => { this.forEachClassProperty(c, "none", (name, json, p) => { - const [, , setterName] = defined(this._gettersAndSettersForPropertyName.get(name)); + const [, , setterName] = defined( + this._gettersAndSettersForPropertyName.get(name), + ); const propType = p.type; let assignment: WrappingCode; if (this._options.codeFormat) { - assignment = new WrappingCode(["x.", setterName, "("], [")"]); + assignment = new WrappingCode( + ["x.", setterName, "("], + [")"], + ); } else { assignment = new WrappingCode(["x.", name, " = "], []); } @@ -1149,26 +1389,37 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), - [this._stringType.createStringLiteral([stringEscape(json)])] + [ + this._stringType.createStringLiteral( + [stringEscape(json)], + ), + ], ), - ")" - ] + ")", + ], ), - ";" + ";", ); return; } if (p.isOptional || propType instanceof UnionType) { - const [nullOrOptional, typeSet] = (function (): [boolean, ReadonlySet] { + const [nullOrOptional, typeSet] = ((): [ + boolean, + ReadonlySet, + ] => { if (propType instanceof UnionType) { - const [maybeNull, nonNulls] = removeNullFromUnion(propType, true); - return [maybeNull !== null || p.isOptional, nonNulls]; - } else { - const set = new Set(); - set.add(propType); - return [true, set]; + const [maybeNull, nonNulls] = + removeNullFromUnion(propType, true); + return [ + maybeNull !== null || p.isOptional, + nonNulls, + ]; } + + const set = new Set(); + set.add(propType); + return [true, set]; })(); if (nullOrOptional) { cppType = this.cppTypeInOptional( @@ -1176,20 +1427,20 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: false, needsOptionalIndirection: false, - inJsonNamespace: false + inJsonNamespace: false, }, false, - true + true, ); toType = this.cppTypeInOptional( typeSet, { needsForwardIndirection: false, needsOptionalIndirection: false, - inJsonNamespace: false + inJsonNamespace: false, }, false, - false + false, ); this.emitLine( assignment.wrap( @@ -1197,8 +1448,18 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { [ this._stringType.wrapEncodingChange( [ourQualifier], - [this.optionalType(propType), "<", cppType, ">"], - [this.optionalType(propType), "<", toType, ">"], + [ + this.optionalType(propType), + "<", + cppType, + ">", + ], + [ + this.optionalType(propType), + "<", + toType, + ">", + ], [ ourQualifier, `get_${this.optionalTypeLabel(propType)}_optional<`, @@ -1208,14 +1469,22 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), - [this._stringType.createStringLiteral([stringEscape(json)])] + [ + this._stringType.createStringLiteral( + [ + stringEscape( + json, + ), + ], + ), + ], ), - ")" - ] - ) - ] + ")", + ], + ), + ], ), - ";" + ";", ); return; } @@ -1226,48 +1495,59 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, false, true, - p.isOptional + p.isOptional, ); toType = this.cppType( propType, { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, false, false, - p.isOptional + p.isOptional, ); this.emitLine( assignment.wrap( [], - this._stringType.wrapEncodingChange([ourQualifier], cppType, toType, [ - "j.at(", - this._stringType.wrapEncodingChange( - [ourQualifier], - this._stringType.getType(), - this.NarrowString.getType(), - this._stringType.createStringLiteral([stringEscape(json)]) - ), - ").get<", + this._stringType.wrapEncodingChange( + [ourQualifier], cppType, - ">()" - ]) + toType, + [ + "j.at(", + this._stringType.wrapEncodingChange( + [ourQualifier], + this._stringType.getType(), + this.NarrowString.getType(), + this._stringType.createStringLiteral([ + stringEscape(json), + ]), + ), + ").get<", + cppType, + ">()", + ], + ), ), - ";" + ";", ); }); - } + }, ); this.ensureBlankLine(); this.emitBlock( - ["inline void to_json(json & j, ", this.withConst([ourQualifier, className]), " & x)"], + [ + "inline void to_json(json & j, ", + this.withConst([ourQualifier, className]), + " & x)", + ], false, () => { this.emitLine("j = json::object();"); @@ -1278,24 +1558,26 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, false, false, - p.isOptional + p.isOptional, ); toType = this.cppType( propType, { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, false, true, - p.isOptional + p.isOptional, + ); + const [getterName, ,] = defined( + this._gettersAndSettersForPropertyName.get(name), ); - const [getterName, ,] = defined(this._gettersAndSettersForPropertyName.get(name)); let getter: Sourcelike[]; if (this._options.codeFormat) { getter = [getterName, "()"]; @@ -1309,29 +1591,41 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), - this._stringType.createStringLiteral([stringEscape(json)]) + this._stringType.createStringLiteral([ + stringEscape(json), + ]), ), "] = ", - this._stringType.wrapEncodingChange([ourQualifier], cppType, toType, ["x.", getter]), - ";" + this._stringType.wrapEncodingChange( + [ourQualifier], + cppType, + toType, + ["x.", getter], + ), + ";", ]; if (p.isOptional && this._options.hideNullOptional) { this.emitBlock( [ "if (", - this._stringType.wrapEncodingChange([ourQualifier], cppType, toType, ["x.", getter]), - ")" + this._stringType.wrapEncodingChange( + [ourQualifier], + cppType, + toType, + ["x.", getter], + ), + ")", ], false, () => { this.emitLine(assignment); - } + }, ); } else { this.emitLine(assignment); } }); - } + }, ); } @@ -1351,11 +1645,25 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } }); this.emitDescription(this.descriptionForType(e)); - this.emitLine("enum class ", enumName, " : ", this._enumType, " { ", caseNames, " };"); + this.emitLine( + "enum class ", + enumName, + " : ", + this._enumType, + " { ", + caseNames, + " };", + ); } protected emitUnionTypedefs(u: UnionType, unionName: Name): void { - this.emitLine("using ", unionName, " = ", this.variantType(u, false), ";"); + this.emitLine( + "using ", + unionName, + " = ", + this.variantType(u, false), + ";", + ); } protected emitUnionHeaders(u: UnionType): void { @@ -1371,17 +1679,31 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: false, needsOptionalIndirection: false, - inJsonNamespace: true + inJsonNamespace: true, }, false, - false + false, ); this.emitLine("template <>"); - this.emitBlock(["struct adl_serializer<", variantType, ">"], true, () => { - this.emitLine("static void from_json(", this.withConst("json"), " & j, ", variantType, " & x);"); - this.emitLine("static void to_json(json & j, ", this.withConst(variantType), " & x);"); - }); + this.emitBlock( + ["struct adl_serializer<", variantType, ">"], + true, + () => { + this.emitLine( + "static void from_json(", + this.withConst("json"), + " & j, ", + variantType, + " & x);", + ); + this.emitLine( + "static void to_json(json & j, ", + this.withConst(variantType), + " & x);", + ); + }, + ); } protected emitUnionFunctions(u: UnionType): void { @@ -1397,7 +1719,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ["class", "is_object"], ["map", "is_object"], ["array", "is_array"], - ["enum", "is_string"] + ["enum", "is_string"], ]; const nonNulls = removeNullFromUnion(u, true)[1]; const variantType = this.cppTypeInOptional( @@ -1405,10 +1727,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: false, needsOptionalIndirection: false, - inJsonNamespace: true + inJsonNamespace: true, }, false, - false + false, ); this.emitBlock( @@ -1419,113 +1741,154 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.withConst("json"), " & j, ", variantType, - " & x)" + " & x)", ], false, () => { let onFirst = true; for (const [kind, func] of functionForKind) { - const typeForKind = iterableFind(nonNulls, t => t.kind === kind); + const typeForKind = iterableFind( + nonNulls, + (t) => t.kind === kind, + ); if (typeForKind === undefined) continue; - this.emitLine(onFirst ? "if" : "else if", " (j.", func, "())"); + this.emitLine( + onFirst ? "if" : "else if", + " (j.", + func, + "())", + ); this.indent(() => { const cppType = this.cppType( typeForKind, { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, true, - false + false, ); const toType = this.cppType( typeForKind, { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, false, - false + false, ); this.emitLine( "x = ", - this._stringType.wrapEncodingChange([ourQualifier], cppType, toType, [ - "j.get<", + this._stringType.wrapEncodingChange( + [ourQualifier], cppType, - ">()" - ]), - ";" + toType, + ["j.get<", cppType, ">()"], + ), + ";", ); }); onFirst = false; } - this.emitLine('else throw std::runtime_error("Could not deserialise!");'); - } + this.emitLine( + 'else throw std::runtime_error("Could not deserialise!");', + ); + }, ); this.ensureBlankLine(); this.emitBlock( - ["inline void adl_serializer<", variantType, ">::to_json(json & j, ", this.withConst(variantType), " & x)"], + [ + "inline void adl_serializer<", + variantType, + ">::to_json(json & j, ", + this.withConst(variantType), + " & x)", + ], false, () => { - this.emitBlock(["switch (x.", this._variantIndexMethodName, "())"], false, () => { - let i = 0; - for (const t of nonNulls) { - this.emitLine("case ", i.toString(), ":"); - this.indent(() => { - const cppType = this.cppType( - t, - { - needsForwardIndirection: true, - needsOptionalIndirection: true, - inJsonNamespace: true - }, - false, - false, - false - ); - const toType = this.cppType( - t, - { - needsForwardIndirection: true, - needsOptionalIndirection: true, - inJsonNamespace: true - }, - false, - true, - false - ); - this.emitLine( - "j = ", - this._stringType.wrapEncodingChange([ourQualifier], cppType, toType, [ - this._options.boost ? "boost::get<" : "std::get<", - cppType, - ">(x)" - ]), - ";" - ); - this.emitLine("break;"); - }); - i++; - } - - this.emitLine('default: throw std::runtime_error("Input JSON does not conform to schema!");'); - }); - } - ); - } - - protected emitEnumHeaders(enumName: Name): void { - const ourQualifier = this.ourQualifier(false); - - this.emitLine("void from_json(", this.withConst("json"), " & j, ", ourQualifier, enumName, " & x);"); - this.emitLine("void to_json(json & j, ", this.withConst([ourQualifier, enumName]), " & x);"); - } + this.emitBlock( + ["switch (x.", this._variantIndexMethodName, "())"], + false, + () => { + let i = 0; + for (const t of nonNulls) { + this.emitLine("case ", i.toString(), ":"); + this.indent(() => { + const cppType = this.cppType( + t, + { + needsForwardIndirection: true, + needsOptionalIndirection: true, + inJsonNamespace: true, + }, + false, + false, + false, + ); + const toType = this.cppType( + t, + { + needsForwardIndirection: true, + needsOptionalIndirection: true, + inJsonNamespace: true, + }, + false, + true, + false, + ); + this.emitLine( + "j = ", + this._stringType.wrapEncodingChange( + [ourQualifier], + cppType, + toType, + [ + this._options.boost + ? "boost::get<" + : "std::get<", + cppType, + ">(x)", + ], + ), + ";", + ); + this.emitLine("break;"); + }); + i++; + } + + this.emitLine( + 'default: throw std::runtime_error("Input JSON does not conform to schema!");', + ); + }, + ); + }, + ); + } + + protected emitEnumHeaders(enumName: Name): void { + const ourQualifier = this.ourQualifier(false); + + this.emitLine( + "void from_json(", + this.withConst("json"), + " & j, ", + ourQualifier, + enumName, + " & x);", + ); + this.emitLine( + "void to_json(json & j, ", + this.withConst([ourQualifier, enumName]), + " & x);", + ); + } private isLargeEnum(e: EnumType): boolean { // This is just an estimation. Someone might want to do some @@ -1537,7 +1900,14 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { const ourQualifier = this.ourQualifier(false); this.emitBlock( - ["inline void from_json(", this.withConst("json"), " & j, ", ourQualifier, enumName, " & x)"], + [ + "inline void from_json(", + this.withConst("json"), + " & j, ", + ourQualifier, + enumName, + " & x)", + ], false, () => { if (this.isLargeEnum(e)) { @@ -1548,34 +1918,48 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { ", ", ourQualifier, enumName, - "> enumValues" + "> enumValues", ], true, () => { - this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine( - "{", - this._stringType.wrapEncodingChange( - [ourQualifier], - this._stringType.getType(), - this.NarrowString.getType(), - [this._stringType.createStringLiteral([stringEscape(jsonName)])] - ), - ", ", - ourQualifier, - enumName, - "::", - name, - "}," - ); - }); - } + this.forEachEnumCase( + e, + "none", + (name, jsonName) => { + this.emitLine( + "{", + this._stringType.wrapEncodingChange( + [ourQualifier], + this._stringType.getType(), + this.NarrowString.getType(), + [ + this._stringType.createStringLiteral( + [stringEscape(jsonName)], + ), + ], + ), + ", ", + ourQualifier, + enumName, + "::", + name, + "},", + ); + }, + ); + }, ); - this.emitLine(`auto iter = enumValues.find(j.get<${this._stringType.getType()}>());`); - this.emitBlock("if (iter != enumValues.end())", false, () => { - this.emitLine("x = iter->second;"); - }); + this.emitLine( + `auto iter = enumValues.find(j.get<${this._stringType.getType()}>());`, + ); + this.emitBlock( + "if (iter != enumValues.end())", + false, + () => { + this.emitLine("x = iter->second;"); + }, + ); } else { let onFirst = true; this.forEachEnumCase(e, "none", (name, jsonName) => { @@ -1587,25 +1971,35 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), - [this._stringType.createStringLiteral([stringEscape(jsonName)])] + [ + this._stringType.createStringLiteral([ + stringEscape(jsonName), + ]), + ], ), ") x = ", ourQualifier, enumName, "::", name, - ";" + ";", ); onFirst = false; }); - this.emitLine('else { throw std::runtime_error("Input JSON does not conform to schema!"); }'); + this.emitLine( + 'else { throw std::runtime_error("Input JSON does not conform to schema!"); }', + ); } - } + }, ); this.ensureBlankLine(); this.emitBlock( - ["inline void to_json(json & j, ", this.withConst([ourQualifier, enumName]), " & x)"], + [ + "inline void to_json(json & j, ", + this.withConst([ourQualifier, enumName]), + " & x)", + ], false, () => { this.emitBlock("switch (x)", false, () => { @@ -1621,18 +2015,22 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), - [this._stringType.createStringLiteral([stringEscape(jsonName)])] + [ + this._stringType.createStringLiteral([ + stringEscape(jsonName), + ]), + ], ), - "; break;" + "; break;", ); }); this.emitLine( `default: throw std::runtime_error("Unexpected value in enumeration \\"`, enumName, - `\\": " + std::to_string(static_cast(x)));` + `\\": " + std::to_string(static_cast(x)));`, ); }); - } + }, ); } @@ -1646,53 +2044,53 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: false + inJsonNamespace: false, }, true, false, - false + false, ), - ";" + ";", ); } protected emitAllUnionFunctions(): void { this.forEachUniqueUnion( "leading-and-interposing", - u => + (u) => this.sourcelikeToString( this.cppTypeInOptional( removeNullFromUnion(u, true)[1], { needsForwardIndirection: false, needsOptionalIndirection: false, - inJsonNamespace: true + inJsonNamespace: true, }, false, - false - ) + false, + ), ), - (u: UnionType) => this.emitUnionFunctions(u) + (u: UnionType) => this.emitUnionFunctions(u), ); } protected emitAllUnionHeaders(): void { this.forEachUniqueUnion( "interposing", - u => + (u) => this.sourcelikeToString( this.cppTypeInOptional( removeNullFromUnion(u, true)[1], { needsForwardIndirection: false, needsOptionalIndirection: false, - inJsonNamespace: true + inJsonNamespace: true, }, false, - false - ) + false, + ), ), - (u: UnionType) => this.emitUnionHeaders(u) + (u: UnionType) => this.emitUnionHeaders(u), ); } @@ -1703,31 +2101,50 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitNamespaces(["nlohmann"], () => { const emitAdlStruct = (optType: string, factory: string): void => { this.emitLine("template "); - this.emitBlock(["struct adl_serializer<", optType, ">"], true, () => { - this.emitBlock( - ["static void to_json(json & j, ", this.withConst([optType, ""]), " & opt)"], - false, - () => { - this.emitLine("if (!opt) j = nullptr; else j = *opt;"); - } - ); + this.emitBlock( + ["struct adl_serializer<", optType, ">"], + true, + () => { + this.emitBlock( + [ + "static void to_json(json & j, ", + this.withConst([optType, ""]), + " & opt)", + ], + false, + () => { + this.emitLine( + "if (!opt) j = nullptr; else j = *opt;", + ); + }, + ); - this.ensureBlankLine(); + this.ensureBlankLine(); - this.emitBlock( - ["static ", optType, " from_json(", this.withConst("json"), " & j)"], - false, - () => { - this.emitLine( - `if (j.is_null()) return ${factory}(); else return ${factory}(j.get());` - ); - } - ); - }); + this.emitBlock( + [ + "static ", + optType, + " from_json(", + this.withConst("json"), + " & j)", + ], + false, + () => { + this.emitLine( + `if (j.is_null()) return ${factory}(); else return ${factory}(j.get());`, + ); + }, + ); + }, + ); }; emitAdlStruct(this.optionalTypeHeap(), this.optionalFactoryHeap()); - emitAdlStruct(this.optionalTypeStack(), this.optionalFactoryStack()); + emitAdlStruct( + this.optionalTypeStack(), + this.optionalFactoryStack(), + ); }); this.emitLine("#endif"); @@ -1757,9 +2174,32 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } } - protected emitGetterSetter(t: string, getterName: string, setterName: string, memberName: string): void { - this.emitLine("void ", setterName, "(", t, " ", memberName, ") { this->", memberName, " = ", memberName, "; }"); - this.emitLine("auto ", getterName, "() const { return ", memberName, "; }"); + protected emitGetterSetter( + t: string, + getterName: string, + setterName: string, + memberName: string, + ): void { + this.emitLine( + "void ", + setterName, + "(", + t, + " ", + memberName, + ") { this->", + memberName, + " = ", + memberName, + "; }", + ); + this.emitLine( + "auto ", + getterName, + "() const { return ", + memberName, + "; }", + ); } protected emitNumericCheckConstraints( @@ -1767,7 +2207,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { classConstraint: string, getterMinValue: string, getterMaxValue: string, - cppType: string + cppType: string, ): void { this.emitBlock( [ @@ -1779,19 +2219,31 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.withConst(classConstraint), " & c, ", cppType, - " value)" + " value)", ], false, () => { this.emitBlock( - ["if (c.", getterMinValue, "() != ", this._nulloptType, " && value < *c.", getterMinValue, "())"], + [ + "if (c.", + getterMinValue, + "() != ", + this._nulloptType, + " && value < *c.", + getterMinValue, + "())", + ], false, () => { this.emitLine( "throw ", - this.lookupGlobalName(GlobalNames.ValueTooLowException), + this.lookupGlobalName( + GlobalNames.ValueTooLowException, + ), " (", - this._stringType.createStringLiteral(["Value too low for "]), + this._stringType.createStringLiteral([ + "Value too low for ", + ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", @@ -1799,24 +2251,40 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { " + ", this._stringType.createStringLiteral(["<"]), " + ", - this._stringType.wrapToString(["*c.", getterMinValue, "()"]), + this._stringType.wrapToString([ + "*c.", + getterMinValue, + "()", + ]), " + ", this._stringType.createStringLiteral([")"]), - ");" + ");", ); - } + }, ); this.ensureBlankLine(); this.emitBlock( - ["if (c.", getterMaxValue, "() != ", this._nulloptType, " && value > *c.", getterMaxValue, "())"], + [ + "if (c.", + getterMaxValue, + "() != ", + this._nulloptType, + " && value > *c.", + getterMaxValue, + "())", + ], false, () => { this.emitLine( "throw ", - this.lookupGlobalName(GlobalNames.ValueTooHighException), + this.lookupGlobalName( + GlobalNames.ValueTooHighException, + ), " (", - this._stringType.createStringLiteral(["Value too high for "]), + this._stringType.createStringLiteral([ + "Value too high for ", + ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", @@ -1824,15 +2292,19 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { " + ", this._stringType.createStringLiteral([">"]), " + ", - this._stringType.wrapToString(["*c.", getterMaxValue, "()"]), + this._stringType.wrapToString([ + "*c.", + getterMaxValue, + "()", + ]), " + ", this._stringType.createStringLiteral([")"]), - ");" + ");", ); - } + }, ); this.ensureBlankLine(); - } + }, ); this.ensureBlankLine(); } @@ -1840,30 +2312,55 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { protected emitConstraintClasses(): void { const ourQualifier = this.ourQualifier(false) as string; - const getterMinIntValue = this.lookupMemberName(MemberNames.GetMinIntValue); - const getterMaxIntValue = this.lookupMemberName(MemberNames.GetMaxIntValue); - const getterMinDoubleValue = this.lookupMemberName(MemberNames.GetMinDoubleValue); - const getterMaxDoubleValue = this.lookupMemberName(MemberNames.GetMaxDoubleValue); + const getterMinIntValue = this.lookupMemberName( + MemberNames.GetMinIntValue, + ); + const getterMaxIntValue = this.lookupMemberName( + MemberNames.GetMaxIntValue, + ); + const getterMinDoubleValue = this.lookupMemberName( + MemberNames.GetMinDoubleValue, + ); + const getterMaxDoubleValue = this.lookupMemberName( + MemberNames.GetMaxDoubleValue, + ); const getterMinLength = this.lookupMemberName(MemberNames.GetMinLength); const getterMaxLength = this.lookupMemberName(MemberNames.GetMaxLength); const getterPattern = this.lookupMemberName(MemberNames.GetPattern); - const classConstraint = this.lookupGlobalName(GlobalNames.ClassMemberConstraints); + const classConstraint = this.lookupGlobalName( + GlobalNames.ClassMemberConstraints, + ); this.emitBlock(["class ", classConstraint], true, () => { this.emitLine("private:"); - const constraintMembers: ConstraintMember[] = this.getConstraintMembers(); + const constraintMembers: ConstraintMember[] = + this.getConstraintMembers(); for (const member of constraintMembers) { - this.emitMember([this._optionalType, "<", member.cppType, ">"], this.lookupMemberName(member.name)); + this.emitMember( + [this._optionalType, "<", member.cppType, ">"], + this.lookupMemberName(member.name), + ); } this.ensureBlankLine(); this.emitLine("public:"); this.emitLine(classConstraint, "("); this.indent(() => { - this.iterableForEach(constraintMembers, ({ name, cppType }, pos) => { - const comma = pos === "first" || pos === "middle" ? "," : []; - this.emitLine(this._optionalType, "<", cppType, "> ", this.lookupMemberName(name), comma); - }); + this.iterableForEach( + constraintMembers, + ({ name, cppType }, pos) => { + const comma = + pos === "first" || pos === "middle" ? "," : []; + this.emitLine( + this._optionalType, + "<", + cppType, + "> ", + this.lookupMemberName(name), + comma, + ); + }, + ); }); const args = constraintMembers.map(({ name }) => { @@ -1880,29 +2377,35 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { withDefault(member.cppConstType, member.cppType), this.lookupMemberName(member.getter), this.lookupMemberName(member.setter), - this.lookupMemberName(member.name) + this.lookupMemberName(member.name), ); } }); this.ensureBlankLine(); - const classConstEx = this.lookupGlobalName(GlobalNames.ClassMemberConstraintException); - this.emitBlock(["class ", classConstEx, " : public std::runtime_error"], true, () => { - this.emitLine("public:"); - this.emitLine( - classConstEx, - "(", - this._stringType.getConstType(), - " msg) : std::runtime_error(", - this._stringType.wrapEncodingChange( - [ourQualifier], - this._stringType.getType(), - this.NarrowString.getType(), - ["msg"] - ), - ") {}" - ); - }); + const classConstEx = this.lookupGlobalName( + GlobalNames.ClassMemberConstraintException, + ); + this.emitBlock( + ["class ", classConstEx, " : public std::runtime_error"], + true, + () => { + this.emitLine("public:"); + this.emitLine( + classConstEx, + "(", + this._stringType.getConstType(), + " msg) : std::runtime_error(", + this._stringType.wrapEncodingChange( + [ourQualifier], + this._stringType.getType(), + this.NarrowString.getType(), + ["msg"], + ), + ") {}", + ); + }, + ); this.ensureBlankLine(); const exceptions: GlobalNames[] = [ @@ -1910,26 +2413,43 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { GlobalNames.ValueTooHighException, GlobalNames.ValueTooShortException, GlobalNames.ValueTooLongException, - GlobalNames.InvalidPatternException + GlobalNames.InvalidPatternException, ]; for (const ex of exceptions) { const name = this.lookupGlobalName(ex); - this.emitBlock(["class ", name, " : public ", classConstEx], true, () => { - this.emitLine("public:"); - this.emitLine(name, "(", this._stringType.getConstType(), " msg) : ", classConstEx, "(msg) {}"); - }); + this.emitBlock( + ["class ", name, " : public ", classConstEx], + true, + () => { + this.emitLine("public:"); + this.emitLine( + name, + "(", + this._stringType.getConstType(), + " msg) : ", + classConstEx, + "(msg) {}", + ); + }, + ); this.ensureBlankLine(); } const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); - this.emitNumericCheckConstraints(checkConst, classConstraint, getterMinIntValue, getterMaxIntValue, "int64_t"); + this.emitNumericCheckConstraints( + checkConst, + classConstraint, + getterMinIntValue, + getterMaxIntValue, + "int64_t", + ); this.emitNumericCheckConstraints( checkConst, classConstraint, getterMinDoubleValue, getterMaxDoubleValue, - "double" + "double", ); this.emitBlock( @@ -1942,7 +2462,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.withConst(classConstraint), " & c, ", this._stringType.getConstType(), - " value)" + " value)", ], false, () => { @@ -1954,15 +2474,19 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this._nulloptType, " && value.length() < *c.", getterMinLength, - "())" + "())", ], false, () => { this.emitLine( "throw ", - this.lookupGlobalName(GlobalNames.ValueTooShortException), + this.lookupGlobalName( + GlobalNames.ValueTooShortException, + ), " (", - this._stringType.createStringLiteral(["Value too short for "]), + this._stringType.createStringLiteral([ + "Value too short for ", + ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", @@ -1970,12 +2494,16 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { " + ", this._stringType.createStringLiteral(["<"]), " + ", - this._stringType.wrapToString(["*c.", getterMinLength, "()"]), + this._stringType.wrapToString([ + "*c.", + getterMinLength, + "()", + ]), " + ", this._stringType.createStringLiteral([")"]), - ");" + ");", ); - } + }, ); this.ensureBlankLine(); @@ -1987,15 +2515,19 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this._nulloptType, " && value.length() > *c.", getterMaxLength, - "())" + "())", ], false, () => { this.emitLine( "throw ", - this.lookupGlobalName(GlobalNames.ValueTooLongException), + this.lookupGlobalName( + GlobalNames.ValueTooLongException, + ), " (", - this._stringType.createStringLiteral(["Value too long for "]), + this._stringType.createStringLiteral([ + "Value too long for ", + ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", @@ -2003,44 +2535,56 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { " + ", this._stringType.createStringLiteral([">"]), " + ", - this._stringType.wrapToString(["*c.", getterMaxLength, "()"]), + this._stringType.wrapToString([ + "*c.", + getterMaxLength, + "()", + ]), " + ", this._stringType.createStringLiteral([")"]), - ");" + ");", ); - } + }, ); this.ensureBlankLine(); - this.emitBlock(["if (c.", getterPattern, "() != ", this._nulloptType, ")"], false, () => { - this.emitLine(this._stringType.getSMatch(), " result;"); - this.emitLine( - "std::regex_search(value, result, ", - this._stringType.getRegex(), - "( *c.", - getterPattern, - "() ));" - ); - this.emitBlock(["if (result.empty())"], false, () => { + this.emitBlock( + ["if (c.", getterPattern, "() != ", this._nulloptType, ")"], + false, + () => { + this.emitLine(this._stringType.getSMatch(), " result;"); this.emitLine( - "throw ", - this.lookupGlobalName(GlobalNames.InvalidPatternException), - " (", - this._stringType.createStringLiteral(["Value doesn't match pattern for "]), - " + name + ", - this._stringType.createStringLiteral([" ("]), - " + value +", - this._stringType.createStringLiteral([" != "]), - " + *c.", + "std::regex_search(value, result, ", + this._stringType.getRegex(), + "( *c.", getterPattern, - "() + ", - this._stringType.createStringLiteral([")"]), - ");" + "() ));", ); - }); - }); + this.emitBlock(["if (result.empty())"], false, () => { + this.emitLine( + "throw ", + this.lookupGlobalName( + GlobalNames.InvalidPatternException, + ), + " (", + this._stringType.createStringLiteral([ + "Value doesn't match pattern for ", + ]), + " + name + ", + this._stringType.createStringLiteral([" ("]), + " + value +", + this._stringType.createStringLiteral([" != "]), + " + *c.", + getterPattern, + "() + ", + this._stringType.createStringLiteral([")"]), + ");", + ); + }); + }, + ); this.ensureBlankLine(); - } + }, ); } @@ -2049,7 +2593,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if ( this._options.codeFormat && - iterableSome(this.typeGraph.allTypesUnordered(), t => constraintsForType(t) !== undefined) + iterableSome( + this.typeGraph.allTypesUnordered(), + (t) => constraintsForType(t) !== undefined, + ) ) { this.emitConstraintClasses(); this.ensureBlankLine(); @@ -2059,7 +2606,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { let untypedMacroName = "NLOHMANN_UNTYPED_"; let optionalMacroName = "NLOHMANN_OPTIONAL_"; - this._namespaceNames.forEach(value => { + this._namespaceNames.forEach((value) => { // We can't use upper name, because namespaces are case sensitive untypedMacroName += value; untypedMacroName += "_"; @@ -2075,24 +2622,38 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitLine(`#define ${untypedMacroName}`); this.emitBlock( - ["inline json get_untyped(", this.withConst("json"), " & j, ", this.withConst("char"), " * property)"], + [ + "inline json get_untyped(", + this.withConst("json"), + " & j, ", + this.withConst("char"), + " * property)", + ], false, () => { - this.emitBlock(["if (j.find(property) != j.end())"], false, () => { - this.emitLine("return j.at(property).get();"); - }); + this.emitBlock( + ["if (j.find(property) != j.end())"], + false, + () => { + this.emitLine("return j.at(property).get();"); + }, + ); this.emitLine("return json();"); - } + }, ); this.ensureBlankLine(); this.emitBlock( - ["inline json get_untyped(", this.withConst("json"), " & j, std::string property)"], + [ + "inline json get_untyped(", + this.withConst("json"), + " & j, std::string property)", + ], false, () => { this.emitLine("return get_untyped(j, property.data());"); - } + }, ); this.emitLine("#endif"); @@ -2105,7 +2666,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitLine(`#ifndef ${optionalMacroName}`); this.emitLine(`#define ${optionalMacroName}`); - const emitGetOptional = (optionalType: string, label: string): void => { + const emitGetOptional = ( + optionalType: string, + label: string, + ): void => { this.emitLine("template "); this.emitBlock( [ @@ -2115,16 +2679,24 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.withConst("json"), " & j, ", this.withConst("char"), - " * property)" + " * property)", ], false, () => { this.emitLine(["auto it = j.find(property);"]); - this.emitBlock(["if (it != j.end() && !it->is_null())"], false, () => { - this.emitLine("return j.at(property).get<", optionalType, ">();"); - }); + this.emitBlock( + ["if (it != j.end() && !it->is_null())"], + false, + () => { + this.emitLine( + "return j.at(property).get<", + optionalType, + ">();", + ); + }, + ); this.emitLine("return ", optionalType, "();"); - } + }, ); this.ensureBlankLine(); @@ -2136,12 +2708,14 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { optionalType, ` get_${label}_optional(`, this.withConst("json"), - " & j, std::string property)" + " & j, std::string property)", ], false, () => { - this.emitLine(`return get_${label}_optional(j, property.data());`); - } + this.emitLine( + `return get_${label}_optional(j, property.data());`, + ); + }, ); }; @@ -2174,7 +2748,11 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } // Include unordered_map if contains large enums - if (Array.from(this.enums).some(enumType => this.isLargeEnum(enumType))) { + if ( + Array.from(this.enums).some((enumType) => + this.isLargeEnum(enumType), + ) + ) { this.emitInclude(true, "unordered_map"); } @@ -2209,29 +2787,38 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitHelperFunctions(); } - this.forEachDeclaration("interposing", decl => this.emitDeclaration(decl)); + this.forEachDeclaration("interposing", (decl) => + this.emitDeclaration(decl), + ); if (this._options.justTypes) return; this.forEachTopLevel( "leading", (t: Type, name: Name) => this.emitTopLevelTypedef(t, name), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); } protected gatherUserNamespaceForwardDecls(): Sourcelike[] { return this.gatherSource(() => { - this.forEachObject("leading-and-interposing", (_: unknown, className: Name) => - this.emitClassHeaders(className) + this.forEachObject( + "leading-and-interposing", + (_: unknown, className: Name) => + this.emitClassHeaders(className), ); - this.forEachEnum("leading-and-interposing", (_: unknown, enumName: Name) => this.emitEnumHeaders(enumName)); + this.forEachEnum( + "leading-and-interposing", + (_: unknown, enumName: Name) => this.emitEnumHeaders(enumName), + ); }); } protected gatherNlohmannNamespaceForwardDecls(): Sourcelike[] { return this.gatherSource(() => { - this.forEachTopLevel("leading-and-interposing", (t: Type, className: Name) => - this.emitTopLevelHeaders(t, className) + this.forEachTopLevel( + "leading-and-interposing", + (t: Type, className: Name) => + this.emitTopLevelHeaders(t, className), ); this.ensureBlankLine(); @@ -2241,12 +2828,16 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } protected emitUserNamespaceImpls(): void { - this.forEachObject("leading-and-interposing", (c: ClassType, className: Name) => - this.emitClassFunctions(c, className) + this.forEachObject( + "leading-and-interposing", + (c: ClassType, className: Name) => + this.emitClassFunctions(c, className), ); - this.forEachEnum("leading-and-interposing", (e: EnumType, enumName: Name) => - this.emitEnumFunctions(e, enumName) + this.forEachEnum( + "leading-and-interposing", + (e: EnumType, enumName: Name) => + this.emitEnumFunctions(e, enumName), ); } @@ -2254,7 +2845,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.forEachTopLevel( "leading-and-interposing", (t: Type, name: Name) => this.emitTopLevelFunction(t, name), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.ensureBlankLine(); @@ -2269,30 +2860,42 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.emitNamespaces(this._namespaceNames, () => { didEmit = this.forEachTopLevel( "none", - (t: Type, name: Name) => this.emitTopLevelTypedef(t, name), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t: Type, name: Name) => + this.emitTopLevelTypedef(t, name), + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); - }) + }), ); if (didEmit) { this.emitGatheredSource(gathered); this.ensureBlankLine(); } } else { - const userNamespaceForwardDecls = this.gatherUserNamespaceForwardDecls(); - const nlohmannNamespaceForwardDecls = this.gatherNlohmannNamespaceForwardDecls(); - - if (userNamespaceForwardDecls.length === 0 && nlohmannNamespaceForwardDecls.length > 0) { + const userNamespaceForwardDecls = + this.gatherUserNamespaceForwardDecls(); + const nlohmannNamespaceForwardDecls = + this.gatherNlohmannNamespaceForwardDecls(); + + if ( + userNamespaceForwardDecls.length === 0 && + nlohmannNamespaceForwardDecls.length > 0 + ) { this.emitNamespaces(["nlohmann"], () => { this.emitGatheredSource(nlohmannNamespaceForwardDecls); this.emitNlohmannNamespaceImpls(); }); - } else if (userNamespaceForwardDecls.length > 0 && nlohmannNamespaceForwardDecls.length === 0) { + } else if ( + userNamespaceForwardDecls.length > 0 && + nlohmannNamespaceForwardDecls.length === 0 + ) { this.emitNamespaces(this._namespaceNames, () => { this.emitGatheredSource(userNamespaceForwardDecls); this.emitUserNamespaceImpls(); }); - } else if (userNamespaceForwardDecls.length > 0 && nlohmannNamespaceForwardDecls.length > 0) { + } else if ( + userNamespaceForwardDecls.length > 0 && + nlohmannNamespaceForwardDecls.length > 0 + ) { this.emitNamespaces(this._namespaceNames, () => { this.emitGatheredSource(userNamespaceForwardDecls); }); @@ -2318,7 +2921,11 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (this._options.justTypes) { this.emitTypes(); } else { - if (!this._options.justTypes && this.haveNamedTypes && (this.haveUnions || this.haveOptionalProperties)) { + if ( + !this._options.justTypes && + this.haveNamedTypes && + (this.haveUnions || this.haveOptionalProperties) + ) { this.emitOptionalHelpers(); this.ensureBlankLine(); } @@ -2333,13 +2940,21 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.finishFile(); } - protected updateIncludes(isClassMember: boolean, includes: IncludeMap, propertyType: Type, _defName: string): void { + protected updateIncludes( + isClassMember: boolean, + includes: IncludeMap, + propertyType: Type, + _defName: string, + ): void { const propTypes = this.generatedTypes(isClassMember, propertyType); for (const t of propTypes) { const typeName = this.sourcelikeToString(t.name); - const propRecord: IncludeRecord = { kind: undefined, typeKind: undefined }; + const propRecord: IncludeRecord = { + kind: undefined, + typeKind: undefined, + }; if (t.type instanceof ClassType) { /** @@ -2348,7 +2963,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { * - level > 0 - then we can SURELY forward declare it. */ propRecord.typeKind = "class"; - propRecord.kind = t.level === 0 ? IncludeKind.Include : IncludeKind.ForwardDeclare; + propRecord.kind = + t.level === 0 + ? IncludeKind.Include + : IncludeKind.ForwardDeclare; if (t.forceInclude) { propRecord.kind = IncludeKind.Include; } @@ -2377,7 +2995,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { * If we already include the type as typed include, * do not write it over with forward declare */ - if (incKind !== undefined && incKind.kind === IncludeKind.ForwardDeclare) { + if ( + incKind !== undefined && + incKind.kind === IncludeKind.ForwardDeclare + ) { includes.set(typeName, propRecord); } } else { @@ -2386,7 +3007,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } } - protected emitIncludes(c: ClassType | UnionType | EnumType, defName: string): void { + protected emitIncludes( + c: ClassType | UnionType | EnumType, + defName: string, + ): void { /** * Need to generate "includes", in terms 'c' has members, which * are defined by others @@ -2396,9 +3020,13 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { if (c instanceof UnionType) { this.updateIncludes(false, includes, c, defName); } else if (c instanceof ClassType) { - this.forEachClassProperty(c, "none", (_name, _jsonName, property) => { - this.updateIncludes(true, includes, property.type, defName); - }); + this.forEachClassProperty( + c, + "none", + (_name, _jsonName, property) => { + this.updateIncludes(true, includes, property.type, defName); + }, + ); } if (includes.size !== 0) { @@ -2434,16 +3062,27 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { return; } - if (rec.typeKind === "class" || rec.typeKind === "union") { + if ( + rec.typeKind === "class" || + rec.typeKind === "union" + ) { if (this._options.codeFormat) { this.emitLine("class ", name, ";"); } else { this.emitLine("struct ", name, ";"); } } else if (rec.typeKind === "enum") { - this.emitLine("enum class ", name, " : ", this._enumType, ";"); + this.emitLine( + "enum class ", + name, + " : ", + this._enumType, + ";", + ); } else { - panic(`Invalid type "${rec.typeKind}" to forward declare`); + panic( + `Invalid type "${rec.typeKind}" to forward declare`, + ); } }); }); @@ -2453,7 +3092,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } } - protected emitDefinition(d: ClassType | EnumType | UnionType, defName: Name): void { + protected emitDefinition( + d: ClassType | EnumType | UnionType, + defName: Name, + ): void { const name = `${this.sourcelikeToString(defName)}.hpp`; this.startFile(name, true); this._generatedFiles.add(name); @@ -2483,7 +3125,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.startFile("Generators.hpp", true); - this._allTypeNames.forEach(t => { + this._allTypeNames.forEach((t) => { this.emitInclude(false, [t, ".hpp"]); }); @@ -2503,7 +3145,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { }, (u, n) => { this.emitDefinition(u, n); - } + }, ); /** @@ -2517,7 +3159,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.startFile(proposedFilename); - this._generatedFiles.forEach(f => { + this._generatedFiles.forEach((f) => { this.emitInclude(false, f); }); @@ -2525,7 +3167,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.forEachTopLevel( "leading", (t: Type, name: Name) => this.emitTopLevelTypedef(t, name), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); }); @@ -2538,28 +3180,36 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { /** Gather all the unique/custom types used by the schema */ this._allTypeNames.clear(); - this.forEachDeclaration("none", decl => { - const definedTypes = directlyReachableTypes(decl.type, t => { - if (isNamedType(t) && (t instanceof ClassType || t instanceof EnumType || t instanceof UnionType)) { - return new Set([ - this.sourcelikeToString( - this.cppType( - t, - { - needsForwardIndirection: false, - needsOptionalIndirection: false, - inJsonNamespace: false - }, - true, - false, - false - ) - ) - ]); - } + this.forEachDeclaration("none", (decl) => { + const definedTypes = directlyReachableTypes( + decl.type, + (t) => { + if ( + isNamedType(t) && + (t instanceof ClassType || + t instanceof EnumType || + t instanceof UnionType) + ) { + return new Set([ + this.sourcelikeToString( + this.cppType( + t, + { + needsForwardIndirection: false, + needsOptionalIndirection: false, + inJsonNamespace: false, + }, + true, + false, + false, + ), + ), + ]); + } - return null; - }); + return null; + }, + ); this._allTypeNames = setUnion(definedTypes, this._allTypeNames); }); @@ -2577,11 +3227,11 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, false, - false + false, ); const newType = this.cppType( @@ -2589,11 +3239,11 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { { needsForwardIndirection: true, needsOptionalIndirection: true, - inJsonNamespace: true + inJsonNamespace: true, }, false, true, - false + false, ); return originalType !== newType; @@ -2609,7 +3259,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { "", new WrappingCode(["std::to_string("], [")"]), "", - "" + "", ); } @@ -2617,7 +3267,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { _qualifier: Sourcelike[], _fromType: Sourcelike, _toType: Sourcelike, - inner: Sourcelike + inner: Sourcelike, ): Sourcelike { return inner; } @@ -2637,7 +3287,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { "L", new WrappingCode(["std::to_wstring("], [")"]), "Utf16_Utf8", - "convert" + "convert", ); } @@ -2645,9 +3295,12 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { qualifier: Sourcelike[], fromType: Sourcelike, toType: Sourcelike, - inner: Sourcelike + inner: Sourcelike, ): Sourcelike { - if (this.superThis.sourcelikeToString(fromType) === this.superThis.sourcelikeToString(toType)) { + if ( + this.superThis.sourcelikeToString(fromType) === + this.superThis.sourcelikeToString(toType) + ) { return inner; } @@ -2661,7 +3314,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this._encodingFunction, "(", inner, - ")" + ")", ]; } @@ -2670,100 +3323,144 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.superThis.emitLine("struct tag {};"); this.superThis.ensureBlankLine(); - this.superThis.emitLine("template"); + this.superThis.emitLine( + "template", + ); this.superThis.emitBlock(["class Utf16_Utf8"], true, () => { this.superThis.emitLine("private:"); this.superThis.emitLine("template"); this.superThis.emitBlock( - ["static toType convert(tag >, tag >, fromType ptr)"], + [ + "static toType convert(tag >, tag >, fromType ptr)", + ], false, () => { this.superThis.emitLine( - "if (ptr == nullptr) return std::unique_ptr(); else return std::unique_ptr(new TT(Utf16_Utf8::convert(*ptr)));" + "if (ptr == nullptr) return std::unique_ptr(); else return std::unique_ptr(new TT(Utf16_Utf8::convert(*ptr)));", ); - } + }, ); this.superThis.ensureBlankLine(); this.superThis.emitLine("template"); this.superThis.emitBlock( - ["static toType convert(tag >, tag >, fromType v)"], + [ + "static toType convert(tag >, tag >, fromType v)", + ], false, () => { this.superThis.emitLine("auto it = v.begin();"); - this.superThis.emitLine("auto newVector = std::vector();"); - this.superThis.emitBlock(["while (it != v.end())"], false, () => { - this.superThis.emitLine("newVector.push_back(Utf16_Utf8::convert(*it));"); - this.superThis.emitLine("it++;"); - }); + this.superThis.emitLine( + "auto newVector = std::vector();", + ); + this.superThis.emitBlock( + ["while (it != v.end())"], + false, + () => { + this.superThis.emitLine( + "newVector.push_back(Utf16_Utf8::convert(*it));", + ); + this.superThis.emitLine("it++;"); + }, + ); this.superThis.emitLine("return newVector;"); - } + }, ); this.superThis.ensureBlankLine(); - this.superThis.emitLine("template"); + this.superThis.emitLine( + "template", + ); this.superThis.emitBlock( - ["static toType convert(tag >, tag >, fromType m)"], + [ + "static toType convert(tag >, tag >, fromType m)", + ], false, () => { this.superThis.emitLine("auto it = m.begin();"); - this.superThis.emitLine("auto newMap = std::map();"); - this.superThis.emitBlock(["while (it != m.end())"], false, () => { - this.superThis.emitLine( - "newMap.insert(std::pair(Utf16_Utf8::convert(it->first), Utf16_Utf8::convert(it->second)));" - ); - this.superThis.emitLine("it++;"); - }); + this.superThis.emitLine( + "auto newMap = std::map();", + ); + this.superThis.emitBlock( + ["while (it != m.end())"], + false, + () => { + this.superThis.emitLine( + "newMap.insert(std::pair(Utf16_Utf8::convert(it->first), Utf16_Utf8::convert(it->second)));", + ); + this.superThis.emitLine("it++;"); + }, + ); this.superThis.emitLine("return newMap;"); - } + }, ); this.superThis.ensureBlankLine(); this.superThis.emitLine("template"); - this.superThis.emitBlock(["static fromType convert(tag, tag, fromType from)"], false, () => { - this.superThis.emitLine("return from;"); - }); + this.superThis.emitBlock( + [ + "static fromType convert(tag, tag, fromType from)", + ], + false, + () => { + this.superThis.emitLine("return from;"); + }, + ); this.superThis.ensureBlankLine(); this.superThis.emitBlock( - ["static std::wstring convert(tag, tag, std::string str)"], + [ + "static std::wstring convert(tag, tag, std::string str)", + ], false, () => { this.superThis.emitLine( - "return std::wstring_convert, wchar_t>{}.from_bytes(str.data());" + "return std::wstring_convert, wchar_t>{}.from_bytes(str.data());", ); - } + }, ); this.superThis.ensureBlankLine(); this.superThis.emitBlock( - ["static std::string convert(tag, tag, std::wstring str)"], + [ + "static std::string convert(tag, tag, std::wstring str)", + ], false, () => { this.superThis.emitLine( - "return std::wstring_convert, wchar_t>{}.to_bytes(str.data());" + "return std::wstring_convert, wchar_t>{}.to_bytes(str.data());", ); - } + }, ); this.superThis.ensureBlankLine(); this.superThis.emitLine("public:"); - this.superThis.emitBlock(["static toType convert(fromType in)"], false, () => { - this.superThis.emitLine("return convert(tag(), tag(), in);"); - }); + this.superThis.emitBlock( + ["static toType convert(fromType in)"], + false, + () => { + this.superThis.emitLine( + "return convert(tag(), tag(), in);", + ); + }, + ); }); this.superThis.ensureBlankLine(); this.superThis.emitLine("template"); - this.superThis.emitBlock(["std::wstring wdump(const T& j)"], false, () => { - this.superThis.emitLine("std::ostringstream s;"); - this.superThis.emitLine("s << j;"); - this.superThis.emitLine( - "return ", - this.superThis.ourQualifier(false), - "Utf16_Utf8::convert(s.str()); " - ); - }); + this.superThis.emitBlock( + ["std::wstring wdump(const T& j)"], + false, + () => { + this.superThis.emitLine("std::ostringstream s;"); + this.superThis.emitLine("s << j;"); + this.superThis.emitLine( + "return ", + this.superThis.ourQualifier(false), + "Utf16_Utf8::convert(s.str()); ", + ); + }, + ); this.superThis.ensureBlankLine(); } })(this); diff --git a/packages/quicktype-core/src/language/CPlusPlus/constants.ts b/packages/quicktype-core/src/language/CPlusPlus/constants.ts index 4ed53bd81..a8872a1cc 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/constants.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/constants.ts @@ -1,103 +1,102 @@ - export const keywords = [ - "alignas", - "alignof", - "and", - "and_eq", - "asm", - "atomic_cancel", - "atomic_commit", - "atomic_noexcept", - "auto", - "bitand", - "bitor", - "bool", - "break", - "case", - "catch", - "char", - "char16_t", - "char32_t", - "class", - "compl", - "concept", - "const", - "constexpr", - "const_cast", - "continue", - "co_await", - "co_return", - "co_yield", - "decltype", - "default", - "delete", - "do", - "double", - "dynamic_cast", - "else", - "enum", - "explicit", - "export", - "extern", - "false", - "float", - "for", - "friend", - "goto", - "if", - "import", - "inline", - "int", - "long", - "module", - "mutable", - "namespace", - "new", - "noexcept", - "not", - "not_eq", - "nullptr", - "operator", - "or", - "or_eq", - "private", - "protected", - "public", - "register", - "reinterpret_cast", - "requires", - "return", - "short", - "signed", - "sizeof", - "static", - "static_assert", - "static_cast", - "struct", - "switch", - "synchronized", - "template", - "this", - "thread_local", - "throw", - "true", - "try", - "typedef", - "typeid", - "typename", - "union", - "unsigned", - "using", - "virtual", - "void", - "volatile", - "wchar_t", - "while", - "xor", - "xor_eq", - "override", - "final", - "transaction_safe", - "transaction_safe_dynamic", - "NULL" + "alignas", + "alignof", + "and", + "and_eq", + "asm", + "atomic_cancel", + "atomic_commit", + "atomic_noexcept", + "auto", + "bitand", + "bitor", + "bool", + "break", + "case", + "catch", + "char", + "char16_t", + "char32_t", + "class", + "compl", + "concept", + "const", + "constexpr", + "const_cast", + "continue", + "co_await", + "co_return", + "co_yield", + "decltype", + "default", + "delete", + "do", + "double", + "dynamic_cast", + "else", + "enum", + "explicit", + "export", + "extern", + "false", + "float", + "for", + "friend", + "goto", + "if", + "import", + "inline", + "int", + "long", + "module", + "mutable", + "namespace", + "new", + "noexcept", + "not", + "not_eq", + "nullptr", + "operator", + "or", + "or_eq", + "private", + "protected", + "public", + "register", + "reinterpret_cast", + "requires", + "return", + "short", + "signed", + "sizeof", + "static", + "static_assert", + "static_cast", + "struct", + "switch", + "synchronized", + "template", + "this", + "thread_local", + "throw", + "true", + "try", + "typedef", + "typeid", + "typename", + "union", + "unsigned", + "using", + "virtual", + "void", + "volatile", + "wchar_t", + "while", + "xor", + "xor_eq", + "override", + "final", + "transaction_safe", + "transaction_safe_dynamic", + "NULL", ] as const; diff --git a/packages/quicktype-core/src/language/CPlusPlus/language.ts b/packages/quicktype-core/src/language/CPlusPlus/language.ts index 730d5750e..c040e2e29 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/language.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/language.ts @@ -1,7 +1,12 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { CPlusPlusRenderer } from "./CPlusPlusRenderer"; @@ -12,7 +17,7 @@ const namingStyles = { "camel-case": "camel", "upper-underscore-case": "upper-underscore", "pascal-case-upper-acronyms": "pascal-upper-acronyms", - "camel-case-upper-acronyms": "camel-upper-acronyms" + "camel-case-upper-acronyms": "camel-upper-acronyms", } as const; export const cPlusPlusOptions = { @@ -21,70 +26,101 @@ export const cPlusPlusOptions = { "Source code generation type, whether to generate single or multiple source files", { "single-source": true, - "multi-source": false + "multi-source": false, } as const, "single-source", - "secondary" + "secondary", ), includeLocation: new EnumOption( "include-location", "Whether json.hpp is to be located globally or locally", { "local-include": true, - "global-include": false + "global-include": false, } as const, "local-include", - "secondary" + "secondary", ), codeFormat: new EnumOption( "code-format", "Generate classes with getters/setters, instead of structs", { "with-struct": false, - "with-getter-setter": true + "with-getter-setter": true, } as const, - "with-getter-setter" + "with-getter-setter", ), wstring: new EnumOption( "wstring", "Store strings using Utf-16 std::wstring, rather than Utf-8 std::string", { "use-string": false, - "use-wstring": true + "use-wstring": true, } as const, - "use-string" + "use-string", ), westConst: new EnumOption( "const-style", "Put const to the left/west (const T) or right/east (T const)", { "west-const": true, - "east-const": false + "east-const": false, } as const, - "west-const" + "west-const", ), justTypes: new BooleanOption("just-types", "Plain types only", false), - namespace: new StringOption("namespace", "Name of the generated namespace(s)", "NAME", "quicktype"), - enumType: new StringOption("enum-type", "Type of enum class", "NAME", "int", "secondary"), - typeNamingStyle: new EnumOption("type-style", "Naming style for types", namingStyles, "pascal-case"), - memberNamingStyle: new EnumOption("member-style", "Naming style for members", namingStyles, "underscore-case"), + namespace: new StringOption( + "namespace", + "Name of the generated namespace(s)", + "NAME", + "quicktype", + ), + enumType: new StringOption( + "enum-type", + "Type of enum class", + "NAME", + "int", + "secondary", + ), + typeNamingStyle: new EnumOption( + "type-style", + "Naming style for types", + namingStyles, + "pascal-case", + ), + memberNamingStyle: new EnumOption( + "member-style", + "Naming style for members", + namingStyles, + "underscore-case", + ), enumeratorNamingStyle: new EnumOption( "enumerator-style", "Naming style for enumerators", namingStyles, - "upper-underscore-case" + "upper-underscore-case", + ), + boost: new BooleanOption( + "boost", + "Require a dependency on boost. Without boost, C++17 is required", + true, + ), + hideNullOptional: new BooleanOption( + "hide-null-optional", + "Hide null value for optional field", + false, ), - boost: new BooleanOption("boost", "Require a dependency on boost. Without boost, C++17 is required", true), - hideNullOptional: new BooleanOption("hide-null-optional", "Hide null value for optional field", false) }; export const cPlusPlusLanguageConfig = { displayName: "C++", names: ["c++", "cpp", "cplusplus"], - extension: "cpp" + extension: "cpp", } as const; -export class CPlusPlusTargetLanguage extends TargetLanguage { +export class CPlusPlusTargetLanguage extends TargetLanguage< + typeof cPlusPlusLanguageConfig +> { public constructor() { super(cPlusPlusLanguageConfig); } @@ -101,7 +137,14 @@ export class CPlusPlusTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): CPlusPlusRenderer { + return new CPlusPlusRenderer( + this, + renderContext, + getOptionValues(cPlusPlusOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/CPlusPlus/utils.ts b/packages/quicktype-core/src/language/CPlusPlus/utils.ts index 93c6e75de..51a7d66cb 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/utils.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/utils.ts @@ -2,12 +2,16 @@ import { type MinMaxConstraint, minMaxLengthForType, minMaxValueForType, - patternForType + patternForType, } from "../../attributes/Constraints"; -import { type Name } from "../../Naming"; -import { type Sourcelike } from "../../Source"; -import { isAscii, isLetterOrUnderscoreOrDigit, legalizeCharacters } from "../../support/Strings"; -import { type Type, type TypeKind } from "../../Type"; +import type { Name } from "../../Naming"; +import type { Sourcelike } from "../../Source"; +import { + isAscii, + isLetterOrUnderscoreOrDigit, + legalizeCharacters, +} from "../../support/Strings"; +import type { Type, TypeKind } from "../../Type"; export function constraintsForType(t: Type): | { @@ -19,11 +23,18 @@ export function constraintsForType(t: Type): const minMax = minMaxValueForType(t); const minMaxLength = minMaxLengthForType(t); const pattern = patternForType(t); - if (minMax === undefined && minMaxLength === undefined && pattern === undefined) return undefined; + if ( + minMax === undefined && + minMaxLength === undefined && + pattern === undefined + ) + return undefined; return { minMax, minMaxLength, pattern }; } -export const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); +export const legalizeName = legalizeCharacters( + (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), +); /// Type to use as an optional if cycle breaking is required export const optionalAsSharedType = "std::shared_ptr"; @@ -37,7 +48,7 @@ export const optionalFactoryAsSharedType = "std::make_shared"; */ export enum IncludeKind { ForwardDeclare = "ForwardDeclare", - Include = "Include" + Include = "Include", } // FIXME: make these string enums eventually @@ -49,7 +60,7 @@ export enum GlobalNames { ValueTooShortException = 5, ValueTooLongException = 6, InvalidPatternException = 7, - CheckConstraint = 8 + CheckConstraint = 8, } // FIXME: make these string enums eventually @@ -74,7 +85,7 @@ export enum MemberNames { SetMaxLength = 18, Pattern = 19, GetPattern = 20, - SetPattern = 21 + SetPattern = 21, } export interface ConstraintMember { @@ -121,12 +132,15 @@ export interface StringType { qualifier: Sourcelike[], fromType: Sourcelike, toType: Sourcelike, - inner: Sourcelike + inner: Sourcelike, ) => Sourcelike; wrapToString: (inner: Sourcelike) => Sourcelike; } -export function addQualifier(qualifier: Sourcelike, qualified: Sourcelike[]): Sourcelike[] { +export function addQualifier( + qualifier: Sourcelike, + qualified: Sourcelike[], +): Sourcelike[] { if (qualified.length === 0) { return []; } @@ -137,7 +151,7 @@ export function addQualifier(qualifier: Sourcelike, qualified: Sourcelike[]): So export class WrappingCode { public constructor( private readonly start: Sourcelike[], - private readonly end: Sourcelike[] + private readonly end: Sourcelike[], ) {} public wrap(qualifier: Sourcelike, inner: Sourcelike): Sourcelike { @@ -170,7 +184,7 @@ export class BaseString { stringLiteralPrefix: string, toString: WrappingCode, encodingClass: string, - encodingFunction: string + encodingFunction: string, ) { this._stringType = stringType; this._constStringType = constStringType; diff --git a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts index 0c655a5ea..e2ec815be 100644 --- a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts @@ -1,41 +1,70 @@ import { arrayIntercalate } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { type Name, type Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import type { Name, Namer } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { assert } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { followTargetType } from "../../Transformers"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import type { + ClassProperty, + ClassType, + EnumType, + Type, + UnionType, +} from "../../Type"; +import { + directlyReachableSingleNamedType, + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; -import { type cSharpOptions } from "./language"; +import type { cSharpOptions } from "./language"; import { AccessModifier, csTypeForTransformedStringType, isValueType, namingFunction, namingFunctionKeep, - noFollow + noFollow, } from "./utils"; export class CSharpRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _csOptions: OptionValues + private readonly _csOptions: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): string[] { - return ["QuickType", "Type", "System", "Console", "Exception", "DateTimeOffset", "Guid", "Uri"]; - } - - protected forbiddenForObjectProperties(_: ClassType, classNamed: Name): ForbiddenWordsInfo { + return [ + "QuickType", + "Type", + "System", + "Console", + "Exception", + "DateTimeOffset", + "Guid", + "Uri", + ]; + } + + protected forbiddenForObjectProperties( + _: ClassType, + classNamed: Name, + ): ForbiddenWordsInfo { return { names: [ classNamed, @@ -45,13 +74,16 @@ export class CSharpRenderer extends ConvenienceRenderer { "Equals", "GetType", "MemberwiseClone", - "ReferenceEquals" + "ReferenceEquals", ], - includeGlobalForbidden: false + includeGlobalForbidden: false, }; } - protected forbiddenForUnionMembers(_: UnionType, unionNamed: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _: UnionType, + unionNamed: Name, + ): ForbiddenWordsInfo { return { names: [unionNamed], includeGlobalForbidden: true }; } @@ -60,7 +92,9 @@ export class CSharpRenderer extends ConvenienceRenderer { } protected namerForObjectProperty(): Namer { - return this._csOptions.keepPropertyName ? namingFunctionKeep : namingFunction; + return this._csOptions.keepPropertyName + ? namingFunctionKeep + : namingFunction; } protected makeUnionMemberNamer(): Namer { @@ -92,37 +126,65 @@ export class CSharpRenderer extends ConvenienceRenderer { return this._csOptions.useDecimal ? "decimal" : "double"; } - protected csType(t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false): Sourcelike { + protected csType( + t: Type, + follow: (t: Type) => Type = followTargetType, + withIssues = false, + ): Sourcelike { const actualType = follow(t); return matchType( actualType, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, this._csOptions.typeForAny), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, this._csOptions.typeForAny), - _boolType => "bool", - _integerType => "long", - _doubleType => this.doubleType, - _stringType => "string", - arrayType => { - const itemsType = this.csType(arrayType.items, follow, withIssues); + (_anyType) => + maybeAnnotated( + withIssues, + anyTypeIssueAnnotation, + this._csOptions.typeForAny, + ), + (_nullType) => + maybeAnnotated( + withIssues, + nullTypeIssueAnnotation, + this._csOptions.typeForAny, + ), + (_boolType) => "bool", + (_integerType) => "long", + (_doubleType) => this.doubleType, + (_stringType) => "string", + (arrayType) => { + const itemsType = this.csType( + arrayType.items, + follow, + withIssues, + ); if (this._csOptions.useList) { return ["List<", itemsType, ">"]; } else { return [itemsType, "[]"]; } }, - classType => this.nameForNamedType(classType), - mapType => ["Dictionary"], - enumType => this.nameForNamedType(enumType), - unionType => { + (classType) => this.nameForNamedType(classType), + (mapType) => [ + "Dictionary", + ], + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.nullableCSType(nullable, noFollow); + if (nullable !== null) + return this.nullableCSType(nullable, noFollow); return this.nameForNamedType(unionType); }, - transformedStringType => csTypeForTransformedStringType(transformedStringType) + (transformedStringType) => + csTypeForTransformedStringType(transformedStringType), ); } - protected nullableCSType(t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false): Sourcelike { + protected nullableCSType( + t: Type, + follow: (t: Type) => Type = followTargetType, + withIssues = false, + ): Sourcelike { t = followTargetType(t); const csType = this.csType(t, follow, withIssues); if (isValueType(t)) { @@ -142,7 +204,7 @@ export class CSharpRenderer extends ConvenienceRenderer { declaration: Sourcelike, name: Sourcelike, baseclass: Sourcelike | undefined, - emitter: () => void + emitter: () => void, ): void { switch (accessModifier) { case AccessModifier.Public: @@ -169,12 +231,17 @@ export class CSharpRenderer extends ConvenienceRenderer { _property: ClassProperty, _name: Name, _c: ClassType, - _jsonName: string + _jsonName: string, ): Sourcelike[] | undefined { return undefined; } - protected propertyDefinition(property: ClassProperty, name: Name, _c: ClassType, _jsonName: string): Sourcelike { + protected propertyDefinition( + property: ClassProperty, + name: Name, + _c: ClassType, + _jsonName: string, + ): Sourcelike { const t = property.type; const csType = property.isOptional ? this.nullableCSType(t, followTargetType, true) @@ -192,7 +259,11 @@ export class CSharpRenderer extends ConvenienceRenderer { if (this._csOptions.dense) { this.emitLine(start, lines.join("; "), ""); } else { - this.emitCommentLines(lines, { lineStart: "/// ", beforeComment: start, afterComment: "/// " }); + this.emitCommentLines(lines, { + lineStart: "/// ", + beforeComment: start, + afterComment: "/// ", + }); } } @@ -209,45 +280,71 @@ export class CSharpRenderer extends ConvenienceRenderer { this.baseclassForType(c), () => { if (c.getProperties().size === 0) return; - const blankLines = this.blankLinesBetweenAttributes() ? "interposing" : "none"; - let columns: Sourcelike[][] = []; + const blankLines = this.blankLinesBetweenAttributes() + ? "interposing" + : "none"; + const columns: Sourcelike[][] = []; let isFirstProperty = true; let previousDescription: string[] | undefined = undefined; - this.forEachClassProperty(c, blankLines, (name, jsonName, p) => { - const attributes = this.attributesForProperty(p, name, c, jsonName); - const description = this.descriptionForClassProperty(c, jsonName); - const property = this.propertyDefinition(p, name, c, jsonName); - if (attributes === undefined) { - if ( - // Descriptions should be preceded by an empty line - (!isFirstProperty && description !== undefined) || - // If the previous property has a description, leave an empty line - previousDescription !== undefined + this.forEachClassProperty( + c, + blankLines, + (name, jsonName, p) => { + const attributes = this.attributesForProperty( + p, + name, + c, + jsonName, + ); + const description = this.descriptionForClassProperty( + c, + jsonName, + ); + const property = this.propertyDefinition( + p, + name, + c, + jsonName, + ); + if (attributes === undefined) { + if ( + // Descriptions should be preceded by an empty line + (!isFirstProperty && + description !== undefined) || + // If the previous property has a description, leave an empty line + previousDescription !== undefined + ) { + this.ensureBlankLine(); + } + + this.emitDescription(description); + this.emitLine(property); + } else if ( + this._csOptions.dense && + attributes.length > 0 ) { - this.ensureBlankLine(); - } - - this.emitDescription(description); - this.emitLine(property); - } else if (this._csOptions.dense && attributes.length > 0) { - const comment = description === undefined ? "" : ` // ${description.join("; ")}`; - columns.push([attributes, " ", property, comment]); - } else { - this.emitDescription(description); - for (const attribute of attributes) { - this.emitLine(attribute); + const comment = + description === undefined + ? "" + : ` // ${description.join("; ")}`; + columns.push([attributes, " ", property, comment]); + } else { + this.emitDescription(description); + for (const attribute of attributes) { + this.emitLine(attribute); + } + + this.emitLine(property); } - this.emitLine(property); - } - - isFirstProperty = false; - previousDescription = description; - }); + isFirstProperty = false; + previousDescription = description; + }, + ); if (columns.length > 0) { this.emitTable(columns); } - } + }, ); } @@ -260,32 +357,63 @@ export class CSharpRenderer extends ConvenienceRenderer { unionName, this.baseclassForType(u), () => { - this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { - const csType = this.nullableCSType(t); - this.emitLine("public ", csType, " ", fieldName, ";"); - }); + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (fieldName, t) => { + const csType = this.nullableCSType(t); + this.emitLine("public ", csType, " ", fieldName, ";"); + }, + ); this.ensureBlankLine(); - const nullTests: Sourcelike[] = Array.from(nonNulls).map(t => [ - this.nameForUnionMember(u, t), - " == null" - ]); + const nullTests: Sourcelike[] = Array.from(nonNulls).map( + (t) => [this.nameForUnionMember(u, t), " == null"], + ); this.ensureBlankLine(); - this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { - const csType = this.csType(t); - this.emitExpressionMember( - ["public static implicit operator ", unionName, "(", csType, " ", fieldName, ")"], - ["new ", unionName, " { ", fieldName, " = ", fieldName, " }"] - ); - }); + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (fieldName, t) => { + const csType = this.csType(t); + this.emitExpressionMember( + [ + "public static implicit operator ", + unionName, + "(", + csType, + " ", + fieldName, + ")", + ], + [ + "new ", + unionName, + " { ", + fieldName, + " = ", + fieldName, + " }", + ], + ); + }, + ); if (u.findMember("null") === undefined) return; - this.emitExpressionMember("public bool IsNull", arrayIntercalate(" && ", nullTests), true); - } + this.emitExpressionMember( + "public bool IsNull", + arrayIntercalate(" && ", nullTests), + true, + ); + }, ); } private emitEnumDefinition(e: EnumType, enumName: Name): void { const caseNames: Sourcelike[] = []; - this.forEachEnumCase(e, "none", name => { + this.forEachEnumCase(e, "none", (name) => { if (caseNames.length > 0) caseNames.push(", "); caseNames.push(name); }); @@ -293,7 +421,11 @@ export class CSharpRenderer extends ConvenienceRenderer { this.emitLine("public enum ", enumName, " { ", caseNames, " };"); } - protected emitExpressionMember(declare: Sourcelike, define: Sourcelike, isProperty = false): void { + protected emitExpressionMember( + declare: Sourcelike, + define: Sourcelike, + isProperty = false, + ): void { if (this._csOptions.version === 5) { this.emitLine(declare); this.emitBlock(() => { @@ -315,7 +447,7 @@ export class CSharpRenderer extends ConvenienceRenderer { condition: (t: T) => Sourcelike, withBlock: boolean, withReturn: boolean, - f: (t: T) => void + f: (t: T) => void, ): void { assert(!withReturn || withBlock, "Can only have return with block"); for (const t of types) { @@ -348,9 +480,16 @@ export class CSharpRenderer extends ConvenienceRenderer { } private emitTypesAndSupport(): void { - this.forEachObject("leading-and-interposing", (c: ClassType, name: Name) => this.emitClassDefinition(c, name)); - this.forEachEnum("leading-and-interposing", (e, name) => this.emitEnumDefinition(e, name)); - this.forEachUnion("leading-and-interposing", (u, name) => this.emitUnionDefinition(u, name)); + this.forEachObject( + "leading-and-interposing", + (c: ClassType, name: Name) => this.emitClassDefinition(c, name), + ); + this.forEachEnum("leading-and-interposing", (e, name) => + this.emitEnumDefinition(e, name), + ); + this.forEachUnion("leading-and-interposing", (u, name) => + this.emitUnionDefinition(u, name), + ); this.emitRequiredHelpers(); } diff --git a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts index 7e89da0a5..df9e1a6a0 100644 --- a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts @@ -1,13 +1,16 @@ import { arrayIntercalate } from "collection-utils"; -import { type ForbiddenWordsInfo, inferredNameOrder } from "../../ConvenienceRenderer"; +import { + type ForbiddenWordsInfo, + inferredNameOrder, +} from "../../ConvenienceRenderer"; import { DependencyName, type Name, SimpleName } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import { defined, panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayDecodingTransformer, ArrayEncodingTransformer, @@ -26,13 +29,20 @@ import { UnionInstantiationTransformer, UnionMemberMatchTransformer, followTargetType, - transformationForType + transformationForType, } from "../../Transformers"; -import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + type Type, + UnionType, +} from "../../Type"; import { nullableFromUnion } from "../../Type/TypeUtils"; import { CSharpRenderer } from "./CSharpRenderer"; -import { type newtonsoftCSharpOptions } from "./language"; +import type { newtonsoftCSharpOptions } from "./language"; import { AccessModifier, alwaysApplyTransformation, @@ -40,7 +50,7 @@ import { denseNullValueHandlingEnumName, denseRequiredEnumName, isValueType, - namingFunction + namingFunction, } from "./utils"; export class NewtonsoftCSharpRenderer extends CSharpRenderer { @@ -55,7 +65,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext, _options); this._needHelpers = _options.features.helpers; @@ -75,7 +85,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { "MetadataPropertyHandling", "DateParseHandling", "FromJson", - "Required" + "Required", ]; if (this._options.dense) { forbidden.push("J", "R", "N"); @@ -88,32 +98,52 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { return super.forbiddenNamesForGlobalNamespace().concat(forbidden); } - protected forbiddenForObjectProperties(c: ClassType, className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + c: ClassType, + className: Name, + ): ForbiddenWordsInfo { const result = super.forbiddenForObjectProperties(c, className); result.names = result.names.concat(["ToJson", "FromJson", "Required"]); return result; } - protected makeNameForTransformation(xf: Transformation, typeName: Name | undefined): Name { + protected makeNameForTransformation( + xf: Transformation, + typeName: Name | undefined, + ): Name { if (typeName === undefined) { let xfer = xf.transformer; - if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { + if ( + xfer instanceof DecodingTransformer && + xfer.consumer !== undefined + ) { xfer = xfer.consumer; } - return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); + return new SimpleName( + [`${xfer.kind}_converter`], + namingFunction, + inferredNameOrder + 30, + ); } - return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); + return new DependencyName( + namingFunction, + typeName.order + 30, + (lookup) => `${lookup(typeName)}_converter`, + ); } - protected makeNamedTypeDependencyNames(t: Type, name: Name): DependencyName[] { + protected makeNamedTypeDependencyNames( + t: Type, + name: Name, + ): DependencyName[] { if (!(t instanceof EnumType)) return []; const extensionsName = new DependencyName( namingFunction, name.order + 30, - lookup => `${lookup(name)}_extensions` + (lookup) => `${lookup(name)}_extensions`, ); this._enumExtensionsNames.set(name, extensionsName); return [extensionsName]; @@ -126,14 +156,27 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { super.emitUsings(); this.ensureBlankLine(); - for (const ns of ["System.Globalization", "Newtonsoft.Json", "Newtonsoft.Json.Converters"]) { + for (const ns of [ + "System.Globalization", + "Newtonsoft.Json", + "Newtonsoft.Json.Converters", + ]) { this.emitUsing(ns); } if (this._options.dense) { - this.emitUsing([denseJsonPropertyName, " = Newtonsoft.Json.JsonPropertyAttribute"]); - this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); - this.emitUsing([denseNullValueHandlingEnumName, " = Newtonsoft.Json.NullValueHandling"]); + this.emitUsing([ + denseJsonPropertyName, + " = Newtonsoft.Json.JsonPropertyAttribute", + ]); + this.emitUsing([ + denseRequiredEnumName, + " = Newtonsoft.Json.Required", + ]); + this.emitUsing([ + denseNullValueHandlingEnumName, + " = Newtonsoft.Json.NullValueHandling", + ]); } if (this._options.baseclass === "EntityData") { @@ -153,7 +196,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { this.emitLine( "// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do", this.topLevels.size === 1 ? "" : " one of these", - ":" + ":", ); this.emitLine("//"); this.emitLine("// using ", this._options.namespace, ";"); @@ -161,12 +204,22 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { this.forEachTopLevel("none", (t, topLevelName) => { let rhs: Sourcelike; if (t instanceof EnumType) { - rhs = ["JsonConvert.DeserializeObject<", topLevelName, ">(jsonString)"]; + rhs = [ + "JsonConvert.DeserializeObject<", + topLevelName, + ">(jsonString)", + ]; } else { rhs = [topLevelName, ".FromJson(jsonString)"]; } - this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); + this.emitLine( + "// var ", + modifySource(camelCase, topLevelName), + " = ", + rhs, + ";", + ); }); } @@ -192,32 +245,56 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { property: ClassProperty, _name: Name, _c: ClassType, - jsonName: string + jsonName: string, ): Sourcelike[] | undefined { if (!this._needAttributes) return undefined; const attributes: Sourcelike[] = []; - const jsonProperty = this._options.dense ? denseJsonPropertyName : "JsonProperty"; + const jsonProperty = this._options.dense + ? denseJsonPropertyName + : "JsonProperty"; const escapedName = utf16StringEscape(jsonName); const isNullable = followTargetType(property.type).isNullable; const isOptional = property.isOptional; const requiredClass = this._options.dense ? "R" : "Required"; - const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; + const nullValueHandlingClass = this._options.dense + ? "N" + : "NullValueHandling"; const nullValueHandling = - isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : []; + isOptional && !isNullable + ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] + : []; let required: Sourcelike; if (!this._options.checkRequired || (isOptional && isNullable)) { required = [nullValueHandling]; } else if (isOptional && !isNullable) { - required = [", Required = ", requiredClass, ".DisallowNull", nullValueHandling]; + required = [ + ", Required = ", + requiredClass, + ".DisallowNull", + nullValueHandling, + ]; } else if (!isOptional && isNullable) { required = [", Required = ", requiredClass, ".AllowNull"]; } else { - required = [", Required = ", requiredClass, ".Always", nullValueHandling]; + required = [ + ", Required = ", + requiredClass, + ".Always", + nullValueHandling, + ]; } - attributes.push(["[", jsonProperty, '("', escapedName, '"', required, ")]"]); + attributes.push([ + "[", + jsonProperty, + '("', + escapedName, + '"', + required, + ")]", + ]); const converter = this.converterForType(property.type); if (converter !== undefined) { @@ -233,7 +310,9 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { // The "this" type can't be `dynamic`, so we have to force it to `object`. private topLevelResultType(t: Type): Sourcelike { - return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); + return t.kind === "any" || t.kind === "none" + ? "object" + : this.csType(t); } private emitFromJsonForTopLevel(t: Type, name: Name): void { @@ -251,13 +330,26 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } const csType = this.topLevelResultType(t); - this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { - // FIXME: Make FromJson a Named - this.emitExpressionMember( - ["public static ", csType, " FromJson(string json)"], - ["JsonConvert.DeserializeObject<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)"] - ); - }); + this.emitType( + undefined, + AccessModifier.Public, + [partial, typeKind], + name, + this.baseclassForType(t), + () => { + // FIXME: Make FromJson a Named + this.emitExpressionMember( + ["public static ", csType, " FromJson(string json)"], + [ + "JsonConvert.DeserializeObject<", + csType, + ">(json, ", + this._options.namespace, + ".Converter.Settings)", + ], + ); + }, + ); } private emitDecoderSwitch(emitBody: () => void): void { @@ -283,30 +375,48 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { private emitSerializeClass(): void { // FIXME: Make Serialize a Named - this.emitType(undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { - // Sometimes multiple top-levels will resolve to the same type, so we have to take care - // not to emit more than one extension method for the same type. - const seenTypes = new Set(); - this.forEachTopLevel("none", t => { - // FIXME: Make ToJson a Named - if (!seenTypes.has(t)) { - seenTypes.add(t); - this.emitExpressionMember( - ["public static string ToJson(this ", this.topLevelResultType(t), " self)"], - ["JsonConvert.SerializeObject(self, ", this._options.namespace, ".Converter.Settings)"] - ); - } - }); - }); + this.emitType( + undefined, + AccessModifier.Public, + "static class", + "Serialize", + undefined, + () => { + // Sometimes multiple top-levels will resolve to the same type, so we have to take care + // not to emit more than one extension method for the same type. + const seenTypes = new Set(); + this.forEachTopLevel("none", (t) => { + // FIXME: Make ToJson a Named + if (!seenTypes.has(t)) { + seenTypes.add(t); + this.emitExpressionMember( + [ + "public static string ToJson(this ", + this.topLevelResultType(t), + " self)", + ], + [ + "JsonConvert.SerializeObject(self, ", + this._options.namespace, + ".Converter.Settings)", + ], + ); + } + }); + }, + ); } private emitCanConvert(expr: Sourcelike): void { - this.emitExpressionMember("public override bool CanConvert(Type t)", expr); + this.emitExpressionMember( + "public override bool CanConvert(Type t)", + expr, + ); } private emitReadJson(emitBody: () => void): void { this.emitLine( - "public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)" + "public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)", ); this.emitBlock(emitBody); } @@ -315,7 +425,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { this.emitLine( "public override void WriteJson(JsonWriter writer, object ", variable, - ", JsonSerializer serializer)" + ", JsonSerializer serializer)", ); this.emitBlock(emitBody); } @@ -328,25 +438,48 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { private emitConverterClass(): void { // FIXME: Make Converter a Named const converterName: Sourcelike = ["Converter"]; - this.emitType(undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { - this.emitLine("public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings"); - this.emitBlock(() => { - this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); - this.emitLine("DateParseHandling = DateParseHandling.None,"); - this.emitLine("Converters ="); - this.emitLine("{"); - this.indent(() => { - for (const [t, converter] of this.typesWithNamedTransformations) { - if (alwaysApplyTransformation(defined(transformationForType(t)))) { - this.emitLine(this.converterObject(converter), ","); + this.emitType( + undefined, + AccessModifier.Internal, + "static class", + converterName, + undefined, + () => { + this.emitLine( + "public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings", + ); + this.emitBlock(() => { + this.emitLine( + "MetadataPropertyHandling = MetadataPropertyHandling.Ignore,", + ); + this.emitLine( + "DateParseHandling = DateParseHandling.None,", + ); + this.emitLine("Converters ="); + this.emitLine("{"); + this.indent(() => { + for (const [t, converter] of this + .typesWithNamedTransformations) { + if ( + alwaysApplyTransformation( + defined(transformationForType(t)), + ) + ) { + this.emitLine( + this.converterObject(converter), + ",", + ); + } } - } - this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); - }); - this.emitLine("},"); - }, true); - }); + this.emitLine( + "new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }", + ); + }); + this.emitLine("},"); + }, true); + }, + ); } private emitDecoderTransformerCase( @@ -354,7 +487,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { variableName: string, xfer: Transformer | undefined, targetType: Type, - emitFinish: (value: Sourcelike) => void + emitFinish: (value: Sourcelike) => void, ): void { if (xfer === undefined) return; @@ -363,7 +496,12 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } this.indent(() => { - const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); + const allHandled = this.emitDecodeTransformer( + xfer, + targetType, + emitFinish, + variableName, + ); if (!allHandled) { this.emitLine("break;"); } @@ -374,28 +512,32 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { value: Sourcelike, consumer: Transformer | undefined, targetType: Type, - emitFinish: (variableName: Sourcelike) => void + emitFinish: (variableName: Sourcelike) => void, ): boolean { if (consumer === undefined) { emitFinish(value); return true; - } else { - return this.emitTransformer(value, consumer, targetType, emitFinish); } + + return this.emitTransformer(value, consumer, targetType, emitFinish); } private emitDecodeTransformer( xfer: Transformer, targetType: Type, emitFinish: (value: Sourcelike) => void, - variableName = "value" + variableName = "value", ): boolean { if (xfer instanceof DecodingTransformer) { const source = xfer.sourceType; const converter = this.converterForType(targetType); if (converter !== undefined) { const typeSource = this.csType(targetType); - this.emitLine("var converter = ", this.converterObject(converter), ";"); + this.emitLine( + "var converter = ", + this.converterObject(converter), + ";", + ); this.emitLine( "var ", variableName, @@ -403,15 +545,29 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { typeSource, ")converter.ReadJson(reader, typeof(", typeSource, - "), null, serializer);" + "), null, serializer);", ); } else if (source.kind !== "null") { - let output = targetType.kind === "double" ? targetType : source; - this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); + const output = + targetType.kind === "double" ? targetType : source; + this.emitLine( + "var ", + variableName, + " = ", + this.deserializeTypeCode(this.csType(output)), + ";", + ); } - return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); - } else if (xfer instanceof ArrayDecodingTransformer) { + return this.emitConsume( + variableName, + xfer.consumer, + targetType, + emitFinish, + ); + } + + if (xfer instanceof ArrayDecodingTransformer) { // FIXME: Consume StartArray if (!(targetType instanceof ArrayType)) { return panic("Array decoding must produce an array type"); @@ -419,14 +575,20 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { // FIXME: handle EOF this.emitLine("reader.Read();"); - this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); + this.emitLine( + "var ", + variableName, + " = new List<", + this.csType(targetType.items), + ">();", + ); this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); this.emitBlock(() => { this.emitDecodeTransformer( xfer.itemTransformer, xfer.itemTargetType, - v => this.emitLine(variableName, ".Add(", v, ");"), - "arrayItem" + (v) => this.emitLine(variableName, ".Add(", v, ");"), + "arrayItem", ); // FIXME: handle EOF this.emitLine("reader.Read();"); @@ -438,13 +600,20 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { emitFinish(result); return true; - } else if (xfer instanceof DecodingChoiceTransformer) { + } + + if (xfer instanceof DecodingChoiceTransformer) { this.emitDecoderSwitch(() => { const nullTransformer = xfer.nullTransformer; if (nullTransformer !== undefined) { this.emitTokenCase("Null"); this.indent(() => { - const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null"); + const allHandled = this.emitDecodeTransformer( + nullTransformer, + targetType, + emitFinish, + "null", + ); if (!allHandled) { this.emitLine("break"); } @@ -456,49 +625,62 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { "integerValue", xfer.integerTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( - xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"], + xfer.integerTransformer === undefined + ? ["Integer", "Float"] + : ["Float"], "doubleValue", xfer.doubleTransformer, targetType, - emitFinish + emitFinish, + ); + this.emitDecoderTransformerCase( + ["Boolean"], + "boolValue", + xfer.boolTransformer, + targetType, + emitFinish, ); - this.emitDecoderTransformerCase(["Boolean"], "boolValue", xfer.boolTransformer, targetType, emitFinish); this.emitDecoderTransformerCase( ["String", "Date"], "stringValue", xfer.stringTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( ["StartObject"], "objectValue", xfer.objectTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( ["StartArray"], "arrayValue", xfer.arrayTransformer, targetType, - emitFinish + emitFinish, ); }); return false; - } else { - return panic("Unknown transformer"); } + + return panic("Unknown transformer"); } private stringCaseValue(t: Type, stringCase: string): Sourcelike { if (t.kind === "string") { return ['"', utf16StringEscape(stringCase), '"']; - } else if (t instanceof EnumType) { - return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; + } + if (t instanceof EnumType) { + return [ + this.nameForNamedType(t), + ".", + this.nameForEnumCase(t, stringCase), + ]; } return panic(`Type ${t.kind} does not have string cases`); @@ -508,7 +690,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { variable: Sourcelike, xfer: Transformer, targetType: Type, - emitFinish: (value: Sourcelike) => void + emitFinish: (value: Sourcelike) => void, ): boolean { function directTargetType(continuation: Transformer | undefined): Type { if (continuation === undefined) { @@ -520,14 +702,19 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (xfer instanceof ChoiceTransformer) { const caseXfers = xfer.transformers; - if (caseXfers.length > 1 && caseXfers.every(caseXfer => caseXfer instanceof StringMatchTransformer)) { + if ( + caseXfers.length > 1 && + caseXfers.every( + (caseXfer) => caseXfer instanceof StringMatchTransformer, + ) + ) { this.emitLine("switch (", variable, ")"); this.emitBlock(() => { for (const caseXfer of caseXfers) { const matchXfer = caseXfer as StringMatchTransformer; const value = this.stringCaseValue( followTargetType(matchXfer.sourceType), - matchXfer.stringCase + matchXfer.stringCase, ); this.emitLine("case ", value, ":"); this.indent(() => { @@ -535,7 +722,7 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { variable, matchXfer.transformer, targetType, - emitFinish + emitFinish, ); if (!allDone) { this.emitLine("break;"); @@ -545,10 +732,15 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { }); // FIXME: Can we check for exhaustiveness? For enums it should be easy. return false; - } else { - for (const caseXfer of caseXfers) { - this.emitTransformer(variable, caseXfer, targetType, emitFinish); - } + } + + for (const caseXfer of caseXfers) { + this.emitTransformer( + variable, + caseXfer, + targetType, + emitFinish, + ); } } else if (xfer instanceof UnionMemberMatchTransformer) { const memberType = xfer.memberType; @@ -567,7 +759,10 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { test = [variable, ".IsNull"]; member = "null"; } else { - const memberName = this.nameForUnionMember(xfer.sourceType, memberType); + const memberName = this.nameForUnionMember( + xfer.sourceType, + memberType, + ); member = [variable, ".", memberName]; test = [member, " != null"]; } @@ -577,16 +772,41 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } this.emitLine("if (", test, ")"); - this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); + this.emitBlock(() => + this.emitTransformer( + member, + xfer.transformer, + targetType, + emitFinish, + ), + ); } else if (xfer instanceof StringMatchTransformer) { - const value = this.stringCaseValue(followTargetType(xfer.sourceType), xfer.stringCase); + const value = this.stringCaseValue( + followTargetType(xfer.sourceType), + xfer.stringCase, + ); this.emitLine("if (", variable, " == ", value, ")"); - this.emitBlock(() => this.emitTransformer(variable, xfer.transformer, targetType, emitFinish)); + this.emitBlock(() => + this.emitTransformer( + variable, + xfer.transformer, + targetType, + emitFinish, + ), + ); } else if (xfer instanceof EncodingTransformer) { const converter = this.converterForType(xfer.sourceType); if (converter !== undefined) { - this.emitLine("var converter = ", this.converterObject(converter), ";"); - this.emitLine("converter.WriteJson(writer, ", variable, ", serializer);"); + this.emitLine( + "var converter = ", + this.converterObject(converter), + ";", + ); + this.emitLine( + "converter.WriteJson(writer, ", + variable, + ", serializer);", + ); } else { this.emitLine(this.serializeValueCode(variable), ";"); } @@ -598,75 +818,160 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { const itemVariable = "arrayItem"; this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); this.emitBlock(() => { - this.emitTransformer(itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { - return; - }); + this.emitTransformer( + itemVariable, + xfer.itemTransformer, + xfer.itemTargetType, + () => { + return; + }, + ); }); this.emitLine("writer.WriteEndArray();"); emitFinish([]); return true; } else if (xfer instanceof ParseStringTransformer) { - const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; + const immediateTargetType = + xfer.consumer === undefined + ? targetType + : xfer.consumer.sourceType; switch (immediateTargetType.kind) { case "date-time": this.emitLine("DateTimeOffset dt;"); - this.emitLine("if (DateTimeOffset.TryParse(", variable, ", out dt))"); - this.emitBlock(() => this.emitConsume("dt", xfer.consumer, targetType, emitFinish)); + this.emitLine( + "if (DateTimeOffset.TryParse(", + variable, + ", out dt))", + ); + this.emitBlock(() => + this.emitConsume( + "dt", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; case "uuid": this.emitLine("Guid guid;"); - this.emitLine("if (Guid.TryParse(", variable, ", out guid))"); - this.emitBlock(() => this.emitConsume("guid", xfer.consumer, targetType, emitFinish)); + this.emitLine( + "if (Guid.TryParse(", + variable, + ", out guid))", + ); + this.emitBlock(() => + this.emitConsume( + "guid", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; case "uri": this.emitLine("try"); this.emitBlock(() => { this.emitLine("var uri = new Uri(", variable, ");"); - this.emitConsume("uri", xfer.consumer, targetType, emitFinish); + this.emitConsume( + "uri", + xfer.consumer, + targetType, + emitFinish, + ); }); this.emitLine("catch (UriFormatException) {}"); break; case "integer": this.emitLine("long l;"); this.emitLine("if (Int64.TryParse(", variable, ", out l))"); - this.emitBlock(() => this.emitConsume("l", xfer.consumer, targetType, emitFinish)); + this.emitBlock(() => + this.emitConsume( + "l", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; case "bool": this.emitLine("bool b;"); - this.emitLine("if (Boolean.TryParse(", variable, ", out b))"); - this.emitBlock(() => this.emitConsume("b", xfer.consumer, targetType, emitFinish)); + this.emitLine( + "if (Boolean.TryParse(", + variable, + ", out b))", + ); + this.emitBlock(() => + this.emitConsume( + "b", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; default: - return panic(`Parsing string to ${immediateTargetType.kind} not supported`); + return panic( + `Parsing string to ${immediateTargetType.kind} not supported`, + ); } } else if (xfer instanceof StringifyTransformer) { switch (xfer.sourceType.kind) { case "date-time": return this.emitConsume( - [variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)'], + [ + variable, + '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)', + ], xfer.consumer, targetType, - emitFinish + emitFinish, ); case "uuid": return this.emitConsume( - [variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)'], + [ + variable, + '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)', + ], xfer.consumer, targetType, - emitFinish + emitFinish, ); case "integer": case "uri": - return this.emitConsume([variable, ".ToString()"], xfer.consumer, targetType, emitFinish); + return this.emitConsume( + [variable, ".ToString()"], + xfer.consumer, + targetType, + emitFinish, + ); case "bool": - this.emitLine("var boolString = ", variable, ' ? "true" : "false";'); - return this.emitConsume("boolString", xfer.consumer, targetType, emitFinish); + this.emitLine( + "var boolString = ", + variable, + ' ? "true" : "false";', + ); + return this.emitConsume( + "boolString", + xfer.consumer, + targetType, + emitFinish, + ); default: - return panic(`Stringifying ${xfer.sourceType.kind} not supported`); + return panic( + `Stringifying ${xfer.sourceType.kind} not supported`, + ); } } else if (xfer instanceof StringProducerTransformer) { - const value = this.stringCaseValue(directTargetType(xfer.consumer), xfer.result); - return this.emitConsume(value, xfer.consumer, targetType, emitFinish); + const value = this.stringCaseValue( + directTargetType(xfer.consumer), + xfer.result, + ); + return this.emitConsume( + value, + xfer.consumer, + targetType, + emitFinish, + ); } else if (xfer instanceof MinMaxLengthCheckTransformer) { const min = xfer.minLength; const max = xfer.maxLength; @@ -681,7 +986,14 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + this.emitBlock(() => + this.emitConsume( + variable, + xfer.consumer, + targetType, + emitFinish, + ), + ); return false; } else if (xfer instanceof MinMaxValueTransformer) { const min = xfer.minimum; @@ -697,11 +1009,20 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + this.emitBlock(() => + this.emitConsume( + variable, + xfer.consumer, + targetType, + emitFinish, + ), + ); return false; } else if (xfer instanceof UnionInstantiationTransformer) { if (!(targetType instanceof UnionType)) { - return panic("Union instantiation transformer must produce a union type"); + return panic( + "Union instantiation transformer must produce a union type", + ); } const maybeNullable = nullableFromUnion(targetType); @@ -713,7 +1034,10 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { if (xfer.sourceType.kind === "null") { initializer = " "; } else { - const memberName = this.nameForUnionMember(targetType, xfer.sourceType); + const memberName = this.nameForUnionMember( + targetType, + xfer.sourceType, + ); initializer = [" ", memberName, " = ", variable, " "]; } @@ -733,67 +1057,107 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { const reverse = xf.reverse; const targetType = xf.targetType; const xfer = xf.transformer; - this.emitType(undefined, AccessModifier.Internal, "class", converterName, "JsonConverter", () => { - const csType = this.csType(targetType); - let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; - const haveNullable = isValueType(targetType); - if (haveNullable) { - canConvertExpr = [canConvertExpr, " || t == typeof(", csType, "?)"]; - } - - this.emitCanConvert(canConvertExpr); - this.ensureBlankLine(); - this.emitReadJson(() => { - // FIXME: It's unsatisfying that we need this. The reason is that we not - // only match T, but also T?. If we didn't, then the T in T? would not be - // deserialized with our converter but with the default one. Can we check - // whether the type is a nullable? - // FIXME: This could duplicate one of the cases handled below in - // `emitDecodeTransformer`. - if (haveNullable && !(targetType instanceof UnionType)) { - this.emitLine("if (reader.TokenType == JsonToken.Null) return null;"); + this.emitType( + undefined, + AccessModifier.Internal, + "class", + converterName, + "JsonConverter", + () => { + const csType = this.csType(targetType); + let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; + const haveNullable = isValueType(targetType); + if (haveNullable) { + canConvertExpr = [ + canConvertExpr, + " || t == typeof(", + csType, + "?)", + ]; } - const allHandled = this.emitDecodeTransformer(xfer, targetType, v => this.emitLine("return ", v, ";")); - if (!allHandled) { - this.emitThrow(['"Cannot unmarshal type ', csType, '"']); - } - }); - this.ensureBlankLine(); - this.emitWriteJson("untypedValue", () => { - // FIXME: See above. - if (haveNullable && !(targetType instanceof UnionType)) { - this.emitLine("if (untypedValue == null)"); - this.emitBlock(() => { - this.emitLine("serializer.Serialize(writer, null);"); - this.emitLine("return;"); - }); - } + this.emitCanConvert(canConvertExpr); + this.ensureBlankLine(); + this.emitReadJson(() => { + // FIXME: It's unsatisfying that we need this. The reason is that we not + // only match T, but also T?. If we didn't, then the T in T? would not be + // deserialized with our converter but with the default one. Can we check + // whether the type is a nullable? + // FIXME: This could duplicate one of the cases handled below in + // `emitDecodeTransformer`. + if (haveNullable && !(targetType instanceof UnionType)) { + this.emitLine( + "if (reader.TokenType == JsonToken.Null) return null;", + ); + } + + const allHandled = this.emitDecodeTransformer( + xfer, + targetType, + (v) => this.emitLine("return ", v, ";"), + ); + if (!allHandled) { + this.emitThrow([ + '"Cannot unmarshal type ', + csType, + '"', + ]); + } + }); + this.ensureBlankLine(); + this.emitWriteJson("untypedValue", () => { + // FIXME: See above. + if (haveNullable && !(targetType instanceof UnionType)) { + this.emitLine("if (untypedValue == null)"); + this.emitBlock(() => { + this.emitLine( + "serializer.Serialize(writer, null);", + ); + this.emitLine("return;"); + }); + } - this.emitLine("var value = (", csType, ")untypedValue;"); - const allHandled = this.emitTransformer("value", reverse.transformer, reverse.targetType, () => - this.emitLine("return;") + this.emitLine("var value = (", csType, ")untypedValue;"); + const allHandled = this.emitTransformer( + "value", + reverse.transformer, + reverse.targetType, + () => this.emitLine("return;"), + ); + if (!allHandled) { + this.emitThrow(['"Cannot marshal type ', csType, '"']); + } + }); + this.ensureBlankLine(); + this.emitLine( + "public static readonly ", + converterName, + " Singleton = new ", + converterName, + "();", ); - if (!allHandled) { - this.emitThrow(['"Cannot marshal type ', csType, '"']); - } - }); - this.ensureBlankLine(); - this.emitLine("public static readonly ", converterName, " Singleton = new ", converterName, "();"); - }); + }, + ); } protected emitRequiredHelpers(): void { if (this._needHelpers) { - this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n)); + this.forEachTopLevel("leading-and-interposing", (t, n) => + this.emitFromJsonForTopLevel(t, n), + ); this.ensureBlankLine(); this.emitSerializeClass(); } - if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { + if ( + this._needHelpers || + (this._needAttributes && (this.haveNamedUnions || this.haveEnums)) + ) { this.ensureBlankLine(); this.emitConverterClass(); - this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t)); + this.forEachTransformation("leading-and-interposing", (n, t) => + this.emitTransformation(n, t), + ); } } diff --git a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts index 29c3e9733..fc5a205e4 100644 --- a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts @@ -1,13 +1,16 @@ import { arrayIntercalate } from "collection-utils"; -import { type ForbiddenWordsInfo, inferredNameOrder } from "../../ConvenienceRenderer"; +import { + type ForbiddenWordsInfo, + inferredNameOrder, +} from "../../ConvenienceRenderer"; import { DependencyName, type Name, SimpleName } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import { defined, panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayDecodingTransformer, ArrayEncodingTransformer, @@ -26,20 +29,27 @@ import { UnionInstantiationTransformer, UnionMemberMatchTransformer, followTargetType, - transformationForType + transformationForType, } from "../../Transformers"; -import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + type Type, + UnionType, +} from "../../Type"; import { nullableFromUnion } from "../../Type/TypeUtils"; import { CSharpRenderer } from "./CSharpRenderer"; -import { type systemTextJsonCSharpOptions } from "./language"; +import type { systemTextJsonCSharpOptions } from "./language"; import { AccessModifier, alwaysApplyTransformation, denseJsonPropertyName, denseNullValueHandlingEnumName, isValueType, - namingFunction + namingFunction, } from "./utils"; export class SystemTextJsonCSharpRenderer extends CSharpRenderer { @@ -54,7 +64,9 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues< + typeof systemTextJsonCSharpOptions + >, ) { super(targetLanguage, renderContext, _options); this._needHelpers = _options.features.helpers; @@ -75,7 +87,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { // "MetadataPropertyHandling", // "DateParseHandling", "FromJson", - "Required" + "Required", ]; if (this._options.dense) { forbidden.push("J", "R", "N"); @@ -88,32 +100,52 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { return super.forbiddenNamesForGlobalNamespace().concat(forbidden); } - protected forbiddenForObjectProperties(c: ClassType, className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + c: ClassType, + className: Name, + ): ForbiddenWordsInfo { const result = super.forbiddenForObjectProperties(c, className); result.names = result.names.concat(["ToJson", "FromJson", "Required"]); return result; } - protected makeNameForTransformation(xf: Transformation, typeName: Name | undefined): Name { + protected makeNameForTransformation( + xf: Transformation, + typeName: Name | undefined, + ): Name { if (typeName === undefined) { let xfer = xf.transformer; - if (xfer instanceof DecodingTransformer && xfer.consumer !== undefined) { + if ( + xfer instanceof DecodingTransformer && + xfer.consumer !== undefined + ) { xfer = xfer.consumer; } - return new SimpleName([`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30); + return new SimpleName( + [`${xfer.kind}_converter`], + namingFunction, + inferredNameOrder + 30, + ); } - return new DependencyName(namingFunction, typeName.order + 30, lookup => `${lookup(typeName)}_converter`); + return new DependencyName( + namingFunction, + typeName.order + 30, + (lookup) => `${lookup(typeName)}_converter`, + ); } - protected makeNamedTypeDependencyNames(t: Type, name: Name): DependencyName[] { + protected makeNamedTypeDependencyNames( + t: Type, + name: Name, + ): DependencyName[] { if (!(t instanceof EnumType)) return []; const extensionsName = new DependencyName( namingFunction, name.order + 30, - lookup => `${lookup(name)}_extensions` + (lookup) => `${lookup(name)}_extensions`, ); this._enumExtensionsNames.set(name, extensionsName); return [extensionsName]; @@ -126,14 +158,24 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { super.emitUsings(); this.ensureBlankLine(); - for (const ns of ["System.Text.Json", "System.Text.Json.Serialization", "System.Globalization"]) { + for (const ns of [ + "System.Text.Json", + "System.Text.Json.Serialization", + "System.Globalization", + ]) { this.emitUsing(ns); } if (this._options.dense) { - this.emitUsing([denseJsonPropertyName, " = System.Text.Json.Serialization.JsonPropertyNameAttribute"]); + this.emitUsing([ + denseJsonPropertyName, + " = System.Text.Json.Serialization.JsonPropertyNameAttribute", + ]); // this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); - this.emitUsing([denseNullValueHandlingEnumName, " = System.Text.Json.Serialization.JsonIgnoreCondition"]); + this.emitUsing([ + denseNullValueHandlingEnumName, + " = System.Text.Json.Serialization.JsonIgnoreCondition", + ]); } if (this._options.baseclass === "EntityData") { @@ -161,7 +203,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { this.emitLine( "// To parse this JSON data, add NuGet 'System.Text.Json' then do", this.topLevels.size === 1 ? "" : " one of these", - ":" + ":", ); this.emitLine("//"); this.emitLine("// using ", this._options.namespace, ";"); @@ -169,12 +211,22 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { this.forEachTopLevel("none", (t, topLevelName) => { let rhs: Sourcelike; if (t instanceof EnumType) { - rhs = ["JsonSerializer.Deserialize<", topLevelName, ">(jsonString)"]; + rhs = [ + "JsonSerializer.Deserialize<", + topLevelName, + ">(jsonString)", + ]; } else { rhs = [topLevelName, ".FromJson(jsonString)"]; } - this.emitLine("// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";"); + this.emitLine( + "// var ", + modifySource(camelCase, topLevelName), + " = ", + rhs, + ";", + ); }); // fix: should this be an option? Or respond to an existing option? @@ -206,19 +258,25 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { property: ClassProperty, _name: Name, _c: ClassType, - jsonName: string + jsonName: string, ): Sourcelike[] | undefined { if (!this._needAttributes) return undefined; const attributes: Sourcelike[] = []; - const jsonPropertyName = this._options.dense ? denseJsonPropertyName : "JsonPropertyName"; + const jsonPropertyName = this._options.dense + ? denseJsonPropertyName + : "JsonPropertyName"; const escapedName = utf16StringEscape(jsonName); const isNullable = followTargetType(property.type).isNullable; const isOptional = property.isOptional; if (isOptional && !isNullable) { - attributes.push(["[", "JsonIgnore", "(Condition = JsonIgnoreCondition.WhenWritingNull)]"]); + attributes.push([ + "[", + "JsonIgnore", + "(Condition = JsonIgnoreCondition.WhenWritingNull)]", + ]); } // const requiredClass = this._options.dense ? "R" : "Required"; @@ -251,7 +309,9 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { // The "this" type can't be `dynamic`, so we have to force it to `object`. private topLevelResultType(t: Type): Sourcelike { - return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); + return t.kind === "any" || t.kind === "none" + ? "object" + : this.csType(t); } private emitFromJsonForTopLevel(t: Type, name: Name): void { @@ -269,13 +329,26 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } const csType = this.topLevelResultType(t); - this.emitType(undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { - // FIXME: Make FromJson a Named - this.emitExpressionMember( - ["public static ", csType, " FromJson(string json)"], - ["JsonSerializer.Deserialize<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)"] - ); - }); + this.emitType( + undefined, + AccessModifier.Public, + [partial, typeKind], + name, + this.baseclassForType(t), + () => { + // FIXME: Make FromJson a Named + this.emitExpressionMember( + ["public static ", csType, " FromJson(string json)"], + [ + "JsonSerializer.Deserialize<", + csType, + ">(json, ", + this._options.namespace, + ".Converter.Settings)", + ], + ); + }, + ); } private emitDecoderSwitch(emitBody: () => void): void { @@ -304,54 +377,83 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { case "string": return ["reader.GetString()"]; default: - return ["JsonSerializer.Deserialize<", typeName, ">(ref reader, options)"]; + return [ + "JsonSerializer.Deserialize<", + typeName, + ">(ref reader, options)", + ]; } } private serializeValueCode(value: Sourcelike): Sourcelike { - if (value !== "null") return ["JsonSerializer.Serialize(writer, ", value, ", options)"]; - else return ["writer.WriteNullValue()"]; + if (value !== "null") { + return ["JsonSerializer.Serialize(writer, ", value, ", options)"]; + } + + return ["writer.WriteNullValue()"]; } private emitSerializeClass(): void { // FIXME: Make Serialize a Named - this.emitType(undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { - // Sometimes multiple top-levels will resolve to the same type, so we have to take care - // not to emit more than one extension method for the same type. - const seenTypes = new Set(); - this.forEachTopLevel("none", t => { - // FIXME: Make ToJson a Named - if (!seenTypes.has(t)) { - seenTypes.add(t); - this.emitExpressionMember( - ["public static string ToJson(this ", this.topLevelResultType(t), " self)"], - ["JsonSerializer.Serialize(self, ", this._options.namespace, ".Converter.Settings)"] - ); - } - }); - }); + this.emitType( + undefined, + AccessModifier.Public, + "static class", + "Serialize", + undefined, + () => { + // Sometimes multiple top-levels will resolve to the same type, so we have to take care + // not to emit more than one extension method for the same type. + const seenTypes = new Set(); + this.forEachTopLevel("none", (t) => { + // FIXME: Make ToJson a Named + if (!seenTypes.has(t)) { + seenTypes.add(t); + this.emitExpressionMember( + [ + "public static string ToJson(this ", + this.topLevelResultType(t), + " self)", + ], + [ + "JsonSerializer.Serialize(self, ", + this._options.namespace, + ".Converter.Settings)", + ], + ); + } + }); + }, + ); } private emitCanConvert(expr: Sourcelike): void { - this.emitExpressionMember("public override bool CanConvert(Type t)", expr); + this.emitExpressionMember( + "public override bool CanConvert(Type t)", + expr, + ); } private emitReadJson(emitBody: () => void, csType: Sourcelike): void { this.emitLine( "public override ", csType, - " Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)" + " Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)", ); this.emitBlock(emitBody); } - private emitWriteJson(variable: string, emitBody: () => void, csType: Sourcelike): void { + private emitWriteJson( + variable: string, + emitBody: () => void, + csType: Sourcelike, + ): void { this.emitLine( "public override void Write(Utf8JsonWriter writer, ", csType, " ", variable, - ", JsonSerializerOptions options)" + ", JsonSerializerOptions options)", ); this.emitBlock(emitBody); } @@ -364,31 +466,46 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { private emitConverterClass(): void { // FIXME: Make Converter a Named const converterName: Sourcelike = ["Converter"]; - this.emitType(undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { - // Do not use .Web as defaults. That turns on caseInsensitive property names and will fail the keywords test. - this.emitLine( - "public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)" - ); - this.emitBlock(() => { - // this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); - // this.emitLine("DateParseHandling = DateParseHandling.None,"); - this.emitLine("Converters ="); - this.emitLine("{"); - this.indent(() => { - for (const [t, converter] of this.typesWithNamedTransformations) { - if (alwaysApplyTransformation(defined(transformationForType(t)))) { - this.emitLine(this.converterObject(converter), ","); + this.emitType( + undefined, + AccessModifier.Internal, + "static class", + converterName, + undefined, + () => { + // Do not use .Web as defaults. That turns on caseInsensitive property names and will fail the keywords test. + this.emitLine( + "public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)", + ); + this.emitBlock(() => { + // this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); + // this.emitLine("DateParseHandling = DateParseHandling.None,"); + this.emitLine("Converters ="); + this.emitLine("{"); + this.indent(() => { + for (const [t, converter] of this + .typesWithNamedTransformations) { + if ( + alwaysApplyTransformation( + defined(transformationForType(t)), + ) + ) { + this.emitLine( + this.converterObject(converter), + ",", + ); + } } - } - this.emitLine("new DateOnlyConverter(),"); - this.emitLine("new TimeOnlyConverter(),"); - this.emitLine("IsoDateTimeOffsetConverter.Singleton"); - // this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); - }); - this.emitLine("},"); - }, true); - }); + this.emitLine("new DateOnlyConverter(),"); + this.emitLine("new TimeOnlyConverter(),"); + this.emitLine("IsoDateTimeOffsetConverter.Singleton"); + // this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); + }); + this.emitLine("},"); + }, true); + }, + ); } private emitDecoderTransformerCase( @@ -396,7 +513,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { variableName: string, xfer: Transformer | undefined, targetType: Type, - emitFinish: (value: Sourcelike) => void + emitFinish: (value: Sourcelike) => void, ): void { if (xfer === undefined) return; @@ -405,7 +522,12 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } this.indent(() => { - const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName); + const allHandled = this.emitDecodeTransformer( + xfer, + targetType, + emitFinish, + variableName, + ); if (!allHandled) { this.emitLine("break;"); } @@ -416,28 +538,32 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { value: Sourcelike, consumer: Transformer | undefined, targetType: Type, - emitFinish: (variableName: Sourcelike) => void + emitFinish: (variableName: Sourcelike) => void, ): boolean { if (consumer === undefined) { emitFinish(value); return true; - } else { - return this.emitTransformer(value, consumer, targetType, emitFinish); } + + return this.emitTransformer(value, consumer, targetType, emitFinish); } private emitDecodeTransformer( xfer: Transformer, targetType: Type, emitFinish: (value: Sourcelike) => void, - variableName = "value" + variableName = "value", ): boolean { if (xfer instanceof DecodingTransformer) { const source = xfer.sourceType; const converter = this.converterForType(targetType); if (converter !== undefined) { const typeSource = this.csType(targetType); - this.emitLine("var converter = ", this.converterObject(converter), ";"); + this.emitLine( + "var converter = ", + this.converterObject(converter), + ";", + ); this.emitLine( "var ", variableName, @@ -445,15 +571,29 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { typeSource, ")converter.ReadJson(reader, typeof(", typeSource, - "), null, serializer);" + "), null, serializer);", ); } else if (source.kind !== "null") { - let output = targetType.kind === "double" ? targetType : source; - this.emitLine("var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";"); + const output = + targetType.kind === "double" ? targetType : source; + this.emitLine( + "var ", + variableName, + " = ", + this.deserializeTypeCode(this.csType(output)), + ";", + ); } - return this.emitConsume(variableName, xfer.consumer, targetType, emitFinish); - } else if (xfer instanceof ArrayDecodingTransformer) { + return this.emitConsume( + variableName, + xfer.consumer, + targetType, + emitFinish, + ); + } + + if (xfer instanceof ArrayDecodingTransformer) { // FIXME: Consume StartArray if (!(targetType instanceof ArrayType)) { return panic("Array decoding must produce an array type"); @@ -461,14 +601,20 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { // FIXME: handle EOF this.emitLine("reader.Read();"); - this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();"); + this.emitLine( + "var ", + variableName, + " = new List<", + this.csType(targetType.items), + ">();", + ); this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); this.emitBlock(() => { this.emitDecodeTransformer( xfer.itemTransformer, xfer.itemTargetType, - v => this.emitLine(variableName, ".Add(", v, ");"), - "arrayItem" + (v) => this.emitLine(variableName, ".Add(", v, ");"), + "arrayItem", ); // FIXME: handle EOF this.emitLine("reader.Read();"); @@ -480,13 +626,20 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { emitFinish(result); return true; - } else if (xfer instanceof DecodingChoiceTransformer) { + } + + if (xfer instanceof DecodingChoiceTransformer) { this.emitDecoderSwitch(() => { const nullTransformer = xfer.nullTransformer; if (nullTransformer !== undefined) { this.emitTokenCase("Null"); this.indent(() => { - const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null"); + const allHandled = this.emitDecodeTransformer( + nullTransformer, + targetType, + emitFinish, + "null", + ); if (!allHandled) { this.emitLine("break"); } @@ -498,7 +651,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { "integerValue", xfer.integerTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( ["Number"], @@ -506,14 +659,14 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { "doubleValue", xfer.doubleTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( ["True", "False"], "boolValue", xfer.boolTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( // ["String", "Date"], @@ -521,34 +674,39 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { "stringValue", xfer.stringTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( ["StartObject"], "objectValue", xfer.objectTransformer, targetType, - emitFinish + emitFinish, ); this.emitDecoderTransformerCase( ["StartArray"], "arrayValue", xfer.arrayTransformer, targetType, - emitFinish + emitFinish, ); }); return false; - } else { - return panic("Unknown transformer"); } + + return panic("Unknown transformer"); } private stringCaseValue(t: Type, stringCase: string): Sourcelike { if (t.kind === "string") { return ['"', utf16StringEscape(stringCase), '"']; - } else if (t instanceof EnumType) { - return [this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase)]; + } + if (t instanceof EnumType) { + return [ + this.nameForNamedType(t), + ".", + this.nameForEnumCase(t, stringCase), + ]; } return panic(`Type ${t.kind} does not have string cases`); @@ -558,7 +716,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { variable: Sourcelike, xfer: Transformer, targetType: Type, - emitFinish: (value: Sourcelike) => void + emitFinish: (value: Sourcelike) => void, ): boolean { function directTargetType(continuation: Transformer | undefined): Type { if (continuation === undefined) { @@ -570,14 +728,19 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (xfer instanceof ChoiceTransformer) { const caseXfers = xfer.transformers; - if (caseXfers.length > 1 && caseXfers.every(caseXfer => caseXfer instanceof StringMatchTransformer)) { + if ( + caseXfers.length > 1 && + caseXfers.every( + (caseXfer) => caseXfer instanceof StringMatchTransformer, + ) + ) { this.emitLine("switch (", variable, ")"); this.emitBlock(() => { for (const caseXfer of caseXfers) { const matchXfer = caseXfer as StringMatchTransformer; const value = this.stringCaseValue( followTargetType(matchXfer.sourceType), - matchXfer.stringCase + matchXfer.stringCase, ); this.emitLine("case ", value, ":"); this.indent(() => { @@ -585,7 +748,7 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { variable, matchXfer.transformer, targetType, - emitFinish + emitFinish, ); if (!allDone) { this.emitLine("break;"); @@ -595,10 +758,15 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { }); // FIXME: Can we check for exhaustiveness? For enums it should be easy. return false; - } else { - for (const caseXfer of caseXfers) { - this.emitTransformer(variable, caseXfer, targetType, emitFinish); - } + } + + for (const caseXfer of caseXfers) { + this.emitTransformer( + variable, + caseXfer, + targetType, + emitFinish, + ); } } else if (xfer instanceof UnionMemberMatchTransformer) { const memberType = xfer.memberType; @@ -617,7 +785,10 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { test = [variable, ".IsNull"]; member = "null"; } else { - const memberName = this.nameForUnionMember(xfer.sourceType, memberType); + const memberName = this.nameForUnionMember( + xfer.sourceType, + memberType, + ); member = [variable, ".", memberName]; test = [member, " != null"]; } @@ -627,16 +798,41 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } this.emitLine("if (", test, ")"); - this.emitBlock(() => this.emitTransformer(member, xfer.transformer, targetType, emitFinish)); + this.emitBlock(() => + this.emitTransformer( + member, + xfer.transformer, + targetType, + emitFinish, + ), + ); } else if (xfer instanceof StringMatchTransformer) { - const value = this.stringCaseValue(followTargetType(xfer.sourceType), xfer.stringCase); + const value = this.stringCaseValue( + followTargetType(xfer.sourceType), + xfer.stringCase, + ); this.emitLine("if (", variable, " == ", value, ")"); - this.emitBlock(() => this.emitTransformer(variable, xfer.transformer, targetType, emitFinish)); + this.emitBlock(() => + this.emitTransformer( + variable, + xfer.transformer, + targetType, + emitFinish, + ), + ); } else if (xfer instanceof EncodingTransformer) { const converter = this.converterForType(xfer.sourceType); if (converter !== undefined) { - this.emitLine("var converter = ", this.converterObject(converter), ";"); - this.emitLine("converter.WriteJson(writer, ", variable, ", serializer);"); + this.emitLine( + "var converter = ", + this.converterObject(converter), + ";", + ); + this.emitLine( + "converter.WriteJson(writer, ", + variable, + ", serializer);", + ); } else { this.emitLine(this.serializeValueCode(variable), ";"); } @@ -648,25 +844,55 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { const itemVariable = "arrayItem"; this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); this.emitBlock(() => { - this.emitTransformer(itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { - return; - }); + this.emitTransformer( + itemVariable, + xfer.itemTransformer, + xfer.itemTargetType, + () => { + return; + }, + ); }); this.emitLine("writer.WriteEndArray();"); emitFinish([]); return true; } else if (xfer instanceof ParseStringTransformer) { - const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; + const immediateTargetType = + xfer.consumer === undefined + ? targetType + : xfer.consumer.sourceType; switch (immediateTargetType.kind) { case "date-time": this.emitLine("DateTimeOffset dt;"); - this.emitLine("if (DateTimeOffset.TryParse(", variable, ", out dt))"); - this.emitBlock(() => this.emitConsume("dt", xfer.consumer, targetType, emitFinish)); + this.emitLine( + "if (DateTimeOffset.TryParse(", + variable, + ", out dt))", + ); + this.emitBlock(() => + this.emitConsume( + "dt", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; case "uuid": this.emitLine("Guid guid;"); - this.emitLine("if (Guid.TryParse(", variable, ", out guid))"); - this.emitBlock(() => this.emitConsume("guid", xfer.consumer, targetType, emitFinish)); + this.emitLine( + "if (Guid.TryParse(", + variable, + ", out guid))", + ); + this.emitBlock(() => + this.emitConsume( + "guid", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; case "uri": this.emitLine("try"); @@ -674,55 +900,112 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { // this.emitLine("var uri = new Uri(", variable, ");"); // The default value about:blank should never happen, but this way we avoid a null reference warning. this.emitLine('var uri = new Uri("about:blank");'); - this.emitLine("if (!string.IsNullOrEmpty(stringValue))"); + this.emitLine( + "if (!string.IsNullOrEmpty(stringValue))", + ); this.emitBlock(() => { this.emitLine("uri = new Uri(", variable, ");"); }); - this.emitConsume("uri", xfer.consumer, targetType, emitFinish); + this.emitConsume( + "uri", + xfer.consumer, + targetType, + emitFinish, + ); }); this.emitLine("catch (UriFormatException) {}"); break; case "integer": this.emitLine("long l;"); this.emitLine("if (Int64.TryParse(", variable, ", out l))"); - this.emitBlock(() => this.emitConsume("l", xfer.consumer, targetType, emitFinish)); + this.emitBlock(() => + this.emitConsume( + "l", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; case "bool": this.emitLine("bool b;"); - this.emitLine("if (Boolean.TryParse(", variable, ", out b))"); - this.emitBlock(() => this.emitConsume("b", xfer.consumer, targetType, emitFinish)); + this.emitLine( + "if (Boolean.TryParse(", + variable, + ", out b))", + ); + this.emitBlock(() => + this.emitConsume( + "b", + xfer.consumer, + targetType, + emitFinish, + ), + ); break; default: - return panic(`Parsing string to ${immediateTargetType.kind} not supported`); + return panic( + `Parsing string to ${immediateTargetType.kind} not supported`, + ); } } else if (xfer instanceof StringifyTransformer) { switch (xfer.sourceType.kind) { case "date-time": return this.emitConsume( - [variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)'], + [ + variable, + '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)', + ], xfer.consumer, targetType, - emitFinish + emitFinish, ); case "uuid": return this.emitConsume( - [variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)'], + [ + variable, + '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)', + ], xfer.consumer, targetType, - emitFinish + emitFinish, ); case "integer": case "uri": - return this.emitConsume([variable, ".ToString()"], xfer.consumer, targetType, emitFinish); + return this.emitConsume( + [variable, ".ToString()"], + xfer.consumer, + targetType, + emitFinish, + ); case "bool": - this.emitLine("var boolString = ", variable, ' ? "true" : "false";'); - return this.emitConsume("boolString", xfer.consumer, targetType, emitFinish); + this.emitLine( + "var boolString = ", + variable, + ' ? "true" : "false";', + ); + return this.emitConsume( + "boolString", + xfer.consumer, + targetType, + emitFinish, + ); default: - return panic(`Stringifying ${xfer.sourceType.kind} not supported`); + return panic( + `Stringifying ${xfer.sourceType.kind} not supported`, + ); } } else if (xfer instanceof StringProducerTransformer) { - const value = this.stringCaseValue(directTargetType(xfer.consumer), xfer.result); - return this.emitConsume(value, xfer.consumer, targetType, emitFinish); + const value = this.stringCaseValue( + directTargetType(xfer.consumer), + xfer.result, + ); + return this.emitConsume( + value, + xfer.consumer, + targetType, + emitFinish, + ); } else if (xfer instanceof MinMaxLengthCheckTransformer) { const min = xfer.minLength; const max = xfer.maxLength; @@ -737,7 +1020,14 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + this.emitBlock(() => + this.emitConsume( + variable, + xfer.consumer, + targetType, + emitFinish, + ), + ); return false; } else if (xfer instanceof MinMaxValueTransformer) { const min = xfer.minimum; @@ -753,11 +1043,20 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); - this.emitBlock(() => this.emitConsume(variable, xfer.consumer, targetType, emitFinish)); + this.emitBlock(() => + this.emitConsume( + variable, + xfer.consumer, + targetType, + emitFinish, + ), + ); return false; } else if (xfer instanceof UnionInstantiationTransformer) { if (!(targetType instanceof UnionType)) { - return panic("Union instantiation transformer must produce a union type"); + return panic( + "Union instantiation transformer must produce a union type", + ); } const maybeNullable = nullableFromUnion(targetType); @@ -769,7 +1068,10 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { if (xfer.sourceType.kind === "null") { initializer = " "; } else { - const memberName = this.nameForUnionMember(targetType, xfer.sourceType); + const memberName = this.nameForUnionMember( + targetType, + xfer.sourceType, + ); initializer = [" ", memberName, " = ", variable, " "]; } @@ -803,7 +1105,11 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { converterName, ["JsonConverter<", csType, ">"], () => { - let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; + const canConvertExpr: Sourcelike = [ + "t == typeof(", + csType, + ")", + ]; this.emitCanConvert(canConvertExpr); this.ensureBlankLine(); this.emitReadJson(() => { @@ -817,11 +1123,17 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { // this.emitLine("if (reader.TokenType == JsonTokenType.Null) return null;"); // } - const allHandled = this.emitDecodeTransformer(xfer, targetType, v => - this.emitLine("return ", v, ";") + const allHandled = this.emitDecodeTransformer( + xfer, + targetType, + (v) => this.emitLine("return ", v, ";"), ); if (!allHandled) { - this.emitThrow(['"Cannot unmarshal type ', csType, '"']); + this.emitThrow([ + '"Cannot unmarshal type ', + csType, + '"', + ]); } }, csType); this.ensureBlankLine(); @@ -837,32 +1149,52 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { // }); // } - const allHandled = this.emitTransformer("value", reverse.transformer, reverse.targetType, () => - this.emitLine("return;") + const allHandled = this.emitTransformer( + "value", + reverse.transformer, + reverse.targetType, + () => this.emitLine("return;"), ); if (!allHandled) { - this.emitThrow(['"Cannot marshal type ', csType, '"']); + this.emitThrow([ + '"Cannot marshal type ', + csType, + '"', + ]); } }, - csType + csType, ); this.ensureBlankLine(); - this.emitLine("public static readonly ", converterName, " Singleton = new ", converterName, "();"); - } + this.emitLine( + "public static readonly ", + converterName, + " Singleton = new ", + converterName, + "();", + ); + }, ); } protected emitRequiredHelpers(): void { if (this._needHelpers) { - this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n)); + this.forEachTopLevel("leading-and-interposing", (t, n) => + this.emitFromJsonForTopLevel(t, n), + ); this.ensureBlankLine(); this.emitSerializeClass(); } - if (this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums))) { + if ( + this._needHelpers || + (this._needAttributes && (this.haveNamedUnions || this.haveEnums)) + ) { this.ensureBlankLine(); this.emitConverterClass(); - this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t)); + this.forEachTransformation("leading-and-interposing", (n, t) => + this.emitTransformation(n, t), + ); this.emitMultiline(` public class DateOnlyConverter : JsonConverter { diff --git a/packages/quicktype-core/src/language/CSharp/constants.ts b/packages/quicktype-core/src/language/CSharp/constants.ts index bbe7f3dfb..0fafc49e8 100644 --- a/packages/quicktype-core/src/language/CSharp/constants.ts +++ b/packages/quicktype-core/src/language/CSharp/constants.ts @@ -1,79 +1,79 @@ export const keywords = [ - "abstract", - "as", - "base", - "bool", - "break", - "byte", - "case", - "catch", - "char", - "checked", - "class", - "const", - "continue", - "decimal", - "default", - "delegate", - "do", - "double", - "else", - "enum", - "event", - "explicit", - "extern", - "false", - "finally", - "fixed", - "float", - "for", - "foreach", - "goto", - "if", - "implicit", - "in", - "int", - "interface", - "internal", - "is", - "lock", - "long", - "namespace", - "new", - "null", - "object", - "operator", - "out", - "override", - "params", - "private", - "protected", - "public", - "readonly", - "ref", - "return", - "sbyte", - "sealed", - "short", - "sizeof", - "stackalloc", - "static", - "string", - "struct", - "switch", - "this", - "throw", - "true", - "try", - "typeof", - "uint", - "ulong", - "unchecked", - "unsafe", - "ushort", - "using", - "virtual", - "void", - "volatile", - "while" + "abstract", + "as", + "base", + "bool", + "break", + "byte", + "case", + "catch", + "char", + "checked", + "class", + "const", + "continue", + "decimal", + "default", + "delegate", + "do", + "double", + "else", + "enum", + "event", + "explicit", + "extern", + "false", + "finally", + "fixed", + "float", + "for", + "foreach", + "goto", + "if", + "implicit", + "in", + "int", + "interface", + "internal", + "is", + "lock", + "long", + "namespace", + "new", + "null", + "object", + "operator", + "out", + "override", + "params", + "private", + "protected", + "public", + "readonly", + "ref", + "return", + "sbyte", + "sealed", + "short", + "sizeof", + "stackalloc", + "static", + "string", + "struct", + "switch", + "this", + "throw", + "true", + "try", + "typeof", + "uint", + "ulong", + "unchecked", + "unsafe", + "ushort", + "using", + "virtual", + "void", + "volatile", + "while", ] as const; diff --git a/packages/quicktype-core/src/language/CSharp/index.ts b/packages/quicktype-core/src/language/CSharp/index.ts index c9f7c6d8c..83dd8afda 100644 --- a/packages/quicktype-core/src/language/CSharp/index.ts +++ b/packages/quicktype-core/src/language/CSharp/index.ts @@ -1,4 +1,9 @@ -export { CSharpTargetLanguage, cSharpOptions, newtonsoftCSharpOptions, systemTextJsonCSharpOptions } from "./language"; +export { + CSharpTargetLanguage, + cSharpOptions, + newtonsoftCSharpOptions, + systemTextJsonCSharpOptions, +} from "./language"; export { CSharpRenderer } from "./CSharpRenderer"; export { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; export { SystemTextJsonCSharpRenderer } from "./SystemTextJsonCSharpRenderer"; diff --git a/packages/quicktype-core/src/language/CSharp/language.ts b/packages/quicktype-core/src/language/CSharp/language.ts index 6337ab39e..79562aa27 100644 --- a/packages/quicktype-core/src/language/CSharp/language.ts +++ b/packages/quicktype-core/src/language/CSharp/language.ts @@ -1,11 +1,20 @@ -import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, + Type, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; import { SystemTextJsonCSharpRenderer } from "./SystemTextJsonCSharpRenderer"; @@ -24,40 +33,45 @@ export const cSharpOptions = { "Serialization framework", { NewtonSoft: "NewtonSoft", - SystemTextJson: "SystemTextJson" + SystemTextJson: "SystemTextJson", } as const, - "NewtonSoft" + "NewtonSoft", ), useList: new EnumOption( "array-type", "Use T[] or List", { array: false, - list: true + list: true, }, - "array" + "array", ), dense: new EnumOption( "density", "Property density", { normal: false, - dense: true + dense: true, } as const, "normal", - "secondary" + "secondary", ), // FIXME: Do this via a configurable named eventually. - namespace: new StringOption("namespace", "Generated namespace", "NAME", "QuickType"), + namespace: new StringOption( + "namespace", + "Generated namespace", + "NAME", + "QuickType", + ), version: new EnumOption( "csharp-version", "C# version", { "5": 5, - "6": 6 + "6": 6, } as const, "6", - "secondary" + "secondary", ), virtual: new BooleanOption("virtual", "Generate virtual properties", false), typeForAny: new EnumOption( @@ -65,53 +79,79 @@ export const cSharpOptions = { 'Type to use for "any"', { object: "object", - dynamic: "dynamic" + dynamic: "dynamic", } as const, "object", - "secondary" + "secondary", ), useDecimal: new EnumOption( "number-type", "Type to use for numbers", { double: false, - decimal: true + decimal: true, } as const, "double", - "secondary" + "secondary", ), features: new EnumOption( "features", "Output features", { - "complete": { namespaces: true, helpers: true, attributes: true }, - "attributes-only": { namespaces: true, helpers: false, attributes: true }, - "just-types-and-namespace": { namespaces: true, helpers: false, attributes: false }, - "just-types": { namespaces: true, helpers: false, attributes: false } + complete: { namespaces: true, helpers: true, attributes: true }, + "attributes-only": { + namespaces: true, + helpers: false, + attributes: true, + }, + "just-types-and-namespace": { + namespaces: true, + helpers: false, + attributes: false, + }, + "just-types": { + namespaces: true, + helpers: false, + attributes: false, + }, } as const, - "complete" + "complete", ), baseclass: new EnumOption( "base-class", "Base class", { EntityData: "EntityData", - Object: undefined + Object: undefined, } as const, "Object", - "secondary" + "secondary", + ), + checkRequired: new BooleanOption( + "check-required", + "Fail if required properties are missing", + false, + ), + keepPropertyName: new BooleanOption( + "keep-property-name", + "Keep original field name generate", + false, ), - checkRequired: new BooleanOption("check-required", "Fail if required properties are missing", false), - keepPropertyName: new BooleanOption("keep-property-name", "Keep original field name generate", false) } as const; export const newtonsoftCSharpOptions = Object.assign({}, cSharpOptions, {}); export const systemTextJsonCSharpOptions = Object.assign({}, cSharpOptions, {}); -export const cSharpLanguageConfig = { displayName: "C#", names: ["cs", "csharp"], extension: "cs" } as const; +export const cSharpLanguageConfig = { + displayName: "C#", + names: ["cs", "csharp"], + extension: "cs", +} as const; -export class CSharpTargetLanguage extends TargetLanguage { +export class CSharpTargetLanguage extends TargetLanguage< + typeof cSharpLanguageConfig +> { public constructor() { super(cSharpLanguageConfig); } @@ -121,7 +161,8 @@ export class CSharpTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); mapping.set("date", "date-time"); mapping.set("time", "date-time"); mapping.set("date-time", "date-time"); @@ -145,7 +186,10 @@ export class CSharpTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): ConvenienceRenderer { const options = getOptionValues(cSharpOptions, untypedOptionValues); switch (options.framework) { @@ -153,13 +197,19 @@ export class CSharpTargetLanguage extends TargetLanguage x, - x => x, - x => x, - x => x, + (x) => x, + (x) => x, + (x) => x, + (x) => x, "", - isStartCharacter + isStartCharacter, ); // @ts-expect-error needs strong type - return keywords.includes(result) ? "@" + result : result; + return keywords.includes(result) ? `@${result}` : result; } export function isValueType(t: Type): boolean { @@ -143,5 +158,7 @@ export function isValueType(t: Type): boolean { return nullableFromUnion(t) === null; } - return ["integer", "double", "bool", "enum", "date-time", "uuid"].includes(t.kind); + return ["integer", "double", "bool", "enum", "date-time", "uuid"].includes( + t.kind, + ); } diff --git a/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts b/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts index cb97ede76..80b27fe57 100644 --- a/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts +++ b/packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts @@ -1,17 +1,39 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { type Name, type Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import type { Name, Namer } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; import { type Sourcelike, maybeAnnotated } from "../../Source"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import type { TargetLanguage } from "../../TargetLanguage"; +import type { + ClassType, + EnumType, + Type, + UnionType, +} from "../../Type"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { camelNamingFunction, crystalStringEscape, snakeNamingFunction } from "./utils"; +import { + camelNamingFunction, + crystalStringEscape, + snakeNamingFunction, +} from "./utils"; export class CrystalRenderer extends ConvenienceRenderer { - public constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + ) { super(targetLanguage, renderContext); } @@ -35,15 +57,24 @@ export class CrystalRenderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -63,27 +94,42 @@ export class CrystalRenderer extends ConvenienceRenderer { private crystalType(t: Type, withIssues = false): Sourcelike { return matchType( t, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "JSON::Any?"), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Nil"), - _boolType => "Bool", - _integerType => "Int32", - _doubleType => "Float64", - _stringType => "String", - arrayType => ["Array(", this.crystalType(arrayType.items, withIssues), ")"], - classType => this.nameForNamedType(classType), - mapType => ["Hash(String, ", this.crystalType(mapType.values, withIssues), ")"], - _enumType => "String", - unionType => { + (_anyType) => + maybeAnnotated( + withIssues, + anyTypeIssueAnnotation, + "JSON::Any?", + ), + (_nullType) => + maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Nil"), + (_boolType) => "Bool", + (_integerType) => "Int32", + (_doubleType) => "Float64", + (_stringType) => "String", + (arrayType) => [ + "Array(", + this.crystalType(arrayType.items, withIssues), + ")", + ], + (classType) => this.nameForNamedType(classType), + (mapType) => [ + "Hash(String, ", + this.crystalType(mapType.values, withIssues), + ")", + ], + (_enumType) => "String", + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.nullableCrystalType(nullable, withIssues); + if (nullable !== null) + return this.nullableCrystalType(nullable, withIssues); const [hasNull] = removeNullFromUnion(unionType); const name = this.nameForNamedType(unionType); return hasNull !== null ? ([name, "?"] as Sourcelike) : name; - } + }, ); } @@ -105,9 +151,16 @@ export class CrystalRenderer extends ConvenienceRenderer { const structBody = (): void => this.forEachClassProperty(c, "none", (name, jsonName, prop) => { this.ensureBlankLine(); - this.emitDescription(this.descriptionForClassProperty(c, jsonName)); + this.emitDescription( + this.descriptionForClassProperty(c, jsonName), + ); this.emitRenameAttribute(name, jsonName); - this.emitLine("property ", name, " : ", this.crystalType(prop.type, true)); + this.emitLine( + "property ", + name, + " : ", + this.crystalType(prop.type, true), + ); }); this.emitBlock(["class ", className], structBody); @@ -140,7 +193,7 @@ export class CrystalRenderer extends ConvenienceRenderer { const [, nonNulls] = removeNullFromUnion(u); - let types: Sourcelike[][] = []; + const types: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_name, t) => { const crystalType = this.breakCycle(t, true); types.push([crystalType]); @@ -150,7 +203,9 @@ export class CrystalRenderer extends ConvenienceRenderer { "alias ", unionName, " = ", - types.map(r => r.map(sl => this.sourcelikeToString(sl))).join(" | ") + types + .map((r) => r.map((sl) => this.sourcelikeToString(sl))) + .join(" | "), ]); } @@ -173,10 +228,15 @@ export class CrystalRenderer extends ConvenienceRenderer { this.forEachTopLevel( "leading", (t, name) => this.emitTopLevelAlias(t, name), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); - this.forEachObject("leading-and-interposing", (c: ClassType, name: Name) => this.emitStructDefinition(c, name)); - this.forEachUnion("leading-and-interposing", (u, name) => this.emitUnion(u, name)); + this.forEachObject( + "leading-and-interposing", + (c: ClassType, name: Name) => this.emitStructDefinition(c, name), + ); + this.forEachUnion("leading-and-interposing", (u, name) => + this.emitUnion(u, name), + ); } } diff --git a/packages/quicktype-core/src/language/Crystal/constants.ts b/packages/quicktype-core/src/language/Crystal/constants.ts index 9f9f99c5b..06ff747c2 100644 --- a/packages/quicktype-core/src/language/Crystal/constants.ts +++ b/packages/quicktype-core/src/language/Crystal/constants.ts @@ -134,5 +134,5 @@ export const keywords = [ "when", "while", "with", - "yield" + "yield", ] as const; diff --git a/packages/quicktype-core/src/language/Crystal/language.ts b/packages/quicktype-core/src/language/Crystal/language.ts index db61e48be..85772f2ec 100644 --- a/packages/quicktype-core/src/language/Crystal/language.ts +++ b/packages/quicktype-core/src/language/Crystal/language.ts @@ -1,4 +1,4 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { TargetLanguage } from "../../TargetLanguage"; import { CrystalRenderer } from "./CrystalRenderer"; @@ -6,10 +6,12 @@ import { CrystalRenderer } from "./CrystalRenderer"; export const crystalLanguageConfig = { displayName: "Crystal", names: ["crystal", "cr", "crystallang"], - extension: "cr" + extension: "cr", } as const; -export class CrystalTargetLanguage extends TargetLanguage { +export class CrystalTargetLanguage extends TargetLanguage< + typeof crystalLanguageConfig +> { public constructor() { super(crystalLanguageConfig); } diff --git a/packages/quicktype-core/src/language/Crystal/utils.ts b/packages/quicktype-core/src/language/Crystal/utils.ts index a4d95da50..1a0c9a27b 100644 --- a/packages/quicktype-core/src/language/Crystal/utils.ts +++ b/packages/quicktype-core/src/language/Crystal/utils.ts @@ -11,7 +11,7 @@ import { isPrintable, legalizeCharacters, splitIntoWords, - utf32ConcatMap + utf32ConcatMap, } from "../../support/Strings"; function isAsciiLetterOrUnderscoreOrDigit(codePoint: number): boolean { @@ -45,14 +45,19 @@ function crystalStyle(original: string, isSnakeCase: boolean): string { wordStyle, wordStyle, isSnakeCase ? "_" : "", - isAsciiLetterOrUnderscore + isAsciiLetterOrUnderscore, ); return combined === "_" ? "_underscore" : combined; } -export const snakeNamingFunction = funPrefixNamer("default", (original: string) => crystalStyle(original, true)); -export const camelNamingFunction = funPrefixNamer("camel", (original: string) => crystalStyle(original, false)); +export const snakeNamingFunction = funPrefixNamer( + "default", + (original: string) => crystalStyle(original, true), +); +export const camelNamingFunction = funPrefixNamer("camel", (original: string) => + crystalStyle(original, false), +); function standardUnicodeCrystalEscape(codePoint: number): string { if (codePoint <= 0xffff) { @@ -62,4 +67,6 @@ function standardUnicodeCrystalEscape(codePoint: number): string { } } -export const crystalStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeCrystalEscape)); +export const crystalStringEscape = utf32ConcatMap( + escapeNonPrintableMapper(isPrintable, standardUnicodeCrystalEscape), +); diff --git a/packages/quicktype-core/src/language/Dart/DartRenderer.ts b/packages/quicktype-core/src/language/Dart/DartRenderer.ts index 9eb8be9da..e81524ba9 100644 --- a/packages/quicktype-core/src/language/Dart/DartRenderer.ts +++ b/packages/quicktype-core/src/language/Dart/DartRenderer.ts @@ -1,18 +1,39 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; import { decapitalize, snakeCase } from "../../support/Strings"; import { defined } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassProperty, type ClassType, EnumType, type Type, type UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../Type/TypeUtils"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + type ClassProperty, + type ClassType, + EnumType, + type Type, + type UnionType, +} from "../../Type"; +import { + directlyReachableSingleNamedType, + matchType, + nullableFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type dartOptions } from "./language"; -import { enumCaseNamingFunction, propertyNamingFunction, stringEscape, typeNamingFunction } from "./utils"; +import type { dartOptions } from "./language"; +import { + enumCaseNamingFunction, + propertyNamingFunction, + stringEscape, + typeNamingFunction, +} from "./utils"; interface TopLevelDependents { decoder: Name; @@ -20,7 +41,10 @@ interface TopLevelDependents { } export class DartRenderer extends ConvenienceRenderer { - private readonly _gettersAndSettersForPropertyName = new Map(); + private readonly _gettersAndSettersForPropertyName = new Map< + Name, + [Name, Name] + >(); private _needEnumValues = false; @@ -35,7 +59,7 @@ export class DartRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -44,7 +68,10 @@ export class DartRenderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -83,16 +110,19 @@ export class DartRenderer extends ConvenienceRenderer { return `from${this._options.methodNamesWithMap ? "Map" : "Json"}`; } - protected makeTopLevelDependencyNames(_t: Type, name: Name): DependencyName[] { + protected makeTopLevelDependencyNames( + _t: Type, + name: Name, + ): DependencyName[] { const encoder = new DependencyName( propertyNamingFunction, name.order, - lookup => `${lookup(name)}_${this.toJson}` + (lookup) => `${lookup(name)}_${this.toJson}`, ); const decoder = new DependencyName( propertyNamingFunction, name.order, - lookup => `${lookup(name)}_${this.fromJson}` + (lookup) => `${lookup(name)}_${this.fromJson}`, ); this._topLevelDependents.set(name, { encoder, decoder }); return [encoder, decoder]; @@ -103,10 +133,18 @@ export class DartRenderer extends ConvenienceRenderer { _className: Name, _p: ClassProperty, _jsonName: string, - name: Name + name: Name, ): [Name, Name] { - const getterName = new DependencyName(propertyNamingFunction, name.order, lookup => `get_${lookup(name)}`); - const setterName = new DependencyName(propertyNamingFunction, name.order, lookup => `set_${lookup(name)}`); + const getterName = new DependencyName( + propertyNamingFunction, + name.order, + (lookup) => `get_${lookup(name)}`, + ); + const setterName = new DependencyName( + propertyNamingFunction, + name.order, + (lookup) => `set_${lookup(name)}`, + ); return [getterName, setterName]; } @@ -115,16 +153,29 @@ export class DartRenderer extends ConvenienceRenderer { className: Name, p: ClassProperty, jsonName: string, - name: Name + name: Name, ): Name[] { - const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter(c, className, p, jsonName, name); + const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( + c, + className, + p, + jsonName, + name, + ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return getterAndSetterNames; } - protected makeNamedTypeDependencyNames(t: Type, name: Name): DependencyName[] { + protected makeNamedTypeDependencyNames( + t: Type, + name: Name, + ): DependencyName[] { if (!(t instanceof EnumType)) return []; - const enumValue = new DependencyName(propertyNamingFunction, name.order, lookup => `${lookup(name)}_values`); + const enumValue = new DependencyName( + propertyNamingFunction, + name.order, + (lookup) => `${lookup(name)}_values`, + ); this._enumValues.set(t, enumValue); return [enumValue]; } @@ -141,7 +192,13 @@ export class DartRenderer extends ConvenienceRenderer { this.emitLine("//"); this.forEachTopLevel("none", (_t, name) => { const { decoder } = defined(this._topLevelDependents.get(name)); - this.emitLine("// final ", modifySource(decapitalize, name), " = ", decoder, "(jsonString);"); + this.emitLine( + "// final ", + modifySource(decapitalize, name), + " = ", + decoder, + "(jsonString);", + ); }); } @@ -151,7 +208,9 @@ export class DartRenderer extends ConvenienceRenderer { } if (this._options.useFreezed) { - this.emitLine("import 'package:freezed_annotation/freezed_annotation.dart';"); + this.emitLine( + "import 'package:freezed_annotation/freezed_annotation.dart';", + ); } if (this._options.useHive) { @@ -160,17 +219,25 @@ export class DartRenderer extends ConvenienceRenderer { if (this._options.useJsonAnnotation && !this._options.useFreezed) { // The freezed annotatation import already provides the import for json_annotation - this.emitLine("import 'package:json_annotation/json_annotation.dart';"); + this.emitLine( + "import 'package:json_annotation/json_annotation.dart';", + ); } this.emitLine("import 'dart:convert';"); - if (this._options.useFreezed || this._options.useHive || this._options.useJsonAnnotation) { + if ( + this._options.useFreezed || + this._options.useHive || + this._options.useJsonAnnotation + ) { this.ensureBlankLine(); const optionNameIsEmpty = this._options.partName.length === 0; // FIXME: This should use a `Name`, not `modifySource` const name = modifySource( snakeCase, - optionNameIsEmpty ? [...this.topLevels.keys()][0] : this._options.partName + optionNameIsEmpty + ? [...this.topLevels.keys()][0] + : this._options.partName, ); if (this._options.useFreezed) { this.emitLine("part '", name, ".freezed.dart';"); @@ -192,23 +259,43 @@ export class DartRenderer extends ConvenienceRenderer { this.emitLine("}"); } - protected dartType(t: Type, withIssues = false, forceNullable = false): Sourcelike { + protected dartType( + t: Type, + withIssues = false, + forceNullable = false, + ): Sourcelike { const nullable = - forceNullable || (this._options.nullSafety && t.isNullable && !this._options.requiredProperties); - const withNullable = (s: Sourcelike): Sourcelike => (nullable ? [s, "?"] : s); + forceNullable || + (this._options.nullSafety && + t.isNullable && + !this._options.requiredProperties); + const withNullable = (s: Sourcelike): Sourcelike => + nullable ? [s, "?"] : s; return matchType( t, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "dynamic"), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "dynamic"), - _boolType => withNullable("bool"), - _integerType => withNullable("int"), - _doubleType => withNullable("double"), - _stringType => withNullable("String"), - arrayType => withNullable(["List<", this.dartType(arrayType.items, withIssues), ">"]), - classType => withNullable(this.nameForNamedType(classType)), - mapType => withNullable(["Map"]), - enumType => withNullable(this.nameForNamedType(enumType)), - unionType => { + (_anyType) => + maybeAnnotated(withIssues, anyTypeIssueAnnotation, "dynamic"), + (_nullType) => + maybeAnnotated(withIssues, nullTypeIssueAnnotation, "dynamic"), + (_boolType) => withNullable("bool"), + (_integerType) => withNullable("int"), + (_doubleType) => withNullable("double"), + (_stringType) => withNullable("String"), + (arrayType) => + withNullable([ + "List<", + this.dartType(arrayType.items, withIssues), + ">", + ]), + (classType) => withNullable(this.nameForNamedType(classType)), + (mapType) => + withNullable([ + "Map", + ]), + (enumType) => withNullable(this.nameForNamedType(enumType)), + (unionType) => { const maybeNullable = nullableFromUnion(unionType); if (maybeNullable === null) { return "dynamic"; @@ -216,7 +303,7 @@ export class DartRenderer extends ConvenienceRenderer { return withNullable(this.dartType(maybeNullable, withIssues)); }, - transformedStringType => { + (transformedStringType) => { switch (transformedStringType.kind) { case "date-time": case "date": @@ -224,28 +311,88 @@ export class DartRenderer extends ConvenienceRenderer { default: return withNullable("String"); } - } + }, ); } - protected mapList(isNullable: boolean, itemType: Sourcelike, list: Sourcelike, mapper: Sourcelike): Sourcelike { - if (this._options.nullSafety && isNullable && !this._options.requiredProperties) { - return [list, " == null ? [] : ", "List<", itemType, ">.from(", list, "!.map((x) => ", mapper, "))"]; + protected mapList( + isNullable: boolean, + itemType: Sourcelike, + list: Sourcelike, + mapper: Sourcelike, + ): Sourcelike { + if ( + this._options.nullSafety && + isNullable && + !this._options.requiredProperties + ) { + return [ + list, + " == null ? [] : ", + "List<", + itemType, + ">.from(", + list, + "!.map((x) => ", + mapper, + "))", + ]; } - return ["List<", itemType, ">.from(", list, ".map((x) => ", mapper, "))"]; - } - - protected mapMap(isNullable: boolean, valueType: Sourcelike, map: Sourcelike, valueMapper: Sourcelike): Sourcelike { - if (this._options.nullSafety && isNullable && !this._options.requiredProperties) { - return ["Map.from(", map, "!).map((k, v) => MapEntry(k, ", valueMapper, "))"]; + return [ + "List<", + itemType, + ">.from(", + list, + ".map((x) => ", + mapper, + "))", + ]; + } + + protected mapMap( + isNullable: boolean, + valueType: Sourcelike, + map: Sourcelike, + valueMapper: Sourcelike, + ): Sourcelike { + if ( + this._options.nullSafety && + isNullable && + !this._options.requiredProperties + ) { + return [ + "Map.from(", + map, + "!).map((k, v) => MapEntry(k, ", + valueMapper, + "))", + ]; } - return ["Map.from(", map, ").map((k, v) => MapEntry(k, ", valueMapper, "))"]; - } - - protected mapClass(isNullable: boolean, classType: ClassType, dynamic: Sourcelike): Sourcelike { - if (this._options.nullSafety && isNullable && !this._options.requiredProperties) { + return [ + "Map.from(", + map, + ").map((k, v) => MapEntry(k, ", + valueMapper, + "))", + ]; + } + + protected mapClass( + isNullable: boolean, + classType: ClassType, + dynamic: Sourcelike, + ): Sourcelike { + if ( + this._options.nullSafety && + isNullable && + !this._options.requiredProperties + ) { return [ dynamic, " == null ? null : ", @@ -254,11 +401,18 @@ export class DartRenderer extends ConvenienceRenderer { this.fromJson, "(", dynamic, - ")" + ")", ]; } - return [this.nameForNamedType(classType), ".", this.fromJson, "(", dynamic, ")"]; + return [ + this.nameForNamedType(classType), + ".", + this.fromJson, + "(", + dynamic, + ")", + ]; } // FIXME: refactor this @@ -266,47 +420,71 @@ export class DartRenderer extends ConvenienceRenderer { // the isNullable property will become false, which is obviously wrong, // so add isNullable property // eslint-disable-next-line @typescript-eslint/default-param-last - protected fromDynamicExpression(isNullable: boolean = false, t: Type, ...dynamic: Sourcelike[]): Sourcelike { + protected fromDynamicExpression( + isNullable = false, + t: Type, + ...dynamic: Sourcelike[] + ): Sourcelike { return matchType( t, - _anyType => dynamic, - _nullType => dynamic, // FIXME: check null - _boolType => dynamic, - _integerType => dynamic, - _doubleType => [dynamic, this._options.nullSafety ? "?.toDouble()" : ".toDouble()"], - _stringType => dynamic, - arrayType => + (_anyType) => dynamic, + (_nullType) => dynamic, // FIXME: check null + (_boolType) => dynamic, + (_integerType) => dynamic, + (_doubleType) => [ + dynamic, + this._options.nullSafety ? "?.toDouble()" : ".toDouble()", + ], + (_stringType) => dynamic, + (arrayType) => this.mapList( isNullable || arrayType.isNullable, this.dartType(arrayType.items), dynamic, - this.fromDynamicExpression(arrayType.items.isNullable, arrayType.items, "x") + this.fromDynamicExpression( + arrayType.items.isNullable, + arrayType.items, + "x", + ), ), - classType => this.mapClass(isNullable || classType.isNullable, classType, dynamic), - mapType => + (classType) => + this.mapClass( + isNullable || classType.isNullable, + classType, + dynamic, + ), + (mapType) => this.mapMap( mapType.isNullable || isNullable, this.dartType(mapType.values), dynamic, - this.fromDynamicExpression(mapType.values.isNullable, mapType.values, "v") + this.fromDynamicExpression( + mapType.values.isNullable, + mapType.values, + "v", + ), ), - enumType => { + (enumType) => { return [ defined(this._enumValues.get(enumType)), ".map[", dynamic, - this._options.nullSafety ? "]!" : "]" + this._options.nullSafety ? "]!" : "]", ]; }, - unionType => { + (unionType) => { const maybeNullable = nullableFromUnion(unionType); if (maybeNullable === null) { return dynamic; } - return this.fromDynamicExpression(unionType.isNullable, maybeNullable, dynamic); + return this.fromDynamicExpression( + unionType.isNullable, + maybeNullable, + dynamic, + ); }, - transformedStringType => { + (transformedStringType) => { switch (transformedStringType.kind) { case "date-time": case "date": @@ -315,14 +493,20 @@ export class DartRenderer extends ConvenienceRenderer { !this._options.requiredProperties && this._options.nullSafety ) { - return [dynamic, " == null ? null : ", "DateTime.parse(", dynamic, ")"]; + return [ + dynamic, + " == null ? null : ", + "DateTime.parse(", + dynamic, + ")", + ]; } return ["DateTime.parse(", dynamic, ")"]; default: return dynamic; } - } + }, ); } @@ -331,23 +515,31 @@ export class DartRenderer extends ConvenienceRenderer { // the isNullable property will become false, which is obviously wrong, // so add isNullable property // eslint-disable-next-line @typescript-eslint/default-param-last - protected toDynamicExpression(isNullable: boolean = false, t: Type, ...dynamic: Sourcelike[]): Sourcelike { + protected toDynamicExpression( + isNullable = false, + t: Type, + ...dynamic: Sourcelike[] + ): Sourcelike { return matchType( t, - _anyType => dynamic, - _nullType => dynamic, - _boolType => dynamic, - _integerType => dynamic, - _doubleType => dynamic, - _stringType => dynamic, - arrayType => + (_anyType) => dynamic, + (_nullType) => dynamic, + (_boolType) => dynamic, + (_integerType) => dynamic, + (_doubleType) => dynamic, + (_stringType) => dynamic, + (arrayType) => this.mapList( arrayType.isNullable || isNullable, "dynamic", dynamic, - this.toDynamicExpression(arrayType.items.isNullable, arrayType.items, "x") + this.toDynamicExpression( + arrayType.items.isNullable, + arrayType.items, + "x", + ), ), - _classType => { + (_classType) => { if ( this._options.nullSafety && (_classType.isNullable || isNullable) && @@ -358,25 +550,38 @@ export class DartRenderer extends ConvenienceRenderer { return [dynamic, ".", this.toJson, "()"]; }, - mapType => + (mapType) => this.mapMap( mapType.isNullable || isNullable, "dynamic", dynamic, - this.toDynamicExpression(mapType.values.isNullable, mapType.values, "v") + this.toDynamicExpression( + mapType.values.isNullable, + mapType.values, + "v", + ), ), - enumType => { - return [defined(this._enumValues.get(enumType)), ".reverse[", dynamic, "]"]; + (enumType) => { + return [ + defined(this._enumValues.get(enumType)), + ".reverse[", + dynamic, + "]", + ]; }, - unionType => { + (unionType) => { const maybeNullable = nullableFromUnion(unionType); if (maybeNullable === null) { return dynamic; } - return this.toDynamicExpression(unionType.isNullable, maybeNullable, dynamic); + return this.toDynamicExpression( + unionType.isNullable, + maybeNullable, + dynamic, + ); }, - transformedStringType => { + (transformedStringType) => { switch (transformedStringType.kind) { case "date-time": if ( @@ -402,7 +607,7 @@ export class DartRenderer extends ConvenienceRenderer { dynamic, "!.month.toString().padLeft(2, '0')}-${", dynamic, - "!.day.toString().padLeft(2, '0')}\"" + "!.day.toString().padLeft(2, '0')}\"", ]; } @@ -414,12 +619,12 @@ export class DartRenderer extends ConvenienceRenderer { dynamic, ".month.toString().padLeft(2, '0')}-${", dynamic, - ".day.toString().padLeft(2, '0')}\"" + ".day.toString().padLeft(2, '0')}\"", ]; default: return dynamic; } - } + }, ); } @@ -433,7 +638,8 @@ export class DartRenderer extends ConvenienceRenderer { this.forEachClassProperty(c, "none", (name, _, prop) => { const required = this._options.requiredProperties || - (this._options.nullSafety && (!prop.type.isNullable || !prop.isOptional)); + (this._options.nullSafety && + (!prop.type.isNullable || !prop.isOptional)); this.emitLine(required ? "required " : "", "this.", name, ","); }); }); @@ -458,7 +664,13 @@ export class DartRenderer extends ConvenienceRenderer { this.emitLine(`@JsonKey(name: "${jsonName}")`); } - this.emitLine(this._options.finalProperties ? "final " : "", this.dartType(p.type, true), " ", name, ";"); + this.emitLine( + this._options.finalProperties ? "final " : "", + this.dartType(p.type, true), + " ", + name, + ";", + ); }); } @@ -467,7 +679,12 @@ export class DartRenderer extends ConvenienceRenderer { this.emitLine(className, " copyWith({"); this.indent(() => { this.forEachClassProperty(c, "none", (name, _, _p) => { - this.emitLine(this.dartType(_p.type, true, true), " ", name, ","); + this.emitLine( + this.dartType(_p.type, true, true), + " ", + name, + ",", + ); }); }); this.emitLine("}) => "); @@ -493,22 +710,32 @@ export class DartRenderer extends ConvenienceRenderer { className, ".", this.fromJson, - "(json.decode(str));" + "(json.decode(str));", ); this.ensureBlankLine(); this.emitLine( "String ", - this._options.methodNamesWithMap ? "toJson() => " : "toRawJson() => ", + this._options.methodNamesWithMap + ? "toJson() => " + : "toRawJson() => ", "json.encode(", this.toJson, - "());" + "());", ); } private _emitMapEncoderDecoder(c: ClassType, className: Name): void { this.ensureBlankLine(); - this.emitLine("factory ", className, ".", this.fromJson, "(Map json) => ", className, "("); + this.emitLine( + "factory ", + className, + ".", + this.fromJson, + "(Map json) => ", + className, + "(", + ); this.indent(() => { this.forEachClassProperty(c, "none", (name, jsonName, property) => { this.emitLine( @@ -519,9 +746,9 @@ export class DartRenderer extends ConvenienceRenderer { property.type, 'json["', stringEscape(jsonName), - '"]' + '"]', ), - "," + ",", ); }); }); @@ -536,8 +763,12 @@ export class DartRenderer extends ConvenienceRenderer { '"', stringEscape(jsonName), '": ', - this.toDynamicExpression(property.type.isNullable, property.type, name), - "," + this.toDynamicExpression( + property.type.isNullable, + property.type, + name, + ), + ",", ); }); }); @@ -578,7 +809,7 @@ export class DartRenderer extends ConvenienceRenderer { ".fromJson(Map json) => ", "_$", className, - "FromJson(json);" + "FromJson(json);", ); this.ensureBlankLine(); @@ -587,7 +818,7 @@ export class DartRenderer extends ConvenienceRenderer { "Map toJson() => ", "_$", className, - "ToJson(this);" + "ToJson(this);", ); } else { if (this._options.justTypes) return; @@ -607,26 +838,45 @@ export class DartRenderer extends ConvenienceRenderer { this.emitLine("@freezed"); this.emitBlock(["class ", className, " with _$", className], () => { if (c.getProperties().size === 0) { - this.emitLine("const factory ", className, "() = _", className, ";"); + this.emitLine( + "const factory ", + className, + "() = _", + className, + ";", + ); } else { this.emitLine("const factory ", className, "({"); this.indent(() => { - this.forEachClassProperty(c, "none", (name, jsonName, prop) => { - const description = this.descriptionForClassProperty(c, jsonName); - if (description !== undefined) { - this.emitDescription(description); - } - - const required = - this._options.requiredProperties || - (this._options.nullSafety && (!prop.type.isNullable || !prop.isOptional)); - if (this._options.useJsonAnnotation) { - this.classPropertyCounter++; - this.emitLine(`@JsonKey(name: "${jsonName}")`); - } - - this.emitLine(required ? "required " : "", this.dartType(prop.type, true), " ", name, ","); - }); + this.forEachClassProperty( + c, + "none", + (name, jsonName, prop) => { + const description = + this.descriptionForClassProperty(c, jsonName); + if (description !== undefined) { + this.emitDescription(description); + } + + const required = + this._options.requiredProperties || + (this._options.nullSafety && + (!prop.type.isNullable || + !prop.isOptional)); + if (this._options.useJsonAnnotation) { + this.classPropertyCounter++; + this.emitLine(`@JsonKey(name: "${jsonName}")`); + } + + this.emitLine( + required ? "required " : "", + this.dartType(prop.type, true), + " ", + name, + ",", + ); + }, + ); }); this.emitLine("}) = _", className, ";"); } @@ -641,7 +891,7 @@ export class DartRenderer extends ConvenienceRenderer { ".fromJson(Map json) => ", "_$", className, - "FromJson(json);" + "FromJson(json);", ); }); } @@ -664,11 +914,23 @@ export class DartRenderer extends ConvenienceRenderer { if (this._options.justTypes) return; this.ensureBlankLine(); - this.emitLine("final ", defined(this._enumValues.get(e)), " = EnumValues({"); + this.emitLine( + "final ", + defined(this._enumValues.get(e)), + " = EnumValues({", + ); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName, pos) => { const comma = pos === "first" || pos === "middle" ? "," : []; - this.emitLine('"', stringEscape(jsonName), '": ', enumName, ".", name, comma); + this.emitLine( + '"', + stringEscape(jsonName), + '": ', + enumName, + ".", + name, + comma, + ); }); }); this.emitLine("});"); @@ -693,7 +955,9 @@ export class DartRenderer extends ConvenienceRenderer { private _emitTopLvlEncoderDecoder(): void { this.forEachTopLevel("leading-and-interposing", (t, name) => { - const { encoder, decoder } = defined(this._topLevelDependents.get(name)); + const { encoder, decoder } = defined( + this._topLevelDependents.get(name), + ); this.emitLine( this.dartType(t), @@ -701,7 +965,7 @@ export class DartRenderer extends ConvenienceRenderer { decoder, "(String str) => ", this.fromDynamicExpression(t.isNullable, t, "json.decode(str)"), - ";" + ";", ); this.ensureBlankLine(); @@ -713,7 +977,7 @@ export class DartRenderer extends ConvenienceRenderer { this.dartType(t), " data) => json.encode(", this.toDynamicExpression(t.isNullable, t, "data"), - ");" + ");", ); // this.emitBlock(["String ", encoder, "(", this.dartType(t), " data)"], () => { @@ -732,11 +996,13 @@ export class DartRenderer extends ConvenienceRenderer { this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => - this._options.useFreezed ? this.emitFreezedClassDefinition(c, n) : this.emitClassDefinition(c, n), + this._options.useFreezed + ? this.emitFreezedClassDefinition(c, n) + : this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), (_e, _n) => { // We don't support this yet. - } + }, ); if (this._needEnumValues) { diff --git a/packages/quicktype-core/src/language/Dart/constants.ts b/packages/quicktype-core/src/language/Dart/constants.ts index 1251a6d8e..6aef1d3cb 100644 --- a/packages/quicktype-core/src/language/Dart/constants.ts +++ b/packages/quicktype-core/src/language/Dart/constants.ts @@ -67,5 +67,5 @@ export const keywords = [ "fromJson", "toJson", "fromMap", - "toMap" + "toMap", ] as const; diff --git a/packages/quicktype-core/src/language/Dart/language.ts b/packages/quicktype-core/src/language/Dart/language.ts index 5687c893c..cc80a8b6d 100644 --- a/packages/quicktype-core/src/language/Dart/language.ts +++ b/packages/quicktype-core/src/language/Dart/language.ts @@ -1,39 +1,84 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { DartRenderer } from "./DartRenderer"; export const dartOptions = { nullSafety: new BooleanOption("null-safety", "Null Safety", true), justTypes: new BooleanOption("just-types", "Types only", false), - codersInClass: new BooleanOption("coders-in-class", "Put encoder & decoder in Class", false), - methodNamesWithMap: new BooleanOption("from-map", "Use method names fromMap() & toMap()", false, "secondary"), - requiredProperties: new BooleanOption("required-props", "Make all properties required", false), - finalProperties: new BooleanOption("final-props", "Make all properties final", false), - generateCopyWith: new BooleanOption("copy-with", "Generate CopyWith method", false), + codersInClass: new BooleanOption( + "coders-in-class", + "Put encoder & decoder in Class", + false, + ), + methodNamesWithMap: new BooleanOption( + "from-map", + "Use method names fromMap() & toMap()", + false, + "secondary", + ), + requiredProperties: new BooleanOption( + "required-props", + "Make all properties required", + false, + ), + finalProperties: new BooleanOption( + "final-props", + "Make all properties final", + false, + ), + generateCopyWith: new BooleanOption( + "copy-with", + "Generate CopyWith method", + false, + ), useFreezed: new BooleanOption( "use-freezed", "Generate class definitions with @freezed compatibility", false, - "secondary" + "secondary", + ), + useHive: new BooleanOption( + "use-hive", + "Generate annotations for Hive type adapters", + false, + "secondary", ), - useHive: new BooleanOption("use-hive", "Generate annotations for Hive type adapters", false, "secondary"), useJsonAnnotation: new BooleanOption( "use-json-annotation", "Generate annotations for json_serializable", false, - "secondary" + "secondary", + ), + partName: new StringOption( + "part-name", + "Use this name in `part` directive", + "NAME", + "", + "secondary", ), - partName: new StringOption("part-name", "Use this name in `part` directive", "NAME", "", "secondary") }; -export const dartLanguageConfig = { displayName: "Dart", names: ["dart"], extension: "dart" } as const; +export const dartLanguageConfig = { + displayName: "Dart", + names: ["dart"], + extension: "dart", +} as const; -export class DartTargetLanguage extends TargetLanguage { +export class DartTargetLanguage extends TargetLanguage< + typeof dartLanguageConfig +> { public constructor() { super(dartLanguageConfig); } @@ -47,13 +92,17 @@ export class DartTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); mapping.set("date", "date"); mapping.set("date-time", "date-time"); return mapping; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): DartRenderer { + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): DartRenderer { const options = getOptionValues(dartOptions, untypedOptionValues); return new DartRenderer(this, renderContext, options); } diff --git a/packages/quicktype-core/src/language/Dart/utils.ts b/packages/quicktype-core/src/language/Dart/utils.ts index 2fb4a783d..0a2825b4a 100644 --- a/packages/quicktype-core/src/language/Dart/utils.ts +++ b/packages/quicktype-core/src/language/Dart/utils.ts @@ -12,16 +12,25 @@ import { splitIntoWords, standardUnicodeHexEscape, utf16ConcatMap, - utf16LegalizeCharacters + utf16LegalizeCharacters, } from "../../support/Strings"; -export const typeNamingFunction = funPrefixNamer("types", n => dartNameStyle(true, false, n)); -export const propertyNamingFunction = funPrefixNamer("properties", n => dartNameStyle(false, false, n)); -export const enumCaseNamingFunction = funPrefixNamer("enum-cases", n => dartNameStyle(true, true, n)); +export const typeNamingFunction = funPrefixNamer("types", (n) => + dartNameStyle(true, false, n), +); +export const propertyNamingFunction = funPrefixNamer("properties", (n) => + dartNameStyle(false, false, n), +); +export const enumCaseNamingFunction = funPrefixNamer("enum-cases", (n) => + dartNameStyle(true, true, n), +); // Escape the dollar sign, which is used in string interpolation export const stringEscape = utf16ConcatMap( - escapeNonPrintableMapper(cp => isPrintable(cp) && cp !== 0x24, standardUnicodeHexEscape) + escapeNonPrintableMapper( + (cp) => isPrintable(cp) && cp !== 0x24, + standardUnicodeHexEscape, + ), ); function isStartCharacter(codePoint: number): boolean { @@ -30,7 +39,10 @@ function isStartCharacter(codePoint: number): boolean { } function isPartCharacter(codePoint: number): boolean { - return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); + return ( + isStartCharacter(codePoint) || + (isAscii(codePoint) && isDigit(codePoint)) + ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); @@ -39,14 +51,20 @@ const legalizeName = utf16LegalizeCharacters(isPartCharacter); // we have to use namers to produce the getter and setter names - we can't // just capitalize and concatenate. // https://stackoverflow.com/questions/8277355/naming-convention-for-upper-case-abbreviations -export function dartNameStyle(startWithUpper: boolean, upperUnderscore: boolean, original: string): string { +export function dartNameStyle( + startWithUpper: boolean, + upperUnderscore: boolean, + original: string, +): string { const words = splitIntoWords(original); const firstWordStyle = upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle; - const restWordStyle = upperUnderscore ? allUpperWordStyle : firstUpperWordStyle; + const restWordStyle = upperUnderscore + ? allUpperWordStyle + : firstUpperWordStyle; return combineWords( words, legalizeName, @@ -55,6 +73,6 @@ export function dartNameStyle(startWithUpper: boolean, upperUnderscore: boolean, firstWordStyle, restWordStyle, upperUnderscore ? "_" : "", - isStartCharacter + isStartCharacter, ); } diff --git a/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts index 6edb55930..c35ea00b3 100644 --- a/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts +++ b/packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts @@ -1,28 +1,39 @@ -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type Sourcelike } from "../../Source"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, ClassType, EnumType, MapType, PrimitiveType, type Type, UnionType } from "../../Type"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import type { Sourcelike } from "../../Source"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + ClassType, + EnumType, + MapType, + PrimitiveType, + type Type, + UnionType, +} from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenModuleNames, reservedWords } from "./constants"; -import { type elixirOptions } from "./language"; +import type { elixirOptions } from "./language"; import { capitalizeFirstLetter, escapeDoubleQuotes, escapeNewLines, memberNameStyle, simpleNameStyle, - stringEscape + stringEscape, } from "./utils"; export class ElixirRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -40,15 +51,24 @@ export class ElixirRenderer extends ConvenienceRenderer { } protected forbiddenNamesForGlobalNamespace(): string[] { - return [...forbiddenModuleNames, ...reservedWords.map(word => capitalizeFirstLetter(word))]; + return [ + ...forbiddenModuleNames, + ...reservedWords.map((word) => capitalizeFirstLetter(word)), + ]; } - protected forbiddenForObjectProperties(_c: ClassType, _classNamed: Name): ForbiddenWordsInfo { - return { names: reservedWords as unknown as string[], includeGlobalForbidden: true }; + protected forbiddenForObjectProperties( + _c: ClassType, + _classNamed: Name, + ): ForbiddenWordsInfo { + return { + names: reservedWords as unknown as string[], + includeGlobalForbidden: true, + }; } protected makeNamedTypeNamer(): Namer { - return new Namer("types", n => simpleNameStyle(n, true), []); + return new Namer("types", (n) => simpleNameStyle(n, true), []); } protected namerForObjectProperty(): Namer { @@ -60,57 +80,100 @@ export class ElixirRenderer extends ConvenienceRenderer { } protected makeEnumCaseNamer(): Namer { - return new Namer("enum-cases", n => simpleNameStyle(n, true), []); + return new Namer("enum-cases", (n) => simpleNameStyle(n, true), []); } private nameForNamedTypeWithNamespace(t: Type): Sourcelike { if (this._options.namespace) { return [this._options.namespace, ".", this.nameForNamedType(t)]; - } else { - return [this.nameForNamedType(t)]; } + + return [this.nameForNamedType(t)]; } private nameWithNamespace(n: Name): Sourcelike { if (this._options.namespace) { return [this._options.namespace, ".", n]; - } else { - return [n]; } + + return [n]; } private elixirType(t: Type, isOptional = false): Sourcelike { const optional = isOptional ? " | nil" : ""; return matchType( t, - _anyType => ["any()", optional], - _nullType => ["nil"], - _boolType => ["boolean()", optional], - _integerType => ["integer()", optional], - _doubleType => ["float()", optional], - _stringType => ["String.t()", optional], - arrayType => ["[", this.elixirType(arrayType.items), "]", optional], - classType => [this.nameForNamedTypeWithNamespace(classType), ".t()", optional], - mapType => ["%{String.t() => ", this.elixirType(mapType.values), "}", optional], - enumType => [this.nameForNamedTypeWithNamespace(enumType), ".t()", optional], - unionType => { - const children = [...unionType.getChildren()].map(ut => this.elixirType(ut)); + (_anyType) => ["any()", optional], + (_nullType) => ["nil"], + (_boolType) => ["boolean()", optional], + (_integerType) => ["integer()", optional], + (_doubleType) => ["float()", optional], + (_stringType) => ["String.t()", optional], + (arrayType) => [ + "[", + this.elixirType(arrayType.items), + "]", + optional, + ], + (classType) => [ + this.nameForNamedTypeWithNamespace(classType), + ".t()", + optional, + ], + (mapType) => [ + "%{String.t() => ", + this.elixirType(mapType.values), + "}", + optional, + ], + (enumType) => [ + this.nameForNamedTypeWithNamespace(enumType), + ".t()", + optional, + ], + (unionType) => { + const children = [...unionType.getChildren()].map((ut) => + this.elixirType(ut), + ); return [ - children.flatMap((element, index) => (index === children.length - 1 ? element : [element, " | "])), - optional + children.flatMap((element, index) => + index === children.length - 1 + ? element + : [element, " | "], + ), + optional, ]; - } + }, ); } - private patternMatchClauseDecode(t: Type, attributeName: Sourcelike, suffix = ""): Sourcelike { + private patternMatchClauseDecode( + t: Type, + attributeName: Sourcelike, + suffix = "", + ): Sourcelike { return matchType( t, - _anyType => [], - _nullType => ["def decode_", attributeName, suffix, "(value) when is_nil(value), do: value"], - _boolType => ["def decode_", attributeName, suffix, "(value) when is_boolean(value), do: value"], - _integerType => ["def decode_", attributeName, suffix, "(value) when is_integer(value), do: value"], - _doubleType => [ + (_anyType) => [], + (_nullType) => [ + "def decode_", + attributeName, + suffix, + "(value) when is_nil(value), do: value", + ], + (_boolType) => [ + "def decode_", + attributeName, + suffix, + "(value) when is_boolean(value), do: value", + ], + (_integerType) => [ + "def decode_", + attributeName, + suffix, + "(value) when is_integer(value), do: value", + ], + (_doubleType) => [ "def decode_", attributeName, suffix, @@ -118,17 +181,35 @@ export class ElixirRenderer extends ConvenienceRenderer { "def decode_", attributeName, suffix, - "(value) when is_integer(value), do: value" + "(value) when is_integer(value), do: value", + ], + (_stringType) => [ + "def decode_", + attributeName, + suffix, + "(value) when is_binary(value), do: value", ], - _stringType => ["def decode_", attributeName, suffix, "(value) when is_binary(value), do: value"], - _arrayType => ["def decode_", attributeName, suffix, "(value) when is_list(value), do: value"], - classType => { + (_arrayType) => [ + "def decode_", + attributeName, + suffix, + "(value) when is_list(value), do: value", + ], + (classType) => { const requiredAttributeArgs: Sourcelike[] = []; - this.forEachClassProperty(classType, "none", (_name, jsonName, p) => { - if (!p.isOptional) { - requiredAttributeArgs.push(['"', jsonName, '" => _,']); - } - }); + this.forEachClassProperty( + classType, + "none", + (_name, jsonName, p) => { + if (!p.isOptional) { + requiredAttributeArgs.push([ + '"', + jsonName, + '" => _,', + ]); + } + }, + ); return [ "def decode_", attributeName, @@ -137,31 +218,55 @@ export class ElixirRenderer extends ConvenienceRenderer { requiredAttributeArgs, "} = value), do: ", this.nameForNamedTypeWithNamespace(classType), - ".from_map(value)" + ".from_map(value)", ]; }, - _mapType => ["def decode_", attributeName, suffix, "(value) when is_map(value), do: value"], - enumType => [ + (_mapType) => [ + "def decode_", + attributeName, + suffix, + "(value) when is_map(value), do: value", + ], + (enumType) => [ "def decode_", attributeName, suffix, "(value) when is_binary(value)", ", do: ", this.nameForNamedTypeWithNamespace(enumType), - ".decode(value)" + ".decode(value)", ], - _unionType => [] + (_unionType) => [], ); } - private patternMatchClauseEncode(t: Type, attributeName: Sourcelike, suffix = ""): Sourcelike { + private patternMatchClauseEncode( + t: Type, + attributeName: Sourcelike, + suffix = "", + ): Sourcelike { return matchType( t, - _anyType => [], - _nullType => ["def encode_", attributeName, suffix, "(value) when is_nil(value), do: value"], - _boolType => ["def encode_", attributeName, suffix, "(value) when is_boolean(value), do: value"], - _integerType => ["def encode_", attributeName, suffix, "(value) when is_integer(value), do: value"], - _doubleType => [ + (_anyType) => [], + (_nullType) => [ + "def encode_", + attributeName, + suffix, + "(value) when is_nil(value), do: value", + ], + (_boolType) => [ + "def encode_", + attributeName, + suffix, + "(value) when is_boolean(value), do: value", + ], + (_integerType) => [ + "def encode_", + attributeName, + suffix, + "(value) when is_integer(value), do: value", + ], + (_doubleType) => [ "def encode_", attributeName, suffix, @@ -169,17 +274,35 @@ export class ElixirRenderer extends ConvenienceRenderer { "def encode_", attributeName, suffix, - "(value) when is_integer(value), do: value" + "(value) when is_integer(value), do: value", + ], + (_stringType) => [ + "def encode_", + attributeName, + suffix, + "(value) when is_binary(value), do: value", ], - _stringType => ["def encode_", attributeName, suffix, "(value) when is_binary(value), do: value"], - _arrayType => ["def encode_", attributeName, suffix, "(value) when is_list(value), do: value"], - classType => { + (_arrayType) => [ + "def encode_", + attributeName, + suffix, + "(value) when is_list(value), do: value", + ], + (classType) => { const requiredAttributeArgs: Sourcelike[] = []; - this.forEachClassProperty(classType, "none", (_name, jsonName, p) => { - if (!p.isOptional) { - requiredAttributeArgs.push(['"', jsonName, '" => _,']); - } - }); + this.forEachClassProperty( + classType, + "none", + (_name, jsonName, p) => { + if (!p.isOptional) { + requiredAttributeArgs.push([ + '"', + jsonName, + '" => _,', + ]); + } + }, + ); return [ "def encode_", attributeName, @@ -188,46 +311,58 @@ export class ElixirRenderer extends ConvenienceRenderer { this.nameForNamedTypeWithNamespace(classType), "{} = value), do: ", this.nameForNamedTypeWithNamespace(classType), - ".to_map(value)" + ".to_map(value)", ]; }, - _mapType => ["def encode_", attributeName, suffix, "(value) when is_map(value), do: value"], - enumType => [ + (_mapType) => [ + "def encode_", + attributeName, + suffix, + "(value) when is_map(value), do: value", + ], + (enumType) => [ "def encode_", attributeName, suffix, "(value) when is_atom(value)", ", do: ", this.nameForNamedTypeWithNamespace(enumType), - ".encode(value)" + ".encode(value)", ], - _unionType => [] + (_unionType) => [], ); } private sortAndFilterPatternMatchTypes(types: Type[]): Type[] { return types - .filter(type => !(type instanceof UnionType)) + .filter((type) => !(type instanceof UnionType)) .sort((a, b) => { if (a instanceof ClassType && !(b instanceof ClassType)) { return -1; - } else if (b instanceof ClassType && !(a instanceof ClassType)) { + } + if (b instanceof ClassType && !(a instanceof ClassType)) { return 1; - } else if (a.kind === "bool" && b.kind !== "bool") { + } + if (a.kind === "bool" && b.kind !== "bool") { return -1; - } else if (b.kind === "bool" && a.kind !== "bool") { + } + if (b.kind === "bool" && a.kind !== "bool") { return 1; - } else if (a instanceof EnumType && !(b instanceof EnumType)) { + } + if (a instanceof EnumType && !(b instanceof EnumType)) { return -1; - } else if (b instanceof EnumType && !(a instanceof EnumType)) { + } + if (b instanceof EnumType && !(a instanceof EnumType)) { return 1; - } else if (a.isPrimitive() && !b.isPrimitive()) { + } + if (a.isPrimitive() && !b.isPrimitive()) { return -1; - } else if (b.isPrimitive() && !a.isPrimitive()) { + } + if (b.isPrimitive() && !a.isPrimitive()) { return 1; - } else { - return 0; } + + return 0; }); } @@ -236,7 +371,7 @@ export class ElixirRenderer extends ConvenienceRenderer { name: Sourcelike, parentName: Sourcelike, suffix = "", - optional = false + optional = false, ): void { this.ensureBlankLine(); @@ -245,16 +380,23 @@ export class ElixirRenderer extends ConvenienceRenderer { return; } - if (typesToMatch.find(type => type.kind === "double")) { - typesToMatch = typesToMatch.filter(type => type.kind !== "integer"); + if (typesToMatch.find((type) => type.kind === "double")) { + typesToMatch = typesToMatch.filter( + (type) => type.kind !== "integer", + ); } - typesToMatch.forEach(type => { + typesToMatch.forEach((type) => { this.emitLine(this.patternMatchClauseDecode(type, name, suffix)); }); - if (optional && !typesToMatch.find(type => type.kind === "null")) { - this.emitLine("def decode_", name, suffix, "(value) when is_nil(value), do: value"); + if (optional && !typesToMatch.find((type) => type.kind === "null")) { + this.emitLine( + "def decode_", + name, + suffix, + "(value) when is_nil(value), do: value", + ); } this.emitLine( @@ -265,17 +407,22 @@ export class ElixirRenderer extends ConvenienceRenderer { parentName, ".", name, - '"}' + '"}', ); this.ensureBlankLine(); - typesToMatch.forEach(type => { + typesToMatch.forEach((type) => { this.emitLine(this.patternMatchClauseEncode(type, name, suffix)); }); - if (optional && !typesToMatch.find(type => type.kind === "null")) { - this.emitLine("def encode_", name, suffix, "(value) when is_nil(value), do: value"); + if (optional && !typesToMatch.find((type) => type.kind === "null")) { + this.emitLine( + "def encode_", + name, + suffix, + "(value) when is_nil(value), do: value", + ); } this.emitLine( @@ -286,13 +433,18 @@ export class ElixirRenderer extends ConvenienceRenderer { parentName, ".", name, - '"}' + '"}', ); this.ensureBlankLine(); } - private nameOfTransformFunction(t: Type, name: Name | Sourcelike, encode = false, prefix = ""): Sourcelike { + private nameOfTransformFunction( + t: Type, + name: Name | Sourcelike, + encode = false, + prefix = "", + ): Sourcelike { let mode = "decode"; if (encode) { mode = "encode"; @@ -300,112 +452,151 @@ export class ElixirRenderer extends ConvenienceRenderer { return matchType( t, - _anyType => [], - _nullType => [], - _boolType => [], - _integerType => [], - _doubleType => [], - _stringType => [], - _arrayType => [], - classType => [this.nameForNamedTypeWithNamespace(classType), `.${encode ? "to" : "from"}_map`], - _mapType => [], - enumType => { - return [this.nameForNamedTypeWithNamespace(enumType), `.${mode}`]; + (_anyType) => [], + (_nullType) => [], + (_boolType) => [], + (_integerType) => [], + (_doubleType) => [], + (_stringType) => [], + (_arrayType) => [], + (classType) => [ + this.nameForNamedTypeWithNamespace(classType), + `.${encode ? "to" : "from"}_map`, + ], + (_mapType) => [], + (enumType) => { + return [ + this.nameForNamedTypeWithNamespace(enumType), + `.${mode}`, + ]; }, - _unionType => { + (_unionType) => { return [`${mode}_`, name, prefix]; - } + }, ); } - private fromDynamic(t: Type, jsonName: string, name: Name, optional = false): Sourcelike { + private fromDynamic( + t: Type, + jsonName: string, + name: Name, + optional = false, + ): Sourcelike { const primitive = ['m["', jsonName, '"]']; return matchType( t, - _anyType => primitive, - _nullType => primitive, - _boolType => primitive, - _integerType => primitive, - _doubleType => primitive, - _stringType => primitive, - arrayType => { + (_anyType) => primitive, + (_nullType) => primitive, + (_boolType) => primitive, + (_integerType) => primitive, + (_doubleType) => primitive, + (_stringType) => primitive, + (arrayType) => { const arrayElement = arrayType.items; if (arrayElement instanceof ArrayType) { return primitive; - } else if (arrayElement.isPrimitive()) { + } + if (arrayElement.isPrimitive()) { return primitive; - } else if (arrayElement instanceof MapType) { + } + if (arrayElement instanceof MapType) { return primitive; - } else { - if (optional) { - return [ - "m", - '["', - jsonName, - '"] && Enum.map(m["', - jsonName, - '"], &', - this.nameOfTransformFunction(arrayElement, name, false, "_element"), - "/1)" - ]; - } else { - return [ - 'Enum.map(m["', - jsonName, - '"], &', - this.nameOfTransformFunction(arrayElement, name, false, "_element"), - "/1)" - ]; - } } + + if (optional) { + return [ + "m", + '["', + jsonName, + '"] && Enum.map(m["', + jsonName, + '"], &', + this.nameOfTransformFunction( + arrayElement, + name, + false, + "_element", + ), + "/1)", + ]; + } + + return [ + 'Enum.map(m["', + jsonName, + '"], &', + this.nameOfTransformFunction( + arrayElement, + name, + false, + "_element", + ), + "/1)", + ]; }, - classType => [ + (classType) => [ optional ? [primitive, " && "] : "", this.nameForNamedTypeWithNamespace(classType), ".from_map(", primitive, - ")" + ")", ], - mapType => { + (mapType) => { const mapValueTypes = [...mapType.values.getChildren()]; - const mapValueTypesNotPrimitive = mapValueTypes.filter(type => !(type instanceof PrimitiveType)); + const mapValueTypesNotPrimitive = mapValueTypes.filter( + (type) => !(type instanceof PrimitiveType), + ); if (mapValueTypesNotPrimitive.length === 0) { return [primitive]; - } else { - if (mapType.values.kind === "union") { - return [ - 'm["', + } + + if (mapType.values.kind === "union") { + return [ + 'm["', + jsonName, + '"]\n|> Map.new(fn {key, value} -> {key, ', + this.nameOfTransformFunction( + mapType.values, jsonName, - '"]\n|> Map.new(fn {key, value} -> {key, ', - this.nameOfTransformFunction(mapType.values, jsonName, false), - "_value(value)} end)" - ]; - } else if (mapType.values instanceof EnumType || mapType.values instanceof ClassType) { - return [ - 'm["', + false, + ), + "_value(value)} end)", + ]; + } + if ( + mapType.values instanceof EnumType || + mapType.values instanceof ClassType + ) { + return [ + 'm["', + jsonName, + '"]\n|> Map.new(fn {key, value} -> {key, ', + this.nameOfTransformFunction( + mapType.values, jsonName, - '"]\n|> Map.new(fn {key, value} -> {key, ', - this.nameOfTransformFunction(mapType.values, jsonName, false), - "(value)} end)" - ]; - } - - return [primitive]; + false, + ), + "(value)} end)", + ]; } + + return [primitive]; }, - enumType => { + (enumType) => { return [ optional ? [primitive, " && "] : "", this.nameOfTransformFunction(enumType, name), "(", primitive, - ")" + ")", ]; }, - unionType => { + (unionType) => { const unionTypes = [...unionType.getChildren()]; - const unionPrimitiveTypes = unionTypes.filter(type => type.isPrimitive()); + const unionPrimitiveTypes = unionTypes.filter((type) => + type.isPrimitive(), + ); if (unionTypes.length === unionPrimitiveTypes.length) { return ['m["', jsonName, '"]']; } @@ -422,11 +613,19 @@ export class ElixirRenderer extends ConvenienceRenderer { return this.fromDynamic(nullable, jsonName, name, true); } - return ['m["', jsonName, '"] && decode_', name, '(m["', jsonName, '"])']; + return [ + 'm["', + jsonName, + '"] && decode_', + name, + '(m["', + jsonName, + '"])', + ]; } return ["decode_", name, '(m["', jsonName, '"])']; - } + }, ); } @@ -434,13 +633,13 @@ export class ElixirRenderer extends ConvenienceRenderer { const expression = ["struct.", e]; return matchType( t, - _anyType => expression, - _nullType => expression, - _boolType => expression, - _integerType => expression, - _doubleType => expression, - _stringType => expression, - arrayType => { + (_anyType) => expression, + (_nullType) => expression, + (_boolType) => expression, + (_integerType) => expression, + (_doubleType) => expression, + (_stringType) => expression, + (arrayType) => { const arrayElement = arrayType.items; if (arrayElement instanceof ArrayType) { return expression; @@ -448,83 +647,102 @@ export class ElixirRenderer extends ConvenienceRenderer { if (arrayElement.isPrimitive()) { return expression; - } else if (arrayElement instanceof MapType) { + } + if (arrayElement instanceof MapType) { return expression; - } else { - if (arrayElement.kind === "array") { - return expression; - } else { - if (optional) { - return [ - "struct.", - e, - " && Enum.map(struct.", - e, - ", &", - this.nameOfTransformFunction(arrayElement, e, true, "_element"), - "/1)" - ]; - } else { - return [ - "struct.", - e, - " && Enum.map(struct.", - e, - ", &", - this.nameOfTransformFunction(arrayElement, e, true, "_element"), - "/1)" - ]; - } - } } + + if (arrayElement.kind === "array") { + return expression; + } + + if (optional) { + return [ + "struct.", + e, + " && Enum.map(struct.", + e, + ", &", + this.nameOfTransformFunction( + arrayElement, + e, + true, + "_element", + ), + "/1)", + ]; + } + + return [ + "struct.", + e, + " && Enum.map(struct.", + e, + ", &", + this.nameOfTransformFunction( + arrayElement, + e, + true, + "_element", + ), + "/1)", + ]; }, - classType => [ + (classType) => [ optional ? ["struct.", e, " && "] : "", this.nameForNamedTypeWithNamespace(classType), ".to_map(", "struct.", e, - ")" + ")", ], - mapType => { + (mapType) => { const mapValueTypes = [...mapType.values.getChildren()]; - const mapValueTypesNotPrimitive = mapValueTypes.filter(type => !(type instanceof PrimitiveType)); + const mapValueTypesNotPrimitive = mapValueTypes.filter( + (type) => !(type instanceof PrimitiveType), + ); if (mapValueTypesNotPrimitive.length === 0) { return [expression]; - } else { - if (mapType.values.kind === "union") { - return [ - "struct.", - e, - "\n|> Map.new(fn {key, value} -> {key, ", - this.nameOfTransformFunction(mapType.values, e, true), - "_value(value)} end)" - ]; - } else if (mapType.values instanceof EnumType || mapType.values instanceof ClassType) { - return [ - "struct.", - e, - "\n|> Map.new(fn {key, value} -> {key, ", - this.nameOfTransformFunction(mapType.values, e, true), - "(value)} end)" - ]; - } + } - return [expression]; + if (mapType.values.kind === "union") { + return [ + "struct.", + e, + "\n|> Map.new(fn {key, value} -> {key, ", + this.nameOfTransformFunction(mapType.values, e, true), + "_value(value)} end)", + ]; + } + if ( + mapType.values instanceof EnumType || + mapType.values instanceof ClassType + ) { + return [ + "struct.", + e, + "\n|> Map.new(fn {key, value} -> {key, ", + this.nameOfTransformFunction(mapType.values, e, true), + "(value)} end)", + ]; } + + return [expression]; }, - enumType => { + (enumType) => { return [ optional ? ["struct.", e, " && "] : "", this.nameForNamedTypeWithNamespace(enumType), ".encode(struct.", e, - ")" + ")", ]; }, - unionType => { + (unionType) => { const unionTypes = [...unionType.getChildren()]; - const unionPrimitiveTypes = unionTypes.filter(type => type.isPrimitive()); + const unionPrimitiveTypes = unionTypes.filter((type) => + type.isPrimitive(), + ); if (unionTypes.length === unionPrimitiveTypes.length) { return ["struct.", e]; } @@ -544,7 +762,7 @@ export class ElixirRenderer extends ConvenienceRenderer { } return ["encode_", e, "(struct.", e, ")"]; - } + }, ); } @@ -558,167 +776,241 @@ export class ElixirRenderer extends ConvenienceRenderer { this.emitCommentLines(lines, { firstLineStart: '@moduledoc """\n', lineStart: "", - afterComment: '"""' + afterComment: '"""', }); } protected emitModule(c: ClassType, moduleName: Name): void { - this.emitBlock(["defmodule ", this.nameWithNamespace(moduleName), " do"], () => { - const structDescription = this.descriptionForType(c) ?? []; - const attributeDescriptions: Sourcelike[][] = []; - this.forEachClassProperty(c, "none", (name, jsonName, _p) => { - const attributeDescription = this.descriptionForClassProperty(c, jsonName); - if (attributeDescription) { - attributeDescriptions.push(["- `:", name, "` - ", attributeDescription]); + this.emitBlock( + ["defmodule ", this.nameWithNamespace(moduleName), " do"], + () => { + const structDescription = this.descriptionForType(c) ?? []; + const attributeDescriptions: Sourcelike[][] = []; + this.forEachClassProperty(c, "none", (name, jsonName, _p) => { + const attributeDescription = + this.descriptionForClassProperty(c, jsonName); + if (attributeDescription) { + attributeDescriptions.push([ + "- `:", + name, + "` - ", + attributeDescription, + ]); + } + }); + if (structDescription.length || attributeDescriptions.length) { + this.emitDescription([ + ...structDescription, + ...attributeDescriptions, + ]); + this.ensureBlankLine(); } - }); - if (structDescription.length || attributeDescriptions.length) { - this.emitDescription([...structDescription, ...attributeDescriptions]); - this.ensureBlankLine(); - } - const requiredAttributes: Sourcelike[] = []; - this.forEachClassProperty(c, "none", (name, _jsonName, p) => { - if (!p.isOptional) { - if (requiredAttributes.length === 0) { - requiredAttributes.push([":", name]); - } else { - requiredAttributes.push([", :", name]); + const requiredAttributes: Sourcelike[] = []; + this.forEachClassProperty(c, "none", (name, _jsonName, p) => { + if (!p.isOptional) { + if (requiredAttributes.length === 0) { + requiredAttributes.push([":", name]); + } else { + requiredAttributes.push([", :", name]); + } } + }); + if (requiredAttributes.length) { + this.emitLine(["@enforce_keys [", requiredAttributes, "]"]); } - }); - if (requiredAttributes.length) { - this.emitLine(["@enforce_keys [", requiredAttributes, "]"]); - } - const attributeNames: Sourcelike[] = []; - this.forEachClassProperty(c, "none", (name, _jsonName, _p) => { - if (attributeNames.length === 0) { - attributeNames.push([":", name]); - } else { - attributeNames.push([", :", name]); - } - }); + const attributeNames: Sourcelike[] = []; + this.forEachClassProperty(c, "none", (name, _jsonName, _p) => { + if (attributeNames.length === 0) { + attributeNames.push([":", name]); + } else { + attributeNames.push([", :", name]); + } + }); - this.emitLine(["defstruct [", attributeNames, "]"]); - this.ensureBlankLine(); + this.emitLine(["defstruct [", attributeNames, "]"]); + this.ensureBlankLine(); - const typeDefinitionTable: Sourcelike[][] = [[["@type "], ["t :: %__MODULE__{"]]]; - let count = c.getProperties().size; - this.forEachClassProperty(c, "none", (name, _jsonName, p) => { - const last = --count === 0; - const attributeRow = [ - [], - [" ", name, ": ", this.elixirType(p.type), p.isOptional ? " | nil" : "", last ? "" : ","] + const typeDefinitionTable: Sourcelike[][] = [ + [["@type "], ["t :: %__MODULE__{"]], ]; - typeDefinitionTable.push(attributeRow); - }); - typeDefinitionTable.push([[], ["}"]]); - this.emitTable(typeDefinitionTable); - if (this._options.justTypes) { - return; - } - - this.forEachClassProperty(c, "none", (name, _jsonName, p) => { - if (p.type.kind === "union") { - const unionTypes = [...p.type.getChildren()]; - const unionPrimitiveTypes = unionTypes.filter(type => type.isPrimitive()); - if (unionTypes.length === unionPrimitiveTypes.length) { - return; - } - - const unionTypesNonNull = unionTypes.filter(type => type.kind !== "null"); - if (unionTypesNonNull.length === 1) { - let suffix = ""; - let itemTypes: Type[] = []; - if (unionTypesNonNull[0] instanceof ArrayType) { - suffix = "_element"; - itemTypes = [...unionTypesNonNull[0].getChildren()]; - } else if (unionTypesNonNull[0] instanceof MapType) { - suffix = "_value"; - itemTypes = [...unionTypesNonNull[0].getChildren()]; - } + let count = c.getProperties().size; + this.forEachClassProperty(c, "none", (name, _jsonName, p) => { + const last = --count === 0; + const attributeRow = [ + [], + [ + " ", + name, + ": ", + this.elixirType(p.type), + p.isOptional ? " | nil" : "", + last ? "" : ",", + ], + ]; + typeDefinitionTable.push(attributeRow); + }); + typeDefinitionTable.push([[], ["}"]]); + this.emitTable(typeDefinitionTable); + if (this._options.justTypes) { + return; + } - if (itemTypes.length === 1 && itemTypes[0] instanceof UnionType) { - itemTypes = [...itemTypes[0].getChildren()]; + this.forEachClassProperty(c, "none", (name, _jsonName, p) => { + if (p.type.kind === "union") { + const unionTypes = [...p.type.getChildren()]; + const unionPrimitiveTypes = unionTypes.filter((type) => + type.isPrimitive(), + ); + if (unionTypes.length === unionPrimitiveTypes.length) { + return; } - this.emitPatternMatches( - itemTypes, - name, - this.nameForNamedTypeWithNamespace(c), - suffix, - p.isOptional + const unionTypesNonNull = unionTypes.filter( + (type) => type.kind !== "null", ); - } else { - this.emitPatternMatches( - unionTypes, - name, - this.nameForNamedTypeWithNamespace(c), - "", - p.isOptional - ); - } - } else if (p.type.kind === "array") { - const arrayType = p.type as ArrayType; - if (arrayType.items instanceof UnionType) { - const unionType = arrayType.items; - const typesInUnion = [...unionType.getChildren()]; + if (unionTypesNonNull.length === 1) { + let suffix = ""; + let itemTypes: Type[] = []; + if (unionTypesNonNull[0] instanceof ArrayType) { + suffix = "_element"; + itemTypes = [ + ...unionTypesNonNull[0].getChildren(), + ]; + } else if ( + unionTypesNonNull[0] instanceof MapType + ) { + suffix = "_value"; + itemTypes = [ + ...unionTypesNonNull[0].getChildren(), + ]; + } - this.emitPatternMatches(typesInUnion, name, this.nameForNamedTypeWithNamespace(c), "_element"); - } - } else if (p.type.kind === "map") { - const mapType = p.type as MapType; - if (mapType.values instanceof UnionType) { - const unionType = mapType.values; - const typesInUnion = [...unionType.getChildren()]; + if ( + itemTypes.length === 1 && + itemTypes[0] instanceof UnionType + ) { + itemTypes = [...itemTypes[0].getChildren()]; + } - this.emitPatternMatches(typesInUnion, name, this.nameForNamedTypeWithNamespace(c), "_value"); + this.emitPatternMatches( + itemTypes, + name, + this.nameForNamedTypeWithNamespace(c), + suffix, + p.isOptional, + ); + } else { + this.emitPatternMatches( + unionTypes, + name, + this.nameForNamedTypeWithNamespace(c), + "", + p.isOptional, + ); + } + } else if (p.type.kind === "array") { + const arrayType = p.type as ArrayType; + if (arrayType.items instanceof UnionType) { + const unionType = arrayType.items; + const typesInUnion = [...unionType.getChildren()]; + + this.emitPatternMatches( + typesInUnion, + name, + this.nameForNamedTypeWithNamespace(c), + "_element", + ); + } + } else if (p.type.kind === "map") { + const mapType = p.type as MapType; + if (mapType.values instanceof UnionType) { + const unionType = mapType.values; + const typesInUnion = [...unionType.getChildren()]; + + this.emitPatternMatches( + typesInUnion, + name, + this.nameForNamedTypeWithNamespace(c), + "_value", + ); + } } - } - }); - let propCount = 0; - this.forEachClassProperty(c, "none", (_name, _jsonName, _p) => { - propCount++; - }); - const isEmpty = propCount ? false : true; - this.ensureBlankLine(); - this.emitBlock([`def from_map(${isEmpty ? "_" : ""}m) do`], () => { - this.emitLine("%", this.nameWithNamespace(moduleName), "{"); - this.indent(() => { - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - jsonName = escapeDoubleQuotes(jsonName); - jsonName = escapeNewLines(jsonName); - const expression = this.fromDynamic(p.type, jsonName, name, p.isOptional); - this.emitLine(name, ": ", expression, ","); - }); }); - this.emitLine("}"); - }); - this.ensureBlankLine(); - this.emitBlock("def from_json(json) do", () => { - this.emitMultiline(`json + let propCount = 0; + this.forEachClassProperty(c, "none", (_name, _jsonName, _p) => { + propCount++; + }); + const isEmpty = propCount ? false : true; + this.ensureBlankLine(); + this.emitBlock( + [`def from_map(${isEmpty ? "_" : ""}m) do`], + () => { + this.emitLine( + "%", + this.nameWithNamespace(moduleName), + "{", + ); + this.indent(() => { + this.forEachClassProperty( + c, + "none", + (name, jsonName, p) => { + jsonName = escapeDoubleQuotes(jsonName); + jsonName = escapeNewLines(jsonName); + const expression = this.fromDynamic( + p.type, + jsonName, + name, + p.isOptional, + ); + this.emitLine(name, ": ", expression, ","); + }, + ); + }); + this.emitLine("}"); + }, + ); + this.ensureBlankLine(); + this.emitBlock("def from_json(json) do", () => { + this.emitMultiline(`json |> Jason.decode!() |> from_map()`); - }); - this.ensureBlankLine(); - this.emitBlock([`def to_map(${isEmpty ? "_" : ""}struct) do`], () => { - this.emitLine("%{"); - this.indent(() => { - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - const expression = this.toDynamic(p.type, name, p.isOptional); - this.emitLine([[`"${stringEscape(jsonName)}"`], [" => ", expression, ","]]); - }); }); - this.emitLine("}"); - }); - this.ensureBlankLine(); - this.emitBlock("def to_json(struct) do", () => { - this.emitMultiline(`struct + this.ensureBlankLine(); + this.emitBlock( + [`def to_map(${isEmpty ? "_" : ""}struct) do`], + () => { + this.emitLine("%{"); + this.indent(() => { + this.forEachClassProperty( + c, + "none", + (name, jsonName, p) => { + const expression = this.toDynamic( + p.type, + name, + p.isOptional, + ); + this.emitLine([ + [`"${stringEscape(jsonName)}"`], + [" => ", expression, ","], + ]); + }, + ); + }); + this.emitLine("}"); + }, + ); + this.ensureBlankLine(); + this.emitBlock("def to_json(struct) do", () => { + this.emitMultiline(`struct |> to_map() |> Jason.encode!()`); - }); - }); + }); + }, + ); } private isValidAtom(str: string): boolean { @@ -742,7 +1034,11 @@ export class ElixirRenderer extends ConvenienceRenderer { for (let i = 1; i < str.length; i++) { const char = str[i]; - if (!isLetterOrDigit(char) && char !== "@" && !(i === str.length - 1 && (char === "!" || char === "?"))) { + if ( + !isLetterOrDigit(char) && + char !== "@" && + !(i === str.length - 1 && (char === "!" || char === "?")) + ) { return false; } } @@ -751,24 +1047,26 @@ export class ElixirRenderer extends ConvenienceRenderer { } protected emitEnum(e: EnumType, enumName: Name): void { - this.emitBlock(["defmodule ", this.nameWithNamespace(enumName), " do"], () => { - this.emitDescription(this.descriptionForType(e)); - this.emitLine("@valid_enum_members ["); - this.indent(() => { - this.forEachEnumCase(e, "none", (_name, json) => { - if (this.isValidAtom(json)) { - this.emitLine(":", json, ","); - } else { - this.emitLine(":", `"${json}"`, ","); - } + this.emitBlock( + ["defmodule ", this.nameWithNamespace(enumName), " do"], + () => { + this.emitDescription(this.descriptionForType(e)); + this.emitLine("@valid_enum_members ["); + this.indent(() => { + this.forEachEnumCase(e, "none", (_name, json) => { + if (this.isValidAtom(json)) { + this.emitLine(":", json, ","); + } else { + this.emitLine(":", `"${json}"`, ","); + } + }); }); - }); - this.emitLine("]"); + this.emitLine("]"); - this.ensureBlankLine(); + this.ensureBlankLine(); - this.emitMultiline(`def valid_atom?(value), do: value in @valid_enum_members + this.emitMultiline(`def valid_atom?(value), do: value in @valid_enum_members def valid_atom_string?(value) do try do @@ -806,7 +1104,8 @@ def to_json(data) do |> encode() |> Jason.encode!() end`); - }); + }, + ); } protected emitUnion(_u: UnionType, _unionName: Name): void { @@ -822,8 +1121,16 @@ end`); # Add Jason to your mix.exs`); this.forEachTopLevel("none", (_topLevel, name) => { this.emitLine("#"); - this.emitLine("# Decode a JSON string: ", this.nameWithNamespace(name), ".from_json(data)"); - this.emitLine("# Encode into a JSON string: ", this.nameWithNamespace(name), ".to_json(struct)"); + this.emitLine( + "# Decode a JSON string: ", + this.nameWithNamespace(name), + ".from_json(data)", + ); + this.emitLine( + "# Encode into a JSON string: ", + this.nameWithNamespace(name), + ".to_json(struct)", + ); }); } @@ -833,7 +1140,7 @@ end`); "leading-and-interposing", (c: ClassType, n: Name) => this.emitModule(c, n), (e, n) => this.emitEnum(e, n), - (u, n) => this.emitUnion(u, n) + (u, n) => this.emitUnion(u, n), ); if (!this._options.justTypes) { @@ -842,59 +1149,74 @@ end`); (topLevel, name) => { const isTopLevelArray = "array" === topLevel.kind; - this.emitBlock(["defmodule ", this.nameWithNamespace(name), " do"], () => { - const description = this.descriptionForType(topLevel) ?? []; - if (description.length) { - this.emitDescription([...description]); - this.ensureBlankLine(); - } - - if (isTopLevelArray) { - const arrayElement = (topLevel as ArrayType).items; - - let isUnion = false; - - if (arrayElement instanceof UnionType) { - this.emitPatternMatches([...arrayElement.getChildren()], "element", name); - isUnion = true; + this.emitBlock( + ["defmodule ", this.nameWithNamespace(name), " do"], + () => { + const description = + this.descriptionForType(topLevel) ?? []; + if (description.length) { + this.emitDescription([...description]); + this.ensureBlankLine(); } - this.emitBlock("def from_json(json) do", () => { - this.emitLine("json"); - this.emitLine("|> Jason.decode!()"); - this.emitLine( - "|> Enum.map(&", - isUnion - ? ["decode_element/1)"] - : [this.nameWithNamespace(name), "Element.from_map/1)"] - ); - }); - - this.ensureBlankLine(); - - this.emitBlock("def to_json(list) do", () => { - this.emitLine( - "Enum.map(list, &", - isUnion - ? ["encode_element/1)"] - : [this.nameWithNamespace(name), "Element.to_map/1)"] - ); - this.emitLine("|> Jason.encode!()"); - }); - } else { - this.emitBlock("def from_json(json) do", () => { - this.emitLine("Jason.decode!(json)"); - }); - - this.ensureBlankLine(); - - this.emitBlock("def to_json(data) do", () => { - this.emitLine("Jason.encode!(data)"); - }); - } - }); + if (isTopLevelArray) { + const arrayElement = (topLevel as ArrayType) + .items; + + let isUnion = false; + + if (arrayElement instanceof UnionType) { + this.emitPatternMatches( + [...arrayElement.getChildren()], + "element", + name, + ); + isUnion = true; + } + + this.emitBlock("def from_json(json) do", () => { + this.emitLine("json"); + this.emitLine("|> Jason.decode!()"); + this.emitLine( + "|> Enum.map(&", + isUnion + ? ["decode_element/1)"] + : [ + this.nameWithNamespace(name), + "Element.from_map/1)", + ], + ); + }); + + this.ensureBlankLine(); + + this.emitBlock("def to_json(list) do", () => { + this.emitLine( + "Enum.map(list, &", + isUnion + ? ["encode_element/1)"] + : [ + this.nameWithNamespace(name), + "Element.to_map/1)", + ], + ); + this.emitLine("|> Jason.encode!()"); + }); + } else { + this.emitBlock("def from_json(json) do", () => { + this.emitLine("Jason.decode!(json)"); + }); + + this.ensureBlankLine(); + + this.emitBlock("def to_json(data) do", () => { + this.emitLine("Jason.encode!(data)"); + }); + } + }, + ); }, - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); } } diff --git a/packages/quicktype-core/src/language/Elixir/constants.ts b/packages/quicktype-core/src/language/Elixir/constants.ts index 89866c9f5..6216baa7b 100644 --- a/packages/quicktype-core/src/language/Elixir/constants.ts +++ b/packages/quicktype-core/src/language/Elixir/constants.ts @@ -74,7 +74,7 @@ export const forbiddenModuleNames = [ "UndefinedFunctionError", "UnicodeConversionError", "Version", - "WithClauseError" + "WithClauseError", ] as const; export const reservedWords = [ @@ -97,5 +97,5 @@ export const reservedWords = [ "catch", "rescue", "after", - "else" + "else", ] as const; diff --git a/packages/quicktype-core/src/language/Elixir/language.ts b/packages/quicktype-core/src/language/Elixir/language.ts index 37b15d4cc..01783d1c2 100644 --- a/packages/quicktype-core/src/language/Elixir/language.ts +++ b/packages/quicktype-core/src/language/Elixir/language.ts @@ -1,22 +1,33 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { ElixirRenderer } from "./ElixirRenderer"; export const elixirOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), - namespace: new StringOption("namespace", "Specify a module namespace", "NAME", "") + namespace: new StringOption( + "namespace", + "Specify a module namespace", + "NAME", + "", + ), }; export const elixirLanguageConfig = { displayName: "Elixir", names: ["elixir"], - extension: "ex" + extension: "ex", } as const; -export class ElixirTargetLanguage extends TargetLanguage { +export class ElixirTargetLanguage extends TargetLanguage< + typeof elixirLanguageConfig +> { public constructor() { super(elixirLanguageConfig); } @@ -33,7 +44,14 @@ export class ElixirTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): ElixirRenderer { + return new ElixirRenderer( + this, + renderContext, + getOptionValues(elixirOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/Elixir/utils.ts b/packages/quicktype-core/src/language/Elixir/utils.ts index 4e81841fe..2e2439e33 100644 --- a/packages/quicktype-core/src/language/Elixir/utils.ts +++ b/packages/quicktype-core/src/language/Elixir/utils.ts @@ -11,7 +11,7 @@ import { isPrintable, legalizeCharacters, splitIntoWords, - utf32ConcatMap + utf32ConcatMap, } from "../../support/Strings"; function unicodeEscape(codePoint: number): string { @@ -22,7 +22,9 @@ export function capitalizeFirstLetter(str: string): string { return str.charAt(0).toUpperCase() + str.slice(1); } -export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); +export const stringEscape = utf32ConcatMap( + escapeNonPrintableMapper(isPrintable, unicodeEscape), +); export function escapeDoubleQuotes(str: string): string { return str.replace(/"/g, '\\"'); @@ -36,7 +38,10 @@ const isStartCharacter = isLetterOrUnderscore; function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); + return ( + ["Nd", "Pc", "Mn", "Mc"].includes(category) || + isStartCharacter(utf16Unit) + ); } const legalizeName = legalizeCharacters(isPartCharacter); @@ -55,7 +60,7 @@ export function simpleNameStyle(original: string, uppercase: boolean): string { allUpperWordStyle, allUpperWordStyle, "", - isStartCharacter + isStartCharacter, ); } @@ -69,6 +74,6 @@ export function memberNameStyle(original: string): string { allLowerWordStyle, allLowerWordStyle, "_", - isStartCharacter + isStartCharacter, ); } diff --git a/packages/quicktype-core/src/language/Elm/ElmRenderer.ts b/packages/quicktype-core/src/language/Elm/ElmRenderer.ts index fcfd06b10..b11daadfb 100644 --- a/packages/quicktype-core/src/language/Elm/ElmRenderer.ts +++ b/packages/quicktype-core/src/language/Elm/ElmRenderer.ts @@ -1,20 +1,43 @@ import { arrayIntercalate, mapContains } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type MultiWord, type Sourcelike, annotated, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import { + type MultiWord, + type Sourcelike, + annotated, + multiWord, + parenIfNeeded, + singleWord, +} from "../../Source"; import { decapitalize, stringEscape } from "../../support/Strings"; import { defined } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; +import type { TargetLanguage } from "../../TargetLanguage"; +import type { + ClassProperty, + ClassType, + EnumType, + Type, + UnionType, +} from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenNames } from "./constants"; -import { type elmOptions } from "./language"; -import { lowerNamingFunction, requiredOrOptional, upperNamingFunction } from "./utils"; +import type { elmOptions } from "./language"; +import { + lowerNamingFunction, + requiredOrOptional, + upperNamingFunction, +} from "./utils"; interface TopLevelDependent { decoder?: Name; @@ -34,7 +57,7 @@ export class ElmRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -43,15 +66,22 @@ export class ElmRenderer extends ConvenienceRenderer { return forbiddenNames; } - protected makeTopLevelDependencyNames(t: Type, topLevelName: Name): DependencyName[] { + protected makeTopLevelDependencyNames( + t: Type, + topLevelName: Name, + ): DependencyName[] { const encoder = new DependencyName( lowerNamingFunction, topLevelName.order, - lookup => `${lookup(topLevelName)}_to_string` + (lookup) => `${lookup(topLevelName)}_to_string`, ); let decoder: DependencyName | undefined = undefined; if (this.namedTypeToNameForTopLevel(t) === undefined) { - decoder = new DependencyName(lowerNamingFunction, topLevelName.order, lookup => lookup(topLevelName)); + decoder = new DependencyName( + lowerNamingFunction, + topLevelName.order, + (lookup) => lookup(topLevelName), + ); } this._topLevelDependents.set(topLevelName, { encoder, decoder }); @@ -66,9 +96,20 @@ export class ElmRenderer extends ConvenienceRenderer { return upperNamingFunction; } - protected makeNamedTypeDependencyNames(_: Type, typeName: Name): DependencyName[] { - const encoder = new DependencyName(lowerNamingFunction, typeName.order, lookup => `encode_${lookup(typeName)}`); - const decoder = new DependencyName(lowerNamingFunction, typeName.order, lookup => lookup(typeName)); + protected makeNamedTypeDependencyNames( + _: Type, + typeName: Name, + ): DependencyName[] { + const encoder = new DependencyName( + lowerNamingFunction, + typeName.order, + (lookup) => `encode_${lookup(typeName)}`, + ); + const decoder = new DependencyName( + lowerNamingFunction, + typeName.order, + (lookup) => lookup(typeName), + ); this._namedTypeDependents.set(typeName, { encoder, decoder }); return [encoder, decoder]; } @@ -77,7 +118,10 @@ export class ElmRenderer extends ConvenienceRenderer { return lowerNamingFunction; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -101,9 +145,14 @@ export class ElmRenderer extends ConvenienceRenderer { u: UnionType, unionName: Name, fieldType: Type, - lookup: (n: Name) => string + lookup: (n: Name) => string, ): string { - const fieldName = super.proposeUnionMemberName(u, unionName, fieldType, lookup); + const fieldName = super.proposeUnionMemberName( + u, + unionName, + fieldType, + lookup, + ); return `${fieldName}_in_${lookup(unionName)}`; } @@ -113,9 +162,15 @@ export class ElmRenderer extends ConvenienceRenderer { protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { - this.emitComments([{ customLines: lines, lineStart: "{-| ", lineEnd: " -}" }]); + this.emitComments([ + { customLines: lines, lineStart: "{-| ", lineEnd: " -}" }, + ]); } else { - this.emitCommentLines(lines, { firstLineStart: "{-| ", lineStart: "", afterComment: "-}" }); + this.emitCommentLines(lines, { + firstLineStart: "{-| ", + lineStart: "", + afterComment: "-}", + }); } } @@ -126,17 +181,28 @@ export class ElmRenderer extends ConvenienceRenderer { private elmType(t: Type, noOptional = false): MultiWord { return matchType( t, - _anyType => singleWord(annotated(anyTypeIssueAnnotation, "Jdec.Value")), - _nullType => singleWord(annotated(nullTypeIssueAnnotation, "()")), - _boolType => singleWord("Bool"), - _integerType => singleWord("Int"), - _doubleType => singleWord("Float"), - _stringType => singleWord("String"), - arrayType => multiWord(" ", this.arrayType, parenIfNeeded(this.elmType(arrayType.items))), - classType => singleWord(this.nameForNamedType(classType)), - mapType => multiWord(" ", "Dict String", parenIfNeeded(this.elmType(mapType.values))), - enumType => singleWord(this.nameForNamedType(enumType)), - unionType => { + (_anyType) => + singleWord(annotated(anyTypeIssueAnnotation, "Jdec.Value")), + (_nullType) => singleWord(annotated(nullTypeIssueAnnotation, "()")), + (_boolType) => singleWord("Bool"), + (_integerType) => singleWord("Int"), + (_doubleType) => singleWord("Float"), + (_stringType) => singleWord("String"), + (arrayType) => + multiWord( + " ", + this.arrayType, + parenIfNeeded(this.elmType(arrayType.items)), + ), + (classType) => singleWord(this.nameForNamedType(classType)), + (mapType) => + multiWord( + " ", + "Dict String", + parenIfNeeded(this.elmType(mapType.values)), + ), + (enumType) => singleWord(this.nameForNamedType(enumType)), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableType = this.elmType(nullable); @@ -145,16 +211,20 @@ export class ElmRenderer extends ConvenienceRenderer { } return singleWord(this.nameForNamedType(unionType)); - } + }, ); } private elmProperty(p: ClassProperty): Sourcelike { if (p.isOptional) { - return multiWord(" ", "Maybe", parenIfNeeded(this.elmType(p.type, true))).source; - } else { - return this.elmType(p.type).source; + return multiWord( + " ", + "Maybe", + parenIfNeeded(this.elmType(p.type, true)), + ).source; } + + return this.elmType(p.type).source; } private decoderNameForNamedType(t: Type): Name { @@ -165,40 +235,53 @@ export class ElmRenderer extends ConvenienceRenderer { private decoderNameForType(t: Type, noOptional = false): MultiWord { return matchType( t, - _anyType => singleWord("Jdec.value"), - _nullType => multiWord(" ", "Jdec.null", "()"), - _boolType => singleWord("Jdec.bool"), - _integerType => singleWord("Jdec.int"), - _doubleType => singleWord("Jdec.float"), - _stringType => singleWord("Jdec.string"), - arrayType => + (_anyType) => singleWord("Jdec.value"), + (_nullType) => multiWord(" ", "Jdec.null", "()"), + (_boolType) => singleWord("Jdec.bool"), + (_integerType) => singleWord("Jdec.int"), + (_doubleType) => singleWord("Jdec.float"), + (_stringType) => singleWord("Jdec.string"), + (arrayType) => multiWord( " ", ["Jdec.", decapitalize(this.arrayType)], - parenIfNeeded(this.decoderNameForType(arrayType.items)) + parenIfNeeded(this.decoderNameForType(arrayType.items)), ), - classType => singleWord(this.decoderNameForNamedType(classType)), - mapType => multiWord(" ", "Jdec.dict", parenIfNeeded(this.decoderNameForType(mapType.values))), - enumType => singleWord(this.decoderNameForNamedType(enumType)), - unionType => { + (classType) => singleWord(this.decoderNameForNamedType(classType)), + (mapType) => + multiWord( + " ", + "Jdec.dict", + parenIfNeeded(this.decoderNameForType(mapType.values)), + ), + (enumType) => singleWord(this.decoderNameForNamedType(enumType)), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableDecoder = this.decoderNameForType(nullable); if (noOptional) return nullableDecoder; - return multiWord(" ", "Jdec.nullable", parenIfNeeded(nullableDecoder)); + return multiWord( + " ", + "Jdec.nullable", + parenIfNeeded(nullableDecoder), + ); } return singleWord(this.decoderNameForNamedType(unionType)); - } + }, ); } private decoderNameForProperty(p: ClassProperty): MultiWord { if (p.isOptional) { - return multiWord(" ", "Jdec.nullable", parenIfNeeded(this.decoderNameForType(p.type, true))); - } else { - return this.decoderNameForType(p.type); + return multiWord( + " ", + "Jdec.nullable", + parenIfNeeded(this.decoderNameForType(p.type, true)), + ); } + + return this.decoderNameForType(p.type); } private encoderNameForNamedType(t: Type): Name { @@ -209,50 +292,71 @@ export class ElmRenderer extends ConvenienceRenderer { private encoderNameForType(t: Type, noOptional = false): MultiWord { return matchType( t, - _anyType => singleWord("identity"), - _nullType => multiWord(" ", "always", "Jenc.null"), - _boolType => singleWord("Jenc.bool"), - _integerType => singleWord("Jenc.int"), - _doubleType => singleWord("Jenc.float"), - _stringType => singleWord("Jenc.string"), - arrayType => + (_anyType) => singleWord("identity"), + (_nullType) => multiWord(" ", "always", "Jenc.null"), + (_boolType) => singleWord("Jenc.bool"), + (_integerType) => singleWord("Jenc.int"), + (_doubleType) => singleWord("Jenc.float"), + (_stringType) => singleWord("Jenc.string"), + (arrayType) => multiWord( " ", ["make", this.arrayType, "Encoder"], - parenIfNeeded(this.encoderNameForType(arrayType.items)) + parenIfNeeded(this.encoderNameForType(arrayType.items)), ), - classType => singleWord(this.encoderNameForNamedType(classType)), - mapType => multiWord(" ", "makeDictEncoder", parenIfNeeded(this.encoderNameForType(mapType.values))), - enumType => singleWord(this.encoderNameForNamedType(enumType)), - unionType => { + (classType) => singleWord(this.encoderNameForNamedType(classType)), + (mapType) => + multiWord( + " ", + "makeDictEncoder", + parenIfNeeded(this.encoderNameForType(mapType.values)), + ), + (enumType) => singleWord(this.encoderNameForNamedType(enumType)), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableEncoder = this.encoderNameForType(nullable); if (noOptional) return nullableEncoder; - return multiWord(" ", "makeNullableEncoder", parenIfNeeded(nullableEncoder)); + return multiWord( + " ", + "makeNullableEncoder", + parenIfNeeded(nullableEncoder), + ); } return singleWord(this.encoderNameForNamedType(unionType)); - } + }, ); } private encoderNameForProperty(p: ClassProperty): MultiWord { if (p.isOptional) { - return multiWord(" ", "makeNullableEncoder", parenIfNeeded(this.encoderNameForType(p.type, true))); - } else { - return this.encoderNameForType(p.type); + return multiWord( + " ", + "makeNullableEncoder", + parenIfNeeded(this.encoderNameForType(p.type, true)), + ); } + + return this.encoderNameForType(p.type); } private emitTopLevelDefinition(t: Type, topLevelName: Name): void { - this.emitLine("type alias ", topLevelName, " = ", this.elmType(t).source); + this.emitLine( + "type alias ", + topLevelName, + " = ", + this.elmType(t).source, + ); } private emitClassDefinition(c: ClassType, className: Name): void { let description = this.descriptionForType(c); this.forEachClassProperty(c, "none", (name, jsonName) => { - const propertyDescription = this.descriptionForClassProperty(c, jsonName); + const propertyDescription = this.descriptionForClassProperty( + c, + jsonName, + ); if (propertyDescription === undefined) return; if (description === undefined) { @@ -270,7 +374,13 @@ export class ElmRenderer extends ConvenienceRenderer { this.indent(() => { let onFirst = true; this.forEachClassProperty(c, "none", (name, _jsonName, p) => { - this.emitLine(onFirst ? "{" : ",", " ", name, " : ", this.elmProperty(p)); + this.emitLine( + onFirst ? "{" : ",", + " ", + name, + " : ", + this.elmProperty(p), + ); onFirst = false; }); if (onFirst) { @@ -286,7 +396,7 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine("type ", enumName); this.indent(() => { let onFirst = true; - this.forEachEnumCase(e, "none", name => { + this.forEachEnumCase(e, "none", (name) => { const equalsOrPipe = onFirst ? "=" : "|"; this.emitLine(equalsOrPipe, " ", name); onFirst = false; @@ -299,12 +409,18 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine("type ", unionName); this.indent(() => { let onFirst = true; - this.forEachUnionMember(u, null, "none", null, (constructor, t) => { + this.forEachUnionMember(u, null, "none", null, (name, t) => { const equalsOrPipe = onFirst ? "=" : "|"; if (t.kind === "null") { - this.emitLine(equalsOrPipe, " ", constructor); + this.emitLine(equalsOrPipe, " ", name); } else { - this.emitLine(equalsOrPipe, " ", constructor, " ", parenIfNeeded(this.elmType(t))); + this.emitLine( + equalsOrPipe, + " ", + name, + " ", + parenIfNeeded(this.elmType(t)), + ); } onFirst = false; @@ -313,15 +429,26 @@ export class ElmRenderer extends ConvenienceRenderer { } private emitTopLevelFunctions(t: Type, topLevelName: Name): void { - const { encoder, decoder } = defined(this._topLevelDependents.get(topLevelName)); + const { encoder, decoder } = defined( + this._topLevelDependents.get(topLevelName), + ); if (this.namedTypeToNameForTopLevel(t) === undefined) { this.emitLine(defined(decoder), " : Jdec.Decoder ", topLevelName); - this.emitLine(defined(decoder), " = ", this.decoderNameForType(t).source); + this.emitLine( + defined(decoder), + " = ", + this.decoderNameForType(t).source, + ); this.ensureBlankLine(); } this.emitLine(encoder, " : ", topLevelName, " -> String"); - this.emitLine(encoder, " r = Jenc.encode 0 (", this.encoderNameForType(t).source, " r)"); + this.emitLine( + encoder, + " r = Jenc.encode 0 (", + this.encoderNameForType(t).source, + " r)", + ); } private emitClassFunctions(c: ClassType, className: Name): void { @@ -332,9 +459,19 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine("Jpipe.decode ", className); this.indent(() => { this.forEachClassProperty(c, "none", (_, jsonName, p) => { - const propDecoder = parenIfNeeded(this.decoderNameForProperty(p)); + const propDecoder = parenIfNeeded( + this.decoderNameForProperty(p), + ); const { reqOrOpt, fallback } = requiredOrOptional(p); - this.emitLine("|> ", reqOrOpt, ' "', stringEscape(jsonName), '" ', propDecoder, fallback); + this.emitLine( + "|> ", + reqOrOpt, + ' "', + stringEscape(jsonName), + '" ', + propDecoder, + fallback, + ); }); }); }); @@ -350,7 +487,16 @@ export class ElmRenderer extends ConvenienceRenderer { this.forEachClassProperty(c, "none", (name, jsonName, p) => { const bracketOrComma = onFirst ? "[" : ","; const propEncoder = this.encoderNameForProperty(p).source; - this.emitLine(bracketOrComma, ' ("', stringEscape(jsonName), '", ', propEncoder, " x.", name, ")"); + this.emitLine( + bracketOrComma, + ' ("', + stringEscape(jsonName), + '", ', + propEncoder, + " x.", + name, + ")", + ); onFirst = false; }); if (onFirst) { @@ -374,9 +520,18 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine("case str of"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine('"', stringEscape(jsonName), '" -> Jdec.succeed ', name); + this.emitLine( + '"', + stringEscape(jsonName), + '" -> Jdec.succeed ', + name, + ); }); - this.emitLine('somethingElse -> Jdec.fail <| "Invalid ', enumName, ': " ++ somethingElse'); + this.emitLine( + 'somethingElse -> Jdec.fail <| "Invalid ', + enumName, + ': " ++ somethingElse', + ); }); }); this.emitLine(")"); @@ -389,7 +544,12 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine(encoderName, " x = case x of"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine(name, ' -> Jenc.string "', stringEscape(jsonName), '"'); + this.emitLine( + name, + ' -> Jenc.string "', + stringEscape(jsonName), + '"', + ); }); }); } @@ -399,9 +559,11 @@ export class ElmRenderer extends ConvenienceRenderer { function sortOrder(_: Name, t: Type): string { if (t.kind === "array") { return " array"; - } else if (t.kind === "double") { + } + if (t.kind === "double") { return " xdouble"; - } else if (t.isPrimitive()) { + } + if (t.isPrimitive()) { return " " + t.kind; } @@ -415,17 +577,31 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine("Jdec.oneOf"); this.indent(() => { let onFirst = true; - this.forEachUnionMember(u, null, "none", sortOrder, (constructor, t) => { - const bracketOrComma = onFirst ? "[" : ","; - if (t.kind === "null") { - this.emitLine(bracketOrComma, " Jdec.null ", constructor); - } else { - const decoder = parenIfNeeded(this.decoderNameForType(t)); - this.emitLine(bracketOrComma, " Jdec.map ", constructor, " ", decoder); - } - - onFirst = false; - }); + this.forEachUnionMember( + u, + null, + "none", + sortOrder, + (name, t) => { + const bracketOrComma = onFirst ? "[" : ","; + if (t.kind === "null") { + this.emitLine(bracketOrComma, " Jdec.null ", name); + } else { + const decoder = parenIfNeeded( + this.decoderNameForType(t), + ); + this.emitLine( + bracketOrComma, + " Jdec.map ", + name, + " ", + decoder, + ); + } + + onFirst = false; + }, + ); this.emitLine("]"); }); }); @@ -435,12 +611,12 @@ export class ElmRenderer extends ConvenienceRenderer { this.emitLine(encoderName, " : ", unionName, " -> Jenc.Value"); this.emitLine(encoderName, " x = case x of"); this.indent(() => { - this.forEachUnionMember(u, null, "none", sortOrder, (constructor, t) => { + this.forEachUnionMember(u, null, "none", sortOrder, (name, t) => { if (t.kind === "null") { - this.emitLine(constructor, " -> Jenc.null"); + this.emitLine(name, " -> Jenc.null"); } else { const encoder = this.encoderNameForType(t).source; - this.emitLine(constructor, " y -> ", encoder, " y"); + this.emitLine(name, " y -> ", encoder, " y"); } }); }); @@ -450,7 +626,9 @@ export class ElmRenderer extends ConvenienceRenderer { const exports: Sourcelike[] = []; const topLevelDecoders: Sourcelike[] = []; this.forEachTopLevel("none", (_, name) => { - let { encoder, decoder } = defined(this._topLevelDependents.get(name)); + let { encoder, decoder } = defined( + this._topLevelDependents.get(name), + ); if (decoder === undefined) { decoder = defined(this._namedTypeDependents.get(name)).decoder; } @@ -478,14 +656,14 @@ export class ElmRenderer extends ConvenienceRenderer { "", "add these imports", "", - " import Json.Decode exposing (decodeString)`);" + " import Json.Decode exposing (decodeString)`);", ]); this.emitLine( "-- import ", this._options.moduleName, " exposing (", arrayIntercalate(", ", topLevelDecoders), - ")" + ")", ); this.emitMultiline(`-- -- and you're off to the races with @@ -493,7 +671,9 @@ export class ElmRenderer extends ConvenienceRenderer { this.forEachTopLevel("none", (_, name) => { let { decoder } = defined(this._topLevelDependents.get(name)); if (decoder === undefined) { - decoder = defined(this._namedTypeDependents.get(name)).decoder; + decoder = defined( + this._namedTypeDependents.get(name), + ).decoder; } this.emitLine("-- decodeString ", decoder, " myJsonString"); @@ -525,37 +705,58 @@ import Dict exposing (Dict, map, toList)`); this.forEachTopLevel( "leading-and-interposing", - (t: Type, topLevelName: Name) => this.emitTopLevelDefinition(t, topLevelName), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t: Type, topLevelName: Name) => + this.emitTopLevelDefinition(t, topLevelName), + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitClassDefinition(c, className), - (e: EnumType, enumName: Name) => this.emitEnumDefinition(e, enumName), - (u: UnionType, unionName: Name) => this.emitUnionDefinition(u, unionName) + (c: ClassType, className: Name) => + this.emitClassDefinition(c, className), + (e: EnumType, enumName: Name) => + this.emitEnumDefinition(e, enumName), + (u: UnionType, unionName: Name) => + this.emitUnionDefinition(u, unionName), ); if (this._options.justTypes) return; this.ensureBlankLine(); this.emitLine("-- decoders and encoders"); - this.forEachTopLevel("leading-and-interposing", (t: Type, topLevelName: Name) => - this.emitTopLevelFunctions(t, topLevelName) + this.forEachTopLevel( + "leading-and-interposing", + (t: Type, topLevelName: Name) => + this.emitTopLevelFunctions(t, topLevelName), ); this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitClassFunctions(c, className), - (e: EnumType, enumName: Name) => this.emitEnumFunctions(e, enumName), - (u: UnionType, unionName: Name) => this.emitUnionFunctions(u, unionName) + (c: ClassType, className: Name) => + this.emitClassFunctions(c, className), + (e: EnumType, enumName: Name) => + this.emitEnumFunctions(e, enumName), + (u: UnionType, unionName: Name) => + this.emitUnionFunctions(u, unionName), ); this.ensureBlankLine(); this.emitLine("--- encoder helpers"); this.ensureBlankLine(); - this.emitLine("make", this.arrayType, "Encoder : (a -> Jenc.Value) -> ", this.arrayType, " a -> Jenc.Value"); + this.emitLine( + "make", + this.arrayType, + "Encoder : (a -> Jenc.Value) -> ", + this.arrayType, + " a -> Jenc.Value", + ); this.emitLine("make", this.arrayType, "Encoder f arr ="); this.indent(() => { - this.emitLine("Jenc.", decapitalize(this.arrayType), " (", this.arrayType, ".map f arr)"); + this.emitLine( + "Jenc.", + decapitalize(this.arrayType), + " (", + this.arrayType, + ".map f arr)", + ); }); this.ensureBlankLine(); this.emitMultiline(`makeDictEncoder : (a -> Jenc.Value) -> Dict String a -> Jenc.Value diff --git a/packages/quicktype-core/src/language/Elm/constants.ts b/packages/quicktype-core/src/language/Elm/constants.ts index e7a331f86..5b3d11973 100644 --- a/packages/quicktype-core/src/language/Elm/constants.ts +++ b/packages/quicktype-core/src/language/Elm/constants.ts @@ -36,5 +36,5 @@ export const forbiddenNames = [ "True", "False", "String", - "Float" + "Float", ] as const; diff --git a/packages/quicktype-core/src/language/Elm/language.ts b/packages/quicktype-core/src/language/Elm/language.ts index d77d3b332..7fc113618 100644 --- a/packages/quicktype-core/src/language/Elm/language.ts +++ b/packages/quicktype-core/src/language/Elm/language.ts @@ -1,7 +1,12 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { ElmRenderer } from "./ElmRenderer"; @@ -12,21 +17,28 @@ export const elmOptions = { "Use Array or List", { array: false, - list: true + list: true, } as const, - "array" + "array", ), // FIXME: Do this via a configurable named eventually. - moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") + moduleName: new StringOption( + "module", + "Generated module name", + "NAME", + "QuickType", + ), }; export const elmLanguageConfig = { displayName: "Elm", names: ["elm"], - extension: "elm" + extension: "elm", } as const; -export class ElmTargetLanguage extends TargetLanguage { +export class ElmTargetLanguage extends TargetLanguage< + typeof elmLanguageConfig +> { public constructor() { super(elmLanguageConfig); } @@ -43,7 +55,14 @@ export class ElmTargetLanguage extends TargetLanguage return true; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): ElmRenderer { - return new ElmRenderer(this, renderContext, getOptionValues(elmOptions, untypedOptionValues)); + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): ElmRenderer { + return new ElmRenderer( + this, + renderContext, + getOptionValues(elmOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/Elm/utils.ts b/packages/quicktype-core/src/language/Elm/utils.ts index 51f9d9628..31cb0b622 100644 --- a/packages/quicktype-core/src/language/Elm/utils.ts +++ b/packages/quicktype-core/src/language/Elm/utils.ts @@ -8,12 +8,14 @@ import { isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, legalizeCharacters, - splitIntoWords + splitIntoWords, } from "../../support/Strings"; import { type ClassProperty, UnionType } from "../../Type"; import { nullableFromUnion } from "../../Type/TypeUtils"; -const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); +const legalizeName = legalizeCharacters( + (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), +); function elmNameStyle(original: string, upper: boolean): string { const words = splitIntoWords(original); @@ -25,12 +27,16 @@ function elmNameStyle(original: string, upper: boolean): string { upper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", - isLetterOrUnderscore + isLetterOrUnderscore, ); } -export const upperNamingFunction = funPrefixNamer("upper", n => elmNameStyle(n, true)); -export const lowerNamingFunction = funPrefixNamer("lower", n => elmNameStyle(n, false)); +export const upperNamingFunction = funPrefixNamer("upper", (n) => + elmNameStyle(n, true), +); +export const lowerNamingFunction = funPrefixNamer("lower", (n) => + elmNameStyle(n, false), +); interface RequiredOrOptional { fallback: string; @@ -43,7 +49,10 @@ export function requiredOrOptional(p: ClassProperty): RequiredOrOptional { } const t = p.type; - if (p.isOptional || (t instanceof UnionType && nullableFromUnion(t) !== null)) { + if ( + p.isOptional || + (t instanceof UnionType && nullableFromUnion(t) !== null) + ) { return optional(" Nothing"); } diff --git a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts index a37eadb56..7dccdb039 100644 --- a/packages/quicktype-core/src/language/Golang/GolangRenderer.ts +++ b/packages/quicktype-core/src/language/Golang/GolangRenderer.ts @@ -1,17 +1,37 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; import { camelCase, stringEscape } from "../../support/Strings"; import { assert, defined } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type TypeKind, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; - -import { type goOptions } from "./language"; -import { canOmitEmpty, compoundTypeKinds, isValueType, namingFunction, primitiveValueTypeKinds } from "./utils"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + type ClassProperty, + type ClassType, + type EnumType, + type Type, + type TypeKind, + UnionType, +} from "../../Type"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; + +import type { goOptions } from "./language"; +import { + canOmitEmpty, + compoundTypeKinds, + isValueType, + namingFunction, + primitiveValueTypeKinds, +} from "./utils"; export class GoRenderer extends ConvenienceRenderer { private readonly _topLevelUnmarshalNames = new Map(); @@ -21,7 +41,7 @@ export class GoRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -46,11 +66,14 @@ export class GoRenderer extends ConvenienceRenderer { return true; } - protected makeTopLevelDependencyNames(_: Type, topLevelName: Name): DependencyName[] { + protected makeTopLevelDependencyNames( + _: Type, + topLevelName: Name, + ): DependencyName[] { const unmarshalName = new DependencyName( namingFunction, topLevelName.order, - lookup => `unmarshal_${lookup(topLevelName)}` + (lookup) => `unmarshal_${lookup(topLevelName)}`, ); this._topLevelUnmarshalNames.set(topLevelName, unmarshalName); return [unmarshalName]; @@ -62,7 +85,10 @@ export class GoRenderer extends ConvenienceRenderer { return; } - assert(this._currentFilename === undefined, "Previous file wasn't finished: " + this._currentFilename); + assert( + this._currentFilename === undefined, + `Previous file wasn't finished: ${this._currentFilename}`, + ); this._currentFilename = `${this.sourcelikeToString(basename)}.go`; this.initializeEmitContextForFilename(this._currentFilename); } @@ -95,9 +121,9 @@ export class GoRenderer extends ConvenienceRenderer { const goType = this.goType(t, withIssues); if (isValueType(t)) { return ["*", goType]; - } else { - return goType; } + + return goType; } private propertyGoType(cp: ClassProperty): Sourcelike { @@ -116,15 +142,25 @@ export class GoRenderer extends ConvenienceRenderer { private goType(t: Type, withIssues = false): Sourcelike { return matchType( t, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "interface{}"), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "interface{}"), - _boolType => "bool", - _integerType => "int64", - _doubleType => "float64", - _stringType => "string", - arrayType => ["[]", this.goType(arrayType.items, withIssues)], - classType => this.nameForNamedType(classType), - mapType => { + (_anyType) => + maybeAnnotated( + withIssues, + anyTypeIssueAnnotation, + "interface{}", + ), + (_nullType) => + maybeAnnotated( + withIssues, + nullTypeIssueAnnotation, + "interface{}", + ), + (_boolType) => "bool", + (_integerType) => "int64", + (_doubleType) => "float64", + (_stringType) => "string", + (arrayType) => ["[]", this.goType(arrayType.items, withIssues)], + (classType) => this.nameForNamedType(classType), + (mapType) => { let valueSource: Sourcelike; const v = mapType.values; if (v instanceof UnionType && nullableFromUnion(v) === null) { @@ -135,19 +171,20 @@ export class GoRenderer extends ConvenienceRenderer { return ["map[string]", valueSource]; }, - enumType => this.nameForNamedType(enumType), - unionType => { + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.nullableGoType(nullable, withIssues); + if (nullable !== null) + return this.nullableGoType(nullable, withIssues); return this.nameForNamedType(unionType); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "time.Time"; } return "string"; - } + }, ); } @@ -161,12 +198,20 @@ export class GoRenderer extends ConvenienceRenderer { this.leadingComments === undefined ) { this.emitLineOnce( - "// Code generated from JSON Schema using quicktype. DO NOT EDIT." + "// Code generated from JSON Schema using quicktype. DO NOT EDIT.", + ); + this.emitLineOnce( + "// To parse and unparse this JSON data, add this code to your project and do:", ); - this.emitLineOnce("// To parse and unparse this JSON data, add this code to your project and do:"); this.emitLineOnce("//"); const ref = modifySource(camelCase, name); - this.emitLineOnce("// ", ref, ", err := ", defined(this._topLevelUnmarshalNames.get(name)), "(bytes)"); + this.emitLineOnce( + "// ", + ref, + ", err := ", + defined(this._topLevelUnmarshalNames.get(name)), + "(bytes)", + ); this.emitLineOnce("// bytes, err = ", ref, ".Marshal()"); } @@ -177,14 +222,18 @@ export class GoRenderer extends ConvenienceRenderer { this.emitLine("type ", name, " ", this.goType(t)); } - if (this._options.justTypes || this._options.justTypesAndPackage) return; + if (this._options.justTypes || this._options.justTypesAndPackage) + return; this.ensureBlankLine(); - this.emitFunc([unmarshalName, "(data []byte) (", name, ", error)"], () => { - this.emitLine("var r ", name); - this.emitLine("err := json.Unmarshal(data, &r)"); - this.emitLine("return r, err"); - }); + this.emitFunc( + [unmarshalName, "(data []byte) (", name, ", error)"], + () => { + this.emitLine("var r ", name); + this.emitLine("err := json.Unmarshal(data, &r)"); + this.emitLine("return r, err"); + }, + ); this.ensureBlankLine(); this.emitFunc(["(r *", name, ") Marshal() ([]byte, error)"], () => { this.emitLine("return json.Marshal(r)"); @@ -194,33 +243,39 @@ export class GoRenderer extends ConvenienceRenderer { private emitClass(c: ClassType, className: Name): void { this.startFile(className); - let columns: Sourcelike[][] = []; + const columns: Sourcelike[][] = []; const usedTypes = new Set(); this.forEachClassProperty(c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); const docStrings = - description !== undefined && description.length > 0 ? description.map(d => "// " + d) : []; + description !== undefined && description.length > 0 + ? description.map((d) => "// " + d) + : []; const goType = this.propertyGoType(p); - const omitEmpty = canOmitEmpty(p, this._options.omitEmpty) ? ",omitempty" : []; + const omitEmpty = canOmitEmpty(p, this._options.omitEmpty) + ? ",omitempty" + : []; - docStrings.forEach(doc => columns.push([doc])); + docStrings.forEach((doc) => columns.push([doc])); const tags = this._options.fieldTags .split(",") - .map(tag => tag + ':"' + stringEscape(jsonName) + omitEmpty + '"') + .map((tag) => `${tag}:"${stringEscape(jsonName)}${omitEmpty}"`) .join(" "); columns.push([ [name, " "], [goType, " "], - ["`", tags, "`"] + ["`", tags, "`"], ]); usedTypes.add(goType.toString()); }); this.emitPackageDefinitons( false, - usedTypes.has("time.Time") || usedTypes.has("*,time.Time") || usedTypes.has("[],time.Time") + usedTypes.has("time.Time") || + usedTypes.has("*,time.Time") || + usedTypes.has("[],time.Time") ? new Set(["time"]) - : undefined + : undefined, ); this.emitDescription(this.descriptionForType(c)); this.emitStruct(className, columns); @@ -234,11 +289,11 @@ export class GoRenderer extends ConvenienceRenderer { this.emitLine("type ", enumName, " string"); this.ensureBlankLine(); this.emitLine("const ("); - let columns: Sourcelike[][] = []; + const columns: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, jsonName) => { columns.push([ [name, " "], - [enumName, ' = "', stringEscape(jsonName), '"'] + [enumName, ' = "', stringEscape(jsonName), '"'], ]); }); this.indent(() => this.emitTable(columns)); @@ -255,11 +310,15 @@ export class GoRenderer extends ConvenienceRenderer { const ifMember: ( kind: TypeKind, ifNotMember: U, - f: (t: Type, fieldName: Name, goType: Sourcelike) => T + f: (t: Type, fieldName: Name, goType: Sourcelike) => T, ) => T | U = (kind, ifNotMember, f) => { const maybeType = u.findMember(kind); if (maybeType === undefined) return ifNotMember; - return f(maybeType, this.nameForUnionMember(u, maybeType), this.goType(maybeType)); + return f( + maybeType, + this.nameForUnionMember(u, maybeType), + this.goType(maybeType), + ); }; const maybeAssignNil = (kind: TypeKind): void => { @@ -270,20 +329,27 @@ export class GoRenderer extends ConvenienceRenderer { const makeArgs = ( primitiveArg: (fieldName: Sourcelike) => Sourcelike, - compoundArg: (isClass: boolean, fieldName: Sourcelike) => Sourcelike + compoundArg: ( + isClass: boolean, + fieldName: Sourcelike, + ) => Sourcelike, ): Sourcelike => { const args: Sourcelike = []; for (const kind of primitiveValueTypeKinds) { args.push( - ifMember(kind, "nil", (_1, fieldName, _2) => primitiveArg(fieldName)), - ", " + ifMember(kind, "nil", (_1, fieldName, _2) => + primitiveArg(fieldName), + ), + ", ", ); } for (const kind of compoundTypeKinds) { args.push( - ifMember(kind, "false, nil", (t, fieldName, _) => compoundArg(t.kind === "class", fieldName)), - ", " + ifMember(kind, "false, nil", (t, fieldName, _) => + compoundArg(t.kind === "class", fieldName), + ), + ", ", ); } @@ -291,7 +357,7 @@ export class GoRenderer extends ConvenienceRenderer { return args; }; - let columns: Sourcelike[][] = []; + const columns: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { const goType = this.nullableGoType(t, true); columns.push([[fieldName, " "], goType]); @@ -299,70 +365,91 @@ export class GoRenderer extends ConvenienceRenderer { this.emitDescription(this.descriptionForType(u)); this.emitStruct(unionName, columns); - if (this._options.justTypes || this._options.justTypesAndPackage) return; + if (this._options.justTypes || this._options.justTypesAndPackage) + return; this.ensureBlankLine(); - this.emitFunc(["(x *", unionName, ") UnmarshalJSON(data []byte) error"], () => { - for (const kind of compoundTypeKinds) { - maybeAssignNil(kind); - } - - ifMember("class", undefined, (_1, _2, goType) => { - this.emitLine("var c ", goType); - }); - const args = makeArgs( - fn => ["&x.", fn], - (isClass, fn) => { - if (isClass) { - return "true, &c"; - } else { - return ["true, &x.", fn]; - } + this.emitFunc( + ["(x *", unionName, ") UnmarshalJSON(data []byte) error"], + () => { + for (const kind of compoundTypeKinds) { + maybeAssignNil(kind); } - ); - this.emitLine("object, err := unmarshalUnion(data, ", args, ")"); - this.emitBlock("if err != nil", () => { - this.emitLine("return err"); - }); - this.emitBlock("if object", () => { - ifMember("class", undefined, (_1, fieldName, _2) => { - this.emitLine("x.", fieldName, " = &c"); + + ifMember("class", undefined, (_1, _2, goType) => { + this.emitLine("var c ", goType); }); - }); - this.emitLine("return nil"); - }); + const args = makeArgs( + (fn) => ["&x.", fn], + (isClass, fn) => (isClass ? "true, &c" : ["true, &x.", fn]), + ); + this.emitLine( + "object, err := unmarshalUnion(data, ", + args, + ")", + ); + this.emitBlock("if err != nil", () => { + this.emitLine("return err"); + }); + this.emitBlock("if object", () => { + ifMember("class", undefined, (_1, fieldName, _2) => { + this.emitLine("x.", fieldName, " = &c"); + }); + }); + this.emitLine("return nil"); + }, + ); this.ensureBlankLine(); - this.emitFunc(["(x *", unionName, ") MarshalJSON() ([]byte, error)"], () => { - const args = makeArgs( - fn => ["x.", fn], - (_, fn) => ["x.", fn, " != nil, x.", fn] - ); - this.emitLine("return marshalUnion(", args, ")"); - }); + this.emitFunc( + ["(x *", unionName, ") MarshalJSON() ([]byte, error)"], + () => { + const args = makeArgs( + (fn) => ["x.", fn], + (_, fn) => ["x.", fn, " != nil, x.", fn], + ); + this.emitLine("return marshalUnion(", args, ")"); + }, + ); this.endFile(); } private emitSingleFileHeaderComments(): void { - this.emitLineOnce("// Code generated from JSON Schema using quicktype. DO NOT EDIT."); - this.emitLineOnce("// To parse and unparse this JSON data, add this code to your project and do:"); + this.emitLineOnce( + "// Code generated from JSON Schema using quicktype. DO NOT EDIT.", + ); + this.emitLineOnce( + "// To parse and unparse this JSON data, add this code to your project and do:", + ); this.forEachTopLevel("none", (_: Type, name: Name) => { this.emitLine("//"); const ref = modifySource(camelCase, name); - this.emitLine("// ", ref, ", err := ", defined(this._topLevelUnmarshalNames.get(name)), "(bytes)"); + this.emitLine( + "// ", + ref, + ", err := ", + defined(this._topLevelUnmarshalNames.get(name)), + "(bytes)", + ); this.emitLine("// bytes, err = ", ref, ".Marshal()"); }); } - private emitPackageDefinitons(includeJSONEncodingImport: boolean, imports: Set = new Set()): void { + private emitPackageDefinitons( + includeJSONEncodingImport: boolean, + imports: Set = new Set(), + ): void { if (!this._options.justTypes || this._options.justTypesAndPackage) { this.ensureBlankLine(); - const packageDeclaration = "package " + this._options.packageName; + const packageDeclaration = `package ${this._options.packageName}`; this.emitLineOnce(packageDeclaration); this.ensureBlankLine(); } if (!this._options.justTypes && !this._options.justTypesAndPackage) { - if (this.haveNamedUnions && this._options.multiFileOutput === false) { + if ( + this.haveNamedUnions && + this._options.multiFileOutput === false + ) { imports.add("bytes"); imports.add("errors"); } @@ -376,13 +463,15 @@ export class GoRenderer extends ConvenienceRenderer { } private emitImports(imports: Set): void { - const sortedImports = Array.from(imports).sort((a, b) => a.localeCompare(b)); + const sortedImports = Array.from(imports).sort((a, b) => + a.localeCompare(b), + ); if (sortedImports.length === 0) { return; } - sortedImports.forEach(packageName => { + sortedImports.forEach((packageName) => { this.emitLineOnce(`import "${packageName}"`); }); this.ensureBlankLine(); @@ -399,8 +488,7 @@ export class GoRenderer extends ConvenienceRenderer { this.emitPackageDefinitons(true, imports); this.ensureBlankLine(); - this - .emitMultiline(`func unmarshalUnion(data []byte, pi **int64, pf **float64, pb **bool, ps **string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) (bool, error) { + this.emitMultiline(`func unmarshalUnion(data []byte, pi **int64, pf **float64, pb **bool, ps **string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) (bool, error) { if pi != nil { *pi = nil } @@ -480,7 +568,6 @@ export class GoRenderer extends ConvenienceRenderer { return false, errors.New("Cannot handle delimiter") } return false, errors.New("Cannot unmarshal union") - } func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) ([]byte, error) { @@ -531,13 +618,23 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, this.forEachTopLevel( "leading-and-interposing", (t, name) => this.emitTopLevel(t, name), - t => - !(this._options.justTypes || this._options.justTypesAndPackage) || - this.namedTypeToNameForTopLevel(t) === undefined + (t) => + !( + this._options.justTypes || this._options.justTypesAndPackage + ) || this.namedTypeToNameForTopLevel(t) === undefined, + ); + this.forEachObject( + "leading-and-interposing", + (c: ClassType, className: Name) => this.emitClass(c, className), + ); + this.forEachEnum( + "leading-and-interposing", + (u: EnumType, enumName: Name) => this.emitEnum(u, enumName), + ); + this.forEachUnion( + "leading-and-interposing", + (u: UnionType, unionName: Name) => this.emitUnion(u, unionName), ); - this.forEachObject("leading-and-interposing", (c: ClassType, className: Name) => this.emitClass(c, className)); - this.forEachEnum("leading-and-interposing", (u: EnumType, enumName: Name) => this.emitEnum(u, enumName)); - this.forEachUnion("leading-and-interposing", (u: UnionType, unionName: Name) => this.emitUnion(u, unionName)); if (this._options.justTypes || this._options.justTypesAndPackage) { return; @@ -548,15 +645,21 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, private collectAllImports(): Set { let imports = new Set(); - this.forEachObject("leading-and-interposing", (c: ClassType, _className: Name) => { - const classImports = this.collectClassImports(c); - imports = new Set([...imports, ...classImports]); - }); + this.forEachObject( + "leading-and-interposing", + (c: ClassType, _className: Name) => { + const classImports = this.collectClassImports(c); + imports = new Set([...imports, ...classImports]); + }, + ); - this.forEachUnion("leading-and-interposing", (u: UnionType, _unionName: Name) => { - const unionImports = this.collectUnionImports(u); - imports = new Set([...imports, ...unionImports]); - }); + this.forEachUnion( + "leading-and-interposing", + (u: UnionType, _unionName: Name) => { + const unionImports = this.collectUnionImports(u); + imports = new Set([...imports, ...unionImports]); + }, + ); return imports; } @@ -573,7 +676,7 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, }); const imports = new Set(); - usedTypes.forEach(k => { + usedTypes.forEach((k) => { const typeImport = mapping.get(k); if (typeImport) { imports.add(typeImport); @@ -595,14 +698,14 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, }); const imports = new Set(); - usedTypes.forEach(k => { + for (const k of usedTypes) { const typeImport = mapping.get(k); if (!typeImport) { - return; + continue; } imports.add(typeImport); - }); + } return imports; } diff --git a/packages/quicktype-core/src/language/Golang/language.ts b/packages/quicktype-core/src/language/Golang/language.ts index bc295869d..8c3a07409 100644 --- a/packages/quicktype-core/src/language/Golang/language.ts +++ b/packages/quicktype-core/src/language/Golang/language.ts @@ -1,32 +1,59 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { GoRenderer } from "./GolangRenderer"; export const goOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), - justTypesAndPackage: new BooleanOption("just-types-and-package", "Plain types with package only", false), - packageName: new StringOption("package", "Generated package name", "NAME", "main"), - multiFileOutput: new BooleanOption("multi-file-output", "Renders each top-level object in its own Go file", false), - fieldTags: new StringOption("field-tags", "list of tags which should be generated for fields", "TAGS", "json"), + justTypesAndPackage: new BooleanOption( + "just-types-and-package", + "Plain types with package only", + false, + ), + packageName: new StringOption( + "package", + "Generated package name", + "NAME", + "main", + ), + multiFileOutput: new BooleanOption( + "multi-file-output", + "Renders each top-level object in its own Go file", + false, + ), + fieldTags: new StringOption( + "field-tags", + "list of tags which should be generated for fields", + "TAGS", + "json", + ), omitEmpty: new BooleanOption( "omit-empty", 'If set, all non-required objects will be tagged with ",omitempty"', - false - ) + false, + ), }; const golangLanguageConfig = { displayName: "Go", names: ["go", "golang"], - extension: "go" + extension: "go", } as const; -export class GoTargetLanguage extends TargetLanguage { +export class GoTargetLanguage extends TargetLanguage< + typeof golangLanguageConfig +> { public constructor() { super(golangLanguageConfig); } @@ -40,7 +67,8 @@ export class GoTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); mapping.set("date-time", "date-time"); return mapping; } @@ -49,8 +77,15 @@ export class GoTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): GoRenderer { + return new GoRenderer( + this, + renderContext, + getOptionValues(goOptions, untypedOptionValues), + ); } protected get defaultIndentation(): string { diff --git a/packages/quicktype-core/src/language/Golang/utils.ts b/packages/quicktype-core/src/language/Golang/utils.ts index ce67443af..b53ecd011 100644 --- a/packages/quicktype-core/src/language/Golang/utils.ts +++ b/packages/quicktype-core/src/language/Golang/utils.ts @@ -6,9 +6,9 @@ import { isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, legalizeCharacters, - splitIntoWords + splitIntoWords, } from "../../support/Strings"; -import { type ClassProperty, type Type, type TypeKind } from "../../Type"; +import type { ClassProperty, Type, TypeKind } from "../../Type"; export const namingFunction = funPrefixNamer("namer", goNameStyle); @@ -24,19 +24,32 @@ function goNameStyle(original: string): string { allUpperWordStyle, allUpperWordStyle, "", - isLetterOrUnderscore + isLetterOrUnderscore, ); } -export const primitiveValueTypeKinds: TypeKind[] = ["integer", "double", "bool", "string"]; +export const primitiveValueTypeKinds: TypeKind[] = [ + "integer", + "double", + "bool", + "string", +]; export const compoundTypeKinds: TypeKind[] = ["array", "class", "map", "enum"]; export function isValueType(t: Type): boolean { const kind = t.kind; - return primitiveValueTypeKinds.includes(kind) || kind === "class" || kind === "enum" || kind === "date-time"; + return ( + primitiveValueTypeKinds.includes(kind) || + kind === "class" || + kind === "enum" || + kind === "date-time" + ); } -export function canOmitEmpty(cp: ClassProperty, omitEmptyOption: boolean): boolean { +export function canOmitEmpty( + cp: ClassProperty, + omitEmptyOption: boolean, +): boolean { if (!cp.isOptional) return false; if (omitEmptyOption) return true; const t = cp.type; diff --git a/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts index a986ed24b..7ad2e7586 100644 --- a/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts +++ b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts @@ -1,24 +1,39 @@ import { mapContains } from "collection-utils"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { type Name, type Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import type { Name, Namer } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import { + type MultiWord, + type Sourcelike, + multiWord, + parenIfNeeded, + singleWord, +} from "../../Source"; import { stringEscape } from "../../support/Strings"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; +import type { TargetLanguage } from "../../TargetLanguage"; +import type { + ClassProperty, + ClassType, + EnumType, + Type, + UnionType, +} from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenNames } from "./constants"; -import { type haskellOptions } from "./language"; +import type { haskellOptions } from "./language"; import { lowerNamingFunction, upperNamingFunction } from "./utils"; export class HaskellRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -35,7 +50,10 @@ export class HaskellRenderer extends ConvenienceRenderer { return lowerNamingFunction; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -59,9 +77,14 @@ export class HaskellRenderer extends ConvenienceRenderer { u: UnionType, unionName: Name, fieldType: Type, - lookup: (n: Name) => string + lookup: (n: Name) => string, ): string { - const fieldName = super.proposeUnionMemberName(u, unionName, fieldType, lookup); + const fieldName = super.proposeUnionMemberName( + u, + unionName, + fieldType, + lookup, + ); return `${fieldName}_in_${lookup(unionName)}`; } @@ -71,12 +94,14 @@ export class HaskellRenderer extends ConvenienceRenderer { protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { - this.emitComments([{ customLines: lines, lineStart: "{-| ", lineEnd: " -}" }]); + this.emitComments([ + { customLines: lines, lineStart: "{-| ", lineEnd: " -}" }, + ]); } else { this.emitCommentLines(lines, { firstLineStart: "{-| ", lineStart: "", - afterComment: "-}" + afterComment: "-}", }); } } @@ -84,23 +109,37 @@ export class HaskellRenderer extends ConvenienceRenderer { private haskellType(t: Type, noOptional = false): MultiWord { return matchType( t, - _anyType => multiWord(" ", "Maybe", "Text"), - _nullType => multiWord(" ", "Maybe", "Text"), - _boolType => singleWord("Bool"), - _integerType => singleWord("Int"), - _doubleType => singleWord("Float"), - _stringType => singleWord("Text"), - arrayType => { + (_anyType) => multiWord(" ", "Maybe", "Text"), + (_nullType) => multiWord(" ", "Maybe", "Text"), + (_boolType) => singleWord("Bool"), + (_integerType) => singleWord("Int"), + (_doubleType) => singleWord("Float"), + (_stringType) => singleWord("Text"), + (arrayType) => { if (this._options.useList) { - return multiWord("", "[", parenIfNeeded(this.haskellType(arrayType.items)), "]"); + return multiWord( + "", + "[", + parenIfNeeded(this.haskellType(arrayType.items)), + "]", + ); } - return multiWord(" ", "Vector", parenIfNeeded(this.haskellType(arrayType.items))); + return multiWord( + " ", + "Vector", + parenIfNeeded(this.haskellType(arrayType.items)), + ); }, - classType => singleWord(this.nameForNamedType(classType)), - mapType => multiWord(" ", "HashMap Text", parenIfNeeded(this.haskellType(mapType.values))), - enumType => singleWord(this.nameForNamedType(enumType)), - unionType => { + (classType) => singleWord(this.nameForNamedType(classType)), + (mapType) => + multiWord( + " ", + "HashMap Text", + parenIfNeeded(this.haskellType(mapType.values)), + ), + (enumType) => singleWord(this.nameForNamedType(enumType)), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableType = this.haskellType(nullable); @@ -109,32 +148,36 @@ export class HaskellRenderer extends ConvenienceRenderer { } return singleWord(this.nameForNamedType(unionType)); - } + }, ); } private haskellProperty(p: ClassProperty): Sourcelike { if (p.isOptional) { - return multiWord(" ", "Maybe", parenIfNeeded(this.haskellType(p.type, true))).source; - } else { - return this.haskellType(p.type).source; + return multiWord( + " ", + "Maybe", + parenIfNeeded(this.haskellType(p.type, true)), + ).source; } + + return this.haskellType(p.type).source; } private encoderNameForType(t: Type): MultiWord { return matchType( t, - _anyType => singleWord("String"), - _nullType => singleWord("Null"), - _boolType => singleWord("Bool"), - _integerType => singleWord("Number"), - _doubleType => singleWord("Number"), - _stringType => singleWord("String"), - _arrayType => singleWord("Array"), - _classType => singleWord("Object"), - _mapType => singleWord("Object"), - _enumType => singleWord("Object"), - _unionType => singleWord("Object") + (_anyType) => singleWord("String"), + (_nullType) => singleWord("Null"), + (_boolType) => singleWord("Bool"), + (_integerType) => singleWord("Number"), + (_doubleType) => singleWord("Number"), + (_stringType) => singleWord("String"), + (_arrayType) => singleWord("Array"), + (_classType) => singleWord("Object"), + (_mapType) => singleWord("Object"), + (_enumType) => singleWord("Object"), + (_unionType) => singleWord("Object"), ); } @@ -145,7 +188,10 @@ export class HaskellRenderer extends ConvenienceRenderer { private emitClassDefinition(c: ClassType, className: Name): void { let description = this.descriptionForType(c); this.forEachClassProperty(c, "none", (name, jsonName) => { - const propertyDescription = this.descriptionForClassProperty(c, jsonName); + const propertyDescription = this.descriptionForClassProperty( + c, + jsonName, + ); if (propertyDescription === undefined) return; if (description === undefined) { @@ -163,7 +209,13 @@ export class HaskellRenderer extends ConvenienceRenderer { this.indent(() => { let onFirst = true; this.forEachClassProperty(c, "none", (name, _jsonName, p) => { - this.emitLine(onFirst ? "{ " : ", ", name, className, " :: ", this.haskellProperty(p)); + this.emitLine( + onFirst ? "{ " : ", ", + name, + className, + " :: ", + this.haskellProperty(p), + ); onFirst = false; }); if (onFirst) { @@ -179,7 +231,7 @@ export class HaskellRenderer extends ConvenienceRenderer { this.emitLine("data ", enumName); this.indent(() => { let onFirst = true; - this.forEachEnumCase(e, "none", name => { + this.forEachEnumCase(e, "none", (name) => { const equalsOrPipe = onFirst ? "=" : "|"; this.emitLine(equalsOrPipe, " ", name, enumName); onFirst = false; @@ -193,12 +245,18 @@ export class HaskellRenderer extends ConvenienceRenderer { this.emitLine("data ", unionName); this.indent(() => { let onFirst = true; - this.forEachUnionMember(u, null, "none", null, (constructor, t) => { + this.forEachUnionMember(u, null, "none", null, (name, t) => { const equalsOrPipe = onFirst ? "=" : "|"; if (t.kind === "null") { - this.emitLine(equalsOrPipe, " ", constructor); + this.emitLine(equalsOrPipe, " ", name); } else { - this.emitLine(equalsOrPipe, " ", constructor, " ", parenIfNeeded(this.haskellType(t))); + this.emitLine( + equalsOrPipe, + " ", + name, + " ", + parenIfNeeded(this.haskellType(t)), + ); } onFirst = false; @@ -221,8 +279,8 @@ export class HaskellRenderer extends ConvenienceRenderer { } private emitClassEncoderInstance(c: ClassType, className: Name): void { - let classProperties: Array = []; - this.forEachClassProperty(c, "none", name => { + const classProperties: Array = []; + this.forEachClassProperty(c, "none", (name) => { classProperties.push(" "); classProperties.push(name); classProperties.push(className); @@ -238,7 +296,14 @@ export class HaskellRenderer extends ConvenienceRenderer { this.emitLine("object"); let onFirst = true; this.forEachClassProperty(c, "none", (name, jsonName) => { - this.emitLine(onFirst ? "[ " : ", ", '"', stringEscape(jsonName), '" .= ', name, className); + this.emitLine( + onFirst ? "[ " : ", ", + '"', + stringEscape(jsonName), + '" .= ', + name, + className, + ); onFirst = false; }); if (onFirst) { @@ -263,7 +328,14 @@ export class HaskellRenderer extends ConvenienceRenderer { let onFirst = true; this.forEachClassProperty(c, "none", (_, jsonName, p) => { const operator = p.isOptional ? ".:?" : ".:"; - this.emitLine(onFirst ? "<$> " : "<*> ", "v ", operator, ' "', stringEscape(jsonName), '"'); + this.emitLine( + onFirst ? "<$> " : "<*> ", + "v ", + operator, + ' "', + stringEscape(jsonName), + '"', + ); onFirst = false; }); }); @@ -281,7 +353,14 @@ export class HaskellRenderer extends ConvenienceRenderer { this.emitLine("instance ToJSON ", enumName, " where"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine("toJSON ", name, enumName, ' = "', stringEscape(jsonName), '"'); + this.emitLine( + "toJSON ", + name, + enumName, + ' = "', + stringEscape(jsonName), + '"', + ); }); }); } @@ -294,7 +373,13 @@ export class HaskellRenderer extends ConvenienceRenderer { this.emitLine("where"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine('parseText "', stringEscape(jsonName), '" = return ', name, enumName); + this.emitLine( + 'parseText "', + stringEscape(jsonName), + '" = return ', + name, + enumName, + ); }); }); }); @@ -310,11 +395,11 @@ export class HaskellRenderer extends ConvenienceRenderer { private emitUnionEncoderInstance(u: UnionType, unionName: Name): void { this.emitLine("instance ToJSON ", unionName, " where"); this.indent(() => { - this.forEachUnionMember(u, null, "none", null, (constructor, t) => { + this.forEachUnionMember(u, null, "none", null, (name, t) => { if (t.kind === "null") { - this.emitLine("toJSON ", constructor, " = Null"); + this.emitLine("toJSON ", name, " = Null"); } else { - this.emitLine("toJSON (", constructor, " x) = toJSON x"); + this.emitLine("toJSON (", name, " x) = toJSON x"); } }); }); @@ -323,16 +408,16 @@ export class HaskellRenderer extends ConvenienceRenderer { private emitUnionDecoderInstance(u: UnionType, unionName: Name): void { this.emitLine("instance FromJSON ", unionName, " where"); this.indent(() => { - this.forEachUnionMember(u, null, "none", null, (constructor, t) => { + this.forEachUnionMember(u, null, "none", null, (name, t) => { if (t.kind === "null") { - this.emitLine("parseJSON Null = return ", constructor); + this.emitLine("parseJSON Null = return ", name); } else { this.emitLine( "parseJSON xs@(", this.encoderNameForType(t).source, " _) = (fmap ", - constructor, - " . parseJSON) xs" + name, + " . parseJSON) xs", ); } }); @@ -393,26 +478,35 @@ import Data.Text (Text)`); this.forEachTopLevel( "leading-and-interposing", - (t: Type, topLevelName: Name) => this.emitTopLevelDefinition(t, topLevelName), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t: Type, topLevelName: Name) => + this.emitTopLevelDefinition(t, topLevelName), + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitClassDefinition(c, className), - (e: EnumType, enumName: Name) => this.emitEnumDefinition(e, enumName), - (u: UnionType, unionName: Name) => this.emitUnionDefinition(u, unionName) + (c: ClassType, className: Name) => + this.emitClassDefinition(c, className), + (e: EnumType, enumName: Name) => + this.emitEnumDefinition(e, enumName), + (u: UnionType, unionName: Name) => + this.emitUnionDefinition(u, unionName), ); - this.forEachTopLevel("leading-and-interposing", (_: Type, topLevelName: Name) => - this.emitTopLevelFunctions(topLevelName) + this.forEachTopLevel( + "leading-and-interposing", + (_: Type, topLevelName: Name) => + this.emitTopLevelFunctions(topLevelName), ); this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitClassFunctions(c, className), - (e: EnumType, enumName: Name) => this.emitEnumFunctions(e, enumName), - (u: UnionType, unionName: Name) => this.emitUnionFunctions(u, unionName) + (c: ClassType, className: Name) => + this.emitClassFunctions(c, className), + (e: EnumType, enumName: Name) => + this.emitEnumFunctions(e, enumName), + (u: UnionType, unionName: Name) => + this.emitUnionFunctions(u, unionName), ); if (this._options.justTypes) return; diff --git a/packages/quicktype-core/src/language/Haskell/constants.ts b/packages/quicktype-core/src/language/Haskell/constants.ts index 5e09e6702..e4eee6e53 100644 --- a/packages/quicktype-core/src/language/Haskell/constants.ts +++ b/packages/quicktype-core/src/language/Haskell/constants.ts @@ -50,5 +50,5 @@ export const forbiddenNames = [ "Object", "Result", "Series", - "Error" + "Error", ] as const; diff --git a/packages/quicktype-core/src/language/Haskell/language.ts b/packages/quicktype-core/src/language/Haskell/language.ts index e7c35f9cf..58638b03b 100644 --- a/packages/quicktype-core/src/language/Haskell/language.ts +++ b/packages/quicktype-core/src/language/Haskell/language.ts @@ -1,7 +1,12 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { HaskellRenderer } from "./HaskellRenderer"; @@ -12,20 +17,27 @@ export const haskellOptions = { "Use Array or List", { array: false, - list: true + list: true, } as const, - "array" + "array", + ), + moduleName: new StringOption( + "module", + "Generated module name", + "NAME", + "QuickType", ), - moduleName: new StringOption("module", "Generated module name", "NAME", "QuickType") }; export const haskellLanguageConfig = { displayName: "Haskell", names: ["haskell"], - extension: "haskell" + extension: "haskell", } as const; -export class HaskellTargetLanguage extends TargetLanguage { +export class HaskellTargetLanguage extends TargetLanguage< + typeof haskellLanguageConfig +> { public constructor() { super(haskellLanguageConfig); } @@ -42,7 +54,14 @@ export class HaskellTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): HaskellRenderer { + return new HaskellRenderer( + this, + renderContext, + getOptionValues(haskellOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/Haskell/utils.ts b/packages/quicktype-core/src/language/Haskell/utils.ts index 3f4b1357f..d71067574 100644 --- a/packages/quicktype-core/src/language/Haskell/utils.ts +++ b/packages/quicktype-core/src/language/Haskell/utils.ts @@ -8,10 +8,12 @@ import { isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, legalizeCharacters, - splitIntoWords + splitIntoWords, } from "../../support/Strings"; -const legalizeName = legalizeCharacters(cp => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp)); +const legalizeName = legalizeCharacters( + (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), +); function haskellNameStyle(original: string, upper: boolean): string { const words = splitIntoWords(original); @@ -23,9 +25,13 @@ function haskellNameStyle(original: string, upper: boolean): string { upper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", - isLetterOrUnderscore + isLetterOrUnderscore, ); } -export const upperNamingFunction = funPrefixNamer("upper", n => haskellNameStyle(n, true)); -export const lowerNamingFunction = funPrefixNamer("lower", n => haskellNameStyle(n, false)); +export const upperNamingFunction = funPrefixNamer("upper", (n) => + haskellNameStyle(n, true), +); +export const lowerNamingFunction = funPrefixNamer("lower", (n) => + haskellNameStyle(n, false), +); diff --git a/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts b/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts index dced59411..2f2aca5d0 100644 --- a/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts +++ b/packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts @@ -2,14 +2,14 @@ import { iterableFirst, mapFirst } from "collection-utils"; import { addDescriptionToSchema } from "../../attributes/Description"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; -import { type Name, type Namer } from "../../Naming"; +import type { Name, Namer } from "../../Naming"; import { defined, panic } from "../../support/Support"; import { type EnumType, type ObjectType, type Type, type UnionType, - transformedStringTypeTargetTypeKindsMap + transformedStringTypeTargetTypeKindsMap, } from "../../Type"; import { matchTypeExhaustive } from "../../Type/TypeUtils"; @@ -51,7 +51,9 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { return this.schemaForType(first); } - return { anyOf: Array.from(types).map((t: Type) => this.schemaForType(t)) }; + return { + anyOf: Array.from(types).map((t: Type) => this.schemaForType(t)), + }; } private makeRef(t: Type): Schema { @@ -68,35 +70,42 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { private schemaForType(t: Type): Schema { const schema = matchTypeExhaustive( t, - _noneType => { + (_noneType) => { return panic("none type should have been replaced"); }, - _anyType => ({}), - _nullType => ({ type: "null" }), - _boolType => ({ type: "boolean" }), - _integerType => ({ type: "integer" }), - _doubleType => ({ type: "number" }), - _stringType => ({ type: "string" }), - arrayType => ({ type: "array", items: this.schemaForType(arrayType.items) }), - classType => this.makeRef(classType), - mapType => this.definitionForObject(mapType, undefined), - objectType => this.makeRef(objectType), - enumType => this.makeRef(enumType), - unionType => { + (_anyType) => ({}), + (_nullType) => ({ type: "null" }), + (_boolType) => ({ type: "boolean" }), + (_integerType) => ({ type: "integer" }), + (_doubleType) => ({ type: "number" }), + (_stringType) => ({ type: "string" }), + (arrayType) => ({ + type: "array", + items: this.schemaForType(arrayType.items), + }), + (classType) => this.makeRef(classType), + (mapType) => this.definitionForObject(mapType, undefined), + (objectType) => this.makeRef(objectType), + (enumType) => this.makeRef(enumType), + (unionType) => { if (this.unionNeedsName(unionType)) { return this.makeRef(unionType); - } else { - return this.definitionForUnion(unionType); } + + return this.definitionForUnion(unionType); }, - transformedStringType => { - const target = transformedStringTypeTargetTypeKindsMap.get(transformedStringType.kind); + (transformedStringType) => { + const target = transformedStringTypeTargetTypeKindsMap.get( + transformedStringType.kind, + ); if (target === undefined) { - return panic(`Unknown transformed string type ${transformedStringType.kind}`); + return panic( + `Unknown transformed string type ${transformedStringType.kind}`, + ); } return { type: "string", format: target.jsonSchema }; - } + }, ); if (schema.$ref === undefined) { this.addAttributesToSchema(t, schema); @@ -105,7 +114,10 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { return schema; } - private definitionForObject(o: ObjectType, title: string | undefined): Schema { + private definitionForObject( + o: ObjectType, + title: string | undefined, + ): Schema { let properties: Schema | undefined; let required: string[] | undefined; if (o.getProperties().size === 0) { @@ -117,7 +129,10 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { for (const [name, p] of o.getProperties()) { const prop = this.schemaForType(p.type); if (prop.description === undefined) { - addDescriptionToSchema(prop, this.descriptionForClassProperty(o, name)); + addDescriptionToSchema( + prop, + this.descriptionForClassProperty(o, name), + ); } props[name] = prop; @@ -131,13 +146,14 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { } const additional = o.getAdditionalProperties(); - const additionalProperties = additional !== undefined ? this.schemaForType(additional) : false; + const additionalProperties = + additional !== undefined ? this.schemaForType(additional) : false; const schema = { type: "object", additionalProperties, properties, required, - title + title, }; this.addAttributesToSchema(o, schema); return schema; @@ -161,8 +177,14 @@ export class JSONSchemaRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { // FIXME: Find a good way to do multiple top-levels. Maybe multiple files? - const topLevelType = this.topLevels.size === 1 ? this.schemaForType(defined(mapFirst(this.topLevels))) : {}; - const schema = Object.assign({ $schema: "http://json-schema.org/draft-06/schema#" }, topLevelType); + const topLevelType = + this.topLevels.size === 1 + ? this.schemaForType(defined(mapFirst(this.topLevels))) + : {}; + const schema = Object.assign( + { $schema: "http://json-schema.org/draft-06/schema#" }, + topLevelType, + ); const definitions: { [name: string]: Schema } = {}; this.forEachObject("none", (o: ObjectType, name: Name) => { const title = defined(this.names.get(name)); diff --git a/packages/quicktype-core/src/language/JSONSchema/language.ts b/packages/quicktype-core/src/language/JSONSchema/language.ts index 30e497e2e..6a371de56 100644 --- a/packages/quicktype-core/src/language/JSONSchema/language.ts +++ b/packages/quicktype-core/src/language/JSONSchema/language.ts @@ -1,17 +1,22 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { TargetLanguage } from "../../TargetLanguage"; -import { type StringTypeMapping, getNoStringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import { + type StringTypeMapping, + getNoStringTypeMapping, +} from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { JSONSchemaRenderer } from "./JSONSchemaRenderer"; export const JSONSchemaLanguageConfig = { displayName: "JSON Schema", names: ["schema", "json-schema"], - extension: "schema" + extension: "schema", } as const; -export class JSONSchemaTargetLanguage extends TargetLanguage { +export class JSONSchemaTargetLanguage extends TargetLanguage< + typeof JSONSchemaLanguageConfig +> { public constructor() { super(JSONSchemaLanguageConfig); } @@ -32,7 +37,10 @@ export class JSONSchemaTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + _untypedOptionValues: RendererOptions, + ): JSONSchemaRenderer { return new JSONSchemaRenderer(this, renderContext); } } diff --git a/packages/quicktype-core/src/language/JSONSchema/utils.ts b/packages/quicktype-core/src/language/JSONSchema/utils.ts index 5c3a10e48..32f65b51d 100644 --- a/packages/quicktype-core/src/language/JSONSchema/utils.ts +++ b/packages/quicktype-core/src/language/JSONSchema/utils.ts @@ -4,12 +4,14 @@ import { combineWords, firstUpperWordStyle, legalizeCharacters, - splitIntoWords + splitIntoWords, } from "../../support/Strings"; export const namingFunction = funPrefixNamer("namer", jsonNameStyle); -const legalizeName = legalizeCharacters(cp => cp >= 32 && cp < 128 && cp !== 0x2f /* slash */); +const legalizeName = legalizeCharacters( + (cp) => cp >= 32 && cp < 128 && cp !== 0x2f /* slash */, +); function jsonNameStyle(original: string): string { const words = splitIntoWords(original); @@ -21,6 +23,6 @@ function jsonNameStyle(original: string): string { allUpperWordStyle, allUpperWordStyle, "", - _ => true + (_) => true, ); } diff --git a/packages/quicktype-core/src/language/Java/DateTimeProvider.ts b/packages/quicktype-core/src/language/Java/DateTimeProvider.ts index 78228db01..e1e4d3c73 100644 --- a/packages/quicktype-core/src/language/Java/DateTimeProvider.ts +++ b/packages/quicktype-core/src/language/Java/DateTimeProvider.ts @@ -1,11 +1,11 @@ -import { type Sourcelike } from "../../Source"; +import type { Sourcelike } from "../../Source"; -import { type JavaRenderer } from "./JavaRenderer"; +import type { JavaRenderer } from "./JavaRenderer"; export abstract class JavaDateTimeProvider { public constructor( protected readonly _renderer: JavaRenderer, - protected readonly _className: string + protected readonly _className: string, ) {} public abstract keywords: string[]; @@ -56,7 +56,7 @@ export class Java8DateTimeProvider extends JavaDateTimeProvider { "ZonedDateTime", "DateTimeFormatter", "DateTimeFormatterBuilder", - "ChronoField" + "ChronoField", ]; public dateTimeImports: string[] = ["java.time.OffsetDateTime"]; @@ -73,7 +73,7 @@ export class Java8DateTimeProvider extends JavaDateTimeProvider { "java.time.ZonedDateTime", "java.time.format.DateTimeFormatter", "java.time.format.DateTimeFormatterBuilder", - "java.time.temporal.ChronoField" + "java.time.temporal.ChronoField", ]; public dateTimeType = "OffsetDateTime"; @@ -91,48 +91,76 @@ export class Java8DateTimeProvider extends JavaDateTimeProvider { public emitDateTimeConverters(): void { this._renderer.ensureBlankLine(); this._renderer.emitLine( - "private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()" + "private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()", ); this._renderer.indent(() => this._renderer.indent(() => { - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_DATE_TIME)"); - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)"); - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_INSTANT)"); - this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))'); - this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))'); - this._renderer.emitLine('.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))'); + this._renderer.emitLine( + ".appendOptional(DateTimeFormatter.ISO_DATE_TIME)", + ); + this._renderer.emitLine( + ".appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)", + ); + this._renderer.emitLine( + ".appendOptional(DateTimeFormatter.ISO_INSTANT)", + ); + this._renderer.emitLine( + '.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))', + ); + this._renderer.emitLine( + '.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))', + ); + this._renderer.emitLine( + '.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))', + ); this._renderer.emitLine(".toFormatter()"); this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); - }) + }), ); this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static OffsetDateTime parseDateTimeString(String str)", () => { - this._renderer.emitLine( - "return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();" - ); - }); + this._renderer.emitBlock( + "public static OffsetDateTime parseDateTimeString(String str)", + () => { + this._renderer.emitLine( + "return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();", + ); + }, + ); this._renderer.ensureBlankLine(); this._renderer.emitLine( - "private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()" + "private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()", ); this._renderer.indent(() => this._renderer.indent(() => { - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_TIME)"); - this._renderer.emitLine(".appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)"); - this._renderer.emitLine(".parseDefaulting(ChronoField.YEAR, 2020)"); - this._renderer.emitLine(".parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)"); - this._renderer.emitLine(".parseDefaulting(ChronoField.DAY_OF_MONTH, 1)"); + this._renderer.emitLine( + ".appendOptional(DateTimeFormatter.ISO_TIME)", + ); + this._renderer.emitLine( + ".appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)", + ); + this._renderer.emitLine( + ".parseDefaulting(ChronoField.YEAR, 2020)", + ); + this._renderer.emitLine( + ".parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)", + ); + this._renderer.emitLine( + ".parseDefaulting(ChronoField.DAY_OF_MONTH, 1)", + ); this._renderer.emitLine(".toFormatter()"); this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); - }) + }), ); this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static OffsetTime parseTimeString(String str)", () => { - this._renderer.emitLine( - "return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();" - ); - }); + this._renderer.emitBlock( + "public static OffsetTime parseTimeString(String str)", + () => { + this._renderer.emitLine( + "return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();", + ); + }, + ); } public convertStringToDateTime(variable: Sourcelike): Sourcelike { @@ -148,15 +176,24 @@ export class Java8DateTimeProvider extends JavaDateTimeProvider { } public convertDateTimeToString(variable: Sourcelike): Sourcelike { - return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME)"]; + return [ + variable, + ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME)", + ]; } public convertTimeToString(variable: Sourcelike): Sourcelike { - return [variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_TIME)"]; + return [ + variable, + ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_TIME)", + ]; } public convertDateToString(variable: Sourcelike): Sourcelike { - return [variable, ".format(java.time.format.DateTimeFormatter.ISO_DATE)"]; + return [ + variable, + ".format(java.time.format.DateTimeFormatter.ISO_DATE)", + ]; } } export class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { @@ -168,7 +205,10 @@ export class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { public timeImports: string[] = ["java.util.Date"]; - public converterImports: string[] = ["java.util.Date", "java.text.SimpleDateFormat"]; + public converterImports: string[] = [ + "java.util.Date", + "java.text.SimpleDateFormat", + ]; public dateTimeType = "Date"; @@ -177,12 +217,16 @@ export class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { public timeType = "Date"; public dateTimeJacksonAnnotations: string[] = [ - '@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ssX", timezone = "UTC")' + '@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ssX", timezone = "UTC")', ]; - public dateJacksonAnnotations: string[] = ['@JsonFormat(pattern = "yyyy-MM-dd")']; + public dateJacksonAnnotations: string[] = [ + '@JsonFormat(pattern = "yyyy-MM-dd")', + ]; - public timeJacksonAnnotations: string[] = ['@JsonFormat(pattern = "HH:mm:ssX", timezone = "UTC")']; + public timeJacksonAnnotations: string[] = [ + '@JsonFormat(pattern = "HH:mm:ssX", timezone = "UTC")', + ]; public shouldEmitTimeConverter = false; @@ -190,7 +234,9 @@ export class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { public emitDateTimeConverters(): void { this._renderer.ensureBlankLine(); - this._renderer.emitLine("private static final String[] DATE_TIME_FORMATS = {"); + this._renderer.emitLine( + "private static final String[] DATE_TIME_FORMATS = {", + ); this._renderer.indent(() => this._renderer.indent(() => { this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.SX\","); @@ -206,33 +252,56 @@ export class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { this._renderer.emitLine('"HH:mm:ssZ",'); this._renderer.emitLine('"HH:mm:ss",'); this._renderer.emitLine('"yyyy-MM-dd",'); - }) + }), ); this._renderer.emitLine("};"); this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static Date parseAllDateTimeString(String str)", () => { - this._renderer.emitBlock("for (String format : DATE_TIME_FORMATS)", () => { - this._renderer.emitIgnoredTryCatchBlock(() => { - this._renderer.emitLine("return new SimpleDateFormat(format).parse(str);"); - }); - }); - this._renderer.emitLine("return null;"); - }); + this._renderer.emitBlock( + "public static Date parseAllDateTimeString(String str)", + () => { + this._renderer.emitBlock( + "for (String format : DATE_TIME_FORMATS)", + () => { + this._renderer.emitIgnoredTryCatchBlock(() => { + this._renderer.emitLine( + "return new SimpleDateFormat(format).parse(str);", + ); + }); + }, + ); + this._renderer.emitLine("return null;"); + }, + ); this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static String serializeDateTime(Date datetime)", () => { - this._renderer.emitLine("return new SimpleDateFormat(\"yyyy-MM-dd'T'hh:mm:ssZ\").format(datetime);"); - }); + this._renderer.emitBlock( + "public static String serializeDateTime(Date datetime)", + () => { + this._renderer.emitLine( + "return new SimpleDateFormat(\"yyyy-MM-dd'T'hh:mm:ssZ\").format(datetime);", + ); + }, + ); this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static String serializeDate(Date datetime)", () => { - this._renderer.emitLine('return new SimpleDateFormat("yyyy-MM-dd").format(datetime);'); - }); + this._renderer.emitBlock( + "public static String serializeDate(Date datetime)", + () => { + this._renderer.emitLine( + 'return new SimpleDateFormat("yyyy-MM-dd").format(datetime);', + ); + }, + ); this._renderer.ensureBlankLine(); - this._renderer.emitBlock("public static String serializeTime(Date datetime)", () => { - this._renderer.emitLine('return new SimpleDateFormat("hh:mm:ssZ").format(datetime);'); - }); + this._renderer.emitBlock( + "public static String serializeTime(Date datetime)", + () => { + this._renderer.emitLine( + 'return new SimpleDateFormat("hh:mm:ssZ").format(datetime);', + ); + }, + ); } public convertStringToDateTime(variable: Sourcelike): Sourcelike { diff --git a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts index 560adadd5..721bada43 100644 --- a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts @@ -1,567 +1,799 @@ -import { type Name } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type Sourcelike } from "../../Source"; +import type { Name } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import type { Sourcelike } from "../../Source"; import { assertNever, panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, type TypeKind, UnionType } from "../../Type"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + type Type, + type TypeKind, + UnionType, +} from "../../Type"; import { removeNullFromUnion } from "../../Type/TypeUtils"; import { JavaRenderer } from "./JavaRenderer"; -import { type javaOptions } from "./language"; +import type { javaOptions } from "./language"; import { stringEscape } from "./utils"; - export class JacksonRenderer extends JavaRenderer { - public constructor( - targetLanguage: TargetLanguage, - renderContext: RenderContext, - options: OptionValues - ) { - super(targetLanguage, renderContext, options); - } - - protected readonly _converterKeywords: string[] = [ - "JsonProperty", - "JsonDeserialize", - "JsonDeserializer", - "JsonSerialize", - "JsonSerializer", - "JsonParser", - "JsonProcessingException", - "DeserializationContext", - "SerializerProvider" - ]; - - protected emitClassAttributes(c: ClassType, _className: Name): void { - if (c.getProperties().size === 0) - this.emitLine("@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)"); - - super.emitClassAttributes(c, _className); - } - - protected annotationsForAccessor( - _c: ClassType, - _className: Name, - _propertyName: Name, - jsonName: string, - p: ClassProperty, - _isSetter: boolean - ): string[] { - const superAnnotations = super.annotationsForAccessor(_c, _className, _propertyName, jsonName, p, _isSetter); - - const annotations: string[] = ['@JsonProperty("' + stringEscape(jsonName) + '")']; - - switch (p.type.kind) { - case "date-time": - this._dateTimeProvider.dateTimeJacksonAnnotations.forEach(annotation => annotations.push(annotation)); - break; - case "date": - this._dateTimeProvider.dateJacksonAnnotations.forEach(annotation => annotations.push(annotation)); - break; - case "time": - this._dateTimeProvider.timeJacksonAnnotations.forEach(annotation => annotations.push(annotation)); - break; - default: - break; - } - - return [...superAnnotations, ...annotations]; - } - - protected importsForType(t: ClassType | UnionType | EnumType): string[] { - if (t instanceof ClassType) { - const imports = super.importsForType(t); - imports.push("com.fasterxml.jackson.annotation.*"); - return imports; - } - - if (t instanceof UnionType) { - const imports = super.importsForType(t); - imports.push( - "java.io.IOException", - "com.fasterxml.jackson.core.*", - "com.fasterxml.jackson.databind.*", - "com.fasterxml.jackson.databind.annotation.*" - ); - if (this._options.useList) { - imports.push("com.fasterxml.jackson.core.type.*"); - } - - return imports; - } - - if (t instanceof EnumType) { - const imports = super.importsForType(t); - imports.push("com.fasterxml.jackson.annotation.*"); - return imports; - } - - return assertNever(t); - } - - protected emitUnionAttributes(_u: UnionType, unionName: Name): void { - this.emitLine("@JsonDeserialize(using = ", unionName, ".Deserializer.class)"); - this.emitLine("@JsonSerialize(using = ", unionName, ".Serializer.class)"); - } - - protected emitUnionSerializer(u: UnionType, unionName: Name): void { - const stringBasedObjects: TypeKind[] = ["uuid", "time", "date", "date-time"]; - - const tokenCase = (tokenType: string): void => { - this.emitLine("case ", tokenType, ":"); - }; - - const emitNullDeserializer = (): void => { - this.indent(() => { - tokenCase("VALUE_NULL"); - this.indent(() => this.emitLine("break;")); - }); - }; - - const emitDeserializerCodeForStringObjects = ( - fieldName: Sourcelike, - kind: TypeKind, - parseFrom: string - ): void => { - switch (kind) { - case "date": - this.emitLine( - "value.", - fieldName, - " = ", - this._dateTimeProvider.convertStringToDate(parseFrom), - ";" - ); - - break; - case "time": - this.emitLine( - "value.", - fieldName, - " = ", - this._dateTimeProvider.convertStringToTime(parseFrom), - ";" - ); - - break; - case "date-time": - this.emitLine( - "value.", - fieldName, - " = ", - this._dateTimeProvider.convertStringToDateTime(parseFrom), - ";" - ); - break; - case "uuid": - this.emitLine("value.", fieldName, " = UUID.fromString(", parseFrom, ");"); - - break; - default: - return panic("Requested type isnt an object!"); - } - }; - - const emitDeserializeType = (t: Type, variableFieldName = ""): void => { - const { fieldName } = this.unionField(u, t); - const rendered = this.javaTypeWithoutGenerics(true, t); - if (this._options.useList && t instanceof ArrayType) { - this.emitLine( - "value.", - fieldName, - " = jsonParser.readValueAs(new TypeReference<", - rendered, - ">() {});" - ); - } else if (stringBasedObjects.some(stringBasedTypeKind => t.kind === stringBasedTypeKind)) { - emitDeserializerCodeForStringObjects(fieldName, t.kind, variableFieldName); - } else if (t.kind === "string") { - this.emitLine("value.", fieldName, " = ", variableFieldName, ";"); - } else if (t.kind === "enum") { - const { fieldType } = this.unionField(u, t, true); - this.emitLine("value.", fieldName, " = ", fieldType, ".forValue(", variableFieldName, ");"); - } else { - this.emitLine("value.", fieldName, " = jsonParser.readValueAs(", rendered, ".class);"); - } - }; - - const emitDeserializer = (tokenTypes: string[], kind: TypeKind): void => { - const t = u.findMember(kind); - if (t === undefined) return; - - this.indent(() => { - for (const tokenType of tokenTypes) { - tokenCase(tokenType); - } - - this.indent(() => { - emitDeserializeType(t); - this.emitLine("break;"); - }); - }); - }; - - const emitStringDeserializer = (): void => { - const enumType = u.findMember("enum"); - const stringType = u.findMember("string"); - - if ( - stringBasedObjects.every(kind => u.findMember(kind) === undefined) && - stringType === undefined && - enumType === undefined - ) - return; - - this.indent(() => { - tokenCase("VALUE_STRING"); - - this.indent(() => { - const fromVariable = "string"; - this.emitLine("String " + fromVariable + " = jsonParser.readValueAs(String.class);"); - - stringBasedObjects.forEach(kind => { - const type = u.findMember(kind); - if (type !== undefined) { - this.emitIgnoredTryCatchBlock(() => { - emitDeserializeType(type, fromVariable); - }); - } - }); - - if (enumType !== undefined) { - this.emitIgnoredTryCatchBlock(() => { - emitDeserializeType(enumType, fromVariable); - }); - } - - // String should be the last one if exists, because it cannot fail, unlike the parsers. - if (stringType !== undefined) { - emitDeserializeType(stringType, fromVariable); - } - - this.emitLine("break;"); - }); - }); - }; - - const emitNumberDeserializer = (): void => { - const integerType = u.findMember("integer"); - const doubleType = u.findMember("double"); - if (doubleType === undefined && integerType === undefined) return; - - this.indent(() => { - tokenCase("VALUE_NUMBER_INT"); - if (integerType !== undefined) { - this.indent(() => { - emitDeserializeType(integerType); - this.emitLine("break;"); - }); - } - - if (doubleType !== undefined) { - tokenCase("VALUE_NUMBER_FLOAT"); - this.indent(() => { - emitDeserializeType(doubleType); - this.emitLine("break;"); - }); - } - }); - }; - - const customObjectSerializer: TypeKind[] = ["time", "date", "date-time"]; - - const serializerCodeForType = (type: Type, fieldName: Sourcelike): Sourcelike => { - switch (type.kind) { - case "date": - return this._dateTimeProvider.convertDateToString(fieldName); - case "time": - return this._dateTimeProvider.convertTimeToString(fieldName); - case "date-time": - return this._dateTimeProvider.convertDateTimeToString(fieldName); - default: - return panic("Requested type doesn't have custom serializer code!"); - } - }; - - const emitSerializeType = (t: Type): void => { - let { fieldName } = this.unionField(u, t, true); - - this.emitBlock(["if (obj.", fieldName, " != null)"], () => { - if (customObjectSerializer.some(customSerializerType => t.kind === customSerializerType)) { - this.emitLine("jsonGenerator.writeObject(", serializerCodeForType(t, ["obj.", fieldName]), ");"); - } else { - this.emitLine("jsonGenerator.writeObject(obj.", fieldName, ");"); - } - - this.emitLine("return;"); - }); - }; - - const [maybeNull, nonNulls] = removeNullFromUnion(u); - - this.ensureBlankLine(); - this.emitBlock(["static class Deserializer extends JsonDeserializer<", unionName, ">"], () => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - unionName, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException" - ], - () => { - this.emitLine(unionName, " value = new ", unionName, "();"); - this.emitLine("switch (jsonParser.currentToken()) {"); - if (maybeNull !== null) emitNullDeserializer(); - emitNumberDeserializer(); - emitDeserializer(["VALUE_TRUE", "VALUE_FALSE"], "bool"); - emitStringDeserializer(); - emitDeserializer(["START_ARRAY"], "array"); - emitDeserializer(["START_OBJECT"], "class"); - emitDeserializer(["START_OBJECT"], "map"); - this.indent(() => - this.emitLine('default: throw new IOException("Cannot deserialize ', unionName, '");') - ); - this.emitLine("}"); - this.emitLine("return value;"); - } - ); - }); - this.ensureBlankLine(); - this.emitBlock(["static class Serializer extends JsonSerializer<", unionName, ">"], () => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public void serialize(", - unionName, - " obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException" - ], - () => { - for (const t of nonNulls) { - emitSerializeType(t); - } - - if (maybeNull !== null) { - this.emitLine("jsonGenerator.writeNull();"); - } else { - this.emitLine('throw new IOException("', unionName, ' must not be null");'); - } - } - ); - }); - } - - protected emitEnumSerializationAttributes(_e: EnumType): void { - this.emitLine("@JsonValue"); - } - - protected emitEnumDeserializationAttributes(_e: EnumType): void { - this.emitLine("@JsonCreator"); - } - - protected emitOffsetDateTimeConverterModule(): void { - this.emitLine("SimpleModule module = new SimpleModule();"); - - if (this._dateTimeProvider.shouldEmitDateTimeConverter) { - this.emitLine( - "module.addDeserializer(", - this._dateTimeProvider.dateTimeType, - ".class, new JsonDeserializer<", - this._dateTimeProvider.dateTimeType, - ">() {" - ); - this.indent(() => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - this._dateTimeProvider.dateTimeType, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", - "throws IOException, JsonProcessingException" - ], - () => { - this.emitLine("String value = jsonParser.getText();"); - this.emitLine("return ", this._dateTimeProvider.convertStringToDateTime("value"), ";"); - } - ); - }); - this.emitLine("});"); - } - - if (!this._dateTimeProvider.shouldEmitTimeConverter) { - this.emitLine( - "module.addDeserializer(", - this._dateTimeProvider.timeType, - ".class, new JsonDeserializer<", - this._dateTimeProvider.timeType, - ">() {" - ); - this.indent(() => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - this._dateTimeProvider.timeType, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", - "throws IOException, JsonProcessingException" - ], - () => { - this.emitLine("String value = jsonParser.getText();"); - this.emitLine("return ", this._dateTimeProvider.convertStringToTime("value"), ";"); - } - ); - }); - this.emitLine("});"); - } - - if (!this._dateTimeProvider.shouldEmitDateConverter) { - this.emitLine( - "module.addDeserializer(", - this._dateTimeProvider.dateType, - ".class, new JsonDeserializer<", - this._dateTimeProvider.dateType, - ">() {" - ); - this.indent(() => { - this.emitLine("@Override"); - this.emitBlock( - [ - "public ", - this._dateTimeProvider.dateType, - " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", - "throws IOException, JsonProcessingException" - ], - () => { - this.emitLine("String value = jsonParser.getText();"); - this.emitLine("return ", this._dateTimeProvider.convertStringToDate("value"), ";"); - } - ); - }); - this.emitLine("});"); - } - - this.emitLine("mapper.registerModule(module);"); - } - - protected emitConverterClass(): void { - this.startFile(this._converterClassname); - this.emitCommentLines([ - "To use this code, add the following Maven dependency to your project:", - "", - this._options.lombok ? " org.projectlombok : lombok : 1.18.2" : "", - " com.fasterxml.jackson.core : jackson-databind : 2.9.0", - this._options.dateTimeProvider === "java8" - ? " com.fasterxml.jackson.datatype : jackson-datatype-jsr310 : 2.9.0" - : "", - "", - "Import this package:", - "" - ]); - this.emitLine("// import ", this._options.packageName, ".Converter;"); - this.emitMultiline(`// + public constructor( + targetLanguage: TargetLanguage, + renderContext: RenderContext, + options: OptionValues, + ) { + super(targetLanguage, renderContext, options); + } + + protected readonly _converterKeywords: string[] = [ + "JsonProperty", + "JsonDeserialize", + "JsonDeserializer", + "JsonSerialize", + "JsonSerializer", + "JsonParser", + "JsonProcessingException", + "DeserializationContext", + "SerializerProvider", + ]; + + protected emitClassAttributes(c: ClassType, _className: Name): void { + if (c.getProperties().size === 0) + this.emitLine( + "@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)", + ); + + super.emitClassAttributes(c, _className); + } + + protected annotationsForAccessor( + _c: ClassType, + _className: Name, + _propertyName: Name, + jsonName: string, + p: ClassProperty, + _isSetter: boolean, + ): string[] { + const superAnnotations = super.annotationsForAccessor( + _c, + _className, + _propertyName, + jsonName, + p, + _isSetter, + ); + + const annotations: string[] = [ + `@JsonProperty("${stringEscape(jsonName)}")`, + ]; + + switch (p.type.kind) { + case "date-time": + this._dateTimeProvider.dateTimeJacksonAnnotations.forEach( + (annotation) => annotations.push(annotation), + ); + break; + case "date": + this._dateTimeProvider.dateJacksonAnnotations.forEach( + (annotation) => annotations.push(annotation), + ); + break; + case "time": + this._dateTimeProvider.timeJacksonAnnotations.forEach( + (annotation) => annotations.push(annotation), + ); + break; + default: + break; + } + + return [...superAnnotations, ...annotations]; + } + + protected importsForType(t: ClassType | UnionType | EnumType): string[] { + if (t instanceof ClassType) { + const imports = super.importsForType(t); + imports.push("com.fasterxml.jackson.annotation.*"); + return imports; + } + + if (t instanceof UnionType) { + const imports = super.importsForType(t); + imports.push( + "java.io.IOException", + "com.fasterxml.jackson.core.*", + "com.fasterxml.jackson.databind.*", + "com.fasterxml.jackson.databind.annotation.*", + ); + if (this._options.useList) { + imports.push("com.fasterxml.jackson.core.type.*"); + } + + return imports; + } + + if (t instanceof EnumType) { + const imports = super.importsForType(t); + imports.push("com.fasterxml.jackson.annotation.*"); + return imports; + } + + return assertNever(t); + } + + protected emitUnionAttributes(_u: UnionType, unionName: Name): void { + this.emitLine( + "@JsonDeserialize(using = ", + unionName, + ".Deserializer.class)", + ); + this.emitLine( + "@JsonSerialize(using = ", + unionName, + ".Serializer.class)", + ); + } + + protected emitUnionSerializer(u: UnionType, unionName: Name): void { + const stringBasedObjects: TypeKind[] = [ + "uuid", + "time", + "date", + "date-time", + ]; + + const tokenCase = (tokenType: string): void => { + this.emitLine("case ", tokenType, ":"); + }; + + const emitNullDeserializer = (): void => { + this.indent(() => { + tokenCase("VALUE_NULL"); + this.indent(() => this.emitLine("break;")); + }); + }; + + const emitDeserializerCodeForStringObjects = ( + fieldName: Sourcelike, + kind: TypeKind, + parseFrom: string, + ): void => { + switch (kind) { + case "date": + this.emitLine( + "value.", + fieldName, + " = ", + this._dateTimeProvider.convertStringToDate(parseFrom), + ";", + ); + + break; + case "time": + this.emitLine( + "value.", + fieldName, + " = ", + this._dateTimeProvider.convertStringToTime(parseFrom), + ";", + ); + + break; + case "date-time": + this.emitLine( + "value.", + fieldName, + " = ", + this._dateTimeProvider.convertStringToDateTime( + parseFrom, + ), + ";", + ); + break; + case "uuid": + this.emitLine( + "value.", + fieldName, + " = UUID.fromString(", + parseFrom, + ");", + ); + + break; + default: + panic("Requested type isnt an object!"); + } + }; + + const emitDeserializeType = (t: Type, variableFieldName = ""): void => { + const { fieldName } = this.unionField(u, t); + const rendered = this.javaTypeWithoutGenerics(true, t); + if (this._options.useList && t instanceof ArrayType) { + this.emitLine( + "value.", + fieldName, + " = jsonParser.readValueAs(new TypeReference<", + rendered, + ">() {});", + ); + } else if ( + stringBasedObjects.some( + (stringBasedTypeKind) => t.kind === stringBasedTypeKind, + ) + ) { + emitDeserializerCodeForStringObjects( + fieldName, + t.kind, + variableFieldName, + ); + } else if (t.kind === "string") { + this.emitLine( + "value.", + fieldName, + " = ", + variableFieldName, + ";", + ); + } else if (t.kind === "enum") { + const { fieldType } = this.unionField(u, t, true); + this.emitLine( + "value.", + fieldName, + " = ", + fieldType, + ".forValue(", + variableFieldName, + ");", + ); + } else { + this.emitLine( + "value.", + fieldName, + " = jsonParser.readValueAs(", + rendered, + ".class);", + ); + } + }; + + const emitDeserializer = ( + tokenTypes: string[], + kind: TypeKind, + ): void => { + const t = u.findMember(kind); + if (t === undefined) return; + + this.indent(() => { + for (const tokenType of tokenTypes) { + tokenCase(tokenType); + } + + this.indent(() => { + emitDeserializeType(t); + this.emitLine("break;"); + }); + }); + }; + + const emitStringDeserializer = (): void => { + const enumType = u.findMember("enum"); + const stringType = u.findMember("string"); + + if ( + stringBasedObjects.every( + (kind) => u.findMember(kind) === undefined, + ) && + stringType === undefined && + enumType === undefined + ) + return; + + this.indent(() => { + tokenCase("VALUE_STRING"); + + this.indent(() => { + const fromVariable = "string"; + this.emitLine( + `String ${fromVariable} = jsonParser.readValueAs(String.class);`, + ); + + stringBasedObjects.forEach((kind) => { + const type = u.findMember(kind); + if (type !== undefined) { + this.emitIgnoredTryCatchBlock(() => { + emitDeserializeType(type, fromVariable); + }); + } + }); + + if (enumType !== undefined) { + this.emitIgnoredTryCatchBlock(() => { + emitDeserializeType(enumType, fromVariable); + }); + } + + // String should be the last one if exists, because it cannot fail, unlike the parsers. + if (stringType !== undefined) { + emitDeserializeType(stringType, fromVariable); + } + + this.emitLine("break;"); + }); + }); + }; + + const emitNumberDeserializer = (): void => { + const integerType = u.findMember("integer"); + const doubleType = u.findMember("double"); + if (doubleType === undefined && integerType === undefined) return; + + this.indent(() => { + tokenCase("VALUE_NUMBER_INT"); + if (integerType !== undefined) { + this.indent(() => { + emitDeserializeType(integerType); + this.emitLine("break;"); + }); + } + + if (doubleType !== undefined) { + tokenCase("VALUE_NUMBER_FLOAT"); + this.indent(() => { + emitDeserializeType(doubleType); + this.emitLine("break;"); + }); + } + }); + }; + + const customObjectSerializer: TypeKind[] = [ + "time", + "date", + "date-time", + ]; + + const serializerCodeForType = ( + type: Type, + fieldName: Sourcelike, + ): Sourcelike => { + switch (type.kind) { + case "date": + return this._dateTimeProvider.convertDateToString( + fieldName, + ); + case "time": + return this._dateTimeProvider.convertTimeToString( + fieldName, + ); + case "date-time": + return this._dateTimeProvider.convertDateTimeToString( + fieldName, + ); + default: + return panic( + "Requested type doesn't have custom serializer code!", + ); + } + }; + + const emitSerializeType = (t: Type): void => { + const { fieldName } = this.unionField(u, t, true); + + this.emitBlock(["if (obj.", fieldName, " != null)"], () => { + if ( + customObjectSerializer.some( + (customSerializerType) => + t.kind === customSerializerType, + ) + ) { + this.emitLine( + "jsonGenerator.writeObject(", + serializerCodeForType(t, ["obj.", fieldName]), + ");", + ); + } else { + this.emitLine( + "jsonGenerator.writeObject(obj.", + fieldName, + ");", + ); + } + + this.emitLine("return;"); + }); + }; + + const [maybeNull, nonNulls] = removeNullFromUnion(u); + + this.ensureBlankLine(); + this.emitBlock( + [ + "static class Deserializer extends JsonDeserializer<", + unionName, + ">", + ], + () => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + unionName, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException", + ], + () => { + this.emitLine( + unionName, + " value = new ", + unionName, + "();", + ); + this.emitLine("switch (jsonParser.currentToken()) {"); + if (maybeNull !== null) emitNullDeserializer(); + emitNumberDeserializer(); + emitDeserializer(["VALUE_TRUE", "VALUE_FALSE"], "bool"); + emitStringDeserializer(); + emitDeserializer(["START_ARRAY"], "array"); + emitDeserializer(["START_OBJECT"], "class"); + emitDeserializer(["START_OBJECT"], "map"); + this.indent(() => + this.emitLine( + 'default: throw new IOException("Cannot deserialize ', + unionName, + '");', + ), + ); + this.emitLine("}"); + this.emitLine("return value;"); + }, + ); + }, + ); + this.ensureBlankLine(); + this.emitBlock( + ["static class Serializer extends JsonSerializer<", unionName, ">"], + () => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public void serialize(", + unionName, + " obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException", + ], + () => { + for (const t of nonNulls) { + emitSerializeType(t); + } + + if (maybeNull !== null) { + this.emitLine("jsonGenerator.writeNull();"); + } else { + this.emitLine( + 'throw new IOException("', + unionName, + ' must not be null");', + ); + } + }, + ); + }, + ); + } + + protected emitEnumSerializationAttributes(_e: EnumType): void { + this.emitLine("@JsonValue"); + } + + protected emitEnumDeserializationAttributes(_e: EnumType): void { + this.emitLine("@JsonCreator"); + } + + protected emitOffsetDateTimeConverterModule(): void { + this.emitLine("SimpleModule module = new SimpleModule();"); + + if (this._dateTimeProvider.shouldEmitDateTimeConverter) { + this.emitLine( + "module.addDeserializer(", + this._dateTimeProvider.dateTimeType, + ".class, new JsonDeserializer<", + this._dateTimeProvider.dateTimeType, + ">() {", + ); + this.indent(() => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + this._dateTimeProvider.dateTimeType, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", + "throws IOException, JsonProcessingException", + ], + () => { + this.emitLine("String value = jsonParser.getText();"); + this.emitLine( + "return ", + this._dateTimeProvider.convertStringToDateTime( + "value", + ), + ";", + ); + }, + ); + }); + this.emitLine("});"); + } + + if (!this._dateTimeProvider.shouldEmitTimeConverter) { + this.emitLine( + "module.addDeserializer(", + this._dateTimeProvider.timeType, + ".class, new JsonDeserializer<", + this._dateTimeProvider.timeType, + ">() {", + ); + this.indent(() => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + this._dateTimeProvider.timeType, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", + "throws IOException, JsonProcessingException", + ], + () => { + this.emitLine("String value = jsonParser.getText();"); + this.emitLine( + "return ", + this._dateTimeProvider.convertStringToTime("value"), + ";", + ); + }, + ); + }); + this.emitLine("});"); + } + + if (!this._dateTimeProvider.shouldEmitDateConverter) { + this.emitLine( + "module.addDeserializer(", + this._dateTimeProvider.dateType, + ".class, new JsonDeserializer<", + this._dateTimeProvider.dateType, + ">() {", + ); + this.indent(() => { + this.emitLine("@Override"); + this.emitBlock( + [ + "public ", + this._dateTimeProvider.dateType, + " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", + "throws IOException, JsonProcessingException", + ], + () => { + this.emitLine("String value = jsonParser.getText();"); + this.emitLine( + "return ", + this._dateTimeProvider.convertStringToDate("value"), + ";", + ); + }, + ); + }); + this.emitLine("});"); + } + + this.emitLine("mapper.registerModule(module);"); + } + + protected emitConverterClass(): void { + this.startFile(this._converterClassname); + this.emitCommentLines([ + "To use this code, add the following Maven dependency to your project:", + "", + this._options.lombok + ? " org.projectlombok : lombok : 1.18.2" + : "", + " com.fasterxml.jackson.core : jackson-databind : 2.9.0", + this._options.dateTimeProvider === "java8" + ? " com.fasterxml.jackson.datatype : jackson-datatype-jsr310 : 2.9.0" + : "", + "", + "Import this package:", + "", + ]); + this.emitLine( + "// import ", + this._options.packageName, + ".Converter;", + ); + this.emitMultiline(`// // Then you can deserialize a JSON string with //`); - this.forEachTopLevel("none", (t, name) => { - this.emitLine( - "// ", - this.javaType(false, t), - " data = Converter.", - this.decoderName(name), - "(jsonString);" - ); - }); - this.ensureBlankLine(); - const imports = [ - "java.io.IOException", - "com.fasterxml.jackson.databind.*", - "com.fasterxml.jackson.databind.module.SimpleModule", - "com.fasterxml.jackson.core.JsonParser", - "com.fasterxml.jackson.core.JsonProcessingException", - "java.util.*" - ].concat(this._dateTimeProvider.converterImports); - this.emitPackageAndImports(imports); - this.ensureBlankLine(); - this.emitBlock(["public class Converter"], () => { - this.emitLine("// Date-time helpers"); - this._dateTimeProvider.emitDateTimeConverters(); - - this.emitLine("// Serialize/deserialize helpers"); - this.forEachTopLevel("leading-and-interposing", (topLevelType, topLevelName) => { - const topLevelTypeRendered = this.javaType(false, topLevelType); - this.emitBlock( - [ - "public static ", - topLevelTypeRendered, - " ", - this.decoderName(topLevelName), - "(String json) throws IOException" - ], - () => { - this.emitLine("return ", this.readerGetterName(topLevelName), "().readValue(json);"); - } - ); - this.ensureBlankLine(); - this.emitBlock( - [ - "public static String ", - this.encoderName(topLevelName), - "(", - topLevelTypeRendered, - " obj) throws JsonProcessingException" - ], - () => { - this.emitLine("return ", this.writerGetterName(topLevelName), "().writeValueAsString(obj);"); - } - ); - }); - this.forEachTopLevel("leading-and-interposing", (topLevelType, topLevelName) => { - const readerName = this.fieldOrMethodName("reader", topLevelName); - const writerName = this.fieldOrMethodName("writer", topLevelName); - this.emitLine("private static ObjectReader ", readerName, ";"); - this.emitLine("private static ObjectWriter ", writerName, ";"); - this.ensureBlankLine(); - this.emitBlock( - ["private static void ", this.methodName("instantiate", "Mapper", topLevelName), "()"], - () => { - const renderedForClass = this.javaTypeWithoutGenerics(false, topLevelType); - this.emitLine("ObjectMapper mapper = new ObjectMapper();"); - this.emitLine("mapper.findAndRegisterModules();"); - this.emitLine("mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);"); - this.emitLine("mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);"); - this.emitOffsetDateTimeConverterModule(); - this.emitLine(readerName, " = mapper.readerFor(", renderedForClass, ".class);"); - this.emitLine(writerName, " = mapper.writerFor(", renderedForClass, ".class);"); - } - ); - this.ensureBlankLine(); - this.emitBlock(["private static ObjectReader ", this.readerGetterName(topLevelName), "()"], () => { - this.emitLine( - "if (", - readerName, - " == null) ", - this.methodName("instantiate", "Mapper", topLevelName), - "();" - ); - this.emitLine("return ", readerName, ";"); - }); - this.ensureBlankLine(); - this.emitBlock(["private static ObjectWriter ", this.writerGetterName(topLevelName), "()"], () => { - this.emitLine( - "if (", - writerName, - " == null) ", - this.methodName("instantiate", "Mapper", topLevelName), - "();" - ); - this.emitLine("return ", writerName, ";"); - }); - }); - }); - this.finishFile(); - } - - protected emitSourceStructure(): void { - this.emitConverterClass(); - super.emitSourceStructure(); - } + this.forEachTopLevel("none", (t, name) => { + this.emitLine( + "// ", + this.javaType(false, t), + " data = Converter.", + this.decoderName(name), + "(jsonString);", + ); + }); + this.ensureBlankLine(); + const imports = [ + "java.io.IOException", + "com.fasterxml.jackson.databind.*", + "com.fasterxml.jackson.databind.module.SimpleModule", + "com.fasterxml.jackson.core.JsonParser", + "com.fasterxml.jackson.core.JsonProcessingException", + "java.util.*", + ].concat(this._dateTimeProvider.converterImports); + this.emitPackageAndImports(imports); + this.ensureBlankLine(); + this.emitBlock(["public class Converter"], () => { + this.emitLine("// Date-time helpers"); + this._dateTimeProvider.emitDateTimeConverters(); + + this.emitLine("// Serialize/deserialize helpers"); + this.forEachTopLevel( + "leading-and-interposing", + (topLevelType, topLevelName) => { + const topLevelTypeRendered = this.javaType( + false, + topLevelType, + ); + this.emitBlock( + [ + "public static ", + topLevelTypeRendered, + " ", + this.decoderName(topLevelName), + "(String json) throws IOException", + ], + () => { + this.emitLine( + "return ", + this.readerGetterName(topLevelName), + "().readValue(json);", + ); + }, + ); + this.ensureBlankLine(); + this.emitBlock( + [ + "public static String ", + this.encoderName(topLevelName), + "(", + topLevelTypeRendered, + " obj) throws JsonProcessingException", + ], + () => { + this.emitLine( + "return ", + this.writerGetterName(topLevelName), + "().writeValueAsString(obj);", + ); + }, + ); + }, + ); + this.forEachTopLevel( + "leading-and-interposing", + (topLevelType, topLevelName) => { + const readerName = this.fieldOrMethodName( + "reader", + topLevelName, + ); + const writerName = this.fieldOrMethodName( + "writer", + topLevelName, + ); + this.emitLine( + "private static ObjectReader ", + readerName, + ";", + ); + this.emitLine( + "private static ObjectWriter ", + writerName, + ";", + ); + this.ensureBlankLine(); + this.emitBlock( + [ + "private static void ", + this.methodName( + "instantiate", + "Mapper", + topLevelName, + ), + "()", + ], + () => { + const renderedForClass = + this.javaTypeWithoutGenerics( + false, + topLevelType, + ); + this.emitLine( + "ObjectMapper mapper = new ObjectMapper();", + ); + this.emitLine("mapper.findAndRegisterModules();"); + this.emitLine( + "mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);", + ); + this.emitLine( + "mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);", + ); + this.emitOffsetDateTimeConverterModule(); + this.emitLine( + readerName, + " = mapper.readerFor(", + renderedForClass, + ".class);", + ); + this.emitLine( + writerName, + " = mapper.writerFor(", + renderedForClass, + ".class);", + ); + }, + ); + this.ensureBlankLine(); + this.emitBlock( + [ + "private static ObjectReader ", + this.readerGetterName(topLevelName), + "()", + ], + () => { + this.emitLine( + "if (", + readerName, + " == null) ", + this.methodName( + "instantiate", + "Mapper", + topLevelName, + ), + "();", + ); + this.emitLine("return ", readerName, ";"); + }, + ); + this.ensureBlankLine(); + this.emitBlock( + [ + "private static ObjectWriter ", + this.writerGetterName(topLevelName), + "()", + ], + () => { + this.emitLine( + "if (", + writerName, + " == null) ", + this.methodName( + "instantiate", + "Mapper", + topLevelName, + ), + "();", + ); + this.emitLine("return ", writerName, ";"); + }, + ); + }, + ); + }); + this.finishFile(); + } + + protected emitSourceStructure(): void { + this.emitConverterClass(); + super.emitSourceStructure(); + } } diff --git a/packages/quicktype-core/src/language/Java/JavaRenderer.ts b/packages/quicktype-core/src/language/Java/JavaRenderer.ts index 7555be5f7..5d24de999 100644 --- a/packages/quicktype-core/src/language/Java/JavaRenderer.ts +++ b/packages/quicktype-core/src/language/Java/JavaRenderer.ts @@ -1,25 +1,56 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import { + DependencyName, + type Name, + type Namer, + funPrefixNamer, +} from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { capitalize } from "../../support/Strings"; import { assert, assertNever, defined } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, type Type, UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + MapType, + type Type, + UnionType, +} from "../../Type"; +import { + directlyReachableSingleNamedType, + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { javaKeywords } from "./constants"; -import { Java8DateTimeProvider, type JavaDateTimeProvider, JavaLegacyDateTimeProvider } from "./DateTimeProvider"; -import { type javaOptions } from "./language"; +import { + Java8DateTimeProvider, + type JavaDateTimeProvider, + JavaLegacyDateTimeProvider, +} from "./DateTimeProvider"; +import type { javaOptions } from "./language"; import { javaNameStyle, stringEscape } from "./utils"; export class JavaRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; - private readonly _gettersAndSettersForPropertyName = new Map(); + private readonly _gettersAndSettersForPropertyName = new Map< + Name, + [Name, Name] + >(); private _haveEmittedLeadingComments = false; @@ -32,17 +63,23 @@ export class JavaRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _options: OptionValues + protected readonly _options: OptionValues, ) { super(targetLanguage, renderContext); switch (_options.dateTimeProvider) { - default: - case "java8": - this._dateTimeProvider = new Java8DateTimeProvider(this, this._converterClassname); - break; case "legacy": - this._dateTimeProvider = new JavaLegacyDateTimeProvider(this, this._converterClassname); + this._dateTimeProvider = new JavaLegacyDateTimeProvider( + this, + this._converterClassname, + ); + break; + case "java8": + default: + this._dateTimeProvider = new Java8DateTimeProvider( + this, + this._converterClassname, + ); break; } } @@ -52,12 +89,15 @@ export class JavaRenderer extends ConvenienceRenderer { ...javaKeywords, ...this._converterKeywords, this._converterClassname, - ...this._dateTimeProvider.keywords + ...this._dateTimeProvider.keywords, ]; return keywords; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -93,17 +133,17 @@ export class JavaRenderer extends ConvenienceRenderer { _className: Name, _p: ClassProperty, _jsonName: string, - name: Name + name: Name, ): [Name, Name] { const getterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `get_${lookup(name)}` + (lookup) => `get_${lookup(name)}`, ); const setterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `set_${lookup(name)}` + (lookup) => `set_${lookup(name)}`, ); return [getterName, setterName]; } @@ -113,29 +153,53 @@ export class JavaRenderer extends ConvenienceRenderer { className: Name, p: ClassProperty, jsonName: string, - name: Name + name: Name, ): Name[] { - const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter(c, className, p, jsonName, name); + const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( + c, + className, + p, + jsonName, + name, + ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return getterAndSetterNames; } private getNameStyling(convention: string): Namer { const styling: { [key: string]: Namer } = { - typeNamingFunction: funPrefixNamer("types", n => - javaNameStyle(true, false, n, acronymStyle(this._options.acronymStyle)) + typeNamingFunction: funPrefixNamer("types", (n) => + javaNameStyle( + true, + false, + n, + acronymStyle(this._options.acronymStyle), + ), ), - propertyNamingFunction: funPrefixNamer("properties", n => - javaNameStyle(false, false, n, acronymStyle(this._options.acronymStyle)) + propertyNamingFunction: funPrefixNamer("properties", (n) => + javaNameStyle( + false, + false, + n, + acronymStyle(this._options.acronymStyle), + ), + ), + enumCaseNamingFunction: funPrefixNamer("enum-cases", (n) => + javaNameStyle( + true, + true, + n, + acronymStyle(this._options.acronymStyle), + ), ), - enumCaseNamingFunction: funPrefixNamer("enum-cases", n => - javaNameStyle(true, true, n, acronymStyle(this._options.acronymStyle)) - ) }; return styling[convention]; } - protected fieldOrMethodName(methodName: string, topLevelName: Name): Sourcelike { + protected fieldOrMethodName( + methodName: string, + topLevelName: Name, + ): Sourcelike { if (this.topLevels.size === 1) { return methodName; } @@ -143,7 +207,11 @@ export class JavaRenderer extends ConvenienceRenderer { return [topLevelName, capitalize(methodName)]; } - protected methodName(prefix: string, suffix: string, topLevelName: Name): Sourcelike { + protected methodName( + prefix: string, + suffix: string, + topLevelName: Name, + ): Sourcelike { if (this.topLevels.size === 1) { return [prefix, suffix]; } @@ -168,12 +236,18 @@ export class JavaRenderer extends ConvenienceRenderer { } protected startFile(basename: Sourcelike): void { - assert(this._currentFilename === undefined, "Previous file wasn't finished"); + assert( + this._currentFilename === undefined, + "Previous file wasn't finished", + ); // FIXME: The filenames should actually be Sourcelikes, too this._currentFilename = `${this.sourcelikeToString(basename)}.java`; // FIXME: Why is this necessary? this.ensureBlankLine(); - if (!this._haveEmittedLeadingComments && this.leadingComments !== undefined) { + if ( + !this._haveEmittedLeadingComments && + this.leadingComments !== undefined + ) { this.emitComments(this.leadingComments); this.ensureBlankLine(); this._haveEmittedLeadingComments = true; @@ -200,7 +274,11 @@ export class JavaRenderer extends ConvenienceRenderer { } public emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } public emitBlock(line: Sourcelike, f: () => void): void { @@ -209,7 +287,11 @@ export class JavaRenderer extends ConvenienceRenderer { this.emitLine("}"); } - public emitTryCatch(main: () => void, handler: () => void, exception = "Exception"): void { + public emitTryCatch( + main: () => void, + handler: () => void, + exception = "Exception", + ): void { this.emitLine("try {"); this.indent(main); this.emitLine("} catch (", exception, " ex) {"); @@ -221,31 +303,49 @@ export class JavaRenderer extends ConvenienceRenderer { this.emitTryCatch(f, () => this.emitLine("// Ignored")); } - protected javaType(reference: boolean, t: Type, withIssues = false): Sourcelike { + protected javaType( + reference: boolean, + t: Type, + withIssues = false, + ): Sourcelike { return matchType( t, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "Object"), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Object"), - _boolType => (reference ? "Boolean" : "boolean"), - _integerType => (reference ? "Long" : "long"), - _doubleType => (reference ? "Double" : "double"), - _stringType => "String", - arrayType => { + (_anyType) => + maybeAnnotated(withIssues, anyTypeIssueAnnotation, "Object"), + (_nullType) => + maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Object"), + (_boolType) => (reference ? "Boolean" : "boolean"), + (_integerType) => (reference ? "Long" : "long"), + (_doubleType) => (reference ? "Double" : "double"), + (_stringType) => "String", + (arrayType) => { if (this._options.useList) { - return ["List<", this.javaType(true, arrayType.items, withIssues), ">"]; - } else { - return [this.javaType(false, arrayType.items, withIssues), "[]"]; + return [ + "List<", + this.javaType(true, arrayType.items, withIssues), + ">", + ]; } + + return [ + this.javaType(false, arrayType.items, withIssues), + "[]", + ]; }, - classType => this.nameForNamedType(classType), - mapType => ["Map"], - enumType => this.nameForNamedType(enumType), - unionType => { + (classType) => this.nameForNamedType(classType), + (mapType) => [ + "Map", + ], + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.javaType(true, nullable, withIssues); + if (nullable !== null) + return this.javaType(true, nullable, withIssues); return this.nameForNamedType(unionType); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "time") { return this._dateTimeProvider.timeType; } @@ -263,35 +363,40 @@ export class JavaRenderer extends ConvenienceRenderer { } return "String"; - } + }, ); } protected javaImport(t: Type): string[] { return matchType( t, - _anyType => [], - _nullType => [], - _boolType => [], - _integerType => [], - _doubleType => [], - _stringType => [], - arrayType => { + (_anyType) => [], + (_nullType) => [], + (_boolType) => [], + (_integerType) => [], + (_doubleType) => [], + (_stringType) => [], + (arrayType) => { if (this._options.useList) { - return [...this.javaImport(arrayType.items), "java.util.List"]; - } else { - return [...this.javaImport(arrayType.items)]; + return [ + ...this.javaImport(arrayType.items), + "java.util.List", + ]; } + + return [...this.javaImport(arrayType.items)]; }, - _classType => [], - mapType => [...this.javaImport(mapType.values), "java.util.Map"], - _enumType => [], - unionType => { + (_classType) => [], + (mapType) => [...this.javaImport(mapType.values), "java.util.Map"], + (_enumType) => [], + (unionType) => { const imports: string[] = []; - unionType.members.forEach(type => this.javaImport(type).forEach(imp => imports.push(imp))); + unionType.members.forEach((type) => + this.javaImport(type).forEach((imp) => imports.push(imp)), + ); return imports; }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "time") { return this._dateTimeProvider.timeImports; } @@ -309,7 +414,7 @@ export class JavaRenderer extends ConvenienceRenderer { } return []; - } + }, ); } @@ -317,18 +422,21 @@ export class JavaRenderer extends ConvenienceRenderer { if (t instanceof ArrayType) { if (this._options.useList) { return ["List"]; - } else { - return [this.javaTypeWithoutGenerics(false, t.items), "[]"]; } - } else if (t instanceof MapType) { + + return [this.javaTypeWithoutGenerics(false, t.items), "[]"]; + } + if (t instanceof MapType) { return "Map"; - } else if (t instanceof UnionType) { + } + if (t instanceof UnionType) { const nullable = nullableFromUnion(t); - if (nullable !== null) return this.javaTypeWithoutGenerics(true, nullable); + if (nullable !== null) + return this.javaTypeWithoutGenerics(true, nullable); return this.nameForNamedType(t); - } else { - return this.javaType(reference, t); } + + return this.javaType(reference, t); } protected emitClassAttributes(_c: ClassType, _className: Name): void { @@ -343,7 +451,7 @@ export class JavaRenderer extends ConvenienceRenderer { _propertyName: Name, _jsonName: string, _p: ClassProperty, - _isSetter: boolean + _isSetter: boolean, ): string[] { return []; } @@ -367,7 +475,7 @@ export class JavaRenderer extends ConvenienceRenderer { protected importsForClass(c: ClassType): string[] { const imports: string[] = []; this.forEachClassProperty(c, "none", (_name, _jsonName, p) => { - this.javaImport(p.type).forEach(imp => imports.push(imp)); + this.javaImport(p.type).forEach((imp) => imports.push(imp)); }); imports.sort(); return [...new Set(imports)]; @@ -377,54 +485,119 @@ export class JavaRenderer extends ConvenienceRenderer { const imports: string[] = []; const [, nonNulls] = removeNullFromUnion(u); this.forEachUnionMember(u, nonNulls, "none", null, (_fieldName, t) => { - this.javaImport(t).forEach(imp => imports.push(imp)); + this.javaImport(t).forEach((imp) => imports.push(imp)); }); imports.sort(); return [...new Set(imports)]; } protected emitClassDefinition(c: ClassType, className: Name): void { - let imports = [...this.importsForType(c), ...this.importsForClass(c)]; + const imports = [...this.importsForType(c), ...this.importsForClass(c)]; this.emitFileHeader(className, imports); this.emitDescription(this.descriptionForType(c)); this.emitClassAttributes(c, className); this.emitBlock(["public class ", className], () => { this.forEachClassProperty(c, "none", (name, jsonName, p) => { - if (this._options.lombok && this._options.lombokCopyAnnotations) { - const getter = this.annotationsForAccessor(c, className, name, jsonName, p, false); - const setter = this.annotationsForAccessor(c, className, name, jsonName, p, true); + if ( + this._options.lombok && + this._options.lombokCopyAnnotations + ) { + const getter = this.annotationsForAccessor( + c, + className, + name, + jsonName, + p, + false, + ); + const setter = this.annotationsForAccessor( + c, + className, + name, + jsonName, + p, + true, + ); if (getter.length !== 0) { - this.emitLine("@lombok.Getter(onMethod_ = {" + getter.join(", ") + "})"); + this.emitLine( + `@lombok.Getter(onMethod_ = {${getter.join(", ")}})`, + ); } if (setter.length !== 0) { - this.emitLine("@lombok.Setter(onMethod_ = {" + setter.join(", ") + "})"); + this.emitLine( + `@lombok.Setter(onMethod_ = {${setter.join(", ")}})`, + ); } } - this.emitLine("private ", this.javaType(false, p.type, true), " ", name, ";"); + this.emitLine( + "private ", + this.javaType(false, p.type, true), + " ", + name, + ";", + ); }); if (!this._options.lombok) { - this.forEachClassProperty(c, "leading-and-interposing", (name, jsonName, p) => { - this.emitDescription(this.descriptionForClassProperty(c, jsonName)); - const [getterName, setterName] = defined(this._gettersAndSettersForPropertyName.get(name)); - const rendered = this.javaType(false, p.type); - this.annotationsForAccessor(c, className, name, jsonName, p, false).forEach(annotation => - this.emitLine(annotation) - ); - this.emitLine("public ", rendered, " ", getterName, "() { return ", name, "; }"); - this.annotationsForAccessor(c, className, name, jsonName, p, true).forEach(annotation => - this.emitLine(annotation) - ); - this.emitLine("public void ", setterName, "(", rendered, " value) { this.", name, " = value; }"); - }); + this.forEachClassProperty( + c, + "leading-and-interposing", + (name, jsonName, p) => { + this.emitDescription( + this.descriptionForClassProperty(c, jsonName), + ); + const [getterName, setterName] = defined( + this._gettersAndSettersForPropertyName.get(name), + ); + const rendered = this.javaType(false, p.type); + this.annotationsForAccessor( + c, + className, + name, + jsonName, + p, + false, + ).forEach((annotation) => this.emitLine(annotation)); + this.emitLine( + "public ", + rendered, + " ", + getterName, + "() { return ", + name, + "; }", + ); + this.annotationsForAccessor( + c, + className, + name, + jsonName, + p, + true, + ).forEach((annotation) => this.emitLine(annotation)); + this.emitLine( + "public void ", + setterName, + "(", + rendered, + " value) { this.", + name, + " = value; }", + ); + }, + ); } }); this.finishFile(); } - protected unionField(u: UnionType, t: Type, withIssues = false): { fieldName: Sourcelike; fieldType: Sourcelike } { + protected unionField( + u: UnionType, + t: Type, + withIssues = false, + ): { fieldName: Sourcelike; fieldType: Sourcelike } { const fieldType = this.javaType(true, t, withIssues); // FIXME: "Value" should be part of the name. const fieldName = [this.nameForUnionMember(u, t), "Value"]; @@ -440,7 +613,10 @@ export class JavaRenderer extends ConvenienceRenderer { } protected emitUnionDefinition(u: UnionType, unionName: Name): void { - const imports = [...this.importsForType(u), ...this.importsForUnionMembers(u)]; + const imports = [ + ...this.importsForType(u), + ...this.importsForUnionMembers(u), + ]; this.emitFileHeader(unionName, imports); this.emitDescription(this.descriptionForType(u)); @@ -470,7 +646,7 @@ export class JavaRenderer extends ConvenienceRenderer { this.emitFileHeader(enumName, this.importsForType(e)); this.emitDescription(this.descriptionForType(e)); const caseNames: Sourcelike[] = []; - this.forEachEnumCase(e, "none", name => { + this.forEachEnumCase(e, "none", (name) => { if (caseNames.length > 0) caseNames.push(", "); caseNames.push(name); }); @@ -484,7 +660,13 @@ export class JavaRenderer extends ConvenienceRenderer { this.emitLine("switch (this) {"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine("case ", name, ': return "', stringEscape(jsonName), '";'); + this.emitLine( + "case ", + name, + ': return "', + stringEscape(jsonName), + '";', + ); }); }); this.emitLine("}"); @@ -493,12 +675,29 @@ export class JavaRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitEnumDeserializationAttributes(e); - this.emitBlock(["public static ", enumName, " forValue(String value) throws IOException"], () => { - this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine('if (value.equals("', stringEscape(jsonName), '")) return ', name, ";"); - }); - this.emitLine('throw new IOException("Cannot deserialize ', enumName, '");'); - }); + this.emitBlock( + [ + "public static ", + enumName, + " forValue(String value) throws IOException", + ], + () => { + this.forEachEnumCase(e, "none", (name, jsonName) => { + this.emitLine( + 'if (value.equals("', + stringEscape(jsonName), + '")) return ', + name, + ";", + ); + }); + this.emitLine( + 'throw new IOException("Cannot deserialize ', + enumName, + '");', + ); + }, + ); }); this.finishFile(); } @@ -508,7 +707,7 @@ export class JavaRenderer extends ConvenienceRenderer { "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) + (u, n) => this.emitUnionDefinition(u, n), ); } } diff --git a/packages/quicktype-core/src/language/Java/constants.ts b/packages/quicktype-core/src/language/Java/constants.ts index d1e2f797e..c16c58cd1 100644 --- a/packages/quicktype-core/src/language/Java/constants.ts +++ b/packages/quicktype-core/src/language/Java/constants.ts @@ -65,5 +65,5 @@ export const javaKeywords = [ "while", "null", "false", - "true" + "true", ] as const; diff --git a/packages/quicktype-core/src/language/Java/language.ts b/packages/quicktype-core/src/language/Java/language.ts index a1f3d2d1f..e8bf57b86 100644 --- a/packages/quicktype-core/src/language/Java/language.ts +++ b/packages/quicktype-core/src/language/Java/language.ts @@ -1,37 +1,62 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { JacksonRenderer } from "./JavaJacksonRenderer"; import { JavaRenderer } from "./JavaRenderer"; export const javaOptions = { - useList: new EnumOption("array-type", "Use T[] or List", { array: false, list: true } as const, "array"), + useList: new EnumOption( + "array-type", + "Use T[] or List", + { array: false, list: true } as const, + "array", + ), justTypes: new BooleanOption("just-types", "Plain types only", false), dateTimeProvider: new EnumOption( "datetime-provider", "Date time provider type", { java8: "java8", legacy: "legacy" } as const, - "java8" + "java8", ), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), // FIXME: Do this via a configurable named eventually. - packageName: new StringOption("package", "Generated package name", "NAME", "io.quicktype"), + packageName: new StringOption( + "package", + "Generated package name", + "NAME", + "io.quicktype", + ), lombok: new BooleanOption("lombok", "Use lombok", false, "primary"), - lombokCopyAnnotations: new BooleanOption("lombok-copy-annotations", "Copy accessor annotations", true, "secondary") + lombokCopyAnnotations: new BooleanOption( + "lombok-copy-annotations", + "Copy accessor annotations", + true, + "secondary", + ), }; export const javaLanguageConfig = { displayName: "Java", names: ["java"], - extension: "java" + extension: "java", } as const; -export class JavaTargetLanguage extends TargetLanguage { +export class JavaTargetLanguage extends TargetLanguage< + typeof javaLanguageConfig +> { public constructor() { super(javaLanguageConfig); } @@ -44,7 +69,10 @@ export class JavaTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): JavaRenderer { const options = getOptionValues(javaOptions, untypedOptionValues); if (options.justTypes) { return new JavaRenderer(this, renderContext, options); @@ -54,7 +82,8 @@ export class JavaTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); mapping.set("date", "date"); mapping.set("time", "time"); mapping.set("date-time", "date-time"); diff --git a/packages/quicktype-core/src/language/Java/utils.ts b/packages/quicktype-core/src/language/Java/utils.ts index abc461f47..8e27c72b6 100644 --- a/packages/quicktype-core/src/language/Java/utils.ts +++ b/packages/quicktype-core/src/language/Java/utils.ts @@ -10,10 +10,12 @@ import { splitIntoWords, standardUnicodeHexEscape, utf16ConcatMap, - utf16LegalizeCharacters + utf16LegalizeCharacters, } from "../../support/Strings"; -export const stringEscape = utf16ConcatMap(escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape)); +export const stringEscape = utf16ConcatMap( + escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape), +); function isStartCharacter(codePoint: number): boolean { if (codePoint === 0x5f) return true; // underscore @@ -21,7 +23,10 @@ function isStartCharacter(codePoint: number): boolean { } function isPartCharacter(codePoint: number): boolean { - return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); + return ( + isStartCharacter(codePoint) || + (isAscii(codePoint) && isDigit(codePoint)) + ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); @@ -30,17 +35,23 @@ export function javaNameStyle( startWithUpper: boolean, upperUnderscore: boolean, original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle + acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, - upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, + upperUnderscore + ? allUpperWordStyle + : startWithUpper + ? firstUpperWordStyle + : allLowerWordStyle, upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, - upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, + upperUnderscore || startWithUpper + ? allUpperWordStyle + : allLowerWordStyle, acronymsStyle, upperUnderscore ? "_" : "", - isStartCharacter + isStartCharacter, ); } diff --git a/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts index 2220107ae..daf635690 100644 --- a/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts +++ b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts @@ -2,8 +2,8 @@ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { ConvertersOptions } from "../../support/Converters"; @@ -14,14 +14,22 @@ import { combineWords, firstUpperWordStyle, splitIntoWords, - utf16StringEscape + utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassProperty, type ClassType, type ObjectType, type Type } from "../../Type"; -import { directlyReachableSingleNamedType, matchType } from "../../Type/TypeUtils"; +import type { TargetLanguage } from "../../TargetLanguage"; +import type { + ClassProperty, + ClassType, + ObjectType, + Type, +} from "../../Type"; +import { + directlyReachableSingleNamedType, + matchType, +} from "../../Type/TypeUtils"; -import { type javaScriptOptions } from "./language"; +import type { javaScriptOptions } from "./language"; import { isES3IdentifierStart } from "./unicodeMaps"; import { legalizeName } from "./utils"; @@ -35,13 +43,13 @@ export interface JavaScriptTypeAnnotations { stringArray: string; } -const identityNamingFunction = funPrefixNamer("properties", s => s); +const identityNamingFunction = funPrefixNamer("properties", (s) => s); export class JavaScriptRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _jsOptions: OptionValues + private readonly _jsOptions: OptionValues, ) { super(targetLanguage, renderContext); } @@ -57,12 +65,12 @@ export class JavaScriptRenderer extends ConvenienceRenderer { upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", - isES3IdentifierStart + isES3IdentifierStart, ); } protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("types", s => this.nameStyle(s, true)); + return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { @@ -74,7 +82,7 @@ export class JavaScriptRenderer extends ConvenienceRenderer { } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enum-cases", s => this.nameStyle(s, true)); + return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, true)); } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { @@ -86,14 +94,18 @@ export class JavaScriptRenderer extends ConvenienceRenderer { className: Name, p: ClassProperty, jsonName: string, - _assignedName: string | undefined + _assignedName: string | undefined, ): Name | undefined { // Ignore the assigned name return super.makeNameForProperty(c, className, p, jsonName, undefined); } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } private typeMapTypeFor(t: Type): Sourcelike { @@ -103,27 +115,29 @@ export class JavaScriptRenderer extends ConvenienceRenderer { return matchType( t, - _anyType => '"any"', - _nullType => "null", - _boolType => "true", - _integerType => "0", - _doubleType => "3.14", - _stringType => '""', - arrayType => ["a(", this.typeMapTypeFor(arrayType.items), ")"], - _classType => panic("We handled this above"), - mapType => ["m(", this.typeMapTypeFor(mapType.values), ")"], - _enumType => panic("We handled this above"), - unionType => { - const children = Array.from(unionType.getChildren()).map((type: Type) => this.typeMapTypeFor(type)); + (_anyType) => '"any"', + (_nullType) => "null", + (_boolType) => "true", + (_integerType) => "0", + (_doubleType) => "3.14", + (_stringType) => '""', + (arrayType) => ["a(", this.typeMapTypeFor(arrayType.items), ")"], + (_classType) => panic("We handled this above"), + (mapType) => ["m(", this.typeMapTypeFor(mapType.values), ")"], + (_enumType) => panic("We handled this above"), + (unionType) => { + const children = Array.from(unionType.getChildren()).map( + (type: Type) => this.typeMapTypeFor(type), + ); return ["u(", ...arrayIntercalate(", ", children), ")"]; }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "Date"; } return '""'; - } + }, ); } @@ -136,7 +150,11 @@ export class JavaScriptRenderer extends ConvenienceRenderer { return ["u(undefined, ", typeMap, ")"]; } - protected emitBlock(source: Sourcelike, end: Sourcelike, emit: () => void): void { + protected emitBlock( + source: Sourcelike, + end: Sourcelike, + emit: () => void, + ): void { this.emitLine(source, "{"); this.indent(emit); this.emitLine("}", end); @@ -149,20 +167,26 @@ export class JavaScriptRenderer extends ConvenienceRenderer { this.forEachObject("none", (t: ObjectType, name: Name) => { const additionalProperties = t.getAdditionalProperties(); const additional = - additionalProperties !== undefined ? this.typeMapTypeFor(additionalProperties) : "false"; + additionalProperties !== undefined + ? this.typeMapTypeFor(additionalProperties) + : "false"; this.emitLine('"', name, '": o(['); this.indent(() => { - this.forEachClassProperty(t, "none", (propName, jsonName, property) => { - this.emitLine( - '{ json: "', - utf16StringEscape(jsonName), - '", js: "', - modifySource(utf16StringEscape, propName), - '", typ: ', - this.typeMapTypeForProperty(property), - " }," - ); - }); + this.forEachClassProperty( + t, + "none", + (propName, jsonName, property) => { + this.emitLine( + '{ json: "', + utf16StringEscape(jsonName), + '", js: "', + modifySource(utf16StringEscape, propName), + '", typ: ', + this.typeMapTypeForProperty(property), + " },", + ); + }, + ); }); this.emitLine("], ", additional, "),"); }); @@ -211,38 +235,63 @@ export class JavaScriptRenderer extends ConvenienceRenderer { string: "", stringArray: "", boolean: "", - never: "" + never: "", }; } protected emitConvertModuleBody(): void { const converter = (t: Type, name: Name): void => { const typeMap = this.typeMapTypeFor(t); - this.emitBlock([this.deserializerFunctionLine(t, name), " "], "", () => { - const parsedJson = this._jsOptions.rawType === "json" ? "JSON.parse(json)" : "json"; - if (!this._jsOptions.runtimeTypecheck) { - this.emitLine("return ", parsedJson, ";"); - } else { - this.emitLine("return cast(", parsedJson, ", ", typeMap, ");"); - } - }); - this.ensureBlankLine(); - - this.emitBlock([this.serializerFunctionLine(t, name), " "], "", () => { - if (this._jsOptions.rawType === "json") { + this.emitBlock( + [this.deserializerFunctionLine(t, name), " "], + "", + () => { + const parsedJson = + this._jsOptions.rawType === "json" + ? "JSON.parse(json)" + : "json"; if (!this._jsOptions.runtimeTypecheck) { - this.emitLine("return JSON.stringify(value);"); + this.emitLine("return ", parsedJson, ";"); } else { - this.emitLine("return JSON.stringify(uncast(value, ", typeMap, "), null, 2);"); + this.emitLine( + "return cast(", + parsedJson, + ", ", + typeMap, + ");", + ); } - } else { - if (!this._jsOptions.runtimeTypecheck) { - this.emitLine("return value;"); + }, + ); + this.ensureBlankLine(); + + this.emitBlock( + [this.serializerFunctionLine(t, name), " "], + "", + () => { + if (this._jsOptions.rawType === "json") { + if (!this._jsOptions.runtimeTypecheck) { + this.emitLine("return JSON.stringify(value);"); + } else { + this.emitLine( + "return JSON.stringify(uncast(value, ", + typeMap, + "), null, 2);", + ); + } } else { - this.emitLine("return uncast(value, ", typeMap, ");"); + if (!this._jsOptions.runtimeTypecheck) { + this.emitLine("return value;"); + } else { + this.emitLine( + "return uncast(value, ", + typeMap, + ");", + ); + } } - } - }); + }, + ); }; switch (this._jsOptions.converters) { @@ -264,11 +313,10 @@ export class JavaScriptRenderer extends ConvenienceRenderer { anyMap: anyMapAnnotation, string: stringAnnotation, stringArray: stringArrayAnnotation, - never: neverAnnotation + never: neverAnnotation, } = this.typeAnnotations; this.ensureBlankLine(); - this - .emitMultiline(`function invalidValue(typ${anyAnnotation}, val${anyAnnotation}, key${anyAnnotation}, parent${anyAnnotation} = '')${neverAnnotation} { + this.emitMultiline(`function invalidValue(typ${anyAnnotation}, val${anyAnnotation}, key${anyAnnotation}, parent${anyAnnotation} = '')${neverAnnotation} { const prettyTyp = prettyTypeName(typ); const parentText = parent ? \` on \${parent}\` : ''; const keyText = key ? \` for key "\${key}"\` : ''; @@ -431,11 +479,11 @@ function r(name${stringAnnotation}) { protected emitConvertModule(): void { this.ensureBlankLine(); this.emitMultiline( - `// Converts JSON ${this._jsOptions.rawType === "json" ? "strings" : "types"} to/from your types` + `// Converts JSON ${this._jsOptions.rawType === "json" ? "strings" : "types"} to/from your types`, ); if (this._jsOptions.runtimeTypecheck) { this.emitMultiline( - `// and asserts the results${this._jsOptions.rawType === "json" ? " of JSON.parse" : ""} at runtime` + `// and asserts the results${this._jsOptions.rawType === "json" ? " of JSON.parse" : ""} at runtime`, ); } @@ -443,7 +491,9 @@ function r(name${stringAnnotation}) { if (moduleLine === undefined) { this.emitConvertModuleBody(); } else { - this.emitBlock([moduleLine, " "], "", () => this.emitConvertModuleBody()); + this.emitBlock([moduleLine, " "], "", () => + this.emitConvertModuleBody(), + ); } } @@ -463,12 +513,22 @@ function r(name${stringAnnotation}) { this.emitLine("//"); this.forEachTopLevel("none", (_t, name) => { const camelCaseName = modifySource(camelCase, name); - this.emitLine("// const ", camelCaseName, " = Convert.to", name, "(json);"); + this.emitLine( + "// const ", + camelCaseName, + " = Convert.to", + name, + "(json);", + ); }); if (this._jsOptions.runtimeTypecheck) { this.emitLine("//"); - this.emitLine("// These functions will throw an error if the JSON doesn't"); - this.emitLine("// match the expected interface, even if the JSON is valid."); + this.emitLine( + "// These functions will throw an error if the JSON doesn't", + ); + this.emitLine( + "// match the expected interface, even if the JSON is valid.", + ); } } diff --git a/packages/quicktype-core/src/language/JavaScript/index.ts b/packages/quicktype-core/src/language/JavaScript/index.ts index 12526b3d9..aedefb9aa 100644 --- a/packages/quicktype-core/src/language/JavaScript/index.ts +++ b/packages/quicktype-core/src/language/JavaScript/index.ts @@ -1,2 +1,5 @@ export { JavaScriptTargetLanguage, javaScriptOptions } from "./language"; -export { JavaScriptRenderer, type JavaScriptTypeAnnotations } from "./JavaScriptRenderer"; +export { + JavaScriptRenderer, + type JavaScriptTypeAnnotations, +} from "./JavaScriptRenderer"; diff --git a/packages/quicktype-core/src/language/JavaScript/language.ts b/packages/quicktype-core/src/language/JavaScript/language.ts index 61d1d93e0..33690bbc6 100644 --- a/packages/quicktype-core/src/language/JavaScript/language.ts +++ b/packages/quicktype-core/src/language/JavaScript/language.ts @@ -1,22 +1,33 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + getOptionValues, +} from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { convertersOption } from "../../support/Converters"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { JavaScriptRenderer } from "./JavaScriptRenderer"; export const javaScriptOptions = { acronymStyle: acronymOption(AcronymStyleOptions.Pascal), - runtimeTypecheck: new BooleanOption("runtime-typecheck", "Verify JSON.parse results at runtime", true), + runtimeTypecheck: new BooleanOption( + "runtime-typecheck", + "Verify JSON.parse results at runtime", + true, + ), runtimeTypecheckIgnoreUnknownProperties: new BooleanOption( "runtime-typecheck-ignore-unknown-properties", "Ignore unknown properties when verifying at runtime", false, - "secondary" + "secondary", ), converters: convertersOption(), rawType: new EnumOption( @@ -24,20 +35,22 @@ export const javaScriptOptions = { "Type of raw input (json by default)", { json: "json", - any: "any" + any: "any", } as const, "json", - "secondary" - ) + "secondary", + ), }; export const javaScriptLanguageConfig = { displayName: "JavaScript", names: ["javascript", "js", "jsx"], - extension: "js" + extension: "js", } as const; -export class JavaScriptTargetLanguage extends TargetLanguage { +export class JavaScriptTargetLanguage extends TargetLanguage< + typeof javaScriptLanguageConfig +> { public constructor() { super(javaScriptLanguageConfig); } @@ -47,7 +60,8 @@ export class JavaScriptTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("date-time", dateTimeType); @@ -62,7 +76,14 @@ export class JavaScriptTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): JavaScriptRenderer { + return new JavaScriptRenderer( + this, + renderContext, + getOptionValues(javaScriptOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/JavaScript/unicodeMaps.ts b/packages/quicktype-core/src/language/JavaScript/unicodeMaps.ts index 0e75bbfaa..fde130b6b 100644 --- a/packages/quicktype-core/src/language/JavaScript/unicodeMaps.ts +++ b/packages/quicktype-core/src/language/JavaScript/unicodeMaps.ts @@ -30,7 +30,7 @@ function lookupInUnicodeMap(code: number, map: readonly number[]): boolean { return false; } -const enum CharacterCodes { +enum CharacterCodes { maxAsciiCharacter = 0x7f, _ = 0x5f, @@ -43,7 +43,7 @@ const enum CharacterCodes { z = 0x7a, A = 0x41, - Z = 0x5a + Z = 0x5a, } export function isES3IdentifierStart(ch: number): boolean { @@ -52,7 +52,8 @@ export function isES3IdentifierStart(ch: number): boolean { (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || ch === CharacterCodes.$ || ch === CharacterCodes._ || - (ch > CharacterCodes.maxAsciiCharacter && lookupInUnicodeMap(ch, unicodeES3IdentifierStart)) + (ch > CharacterCodes.maxAsciiCharacter && + lookupInUnicodeMap(ch, unicodeES3IdentifierStart)) ); } @@ -63,7 +64,8 @@ export function isES3IdentifierPart(ch: number): boolean { (ch >= CharacterCodes._0 && ch <= CharacterCodes._9) || ch === CharacterCodes.$ || ch === CharacterCodes._ || - (ch > CharacterCodes.maxAsciiCharacter && lookupInUnicodeMap(ch, unicodeES3IdentifierPart)) + (ch > CharacterCodes.maxAsciiCharacter && + lookupInUnicodeMap(ch, unicodeES3IdentifierPart)) ); } @@ -87,71 +89,106 @@ export function isES3IdentifierPart(ch: number): boolean { http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt */ const unicodeES3IdentifierStart = [ - 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, - 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, - 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, - 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, - 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, - 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, - 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, - 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, - 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, - 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, - 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, - 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, - 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, - 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, - 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, - 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, - 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, - 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, - 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, - 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, - 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, - 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, - 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, - 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, - 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, - 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, - 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, - 65482, 65487, 65490, 65495, 65498, 65500 + 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, + 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, + 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, + 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, + 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, + 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, + 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, + 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, + 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, + 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, + 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, + 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, + 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, + 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, + 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, + 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, + 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, + 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, + 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, + 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, + 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, + 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, + 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, + 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, + 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, + 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, + 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, + 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, + 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, + 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, + 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, + 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, + 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, + 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, + 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, + 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, + 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, + 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, + 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, + 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, + 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, + 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, + 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; const unicodeES3IdentifierPart = [ - 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, - 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, - 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, - 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, - 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, - 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, - 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, - 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, - 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, - 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, - 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, - 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, - 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, - 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, - 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, - 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, - 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, - 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, - 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, - 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, - 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, - 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, - 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, - 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, - 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, - 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, - 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, - 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, - 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, - 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, - 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, - 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, - 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, - 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, - 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, - 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, - 65479, 65482, 65487, 65490, 65495, 65498, 65500 + 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, + 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, + 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, + 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, + 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, + 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, + 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, + 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, + 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, + 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, + 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, + 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, + 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, + 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, + 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, + 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, + 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, + 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, + 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, + 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, + 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, + 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, + 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, + 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, + 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, + 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, + 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, + 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, + 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, + 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, + 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, + 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, + 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, + 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, + 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, + 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, + 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, + 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, + 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, + 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, + 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, + 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, + 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, + 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, + 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, + 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, + 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, + 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, + 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, + 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, + 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, + 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, + 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, + 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, + 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, + 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, + 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts index a84f96265..7bd6d68d6 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts @@ -2,9 +2,9 @@ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type Sourcelike } from "../../Source"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import type { Sourcelike } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, @@ -12,31 +12,36 @@ import { combineWords, firstUpperWordStyle, splitIntoWords, - utf16StringEscape + utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { type ArrayType, type ClassProperty, type ClassType, type ObjectType, PrimitiveType, - type Type + type Type, } from "../../Type"; -import { directlyReachableSingleNamedType, matchType } from "../../Type/TypeUtils"; +import { + directlyReachableSingleNamedType, + matchType, +} from "../../Type/TypeUtils"; import { isES3IdentifierStart } from "../JavaScript/unicodeMaps"; import { legalizeName } from "../JavaScript/utils"; -import { type javaScriptPropTypesOptions } from "./language"; +import type { javaScriptPropTypesOptions } from "./language"; -const identityNamingFunction = funPrefixNamer("properties", s => s); +const identityNamingFunction = funPrefixNamer("properties", (s) => s); export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _jsOptions: OptionValues + private readonly _jsOptions: OptionValues< + typeof javaScriptPropTypesOptions + >, ) { super(targetLanguage, renderContext); } @@ -52,12 +57,12 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", - isES3IdentifierStart + isES3IdentifierStart, ); } protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("types", s => this.nameStyle(s, true)); + return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { @@ -69,7 +74,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enum-cases", s => this.nameStyle(s, false)); + return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, false)); } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { @@ -81,7 +86,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { className: Name, p: ClassProperty, jsonName: string, - _assignedName: string | undefined + _assignedName: string | undefined, ): Name | undefined { // Ignore the assigned name return super.makeNameForProperty(c, className, p, jsonName, undefined); @@ -94,25 +99,33 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { const match = matchType( t, - _anyType => "PropTypes.any", - _nullType => "PropTypes.any", - _boolType => "PropTypes.bool", - _integerType => "PropTypes.number", - _doubleType => "PropTypes.number", - _stringType => "PropTypes.string", - arrayType => ["PropTypes.arrayOf(", this.typeMapTypeFor(arrayType.items, false), ")"], - _classType => panic("Should already be handled."), - _mapType => "PropTypes.object", - _enumType => panic("Should already be handled."), - unionType => { - const children = Array.from(unionType.getChildren()).map((type: Type) => - this.typeMapTypeFor(type, false) + (_anyType) => "PropTypes.any", + (_nullType) => "PropTypes.any", + (_boolType) => "PropTypes.bool", + (_integerType) => "PropTypes.number", + (_doubleType) => "PropTypes.number", + (_stringType) => "PropTypes.string", + (arrayType) => [ + "PropTypes.arrayOf(", + this.typeMapTypeFor(arrayType.items, false), + ")", + ], + (_classType) => panic("Should already be handled."), + (_mapType) => "PropTypes.object", + (_enumType) => panic("Should already be handled."), + (unionType) => { + const children = Array.from(unionType.getChildren()).map( + (type: Type) => this.typeMapTypeFor(type, false), ); - return ["PropTypes.oneOfType([", ...arrayIntercalate(", ", children), "])"]; + return [ + "PropTypes.oneOfType([", + ...arrayIntercalate(", ", children), + "])", + ]; }, - _transformedStringType => { + (_transformedStringType) => { return "PropTypes.string"; - } + }, ); if (required) { @@ -126,12 +139,15 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { return this.typeMapTypeFor(p.type); } - private importStatement(lhs: Sourcelike, moduleName: Sourcelike): Sourcelike { + private importStatement( + lhs: Sourcelike, + moduleName: Sourcelike, + ): Sourcelike { if (this._jsOptions.moduleSystem) { return ["import ", lhs, " from ", moduleName, ";"]; - } else { - return ["const ", lhs, " = require(", moduleName, ");"]; } + + return ["const ", lhs, " = require(", moduleName, ");"]; } protected emitUsageComments(): void { @@ -148,13 +164,17 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { "", "MyComponent.propTypes = {", " input: MyShape", - "};" + "};", ], - { lineStart: "// " } + { lineStart: "// " }, ); } - protected emitBlock(source: Sourcelike, end: Sourcelike, emit: () => void): void { + protected emitBlock( + source: Sourcelike, + end: Sourcelike, + emit: () => void, + ): void { this.emitLine(source, "{"); this.indent(emit); this.emitLine("}", end); @@ -169,7 +189,13 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { if (this._jsOptions.moduleSystem) { this.emitLine("export const ", name, " = ", value, ";"); } else { - this.emitLine("module.exports = exports = { ", name, ": ", value, " };"); + this.emitLine( + "module.exports = exports = { ", + name, + ": ", + value, + " };", + ); } } @@ -182,15 +208,25 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { this.forEachEnum("none", (enumType, enumName) => { const options: Sourcelike = []; - this.forEachEnumCase(enumType, "none", (name: Name, _jsonName, _position) => { - options.push("'"); - options.push(name); - options.push("'"); - options.push(", "); - }); + this.forEachEnumCase( + enumType, + "none", + (name: Name, _jsonName, _position) => { + options.push("'"); + options.push(name); + options.push("'"); + options.push(", "); + }, + ); options.pop(); - this.emitLine(["const _", enumName, " = PropTypes.oneOfType([", ...options, "]);"]); + this.emitLine([ + "const _", + enumName, + " = PropTypes.oneOfType([", + ...options, + "]);", + ]); }); const order: number[] = []; @@ -208,14 +244,14 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { // pull out all names const source = mapValue[index]; - const names = source.filter(value => value as Name); + const names = source.filter((value) => value as Name); // must be behind all these names - names.forEach(name => { + names.forEach((name) => { const depName = name; // find this name's ordinal, if it has already been added - order.forEach(orderItem => { + order.forEach((orderItem) => { const depIndex = orderItem; if (mapKey[depIndex] === depName) { // this is the index of the dependency, so make sure we come after it @@ -229,7 +265,7 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { }); // now emit ordered source - order.forEach(i => this.emitGatheredSource(mapValue[i])); + order.forEach((i) => this.emitGatheredSource(mapValue[i])); // now emit top levels this.forEachTopLevel("none", (type, name) => { @@ -239,7 +275,11 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { } else { if (type.kind === "array") { this.ensureBlankLine(); - this.emitExport(name, ["PropTypes.arrayOf(", this.typeMapTypeFor((type as ArrayType).items), ")"]); + this.emitExport(name, [ + "PropTypes.arrayOf(", + this.typeMapTypeFor((type as ArrayType).items), + ")", + ]); } else { this.ensureBlankLine(); this.emitExport(name, ["_", name]); @@ -253,7 +293,12 @@ export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { this.emitLine("_", name, " = PropTypes.shape({"); this.indent(() => { this.forEachClassProperty(t, "none", (_, jsonName, property) => { - this.emitLine(`"${utf16StringEscape(jsonName)}"`, ": ", this.typeMapTypeForProperty(property), ","); + this.emitLine( + `"${utf16StringEscape(jsonName)}"`, + ": ", + this.typeMapTypeForProperty(property), + ",", + ); }); }); this.emitLine("});"); diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts index 273e81878..f17587d28 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts @@ -1,2 +1,5 @@ -export { JavaScriptPropTypesTargetLanguage, javaScriptPropTypesOptions } from "./language"; +export { + JavaScriptPropTypesTargetLanguage, + javaScriptPropTypesOptions, +} from "./language"; export { JavaScriptPropTypesRenderer } from "./JavaScriptPropTypesRenderer"; diff --git a/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts b/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts index 317ac8596..9c9cb1ec5 100644 --- a/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts +++ b/packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts @@ -1,9 +1,9 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { EnumOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { convertersOption } from "../../support/Converters"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { JavaScriptPropTypesRenderer } from "./JavaScriptPropTypesRenderer"; @@ -15,19 +15,21 @@ export const javaScriptPropTypesOptions = { "Which module system to use", { "common-js": false, - "es6": true + es6: true, } as const, - "es6" - ) + "es6", + ), }; export const javaScriptPropTypesLanguageConfig = { displayName: "JavaScript PropTypes", names: ["javascript-prop-types"], - extension: "js" + extension: "js", } as const; -export class JavaScriptPropTypesTargetLanguage extends TargetLanguage { +export class JavaScriptPropTypesTargetLanguage extends TargetLanguage< + typeof javaScriptPropTypesLanguageConfig +> { public constructor() { super(javaScriptPropTypesLanguageConfig); } @@ -36,14 +38,14 @@ export class JavaScriptPropTypesTargetLanguage extends TargetLanguage( renderContext: RenderContext, - untypedOptionValues: FixMeOptionsType + untypedOptionValues: RendererOptions, ): JavaScriptPropTypesRenderer { return new JavaScriptPropTypesRenderer( this, renderContext, - getOptionValues(javaScriptPropTypesOptions, untypedOptionValues) + getOptionValues(javaScriptPropTypesOptions, untypedOptionValues), ); } } diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts index 0207fd670..3401ed1fe 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts @@ -1,12 +1,12 @@ import { arrayIntercalate, iterableSome } from "collection-utils"; -import { type Name } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { Name } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase } from "../../support/Strings"; import { mustNotHappen } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { type ArrayType, ClassType, @@ -14,19 +14,19 @@ import { type MapType, type PrimitiveType, type Type, - UnionType + UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { KotlinRenderer } from "./KotlinRenderer"; -import { type kotlinOptions } from "./language"; +import type { kotlinOptions } from "./language"; import { stringEscape } from "./utils"; export class KotlinJacksonRenderer extends KotlinRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - _kotlinOptions: OptionValues + _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext, _kotlinOptions); } @@ -34,29 +34,37 @@ export class KotlinJacksonRenderer extends KotlinRenderer { private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { return matchType( t, - _anyType => "is Any", - _nullType => "null", - _boolType => "is BooleanNode", - _integerType => "is IntNode, is LongNode", - _doubleType => "is DoubleNode", - _stringType => "is TextNode", - _arrayType => "is ArrayNode", + (_anyType) => "is Any", + (_nullType) => "null", + (_boolType) => "is BooleanNode", + (_integerType) => "is IntNode, is LongNode", + (_doubleType) => "is DoubleNode", + (_stringType) => "is TextNode", + (_arrayType) => "is ArrayNode", // These could be stricter, but for now we don't allow maps // and objects in the same union - _classType => "is ObjectNode", - _mapType => "is ObjectNode", + (_classType) => "is ObjectNode", + (_mapType) => "is ObjectNode", // This could be stricter, but for now we don't allow strings // and enums in the same union - _enumType => "is TextNode", - _unionType => mustNotHappen() + (_enumType) => "is TextNode", + (_unionType) => mustNotHappen(), ); } protected emitUsageHeader(): void { - this.emitLine("// To parse the JSON, install jackson-module-kotlin and do:"); + this.emitLine( + "// To parse the JSON, install jackson-module-kotlin and do:", + ); this.emitLine("//"); this.forEachTopLevel("none", (_, name) => { - this.emitLine("// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)"); + this.emitLine( + "// val ", + modifySource(camelCase, name), + " = ", + name, + ".fromJson(jsonString)", + ); }); } @@ -74,17 +82,17 @@ import com.fasterxml.jackson.module.kotlin.*`); const hasUnions = iterableSome( this.typeGraph.allNamedTypes(), - t => t instanceof UnionType && nullableFromUnion(t) === null + (t) => t instanceof UnionType && nullableFromUnion(t) === null, ); const hasEmptyObjects = iterableSome( this.typeGraph.allNamedTypes(), - c => c instanceof ClassType && c.getProperties().size === 0 + (c) => c instanceof ClassType && c.getProperties().size === 0, ); if (hasUnions || this.haveEnums || hasEmptyObjects) { this.emitGenericConverter(); } - let converters: Sourcelike[][] = []; + const converters: Sourcelike[][] = []; // if (hasEmptyObjects) { // converters.push([["convert(JsonNode::class,"], [" { it },"], [" { writeValueAsString(it) })"]]); // } @@ -92,22 +100,26 @@ import com.fasterxml.jackson.module.kotlin.*`); converters.push([ ["convert(", name, "::class,"], [" { ", name, ".fromValue(it.asText()) },"], - [' { "\\"${it.value}\\"" })'] + [' { "\\"${it.value}\\"" })'], ]); }); this.forEachUnion("none", (_, name) => { converters.push([ ["convert(", name, "::class,"], [" { ", name, ".fromJson(it) },"], - [" { it.toJson() }, true)"] + [" { it.toJson() }, true)"], ]); }); this.ensureBlankLine(); this.emitLine("val mapper = jacksonObjectMapper().apply {"); this.indent(() => { - this.emitLine("propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE"); - this.emitLine("setSerializationInclusion(JsonInclude.Include.NON_NULL)"); + this.emitLine( + "propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE", + ); + this.emitLine( + "setSerializationInclusion(JsonInclude.Include.NON_NULL)", + ); }); if (converters.length > 0) { @@ -120,14 +132,26 @@ import com.fasterxml.jackson.module.kotlin.*`); protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.kotlinType(t.items); this.emitBlock( - ["class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)"], + [ + "class ", + name, + "(elements: Collection<", + elementType, + ">) : ArrayList<", + elementType, + ">(elements)", + ], () => { this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(json: String) = mapper.readValue<", name, ">(json)"); + this.emitLine( + "fun fromJson(json: String) = mapper.readValue<", + name, + ">(json)", + ); }); - } + }, ); } @@ -141,15 +165,19 @@ import com.fasterxml.jackson.module.kotlin.*`); elementType, ">) : HashMap(elements)" + ">(elements)", ], () => { this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(json: String) = mapper.readValue<", name, ">(json)"); + this.emitLine( + "fun fromJson(json: String) = mapper.readValue<", + name, + ">(json)", + ); }); - } + }, ); } @@ -157,7 +185,7 @@ import com.fasterxml.jackson.module.kotlin.*`); propName: Name, jsonName: string, required: boolean, - ignore = false + ignore = false, ): Sourcelike | undefined { const escapedName = stringEscape(jsonName); const namesDiffer = this.sourcelikeToString(propName) !== escapedName; @@ -166,7 +194,7 @@ import com.fasterxml.jackson.module.kotlin.*`); const propertyOpts: Sourcelike[] = []; if (namesDiffer || isPrefixBool) { - propertyOpts.push('"' + escapedName + '"'); + propertyOpts.push(`"${escapedName}"`); } if (required) { @@ -174,8 +202,16 @@ import com.fasterxml.jackson.module.kotlin.*`); } if (propertyOpts.length > 0) { - properties.push(["@get:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")"]); - properties.push(["@field:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")"]); + properties.push([ + "@get:JsonProperty(", + arrayIntercalate(", ", propertyOpts), + ")", + ]); + properties.push([ + "@field:JsonProperty(", + arrayIntercalate(", ", propertyOpts), + ")", + ]); } if (ignore) { @@ -193,13 +229,20 @@ import com.fasterxml.jackson.module.kotlin.*`); } protected emitClassDefinitionMethods(c: ClassType, className: Name): void { - const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); + const isTopLevel = iterableSome( + this.topLevels, + ([_, top]) => top === c, + ); if (isTopLevel) { this.emitBlock(")", () => { this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(json: String) = mapper.readValue<", className, ">(json)"); + this.emitLine( + "fun fromJson(json: String) = mapper.readValue<", + className, + ">(json)", + ); }); }); } else { @@ -207,7 +250,12 @@ import com.fasterxml.jackson.module.kotlin.*`); } } - protected renameAttribute(name: Name, jsonName: string, required: boolean, meta: Array<() => void>): void { + protected renameAttribute( + name: Name, + jsonName: string, + required: boolean, + meta: Array<() => void>, + ): void { const rename = this.jacksonRenameAttribute(name, jsonName, required); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); @@ -220,18 +268,35 @@ import com.fasterxml.jackson.module.kotlin.*`); this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { let count = e.cases.size; this.forEachEnumCase(e, "none", (name, json) => { - this.emitLine(name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ","); + this.emitLine( + name, + `("${stringEscape(json)}")`, + --count === 0 ? ";" : ",", + ); }); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitBlock(["fun fromValue(value: String): ", enumName, " = when (value)"], () => { - let table: Sourcelike[][] = []; - this.forEachEnumCase(e, "none", (name, json) => { - table.push([[`"${stringEscape(json)}"`], [" -> ", name]]); - }); - table.push([["else"], [" -> throw IllegalArgumentException()"]]); - this.emitTable(table); - }); + this.emitBlock( + [ + "fun fromValue(value: String): ", + enumName, + " = when (value)", + ], + () => { + const table: Sourcelike[][] = []; + this.forEachEnumCase(e, "none", (name, json) => { + table.push([ + [`"${stringEscape(json)}"`], + [" -> ", name], + ]); + }); + table.push([ + ["else"], + [" -> throw IllegalArgumentException()"], + ]); + this.emitTable(table); + }, + ); }); }); } @@ -254,13 +319,15 @@ private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (Jso u: UnionType, nonNulls: ReadonlySet, maybeNull: PrimitiveType | null, - unionName: Name + unionName: Name, ): void { this.ensureBlankLine(); - this.emitLine("fun toJson(): String = mapper.writeValueAsString(when (this) {"); + this.emitLine( + "fun toJson(): String = mapper.writeValueAsString(when (this) {", + ); this.indent(() => { - let toJsonTable: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, name => { + const toJsonTable: Sourcelike[][] = []; + this.forEachUnionMember(u, nonNulls, "none", null, (name) => { toJsonTable.push([["is ", name], [" -> this.value"]]); }); if (maybeNull !== null) { @@ -273,18 +340,37 @@ private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (Jso this.emitLine("})"); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitLine("fun fromJson(jn: JsonNode): ", unionName, " = when (jn) {"); + this.emitLine( + "fun fromJson(jn: JsonNode): ", + unionName, + " = when (jn) {", + ); this.indent(() => { - let table: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - table.push([[this.unionMemberJsonValueGuard(t, "jn")], [" -> ", name, "(mapper.treeToValue(jn))"]]); - }); + const table: Sourcelike[][] = []; + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (name, t) => { + table.push([ + [this.unionMemberJsonValueGuard(t, "jn")], + [" -> ", name, "(mapper.treeToValue(jn))"], + ]); + }, + ); if (maybeNull !== null) { const name = this.nameForUnionMember(u, maybeNull); - table.push([[this.unionMemberJsonValueGuard(maybeNull, "jn")], [" -> ", name, "()"]]); + table.push([ + [this.unionMemberJsonValueGuard(maybeNull, "jn")], + [" -> ", name, "()"], + ]); } - table.push([["else"], [" -> throw IllegalArgumentException()"]]); + table.push([ + ["else"], + [" -> throw IllegalArgumentException()"], + ]); this.emitTable(table); }); this.emitLine("}"); diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts index d5dadf8cd..e0dbbf25c 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts @@ -1,12 +1,12 @@ import { arrayIntercalate, iterableSome } from "collection-utils"; -import { type Name } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { Name } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase } from "../../support/Strings"; import { mustNotHappen } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { type ArrayType, ClassType, @@ -14,19 +14,19 @@ import { type MapType, type PrimitiveType, type Type, - UnionType + UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { KotlinRenderer } from "./KotlinRenderer"; -import { type kotlinOptions } from "./language"; +import type { kotlinOptions } from "./language"; import { stringEscape } from "./utils"; export class KotlinKlaxonRenderer extends KotlinRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - _kotlinOptions: OptionValues + _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext, _kotlinOptions); } @@ -34,38 +34,58 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { private unionMemberFromJsonValue(t: Type, e: Sourcelike): Sourcelike { return matchType( t, - _anyType => [e, ".inside"], - _nullType => "null", - _boolType => [e, ".boolean"], - _integerType => ["(", e, ".int?.toLong() ?: ", e, ".longValue)"], - _doubleType => [e, ".double"], - _stringType => [e, ".string"], - arrayType => [e, ".array?.let { klaxon.parseFromJsonArray<", this.kotlinType(arrayType.items), ">(it) }"], - _classType => [e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }"], - _mapType => [e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }"], - enumType => [e, ".string?.let { ", this.kotlinType(enumType), ".fromValue(it) }"], - _unionType => mustNotHappen() + (_anyType) => [e, ".inside"], + (_nullType) => "null", + (_boolType) => [e, ".boolean"], + (_integerType) => ["(", e, ".int?.toLong() ?: ", e, ".longValue)"], + (_doubleType) => [e, ".double"], + (_stringType) => [e, ".string"], + (arrayType) => [ + e, + ".array?.let { klaxon.parseFromJsonArray<", + this.kotlinType(arrayType.items), + ">(it) }", + ], + (_classType) => [ + e, + ".obj?.let { klaxon.parseFromJsonObject<", + this.kotlinType(t), + ">(it) }", + ], + (_mapType) => [ + e, + ".obj?.let { klaxon.parseFromJsonObject<", + this.kotlinType(t), + ">(it) }", + ], + (enumType) => [ + e, + ".string?.let { ", + this.kotlinType(enumType), + ".fromValue(it) }", + ], + (_unionType) => mustNotHappen(), ); } private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { return matchType( t, - _anyType => "is Any", - _nullType => "null", - _boolType => "is Boolean", - _integerType => "is Int, is Long", - _doubleType => "is Double", - _stringType => "is String", - _arrayType => "is JsonArray<*>", + (_anyType) => "is Any", + (_nullType) => "null", + (_boolType) => "is Boolean", + (_integerType) => "is Int, is Long", + (_doubleType) => "is Double", + (_stringType) => "is String", + (_arrayType) => "is JsonArray<*>", // These could be stricter, but for now we don't allow maps // and objects in the same union - _classType => "is JsonObject", - _mapType => "is JsonObject", + (_classType) => "is JsonObject", + (_mapType) => "is JsonObject", // This could be stricter, but for now we don't allow strings // and enums in the same union - _enumType => "is String", - _unionType => mustNotHappen() + (_enumType) => "is String", + (_unionType) => mustNotHappen(), ); } @@ -73,7 +93,13 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { this.emitLine("// To parse the JSON, install Klaxon and do:"); this.emitLine("//"); this.forEachTopLevel("none", (_, name) => { - this.emitLine("// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)"); + this.emitLine( + "// val ", + modifySource(camelCase, name), + " = ", + name, + ".fromJson(jsonString)", + ); }); } @@ -84,33 +110,37 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { const hasUnions = iterableSome( this.typeGraph.allNamedTypes(), - t => t instanceof UnionType && nullableFromUnion(t) === null + (t) => t instanceof UnionType && nullableFromUnion(t) === null, ); const hasEmptyObjects = iterableSome( this.typeGraph.allNamedTypes(), - c => c instanceof ClassType && c.getProperties().size === 0 + (c) => c instanceof ClassType && c.getProperties().size === 0, ); if (hasUnions || this.haveEnums || hasEmptyObjects) { this.emitGenericConverter(); } - let converters: Sourcelike[][] = []; + const converters: Sourcelike[][] = []; if (hasEmptyObjects) { - converters.push([[".convert(JsonObject::class,"], [" { it.obj!! },"], [" { it.toJsonString() })"]]); + converters.push([ + [".convert(JsonObject::class,"], + [" { it.obj!! },"], + [" { it.toJsonString() })"], + ]); } this.forEachEnum("none", (_, name) => { converters.push([ [".convert(", name, "::class,"], [" { ", name, ".fromValue(it.string!!) },"], - [' { "\\"${it.value}\\"" })'] + [' { "\\"${it.value}\\"" })'], ]); }); this.forEachUnion("none", (_, name) => { converters.push([ [".convert(", name, "::class,"], [" { ", name, ".fromJson(it) },"], - [" { it.toJson() }, true)"] + [" { it.toJson() }, true)"], ]); }); @@ -124,9 +154,19 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.kotlinType(t.items); this.emitBlock( - ["class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)"], + [ + "class ", + name, + "(elements: Collection<", + elementType, + ">) : ArrayList<", + elementType, + ">(elements)", + ], () => { - this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); + this.emitLine( + "public fun toJson() = klaxon.toJsonString(this)", + ); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( @@ -134,10 +174,10 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { name, "(klaxon.parseArray<", elementType, - ">(json)!!)" + ">(json)!!)", ); }); - } + }, ); } @@ -151,10 +191,12 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { elementType, ">) : HashMap(elements)" + ">(elements)", ], () => { - this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); + this.emitLine( + "public fun toJson() = klaxon.toJsonString(this)", + ); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitBlock( @@ -163,17 +205,21 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { this.emitLine( "klaxon.parseJsonObject(java.io.StringReader(json)) as Map" + ">", ); }, - "paren" + "paren", ); }); - } + }, ); } - private klaxonRenameAttribute(propName: Name, jsonName: string, ignore = false): Sourcelike | undefined { + private klaxonRenameAttribute( + propName: Name, + jsonName: string, + ignore = false, + ): Sourcelike | undefined { const escapedName = stringEscape(jsonName); const namesDiffer = this.sourcelikeToString(propName) !== escapedName; const properties: Sourcelike[] = []; @@ -185,7 +231,9 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { properties.push("ignored = true"); } - return properties.length === 0 ? undefined : ["@Json(", arrayIntercalate(", ", properties), ")"]; + return properties.length === 0 + ? undefined + : ["@Json(", arrayIntercalate(", ", properties), ")"]; } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { @@ -195,13 +243,22 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { } protected emitClassDefinitionMethods(c: ClassType, className: Name): void { - const isTopLevel = iterableSome(this.topLevels, ([_, top]) => top === c); + const isTopLevel = iterableSome( + this.topLevels, + ([_, top]) => top === c, + ); if (isTopLevel) { this.emitBlock(")", () => { - this.emitLine("public fun toJson() = klaxon.toJsonString(this)"); + this.emitLine( + "public fun toJson() = klaxon.toJsonString(this)", + ); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitLine("public fun fromJson(json: String) = klaxon.parse<", className, ">(json)"); + this.emitLine( + "public fun fromJson(json: String) = klaxon.parse<", + className, + ">(json)", + ); }); }); } else { @@ -209,7 +266,12 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { } } - protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { + protected renameAttribute( + name: Name, + jsonName: string, + _required: boolean, + meta: Array<() => void>, + ): void { const rename = this.klaxonRenameAttribute(name, jsonName); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); @@ -222,18 +284,35 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { let count = e.cases.size; this.forEachEnumCase(e, "none", (name, json) => { - this.emitLine(name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ","); + this.emitLine( + name, + `("${stringEscape(json)}")`, + --count === 0 ? ";" : ",", + ); }); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitBlock(["public fun fromValue(value: String): ", enumName, " = when (value)"], () => { - let table: Sourcelike[][] = []; - this.forEachEnumCase(e, "none", (name, json) => { - table.push([[`"${stringEscape(json)}"`], [" -> ", name]]); - }); - table.push([["else"], [" -> throw IllegalArgumentException()"]]); - this.emitTable(table); - }); + this.emitBlock( + [ + "public fun fromValue(value: String): ", + enumName, + " = when (value)", + ], + () => { + const table: Sourcelike[][] = []; + this.forEachEnumCase(e, "none", (name, json) => { + table.push([ + [`"${stringEscape(json)}"`], + [" -> ", name], + ]); + }); + table.push([ + ["else"], + [" -> throw IllegalArgumentException()"], + ]); + this.emitTable(table); + }, + ); }); }); } @@ -241,19 +320,25 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { private emitGenericConverter(): void { this.ensureBlankLine(); this.emitLine( - "private fun Klaxon.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonValue) -> T, toJson: (T) -> String, isUnion: Boolean = false) =" + "private fun Klaxon.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonValue) -> T, toJson: (T) -> String, isUnion: Boolean = false) =", ); this.indent(() => { this.emitLine("this.converter(object: Converter {"); this.indent(() => { this.emitLine('@Suppress("UNCHECKED_CAST")'); this.emitTable([ - ["override fun toJson(value: Any)", " = toJson(value as T)"], - ["override fun fromJson(jv: JsonValue)", " = fromJson(jv) as Any"], + [ + "override fun toJson(value: Any)", + " = toJson(value as T)", + ], + [ + "override fun fromJson(jv: JsonValue)", + " = fromJson(jv) as Any", + ], [ "override fun canConvert(cls: Class<*>)", - " = cls == k.java || (isUnion && cls.superclass == k.java)" - ] + " = cls == k.java || (isUnion && cls.superclass == k.java)", + ], ]); }); this.emitLine("})"); @@ -264,13 +349,15 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { u: UnionType, nonNulls: ReadonlySet, maybeNull: PrimitiveType | null, - unionName: Name + unionName: Name, ): void { this.ensureBlankLine(); - this.emitLine("public fun toJson(): String = klaxon.toJsonString(when (this) {"); + this.emitLine( + "public fun toJson(): String = klaxon.toJsonString(when (this) {", + ); this.indent(() => { - let toJsonTable: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, name => { + const toJsonTable: Sourcelike[][] = []; + this.forEachUnionMember(u, nonNulls, "none", null, (name) => { toJsonTable.push([["is ", name], [" -> this.value"]]); }); if (maybeNull !== null) { @@ -283,21 +370,48 @@ export class KotlinKlaxonRenderer extends KotlinRenderer { this.emitLine("})"); this.ensureBlankLine(); this.emitBlock("companion object", () => { - this.emitLine("public fun fromJson(jv: JsonValue): ", unionName, " = when (jv.inside) {"); + this.emitLine( + "public fun fromJson(jv: JsonValue): ", + unionName, + " = when (jv.inside) {", + ); this.indent(() => { - let table: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - table.push([ - [this.unionMemberJsonValueGuard(t, "jv.inside")], - [" -> ", name, "(", this.unionMemberFromJsonValue(t, "jv"), "!!)"] - ]); - }); + const table: Sourcelike[][] = []; + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (name, t) => { + table.push([ + [this.unionMemberJsonValueGuard(t, "jv.inside")], + [ + " -> ", + name, + "(", + this.unionMemberFromJsonValue(t, "jv"), + "!!)", + ], + ]); + }, + ); if (maybeNull !== null) { const name = this.nameForUnionMember(u, maybeNull); - table.push([[this.unionMemberJsonValueGuard(maybeNull, "jv.inside")], [" -> ", name, "()"]]); + table.push([ + [ + this.unionMemberJsonValueGuard( + maybeNull, + "jv.inside", + ), + ], + [" -> ", name, "()"], + ]); } - table.push([["else"], [" -> throw IllegalArgumentException()"]]); + table.push([ + ["else"], + [" -> throw IllegalArgumentException()"], + ]); this.emitTable(table); }); this.emitLine("}"); diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts index b200677ba..5e1c45b6b 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts @@ -1,11 +1,17 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -15,19 +21,23 @@ import { type ObjectType, type PrimitiveType, type Type, - type UnionType + type UnionType, } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type kotlinOptions } from "./language"; +import type { kotlinOptions } from "./language"; import { kotlinNameStyle } from "./utils"; export class KotlinRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _kotlinOptions: OptionValues + protected readonly _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext); } @@ -36,15 +46,24 @@ export class KotlinRenderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_o: ObjectType, _classNamed: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _o: ObjectType, + _classNamed: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } @@ -53,27 +72,61 @@ export class KotlinRenderer extends ConvenienceRenderer { } protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("upper", s => kotlinNameStyle(true, s, acronymStyle(this._kotlinOptions.acronymStyle))); + return funPrefixNamer("upper", (s) => + kotlinNameStyle( + true, + s, + acronymStyle(this._kotlinOptions.acronymStyle), + ), + ); } protected namerForObjectProperty(): Namer { - return funPrefixNamer("lower", s => kotlinNameStyle(false, s, acronymStyle(this._kotlinOptions.acronymStyle))); + return funPrefixNamer("lower", (s) => + kotlinNameStyle( + false, + s, + acronymStyle(this._kotlinOptions.acronymStyle), + ), + ); } protected makeUnionMemberNamer(): Namer { - return funPrefixNamer("upper", s => kotlinNameStyle(true, s) + "Value"); + return funPrefixNamer( + "upper", + (s) => `${kotlinNameStyle(true, s)}Value`, + ); } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("upper", s => kotlinNameStyle(true, s, acronymStyle(this._kotlinOptions.acronymStyle))); + return funPrefixNamer("upper", (s) => + kotlinNameStyle( + true, + s, + acronymStyle(this._kotlinOptions.acronymStyle), + ), + ); } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } - protected emitBlock(line: Sourcelike, f: () => void, delimiter: "curly" | "paren" | "lambda" = "curly"): void { - const [open, close] = delimiter === "curly" ? ["{", "}"] : delimiter === "paren" ? ["(", ")"] : ["{", "})"]; + protected emitBlock( + line: Sourcelike, + f: () => void, + delimiter: "curly" | "paren" | "lambda" = "curly", + ): void { + const [open, close] = + delimiter === "curly" + ? ["{", "}"] + : delimiter === "paren" + ? ["(", ")"] + : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); @@ -85,37 +138,62 @@ export class KotlinRenderer extends ConvenienceRenderer { // (asarazan): I've broken out the following two functions // because some renderers, such as kotlinx, can cope with `any`, while some get mad. - protected arrayType(arrayType: ArrayType, withIssues = false, _noOptional = false): Sourcelike { + protected arrayType( + arrayType: ArrayType, + withIssues = false, + _noOptional = false, + ): Sourcelike { return ["List<", this.kotlinType(arrayType.items, withIssues), ">"]; } - protected mapType(mapType: MapType, withIssues = false, _noOptional = false): Sourcelike { - return ["Map"]; + protected mapType( + mapType: MapType, + withIssues = false, + _noOptional = false, + ): Sourcelike { + return [ + "Map", + ]; } - protected kotlinType(t: Type, withIssues = false, noOptional = false): Sourcelike { + protected kotlinType( + t: Type, + withIssues = false, + noOptional = false, + ): Sourcelike { const optional = noOptional ? "" : "?"; return matchType( t, - _anyType => { - return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(optional)); + (_anyType) => { + return maybeAnnotated( + withIssues, + anyTypeIssueAnnotation, + this.anySourceType(optional), + ); }, - _nullType => { - return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(optional)); + (_nullType) => { + return maybeAnnotated( + withIssues, + nullTypeIssueAnnotation, + this.anySourceType(optional), + ); }, - _boolType => "Boolean", - _integerType => "Long", - _doubleType => "Double", - _stringType => "String", - arrayType => this.arrayType(arrayType, withIssues), - classType => this.nameForNamedType(classType), - mapType => this.mapType(mapType, withIssues), - enumType => this.nameForNamedType(enumType), - unionType => { + (_boolType) => "Boolean", + (_integerType) => "Long", + (_doubleType) => "Double", + (_stringType) => "String", + (arrayType) => this.arrayType(arrayType, withIssues), + (classType) => this.nameForNamedType(classType), + (mapType) => this.mapType(mapType, withIssues), + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return [this.kotlinType(nullable, withIssues), optional]; + if (nullable !== null) + return [this.kotlinType(nullable, withIssues), optional]; return this.nameForNamedType(unionType); - } + }, ); } @@ -147,7 +225,13 @@ export class KotlinRenderer extends ConvenienceRenderer { protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.kotlinType(t.values); - this.emitLine(["typealias ", name, " = HashMap"]); + this.emitLine([ + "typealias ", + name, + " = HashMap", + ]); } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { @@ -165,9 +249,9 @@ export class KotlinRenderer extends ConvenienceRenderer { const kotlinType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return [this.kotlinType(p.type, true, true), "?"]; - } else { - return this.kotlinType(p.type, true); } + + return this.kotlinType(p.type, true); }; this.emitDescription(this.descriptionForType(c)); @@ -177,12 +261,18 @@ export class KotlinRenderer extends ConvenienceRenderer { let count = c.getProperties().size; let first = true; this.forEachClassProperty(c, "none", (name, jsonName, p) => { - const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; - const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; + const nullable = + p.type.kind === "union" && + nullableFromUnion(p.type as UnionType) !== null; + const nullableOrOptional = + p.isOptional || p.type.kind === "null" || nullable; const last = --count === 0; - let meta: Array<() => void> = []; + const meta: Array<() => void> = []; - const description = this.descriptionForClassProperty(c, jsonName); + const description = this.descriptionForClassProperty( + c, + jsonName, + ); if (description !== undefined) { meta.push(() => this.emitDescription(description)); } @@ -197,7 +287,14 @@ export class KotlinRenderer extends ConvenienceRenderer { emit(); } - this.emitLine("val ", name, ": ", kotlinType(p), nullableOrOptional ? " = null" : "", last ? "" : ","); + this.emitLine( + "val ", + name, + ": ", + kotlinType(p), + nullableOrOptional ? " = null" : "", + last ? "" : ",", + ); if (meta.length > 0 && !last) { this.ensureBlankLine(); @@ -210,7 +307,10 @@ export class KotlinRenderer extends ConvenienceRenderer { this.emitClassDefinitionMethods(c, className); } - protected emitClassDefinitionMethods(_c: ClassType, _className: Name): void { + protected emitClassDefinitionMethods( + _c: ClassType, + _className: Name, + ): void { this.emitLine(")"); } @@ -218,7 +318,12 @@ export class KotlinRenderer extends ConvenienceRenderer { // to be overridden } - protected renameAttribute(_name: Name, _jsonName: string, _required: boolean, _meta: Array<() => void>): void { + protected renameAttribute( + _name: Name, + _jsonName: string, + _required: boolean, + _meta: Array<() => void>, + ): void { // to be overridden } @@ -227,7 +332,7 @@ export class KotlinRenderer extends ConvenienceRenderer { this.emitBlock(["enum class ", enumName], () => { let count = e.cases.size; - this.forEachEnumCase(e, "none", name => { + this.forEachEnumCase(e, "none", (name) => { this.emitLine(name, --count === 0 ? "" : ","); }); }); @@ -237,7 +342,7 @@ export class KotlinRenderer extends ConvenienceRenderer { function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; - return "_" + kind; + return `_${kind}`; } this.emitDescription(this.descriptionForType(u)); @@ -246,17 +351,29 @@ export class KotlinRenderer extends ConvenienceRenderer { this.emitClassAnnotations(u, unionName); this.emitBlock(["sealed class ", unionName], () => { { - let table: Sourcelike[][] = []; - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - table.push([ - ["class ", name, "(val value: ", this.kotlinType(t), ")"], - [" : ", unionName, "()"] - ]); - }); + const table: Sourcelike[][] = []; + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (name, t) => { + table.push([ + [ + "class ", + name, + "(val value: ", + this.kotlinType(t), + ")", + ], + [" : ", unionName, "()"], + ]); + }, + ); if (maybeNull !== null) { table.push([ ["class ", this.nameForUnionMember(u, maybeNull), "()"], - [" : ", unionName, "()"] + [" : ", unionName, "()"], ]); } @@ -271,7 +388,7 @@ export class KotlinRenderer extends ConvenienceRenderer { _u: UnionType, _nonNulls: ReadonlySet, _maybeNull: PrimitiveType | null, - _unionName: Name + _unionName: Name, ): void { // to be overridden } @@ -294,7 +411,7 @@ export class KotlinRenderer extends ConvenienceRenderer { "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) + (u, n) => this.emitUnionDefinition(u, n), ); } } diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts index 66a579b45..8084f36cc 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts @@ -1,13 +1,18 @@ -import { type Name } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { Name } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase } from "../../support/Strings"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ArrayType, type EnumType, type MapType, type Type } from "../../Type"; +import type { TargetLanguage } from "../../TargetLanguage"; +import type { + ArrayType, + EnumType, + MapType, + Type, +} from "../../Type"; import { KotlinRenderer } from "./KotlinRenderer"; -import { type kotlinOptions } from "./language"; +import type { kotlinOptions } from "./language"; import { stringEscape } from "./utils"; /** @@ -18,7 +23,7 @@ export class KotlinXRenderer extends KotlinRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - _kotlinOptions: OptionValues + _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext, _kotlinOptions); } @@ -27,7 +32,11 @@ export class KotlinXRenderer extends KotlinRenderer { return ["JsonElement", optional]; } - protected arrayType(arrayType: ArrayType, withIssues = false, noOptional = false): Sourcelike { + protected arrayType( + arrayType: ArrayType, + withIssues = false, + noOptional = false, + ): Sourcelike { const valType = this.kotlinType(arrayType.items, withIssues, true); const name = this.sourcelikeToString(valType); if (name === "JsonObject" || name === "JsonElement") { @@ -37,7 +46,11 @@ export class KotlinXRenderer extends KotlinRenderer { return super.arrayType(arrayType, withIssues, noOptional); } - protected mapType(mapType: MapType, withIssues = false, noOptional = false): Sourcelike { + protected mapType( + mapType: MapType, + withIssues = false, + noOptional = false, + ): Sourcelike { const valType = this.kotlinType(mapType.values, withIssues, true); const name = this.sourcelikeToString(valType); if (name === "JsonObject" || name === "JsonElement") { @@ -62,15 +75,21 @@ export class KotlinXRenderer extends KotlinRenderer { } protected emitUsageHeader(): void { - this.emitLine("// To parse the JSON, install kotlin's serialization plugin and do:"); + this.emitLine( + "// To parse the JSON, install kotlin's serialization plugin and do:", + ); this.emitLine("//"); const table: Sourcelike[][] = []; - table.push(["// val ", "json", " = Json { allowStructuredMapKeys = true }"]); + table.push([ + "// val ", + "json", + " = Json { allowStructuredMapKeys = true }", + ]); this.forEachTopLevel("none", (_, name) => { table.push([ "// val ", modifySource(camelCase, name), - ` = json.parse(${this.sourcelikeToString(name)}.serializer(), jsonString)` + ` = json.parse(${this.sourcelikeToString(name)}.serializer(), jsonString)`, ]); }); this.emitTable(table); @@ -89,7 +108,12 @@ export class KotlinXRenderer extends KotlinRenderer { this.emitLine("@Serializable"); } - protected renameAttribute(name: Name, jsonName: string, _required: boolean, meta: Array<() => void>): void { + protected renameAttribute( + name: Name, + jsonName: string, + _required: boolean, + meta: Array<() => void>, + ): void { const rename = this._rename(name, jsonName); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); @@ -114,7 +138,12 @@ export class KotlinXRenderer extends KotlinRenderer { let count = e.cases.size; this.forEachEnumCase(e, "none", (name, json) => { const jsonEnum = stringEscape(json); - this.emitLine(`@SerialName("${jsonEnum}") `, name, `("${jsonEnum}")`, --count === 0 ? ";" : ","); + this.emitLine( + `@SerialName("${jsonEnum}") `, + name, + `("${jsonEnum}")`, + --count === 0 ? ";" : ",", + ); }); }); } diff --git a/packages/quicktype-core/src/language/Kotlin/constants.ts b/packages/quicktype-core/src/language/Kotlin/constants.ts index 8e83c7388..89993e322 100644 --- a/packages/quicktype-core/src/language/Kotlin/constants.ts +++ b/packages/quicktype-core/src/language/Kotlin/constants.ts @@ -47,5 +47,5 @@ export const keywords = [ "JsonObject", "JsonValue", "Converter", - "Klaxon" + "Klaxon", ] as const; diff --git a/packages/quicktype-core/src/language/Kotlin/language.ts b/packages/quicktype-core/src/language/Kotlin/language.ts index 27d149a3b..ce72896ac 100644 --- a/packages/quicktype-core/src/language/Kotlin/language.ts +++ b/packages/quicktype-core/src/language/Kotlin/language.ts @@ -1,10 +1,14 @@ -import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; -import { type RenderContext } from "../../Renderer"; -import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import type { RenderContext } from "../../Renderer"; +import { + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { KotlinJacksonRenderer } from "./KotlinJacksonRenderer"; import { KotlinKlaxonRenderer } from "./KotlinKlaxonRenderer"; @@ -17,23 +21,25 @@ export const kotlinOptions = { "Serialization framework", { "just-types": "None", - "jackson": "Jackson", - "klaxon": "Klaxon", - "kotlinx": "KotlinX" + jackson: "Jackson", + klaxon: "Klaxon", + kotlinx: "KotlinX", } as const, - "klaxon" + "klaxon", ), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), - packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") + packageName: new StringOption("package", "Package", "PACKAGE", "quicktype"), }; export const kotlinLanguageConfig = { displayName: "Kotlin", names: ["kotlin"], - extension: "kt" + extension: "kt", } as const; -export class KotlinTargetLanguage extends TargetLanguage { +export class KotlinTargetLanguage extends TargetLanguage< + typeof kotlinLanguageConfig +> { public constructor() { super(kotlinLanguageConfig); } @@ -50,7 +56,10 @@ export class KotlinTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): ConvenienceRenderer { const options = getOptionValues(kotlinOptions, untypedOptionValues); switch (options.framework) { diff --git a/packages/quicktype-core/src/language/Kotlin/utils.ts b/packages/quicktype-core/src/language/Kotlin/utils.ts index 69fc8fb0c..d47d933e8 100644 --- a/packages/quicktype-core/src/language/Kotlin/utils.ts +++ b/packages/quicktype-core/src/language/Kotlin/utils.ts @@ -11,7 +11,7 @@ import { isPrintable, legalizeCharacters, splitIntoWords, - utf32ConcatMap + utf32ConcatMap, } from "../../support/Strings"; function isPartCharacter(codePoint: number): boolean { @@ -27,7 +27,7 @@ const legalizeName = legalizeCharacters(isPartCharacter); export function kotlinNameStyle( isUpper: boolean, original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle + acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); return combineWords( @@ -38,7 +38,7 @@ export function kotlinNameStyle( isUpper ? allUpperWordStyle : allLowerWordStyle, acronymsStyle, "", - isStartCharacter + isStartCharacter, ); } @@ -47,7 +47,9 @@ function unicodeEscape(codePoint: number): string { } // eslint-disable-next-line @typescript-eslint/naming-convention -const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); +const _stringEscape = utf32ConcatMap( + escapeNonPrintableMapper(isPrintable, unicodeEscape), +); export function stringEscape(s: string): string { // "$this" is a template string in Kotlin so we have to escape $ diff --git a/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts index e8c247574..5d0917db5 100644 --- a/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts +++ b/packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts @@ -1,25 +1,51 @@ -import { iterableFirst, iterableSome, mapContains, mapFirst, mapSome } from "collection-utils"; +import { + iterableFirst, + iterableSome, + mapContains, + mapFirst, + mapSome, +} from "collection-utils"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; -import { camelCase, fastIsUpperCase, repeatString, stringEscape } from "../../support/Strings"; +import { + camelCase, + fastIsUpperCase, + repeatString, + stringEscape, +} from "../../support/Strings"; import { assert, defined } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, Type, UnionType } from "../../Type"; -import { isAnyOrNull, matchType, nullableFromUnion } from "../../Type/TypeUtils"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + ClassType, + EnumType, + MapType, + Type, + UnionType, +} from "../../Type"; +import { + isAnyOrNull, + matchType, + nullableFromUnion, +} from "../../Type/TypeUtils"; import { forbiddenPropertyNames, keywords } from "./constants"; -import { type objectiveCOptions } from "./language"; +import type { objectiveCOptions } from "./language"; import { DEFAULT_CLASS_PREFIX, forbiddenForEnumCases, propertyNameStyle, splitExtension, staticEnumValuesIdentifier, - typeNameStyle + typeNameStyle, } from "./utils"; type MemoryAttribute = "assign" | "strong" | "copy"; @@ -34,7 +60,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); @@ -50,7 +76,10 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { private inferClassPrefix(name: string): string { const l = name.length; let firstNonUpper = 0; - while (firstNonUpper < l && fastIsUpperCase(name.charCodeAt(firstNonUpper))) { + while ( + firstNonUpper < l && + fastIsUpperCase(name.charCodeAt(firstNonUpper)) + ) { firstNonUpper += 1; } @@ -62,27 +91,36 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { - return { names: forbiddenPropertyNames as unknown as string[], includeGlobalForbidden: true }; + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { + return { + names: forbiddenPropertyNames as unknown as string[], + includeGlobalForbidden: true, + }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: forbiddenForEnumCases, includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("types", rawName => typeNameStyle(this._classPrefix, rawName)); + return funPrefixNamer("types", (rawName) => + typeNameStyle(this._classPrefix, rawName), + ); } protected namerForObjectProperty(_: ClassType, p: ClassProperty): Namer { // TODO why is underscore being removed? - return new Namer("properties", s => propertyNameStyle(s, p.type.kind === "bool"), [ - "_", - "the", - "one", - "some", - "another" - ]); + return new Namer( + "properties", + (s) => propertyNameStyle(s, p.type.kind === "bool"), + ["_", "the", "one", "some", "another"], + ); } protected makeUnionMemberNamer(): null { @@ -122,7 +160,10 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { } protected startFile(basename: Sourcelike, extension: string): void { - assert(this._currentFilename === undefined, "Previous file wasn't finished"); + assert( + this._currentFilename === undefined, + "Previous file wasn't finished", + ); // FIXME: The filenames should actually be Sourcelikes, too this._currentFilename = `${this.sourcelikeToString(basename)}.${extension}`; } @@ -135,34 +176,39 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { protected memoryAttribute(t: Type, isNullable: boolean): MemoryAttribute { return matchType( t, - _anyType => "copy", - _nullType => "copy", - _boolType => (isNullable ? "strong" : "assign"), - _integerType => (isNullable ? "strong" : "assign"), - _doubleType => (isNullable ? "strong" : "assign"), - _stringType => "copy", - _arrayType => "copy", - _classType => "strong", - _mapType => "copy", - _enumType => "assign", - unionType => { + (_anyType) => "copy", + (_nullType) => "copy", + (_boolType) => (isNullable ? "strong" : "assign"), + (_integerType) => (isNullable ? "strong" : "assign"), + (_doubleType) => (isNullable ? "strong" : "assign"), + (_stringType) => "copy", + (_arrayType) => "copy", + (_classType) => "strong", + (_mapType) => "copy", + (_enumType) => "assign", + (unionType) => { const nullable = nullableFromUnion(unionType); - return nullable !== null ? this.memoryAttribute(nullable, true) : "copy"; - } + return nullable !== null + ? this.memoryAttribute(nullable, true) + : "copy"; + }, ); } protected objcType(t: Type, nullableOrBoxed = false): [Sourcelike, string] { return matchType<[Sourcelike, string]>( t, - _anyType => ["id", ""], + (_anyType) => ["id", ""], // For now, we're treating nulls just like any - _nullType => ["id", ""], - _boolType => (nullableOrBoxed ? ["NSNumber", " *"] : ["BOOL", ""]), - _integerType => (nullableOrBoxed ? ["NSNumber", " *"] : ["NSInteger", ""]), - _doubleType => (nullableOrBoxed ? ["NSNumber", " *"] : ["double", ""]), - _stringType => ["NSString", " *"], - arrayType => { + (_nullType) => ["id", ""], + (_boolType) => + nullableOrBoxed ? ["NSNumber", " *"] : ["BOOL", ""], + (_integerType) => + nullableOrBoxed ? ["NSNumber", " *"] : ["NSInteger", ""], + (_doubleType) => + nullableOrBoxed ? ["NSNumber", " *"] : ["double", ""], + (_stringType) => ["NSString", " *"], + (arrayType) => { const itemType = arrayType.items; const itemTypeName = this.objcType(itemType, true); // NSArray* === NSArray* @@ -172,168 +218,307 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { return [["NSArray<", itemTypeName, ">"], " *"]; }, - classType => [this.nameForNamedType(classType), " *"], - mapType => [["NSDictionary"], " *"], - enumType => [this.nameForNamedType(enumType), " *"], - unionType => { + (classType) => [this.nameForNamedType(classType), " *"], + (mapType) => [ + [ + "NSDictionary", + ], + " *", + ], + (enumType) => [this.nameForNamedType(enumType), " *"], + (unionType) => { const nullable = nullableFromUnion(unionType); - return nullable !== null ? this.objcType(nullable, true) : ["id", ""]; - } + return nullable !== null + ? this.objcType(nullable, true) + : ["id", ""]; + }, ); } private jsonType(t: Type): [Sourcelike, string] { return matchType<[Sourcelike, string]>( t, - _anyType => ["id", ""], + (_anyType) => ["id", ""], // For now, we're treating nulls just like any - _nullType => ["id", ""], - _boolType => ["NSNumber", " *"], - _integerType => ["NSNumber", " *"], - _doubleType => ["NSNumber", " *"], - _stringType => ["NSString", " *"], - _arrayType => ["NSArray", " *"], - _classType => ["NSDictionary", " *"], - mapType => [["NSDictionary"], " *"], - _enumType => ["NSString", " *"], - unionType => { + (_nullType) => ["id", ""], + (_boolType) => ["NSNumber", " *"], + (_integerType) => ["NSNumber", " *"], + (_doubleType) => ["NSNumber", " *"], + (_stringType) => ["NSString", " *"], + (_arrayType) => ["NSArray", " *"], + (_classType) => ["NSDictionary", " *"], + (mapType) => [ + [ + "NSDictionary", + ], + " *", + ], + (_enumType) => ["NSString", " *"], + (unionType) => { const nullable = nullableFromUnion(unionType); return nullable !== null ? this.jsonType(nullable) : ["id", ""]; - } + }, ); } - protected fromDynamicExpression(t: Type, ...dynamic: Sourcelike[]): Sourcelike { + protected fromDynamicExpression( + t: Type, + ...dynamic: Sourcelike[] + ): Sourcelike { return matchType( t, - _anyType => dynamic, - _nullType => dynamic, - _boolType => dynamic, - _integerType => dynamic, - _doubleType => dynamic, - _stringType => dynamic, - arrayType => ["map(", dynamic, ", λ(id x, ", this.fromDynamicExpression(arrayType.items, "x"), "))"], - classType => ["[", this.nameForNamedType(classType), " fromJSONDictionary:", dynamic, "]"], - mapType => ["map(", dynamic, ", λ(id x, ", this.fromDynamicExpression(mapType.values, "x"), "))"], - enumType => ["[", this.nameForNamedType(enumType), " withValue:", dynamic, "]"], - unionType => { + (_anyType) => dynamic, + (_nullType) => dynamic, + (_boolType) => dynamic, + (_integerType) => dynamic, + (_doubleType) => dynamic, + (_stringType) => dynamic, + (arrayType) => [ + "map(", + dynamic, + ", λ(id x, ", + this.fromDynamicExpression(arrayType.items, "x"), + "))", + ], + (classType) => [ + "[", + this.nameForNamedType(classType), + " fromJSONDictionary:", + dynamic, + "]", + ], + (mapType) => [ + "map(", + dynamic, + ", λ(id x, ", + this.fromDynamicExpression(mapType.values, "x"), + "))", + ], + (enumType) => [ + "[", + this.nameForNamedType(enumType), + " withValue:", + dynamic, + "]", + ], + (unionType) => { const nullable = nullableFromUnion(unionType); - return nullable !== null ? this.fromDynamicExpression(nullable, dynamic) : dynamic; - } + return nullable !== null + ? this.fromDynamicExpression(nullable, dynamic) + : dynamic; + }, ); } protected toDynamicExpression(t: Type, typed: Sourcelike): Sourcelike { return matchType( t, - _anyType => ["NSNullify(", typed, ")"], - _nullType => ["NSNullify(", typed, ")"], + (_anyType) => ["NSNullify(", typed, ")"], + (_nullType) => ["NSNullify(", typed, ")"], // Sadly, KVC - _boolType => [typed, " ? @YES : @NO"], - _integerType => typed, - _doubleType => typed, - _stringType => typed, - arrayType => { + (_boolType) => [typed, " ? @YES : @NO"], + (_integerType) => typed, + (_doubleType) => typed, + (_stringType) => typed, + (arrayType) => { if (this.implicitlyConvertsFromJSON(arrayType)) { // TODO check each value type return typed; } - return ["map(", typed, ", λ(id x, ", this.toDynamicExpression(arrayType.items, "x"), "))"]; + return [ + "map(", + typed, + ", λ(id x, ", + this.toDynamicExpression(arrayType.items, "x"), + "))", + ]; }, - _classType => ["[", typed, " JSONDictionary]"], - mapType => { + (_classType) => ["[", typed, " JSONDictionary]"], + (mapType) => { if (this.implicitlyConvertsFromJSON(mapType)) { // TODO check each value type return typed; } - return ["map(", typed, ", λ(id x, ", this.toDynamicExpression(mapType.values, "x"), "))"]; + return [ + "map(", + typed, + ", λ(id x, ", + this.toDynamicExpression(mapType.values, "x"), + "))", + ]; }, - _enumType => ["[", typed, " value]"], - unionType => { + (_enumType) => ["[", typed, " value]"], + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (this.implicitlyConvertsFromJSON(nullable)) { return ["NSNullify(", typed, ")"]; - } else { - return ["NSNullify(", this.toDynamicExpression(nullable, typed), ")"]; } - } else { - // TODO support unions - return typed; + + return [ + "NSNullify(", + this.toDynamicExpression(nullable, typed), + ")", + ]; } - } + + // TODO support unions + return typed; + }, ); } protected implicitlyConvertsFromJSON(t: Type): boolean { if (t instanceof ClassType) { return false; - } else if (t instanceof EnumType) { + } + if (t instanceof EnumType) { return false; - } else if (t instanceof ArrayType) { + } + if (t instanceof ArrayType) { return this.implicitlyConvertsFromJSON(t.items); - } else if (t instanceof MapType) { + } + if (t instanceof MapType) { return this.implicitlyConvertsFromJSON(t.values); - } else if (t.isPrimitive()) { + } + if (t.isPrimitive()) { return true; - } else if (t instanceof UnionType) { + } + if (t instanceof UnionType) { const nullable = nullableFromUnion(t); if (nullable !== null) { return this.implicitlyConvertsFromJSON(nullable); - } else { - // We don't support unions yet, so this is just untyped - return true; } - } else { - return false; + + // We don't support unions yet, so this is just untyped + return true; } + + return false; } protected implicitlyConvertsToJSON(t: Type): boolean { return this.implicitlyConvertsFromJSON(t) && "bool" !== t.kind; } - protected emitPropertyAssignment(propertyName: Name, jsonName: string, propertyType: Type): void { + protected emitPropertyAssignment( + propertyName: Name, + jsonName: string, + propertyType: Type, + ): void { const name = ["_", propertyName]; matchType( propertyType, - anyType => this.emitLine(name, " = ", this.fromDynamicExpression(anyType, name), ";"), - nullType => this.emitLine(name, " = ", this.fromDynamicExpression(nullType, name), ";"), - boolType => this.emitLine(name, " = ", this.fromDynamicExpression(boolType, name), ";"), - integerType => this.emitLine(name, " = ", this.fromDynamicExpression(integerType, name), ";"), - doubleType => this.emitLine(name, " = ", this.fromDynamicExpression(doubleType, name), ";"), - stringType => this.emitLine(name, " = ", this.fromDynamicExpression(stringType, name), ";"), - arrayType => this.emitLine(name, " = ", this.fromDynamicExpression(arrayType, name), ";"), - classType => this.emitLine(name, " = ", this.fromDynamicExpression(classType, ["(id)", name]), ";"), - mapType => { + (anyType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(anyType, name), + ";", + ), + (nullType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(nullType, name), + ";", + ), + (boolType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(boolType, name), + ";", + ), + (integerType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(integerType, name), + ";", + ), + (doubleType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(doubleType, name), + ";", + ), + (stringType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(stringType, name), + ";", + ), + (arrayType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(arrayType, name), + ";", + ), + (classType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(classType, ["(id)", name]), + ";", + ), + (mapType) => { const itemType = mapType.values; this.emitLine( name, " = map(", name, ", ", - ["λ(id x, ", this.fromDynamicExpression(itemType, "x"), ")"], - ");" + [ + "λ(id x, ", + this.fromDynamicExpression(itemType, "x"), + ")", + ], + ");", ); }, - enumType => this.emitLine(name, " = ", this.fromDynamicExpression(enumType, ["(id)", name]), ";"), - unionType => { + (enumType) => + this.emitLine( + name, + " = ", + this.fromDynamicExpression(enumType, ["(id)", name]), + ";", + ), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { - this.emitPropertyAssignment(propertyName, jsonName, nullable); + this.emitPropertyAssignment( + propertyName, + jsonName, + nullable, + ); } else { // TODO This is a union, but for now we just leave it dynamic - this.emitLine(name, " = ", this.fromDynamicExpression(unionType, name), ";"); + this.emitLine( + name, + " = ", + this.fromDynamicExpression(unionType, name), + ";", + ); } - } + }, ); } protected emitPrivateClassInterface(_: ClassType, name: Name): void { this.emitLine("@interface ", name, " (JSONConversion)"); - this.emitLine("+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;"); + this.emitLine( + "+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;", + ); this.emitLine("- (NSDictionary *)JSONDictionary;"); this.emitLine("@end"); } @@ -345,27 +530,57 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { } private emitNonClassTopLevelTypedef(t: Type, name: Name): void { - let nonPointerTypeName = this.objcType(t)[0]; + const nonPointerTypeName = this.objcType(t)[0]; this.emitLine("typedef ", nonPointerTypeName, " ", name, ";"); } private topLevelFromDataPrototype(name: Name): Sourcelike { - return [name, " *_Nullable ", name, "FromData(NSData *data, NSError **error)"]; + return [ + name, + " *_Nullable ", + name, + "FromData(NSData *data, NSError **error)", + ]; } private topLevelFromJSONPrototype(name: Name): Sourcelike { - return [name, " *_Nullable ", name, "FromJSON(NSString *json, NSStringEncoding encoding, NSError **error)"]; + return [ + name, + " *_Nullable ", + name, + "FromJSON(NSString *json, NSStringEncoding encoding, NSError **error)", + ]; } private topLevelToDataPrototype(name: Name, pad = false): Sourcelike { const parameter = this.variableNameForTopLevel(name); - const padding = pad ? repeatString(" ", this.sourcelikeToString(name).length - "NSData".length) : ""; - return ["NSData", padding, " *_Nullable ", name, "ToData(", name, " *", parameter, ", NSError **error)"]; + const padding = pad + ? repeatString( + " ", + this.sourcelikeToString(name).length - "NSData".length, + ) + : ""; + return [ + "NSData", + padding, + " *_Nullable ", + name, + "ToData(", + name, + " *", + parameter, + ", NSError **error)", + ]; } private topLevelToJSONPrototype(name: Name, pad = false): Sourcelike { const parameter = this.variableNameForTopLevel(name); - const padding = pad ? repeatString(" ", this.sourcelikeToString(name).length - "NSString".length) : ""; + const padding = pad + ? repeatString( + " ", + this.sourcelikeToString(name).length - "NSString".length, + ) + : ""; return [ "NSString", padding, @@ -375,7 +590,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { name, " *", parameter, - ", NSStringEncoding encoding, NSError **error)" + ", NSStringEncoding encoding, NSError **error)", ]; } @@ -392,7 +607,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine("} @catch (NSException *exception) {"); this.indent(() => { this.emitLine( - '*error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];' + '*error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];', ); inCatch(); }); @@ -407,37 +622,57 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitTryCatchAsError( () => { this.emitLine( - "id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error];" + "id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error];", + ); + this.emitLine( + "return *error ? nil : ", + this.fromDynamicExpression(t, "json"), + ";", ); - this.emitLine("return *error ? nil : ", this.fromDynamicExpression(t, "json"), ";"); }, - () => this.emitLine("return nil;") + () => this.emitLine("return nil;"), ); }); this.ensureBlankLine(); this.emitMethod(this.topLevelFromJSONPrototype(name), () => { - this.emitLine("return ", name, "FromData([json dataUsingEncoding:encoding], error);"); + this.emitLine( + "return ", + name, + "FromData([json dataUsingEncoding:encoding], error);", + ); }); this.ensureBlankLine(); this.emitMethod(this.topLevelToDataPrototype(name), () => { this.emitTryCatchAsError( () => { - this.emitLine("id json = ", this.toDynamicExpression(t, parameter), ";"); this.emitLine( - "NSData *data = [NSJSONSerialization dataWithJSONObject:json options:kNilOptions error:error];" + "id json = ", + this.toDynamicExpression(t, parameter), + ";", + ); + this.emitLine( + "NSData *data = [NSJSONSerialization dataWithJSONObject:json options:kNilOptions error:error];", ); this.emitLine("return *error ? nil : data;"); }, - () => this.emitLine("return nil;") + () => this.emitLine("return nil;"), ); }); this.ensureBlankLine(); this.emitMethod(this.topLevelToJSONPrototype(name), () => { - this.emitLine("NSData *data = ", name, "ToData(", parameter, ", error);"); - this.emitLine("return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil;"); + this.emitLine( + "NSData *data = ", + name, + "ToData(", + parameter, + ", error);", + ); + this.emitLine( + "return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil;", + ); }); } @@ -447,19 +682,22 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitDescription(this.descriptionForType(t)); this.emitLine("@interface ", className, " : NSObject"); - if (DEBUG) this.emitLine("@property NSDictionary *_json;"); + if (DEBUG) + this.emitLine("@property NSDictionary *_json;"); this.emitPropertyTable(t, (name, _json, property) => { - let attributes = ["nonatomic"]; + const attributes = ["nonatomic"]; // TODO offer a 'readonly' option // TODO We must add "copy" if it's NSCopy, otherwise "strong" if (property.type.isNullable) { attributes.push("nullable"); } - attributes.push(this.memoryAttribute(property.type, property.type.isNullable)); + attributes.push( + this.memoryAttribute(property.type, property.type.isNullable), + ); return [ ["@property ", ["(", attributes.join(", "), ")"], " "], - [this.pointerAwareTypeName(property.type), name, ";"] + [this.pointerAwareTypeName(property.type), name, ";"], ]; }); @@ -467,13 +705,17 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (t.getProperties().size > 0) this.ensureBlankLine(); this.emitLine( - "+ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;" + "+ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;", ); - this.emitLine("+ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;"); this.emitLine( - "- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;" + "+ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;", + ); + this.emitLine( + "- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;", + ); + this.emitLine( + "- (NSData *_Nullable)toData:(NSError *_Nullable *)error;", ); - this.emitLine("- (NSData *_Nullable)toData:(NSError *_Nullable *)error;"); } this.emitLine("@end"); @@ -482,7 +724,9 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { protected hasIrregularProperties(t: ClassType): boolean { let irregular = false; this.forEachClassProperty(t, "none", (name, jsonName) => { - irregular = irregular || stringEscape(jsonName) !== this.sourcelikeToString(name); + irregular = + irregular || + stringEscape(jsonName) !== this.sourcelikeToString(name); }); return irregular; } @@ -504,58 +748,110 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine("@implementation ", className); if (!this._options.justTypes) { - this.emitMethod("+ (NSDictionary *)properties", () => { - this.emitLine("static NSDictionary *properties;"); - this.emitLine("return properties = properties ? properties : @{"); - this.indent(() => { - this.forEachClassProperty(t, "none", (name, jsonName) => - this.emitLine(`@"${stringEscape(jsonName)}": @"`, name, '",') + this.emitMethod( + "+ (NSDictionary *)properties", + () => { + this.emitLine( + "static NSDictionary *properties;", ); - }); - this.emitLine("};"); - }); + this.emitLine( + "return properties = properties ? properties : @{", + ); + this.indent(() => { + this.forEachClassProperty(t, "none", (name, jsonName) => + this.emitLine( + `@"${stringEscape(jsonName)}": @"`, + name, + '",', + ), + ); + }); + this.emitLine("};"); + }, + ); this.ensureBlankLine(); if (isTopLevel) { this.emitMethod( "+ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error", () => { - this.emitLine("return ", className, "FromData(data, error);"); - } + this.emitLine( + "return ", + className, + "FromData(data, error);", + ); + }, ); this.ensureBlankLine(); this.emitMethod( "+ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error", () => { - this.emitLine("return ", className, "FromJSON(json, encoding, error);"); - } + this.emitLine( + "return ", + className, + "FromJSON(json, encoding, error);", + ); + }, ); this.ensureBlankLine(); } - this.emitMethod("+ (instancetype)fromJSONDictionary:(NSDictionary *)dict", () => { - this.emitLine("return dict ? [[", className, " alloc] initWithJSONDictionary:dict] : nil;"); - }); + this.emitMethod( + "+ (instancetype)fromJSONDictionary:(NSDictionary *)dict", + () => { + this.emitLine( + "return dict ? [[", + className, + " alloc] initWithJSONDictionary:dict] : nil;", + ); + }, + ); this.ensureBlankLine(); - this.emitMethod("- (instancetype)initWithJSONDictionary:(NSDictionary *)dict", () => { - this.emitBlock("if (self = [super init])", () => { - if (DEBUG) this.emitLine("__json = dict;"); - - this.emitLine("[self setValuesForKeysWithDictionary:dict];"); - this.forEachClassProperty(t, "none", (name, jsonName, property) => { - if (!this.implicitlyConvertsFromJSON(property.type)) { - this.emitPropertyAssignment(name, jsonName, property.type); - } + this.emitMethod( + "- (instancetype)initWithJSONDictionary:(NSDictionary *)dict", + () => { + this.emitBlock("if (self = [super init])", () => { + if (DEBUG) this.emitLine("__json = dict;"); + + this.emitLine( + "[self setValuesForKeysWithDictionary:dict];", + ); + this.forEachClassProperty( + t, + "none", + (name, jsonName, property) => { + if ( + !this.implicitlyConvertsFromJSON( + property.type, + ) + ) { + this.emitPropertyAssignment( + name, + jsonName, + property.type, + ); + } + }, + ); }); - }); - this.emitLine("return self;"); - }); + this.emitLine("return self;"); + }, + ); this.ensureBlankLine(); - this.emitMethod("- (void)setValue:(nullable id)value forKey:(NSString *)key", () => { - this.emitLine("id resolved = ", className, ".properties[key];"); - this.emitLine("if (resolved) [super setValue:value forKey:resolved];"); - }); + this.emitMethod( + "- (void)setValue:(nullable id)value forKey:(NSString *)key", + () => { + this.emitLine( + "id resolved = ", + className, + ".properties[key];", + ); + this.emitLine( + "if (resolved) [super setValue:value forKey:resolved];", + ); + }, + ); // setNilValueForKey: is automatically invoked by the NSObject setValue:forKey: when it is passed nil for a scalar (a.k.a. non-nullable) object // The approach below sets the scalar to 0 in this case, and therefore assumes an initializer with incomplete data shouldn't be grounds for raising an exception. @@ -563,32 +859,54 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitMethod("- (void)setNilValueForKey:(NSString *)key", () => { this.emitLine("id resolved = ", className, ".properties[key];"); - this.emitLine("if (resolved) [super setValue:@(0) forKey:resolved];"); + this.emitLine( + "if (resolved) [super setValue:@(0) forKey:resolved];", + ); }); this.ensureBlankLine(); this.emitMethod("- (NSDictionary *)JSONDictionary", () => { if (!hasIrregularProperties && !hasUnsafeProperties) { - this.emitLine("return [self dictionaryWithValuesForKeys:", className, ".properties.allValues];"); + this.emitLine( + "return [self dictionaryWithValuesForKeys:", + className, + ".properties.allValues];", + ); return; } this.emitLine( "id dict = [[self dictionaryWithValuesForKeys:", className, - ".properties.allValues] mutableCopy];" + ".properties.allValues] mutableCopy];", ); this.ensureBlankLine(); if (hasIrregularProperties) { - this.emitExtraComments("Rewrite property names that differ in JSON"); - this.emitBlock(["for (id jsonName in ", className, ".properties)"], () => { - this.emitLine("id propertyName = ", className, ".properties[jsonName];"); - this.emitBlock("if (![jsonName isEqualToString:propertyName])", () => { - this.emitLine("dict[jsonName] = dict[propertyName];"); - this.emitLine("[dict removeObjectForKey:propertyName];"); - }); - }); + this.emitExtraComments( + "Rewrite property names that differ in JSON", + ); + this.emitBlock( + ["for (id jsonName in ", className, ".properties)"], + () => { + this.emitLine( + "id propertyName = ", + className, + ".properties[jsonName];", + ); + this.emitBlock( + "if (![jsonName isEqualToString:propertyName])", + () => { + this.emitLine( + "dict[jsonName] = dict[propertyName];", + ); + this.emitLine( + "[dict removeObjectForKey:propertyName];", + ); + }, + ); + }, + ); } if (hasUnsafeProperties) { @@ -596,13 +914,30 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitExtraComments("Map values that need translation"); this.emitLine("[dict addEntriesFromDictionary:@{"); this.indent(() => { - this.forEachClassProperty(t, "none", (propertyName, jsonKey, property) => { - if (!this.implicitlyConvertsToJSON(property.type)) { - const key = stringEscape(jsonKey); - const name = ["_", propertyName]; - this.emitLine('@"', key, '": ', this.toDynamicExpression(property.type, name), ","); - } - }); + this.forEachClassProperty( + t, + "none", + (propertyName, jsonKey, property) => { + if ( + !this.implicitlyConvertsToJSON( + property.type, + ) + ) { + const key = stringEscape(jsonKey); + const name = ["_", propertyName]; + this.emitLine( + '@"', + key, + '": ', + this.toDynamicExpression( + property.type, + name, + ), + ",", + ); + } + }, + ); }); this.emitLine("}];"); } @@ -613,15 +948,26 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (isTopLevel) { this.ensureBlankLine(); - this.emitMethod("- (NSData *_Nullable)toData:(NSError *_Nullable *)error", () => { - this.emitLine("return ", className, "ToData(self, error);"); - }); + this.emitMethod( + "- (NSData *_Nullable)toData:(NSError *_Nullable *)error", + () => { + this.emitLine( + "return ", + className, + "ToData(self, error);", + ); + }, + ); this.ensureBlankLine(); this.emitMethod( "- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error", () => { - this.emitLine("return ", className, "ToJSON(self, encoding, error);"); - } + this.emitLine( + "return ", + className, + "ToJSON(self, encoding, error);", + ); + }, ); } } @@ -636,7 +982,7 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { } protected variableNameForTopLevel(name: Name): Sourcelike { - const camelCaseName = modifySource(serialized => { + const camelCaseName = modifySource((serialized) => { // 1. remove class prefix serialized = serialized.slice(this._classPrefix.length); // 2. camel case @@ -657,29 +1003,53 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.emitLine("@end"); } - private emitPseudoEnumImplementation(enumType: EnumType, enumName: Name): void { + private emitPseudoEnumImplementation( + enumType: EnumType, + enumName: Name, + ): void { this.emitLine("@implementation ", enumName); const instances = [enumName, ".", staticEnumValuesIdentifier]; - this.emitMethod(["+ (NSDictionary *)", staticEnumValuesIdentifier], () => { - this.emitLine("static NSDictionary *", staticEnumValuesIdentifier, ";"); - this.emitLine( - "return ", - staticEnumValuesIdentifier, - " = ", - staticEnumValuesIdentifier, - " ? ", + this.emitMethod( + [ + "+ (NSDictionary *)", staticEnumValuesIdentifier, - " : @{" - ); - this.indent(() => { - this.forEachEnumCase(enumType, "none", (_, jsonValue) => { - const value = ['@"', stringEscape(jsonValue), '"']; - this.emitLine(value, ": [[", enumName, " alloc] initWithValue:", value, "],"); + ], + () => { + this.emitLine( + "static NSDictionary *", + staticEnumValuesIdentifier, + ";", + ); + this.emitLine( + "return ", + staticEnumValuesIdentifier, + " = ", + staticEnumValuesIdentifier, + " ? ", + staticEnumValuesIdentifier, + " : @{", + ); + this.indent(() => { + this.forEachEnumCase(enumType, "none", (_, jsonValue) => { + const value = ['@"', stringEscape(jsonValue), '"']; + this.emitLine( + value, + ": [[", + enumName, + " alloc] initWithValue:", + value, + "],", + ); + }); }); - }); - this.emitLine("};"); - }); + this.emitLine("};"); + }, + ); this.ensureBlankLine(); this.forEachEnumCase(enumType, "none", (name, jsonValue) => { @@ -692,20 +1062,24 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { instances, '[@"', stringEscape(jsonValue), - '"]; }' + '"]; }', ); }); this.ensureBlankLine(); - this.emitMethod("+ (instancetype _Nullable)withValue:(NSString *)value", () => - this.emitLine("return ", instances, "[value];") + this.emitMethod( + "+ (instancetype _Nullable)withValue:(NSString *)value", + () => this.emitLine("return ", instances, "[value];"), ); this.ensureBlankLine(); - this.emitMethod("- (instancetype)initWithValue:(NSString *)value", () => { - this.emitLine("if (self = [super init]) _value = value;"); - this.emitLine("return self;"); - }); + this.emitMethod( + "- (instancetype)initWithValue:(NSString *)value", + () => { + this.emitLine("if (self = [super init]) _value = value;"); + this.emitLine("return self;"); + }, + ); this.ensureBlankLine(); this.emitLine("- (NSUInteger)hash { return _value.hash; }"); @@ -717,7 +1091,9 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (!fileMode) { // We don't have a filename, so we use a top-level name const firstTopLevel = defined(mapFirst(this.topLevels)); - proposedFilename = this.sourcelikeToString(this.nameForNamedType(firstTopLevel)) + ".m"; + proposedFilename = + this.sourcelikeToString(this.nameForNamedType(firstTopLevel)) + + ".m"; } const [filename, extension] = splitExtension(proposedFilename); @@ -733,15 +1109,22 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.forEachTopLevel("none", (t, topLevelName) => { const fromJsonExpression = t instanceof ClassType - ? ["[", topLevelName, " fromJSON:json encoding:NSUTF8Encoding error:&error];"] - : [topLevelName, "FromJSON(json, NSUTF8Encoding, &error);"]; + ? [ + "[", + topLevelName, + " fromJSON:json encoding:NSUTF8Encoding error:&error];", + ] + : [ + topLevelName, + "FromJSON(json, NSUTF8Encoding, &error);", + ]; this.emitLine( "// ", topLevelName, " *", this.variableNameForTopLevel(topLevelName), " = ", - fromJsonExpression + fromJsonExpression, ); }); } @@ -753,9 +1136,10 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { // Emit @class declarations for top-level array+maps and classes this.forEachNamedType( "none", - (_: ClassType, className: Name) => this.emitLine("@class ", className, ";"), + (_: ClassType, className: Name) => + this.emitLine("@class ", className, ";"), (_, enumName) => this.emitLine("@class ", enumName, ";"), - () => null + () => null, ); this.ensureBlankLine(); @@ -765,18 +1149,26 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (this.haveEnums) { this.emitMark("Boxed enums"); - this.forEachEnum("leading-and-interposing", (t, n) => this.emitPseudoEnumInterface(t, n)); + this.forEachEnum("leading-and-interposing", (t, n) => + this.emitPseudoEnumInterface(t, n), + ); } // Emit interfaces for top-level array+maps and classes this.forEachTopLevel( "leading-and-interposing", (t, n) => this.emitNonClassTopLevelTypedef(t, n), - t => !(t instanceof ClassType) + (t) => !(t instanceof ClassType), ); - const hasTopLevelNonClassTypes = iterableSome(this.topLevels, ([_, t]) => !(t instanceof ClassType)); - if (!this._options.justTypes && (hasTopLevelNonClassTypes || this._options.marshallingFunctions)) { + const hasTopLevelNonClassTypes = iterableSome( + this.topLevels, + ([_, t]) => !(t instanceof ClassType), + ); + if ( + !this._options.justTypes && + (hasTopLevelNonClassTypes || this._options.marshallingFunctions) + ) { this.ensureBlankLine(); this.emitMark("Top-level marshaling functions"); this.forEachTopLevel( @@ -784,16 +1176,19 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { (t, n) => this.emitTopLevelFunctionDeclarations(t, n), // Objective-C developers get freaked out by C functions, so we don't // declare them for top-level object types (we always need them for non-object types) - t => this._options.marshallingFunctions || !(t instanceof ClassType) + (t) => + this._options.marshallingFunctions || + !(t instanceof ClassType), ); } this.emitMark("Object interfaces"); this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitClassInterface(c, className), + (c: ClassType, className: Name) => + this.emitClassInterface(c, className), + () => null, () => null, - () => null ); this.ensureBlankLine(); @@ -810,11 +1205,17 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { if (!this._options.justTypes) { this.ensureBlankLine(); this.emitExtraComments("Shorthand for simple blocks"); - this.emitLine("#define λ(decl, expr) (^(decl) { return (expr); })"); + this.emitLine( + "#define λ(decl, expr) (^(decl) { return (expr); })", + ); this.ensureBlankLine(); - this.emitExtraComments("nil → NSNull conversion for JSON dictionaries"); + this.emitExtraComments( + "nil → NSNull conversion for JSON dictionaries", + ); this.emitBlock("static id NSNullify(id _Nullable x)", () => - this.emitLine("return (x == nil || x == NSNull.null) ? NSNull.null : x;") + this.emitLine( + "return (x == nil || x == NSNull.null) ? NSNull.null : x;", + ), ); this.ensureBlankLine(); this.emitLine("NS_ASSUME_NONNULL_BEGIN"); @@ -828,9 +1229,10 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitPrivateClassInterface(c, className), + (c: ClassType, className: Name) => + this.emitPrivateClassInterface(c, className), + () => null, () => null, - () => null ); if (this.haveEnums) { @@ -838,12 +1240,14 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitExtraComments( "These enum-like reference types are needed so that enum", - "values can be contained by NSArray and NSDictionary." + "values can be contained by NSArray and NSDictionary.", ); this.ensureBlankLine(); } - this.forEachEnum("leading-and-interposing", (t, n) => this.emitPseudoEnumImplementation(t, n)); + this.forEachEnum("leading-and-interposing", (t, n) => + this.emitPseudoEnumImplementation(t, n), + ); } this.ensureBlankLine(); @@ -851,14 +1255,17 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitMark("JSON serialization"); - this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitTopLevelFunctions(t, n)); + this.forEachTopLevel("leading-and-interposing", (t, n) => + this.emitTopLevelFunctions(t, n), + ); } this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitClassImplementation(c, className), + (c: ClassType, className: Name) => + this.emitClassImplementation(c, className), + () => null, () => null, - () => null ); if (!this._options.justTypes) { @@ -876,7 +1283,8 @@ export class ObjectiveCRenderer extends ConvenienceRenderer { return ( t instanceof MapType || t instanceof ArrayType || - (t instanceof ClassType && mapSome(t.getProperties(), p => needsMap(p.type))) + (t instanceof ClassType && + mapSome(t.getProperties(), (p) => needsMap(p.type))) ); } diff --git a/packages/quicktype-core/src/language/Objective-C/constants.ts b/packages/quicktype-core/src/language/Objective-C/constants.ts index 84ec8f95f..f483de6c2 100644 --- a/packages/quicktype-core/src/language/Objective-C/constants.ts +++ b/packages/quicktype-core/src/language/Objective-C/constants.ts @@ -46,7 +46,7 @@ export const keywords = [ "unsigned", "void", "volatile", - "while" + "while", ] as const; export const forbiddenPropertyNames = [ @@ -58,7 +58,7 @@ export const forbiddenPropertyNames = [ "mutableCopy", "superclass", "debugDescription", - "new" + "new", ] as const; export const booleanPrefixes = [ @@ -78,5 +78,5 @@ export const booleanPrefixes = [ "requires", "require", "needs", - "need" + "need", ] as const; diff --git a/packages/quicktype-core/src/language/Objective-C/language.ts b/packages/quicktype-core/src/language/Objective-C/language.ts index a8b8b88ad..09199da8d 100644 --- a/packages/quicktype-core/src/language/Objective-C/language.ts +++ b/packages/quicktype-core/src/language/Objective-C/language.ts @@ -1,7 +1,12 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { ObjectiveCRenderer } from "./ObjectiveCRenderer"; import { DEFAULT_CLASS_PREFIX } from "./utils"; @@ -13,23 +18,34 @@ export const objectiveCOptions = { { all: { interface: true, implementation: true }, interface: { interface: true, implementation: false }, - implementation: { interface: false, implementation: true } + implementation: { interface: false, implementation: true }, } as const, - "all" + "all", ), justTypes: new BooleanOption("just-types", "Plain types only", false), - marshallingFunctions: new BooleanOption("functions", "C-style functions", false), - classPrefix: new StringOption("class-prefix", "Class prefix", "PREFIX", DEFAULT_CLASS_PREFIX), - extraComments: new BooleanOption("extra-comments", "Extra comments", false) + marshallingFunctions: new BooleanOption( + "functions", + "C-style functions", + false, + ), + classPrefix: new StringOption( + "class-prefix", + "Class prefix", + "PREFIX", + DEFAULT_CLASS_PREFIX, + ), + extraComments: new BooleanOption("extra-comments", "Extra comments", false), }; export const objectiveCLanguageConfig = { displayName: "Objective-C", names: ["objc", "objective-c", "objectivec"], - extension: "m" + extension: "m", } as const; -export class ObjectiveCTargetLanguage extends TargetLanguage { +export class ObjectiveCTargetLanguage extends TargetLanguage< + typeof objectiveCLanguageConfig +> { public constructor() { super(objectiveCLanguageConfig); } @@ -38,7 +54,14 @@ export class ObjectiveCTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): ObjectiveCRenderer { + return new ObjectiveCRenderer( + this, + renderContext, + getOptionValues(objectiveCOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/Objective-C/utils.ts b/packages/quicktype-core/src/language/Objective-C/utils.ts index cdff7db57..418dac6a0 100644 --- a/packages/quicktype-core/src/language/Objective-C/utils.ts +++ b/packages/quicktype-core/src/language/Objective-C/utils.ts @@ -7,7 +7,7 @@ import { combineWords, firstUpperWordStyle, splitIntoWords, - utf16LegalizeCharacters + utf16LegalizeCharacters, } from "../../support/Strings"; import { booleanPrefixes, forbiddenPropertyNames } from "./constants"; @@ -24,7 +24,7 @@ export function typeNameStyle(prefix: string, original: string): string { allUpperWordStyle, allUpperWordStyle, "", - isStartCharacter + isStartCharacter, ); return addPrefixIfNecessary(prefix, result); } @@ -41,8 +41,11 @@ export function propertyNameStyle(original: string, isBool = false): string { if (isBool) { if (words.length === 0) { words = [{ word: "flag", isAcronym: false }]; + } else if ( + !words[0].isAcronym && // @ts-expect-error needs strict type - } else if (!words[0].isAcronym && !booleanPrefixes.includes(words[0].word)) { + !booleanPrefixes.includes(words[0].word) + ) { words = [{ word: "is", isAcronym: false }, ...words]; } } @@ -62,7 +65,7 @@ export function propertyNameStyle(original: string, isBool = false): string { allLowerWordStyle, allUpperWordStyle, "", - isStartCharacter + isStartCharacter, ); } @@ -72,7 +75,10 @@ function isStartCharacter(utf16Unit: number): boolean { function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); + return ( + ["Nd", "Pc", "Mn", "Mc"].includes(category) || + isStartCharacter(utf16Unit) + ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); diff --git a/packages/quicktype-core/src/language/Php/PhpRenderer.ts b/packages/quicktype-core/src/language/Php/PhpRenderer.ts index b9d2a9512..8dfb3c5e6 100644 --- a/packages/quicktype-core/src/language/Php/PhpRenderer.ts +++ b/packages/quicktype-core/src/language/Php/PhpRenderer.ts @@ -1,18 +1,39 @@ import * as _ from "lodash"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { DependencyName, type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import { + DependencyName, + type Name, + type Namer, + funPrefixNamer, +} from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { defined } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion } from "../../Type/TypeUtils"; - -import { type phpOptions } from "./language"; +import type { TargetLanguage } from "../../TargetLanguage"; +import type { + ClassProperty, + ClassType, + EnumType, + Type, + UnionType, +} from "../../Type"; +import { + directlyReachableSingleNamedType, + matchType, + nullableFromUnion, +} from "../../Type/TypeUtils"; + +import type { phpOptions } from "./language"; import { phpNameStyle, stringEscape } from "./utils"; export interface FunctionNames { @@ -25,7 +46,10 @@ export interface FunctionNames { } export class PhpRenderer extends ConvenienceRenderer { - private readonly _gettersAndSettersForPropertyName = new Map(); + private readonly _gettersAndSettersForPropertyName = new Map< + Name, + FunctionNames + >(); private _haveEmittedLeadingComments = false; @@ -36,12 +60,15 @@ export class PhpRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _options: OptionValues + protected readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -74,37 +101,37 @@ export class PhpRenderer extends ConvenienceRenderer { _className: Name, _p: ClassProperty, _jsonName: string, - name: Name + name: Name, ): FunctionNames { const getterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `get_${lookup(name)}` + (lookup) => `get_${lookup(name)}`, ); const setterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `set_${lookup(name)}` + (lookup) => `set_${lookup(name)}`, ); const validateName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `validate_${lookup(name)}` + (lookup) => `validate_${lookup(name)}`, ); const fromName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `from_${lookup(name)}` + (lookup) => `from_${lookup(name)}`, ); const toName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `to_${lookup(name)}` + (lookup) => `to_${lookup(name)}`, ); const sampleName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, - lookup => `sample_${lookup(name)}` + (lookup) => `sample_${lookup(name)}`, ); return { getter: getterName, @@ -112,7 +139,7 @@ export class PhpRenderer extends ConvenienceRenderer { validate: validateName, from: fromName, to: toName, - sample: sampleName + sample: sampleName, }; } @@ -121,9 +148,15 @@ export class PhpRenderer extends ConvenienceRenderer { className: Name, p: ClassProperty, jsonName: string, - name: Name + name: Name, ): Name[] { - const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter(c, className, p, jsonName, name); + const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( + c, + className, + p, + jsonName, + name, + ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return [ getterAndSetterNames.getter, @@ -131,28 +164,46 @@ export class PhpRenderer extends ConvenienceRenderer { getterAndSetterNames.validate, getterAndSetterNames.to, getterAndSetterNames.from, - getterAndSetterNames.sample + getterAndSetterNames.sample, ]; } private getNameStyling(convention: string): Namer { const styling: { [key: string]: Namer } = { - typeNamingFunction: funPrefixNamer("types", n => - phpNameStyle(true, false, n, acronymStyle(this._options.acronymStyle)) + typeNamingFunction: funPrefixNamer("types", (n) => + phpNameStyle( + true, + false, + n, + acronymStyle(this._options.acronymStyle), + ), ), - propertyNamingFunction: funPrefixNamer("properties", n => - phpNameStyle(false, false, n, acronymStyle(this._options.acronymStyle)) + propertyNamingFunction: funPrefixNamer("properties", (n) => + phpNameStyle( + false, + false, + n, + acronymStyle(this._options.acronymStyle), + ), + ), + enumCaseNamingFunction: funPrefixNamer("enum-cases", (n) => + phpNameStyle( + true, + true, + n, + acronymStyle(this._options.acronymStyle), + ), ), - enumCaseNamingFunction: funPrefixNamer("enum-cases", n => - phpNameStyle(true, true, n, acronymStyle(this._options.acronymStyle)) - ) }; return styling[convention]; } protected startFile(_basename: Sourcelike): void { this.ensureBlankLine(); - if (!this._haveEmittedLeadingComments && this.leadingComments !== undefined) { + if ( + !this._haveEmittedLeadingComments && + this.leadingComments !== undefined + ) { this.emitComments(this.leadingComments); this.ensureBlankLine(); this._haveEmittedLeadingComments = true; @@ -170,7 +221,11 @@ export class PhpRenderer extends ConvenienceRenderer { } public emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } public emitBlock(line: Sourcelike, f: () => void): void { @@ -179,29 +234,38 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine("}"); } - protected phpType(_reference: boolean, t: Type, isOptional = false, prefix = "?", suffix = ""): Sourcelike { + protected phpType( + _reference: boolean, + t: Type, + isOptional = false, + prefix = "?", + suffix = "", + ): Sourcelike { function optionalize(s: Sourcelike): Sourcelike { return [isOptional ? prefix : "", s, isOptional ? suffix : ""]; } return matchType( t, - _anyType => maybeAnnotated(isOptional, anyTypeIssueAnnotation, "Object"), - _nullType => maybeAnnotated(isOptional, nullTypeIssueAnnotation, "Object"), - _boolType => optionalize("bool"), - _integerType => optionalize("int"), - _doubleType => optionalize("float"), - _stringType => optionalize("string"), - _arrayType => optionalize("array"), - classType => optionalize(this.nameForNamedType(classType)), - _mapType => optionalize("stdClass"), - enumType => optionalize(this.nameForNamedType(enumType)), - unionType => { + (_anyType) => + maybeAnnotated(isOptional, anyTypeIssueAnnotation, "Object"), + (_nullType) => + maybeAnnotated(isOptional, nullTypeIssueAnnotation, "Object"), + (_boolType) => optionalize("bool"), + (_integerType) => optionalize("int"), + (_doubleType) => optionalize("float"), + (_stringType) => optionalize("string"), + (_arrayType) => optionalize("array"), + (classType) => optionalize(this.nameForNamedType(classType)), + (_mapType) => optionalize("stdClass"), + (enumType) => optionalize(this.nameForNamedType(enumType)), + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.phpType(true, nullable, true, prefix, suffix); + if (nullable !== null) + return this.phpType(true, nullable, true, prefix, suffix); return this.nameForNamedType(unionType); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "time") { throw Error('transformedStringType.kind === "time"'); } @@ -219,55 +283,61 @@ export class PhpRenderer extends ConvenienceRenderer { } return "string"; - } + }, ); } protected phpDocConvertType(className: Name, t: Type): Sourcelike { return matchType( t, - _anyType => "any", - _nullType => "null", - _boolType => "bool", - _integerType => "int", - _doubleType => "float", - _stringType => "string", - arrayType => [this.phpDocConvertType(className, arrayType.items), "[]"], - _classType => _classType.getCombinedName(), - _mapType => "stdClass", - enumType => this.nameForNamedType(enumType), - unionType => { + (_anyType) => "any", + (_nullType) => "null", + (_boolType) => "bool", + (_integerType) => "int", + (_doubleType) => "float", + (_stringType) => "string", + (arrayType) => [ + this.phpDocConvertType(className, arrayType.items), + "[]", + ], + (_classType) => _classType.getCombinedName(), + (_mapType) => "stdClass", + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { - return [this.phpDocConvertType(className, nullable), "|null"]; + return [ + this.phpDocConvertType(className, nullable), + "|null", + ]; } throw Error("union are not supported"); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "DateTime"; } throw Error('transformedStringType.kind === "unknown"'); - } + }, ); } protected phpConvertType(className: Name, t: Type): Sourcelike { return matchType( t, - _anyType => "any", - _nullType => "null", - _boolType => "bool", - _integerType => "int", - _doubleType => "float", - _stringType => "string", - _arrayType => "array", - _classType => "stdClass", - _mapType => "stdClass", - _enumType => "string", // TODO number this.nameForNamedType(enumType), - unionType => { + (_anyType) => "any", + (_nullType) => "null", + (_boolType) => "bool", + (_integerType) => "int", + (_doubleType) => "float", + (_stringType) => "string", + (_arrayType) => "array", + (_classType) => "stdClass", + (_mapType) => "stdClass", + (_enumType) => "string", // TODO number this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return ["?", this.phpConvertType(className, nullable)]; @@ -275,50 +345,76 @@ export class PhpRenderer extends ConvenienceRenderer { throw Error("union are not supported"); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "string"; } throw Error('transformedStringType.kind === "unknown"'); - } + }, ); } - protected phpToObjConvert(className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[]): void { + protected phpToObjConvert( + className: Name, + t: Type, + lhs: Sourcelike[], + args: Sourcelike[], + ): void { matchType( t, - _anyType => this.emitLine(...lhs, ...args, "; /*any*/"), - _nullType => this.emitLine(...lhs, ...args, "; /*null*/"), - _boolType => this.emitLine(...lhs, ...args, "; /*bool*/"), - _integerType => this.emitLine(...lhs, ...args, "; /*int*/"), - _doubleType => this.emitLine(...lhs, ...args, "; /*float*/"), - _stringType => this.emitLine(...lhs, ...args, "; /*string*/"), - arrayType => { + (_anyType) => this.emitLine(...lhs, ...args, "; /*any*/"), + (_nullType) => this.emitLine(...lhs, ...args, "; /*null*/"), + (_boolType) => this.emitLine(...lhs, ...args, "; /*bool*/"), + (_integerType) => this.emitLine(...lhs, ...args, "; /*int*/"), + (_doubleType) => this.emitLine(...lhs, ...args, "; /*float*/"), + (_stringType) => this.emitLine(...lhs, ...args, "; /*string*/"), + (arrayType) => { this.emitLine(...lhs, "array_map(function ($value) {"); this.indent(() => { - this.phpToObjConvert(className, arrayType.items, ["return "], ["$value"]); + this.phpToObjConvert( + className, + arrayType.items, + ["return "], + ["$value"], + ); // this.emitLine("return $tmp;"); }); this.emitLine("}, ", ...args, ");"); }, - _classType => this.emitLine(...lhs, ...args, "->to(); ", "/*class*/"), - mapType => { + (_classType) => + this.emitLine(...lhs, ...args, "->to(); ", "/*class*/"), + (mapType) => { this.emitBlock(["function to($my): stdClass"], () => { this.emitLine("$out = new stdClass();"); this.emitBlock(["foreach ($my as $k => $v)"], () => { - this.phpToObjConvert(className, mapType.values, ["$my->$k = "], ["$v"]); + this.phpToObjConvert( + className, + mapType.values, + ["$my->$k = "], + ["$v"], + ); }); this.emitLine("return $out;"); }); this.emitLine("return to(", ...args, ");"); }, - enumType => this.emitLine(...lhs, this.nameForNamedType(enumType), "::to(", ...args, "); ", "/*enum*/"), - unionType => { + (enumType) => + this.emitLine( + ...lhs, + this.nameForNamedType(enumType), + "::to(", + ...args, + "); ", + "/*enum*/", + ), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { this.emitLine("if (!is_null(", ...args, ")) {"); - this.indent(() => this.phpToObjConvert(className, nullable, lhs, args)); + this.indent(() => + this.phpToObjConvert(className, nullable, lhs, args), + ); this.emitLine("} else {"); this.indent(() => this.emitLine(...lhs, " null;")); this.emitLine("}"); @@ -327,61 +423,107 @@ export class PhpRenderer extends ConvenienceRenderer { throw Error("union are not supported"); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { - this.emitLine(...lhs, ...args, "->format(DateTimeInterface::ISO8601);"); + this.emitLine( + ...lhs, + ...args, + "->format(DateTimeInterface::ISO8601);", + ); return; } throw Error('transformedStringType.kind === "unknown"'); - } + }, ); } - private transformDateTime(className: Name, attrName: Sourcelike, scopeAttrName: Sourcelike[]): void { + private transformDateTime( + className: Name, + attrName: Sourcelike, + scopeAttrName: Sourcelike[], + ): void { this.emitBlock(["if (!is_a(", scopeAttrName, ", 'DateTime'))"], () => - this.emitLine("throw new Exception('Attribute Error:", className, "::", attrName, "');") + this.emitLine( + "throw new Exception('Attribute Error:", + className, + "::", + attrName, + "');", + ), ); // if (lhs !== undefined) { // this.emitLine(lhs, "$tmp;"); // } } - protected phpFromObjConvert(className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[]): void { + protected phpFromObjConvert( + className: Name, + t: Type, + lhs: Sourcelike[], + args: Sourcelike[], + ): void { matchType( t, - _anyType => this.emitLine(...lhs, ...args, "; /*any*/"), - _nullType => this.emitLine(...lhs, ...args, "; /*null*/"), - _boolType => this.emitLine(...lhs, ...args, "; /*bool*/"), - _integerType => this.emitLine(...lhs, ...args, "; /*int*/"), - _doubleType => this.emitLine(...lhs, ...args, "; /*float*/"), - _stringType => this.emitLine(...lhs, ...args, "; /*string*/"), - arrayType => { + (_anyType) => this.emitLine(...lhs, ...args, "; /*any*/"), + (_nullType) => this.emitLine(...lhs, ...args, "; /*null*/"), + (_boolType) => this.emitLine(...lhs, ...args, "; /*bool*/"), + (_integerType) => this.emitLine(...lhs, ...args, "; /*int*/"), + (_doubleType) => this.emitLine(...lhs, ...args, "; /*float*/"), + (_stringType) => this.emitLine(...lhs, ...args, "; /*string*/"), + (arrayType) => { this.emitLine(...lhs, " array_map(function ($value) {"); this.indent(() => { - this.phpFromObjConvert(className, arrayType.items, ["return "], ["$value"]); + this.phpFromObjConvert( + className, + arrayType.items, + ["return "], + ["$value"], + ); // this.emitLine("return $tmp;"); }); this.emitLine("}, ", ...args, ");"); }, - classType => - this.emitLine(...lhs, this.nameForNamedType(classType), "::from(", ...args, "); ", "/*class*/"), - mapType => { + (classType) => + this.emitLine( + ...lhs, + this.nameForNamedType(classType), + "::from(", + ...args, + "); ", + "/*class*/", + ), + (mapType) => { this.emitBlock(["function from($my): stdClass"], () => { this.emitLine("$out = new stdClass();"); this.emitBlock(["foreach ($my as $k => $v)"], () => { - this.phpFromObjConvert(className, mapType.values, ["$out->$k = "], ["$v"]); + this.phpFromObjConvert( + className, + mapType.values, + ["$out->$k = "], + ["$v"], + ); }); this.emitLine("return $out;"); }); this.emitLine("return from(", ...args, ");"); }, - enumType => this.emitLine(...lhs, this.nameForNamedType(enumType), "::from(", ...args, "); ", "/*enum*/"), - unionType => { + (enumType) => + this.emitLine( + ...lhs, + this.nameForNamedType(enumType), + "::from(", + ...args, + "); ", + "/*enum*/", + ), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { this.emitLine("if (!is_null(", ...args, ")) {"); - this.indent(() => this.phpFromObjConvert(className, nullable, lhs, args)); + this.indent(() => + this.phpFromObjConvert(className, nullable, lhs, args), + ); this.emitLine("} else {"); this.indent(() => this.emitLine("return null;")); this.emitLine("}"); @@ -390,16 +532,21 @@ export class PhpRenderer extends ConvenienceRenderer { throw Error("union are not supported"); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { - this.emitLine("$tmp = ", "DateTime::createFromFormat(DateTimeInterface::ISO8601, ", args, ");"); + this.emitLine( + "$tmp = ", + "DateTime::createFromFormat(DateTimeInterface::ISO8601, ", + args, + ");", + ); this.transformDateTime(className, "", ["$tmp"]); this.emitLine("return $tmp;"); return; } throw Error('transformedStringType.kind === "unknown"'); - } + }, ); } @@ -409,11 +556,11 @@ export class PhpRenderer extends ConvenienceRenderer { lhs: Sourcelike[], args: Sourcelike[], idx: number, - suffix: Sourcelike + suffix: Sourcelike, ): void { matchType( t, - _anyType => + (_anyType) => this.emitLine( ...lhs, "'AnyType::", @@ -427,13 +574,53 @@ export class PhpRenderer extends ConvenienceRenderer { "" + idx, ":", args, - "*/" + "*/", + ), + (_nullType) => + this.emitLine( + ...lhs, + "null", + suffix, + " /*", + "" + idx, + ":", + args, + "*/", + ), + (_boolType) => + this.emitLine( + ...lhs, + "true", + suffix, + " /*", + "" + idx, + ":", + args, + "*/", ), - _nullType => this.emitLine(...lhs, "null", suffix, " /*", "" + idx, ":", args, "*/"), - _boolType => this.emitLine(...lhs, "true", suffix, " /*", "" + idx, ":", args, "*/"), - _integerType => this.emitLine(...lhs, "" + idx, suffix, " /*", "" + idx, ":", args, "*/"), - _doubleType => this.emitLine(...lhs, "" + (idx + idx / 1000), suffix, " /*", "" + idx, ":", args, "*/"), - _stringType => + (_integerType) => + this.emitLine( + ...lhs, + "" + idx, + suffix, + " /*", + "" + idx, + ":", + args, + "*/", + ), + (_doubleType) => + this.emitLine( + ...lhs, + "" + (idx + idx / 1000), + suffix, + " /*", + "" + idx, + ":", + args, + "*/", + ), + (_stringType) => this.emitLine( ...lhs, "'", @@ -447,16 +634,23 @@ export class PhpRenderer extends ConvenienceRenderer { "" + idx, ":", args, - "*/" + "*/", ), - arrayType => { + (arrayType) => { this.emitLine(...lhs, " array("); this.indent(() => { - this.phpSampleConvert(className, arrayType.items, [], [], idx, ""); + this.phpSampleConvert( + className, + arrayType.items, + [], + [], + idx, + "", + ); }); this.emitLine("); /* ", "" + idx, ":", args, "*/"); }, - classType => + (classType) => this.emitLine( ...lhs, this.nameForNamedType(classType), @@ -466,27 +660,48 @@ export class PhpRenderer extends ConvenienceRenderer { "" + idx, ":", args, - "*/" + "*/", ), - mapType => { + (mapType) => { this.emitBlock(["function sample(): stdClass"], () => { this.emitLine("$out = new stdClass();"); - this.phpSampleConvert(className, mapType.values, ["$out->{'", className, "'} = "], args, idx, ";"); + this.phpSampleConvert( + className, + mapType.values, + ["$out->{'", className, "'} = "], + args, + idx, + ";", + ); this.emitLine("return $out;"); }); this.emitLine("return sample();"); }, - enumType => this.emitLine(...lhs, this.nameForNamedType(enumType), "::sample()", suffix, " /*enum*/"), - unionType => { + (enumType) => + this.emitLine( + ...lhs, + this.nameForNamedType(enumType), + "::sample()", + suffix, + " /*enum*/", + ), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { - this.phpSampleConvert(className, nullable, lhs, args, idx, suffix); + this.phpSampleConvert( + className, + nullable, + lhs, + args, + idx, + suffix, + ); return; } - throw Error("union are not supported:" + unionType); + throw Error(`union are not supported:${unionType}`); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { const x = _.pad("" + (1 + (idx % 31)), 2, "0"); this.emitLine( @@ -494,72 +709,111 @@ export class PhpRenderer extends ConvenienceRenderer { "DateTime::createFromFormat(DateTimeInterface::ISO8601, '", `2020-12-${x}T12:${x}:${x}+00:00`, "')", - suffix + suffix, ); // this.emitLine("return sample();"); return; } throw Error('transformedStringType.kind === "unknown"'); - } + }, ); } - private phpValidate(className: Name, t: Type, attrName: Sourcelike, scopeAttrName: string): void { + private phpValidate( + className: Name, + t: Type, + attrName: Sourcelike, + scopeAttrName: string, + ): void { const is = (isfn: string, myT: Name = className): void => { this.emitBlock(["if (!", isfn, "(", scopeAttrName, "))"], () => - this.emitLine('throw new Exception("Attribute Error:', myT, "::", attrName, '");') + this.emitLine( + 'throw new Exception("Attribute Error:', + myT, + "::", + attrName, + '");', + ), ); }; matchType( t, - _anyType => is("defined"), - _nullType => is("is_null"), - _boolType => is("is_bool"), - _integerType => is("is_integer"), - _doubleType => is("is_float"), - _stringType => is("is_string"), - arrayType => { + (_anyType) => is("defined"), + (_nullType) => is("is_null"), + (_boolType) => is("is_bool"), + (_integerType) => is("is_integer"), + (_doubleType) => is("is_float"), + (_stringType) => is("is_string"), + (arrayType) => { is("is_array"); - this.emitLine("array_walk(", scopeAttrName, ", function(", scopeAttrName, "_v) {"); + this.emitLine( + "array_walk(", + scopeAttrName, + ", function(", + scopeAttrName, + "_v) {", + ); this.indent(() => { - this.phpValidate(className, arrayType.items, attrName, `${scopeAttrName}_v`); + this.phpValidate( + className, + arrayType.items, + attrName, + `${scopeAttrName}_v`, + ); }); this.emitLine("});"); }, - _classType => { + (_classType) => { this.emitLine(scopeAttrName, "->validate();"); }, - mapType => { + (mapType) => { this.emitLine("foreach (", scopeAttrName, " as $k => $v) {"); this.indent(() => { this.phpValidate(className, mapType.values, attrName, "$v"); }); this.emitLine("}"); }, - enumType => { - this.emitLine(this.phpType(false, enumType), "::to(", scopeAttrName, ");"); + (enumType) => { + this.emitLine( + this.phpType(false, enumType), + "::to(", + scopeAttrName, + ");", + ); }, - unionType => { + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { - this.emitBlock(["if (!is_null(", scopeAttrName, "))"], () => { - this.phpValidate(className, nullable, attrName, scopeAttrName); - }); + this.emitBlock( + ["if (!is_null(", scopeAttrName, "))"], + () => { + this.phpValidate( + className, + nullable, + attrName, + scopeAttrName, + ); + }, + ); return; } throw Error("not implemented"); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { - this.transformDateTime(className, attrName, [scopeAttrName]); + this.transformDateTime(className, attrName, [ + scopeAttrName, + ]); return; } - throw Error(`transformedStringType.kind === ${transformedStringType.kind}`); - } + throw Error( + `transformedStringType.kind === ${transformedStringType.kind}`, + ); + }, ); } @@ -568,7 +822,7 @@ export class PhpRenderer extends ConvenienceRenderer { p: ClassProperty, className: Name, _name: Name, - desc?: string[] + desc?: string[], ): void { this.emitLine("/**"); if (desc !== undefined) { @@ -577,7 +831,11 @@ export class PhpRenderer extends ConvenienceRenderer { } // this.emitLine(" * @param ", this.phpType(false, p.type, false, "", "|null")); - this.emitLine(" * @param ", this.phpConvertType(className, p.type), " $value"); + this.emitLine( + " * @param ", + this.phpConvertType(className, p.type), + " $value", + ); this.emitLine(" * @throws Exception"); this.emitLine(" * @return ", this.phpType(false, p.type)); this.emitLine(" */"); @@ -588,16 +846,27 @@ export class PhpRenderer extends ConvenienceRenderer { "(", this.phpConvertType(className, p.type), " $value): ", - this.phpType(false, p.type) + this.phpType(false, p.type), ], () => { - this.phpFromObjConvert(className, p.type, ["return "], ["$value"]); + this.phpFromObjConvert( + className, + p.type, + ["return "], + ["$value"], + ); // this.emitLine("return $ret;"); - } + }, ); } - protected emitToMethod(names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[]): void { + protected emitToMethod( + names: FunctionNames, + p: ClassProperty, + className: Name, + name: Name, + desc?: string[], + ): void { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); @@ -607,12 +876,42 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine(" * @throws Exception"); this.emitLine(" * @return ", this.phpConvertType(className, p.type)); this.emitLine(" */"); - this.emitBlock(["public function ", names.to, "(): ", this.phpConvertType(className, p.type)], () => { - this.emitBlock(["if (", className, "::", names.validate, "($this->", name, ")) "], () => { - this.phpToObjConvert(className, p.type, ["return "], ["$this->", name]); - }); - this.emitLine("throw new Exception('never get to this ", className, "::", name, "');"); - }); + this.emitBlock( + [ + "public function ", + names.to, + "(): ", + this.phpConvertType(className, p.type), + ], + () => { + this.emitBlock( + [ + "if (", + className, + "::", + names.validate, + "($this->", + name, + ")) ", + ], + () => { + this.phpToObjConvert( + className, + p.type, + ["return "], + ["$this->", name], + ); + }, + ); + this.emitLine( + "throw new Exception('never get to this ", + className, + "::", + name, + "');", + ); + }, + ); } protected emitValidateMethod( @@ -620,7 +919,7 @@ export class PhpRenderer extends ConvenienceRenderer { p: ClassProperty, className: Name, name: Name, - desc?: string[] + desc?: string[], ): void { this.emitLine("/**"); if (desc !== undefined) { @@ -628,16 +927,25 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine(" *"); } - this.emitLine(" * @param ", this.phpType(false, p.type, false, "", "|null")); + this.emitLine( + " * @param ", + this.phpType(false, p.type, false, "", "|null"), + ); this.emitLine(" * @return bool"); this.emitLine(" * @throws Exception"); this.emitLine(" */"); this.emitBlock( - ["public static function ", names.validate, "(", this.phpType(false, p.type), " $value): bool"], + [ + "public static function ", + names.validate, + "(", + this.phpType(false, p.type), + " $value): bool", + ], () => { this.phpValidate(className, p.type, name, "$value"); this.emitLine("return true;"); - } + }, ); } @@ -646,7 +954,7 @@ export class PhpRenderer extends ConvenienceRenderer { p: ClassProperty, className: Name, name: Name, - desc?: string[] + desc?: string[], ): void { if (this._options.withGet) { this.emitLine("/**"); @@ -662,24 +970,38 @@ export class PhpRenderer extends ConvenienceRenderer { const rendered = this.phpType(false, p.type); this.emitLine(" * @return ", rendered); this.emitLine(" */"); - this.emitBlock(["public function ", names.getter, "(): ", rendered], () => { - if (!this._options.fastGet) { - this.emitBlock(["if (", className, "::", names.validate, "($this->", name, ")) "], () => { + this.emitBlock( + ["public function ", names.getter, "(): ", rendered], + () => { + if (!this._options.fastGet) { + this.emitBlock( + [ + "if (", + className, + "::", + names.validate, + "($this->", + name, + ")) ", + ], + () => { + this.emitLine("return $this->", name, ";"); + }, + ); + this.emitLine( + "throw new Exception('never get to ", + names.getter, + " ", + className, + "::", + name, + "');", + ); + } else { this.emitLine("return $this->", name, ";"); - }); - this.emitLine( - "throw new Exception('never get to ", - names.getter, - " ", - className, - "::", - name, - "');" - ); - } else { - this.emitLine("return $this->", name, ";"); - } - }); + } + }, + ); } } @@ -688,7 +1010,7 @@ export class PhpRenderer extends ConvenienceRenderer { p: ClassProperty, className: Name, name: Name, - desc?: string[] + desc?: string[], ): void { if (this._options.withSet) { this.emitLine("/**"); @@ -697,14 +1019,29 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitLine(" *"); } - this.emitLine(" * @param ", this.phpType(false, p.type, false, "", "|null")); + this.emitLine( + " * @param ", + this.phpType(false, p.type, false, "", "|null"), + ); this.emitLine(" * @throws Exception"); this.emitLine(" */"); - this.emitBlock(["public function ", names.setter, "(", this.phpType(false, p.type), " $value)"], () => { - this.emitBlock(["if (", className, "::", names.validate, "($value)) "], () => { - this.emitLine("$this->", name, " = $value;"); - }); - }); + this.emitBlock( + [ + "public function ", + names.setter, + "(", + this.phpType(false, p.type), + " $value)", + ], + () => { + this.emitBlock( + ["if (", className, "::", names.validate, "($value)) "], + () => { + this.emitLine("$this->", name, " = $value;"); + }, + ); + }, + ); } } @@ -714,7 +1051,7 @@ export class PhpRenderer extends ConvenienceRenderer { className: Name, name: Name, desc: string[] | undefined, - idx: number + idx: number, ): void { if (this._options.withGet) { this.emitLine("/**"); @@ -726,9 +1063,19 @@ export class PhpRenderer extends ConvenienceRenderer { const rendered = this.phpType(false, p.type); this.emitLine(" * @return ", rendered); this.emitLine(" */"); - this.emitBlock(["public static function ", names.sample, "(): ", rendered], () => { - this.phpSampleConvert(className, p.type, ["return "], [name], idx, ";"); - }); + this.emitBlock( + ["public static function ", names.sample, "(): ", rendered], + () => { + this.phpSampleConvert( + className, + p.type, + ["return "], + [name], + idx, + ";", + ); + }, + ); } } @@ -745,7 +1092,7 @@ export class PhpRenderer extends ConvenienceRenderer { "; // json:", jsonName, " ", - p.type.isNullable ? "Optional" : "Required" + p.type.isNullable ? "Optional" : "Required", ); }); @@ -756,48 +1103,102 @@ export class PhpRenderer extends ConvenienceRenderer { this.forEachClassProperty(c, "none", (name, __, p) => { args.push([prefix, this.phpType(false, p.type), " $", name]); prefix = ", "; - comments.push([" * @param ", this.phpType(false, p.type, false, "", "|null"), " $", name, "\n"]); - }); - this.emitBlock(["/**\n", ...comments, " */\n", "public function __construct(", ...args, ")"], () => { - this.forEachClassProperty(c, "none", name => { - this.emitLine("$this->", name, " = $", name, ";"); - }); + comments.push([ + " * @param ", + this.phpType(false, p.type, false, "", "|null"), + " $", + name, + "\n", + ]); }); + this.emitBlock( + [ + "/**\n", + ...comments, + " */\n", + "public function __construct(", + ...args, + ")", + ], + () => { + this.forEachClassProperty(c, "none", (name) => { + this.emitLine("$this->", name, " = $", name, ";"); + }); + }, + ); let idx = 31; - this.forEachClassProperty(c, "leading-and-interposing", (name, jsonName, p) => { - const desc = this.descriptionForClassProperty(c, jsonName); - const names = defined(this._gettersAndSettersForPropertyName.get(name)); - - this.ensureBlankLine(); - this.emitFromMethod(names, p, className, name, desc); - this.ensureBlankLine(); - this.emitToMethod(names, p, className, name, desc); - this.ensureBlankLine(); - this.emitValidateMethod(names, p, className, name, desc); - this.ensureBlankLine(); - this.emitGetMethod(names, p, className, name, desc); - this.ensureBlankLine(); - this.emitSetMethod(names, p, className, name, desc); - this.ensureBlankLine(); - this.emitSampleMethod(names, p, className, name, desc, idx++); - }); + this.forEachClassProperty( + c, + "leading-and-interposing", + (name, jsonName, p) => { + const desc = this.descriptionForClassProperty(c, jsonName); + const names = defined( + this._gettersAndSettersForPropertyName.get(name), + ); + + this.ensureBlankLine(); + this.emitFromMethod(names, p, className, name, desc); + this.ensureBlankLine(); + this.emitToMethod(names, p, className, name, desc); + this.ensureBlankLine(); + this.emitValidateMethod(names, p, className, name, desc); + this.ensureBlankLine(); + this.emitGetMethod(names, p, className, name, desc); + this.ensureBlankLine(); + this.emitSetMethod(names, p, className, name, desc); + this.ensureBlankLine(); + this.emitSampleMethod( + names, + p, + className, + name, + desc, + idx++, + ); + }, + ); this.ensureBlankLine(); this.emitBlock( - ["/**\n", " * @throws Exception\n", " * @return bool\n", " */\n", "public function validate(): bool"], + [ + "/**\n", + " * @throws Exception\n", + " * @return bool\n", + " */\n", + "public function validate(): bool", + ], () => { - let lines: Sourcelike[][] = []; + const lines: Sourcelike[][] = []; let p = "return "; - this.forEachClassProperty(c, "none", (name, _jsonName, _p) => { - const names = defined(this._gettersAndSettersForPropertyName.get(name)); - lines.push([p, className, "::", names.validate, "($this->", name, ")"]); - p = "|| "; - }); + this.forEachClassProperty( + c, + "none", + (name, _jsonName, _p) => { + const names = defined( + this._gettersAndSettersForPropertyName.get( + name, + ), + ); + lines.push([ + p, + className, + "::", + names.validate, + "($this->", + name, + ")", + ]); + p = "|| "; + }, + ); lines.forEach((line, jdx) => { - this.emitLine(...line, lines.length === jdx + 1 ? ";" : ""); + this.emitLine( + ...line, + lines.length === jdx + 1 ? ";" : "", + ); }); - } + }, ); this.ensureBlankLine(); @@ -807,16 +1208,24 @@ export class PhpRenderer extends ConvenienceRenderer { " * @return stdClass\n", " * @throws Exception\n", " */\n", - "public function to(): stdClass " + "public function to(): stdClass ", ], () => { this.emitLine("$out = new stdClass();"); this.forEachClassProperty(c, "none", (name, jsonName) => { - const names = defined(this._gettersAndSettersForPropertyName.get(name)); - this.emitLine("$out->{'", jsonName, "'} = $this->", names.to, "();"); + const names = defined( + this._gettersAndSettersForPropertyName.get(name), + ); + this.emitLine( + "$out->{'", + jsonName, + "'} = $this->", + names.to, + "();", + ); }); this.emitLine("return $out;"); - } + }, ); this.ensureBlankLine(); @@ -830,39 +1239,76 @@ export class PhpRenderer extends ConvenienceRenderer { " * @throws Exception\n", " */\n", "public static function from(stdClass $obj): ", - className + className, ], () => { if (this._options.fastGet) { - this.forEachClassProperty(c, "none", name => { - const names = defined(this._gettersAndSettersForPropertyName.get(name)); - this.emitLine(className, "::", names.validate, "($this->", name, ", true);"); + this.forEachClassProperty(c, "none", (name) => { + const names = defined( + this._gettersAndSettersForPropertyName.get( + name, + ), + ); + this.emitLine( + className, + "::", + names.validate, + "($this->", + name, + ", true);", + ); }); } this.emitLine("return new ", className, "("); let comma = " "; this.forEachClassProperty(c, "none", (name, jsonName) => { - const names = defined(this._gettersAndSettersForPropertyName.get(name)); - this.emitLine(comma, className, "::", names.from, "($obj->{'", jsonName, "'})"); + const names = defined( + this._gettersAndSettersForPropertyName.get(name), + ); + this.emitLine( + comma, + className, + "::", + names.from, + "($obj->{'", + jsonName, + "'})", + ); comma = ","; }); this.emitLine(");"); - } + }, ); this.ensureBlankLine(); this.emitBlock( - ["/**\n", " * @return ", className, "\n", " */\n", "public static function sample(): ", className], + [ + "/**\n", + " * @return ", + className, + "\n", + " */\n", + "public static function sample(): ", + className, + ], () => { this.emitLine("return new ", className, "("); let comma = " "; - this.forEachClassProperty(c, "none", name => { - const names = defined(this._gettersAndSettersForPropertyName.get(name)); - this.emitLine(comma, className, "::", names.sample, "()"); + this.forEachClassProperty(c, "none", (name) => { + const names = defined( + this._gettersAndSettersForPropertyName.get(name), + ); + this.emitLine( + comma, + className, + "::", + names.sample, + "()", + ); comma = ","; }); this.emitLine(");"); - } + }, ); }); this.finishFile(); @@ -901,14 +1347,26 @@ export class PhpRenderer extends ConvenienceRenderer { this.emitBlock("public static function init()", () => { this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine(enumName, "::$", name, " = new ", enumName, "('", jsonName, "');"); + this.emitLine( + enumName, + "::$", + name, + " = new ", + enumName, + "('", + jsonName, + "');", + ); }); }); this.emitLine("private ", enumSerdeType, " $enum;"); - this.emitBlock(["public function __construct(", enumSerdeType, " $enum)"], () => { - this.emitLine("$this->enum = $enum;"); - }); + this.emitBlock( + ["public function __construct(", enumSerdeType, " $enum)"], + () => { + this.emitLine("$this->enum = $enum;"); + }, + ); this.ensureBlankLine(); this.emitEnumSerializationAttributes(e); @@ -927,7 +1385,7 @@ export class PhpRenderer extends ConvenienceRenderer { "public static function to(", enumName, " $obj): ", - enumSerdeType + enumSerdeType, ], () => { this.emitLine("switch ($obj->enum) {"); @@ -941,13 +1399,15 @@ export class PhpRenderer extends ConvenienceRenderer { name, "->enum: return '", stringEscape(jsonName), - "';" + "';", ); }); }); this.emitLine("}"); - this.emitLine("throw new Exception('the give value is not an enum-value.');"); - } + this.emitLine( + "throw new Exception('the give value is not an enum-value.');", + ); + }, ); this.ensureBlankLine(); this.emitEnumDeserializationAttributes(e); @@ -962,30 +1422,50 @@ export class PhpRenderer extends ConvenienceRenderer { " * @throws Exception\n", " */\n", "public static function from($obj): ", - enumName + enumName, ], () => { this.emitLine("switch ($obj) {"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { // Todo String or Enum - this.emitLine("case '", stringEscape(jsonName), "': return ", enumName, "::$", name, ";"); + this.emitLine( + "case '", + stringEscape(jsonName), + "': return ", + enumName, + "::$", + name, + ";", + ); }); }); this.emitLine("}"); - this.emitLine('throw new Exception("Cannot deserialize ', enumName, '");'); - } + this.emitLine( + 'throw new Exception("Cannot deserialize ', + enumName, + '");', + ); + }, ); this.ensureBlankLine(); this.emitBlock( - ["/**\n", " * @return ", enumName, "\n", " */\n", "public static function sample(): ", enumName], + [ + "/**\n", + " * @return ", + enumName, + "\n", + " */\n", + "public static function sample(): ", + enumName, + ], () => { const lines: Sourcelike[] = []; - this.forEachEnumCase(e, "none", name => { + this.forEachEnumCase(e, "none", (name) => { lines.push([enumName, "::$", name]); }); this.emitLine("return ", lines[0], ";"); - } + }, ); }); this.emitLine(enumName, "::init();"); @@ -998,7 +1478,7 @@ export class PhpRenderer extends ConvenienceRenderer { "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) + (u, n) => this.emitUnionDefinition(u, n), ); if (this._options.withClosing) { this.emitLine("?>"); diff --git a/packages/quicktype-core/src/language/Php/language.ts b/packages/quicktype-core/src/language/Php/language.ts index f4860749d..0e8aa7f1c 100644 --- a/packages/quicktype-core/src/language/Php/language.ts +++ b/packages/quicktype-core/src/language/Php/language.ts @@ -1,10 +1,13 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { PhpRenderer } from "./PhpRenderer"; @@ -13,16 +16,18 @@ export const phpOptions = { fastGet: new BooleanOption("fast-get", "getter without validation", false), withSet: new BooleanOption("with-set", "Create Setter", false), withClosing: new BooleanOption("with-closing", "PHP Closing Tag", false), - acronymStyle: acronymOption(AcronymStyleOptions.Pascal) + acronymStyle: acronymOption(AcronymStyleOptions.Pascal), }; export const phpLanguageConfig = { displayName: "PHP", names: ["php"], - extension: "php" + extension: "php", } as const; -export class PhpTargetLanguage extends TargetLanguage { +export class PhpTargetLanguage extends TargetLanguage< + typeof phpLanguageConfig +> { public constructor() { super(phpLanguageConfig); } @@ -35,13 +40,17 @@ export class PhpTargetLanguage extends TargetLanguage return true; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PhpRenderer { + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): PhpRenderer { const options = getOptionValues(phpOptions, untypedOptionValues); return new PhpRenderer(this, renderContext, options); } public get stringTypeMapping(): StringTypeMapping { - const mapping: Map = new Map(); + const mapping: Map = + new Map(); mapping.set("date", "date"); // TODO is not implemented yet mapping.set("time", "time"); // TODO is not implemented yet mapping.set("uuid", "uuid"); // TODO is not implemented yet diff --git a/packages/quicktype-core/src/language/Php/utils.ts b/packages/quicktype-core/src/language/Php/utils.ts index 2ccb0e228..a235dc908 100644 --- a/packages/quicktype-core/src/language/Php/utils.ts +++ b/packages/quicktype-core/src/language/Php/utils.ts @@ -12,10 +12,12 @@ import { splitIntoWords, standardUnicodeHexEscape, utf16ConcatMap, - utf16LegalizeCharacters + utf16LegalizeCharacters, } from "../../support/Strings"; -export const stringEscape = utf16ConcatMap(escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape)); +export const stringEscape = utf16ConcatMap( + escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape), +); function isStartCharacter(codePoint: number): boolean { if (codePoint === 0x5f) return true; // underscore @@ -23,7 +25,10 @@ function isStartCharacter(codePoint: number): boolean { } function isPartCharacter(codePoint: number): boolean { - return isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)); + return ( + isStartCharacter(codePoint) || + (isAscii(codePoint) && isDigit(codePoint)) + ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); @@ -32,17 +37,23 @@ export function phpNameStyle( startWithUpper: boolean, upperUnderscore: boolean, original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle + acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, - upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, + upperUnderscore + ? allUpperWordStyle + : startWithUpper + ? firstUpperWordStyle + : allLowerWordStyle, upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, - upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, + upperUnderscore || startWithUpper + ? allUpperWordStyle + : allLowerWordStyle, acronymsStyle, upperUnderscore ? "_" : "", - isStartCharacter + isStartCharacter, ); } diff --git a/packages/quicktype-core/src/language/Pike/PikeRenderer.ts b/packages/quicktype-core/src/language/Pike/PikeRenderer.ts index dca335b92..81fd8dda6 100644 --- a/packages/quicktype-core/src/language/Pike/PikeRenderer.ts +++ b/packages/quicktype-core/src/language/Pike/PikeRenderer.ts @@ -1,6 +1,15 @@ -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { type Name, type Namer } from "../../Naming"; -import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import type { Name, Namer } from "../../Naming"; +import { + type MultiWord, + type Sourcelike, + multiWord, + parenIfNeeded, + singleWord, +} from "../../Source"; import { stringEscape } from "../../support/Strings"; import { ArrayType, @@ -9,12 +18,20 @@ import { MapType, PrimitiveType, type Type, - type UnionType + type UnionType, } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { enumNamingFunction, namedTypeNamingFunction, namingFunction } from "./utils"; +import { + enumNamingFunction, + namedTypeNamingFunction, + namingFunction, +} from "./utils"; export class PikeRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { @@ -28,14 +45,15 @@ export class PikeRenderer extends ConvenienceRenderer { this.emitTopLevelConverter(t, name); this.ensureBlankLine(); }, - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.ensureBlankLine(); this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.emitClassDefinition(c, className), + (c: ClassType, className: Name) => + this.emitClassDefinition(c, className), (e, n) => this.emitEnum(e, n), - (u, n) => this.emitUnion(u, n) + (u, n) => this.emitUnion(u, n), ); } @@ -63,15 +81,24 @@ export class PikeRenderer extends ConvenienceRenderer { return [...keywords]; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -82,30 +109,36 @@ export class PikeRenderer extends ConvenienceRenderer { return matchType( t, - _anyType => singleWord("mixed"), - _nullType => singleWord("mixed"), - _boolType => singleWord("bool"), - _integerType => singleWord("int"), - _doubleType => singleWord("float"), - _stringType => singleWord("string"), - arrayType => singleWord(["array(", this.sourceFor(arrayType.items).source, ")"]), - _classType => singleWord(this.nameForNamedType(_classType)), - mapType => { - let valueSource: Sourcelike; + (_anyType) => singleWord("mixed"), + (_nullType) => singleWord("mixed"), + (_boolType) => singleWord("bool"), + (_integerType) => singleWord("int"), + (_doubleType) => singleWord("float"), + (_stringType) => singleWord("string"), + (arrayType) => + singleWord([ + "array(", + this.sourceFor(arrayType.items).source, + ")", + ]), + (_classType) => singleWord(this.nameForNamedType(_classType)), + (mapType) => { const v = mapType.values; + const valueSource: Sourcelike = this.sourceFor(v).source; - valueSource = this.sourceFor(v).source; return singleWord(["mapping(string:", valueSource, ")"]); }, - _enumType => singleWord("enum"), - unionType => { + (_enumType) => singleWord("enum"), + (unionType) => { if (nullableFromUnion(unionType) !== null) { - const children = Array.from(unionType.getChildren()).map(c => parenIfNeeded(this.sourceFor(c))); + const children = Array.from(unionType.getChildren()).map( + (c) => parenIfNeeded(this.sourceFor(c)), + ); return multiWord("|", ...children); - } else { - return singleWord(this.nameForNamedType(unionType)); } - } + + return singleWord(this.nameForNamedType(unionType)); + }, ); } @@ -122,11 +155,11 @@ export class PikeRenderer extends ConvenienceRenderer { protected emitEnum(e: EnumType, enumName: Name): void { this.emitBlock([e.kind, " ", enumName], () => { - let table: Sourcelike[][] = []; + const table: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, jsonName) => { table.push([ [name, ' = "', stringEscape(jsonName), '", '], - ['// json: "', jsonName, '"'] + ['// json: "', jsonName, '"'], ]); }); this.emitTable(table); @@ -144,7 +177,7 @@ export class PikeRenderer extends ConvenienceRenderer { const [, nonNulls] = removeNullFromUnion(u); - let types: Sourcelike[][] = []; + const types: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_name, t) => { const pikeType = this.sourceFor(t).source; types.push([pikeType]); @@ -152,18 +185,28 @@ export class PikeRenderer extends ConvenienceRenderer { this.emitLine([ "typedef ", - types.map(r => r.map(sl => this.sourcelikeToString(sl))).join("|"), + types + .map((r) => r.map((sl) => this.sourcelikeToString(sl))) + .join("|"), " ", unionName, - ";" + ";", ]); this.ensureBlankLine(); - this.emitBlock([unionName, " ", unionName, "_from_JSON(mixed json)"], () => { - this.emitLine(["return json;"]); - }); + this.emitBlock( + [unionName, " ", unionName, "_from_JSON(mixed json)"], + () => { + this.emitLine(["return json;"]); + }, + ); } - private emitBlock(line: Sourcelike, f: () => void, opening: Sourcelike = " {", closing: Sourcelike = "}"): void { + private emitBlock( + line: Sourcelike, + f: () => void, + opening: Sourcelike = " {", + closing: Sourcelike = "}", + ): void { this.emitLine(line, opening); this.indent(f); this.emitLine(closing); @@ -174,14 +217,14 @@ export class PikeRenderer extends ConvenienceRenderer { } private emitClassMembers(c: ClassType): void { - let table: Sourcelike[][] = []; + const table: Sourcelike[][] = []; this.forEachClassProperty(c, "none", (name, jsonName, p) => { const pikeType = this.sourceFor(p.type).source; table.push([ [pikeType, " "], [name, "; "], - ['// json: "', jsonName, '"'] + ['// json: "', jsonName, '"'], ]); }); this.emitTable(table); @@ -202,9 +245,9 @@ export class PikeRenderer extends ConvenienceRenderer { "It will return an instance of .", "Bear in mind that these functions have unexpected behavior,", "and will likely throw an error, if the JSON string does not", - "match the expected interface, even if the JSON itself is valid." + "match the expected interface, even if the JSON itself is valid.", ], - { lineStart: "// " } + { lineStart: "// " }, ); } @@ -217,13 +260,20 @@ export class PikeRenderer extends ConvenienceRenderer { if (t instanceof PrimitiveType) { this.emitLine(["return json;"]); } else if (t instanceof ArrayType) { - if (t.items instanceof PrimitiveType) this.emitLine(["return json;"]); - else this.emitLine(["return map(json, ", this.sourceFor(t.items).source, "_from_JSON);"]); + if (t.items instanceof PrimitiveType) + this.emitLine(["return json;"]); + else + this.emitLine([ + "return map(json, ", + this.sourceFor(t.items).source, + "_from_JSON);", + ]); } else if (t instanceof MapType) { const type = this.sourceFor(t.values).source; this.emitLine(["mapping(string:", type, ") retval = ([]);"]); let assignmentRval: Sourcelike; - if (t.values instanceof PrimitiveType) assignmentRval = ["(", type, ") v"]; + if (t.values instanceof PrimitiveType) + assignmentRval = ["(", type, ") v"]; else assignmentRval = [type, "_from_JSON(v)"]; this.emitBlock(["foreach (json; string k; mixed v)"], () => { this.emitLine(["retval[k] = ", assignmentRval, ";"]); @@ -237,7 +287,13 @@ export class PikeRenderer extends ConvenienceRenderer { this.emitBlock(["string encode_json()"], () => { this.emitMappingBlock(["mapping(string:mixed) json = "], () => { this.forEachClassProperty(c, "none", (name, jsonName) => { - this.emitLine(['"', stringEscape(jsonName), '" : ', name, ","]); + this.emitLine([ + '"', + stringEscape(jsonName), + '" : ', + name, + ",", + ]); }); }); this.ensureBlankLine(); @@ -246,14 +302,23 @@ export class PikeRenderer extends ConvenienceRenderer { } private emitDecodingFunction(className: Name, c: ClassType): void { - this.emitBlock([className, " ", className, "_from_JSON(mixed json)"], () => { - this.emitLine([className, " retval = ", className, "();"]); - this.ensureBlankLine(); - this.forEachClassProperty(c, "none", (name, jsonName) => { - this.emitLine(["retval.", name, ' = json["', stringEscape(jsonName), '"];']); - }); - this.ensureBlankLine(); - this.emitLine(["return retval;"]); - }); + this.emitBlock( + [className, " ", className, "_from_JSON(mixed json)"], + () => { + this.emitLine([className, " retval = ", className, "();"]); + this.ensureBlankLine(); + this.forEachClassProperty(c, "none", (name, jsonName) => { + this.emitLine([ + "retval.", + name, + ' = json["', + stringEscape(jsonName), + '"];', + ]); + }); + this.ensureBlankLine(); + this.emitLine(["return retval;"]); + }, + ); } } diff --git a/packages/quicktype-core/src/language/Pike/constants.ts b/packages/quicktype-core/src/language/Pike/constants.ts index d3927948f..c6a8024ca 100644 --- a/packages/quicktype-core/src/language/Pike/constants.ts +++ b/packages/quicktype-core/src/language/Pike/constants.ts @@ -50,5 +50,5 @@ export const keywords = [ "sscanf", "switch", "typeof", - "global" + "global", ] as const; diff --git a/packages/quicktype-core/src/language/Pike/language.ts b/packages/quicktype-core/src/language/Pike/language.ts index 35be5b5a0..cbce94b71 100644 --- a/packages/quicktype-core/src/language/Pike/language.ts +++ b/packages/quicktype-core/src/language/Pike/language.ts @@ -1,4 +1,4 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { TargetLanguage } from "../../TargetLanguage"; import { PikeRenderer } from "./PikeRenderer"; @@ -8,10 +8,12 @@ export const pikeOptions = {}; export const pikeLanguageConfig = { displayName: "Pike", names: ["pike", "pikelang"], - extension: "pmod" + extension: "pmod", } as const; -export class PikeTargetLanguage extends TargetLanguage { +export class PikeTargetLanguage extends TargetLanguage< + typeof pikeLanguageConfig +> { public constructor() { super(pikeLanguageConfig); } diff --git a/packages/quicktype-core/src/language/Pike/utils.ts b/packages/quicktype-core/src/language/Pike/utils.ts index f097ad2c6..acd6a06e6 100644 --- a/packages/quicktype-core/src/language/Pike/utils.ts +++ b/packages/quicktype-core/src/language/Pike/utils.ts @@ -1,7 +1,20 @@ import { funPrefixNamer } from "../../Naming"; -import { isLetterOrUnderscoreOrDigit, legalizeCharacters, makeNameStyle } from "../../support/Strings"; +import { + isLetterOrUnderscoreOrDigit, + legalizeCharacters, + makeNameStyle, +} from "../../support/Strings"; const legalizeName = legalizeCharacters(isLetterOrUnderscoreOrDigit); -export const enumNamingFunction = funPrefixNamer("enumNamer", makeNameStyle("upper-underscore", legalizeName)); -export const namingFunction = funPrefixNamer("genericNamer", makeNameStyle("underscore", legalizeName)); -export const namedTypeNamingFunction = funPrefixNamer("typeNamer", makeNameStyle("pascal", legalizeName)); +export const enumNamingFunction = funPrefixNamer( + "enumNamer", + makeNameStyle("upper-underscore", legalizeName), +); +export const namingFunction = funPrefixNamer( + "genericNamer", + makeNameStyle("underscore", legalizeName), +); +export const namedTypeNamingFunction = funPrefixNamer( + "typeNamer", + makeNameStyle("pascal", legalizeName), +); diff --git a/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts b/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts index 67c1e64bc..b06965694 100644 --- a/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts +++ b/packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts @@ -2,7 +2,13 @@ import { arrayIntercalate } from "collection-utils"; import { topLevelNameOrder } from "../../ConvenienceRenderer"; import { DependencyName, type Name, funPrefixNamer } from "../../Naming"; -import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import { + type MultiWord, + type Sourcelike, + multiWord, + parenIfNeeded, + singleWord, +} from "../../Source"; import { assertNever, defined, panic } from "../../support/Support"; import { ChoiceTransformer, @@ -14,9 +20,9 @@ import { type Transformer, UnionInstantiationTransformer, UnionMemberMatchTransformer, - transformationForType + transformationForType, } from "../../Transformers"; -import { type ClassType, type Type } from "../../Type"; +import type { ClassType, Type } from "../../Type"; import { matchType } from "../../Type/TypeUtils"; import { PythonRenderer } from "./PythonRenderer"; @@ -60,11 +66,17 @@ export interface ValueOrLambda { // // * If `input` is a value, the result is `f(input)`. // * If `input` is a lambda, the result is `lambda x: f(input(x))` -function compose(input: ValueOrLambda, f: (arg: Sourcelike) => Sourcelike): ValueOrLambda; +function compose( + input: ValueOrLambda, + f: (arg: Sourcelike) => Sourcelike, +): ValueOrLambda; // FIXME: refactor this // eslint-disable-next-line @typescript-eslint/unified-signatures function compose(input: ValueOrLambda, f: ValueOrLambda): ValueOrLambda; -function compose(input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => Sourcelike)): ValueOrLambda { +function compose( + input: ValueOrLambda, + f: ValueOrLambda | ((arg: Sourcelike) => Sourcelike), +): ValueOrLambda { if (typeof f === "function") { if (input.value !== undefined) { // `input` is a value, so just apply `f` to its source form. @@ -73,11 +85,21 @@ function compose(input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => if (input.lambda !== undefined) { // `input` is a lambda, so build `lambda x: f(input(x))`. - return { lambda: multiWord(" ", "lambda x:", f([parenIfNeeded(input.lambda), "(x)"])), value: undefined }; + return { + lambda: multiWord( + " ", + "lambda x:", + f([parenIfNeeded(input.lambda), "(x)"]), + ), + value: undefined, + }; } // `input` is the identify function, so the composition is `lambda x: f(x)`. - return { lambda: multiWord(" ", "lambda x:", f("x")), value: undefined }; + return { + lambda: multiWord(" ", "lambda x:", f("x")), + value: undefined, + }; } if (f.value !== undefined) { @@ -98,8 +120,15 @@ function compose(input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => // `input` is a lambda, so the result is `lambda x: f(input(x))`. return { - lambda: multiWord("", "lambda x: ", parenIfNeeded(f.lambda), "(", parenIfNeeded(input.lambda), "(x))"), - value: undefined + lambda: multiWord( + "", + "lambda x: ", + parenIfNeeded(f.lambda), + "(", + parenIfNeeded(input.lambda), + "(x))", + ), + value: undefined, }; } @@ -117,8 +146,16 @@ function makeLambda(vol: ValueOrLambda): MultiWord { return vol.lambda; } - return multiWord("", "lambda x: ", parenIfNeeded(vol.lambda), "(", vol.value, ")"); - } else if (vol.value !== undefined) { + return multiWord( + "", + "lambda x: ", + parenIfNeeded(vol.lambda), + "(", + vol.value, + ")", + ); + } + if (vol.value !== undefined) { return multiWord(" ", "lambda x:", vol.value); } @@ -142,11 +179,14 @@ function makeValue(vol: ValueOrLambda): Sourcelike { export class JSONPythonRenderer extends PythonRenderer { private readonly _deserializerFunctions = new Set(); - private readonly _converterNamer = funPrefixNamer("converter", s => - snakeNameStyle(s, false, this.pyOptions.nicePropertyNames) + private readonly _converterNamer = funPrefixNamer("converter", (s) => + snakeNameStyle(s, false, this.pyOptions.nicePropertyNames), ); - private readonly _topLevelConverterNames = new Map(); + private readonly _topLevelConverterNames = new Map< + Name, + TopLevelConverterNames + >(); private _haveTypeVar = false; @@ -159,7 +199,15 @@ export class JSONPythonRenderer extends PythonRenderer { return; } - this.emitLine(tvar, " = ", this.withTyping("TypeVar"), "(", this.string(tvar), constraints, ")"); + this.emitLine( + tvar, + " = ", + this.withTyping("TypeVar"), + "(", + this.string(tvar), + constraints, + ")", + ); } protected typeVar(): string { @@ -194,48 +242,103 @@ export class JSONPythonRenderer extends PythonRenderer { // FIXME: We can't return the None type here because mypy thinks that means // We're not returning any value, when we're actually returning `None`. this.emitBlock( - ["def from_none(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", this.withTyping("Any")), ":"], + [ + "def from_none(", + this.typingDecl("x", "Any"), + ")", + this.typeHint(" -> ", this.withTyping("Any")), + ":", + ], () => { this.emitLine("assert x is None"); this.emitLine("return x"); - } + }, ); } protected emitBoolConverter(): void { - this.emitBlock(["def from_bool(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> bool"), ":"], () => { - this.emitLine("assert isinstance(x, bool)"); - this.emitLine("return x"); - }); + this.emitBlock( + [ + "def from_bool(", + this.typingDecl("x", "Any"), + ")", + this.typeHint(" -> bool"), + ":", + ], + () => { + this.emitLine("assert isinstance(x, bool)"); + this.emitLine("return x"); + }, + ); } protected emitIntConverter(): void { - this.emitBlock(["def from_int(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> int"), ":"], () => { - this.emitLine("assert isinstance(x, int) and not isinstance(x, bool)"); - this.emitLine("return x"); - }); + this.emitBlock( + [ + "def from_int(", + this.typingDecl("x", "Any"), + ")", + this.typeHint(" -> int"), + ":", + ], + () => { + this.emitLine( + "assert isinstance(x, int) and not isinstance(x, bool)", + ); + this.emitLine("return x"); + }, + ); } protected emitFromFloatConverter(): void { - this.emitBlock(["def from_float(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> float"), ":"], () => { - this.emitLine("assert isinstance(x, (float, int)) and not isinstance(x, bool)"); - this.emitLine("return float(x)"); - }); + this.emitBlock( + [ + "def from_float(", + this.typingDecl("x", "Any"), + ")", + this.typeHint(" -> float"), + ":", + ], + () => { + this.emitLine( + "assert isinstance(x, (float, int)) and not isinstance(x, bool)", + ); + this.emitLine("return float(x)"); + }, + ); } protected emitToFloatConverter(): void { - this.emitBlock(["def to_float(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> float"), ":"], () => { - this.emitLine("assert isinstance(x, (int, float))"); - this.emitLine("return x"); - }); + this.emitBlock( + [ + "def to_float(", + this.typingDecl("x", "Any"), + ")", + this.typeHint(" -> float"), + ":", + ], + () => { + this.emitLine("assert isinstance(x, (int, float))"); + this.emitLine("return x"); + }, + ); } protected emitStrConverter(): void { - this.emitBlock(["def from_str(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> str"), ":"], () => { - const strType = "str"; - this.emitLine("assert isinstance(x, ", strType, ")"); - this.emitLine("return x"); - }); + this.emitBlock( + [ + "def from_str(", + this.typingDecl("x", "Any"), + ")", + this.typeHint(" -> str"), + ":", + ], + () => { + const strType = "str"; + this.emitLine("assert isinstance(x, ", strType, ")"); + this.emitLine("return x"); + }, + ); } protected emitToEnumConverter(): void { @@ -248,12 +351,12 @@ export class JSONPythonRenderer extends PythonRenderer { this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", tvar), - ":" + ":", ], () => { this.emitLine("assert isinstance(x, c)"); this.emitLine("return x.value"); - } + }, ); } @@ -262,17 +365,25 @@ export class JSONPythonRenderer extends PythonRenderer { this.emitBlock( [ "def from_list(f", - this.typeHint(": ", this.withTyping("Callable"), "[[", this.withTyping("Any"), "], ", tvar, "]"), + this.typeHint( + ": ", + this.withTyping("Callable"), + "[[", + this.withTyping("Any"), + "], ", + tvar, + "]", + ), ", ", this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", this.withTyping("List"), "[", tvar, "]"), - ":" + ":", ], () => { this.emitLine("assert isinstance(x, list)"); this.emitLine("return [f(y) for y in x]"); - } + }, ); } @@ -286,12 +397,16 @@ export class JSONPythonRenderer extends PythonRenderer { this.typingDecl("x", "Any"), ")", this.typeHint(" -> dict"), - ":" + ":", ], () => { this.emitLine("assert isinstance(x, c)"); - this.emitLine("return ", this.cast(this.withTyping("Any"), "x"), ".to_dict()"); - } + this.emitLine( + "return ", + this.cast(this.withTyping("Any"), "x"), + ".to_dict()", + ); + }, ); } @@ -300,17 +415,31 @@ export class JSONPythonRenderer extends PythonRenderer { this.emitBlock( [ "def from_dict(f", - this.typeHint(": ", this.withTyping("Callable"), "[[", this.withTyping("Any"), "], ", tvar, "]"), + this.typeHint( + ": ", + this.withTyping("Callable"), + "[[", + this.withTyping("Any"), + "], ", + tvar, + "]", + ), ", ", this.typingDecl("x", "Any"), ")", - this.typeHint(" -> ", this.withTyping("Dict"), "[str, ", tvar, "]"), - ":" + this.typeHint( + " -> ", + this.withTyping("Dict"), + "[str, ", + tvar, + "]", + ), + ":", ], () => { this.emitLine("assert isinstance(x, dict)"); this.emitLine("return { k: f(v) for (k, v) in x.items() }"); - } + }, ); } @@ -333,23 +462,33 @@ export class JSONPythonRenderer extends PythonRenderer { this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", this.withImport("datetime", "datetime")), - ":" + ":", ], () => { this._haveDateutil = true; this.emitLine("return dateutil.parser.parse(x)"); - } + }, ); } protected emitFromStringifiedBoolConverter(): void { this.emitBlock( - ["def from_stringified_bool(x", this.typeHint(": str"), ")", this.typeHint(" -> bool"), ":"], + [ + "def from_stringified_bool(x", + this.typeHint(": str"), + ")", + this.typeHint(" -> bool"), + ":", + ], () => { - this.emitBlock('if x == "true":', () => this.emitLine("return True")); - this.emitBlock('if x == "false":', () => this.emitLine("return False")); + this.emitBlock('if x == "true":', () => + this.emitLine("return True"), + ); + this.emitBlock('if x == "false":', () => + this.emitLine("return False"), + ); this.emitLine("assert False"); - } + }, ); } @@ -363,12 +502,12 @@ export class JSONPythonRenderer extends PythonRenderer { this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", tvar), - ":" + ":", ], () => { this.emitLine("assert isinstance(x, t)"); this.emitLine("return x"); - } + }, ); } @@ -445,7 +584,7 @@ export class JSONPythonRenderer extends PythonRenderer { } default: - return assertNever(cf); + assertNever(cf); } } @@ -453,30 +592,38 @@ export class JSONPythonRenderer extends PythonRenderer { protected conv(cf: ConverterFunction): Sourcelike { this._deserializerFunctions.add(cf); const name = cf.replace(/-/g, "_"); - if (cf.startsWith("from-") || cf.startsWith("to-") || cf.startsWith("is-")) return name; + if ( + cf.startsWith("from-") || + cf.startsWith("to-") || + cf.startsWith("is-") + ) + return name; return ["from_", name]; } // Applies the converter function to `arg` protected convFn(cf: ConverterFunction, arg: ValueOrLambda): ValueOrLambda { - return compose(arg, { lambda: singleWord(this.conv(cf)), value: undefined }); + return compose(arg, { + lambda: singleWord(this.conv(cf)), + value: undefined, + }); } protected typeObject(t: Type): Sourcelike { const s = matchType( t, - _anyType => undefined, - _nullType => "type(None)", - _boolType => "bool", - _integerType => "int", - _doubleType => "float", - _stringType => "str", - _arrayType => "List", - classType => this.nameForNamedType(classType), - _mapType => "dict", - enumType => this.nameForNamedType(enumType), - _unionType => undefined, - transformedStringType => { + (_anyType) => undefined, + (_nullType) => "type(None)", + (_boolType) => "bool", + (_integerType) => "int", + (_doubleType) => "float", + (_stringType) => "str", + (_arrayType) => "List", + (classType) => this.nameForNamedType(classType), + (_mapType) => "dict", + (enumType) => this.nameForNamedType(enumType), + (_unionType) => undefined, + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return this.withImport("datetime", "datetime"); } @@ -486,7 +633,7 @@ export class JSONPythonRenderer extends PythonRenderer { } return undefined; - } + }, ); if (s === undefined) { return panic(`No type object for ${t.kind}`); @@ -495,8 +642,15 @@ export class JSONPythonRenderer extends PythonRenderer { return s; } - protected transformer(inputTransformer: ValueOrLambda, xfer: Transformer, targetType: Type): ValueOrLambda { - const consume = (consumer: Transformer | undefined, vol: ValueOrLambda): ValueOrLambda => { + protected transformer( + inputTransformer: ValueOrLambda, + xfer: Transformer, + targetType: Type, + ): ValueOrLambda { + const consume = ( + consumer: Transformer | undefined, + vol: ValueOrLambda, + ): ValueOrLambda => { if (consumer === undefined) { return vol; } @@ -504,84 +658,127 @@ export class JSONPythonRenderer extends PythonRenderer { return this.transformer(vol, consumer, targetType); }; - const isType = (t: Type, valueToCheck: ValueOrLambda): ValueOrLambda => { - return compose(valueToCheck, v => [this.conv("is-type"), "(", this.typeObject(t), ", ", v, ")"]); + const isType = ( + t: Type, + valueToCheck: ValueOrLambda, + ): ValueOrLambda => { + return compose(valueToCheck, (v) => [ + this.conv("is-type"), + "(", + this.typeObject(t), + ", ", + v, + ")", + ]); }; - if (xfer instanceof DecodingChoiceTransformer || xfer instanceof ChoiceTransformer) { - const lambdas = xfer.transformers.map(x => makeLambda(this.transformer(identity, x, targetType)).source); - return compose(inputTransformer, v => [ + if ( + xfer instanceof DecodingChoiceTransformer || + xfer instanceof ChoiceTransformer + ) { + const lambdas = xfer.transformers.map( + (x) => + makeLambda(this.transformer(identity, x, targetType)) + .source, + ); + return compose(inputTransformer, (v) => [ this.conv("union"), "([", arrayIntercalate(", ", lambdas), "], ", v, - ")" + ")", ]); - } else if (xfer instanceof DecodingTransformer) { + } + if (xfer instanceof DecodingTransformer) { const consumer = xfer.consumer; const vol = this.deserializer(inputTransformer, xfer.sourceType); return consume(consumer, vol); - } else if (xfer instanceof EncodingTransformer) { + } + if (xfer instanceof EncodingTransformer) { return this.serializer(inputTransformer, xfer.sourceType); - } else if (xfer instanceof UnionInstantiationTransformer) { + } + if (xfer instanceof UnionInstantiationTransformer) { return inputTransformer; - } else if (xfer instanceof UnionMemberMatchTransformer) { + } + if (xfer instanceof UnionMemberMatchTransformer) { const consumer = xfer.transformer; const vol = isType(xfer.memberType, inputTransformer); return consume(consumer, vol); - } else if (xfer instanceof ParseStringTransformer) { + } + if (xfer instanceof ParseStringTransformer) { const consumer = xfer.consumer; - const immediateTargetType = consumer === undefined ? targetType : consumer.sourceType; + const immediateTargetType = + consumer === undefined ? targetType : consumer.sourceType; let vol: ValueOrLambda; switch (immediateTargetType.kind) { case "integer": - vol = compose(inputTransformer, v => ["int(", v, ")"]); + vol = compose(inputTransformer, (v) => ["int(", v, ")"]); break; case "bool": - vol = this.convFn("from-stringified-bool", inputTransformer); + vol = this.convFn( + "from-stringified-bool", + inputTransformer, + ); break; case "enum": - vol = this.deserializer(inputTransformer, immediateTargetType); + vol = this.deserializer( + inputTransformer, + immediateTargetType, + ); break; case "date-time": vol = this.convFn("from-datetime", inputTransformer); break; case "uuid": - vol = compose(inputTransformer, v => [this.withImport("uuid", "UUID"), "(", v, ")"]); + vol = compose(inputTransformer, (v) => [ + this.withImport("uuid", "UUID"), + "(", + v, + ")", + ]); break; default: - return panic(`Parsing of ${immediateTargetType.kind} in a transformer is not supported`); + return panic( + `Parsing of ${immediateTargetType.kind} in a transformer is not supported`, + ); } return consume(consumer, vol); - } else if (xfer instanceof StringifyTransformer) { + } + if (xfer instanceof StringifyTransformer) { const consumer = xfer.consumer; let vol: ValueOrLambda; switch (xfer.sourceType.kind) { case "integer": - vol = compose(inputTransformer, v => ["str(", v, ")"]); + vol = compose(inputTransformer, (v) => ["str(", v, ")"]); break; case "bool": - vol = compose(inputTransformer, v => ["str(", v, ").lower()"]); + vol = compose(inputTransformer, (v) => [ + "str(", + v, + ").lower()", + ]); break; case "enum": vol = this.serializer(inputTransformer, xfer.sourceType); break; case "date-time": - vol = compose(inputTransformer, v => [v, ".isoformat()"]); + vol = compose(inputTransformer, (v) => [v, ".isoformat()"]); break; case "uuid": - vol = compose(inputTransformer, v => ["str(", v, ")"]); + vol = compose(inputTransformer, (v) => ["str(", v, ")"]); break; default: - return panic(`Parsing of ${xfer.sourceType.kind} in a transformer is not supported`); + return panic( + `Parsing of ${xfer.sourceType.kind} in a transformer is not supported`, + ); } return consume(consumer, vol); - } else { - return panic(`Transformer ${xfer.kind} is not supported`); } + + return panic(`Transformer ${xfer.kind} is not supported`); } // Returns the code to deserialize `value` as type `t`. If `t` has @@ -595,62 +792,78 @@ export class JSONPythonRenderer extends PythonRenderer { return matchType( t, - _anyType => value, - _nullType => this.convFn("none", value), - _boolType => this.convFn("bool", value), - _integerType => this.convFn("int", value), - _doubleType => this.convFn("from-float", value), - _stringType => this.convFn("str", value), - arrayType => - compose(value, v => [ + (_anyType) => value, + (_nullType) => this.convFn("none", value), + (_boolType) => this.convFn("bool", value), + (_integerType) => this.convFn("int", value), + (_doubleType) => this.convFn("from-float", value), + (_stringType) => this.convFn("str", value), + (arrayType) => + compose(value, (v) => [ this.conv("list"), "(", - makeLambda(this.deserializer(identity, arrayType.items)).source, + makeLambda(this.deserializer(identity, arrayType.items)) + .source, ", ", v, - ")" + ")", ]), - classType => + (classType) => compose(value, { - lambda: singleWord(this.nameForNamedType(classType), ".from_dict"), - value: undefined + lambda: singleWord( + this.nameForNamedType(classType), + ".from_dict", + ), + value: undefined, }), - mapType => - compose(value, v => [ + (mapType) => + compose(value, (v) => [ this.conv("dict"), "(", - makeLambda(this.deserializer(identity, mapType.values)).source, + makeLambda(this.deserializer(identity, mapType.values)) + .source, ", ", v, - ")" + ")", ]), - enumType => compose(value, { lambda: singleWord(this.nameForNamedType(enumType)), value: undefined }), - unionType => { + (enumType) => + compose(value, { + lambda: singleWord(this.nameForNamedType(enumType)), + value: undefined, + }), + (unionType) => { // FIXME: handle via transformers const deserializers = Array.from(unionType.members).map( - m => makeLambda(this.deserializer(identity, m)).source + (m) => makeLambda(this.deserializer(identity, m)).source, ); - return compose(value, v => [ + return compose(value, (v) => [ this.conv("union"), "([", arrayIntercalate(", ", deserializers), "], ", v, - ")" + ")", ]); }, - transformedStringType => { + (transformedStringType) => { // FIXME: handle via transformers if (transformedStringType.kind === "date-time") { return this.convFn("from-datetime", value); } if (transformedStringType.kind === "uuid") { - return compose(value, v => [this.withImport("uuid", "UUID"), "(", v, ")"]); + return compose(value, (v) => [ + this.withImport("uuid", "UUID"), + "(", + v, + ")", + ]); } - return panic(`Transformed type ${transformedStringType.kind} not supported`); - } + return panic( + `Transformed type ${transformedStringType.kind} not supported`, + ); + }, ); } @@ -658,62 +871,85 @@ export class JSONPythonRenderer extends PythonRenderer { const xf = transformationForType(t); if (xf !== undefined) { const reverse = xf.reverse; - return this.transformer(value, reverse.transformer, reverse.targetType); + return this.transformer( + value, + reverse.transformer, + reverse.targetType, + ); } return matchType( t, - _anyType => value, - _nullType => this.convFn("none", value), - _boolType => this.convFn("bool", value), - _integerType => this.convFn("int", value), - _doubleType => this.convFn("to-float", value), - _stringType => this.convFn("str", value), - arrayType => - compose(value, v => [ + (_anyType) => value, + (_nullType) => this.convFn("none", value), + (_boolType) => this.convFn("bool", value), + (_integerType) => this.convFn("int", value), + (_doubleType) => this.convFn("to-float", value), + (_stringType) => this.convFn("str", value), + (arrayType) => + compose(value, (v) => [ this.conv("list"), "(", - makeLambda(this.serializer(identity, arrayType.items)).source, + makeLambda(this.serializer(identity, arrayType.items)) + .source, + ", ", + v, + ")", + ]), + (classType) => + compose(value, (v) => [ + this.conv("to-class"), + "(", + this.nameForNamedType(classType), ", ", v, - ")" + ")", ]), - classType => - compose(value, v => [this.conv("to-class"), "(", this.nameForNamedType(classType), ", ", v, ")"]), - mapType => - compose(value, v => [ + (mapType) => + compose(value, (v) => [ this.conv("dict"), "(", - makeLambda(this.serializer(identity, mapType.values)).source, + makeLambda(this.serializer(identity, mapType.values)) + .source, + ", ", + v, + ")", + ]), + (enumType) => + compose(value, (v) => [ + this.conv("to-enum"), + "(", + this.nameForNamedType(enumType), ", ", v, - ")" + ")", ]), - enumType => compose(value, v => [this.conv("to-enum"), "(", this.nameForNamedType(enumType), ", ", v, ")"]), - unionType => { + (unionType) => { const serializers = Array.from(unionType.members).map( - m => makeLambda(this.serializer(identity, m)).source + (m) => makeLambda(this.serializer(identity, m)).source, ); - return compose(value, v => [ + return compose(value, (v) => [ this.conv("union"), "([", arrayIntercalate(", ", serializers), "], ", v, - ")" + ")", ]); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { - return compose(value, v => [v, ".isoformat()"]); + return compose(value, (v) => [v, ".isoformat()"]); } if (transformedStringType.kind === "uuid") { - return compose(value, v => ["str(", v, ")"]); + return compose(value, (v) => ["str(", v, ")"]); } - return panic(`Transformed type ${transformedStringType.kind} not supported`); - } + return panic( + `Transformed type ${transformedStringType.kind} not supported`, + ); + }, ); } @@ -725,44 +961,70 @@ export class JSONPythonRenderer extends PythonRenderer { this.emitLine("@staticmethod"); this.emitBlock( - ["def from_dict(", this.typingDecl("obj", "Any"), ")", this.typeHint(" -> ", this.namedType(t)), ":"], + [ + "def from_dict(", + this.typingDecl("obj", "Any"), + ")", + this.typeHint(" -> ", this.namedType(t)), + ":", + ], () => { const args: Sourcelike[] = []; this.emitLine("assert isinstance(obj, dict)"); this.forEachClassProperty(t, "none", (name, jsonName, cp) => { - const property = { value: ["obj.get(", this.string(jsonName), ")"] }; - this.emitLine(name, " = ", makeValue(this.deserializer(property, cp.type))); + const property = { + value: ["obj.get(", this.string(jsonName), ")"], + }; + this.emitLine( + name, + " = ", + makeValue(this.deserializer(property, cp.type)), + ); args.push(name); }); - this.emitLine("return ", className, "(", arrayIntercalate(", ", args), ")"); - } + this.emitLine( + "return ", + className, + "(", + arrayIntercalate(", ", args), + ")", + ); + }, ); this.ensureBlankLine(); - this.emitBlock(["def to_dict(self)", this.typeHint(" -> dict"), ":"], () => { - this.emitLine("result", this.typeHint(": dict"), " = {}"); - this.forEachClassProperty(t, "none", (name, jsonName, cp) => { - const property = { value: ["self.", name] }; - if (cp.isOptional) { - this.emitBlock(["if self.", name, " is not None:"], () => { + this.emitBlock( + ["def to_dict(self)", this.typeHint(" -> dict"), ":"], + () => { + this.emitLine("result", this.typeHint(": dict"), " = {}"); + this.forEachClassProperty(t, "none", (name, jsonName, cp) => { + const property = { value: ["self.", name] }; + if (cp.isOptional) { + this.emitBlock( + ["if self.", name, " is not None:"], + () => { + this.emitLine( + "result[", + this.string(jsonName), + "] = ", + makeValue( + this.serializer(property, cp.type), + ), + ); + }, + ); + } else { this.emitLine( "result[", this.string(jsonName), "] = ", - makeValue(this.serializer(property, cp.type)) + makeValue(this.serializer(property, cp.type)), ); - }); - } else { - this.emitLine( - "result[", - this.string(jsonName), - "] = ", - makeValue(this.serializer(property, cp.type)) - ); - } - }); - this.emitLine("return result"); - }); + } + }); + this.emitLine("return result"); + }, + ); } protected emitImports(): void { @@ -779,24 +1041,36 @@ export class JSONPythonRenderer extends PythonRenderer { } if (this._haveEnumTypeVar) { - this.emitTypeVar(this.enumTypeVar(), [", bound=", this.withImport("enum", "Enum")]); + this.emitTypeVar(this.enumTypeVar(), [ + ", bound=", + this.withImport("enum", "Enum"), + ]); } } protected emitSupportCode(): void { - const map = Array.from(this._deserializerFunctions).map(f => [f, f] as [ConverterFunction, ConverterFunction]); - this.forEachWithBlankLines(map, ["interposing", 2], cf => { + const map = Array.from(this._deserializerFunctions).map( + (f) => [f, f] as [ConverterFunction, ConverterFunction], + ); + this.forEachWithBlankLines(map, ["interposing", 2], (cf) => { this.emitConverter(cf); }); } - protected makeTopLevelDependencyNames(_t: Type, topLevelName: Name): DependencyName[] { + protected makeTopLevelDependencyNames( + _t: Type, + topLevelName: Name, + ): DependencyName[] { const fromDict = new DependencyName( this._converterNamer, topLevelNameOrder, - l => `${l(topLevelName)}_from_dict` + (l) => `${l(topLevelName)}_from_dict`, + ); + const toDict = new DependencyName( + this._converterNamer, + topLevelNameOrder, + (l) => `${l(topLevelName)}_to_dict`, ); - const toDict = new DependencyName(this._converterNamer, topLevelNameOrder, l => `${l(topLevelName)}_to_dict`); this._topLevelConverterNames.set(topLevelName, { fromDict, toDict }); return [fromDict, toDict]; } @@ -808,7 +1082,7 @@ export class JSONPythonRenderer extends PythonRenderer { "This code parses date/times, so please", "", " pip install python-dateutil", - "" + "", ]); } @@ -818,30 +1092,61 @@ export class JSONPythonRenderer extends PythonRenderer { " import json", "", "and then, to convert JSON from a string, do", - "" + "", ]); this.forEachTopLevel("none", (_, name) => { - const { fromDict } = defined(this._topLevelConverterNames.get(name)); - this.emitLine(this.commentLineStart, " result = ", fromDict, "(json.loads(json_string))"); + const { fromDict } = defined( + this._topLevelConverterNames.get(name), + ); + this.emitLine( + this.commentLineStart, + " result = ", + fromDict, + "(json.loads(json_string))", + ); }); } protected emitClosingCode(): void { this.forEachTopLevel(["interposing", 2], (t, name) => { - const { fromDict, toDict } = defined(this._topLevelConverterNames.get(name)); + const { fromDict, toDict } = defined( + this._topLevelConverterNames.get(name), + ); const pythonType = this.pythonType(t); this.emitBlock( - ["def ", fromDict, "(", this.typingDecl("s", "Any"), ")", this.typeHint(" -> ", pythonType), ":"], + [ + "def ", + fromDict, + "(", + this.typingDecl("s", "Any"), + ")", + this.typeHint(" -> ", pythonType), + ":", + ], () => { - this.emitLine("return ", makeValue(this.deserializer({ value: "s" }, t))); - } + this.emitLine( + "return ", + makeValue(this.deserializer({ value: "s" }, t)), + ); + }, ); this.ensureBlankLine(2); this.emitBlock( - ["def ", toDict, "(x", this.typeHint(": ", pythonType), ")", this.typingReturn("Any"), ":"], + [ + "def ", + toDict, + "(x", + this.typeHint(": ", pythonType), + ")", + this.typingReturn("Any"), + ":", + ], () => { - this.emitLine("return ", makeValue(this.serializer({ value: "x" }, t))); - } + this.emitLine( + "return ", + makeValue(this.serializer({ value: "x" }, t)), + ); + }, ); }); } diff --git a/packages/quicktype-core/src/language/Python/PythonRenderer.ts b/packages/quicktype-core/src/language/Python/PythonRenderer.ts index 0e17b49ba..fd7bb84e8 100644 --- a/packages/quicktype-core/src/language/Python/PythonRenderer.ts +++ b/packages/quicktype-core/src/language/Python/PythonRenderer.ts @@ -1,19 +1,38 @@ -import { arrayIntercalate, iterableFirst, mapSortBy, mapUpdateInto, setUnionInto } from "collection-utils"; - -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + arrayIntercalate, + iterableFirst, + mapSortBy, + mapUpdateInto, + setUnionInto, +} from "collection-utils"; + +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { stringEscape } from "../../support/Strings"; import { defined, panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { followTargetType } from "../../Transformers"; -import { type ClassProperty, ClassType, EnumType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + type ClassProperty, + ClassType, + EnumType, + type Type, + UnionType, +} from "../../Type"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { forbiddenPropertyNames, forbiddenTypeNames } from "./constants"; -import { type pythonOptions } from "./language"; +import type { pythonOptions } from "./language"; import { classNameStyle, snakeNameStyle } from "./utils"; export class PythonRenderer extends ConvenienceRenderer { @@ -24,7 +43,7 @@ export class PythonRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly pyOptions: OptionValues + protected readonly pyOptions: OptionValues, ) { super(targetLanguage, renderContext); } @@ -33,8 +52,14 @@ export class PythonRenderer extends ConvenienceRenderer { return forbiddenTypeNames; } - protected forbiddenForObjectProperties(_: ClassType, _classNamed: Name): ForbiddenWordsInfo { - return { names: forbiddenPropertyNames as unknown as string[], includeGlobalForbidden: false }; + protected forbiddenForObjectProperties( + _: ClassType, + _classNamed: Name, + ): ForbiddenWordsInfo { + return { + names: forbiddenPropertyNames as unknown as string[], + includeGlobalForbidden: false, + }; } protected makeNamedTypeNamer(): Namer { @@ -42,7 +67,9 @@ export class PythonRenderer extends ConvenienceRenderer { } protected namerForObjectProperty(): Namer { - return funPrefixNamer("property", s => snakeNameStyle(s, false, this.pyOptions.nicePropertyNames)); + return funPrefixNamer("property", (s) => + snakeNameStyle(s, false, this.pyOptions.nicePropertyNames), + ); } protected makeUnionMemberNamer(): null { @@ -50,7 +77,9 @@ export class PythonRenderer extends ConvenienceRenderer { } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enum-case", s => snakeNameStyle(s, true, this.pyOptions.nicePropertyNames)); + return funPrefixNamer("enum-case", (s) => + snakeNameStyle(s, true, this.pyOptions.nicePropertyNames), + ); } protected get commentLineStart(): string { @@ -59,19 +88,21 @@ export class PythonRenderer extends ConvenienceRenderer { protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { - const docstring = modifySource(content => { + const docstring = modifySource((content) => { if (content.endsWith('"')) { return content.slice(0, -1) + '\\"'; } return content; }, lines[0]); - this.emitComments([{ customLines: [docstring], lineStart: '"""', lineEnd: '"""' }]); + this.emitComments([ + { customLines: [docstring], lineStart: '"""', lineEnd: '"""' }, + ]); } else { this.emitCommentLines(lines, { firstLineStart: '"""', lineStart: "", - afterComment: '"""' + afterComment: '"""', }); } } @@ -101,7 +132,9 @@ export class PythonRenderer extends ConvenienceRenderer { // place, but right now we just make the type source and then throw it away. It's // not a performance issue, so it's fine, I just bemoan this special case, and // potential others down the road. - mapUpdateInto(this.imports, module, s => (s ? setUnionInto(s, [name]) : new Set([name]))); + mapUpdateInto(this.imports, module, (s) => + s ? setUnionInto(s, [name]) : new Set([name]), + ); } return name; @@ -122,25 +155,38 @@ export class PythonRenderer extends ConvenienceRenderer { return matchType( actualType, - _anyType => this.withTyping("Any"), - _nullType => "None", - _boolType => "bool", - _integerType => "int", - _doubletype => "float", - _stringType => "str", - arrayType => [this.withTyping("List"), "[", this.pythonType(arrayType.items), "]"], - classType => this.namedType(classType), - mapType => [this.withTyping("Dict"), "[str, ", this.pythonType(mapType.values), "]"], - enumType => this.namedType(enumType), - unionType => { + (_anyType) => this.withTyping("Any"), + (_nullType) => "None", + (_boolType) => "bool", + (_integerType) => "int", + (_doubletype) => "float", + (_stringType) => "str", + (arrayType) => [ + this.withTyping("List"), + "[", + this.pythonType(arrayType.items), + "]", + ], + (classType) => this.namedType(classType), + (mapType) => [ + this.withTyping("Dict"), + "[str, ", + this.pythonType(mapType.values), + "]", + ], + (enumType) => this.namedType(enumType), + (unionType) => { const [hasNull, nonNulls] = removeNullFromUnion(unionType); - const memberTypes = Array.from(nonNulls).map(m => this.pythonType(m)); + const memberTypes = Array.from(nonNulls).map((m) => + this.pythonType(m), + ); if (hasNull !== null) { - let rest: string[] = []; + const rest: string[] = []; if ( !this.getAlphabetizeProperties() && - (this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel) && + (this.pyOptions.features.dataClasses || + this.pyOptions.pydanticBaseModel) && _isRootTypeDef ) { // Only push "= None" if this is a root level type def @@ -156,16 +202,27 @@ export class PythonRenderer extends ConvenienceRenderer { "[Union[", arrayIntercalate(", ", memberTypes), "]]", - ...rest + ...rest, ]; - } else { - return [this.withTyping("Optional"), "[", defined(iterableFirst(memberTypes)), "]", ...rest]; } - } else { - return [this.withTyping("Union"), "[", arrayIntercalate(", ", memberTypes), "]"]; + + return [ + this.withTyping("Optional"), + "[", + defined(iterableFirst(memberTypes)), + "]", + ...rest, + ]; } + + return [ + this.withTyping("Union"), + "[", + arrayIntercalate(", ", memberTypes), + "]", + ]; }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return this.withImport("datetime", "datetime"); } @@ -174,21 +231,35 @@ export class PythonRenderer extends ConvenienceRenderer { return this.withImport("uuid", "UUID"); } - return panic(`Transformed type ${transformedStringType.kind} not supported`); - } + return panic( + `Transformed type ${transformedStringType.kind} not supported`, + ); + }, ); } protected declarationLine(t: Type): Sourcelike { if (t instanceof ClassType) { if (this.pyOptions.pydanticBaseModel) { - return ["class ", this.nameForNamedType(t), "(", this.withImport("pydantic", "BaseModel"), "):"]; + return [ + "class ", + this.nameForNamedType(t), + "(", + this.withImport("pydantic", "BaseModel"), + "):", + ]; } return ["class ", this.nameForNamedType(t), ":"]; } if (t instanceof EnumType) { - return ["class ", this.nameForNamedType(t), "(", this.withImport("enum", "Enum"), "):"]; + return [ + "class ", + this.nameForNamedType(t), + "(", + this.withImport("enum", "Enum"), + "):", + ]; } return panic(`Can't declare type ${t.kind}`); @@ -203,23 +274,33 @@ export class PythonRenderer extends ConvenienceRenderer { } protected emitClassMembers(t: ClassType): void { - if (this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel) return; + if ( + this.pyOptions.features.dataClasses || + this.pyOptions.pydanticBaseModel + ) + return; const args: Sourcelike[] = []; this.forEachClassProperty(t, "none", (name, _, cp) => { args.push([name, this.typeHint(": ", this.pythonType(cp.type))]); }); this.emitBlock( - ["def __init__(self, ", arrayIntercalate(", ", args), ")", this.typeHint(" -> None"), ":"], + [ + "def __init__(self, ", + arrayIntercalate(", ", args), + ")", + this.typeHint(" -> None"), + ":", + ], () => { if (args.length === 0) { this.emitLine("pass"); } else { - this.forEachClassProperty(t, "none", name => { + this.forEachClassProperty(t, "none", (name) => { this.emitLine("self.", name, " = ", name); }); } - } + }, ); } @@ -241,19 +322,29 @@ export class PythonRenderer extends ConvenienceRenderer { protected sortClassProperties( properties: ReadonlyMap, - propertyNames: ReadonlyMap + propertyNames: ReadonlyMap, ): ReadonlyMap { - if (this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel) { + if ( + this.pyOptions.features.dataClasses || + this.pyOptions.pydanticBaseModel + ) { return mapSortBy(properties, (p: ClassProperty) => { - return (p.type instanceof UnionType && nullableFromUnion(p.type) != null) || p.isOptional ? 1 : 0; + return (p.type instanceof UnionType && + nullableFromUnion(p.type) != null) || + p.isOptional + ? 1 + : 0; }); - } else { - return super.sortClassProperties(properties, propertyNames); } + + return super.sortClassProperties(properties, propertyNames); } protected emitClass(t: ClassType): void { - if (this.pyOptions.features.dataClasses && !this.pyOptions.pydanticBaseModel) { + if ( + this.pyOptions.features.dataClasses && + !this.pyOptions.pydanticBaseModel + ) { this.emitLine("@", this.withImport("dataclasses", "dataclass")); } @@ -262,10 +353,22 @@ export class PythonRenderer extends ConvenienceRenderer { if (t.getProperties().size === 0) { this.emitLine("pass"); } else { - this.forEachClassProperty(t, "none", (name, jsonName, cp) => { - this.emitLine(name, this.typeHint(": ", this.pythonType(cp.type, true))); - this.emitDescription(this.descriptionForClassProperty(t, jsonName)); - }); + this.forEachClassProperty( + t, + "none", + (name, jsonName, cp) => { + this.emitLine( + name, + this.typeHint( + ": ", + this.pythonType(cp.type, true), + ), + ); + this.emitDescription( + this.descriptionForClassProperty(t, jsonName), + ); + }, + ); } this.ensureBlankLine(); @@ -285,7 +388,12 @@ export class PythonRenderer extends ConvenienceRenderer { protected emitImports(): void { this.imports.forEach((names, module) => { - this.emitLine("from ", module, " import ", Array.from(names).join(", ")); + this.emitLine( + "from ", + module, + " import ", + Array.from(names).join(", "), + ); }); } @@ -302,10 +410,10 @@ export class PythonRenderer extends ConvenienceRenderer { this.forEachNamedType( ["interposing", 2], (c: ClassType) => this.emitClass(c), - e => this.emitEnum(e), - _u => { + (e) => this.emitEnum(e), + (_u) => { return; - } + }, ); }); diff --git a/packages/quicktype-core/src/language/Python/constants.ts b/packages/quicktype-core/src/language/Python/constants.ts index 0e725bf50..d32c10923 100644 --- a/packages/quicktype-core/src/language/Python/constants.ts +++ b/packages/quicktype-core/src/language/Python/constants.ts @@ -12,7 +12,7 @@ export const forbiddenTypeNames = [ "Type", "TypeVar", "T", - "EnumT" + "EnumT", ] as const; export const forbiddenPropertyNames = [ @@ -55,5 +55,5 @@ export const forbiddenPropertyNames = [ "try", "while", "with", - "yield" + "yield", ] as const; diff --git a/packages/quicktype-core/src/language/Python/language.ts b/packages/quicktype-core/src/language/Python/language.ts index 6a444c072..c6a35b0db 100644 --- a/packages/quicktype-core/src/language/Python/language.ts +++ b/packages/quicktype-core/src/language/Python/language.ts @@ -1,11 +1,20 @@ import { iterableSome } from "collection-utils"; -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type, UnionType } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import { + type PrimitiveStringTypeKind, + type TransformedStringTypeKind, + type Type, + UnionType, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { JSONPythonRenderer } from "./JSONPythonRenderer"; import { PythonRenderer } from "./PythonRenderer"; @@ -22,18 +31,32 @@ export const pythonOptions = { { "3.5": { typeHints: false, dataClasses: false }, "3.6": { typeHints: true, dataClasses: false }, - "3.7": { typeHints: true, dataClasses: true } + "3.7": { typeHints: true, dataClasses: true }, }, - "3.6" + "3.6", ), justTypes: new BooleanOption("just-types", "Classes only", false), - nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be Pythonic", true), - pydanticBaseModel: new BooleanOption("pydantic-base-model", "Uses pydantic BaseModel", false) + nicePropertyNames: new BooleanOption( + "nice-property-names", + "Transform property names to be Pythonic", + true, + ), + pydanticBaseModel: new BooleanOption( + "pydantic-base-model", + "Uses pydantic BaseModel", + false, + ), }; -export const pythonLanguageConfig = { displayName: "Python", names: ["python", "py"], extension: "py" } as const; +export const pythonLanguageConfig = { + displayName: "Python", + names: ["python", "py"], + extension: "py", +} as const; -export class PythonTargetLanguage extends TargetLanguage { +export class PythonTargetLanguage extends TargetLanguage< + typeof pythonLanguageConfig +> { public constructor() { super(pythonLanguageConfig); } @@ -43,7 +66,8 @@ export class PythonTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("time", dateTimeType); @@ -64,18 +88,23 @@ export class PythonTargetLanguage extends TargetLanguage this.needsTransformerForType(m)); + return iterableSome(t.members, (m) => + this.needsTransformerForType(m), + ); } return t.kind === "integer-string" || t.kind === "bool-string"; } - protected makeRenderer(renderContext: RenderContext, untypedOptionValues: FixMeOptionsType): PythonRenderer { + protected makeRenderer( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): PythonRenderer { const options = getOptionValues(pythonOptions, untypedOptionValues); if (options.justTypes) { return new PythonRenderer(this, renderContext, options); - } else { - return new JSONPythonRenderer(this, renderContext, options); } + + return new JSONPythonRenderer(this, renderContext, options); } } diff --git a/packages/quicktype-core/src/language/Python/utils.ts b/packages/quicktype-core/src/language/Python/utils.ts index 6ffb8c5a2..e39a9c7e1 100644 --- a/packages/quicktype-core/src/language/Python/utils.ts +++ b/packages/quicktype-core/src/language/Python/utils.ts @@ -7,7 +7,7 @@ import { firstUpperWordStyle, originalWord, splitIntoWords, - utf16LegalizeCharacters + utf16LegalizeCharacters, } from "../../support/Strings"; function isNormalizedStartCharacter3(utf16Unit: number): boolean { @@ -56,7 +56,7 @@ export function classNameStyle(original: string): string { allUpperWordStyle, allUpperWordStyle, "", - isStartCharacter3 + isStartCharacter3, ); } @@ -68,9 +68,22 @@ function getWordStyle(uppercase: boolean, forceSnakeNameStyle: boolean) { return uppercase ? allUpperWordStyle : allLowerWordStyle; } -export function snakeNameStyle(original: string, uppercase: boolean, forceSnakeNameStyle: boolean): string { +export function snakeNameStyle( + original: string, + uppercase: boolean, + forceSnakeNameStyle: boolean, +): string { const wordStyle = getWordStyle(uppercase, forceSnakeNameStyle); const separator = forceSnakeNameStyle ? "_" : ""; const words = splitIntoWords(original); - return combineWords(words, legalizeName3, wordStyle, wordStyle, wordStyle, wordStyle, separator, isStartCharacter3); + return combineWords( + words, + legalizeName3, + wordStyle, + wordStyle, + wordStyle, + wordStyle, + separator, + isStartCharacter3, + ); } diff --git a/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts b/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts index 224b4ddb8..af5af4b6f 100644 --- a/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts +++ b/packages/quicktype-core/src/language/Ruby/RubyRenderer.ts @@ -1,10 +1,13 @@ -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { snakeCase } from "../../support/Strings"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -12,19 +15,29 @@ import { type EnumType, MapType, type Type, - type UnionType + type UnionType, } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { globals } from "./constants"; -import { type rubyOptions } from "./language"; -import { Strictness, forbiddenForObjectProperties, memberNameStyle, simpleNameStyle, stringEscape } from "./utils"; +import type { rubyOptions } from "./language"; +import { + Strictness, + forbiddenForObjectProperties, + memberNameStyle, + simpleNameStyle, + stringEscape, +} from "./utils"; export class RubyRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -42,15 +55,28 @@ export class RubyRenderer extends ConvenienceRenderer { } protected forbiddenNamesForGlobalNamespace(): readonly string[] { - return [...globals, "Types", "JSON", "Dry", "Constructor", "Self"] as const; + return [ + ...globals, + "Types", + "JSON", + "Dry", + "Constructor", + "Self", + ] as const; } - protected forbiddenForObjectProperties(_c: ClassType, _classNamed: Name): ForbiddenWordsInfo { - return { names: forbiddenForObjectProperties, includeGlobalForbidden: true }; + protected forbiddenForObjectProperties( + _c: ClassType, + _classNamed: Name, + ): ForbiddenWordsInfo { + return { + names: forbiddenForObjectProperties, + includeGlobalForbidden: true, + }; } protected makeNamedTypeNamer(): Namer { - return new Namer("types", n => simpleNameStyle(n, true), []); + return new Namer("types", (n) => simpleNameStyle(n, true), []); } protected namerForObjectProperty(): Namer { @@ -62,35 +88,59 @@ export class RubyRenderer extends ConvenienceRenderer { } protected makeEnumCaseNamer(): Namer { - return new Namer("enum-cases", n => simpleNameStyle(n, true), []); + return new Namer("enum-cases", (n) => simpleNameStyle(n, true), []); } private dryType(t: Type, isOptional = false): Sourcelike { const optional = isOptional ? ".optional" : ""; return matchType( t, - _anyType => ["Types::Any", optional], - _nullType => ["Types::Nil", optional], - _boolType => ["Types::Bool", optional], - _integerType => ["Types::Integer", optional], - _doubleType => ["Types::Double", optional], - _stringType => ["Types::String", optional], - arrayType => ["Types.Array(", this.dryType(arrayType.items), ")", optional], - classType => [this.nameForNamedType(classType), optional], - mapType => ["Types::Hash.meta(of: ", this.dryType(mapType.values), ")", optional], - enumType => ["Types::", this.nameForNamedType(enumType), optional], - unionType => { + (_anyType) => ["Types::Any", optional], + (_nullType) => ["Types::Nil", optional], + (_boolType) => ["Types::Bool", optional], + (_integerType) => ["Types::Integer", optional], + (_doubleType) => ["Types::Double", optional], + (_stringType) => ["Types::String", optional], + (arrayType) => [ + "Types.Array(", + this.dryType(arrayType.items), + ")", + optional, + ], + (classType) => [this.nameForNamedType(classType), optional], + (mapType) => [ + "Types::Hash.meta(of: ", + this.dryType(mapType.values), + ")", + optional, + ], + (enumType) => [ + "Types::", + this.nameForNamedType(enumType), + optional, + ], + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return [this.dryType(nullable), ".optional"]; } - return ["Types.Instance(", this.nameForNamedType(unionType), ")", optional]; - } + return [ + "Types.Instance(", + this.nameForNamedType(unionType), + ")", + optional, + ]; + }, ); } - private exampleUse(t: Type, exp: Sourcelike, depth = 6, optional = false): Sourcelike { + private exampleUse( + t: Type, + exp: Sourcelike, + depth = 6, + optional = false, + ): Sourcelike { if (depth-- <= 0) { return exp; } @@ -99,44 +149,67 @@ export class RubyRenderer extends ConvenienceRenderer { return matchType( t, - _anyType => exp, - _nullType => [exp, ".nil?"], - _boolType => exp, - _integerType => [exp, ".even?"], - _doubleType => exp, - _stringType => exp, - arrayType => this.exampleUse(arrayType.items, [exp, safeNav, ".first"], depth), - classType => { + (_anyType) => exp, + (_nullType) => [exp, ".nil?"], + (_boolType) => exp, + (_integerType) => [exp, ".even?"], + (_doubleType) => exp, + (_stringType) => exp, + (arrayType) => + this.exampleUse( + arrayType.items, + [exp, safeNav, ".first"], + depth, + ), + (classType) => { let info: { name: Name; prop: ClassProperty } | undefined; - this.forEachClassProperty(classType, "none", (name, _json, prop) => { - if (["class", "map", "array"].includes(prop.type.kind)) { - info = { name, prop }; - } else if (info === undefined) { - info = { name, prop }; - } - }); + this.forEachClassProperty( + classType, + "none", + (name, _json, prop) => { + if ( + ["class", "map", "array"].includes(prop.type.kind) + ) { + info = { name, prop }; + } else if (info === undefined) { + info = { name, prop }; + } + }, + ); if (info !== undefined) { - return this.exampleUse(info.prop.type, [exp, safeNav, ".", info.name], depth, info.prop.isOptional); + return this.exampleUse( + info.prop.type, + [exp, safeNav, ".", info.name], + depth, + info.prop.isOptional, + ); } return exp; }, - mapType => this.exampleUse(mapType.values, [exp, safeNav, '["…"]'], depth), - enumType => { + (mapType) => + this.exampleUse(mapType.values, [exp, safeNav, '["…"]'], depth), + (enumType) => { let name: Name | undefined; // FIXME: This is a terrible way to get the first enum case name. - this.forEachEnumCase(enumType, "none", theName => { + this.forEachEnumCase(enumType, "none", (theName) => { if (name === undefined) { name = theName; } }); if (name !== undefined) { - return [exp, " == ", this.nameForNamedType(enumType), "::", name]; + return [ + exp, + " == ", + this.nameForNamedType(enumType), + "::", + name, + ]; } return exp; }, - unionType => { + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (["class", "map", "array"].includes(nullable.kind)) { @@ -147,7 +220,7 @@ export class RubyRenderer extends ConvenienceRenderer { } return exp; - } + }, ); } @@ -155,57 +228,88 @@ export class RubyRenderer extends ConvenienceRenderer { function inner(): string { if (t instanceof ArrayType) { return "[…]"; - } else if (t instanceof MapType) { + } + if (t instanceof MapType) { return "{…}"; - } else if (t instanceof ClassType) { + } + if (t instanceof ClassType) { return "{…}"; - } else { - return "…"; } + + return "…"; } return `"${inner()}"`; } - private fromDynamic(t: Type, e: Sourcelike, optional = false, castPrimitives = false): Sourcelike { + private fromDynamic( + t: Type, + e: Sourcelike, + optional = false, + castPrimitives = false, + ): Sourcelike { const primitiveCast = [this.dryType(t, optional), "[", e, "]"]; const primitive = castPrimitives ? primitiveCast : e; const safeAccess = optional ? "&" : ""; return matchType( t, - _anyType => primitive, - _nullType => primitive, - _boolType => primitive, - _integerType => primitive, - _doubleType => primitive, - _stringType => primitive, - arrayType => [e, safeAccess, ".map { |x| ", this.fromDynamic(arrayType.items, "x", false, true), " }"], - classType => { - const expression = [this.nameForNamedType(classType), ".from_dynamic!(", e, ")"]; + (_anyType) => primitive, + (_nullType) => primitive, + (_boolType) => primitive, + (_integerType) => primitive, + (_doubleType) => primitive, + (_stringType) => primitive, + (arrayType) => [ + e, + safeAccess, + ".map { |x| ", + this.fromDynamic(arrayType.items, "x", false, true), + " }", + ], + (classType) => { + const expression = [ + this.nameForNamedType(classType), + ".from_dynamic!(", + e, + ")", + ]; return optional ? [e, " ? ", expression, " : nil"] : expression; }, - mapType => [ + (mapType) => [ ["Types::Hash", optional ? ".optional" : "", "[", e, "]"], safeAccess, ".map { |k, v| [k, ", this.fromDynamic(mapType.values, "v", false, true), "] }", safeAccess, - ".to_h" + ".to_h", ], - enumType => { - const expression = ["Types::", this.nameForNamedType(enumType), "[", e, "]"]; - return optional ? [e, ".nil? ? nil : ", expression] : expression; + (enumType) => { + const expression = [ + "Types::", + this.nameForNamedType(enumType), + "[", + e, + "]", + ]; + return optional + ? [e, ".nil? ? nil : ", expression] + : expression; }, - unionType => { + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.fromDynamic(nullable, e, true); } - const expression = [this.nameForNamedType(unionType), ".from_dynamic!(", e, ")"]; + const expression = [ + this.nameForNamedType(unionType), + ".from_dynamic!(", + e, + ")", + ]; return optional ? [e, " ? ", expression, " : nil"] : expression; - } + }, ); } @@ -216,17 +320,29 @@ export class RubyRenderer extends ConvenienceRenderer { return matchType( t, - _anyType => e, - _nullType => e, - _boolType => e, - _integerType => e, - _doubleType => e, - _stringType => e, - arrayType => [e, optional ? "&" : "", ".map { |x| ", this.toDynamic(arrayType.items, "x"), " }"], - _classType => [e, optional ? "&" : "", ".to_dynamic"], - mapType => [e, optional ? "&" : "", ".map { |k, v| [k, ", this.toDynamic(mapType.values, "v"), "] }.to_h"], - _enumType => e, - unionType => { + (_anyType) => e, + (_nullType) => e, + (_boolType) => e, + (_integerType) => e, + (_doubleType) => e, + (_stringType) => e, + (arrayType) => [ + e, + optional ? "&" : "", + ".map { |x| ", + this.toDynamic(arrayType.items, "x"), + " }", + ], + (_classType) => [e, optional ? "&" : "", ".to_dynamic"], + (mapType) => [ + e, + optional ? "&" : "", + ".map { |k, v| [k, ", + this.toDynamic(mapType.values, "v"), + "] }.to_h", + ], + (_enumType) => e, + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.toDynamic(nullable, e, true); @@ -237,31 +353,31 @@ export class RubyRenderer extends ConvenienceRenderer { } return [e, optional ? "&" : "", ".to_dynamic"]; - } + }, ); } private marshalsImplicitlyToDynamic(t: Type): boolean { return matchType( t, - _anyType => true, - _nullType => true, - _boolType => true, - _integerType => true, - _doubleType => true, - _stringType => true, - arrayType => this.marshalsImplicitlyToDynamic(arrayType.items), - _classType => false, - mapType => this.marshalsImplicitlyToDynamic(mapType.values), - _enumType => true, - unionType => { + (_anyType) => true, + (_nullType) => true, + (_boolType) => true, + (_integerType) => true, + (_doubleType) => true, + (_stringType) => true, + (arrayType) => this.marshalsImplicitlyToDynamic(arrayType.items), + (_classType) => false, + (mapType) => this.marshalsImplicitlyToDynamic(mapType.values), + (_enumType) => true, + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.marshalsImplicitlyToDynamic(nullable); } return false; - } + }, ); } @@ -271,25 +387,28 @@ export class RubyRenderer extends ConvenienceRenderer { private propertyTypeMarshalsImplicitlyFromDynamic(t: Type): boolean { return matchType( t, - _anyType => true, - _nullType => true, - _boolType => true, - _integerType => true, - _doubleType => true, - _stringType => true, - arrayType => this.propertyTypeMarshalsImplicitlyFromDynamic(arrayType.items), - _classType => false, + (_anyType) => true, + (_nullType) => true, + (_boolType) => true, + (_integerType) => true, + (_doubleType) => true, + (_stringType) => true, + (arrayType) => + this.propertyTypeMarshalsImplicitlyFromDynamic(arrayType.items), + (_classType) => false, // Map properties must be checked because Dry:Types doesn't have a generic Map - _mapType => false, - _enumType => true, - unionType => { + (_mapType) => false, + (_enumType) => true, + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { - return this.propertyTypeMarshalsImplicitlyFromDynamic(nullable); + return this.propertyTypeMarshalsImplicitlyFromDynamic( + nullable, + ); } return false; - } + }, ); } @@ -311,7 +430,10 @@ export class RubyRenderer extends ConvenienceRenderer { } }; - if (this._options.namespace !== undefined && this._options.namespace !== "") { + if ( + this._options.namespace !== undefined && + this._options.namespace !== "" + ) { emitModuleInner(this._options.namespace); } else { emit(); @@ -325,10 +447,17 @@ export class RubyRenderer extends ConvenienceRenderer { let count = c.getProperties().size; this.forEachClassProperty(c, "none", (name, jsonName, p) => { const last = --count === 0; - const description = this.descriptionForClassProperty(c, jsonName); + const description = this.descriptionForClassProperty( + c, + jsonName, + ); const attribute = [ ["attribute :", name, ","], - [" ", this.dryType(p.type), p.isOptional ? ".optional" : ""] + [ + " ", + this.dryType(p.type), + p.isOptional ? ".optional" : "", + ], ]; if (description !== undefined) { if (table.length > 0) { @@ -360,26 +489,38 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitLine("new("); this.indent(() => { const inits: Sourcelike[][] = []; - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - const dynamic = p.isOptional - ? // If key is not found in hash, this will be nil - `d["${stringEscape(jsonName)}"]` - : // This will raise a runtime error if the key is not found in the hash - `d.fetch("${stringEscape(jsonName)}")`; - - if (this.propertyTypeMarshalsImplicitlyFromDynamic(p.type)) { - inits.push([ - [name, ": "], - [dynamic, ","] - ]); - } else { - const expression = this.fromDynamic(p.type, dynamic, p.isOptional); - inits.push([ - [name, ": "], - [expression, ","] - ]); - } - }); + this.forEachClassProperty( + c, + "none", + (name, jsonName, p) => { + const dynamic = p.isOptional + ? // If key is not found in hash, this will be nil + `d["${stringEscape(jsonName)}"]` + : // This will raise a runtime error if the key is not found in the hash + `d.fetch("${stringEscape(jsonName)}")`; + + if ( + this.propertyTypeMarshalsImplicitlyFromDynamic( + p.type, + ) + ) { + inits.push([ + [name, ": "], + [dynamic, ","], + ]); + } else { + const expression = this.fromDynamic( + p.type, + dynamic, + p.isOptional, + ); + inits.push([ + [name, ": "], + [expression, ","], + ]); + } + }, + ); this.emitTable(inits); }); this.emitLine(")"); @@ -395,10 +536,21 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitLine("{"); this.indent(() => { const inits: Sourcelike[][] = []; - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - const expression = this.toDynamic(p.type, name, p.isOptional); - inits.push([[`"${stringEscape(jsonName)}"`], [" => ", expression, ","]]); - }); + this.forEachClassProperty( + c, + "none", + (name, jsonName, p) => { + const expression = this.toDynamic( + p.type, + name, + p.isOptional, + ); + inits.push([ + [`"${stringEscape(jsonName)}"`], + [" => ", expression, ","], + ]); + }, + ); this.emitTable(inits); }); this.emitLine("}"); @@ -425,9 +577,18 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitDescription(this.descriptionForType(u)); this.emitBlock(["class ", unionName, " < Dry::Struct"], () => { const table: Sourcelike[][] = []; - this.forEachUnionMember(u, u.getChildren(), "none", null, (name, t) => { - table.push([["attribute :", name, ", "], [this.dryType(t, true)]]); - }); + this.forEachUnionMember( + u, + u.getChildren(), + "none", + null, + (name, t) => { + table.push([ + ["attribute :", name, ", "], + [this.dryType(t, true)], + ]); + }, + ); this.emitTable(table); if (this._options.justTypes) { @@ -437,27 +598,60 @@ export class RubyRenderer extends ConvenienceRenderer { this.ensureBlankLine(); const [maybeNull, nonNulls] = removeNullFromUnion(u, false); this.emitBlock("def self.from_dynamic!(d)", () => { - const memberNames = Array.from(u.getChildren()).map(member => this.nameForUnionMember(u, member)); - this.forEachUnionMember(u, u.getChildren(), "none", null, (name, t) => { - const nilMembers = memberNames - .filter(n => n !== name) - .map(memberName => [", ", memberName, ": nil"]); - if (this.propertyTypeMarshalsImplicitlyFromDynamic(t)) { - this.emitBlock(["if schema[:", name, "].right.valid? d"], () => { - this.emitLine("return new(", name, ": d", nilMembers, ")"); - }); - } else { - this.emitLine("begin"); - this.indent(() => { - this.emitLine("value = ", this.fromDynamic(t, "d")); - this.emitBlock(["if schema[:", name, "].right.valid? value"], () => { - this.emitLine("return new(", name, ": value", nilMembers, ")"); + const memberNames = Array.from(u.getChildren()).map((member) => + this.nameForUnionMember(u, member), + ); + this.forEachUnionMember( + u, + u.getChildren(), + "none", + null, + (name, t) => { + const nilMembers = memberNames + .filter((n) => n !== name) + .map((memberName) => [", ", memberName, ": nil"]); + if (this.propertyTypeMarshalsImplicitlyFromDynamic(t)) { + this.emitBlock( + ["if schema[:", name, "].right.valid? d"], + () => { + this.emitLine( + "return new(", + name, + ": d", + nilMembers, + ")", + ); + }, + ); + } else { + this.emitLine("begin"); + this.indent(() => { + this.emitLine( + "value = ", + this.fromDynamic(t, "d"), + ); + this.emitBlock( + [ + "if schema[:", + name, + "].right.valid? value", + ], + () => { + this.emitLine( + "return new(", + name, + ": value", + nilMembers, + ")", + ); + }, + ); }); - }); - this.emitLine("rescue"); - this.emitLine("end"); - } - }); + this.emitLine("rescue"); + this.emitLine("end"); + } + }, + ); this.emitLine('raise "Invalid union"'); }); @@ -469,13 +663,24 @@ export class RubyRenderer extends ConvenienceRenderer { this.ensureBlankLine(); this.emitBlock("def to_dynamic", () => { let first = true; - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - this.emitLine(first ? "if" : "elsif", " ", name, " != nil"); - this.indent(() => { - this.emitLine(this.toDynamic(t, name)); - }); - first = false; - }); + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (name, t) => { + this.emitLine( + first ? "if" : "elsif", + " ", + name, + " != nil", + ); + this.indent(() => { + this.emitLine(this.toDynamic(t, name)); + }); + first = false; + }, + ); if (maybeNull !== null) { this.emitLine("else"); this.indent(() => { @@ -500,38 +705,83 @@ export class RubyRenderer extends ConvenienceRenderer { const declarations: Sourcelike[][] = []; if (this._options.strictness !== Strictness.None) { - let has = { int: false, nil: false, bool: false, hash: false, string: false, double: false }; - this.forEachType(t => { + let has = { + int: false, + nil: false, + bool: false, + hash: false, + string: false, + double: false, + }; + this.forEachType((t) => { has = { int: has.int || t.kind === "integer", nil: has.nil || t.kind === "null", bool: has.bool || t.kind === "bool", - hash: has.hash || t.kind === "map" || t.kind === "class", - string: has.string || t.kind === "string" || t.kind === "enum", - double: has.double || t.kind === "double" + hash: + has.hash || t.kind === "map" || t.kind === "class", + string: + has.string || + t.kind === "string" || + t.kind === "enum", + double: has.double || t.kind === "double", }; }); - if (has.int) declarations.push([["Integer"], [` = ${this._options.strictness}Integer`]]); + if (has.int) + declarations.push([ + ["Integer"], + [` = ${this._options.strictness}Integer`], + ]); if (this._options.strictness === Strictness.Strict) { - if (has.nil) declarations.push([["Nil"], [` = ${this._options.strictness}Nil`]]); + if (has.nil) + declarations.push([ + ["Nil"], + [` = ${this._options.strictness}Nil`], + ]); } - if (has.bool) declarations.push([["Bool"], [` = ${this._options.strictness}Bool`]]); - if (has.hash) declarations.push([["Hash"], [` = ${this._options.strictness}Hash`]]); - if (has.string) declarations.push([["String"], [` = ${this._options.strictness}String`]]); + if (has.bool) + declarations.push([ + ["Bool"], + [` = ${this._options.strictness}Bool`], + ]); + if (has.hash) + declarations.push([ + ["Hash"], + [` = ${this._options.strictness}Hash`], + ]); + if (has.string) + declarations.push([ + ["String"], + [` = ${this._options.strictness}String`], + ]); if (has.double) declarations.push([ ["Double"], - [` = ${this._options.strictness}Float | ${this._options.strictness}Integer`] + [ + ` = ${this._options.strictness}Float | ${this._options.strictness}Integer`, + ], ]); } this.forEachEnum("none", (enumType, enumName) => { const cases: Sourcelike[][] = []; this.forEachEnumCase(enumType, "none", (_name, json) => { - cases.push([cases.length === 0 ? "" : ", ", `"${stringEscape(json)}"`]); + cases.push([ + cases.length === 0 ? "" : ", ", + `"${stringEscape(json)}"`, + ]); }); - declarations.push([[enumName], [" = ", this._options.strictness, "String.enum(", ...cases, ")"]]); + declarations.push([ + [enumName], + [ + " = ", + this._options.strictness, + "String.enum(", + ...cases, + ")", + ], + ]); }); if (declarations.length > 0) { @@ -545,18 +795,33 @@ export class RubyRenderer extends ConvenienceRenderer { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { - this.emitLine("# This code may look unusually verbose for Ruby (and it is), but"); - this.emitLine("# it performs some subtle and complex validation of JSON data."); + this.emitLine( + "# This code may look unusually verbose for Ruby (and it is), but", + ); + this.emitLine( + "# it performs some subtle and complex validation of JSON data.", + ); this.emitLine("#"); - this.emitLine("# To parse this JSON, add 'dry-struct' and 'dry-types' gems, then do:"); + this.emitLine( + "# To parse this JSON, add 'dry-struct' and 'dry-types' gems, then do:", + ); this.emitLine("#"); this.forEachTopLevel("none", (topLevel, name) => { const variable = modifySource(snakeCase, name); - this.emitLine("# ", variable, " = ", name, ".from_json! ", this.jsonSample(topLevel)); + this.emitLine( + "# ", + variable, + " = ", + name, + ".from_json! ", + this.jsonSample(topLevel), + ); this.emitLine("# puts ", this.exampleUse(topLevel, variable)); this.emitLine("#"); }); - this.emitLine("# If from_json! succeeds, the value returned matches the schema."); + this.emitLine( + "# If from_json! succeeds, the value returned matches the schema.", + ); } this.ensureBlankLine(); @@ -570,11 +835,15 @@ export class RubyRenderer extends ConvenienceRenderer { this.emitModule(() => { this.emitTypesModule(); - this.forEachDeclaration("leading-and-interposing", decl => { + this.forEachDeclaration("leading-and-interposing", (decl) => { if (decl.kind === "forward") { this.emitCommentLines(["(forward declaration)"]); this.emitModule(() => { - this.emitLine("class ", this.nameForNamedType(decl.type), " < Dry::Struct; end"); + this.emitLine( + "class ", + this.nameForNamedType(decl.type), + " < Dry::Struct; end", + ); }); } }); @@ -583,7 +852,7 @@ export class RubyRenderer extends ConvenienceRenderer { "leading-and-interposing", (c: ClassType, n: Name) => this.emitClass(c, n), (e, n) => this.emitEnum(e, n), - (u, n) => this.emitUnion(u, n) + (u, n) => this.emitUnion(u, n), ); if (!this._options.justTypes) { @@ -598,23 +867,45 @@ export class RubyRenderer extends ConvenienceRenderer { const classDeclaration = (): void => { this.emitBlock(["class ", name], () => { - this.emitBlock(["def self.from_json!(json)"], () => { - if (needsToJsonDefined) { - this.emitLine( - self, - " = ", - this.fromDynamic(topLevel, "JSON.parse(json, quirks_mode: true)") - ); - this.emitBlock([self, ".define_singleton_method(:to_json) do"], () => { - this.emitLine("JSON.generate(", this.toDynamic(topLevel, "self"), ")"); - }); - this.emitLine(self); - } else { - this.emitLine( - this.fromDynamic(topLevel, "JSON.parse(json, quirks_mode: true)") - ); - } - }); + this.emitBlock( + ["def self.from_json!(json)"], + () => { + if (needsToJsonDefined) { + this.emitLine( + self, + " = ", + this.fromDynamic( + topLevel, + "JSON.parse(json, quirks_mode: true)", + ), + ); + this.emitBlock( + [ + self, + ".define_singleton_method(:to_json) do", + ], + () => { + this.emitLine( + "JSON.generate(", + this.toDynamic( + topLevel, + "self", + ), + ")", + ); + }, + ); + this.emitLine(self); + } else { + this.emitLine( + this.fromDynamic( + topLevel, + "JSON.parse(json, quirks_mode: true)", + ), + ); + } + }, + ); }); }; @@ -622,7 +913,7 @@ export class RubyRenderer extends ConvenienceRenderer { classDeclaration(); }); }, - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); } }); diff --git a/packages/quicktype-core/src/language/Ruby/constants.ts b/packages/quicktype-core/src/language/Ruby/constants.ts index 9848048f5..ae9f5bf7b 100644 --- a/packages/quicktype-core/src/language/Ruby/constants.ts +++ b/packages/quicktype-core/src/language/Ruby/constants.ts @@ -39,7 +39,7 @@ export const keywords = [ "until", "when", "while", - "yield" + "yield", ] as const; const globalClasses = [ @@ -133,7 +133,7 @@ const globalClasses = [ "Undefined", "UnicodeNormalize", "Warning", - "ZeroDivisionError" + "ZeroDivisionError", ] as const; const kernel = [ @@ -286,7 +286,7 @@ const kernel = [ "untrace_var", "untrust", "untrusted?", - "warn" + "warn", ] as const; export const globals = [...kernel, ...globalClasses] as const; @@ -355,5 +355,5 @@ export const reservedProperties = [ "undef", "untrust", "while", - "with" + "with", ] as const; diff --git a/packages/quicktype-core/src/language/Ruby/language.ts b/packages/quicktype-core/src/language/Ruby/language.ts index e96c0109c..e7b021305 100644 --- a/packages/quicktype-core/src/language/Ruby/language.ts +++ b/packages/quicktype-core/src/language/Ruby/language.ts @@ -1,7 +1,12 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { RubyRenderer } from "./RubyRenderer"; import { Strictness } from "./utils"; @@ -14,20 +19,28 @@ export const rubyOptions = { { strict: Strictness.Strict, coercible: Strictness.Coercible, - none: Strictness.None + none: Strictness.None, } as const, - "strict" + "strict", + ), + namespace: new StringOption( + "namespace", + "Specify a wrapping Namespace", + "NAME", + "", + "secondary", ), - namespace: new StringOption("namespace", "Specify a wrapping Namespace", "NAME", "", "secondary") }; export const rubyLanguageConfig = { displayName: "Ruby", names: ["ruby"], - extension: "rb" + extension: "rb", } as const; -export class RubyTargetLanguage extends TargetLanguage { +export class RubyTargetLanguage extends TargetLanguage< + typeof rubyLanguageConfig +> { public constructor() { super(rubyLanguageConfig); } @@ -44,7 +57,14 @@ export class RubyTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): RubyRenderer { + return new RubyRenderer( + this, + renderContext, + getOptionValues(rubyOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/Ruby/utils.ts b/packages/quicktype-core/src/language/Ruby/utils.ts index 1b78d957c..61c12f8c2 100644 --- a/packages/quicktype-core/src/language/Ruby/utils.ts +++ b/packages/quicktype-core/src/language/Ruby/utils.ts @@ -11,7 +11,7 @@ import { isPrintable, legalizeCharacters, splitIntoWords, - utf32ConcatMap + utf32ConcatMap, } from "../../support/Strings"; import * as keywords from "./constants"; @@ -19,21 +19,28 @@ import * as keywords from "./constants"; export enum Strictness { Strict = "Strict::", Coercible = "Coercible::", - None = "Types::" + None = "Types::", } -export const forbiddenForObjectProperties = Array.from(new Set([...keywords.keywords, ...keywords.reservedProperties])); +export const forbiddenForObjectProperties = Array.from( + new Set([...keywords.keywords, ...keywords.reservedProperties]), +); function unicodeEscape(codePoint: number): string { return "\\u{" + intToHex(codePoint, 0) + "}"; } -export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); +export const stringEscape = utf32ConcatMap( + escapeNonPrintableMapper(isPrintable, unicodeEscape), +); const isStartCharacter = isLetterOrUnderscore; function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); - return ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit); + return ( + ["Nd", "Pc", "Mn", "Mc"].includes(category) || + isStartCharacter(utf16Unit) + ); } const legalizeName = legalizeCharacters(isPartCharacter); @@ -52,7 +59,7 @@ export function simpleNameStyle(original: string, uppercase: boolean): string { allUpperWordStyle, allUpperWordStyle, "", - isStartCharacter + isStartCharacter, ); } @@ -66,6 +73,6 @@ export function memberNameStyle(original: string): string { allLowerWordStyle, allLowerWordStyle, "_", - isStartCharacter + isStartCharacter, ); } diff --git a/packages/quicktype-core/src/language/Rust/RustRenderer.ts b/packages/quicktype-core/src/language/Rust/RustRenderer.ts index 136f643fb..22e81babc 100644 --- a/packages/quicktype-core/src/language/Rust/RustRenderer.ts +++ b/packages/quicktype-core/src/language/Rust/RustRenderer.ts @@ -1,19 +1,34 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { mapFirst } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; -import { type Name, type Namer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; +import type { Name, Namer } from "../../Naming"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { defined } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { type ClassType, type EnumType, type Type, UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + type ClassType, + type EnumType, + type Type, + UnionType, +} from "../../Type"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type rustOptions } from "./language"; +import type { rustOptions } from "./language"; import { Density, type NamingStyleKey, @@ -24,14 +39,14 @@ import { nameWithNamingStyle, namingStyles, rustStringEscape, - snakeNamingFunction + snakeNamingFunction, } from "./utils"; export class RustRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -56,15 +71,24 @@ export class RustRenderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_c: ClassType, _className: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _className: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } @@ -84,20 +108,39 @@ export class RustRenderer extends ConvenienceRenderer { private rustType(t: Type, withIssues = false): Sourcelike { return matchType( t, - _anyType => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "Option"), - _nullType => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Option"), - _boolType => "bool", - _integerType => "i64", - _doubleType => "f64", - _stringType => "String", - arrayType => ["Vec<", this.rustType(arrayType.items, withIssues), ">"], - classType => this.nameForNamedType(classType), - mapType => ["HashMap"], - enumType => this.nameForNamedType(enumType), - unionType => { + (_anyType) => + maybeAnnotated( + withIssues, + anyTypeIssueAnnotation, + "Option", + ), + (_nullType) => + maybeAnnotated( + withIssues, + nullTypeIssueAnnotation, + "Option", + ), + (_boolType) => "bool", + (_integerType) => "i64", + (_doubleType) => "f64", + (_stringType) => "String", + (arrayType) => [ + "Vec<", + this.rustType(arrayType.items, withIssues), + ">", + ], + (classType) => this.nameForNamedType(classType), + (mapType) => [ + "HashMap", + ], + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return this.nullableRustType(nullable, withIssues); + if (nullable !== null) + return this.nullableRustType(nullable, withIssues); const [hasNull] = removeNullFromUnion(unionType); @@ -107,8 +150,10 @@ export class RustRenderer extends ConvenienceRenderer { ? ["Box<", this.nameForNamedType(unionType), ">"] : this.nameForNamedType(unionType); - return hasNull !== null ? (["Option<", name, ">"] as Sourcelike) : name; - } + return hasNull !== null + ? (["Option<", name, ">"] as Sourcelike) + : name; + }, ); } @@ -123,10 +168,12 @@ export class RustRenderer extends ConvenienceRenderer { propName: Name, jsonName: string, defaultNamingStyle: NamingStyleKey, - preferedNamingStyle: NamingStyleKey + preferedNamingStyle: NamingStyleKey, ): void { const escapedName = rustStringEscape(jsonName); - const name = namingStyles[defaultNamingStyle].fromParts(this.sourcelikeToString(propName).split(" ")); + const name = namingStyles[defaultNamingStyle].fromParts( + this.sourcelikeToString(propName).split(" "), + ); const styledName = nameWithNamingStyle(name, preferedNamingStyle); const namesDiffer = escapedName !== styledName; if (namesDiffer) { @@ -137,14 +184,18 @@ export class RustRenderer extends ConvenienceRenderer { private emitSkipSerializeNone(t: Type): void { if (t instanceof UnionType) { const nullable = nullableFromUnion(t); - if (nullable !== null) this.emitLine('#[serde(skip_serializing_if = "Option::is_none")]'); + if (nullable !== null) + this.emitLine( + '#[serde(skip_serializing_if = "Option::is_none")]', + ); } } private get visibility(): string { if (this._options.visibility === Visibility.Crate) { return "pub(crate) "; - } else if (this._options.visibility === Visibility.Public) { + } + if (this._options.visibility === Visibility.Public) { return "pub "; } @@ -158,32 +209,50 @@ export class RustRenderer extends ConvenienceRenderer { this._options.deriveDebug ? "Debug, " : "", this._options.deriveClone ? "Clone, " : "", this._options.derivePartialEq ? "PartialEq, " : "", - "Serialize, Deserialize)]" + "Serialize, Deserialize)]", ); // List the possible naming styles for every class property const propertiesNamingStyles: { [key: string]: string[] } = {}; this.forEachClassProperty(c, "none", (_name, jsonName, _prop) => { - propertiesNamingStyles[jsonName] = listMatchingNamingStyles(jsonName); + propertiesNamingStyles[jsonName] = + listMatchingNamingStyles(jsonName); }); // Set the default naming style on the struct const defaultStyle = "snake_case"; - const preferedNamingStyle = getPreferredNamingStyle(Object.values(propertiesNamingStyles).flat(), defaultStyle); + const preferedNamingStyle = getPreferredNamingStyle( + Object.values(propertiesNamingStyles).flat(), + defaultStyle, + ); if (preferedNamingStyle !== defaultStyle) { this.emitLine(`#[serde(rename_all = "${preferedNamingStyle}")]`); } - const blankLines = this._options.density === Density.Dense ? "none" : "interposing"; + const blankLines = + this._options.density === Density.Dense ? "none" : "interposing"; const structBody = (): void => this.forEachClassProperty(c, blankLines, (name, jsonName, prop) => { - this.emitDescription(this.descriptionForClassProperty(c, jsonName)); - this.emitRenameAttribute(name, jsonName, defaultStyle, preferedNamingStyle); + this.emitDescription( + this.descriptionForClassProperty(c, jsonName), + ); + this.emitRenameAttribute( + name, + jsonName, + defaultStyle, + preferedNamingStyle, + ); if (this._options.skipSerializingNone) { this.emitSkipSerializeNone(prop.type); } - this.emitLine(this.visibility, name, ": ", this.breakCycle(prop.type, true), ","); + this.emitLine( + this.visibility, + name, + ": ", + this.breakCycle(prop.type, true), + ",", + ); }); this.emitBlock(["pub struct ", className], structBody); @@ -208,18 +277,25 @@ export class RustRenderer extends ConvenienceRenderer { this._options.deriveDebug ? "Debug, " : "", this._options.deriveClone ? "Clone, " : "", this._options.derivePartialEq ? "PartialEq, " : "", - "Serialize, Deserialize)]" + "Serialize, Deserialize)]", ); this.emitLine("#[serde(untagged)]"); const [, nonNulls] = removeNullFromUnion(u); - const blankLines = this._options.density === Density.Dense ? "none" : "interposing"; + const blankLines = + this._options.density === Density.Dense ? "none" : "interposing"; this.emitBlock(["pub enum ", unionName], () => - this.forEachUnionMember(u, nonNulls, blankLines, null, (fieldName, t) => { - const rustType = this.breakCycle(t, true); - this.emitLine([fieldName, "(", rustType, "),"]); - }) + this.forEachUnionMember( + u, + nonNulls, + blankLines, + null, + (fieldName, t) => { + const rustType = this.breakCycle(t, true); + this.emitLine([fieldName, "(", rustType, "),"]); + }, + ), ); } @@ -230,28 +306,38 @@ export class RustRenderer extends ConvenienceRenderer { this._options.deriveDebug ? "Debug, " : "", this._options.deriveClone ? "Clone, " : "", this._options.derivePartialEq ? "PartialEq, " : "", - "Serialize, Deserialize)]" + "Serialize, Deserialize)]", ); // List the possible naming styles for every enum case const enumCasesNamingStyles: { [key: string]: string[] } = {}; this.forEachEnumCase(e, "none", (_name, jsonName) => { - enumCasesNamingStyles[jsonName] = listMatchingNamingStyles(jsonName); + enumCasesNamingStyles[jsonName] = + listMatchingNamingStyles(jsonName); }); // Set the default naming style on the enum const defaultStyle = "PascalCase"; - const preferedNamingStyle = getPreferredNamingStyle(Object.values(enumCasesNamingStyles).flat(), defaultStyle); + const preferedNamingStyle = getPreferredNamingStyle( + Object.values(enumCasesNamingStyles).flat(), + defaultStyle, + ); if (preferedNamingStyle !== defaultStyle) { this.emitLine(`#[serde(rename_all = "${preferedNamingStyle}")]`); } - const blankLines = this._options.density === Density.Dense ? "none" : "interposing"; + const blankLines = + this._options.density === Density.Dense ? "none" : "interposing"; this.emitBlock(["pub enum ", enumName], () => this.forEachEnumCase(e, blankLines, (name, jsonName) => { - this.emitRenameAttribute(name, jsonName, defaultStyle, preferedNamingStyle); + this.emitRenameAttribute( + name, + jsonName, + defaultStyle, + preferedNamingStyle, + ); this.emitLine([name, ","]); - }) + }), ); } @@ -265,7 +351,9 @@ export class RustRenderer extends ConvenienceRenderer { return; } - const topLevelName = defined(mapFirst(this.topLevels)).getCombinedName(); + const topLevelName = defined( + mapFirst(this.topLevels), + ).getCombinedName(); this.emitMultiline( `// Example code that deserializes and serializes the model. // extern crate serde; @@ -278,7 +366,7 @@ export class RustRenderer extends ConvenienceRenderer { // fn main() { // let json = r#"{"answer": 42}"#; // let model: ${topLevelName} = serde_json::from_str(&json).unwrap(); -// }` +// }`, ); } @@ -301,14 +389,14 @@ export class RustRenderer extends ConvenienceRenderer { this.forEachTopLevel( "leading", (t, name) => this.emitTopLevelAlias(t, name), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachNamedType( "leading-and-interposing", (c: ClassType, name: Name) => this.emitStructDefinition(c, name), (e, name) => this.emitEnumDefinition(e, name), - (u, name) => this.emitUnion(u, name) + (u, name) => this.emitUnion(u, name), ); } } diff --git a/packages/quicktype-core/src/language/Rust/constants.ts b/packages/quicktype-core/src/language/Rust/constants.ts index 8ba3d3eb8..7b56747ff 100644 --- a/packages/quicktype-core/src/language/Rust/constants.ts +++ b/packages/quicktype-core/src/language/Rust/constants.ts @@ -72,5 +72,5 @@ export const keywords = [ "union", // Conflict between `std::Option` and potentially generated Option - "option" + "option", ] as const; diff --git a/packages/quicktype-core/src/language/Rust/language.ts b/packages/quicktype-core/src/language/Rust/language.ts index ac61b6fca..4981d6a6f 100644 --- a/packages/quicktype-core/src/language/Rust/language.ts +++ b/packages/quicktype-core/src/language/Rust/language.ts @@ -1,7 +1,11 @@ -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, getOptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + getOptionValues, +} from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { RustRenderer } from "./RustRenderer"; import { Density, Visibility } from "./utils"; @@ -12,9 +16,9 @@ export const rustOptions = { "Density", { normal: Density.Normal, - dense: Density.Dense + dense: Density.Dense, } as const, - "normal" + "normal", ), visibility: new EnumOption( "visibility", @@ -22,25 +26,39 @@ export const rustOptions = { { private: Visibility.Private, crate: Visibility.Crate, - public: Visibility.Public + public: Visibility.Public, } as const, - "private" + "private", ), deriveDebug: new BooleanOption("derive-debug", "Derive Debug impl", false), deriveClone: new BooleanOption("derive-clone", "Derive Clone impl", false), - derivePartialEq: new BooleanOption("derive-partial-eq", "Derive PartialEq impl", false), - skipSerializingNone: new BooleanOption("skip-serializing-none", "Skip serializing empty Option fields", false), + derivePartialEq: new BooleanOption( + "derive-partial-eq", + "Derive PartialEq impl", + false, + ), + skipSerializingNone: new BooleanOption( + "skip-serializing-none", + "Skip serializing empty Option fields", + false, + ), edition2018: new BooleanOption("edition-2018", "Edition 2018", true), - leadingComments: new BooleanOption("leading-comments", "Leading Comments", true) + leadingComments: new BooleanOption( + "leading-comments", + "Leading Comments", + true, + ), } as const; export const rustLanguageConfig = { displayName: "Rust", names: ["rust", "rs", "rustlang"], - extension: "rs" + extension: "rs", } as const; -export class RustTargetLanguage extends TargetLanguage { +export class RustTargetLanguage extends TargetLanguage< + typeof rustLanguageConfig +> { public constructor() { super(rustLanguageConfig); } @@ -49,7 +67,14 @@ export class RustTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): RustRenderer { + return new RustRenderer( + this, + renderContext, + getOptionValues(rustOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/Rust/utils.ts b/packages/quicktype-core/src/language/Rust/utils.ts index 56e22af29..52e8b509a 100644 --- a/packages/quicktype-core/src/language/Rust/utils.ts +++ b/packages/quicktype-core/src/language/Rust/utils.ts @@ -11,18 +11,18 @@ import { isPrintable, legalizeCharacters, splitIntoWords, - utf32ConcatMap + utf32ConcatMap, } from "../../support/Strings"; export enum Density { Normal = "Normal", - Dense = "Dense" + Dense = "Dense", } export enum Visibility { Private = "Private", Crate = "Crate", - Public = "Public" + Public = "Public", } type NameToParts = (name: string) => string[]; @@ -37,49 +37,70 @@ export const namingStyles = { snake_case: { regex: /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/, toParts: (name: string): string[] => name.split("_"), - fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("_") + fromParts: (parts: string[]): string => + parts.map((p) => p.toLowerCase()).join("_"), }, SCREAMING_SNAKE_CASE: { regex: /^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$/, toParts: (name: string): string[] => name.split("_"), - fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("_") + fromParts: (parts: string[]): string => + parts.map((p) => p.toUpperCase()).join("_"), }, camelCase: { regex: /^[a-z]+([A-Z0-9][a-z]*)*$/, - toParts: (name: string): string[] => namingStyles.snake_case.toParts(name.replace(/(.)([A-Z])/g, "$1_$2")), + toParts: (name: string): string[] => + namingStyles.snake_case.toParts( + name.replace(/(.)([A-Z])/g, "$1_$2"), + ), fromParts: (parts: string[]): string => parts .map((p, i) => - i === 0 ? p.toLowerCase() : p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase() + i === 0 + ? p.toLowerCase() + : p.substring(0, 1).toUpperCase() + + p.substring(1).toLowerCase(), ) - .join("") + .join(""), }, PascalCase: { regex: /^[A-Z][a-z]*([A-Z0-9][a-z]*)*$/, - toParts: (name: string): string[] => namingStyles.snake_case.toParts(name.replace(/(.)([A-Z])/g, "$1_$2")), + toParts: (name: string): string[] => + namingStyles.snake_case.toParts( + name.replace(/(.)([A-Z])/g, "$1_$2"), + ), fromParts: (parts: string[]): string => - parts.map(p => p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase()).join("") + parts + .map( + (p) => + p.substring(0, 1).toUpperCase() + + p.substring(1).toLowerCase(), + ) + .join(""), }, "kebab-case": { regex: /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, toParts: (name: string): string[] => name.split("-"), - fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("-") + fromParts: (parts: string[]): string => + parts.map((p) => p.toLowerCase()).join("-"), }, "SCREAMING-KEBAB-CASE": { regex: /^[A-Z][A-Z0-9]*(-[A-Z0-9]+)*$/, toParts: (name: string): string[] => name.split("-"), - fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("-") + fromParts: (parts: string[]): string => + parts.map((p) => p.toUpperCase()).join("-"), }, lowercase: { regex: /^[a-z][a-z0-9]*$/, toParts: (name: string): string[] => [name], - fromParts: (parts: string[]): string => parts.map(p => p.toLowerCase()).join("") + fromParts: (parts: string[]): string => + parts.map((p) => p.toLowerCase()).join(""), }, UPPERCASE: { regex: /^[A-Z][A-Z0-9]*$/, toParts: (name: string): string[] => [name], - fromParts: (parts: string[]): string => parts.map(p => p.toUpperCase()).join("") - } + fromParts: (parts: string[]): string => + parts.map((p) => p.toUpperCase()).join(""), + }, } as const; namingStyles satisfies Record; @@ -117,14 +138,19 @@ function rustStyle(original: string, isSnakeCase: boolean): string { wordStyle, wordStyle, isSnakeCase ? "_" : "", - isAsciiLetterOrUnderscore + isAsciiLetterOrUnderscore, ); return combined === "_" ? "_underscore" : combined; } -export const snakeNamingFunction = funPrefixNamer("default", (original: string) => rustStyle(original, true)); -export const camelNamingFunction = funPrefixNamer("camel", (original: string) => rustStyle(original, false)); +export const snakeNamingFunction = funPrefixNamer( + "default", + (original: string) => rustStyle(original, true), +); +export const camelNamingFunction = funPrefixNamer("camel", (original: string) => + rustStyle(original, false), +); const standardUnicodeRustEscape = (codePoint: number): string => { if (codePoint <= 0xffff) { @@ -134,14 +160,21 @@ const standardUnicodeRustEscape = (codePoint: number): string => { } }; -export const rustStringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeRustEscape)); +export const rustStringEscape = utf32ConcatMap( + escapeNonPrintableMapper(isPrintable, standardUnicodeRustEscape), +); -export function getPreferredNamingStyle(namingStyleOccurences: string[], defaultStyle: NamingStyleKey): NamingStyleKey { - const occurrences = Object.fromEntries(Object.keys(namingStyles).map(key => [key, 0])); - namingStyleOccurences.forEach(style => ++occurrences[style]); +export function getPreferredNamingStyle( + namingStyleOccurences: string[], + defaultStyle: NamingStyleKey, +): NamingStyleKey { + const occurrences = Object.fromEntries( + Object.keys(namingStyles).map((key) => [key, 0]), + ); + namingStyleOccurences.forEach((style) => ++occurrences[style]); const max = Math.max(...Object.values(occurrences)); - const preferedStyles = Object.entries(occurrences).flatMap(([style, num]) => - num === max ? [style] : [] + const preferedStyles = Object.entries(occurrences).flatMap( + ([style, num]) => (num === max ? [style] : []), ) as NamingStyleKey[]; if (preferedStyles.includes(defaultStyle)) { return defaultStyle; @@ -151,12 +184,16 @@ export function getPreferredNamingStyle(namingStyleOccurences: string[], default } export function listMatchingNamingStyles(name: string): NamingStyleKey[] { - return Object.entries(namingStyles).flatMap(([namingStyleKey, { regex }]) => - regex.test(name) ? [namingStyleKey] : [] + return Object.entries(namingStyles).flatMap( + ([namingStyleKey, { regex }]) => + regex.test(name) ? [namingStyleKey] : [], ) as NamingStyleKey[]; } -export function nameWithNamingStyle(name: string, style: NamingStyleKey): string { +export function nameWithNamingStyle( + name: string, + style: NamingStyleKey, +): string { if (namingStyles[style].regex.test(name)) { return name; } diff --git a/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts b/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts index 36ee0cd6e..348b585ad 100644 --- a/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts +++ b/packages/quicktype-core/src/language/Scala3/CirceRenderer.ts @@ -1,7 +1,18 @@ -import { type Name } from "../../Naming"; -import { type Sourcelike } from "../../Source"; -import { type ArrayType, type ClassType, type EnumType, type MapType, type Type, type UnionType } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import type { Name } from "../../Naming"; +import type { Sourcelike } from "../../Source"; +import type { + ArrayType, + ClassType, + EnumType, + MapType, + Type, + UnionType, +} from "../../Type"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { Scala3Renderer } from "./Scala3Renderer"; import { wrapOption } from "./utils"; @@ -9,38 +20,77 @@ import { wrapOption } from "./utils"; export class CirceRenderer extends Scala3Renderer { private seenUnionTypes: string[] = []; - protected circeEncoderForType(t: Type, __ = false, noOptional = false, paramName: string = ""): Sourcelike { + protected circeEncoderForType( + t: Type, + __ = false, + noOptional = false, + paramName = "", + ): Sourcelike { return matchType( t, - _anyType => ["Encoder.encodeJson(", paramName, ")"], - _nullType => ["Encoder.encodeNone(", paramName, ")"], - _boolType => ["Encoder.encodeBoolean(", paramName, ")"], - _integerType => ["Encoder.encodeLong(", paramName, ")"], - _doubleType => ["Encoder.encodeDouble(", paramName, ")"], - _stringType => ["Encoder.encodeString(", paramName, ")"], - arrayType => ["Encoder.encodeSeq[", this.scalaType(arrayType.items), "].apply(", paramName, ")"], - classType => ["Encoder.AsObject[", this.scalaType(classType), "].apply(", paramName, ")"], - mapType => ["Encoder.encodeMap[String,", this.scalaType(mapType.values), "].apply(", paramName, ")"], - _ => ["Encoder.encodeString(", paramName, ")"], - unionType => { + (_anyType) => ["Encoder.encodeJson(", paramName, ")"], + (_nullType) => ["Encoder.encodeNone(", paramName, ")"], + (_boolType) => ["Encoder.encodeBoolean(", paramName, ")"], + (_integerType) => ["Encoder.encodeLong(", paramName, ")"], + (_doubleType) => ["Encoder.encodeDouble(", paramName, ")"], + (_stringType) => ["Encoder.encodeString(", paramName, ")"], + (arrayType) => [ + "Encoder.encodeSeq[", + this.scalaType(arrayType.items), + "].apply(", + paramName, + ")", + ], + (classType) => [ + "Encoder.AsObject[", + this.scalaType(classType), + "].apply(", + paramName, + ")", + ], + (mapType) => [ + "Encoder.encodeMap[String,", + this.scalaType(mapType.values), + "].apply(", + paramName, + ")", + ], + (_) => ["Encoder.encodeString(", paramName, ")"], + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (noOptional) { - return ["Encoder.AsObject[", this.nameForNamedType(nullable), "]"]; - } else { - return ["Encoder.AsObject[Option[", this.nameForNamedType(nullable), "]]"]; + return [ + "Encoder.AsObject[", + this.nameForNamedType(nullable), + "]", + ]; } + + return [ + "Encoder.AsObject[Option[", + this.nameForNamedType(nullable), + "]]", + ]; } - return ["Encoder.AsObject[", this.nameForNamedType(unionType), "]"]; - } + return [ + "Encoder.AsObject[", + this.nameForNamedType(unionType), + "]", + ]; + }, ); } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.ensureBlankLine(); - this.emitLine("case class ", className, "() derives Encoder.AsObject, Decoder"); + this.emitLine( + "case class ", + className, + "() derives Encoder.AsObject, Decoder", + ); } protected anySourceType(optional: boolean): Sourcelike { @@ -85,13 +135,15 @@ export class CirceRenderer extends Scala3Renderer { this.emitLine("// For serialising string unions"); this.emitLine( - "given [A <: Singleton](using A <:< String): Decoder[A] = Decoder.decodeString.emapTry(x => Try(x.asInstanceOf[A])) " + "given [A <: Singleton](using A <:< String): Decoder[A] = Decoder.decodeString.emapTry(x => Try(x.asInstanceOf[A])) ", ); this.emitLine( - "given [A <: Singleton](using ev: A <:< String): Encoder[A] = Encoder.encodeString.contramap(ev) " + "given [A <: Singleton](using ev: A <:< String): Encoder[A] = Encoder.encodeString.contramap(ev) ", ); this.ensureBlankLine(); - this.emitLine("// If a union has a null in, then we'll need this too... "); + this.emitLine( + "// If a union has a null in, then we'll need this too... ", + ); this.emitLine("type NullValue = None.type"); } @@ -105,7 +157,7 @@ export class CirceRenderer extends Scala3Renderer { elementType, "]] = Encoder.encodeMap[String, ", elementType, - "]" + "]", ]); } @@ -120,7 +172,7 @@ export class CirceRenderer extends Scala3Renderer { elementType, "]] = Encoder.encodeMap[String, ", elementType, - "]" + "]", ]); } @@ -146,24 +198,29 @@ export class CirceRenderer extends Scala3Renderer { theTypes.forEach((t, i) => { this.emitItem(i === 0 ? t : [" | ", t]); }); - const thisUnionType = theTypes.map(x => this.sourcelikeToString(x)).join(" | "); + const thisUnionType = theTypes + .map((x) => this.sourcelikeToString(x)) + .join(" | "); this.ensureBlankLine(); - if (!this.seenUnionTypes.some(y => y === thisUnionType)) { + if (!this.seenUnionTypes.some((y) => y === thisUnionType)) { this.seenUnionTypes.push(thisUnionType); const sourceLikeTypes: Array<[Sourcelike, Type]> = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { sourceLikeTypes.push([this.scalaType(t), t]); }); if (maybeNull !== null) { - sourceLikeTypes.push([this.nameForUnionMember(u, maybeNull), maybeNull]); + sourceLikeTypes.push([ + this.nameForUnionMember(u, maybeNull), + maybeNull, + ]); } this.emitLine(["given Decoder[", unionName, "] = {"]); this.indent(() => { this.emitLine(["List[Decoder[", unionName, "]]("]); this.indent(() => { - sourceLikeTypes.forEach(t => { + sourceLikeTypes.forEach((t) => { this.emitLine(["Decoder[", t[0], "].widen,"]); }); }); @@ -173,7 +230,11 @@ export class CirceRenderer extends Scala3Renderer { this.ensureBlankLine(); - this.emitLine(["given Encoder[", unionName, "] = Encoder.instance {"]); + this.emitLine([ + "given Encoder[", + unionName, + "] = Encoder.instance {", + ]); this.indent(() => { sourceLikeTypes.forEach((t, i) => { const paramTemp = `enc${i.toString()}`; @@ -183,7 +244,7 @@ export class CirceRenderer extends Scala3Renderer { " : ", t[0], " => ", - this.circeEncoderForType(t[1], false, false, paramTemp) + this.circeEncoderForType(t[1], false, false, paramTemp), ]); }); }); diff --git a/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts b/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts index 1d5bdec76..913fd6149 100644 --- a/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts +++ b/packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts @@ -1,10 +1,16 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -13,19 +19,29 @@ import { MapType, type ObjectType, type Type, - type UnionType + type UnionType, } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type scala3Options } from "./language"; -import { lowerNamingFunction, scalaNameStyle, shouldAddBacktick, upperNamingFunction, wrapOption } from "./utils"; +import type { scala3Options } from "./language"; +import { + lowerNamingFunction, + scalaNameStyle, + shouldAddBacktick, + upperNamingFunction, + wrapOption, +} from "./utils"; export class Scala3Renderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _scalaOptions: OptionValues + protected readonly _scalaOptions: OptionValues, ) { super(targetLanguage, renderContext); } @@ -34,15 +50,24 @@ export class Scala3Renderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_: ObjectType, _classNamed: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _: ObjectType, + _classNamed: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } @@ -59,21 +84,28 @@ export class Scala3Renderer extends ConvenienceRenderer { } protected makeUnionMemberNamer(): Namer { - return funPrefixNamer("upper", s => scalaNameStyle(true, s) + "Value"); + return funPrefixNamer( + "upper", + (s) => `${scalaNameStyle(true, s)}Value`, + ); } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("upper", s => s.replace(" ", "")); // TODO - add backticks where appropriate + return funPrefixNamer("upper", (s) => s.replace(" ", "")); // TODO - add backticks where appropriate } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } protected emitBlock( line: Sourcelike, f: () => void, - delimiter: "curly" | "paren" | "lambda" | "none" = "curly" + delimiter: "curly" | "paren" | "lambda" | "none" = "curly", ): void { const [open, close] = delimiter === "curly" @@ -99,39 +131,59 @@ export class Scala3Renderer extends ConvenienceRenderer { } protected mapType(mapType: MapType, withIssues = false): Sourcelike { - return ["Map[String, ", this.scalaType(mapType.values, withIssues), "]"]; + return [ + "Map[String, ", + this.scalaType(mapType.values, withIssues), + "]", + ]; } - protected scalaType(t: Type, withIssues = false, noOptional = false): Sourcelike { + protected scalaType( + t: Type, + withIssues = false, + noOptional = false, + ): Sourcelike { return matchType( t, - _anyType => { - return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional)); + (_anyType) => { + return maybeAnnotated( + withIssues, + anyTypeIssueAnnotation, + this.anySourceType(!noOptional), + ); }, - _nullType => { + (_nullType) => { // return "None.type" - return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional)); + return maybeAnnotated( + withIssues, + nullTypeIssueAnnotation, + this.anySourceType(!noOptional), + ); }, - _boolType => "Boolean", - _integerType => "Long", - _doubleType => "Double", - _stringType => "String", - arrayType => this.arrayType(arrayType, withIssues), - classType => this.nameForNamedType(classType), - mapType => this.mapType(mapType, withIssues), - enumType => this.nameForNamedType(enumType), - unionType => { + (_boolType) => "Boolean", + (_integerType) => "Long", + (_doubleType) => "Double", + (_stringType) => "String", + (arrayType) => this.arrayType(arrayType, withIssues), + (classType) => this.nameForNamedType(classType), + (mapType) => this.mapType(mapType, withIssues), + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (noOptional) { return [this.scalaType(nullable, withIssues)]; - } else { - return ["Option[", this.scalaType(nullable, withIssues), "]"]; } + + return [ + "Option[", + this.scalaType(nullable, withIssues), + "]", + ]; } return this.nameForNamedType(unionType); - } + }, ); } @@ -175,9 +227,9 @@ export class Scala3Renderer extends ConvenienceRenderer { const scalaType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return ["Option[", this.scalaType(p.type, true, true), "]"]; - } else { - return this.scalaType(p.type, true); } + + return this.scalaType(p.type, true); }; this.emitDescription(this.descriptionForType(c)); @@ -186,12 +238,18 @@ export class Scala3Renderer extends ConvenienceRenderer { let count = c.getProperties().size; let first = true; this.forEachClassProperty(c, "none", (_, jsonName, p) => { - const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; - const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; + const nullable = + p.type.kind === "union" && + nullableFromUnion(p.type as UnionType) !== null; + const nullableOrOptional = + p.isOptional || p.type.kind === "null" || nullable; const last = --count === 0; const meta: Array<() => void> = []; - const description = this.descriptionForClassProperty(c, jsonName); + const description = this.descriptionForClassProperty( + c, + jsonName, + ); if (description !== undefined) { meta.push(() => this.emitDescription(description)); } @@ -204,15 +262,22 @@ export class Scala3Renderer extends ConvenienceRenderer { emit(); } - const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); - const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; + const nameNeedsBackticks = + jsonName.endsWith("_") || shouldAddBacktick(jsonName); + const nameWithBackticks = nameNeedsBackticks + ? "`" + jsonName + "`" + : jsonName; this.emitLine( "val ", nameWithBackticks, " : ", scalaType(p), - p.isOptional ? " = None" : nullableOrOptional ? " = None" : "", - last ? "" : "," + p.isOptional + ? " = None" + : nullableOrOptional + ? " = None" + : "", + last ? "" : ",", ); if (meta.length > 0 && !last) { @@ -242,11 +307,11 @@ export class Scala3Renderer extends ConvenienceRenderer { } this.forEachEnumCase(e, "none", (name, jsonName) => { - if (!(jsonName == "")) { + if (!(jsonName === "")) { const backticks = shouldAddBacktick(jsonName) || jsonName.includes(" ") || - !isNaN(parseInt(jsonName.charAt(0))); + !Number.isNaN(Number.parseInt(jsonName.charAt(0))); if (backticks) { this.emitItem("`"); } @@ -262,7 +327,7 @@ export class Scala3Renderer extends ConvenienceRenderer { } }); }, - "none" + "none", ); } @@ -270,7 +335,7 @@ export class Scala3Renderer extends ConvenienceRenderer { function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; - return "_" + kind; + return `_${kind}`; } this.emitDescription(this.descriptionForType(u)); @@ -307,7 +372,7 @@ export class Scala3Renderer extends ConvenienceRenderer { "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) + (u, n) => this.emitUnionDefinition(u, n), ); } } diff --git a/packages/quicktype-core/src/language/Scala3/constants.ts b/packages/quicktype-core/src/language/Scala3/constants.ts index b41844e78..918172d7f 100644 --- a/packages/quicktype-core/src/language/Scala3/constants.ts +++ b/packages/quicktype-core/src/language/Scala3/constants.ts @@ -24,7 +24,7 @@ export const invalidSymbols = [ ":", "~", "`", - "." + ".", ] as const; export const keywords = [ @@ -83,5 +83,5 @@ export const keywords = [ "Array", "List", "Map", - "Enum" + "Enum", ] as const; diff --git a/packages/quicktype-core/src/language/Scala3/language.ts b/packages/quicktype-core/src/language/Scala3/language.ts index 519034caf..235a202a2 100644 --- a/packages/quicktype-core/src/language/Scala3/language.ts +++ b/packages/quicktype-core/src/language/Scala3/language.ts @@ -1,9 +1,13 @@ -import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; -import { type RenderContext } from "../../Renderer"; -import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import type { RenderContext } from "../../Renderer"; +import { + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { CirceRenderer } from "./CirceRenderer"; import { Scala3Renderer } from "./Scala3Renderer"; @@ -15,21 +19,23 @@ export const scala3Options = { "Serialization framework", { "just-types": "None", - "circe": "Circe", - "upickle": "Upickle" + circe: "Circe", + upickle: "Upickle", } as const, - "just-types" + "just-types", ), - packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") + packageName: new StringOption("package", "Package", "PACKAGE", "quicktype"), }; export const scala3LanguageConfig = { displayName: "Scala3", names: ["scala3"], - extension: "scala" + extension: "scala", } as const; -export class Scala3TargetLanguage extends TargetLanguage { +export class Scala3TargetLanguage extends TargetLanguage< + typeof scala3LanguageConfig +> { public constructor() { super(scala3LanguageConfig); } @@ -46,7 +52,10 @@ export class Scala3TargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): ConvenienceRenderer { const options = getOptionValues(scala3Options, untypedOptionValues); switch (options.framework) { diff --git a/packages/quicktype-core/src/language/Scala3/utils.ts b/packages/quicktype-core/src/language/Scala3/utils.ts index 1de23bcb8..54b9ed008 100644 --- a/packages/quicktype-core/src/language/Scala3/utils.ts +++ b/packages/quicktype-core/src/language/Scala3/utils.ts @@ -8,7 +8,7 @@ import { isLetterOrUnderscore, isNumeric, legalizeCharacters, - splitIntoWords + splitIntoWords, } from "../../support/Strings"; import { invalidSymbols, keywords } from "./constants"; @@ -19,10 +19,10 @@ import { invalidSymbols, keywords } from "./constants"; */ export const shouldAddBacktick = (paramName: string): boolean => { return ( - keywords.some(s => paramName === s) || - invalidSymbols.some(s => paramName.includes(s)) || - !isNaN(+parseFloat(paramName)) || - !isNaN(parseInt(paramName.charAt(0))) + keywords.some((s) => paramName === s) || + invalidSymbols.some((s) => paramName.includes(s)) || + !isNaN(+Number.parseFloat(paramName)) || + !isNaN(Number.parseInt(paramName.charAt(0))) ); }; @@ -54,7 +54,7 @@ export function scalaNameStyle(isUpper: boolean, original: string): string { isUpper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", - isStartCharacter + isStartCharacter, ); } @@ -69,5 +69,9 @@ export function scalaNameStyle(isUpper: boolean, original: string): string { return _stringEscape(s).replace(/\$/g, "\\$"); } */ -export const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s)); -export const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); +export const upperNamingFunction = funPrefixNamer("upper", (s) => + scalaNameStyle(true, s), +); +export const lowerNamingFunction = funPrefixNamer("lower", (s) => + scalaNameStyle(false, s), +); diff --git a/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts b/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts index c7e293a7b..da4141aa1 100644 --- a/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts +++ b/packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts @@ -1,10 +1,16 @@ -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -13,19 +19,29 @@ import { MapType, type ObjectType, type Type, - type UnionType + type UnionType, } from "../../Type"; -import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + matchCompoundType, + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type smithyOptions } from "./language"; -import { lowerNamingFunction, scalaNameStyle, shouldAddBacktick, upperNamingFunction } from "./utils"; +import type { smithyOptions } from "./language"; +import { + lowerNamingFunction, + scalaNameStyle, + shouldAddBacktick, + upperNamingFunction, +} from "./utils"; export class Smithy4sRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _scalaOptions: OptionValues + protected readonly _scalaOptions: OptionValues, ) { super(targetLanguage, renderContext); } @@ -34,15 +50,24 @@ export class Smithy4sRenderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_: ObjectType, _classNamed: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _: ObjectType, + _classNamed: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } @@ -59,21 +84,28 @@ export class Smithy4sRenderer extends ConvenienceRenderer { } protected makeUnionMemberNamer(): Namer { - return funPrefixNamer("upper", s => scalaNameStyle(true, s) + "Value"); + return funPrefixNamer( + "upper", + (s) => `${scalaNameStyle(true, s)}Value`, + ); } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("upper", s => s.replace(" ", "")); // TODO - add backticks where appropriate + return funPrefixNamer("upper", (s) => s.replace(" ", "")); // TODO - add backticks where appropriate } protected emitDescriptionBlock(lines: Sourcelike[]): void { - this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */" }); + this.emitCommentLines(lines, { + lineStart: " * ", + beforeComment: "/**", + afterComment: " */", + }); } protected emitBlock( line: Sourcelike, f: () => void, - delimiter: "curly" | "paren" | "lambda" | "none" = "curly" + delimiter: "curly" | "paren" | "lambda" | "none" = "curly", ): void { const [open, close] = delimiter === "curly" @@ -108,32 +140,44 @@ export class Smithy4sRenderer extends ConvenienceRenderer { // return [this.scalaType(mapType.values, withIssues), "Map"]; } - protected scalaType(t: Type, withIssues = false, noOptional = false): Sourcelike { + protected scalaType( + t: Type, + withIssues = false, + noOptional = false, + ): Sourcelike { return matchType( t, - _anyType => { - return maybeAnnotated(withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional)); + (_anyType) => { + return maybeAnnotated( + withIssues, + anyTypeIssueAnnotation, + this.anySourceType(!noOptional), + ); }, - _nullType => { + (_nullType) => { // return "None.type" - return maybeAnnotated(withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional)); + return maybeAnnotated( + withIssues, + nullTypeIssueAnnotation, + this.anySourceType(!noOptional), + ); }, - _boolType => "Boolean", - _integerType => "Long", - _doubleType => "Double", - _stringType => "String", - arrayType => this.arrayType(arrayType, withIssues), - classType => this.nameForNamedType(classType), - mapType => this.mapType(mapType, withIssues), - enumType => this.nameForNamedType(enumType), - unionType => { + (_boolType) => "Boolean", + (_integerType) => "Long", + (_doubleType) => "Double", + (_stringType) => "String", + (arrayType) => this.arrayType(arrayType, withIssues), + (classType) => this.nameForNamedType(classType), + (mapType) => this.mapType(mapType, withIssues), + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return [this.scalaType(nullable, withIssues)]; } return this.nameForNamedType(unionType); - } + }, ); } @@ -164,7 +208,13 @@ export class Smithy4sRenderer extends ConvenienceRenderer { protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.scalaType(t.values); - this.emitLine(["map ", name, " { map[ key : String , value : ", elementType, "}"]); + this.emitLine([ + "map ", + name, + " { map[ key : String , value : ", + elementType, + "}", + ]); } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { @@ -181,9 +231,9 @@ export class Smithy4sRenderer extends ConvenienceRenderer { const scalaType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return [this.scalaType(p.type, true, true)]; - } else { - return [this.scalaType(p.type, true)]; } + + return [this.scalaType(p.type, true)]; }; const emitLater: ClassProperty[] = []; @@ -195,17 +245,24 @@ export class Smithy4sRenderer extends ConvenienceRenderer { let first = true; this.forEachClassProperty(c, "none", (_, jsonName, p) => { - const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; - const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; + const nullable = + p.type.kind === "union" && + nullableFromUnion(p.type as UnionType) !== null; + const nullableOrOptional = + p.isOptional || p.type.kind === "null" || nullable; const last = --count === 0; const meta: Array<() => void> = []; - const laterType = p.type.kind === "array" || p.type.kind === "map"; + const laterType = + p.type.kind === "array" || p.type.kind === "map"; if (laterType) { emitLater.push(p); } - const description = this.descriptionForClassProperty(c, jsonName); + const description = this.descriptionForClassProperty( + c, + jsonName, + ); if (description !== undefined) { meta.push(() => this.emitDescription(description)); } @@ -218,15 +275,18 @@ export class Smithy4sRenderer extends ConvenienceRenderer { emit(); } - const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); - const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; + const nameNeedsBackticks = + jsonName.endsWith("_") || shouldAddBacktick(jsonName); + const nameWithBackticks = nameNeedsBackticks + ? "`" + jsonName + "`" + : jsonName; this.emitLine( p.isOptional ? "" : nullableOrOptional ? "" : "@required ", nameWithBackticks, " : ", scalaType(p), - last ? "" : "," + last ? "" : ",", ); if (meta.length > 0 && !last) { @@ -241,34 +301,34 @@ export class Smithy4sRenderer extends ConvenienceRenderer { protected emitClassDefinitionMethods(arrayTypes: ClassProperty[]): void { this.emitLine("}"); - arrayTypes.forEach(p => { + arrayTypes.forEach((p) => { function ignore(_: T): void { return; } matchCompoundType( p.type, - at => { + (at) => { this.emitLine([ "list ", this.scalaType(at, true), "{ member: ", this.scalaType(at.items, true), - "}" + "}", ]); }, ignore, - mt => { + (mt) => { this.emitLine([ "map ", this.scalaType(mt, true), "{ key: String , value: ", this.scalaType(mt.values, true), - "}" + "}", ]); }, ignore, - ignore + ignore, ); }); } @@ -306,7 +366,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; - return "_" + kind; + return `_${kind}`; } const emitLater: Type[] = []; @@ -336,34 +396,34 @@ export class Smithy4sRenderer extends ConvenienceRenderer { this.emitLine("}"); this.ensureBlankLine(); - emitLater.forEach(p => { + emitLater.forEach((p) => { function ignore(_: T): void { return; } matchCompoundType( p, - at => { + (at) => { this.emitLine([ "list ", this.scalaType(at, true), "{ member: ", this.scalaType(at.items, true), - "}" + "}", ]); }, ignore, - mt => { + (mt) => { this.emitLine([ "map ", this.scalaType(mt, true), "{ key: String , value: ", this.scalaType(mt.values, true), - "}" + "}", ]); }, ignore, - ignore + ignore, ); }); } @@ -384,7 +444,7 @@ export class Smithy4sRenderer extends ConvenienceRenderer { "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), - (u, n) => this.emitUnionDefinition(u, n) + (u, n) => this.emitUnionDefinition(u, n), ); } } diff --git a/packages/quicktype-core/src/language/Smithy4s/constants.ts b/packages/quicktype-core/src/language/Smithy4s/constants.ts index e015b6ea8..66660e7b6 100644 --- a/packages/quicktype-core/src/language/Smithy4s/constants.ts +++ b/packages/quicktype-core/src/language/Smithy4s/constants.ts @@ -23,7 +23,7 @@ export const invalidSymbols = [ ":", "~", "`", - "." + ".", ] as const; export const keywords = [ @@ -73,5 +73,5 @@ export const keywords = [ "Array", "List", "Map", - "Enum" + "Enum", ] as const; diff --git a/packages/quicktype-core/src/language/Smithy4s/language.ts b/packages/quicktype-core/src/language/Smithy4s/language.ts index 25b0b1c09..38186c8b2 100644 --- a/packages/quicktype-core/src/language/Smithy4s/language.ts +++ b/packages/quicktype-core/src/language/Smithy4s/language.ts @@ -1,14 +1,18 @@ -import { type ConvenienceRenderer } from "../../ConvenienceRenderer"; -import { type RenderContext } from "../../Renderer"; -import { EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; +import type { RenderContext } from "../../Renderer"; +import { + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { Smithy4sRenderer } from "./Smithy4sRenderer"; export enum Framework { - None = "None" + None = "None", } export const smithyOptions = { @@ -17,18 +21,20 @@ export const smithyOptions = { "framework", "Serialization framework", { "just-types": Framework.None } as const, - "just-types" + "just-types", ), - packageName: new StringOption("package", "Package", "PACKAGE", "quicktype") + packageName: new StringOption("package", "Package", "PACKAGE", "quicktype"), }; export const smithyLanguageConfig = { displayName: "Smithy", names: ["smithy4a"], - extension: "smithy" + extension: "smithy", } as const; -export class SmithyTargetLanguage extends TargetLanguage { +export class SmithyTargetLanguage extends TargetLanguage< + typeof smithyLanguageConfig +> { public constructor() { super(smithyLanguageConfig); } @@ -45,7 +51,10 @@ export class SmithyTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): ConvenienceRenderer { const options = getOptionValues(smithyOptions, untypedOptionValues); switch (options.framework) { diff --git a/packages/quicktype-core/src/language/Smithy4s/utils.ts b/packages/quicktype-core/src/language/Smithy4s/utils.ts index 7075f6627..a3d44bb4c 100644 --- a/packages/quicktype-core/src/language/Smithy4s/utils.ts +++ b/packages/quicktype-core/src/language/Smithy4s/utils.ts @@ -9,7 +9,7 @@ import { isLetterOrUnderscore, isNumeric, legalizeCharacters, - splitIntoWords + splitIntoWords, } from "../../support/Strings"; import { invalidSymbols, keywords } from "./constants"; @@ -20,10 +20,10 @@ import { invalidSymbols, keywords } from "./constants"; */ export const shouldAddBacktick = (paramName: string): boolean => { return ( - keywords.some(s => paramName === s) || - invalidSymbols.some(s => paramName.includes(s)) || - !isNaN(parseFloat(paramName)) || - !isNaN(parseInt(paramName.charAt(0))) + keywords.some((s) => paramName === s) || + invalidSymbols.some((s) => paramName.includes(s)) || + !isNaN(Number.parseFloat(paramName)) || + !isNaN(Number.parseInt(paramName.charAt(0))) ); }; @@ -47,9 +47,13 @@ export function scalaNameStyle(isUpper: boolean, original: string): string { isUpper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", - isStartCharacter + isStartCharacter, ); } -export const upperNamingFunction = funPrefixNamer("upper", s => scalaNameStyle(true, s)); -export const lowerNamingFunction = funPrefixNamer("lower", s => scalaNameStyle(false, s)); +export const upperNamingFunction = funPrefixNamer("upper", (s) => + scalaNameStyle(true, s), +); +export const lowerNamingFunction = funPrefixNamer("lower", (s) => + scalaNameStyle(false, s), +); diff --git a/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts b/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts index aeba703a4..638c15fca 100644 --- a/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts +++ b/packages/quicktype-core/src/language/Swift/SwiftRenderer.ts @@ -1,15 +1,21 @@ import { arrayIntercalate } from "collection-utils"; -import { anyTypeIssueAnnotation, nullTypeIssueAnnotation } from "../../Annotation"; -import { ConvenienceRenderer, type ForbiddenWordsInfo } from "../../ConvenienceRenderer"; +import { + anyTypeIssueAnnotation, + nullTypeIssueAnnotation, +} from "../../Annotation"; +import { + ConvenienceRenderer, + type ForbiddenWordsInfo, +} from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { camelCase } from "../../support/Strings"; import { assert, defined, panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -18,13 +24,22 @@ import { MapType, type Type, type TypeKind, - type UnionType + type UnionType, } from "../../Type"; -import { matchType, nullableFromUnion, removeNullFromUnion } from "../../Type/TypeUtils"; +import { + matchType, + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils"; import { keywords } from "./constants"; -import { type swiftOptions } from "./language"; -import { MAX_SAMELINE_PROPERTIES, type SwiftProperty, stringEscape, swiftNameStyle } from "./utils"; +import type { swiftOptions } from "./language"; +import { + MAX_SAMELINE_PROPERTIES, + type SwiftProperty, + stringEscape, + swiftNameStyle, +} from "./utils"; export class SwiftRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; @@ -36,7 +51,7 @@ export class SwiftRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -49,21 +64,35 @@ export class SwiftRenderer extends ConvenienceRenderer { return keywords; } - protected forbiddenForObjectProperties(_c: ClassType, _classNamed: Name): ForbiddenWordsInfo { + protected forbiddenForObjectProperties( + _c: ClassType, + _classNamed: Name, + ): ForbiddenWordsInfo { return { names: ["fromURL", "json"], includeGlobalForbidden: true }; } - protected forbiddenForEnumCases(_e: EnumType, _enumName: Name): ForbiddenWordsInfo { + protected forbiddenForEnumCases( + _e: EnumType, + _enumName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } - protected forbiddenForUnionMembers(_u: UnionType, _unionName: Name): ForbiddenWordsInfo { + protected forbiddenForUnionMembers( + _u: UnionType, + _unionName: Name, + ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("upper", s => - swiftNameStyle(this._options.namedTypePrefix, true, s, acronymStyle(this._options.acronymStyle)) + return funPrefixNamer("upper", (s) => + swiftNameStyle( + this._options.namedTypePrefix, + true, + s, + acronymStyle(this._options.acronymStyle), + ), ); } @@ -98,67 +127,100 @@ export class SwiftRenderer extends ConvenienceRenderer { this.emitBlock([this.accessLevel, line], f); } - private justTypesCase(justTypes: Sourcelike, notJustTypes: Sourcelike): Sourcelike { - if (this._options.justTypes) return justTypes; - else return notJustTypes; + private justTypesCase( + justTypes: Sourcelike, + notJustTypes: Sourcelike, + ): Sourcelike { + if (this._options.justTypes) { + return justTypes; + } + + return notJustTypes; } private get lowerNamingFunction(): Namer { - return funPrefixNamer("lower", s => swiftNameStyle("", false, s, acronymStyle(this._options.acronymStyle))); + return funPrefixNamer("lower", (s) => + swiftNameStyle( + "", + false, + s, + acronymStyle(this._options.acronymStyle), + ), + ); } protected swiftPropertyType(p: ClassProperty): Sourcelike { - if (p.isOptional || (this._options.optionalEnums && p.type.kind === "enum")) { + if ( + p.isOptional || + (this._options.optionalEnums && p.type.kind === "enum") + ) { return [this.swiftType(p.type, true, true), "?"]; - } else { - return this.swiftType(p.type, true); } + + return this.swiftType(p.type, true); } - protected swiftType(t: Type, withIssues = false, noOptional = false): Sourcelike { + protected swiftType( + t: Type, + withIssues = false, + noOptional = false, + ): Sourcelike { const optional = noOptional ? "" : "?"; return matchType( t, - _anyType => { + (_anyType) => { this._needAny = true; return maybeAnnotated( withIssues, anyTypeIssueAnnotation, - this.justTypesCase(["Any", optional], "JSONAny") + this.justTypesCase(["Any", optional], "JSONAny"), ); }, - _nullType => { + (_nullType) => { this._needNull = true; return maybeAnnotated( withIssues, nullTypeIssueAnnotation, - this.justTypesCase("NSNull", ["JSONNull", optional]) + this.justTypesCase("NSNull", ["JSONNull", optional]), ); }, - _boolType => "Bool", - _integerType => "Int", - _doubleType => "Double", - _stringType => "String", - arrayType => ["[", this.swiftType(arrayType.items, withIssues), "]"], - classType => this.nameForNamedType(classType), - mapType => ["[String: ", this.swiftType(mapType.values, withIssues), "]"], - enumType => this.nameForNamedType(enumType), - unionType => { + (_boolType) => "Bool", + (_integerType) => "Int", + (_doubleType) => "Double", + (_stringType) => "String", + (arrayType) => [ + "[", + this.swiftType(arrayType.items, withIssues), + "]", + ], + (classType) => this.nameForNamedType(classType), + (mapType) => [ + "[String: ", + this.swiftType(mapType.values, withIssues), + "]", + ], + (enumType) => this.nameForNamedType(enumType), + (unionType) => { const nullable = nullableFromUnion(unionType); - if (nullable !== null) return [this.swiftType(nullable, withIssues), optional]; + if (nullable !== null) + return [this.swiftType(nullable, withIssues), optional]; return this.nameForNamedType(unionType); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "Date"; - } else { - return panic(`Transformed string type ${transformedStringType.kind} not supported`); } - } + + return panic( + `Transformed string type ${transformedStringType.kind} not supported`, + ); + }, ); } - protected proposedUnionMemberNameForTypeKind(kind: TypeKind): string | null { + protected proposedUnionMemberNameForTypeKind( + kind: TypeKind, + ): string | null { if (kind === "enum") { return "enumeration"; } @@ -171,17 +233,24 @@ export class SwiftRenderer extends ConvenienceRenderer { } private renderSingleFileHeaderComments(): void { - this.emitLineOnce("// This file was generated from JSON Schema using quicktype, do not modify it directly."); - this.emitLineOnce("// To parse the JSON, add this file to your project and do:"); + this.emitLineOnce( + "// This file was generated from JSON Schema using quicktype, do not modify it directly.", + ); + this.emitLineOnce( + "// To parse the JSON, add this file to your project and do:", + ); this.emitLineOnce("//"); this.forEachTopLevel("none", (t, topLevelName) => { - if (this._options.convenienceInitializers && !(t instanceof EnumType)) { + if ( + this._options.convenienceInitializers && + !(t instanceof EnumType) + ) { this.emitLineOnce( "// let ", modifySource(camelCase, topLevelName), " = try ", topLevelName, - "(json)" + "(json)", ); } else { this.emitLineOnce( @@ -190,7 +259,7 @@ export class SwiftRenderer extends ConvenienceRenderer { " = ", "try? JSONDecoder().decode(", topLevelName, - ".self, from: jsonData)" + ".self, from: jsonData)", ); } }); @@ -202,12 +271,23 @@ export class SwiftRenderer extends ConvenienceRenderer { } else if (!this._options.justTypes) { if (this._options.multiFileOutput) { this.emitLineOnce( - "// This file was generated from JSON Schema using quicktype, do not modify it directly." + "// This file was generated from JSON Schema using quicktype, do not modify it directly.", + ); + this.emitLineOnce( + "// To parse the JSON, add this file to your project and do:", ); - this.emitLineOnce("// To parse the JSON, add this file to your project and do:"); this.emitLineOnce("//"); - if (this._options.convenienceInitializers && !(type instanceof EnumType)) { - this.emitLine("// let ", modifySource(camelCase, name), " = try ", name, "(json)"); + if ( + this._options.convenienceInitializers && + !(type instanceof EnumType) + ) { + this.emitLine( + "// let ", + modifySource(camelCase, name), + " = try ", + name, + "(json)", + ); } else { this.emitLine( "// let ", @@ -215,7 +295,7 @@ export class SwiftRenderer extends ConvenienceRenderer { " = ", "try? newJSONDecoder().decode(", name, - ".self, from: jsonData)" + ".self, from: jsonData)", ); } } @@ -224,23 +304,36 @@ export class SwiftRenderer extends ConvenienceRenderer { this.emitLine("//"); this.emitLine("// To parse values from Alamofire responses:"); this.emitLine("//"); - this.emitLine("// Alamofire.request(url).response", name, " { response in"); - this.emitLine("// if let ", modifySource(camelCase, name), " = response.result.value {"); + this.emitLine( + "// Alamofire.request(url).response", + name, + " { response in", + ); + this.emitLine( + "// if let ", + modifySource(camelCase, name), + " = response.result.value {", + ); this.emitLine("// ..."); this.emitLine("// }"); this.emitLine("// }"); } - if (this._options.protocol.hashable || this._options.protocol.equatable) { + if ( + this._options.protocol.hashable || + this._options.protocol.equatable + ) { this.emitLine("//"); this.emitLine("// Hashable or Equatable:"); this.emitLine( - "// The compiler will not be able to synthesize the implementation of Hashable or Equatable" + "// The compiler will not be able to synthesize the implementation of Hashable or Equatable", + ); + this.emitLine( + "// for types that require the use of JSONAny, nor will the implementation of Hashable be", ); this.emitLine( - "// for types that require the use of JSONAny, nor will the implementation of Hashable be" + "// synthesized for types that have collections (such as arrays or dictionaries).", ); - this.emitLine("// synthesized for types that have collections (such as arrays or dictionaries)."); } } @@ -251,14 +344,22 @@ export class SwiftRenderer extends ConvenienceRenderer { } if (this._options.optionalEnums) { - this.emitLineOnce("import OptionallyDecodable // https://github.com/idrougge/OptionallyDecodable"); + this.emitLineOnce( + "import OptionallyDecodable // https://github.com/idrougge/OptionallyDecodable", + ); } this.ensureBlankLine(); } private renderTopLevelAlias(t: Type, name: Name): void { - this.emitLine(this.accessLevel, "typealias ", name, " = ", this.swiftType(t, true)); + this.emitLine( + this.accessLevel, + "typealias ", + name, + " = ", + this.swiftType(t, true), + ); } protected getProtocolsArray(kind: "struct" | "class" | "enum"): string[] { @@ -283,7 +384,11 @@ export class SwiftRenderer extends ConvenienceRenderer { protocols.push("Equatable"); } - if (this._options.sendable && (!this._options.mutableProperties || !isClass) && !this._options.objcSupport) { + if ( + this._options.sendable && + (!this._options.mutableProperties || !isClass) && + !this._options.objcSupport + ) { protocols.push("Sendable"); } @@ -292,20 +397,20 @@ export class SwiftRenderer extends ConvenienceRenderer { private getProtocolString( kind: "struct" | "class" | "enum", - baseClass: string | undefined = undefined + baseClass: string | undefined = undefined, ): Sourcelike { - let protocols = this.getProtocolsArray(kind); + const protocols = this.getProtocolsArray(kind); if (baseClass) { protocols.unshift(baseClass); } - return protocols.length > 0 ? ": " + protocols.join(", ") : ""; + return protocols.length > 0 ? `: ${protocols.join(", ")}` : ""; } private getEnumPropertyGroups(c: ClassType): typeof groups { type PropertyGroup = Array<{ label?: string; name: Name }>; - let groups: PropertyGroup[] = []; + const groups: PropertyGroup[] = []; let group: PropertyGroup = []; this.forEachClassProperty(c, "none", (name, jsonName) => { @@ -352,7 +457,10 @@ export class SwiftRenderer extends ConvenienceRenderer { return; } - assert(this._currentFilename === undefined, "Previous file wasn't finished: " + this._currentFilename); + assert( + this._currentFilename === undefined, + `Previous file wasn't finished: ${this._currentFilename}`, + ); // FIXME: The filenames should actually be Sourcelikes, too this._currentFilename = `${this.sourcelikeToString(basename)}.swift`; this.initializeEmitContextForFilename(this._currentFilename); @@ -368,14 +476,17 @@ export class SwiftRenderer extends ConvenienceRenderer { this._currentFilename = undefined; } - protected propertyLinesDefinition(name: Name, parameter: ClassProperty): Sourcelike { + protected propertyLinesDefinition( + name: Name, + parameter: ClassProperty, + ): Sourcelike { const useMutableProperties = this._options.mutableProperties; return [ this.accessLevel, useMutableProperties ? "var " : "let ", name, ": ", - this.swiftPropertyType(parameter) + this.swiftPropertyType(parameter), ]; } @@ -395,136 +506,192 @@ export class SwiftRenderer extends ConvenienceRenderer { this.emitItem(this.objcMembersDeclaration); } - this.emitBlockWithAccess([structOrClass, " ", className, this.getProtocolString(structOrClass)], () => { - if (this._options.dense) { - let lastProperty: ClassProperty | undefined = undefined; - let lastNames: Name[] = []; + this.emitBlockWithAccess( + [ + structOrClass, + " ", + className, + this.getProtocolString(structOrClass), + ], + () => { + if (this._options.dense) { + let lastProperty: ClassProperty | undefined = undefined; + let lastNames: Name[] = []; + + const emitLastProperty = (): void => { + if (lastProperty === undefined) return; + + const useMutableProperties = + this._options.mutableProperties; + + const sources: Sourcelike[] = [ + [ + this._options.optionalEnums && + lastProperty.type.kind === "enum" + ? "@OptionallyDecodable " + : "", + this.accessLevel, + useMutableProperties || + (this._options.optionalEnums && + lastProperty.type.kind === "enum") + ? "var " + : "let ", + ], + ]; + lastNames.forEach((n, i) => { + if (i > 0) sources.push(", "); + sources.push(n); + }); + sources.push(": "); + sources.push(this.swiftPropertyType(lastProperty)); + this.emitLine(sources); + + lastProperty = undefined; + lastNames = []; + }; + + this.forEachClassProperty( + c, + "none", + (name, jsonName, p) => { + const description = + this.descriptionForClassProperty(c, jsonName); + if ( + (lastProperty && !p.equals(lastProperty)) || + lastNames.length >= MAX_SAMELINE_PROPERTIES || + description !== undefined + ) { + emitLastProperty(); + } - const emitLastProperty = (): void => { - if (lastProperty === undefined) return; + if (lastProperty === undefined) { + lastProperty = p; + } - const useMutableProperties = this._options.mutableProperties; + lastNames.push(name); + if (description !== undefined) { + this.emitDescription(description); + emitLastProperty(); + } + }, + ); + emitLastProperty(); + } else { + this.forEachClassProperty( + c, + "none", + (name, jsonName, p) => { + const description = + this.descriptionForClassProperty(c, jsonName); + const propertyLines = this.propertyLinesDefinition( + name, + p, + ); + this.emitDescription(description); + this.emitLine(propertyLines); + }, + ); + } - let sources: Sourcelike[] = [ - [ - this._options.optionalEnums && lastProperty.type.kind === "enum" - ? "@OptionallyDecodable " - : "", - this.accessLevel, - useMutableProperties || (this._options.optionalEnums && lastProperty.type.kind === "enum") - ? "var " - : "let " - ] - ]; - lastNames.forEach((n, i) => { - if (i > 0) sources.push(", "); - sources.push(n); + if (!this._options.justTypes) { + const groups = this.getEnumPropertyGroups(c); + const allPropertiesRedundant = groups.every((group) => { + return group.every((p) => p.label === undefined); }); - sources.push(": "); - sources.push(this.swiftPropertyType(lastProperty)); - this.emitLine(sources); - - lastProperty = undefined; - lastNames = []; - }; - - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - const description = this.descriptionForClassProperty(c, jsonName); - if ( - (lastProperty && !p.equals(lastProperty)) || - lastNames.length >= MAX_SAMELINE_PROPERTIES || - description !== undefined - ) { - emitLastProperty(); - } - - if (lastProperty === undefined) { - lastProperty = p; - } + if (!allPropertiesRedundant && c.getProperties().size > 0) { + this.ensureBlankLine(); + let enumDeclaration = this.accessLevel; + enumDeclaration += "enum CodingKeys: String, CodingKey"; + if ( + this._options.codingKeysProtocol && + this._options.codingKeysProtocol.length > 0 + ) { + enumDeclaration += ", "; + enumDeclaration += this._options.codingKeysProtocol; + } - lastNames.push(name); - if (description !== undefined) { - this.emitDescription(description); - emitLastProperty(); + this.emitBlock(enumDeclaration, () => { + for (const group of groups) { + const { name, label } = group[0]; + if ( + this._options.explicitCodingKeys && + label !== undefined + ) { + this.emitLine( + "case ", + name, + ' = "', + label, + '"', + ); + } else { + const names = arrayIntercalate( + ", ", + group.map((p) => p.name), + ); + this.emitLine("case ", names); + } + } + }); } - }); - emitLastProperty(); - } else { - this.forEachClassProperty(c, "none", (name, jsonName, p) => { - const description = this.descriptionForClassProperty(c, jsonName); - const propertyLines = this.propertyLinesDefinition(name, p); - this.emitDescription(description); - this.emitLine(propertyLines); - }); - } + } - if (!this._options.justTypes) { - const groups = this.getEnumPropertyGroups(c); - const allPropertiesRedundant = groups.every(group => { - return group.every(p => p.label === undefined); - }); - if (!allPropertiesRedundant && c.getProperties().size > 0) { + // this main initializer must be defined within the class + // declaration since it assigns let constants + if ( + isClass || + // Public structs need explicit initializers + // https://github.com/quicktype/quicktype/issues/899 + this._options.accessLevel === "public" + ) { + // Make an initializer that initalizes all fields this.ensureBlankLine(); - let enumDeclaration = this.accessLevel; - enumDeclaration += "enum CodingKeys: String, CodingKey"; - if (this._options.codingKeysProtocol && this._options.codingKeysProtocol.length > 0) { - enumDeclaration += ", "; - enumDeclaration += this._options.codingKeysProtocol; + const initProperties = this.initializableProperties(c); + const propertiesLines: Sourcelike[] = []; + for (const property of initProperties) { + if (propertiesLines.length > 0) + propertiesLines.push(", "); + propertiesLines.push( + property.name, + ": ", + this.swiftPropertyType(property.parameter), + ); } - this.emitBlock(enumDeclaration, () => { - for (const group of groups) { - const { name, label } = group[0]; - if (this._options.explicitCodingKeys && label !== undefined) { - this.emitLine("case ", name, ' = "', label, '"'); - } else { - const names = arrayIntercalate( - ", ", - group.map(p => p.name) - ); - this.emitLine("case ", names); - } - } - }); - } - } - - // this main initializer must be defined within the class - // declaration since it assigns let constants - if ( - isClass || - // Public structs need explicit initializers - // https://github.com/quicktype/quicktype/issues/899 - this._options.accessLevel === "public" - ) { - // Make an initializer that initalizes all fields - this.ensureBlankLine(); - let initProperties = this.initializableProperties(c); - let propertiesLines: Sourcelike[] = []; - for (let property of initProperties) { - if (propertiesLines.length > 0) propertiesLines.push(", "); - propertiesLines.push(property.name, ": ", this.swiftPropertyType(property.parameter)); - } - - if (this.propertyCount(c) === 0 && this._options.objcSupport) { - this.emitBlockWithAccess(["override init()"], () => { - return ""; - }); - } else { - this.emitBlockWithAccess(["init(", ...propertiesLines, ")"], () => { - for (let property of initProperties) { - this.emitLine("self.", property.name, " = ", property.name); - } - }); + if ( + this.propertyCount(c) === 0 && + this._options.objcSupport + ) { + this.emitBlockWithAccess(["override init()"], () => { + return ""; + }); + } else { + this.emitBlockWithAccess( + ["init(", ...propertiesLines, ")"], + () => { + for (const property of initProperties) { + this.emitLine( + "self.", + property.name, + " = ", + property.name, + ); + } + }, + ); + } } - } - }); + }, + ); if (!this._options.justTypes) { // FIXME: We emit only the MARK line for top-level-enum.schema if (this._options.convenienceInitializers) { this.ensureBlankLine(); - this.emitMark(this.sourcelikeToString(className) + " convenience initializers and mutators"); + this.emitMark( + this.sourcelikeToString(className) + + " convenience initializers and mutators", + ); this.ensureBlankLine(); this.emitConvenienceInitializersExtension(c, className); this.ensureBlankLine(); @@ -536,10 +703,14 @@ export class SwiftRenderer extends ConvenienceRenderer { protected initializableProperties(c: ClassType): SwiftProperty[] { const properties: SwiftProperty[] = []; - this.forEachClassProperty(c, "none", (name, jsonName, parameter, position) => { - const property = { name, jsonName, parameter, position }; - properties.push(property); - }); + this.forEachClassProperty( + c, + "none", + (name, jsonName, parameter, position) => { + const property = { name, jsonName, parameter, position }; + properties.push(property); + }, + ); return properties; } @@ -547,9 +718,14 @@ export class SwiftRenderer extends ConvenienceRenderer { this.emitBlock("func newJSONDecoder() -> JSONDecoder", () => { this.emitLine("let decoder = JSONDecoder()"); if (!this._options.linux) { - this.emitBlock("if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *)", () => { - this.emitLine("decoder.dateDecodingStrategy = .iso8601"); - }); + this.emitBlock( + "if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *)", + () => { + this.emitLine( + "decoder.dateDecodingStrategy = .iso8601", + ); + }, + ); } else { this.emitMultiline(`decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in let container = try decoder.singleValueContainer() @@ -577,9 +753,14 @@ export class SwiftRenderer extends ConvenienceRenderer { this.emitBlock("func newJSONEncoder() -> JSONEncoder", () => { this.emitLine("let encoder = JSONEncoder()"); if (!this._options.linux) { - this.emitBlock("if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *)", () => { - this.emitLine("encoder.dateEncodingStrategy = .iso8601"); - }); + this.emitBlock( + "if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *)", + () => { + this.emitLine( + "encoder.dateEncodingStrategy = .iso8601", + ); + }, + ); } else { this.emitMultiline(`let formatter = DateFormatter() formatter.calendar = Calendar(identifier: .iso8601) @@ -593,7 +774,10 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); }); } - private emitConvenienceInitializersExtension(c: ClassType, className: Name): void { + private emitConvenienceInitializersExtension( + c: ClassType, + className: Name, + ): void { const isClass = this._options.useClasses || this.isCycleBreakerType(c); const convenience = isClass ? "convenience " : ""; @@ -601,13 +785,21 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); if (isClass) { this.emitBlock("convenience init(data: Data) throws", () => { if (this.propertyCount(c) > 0) { - this.emitLine("let me = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)"); + this.emitLine( + "let me = try newJSONDecoder().decode(", + this.swiftType(c), + ".self, from: data)", + ); } else { - this.emitLine("let _ = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)"); + this.emitLine( + "let _ = try newJSONDecoder().decode(", + this.swiftType(c), + ".self, from: data)", + ); } - let args: Sourcelike[] = []; - this.forEachClassProperty(c, "none", name => { + const args: Sourcelike[] = []; + this.forEachClassProperty(c, "none", (name) => { if (args.length > 0) args.push(", "); args.push(name, ": ", "me.", name); }); @@ -615,24 +807,41 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); }); } else { this.emitBlock("init(data: Data) throws", () => { - this.emitLine("self = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)"); + this.emitLine( + "self = try newJSONDecoder().decode(", + this.swiftType(c), + ".self, from: data)", + ); }); } this.ensureBlankLine(); this.emitBlock( - [convenience, "init(_ json: String, using encoding: String.Encoding = .utf8) throws"], + [ + convenience, + "init(_ json: String, using encoding: String.Encoding = .utf8) throws", + ], () => { - this.emitBlock("guard let data = json.data(using: encoding) else", () => { - this.emitLine('throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)'); - }); + this.emitBlock( + "guard let data = json.data(using: encoding) else", + () => { + this.emitLine( + 'throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)', + ); + }, + ); this.emitLine("try self.init(data: data)"); - } + }, ); this.ensureBlankLine(); - this.emitBlock([convenience, "init(fromURL url: URL) throws"], () => { - this.emitLine("try self.init(data: try Data(contentsOf: url))"); - }); + this.emitBlock( + [convenience, "init(fromURL url: URL) throws"], + () => { + this.emitLine( + "try self.init(data: try Data(contentsOf: url))", + ); + }, + ); this.ensureBlankLine(); this.emitConvenienceMutator(c, className); @@ -643,9 +852,14 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.emitLine("return try newJSONEncoder().encode(self)"); }); this.ensureBlankLine(); - this.emitBlock("func jsonString(encoding: String.Encoding = .utf8) throws -> String?", () => { - this.emitLine("return String(data: try self.jsonData(), encoding: encoding)"); - }); + this.emitBlock( + "func jsonString(encoding: String.Encoding = .utf8) throws -> String?", + () => { + this.emitLine( + "return String(data: try self.jsonData(), encoding: encoding)", + ); + }, + ); }); } @@ -659,17 +873,29 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); const protocolString = this.getProtocolString("enum", "String"); if (this._options.justTypes) { - this.emitBlockWithAccess(["enum ", enumName, protocolString], () => { - this.forEachEnumCase(e, "none", name => { - this.emitLine("case ", name); - }); - }); + this.emitBlockWithAccess( + ["enum ", enumName, protocolString], + () => { + this.forEachEnumCase(e, "none", (name) => { + this.emitLine("case ", name); + }); + }, + ); } else { - this.emitBlockWithAccess(["enum ", enumName, protocolString], () => { - this.forEachEnumCase(e, "none", (name, jsonName) => { - this.emitLine("case ", name, ' = "', stringEscape(jsonName), '"'); - }); - }); + this.emitBlockWithAccess( + ["enum ", enumName, protocolString], + () => { + this.forEachEnumCase(e, "none", (name, jsonName) => { + this.emitLine( + "case ", + name, + ' = "', + stringEscape(jsonName), + '"', + ); + }); + }, + ); } this.endFile(); @@ -684,92 +910,177 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; - return "_" + kind; + return `_${kind}`; } const renderUnionCase = (t: Type): void => { - this.emitBlock(["if let x = try? container.decode(", this.swiftType(t), ".self)"], () => { - this.emitLine("self = .", this.nameForUnionMember(u, t), "(x)"); - this.emitLine("return"); - }); + this.emitBlock( + [ + "if let x = try? container.decode(", + this.swiftType(t), + ".self)", + ], + () => { + this.emitLine( + "self = .", + this.nameForUnionMember(u, t), + "(x)", + ); + this.emitLine("return"); + }, + ); }; this.emitDescription(this.descriptionForType(u)); const indirect = this.isCycleBreakerType(u) ? "indirect " : ""; const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); - this.emitBlockWithAccess([indirect, "enum ", unionName, this.getProtocolString("enum")], () => { - this.forEachUnionMember(u, nonNulls, "none", null, (name, t) => { - this.emitLine("case ", name, "(", this.swiftType(t), ")"); - }); - if (maybeNull !== null) { - this.emitLine("case ", this.nameForUnionMember(u, maybeNull)); - } + this.emitBlockWithAccess( + [indirect, "enum ", unionName, this.getProtocolString("enum")], + () => { + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (name, t) => { + this.emitLine( + "case ", + name, + "(", + this.swiftType(t), + ")", + ); + }, + ); + if (maybeNull !== null) { + this.emitLine( + "case ", + this.nameForUnionMember(u, maybeNull), + ); + } - if (!this._options.justTypes) { - this.ensureBlankLine(); - this.emitBlockWithAccess("init(from decoder: Decoder) throws", () => { - this.emitLine("let container = try decoder.singleValueContainer()"); - const boolMember = u.findMember("bool"); - if (boolMember !== undefined) renderUnionCase(boolMember); - const integerMember = u.findMember("integer"); - if (integerMember !== undefined) renderUnionCase(integerMember); - for (const t of nonNulls) { - if (t.kind === "bool" || t.kind === "integer") continue; - renderUnionCase(t); - } + if (!this._options.justTypes) { + this.ensureBlankLine(); + this.emitBlockWithAccess( + "init(from decoder: Decoder) throws", + () => { + this.emitLine( + "let container = try decoder.singleValueContainer()", + ); + const boolMember = u.findMember("bool"); + if (boolMember !== undefined) + renderUnionCase(boolMember); + const integerMember = u.findMember("integer"); + if (integerMember !== undefined) + renderUnionCase(integerMember); + for (const t of nonNulls) { + if (t.kind === "bool" || t.kind === "integer") + continue; + renderUnionCase(t); + } - if (maybeNull !== null) { - this.emitBlock("if container.decodeNil()", () => { - this.emitLine("self = .", this.nameForUnionMember(u, maybeNull)); - this.emitLine("return"); - }); - } + if (maybeNull !== null) { + this.emitBlock( + "if container.decodeNil()", + () => { + this.emitLine( + "self = .", + this.nameForUnionMember( + u, + maybeNull, + ), + ); + this.emitLine("return"); + }, + ); + } - this.emitDecodingError(unionName); - }); - this.ensureBlankLine(); - this.emitBlockWithAccess("func encode(to encoder: Encoder) throws", () => { - this.emitLine("var container = encoder.singleValueContainer()"); - this.emitLine("switch self {"); - this.forEachUnionMember(u, nonNulls, "none", null, (name, _) => { - this.emitLine("case .", name, "(let x):"); - this.indent(() => this.emitLine("try container.encode(x)")); - }); - if (maybeNull !== null) { - this.emitLine("case .", this.nameForUnionMember(u, maybeNull), ":"); - this.indent(() => this.emitLine("try container.encodeNil()")); - } + this.emitDecodingError(unionName); + }, + ); + this.ensureBlankLine(); + this.emitBlockWithAccess( + "func encode(to encoder: Encoder) throws", + () => { + this.emitLine( + "var container = encoder.singleValueContainer()", + ); + this.emitLine("switch self {"); + this.forEachUnionMember( + u, + nonNulls, + "none", + null, + (name, _) => { + this.emitLine("case .", name, "(let x):"); + this.indent(() => + this.emitLine( + "try container.encode(x)", + ), + ); + }, + ); + if (maybeNull !== null) { + this.emitLine( + "case .", + this.nameForUnionMember(u, maybeNull), + ":", + ); + this.indent(() => + this.emitLine("try container.encodeNil()"), + ); + } - this.emitLine("}"); - }); - } - }); + this.emitLine("}"); + }, + ); + } + }, + ); this.endFile(); } - private emitTopLevelMapAndArrayConvenienceInitializerExtensions(t: Type, name: Name): void { + private emitTopLevelMapAndArrayConvenienceInitializerExtensions( + t: Type, + name: Name, + ): void { let extensionSource: Sourcelike; if (t instanceof ArrayType) { extensionSource = ["Array where Element == ", name, ".Element"]; } else if (t instanceof MapType) { - extensionSource = ["Dictionary where Key == String, Value == ", this.swiftType(t.values)]; + extensionSource = [ + "Dictionary where Key == String, Value == ", + this.swiftType(t.values), + ]; } else { return; } this.emitBlockWithAccess(["extension ", extensionSource], () => { this.emitBlock(["init(data: Data) throws"], () => { - this.emitLine("self = try newJSONDecoder().decode(", name, ".self, from: data)"); + this.emitLine( + "self = try newJSONDecoder().decode(", + name, + ".self, from: data)", + ); }); this.ensureBlankLine(); - this.emitBlock("init(_ json: String, using encoding: String.Encoding = .utf8) throws", () => { - this.emitBlock("guard let data = json.data(using: encoding) else", () => { - this.emitLine('throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)'); - }); - this.emitLine("try self.init(data: data)"); - }); + this.emitBlock( + "init(_ json: String, using encoding: String.Encoding = .utf8) throws", + () => { + this.emitBlock( + "guard let data = json.data(using: encoding) else", + () => { + this.emitLine( + 'throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)', + ); + }, + ); + this.emitLine("try self.init(data: data)"); + }, + ); this.ensureBlankLine(); this.emitBlock("init(fromURL url: URL) throws", () => { this.emitLine("try self.init(data: try Data(contentsOf: url))"); @@ -779,9 +1090,14 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.emitLine("return try newJSONEncoder().encode(self)"); }); this.ensureBlankLine(); - this.emitBlock("func jsonString(encoding: String.Encoding = .utf8) throws -> String?", () => { - this.emitLine("return String(data: try self.jsonData(), encoding: encoding)"); - }); + this.emitBlock( + "func jsonString(encoding: String.Encoding = .utf8) throws -> String?", + () => { + this.emitLine( + "return String(data: try self.jsonData(), encoding: encoding)", + ); + }, + ); }); } @@ -791,7 +1107,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); name, '.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ', name, - '"))' + '"))', ); } @@ -803,19 +1119,31 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.forEachTopLevel( "leading", (t: Type, name: Name) => this.renderTopLevelAlias(t, name), - t => this.namedTypeToNameForTopLevel(t) === undefined + (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); if (this._options.convenienceInitializers) { this.ensureBlankLine(); - this.forEachTopLevel("leading-and-interposing", (t: Type, name: Name) => - this.emitTopLevelMapAndArrayConvenienceInitializerExtensions(t, name) + this.forEachTopLevel( + "leading-and-interposing", + (t: Type, name: Name) => + this.emitTopLevelMapAndArrayConvenienceInitializerExtensions( + t, + name, + ), ); } - if ((!this._options.justTypes && this._options.convenienceInitializers) || this._options.alamofire) { + if ( + (!this._options.justTypes && + this._options.convenienceInitializers) || + this._options.alamofire + ) { this.ensureBlankLine(); - this.emitMark("Helper functions for creating encoders and decoders", true); + this.emitMark( + "Helper functions for creating encoders and decoders", + true, + ); this.ensureBlankLine(); this.emitNewEncoderDecoder(); } @@ -834,9 +1162,16 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.emitMark("Encode/decode helpers", true); this.ensureBlankLine(); if (this._options.objcSupport) { - this.emitLine(this.objcMembersDeclaration, this.accessLevel, "class JSONNull: NSObject, Codable {"); + this.emitLine( + this.objcMembersDeclaration, + this.accessLevel, + "class JSONNull: NSObject, Codable {", + ); } else { - this.emitLine(this.accessLevel, "class JSONNull: Codable, Hashable {"); + this.emitLine( + this.accessLevel, + "class JSONNull: Codable, Hashable {", + ); } this.ensureBlankLine(); @@ -905,7 +1240,11 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.ensureBlankLine(); if (this._options.objcSupport) { - this.emitLine(this.objcMembersDeclaration, this.accessLevel, "class JSONAny: NSObject, Codable {"); + this.emitLine( + this.objcMembersDeclaration, + this.accessLevel, + "class JSONAny: NSObject, Codable {", + ); } else { this.emitLine(this.accessLevel, "class JSONAny: Codable {"); } @@ -1117,23 +1456,29 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); ": ", this.swiftPropertyType(p), "? = nil", - position !== "only" && position !== "last" ? "," : "" + position !== "only" && position !== "last" ? "," : "", ); }); }); this.emitBlock([") -> ", className], () => { this.emitLine("return ", className, "("); this.indent(() => { - this.forEachClassProperty(c, "none", (name, _, _p, position) => { - this.emitLine( - name, - ": ", - name, - " ?? self.", - name, - position !== "only" && position !== "last" ? "," : "" - ); - }); + this.forEachClassProperty( + c, + "none", + (name, _, _p, position) => { + this.emitLine( + name, + ": ", + name, + " ?? self.", + name, + position !== "only" && position !== "last" + ? "," + : "", + ); + }, + ); }); this.emitLine(")"); }); @@ -1150,9 +1495,12 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); this.forEachNamedType( "leading-and-interposing", - (c: ClassType, className: Name) => this.renderClassDefinition(c, className), - (e: EnumType, enumName: Name) => this.renderEnumDefinition(e, enumName), - (u: UnionType, unionName: Name) => this.renderUnionDefinition(u, unionName) + (c: ClassType, className: Name) => + this.renderClassDefinition(c, className), + (e: EnumType, enumName: Name) => + this.renderEnumDefinition(e, enumName), + (u: UnionType, unionName: Name) => + this.renderUnionDefinition(u, unionName), ); if (!this._options.justTypes) { @@ -1163,8 +1511,7 @@ encoder.dateEncodingStrategy = .formatted(formatter)`); private emitAlamofireExtension(): void { this.ensureBlankLine(); this.emitBlockWithAccess("extension DataRequest", () => { - this - .emitMultiline(`fileprivate func decodableResponseSerializer() -> DataResponseSerializer { + this.emitMultiline(`fileprivate func decodableResponseSerializer() -> DataResponseSerializer { return DataResponseSerializer { _, response, data, error in guard error == nil else { return .failure(error!) } @@ -1189,11 +1536,13 @@ fileprivate func responseDecodable(queue: DispatchQueue? = nil, co name, "(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<", name, - ">) -> Void) -> Self" + ">) -> Void) -> Self", ], () => { - this.emitLine("return responseDecodable(queue: queue, completionHandler: completionHandler)"); - } + this.emitLine( + "return responseDecodable(queue: queue, completionHandler: completionHandler)", + ); + }, ); }); }); diff --git a/packages/quicktype-core/src/language/Swift/constants.ts b/packages/quicktype-core/src/language/Swift/constants.ts index 4a8c4ee2f..2298d1bd6 100644 --- a/packages/quicktype-core/src/language/Swift/constants.ts +++ b/packages/quicktype-core/src/language/Swift/constants.ts @@ -97,5 +97,5 @@ export const keywords = [ "convertDict", "convertDouble", "jsonString", - "jsonData" + "jsonData", ] as const; diff --git a/packages/quicktype-core/src/language/Swift/language.ts b/packages/quicktype-core/src/language/Swift/language.ts index 6d9c81d59..d40d0af10 100644 --- a/packages/quicktype-core/src/language/Swift/language.ts +++ b/packages/quicktype-core/src/language/Swift/language.ts @@ -1,72 +1,115 @@ -import { type DateTimeRecognizer } from "../../DateTime"; -import { type RenderContext } from "../../Renderer"; -import { BooleanOption, EnumOption, StringOption, getOptionValues } from "../../RendererOptions"; +import type { DateTimeRecognizer } from "../../DateTime"; +import type { RenderContext } from "../../Renderer"; +import { + BooleanOption, + EnumOption, + StringOption, + getOptionValues, +} from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { SwiftRenderer } from "./SwiftRenderer"; import { SwiftDateTimeRecognizer } from "./utils"; export const swiftOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), - convenienceInitializers: new BooleanOption("initializers", "Generate initializers and mutators", true), - explicitCodingKeys: new BooleanOption("coding-keys", "Explicit CodingKey values in Codable types", true), + convenienceInitializers: new BooleanOption( + "initializers", + "Generate initializers and mutators", + true, + ), + explicitCodingKeys: new BooleanOption( + "coding-keys", + "Explicit CodingKey values in Codable types", + true, + ), codingKeysProtocol: new StringOption( "coding-keys-protocol", "CodingKeys implements protocols", "protocol1, protocol2...", "", - "secondary" + "secondary", ), alamofire: new BooleanOption("alamofire", "Alamofire extensions", false), - namedTypePrefix: new StringOption("type-prefix", "Prefix for type names", "PREFIX", "", "secondary"), + namedTypePrefix: new StringOption( + "type-prefix", + "Prefix for type names", + "PREFIX", + "", + "secondary", + ), useClasses: new EnumOption( "struct-or-class", "Structs or classes", { struct: false, - class: true + class: true, } as const, - "struct" + "struct", + ), + mutableProperties: new BooleanOption( + "mutable-properties", + "Use var instead of let for object properties", + false, ), - mutableProperties: new BooleanOption("mutable-properties", "Use var instead of let for object properties", false), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), dense: new EnumOption( "density", "Code density", { dense: true, - normal: false + normal: false, } as const, "dense", - "secondary" + "secondary", + ), + linux: new BooleanOption( + "support-linux", + "Support Linux", + false, + "secondary", ), - linux: new BooleanOption("support-linux", "Support Linux", false, "secondary"), objcSupport: new BooleanOption( "objective-c-support", "Objects inherit from NSObject and @objcMembers is added to classes", - false + false, + ), + optionalEnums: new BooleanOption( + "optional-enums", + "If no matching case is found enum value is set to null", + false, + ), + swift5Support: new BooleanOption( + "swift-5-support", + "Renders output in a Swift 5 compatible mode", + false, + ), + sendable: new BooleanOption( + "sendable", + "Mark generated models as Sendable", + false, ), - optionalEnums: new BooleanOption("optional-enums", "If no matching case is found enum value is set to null", false), - swift5Support: new BooleanOption("swift-5-support", "Renders output in a Swift 5 compatible mode", false), - sendable: new BooleanOption("sendable", "Mark generated models as Sendable", false), multiFileOutput: new BooleanOption( "multi-file-output", "Renders each top-level object in its own Swift file", - false + false, ), accessLevel: new EnumOption( "access-level", "Access level", { internal: "internal", - public: "public" + public: "public", } as const, "internal", - "secondary" + "secondary", ), protocol: new EnumOption( "protocol", @@ -74,20 +117,22 @@ export const swiftOptions = { { none: { equatable: false, hashable: false }, equatable: { equatable: true, hashable: false }, - hashable: { equatable: false, hashable: true } + hashable: { equatable: false, hashable: true }, } as const, "none", - "secondary" - ) + "secondary", + ), }; export const swiftLanguageConfig = { displayName: "Swift", names: ["swift", "swift4"], - extension: "swift" + extension: "swift", } as const; -export class SwiftTargetLanguage extends TargetLanguage { +export class SwiftTargetLanguage extends TargetLanguage< + typeof swiftLanguageConfig +> { public constructor() { super(swiftLanguageConfig); } @@ -97,7 +142,8 @@ export class SwiftTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); mapping.set("date-time", "date-time"); return mapping; } @@ -110,8 +156,15 @@ export class SwiftTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): SwiftRenderer { + return new SwiftRenderer( + this, + renderContext, + getOptionValues(swiftOptions, untypedOptionValues), + ); } public get dateTimeRecognizer(): DateTimeRecognizer { diff --git a/packages/quicktype-core/src/language/Swift/utils.ts b/packages/quicktype-core/src/language/Swift/utils.ts index ce4e2fa8b..ee452517b 100644 --- a/packages/quicktype-core/src/language/Swift/utils.ts +++ b/packages/quicktype-core/src/language/Swift/utils.ts @@ -1,6 +1,6 @@ import { DefaultDateTimeRecognizer } from "../../DateTime"; -import { type Name } from "../../Naming"; -import { type ForEachPosition } from "../../Renderer"; +import type { Name } from "../../Naming"; +import type { ForEachPosition } from "../../Renderer"; import { addPrefixIfNecessary, allLowerWordStyle, @@ -15,9 +15,9 @@ import { isPrintable, legalizeCharacters, splitIntoWords, - utf32ConcatMap + utf32ConcatMap, } from "../../support/Strings"; -import { type ClassProperty } from "../../Type"; +import type { ClassProperty } from "../../Type"; export const MAX_SAMELINE_PROPERTIES = 4; @@ -61,7 +61,7 @@ export function swiftNameStyle( prefix: string, isUpper: boolean, original: string, - acronymsStyle: (s: string) => string = allUpperWordStyle + acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); const combined = combineWords( @@ -72,7 +72,7 @@ export function swiftNameStyle( isUpper ? allUpperWordStyle : allLowerWordStyle, acronymsStyle, "", - isStartCharacter + isStartCharacter, ); return addPrefixIfNecessary(prefix, combined); } @@ -81,4 +81,6 @@ function unicodeEscape(codePoint: number): string { return "\\u{" + intToHex(codePoint, 0) + "}"; } -export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); +export const stringEscape = utf32ConcatMap( + escapeNonPrintableMapper(isPrintable, unicodeEscape), +); diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts index 7ca8d840b..f5d117c34 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts @@ -2,9 +2,9 @@ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type Sourcelike } from "../../Source"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import type { Sourcelike } from "../../Source"; import { AcronymStyleOptions, acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, @@ -14,15 +14,22 @@ import { isLetterOrUnderscore, splitIntoWords, stringEscape, - utf16StringEscape + utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, type ClassProperty, EnumType, MapType, type ObjectType, type Type } from "../../Type"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassProperty, + EnumType, + MapType, + type ObjectType, + type Type, +} from "../../Type"; import { matchType } from "../../Type/TypeUtils"; import { legalizeName } from "../JavaScript/utils"; -import { type typeScriptEffectSchemaOptions } from "./language"; +import type { typeScriptEffectSchemaOptions } from "./language"; export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { private emittedObjects = new Set(); @@ -30,7 +37,9 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - private readonly _options: OptionValues + private readonly _options: OptionValues< + typeof typeScriptEffectSchemaOptions + >, ) { super(targetLanguage, renderContext); } @@ -50,27 +59,30 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", - isLetterOrUnderscore + isLetterOrUnderscore, ); } protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("types", s => this.nameStyle(s, true)); + return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected makeUnionMemberNamer(): Namer { - return funPrefixNamer("properties", s => this.nameStyle(s, true)); + return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { - return funPrefixNamer("properties", s => this.nameStyle(s, true)); + return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enum-cases", s => this.nameStyle(s, false)); + return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, false)); } - private importStatement(lhs: Sourcelike, moduleName: Sourcelike): Sourcelike { + private importStatement( + lhs: Sourcelike, + moduleName: Sourcelike, + ): Sourcelike { return ["import ", lhs, " from ", moduleName, ";"]; } @@ -87,7 +99,7 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { return ["S.optional(", this.typeMapTypeFor(p.type), ")"]; } - private typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { + private typeMapTypeFor(t: Type, required = true): Sourcelike { if (t.kind === "class" || t.kind === "object" || t.kind === "enum") { const name = this.nameForNamedType(t); if (this.emittedObjects.has(name)) { @@ -99,19 +111,27 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { const match = matchType( t, - _anyType => "S.Any", - _nullType => "S.Null", - _boolType => "S.Boolean", - _integerType => "S.Number", - _doubleType => "S.Number", - _stringType => "S.String", - arrayType => ["S.Array(", this.typeMapTypeFor(arrayType.items, false), ")"], - _classType => panic("Should already be handled."), - _mapType => ["S.Record({ key: S.String, value: ", this.typeMapTypeFor(_mapType.values, false), "})"], - _enumType => panic("Should already be handled."), - unionType => { + (_anyType) => "S.Any", + (_nullType) => "S.Null", + (_boolType) => "S.Boolean", + (_integerType) => "S.Number", + (_doubleType) => "S.Number", + (_stringType) => "S.String", + (arrayType) => [ + "S.Array(", + this.typeMapTypeFor(arrayType.items, false), + ")", + ], + (_classType) => panic("Should already be handled."), + (_mapType) => [ + "S.Record({ key: S.String, value: ", + this.typeMapTypeFor(_mapType.values, false), + "})", + ], + (_enumType) => panic("Should already be handled."), + (unionType) => { const types = Array.from(unionType.getChildren()); - let children: Sourcelike[] = []; + const children: Sourcelike[] = []; let nullable = false; for (const type of types) { if (type.kind === "null") { @@ -125,11 +145,15 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { return ["S.NullOr(", children[0], ")"]; } - return ["S.Union(", ...arrayIntercalate(", ", children), nullable ? ", S.Null)" : ")"]; + return [ + "S.Union(", + ...arrayIntercalate(", ", children), + nullable ? ", S.Null)" : ")", + ]; }, - _transformedStringType => { + (_transformedStringType) => { return "S.String"; - } + }, ); if (required) { @@ -142,10 +166,23 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { private emitObject(name: Name, t: ObjectType): void { this.emittedObjects.add(name); this.ensureBlankLine(); - this.emitLine("\nexport class ", name, " extends S.Class<", name, '>("', name, '")({'); + this.emitLine( + "\nexport class ", + name, + " extends S.Class<", + name, + '>("', + name, + '")({', + ); this.indent(() => { this.forEachClassProperty(t, "none", (_, jsonName, property) => { - this.emitLine(`"${utf16StringEscape(jsonName)}"`, ": ", this.typeMapTypeForProperty(property), ","); + this.emitLine( + `"${utf16StringEscape(jsonName)}"`, + ": ", + this.typeMapTypeForProperty(property), + ",", + ); }); }); this.emitLine("}) {}"); @@ -159,11 +196,17 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { this.indent(() => this.forEachEnumCase(e, "none", (_, jsonName) => { this.emitLine('"', stringEscape(jsonName), '",'); - }) + }), ); this.emitLine(");"); if (!this._options.justSchema) { - this.emitLine("export type ", enumName, " = S.Schema.Type;"); + this.emitLine( + "export type ", + enumName, + " = S.Schema.Type;", + ); } } @@ -173,9 +216,13 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { const recurse = (type: Type): void => { if (type.kind === "object" || type.kind === "class") { names.push(this.nameForNamedType(type)); - this.forEachClassProperty(type as ObjectType, "none", (_, __, prop) => { - recurse(prop.type); - }); + this.forEachClassProperty( + type as ObjectType, + "none", + (_, __, prop) => { + recurse(prop.type); + }, + ); } else if (type instanceof ArrayType) { recurse(type.items); } else if (type instanceof MapType) { @@ -197,9 +244,12 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { protected emitSchemas(): void { this.ensureBlankLine(); - this.forEachEnum("leading-and-interposing", (u: EnumType, enumName: Name) => { - this.emitEnum(u, enumName); - }); + this.forEachEnum( + "leading-and-interposing", + (u: EnumType, enumName: Name) => { + this.emitEnum(u, enumName); + }, + ); const order: number[] = []; const mapKey: Name[] = []; @@ -218,11 +268,11 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { const names = this.walkObjectNames(source); // must be behind all these names - names.forEach(name => { + names.forEach((name) => { const depName = name; // find this name's ordinal, if it has already been added - order.forEach(orderItem => { + order.forEach((orderItem) => { const depIndex = orderItem; if (mapKey[depIndex] === depName) { // this is the index of the dependency, so make sure we come after it @@ -236,7 +286,13 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { }); // now emit ordered source - order.forEach(i => this.emitGatheredSource(this.gatherSource(() => this.emitObject(mapKey[i], mapValue[i])))); + order.forEach((i) => + this.emitGatheredSource( + this.gatherSource(() => + this.emitObject(mapKey[i], mapValue[i]), + ), + ), + ); } protected emitSourceStructure(): void { diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts index ea8cf8149..555704cfa 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts @@ -1,2 +1,5 @@ -export { TypeScriptEffectSchemaTargetLanguage, typeScriptEffectSchemaOptions } from "./language"; +export { + TypeScriptEffectSchemaTargetLanguage, + typeScriptEffectSchemaOptions, +} from "./language"; export { TypeScriptEffectSchemaRenderer } from "./TypeScriptEffectSchemaRenderer"; diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts index 9d14bf29d..d55ecc1be 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts @@ -1,21 +1,23 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type FixMeOptionsType } from "../../types"; +import type { LanguageName, RendererOptions } from "../../types"; import { TypeScriptEffectSchemaRenderer } from "./TypeScriptEffectSchemaRenderer"; export const typeScriptEffectSchemaOptions = { - justSchema: new BooleanOption("just-schema", "Schema only", false) + justSchema: new BooleanOption("just-schema", "Schema only", false), }; export const typeScriptEffectSchemaLanguageConfig = { displayName: "TypeScript Effect Schema", names: ["typescript-effect-schema"], - extension: "ts" + extension: "ts", } as const; -export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage { +export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage< + typeof typeScriptEffectSchemaLanguageConfig +> { public constructor() { super(typeScriptEffectSchemaLanguageConfig); } @@ -24,14 +26,16 @@ export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage( renderContext: RenderContext, - untypedOptionValues: FixMeOptionsType + untypedOptionValues: RendererOptions, ): TypeScriptEffectSchemaRenderer { return new TypeScriptEffectSchemaRenderer( this, renderContext, - getOptionValues(typeScriptEffectSchemaOptions, untypedOptionValues) + getOptionValues(typeScriptEffectSchemaOptions, untypedOptionValues), ); } } diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts index eb4695583..02e82aee5 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts @@ -1,8 +1,8 @@ -import { type Name } from "../../Naming"; +import type { Name } from "../../Naming"; import { utf16StringEscape } from "../../support/Strings"; import { defined } from "../../support/Support"; -import { type ClassType, type EnumType } from "../../Type"; -import { type JavaScriptTypeAnnotations } from "../JavaScript"; +import type { ClassType, EnumType } from "../../Type"; +import type { JavaScriptTypeAnnotations } from "../JavaScript"; import { TypeScriptFlowBaseRenderer } from "./TypeScriptFlowBaseRenderer"; import { tsFlowTypeAnnotations } from "./utils"; diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts index 371aad61d..2acc4da23 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts @@ -1,37 +1,60 @@ import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type MultiWord, type Sourcelike, modifySource, multiWord, parenIfNeeded, singleWord } from "../../Source"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import { + type MultiWord, + type Sourcelike, + modifySource, + multiWord, + parenIfNeeded, + singleWord, +} from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import { panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; -import { ArrayType, type ClassType, EnumType, type Type, UnionType } from "../../Type"; +import type { TargetLanguage } from "../../TargetLanguage"; +import { + ArrayType, + type ClassType, + EnumType, + type Type, + UnionType, +} from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; -import { JavaScriptRenderer, type JavaScriptTypeAnnotations } from "../JavaScript"; +import { + JavaScriptRenderer, + type JavaScriptTypeAnnotations, +} from "../JavaScript"; -import { type tsFlowOptions } from "./language"; +import type { tsFlowOptions } from "./language"; import { quotePropertyName } from "./utils"; export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _tsFlowOptions: OptionValues + protected readonly _tsFlowOptions: OptionValues, ) { super(targetLanguage, renderContext, _tsFlowOptions); } protected namerForObjectProperty(): Namer { if (this._tsFlowOptions.nicePropertyNames) { - return funPrefixNamer("properties", s => this.nameStyle(s, false)); - } else { - return super.namerForObjectProperty(); + return funPrefixNamer("properties", (s) => + this.nameStyle(s, false), + ); } + + return super.namerForObjectProperty(); } protected sourceFor(t: Type): MultiWord { - if (this._tsFlowOptions.preferConstValues && t.kind === "enum" && t instanceof EnumType && t.cases.size === 1) { - const item = t.cases.values().next().value; + if ( + this._tsFlowOptions.preferConstValues && + t.kind === "enum" && + t instanceof EnumType && + t.cases.size === 1 + ) { + const item = t.cases.values().next().value ?? ""; return singleWord(`"${utf16StringEscape(item)}"`); } @@ -41,41 +64,52 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { return matchType( t, - _anyType => singleWord("any"), - _nullType => singleWord("null"), - _boolType => singleWord("boolean"), - _integerType => singleWord("number"), - _doubleType => singleWord("number"), - _stringType => singleWord("string"), - arrayType => { + (_anyType) => singleWord("any"), + (_nullType) => singleWord("null"), + (_boolType) => singleWord("boolean"), + (_integerType) => singleWord("number"), + (_doubleType) => singleWord("number"), + (_stringType) => singleWord("string"), + (arrayType) => { const itemType = this.sourceFor(arrayType.items); if ( - (arrayType.items instanceof UnionType && !this._tsFlowOptions.declareUnions) || + (arrayType.items instanceof UnionType && + !this._tsFlowOptions.declareUnions) || arrayType.items instanceof ArrayType ) { return singleWord(["Array<", itemType.source, ">"]); - } else { - return singleWord([parenIfNeeded(itemType), "[]"]); } + + return singleWord([parenIfNeeded(itemType), "[]"]); }, - _classType => panic("We handled this above"), - mapType => singleWord(["{ [key: string]: ", this.sourceFor(mapType.values).source, " }"]), - _enumType => panic("We handled this above"), - unionType => { - if (!this._tsFlowOptions.declareUnions || nullableFromUnion(unionType) !== null) { - const children = Array.from(unionType.getChildren()).map(c => parenIfNeeded(this.sourceFor(c))); + (_classType) => panic("We handled this above"), + (mapType) => + singleWord([ + "{ [key: string]: ", + this.sourceFor(mapType.values).source, + " }", + ]), + (_enumType) => panic("We handled this above"), + (unionType) => { + if ( + !this._tsFlowOptions.declareUnions || + nullableFromUnion(unionType) !== null + ) { + const children = Array.from(unionType.getChildren()).map( + (c) => parenIfNeeded(this.sourceFor(c)), + ); return multiWord(" | ", ...children); - } else { - return singleWord(this.nameForNamedType(unionType)); } + + return singleWord(this.nameForNamedType(unionType)); }, - transformedStringType => { + (transformedStringType) => { if (transformedStringType.kind === "date-time") { return singleWord("Date"); } return singleWord("string"); - } + }, ); } @@ -91,18 +125,28 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { propertyName = modifySource(quotePropertyName, name); if (this._tsFlowOptions.readonly) { - propertyName = modifySource(_propertyName => "readonly " + _propertyName, propertyName); + propertyName = modifySource( + (_propertyName) => `readonly ${_propertyName}`, + propertyName, + ); } return [ [propertyName, p.isOptional ? "?" : "", ": "], - [this.sourceFor(t).source, ";"] + [this.sourceFor(t).source, ";"], ]; }); const additionalProperties = c.getAdditionalProperties(); if (additionalProperties) { - this.emitTable([["[property: string]", ": ", this.sourceFor(additionalProperties).source, ";"]]); + this.emitTable([ + [ + "[property: string]", + ": ", + this.sourceFor(additionalProperties).source, + ";", + ], + ]); } } @@ -118,7 +162,12 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { this.emitDescription(this.descriptionForType(u)); - const children = multiWord(" | ", ...Array.from(u.getChildren()).map(c => parenIfNeeded(this.sourceFor(c)))); + const children = multiWord( + " | ", + ...Array.from(u.getChildren()).map((c) => + parenIfNeeded(this.sourceFor(c)), + ), + ); this.emitLine("export type ", unionName, " = ", children.source, ";"); } @@ -138,7 +187,7 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { "leading-and-interposing", (c: ClassType, n: Name) => this.emitClass(c, n), (e, n) => this.emitEnum(e, n), - (u, n) => this.emitUnion(u, n) + (u, n) => this.emitUnion(u, n), ); } @@ -148,14 +197,30 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { } protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { - const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["function to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source]; + const jsonType = + this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return [ + "function to", + name, + "(json: ", + jsonType, + "): ", + this.sourceFor(t).source, + ]; } protected serializerFunctionLine(t: Type, name: Name): Sourcelike { const camelCaseName = modifySource(camelCase, name); - const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["function ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType]; + const returnType = + this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return [ + "function ", + camelCaseName, + "ToJson(value: ", + this.sourceFor(t).source, + "): ", + returnType, + ]; } protected get moduleLine(): string | undefined { @@ -163,7 +228,10 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { } protected get castFunctionLines(): [string, string] { - return ["function cast(val: any, typ: any): T", "function uncast(val: T, typ: any): any"]; + return [ + "function cast(val: any, typ: any): T", + "function uncast(val: T, typ: any): any", + ]; } protected get typeAnnotations(): JavaScriptTypeAnnotations { diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts index 42a79b325..82d272484 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts @@ -1,9 +1,9 @@ -import { type Name } from "../../Naming"; +import type { Name } from "../../Naming"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; -import { type ClassType, type EnumType, type Type } from "../../Type"; +import type { ClassType, EnumType, Type } from "../../Type"; import { isNamedType } from "../../Type/TypeUtils"; -import { type JavaScriptTypeAnnotations } from "../JavaScript"; +import type { JavaScriptTypeAnnotations } from "../JavaScript"; import { TypeScriptFlowBaseRenderer } from "./TypeScriptFlowBaseRenderer"; import { tsFlowTypeAnnotations } from "./utils"; @@ -14,14 +14,30 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { } protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { - const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["public static to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source]; + const jsonType = + this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return [ + "public static to", + name, + "(json: ", + jsonType, + "): ", + this.sourceFor(t).source, + ]; } protected serializerFunctionLine(t: Type, name: Name): Sourcelike { const camelCaseName = modifySource(camelCase, name); - const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; - return ["public static ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType]; + const returnType = + this._tsFlowOptions.rawType === "json" ? "string" : "any"; + return [ + "public static ", + camelCaseName, + "ToJson(value: ", + this.sourceFor(t).source, + "): ", + returnType, + ]; } protected get moduleLine(): string | undefined { @@ -43,9 +59,13 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { (_t, name) => { topLevelNames.push(", ", name); }, - isNamedType + isNamedType, + ); + this.emitLine( + "// import { Convert", + topLevelNames, + ' } from "./file";', ); - this.emitLine("// import { Convert", topLevelNames, ' } from "./file";'); } protected emitEnum(e: EnumType, enumName: Name): void { @@ -56,7 +76,7 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { if (this._tsFlowOptions.preferUnions) { let items = ""; - e.cases.forEach(item => { + e.cases.forEach((item) => { if (items === "") { items += `"${utf16StringEscape(item)}"`; return; @@ -82,7 +102,7 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { "", () => { this.emitClassBlockBody(c); - } + }, ); } } diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/index.ts b/packages/quicktype-core/src/language/TypeScriptFlow/index.ts index 681acaa34..42d51fa3f 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/index.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/index.ts @@ -1,3 +1,7 @@ export { FlowRenderer } from "./FlowRenderer"; export { TypeScriptRenderer } from "./TypeScriptRenderer"; -export { FlowTargetLanguage, TypeScriptTargetLanguage, tsFlowOptions } from "./language"; +export { + FlowTargetLanguage, + TypeScriptTargetLanguage, + tsFlowOptions, +} from "./language"; diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/language.ts b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts index 909fec0be..1a5bdde8d 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/language.ts @@ -1,9 +1,12 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { javaScriptOptions } from "../JavaScript"; import { FlowRenderer } from "./FlowRenderer"; @@ -11,25 +14,43 @@ import { TypeScriptRenderer } from "./TypeScriptRenderer"; export const tsFlowOptions = Object.assign({}, javaScriptOptions, { justTypes: new BooleanOption("just-types", "Interfaces only", false), - nicePropertyNames: new BooleanOption("nice-property-names", "Transform property names to be JavaScripty", false), - declareUnions: new BooleanOption("explicit-unions", "Explicitly name unions", false), - preferUnions: new BooleanOption("prefer-unions", "Use union type instead of enum", false), - preferTypes: new BooleanOption("prefer-types", "Use types instead of interfaces", false), + nicePropertyNames: new BooleanOption( + "nice-property-names", + "Transform property names to be JavaScripty", + false, + ), + declareUnions: new BooleanOption( + "explicit-unions", + "Explicitly name unions", + false, + ), + preferUnions: new BooleanOption( + "prefer-unions", + "Use union type instead of enum", + false, + ), + preferTypes: new BooleanOption( + "prefer-types", + "Use types instead of interfaces", + false, + ), preferConstValues: new BooleanOption( "prefer-const-values", "Use string instead of enum for string enums with single value", - false + false, ), - readonly: new BooleanOption("readonly", "Use readonly type members", false) + readonly: new BooleanOption("readonly", "Use readonly type members", false), }); export const typeScriptLanguageConfig = { displayName: "TypeScript", names: ["typescript", "ts", "tsx"], - extension: "ts" + extension: "ts", } as const; -export class TypeScriptTargetLanguage extends TargetLanguage { +export class TypeScriptTargetLanguage extends TargetLanguage< + typeof typeScriptLanguageConfig +> { public constructor() { super(typeScriptLanguageConfig); } @@ -39,7 +60,8 @@ export class TypeScriptTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("date-time", dateTimeType); @@ -54,18 +76,27 @@ export class TypeScriptTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): TypeScriptRenderer { + return new TypeScriptRenderer( + this, + renderContext, + getOptionValues(tsFlowOptions, untypedOptionValues), + ); } } export const flowLanguageConfig = { displayName: "Flow", names: ["flow"], - extension: "js" + extension: "js", } as const; -export class FlowTargetLanguage extends TargetLanguage { +export class FlowTargetLanguage extends TargetLanguage< + typeof flowLanguageConfig +> { public constructor() { super(flowLanguageConfig); } @@ -75,7 +106,8 @@ export class FlowTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("date-time", dateTimeType); @@ -90,7 +122,14 @@ export class FlowTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): FlowRenderer { + return new FlowRenderer( + this, + renderContext, + getOptionValues(tsFlowOptions, untypedOptionValues), + ); } } diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/utils.ts b/packages/quicktype-core/src/language/TypeScriptFlow/utils.ts index b15b7eb1d..0d01ca9cd 100644 --- a/packages/quicktype-core/src/language/TypeScriptFlow/utils.ts +++ b/packages/quicktype-core/src/language/TypeScriptFlow/utils.ts @@ -8,7 +8,7 @@ export const tsFlowTypeAnnotations = { anyMap: ": { [k: string]: any }", string: ": string", stringArray: ": string[]", - boolean: ": boolean" + boolean: ": boolean", }; export function quotePropertyName(original: string): string { diff --git a/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts index 7a6f8560a..bcd9aa4c8 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts @@ -2,9 +2,9 @@ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; -import { type RenderContext } from "../../Renderer"; -import { type OptionValues } from "../../RendererOptions"; -import { type Sourcelike } from "../../Source"; +import type { RenderContext } from "../../Renderer"; +import type { OptionValues } from "../../RendererOptions"; +import type { Sourcelike } from "../../Source"; import { AcronymStyleOptions, acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, @@ -14,10 +14,10 @@ import { isLetterOrUnderscore, splitIntoWords, stringEscape, - utf16StringEscape + utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; -import { type TargetLanguage } from "../../TargetLanguage"; +import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, @@ -25,18 +25,18 @@ import { type EnumType, ObjectType, SetOperationType, - type Type + type Type, } from "../../Type"; import { matchType } from "../../Type/TypeUtils"; import { legalizeName } from "../JavaScript/utils"; -import { type typeScriptZodOptions } from "./language"; +import type { typeScriptZodOptions } from "./language"; export class TypeScriptZodRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, - protected readonly _options: OptionValues + protected readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } @@ -56,27 +56,30 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", - isLetterOrUnderscore + isLetterOrUnderscore, ); } protected makeNamedTypeNamer(): Namer { - return funPrefixNamer("types", s => this.nameStyle(s, true)); + return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected makeUnionMemberNamer(): Namer { - return funPrefixNamer("properties", s => this.nameStyle(s, true)); + return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { - return funPrefixNamer("properties", s => this.nameStyle(s, true)); + return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected makeEnumCaseNamer(): Namer { - return funPrefixNamer("enum-cases", s => this.nameStyle(s, false)); + return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, false)); } - protected importStatement(lhs: Sourcelike, moduleName: Sourcelike): Sourcelike { + protected importStatement( + lhs: Sourcelike, + moduleName: Sourcelike, + ): Sourcelike { return ["import ", lhs, " from ", moduleName, ";"]; } @@ -90,36 +93,44 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { return p.isOptional ? [typeMap, ".optional()"] : typeMap; } - protected typeMapTypeFor(t: Type, required: boolean = true): Sourcelike { + protected typeMapTypeFor(t: Type, required = true): Sourcelike { if (["class", "object", "enum"].includes(t.kind)) { return [this.nameForNamedType(t), "Schema"]; } const match = matchType( t, - _anyType => "z.any()", - _nullType => "z.null()", - _boolType => "z.boolean()", - _integerType => "z.number()", - _doubleType => "z.number()", - _stringType => "z.string()", - arrayType => ["z.array(", this.typeMapTypeFor(arrayType.items, false), ")"], - _classType => panic("Should already be handled."), - _mapType => ["z.record(z.string(), ", this.typeMapTypeFor(_mapType.values, false), ")"], - _enumType => panic("Should already be handled."), - unionType => { - const children = Array.from(unionType.getChildren()).map((type: Type) => - this.typeMapTypeFor(type, false) + (_anyType) => "z.any()", + (_nullType) => "z.null()", + (_boolType) => "z.boolean()", + (_integerType) => "z.number()", + (_doubleType) => "z.number()", + (_stringType) => "z.string()", + (arrayType) => [ + "z.array(", + this.typeMapTypeFor(arrayType.items, false), + ")", + ], + (_classType) => panic("Should already be handled."), + (_mapType) => [ + "z.record(z.string(), ", + this.typeMapTypeFor(_mapType.values, false), + ")", + ], + (_enumType) => panic("Should already be handled."), + (unionType) => { + const children = Array.from(unionType.getChildren()).map( + (type: Type) => this.typeMapTypeFor(type, false), ); return ["z.union([", ...arrayIntercalate(", ", children), "])"]; }, - _transformedStringType => { + (_transformedStringType) => { if (_transformedStringType.kind === "date-time") { return "z.coerce.date()"; } return "z.string()"; - } + }, ); if (required) { @@ -134,12 +145,23 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { this.emitLine("\nexport const ", name, "Schema = ", "z.object({"); this.indent(() => { this.forEachClassProperty(t, "none", (_, jsonName, property) => { - this.emitLine(`"${utf16StringEscape(jsonName)}"`, ": ", this.typeMapTypeForProperty(property), ","); + this.emitLine( + `"${utf16StringEscape(jsonName)}"`, + ": ", + this.typeMapTypeForProperty(property), + ",", + ); }); }); this.emitLine("});"); if (!this._options.justSchema) { - this.emitLine("export type ", name, " = z.infer;"); + this.emitLine( + "export type ", + name, + " = z.infer;", + ); } } @@ -150,11 +172,17 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { this.indent(() => this.forEachEnumCase(e, "none", (_, jsonName) => { this.emitLine('"', stringEscape(jsonName), '",'); - }) + }), ); this.emitLine("]);"); if (!this._options.justSchema) { - this.emitLine("export type ", enumName, " = z.infer;"); + this.emitLine( + "export type ", + enumName, + " = z.infer;", + ); } } @@ -166,15 +194,19 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { * these are ignored. */ private static extractUnderlyingTyperefs(type: Type): number[] { - let typeRefs: number[] = []; + const typeRefs: number[] = []; // Ignore enums and primitives - if (!type.isPrimitive() && type.kind != "enum") { + if (!type.isPrimitive() && type.kind !== "enum") { // need to extract constituent types for unions and intersections (which both extend SetOperationType) // and can ignore the union/intersection itself if (type instanceof SetOperationType) { - (type as SetOperationType).members.forEach(member => { + (type as SetOperationType).members.forEach((member) => { // recurse as the underlying type could itself be a union, instersection or array etc. - typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(member)); + typeRefs.push( + ...TypeScriptZodRenderer.extractUnderlyingTyperefs( + member, + ), + ); }); } @@ -183,7 +215,11 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { const addType = (type as ObjectType).getAdditionalProperties(); if (addType) { // recurse as the underlying type could itself be a union, instersection or array etc. - typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(addType)); + typeRefs.push( + ...TypeScriptZodRenderer.extractUnderlyingTyperefs( + addType, + ), + ); } } @@ -192,7 +228,11 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { const itemsType = (type as ArrayType).items; if (itemsType) { // recurse as the underlying type could itself be a union, instersection or array etc. - typeRefs.push(...TypeScriptZodRenderer.extractUnderlyingTyperefs(itemsType)); + typeRefs.push( + ...TypeScriptZodRenderer.extractUnderlyingTyperefs( + itemsType, + ), + ); } } @@ -208,9 +248,12 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { protected emitSchemas(): void { this.ensureBlankLine(); - this.forEachEnum("leading-and-interposing", (u: EnumType, enumName: Name) => { - this.emitEnum(u, enumName); - }); + this.forEachEnum( + "leading-and-interposing", + (u: EnumType, enumName: Name) => { + this.emitEnum(u, enumName); + }, + ); // All children must be defined before this type to avoid forward references in generated code // Build a model that will tell us if a referenced type has been defined then make multiple @@ -231,8 +274,10 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { const children = type.getChildren(); let childTypeRefs: number[] = []; - children.forEach(child => { - childTypeRefs = childTypeRefs.concat(TypeScriptZodRenderer.extractUnderlyingTyperefs(child)); + children.forEach((child) => { + childTypeRefs = childTypeRefs.concat( + TypeScriptZodRenderer.extractUnderlyingTyperefs(child), + ); }); mapChildTypeRefs.push(childTypeRefs); }); @@ -249,12 +294,12 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { const MAX_PASSES = 999; let passNum = 0; do { - indices.forEach(index => { + indices.forEach((index) => { // must be behind all these children const childTypeRefs = mapChildTypeRefs[index]; let foundAllChildren = true; - childTypeRefs.forEach(childRef => { + childTypeRefs.forEach((childRef) => { // defensive: first check if there is a definition for the referenced type (there should be) if (mapTypeRef.includes(childRef)) { let found = false; @@ -274,7 +319,8 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { foundAllChildren = foundAllChildren && found; } else { console.error( - "A child type reference was not found amongst all Object definitions! TypeRef: " + childRef + "A child type reference was not found amongst all Object definitions! TypeRef: " + + childRef, ); } }); @@ -295,13 +341,19 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { // giving up order.push(...deferredIndices); console.warn( - "Exceeded maximum number of passes when determining output order, output may contain forward references" + "Exceeded maximum number of passes when determining output order, output may contain forward references", ); } } while (indices.length > 0 && passNum <= MAX_PASSES); // now emit ordered source - order.forEach(i => this.emitGatheredSource(this.gatherSource(() => this.emitObject(mapName[i], mapType[i])))); + order.forEach((i) => + this.emitGatheredSource( + this.gatherSource(() => + this.emitObject(mapName[i], mapType[i]), + ), + ), + ); } protected emitSourceStructure(): void { diff --git a/packages/quicktype-core/src/language/TypeScriptZod/language.ts b/packages/quicktype-core/src/language/TypeScriptZod/language.ts index 88e2a9a89..37e5a2e7f 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod/language.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod/language.ts @@ -1,23 +1,28 @@ -import { type RenderContext } from "../../Renderer"; +import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; -import { type PrimitiveStringTypeKind, type TransformedStringTypeKind } from "../../Type"; -import { type StringTypeMapping } from "../../Type/TypeBuilderUtils"; -import { type FixMeOptionsType } from "../../types"; +import type { + PrimitiveStringTypeKind, + TransformedStringTypeKind, +} from "../../Type"; +import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; +import type { LanguageName, RendererOptions } from "../../types"; import { TypeScriptZodRenderer } from "./TypeScriptZodRenderer"; export const typeScriptZodOptions = { - justSchema: new BooleanOption("just-schema", "Schema only", false) + justSchema: new BooleanOption("just-schema", "Schema only", false), }; export const typeScriptZodLanguageConfig = { displayName: "TypeScript Zod", names: ["typescript-zod"], - extension: "ts" + extension: "ts", } as const; -export class TypeScriptZodTargetLanguage extends TargetLanguage { +export class TypeScriptZodTargetLanguage extends TargetLanguage< + typeof typeScriptZodLanguageConfig +> { public constructor() { super(typeScriptZodLanguageConfig); } @@ -27,7 +32,8 @@ export class TypeScriptZodTargetLanguage extends TargetLanguage = new Map(); + const mapping: Map = + new Map(); const dateTimeType = "date-time"; mapping.set("date-time", dateTimeType); return mapping; @@ -37,11 +43,14 @@ export class TypeScriptZodTargetLanguage extends TargetLanguage( + renderContext: RenderContext, + untypedOptionValues: RendererOptions, + ): TypeScriptZodRenderer { return new TypeScriptZodRenderer( this, renderContext, - getOptionValues(typeScriptZodOptions, untypedOptionValues) + getOptionValues(typeScriptZodOptions, untypedOptionValues), ); } } diff --git a/packages/quicktype-core/src/language/index.ts b/packages/quicktype-core/src/language/index.ts index ee9515c3b..38bac8e41 100644 --- a/packages/quicktype-core/src/language/index.ts +++ b/packages/quicktype-core/src/language/index.ts @@ -25,6 +25,10 @@ export * from "./TypeScriptFlow"; export * from "./TypeScriptEffectSchema"; export * from "./TypeScriptZod"; -export { all as defaultTargetLanguages, languageNamed, isLanguageName } from "./All"; +export { + all as defaultTargetLanguages, + languageNamed, + isLanguageName, +} from "./All"; export type { LanguageName, LanguageDisplayName } from "./types"; export type { RendererOptions } from "./options.types"; diff --git a/packages/quicktype-core/src/language/options.types.ts b/packages/quicktype-core/src/language/options.types.ts index c0addc16a..d3fa7d5aa 100644 --- a/packages/quicktype-core/src/language/options.types.ts +++ b/packages/quicktype-core/src/language/options.types.ts @@ -3,13 +3,18 @@ import type { OptionMap } from "../RendererOptions"; import type { LanguageName, LanguageNameMap } from "./types"; export type LanguageRawOptionMap = Readonly<{ - [Lang in keyof LanguageNameMap]: ReturnType; + [Lang in keyof LanguageNameMap]: ReturnType< + LanguageNameMap[Lang]["getOptions"] + >; }>; export type LanguageOptionMap = Readonly<{ [Lang in keyof LanguageRawOptionMap]: OptionMap; }>; -export type RendererOptions = { +export type RendererOptions< + Lang extends LanguageName = LanguageName, + Options = LanguageOptionMap[Lang], +> = { -readonly [K in keyof Options]: Options[K]; }; diff --git a/packages/quicktype-core/src/language/types.ts b/packages/quicktype-core/src/language/types.ts index 1a685e627..46af973bc 100644 --- a/packages/quicktype-core/src/language/types.ts +++ b/packages/quicktype-core/src/language/types.ts @@ -1,11 +1,14 @@ -import { type TargetLanguage } from "../TargetLanguage"; +import type { TargetLanguage } from "../TargetLanguage"; -import { type all } from "./All"; +import type { all } from "./All"; type AllLanguages = (typeof all)[number]; -export type LanguageDisplayName = Language["displayName"]; -export type LanguageName = Language["names"][number]; +export type LanguageDisplayName< + Language extends TargetLanguage = AllLanguages, +> = Language["displayName"]; +export type LanguageName = + Language["names"][number]; export type LanguageDisplayNameMap = { [Language in AllLanguages as LanguageDisplayName]: Language; diff --git a/packages/quicktype-core/src/rewrites/CombineClasses.ts b/packages/quicktype-core/src/rewrites/CombineClasses.ts index 30d58ebfc..5c9562a85 100644 --- a/packages/quicktype-core/src/rewrites/CombineClasses.ts +++ b/packages/quicktype-core/src/rewrites/CombineClasses.ts @@ -1,10 +1,18 @@ -import { type GraphRewriteBuilder } from "../GraphRewriting"; -import { type RunContext } from "../Run"; +import type { GraphRewriteBuilder } from "../GraphRewriting"; +import type { RunContext } from "../Run"; import { assert, panic } from "../support/Support"; -import { type ClassProperty, ClassType, type Type, setOperationCasesEqual } from "../Type/Type"; -import { type TypeGraph } from "../Type/TypeGraph"; -import { type TypeRef } from "../Type/TypeRef"; -import { combineTypeAttributesOfTypes, nonNullTypeCases } from "../Type/TypeUtils"; +import { + type ClassProperty, + ClassType, + type Type, + setOperationCasesEqual, +} from "../Type/Type"; +import type { TypeGraph } from "../Type/TypeGraph"; +import type { TypeRef } from "../Type/TypeRef"; +import { + combineTypeAttributesOfTypes, + nonNullTypeCases, +} from "../Type/TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; const REQUIRED_OVERLAP = 3 / 4; @@ -17,11 +25,20 @@ interface Clique { // FIXME: Allow some type combinations to unify, like different enums, // enums with strings, integers with doubles, maps with objects of // the correct type. -function typeSetsCanBeCombined(s1: Iterable, s2: Iterable): boolean { - return setOperationCasesEqual(s1, s2, true, (a, b) => a.structurallyCompatible(b, true)); +function typeSetsCanBeCombined( + s1: Iterable, + s2: Iterable, +): boolean { + return setOperationCasesEqual(s1, s2, true, (a, b) => + a.structurallyCompatible(b, true), + ); } -function canBeCombined(c1: ClassType, c2: ClassType, onlyWithSameProperties: boolean): boolean { +function canBeCombined( + c1: ClassType, + c2: ClassType, + onlyWithSameProperties: boolean, +): boolean { const p1 = c1.getProperties(); const p2 = c2.getProperties(); if (onlyWithSameProperties) { @@ -29,7 +46,10 @@ function canBeCombined(c1: ClassType, c2: ClassType, onlyWithSameProperties: boo return false; } } else { - if (p1.size < p2.size * REQUIRED_OVERLAP || p2.size < p1.size * REQUIRED_OVERLAP) { + if ( + p1.size < p2.size * REQUIRED_OVERLAP || + p2.size < p1.size * REQUIRED_OVERLAP + ) { return false; } } @@ -66,15 +86,19 @@ function canBeCombined(c1: ClassType, c2: ClassType, onlyWithSameProperties: boo if (faults > maxFaults) return false; for (const name of commonProperties) { - let ts = smaller.get(name); - let tl = larger.get(name); + const ts = smaller.get(name); + const tl = larger.get(name); if (ts === undefined || tl === undefined) { return panic(`Both classes should have property ${name}`); } const tsCases = nonNullTypeCases(ts.type); const tlCases = nonNullTypeCases(tl.type); - if (tsCases.size > 0 && tlCases.size > 0 && !typeSetsCanBeCombined(tsCases, tlCases)) { + if ( + tsCases.size > 0 && + tlCases.size > 0 && + !typeSetsCanBeCombined(tsCases, tlCases) + ) { return false; } } @@ -82,7 +106,11 @@ function canBeCombined(c1: ClassType, c2: ClassType, onlyWithSameProperties: boo return true; } -function tryAddToClique(c: ClassType, clique: Clique, onlyWithSameProperties: boolean): boolean { +function tryAddToClique( + c: ClassType, + clique: Clique, + onlyWithSameProperties: boolean, +): boolean { for (const prototype of clique.prototypes) { if (prototype.structurallyCompatible(c)) { clique.members.push(c); @@ -104,10 +132,12 @@ function tryAddToClique(c: ClassType, clique: Clique, onlyWithSameProperties: bo function findSimilarityCliques( graph: TypeGraph, onlyWithSameProperties: boolean, - includeFixedClasses: boolean + includeFixedClasses: boolean, ): ClassType[][] { - const classCandidates = Array.from(graph.allNamedTypesSeparated().objects).filter( - o => o instanceof ClassType && (includeFixedClasses || !o.isFixed) + const classCandidates = Array.from( + graph.allNamedTypesSeparated().objects, + ).filter( + (o) => o instanceof ClassType && (includeFixedClasses || !o.isFixed), ) as ClassType[]; const cliques: Clique[] = []; @@ -134,7 +164,9 @@ function findSimilarityCliques( cliques[cliqueIndex] = tmp; } - return cliques.map(clique => clique.members).filter(cl => cl.length > 1); + return cliques + .map((clique) => clique.members) + .filter((cl) => cl.length > 1); } export function combineClasses( @@ -143,16 +175,16 @@ export function combineClasses( alphabetizeProperties: boolean, conflateNumbers: boolean, onlyWithSameProperties: boolean, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): TypeGraph { const cliques = ctx.time(" find similarity cliques", () => - findSimilarityCliques(graph, onlyWithSameProperties, false) + findSimilarityCliques(graph, onlyWithSameProperties, false), ); function makeCliqueClass( clique: ReadonlySet, builder: GraphRewriteBuilder, - forwardingRef: TypeRef + forwardingRef: TypeRef, ): TypeRef { assert(clique.size > 0, "Clique can't be empty"); const attributes = combineTypeAttributesOfTypes("union", clique); @@ -162,7 +194,7 @@ export function combineClasses( builder, unionBuilderForUnification(builder, false, false, conflateNumbers), conflateNumbers, - forwardingRef + forwardingRef, ); } @@ -172,6 +204,6 @@ export function combineClasses( alphabetizeProperties, cliques, debugPrintReconstitution, - makeCliqueClass + makeCliqueClass, ); } diff --git a/packages/quicktype-core/src/rewrites/ExpandStrings.ts b/packages/quicktype-core/src/rewrites/ExpandStrings.ts index a1ca39850..47aab269a 100644 --- a/packages/quicktype-core/src/rewrites/ExpandStrings.ts +++ b/packages/quicktype-core/src/rewrites/ExpandStrings.ts @@ -6,17 +6,17 @@ import { mapFilter, setIntersect, setIsSuperset, - setUnion + setUnion, } from "collection-utils"; import { StringTypes } from "../attributes/StringTypes"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; -import { type GraphRewriteBuilder } from "../GraphRewriting"; -import { type RunContext } from "../Run"; +import type { GraphRewriteBuilder } from "../GraphRewriting"; +import type { RunContext } from "../Run"; import { assert, defined } from "../support/Support"; -import { type PrimitiveType } from "../Type/Type"; -import { type TypeGraph } from "../Type/TypeGraph"; -import { type TypeRef } from "../Type/TypeRef"; +import type { PrimitiveType } from "../Type/Type"; +import type { TypeGraph } from "../Type/TypeGraph"; +import type { TypeRef } from "../Type/TypeRef"; import { stringTypesForType } from "../Type/TypeUtils"; const MIN_LENGTH_FOR_ENUM = 10; @@ -32,15 +32,19 @@ interface EnumInfo { } function isOwnEnum({ numValues, cases }: EnumInfo): boolean { - return numValues >= MIN_LENGTH_FOR_ENUM && cases.size < Math.sqrt(numValues); + return ( + numValues >= MIN_LENGTH_FOR_ENUM && cases.size < Math.sqrt(numValues) + ); } function enumCasesOverlap( newCases: ReadonlySet, existingCases: ReadonlySet, - newAreSubordinate: boolean + newAreSubordinate: boolean, ): boolean { - const smaller = newAreSubordinate ? newCases.size : Math.min(newCases.size, existingCases.size); + const smaller = newAreSubordinate + ? newCases.size + : Math.min(newCases.size, existingCases.size); const overlap = setIntersect(newCases, existingCases).size; return overlap >= smaller * REQUIRED_OVERLAP; } @@ -49,15 +53,22 @@ function isAlwaysEmptyString(cases: string[]): boolean { return cases.length === 1 && cases[0] === ""; } -export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: EnumInference): TypeGraph { +export function expandStrings( + ctx: RunContext, + graph: TypeGraph, + inference: EnumInference, +): TypeGraph { const stringTypeMapping = ctx.stringTypeMapping; const allStrings = Array.from(graph.allTypesUnordered()).filter( - t => t.kind === "string" && stringTypesForType(t as PrimitiveType).isRestricted + (t) => + t.kind === "string" && + stringTypesForType(t as PrimitiveType).isRestricted, ) as PrimitiveType[]; function makeEnumInfo(t: PrimitiveType): EnumInfo | undefined { const stringTypes = stringTypesForType(t); - const mappedStringTypes = stringTypes.applyStringTypeMapping(stringTypeMapping); + const mappedStringTypes = + stringTypes.applyStringTypeMapping(stringTypeMapping); if (!mappedStringTypes.isRestricted) return undefined; const cases = defined(mappedStringTypes.cases); @@ -69,7 +80,10 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum const keys = Array.from(cases.keys()); if (isAlwaysEmptyString(keys)) return undefined; - const someCaseIsNotNumber = iterableSome(keys, key => /^[-+]?[0-9]+(\.[0-9]+)?$/.test(key) === false); + const someCaseIsNotNumber = iterableSome( + keys, + (key) => /^[-+]?[0-9]+(\.[0-9]+)?$/.test(key) === false, + ); if (!someCaseIsNotNumber) return undefined; } @@ -88,8 +102,13 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum // FIXME: refactor this // eslint-disable-next-line no-inner-declarations - function findOverlap(newCases: ReadonlySet, newAreSubordinate: boolean): number { - return enumSets.findIndex(s => enumCasesOverlap(newCases, s, newAreSubordinate)); + function findOverlap( + newCases: ReadonlySet, + newAreSubordinate: boolean, + ): number { + return enumSets.findIndex((s) => + enumCasesOverlap(newCases, s, newAreSubordinate), + ); } // First, make case sets for all the enums that stand on their own. If @@ -145,16 +164,24 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum function replaceString( group: ReadonlySet, builder: GraphRewriteBuilder, - forwardingRef: TypeRef + forwardingRef: TypeRef, ): TypeRef { assert(group.size === 1); const t = defined(iterableFirst(group)); const stringTypes = stringTypesForType(t); - const attributes = mapFilter(t.getAttributes(), a => a !== stringTypes); - const mappedStringTypes = stringTypes.applyStringTypeMapping(stringTypeMapping); + const attributes = mapFilter( + t.getAttributes(), + (a) => a !== stringTypes, + ); + const mappedStringTypes = + stringTypes.applyStringTypeMapping(stringTypeMapping); if (!mappedStringTypes.isRestricted) { - return builder.getStringType(attributes, StringTypes.unrestricted, forwardingRef); + return builder.getStringType( + attributes, + StringTypes.unrestricted, + forwardingRef, + ); } const setMatches = inference === "all" ? areEqual : setIsSuperset; @@ -163,11 +190,19 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum const cases = defined(mappedStringTypes.cases); if (cases.size > 0) { const keys = new Set(cases.keys()); - const fullCases = enumSets.find(s => setMatches(s, keys)); - if (inference !== "none" && !isAlwaysEmptyString(Array.from(keys)) && fullCases !== undefined) { + const fullCases = enumSets.find((s) => setMatches(s, keys)); + if ( + inference !== "none" && + !isAlwaysEmptyString(Array.from(keys)) && + fullCases !== undefined + ) { types.push(builder.getEnumType(emptyTypeAttributes, fullCases)); } else { - return builder.getStringType(attributes, StringTypes.unrestricted, forwardingRef); + return builder.getStringType( + attributes, + StringTypes.unrestricted, + forwardingRef, + ); } } @@ -183,7 +218,11 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum return builder.getPrimitiveType(kind, attributes, forwardingRef); } - types.push(...Array.from(transformations).map(k => builder.getPrimitiveType(k))); + types.push( + ...Array.from(transformations).map((k) => + builder.getPrimitiveType(k), + ), + ); assert(types.length > 0, "We got an empty string type"); return builder.getUnionType(attributes, new Set(types), forwardingRef); } @@ -192,8 +231,8 @@ export function expandStrings(ctx: RunContext, graph: TypeGraph, inference: Enum "expand strings", stringTypeMapping, false, - allStrings.map(t => [t]), + allStrings.map((t) => [t]), ctx.debugPrintReconstitution, - replaceString + replaceString, ); } diff --git a/packages/quicktype-core/src/rewrites/FlattenStrings.ts b/packages/quicktype-core/src/rewrites/FlattenStrings.ts index 12299a07f..077ba2de1 100644 --- a/packages/quicktype-core/src/rewrites/FlattenStrings.ts +++ b/packages/quicktype-core/src/rewrites/FlattenStrings.ts @@ -1,13 +1,16 @@ import { iterableFirst } from "collection-utils"; import { combineTypeAttributes } from "../attributes/TypeAttributes"; -import { type GraphRewriteBuilder } from "../GraphRewriting"; +import type { GraphRewriteBuilder } from "../GraphRewriting"; import { assert, defined } from "../support/Support"; -import { type PrimitiveType, type Type, type UnionType } from "../Type/Type"; -import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; -import { type TypeGraph } from "../Type/TypeGraph"; -import { type TypeRef } from "../Type/TypeRef"; -import { combineTypeAttributesOfTypes, stringTypesForType } from "../Type/TypeUtils"; +import type { PrimitiveType, Type, UnionType } from "../Type/Type"; +import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; +import type { TypeGraph } from "../Type/TypeGraph"; +import type { TypeRef } from "../Type/TypeRef"; +import { + combineTypeAttributesOfTypes, + stringTypesForType, +} from "../Type/TypeUtils"; // A union needs replacing if it contains more than one string type, one of them being // a basic string type. @@ -18,7 +21,7 @@ function unionNeedsReplacing(u: UnionType): ReadonlySet | undefined { if (stringType === undefined) return undefined; assert( !stringTypesForType(stringType as PrimitiveType).isRestricted, - "We must only flatten strings if we have no restriced strings" + "We must only flatten strings if we have no restriced strings", ); return stringMembers; } @@ -27,12 +30,15 @@ function unionNeedsReplacing(u: UnionType): ReadonlySet | undefined { function replaceUnion( group: ReadonlySet, builder: GraphRewriteBuilder, - forwardingRef: TypeRef + forwardingRef: TypeRef, ): TypeRef { assert(group.size === 1); const u = defined(iterableFirst(group)); const stringMembers = defined(unionNeedsReplacing(u)); - const stringAttributes = combineTypeAttributesOfTypes("union", stringMembers); + const stringAttributes = combineTypeAttributesOfTypes( + "union", + stringMembers, + ); const types: TypeRef[] = []; for (const t of u.members) { if (stringMembers.has(t)) continue; @@ -43,29 +49,33 @@ function replaceUnion( return builder.getStringType( combineTypeAttributes("union", stringAttributes, u.getAttributes()), undefined, - forwardingRef + forwardingRef, ); } types.push(builder.getStringType(stringAttributes, undefined)); - return builder.getUnionType(u.getAttributes(), new Set(types), forwardingRef); + return builder.getUnionType( + u.getAttributes(), + new Set(types), + forwardingRef, + ); } export function flattenStrings( graph: TypeGraph, stringTypeMapping: StringTypeMapping, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): TypeGraph { const allUnions = graph.allNamedTypesSeparated().unions; const unionsToReplace = Array.from(allUnions) .filter(unionNeedsReplacing) - .map(t => [t]); + .map((t) => [t]); return graph.rewrite( "flatten strings", stringTypeMapping, false, unionsToReplace, debugPrintReconstitution, - replaceUnion + replaceUnion, ); } diff --git a/packages/quicktype-core/src/rewrites/FlattenUnions.ts b/packages/quicktype-core/src/rewrites/FlattenUnions.ts index fe78aa6fc..73e0df28a 100644 --- a/packages/quicktype-core/src/rewrites/FlattenUnions.ts +++ b/packages/quicktype-core/src/rewrites/FlattenUnions.ts @@ -1,12 +1,12 @@ import { iterableSome, setFilter } from "collection-utils"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; -import { type GraphRewriteBuilder } from "../GraphRewriting"; +import type { GraphRewriteBuilder } from "../GraphRewriting"; import { messageAssert } from "../Messages"; import { assert } from "../support/Support"; import { IntersectionType, type Type, UnionType } from "../Type/Type"; -import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; -import { type TypeGraph } from "../Type/TypeGraph"; +import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; +import type { TypeGraph } from "../Type/TypeGraph"; import { type TypeRef, derefTypeRef } from "../Type/TypeRef"; import { makeGroupsToFlatten } from "../Type/TypeUtils"; import { UnifyUnionBuilder, unifyTypes } from "../UnifyClasses"; @@ -16,30 +16,58 @@ export function flattenUnions( stringTypeMapping: StringTypeMapping, conflateNumbers: boolean, makeObjectTypes: boolean, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): [TypeGraph, boolean] { let needsRepeat = false; - function replace(types: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef): TypeRef { - const unionBuilder = new UnifyUnionBuilder(builder, makeObjectTypes, true, trefs => { - assert(trefs.length > 0, "Must have at least one type to build union"); - trefs = trefs.map(tref => builder.reconstituteType(derefTypeRef(tref, graph))); - if (trefs.length === 1) { - return trefs[0]; - } + function replace( + types: ReadonlySet, + builder: GraphRewriteBuilder, + forwardingRef: TypeRef, + ): TypeRef { + const unionBuilder = new UnifyUnionBuilder( + builder, + makeObjectTypes, + true, + (trefs) => { + assert( + trefs.length > 0, + "Must have at least one type to build union", + ); + trefs = trefs.map((tref) => + builder.reconstituteType(derefTypeRef(tref, graph)), + ); + if (trefs.length === 1) { + return trefs[0]; + } - needsRepeat = true; - return builder.getUnionType(emptyTypeAttributes, new Set(trefs)); - }); - return unifyTypes(types, emptyTypeAttributes, builder, unionBuilder, conflateNumbers, forwardingRef); + needsRepeat = true; + return builder.getUnionType( + emptyTypeAttributes, + new Set(trefs), + ); + }, + ); + return unifyTypes( + types, + emptyTypeAttributes, + builder, + unionBuilder, + conflateNumbers, + forwardingRef, + ); } - const allUnions = setFilter(graph.allTypesUnordered(), t => t instanceof UnionType) as Set; - const nonCanonicalUnions = setFilter(allUnions, u => !u.isCanonical); + const allUnions = setFilter( + graph.allTypesUnordered(), + (t) => t instanceof UnionType, + ) as Set; + const nonCanonicalUnions = setFilter(allUnions, (u) => !u.isCanonical); let foundIntersection = false; - const groups = makeGroupsToFlatten(nonCanonicalUnions, members => { + const groups = makeGroupsToFlatten(nonCanonicalUnions, (members) => { messageAssert(members.size > 0, "IRNoEmptyUnions", {}); - if (!iterableSome(members, m => m instanceof IntersectionType)) return true; + if (!iterableSome(members, (m) => m instanceof IntersectionType)) + return true; // FIXME: This is stupid. `flattenUnions` returns true when no more union // flattening is necessary, but `resolveIntersections` can introduce new @@ -51,7 +79,14 @@ export function flattenUnions( foundIntersection = true; return false; }); - graph = graph.rewrite("flatten unions", stringTypeMapping, false, groups, debugPrintReconstitution, replace); + graph = graph.rewrite( + "flatten unions", + stringTypeMapping, + false, + groups, + debugPrintReconstitution, + replace, + ); // console.log(`flattened ${nonCanonicalUnions.size} of ${unions.size} unions`); return [graph, !needsRepeat && !foundIntersection]; diff --git a/packages/quicktype-core/src/rewrites/InferMaps.ts b/packages/quicktype-core/src/rewrites/InferMaps.ts index 5949a9e03..db81aefb1 100644 --- a/packages/quicktype-core/src/rewrites/InferMaps.ts +++ b/packages/quicktype-core/src/rewrites/InferMaps.ts @@ -1,12 +1,18 @@ import { iterableEvery, iterableFirst, setMap } from "collection-utils"; -import { type GraphRewriteBuilder } from "../GraphRewriting"; +import type { GraphRewriteBuilder } from "../GraphRewriting"; import { type MarkovChain, evaluate, load } from "../MarkovChain"; import { defined, panic } from "../support/Support"; -import { type ClassProperty, ClassType, type Type, isPrimitiveStringTypeKind, setOperationCasesEqual } from "../Type"; -import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; -import { type TypeGraph } from "../Type/TypeGraph"; -import { type TypeRef } from "../Type/TypeRef"; +import { + type ClassProperty, + ClassType, + type Type, + isPrimitiveStringTypeKind, + setOperationCasesEqual, +} from "../Type"; +import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; +import type { TypeGraph } from "../Type/TypeGraph"; +import type { TypeRef } from "../Type/TypeRef"; import { removeNullFromType } from "../Type/TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; @@ -23,7 +29,9 @@ function nameProbability(name: string): number { return evaluate(markovChain, name); } -function shouldBeMap(properties: ReadonlyMap): ReadonlySet | undefined { +function shouldBeMap( + properties: ReadonlyMap, +): ReadonlySet | undefined { // Only classes with a certain number of properties are inferred // as maps. const numProperties = properties.size; @@ -31,15 +39,20 @@ function shouldBeMap(properties: ReadonlyMap): ReadonlySe // If all property names are digit-only, we always make a map, no // questions asked. - if (iterableEvery(properties.keys(), n => /^[0-9]+$/.test(n))) { - return setMap(properties.values(), cp => cp.type); + if (iterableEvery(properties.keys(), (n) => /^[0-9]+$/.test(n))) { + return setMap(properties.values(), (cp) => cp.type); } // If all properties are strings or null then an object must have at least // `stringMapSizeThreshold` to qualify as a map. if ( numProperties < stringMapSizeThreshold && - iterableEvery(properties.values(), cp => isPrimitiveStringTypeKind(cp.type.kind) || cp.type.kind === "null") + iterableEvery( + properties.values(), + (cp) => + isPrimitiveStringTypeKind(cp.type.kind) || + cp.type.kind === "null", + ) ) { return undefined; } @@ -64,7 +77,9 @@ function shouldBeMap(properties: ReadonlyMap): ReadonlySe // trigger-happy. const exponent = 5; const scale = Math.pow(22, exponent); - const limit = Math.pow(numProperties + 2, exponent) / scale + (0.0025 - Math.pow(3, exponent) / scale); + const limit = + Math.pow(numProperties + 2, exponent) / scale + + (0.0025 - Math.pow(3, exponent) / scale); if (probability > limit) return undefined; } @@ -88,7 +103,14 @@ function shouldBeMap(properties: ReadonlyMap): ReadonlySe if (firstNonNullCases !== undefined) { // The set of non-null cases for all other properties must // be the the same, otherwise we won't infer a map. - if (!setOperationCasesEqual(nn, firstNonNullCases, true, (a, b) => a.structurallyCompatible(b, true))) { + if ( + !setOperationCasesEqual( + nn, + firstNonNullCases, + true, + (a, b) => a.structurallyCompatible(b, true), + ) + ) { canBeMap = false; break; } @@ -111,19 +133,21 @@ export function inferMaps( graph: TypeGraph, stringTypeMapping: StringTypeMapping, conflateNumbers: boolean, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): TypeGraph { function replaceClass( setOfOneClass: ReadonlySet, builder: GraphRewriteBuilder, - forwardingRef: TypeRef + forwardingRef: TypeRef, ): TypeRef { const c = defined(iterableFirst(setOfOneClass)); const properties = c.getProperties(); const shouldBe = shouldBeMap(properties); if (shouldBe === undefined) { - return panic(`We shouldn't be replacing class ${c.getCombinedName()} with a map`); + return panic( + `We shouldn't be replacing class ${c.getCombinedName()} with a map`, + ); } // Now reconstitute all the types in the new graph. TypeGraphs are @@ -138,14 +162,21 @@ export function inferMaps( shouldBe, c.getAttributes(), builder, - unionBuilderForUnification(builder, false, false, conflateNumbers), - conflateNumbers + unionBuilderForUnification( + builder, + false, + false, + conflateNumbers, + ), + conflateNumbers, ), - forwardingRef + forwardingRef, ); } - const classesToReplace = Array.from(graph.allNamedTypesSeparated().objects).filter(o => { + const classesToReplace = Array.from( + graph.allNamedTypesSeparated().objects, + ).filter((o) => { if (!(o instanceof ClassType)) return false; return !o.isFixed && shouldBeMap(o.getProperties()) !== undefined; }) as ClassType[]; @@ -153,8 +184,8 @@ export function inferMaps( "infer maps", stringTypeMapping, false, - classesToReplace.map(c => [c]), + classesToReplace.map((c) => [c]), debugPrintReconstitution, - replaceClass + replaceClass, ); } diff --git a/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts b/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts index a4ad5c063..d1aadc06d 100644 --- a/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts +++ b/packages/quicktype-core/src/rewrites/ReplaceObjectType.ts @@ -1,24 +1,24 @@ import { iterableFirst, mapMap, setFilter, setMap } from "collection-utils"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; -import { type GraphRewriteBuilder } from "../GraphRewriting"; +import type { GraphRewriteBuilder } from "../GraphRewriting"; import { defined } from "../support/Support"; -import { type ClassProperty, type ObjectType } from "../Type/Type"; -import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; -import { type TypeGraph } from "../Type/TypeGraph"; -import { type TypeRef } from "../Type/TypeRef"; +import type { ClassProperty, ObjectType } from "../Type/Type"; +import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; +import type { TypeGraph } from "../Type/TypeGraph"; +import type { TypeRef } from "../Type/TypeRef"; export function replaceObjectType( graph: TypeGraph, stringTypeMapping: StringTypeMapping, _conflateNumbers: boolean, leaveFullObjects: boolean, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): TypeGraph { function replace( setOfOneType: ReadonlySet, builder: GraphRewriteBuilder, - forwardingRef: TypeRef + forwardingRef: TypeRef, ): TypeRef { const o = defined(iterableFirst(setOfOneType)); const attributes = o.getAttributes(); @@ -26,13 +26,21 @@ export function replaceObjectType( const additionalProperties = o.getAdditionalProperties(); function reconstituteProperties(): ReadonlyMap { - return mapMap(properties, cp => - builder.makeClassProperty(builder.reconstituteTypeRef(cp.typeRef), cp.isOptional) + return mapMap(properties, (cp) => + builder.makeClassProperty( + builder.reconstituteTypeRef(cp.typeRef), + cp.isOptional, + ), ); } function makeClass(): TypeRef { - return builder.getUniqueClassType(attributes, true, reconstituteProperties(), forwardingRef); + return builder.getUniqueClassType( + attributes, + true, + reconstituteProperties(), + forwardingRef, + ); } function reconstituteAdditionalProperties(): TypeRef { @@ -44,7 +52,11 @@ export function replaceObjectType( } if (properties.size === 0) { - return builder.getMapType(attributes, reconstituteAdditionalProperties(), forwardingRef); + return builder.getMapType( + attributes, + reconstituteAdditionalProperties(), + forwardingRef, + ); } if (additionalProperties.kind === "any") { @@ -54,11 +66,20 @@ export function replaceObjectType( } // FIXME: Warn that we're losing class semantics. - const propertyTypes = setMap(properties.values(), cp => cp.type).add(additionalProperties); - let union = builder.lookupTypeRefs(Array.from(propertyTypes).map(t => t.typeRef)); + const propertyTypes = setMap(properties.values(), (cp) => cp.type).add( + additionalProperties, + ); + let union = builder.lookupTypeRefs( + Array.from(propertyTypes).map((t) => t.typeRef), + ); if (union === undefined) { - const reconstitutedTypes = setMap(propertyTypes, t => builder.reconstituteType(t)); - union = builder.getUniqueUnionType(emptyTypeAttributes, new Set(reconstitutedTypes)); + const reconstitutedTypes = setMap(propertyTypes, (t) => + builder.reconstituteType(t), + ); + union = builder.getUniqueUnionType( + emptyTypeAttributes, + new Set(reconstitutedTypes), + ); // This is the direct unification alternative. Weirdly enough, it is a tiny // bit slower. It gives the same results. @@ -76,10 +97,25 @@ export function replaceObjectType( return builder.getMapType(attributes, union, forwardingRef); } - const allObjectTypes = setFilter(graph.allTypesUnordered(), t => t.kind === "object") as Set; + const allObjectTypes = setFilter( + graph.allTypesUnordered(), + (t) => t.kind === "object", + ) as Set; const objectTypesToReplace = leaveFullObjects - ? setFilter(allObjectTypes, o => o.getProperties().size === 0 || o.getAdditionalProperties() === undefined) + ? setFilter( + allObjectTypes, + (o) => + o.getProperties().size === 0 || + o.getAdditionalProperties() === undefined, + ) : allObjectTypes; - const groups = Array.from(objectTypesToReplace).map(t => [t]); - return graph.rewrite("replace object type", stringTypeMapping, false, groups, debugPrintReconstitution, replace); + const groups = Array.from(objectTypesToReplace).map((t) => [t]); + return graph.rewrite( + "replace object type", + stringTypeMapping, + false, + groups, + debugPrintReconstitution, + replace, + ); } diff --git a/packages/quicktype-core/src/rewrites/ResolveIntersections.ts b/packages/quicktype-core/src/rewrites/ResolveIntersections.ts index 67111f9e4..cf59817ec 100644 --- a/packages/quicktype-core/src/rewrites/ResolveIntersections.ts +++ b/packages/quicktype-core/src/rewrites/ResolveIntersections.ts @@ -10,16 +10,16 @@ import { setFilter, setIntersect, setMap, - setUnionInto + setUnionInto, } from "collection-utils"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, - makeTypeAttributesInferred + makeTypeAttributesInferred, } from "../attributes/TypeAttributes"; -import { type GraphRewriteBuilder, type TypeLookerUp } from "../GraphRewriting"; +import type { GraphRewriteBuilder, TypeLookerUp } from "../GraphRewriting"; import { assert, defined, mustNotHappen, panic } from "../support/Support"; import { ArrayType, @@ -31,33 +31,54 @@ import { type TypeKind, UnionType, isNumberTypeKind, - isPrimitiveTypeKind + isPrimitiveTypeKind, } from "../Type"; -import { type TypeBuilder } from "../Type/TypeBuilder"; -import { type StringTypeMapping } from "../Type/TypeBuilderUtils"; -import { type TypeGraph } from "../Type/TypeGraph"; -import { type TypeRef } from "../Type/TypeRef"; -import { makeGroupsToFlatten, matchTypeExhaustive, setOperationMembersRecursively } from "../Type/TypeUtils"; -import { type TypeAttributeMap, UnionBuilder, type UnionTypeProvider } from "../UnionBuilder"; +import type { TypeBuilder } from "../Type/TypeBuilder"; +import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; +import type { TypeGraph } from "../Type/TypeGraph"; +import type { TypeRef } from "../Type/TypeRef"; +import { + makeGroupsToFlatten, + matchTypeExhaustive, + setOperationMembersRecursively, +} from "../Type/TypeUtils"; +import { + type TypeAttributeMap, + UnionBuilder, + type UnionTypeProvider, +} from "../UnionBuilder"; function canResolve(t: IntersectionType): boolean { const members = setOperationMembersRecursively(t, undefined)[0]; if (members.size <= 1) return true; - return iterableEvery(members, m => !(m instanceof UnionType) || m.isCanonical); + return iterableEvery( + members, + (m) => !(m instanceof UnionType) || m.isCanonical, + ); } -function attributesForTypes(types: ReadonlySet): TypeAttributeMap { - return mapMapEntries(types.entries(), t => [t.kind, t.getAttributes()] as [T, TypeAttributes]); +function attributesForTypes( + types: ReadonlySet, +): TypeAttributeMap { + return mapMapEntries( + types.entries(), + (t) => [t.kind, t.getAttributes()] as [T, TypeAttributes], + ); } type PropertyMap = Map>>; class IntersectionAccumulator - implements UnionTypeProvider, [PropertyMap, ReadonlySet | undefined] | undefined> + implements + UnionTypeProvider< + ReadonlySet, + [PropertyMap, ReadonlySet | undefined] | undefined + > { private _primitiveTypes: Set | undefined; - private readonly _primitiveAttributes: TypeAttributeMap = new Map(); + private readonly _primitiveAttributes: TypeAttributeMap = + new Map(); // * undefined: We haven't seen any types yet. // * Set: All types we've seen can be arrays. @@ -83,21 +104,32 @@ class IntersectionAccumulator private _lostTypeAttributes = false; private updatePrimitiveTypes(members: Iterable): void { - const types = setFilter(members, t => isPrimitiveTypeKind(t.kind)); + const types = setFilter(members, (t) => isPrimitiveTypeKind(t.kind)); const attributes = attributesForTypes(types); - mapMergeWithInto(this._primitiveAttributes, (a, b) => combineTypeAttributes("intersect", a, b), attributes); + mapMergeWithInto( + this._primitiveAttributes, + (a, b) => combineTypeAttributes("intersect", a, b), + attributes, + ); - const kinds = setMap(types, t => t.kind) as ReadonlySet; + const kinds = setMap( + types, + (t) => t.kind, + ) as ReadonlySet; if (this._primitiveTypes === undefined) { this._primitiveTypes = new Set(kinds); return; } const haveNumber = - iterableFind(this._primitiveTypes, isNumberTypeKind) !== undefined && + iterableFind(this._primitiveTypes, isNumberTypeKind) !== + undefined && iterableFind(kinds, isNumberTypeKind) !== undefined; this._primitiveTypes = setIntersect(this._primitiveTypes, kinds); - if (haveNumber && iterableFind(this._primitiveTypes, isNumberTypeKind) === undefined) { + if ( + haveNumber && + iterableFind(this._primitiveTypes, isNumberTypeKind) === undefined + ) { // One set has integer, the other has double. The intersection // of that is integer. this._primitiveTypes = this._primitiveTypes.add("integer"); @@ -105,13 +137,20 @@ class IntersectionAccumulator } private updateArrayItemTypes(members: Iterable): void { - const maybeArray = iterableFind(members, t => t instanceof ArrayType) as ArrayType | undefined; + const maybeArray = iterableFind( + members, + (t) => t instanceof ArrayType, + ) as ArrayType | undefined; if (maybeArray === undefined) { this._arrayItemTypes = false; return; } - this._arrayAttributes = combineTypeAttributes("intersect", this._arrayAttributes, maybeArray.getAttributes()); + this._arrayAttributes = combineTypeAttributes( + "intersect", + this._arrayAttributes, + maybeArray.getAttributes(), + ); if (this._arrayItemTypes === undefined) { this._arrayItemTypes = new Set(); @@ -121,7 +160,10 @@ class IntersectionAccumulator } private updateObjectProperties(members: Iterable): void { - const maybeObject = iterableFind(members, t => t instanceof ObjectType) as ObjectType | undefined; + const maybeObject = iterableFind( + members, + (t) => t instanceof ObjectType, + ) as ObjectType | undefined; if (maybeObject === undefined) { this._objectProperties = undefined; this._additionalPropertyTypes = undefined; @@ -131,9 +173,10 @@ class IntersectionAccumulator this._objectAttributes = combineTypeAttributes( "intersect", this._objectAttributes, - maybeObject.getAttributes() + maybeObject.getAttributes(), ); - const objectAdditionalProperties = maybeObject.getAdditionalProperties(); + const objectAdditionalProperties = + maybeObject.getAdditionalProperties(); if (this._objectProperties === undefined) { assert(this._additionalPropertyTypes === undefined); @@ -142,7 +185,7 @@ class IntersectionAccumulator const allPropertyNames = setUnionInto( new Set(this._objectProperties.keys()), - maybeObject.getProperties().keys() + maybeObject.getProperties().keys(), ); for (const name of allPropertyNames) { const existing = defined(this._objectProperties).get(name); @@ -151,31 +194,48 @@ class IntersectionAccumulator if (existing !== undefined && newProperty !== undefined) { const cp = new GenericClassProperty( existing.typeData.add(newProperty.type), - existing.isOptional && newProperty.isOptional + existing.isOptional && newProperty.isOptional, ); defined(this._objectProperties).set(name, cp); - } else if (existing !== undefined && objectAdditionalProperties !== undefined) { + } else if ( + existing !== undefined && + objectAdditionalProperties !== undefined + ) { const cp = new GenericClassProperty( existing.typeData.add(objectAdditionalProperties), - existing.isOptional + existing.isOptional, ); defined(this._objectProperties).set(name, cp); } else if (existing !== undefined) { defined(this._objectProperties).delete(name); - } else if (newProperty !== undefined && this._additionalPropertyTypes !== undefined) { + } else if ( + newProperty !== undefined && + this._additionalPropertyTypes !== undefined + ) { // FIXME: This is potentially slow - const types = new Set(this._additionalPropertyTypes).add(newProperty.type); - defined(this._objectProperties).set(name, new GenericClassProperty(types, newProperty.isOptional)); + const types = new Set(this._additionalPropertyTypes).add( + newProperty.type, + ); + defined(this._objectProperties).set( + name, + new GenericClassProperty(types, newProperty.isOptional), + ); } else if (newProperty !== undefined) { defined(this._objectProperties).delete(name); } else { - return mustNotHappen(); + mustNotHappen(); } } - if (this._additionalPropertyTypes !== undefined && objectAdditionalProperties !== undefined) { + if ( + this._additionalPropertyTypes !== undefined && + objectAdditionalProperties !== undefined + ) { this._additionalPropertyTypes.add(objectAdditionalProperties); - } else if (this._additionalPropertyTypes !== undefined || objectAdditionalProperties !== undefined) { + } else if ( + this._additionalPropertyTypes !== undefined || + objectAdditionalProperties !== undefined + ) { this._additionalPropertyTypes = undefined; this._lostTypeAttributes = true; } @@ -191,43 +251,60 @@ class IntersectionAccumulator let attributes = t.getAttributes(); matchTypeExhaustive( t, - _noneType => { + (_noneType) => { return panic("There shouldn't be a none type"); }, - _anyType => { - return panic("The any type should have been filtered out in setOperationMembersRecursively"); + (_anyType) => { + return panic( + "The any type should have been filtered out in setOperationMembersRecursively", + ); }, - nullType => this.addUnionSet([nullType]), - boolType => this.addUnionSet([boolType]), - integerType => this.addUnionSet([integerType]), - doubleType => this.addUnionSet([doubleType]), - stringType => this.addUnionSet([stringType]), - arrayType => this.addUnionSet([arrayType]), - _classType => panic("We should never see class types in intersections"), - _mapType => panic("We should never see map types in intersections"), - objectType => this.addUnionSet([objectType]), - _enumType => panic("We should never see enum types in intersections"), - unionType => { + (nullType) => this.addUnionSet([nullType]), + (boolType) => this.addUnionSet([boolType]), + (integerType) => this.addUnionSet([integerType]), + (doubleType) => this.addUnionSet([doubleType]), + (stringType) => this.addUnionSet([stringType]), + (arrayType) => this.addUnionSet([arrayType]), + (_classType) => + panic("We should never see class types in intersections"), + (_mapType) => + panic("We should never see map types in intersections"), + (objectType) => this.addUnionSet([objectType]), + (_enumType) => + panic("We should never see enum types in intersections"), + (unionType) => { attributes = combineTypeAttributes( "intersect", - [attributes].concat(Array.from(unionType.members).map(m => m.getAttributes())) + [attributes].concat( + Array.from(unionType.members).map((m) => + m.getAttributes(), + ), + ), ); this.addUnionSet(unionType.members); }, - transformedStringType => this.addUnionSet([transformedStringType]) + (transformedStringType) => + this.addUnionSet([transformedStringType]), ); return makeTypeAttributesInferred(attributes); } public get arrayData(): ReadonlySet { - if (this._arrayItemTypes === undefined || this._arrayItemTypes === false) { - return panic("This should not be called if the type can't be an array"); + if ( + this._arrayItemTypes === undefined || + this._arrayItemTypes === false + ) { + return panic( + "This should not be called if the type can't be an array", + ); } return this._arrayItemTypes; } - public get objectData(): [PropertyMap, ReadonlySet | undefined] | undefined { + public get objectData(): + | [PropertyMap, ReadonlySet | undefined] + | undefined { if (this._objectProperties === undefined) { assert(this._additionalPropertyTypes === undefined); return undefined; @@ -241,19 +318,31 @@ class IntersectionAccumulator } public getMemberKinds(): TypeAttributeMap { - const kinds: TypeAttributeMap = mapMap(defined(this._primitiveTypes).entries(), k => - defined(this._primitiveAttributes.get(k)) + const kinds: TypeAttributeMap = mapMap( + defined(this._primitiveTypes).entries(), + (k) => defined(this._primitiveAttributes.get(k)), ); const maybeDoubleAttributes = this._primitiveAttributes.get("double"); // If double was eliminated, add its attributes to integer - if (maybeDoubleAttributes !== undefined && !kinds.has("double") && kinds.has("integer")) { + if ( + maybeDoubleAttributes !== undefined && + !kinds.has("double") && + kinds.has("integer") + ) { // FIXME: How can this ever happen??? Where do we "eliminate" double? - mapUpdateInto(kinds, "integer", a => { - return combineTypeAttributes("intersect", defined(a), maybeDoubleAttributes); + mapUpdateInto(kinds, "integer", (a) => { + return combineTypeAttributes( + "intersect", + defined(a), + maybeDoubleAttributes, + ); }); } - if (this._arrayItemTypes !== undefined && this._arrayItemTypes !== false) { + if ( + this._arrayItemTypes !== undefined && + this._arrayItemTypes !== false + ) { kinds.set("array", this._arrayAttributes); } else if (this._arrayAttributes.size > 0) { this._lostTypeAttributes = true; @@ -280,8 +369,13 @@ class IntersectionUnionBuilder extends UnionBuilder< > { private _createdNewIntersections = false; - private makeIntersection(members: ReadonlySet, attributes: TypeAttributes): TypeRef { - const reconstitutedMembers = setMap(members, t => this.typeBuilder.reconstituteTypeRef(t.typeRef)); + private makeIntersection( + members: ReadonlySet, + attributes: TypeAttributes, + ): TypeRef { + const reconstitutedMembers = setMap(members, (t) => + this.typeBuilder.reconstituteTypeRef(t.typeRef), + ); const first = defined(iterableFirst(reconstitutedMembers)); if (reconstitutedMembers.size === 1) { @@ -290,7 +384,10 @@ class IntersectionUnionBuilder extends UnionBuilder< } this._createdNewIntersections = true; - return this.typeBuilder.getUniqueIntersectionType(attributes, reconstitutedMembers); + return this.typeBuilder.getUniqueIntersectionType( + attributes, + reconstitutedMembers, + ); } public get createdNewIntersections(): boolean { @@ -300,31 +397,48 @@ class IntersectionUnionBuilder extends UnionBuilder< protected makeObject( maybeData: [PropertyMap, ReadonlySet | undefined] | undefined, typeAttributes: TypeAttributes, - forwardingRef: TypeRef | undefined + forwardingRef: TypeRef | undefined, ): TypeRef { if (maybeData === undefined) { - return panic("Either properties or additional properties must be given to make an object type"); + return panic( + "Either properties or additional properties must be given to make an object type", + ); } const [propertyTypes, maybeAdditionalProperties] = maybeData; - const properties = mapMap(propertyTypes, cp => - this.typeBuilder.makeClassProperty(this.makeIntersection(cp.typeData, emptyTypeAttributes), cp.isOptional) + const properties = mapMap(propertyTypes, (cp) => + this.typeBuilder.makeClassProperty( + this.makeIntersection(cp.typeData, emptyTypeAttributes), + cp.isOptional, + ), ); const additionalProperties = maybeAdditionalProperties === undefined ? undefined - : this.makeIntersection(maybeAdditionalProperties, emptyTypeAttributes); - return this.typeBuilder.getUniqueObjectType(typeAttributes, properties, additionalProperties, forwardingRef); + : this.makeIntersection( + maybeAdditionalProperties, + emptyTypeAttributes, + ); + return this.typeBuilder.getUniqueObjectType( + typeAttributes, + properties, + additionalProperties, + forwardingRef, + ); } protected makeArray( arrays: ReadonlySet, typeAttributes: TypeAttributes, - forwardingRef: TypeRef | undefined + forwardingRef: TypeRef | undefined, ): TypeRef { // FIXME: attributes const itemsType = this.makeIntersection(arrays, emptyTypeAttributes); - const tref = this.typeBuilder.getArrayType(typeAttributes, itemsType, forwardingRef); + const tref = this.typeBuilder.getArrayType( + typeAttributes, + itemsType, + forwardingRef, + ); return tref; } } @@ -332,36 +446,61 @@ class IntersectionUnionBuilder extends UnionBuilder< export function resolveIntersections( graph: TypeGraph, stringTypeMapping: StringTypeMapping, - debugPrintReconstitution: boolean + debugPrintReconstitution: boolean, ): [TypeGraph, boolean] { let needsRepeat = false; - function replace(types: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef): TypeRef { - const intersections = setFilter(types, t => t instanceof IntersectionType) as Set; - const [members, intersectionAttributes] = setOperationMembersRecursively( - Array.from(intersections), - "intersect" - ); + function replace( + types: ReadonlySet, + builder: GraphRewriteBuilder, + forwardingRef: TypeRef, + ): TypeRef { + const intersections = setFilter( + types, + (t) => t instanceof IntersectionType, + ) as Set; + const [members, intersectionAttributes] = + setOperationMembersRecursively( + Array.from(intersections), + "intersect", + ); if (members.size === 0) { - const t = builder.getPrimitiveType("any", intersectionAttributes, forwardingRef); + const t = builder.getPrimitiveType( + "any", + intersectionAttributes, + forwardingRef, + ); return t; } if (members.size === 1) { - return builder.reconstituteType(defined(iterableFirst(members)), intersectionAttributes, forwardingRef); + return builder.reconstituteType( + defined(iterableFirst(members)), + intersectionAttributes, + forwardingRef, + ); } const accumulator = new IntersectionAccumulator(); const extraAttributes = makeTypeAttributesInferred( combineTypeAttributes( "intersect", - Array.from(members).map(t => accumulator.addType(t)) - ) + Array.from(members).map((t) => accumulator.addType(t)), + ), + ); + const attributes = combineTypeAttributes( + "intersect", + intersectionAttributes, + extraAttributes, ); - const attributes = combineTypeAttributes("intersect", intersectionAttributes, extraAttributes); const unionBuilder = new IntersectionUnionBuilder(builder); - const tref = unionBuilder.buildUnion(accumulator, true, attributes, forwardingRef); + const tref = unionBuilder.buildUnion( + accumulator, + true, + attributes, + forwardingRef, + ); if (unionBuilder.createdNewIntersections) { needsRepeat = true; } @@ -373,12 +512,22 @@ export function resolveIntersections( // See for example the intersections-nested.schema example. const allIntersections = setFilter( graph.allTypesUnordered(), - t => t instanceof IntersectionType + (t) => t instanceof IntersectionType, ) as Set; const resolvableIntersections = setFilter(allIntersections, canResolve); const groups = makeGroupsToFlatten(resolvableIntersections, undefined); - graph = graph.rewrite("resolve intersections", stringTypeMapping, false, groups, debugPrintReconstitution, replace); + graph = graph.rewrite( + "resolve intersections", + stringTypeMapping, + false, + groups, + debugPrintReconstitution, + replace, + ); // console.log(`resolved ${resolvableIntersections.size} of ${intersections.size} intersections`); - return [graph, !needsRepeat && allIntersections.size === resolvableIntersections.size]; + return [ + graph, + !needsRepeat && allIntersections.size === resolvableIntersections.size, + ]; } diff --git a/packages/quicktype-core/src/support/Acronyms.const.ts b/packages/quicktype-core/src/support/Acronyms.const.ts index 385234542..231542582 100644 --- a/packages/quicktype-core/src/support/Acronyms.const.ts +++ b/packages/quicktype-core/src/support/Acronyms.const.ts @@ -1,1097 +1,1097 @@ export const acronyms = [ - "aaa", - "aabb", - "aac", - "aal", - "aalc", - "aarp", - "abac", - "abcl", - "abi", - "abm", - "abr", - "ac", - "acd", - "ack", - "acl", - "acm", - "acme", - "acp", - "acpi", - "acr", - "adb", - "adc", - "adccp", - "ado", - "adsl", - "adt", - "ae", - "aes", - "af", - "afp", - "agp", - "ai", - "aix", - "alac", - "algol", - "alsa", - "alu", - "amd", - "amoled", - "amqp", - "amr", - "ann", - "ansi", - "aop", - "apci", - "api", - "apic", - "apipa", - "apl", - "apr", - "arin", - "aros", - "arp", - "arpa", - "arpanet", - "ascii", - "aset", - "asg", - "asic", - "asimo", - "aslr", - "asm", - "asmp", - "asp", - "asr", - "assp", - "ast", - "ata", - "atag", - "atapi", - "atm", - "av", - "avc", - "avi", - "awfl", - "awk", - "awt", - "bal", - "bam", - "bbp", - "bbs", - "bcd", - "bcnf", - "beep", - "ber", - "bfd", - "bfs", - "bft", - "bgp", - "bi", - "binac", - "bios", - "bjt", - "bmp", - "bnc", - "boinc", - "bom", - "bootp", - "bpdu", - "bpel", - "bpl", - "bpm", - "brm", - "brms", - "brr", - "brs", - "bsa", - "bsb", - "bsd", - "bss", - "bt", - "bw", - "byod", - "ca", - "cad", - "cae", - "cai", - "caid", - "captcha", - "caq", - "cd", - "cde", - "cdfs", - "cdma", - "cdn", - "cdp", - "cdsa", - "cert", - "ces", - "cf", - "cfd", - "cfg", - "cg", - "cga", - "cgi", - "cgt", - "chs", - "cidr", - "cifs", - "cim", - "cio", - "cir", - "cisc", - "cjk", - "cjkv", - "cli", - "clr", - "cm", - "cmdb", - "cmmi", - "cmo", - "cmos", - "cms", - "cn", - "cnc", - "cng", - "cnr", - "cobol", - "com", - "corba", - "cots", - "cpa", - "cpan", - "cpri", - "cps", - "cpu", - "cr", - "cran", - "crc", - "crlf", - "crm", - "crs", - "crt", - "crud", - "cs", - "cse", - "csi", - "csm", - "csp", - "csrf", - "css", - "csv", - "ct", - "ctan", - "ctcp", - "ctfe", - "cti", - "ctl", - "ctm", - "cts", - "ctss", - "cua", - "cvs", - "dac", - "dal", - "dao", - "dap", - "darpa", - "dat", - "db", - "dba", - "dbcs", - "dbms", - "dcc", - "dcca", - "dccp", - "dcl", - "dcmi", - "dcom", - "dcs", - "dd", - "dde", - "ddi", - "ddl", - "ddr", - "dec", - "des", - "dfa", - "dfd", - "dfs", - "dgd", - "dhcp", - "dhtml", - "dif", - "dimm", - "din", - "dip", - "dism", - "divx", - "dkim", - "dl", - "dll", - "dlna", - "dlp", - "dma", - "dmca", - "dmi", - "dml", - "dmr", - "dmz", - "dn", - "dnd", - "dns", - "doa", - "docsis", - "dom", - "dos", - "dp", - "dpc", - "dpi", - "dpmi", - "dpms", - "dr", - "dram", - "dri", - "drm", - "dsa", - "dsdl", - "dsdm", - "dsl", - "dslam", - "dsn", - "dsp", - "dsssl", - "dtd", - "dte", - "dtp", - "dtr", - "dvd", - "dvi", - "dvr", - "dw", - "eai", - "eap", - "eas", - "ebcdic", - "ebml", - "ecc", - "ecma", - "ecn", - "ecos", - "ecrs", - "eda", - "edi", - "edo", - "edsac", - "edvac", - "eeprom", - "eff", - "efi", - "efm", - "efs", - "ega", - "egp", - "eide", - "eigrp", - "eisa", - "elf", - "emacs", - "ems", - "eniac", - "eod", - "eof", - "eol", - "eom", - "eos", - "eprom", - "erd", - "erm", - "erp", - "esb", - "escon", - "esd", - "esr", - "etl", - "etw", - "euc", - "eula", - "ewmh", - "ext", - "fap", - "faq", - "fasm", - "fbdimm", - "fcb", - "fcs", - "fdc", - "fdd", - "fddi", - "fdm", - "fdma", - "fds", - "fec", - "femb", - "fet", - "fhs", - "ficon", - "fifo", - "fips", - "fl", - "flac", - "flops", - "fmc", - "fmo", - "foldoc", - "fosdem", - "fosi", - "foss", - "fp", - "fpga", - "fps", - "fpu", - "fqdn", - "fru", - "fs", - "fsb", - "fsf", - "fsm", - "ftp", - "ftta", - "fttc", - "ftth", - "fttp", - "fud", - "fvek", - "fws", - "fxp", - "fyi", - "gb", - "gcc", - "gcj", - "gcr", - "gdb", - "gdi", - "geran", - "gfdl", - "gif", - "gigo", - "gimps", - "gis", - "gml", - "gnu", - "goms", - "gpasm", - "gpfs", - "gpg", - "gpgpu", - "gpib", - "gpl", - "gprs", - "gpt", - "gpu", - "gsm", - "gui", - "guid", - "gwt", - "gyr", - "hal", - "hasp", - "hba", - "hci", - "hcl", - "hd", - "hdd", - "hdl", - "hdmi", - "hf", - "hfs", - "hhd", - "hid", - "hig", - "hird", - "hlasm", - "hls", - "hma", - "hp", - "hpc", - "hpfs", - "hsdpa", - "hsm", - "ht", - "htc", - "htm", - "html", - "http", - "https", - "htx", - "hurd", - "hvd", - "iana", - "ibm", - "ic", - "icann", - "ich", - "icmp", - "icp", - "ics", - "ict", - "id", - "ide", - "idf", - "idl", - "ids", - "iec", - "ieee", - "ietf", - "ifl", - "igmp", - "igrp", - "ihv", - "iiop", - "iis", - "ike", - "il", - "im", - "imap", - "ime", - "infosec", - "ip", - "ipam", - "ipc", - "ipl", - "ipmi", - "ipo", - "ipp", - "ips", - "iptv", - "ipx", - "ir", - "irc", - "iri", - "irp", - "irq", - "isa", - "isam", - "isatap", - "isc", - "isdn", - "iso", - "isp", - "ispf", - "isr", - "isv", - "itil", - "itl", - "itu", - "ivcr", - "ivrs", - "jaxb", - "jaxp", - "jbod", - "jce", - "jcl", - "jcp", - "jdbc", - "jdk", - "jds", - "jee", - "jes", - "jfc", - "jfet", - "jfs", - "jini", - "jit", - "jme", - "jms", - "jmx", - "jndi", - "jni", - "jnz", - "jpeg", - "jre", - "js", - "jse", - "json", - "jsp", - "jtag", - "jvm", - "kb", - "kde", - "km", - "krl", - "kvm", - "lacp", - "lan", - "lb", - "lba", - "lcd", - "lcos", - "lcr", - "ldap", - "le", - "led", - "lf", - "lfs", - "lga", - "lgpl", - "lib", - "lif", - "lifo", - "lilo", - "lisp", - "lkml", - "lm", - "loc", - "lpc", - "lpi", - "lpt", - "lru", - "lsb", - "lsi", - "lte", - "ltl", - "ltr", - "lun", - "lv", - "lvd", - "lvm", - "lzw", - "mac", - "manet", - "mapi", - "mb", - "mbcs", - "mbd", - "mbr", - "mca", - "mcad", - "mcas", - "mcdba", - "mcdst", - "mcitp", - "mcm", - "mcp", - "mcpc", - "mcpd", - "mcsa", - "mcsd", - "mcse", - "mct", - "mcts", - "mda", - "mdf", - "mdi", - "mf", - "mfc", - "mfm", - "mgcp", - "mib", - "micr", - "midi", - "mimd", - "mime", - "mimo", - "minix", - "mips", - "mis", - "misd", - "mit", - "mmc", - "mmds", - "mmf", - "mmi", - "mmio", - "mmorpg", - "mmu", - "mmx", - "mng", - "mom", - "mos", - "mosfet", - "motd", - "mous", - "mov", - "mpaa", - "mpeg", - "mpl", - "mpls", - "mpu", - "ms", - "msa", - "msb", - "msdn", - "msi", - "msn", - "mt", - "mta", - "mtbf", - "mtu", - "mua", - "mvc", - "mvp", - "mvs", - "mwc", - "mx", - "mxf", - "nack", - "nak", - "nas", - "nasm", - "ncp", - "ncq", - "ncsa", - "ndis", - "ndps", - "nds", - "nep", - "nfa", - "nfc", - "nfs", - "ngl", - "ngscb", - "ni", - "nic", - "nim", - "nio", - "nist", - "nlp", - "nls", - "nmi", - "nntp", - "noc", - "nop", - "nos", - "np", - "npl", - "nptl", - "npu", - "ns", - "nsa", - "nsi", - "nspr", - "nss", - "nt", - "ntfs", - "ntlm", - "ntp", - "numa", - "nurbs", - "nvr", - "nvram", - "oat", - "obsai", - "odbc", - "oem", - "oes", - "ofdm", - "oftc", - "oid", - "olap", - "ole", - "oled", - "olpc", - "oltp", - "omf", - "omg", - "omr", - "oo", - "ooe", - "oom", - "oop", - "ootb", - "opml", - "orb", - "orm", - "os", - "oscon", - "osdn", - "osi", - "ospf", - "oss", - "ostg", - "oui", - "pap", - "parc", - "pata", - "pbs", - "pc", - "pcb", - "pci", - "pcl", - "pcm", - "pcmcia", - "pcre", - "pd", - "pda", - "pdf", - "pdh", - "pdp", - "pe", - "perl", - "pfa", - "pg", - "pga", - "pgo", - "pgp", - "php", - "pid", - "pim", - "pio", - "pkcs", - "pki", - "plc", - "pld", - "plt", - "pmm", - "png", - "pnrp", - "poid", - "pojo", - "posix", - "ppc", - "ppi", - "ppp", - "pptp", - "pr", - "ps", - "psa", - "psm", - "psu", - "psvi", - "pv", - "pvg", - "pvr", - "pxe", - "pxi", - "qa", - "qdr", - "qfp", - "qotd", - "qsop", - "qtam", - "racf", - "rad", - "raid", - "raii", - "rait", - "ram", - "rarp", - "ras", - "rc", - "rcs", - "rd", - "rdbms", - "rdc", - "rdf", - "rdm", - "rdos", - "rdp", - "rds", - "refal", - "rest", - "rf", - "rfc", - "rfi", - "rfid", - "rgb", - "rgba", - "rhel", - "rhl", - "ria", - "riaa", - "rip", - "rir", - "risc", - "rje", - "rle", - "rll", - "rmi", - "rms", - "rom", - "romb", - "rpc", - "rpg", - "rpm", - "rras", - "rsa", - "rsi", - "rss", - "rtai", - "rtc", - "rte", - "rtems", - "rtl", - "rtos", - "rtp", - "rts", - "rtsp", - "rtti", - "rwd", - "san", - "sas", - "sata", - "sax", - "sbod", - "sbu", - "scada", - "scid", - "scm", - "scp", - "scpc", - "scpi", - "scsa", - "scsi", - "sctp", - "sd", - "sddl", - "sdh", - "sdi", - "sdio", - "sdk", - "sdl", - "sdn", - "sdp", - "sdr", - "sdram", - "sdsl", - "se", - "sec", - "sei", - "seo", - "sftp", - "sgi", - "sgml", - "sgr", - "sha", - "shdsl", - "sigcat", - "siggraph", - "simd", - "simm", - "sip", - "sisd", - "siso", - "sles", - "sli", - "slm", - "sloc", - "sma", - "smb", - "smbios", - "sme", - "smf", - "smil", - "smp", - "smps", - "sms", - "smt", - "smtp", - "sna", - "snmp", - "sntp", - "soa", - "soe", - "soho", - "soi", - "sopa", - "sp", - "spa", - "sparc", - "spf", - "spi", - "spm", - "spmd", - "sql", - "sram", - "ssa", - "ssd", - "ssdp", - "sse", - "ssh", - "ssi", - "ssid", - "ssl", - "ssp", - "ssse", - "sssp", - "sstp", - "sus", - "suse", - "svc", - "svd", - "svg", - "svga", - "swf", - "swt", - "tao", - "tapi", - "tasm", - "tb", - "tcp", - "tcu", - "tdma", - "tft", - "tftp", - "ti", - "tla", - "tld", - "tls", - "tlv", - "tnc", - "tpf", - "tpm", - "troff", - "tron", - "trsdos", - "tso", - "tsp", - "tsr", - "tta", - "ttf", - "ttl", - "tts", - "tty", - "tucows", - "twain", - "uaag", - "uac", - "uart", - "uat", - "ucs", - "uddi", - "udma", - "udp", - "uefi", - "uhf", - "ui", - "ul", - "ula", - "uma", - "umb", - "uml", - "umpc", - "umts", - "unc", - "univac", - "ups", - "uri", - "url", - "usb", - "usr", - "utc", - "utf", - "utp", - "utran", - "uucp", - "uuid", - "uun", - "uvc", - "uwp", - "ux", - "vax", - "vb", - "vba", - "vbs", - "vcpi", - "vdm", - "vdsl", - "vesa", - "vfat", - "vfs", - "vg", - "vga", - "vhf", - "vlan", - "vlb", - "vlf", - "vliw", - "vlsi", - "vlsm", - "vm", - "vmm", - "vnc", - "vod", - "vpn", - "vpu", - "vr", - "vram", - "vrml", - "vsam", - "vsat", - "vt", - "vtam", - "vtl", - "wafs", - "wai", - "wais", - "wan", - "wap", - "wasm", - "wbem", - "wcag", - "wcf", - "wdm", - "wep", - "wfi", - "wins", - "wlan", - "wma", - "wmi", - "wmv", - "wns", - "wol", - "wor", - "wora", - "wpa", - "wpad", - "wpan", - "wpf", - "wsdl", - "wsfl", - "wusb", - "wwan", - "wwdc", - "wwid", - "wwn", - "www", - "wysiwyg", - "wzc", - "xag", - "xaml", - "xcbl", - "xdm", - "xdmcp", - "xhtml", - "xilp", - "xml", - "xmms", - "xmpp", - "xms", - "xns", - "xp", - "xpcom", - "xpi", - "xpidl", - "xps", - "xsd", - "xsl", - "xslt", - "xss", - "xtf", - "xul", - "xvga", - "yaaf", - "yacc", - "yaml", - "zcav", - "zcs", - "zif", - "zifs", - "zisc", - "zma", - "zoi", - "zope", - "zpl" + "aaa", + "aabb", + "aac", + "aal", + "aalc", + "aarp", + "abac", + "abcl", + "abi", + "abm", + "abr", + "ac", + "acd", + "ack", + "acl", + "acm", + "acme", + "acp", + "acpi", + "acr", + "adb", + "adc", + "adccp", + "ado", + "adsl", + "adt", + "ae", + "aes", + "af", + "afp", + "agp", + "ai", + "aix", + "alac", + "algol", + "alsa", + "alu", + "amd", + "amoled", + "amqp", + "amr", + "ann", + "ansi", + "aop", + "apci", + "api", + "apic", + "apipa", + "apl", + "apr", + "arin", + "aros", + "arp", + "arpa", + "arpanet", + "ascii", + "aset", + "asg", + "asic", + "asimo", + "aslr", + "asm", + "asmp", + "asp", + "asr", + "assp", + "ast", + "ata", + "atag", + "atapi", + "atm", + "av", + "avc", + "avi", + "awfl", + "awk", + "awt", + "bal", + "bam", + "bbp", + "bbs", + "bcd", + "bcnf", + "beep", + "ber", + "bfd", + "bfs", + "bft", + "bgp", + "bi", + "binac", + "bios", + "bjt", + "bmp", + "bnc", + "boinc", + "bom", + "bootp", + "bpdu", + "bpel", + "bpl", + "bpm", + "brm", + "brms", + "brr", + "brs", + "bsa", + "bsb", + "bsd", + "bss", + "bt", + "bw", + "byod", + "ca", + "cad", + "cae", + "cai", + "caid", + "captcha", + "caq", + "cd", + "cde", + "cdfs", + "cdma", + "cdn", + "cdp", + "cdsa", + "cert", + "ces", + "cf", + "cfd", + "cfg", + "cg", + "cga", + "cgi", + "cgt", + "chs", + "cidr", + "cifs", + "cim", + "cio", + "cir", + "cisc", + "cjk", + "cjkv", + "cli", + "clr", + "cm", + "cmdb", + "cmmi", + "cmo", + "cmos", + "cms", + "cn", + "cnc", + "cng", + "cnr", + "cobol", + "com", + "corba", + "cots", + "cpa", + "cpan", + "cpri", + "cps", + "cpu", + "cr", + "cran", + "crc", + "crlf", + "crm", + "crs", + "crt", + "crud", + "cs", + "cse", + "csi", + "csm", + "csp", + "csrf", + "css", + "csv", + "ct", + "ctan", + "ctcp", + "ctfe", + "cti", + "ctl", + "ctm", + "cts", + "ctss", + "cua", + "cvs", + "dac", + "dal", + "dao", + "dap", + "darpa", + "dat", + "db", + "dba", + "dbcs", + "dbms", + "dcc", + "dcca", + "dccp", + "dcl", + "dcmi", + "dcom", + "dcs", + "dd", + "dde", + "ddi", + "ddl", + "ddr", + "dec", + "des", + "dfa", + "dfd", + "dfs", + "dgd", + "dhcp", + "dhtml", + "dif", + "dimm", + "din", + "dip", + "dism", + "divx", + "dkim", + "dl", + "dll", + "dlna", + "dlp", + "dma", + "dmca", + "dmi", + "dml", + "dmr", + "dmz", + "dn", + "dnd", + "dns", + "doa", + "docsis", + "dom", + "dos", + "dp", + "dpc", + "dpi", + "dpmi", + "dpms", + "dr", + "dram", + "dri", + "drm", + "dsa", + "dsdl", + "dsdm", + "dsl", + "dslam", + "dsn", + "dsp", + "dsssl", + "dtd", + "dte", + "dtp", + "dtr", + "dvd", + "dvi", + "dvr", + "dw", + "eai", + "eap", + "eas", + "ebcdic", + "ebml", + "ecc", + "ecma", + "ecn", + "ecos", + "ecrs", + "eda", + "edi", + "edo", + "edsac", + "edvac", + "eeprom", + "eff", + "efi", + "efm", + "efs", + "ega", + "egp", + "eide", + "eigrp", + "eisa", + "elf", + "emacs", + "ems", + "eniac", + "eod", + "eof", + "eol", + "eom", + "eos", + "eprom", + "erd", + "erm", + "erp", + "esb", + "escon", + "esd", + "esr", + "etl", + "etw", + "euc", + "eula", + "ewmh", + "ext", + "fap", + "faq", + "fasm", + "fbdimm", + "fcb", + "fcs", + "fdc", + "fdd", + "fddi", + "fdm", + "fdma", + "fds", + "fec", + "femb", + "fet", + "fhs", + "ficon", + "fifo", + "fips", + "fl", + "flac", + "flops", + "fmc", + "fmo", + "foldoc", + "fosdem", + "fosi", + "foss", + "fp", + "fpga", + "fps", + "fpu", + "fqdn", + "fru", + "fs", + "fsb", + "fsf", + "fsm", + "ftp", + "ftta", + "fttc", + "ftth", + "fttp", + "fud", + "fvek", + "fws", + "fxp", + "fyi", + "gb", + "gcc", + "gcj", + "gcr", + "gdb", + "gdi", + "geran", + "gfdl", + "gif", + "gigo", + "gimps", + "gis", + "gml", + "gnu", + "goms", + "gpasm", + "gpfs", + "gpg", + "gpgpu", + "gpib", + "gpl", + "gprs", + "gpt", + "gpu", + "gsm", + "gui", + "guid", + "gwt", + "gyr", + "hal", + "hasp", + "hba", + "hci", + "hcl", + "hd", + "hdd", + "hdl", + "hdmi", + "hf", + "hfs", + "hhd", + "hid", + "hig", + "hird", + "hlasm", + "hls", + "hma", + "hp", + "hpc", + "hpfs", + "hsdpa", + "hsm", + "ht", + "htc", + "htm", + "html", + "http", + "https", + "htx", + "hurd", + "hvd", + "iana", + "ibm", + "ic", + "icann", + "ich", + "icmp", + "icp", + "ics", + "ict", + "id", + "ide", + "idf", + "idl", + "ids", + "iec", + "ieee", + "ietf", + "ifl", + "igmp", + "igrp", + "ihv", + "iiop", + "iis", + "ike", + "il", + "im", + "imap", + "ime", + "infosec", + "ip", + "ipam", + "ipc", + "ipl", + "ipmi", + "ipo", + "ipp", + "ips", + "iptv", + "ipx", + "ir", + "irc", + "iri", + "irp", + "irq", + "isa", + "isam", + "isatap", + "isc", + "isdn", + "iso", + "isp", + "ispf", + "isr", + "isv", + "itil", + "itl", + "itu", + "ivcr", + "ivrs", + "jaxb", + "jaxp", + "jbod", + "jce", + "jcl", + "jcp", + "jdbc", + "jdk", + "jds", + "jee", + "jes", + "jfc", + "jfet", + "jfs", + "jini", + "jit", + "jme", + "jms", + "jmx", + "jndi", + "jni", + "jnz", + "jpeg", + "jre", + "js", + "jse", + "json", + "jsp", + "jtag", + "jvm", + "kb", + "kde", + "km", + "krl", + "kvm", + "lacp", + "lan", + "lb", + "lba", + "lcd", + "lcos", + "lcr", + "ldap", + "le", + "led", + "lf", + "lfs", + "lga", + "lgpl", + "lib", + "lif", + "lifo", + "lilo", + "lisp", + "lkml", + "lm", + "loc", + "lpc", + "lpi", + "lpt", + "lru", + "lsb", + "lsi", + "lte", + "ltl", + "ltr", + "lun", + "lv", + "lvd", + "lvm", + "lzw", + "mac", + "manet", + "mapi", + "mb", + "mbcs", + "mbd", + "mbr", + "mca", + "mcad", + "mcas", + "mcdba", + "mcdst", + "mcitp", + "mcm", + "mcp", + "mcpc", + "mcpd", + "mcsa", + "mcsd", + "mcse", + "mct", + "mcts", + "mda", + "mdf", + "mdi", + "mf", + "mfc", + "mfm", + "mgcp", + "mib", + "micr", + "midi", + "mimd", + "mime", + "mimo", + "minix", + "mips", + "mis", + "misd", + "mit", + "mmc", + "mmds", + "mmf", + "mmi", + "mmio", + "mmorpg", + "mmu", + "mmx", + "mng", + "mom", + "mos", + "mosfet", + "motd", + "mous", + "mov", + "mpaa", + "mpeg", + "mpl", + "mpls", + "mpu", + "ms", + "msa", + "msb", + "msdn", + "msi", + "msn", + "mt", + "mta", + "mtbf", + "mtu", + "mua", + "mvc", + "mvp", + "mvs", + "mwc", + "mx", + "mxf", + "nack", + "nak", + "nas", + "nasm", + "ncp", + "ncq", + "ncsa", + "ndis", + "ndps", + "nds", + "nep", + "nfa", + "nfc", + "nfs", + "ngl", + "ngscb", + "ni", + "nic", + "nim", + "nio", + "nist", + "nlp", + "nls", + "nmi", + "nntp", + "noc", + "nop", + "nos", + "np", + "npl", + "nptl", + "npu", + "ns", + "nsa", + "nsi", + "nspr", + "nss", + "nt", + "ntfs", + "ntlm", + "ntp", + "numa", + "nurbs", + "nvr", + "nvram", + "oat", + "obsai", + "odbc", + "oem", + "oes", + "ofdm", + "oftc", + "oid", + "olap", + "ole", + "oled", + "olpc", + "oltp", + "omf", + "omg", + "omr", + "oo", + "ooe", + "oom", + "oop", + "ootb", + "opml", + "orb", + "orm", + "os", + "oscon", + "osdn", + "osi", + "ospf", + "oss", + "ostg", + "oui", + "pap", + "parc", + "pata", + "pbs", + "pc", + "pcb", + "pci", + "pcl", + "pcm", + "pcmcia", + "pcre", + "pd", + "pda", + "pdf", + "pdh", + "pdp", + "pe", + "perl", + "pfa", + "pg", + "pga", + "pgo", + "pgp", + "php", + "pid", + "pim", + "pio", + "pkcs", + "pki", + "plc", + "pld", + "plt", + "pmm", + "png", + "pnrp", + "poid", + "pojo", + "posix", + "ppc", + "ppi", + "ppp", + "pptp", + "pr", + "ps", + "psa", + "psm", + "psu", + "psvi", + "pv", + "pvg", + "pvr", + "pxe", + "pxi", + "qa", + "qdr", + "qfp", + "qotd", + "qsop", + "qtam", + "racf", + "rad", + "raid", + "raii", + "rait", + "ram", + "rarp", + "ras", + "rc", + "rcs", + "rd", + "rdbms", + "rdc", + "rdf", + "rdm", + "rdos", + "rdp", + "rds", + "refal", + "rest", + "rf", + "rfc", + "rfi", + "rfid", + "rgb", + "rgba", + "rhel", + "rhl", + "ria", + "riaa", + "rip", + "rir", + "risc", + "rje", + "rle", + "rll", + "rmi", + "rms", + "rom", + "romb", + "rpc", + "rpg", + "rpm", + "rras", + "rsa", + "rsi", + "rss", + "rtai", + "rtc", + "rte", + "rtems", + "rtl", + "rtos", + "rtp", + "rts", + "rtsp", + "rtti", + "rwd", + "san", + "sas", + "sata", + "sax", + "sbod", + "sbu", + "scada", + "scid", + "scm", + "scp", + "scpc", + "scpi", + "scsa", + "scsi", + "sctp", + "sd", + "sddl", + "sdh", + "sdi", + "sdio", + "sdk", + "sdl", + "sdn", + "sdp", + "sdr", + "sdram", + "sdsl", + "se", + "sec", + "sei", + "seo", + "sftp", + "sgi", + "sgml", + "sgr", + "sha", + "shdsl", + "sigcat", + "siggraph", + "simd", + "simm", + "sip", + "sisd", + "siso", + "sles", + "sli", + "slm", + "sloc", + "sma", + "smb", + "smbios", + "sme", + "smf", + "smil", + "smp", + "smps", + "sms", + "smt", + "smtp", + "sna", + "snmp", + "sntp", + "soa", + "soe", + "soho", + "soi", + "sopa", + "sp", + "spa", + "sparc", + "spf", + "spi", + "spm", + "spmd", + "sql", + "sram", + "ssa", + "ssd", + "ssdp", + "sse", + "ssh", + "ssi", + "ssid", + "ssl", + "ssp", + "ssse", + "sssp", + "sstp", + "sus", + "suse", + "svc", + "svd", + "svg", + "svga", + "swf", + "swt", + "tao", + "tapi", + "tasm", + "tb", + "tcp", + "tcu", + "tdma", + "tft", + "tftp", + "ti", + "tla", + "tld", + "tls", + "tlv", + "tnc", + "tpf", + "tpm", + "troff", + "tron", + "trsdos", + "tso", + "tsp", + "tsr", + "tta", + "ttf", + "ttl", + "tts", + "tty", + "tucows", + "twain", + "uaag", + "uac", + "uart", + "uat", + "ucs", + "uddi", + "udma", + "udp", + "uefi", + "uhf", + "ui", + "ul", + "ula", + "uma", + "umb", + "uml", + "umpc", + "umts", + "unc", + "univac", + "ups", + "uri", + "url", + "usb", + "usr", + "utc", + "utf", + "utp", + "utran", + "uucp", + "uuid", + "uun", + "uvc", + "uwp", + "ux", + "vax", + "vb", + "vba", + "vbs", + "vcpi", + "vdm", + "vdsl", + "vesa", + "vfat", + "vfs", + "vg", + "vga", + "vhf", + "vlan", + "vlb", + "vlf", + "vliw", + "vlsi", + "vlsm", + "vm", + "vmm", + "vnc", + "vod", + "vpn", + "vpu", + "vr", + "vram", + "vrml", + "vsam", + "vsat", + "vt", + "vtam", + "vtl", + "wafs", + "wai", + "wais", + "wan", + "wap", + "wasm", + "wbem", + "wcag", + "wcf", + "wdm", + "wep", + "wfi", + "wins", + "wlan", + "wma", + "wmi", + "wmv", + "wns", + "wol", + "wor", + "wora", + "wpa", + "wpad", + "wpan", + "wpf", + "wsdl", + "wsfl", + "wusb", + "wwan", + "wwdc", + "wwid", + "wwn", + "www", + "wysiwyg", + "wzc", + "xag", + "xaml", + "xcbl", + "xdm", + "xdmcp", + "xhtml", + "xilp", + "xml", + "xmms", + "xmpp", + "xms", + "xns", + "xp", + "xpcom", + "xpi", + "xpidl", + "xps", + "xsd", + "xsl", + "xslt", + "xss", + "xtf", + "xul", + "xvga", + "yaaf", + "yacc", + "yaml", + "zcav", + "zcs", + "zif", + "zifs", + "zisc", + "zma", + "zoi", + "zope", + "zpl", ] as const; diff --git a/packages/quicktype-core/src/support/Acronyms.ts b/packages/quicktype-core/src/support/Acronyms.ts index a5c715408..7c6ca0437 100644 --- a/packages/quicktype-core/src/support/Acronyms.ts +++ b/packages/quicktype-core/src/support/Acronyms.ts @@ -1,38 +1,41 @@ import { EnumOption } from "../RendererOptions"; -import { allLowerWordStyle, allUpperWordStyle, firstUpperWordStyle, originalWord } from "./Strings"; +import { + allLowerWordStyle, + allUpperWordStyle, + firstUpperWordStyle, + originalWord, +} from "./Strings"; export enum AcronymStyleOptions { Camel = "camel", Lower = "lowerCase", Original = "original", - Pascal = "pascal" + Pascal = "pascal", } -export const acronymOption = function (defaultOption: AcronymStyleOptions) { - return new EnumOption( +export const acronymOption = (defaultOption: AcronymStyleOptions) => new EnumOption( "acronym-style", "Acronym naming style", { [AcronymStyleOptions.Original]: AcronymStyleOptions.Original, [AcronymStyleOptions.Pascal]: AcronymStyleOptions.Pascal, [AcronymStyleOptions.Camel]: AcronymStyleOptions.Camel, - [AcronymStyleOptions.Lower]: AcronymStyleOptions.Lower + [AcronymStyleOptions.Lower]: AcronymStyleOptions.Lower, } as const, defaultOption, - "secondary" + "secondary", ); -}; const options = { [AcronymStyleOptions.Pascal]: allUpperWordStyle, [AcronymStyleOptions.Camel]: firstUpperWordStyle, [AcronymStyleOptions.Original]: originalWord, - [AcronymStyleOptions.Lower]: allLowerWordStyle + [AcronymStyleOptions.Lower]: allLowerWordStyle, } as const; export function acronymStyle( - style: AcronymStyle + style: AcronymStyle, ): (typeof options)[AcronymStyle] { return options[style]; } diff --git a/packages/quicktype-core/src/support/Chance.ts b/packages/quicktype-core/src/support/Chance.ts index 74f8162ac..f4c553c5f 100644 --- a/packages/quicktype-core/src/support/Chance.ts +++ b/packages/quicktype-core/src/support/Chance.ts @@ -74,7 +74,9 @@ class MersenneTwister { for (this.mti = 1; this.mti < this.N; this.mti++) { s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30); this.mt[this.mti] = - ((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253 + this.mti; + ((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + + (s & 0x0000ffff) * 1812433253 + + this.mti; /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous versions, MSBs of the seed affect */ /* only MSBs of the array mt[]. */ @@ -87,7 +89,7 @@ class MersenneTwister { /* generates a random number on [0,0xffffffff]-interval */ private genrand_int32() { let y; - let mag01 = [0x0, this.MATRIX_A]; + const mag01 = [0x0, this.MATRIX_A]; /* mag01[x] = x * MATRIX_A for x=0,1 */ if (this.mti >= this.N) { @@ -100,17 +102,27 @@ class MersenneTwister { } for (kk = 0; kk < this.N - this.M; kk++) { - y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK); + y = + (this.mt[kk] & this.UPPER_MASK) | + (this.mt[kk + 1] & this.LOWER_MASK); this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1]; } for (; kk < this.N - 1; kk++) { - y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK); - this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1]; + y = + (this.mt[kk] & this.UPPER_MASK) | + (this.mt[kk + 1] & this.LOWER_MASK); + this.mt[kk] = + this.mt[kk + (this.M - this.N)] ^ + (y >>> 1) ^ + mag01[y & 0x1]; } - y = (this.mt[this.N - 1] & this.UPPER_MASK) | (this.mt[0] & this.LOWER_MASK); - this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1]; + y = + (this.mt[this.N - 1] & this.UPPER_MASK) | + (this.mt[0] & this.LOWER_MASK); + this.mt[this.N - 1] = + this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1]; this.mti = 0; } @@ -158,7 +170,9 @@ export class Chance { * @throws {RangeError} min cannot be greater than max */ integer(options: { max: number; min: number }): number { - return Math.floor(this.random() * (options.max - options.min + 1) + options.min); + return Math.floor( + this.random() * (options.max - options.min + 1) + options.min, + ); } /** @@ -186,7 +200,15 @@ export class Chance { animal(): string { // if user does not put in any animal type, will return a random animal regardless - const animalTypeArray = ["desert", "forest", "ocean", "zoo", "farm", "pet", "grassland"]; + const animalTypeArray = [ + "desert", + "forest", + "ocean", + "zoo", + "farm", + "pet", + "grassland", + ]; return this.pick(animals[this.pick(animalTypeArray)]); } @@ -490,7 +512,7 @@ const animals: { [kind: string]: string[] } = { "Yellow Tube Sponge", "Yellowfin Tuna", "Zebrashark", - "Zooplankton" + "Zooplankton", ], // list of desert, grassland, and forest animals comes from http://www.skyenimals.com/ desert: [ @@ -583,7 +605,7 @@ const animals: { [kind: string]: string[] } = { "Vulture", "Waxwing", "Xerus", - "Zebra" + "Zebra", ], grassland: [ "Aardvark", @@ -726,7 +748,7 @@ const animals: { [kind: string]: string[] } = { "Thornbill", "Thrush", "Toad", - "Tortoise" + "Tortoise", ], forest: [ "Agouti", @@ -922,7 +944,7 @@ const animals: { [kind: string]: string[] } = { "Wolf", "Wombat", "Woodchuck", - "Woodpecker" + "Woodpecker", ], // list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html farm: [ @@ -953,7 +975,7 @@ const animals: { [kind: string]: string[] } = { "Silkworm", "Turkey", "Yak", - "Zebu" + "Zebu", ], // list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm pet: [ @@ -999,7 +1021,7 @@ const animals: { [kind: string]: string[] } = { "Sugar Gliders", "Tarantula", "Turkeys", - "Turtles" + "Turtles", ], // list of zoo animals comes from https://bronxzoo.com/animals zoo: [ @@ -1069,8 +1091,8 @@ const animals: { [kind: string]: string[] } = { "Tufted Puffin", "White Cheeked Gibbon", "White-throated Bee Eater", - "Zebra" - ] + "Zebra", + ], }; // Source: https://en.wikipedia.org/wiki/List_of_population_centers_by_latitude @@ -2171,5 +2193,5 @@ const cities: string[] = [ "Villa Las Estrellas", "Esperanza", "Rothera", - "Concordia" + "Concordia", ]; diff --git a/packages/quicktype-core/src/support/Comments.ts b/packages/quicktype-core/src/support/Comments.ts index 38dd96415..5437fbd0c 100644 --- a/packages/quicktype-core/src/support/Comments.ts +++ b/packages/quicktype-core/src/support/Comments.ts @@ -1,4 +1,4 @@ -import { type Sourcelike } from "../Source"; +import type { Sourcelike } from "../Source"; export interface CommentOptions { afterComment?: string; @@ -18,7 +18,10 @@ type CustomCommentConfig = CommentOptions & { customLines: Sourcelike[]; }; -export type CommentConfig = DescriptionBlockCommentConfig | InlineCommentConfig | CustomCommentConfig; +export type CommentConfig = + | DescriptionBlockCommentConfig + | InlineCommentConfig + | CustomCommentConfig; export type Comment = string | CommentConfig; diff --git a/packages/quicktype-core/src/support/Converters.ts b/packages/quicktype-core/src/support/Converters.ts index 0bc2f58fb..282e4e543 100644 --- a/packages/quicktype-core/src/support/Converters.ts +++ b/packages/quicktype-core/src/support/Converters.ts @@ -2,7 +2,7 @@ import { EnumOption } from "../RendererOptions"; export enum ConvertersOptions { AllObjects = "all-objects", - TopLevel = "top-level" + TopLevel = "top-level", } export function convertersOption() { @@ -11,9 +11,9 @@ export function convertersOption() { "Which converters to generate (top-level by default)", { [ConvertersOptions.TopLevel]: ConvertersOptions.TopLevel, - [ConvertersOptions.AllObjects]: ConvertersOptions.AllObjects + [ConvertersOptions.AllObjects]: ConvertersOptions.AllObjects, } as const, ConvertersOptions.TopLevel, - "secondary" + "secondary", ); } diff --git a/packages/quicktype-core/src/support/Strings.ts b/packages/quicktype-core/src/support/Strings.ts index 1b0614ad5..0c4fd2175 100644 --- a/packages/quicktype-core/src/support/Strings.ts +++ b/packages/quicktype-core/src/support/Strings.ts @@ -36,19 +36,21 @@ function computeAsciiMap(mapper: (codePoint: number) => string): { type CodePointPredicate = (codePoint: number) => boolean; -function precomputedCodePointPredicate(p: CodePointPredicate): CodePointPredicate { +function precomputedCodePointPredicate( + p: CodePointPredicate, +): CodePointPredicate { const asciiResults: boolean[] = []; for (let cp = 0; cp < 128; cp++) { asciiResults.push(p(cp)); } - return function (cp: number) { - return cp < 128 ? asciiResults[cp] : p(cp); - }; + return (cp: number) => cp < 128 ? asciiResults[cp] : p(cp); } // FIXME: This is a copy of code in src/Data/String/Util.js -export function utf16ConcatMap(mapper: (utf16Unit: number) => string): (s: string) => string { +export function utf16ConcatMap( + mapper: (utf16Unit: number) => string, +): (s: string) => string { const { charStringMap, charNoEscapeMap } = computeAsciiMap(mapper); // eslint-disable-next-line @typescript-eslint/naming-convention @@ -91,7 +93,9 @@ function isLowSurrogate(cc: number): boolean { return cc >= 0xdc00 && cc <= 0xdfff; } -export function utf32ConcatMap(mapper: (codePoint: number) => string): (s: string) => string { +export function utf32ConcatMap( + mapper: (codePoint: number) => string, +): (s: string) => string { const { charStringMap, charNoEscapeMap } = computeAsciiMap(mapper); // eslint-disable-next-line @typescript-eslint/naming-convention @@ -109,7 +113,11 @@ export function utf32ConcatMap(mapper: (codePoint: number) => string): (s: strin const highSurrogate = cc; i++; const lowSurrogate = s.charCodeAt(i); - messageAssert(isLowSurrogate(lowSurrogate), "MiscUnicodeHighSurrogateWithoutLowSurrogate", {}); + messageAssert( + isLowSurrogate(lowSurrogate), + "MiscUnicodeHighSurrogateWithoutLowSurrogate", + {}, + ); const highBits = highSurrogate - 0xd800; const lowBits = lowSurrogate - 0xdc00; cc = 0x10000 + lowBits + (highBits << 10); @@ -136,12 +144,18 @@ export function utf32ConcatMap(mapper: (codePoint: number) => string): (s: strin }; } -export function utf16LegalizeCharacters(isLegal: (utf16Unit: number) => boolean): (s: string) => string { - return utf16ConcatMap(u => (isLegal(u) ? String.fromCharCode(u) : "")); +export function utf16LegalizeCharacters( + isLegal: (utf16Unit: number) => boolean, +): (s: string) => string { + return utf16ConcatMap((u) => (isLegal(u) ? String.fromCharCode(u) : "")); } -export function legalizeCharacters(isLegal: (codePoint: number) => boolean): (s: string) => string { - return utf32ConcatMap(u => (u <= 0xffff && isLegal(u) ? String.fromCharCode(u) : "")); +export function legalizeCharacters( + isLegal: (codePoint: number) => boolean, +): (s: string) => string { + return utf32ConcatMap((u) => + u <= 0xffff && isLegal(u) ? String.fromCharCode(u) : "", + ); } export function repeatString(s: string, n: number): string { @@ -167,7 +181,7 @@ export function repeatString(s: string, n: number): string { } export function intToHex(i: number, width: number): string { - let str = i.toString(16); + const str = i.toString(16); if (str.length >= width) return str; return repeatString("0", width - str.length) + str; } @@ -182,7 +196,7 @@ export function standardUnicodeHexEscape(codePoint: number): string { export function escapeNonPrintableMapper( printablePredicate: (codePoint: number) => boolean, - escaper: (codePoint: number) => string + escaper: (codePoint: number) => string, ): (u: number) => string { function mapper(u: number): string { switch (u) { @@ -206,8 +220,12 @@ export function escapeNonPrintableMapper( return mapper; } -export const utf16StringEscape = utf16ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeHexEscape)); -export const stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, standardUnicodeHexEscape)); +export const utf16StringEscape = utf16ConcatMap( + escapeNonPrintableMapper(isPrintable, standardUnicodeHexEscape), +); +export const stringEscape = utf32ConcatMap( + escapeNonPrintableMapper(isPrintable, standardUnicodeHexEscape), +); export function isPrintable(codePoint: number): boolean { if (codePoint > 0xffff) return false; @@ -235,7 +253,7 @@ export function isPrintable(codePoint: number): boolean { "Pi", "Nl", "Mn", - "Lo" + "Lo", ].includes(category); } @@ -293,11 +311,11 @@ function modifyFirstChar(f: (c: string) => string, s: string): string { } export function capitalize(str: string): string { - return modifyFirstChar(c => c.toUpperCase(), str); + return modifyFirstChar((c) => c.toUpperCase(), str); } export function decapitalize(str: string): string { - return modifyFirstChar(c => c.toLowerCase(), str); + return modifyFirstChar((c) => c.toLowerCase(), str); } const wordSeparatorRegex = /[-_. ]+/; @@ -319,7 +337,7 @@ export function snakeCase(str: string): string { export function startWithLetter( isAllowedStart: (codePoint: number) => boolean, // FIXME: technically, this operates on UTF16 units upper: boolean, - str: string + str: string, ): string { const modify = upper ? capitalize : decapitalize; if (str === "") return modify("empty"); @@ -335,10 +353,18 @@ export interface WordInName { } const fastIsWordCharacter = precomputedCodePointPredicate(isWordCharacter); -const fastIsNonWordCharacter = precomputedCodePointPredicate(cp => !isWordCharacter(cp)); -const fastIsLowerCase = precomputedCodePointPredicate(cp => unicode.isLowerCase(cp)); -export const fastIsUpperCase = precomputedCodePointPredicate(cp => unicode.isUpperCase(cp)); -const fastNonLetter = precomputedCodePointPredicate(cp => !unicode.isLowerCase(cp) && !unicode.isUpperCase(cp)); +const fastIsNonWordCharacter = precomputedCodePointPredicate( + (cp) => !isWordCharacter(cp), +); +const fastIsLowerCase = precomputedCodePointPredicate((cp) => + unicode.isLowerCase(cp), +); +export const fastIsUpperCase = precomputedCodePointPredicate((cp) => + unicode.isUpperCase(cp), +); +const fastNonLetter = precomputedCodePointPredicate( + (cp) => !unicode.isLowerCase(cp) && !unicode.isUpperCase(cp), +); const fastIsDigit = precomputedCodePointPredicate(isDigit); export function splitIntoWords(s: string): WordInName[] { @@ -387,7 +413,10 @@ export function splitIntoWords(s: string): WordInName[] { } function startInterval(): void { - assert(intervalStart === undefined, "Interval started before last one was committed"); + assert( + intervalStart === undefined, + "Interval started before last one was committed", + ); intervalStart = i; } @@ -406,7 +435,9 @@ export function splitIntoWords(s: string): WordInName[] { i += 1; } - const allUpper = lastLowerCaseIndex === undefined || lastLowerCaseIndex < intervalStart; + const allUpper = + lastLowerCaseIndex === undefined || + lastLowerCaseIndex < intervalStart; intervals.push([intervalStart, i, allUpper]); intervalStart = undefined; } @@ -498,7 +529,7 @@ export function combineWords( firstWordAcronymStyle: WordStyle, restAcronymStyle: WordStyle, separator: string, - isStartCharacter: (codePoint: number) => boolean + isStartCharacter: (codePoint: number) => boolean, ): string { const legalizedWords: WordInName[] = []; for (const w of words) { @@ -509,7 +540,10 @@ export function combineWords( if (legalizedWords.length === 0) { const validEmpty = removeInvalidCharacters("empty"); - assert(validEmpty.length > 0, 'Word "empty" is invalid in target language'); + assert( + validEmpty.length > 0, + 'Word "empty" is invalid in target language', + ); legalizedWords.push({ word: validEmpty, isAcronym: false }); } @@ -520,11 +554,14 @@ export function combineWords( let restWords: WordInName[]; if (!isStartCharacter(defined(styledFirstWord.codePointAt(0)))) { const validThe = removeInvalidCharacters("the"); - assert(validThe.length > 0, 'Word "the" is invalid in the target language'); + assert( + validThe.length > 0, + 'Word "the" is invalid in the target language', + ); const styledThe = styleWord(firstWordStyle, validThe); assert( isStartCharacter(defined(styledThe.codePointAt(0))), - 'The first character of styling "the" is not a start character' + 'The first character of styling "the" is not a start character', ); styledWords.push(styledThe); restWords = legalizedWords; @@ -549,7 +586,7 @@ export function addPrefixIfNecessary(prefix: string, name: string): string { export function makeNameStyle( namingStyle: NamingStyle, legalizeName: (name: string) => string, - prefix?: string + prefix?: string, ): (rawName: string) => string { let separator: string; let firstWordStyle: WordStyle; @@ -564,7 +601,10 @@ export function makeNameStyle( namingStyle === "camel-upper-acronyms" ) { separator = ""; - if (namingStyle === "pascal-upper-acronyms" || namingStyle === "camel-upper-acronyms") { + if ( + namingStyle === "pascal-upper-acronyms" || + namingStyle === "camel-upper-acronyms" + ) { restWordStyle = firstUpperWordStyle; restAcronymStyle = allUpperWordStyle; } else { @@ -584,10 +624,18 @@ export function makeNameStyle( firstWordStyle = firstWordAcronymStyle = allLowerWordStyle; break; case "underscore": - firstWordStyle = restWordStyle = firstWordAcronymStyle = restAcronymStyle = allLowerWordStyle; + firstWordStyle = + restWordStyle = + firstWordAcronymStyle = + restAcronymStyle = + allLowerWordStyle; break; case "upper-underscore": - firstWordStyle = restWordStyle = firstWordAcronymStyle = restAcronymStyle = allUpperWordStyle; + firstWordStyle = + restWordStyle = + firstWordAcronymStyle = + restAcronymStyle = + allUpperWordStyle; break; default: return assertNever(namingStyle); @@ -604,7 +652,7 @@ export function makeNameStyle( firstWordAcronymStyle, restAcronymStyle, separator, - isLetterOrUnderscore + isLetterOrUnderscore, ); if (prefix !== undefined) { diff --git a/packages/quicktype-core/src/support/Support.ts b/packages/quicktype-core/src/support/Support.ts index 3715a7108..d81fa26fe 100644 --- a/packages/quicktype-core/src/support/Support.ts +++ b/packages/quicktype-core/src/support/Support.ts @@ -2,17 +2,22 @@ import { Base64 } from "js-base64"; import * as pako from "pako"; import * as YAML from "yaml"; -import { type JSONSchema } from "../input/JSONSchemaStore"; +import type { JSONSchema } from "../input/JSONSchemaStore"; import { messageError } from "../Messages"; export interface StringMap { - // eslint-disable-next-line @typescript-eslint/no-explicit-any [name: string]: any; } export function isStringMap(x: unknown): x is StringMap; -export function isStringMap(x: unknown, checkValue: (v: unknown) => v is T): x is { [name: string]: T }; -export function isStringMap(x: unknown, checkValue?: (v: unknown) => v is T): boolean { +export function isStringMap( + x: unknown, + checkValue: (v: unknown) => v is T, +): x is { [name: string]: T }; +export function isStringMap( + x: unknown, + checkValue?: (v: unknown) => v is T, +): boolean { if (typeof x !== "object" || Array.isArray(x) || x === null) { return false; } @@ -34,8 +39,14 @@ export function checkString(x: unknown): x is string { } export function checkStringMap(x: unknown): StringMap; -export function checkStringMap(x: unknown, checkValue: (v: unknown) => v is T): { [name: string]: T }; -export function checkStringMap(x: unknown, checkValue?: (v: unknown) => v is T): StringMap { +export function checkStringMap( + x: unknown, + checkValue: (v: unknown) => v is T, +): { [name: string]: T }; +export function checkStringMap( + x: unknown, + checkValue?: (v: unknown) => v is T, +): StringMap { if (checkValue && isStringMap(x, checkValue)) { return x; } @@ -48,8 +59,14 @@ export function checkStringMap(x: unknown, checkValue?: (v: unknown) => v is } export function checkArray(x: unknown): unknown[]; -export function checkArray(x: unknown, checkItem: (v: unknown) => v is T): T[]; -export function checkArray(x: unknown, checkItem?: (v: unknown) => v is T): T[] { +export function checkArray( + x: unknown, + checkItem: (v: unknown) => v is T, +): T[]; +export function checkArray( + x: unknown, + checkItem?: (v: unknown) => v is T, +): T[] { if (!Array.isArray(x)) { return panic(`Value must be an array, but is ${x}`); } @@ -124,7 +141,11 @@ export function inflateBase64(encoded: string): string { return pako.inflate(bytes, { to: "string" }); } -export function parseJSON(text: string, description: string, address = ""): JSONSchema | undefined { +export function parseJSON( + text: string, + description: string, + address = "", +): JSONSchema | undefined { try { // https://gist.github.com/pbakondy/f5045eff725193dad9c7 if (text.charCodeAt(0) === 0xfeff) { @@ -141,7 +162,11 @@ export function parseJSON(text: string, description: string, address = "): number[] { +export function numberEnumValues( + e: Record, +): number[] { const result: number[] = []; for (const k of Object.keys(e)) { const v = e[k]; diff --git a/packages/quicktype-core/src/types.ts b/packages/quicktype-core/src/types.ts index 22a702b5a..e692e2b8d 100644 --- a/packages/quicktype-core/src/types.ts +++ b/packages/quicktype-core/src/types.ts @@ -1,9 +1,2 @@ export * from "./language/types"; export * from "./language/options.types"; - -// FIXME: remove these when options are strongly typed -/* eslint-disable @typescript-eslint/no-explicit-any */ -export type FixMeOptionsType = Record; - -// FIXME: Remove this post TS5.4 -export type NoInfer = [T][T extends any ? 0 : never]; diff --git a/packages/quicktype-graphql-input/package.json b/packages/quicktype-graphql-input/package.json index 8a17ead16..24432249d 100644 --- a/packages/quicktype-graphql-input/package.json +++ b/packages/quicktype-graphql-input/package.json @@ -18,9 +18,7 @@ "devDependencies": { "@types/node": "18.19.31", "@types/graphql": "^0.11.7", - "typescript": "4.9.5" + "typescript": "~5.8.3" }, - "files": [ - "dist" - ] + "files": ["dist"] } diff --git a/packages/quicktype-graphql-input/src/GraphQLSchema.ts b/packages/quicktype-graphql-input/src/GraphQLSchema.ts index e53072baf..77e762f75 100644 --- a/packages/quicktype-graphql-input/src/GraphQLSchema.ts +++ b/packages/quicktype-graphql-input/src/GraphQLSchema.ts @@ -20,7 +20,7 @@ export enum __DirectiveLocation { ENUM = "ENUM", // Location adjacent to an enum definition. ENUM_VALUE = "ENUM_VALUE", // Location adjacent to an enum value definition. INPUT_OBJECT = "INPUT_OBJECT", // Location adjacent to an input object type definition. - INPUT_FIELD_DEFINITION = "INPUT_FIELD_DEFINITION" // Location adjacent to an input object field definition. + INPUT_FIELD_DEFINITION = "INPUT_FIELD_DEFINITION", // Location adjacent to an input object field definition. } // An enum describing what kind of type a given `__Type` is. @@ -32,7 +32,7 @@ export enum TypeKind { ENUM = "ENUM", // Indicates this type is an enum. `enumValues` is a valid field. INPUT_OBJECT = "INPUT_OBJECT", // Indicates this type is an input object. `inputFields` is a valid field. LIST = "LIST", // Indicates this type is a list. `ofType` is a valid field. - NON_NULL = "NON_NULL" // Indicates this type is a non-null. `ofType` is a valid field. + NON_NULL = "NON_NULL", // Indicates this type is a non-null. `ofType` is a valid field. } export type GraphQLSchema = { diff --git a/packages/quicktype-graphql-input/src/index.ts b/packages/quicktype-graphql-input/src/index.ts index 1b18754ac..7bce8160c 100644 --- a/packages/quicktype-graphql-input/src/index.ts +++ b/packages/quicktype-graphql-input/src/index.ts @@ -1,13 +1,13 @@ import { iterableFirst, mapFromObject, setMap } from "collection-utils"; import * as graphql from "graphql/language"; -import { - type DirectiveNode, - type DocumentNode, - type FieldNode, - type FragmentDefinitionNode, - type OperationDefinitionNode, - type SelectionNode, - type SelectionSetNode +import type { + DirectiveNode, + DocumentNode, + FieldNode, + FragmentDefinitionNode, + OperationDefinitionNode, + SelectionNode, + SelectionSetNode, } from "graphql/language/ast"; import { type ClassProperty, @@ -26,7 +26,7 @@ import { messageAssert, namesTypeAttributeKind, panic, - removeNullFromUnion + removeNullFromUnion, } from "quicktype-core"; import { type GraphQLSchema, TypeKind } from "./GraphQLSchema"; @@ -63,7 +63,10 @@ interface InputValue { } function getField(t: GQLType, name: string): Field { - if (!t.fields) return panic(`Required field ${name} in type ${t.name} which doesn't have fields.`); + if (!t.fields) + return panic( + `Required field ${name} in type ${t.name} which doesn't have fields.`, + ); for (const f of t.fields) { if (f.name === name) { return f; @@ -73,12 +76,19 @@ function getField(t: GQLType, name: string): Field { return panic(`Required field ${name} not defined on type ${t.name}.`); } -function makeNames(name: string, fieldName: string | null, containingTypeName: string | null): TypeAttributes { +function makeNames( + name: string, + fieldName: string | null, + containingTypeName: string | null, +): TypeAttributes { const alternatives: string[] = []; if (fieldName) alternatives.push(fieldName); if (containingTypeName) alternatives.push(`${containingTypeName}_${name}`); - if (fieldName && containingTypeName) alternatives.push(`${containingTypeName}_${fieldName}`); - return namesTypeAttributeKind.makeAttributes(TypeNames.make(new Set([name]), new Set(alternatives), false)); + if (fieldName && containingTypeName) + alternatives.push(`${containingTypeName}_${fieldName}`); + return namesTypeAttributeKind.makeAttributes( + TypeNames.make(new Set([name]), new Set(alternatives), false), + ); } function makeNullable( @@ -86,17 +96,25 @@ function makeNullable( tref: TypeRef, name: string, fieldName: string | null, - containingTypeName: string + containingTypeName: string, ): TypeRef { const typeNames = makeNames(name, fieldName, containingTypeName); const t = derefTypeRef(tref, builder.typeGraph); if (!(t instanceof UnionType)) { - return builder.getUnionType(typeNames, new Set([tref, builder.getPrimitiveType("null")])); + return builder.getUnionType( + typeNames, + new Set([tref, builder.getPrimitiveType("null")]), + ); } const [maybeNull, nonNulls] = removeNullFromUnion(t); if (maybeNull) return tref; - return builder.getUnionType(typeNames, setMap(nonNulls, nn => nn.typeRef).add(builder.getPrimitiveType("null"))); + return builder.getUnionType( + typeNames, + setMap(nonNulls, (nn) => nn.typeRef).add( + builder.getPrimitiveType("null"), + ), + ); } // This is really not the way to do this, but it's easy and works. By default @@ -117,7 +135,7 @@ function removeNull(builder: TypeBuilder, tref: TypeRef): TypeRef { if (nonNulls.size === 1) return first.typeRef; return builder.getUnionType( t.getAttributes(), - setMap(nonNulls, nn => nn.typeRef) + setMap(nonNulls, (nn) => nn.typeRef), ); } @@ -134,7 +152,10 @@ function makeScalar(builder: TypeBuilder, ft: GQLType): TypeRef { return builder.getPrimitiveType("double"); default: // FIXME: support ID specifically? - return builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted); + return builder.getStringType( + emptyTypeAttributes, + StringTypes.unrestricted, + ); } } @@ -154,10 +175,18 @@ interface Selection { selection: SelectionNode; } -function expandSelectionSet(selectionSet: SelectionSetNode, inType: GQLType, optional: boolean): Selection[] { +function expandSelectionSet( + selectionSet: SelectionSetNode, + inType: GQLType, + optional: boolean, +): Selection[] { return selectionSet.selections .reverse() - .map(s => ({ selection: s, inType, optional: optional || hasOptionalDirectives(s.directives) })); + .map((s) => ({ + selection: s, + inType, + optional: optional || hasOptionalDirectives(s.directives), + })); } interface GQLSchema { @@ -197,7 +226,7 @@ class GQLQuery { builder: TypeBuilder, fieldNode: FieldNode, fieldType: GQLType, - containingTypeName: string + containingTypeName: string, ): TypeRef => { let optional = hasOptionalDirectives(fieldNode.directives); let result: TypeRef; @@ -220,18 +249,18 @@ class GQLQuery { fieldNode.selectionSet, fieldType, fieldNode.name.value, - containingTypeName + containingTypeName, ), fieldNode.name.value, null, - containingTypeName + containingTypeName, ); case TypeKind.ENUM: if (!fieldType.enumValues) { return panic("Enum type doesn't have values"); } - const values = fieldType.enumValues.map(ev => ev.name); + const values = fieldType.enumValues.map((ev) => ev.name); let name: string; let fieldName: string | null; if (fieldType.name) { @@ -243,7 +272,10 @@ class GQLQuery { } optional = true; - result = builder.getEnumType(makeNames(name, fieldName, containingTypeName), new Set(values)); + result = builder.getEnumType( + makeNames(name, fieldName, containingTypeName), + new Set(values), + ); break; case TypeKind.INPUT_OBJECT: // FIXME: Support input objects @@ -256,7 +288,12 @@ class GQLQuery { optional = true; result = builder.getArrayType( emptyTypeAttributes, - this.makeIRTypeFromFieldNode(builder, fieldNode, fieldType.ofType, containingTypeName) + this.makeIRTypeFromFieldNode( + builder, + fieldNode, + fieldType.ofType, + containingTypeName, + ), ); break; case TypeKind.NON_NULL: @@ -266,7 +303,12 @@ class GQLQuery { result = removeNull( builder, - this.makeIRTypeFromFieldNode(builder, fieldNode, fieldType.ofType, containingTypeName) + this.makeIRTypeFromFieldNode( + builder, + fieldNode, + fieldType.ofType, + containingTypeName, + ), ); break; default: @@ -274,7 +316,13 @@ class GQLQuery { } if (optional) { - result = makeNullable(builder, result, fieldNode.name.value, null, containingTypeName); + result = makeNullable( + builder, + result, + fieldNode.name.value, + null, + containingTypeName, + ); } return result; @@ -292,18 +340,22 @@ class GQLQuery { gqlType: GQLType, containingFieldName: string | null, containingTypeName: string | null, - overrideName?: string + overrideName?: string, ): TypeRef => { if ( gqlType.kind !== TypeKind.OBJECT && gqlType.kind !== TypeKind.INTERFACE && gqlType.kind !== TypeKind.UNION ) { - return panic("Type for selection set is not object, interface, or union."); + return panic( + "Type for selection set is not object, interface, or union.", + ); } if (!gqlType.name) { - return panic("Object, interface, or union type doesn't have a name."); + return panic( + "Object, interface, or union type doesn't have a name.", + ); } const nameOrOverride = overrideName ?? gqlType.name; @@ -316,16 +368,32 @@ class GQLQuery { switch (selection.kind) { case "Field": const fieldName = selection.name.value; - const givenName = selection.alias ? selection.alias.value : fieldName; + const givenName = selection.alias + ? selection.alias.value + : fieldName; const field = getField(inType, fieldName); - let fieldType = this.makeIRTypeFromFieldNode(builder, selection, field.type, nameOrOverride); - properties.set(givenName, builder.makeClassProperty(fieldType, optional)); + const fieldType = this.makeIRTypeFromFieldNode( + builder, + selection, + field.type, + nameOrOverride, + ); + properties.set( + givenName, + builder.makeClassProperty(fieldType, optional), + ); break; case "FragmentSpread": { const fragment = this.getFragment(selection.name.value); - const fragmentType = this._schema.types[fragment.typeCondition.name.value]; - const fragmentOptional = optional || fragmentType.name !== inType.name; - const expanded = expandSelectionSet(fragment.selectionSet, fragmentType, fragmentOptional); + const fragmentType = + this._schema.types[fragment.typeCondition.name.value]; + const fragmentOptional = + optional || fragmentType.name !== inType.name; + const expanded = expandSelectionSet( + fragment.selectionSet, + fragmentType, + fragmentOptional, + ); selections = selections.concat(expanded); break; } @@ -336,8 +404,14 @@ class GQLQuery { ? this._schema.types[selection.typeCondition.name.value] : inType; const fragmentOptional = - optional || fragmentType.name !== inType.name || hasOptionalDirectives(selection.directives); - const expanded = expandSelectionSet(selection.selectionSet, fragmentType, fragmentOptional); + optional || + fragmentType.name !== inType.name || + hasOptionalDirectives(selection.directives); + const expanded = expandSelectionSet( + selection.selectionSet, + fragmentType, + fragmentOptional, + ); selections = selections.concat(expanded); break; } @@ -347,10 +421,17 @@ class GQLQuery { } } - return builder.getClassType(makeNames(nameOrOverride, containingFieldName, containingTypeName), properties); + return builder.getClassType( + makeNames(nameOrOverride, containingFieldName, containingTypeName), + properties, + ); }; - public makeType(builder: TypeBuilder, query: OperationDefinitionNode, queryName: string): TypeRef { + public makeType( + builder: TypeBuilder, + query: OperationDefinitionNode, + queryName: string, + ): TypeRef { if (query.operation === "query") { return this.makeIRTypeFromSelectionSet( builder, @@ -358,7 +439,7 @@ class GQLQuery { this._schema.queryType, null, queryName, - "data" + "data", ); } @@ -373,7 +454,7 @@ class GQLQuery { this._schema.mutationType, null, queryName, - "data" + "data", ); } @@ -398,7 +479,11 @@ class GQLSchemaFromJSON implements GQLSchema { for (const t of schema.__schema.types as GQLType[]) { if (!t.name) return panic("No top-level type name given"); - this.types[t.name] = { kind: t.kind, name: t.name, description: t.description }; + this.types[t.name] = { + kind: t.kind, + name: t.name, + description: t.description, + }; } for (const t of schema.__schema.types) { @@ -432,14 +517,17 @@ class GQLSchemaFromJSON implements GQLSchema { this.mutationType = mutationType; } - private readonly addTypeFields = (target: GQLType, source: GQLType): void => { + private readonly addTypeFields = ( + target: GQLType, + source: GQLType, + ): void => { if (source.fields) { - target.fields = source.fields.map(f => { + target.fields = source.fields.map((f) => { return { name: f.name, description: f.description, type: this.makeType(f.type), - args: f.args.map(this.makeInputValue) + args: f.args.map(this.makeInputValue), }; }); // console.log(`${target.name} has ${target.fields.length} fields`); @@ -461,7 +549,7 @@ class GQLSchemaFromJSON implements GQLSchema { } if (source.enumValues) { - target.enumValues = source.enumValues.map(ev => { + target.enumValues = source.enumValues.map((ev) => { return { name: ev.name, description: ev.description }; }); // console.log(`${target.name} has ${target.enumValues.length} enumValues`); @@ -473,7 +561,7 @@ class GQLSchemaFromJSON implements GQLSchema { name: iv.name, description: iv.description, type: this.makeType(iv.type), - defaultValue: iv.defaultValue + defaultValue: iv.defaultValue, }; }; @@ -484,11 +572,12 @@ class GQLSchemaFromJSON implements GQLSchema { return namedType; } - if (!t.ofType) return panic(`Type of kind ${t.kind} has neither name nor ofType`); + if (!t.ofType) + return panic(`Type of kind ${t.kind} has neither name nor ofType`); const type: GQLType = { kind: t.kind, description: t.description, - ofType: this.makeType(t.ofType) + ofType: this.makeType(t.ofType), }; this.addTypeFields(type, t); return type; @@ -499,7 +588,7 @@ function makeGraphQLQueryTypes( topLevelName: string, builder: TypeBuilder, json: { data: GraphQLSchema }, - queryString: string + queryString: string, ): Map { const schema = new GQLSchemaFromJSON(json); const query = new GQLQuery(schema, queryString); @@ -513,29 +602,42 @@ function makeGraphQLQueryTypes( const dataType = query.makeType(builder, odn, queryName); const dataOrNullType = builder.getUnionType( emptyTypeAttributes, - new Set([dataType, builder.getPrimitiveType("null")]) + new Set([dataType, builder.getPrimitiveType("null")]), ); const errorType = builder.getClassType( - namesTypeAttributeKind.makeAttributes(TypeNames.make(new Set(["error"]), new Set(["graphQLError"]), false)), + namesTypeAttributeKind.makeAttributes( + TypeNames.make( + new Set(["error"]), + new Set(["graphQLError"]), + false, + ), + ), mapFromObject({ message: builder.makeClassProperty( - builder.getStringType(emptyTypeAttributes, StringTypes.unrestricted), - false - ) - }) + builder.getStringType( + emptyTypeAttributes, + StringTypes.unrestricted, + ), + false, + ), + }), ); const errorArray = builder.getArrayType( namesTypeAttributeKind.makeAttributes( - TypeNames.make(new Set(["errors"]), new Set(["graphQLErrors"]), false) + TypeNames.make( + new Set(["errors"]), + new Set(["graphQLErrors"]), + false, + ), ), - errorType + errorType, ); const t = builder.getClassType( makeNamesTypeAttributes(queryName, false), mapFromObject({ data: builder.makeClassProperty(dataOrNullType, false), - errors: builder.makeClassProperty(errorArray, true) - }) + errors: builder.makeClassProperty(errorArray, true), + }), ); types.set(queryName, t); } @@ -572,7 +674,7 @@ export class GraphQLInput implements Input { public addSourceSync(source: GraphQLSourceData): void { this._topLevels.set(source.name, { schema: source.schema, - query: source.query + query: source.query, }); } @@ -580,15 +682,26 @@ export class GraphQLInput implements Input { return undefined; } - public async addTypes(ctx: RunContext, typeBuilder: TypeBuilder): Promise { + public async addTypes( + ctx: RunContext, + typeBuilder: TypeBuilder, + ): Promise { this.addTypesSync(ctx, typeBuilder); } public addTypesSync(_ctx: RunContext, typeBuilder: TypeBuilder): void { for (const [name, { schema, query }] of this._topLevels) { - const newTopLevels = makeGraphQLQueryTypes(name, typeBuilder, schema, query); + const newTopLevels = makeGraphQLQueryTypes( + name, + typeBuilder, + schema, + query, + ); for (const [actualName, t] of newTopLevels) { - typeBuilder.addTopLevel(this._topLevels.size === 1 ? name : actualName, t); + typeBuilder.addTopLevel( + this._topLevels.size === 1 ? name : actualName, + t, + ); } } } diff --git a/packages/quicktype-typescript-input/package.json b/packages/quicktype-typescript-input/package.json index b624fd081..773c5417f 100644 --- a/packages/quicktype-typescript-input/package.json +++ b/packages/quicktype-typescript-input/package.json @@ -18,7 +18,5 @@ "devDependencies": { "@types/node": "18.19.31" }, - "files": [ - "dist" - ] + "files": ["dist"] } diff --git a/packages/quicktype-typescript-input/src/index.ts b/packages/quicktype-typescript-input/src/index.ts index 3289e914b..6cf0cc424 100644 --- a/packages/quicktype-typescript-input/src/index.ts +++ b/packages/quicktype-typescript-input/src/index.ts @@ -1,12 +1,19 @@ -import { type PartialArgs, generateSchema } from "@mark.probst/typescript-json-schema"; -import { type JSONSchemaSourceData, defined, messageError } from "quicktype-core"; +import { + type PartialArgs, + generateSchema, +} from "@mark.probst/typescript-json-schema"; +import { + type JSONSchemaSourceData, + defined, + messageError, +} from "quicktype-core"; import * as ts from "typescript"; const settings: PartialArgs = { required: true, titles: true, topRef: true, - noExtraProps: true + noExtraProps: true, }; const compilerOptions: ts.CompilerOptions = { @@ -17,21 +24,26 @@ const compilerOptions: ts.CompilerOptions = { module: ts.ModuleKind.CommonJS, strictNullChecks: true, typeRoots: [], - rootDir: "." + rootDir: ".", }; -// FIXME: We're stringifying and then parsing this schema again. Just pass around +// FIXME: We're stringifying and then parsing this schema again. Just pass around // the schema directly. -export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchemaSourceData { +export function schemaForTypeScriptSources( + sourceFileNames: string[], +): JSONSchemaSourceData { const program = ts.createProgram(sourceFileNames, compilerOptions); const diagnostics = ts.getPreEmitDiagnostics(program); - const error = diagnostics.find(d => d.category === ts.DiagnosticCategory.Error); + const error = diagnostics.find( + (d) => d.category === ts.DiagnosticCategory.Error, + ); if (error !== undefined) { return messageError("TypeScriptCompilerError", { - message: ts.flattenDiagnosticMessageText(error.messageText, "\n") + message: ts.flattenDiagnosticMessageText(error.messageText, "\n"), }); } + // this breaks after upgrading to TS 5+ const schema = generateSchema(program, "*", settings); const uris: string[] = []; let topLevelName = ""; @@ -39,8 +51,12 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem // if there is a type that is `export default`, swap the corresponding ref if (schema?.definitions?.default) { const defaultDefinition = schema?.definitions?.default; - const matchingDefaultName = Object.entries(schema?.definitions ?? {}).find( - ([_name, definition]) => (definition as Record).$ref === "#/definitions/default" + const matchingDefaultName = Object.entries( + schema?.definitions ?? {}, + ).find( + ([_name, definition]) => + (definition as Record).$ref === + "#/definitions/default", )?.[0]; if (matchingDefaultName) { @@ -48,11 +64,17 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem (defaultDefinition as Record).title = topLevelName; schema.definitions[matchingDefaultName] = defaultDefinition; - schema.definitions.default = { $ref: `#/definitions/${matchingDefaultName}` }; + schema.definitions.default = { + $ref: `#/definitions/${matchingDefaultName}`, + }; } } - if (schema !== null && typeof schema === "object" && typeof schema.definitions === "object") { + if ( + schema !== null && + typeof schema === "object" && + typeof schema.definitions === "object" + ) { for (const name of Object.getOwnPropertyNames(schema.definitions)) { const definition = schema.definitions[name]; if ( @@ -71,7 +93,9 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem } const index = defined(matches.index); - definition.description = description.slice(0, index) + description.slice(index + matches[0].length); + definition.description = + description.slice(0, index) + + description.slice(index + matches[0].length); uris.push(`#/definitions/${name}`); @@ -89,5 +113,10 @@ export function schemaForTypeScriptSources(sourceFileNames: string[]): JSONSchem uris.push("#/definitions/"); } - return { schema: JSON.stringify(schema), name: topLevelName, uris, isConverted: true }; + return { + schema: JSON.stringify(schema), + name: topLevelName, + uris, + isConverted: true, + }; } diff --git a/packages/quicktype-vscode/package.json b/packages/quicktype-vscode/package.json index 5c96e9b56..a30f0783f 100644 --- a/packages/quicktype-vscode/package.json +++ b/packages/quicktype-vscode/package.json @@ -24,13 +24,8 @@ "engines": { "vscode": "^1.87.0" }, - "categories": [ - "Other" - ], - "keywords": [ - "json", - "converter" - ], + "categories": ["Other"], + "keywords": ["json", "converter"], "markdown": "github", "main": "dist/extension.js", "vsce": { @@ -154,7 +149,7 @@ "@vscode/test-electron": "^2.3.9", "@vscode/vsce": "^2.25.0", "eslint": "^8.56.0", - "typescript": "^5.3.3", + "typescript": "~5.8.3", "node-persist": "^4.0.1", "quicktype-core": "file:../quicktype-core", "quicktype-typescript-input": "file:../quicktype-typescript-input", diff --git a/packages/quicktype-vscode/src/extension.ts b/packages/quicktype-vscode/src/extension.ts index fecc619aa..cba2a3015 100644 --- a/packages/quicktype-vscode/src/extension.ts +++ b/packages/quicktype-vscode/src/extension.ts @@ -1,4 +1,4 @@ -"use strict"; + import * as path from "path"; @@ -14,7 +14,7 @@ import { isLanguageName, jsonInputForTargetLanguage, languageNamed, - quicktype + quicktype, } from "quicktype-core"; import { schemaForTypeScriptSources } from "quicktype-typescript-input"; // eslint-disable-next-line import/no-unresolved @@ -31,7 +31,7 @@ enum Command { OpenQuicktypeForJSON = "quicktype.openForJSON", OpenQuicktypeForJSONSchema = "quicktype.openForJSONSchema", OpenQuicktypeForTypeScript = "quicktype.openForTypeScript", - ChangeTargetLanguage = "quicktype.changeTargetLanguage" + ChangeTargetLanguage = "quicktype.changeTargetLanguage", } function jsonIsValid(json: string): boolean { @@ -44,15 +44,18 @@ function jsonIsValid(json: string): boolean { return true; } -async function promptTopLevelName(): Promise<{ cancelled: boolean; name: string }> { - let topLevelName = await vscode.window.showInputBox({ - prompt: "Top-level type name?" +async function promptTopLevelName(): Promise<{ + cancelled: boolean; + name: string; +}> { + const topLevelName = await vscode.window.showInputBox({ + prompt: "Top-level type name?", }); return { cancelled: topLevelName === undefined, // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - name: topLevelName || "TopLevel" + name: topLevelName || "TopLevel", }; } @@ -62,8 +65,10 @@ interface TargetLanguagePick { } async function pickTargetLanguage(): Promise { - const languageChoices = defaultTargetLanguages.map(l => l.displayName).sort(); - let chosenName = await vscode.window.showQuickPick(languageChoices); + const languageChoices = defaultTargetLanguages + .map((l) => l.displayName) + .sort(); + const chosenName = await vscode.window.showQuickPick(languageChoices); const cancelled = chosenName === undefined; if (chosenName === undefined || !isLanguageName(chosenName)) { return { cancelled, lang: languageNamed("typescript") }; @@ -72,14 +77,18 @@ async function pickTargetLanguage(): Promise { return { cancelled, lang: languageNamed(chosenName) }; } -async function getTargetLanguage(editor: vscode.TextEditor): Promise { +async function getTargetLanguage( + editor: vscode.TextEditor, +): Promise { const documentLanguage = editor.document.languageId; - const languageName = isLanguageName(documentLanguage) ? documentLanguage : "typescript"; + const languageName = isLanguageName(documentLanguage) + ? documentLanguage + : "typescript"; const currentLanguage = languageNamed(languageName); if (currentLanguage !== undefined) { return { cancelled: false, - lang: currentLanguage + lang: currentLanguage, }; } @@ -94,18 +103,21 @@ async function runQuicktype( lang: TargetLanguage, topLevelName: string, forceJustTypes: boolean, - indentation: string | undefined + indentation: string | undefined, ): Promise { - const configuration = vscode.workspace.getConfiguration(configurationSection); + const configuration = + vscode.workspace.getConfiguration(configurationSection); const justTypes = forceJustTypes || configuration.justTypes; const rendererOptions: RendererOptions = {}; if (justTypes) { // FIXME: The target language should have a property to return these options. if (lang.name === "csharp") { - (rendererOptions as RendererOptions<"csharp">).features = "just-types"; + (rendererOptions as RendererOptions<"csharp">).features = + "just-types"; } else if (lang.name === "kotlin") { - (rendererOptions as RendererOptions<"kotlin">).framework = "just-types"; + (rendererOptions as RendererOptions<"kotlin">).framework = + "just-types"; } else if ("just-types" in rendererOptions) { rendererOptions["just-types"] = "true"; } @@ -114,22 +126,24 @@ async function runQuicktype( const inputData = new InputData(); switch (kind) { case "json": - await inputData.addSource("json", { name: topLevelName, samples: [content] }, () => - jsonInputForTargetLanguage(lang) + await inputData.addSource( + "json", + { name: topLevelName, samples: [content] }, + () => jsonInputForTargetLanguage(lang), ); break; case "schema": await inputData.addSource( "schema", { name: topLevelName, schema: content }, - () => new JSONSchemaInput(undefined) + () => new JSONSchemaInput(undefined), ); break; case "typescript": await inputData.addSource( "schema", schemaForTypeScriptSources([`${topLevelName}.ts`]), - () => new JSONSchemaInput(undefined) + () => new JSONSchemaInput(undefined), ); break; default: @@ -144,7 +158,7 @@ async function runQuicktype( inferMaps: configuration.inferMaps, inferEnums: configuration.inferEnums, inferDateTimes: configuration.inferDateTimes, - inferIntegerStrings: configuration.inferIntegerStrings + inferIntegerStrings: configuration.inferIntegerStrings, }; for (const flag of inferenceFlagNames) { if (typeof configuration[flag] === "boolean") { @@ -155,7 +169,11 @@ async function runQuicktype( return await quicktype(options); } -async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justTypes: boolean): Promise { +async function pasteAsTypes( + editor: vscode.TextEditor, + kind: InputKind, + justTypes: boolean, +): Promise { let indentation: string; if (editor.options.insertSpaces) { const tabSize = editor.options.tabSize as number; @@ -173,11 +191,15 @@ async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justType try { content = await vscode.env.clipboard.readText(); } catch (e) { - return await vscode.window.showErrorMessage("Could not get clipboard contents"); + return await vscode.window.showErrorMessage( + "Could not get clipboard contents", + ); } if (kind !== "typescript" && !jsonIsValid(content)) { - return await vscode.window.showErrorMessage("Clipboard does not contain valid JSON."); + return await vscode.window.showErrorMessage( + "Clipboard does not contain valid JSON.", + ); } let topLevelName: string; @@ -194,7 +216,14 @@ async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justType let result: SerializedRenderResult; try { - result = await runQuicktype(content, kind, language.lang, topLevelName, justTypes, indentation); + result = await runQuicktype( + content, + kind, + language.lang, + topLevelName, + justTypes, + indentation, + ); } catch (e) { // TODO Invalid JSON produces an uncatchable exception from quicktype // Fix this so we can catch and show an error message. @@ -206,11 +235,14 @@ async function pasteAsTypes(editor: vscode.TextEditor, kind: InputKind, justType // @ts-expect-error const text = result.lines.join("\n"); const selection = editor.selection; - return await editor.edit(builder => { + return await editor.edit((builder) => { if (selection.isEmpty) { builder.insert(selection.start, text); } else { - builder.replace(new vscode.Range(selection.start, selection.end), text); + builder.replace( + new vscode.Range(selection.start, selection.end), + text, + ); } }); } @@ -220,7 +252,7 @@ class CodeProvider implements vscode.TextDocumentContentProvider { public readonly uri: vscode.Uri; - private _documentText: string = "{}"; + private _documentText = "{}"; private _targetCode = ""; @@ -239,19 +271,25 @@ class CodeProvider implements vscode.TextDocumentContentProvider { public constructor( private _inputKind: InputKind, private readonly _targetLanguage: TargetLanguage, - private _document: vscode.TextDocument + private _document: vscode.TextDocument, ) { this.scheme = `quicktype-${this._targetLanguage.name}`; // TODO use this.documentName instead of QuickType in uri - this.uri = vscode.Uri.parse(`${this.scheme}:QuickType.${this._targetLanguage.extension}`); - - this._changeSubscription = vscode.workspace.onDidChangeTextDocument(ev => this.textDidChange(ev)); - this._onDidChangeVisibleTextEditors = vscode.window.onDidChangeVisibleTextEditors(editors => - this.visibleTextEditorsDidChange([...editors]) + this.uri = vscode.Uri.parse( + `${this.scheme}:QuickType.${this._targetLanguage.extension}`, ); - this._onDidChangeConfiguration = vscode.workspace.onDidChangeConfiguration(ev => - this.configurationDidChange(ev) + + this._changeSubscription = vscode.workspace.onDidChangeTextDocument( + (ev) => this.textDidChange(ev), ); + this._onDidChangeVisibleTextEditors = + vscode.window.onDidChangeVisibleTextEditors((editors) => + this.visibleTextEditorsDidChange([...editors]), + ); + this._onDidChangeConfiguration = + vscode.workspace.onDidChangeConfiguration((ev) => + this.configurationDidChange(ev), + ); } public dispose(): void { @@ -288,7 +326,9 @@ class CodeProvider implements vscode.TextDocumentContentProvider { } private visibleTextEditorsDidChange(editors: vscode.TextEditor[]): void { - const isOpen = editors.some(e => e.document.uri.scheme === this.scheme); + const isOpen = editors.some( + (e) => e.document.uri.scheme === this.scheme, + ); if (!this._isOpen && isOpen) { void this.update(); } @@ -327,7 +367,7 @@ class CodeProvider implements vscode.TextDocumentContentProvider { this._targetLanguage, this.documentName, false, - undefined + undefined, ); this._targetCode = result.lines.join("\n"); @@ -341,7 +381,7 @@ class CodeProvider implements vscode.TextDocumentContentProvider { public provideTextDocumentContent( _uri: vscode.Uri, - _token: vscode.CancellationToken + _token: vscode.CancellationToken, ): vscode.ProviderResult { this._isOpen = true; @@ -385,7 +425,7 @@ let explicitlySetTargetLanguage: TargetLanguage | undefined = undefined; async function openQuicktype( inputKind: InputKind, targetLanguage: TargetLanguage, - document: vscode.TextDocument + document: vscode.TextDocument, ): Promise { let codeProvider = codeProviders.get(targetLanguage.name); if (codeProvider === undefined) { @@ -393,7 +433,10 @@ async function openQuicktype( codeProviders.set(targetLanguage.name, codeProvider); if (extensionContext !== undefined) { extensionContext.subscriptions.push( - vscode.workspace.registerTextDocumentContentProvider(codeProvider.scheme, codeProvider) + vscode.workspace.registerTextDocumentContentProvider( + codeProvider.scheme, + codeProvider, + ), ); } } else { @@ -404,7 +447,9 @@ async function openQuicktype( let originalEditor: vscode.TextEditor | undefined; if (lastCodeProvider !== undefined) { const lastDoc = lastCodeProvider.document; - originalEditor = vscode.window.visibleTextEditors.find(e => e.document === lastDoc); + originalEditor = vscode.window.visibleTextEditors.find( + (e) => e.document === lastDoc, + ); } if (originalEditor === undefined) { @@ -425,8 +470,12 @@ async function openQuicktype( return await vscode.window.showTextDocument(doc, column, true); } -async function openForEditor(editor: vscode.TextEditor, inputKind: InputKind): Promise { - const targetLanguage = explicitlySetTargetLanguage ?? deduceTargetLanguage(); +async function openForEditor( + editor: vscode.TextEditor, + inputKind: InputKind, +): Promise { + const targetLanguage = + explicitlySetTargetLanguage ?? deduceTargetLanguage(); await openQuicktype(inputKind, targetLanguage, editor.document); } @@ -437,51 +486,65 @@ async function changeTargetLanguage(): Promise { explicitlySetTargetLanguage = pick.lang; if (lastCodeProvider === undefined) return; - await openQuicktype(lastCodeProvider.inputKind, explicitlySetTargetLanguage, lastCodeProvider.document); + await openQuicktype( + lastCodeProvider.inputKind, + explicitlySetTargetLanguage, + lastCodeProvider.document, + ); - await extensionContext?.workspaceState.update(lastTargetLanguageUsedKey, explicitlySetTargetLanguage.name); + await extensionContext?.workspaceState.update( + lastTargetLanguageUsedKey, + explicitlySetTargetLanguage.name, + ); } -export async function activate(context: vscode.ExtensionContext): Promise { +export async function activate( + context: vscode.ExtensionContext, +): Promise { extensionContext = context; context.subscriptions.push( vscode.commands.registerTextEditorCommand( Command.PasteJSONAsTypes, - async editor => await pasteAsTypes(editor, "json", true) + async (editor) => await pasteAsTypes(editor, "json", true), ), vscode.commands.registerTextEditorCommand( Command.PasteJSONAsTypesAndSerialization, - async editor => await pasteAsTypes(editor, "json", false) + async (editor) => await pasteAsTypes(editor, "json", false), ), vscode.commands.registerTextEditorCommand( Command.PasteSchemaAsTypes, - async editor => await pasteAsTypes(editor, "schema", true) + async (editor) => await pasteAsTypes(editor, "schema", true), ), vscode.commands.registerTextEditorCommand( Command.PasteSchemaAsTypesAndSerialization, - async editor => await pasteAsTypes(editor, "schema", false) + async (editor) => await pasteAsTypes(editor, "schema", false), ), vscode.commands.registerTextEditorCommand( Command.PasteTypeScriptAsTypesAndSerialization, - async editor => await pasteAsTypes(editor, "typescript", false) + async (editor) => await pasteAsTypes(editor, "typescript", false), ), vscode.commands.registerTextEditorCommand( Command.OpenQuicktypeForJSON, - async editor => await openForEditor(editor, "json") + async (editor) => await openForEditor(editor, "json"), ), vscode.commands.registerTextEditorCommand( Command.OpenQuicktypeForJSONSchema, - async editor => await openForEditor(editor, "schema") + async (editor) => await openForEditor(editor, "schema"), ), vscode.commands.registerTextEditorCommand( Command.OpenQuicktypeForTypeScript, - async editor => await openForEditor(editor, "typescript") + async (editor) => await openForEditor(editor, "typescript"), + ), + vscode.commands.registerCommand( + Command.ChangeTargetLanguage, + changeTargetLanguage, ), - vscode.commands.registerCommand(Command.ChangeTargetLanguage, changeTargetLanguage) ); - const maybeName = extensionContext.workspaceState.get(lastTargetLanguageUsedKey); + const maybeName = extensionContext.workspaceState.get( + lastTargetLanguageUsedKey, + ); if (typeof maybeName === "string" && isLanguageName(maybeName)) { explicitlySetTargetLanguage = languageNamed(maybeName); } diff --git a/packages/quicktype-vscode/tsconfig.json b/packages/quicktype-vscode/tsconfig.json index 2e4d0e4e2..53cccc394 100644 --- a/packages/quicktype-vscode/tsconfig.json +++ b/packages/quicktype-vscode/tsconfig.json @@ -3,10 +3,7 @@ "module": "commonjs", "target": "es6", "outDir": "out", - "lib": [ - "es6", - "esnext.asynciterable" - ], + "lib": ["es6", "esnext.asynciterable"], "sourceMap": true, "rootDir": ".", "allowJs": false, @@ -15,8 +12,5 @@ "noUnusedParameters": true, "esModuleInterop": true }, - "exclude": [ - "node_modules", - ".vscode-test" - ] -} \ No newline at end of file + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/script/patch-npm-version.ts b/script/patch-npm-version.ts index 67caf4038..2cc64461d 100755 --- a/script/patch-npm-version.ts +++ b/script/patch-npm-version.ts @@ -21,12 +21,16 @@ const PUBLISHED = (() => { const CURRENT = exec(`npm version`).match(/quicktype: '(.+)'/)![1]; switch (semver.compare(CURRENT, PUBLISHED)) { case -1: - console.error(`* package.json version is ${CURRENT} but ${PUBLISHED} is published. Patching...`); + console.error( + `* package.json version is ${CURRENT} but ${PUBLISHED} is published. Patching...`, + ); exec(`npm version ${PUBLISHED} --force --no-git-tag-version`); shell.exec(`npm version patch --no-git-tag-version`); break; case 0: - console.error(`* package.json version is ${CURRENT} but ${PUBLISHED} is published. Patching...`); + console.error( + `* package.json version is ${CURRENT} but ${PUBLISHED} is published. Patching...`, + ); shell.exec(`npm version patch --no-git-tag-version`); break; default: diff --git a/script/publish.sh b/script/publish.sh index 2960be7e2..e82da152a 100755 --- a/script/publish.sh +++ b/script/publish.sh @@ -30,7 +30,7 @@ mv package.1.json package.json npm publish popd -# pubish quicktype +# Publish quicktype jq --arg version $VERSION \ '.dependencies."quicktype-core" = $version | .dependencies."quicktype-graphql-input" = $version | .dependencies."quicktype-typescript-input" = $version' \ package.json > package.1.json @@ -41,4 +41,4 @@ npm publish # Publish vscode extension pushd packages/quicktype-vscode npm run pub -popd \ No newline at end of file +popd diff --git a/src/CompressedJSONFromStream.ts b/src/CompressedJSONFromStream.ts index 16a9c78b0..892e35920 100644 --- a/src/CompressedJSONFromStream.ts +++ b/src/CompressedJSONFromStream.ts @@ -1,4 +1,4 @@ -import { type Readable } from "readable-stream"; +import type { Readable } from "readable-stream"; import { Parser } from "stream-json"; import { CompressedJSON, type Value } from "quicktype-core"; @@ -15,18 +15,21 @@ const methodMap: { [name: string]: string } = { stringValue: "commitString", nullValue: "commitNull", trueValue: "handleTrueValue", - falseValue: "handleFalseValue" + falseValue: "handleFalseValue", }; export class CompressedJSONFromStream extends CompressedJSON { public async parse(readStream: Readable): Promise { const combo = new Parser({ packKeys: true, packStrings: true }); - combo.on("data", (item: { name: string; value: string | undefined }) => { - if (typeof methodMap[item.name] === "string") { - // @ts-expect-error FIXME: strongly type this - this[methodMap[item.name]](item.value); - } - }); + combo.on( + "data", + (item: { name: string; value: string | undefined }) => { + if (typeof methodMap[item.name] === "string") { + // @ts-expect-error FIXME: strongly type this + this[methodMap[item.name]](item.value); + } + }, + ); const promise = new Promise((resolve, reject) => { combo.on("end", () => { resolve(this.finish()); diff --git a/src/GraphQLIntrospection.ts b/src/GraphQLIntrospection.ts index 840cf3c5a..db2093a0a 100644 --- a/src/GraphQLIntrospection.ts +++ b/src/GraphQLIntrospection.ts @@ -7,12 +7,16 @@ import { panic } from "quicktype-core"; // https://github.com/apollographql/apollo-codegen/blob/master/src/downloadSchema.ts const defaultHeaders: { [name: string]: string } = { Accept: "application/json", - "Content-Type": "application/json" + "Content-Type": "application/json", }; const headerRegExp = /^([^:]+):\s*(.*)$/; -export async function introspectServer(url: string, method: string, headerStrings: string[]): Promise { +export async function introspectServer( + url: string, + method: string, + headerStrings: string[], +): Promise { const headers: { [name: string]: string } = {}; for (const name of Object.getOwnPropertyNames(defaultHeaders)) { @@ -33,21 +37,27 @@ export async function introspectServer(url: string, method: string, headerString const response = await fetch(url, { method, headers: headers, - body: JSON.stringify({ query: introspectionQuery }) + body: JSON.stringify({ query: introspectionQuery }), }); result = await response.json(); } catch (error) { - return panic(`Error while fetching introspection query result: ${exceptionToString(error)}`); + return panic( + `Error while fetching introspection query result: ${exceptionToString(error)}`, + ); } if (result.errors) { - return panic(`Errors in introspection query result: ${JSON.stringify(result.errors)}`); + return panic( + `Errors in introspection query result: ${JSON.stringify(result.errors)}`, + ); } const schemaData = result; if (!schemaData.data) { - return panic(`No introspection query result data found, server responded with: ${JSON.stringify(result)}`); + return panic( + `No introspection query result data found, server responded with: ${JSON.stringify(result)}`, + ); } return JSON.stringify(schemaData, null, 2); diff --git a/src/TypeSource.ts b/src/TypeSource.ts index 1c58e2e73..ee6b2203c 100644 --- a/src/TypeSource.ts +++ b/src/TypeSource.ts @@ -1,7 +1,7 @@ -import { type Readable } from "readable-stream"; +import type { Readable } from "readable-stream"; -import { type JSONSchemaSourceData, type JSONSourceData } from "quicktype-core"; -import { type GraphQLSourceData } from "quicktype-graphql-input"; +import type { JSONSchemaSourceData, JSONSourceData } from "quicktype-core"; +import type { GraphQLSourceData } from "quicktype-graphql-input"; export interface JSONTypeSource extends JSONSourceData { kind: "json"; diff --git a/src/URLGrammar.ts b/src/URLGrammar.ts index 3eaaaa1ca..b89778992 100644 --- a/src/URLGrammar.ts +++ b/src/URLGrammar.ts @@ -37,7 +37,9 @@ function expand(json: unknown): string[] { return panic(`Value is not a valid URL grammar: ${json}`); } -export function urlsFromURLGrammar(json: unknown): { [name: string]: string[] } { +export function urlsFromURLGrammar(json: unknown): { + [name: string]: string[]; +} { const topLevelMap = checkStringMap(json); const results: { [name: string]: string[] } = {}; diff --git a/src/index.ts b/src/index.ts index 82099eefc..550e90d43 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,21 @@ #!/usr/bin/env node -import * as fs from "fs"; -import * as path from "path"; +import * as fs from "node:fs"; +import * as path from "node:path"; import { exceptionToString } from "@glideapps/ts-necessities"; import chalk from "chalk"; -// eslint-disable-next-line @typescript-eslint/no-redeclare -import { definedMap, hasOwnProperty, mapFromObject, mapMap, withDefault } from "collection-utils"; +import { + definedMap, + // biome-ignore lint/suspicious/noShadowRestrictedNames: + hasOwnProperty, + mapFromObject, + mapMap, + withDefault, +} from "collection-utils"; import commandLineArgs from "command-line-args"; import getUsage from "command-line-usage"; import * as _ from "lodash"; -import { type Readable } from "readable-stream"; +import type { Readable } from "readable-stream"; import stringToStream from "string-to-stream"; import _wordwrap from "wordwrap"; @@ -46,14 +52,19 @@ import { readableFromFileOrURL, sourcesFromPostmanCollection, splitIntoWords, - trainMarkovChain + trainMarkovChain, } from "quicktype-core"; import { GraphQLInput } from "quicktype-graphql-input"; import { schemaForTypeScriptSources } from "quicktype-typescript-input"; import { CompressedJSONFromStream } from "./CompressedJSONFromStream"; import { introspectServer } from "./GraphQLIntrospection"; -import { type GraphQLTypeSource, type JSONTypeSource, type SchemaTypeSource, type TypeSource } from "./TypeSource"; +import type { + GraphQLTypeSource, + JSONTypeSource, + SchemaTypeSource, + TypeSource, +} from "./TypeSource"; import { urlsFromURLGrammar } from "./URLGrammar"; // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires @@ -63,7 +74,7 @@ const wordWrap: (s: string) => string = _wordwrap(90); export interface CLIOptions { // We use this to access the inference flags - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // biome-ignore lint/suspicious/noExplicitAny: [option: string]: any; additionalSchema: string[]; allPropertiesOptional: boolean; @@ -97,9 +108,13 @@ const defaultDefaultTargetLanguageName = "go"; async function sourceFromFileOrUrlArray( name: string, filesOrUrls: string[], - httpHeaders?: string[] + httpHeaders?: string[], ): Promise { - const samples = await Promise.all(filesOrUrls.map(async file => await readableFromFileOrURL(file, httpHeaders))); + const samples = await Promise.all( + filesOrUrls.map( + async (file) => await readableFromFileOrURL(file, httpHeaders), + ), + ); return { kind: "json", name, samples }; } @@ -108,12 +123,17 @@ function typeNameFromFilename(filename: string): string { return name.substring(0, name.lastIndexOf(".")); } -async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Promise { - async function readFilesOrURLsInDirectory(d: string): Promise { +async function samplesFromDirectory( + dataDir: string, + httpHeaders?: string[], +): Promise { + async function readFilesOrURLsInDirectory( + d: string, + ): Promise { const files = fs .readdirSync(d) - .map(x => path.join(d, x)) - .filter(x => fs.lstatSync(x).isFile()); + .map((x) => path.join(d, x)) + .filter((x) => fs.lstatSync(x).isFile()); // Each file is a (Name, JSON | URL) const sourcesInDir: TypeSource[] = []; const graphQLSources: GraphQLTypeSource[] = []; @@ -134,36 +154,53 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr sourcesInDir.push({ kind: "json", name, - samples: [await readableFromFileOrURL(fileOrUrl, httpHeaders)] + samples: [ + await readableFromFileOrURL(fileOrUrl, httpHeaders), + ], }); } else if (file.endsWith(".schema")) { sourcesInDir.push({ kind: "schema", name, - uris: [fileOrUrl] + uris: [fileOrUrl], }); } else if (file.endsWith(".gqlschema")) { - messageAssert(graphQLSchema === undefined, "DriverMoreThanOneGraphQLSchemaInDir", { - dir: dataDir - }); - graphQLSchema = await readableFromFileOrURL(fileOrUrl, httpHeaders); + messageAssert( + graphQLSchema === undefined, + "DriverMoreThanOneGraphQLSchemaInDir", + { + dir: dataDir, + }, + ); + graphQLSchema = await readableFromFileOrURL( + fileOrUrl, + httpHeaders, + ); graphQLSchemaFileName = fileOrUrl; } else if (file.endsWith(".graphql")) { graphQLSources.push({ kind: "graphql", name, schema: undefined, - query: await getStream(await readableFromFileOrURL(fileOrUrl, httpHeaders)) + query: await getStream( + await readableFromFileOrURL(fileOrUrl, httpHeaders), + ), }); } } if (graphQLSources.length > 0) { if (graphQLSchema === undefined) { - return messageError("DriverNoGraphQLSchemaInDir", { dir: dataDir }); + return messageError("DriverNoGraphQLSchemaInDir", { + dir: dataDir, + }); } - const schema = parseJSON(await getStream(graphQLSchema), "GraphQL schema", graphQLSchemaFileName); + const schema = parseJSON( + await getStream(graphQLSchema), + "GraphQL schema", + graphQLSchemaFileName, + ); for (const source of graphQLSources) { source.schema = schema; sourcesInDir.push(source); @@ -173,8 +210,8 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr return sourcesInDir; } - const contents = fs.readdirSync(dataDir).map(x => path.join(dataDir, x)); - const directories = contents.filter(x => fs.lstatSync(x).isDirectory()); + const contents = fs.readdirSync(dataDir).map((x) => path.join(dataDir, x)); + const directories = contents.filter((x) => fs.lstatSync(x).isDirectory()); let sources = await readFilesOrURLsInDirectory(dataDir); @@ -199,13 +236,22 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr } } - if (jsonSamples.length > 0 && schemaSources.length + graphQLSources.length > 0) { - return messageError("DriverCannotMixJSONWithOtherSamples", { dir: dir }); + if ( + jsonSamples.length > 0 && + schemaSources.length + graphQLSources.length > 0 + ) { + return messageError("DriverCannotMixJSONWithOtherSamples", { + dir: dir, + }); } // FIXME: rewrite this to be clearer - const oneUnlessEmpty = (xs: TypeSource[]): 0 | 1 => Math.sign(xs.length) as 0 | 1; - if (oneUnlessEmpty(schemaSources) + oneUnlessEmpty(graphQLSources) > 1) { + const oneUnlessEmpty = (xs: TypeSource[]): 0 | 1 => + Math.sign(xs.length) as 0 | 1; + if ( + oneUnlessEmpty(schemaSources) + oneUnlessEmpty(graphQLSources) > + 1 + ) { return messageError("DriverCannotMixNonJSONInputs", { dir: dir }); } @@ -213,7 +259,7 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr sources.push({ kind: "json", name: path.basename(dir), - samples: jsonSamples + samples: jsonSamples, }); } @@ -224,10 +270,13 @@ async function samplesFromDirectory(dataDir: string, httpHeaders?: string[]): Pr return sources; } -function inferLang(options: Partial, defaultLanguage: LanguageName): string | LanguageName { +function inferLang( + options: Partial, + defaultLanguage: LanguageName, +): string | LanguageName { // Output file extension determines the language if language is undefined if (options.out !== undefined) { - let extension = path.extname(options.out); + const extension = path.extname(options.out); if (extension === "") { return messageError("DriverNoLanguageOrExtension", {}); } @@ -241,28 +290,42 @@ function inferLang(options: Partial, defaultLanguage: LanguageName): function inferTopLevel(options: Partial): string { // Output file name determines the top-level if undefined if (options.out !== undefined) { - let extension = path.extname(options.out); - let without = path.basename(options.out).replace(extension, ""); + const extension = path.extname(options.out); + const without = path.basename(options.out).replace(extension, ""); return without; } // Source determines the top-level if undefined if (options.src !== undefined && options.src.length === 1) { - let src = options.src[0]; - let extension = path.extname(src); - let without = path.basename(src).replace(extension, ""); + const src = options.src[0]; + const extension = path.extname(src); + const without = path.basename(src).replace(extension, ""); return without; } return "TopLevel"; } -function inferCLIOptions(opts: Partial, targetLanguage: TargetLanguage | undefined): CLIOptions { +function inferCLIOptions( + opts: Partial, + targetLanguage: TargetLanguage | undefined, +): CLIOptions { let srcLang = opts.srcLang; - if (opts.graphqlSchema !== undefined || opts.graphqlIntrospect !== undefined) { - messageAssert(srcLang === undefined || srcLang === "graphql", "DriverSourceLangMustBeGraphQL", {}); + if ( + opts.graphqlSchema !== undefined || + opts.graphqlIntrospect !== undefined + ) { + messageAssert( + srcLang === undefined || srcLang === "graphql", + "DriverSourceLangMustBeGraphQL", + {}, + ); srcLang = "graphql"; - } else if (opts.src !== undefined && opts.src.length > 0 && opts.src.every(file => _.endsWith(file, ".ts"))) { + } else if ( + opts.src !== undefined && + opts.src.length > 0 && + opts.src.every((file) => _.endsWith(file, ".ts")) + ) { srcLang = "typescript"; } else { messageAssert(srcLang !== "graphql", "DriverGraphQLSchemaNeeded", {}); @@ -273,12 +336,15 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua if (targetLanguage !== undefined) { language = targetLanguage; } else { - const languageName = opts.lang ?? inferLang(opts, defaultDefaultTargetLanguageName); + const languageName = + opts.lang ?? inferLang(opts, defaultDefaultTargetLanguageName); if (isLanguageName(languageName)) { language = languageNamed(languageName); } else { - return messageError("DriverUnknownOutputLanguage", { lang: languageName }); + return messageError("DriverUnknownOutputLanguage", { + lang: languageName, + }); } } @@ -303,7 +369,7 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua httpMethod: opts.httpMethod, httpHeader: opts.httpHeader, debug: opts.debug, - telemetry: opts.telemetry + telemetry: opts.telemetry, }; for (const flagName of inferenceFlagNames) { const cliName = negatedInferenceFlagName(flagName); @@ -314,8 +380,13 @@ function inferCLIOptions(opts: Partial, targetLanguage: TargetLangua } function makeLangTypeLabel(targetLanguages: readonly TargetLanguage[]): string { - assert(targetLanguages.length > 0, "Must have at least one target language"); - return targetLanguages.map(r => _.minBy(r.names, s => s.length)).join("|"); + assert( + targetLanguages.length > 0, + "Must have at least one target language", + ); + return targetLanguages + .map((r) => _.minBy(r.names, (s) => s.length)) + .join("|"); } function negatedInferenceFlagName(name: string): string { @@ -329,11 +400,13 @@ function negatedInferenceFlagName(name: string): string { function dashedFromCamelCase(name: string): string { return splitIntoWords(name) - .map(w => w.word.toLowerCase()) + .map((w) => w.word.toLowerCase()) .join("-"); } -function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): OptionDefinition[] { +function makeOptionDefinitions( + targetLanguages: readonly TargetLanguage[], +): OptionDefinition[] { const beforeLang: OptionDefinition[] = [ { name: "out", @@ -341,7 +414,7 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti type: String, typeLabel: "FILE", description: "The output file. Determines --lang and --top-level.", - kind: "cli" + kind: "cli", }, { name: "top-level", @@ -349,8 +422,8 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti type: String, typeLabel: "NAME", description: "The name for the top level type.", - kind: "cli" - } + kind: "cli", + }, ]; const lang: OptionDefinition[] = targetLanguages.length < 2 @@ -362,8 +435,8 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti type: String, typeLabel: "LANG", description: "The target language.", - kind: "cli" - } + kind: "cli", + }, ]; const afterLang: OptionDefinition[] = [ { @@ -373,7 +446,7 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti defaultValue: undefined, typeLabel: "SRC_LANG", description: "The source language (default is json).", - kind: "cli" + kind: "cli", }, { name: "src", @@ -382,15 +455,15 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti defaultOption: true, typeLabel: "FILE|URL|DIRECTORY", description: "The file, url, or data directory to type.", - kind: "cli" + kind: "cli", }, { name: "src-urls", type: String, typeLabel: "FILE", description: "Tracery grammar describing URLs to crawl.", - kind: "cli" - } + kind: "cli", + }, ]; const inference: OptionDefinition[] = Array.from( mapMap(mapFromObject(inferenceFlags), (flag, name) => { @@ -398,9 +471,9 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti name: dashedFromCamelCase(negatedInferenceFlagName(name)), type: Boolean, description: flag.negationDescription + ".", - kind: "cli" as const + kind: "cli" as const, }; - }).values() + }).values(), ); const afterInference: OptionDefinition[] = [ { @@ -408,29 +481,31 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti type: String, typeLabel: "FILE", description: "GraphQL introspection file.", - kind: "cli" + kind: "cli", }, { name: "graphql-introspect", type: String, typeLabel: "URL", description: "Introspect GraphQL schema from a server.", - kind: "cli" + kind: "cli", }, { name: "http-method", type: String, typeLabel: "METHOD", - description: "HTTP method to use for the GraphQL introspection query.", - kind: "cli" + description: + "HTTP method to use for the GraphQL introspection query.", + kind: "cli", }, { name: "http-header", type: String, multiple: true, typeLabel: "HEADER", - description: "Header(s) to attach to all HTTP requests, including the GraphQL introspection query.", - kind: "cli" + description: + "Header(s) to attach to all HTTP requests, including the GraphQL introspection query.", + kind: "cli", }, { name: "additional-schema", @@ -439,38 +514,38 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti multiple: true, typeLabel: "FILE", description: "Register the $id's of additional JSON Schema files.", - kind: "cli" + kind: "cli", }, { name: "no-render", type: Boolean, description: "Don't render output.", - kind: "cli" + kind: "cli", }, { name: "alphabetize-properties", type: Boolean, description: "Alphabetize order of class properties.", - kind: "cli" + kind: "cli", }, { name: "all-properties-optional", type: Boolean, description: "Make all class properties optional.", - kind: "cli" + kind: "cli", }, { name: "build-markov-chain", type: String, typeLabel: "FILE", description: "Markov chain corpus filename.", - kind: "cli" + kind: "cli", }, { name: "quiet", type: Boolean, description: "Don't show issues in the generated code.", - kind: "cli" + kind: "cli", }, { name: "debug", @@ -478,29 +553,29 @@ function makeOptionDefinitions(targetLanguages: readonly TargetLanguage[]): Opti typeLabel: "OPTIONS or all", description: "Comma separated debug options: print-graph, print-reconstitution, print-gather-names, print-transformations, print-schema-resolving, print-times, provenance", - kind: "cli" + kind: "cli", }, { name: "telemetry", type: String, typeLabel: "enable|disable", description: "Enable anonymous telemetry to help improve quicktype", - kind: "cli" + kind: "cli", }, { name: "help", alias: "h", type: Boolean, description: "Get some help.", - kind: "cli" + kind: "cli", }, { name: "version", alias: "v", type: Boolean, description: "Display the version of quicktype", - kind: "cli" - } + kind: "cli", + }, ]; return beforeLang.concat(lang, afterLang, inference, afterInference); } @@ -527,41 +602,45 @@ const tableOptionsForOptions: TableOptions = { columns: [ { name: "option", - width: 60 + width: 60, }, { name: "description", - width: 60 - } - ] + width: 60, + }, + ], }; -function makeSectionsBeforeRenderers(targetLanguages: readonly TargetLanguage[]): UsageSection[] { - const langDisplayNames = targetLanguages.map(r => r.displayName).join(", "); +function makeSectionsBeforeRenderers( + targetLanguages: readonly TargetLanguage[], +): UsageSection[] { + const langDisplayNames = targetLanguages + .map((r) => r.displayName) + .join(", "); return [ { header: "Synopsis", content: [ `$ quicktype [${chalk.bold("--lang")} LANG] [${chalk.bold("--src-lang")} SRC_LANG] [${chalk.bold( - "--out" + "--out", )} FILE] FILE|URL ...`, "", ` LANG ... ${makeLangTypeLabel(targetLanguages)}`, "", - "SRC_LANG ... json|schema|graphql|postman|typescript" - ] + "SRC_LANG ... json|schema|graphql|postman|typescript", + ], }, { header: "Description", - content: `Given JSON sample data, quicktype outputs code for working with that data in ${langDisplayNames}.` + content: `Given JSON sample data, quicktype outputs code for working with that data in ${langDisplayNames}.`, }, { header: "Options", optionList: makeOptionDefinitions(targetLanguages), hide: ["no-render", "build-markov-chain"], - tableOptions: tableOptionsForOptions - } + tableOptions: tableOptionsForOptions, + }, ]; } @@ -572,72 +651,101 @@ const sectionsAfterRenderers: UsageSection[] = [ chalk.dim("Generate C# to parse a Bitcoin API"), "$ quicktype -o LatestBlock.cs https://blockchain.info/latestblock", "", - chalk.dim("Generate Go code from a directory of samples containing:"), + chalk.dim( + "Generate Go code from a directory of samples containing:", + ), chalk.dim( ` - Foo.json + Bar - bar-sample-1.json - bar-sample-2.json - - Baz.url` + - Baz.url`, ), "$ quicktype -l go samples", "", chalk.dim("Generate JSON Schema, then TypeScript"), "$ quicktype -o schema.json https://blockchain.info/latestblock", - "$ quicktype -o bitcoin.ts --src-lang schema schema.json" - ] + "$ quicktype -o bitcoin.ts --src-lang schema schema.json", + ], }, { - content: `Learn more at ${chalk.bold("quicktype.io")}` - } + content: `Learn more at ${chalk.bold("quicktype.io")}`, + }, ]; -export function parseCLIOptions(argv: string[], targetLanguage?: TargetLanguage): CLIOptions { +export function parseCLIOptions( + argv: string[], + targetLanguage?: TargetLanguage, +): CLIOptions { if (argv.length === 0) { return inferCLIOptions({ help: true }, targetLanguage); } - const targetLanguages = targetLanguage === undefined ? defaultTargetLanguages : [targetLanguage]; + const targetLanguages = + targetLanguage === undefined + ? defaultTargetLanguages + : [targetLanguage]; const optionDefinitions = makeOptionDefinitions(targetLanguages); // We can only fully parse the options once we know which renderer is selected, // because there are renderer-specific options. But we only know which renderer // is selected after we've parsed the options. Hence, we parse the options // twice. This is the first parse to get the renderer: - const incompleteOptions = inferCLIOptions(parseOptions(optionDefinitions, argv, true), targetLanguage); + const incompleteOptions = inferCLIOptions( + parseOptions(optionDefinitions, argv, true), + targetLanguage, + ); if (targetLanguage === undefined) { - const languageName = isLanguageName(incompleteOptions.lang) ? incompleteOptions.lang : "typescript"; + const languageName = isLanguageName(incompleteOptions.lang) + ? incompleteOptions.lang + : "typescript"; targetLanguage = getTargetLanguage(languageName); } - const rendererOptionDefinitions = targetLanguage.cliOptionDefinitions.actual; + const rendererOptionDefinitions = + targetLanguage.cliOptionDefinitions.actual; // Use the global options as well as the renderer options from now on: - const allOptionDefinitions = _.concat(optionDefinitions, rendererOptionDefinitions); + const allOptionDefinitions = _.concat( + optionDefinitions, + rendererOptionDefinitions, + ); // This is the parse that counts: - return inferCLIOptions(parseOptions(allOptionDefinitions, argv, false), targetLanguage); + return inferCLIOptions( + parseOptions(allOptionDefinitions, argv, false), + targetLanguage, + ); } // Parse the options in argv and split them into global options and renderer options, // according to each option definition's `renderer` field. If `partial` is false this // will throw if it encounters an unknown option. -function parseOptions(definitions: OptionDefinition[], argv: string[], partial: boolean): Partial { +function parseOptions( + definitions: OptionDefinition[], + argv: string[], + partial: boolean, +): Partial { let opts: commandLineArgs.CommandLineOptions; try { opts = commandLineArgs(definitions, { argv, partial }); } catch (e) { assert(!partial, "Partial option parsing should not have failed"); - return messageError("DriverCLIOptionParsingFailed", { message: exceptionToString(e) }); + return messageError("DriverCLIOptionParsingFailed", { + message: exceptionToString(e), + }); } for (const k of Object.keys(opts)) { if (opts[k] === null) { return messageError("DriverCLIOptionParsingFailed", { - message: `Missing value for command line option "${k}"` + message: `Missing value for command line option "${k}"`, }); } } - const options: { [key: string]: unknown; rendererOptions: RendererOptions } = { rendererOptions: {} }; + const options: { + [key: string]: unknown; + rendererOptions: RendererOptions; + } = { rendererOptions: {} }; for (const optionDefinition of definitions) { if (!hasOwnProperty(opts, optionDefinition.name)) { continue; @@ -645,10 +753,16 @@ function parseOptions(definitions: OptionDefinition[], argv: string[], partial: const optionValue = opts[optionDefinition.name] as string; if (optionDefinition.kind !== "cli") { - (options.rendererOptions as Record)[optionDefinition.name] = - optionValue; + ( + options.rendererOptions as Record< + typeof optionDefinition.name, + unknown + > + )[optionDefinition.name] = optionValue; } else { - const k = _.lowerFirst(optionDefinition.name.split("-").map(_.upperFirst).join("")); + const k = _.lowerFirst( + optionDefinition.name.split("-").map(_.upperFirst).join(""), + ); options[k] = optionValue; } } @@ -666,82 +780,121 @@ function usage(targetLanguages: readonly TargetLanguage[]): void { rendererSections.push({ header: `Options for ${language.displayName}`, optionList: definitions, - tableOptions: tableOptionsForOptions + tableOptions: tableOptionsForOptions, }); } - const sections = _.concat(makeSectionsBeforeRenderers(targetLanguages), rendererSections, sectionsAfterRenderers); + const sections = _.concat( + makeSectionsBeforeRenderers(targetLanguages), + rendererSections, + sectionsAfterRenderers, + ); console.log(getUsage(sections)); } // Returns an array of [name, sourceURIs] pairs. -async function getSourceURIs(options: CLIOptions): Promise> { +async function getSourceURIs( + options: CLIOptions, +): Promise> { if (options.srcUrls !== undefined) { const json = parseJSON( await readFromFileOrURL(options.srcUrls, options.httpHeader), "URL grammar", - options.srcUrls + options.srcUrls, ); const jsonMap = urlsFromURLGrammar(json); const topLevels = Object.getOwnPropertyNames(jsonMap); - return topLevels.map(name => [name, jsonMap[name]] as [string, string[]]); - } else if (options.src.length === 0) { + return topLevels.map( + (name) => [name, jsonMap[name]] as [string, string[]], + ); + } + if (options.src.length === 0) { return [[options.topLevel, ["-"]]]; - } else { - return []; } + + return []; } -async function typeSourcesForURIs(name: string, uris: string[], options: CLIOptions): Promise { +async function typeSourcesForURIs( + name: string, + uris: string[], + options: CLIOptions, +): Promise { switch (options.srcLang) { case "json": - return [await sourceFromFileOrUrlArray(name, uris, options.httpHeader)]; + return [ + await sourceFromFileOrUrlArray(name, uris, options.httpHeader), + ]; case "schema": - return uris.map(uri => ({ kind: "schema", name, uris: [uri] }) as SchemaTypeSource); + return uris.map( + (uri) => + ({ kind: "schema", name, uris: [uri] }) as SchemaTypeSource, + ); default: - return panic(`typeSourceForURIs must not be called for source language ${options.srcLang}`); + return panic( + `typeSourceForURIs must not be called for source language ${options.srcLang}`, + ); } } async function getSources(options: CLIOptions): Promise { const sourceURIs = await getSourceURIs(options); const sourceArrays = await Promise.all( - sourceURIs.map(async ([name, uris]) => await typeSourcesForURIs(name, uris, options)) + sourceURIs.map( + async ([name, uris]) => + await typeSourcesForURIs(name, uris, options), + ), ); let sources: TypeSource[] = ([] as TypeSource[]).concat(...sourceArrays); const exists = options.src.filter(fs.existsSync); - const directories = exists.filter(x => fs.lstatSync(x).isDirectory()); + const directories = exists.filter((x) => fs.lstatSync(x).isDirectory()); for (const dataDir of directories) { - sources = sources.concat(await samplesFromDirectory(dataDir, options.httpHeader)); + sources = sources.concat( + await samplesFromDirectory(dataDir, options.httpHeader), + ); } // Every src that's not a directory is assumed to be a file or URL - const filesOrUrls = options.src.filter(x => !_.includes(directories, x)); + const filesOrUrls = options.src.filter((x) => !_.includes(directories, x)); if (!_.isEmpty(filesOrUrls)) { - sources.push(...(await typeSourcesForURIs(options.topLevel, filesOrUrls, options))); + sources.push( + ...(await typeSourcesForURIs( + options.topLevel, + filesOrUrls, + options, + )), + ); } return sources; } function makeTypeScriptSource(fileNames: string[]): SchemaTypeSource { - return Object.assign({ kind: "schema" }, schemaForTypeScriptSources(fileNames)) as SchemaTypeSource; + return Object.assign( + { kind: "schema" }, + schemaForTypeScriptSources(fileNames), + ) as SchemaTypeSource; } export function jsonInputForTargetLanguage( targetLanguage: string | TargetLanguage, languages?: TargetLanguage[], - handleJSONRefs = false + handleJSONRefs = false, ): JSONInput { if (typeof targetLanguage === "string") { - const languageName = isLanguageName(targetLanguage) ? targetLanguage : "typescript"; + const languageName = isLanguageName(targetLanguage) + ? targetLanguage + : "typescript"; targetLanguage = defined(languageNamed(languageName, languages)); } - const compressedJSON = new CompressedJSONFromStream(targetLanguage.dateTimeRecognizer, handleJSONRefs); + const compressedJSON = new CompressedJSONFromStream( + targetLanguage.dateTimeRecognizer, + handleJSONRefs, + ); return new JSONInput(compressedJSON); } @@ -750,25 +903,38 @@ async function makeInputData( targetLanguage: TargetLanguage, additionalSchemaAddresses: readonly string[], handleJSONRefs: boolean, - httpHeaders?: string[] + httpHeaders?: string[], ): Promise { const inputData = new InputData(); for (const source of sources) { switch (source.kind) { case "graphql": - await inputData.addSource("graphql", source, () => new GraphQLInput()); + await inputData.addSource( + "graphql", + source, + () => new GraphQLInput(), + ); break; case "json": await inputData.addSource("json", source, () => - jsonInputForTargetLanguage(targetLanguage, undefined, handleJSONRefs) + jsonInputForTargetLanguage( + targetLanguage, + undefined, + handleJSONRefs, + ), ); break; case "schema": await inputData.addSource( "schema", source, - () => new JSONSchemaInput(new FetchingJSONSchemaStore(httpHeaders), [], additionalSchemaAddresses) + () => + new JSONSchemaInput( + new FetchingJSONSchemaStore(httpHeaders), + [], + additionalSchemaAddresses, + ), ); break; default: @@ -779,17 +945,21 @@ async function makeInputData( return inputData; } -function stringSourceDataToStreamSourceData(src: JSONSourceData): JSONSourceData { +function stringSourceDataToStreamSourceData( + src: JSONSourceData, +): JSONSourceData { return { name: src.name, description: src.description, - samples: src.samples.map(sample => stringToStream(sample) as Readable) + samples: src.samples.map( + (sample) => stringToStream(sample) as Readable, + ), }; } export async function makeQuicktypeOptions( options: CLIOptions, - targetLanguages?: TargetLanguage[] + targetLanguages?: TargetLanguage[], ): Promise | undefined> { if (options.help) { usage(targetLanguages ?? defaultTargetLanguages); @@ -821,7 +991,7 @@ export async function makeQuicktypeOptions( schemaString = await introspectServer( options.graphqlIntrospect, withDefault(options.httpMethod, "POST"), - withDefault(options.httpHeader, []) + withDefault(options.httpHeader, []), ); if (options.graphqlSchema !== undefined) { fs.writeFileSync(options.graphqlSchema, schemaString); @@ -854,9 +1024,18 @@ export async function makeQuicktypeOptions( schemaString = fs.readFileSync(schemaFileName, "utf8"); } - const schema = parseJSON(schemaString, "GraphQL schema", schemaFileName); - const query = await getStream(await readableFromFileOrURL(queryFile, options.httpHeader)); - const name = numSources === 1 ? options.topLevel : typeNameFromFilename(queryFile); + const schema = parseJSON( + schemaString, + "GraphQL schema", + schemaFileName, + ); + const query = await getStream( + await readableFromFileOrURL(queryFile, options.httpHeader), + ); + const name = + numSources === 1 + ? options.topLevel + : typeNameFromFilename(queryFile); gqlSources.push({ kind: "graphql", name, schema, query }); } @@ -872,13 +1051,17 @@ export async function makeQuicktypeOptions( case "postman": for (const collectionFile of options.src) { const collectionJSON = fs.readFileSync(collectionFile, "utf8"); - const { sources: postmanSources, description } = sourcesFromPostmanCollection( - collectionJSON, - collectionFile - ); + const { sources: postmanSources, description } = + sourcesFromPostmanCollection( + collectionJSON, + collectionFile, + ); for (const src of postmanSources) { sources.push( - Object.assign({ kind: "json" }, stringSourceDataToStreamSourceData(src)) as JSONTypeSource + Object.assign( + { kind: "json" }, + stringSourceDataToStreamSourceData(src), + ) as JSONTypeSource, ); } @@ -893,11 +1076,13 @@ export async function makeQuicktypeOptions( break; default: - return messageError("DriverUnknownSourceLanguage", { lang: options.srcLang }); + return messageError("DriverUnknownSourceLanguage", { + lang: options.srcLang, + }); } - const components = definedMap(options.debug, d => d.split(",")); - const debugAll = components !== undefined && components.includes("all"); + const components = definedMap(options.debug, (d) => d.split(",")); + const debugAll = components?.includes("all"); let debugPrintGraph = debugAll; let checkProvenance = debugAll; let debugPrintReconstitution = debugAll; @@ -923,13 +1108,17 @@ export async function makeQuicktypeOptions( } else if (component === "provenance") { checkProvenance = true; } else if (component !== "all") { - return messageError("DriverUnknownDebugOption", { option: component }); + return messageError("DriverUnknownDebugOption", { + option: component, + }); } } } if (!isLanguageName(options.lang)) { - return messageError("DriverUnknownOutputLanguage", { lang: options.lang }); + return messageError("DriverUnknownOutputLanguage", { + lang: options.lang, + }); } const lang = languageNamed(options.lang, targetLanguages); @@ -949,7 +1138,7 @@ export async function makeQuicktypeOptions( debugPrintGatherNames, debugPrintTransformations, debugPrintSchemaResolving, - debugPrintTimes + debugPrintTimes, }; for (const flagName of inferenceFlagNames) { const cliName = negatedInferenceFlagName(flagName); @@ -966,7 +1155,7 @@ export async function makeQuicktypeOptions( lang, options.additionalSchema, quicktypeOptions.ignoreJsonRefs !== true, - options.httpHeader + options.httpHeader, ); return quicktypeOptions; @@ -974,14 +1163,17 @@ export async function makeQuicktypeOptions( export function writeOutput( cliOptions: CLIOptions, - resultsByFilename: ReadonlyMap + resultsByFilename: ReadonlyMap, ): void { let onFirst = true; for (const [filename, { lines, annotations }] of resultsByFilename) { const output = lines.join("\n"); if (cliOptions.out !== undefined) { - fs.writeFileSync(path.join(path.dirname(cliOptions.out), filename), output); + fs.writeFileSync( + path.join(path.dirname(cliOptions.out), filename), + output, + ); } else { if (!onFirst) { process.stdout.write("\n"); @@ -1003,7 +1195,9 @@ export function writeOutput( if (!(annotation instanceof IssueAnnotationData)) continue; const lineNumber = sa.span.start.line; const humanLineNumber = lineNumber + 1; - console.error(`\nIssue in line ${humanLineNumber}: ${annotation.message}`); + console.error( + `\nIssue in line ${humanLineNumber}: ${annotation.message}`, + ); console.error(`${humanLineNumber}: ${lines[lineNumber]}`); } @@ -1011,7 +1205,9 @@ export function writeOutput( } } -export async function main(args: string[] | Partial): Promise { +export async function main( + args: string[] | Partial, +): Promise { let cliOptions: CLIOptions; if (Array.isArray(args)) { cliOptions = parseCLIOptions(args); @@ -1026,7 +1222,9 @@ export async function main(args: string[] | Partial): Promise case "disable": break; default: - console.error(chalk.red("telemetry must be 'enable' or 'disable'")); + console.error( + chalk.red("telemetry must be 'enable' or 'disable'"), + ); return; } @@ -1037,7 +1235,9 @@ export async function main(args: string[] | Partial): Promise } const quicktypeOptions = await makeQuicktypeOptions(cliOptions); - if (quicktypeOptions === undefined) return; + if (quicktypeOptions === undefined) { + return; + } const resultsByFilename = await quicktypeMultiFile(quicktypeOptions); @@ -1045,7 +1245,7 @@ export async function main(args: string[] | Partial): Promise } if (require.main === module) { - main(process.argv.slice(2)).catch(e => { + main(process.argv.slice(2)).catch((e) => { if (e instanceof Error) { console.error(`Error: ${e.message}.`); } else { diff --git a/test/buildkite.ts b/test/buildkite.ts index 98c8cc12e..e0d2ac89d 100644 --- a/test/buildkite.ts +++ b/test/buildkite.ts @@ -1,48 +1,65 @@ import * as _ from "lodash"; import { exec } from "shelljs"; -import { WorkItem } from "./test"; -import { allFixtures, Fixture } from "./fixtures"; +import type { WorkItem } from "./test"; +import { allFixtures, type Fixture } from "./fixtures"; function getChangedFiles(base: string, commit: string): string[] { - let diff = exec(`git fetch -v origin ${base} && git diff --name-only origin/${base}..${commit}`).stdout; + const diff = exec( + `git fetch -v origin ${base} && git diff --name-only origin/${base}..${commit}`, + ).stdout; return diff.trim().split("\n"); } -export function affectedFixtures(changedFiles: string[] | undefined = undefined): Fixture[] { +export function affectedFixtures( + changedFiles: string[] | undefined = undefined, +): Fixture[] { if (changedFiles === undefined) { const { GITHUB_BASE_REF: base, GITHUB_SHA: commit } = process.env; - return commit === undefined ? allFixtures : affectedFixtures(getChangedFiles(base || "master", commit)); + return commit === undefined + ? allFixtures + : affectedFixtures(getChangedFiles(base || "master", commit)); } // We can ignore changes in Markdown files - changedFiles = _.reject(changedFiles, file => _.endsWith(file, ".md")); + changedFiles = _.reject(changedFiles, (file) => _.endsWith(file, ".md")); // All fixtures are dirty if any changed file is not included as a sourceFile of some fixture. - const fileDependencies = _.flatMap(allFixtures, f => f.language.sourceFiles || []); - const allFixturesDirty = _.some(changedFiles, f => !_.includes(fileDependencies, f)); + const fileDependencies = _.flatMap( + allFixtures, + (f) => f.language.sourceFiles || [], + ); + const allFixturesDirty = _.some( + changedFiles, + (f) => !_.includes(fileDependencies, f), + ); if (allFixturesDirty) return allFixtures; const dirtyFixtures = allFixtures.filter( - fixture => + (fixture) => // Fixtures that don't specify dependencies are always dirty fixture.language.sourceFiles === undefined || // Fixtures that have a changed file are dirty - _.some(changedFiles, f => _.includes(fixture.language.sourceFiles, f)) + _.some(changedFiles, (f) => + _.includes(fixture.language.sourceFiles, f), + ), ); return dirtyFixtures; } export function divideParallelJobs(workItems: WorkItem[]): WorkItem[] { - const { BUILDKITE_PARALLEL_JOB: pjob, BUILDKITE_PARALLEL_JOB_COUNT: pcount } = process.env; + const { + BUILDKITE_PARALLEL_JOB: pjob, + BUILDKITE_PARALLEL_JOB_COUNT: pcount, + } = process.env; if (pjob === undefined || pcount === undefined) return workItems; try { - const segment = Math.ceil(workItems.length / parseFloat(pcount)); - const start = parseInt(pjob, 10) * segment; + const segment = Math.ceil(workItems.length / Number.parseFloat(pcount)); + const start = Number.parseInt(pjob, 10) * segment; return workItems.slice(start, start + segment); } catch { return workItems; diff --git a/test/fixtures.ts b/test/fixtures.ts index d8279f864..d4eb8f2fd 100644 --- a/test/fixtures.ts +++ b/test/fixtures.ts @@ -1,7 +1,7 @@ import * as _ from "lodash"; -import * as path from "path"; -import * as fs from "fs"; -import { randomBytes } from "crypto"; +import * as path from "node:path"; +import * as fs from "node:fs"; +import { randomBytes } from "node:crypto"; import * as shell from "shelljs"; const Ajv = require("ajv"); @@ -15,16 +15,19 @@ import { inDir, quicktype, quicktypeForLanguage, - Sample, + type Sample, samplesFromSources, testsInDir, - ComparisonArgs, + type ComparisonArgs, mkdirs, - callAndExpectFailure + callAndExpectFailure, } from "./utils"; import * as languages from "./languages"; import type { LanguageName, Option, RendererOptions } from "quicktype-core"; -import { mustNotHappen, defined } from "../packages/quicktype-core/dist/support/Support"; +import { + mustNotHappen, + defined, +} from "../packages/quicktype-core/dist/support/Support"; import { DefaultDateTimeRecognizer } from "../packages/quicktype-core/dist/DateTime"; import chalk from "chalk"; @@ -39,18 +42,31 @@ const MAX_TEST_RUNTIME_MS = 30 * 60 * 1000; * These are tests where we have stringified integers that might be serialized * back as integers, which happens in heterogenous arrays such as ["123", 456]. */ -const testsWithStringifiedIntegers = ["nst-test-suite.json", "kitchen-sink.json"]; +const testsWithStringifiedIntegers = [ + "nst-test-suite.json", + "kitchen-sink.json", +]; -function allowStringifiedIntegers(language: languages.Language, test: string): boolean { +function allowStringifiedIntegers( + language: languages.Language, + test: string, +): boolean { if (language.features.indexOf("integer-string") < 0) return false; return testsWithStringifiedIntegers.indexOf(path.basename(test)) >= 0; } function pathWithoutExtension(fullPath: string, extension: string): string { - return path.join(path.dirname(fullPath), path.basename(fullPath, extension)); + return path.join( + path.dirname(fullPath), + path.basename(fullPath, extension), + ); } -function additionalTestFiles(base: string, extension: string, features: string[] = []): string[] { +function additionalTestFiles( + base: string, + extension: string, + features: string[] = [], +): string[] { const additionalFiles: string[] = []; function tryAdd(filename: string): boolean { if (!fs.existsSync(filename)) return false; @@ -69,7 +85,10 @@ function additionalTestFiles(base: string, extension: string, features: string[] found = tryAdd(fn) || found; for (const feature of features) { - found = tryAdd(`${base}.${i.toString()}.fail.${feature}.${extension}`) || found; + found = + tryAdd( + `${base}.${i.toString()}.fail.${feature}.${extension}`, + ) || found; } found = tryAdd(`${base}.${i.toString()}.fail.${extension}`) || found; @@ -78,12 +97,16 @@ function additionalTestFiles(base: string, extension: string, features: string[] return additionalFiles; } -function runEnvForLanguage(additionalRendererOptions: RendererOptions): NodeJS.ProcessEnv { +function runEnvForLanguage( + additionalRendererOptions: RendererOptions, +): NodeJS.ProcessEnv { const newEnv = Object.assign({}, process.env); for (const option of Object.keys(additionalRendererOptions)) { newEnv["QUICKTYPE_" + option.toUpperCase().replace("-", "_")] = ( - additionalRendererOptions[option as keyof typeof additionalRendererOptions] as Option + additionalRendererOptions[ + option as keyof typeof additionalRendererOptions + ] as Option ).name; } return newEnv; @@ -93,17 +116,20 @@ function comparisonArgs( language: languages.Language, inputFilename: string, expectedFilename: string, - additionalRendererOptions: RendererOptions + additionalRendererOptions: RendererOptions, ): ComparisonArgs { return { expectedFile: expectedFilename, given: { command: defined(language.runCommand)(inputFilename), - env: runEnvForLanguage(additionalRendererOptions) + env: runEnvForLanguage(additionalRendererOptions), }, strict: false, allowMissingNull: language.allowMissingNull, - allowStringifiedIntegers: allowStringifiedIntegers(language, expectedFilename) + allowStringifiedIntegers: allowStringifiedIntegers( + language, + expectedFilename, + ), }; } @@ -117,11 +143,11 @@ function timeEnd(message: string, suffix: string): void { const start = timeMap.get(message); const fullMessage = message + suffix; if (start === undefined) { - console.log(fullMessage + ": " + chalk.red("UNKNOWN TIMING")); + console.log(`${fullMessage}: ${chalk.red("UNKNOWN TIMING")}`); return; } const diff = Date.now() - start; - console.log(fullMessage + `: ${diff} ms`); + console.log(`${fullMessage}: ${diff} ms`); } export abstract class Fixture { @@ -137,21 +163,37 @@ export abstract class Fixture { return; } - abstract getSamples(sources: string[]): { priority: Sample[]; others: Sample[] }; + abstract getSamples(sources: string[]): { + priority: Sample[]; + others: Sample[]; + }; - abstract runWithSample(sample: Sample, index: number, total: number): Promise; + abstract runWithSample( + sample: Sample, + index: number, + total: number, + ): Promise; getRunDirectory(): string { return `test/runs/${this.name}-${randomBytes(3).toString("hex")}`; } - runMessageStart(sample: Sample, index: number, total: number, cwd: string, shouldSkip: boolean): string { - const rendererOptions = _.map(sample.additionalRendererOptions, (v, k) => `${k}: ${v}`).join(", "); + runMessageStart( + sample: Sample, + index: number, + total: number, + cwd: string, + shouldSkip: boolean, + ): string { + const rendererOptions = _.map( + sample.additionalRendererOptions, + (v, k) => `${k}: ${v}`, + ).join(", "); const messageParts = [ - `*`, + "*", chalk.dim(`[${index + 1}/${total}]`), chalk.magenta(this.name) + chalk.dim(`(${rendererOptions})`), - path.join(cwd, chalk.cyan(path.basename(sample.path))) + path.join(cwd, chalk.cyan(path.basename(sample.path))), ]; if (shouldSkip) { messageParts.push(chalk.red("SKIP")); @@ -163,7 +205,12 @@ export abstract class Fixture { runMessageEnd(message: string, numFiles: number) { const numFilesString = ` (${numFiles} files)`; - const suffix = numFiles <= 0 ? chalk.red(numFilesString) : numFiles > 1 ? chalk.green(numFilesString) : ""; + const suffix = + numFiles <= 0 + ? chalk.red(numFilesString) + : numFiles > 1 + ? chalk.green(numFilesString) + : ""; timeEnd(message, suffix); } } @@ -179,7 +226,7 @@ abstract class LanguageFixture extends Fixture { return; } - console.error(`* Setting up`, chalk.magenta(this.name), `fixture`); + console.error(`* Setting up ${chalk.magenta(this.name)} fixture`); await inDir(this.language.base, async () => { await execAsync(setupCommand); @@ -187,11 +234,14 @@ abstract class LanguageFixture extends Fixture { } abstract shouldSkipTest(sample: Sample): boolean; - abstract runQuicktype(filename: string, additionalRendererOptions: RendererOptions): Promise; + abstract runQuicktype( + filename: string, + additionalRendererOptions: RendererOptions, + ): Promise; abstract test( filename: string, additionalRendererOptions: RendererOptions, - additionalFiles: string[] + additionalFiles: string[], ): Promise; additionalFiles(_sample: Sample): string[] { @@ -202,9 +252,17 @@ abstract class LanguageFixture extends Fixture { const cwd = this.getRunDirectory(); const sampleFile = path.resolve(sample.path); const shouldSkip = this.shouldSkipTest(sample); - const additionalFiles = this.additionalFiles(sample).map(p => path.resolve(p)); + const additionalFiles = this.additionalFiles(sample).map((p) => + path.resolve(p), + ); - const message = this.runMessageStart(sample, index, total, cwd, shouldSkip); + const message = this.runMessageStart( + sample, + index, + total, + cwd, + shouldSkip, + ); if (shouldSkip) { return; @@ -218,7 +276,10 @@ abstract class LanguageFixture extends Fixture { let numFiles = -1; await inDir(cwd, async () => { - await this.runQuicktype(sampleFile, sample.additionalRendererOptions); + await this.runQuicktype( + sampleFile, + sample.additionalRendererOptions, + ); if (ONLY_OUTPUT) { return; @@ -226,8 +287,12 @@ abstract class LanguageFixture extends Fixture { try { numFiles = await timeout( - this.test(sampleFile, sample.additionalRendererOptions, additionalFiles), - MAX_TEST_RUNTIME_MS + this.test( + sampleFile, + sample.additionalRendererOptions, + additionalFiles, + ), + MAX_TEST_RUNTIME_MS, ); } catch (e) { failWith("Fixture threw an exception", { error: e, sample }); @@ -236,12 +301,16 @@ abstract class LanguageFixture extends Fixture { // FIXME: This is an ugly hack to exclude Java, which has multiple // output files. We have to support that eventually. - if (sample.saveOutput && OUTPUT_DIR !== undefined && this.language.output.indexOf("/") < 0) { + if ( + sample.saveOutput && + OUTPUT_DIR !== undefined && + this.language.output.indexOf("/") < 0 + ) { const outputDir = path.join( OUTPUT_DIR, this.language.name, path.dirname(sample.path), - path.basename(sample.path, path.extname(sample.path)) + path.basename(sample.path, path.extname(sample.path)), ); mkdirs(outputDir); shell.cp(path.join(cwd, this.language.output), outputDir); @@ -259,7 +328,7 @@ abstract class LanguageFixture extends Fixture { class JSONFixture extends LanguageFixture { constructor( language: languages.Language, - public name: string = language.name + public name: string = language.name, ) { super(language); } @@ -268,15 +337,24 @@ class JSONFixture extends LanguageFixture { return this.name === name || name === "json"; } - async runQuicktype(sample: string, additionalRendererOptions: RendererOptions): Promise { + async runQuicktype( + sample: string, + additionalRendererOptions: RendererOptions, + ): Promise { // FIXME: add options - await quicktypeForLanguage(this.language, sample, "json", true, additionalRendererOptions); + await quicktypeForLanguage( + this.language, + sample, + "json", + true, + additionalRendererOptions, + ); } async test( filename: string, additionalRendererOptions: RendererOptions, - _additionalFiles: string[] + _additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); @@ -285,9 +363,22 @@ class JSONFixture extends LanguageFixture { return 0; } - compareJsonFileToJson(comparisonArgs(this.language, filename, filename, additionalRendererOptions)); + compareJsonFileToJson( + comparisonArgs( + this.language, + filename, + filename, + additionalRendererOptions, + ), + ); - if (this.language.diffViaSchema && !_.includes(this.language.skipDiffViaSchema, path.basename(filename))) { + if ( + this.language.diffViaSchema && + !_.includes( + this.language.skipDiffViaSchema, + path.basename(filename), + ) + ) { debug("* Diffing with code generated via JSON Schema"); // Make a schema await quicktype({ @@ -295,14 +386,23 @@ class JSONFixture extends LanguageFixture { lang: "schema", out: "schema.json", topLevel: this.language.topLevel, - rendererOptions: {} + rendererOptions: {}, }); // Quicktype from the schema and compare to expected code shell.mv(this.language.output, `${this.language.output}.expected`); - await quicktypeForLanguage(this.language, "schema.json", "schema", true, additionalRendererOptions); + await quicktypeForLanguage( + this.language, + "schema.json", + "schema", + true, + additionalRendererOptions, + ); // Compare fixture.output to fixture.output.expected - exec(`diff -Naur ${this.language.output}.expected ${this.language.output} > /dev/null 2>&1`, undefined); + exec( + `diff -Naur ${this.language.output}.expected ${this.language.output} > /dev/null 2>&1`, + undefined, + ); } return 1; @@ -313,10 +413,16 @@ class JSONFixture extends LanguageFixture { return true; } if (this.language.includeJSON !== undefined) { - return !_.includes(this.language.includeJSON, path.basename(sample.path)); + return !_.includes( + this.language.includeJSON, + path.basename(sample.path), + ); } if (this.language.skipJSON !== undefined) { - return _.includes(this.language.skipJSON, path.basename(sample.path)); + return _.includes( + this.language.skipJSON, + path.basename(sample.path), + ); } return false; } @@ -325,45 +431,68 @@ class JSONFixture extends LanguageFixture { // FIXME: this should only run once const prioritySamples = _.concat( testsInDir("test/inputs/json/priority", "json"), - testsInDir("test/inputs/json/samples", "json") + testsInDir("test/inputs/json/samples", "json"), ); - const skipMiscJSON = process.env.QUICKTEST !== undefined || this.language.skipMiscJSON; - const miscSamples = skipMiscJSON ? [] : testsInDir("test/inputs/json/misc", "json"); - - let { priority, others } = samplesFromSources(sources, prioritySamples, miscSamples, "json"); + const skipMiscJSON = + process.env.QUICKTEST !== undefined || this.language.skipMiscJSON; + const miscSamples = skipMiscJSON + ? [] + : testsInDir("test/inputs/json/misc", "json"); + + let { priority, others } = samplesFromSources( + sources, + prioritySamples, + miscSamples, + "json", + ); - const combinationInputs = _.map([1, 2, 3, 4], n => - _.find(prioritySamples, p => p.endsWith(`/priority/combinations${n}.json`)) + const combinationInputs = _.map([1, 2, 3, 4], (n) => + _.find(prioritySamples, (p) => + p.endsWith(`/priority/combinations${n}.json`), + ), ); - if (combinationInputs.some(p => p === undefined)) { - return failWith("priority/combinations[1234].json samples not found", prioritySamples); + if (combinationInputs.some((p) => p === undefined)) { + return failWith( + "priority/combinations[1234].json samples not found", + { prioritySamples }, + ); } if (sources.length === 0 && !ONLY_OUTPUT) { - const quickTestSamples = _.chain(this.language.quickTestRendererOptions) - .flatMap(qt => { + const quickTestSamples = _.chain( + this.language.quickTestRendererOptions, + ) + .flatMap((qt) => { if (Array.isArray(qt)) { const [filename, ro] = qt; - const input = _.find(([] as string[]).concat(prioritySamples, miscSamples), p => - p.endsWith(`/${filename}`) + const input = _.find( + ([] as string[]).concat( + prioritySamples, + miscSamples, + ), + (p) => p.endsWith(`/${filename}`), ); + if (input === undefined) { - return failWith(`quick-test sample ${filename} not found`, qt); + return failWith( + `quick-test sample ${filename} not found`, + { qt }, + ); } return [ { path: input, additionalRendererOptions: ro, - saveOutput: false - } + saveOutput: false, + }, ]; - } else { - return _.map(combinationInputs, p => ({ - path: defined(p), - additionalRendererOptions: qt, - saveOutput: false - })); } + + return _.map(combinationInputs, (p) => ({ + path: defined(p), + additionalRendererOptions: qt, + saveOutput: false, + })); }) .value(); priority = quickTestSamples.concat(priority); @@ -386,7 +515,7 @@ class JSONToXToYFixture extends JSONFixture { languageXOutputFilename: string, rendererOptions: RendererOptions, skipJSON: string[], - language: languages.Language + language: languages.Language, ) { super({ name: languageXName, @@ -404,7 +533,7 @@ class JSONToXToYFixture extends JSONFixture { skipSchema: [], rendererOptions, quickTestRendererOptions: [], - sourceFiles: language.sourceFiles + sourceFiles: language.sourceFiles, }); this.runLanguage = language; this.name = `${this._fixturePrefix}-${language.name}`; @@ -417,7 +546,7 @@ class JSONToXToYFixture extends JSONFixture { async test( filename: string, additionalRendererOptions: RendererOptions, - _additionalFiles: string[] + _additionalFiles: string[], ): Promise { // Generate code for Y from X await quicktypeForLanguage( @@ -425,18 +554,28 @@ class JSONToXToYFixture extends JSONFixture { this.language.output, this.language.name, false, - additionalRendererOptions + additionalRendererOptions, ); // Parse the sample with the code generated from its schema, and compare to the sample - compareJsonFileToJson(comparisonArgs(this.runLanguage, filename, filename, additionalRendererOptions)); + compareJsonFileToJson( + comparisonArgs( + this.runLanguage, + filename, + filename, + additionalRendererOptions, + ), + ); return 1; } shouldSkipTest(sample: Sample): boolean { if (super.shouldSkipTest(sample)) return true; - return _.includes(this.runLanguage.skipJSON, path.basename(sample.path)); + return _.includes( + this.runLanguage.skipJSON, + path.basename(sample.path), + ); } } @@ -452,7 +591,7 @@ class JSONSchemaJSONFixture extends JSONToXToYFixture { "blns-object.json", // AJV refuses to even "compile" the schema we generate "31189.json", // same here "437e7.json", // uri/string confusion - "ed095.json" // same here on Travis + "ed095.json", // same here on Travis ]; super("schema-json", "schema", "schema.json", {}, skipJSON, language); } @@ -460,21 +599,28 @@ class JSONSchemaJSONFixture extends JSONToXToYFixture { async test( filename: string, additionalRendererOptions: RendererOptions, - additionalFiles: string[] + additionalFiles: string[], ): Promise { - let input = JSON.parse(fs.readFileSync(filename, "utf8")); - let schema = JSON.parse(fs.readFileSync(this.language.output, "utf8")); + const input = JSON.parse(fs.readFileSync(filename, "utf8")); + const schema = JSON.parse( + fs.readFileSync(this.language.output, "utf8"), + ); - let ajv = new Ajv({ format: "full", unknownFormats: ["integer", "boolean"] }); + const ajv = new Ajv({ + format: "full", + unknownFormats: ["integer", "boolean"], + }); // Make Ajv's date-time compatible with what we recognize. All non-standard // JSON formats that we use for transformed type kinds must be registered here // with a validation function. // FIXME: Unify this with what's in StringTypes.ts. - ajv.addFormat("date-time", (s: string) => dateTimeRecognizer.isDateTime(s)); - let valid = ajv.validate(schema, input); + ajv.addFormat("date-time", (s: string) => + dateTimeRecognizer.isDateTime(s), + ); + const valid = ajv.validate(schema, input); if (!valid) { failWith("Generated schema does not validate input JSON.", { - filename + filename, }); } @@ -482,19 +628,19 @@ class JSONSchemaJSONFixture extends JSONToXToYFixture { // Generate a schema from the schema, making sure the schemas are the same // FIXME: We could move this to the superclass and test it for all JSON->X->Y - let schemaSchema = "schema-from-schema.json"; + const schemaSchema = "schema-from-schema.json"; await quicktype({ src: [this.language.output], srcLang: this.language.name, lang: this.language.name, topLevel: this.language.topLevel, out: schemaSchema, - rendererOptions: {} + rendererOptions: {}, }); compareJsonFileToJson({ expectedFile: this.language.output, given: { file: schemaSchema }, - strict: true + strict: true, }); return 1; @@ -560,12 +706,19 @@ const skipTypeScriptTests = [ "ed095.json", // top-level is a map "f3139.json", "f3edf.json", - "f466a.json" + "f466a.json", ]; class JSONTypeScriptFixture extends JSONToXToYFixture { constructor(language: languages.Language) { - super("json-ts", "ts", "typescript.ts", { "just-types": "true" }, [], language); + super( + "json-ts", + "ts", + "typescript.ts", + { "just-types": "true" }, + [], + language, + ); } shouldSkipTest(sample: Sample): boolean { @@ -578,7 +731,7 @@ class JSONTypeScriptFixture extends JSONToXToYFixture { class JSONSchemaFixture extends LanguageFixture { constructor( language: languages.Language, - readonly name: string = `schema-${language.name}` + readonly name: string = `schema-${language.name}`, ) { super(language); } @@ -596,8 +749,17 @@ class JSONSchemaFixture extends LanguageFixture { return _.includes(this.language.skipSchema, path.basename(sample.path)); } - async runQuicktype(filename: string, additionalRendererOptions: RendererOptions): Promise { - await quicktypeForLanguage(this.language, filename, "schema", false, additionalRendererOptions); + async runQuicktype( + filename: string, + additionalRendererOptions: RendererOptions, + ): Promise { + await quicktypeForLanguage( + this.language, + filename, + "schema", + false, + additionalRendererOptions, + ); } additionalFiles(sample: Sample): string[] { @@ -608,36 +770,48 @@ class JSONSchemaFixture extends LanguageFixture { async test( _sample: string, additionalRendererOptions: RendererOptions, - additionalFiles: string[] + additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); } if (this.language.runCommand === undefined) return 0; - const failExtensions = this.language.features.map(f => `.fail.${f}.json`).concat([".fail.json"]); + const failExtensions = this.language.features + .map((f) => `.fail.${f}.json`) + .concat([".fail.json"]); for (const filename of additionalFiles) { - if (failExtensions.some(ext => filename.endsWith(ext))) { + if (failExtensions.some((ext) => filename.endsWith(ext))) { callAndExpectFailure( `Expected failure on input ${filename}`, () => exec( defined(this.language.runCommand)(filename), runEnvForLanguage(additionalRendererOptions), - false - ).stdout + false, + ).stdout, ); } else { let expected = filename; for (const feature of this.language.features) { - const featureFilename = filename.replace(".json", `.out.${feature}.json`); + const featureFilename = filename.replace( + ".json", + `.out.${feature}.json`, + ); if (fs.existsSync(featureFilename)) { expected = featureFilename; break; } } - compareJsonFileToJson(comparisonArgs(this.language, filename, expected, additionalRendererOptions)); + compareJsonFileToJson( + comparisonArgs( + this.language, + filename, + expected, + additionalRendererOptions, + ), + ); } } return additionalFiles.length; @@ -647,22 +821,27 @@ class JSONSchemaFixture extends LanguageFixture { function graphQLSchemaFilename(baseName: string): string { const baseMatch = baseName.match(/(.*\D)\d+$/); if (baseMatch === null) { - return failWith("GraphQL test filename does not correspond to naming schema", { baseName }); + return failWith( + "GraphQL test filename does not correspond to naming schema", + { baseName }, + ); } - return baseMatch[1] + ".gqlschema"; + return `${baseMatch[1]}.gqlschema`; } class GraphQLFixture extends LanguageFixture { constructor( language: languages.Language, private readonly _onlyExactName: boolean = false, - readonly name: string = `graphql-${language.name}` + readonly name: string = `graphql-${language.name}`, ) { super(language); } runForName(name: string): boolean { - return this.name === name || (!this._onlyExactName && name === "graphql"); + return ( + this.name === name || (!this._onlyExactName && name === "graphql") + ); } getSamples(sources: string[]): { priority: Sample[]; others: Sample[] } { @@ -674,7 +853,10 @@ class GraphQLFixture extends LanguageFixture { return false; } - async runQuicktype(filename: string, additionalRendererOptions: RendererOptions): Promise { + async runQuicktype( + filename: string, + additionalRendererOptions: RendererOptions, + ): Promise { const baseName = pathWithoutExtension(filename, ".graphql"); const schemaFilename = graphQLSchemaFilename(baseName); await quicktypeForLanguage( @@ -683,7 +865,7 @@ class GraphQLFixture extends LanguageFixture { "graphql", false, additionalRendererOptions, - schemaFilename + schemaFilename, ); } @@ -695,7 +877,7 @@ class GraphQLFixture extends LanguageFixture { async test( _filename: string, additionalRendererOptions: RendererOptions, - additionalFiles: string[] + additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); @@ -703,7 +885,14 @@ class GraphQLFixture extends LanguageFixture { if (this.language.runCommand === undefined) return 0; for (const fn of additionalFiles) { - compareJsonFileToJson(comparisonArgs(this.language, fn, fn, additionalRendererOptions)); + compareJsonFileToJson( + comparisonArgs( + this.language, + fn, + fn, + additionalRendererOptions, + ), + ); } return additionalFiles.length; } @@ -712,7 +901,7 @@ class GraphQLFixture extends LanguageFixture { class CommandSuccessfulLanguageFixture extends LanguageFixture { constructor( language: languages.Language, - public name: string = language.name + public name: string = language.name, ) { super(language); } @@ -721,15 +910,24 @@ class CommandSuccessfulLanguageFixture extends LanguageFixture { return this.name === name || name === "json"; } - async runQuicktype(sample: string, additionalRendererOptions: RendererOptions): Promise { + async runQuicktype( + sample: string, + additionalRendererOptions: RendererOptions, + ): Promise { // FIXME: add options - await quicktypeForLanguage(this.language, sample, "json", true, additionalRendererOptions); + await quicktypeForLanguage( + this.language, + sample, + "json", + true, + additionalRendererOptions, + ); } async test( filename: string, _additionalRendererOptions: RendererOptions, - _additionalFiles: string[] + _additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); @@ -760,44 +958,65 @@ class CommandSuccessfulLanguageFixture extends LanguageFixture { // FIXME: this should only run once const prioritySamples = _.concat( testsInDir("test/inputs/json/priority", "json"), - testsInDir("test/inputs/json/samples", "json") + testsInDir("test/inputs/json/samples", "json"), ); - const miscSamples = this.language.skipMiscJSON ? [] : testsInDir("test/inputs/json/misc", "json"); + const miscSamples = this.language.skipMiscJSON + ? [] + : testsInDir("test/inputs/json/misc", "json"); - let { priority, others } = samplesFromSources(sources, prioritySamples, miscSamples, "json"); + let { priority, others } = samplesFromSources( + sources, + prioritySamples, + miscSamples, + "json", + ); - const combinationInputs = _.map([1, 2, 3, 4], n => - _.find(prioritySamples, p => p.endsWith(`/priority/combinations${n}.json`)) + const combinationInputs = _.map([1, 2, 3, 4], (n) => + _.find(prioritySamples, (p) => + p.endsWith(`/priority/combinations${n}.json`), + ), ); - if (combinationInputs.some(p => p === undefined)) { - return failWith("priority/combinations[1234].json samples not found", prioritySamples); + if (combinationInputs.some((p) => p === undefined)) { + return failWith( + "priority/combinations[1234].json samples not found", + { prioritySamples }, + ); } if (sources.length === 0 && !ONLY_OUTPUT) { - const quickTestSamples = _.chain(this.language.quickTestRendererOptions) - .flatMap(qt => { + const quickTestSamples = _.chain( + this.language.quickTestRendererOptions, + ) + .flatMap((qt) => { if (Array.isArray(qt)) { const [filename, ro] = qt; - const input = _.find(([] as string[]).concat(prioritySamples, miscSamples), p => - p.endsWith(`/${filename}`) + const input = _.find( + ([] as string[]).concat( + prioritySamples, + miscSamples, + ), + (p) => p.endsWith(`/${filename}`), ); if (input === undefined) { - return failWith(`quick-test sample ${filename} not found`, qt); + return failWith( + `quick-test sample ${filename} not found`, + { qt }, + ); } return [ { path: input, additionalRendererOptions: ro, - saveOutput: false - } + saveOutput: false, + }, ]; - } else { - return _.map(combinationInputs, p => ({ - path: defined(p), - additionalRendererOptions: qt, - saveOutput: false - })); } + + return _.map(combinationInputs, (p) => ({ + path: defined(p), + additionalRendererOptions: qt, + saveOutput: false, + })); }) .value(); priority = quickTestSamples.concat(priority); @@ -810,9 +1029,15 @@ class CommandSuccessfulLanguageFixture extends LanguageFixture { export const allFixtures: Fixture[] = [ // new JSONFixture(languages.CrystalLanguage), new JSONFixture(languages.CSharpLanguage), - new JSONFixture(languages.CSharpLanguageSystemTextJson, "csharp-SystemTextJson"), + new JSONFixture( + languages.CSharpLanguageSystemTextJson, + "csharp-SystemTextJson", + ), new JSONFixture(languages.JavaLanguage), - new JSONFixture(languages.JavaLanguageWithLegacyDateTime, "java-datetime-legacy"), + new JSONFixture( + languages.JavaLanguageWithLegacyDateTime, + "java-datetime-legacy", + ), new JSONFixture(languages.JavaLanguageWithLombok, "java-lombok"), new JSONFixture(languages.GoLanguage), new JSONFixture(languages.CJSONLanguage), @@ -841,8 +1066,14 @@ export const allFixtures: Fixture[] = [ // new JSONSchemaFixture(languages.CrystalLanguage), new JSONSchemaFixture(languages.CSharpLanguage), new JSONSchemaFixture(languages.JavaLanguage), - new JSONSchemaFixture(languages.JavaLanguageWithLegacyDateTime, "schema-java-datetime-legacy"), - new JSONSchemaFixture(languages.JavaLanguageWithLombok, "schema-java-lombok"), + new JSONSchemaFixture( + languages.JavaLanguageWithLegacyDateTime, + "schema-java-datetime-legacy", + ), + new JSONSchemaFixture( + languages.JavaLanguageWithLombok, + "schema-java-lombok", + ), new JSONSchemaFixture(languages.GoLanguage), new JSONSchemaFixture(languages.CJSONLanguage), new JSONSchemaFixture(languages.CPlusPlusLanguage), @@ -855,7 +1086,10 @@ export const allFixtures: Fixture[] = [ new JSONSchemaFixture(languages.FlowLanguage), new JSONSchemaFixture(languages.JavaScriptLanguage), new JSONSchemaFixture(languages.KotlinLanguage), - new JSONSchemaFixture(languages.KotlinJacksonLanguage, "schema-kotlin-jackson"), + new JSONSchemaFixture( + languages.KotlinJacksonLanguage, + "schema-kotlin-jackson", + ), new JSONSchemaFixture(languages.Scala3Language), new JSONSchemaFixture(languages.DartLanguage), new JSONSchemaFixture(languages.PikeLanguage), @@ -864,8 +1098,16 @@ export const allFixtures: Fixture[] = [ // FIXME: Why are we missing so many language with GraphQL? new GraphQLFixture(languages.CSharpLanguage), new GraphQLFixture(languages.JavaLanguage), - new GraphQLFixture(languages.JavaLanguageWithLegacyDateTime, false, "graphql-java-datetime-legacy"), - new GraphQLFixture(languages.JavaLanguageWithLombok, false, "graphql-java-lombok"), + new GraphQLFixture( + languages.JavaLanguageWithLegacyDateTime, + false, + "graphql-java-datetime-legacy", + ), + new GraphQLFixture( + languages.JavaLanguageWithLombok, + false, + "graphql-java-lombok", + ), new GraphQLFixture(languages.GoLanguage), new GraphQLFixture(languages.CJSONLanguage), new GraphQLFixture(languages.CPlusPlusLanguage), @@ -880,5 +1122,5 @@ export const allFixtures: Fixture[] = [ new GraphQLFixture(languages.HaskellLanguage), new GraphQLFixture(languages.PHPLanguage), new GraphQLFixture(languages.ElixirLanguage), - new CommandSuccessfulLanguageFixture(languages.JavaScriptPropTypesLanguage) + new CommandSuccessfulLanguageFixture(languages.JavaScriptPropTypesLanguage), ]; diff --git a/test/fixtures/csharp-SystemTextJson/.vscode/launch.json b/test/fixtures/csharp-SystemTextJson/.vscode/launch.json index 5143f096f..d4083c9b3 100644 --- a/test/fixtures/csharp-SystemTextJson/.vscode/launch.json +++ b/test/fixtures/csharp-SystemTextJson/.vscode/launch.json @@ -1,9 +1,9 @@ { - // Use IntelliSense to find out which attributes exist for C# debugging - // Use hover for the description of the existing attributes - // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md - "version": "0.2.0", - "configurations": [ + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "version": "0.2.0", + "configurations": [ { "name": ".NET Core Launch (console)", "type": "coreclr", @@ -25,4 +25,4 @@ "processId": "${command:pickProcess}" } ] -} \ No newline at end of file +} diff --git a/test/fixtures/csharp-SystemTextJson/.vscode/tasks.json b/test/fixtures/csharp-SystemTextJson/.vscode/tasks.json index 9f4391576..472e19d9d 100644 --- a/test/fixtures/csharp-SystemTextJson/.vscode/tasks.json +++ b/test/fixtures/csharp-SystemTextJson/.vscode/tasks.json @@ -6,11 +6,9 @@ "tasks": [ { "taskName": "build", - "args": [ - "${workspaceRoot}/test.csproj" - ], + "args": ["${workspaceRoot}/test.csproj"], "isBuildCommand": true, "problemMatcher": "$msCompile" } ] -} \ No newline at end of file +} diff --git a/test/fixtures/csharp/.vscode/launch.json b/test/fixtures/csharp/.vscode/launch.json index 5143f096f..d4083c9b3 100644 --- a/test/fixtures/csharp/.vscode/launch.json +++ b/test/fixtures/csharp/.vscode/launch.json @@ -1,9 +1,9 @@ { - // Use IntelliSense to find out which attributes exist for C# debugging - // Use hover for the description of the existing attributes - // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md - "version": "0.2.0", - "configurations": [ + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "version": "0.2.0", + "configurations": [ { "name": ".NET Core Launch (console)", "type": "coreclr", @@ -25,4 +25,4 @@ "processId": "${command:pickProcess}" } ] -} \ No newline at end of file +} diff --git a/test/fixtures/csharp/.vscode/tasks.json b/test/fixtures/csharp/.vscode/tasks.json index 9f4391576..472e19d9d 100644 --- a/test/fixtures/csharp/.vscode/tasks.json +++ b/test/fixtures/csharp/.vscode/tasks.json @@ -6,11 +6,9 @@ "tasks": [ { "taskName": "build", - "args": [ - "${workspaceRoot}/test.csproj" - ], + "args": ["${workspaceRoot}/test.csproj"], "isBuildCommand": true, "problemMatcher": "$msCompile" } ] -} \ No newline at end of file +} diff --git a/test/fixtures/elm/elm-package.json b/test/fixtures/elm/elm-package.json index f422b20ff..d688a53c9 100644 --- a/test/fixtures/elm/elm-package.json +++ b/test/fixtures/elm/elm-package.json @@ -3,9 +3,7 @@ "summary": "helpful summary of your project, less than 80 characters", "repository": "https://github.com/user/project.git", "license": "BSD3", - "source-directories": [ - "." - ], + "source-directories": ["."], "exposed-modules": [], "dependencies": { "NoRedInk/elm-decode-pipeline": "3.0.0 <= v < 4.0.0", diff --git a/test/fixtures/elm/runner.js b/test/fixtures/elm/runner.js index 61bdded06..d1c23b799 100644 --- a/test/fixtures/elm/runner.js +++ b/test/fixtures/elm/runner.js @@ -1,13 +1,17 @@ const Elm = require("./elm.js"); const fs = require("fs"); -let ports = Elm.Main.worker().ports; +const ports = Elm.Main.worker().ports; -ports.toJS.subscribe(function(result) { +ports.toJS.subscribe((result) => { if (result.startsWith("Error: ")) { - process.stderr.write(result + "\n", function() { process.exit(1); }); + process.stderr.write(result + "\n", () => { + process.exit(1); + }); } else { - process.stdout.write(result + "\n", function() { process.exit(0); }); + process.stdout.write(result + "\n", () => { + process.exit(0); + }); } }); diff --git a/test/fixtures/flow/main.js b/test/fixtures/flow/main.js index 0911b0b99..0953249fc 100644 --- a/test/fixtures/flow/main.js +++ b/test/fixtures/flow/main.js @@ -7,7 +7,7 @@ const fs = require("fs"); const sample = process.argv[2]; const json = fs.readFileSync(sample).toString(); -let value = TopLevel.toTopLevel(json); -let backToJson = TopLevel.topLevelToJson(value); +const value = TopLevel.toTopLevel(json); +const backToJson = TopLevel.topLevelToJson(value); console.log(backToJson); diff --git a/test/fixtures/javascript-prop-types/main.js b/test/fixtures/javascript-prop-types/main.js index 2d98efd53..36febff60 100644 --- a/test/fixtures/javascript-prop-types/main.js +++ b/test/fixtures/javascript-prop-types/main.js @@ -7,10 +7,15 @@ const sample = argv[2]; const json = readFileSync(sample); const obj = JSON.parse(json); -const results = checkPropTypes({ obj: TopLevel }, { obj }, "prop", "MyComponent"); +const results = checkPropTypes( + { obj: TopLevel }, + { obj }, + "prop", + "MyComponent", +); if (results) { - console.log("Failure:", results); + console.log("Failure:", results); } else { - console.log("Success"); + console.log("Success"); } diff --git a/test/fixtures/javascript-prop-types/package.json b/test/fixtures/javascript-prop-types/package.json index f708256f2..91b5d9b09 100644 --- a/test/fixtures/javascript-prop-types/package.json +++ b/test/fixtures/javascript-prop-types/package.json @@ -1,15 +1,15 @@ { - "name": "javascript-prop-types", - "version": "0.1.0", - "type": "module", - "description": "Test builds.", - "main": "main.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "Apache-2.0", - "dependencies": { - "check-prop-types": "^1.1.2" - } + "name": "javascript-prop-types", + "version": "0.1.0", + "type": "module", + "description": "Test builds.", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "Apache-2.0", + "dependencies": { + "check-prop-types": "^1.1.2" + } } diff --git a/test/fixtures/javascript/main.js b/test/fixtures/javascript/main.js index f76a027b2..cb60dd70d 100644 --- a/test/fixtures/javascript/main.js +++ b/test/fixtures/javascript/main.js @@ -6,7 +6,7 @@ const process = require("process"); const sample = process.argv[2]; const json = fs.readFileSync(sample); -let value = TopLevel.toTopLevel(json); -let backToJson = TopLevel.topLevelToJson(value); +const value = TopLevel.toTopLevel(json); +const backToJson = TopLevel.topLevelToJson(value); console.log(backToJson); diff --git a/test/fixtures/kotlin/sample.json b/test/fixtures/kotlin/sample.json index 2745fb5f2..aa95faec7 100644 --- a/test/fixtures/kotlin/sample.json +++ b/test/fixtures/kotlin/sample.json @@ -1,3 +1,3 @@ { "name": "David" -} \ No newline at end of file +} diff --git a/test/fixtures/objective-c/sample.json b/test/fixtures/objective-c/sample.json index 65685de44..2b49c232a 100644 --- a/test/fixtures/objective-c/sample.json +++ b/test/fixtures/objective-c/sample.json @@ -1,1853 +1,1872 @@ - [{ - "id": "6263117491", - "type": "PushEvent", - "actor": { - "id": 12358972, - "login": "CodePipeline-Test", - "display_login": "CodePipeline-Test", - "gravatar_id": "", - "url": "https://api.github.com/users/CodePipeline-Test", - "avatar_url": "https://avatars.githubusercontent.com/u/12358972?" - }, - "repo": { - "id": 63971386, - "name": "CodePipeline-Test/feature-tests", - "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests" - }, - "payload": { - "push_id": 1861573815, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/job-worker-features-V5zkpTEUgBlA4TOEJrWq", - "head": "f283b1955dd88fe65210c842e63408d5ad30d322", - "before": "873d322eb50db0068ae3d0ea2e79cee345e31c93", - "commits": [{ - "sha": "f283b1955dd88fe65210c842e63408d5ad30d322", - "author": { - "email": "CodePipeline-Test@users.noreply.github.com", - "name": "CodePipeline-Test" - }, - "message": "Test commit", - "distinct": true, - "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests/commits/f283b1955dd88fe65210c842e63408d5ad30d322" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:47Z" - }, - { - "id": "6263117489", - "type": "PushEvent", - "actor": { - "id": 16156445, - "login": "JonnyPickard", - "display_login": "JonnyPickard", - "gravatar_id": "", - "url": "https://api.github.com/users/JonnyPickard", - "avatar_url": "https://avatars.githubusercontent.com/u/16156445?" - }, - "repo": { - "id": 97318059, - "name": "JonnyPickard/albums-react-native", - "url": "https://api.github.com/repos/JonnyPickard/albums-react-native" - }, - "payload": { - "push_id": 1861573814, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "a11c7aedf4f1800357864302fe08fc277e9e8652", - "before": "d33e7adbb46926d1d4030d0c855b245062f1d9b5", - "commits": [{ - "sha": "a11c7aedf4f1800357864302fe08fc277e9e8652", - "author": { - "email": "jonathandpickard@gmail.com", - "name": "Jonny Pickard" - }, - "message": "Add basic server to send JSON", - "distinct": true, - "url": "https://api.github.com/repos/JonnyPickard/albums-react-native/commits/a11c7aedf4f1800357864302fe08fc277e9e8652" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:47Z" - }, - { - "id": "6263117487", - "type": "IssueCommentEvent", - "actor": { - "id": 4236651, - "login": "0x53A", - "display_login": "0x53A", - "gravatar_id": "", - "url": "https://api.github.com/users/0x53A", - "avatar_url": "https://avatars.githubusercontent.com/u/4236651?" - }, - "repo": { - "id": 29048891, - "name": "Microsoft/visualfsharp", - "url": "https://api.github.com/repos/Microsoft/visualfsharp" - }, - "payload": { - "action": "created", - "issue": { - "url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335", - "repository_url": "https://api.github.com/repos/Microsoft/visualfsharp", - "labels_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/labels{/name}", - "comments_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/comments", - "events_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/events", - "html_url": "https://github.com/Microsoft/visualfsharp/issues/3335", - "id": 243089775, - "number": 3335, - "title": "[15.3 pre] loading in VS / publish fails if FSharp.Compiler.Tools is imported", - "user": { - "login": "0x53A", - "id": 4236651, - "avatar_url": "https://avatars7.githubusercontent.com/u/4236651?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/0x53A", - "html_url": "https://github.com/0x53A", - "followers_url": "https://api.github.com/users/0x53A/followers", - "following_url": "https://api.github.com/users/0x53A/following{/other_user}", - "gists_url": "https://api.github.com/users/0x53A/gists{/gist_id}", - "starred_url": "https://api.github.com/users/0x53A/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/0x53A/subscriptions", - "organizations_url": "https://api.github.com/users/0x53A/orgs", - "repos_url": "https://api.github.com/users/0x53A/repos", - "events_url": "https://api.github.com/users/0x53A/events{/privacy}", - "received_events_url": "https://api.github.com/users/0x53A/received_events", - "type": "User", - "site_admin": false - }, - "labels": [{ - "id": 308803045, - "url": "https://api.github.com/repos/Microsoft/visualfsharp/labels/Area-CoreCLR", - "name": "Area-CoreCLR", - "color": "5319e7", - "default": false - }], - "state": "closed", - "locked": false, - "assignee": null, - "assignees": [ - - ], - "milestone": { - "url": "https://api.github.com/repos/Microsoft/visualfsharp/milestones/9", - "html_url": "https://github.com/Microsoft/visualfsharp/milestone/9", - "labels_url": "https://api.github.com/repos/Microsoft/visualfsharp/milestones/9/labels", - "id": 2233574, - "number": 9, - "title": "VS 2017 Updates", - "description": "This milestone is for any bug, new feature, or improvement which makes it into a later VS 2017 update.", - "creator": { - "login": "cartermp", - "id": 6309070, - "avatar_url": "https://avatars4.githubusercontent.com/u/6309070?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/cartermp", - "html_url": "https://github.com/cartermp", - "followers_url": "https://api.github.com/users/cartermp/followers", - "following_url": "https://api.github.com/users/cartermp/following{/other_user}", - "gists_url": "https://api.github.com/users/cartermp/gists{/gist_id}", - "starred_url": "https://api.github.com/users/cartermp/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/cartermp/subscriptions", - "organizations_url": "https://api.github.com/users/cartermp/orgs", - "repos_url": "https://api.github.com/users/cartermp/repos", - "events_url": "https://api.github.com/users/cartermp/events{/privacy}", - "received_events_url": "https://api.github.com/users/cartermp/received_events", - "type": "User", - "site_admin": false - }, - "open_issues": 55, - "closed_issues": 158, - "state": "open", - "created_at": "2017-01-06T17:42:02Z", - "updated_at": "2017-07-15T00:13:34Z", - "due_on": null, - "closed_at": null - }, - "comments": 29, - "created_at": "2017-07-14T19:28:04Z", - "updated_at": "2017-07-15T17:06:46Z", - "closed_at": "2017-07-15T00:13:33Z", - "body": "\r\nEdit2: everything works, thanks @KevinRansom \r\n\r\n_Edited_\r\n\r\nI have tried to test if / how a project using paket works in the new world of ``dotnet 2``, comparing C#, F#, and the previous F# sdk (FSharp.NET.Sdk). I have also tested if using F# without paket works.\r\n\r\nHere are four branches, one for each test: https://github.com/0x53A/dotnet-tests.\r\n\r\nResults:\r\n\r\n* paket works with C# and ``Microsoft.NET.Sdk``: https://github.com/0x53A/dotnet-tests/tree/csharp+paket\r\n* paket works with F# when using the 1.x sdk (``FSharp.NET.Sdk``): https://github.com/0x53A/dotnet-tests/tree/fsharp+paket+FSharp.NET.Sdk\r\n* paket ~does NOT~ does work with F# and ``Microsoft.NET.Sdk``: https://github.com/0x53A/dotnet-tests/tree/fsharp+paket\r\n* using F# with ``Microsoft.NET.Sdk`` and nuget does work: https://github.com/0x53A/dotnet-tests/tree/fsharp+nuget\r\n\r\nThe paket version I have tested this with is ``5.6.12``.\r\n\r\nIt is kind of funny that C# seems to work flawlessly with paket." - }, - "comment": { - "url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/comments/315547940", - "html_url": "https://github.com/Microsoft/visualfsharp/issues/3335#issuecomment-315547940", - "issue_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335", - "id": 315547940, - "user": { - "login": "0x53A", - "id": 4236651, - "avatar_url": "https://avatars7.githubusercontent.com/u/4236651?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/0x53A", - "html_url": "https://github.com/0x53A", - "followers_url": "https://api.github.com/users/0x53A/followers", - "following_url": "https://api.github.com/users/0x53A/following{/other_user}", - "gists_url": "https://api.github.com/users/0x53A/gists{/gist_id}", - "starred_url": "https://api.github.com/users/0x53A/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/0x53A/subscriptions", - "organizations_url": "https://api.github.com/users/0x53A/orgs", - "repos_url": "https://api.github.com/users/0x53A/repos", - "events_url": "https://api.github.com/users/0x53A/events{/privacy}", - "received_events_url": "https://api.github.com/users/0x53A/received_events", - "type": "User", - "site_admin": false - }, - "created_at": "2017-07-15T17:06:46Z", - "updated_at": "2017-07-15T17:06:46Z", - "body": "3) DisableImplicitFSharpCoreReference and paket\r\n\r\npaket.dependencies:\r\n\r\n```nuget FSharp.Core 4.0.0.1```\r\n\r\n```Xml\r\n\r\n \r\n net461\r\n true\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n```\r\n\r\n=>\r\n\r\n```\r\nC:\\source\\dotnet-tests>dotnet publish\r\nMicrosoft (R) Build Engine version 15.3.406.54721 for .NET Core\r\nCopyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nC:\\source\\dotnet-tests\\Library.fs(7,17): error FS0039: The value, namespace, type or module 'Result' is not defined. [C:\\source\\dotnet-tests\\paket-fsharp-test.fsproj]\r\nC:\\source\\dotnet-tests\\Library.fs(8,42): error FS0039: The pattern discriminator 'Ok' is not defined. [C:\\source\\dotnet-tests\\paket-fsharp-test.fsproj]\r\n```\r\n\r\nwhich is good.\r\n\r\n-----------------\r\n\r\nSo it looks like both properties work as expected. It seems that in __2)__ the compiler automagically referenced some FSharp.Core, because none was explicitly referenced." - } - }, - "public": true, - "created_at": "2017-07-15T17:06:47Z", - "org": { - "id": 6154722, - "login": "Microsoft", - "gravatar_id": "", - "url": "https://api.github.com/orgs/Microsoft", - "avatar_url": "https://avatars.githubusercontent.com/u/6154722?" - } - }, - { - "id": "6263117486", - "type": "PushEvent", - "actor": { - "id": 982267, - "login": "gxela", - "display_login": "gxela", - "gravatar_id": "", - "url": "https://api.github.com/users/gxela", - "avatar_url": "https://avatars.githubusercontent.com/u/982267?" - }, - "repo": { - "id": 97197951, - "name": "AudioBible/AudioBible.life", - "url": "https://api.github.com/repos/AudioBible/AudioBible.life" - }, - "payload": { - "push_id": 1861573811, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "31e079597959be78850e06c623383d522f8fe283", - "before": "11d32ac0eb7051ddc7da05dab183f10ed861fa61", - "commits": [{ - "sha": "31e079597959be78850e06c623383d522f8fe283", - "author": { - "email": "alex@goretoy.com", - "name": "Alex Goretoy" - }, - "message": "update", - "distinct": true, - "url": "https://api.github.com/repos/AudioBible/AudioBible.life/commits/31e079597959be78850e06c623383d522f8fe283" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:47Z", - "org": { - "id": 29329308, - "login": "AudioBible", - "gravatar_id": "", - "url": "https://api.github.com/orgs/AudioBible", - "avatar_url": "https://avatars.githubusercontent.com/u/29329308?" - } - }, - { - "id": "6263117481", - "type": "CreateEvent", - "actor": { - "id": 998519, - "login": "martinstabe", - "display_login": "martinstabe", - "gravatar_id": "", - "url": "https://api.github.com/users/martinstabe", - "avatar_url": "https://avatars.githubusercontent.com/u/998519?" - }, - "repo": { - "id": 90621389, - "name": "ft-interactive/archive", - "url": "https://api.github.com/repos/ft-interactive/archive" - }, - "payload": { - "ref": "personal-data", - "ref_type": "branch", - "master_branch": "master", - "description": "Refactored versions of a few older FT interactive stories", - "pusher_type": "user" - }, - "public": true, - "created_at": "2017-07-15T17:06:47Z", - "org": { - "id": 2511089, - "login": "ft-interactive", - "gravatar_id": "", - "url": "https://api.github.com/orgs/ft-interactive", - "avatar_url": "https://avatars.githubusercontent.com/u/2511089?" - } - }, - { - "id": "6263117480", - "type": "PushEvent", - "actor": { - "id": 30200303, - "login": "musikdusche", - "display_login": "musikdusche", - "gravatar_id": "", - "url": "https://api.github.com/users/musikdusche", - "avatar_url": "https://avatars.githubusercontent.com/u/30200303?" - }, - "repo": { - "id": 97330240, - "name": "musikdusche/hello-world", - "url": "https://api.github.com/repos/musikdusche/hello-world" - }, - "payload": { - "push_id": 1861573809, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/readmeworks", - "head": "e09f4ef810382578be4ba49bcc351c94ac8b15f9", - "before": "10f052d3f22eaad13302b5e0e6d1a4af77a73f91", - "commits": [{ - "sha": "e09f4ef810382578be4ba49bcc351c94ac8b15f9", - "author": { - "email": "f.toens@gmx.de", - "name": "musikdusche" - }, - "message": "Update README.md\n\ntrying out markdown syntaxes", - "distinct": true, - "url": "https://api.github.com/repos/musikdusche/hello-world/commits/e09f4ef810382578be4ba49bcc351c94ac8b15f9" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:47Z" - }, - { - "id": "6263117478", - "type": "PushEvent", - "actor": { - "id": 4712642, - "login": "neu-rah", - "display_login": "neu-rah", - "gravatar_id": "", - "url": "https://api.github.com/users/neu-rah", - "avatar_url": "https://avatars.githubusercontent.com/u/4712642?" - }, - "repo": { - "id": 23024191, - "name": "neu-rah/ArduinoMenu", - "url": "https://api.github.com/repos/neu-rah/ArduinoMenu" - }, - "payload": { - "push_id": 1861573808, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "1557e3155279ca19e35048f8a6758189cbb2231a", - "before": "fb1b8c70b324bf73231728a708fe496991c51607", - "commits": [{ - "sha": "1557e3155279ca19e35048f8a6758189cbb2231a", - "author": { - "email": "ruihfazevedo@gmail.com", - "name": "Rui Azevedo" - }, - "message": "remove pin collision between encoder and serial on I2C example as noted by Paul Gaertner", - "distinct": true, - "url": "https://api.github.com/repos/neu-rah/ArduinoMenu/commits/1557e3155279ca19e35048f8a6758189cbb2231a" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:47Z" - }, - { - "id": "6263117476", - "type": "PushEvent", - "actor": { - "id": 22308572, - "login": "zfang399", - "display_login": "zfang399", - "gravatar_id": "", - "url": "https://api.github.com/users/zfang399", - "avatar_url": "https://avatars.githubusercontent.com/u/22308572?" - }, - "repo": { - "id": 93472978, - "name": "zfang399/LeetCode-Problems", - "url": "https://api.github.com/repos/zfang399/LeetCode-Problems" - }, - "payload": { - "push_id": 1861573807, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "dffd54fc9872b0a14ae7b3089c541db439c77dc6", - "before": "31643c5f628a91714dabf3c0472d6b3b6f2d75f9", - "commits": [{ - "sha": "dffd54fc9872b0a14ae7b3089c541db439c77dc6", - "author": { - "email": "zfang@nd.edu", - "name": "Zhaoyuan Fang" - }, - "message": "Reverse Linked List II", - "distinct": true, - "url": "https://api.github.com/repos/zfang399/LeetCode-Problems/commits/dffd54fc9872b0a14ae7b3089c541db439c77dc6" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z" - }, - { - "id": "6263117475", - "type": "PushEvent", - "actor": { - "id": 4750766, - "login": "rohintangirala", - "display_login": "rohintangirala", - "gravatar_id": "", - "url": "https://api.github.com/users/rohintangirala", - "avatar_url": "https://avatars.githubusercontent.com/u/4750766?" - }, - "repo": { - "id": 97284340, - "name": "Twenty-App/Twenty-App.github.io", - "url": "https://api.github.com/repos/Twenty-App/Twenty-App.github.io" - }, - "payload": { - "push_id": 1861573806, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "90effa1defcc57fbb19d118a3cf773e200542333", - "before": "a3a94db8f23bec183df701cc6f27b761be8f6250", - "commits": [{ - "sha": "90effa1defcc57fbb19d118a3cf773e200542333", - "author": { - "email": "rohinkt@gmail.com", - "name": "Rohin Tangirala" - }, - "message": "Set theme jekyll-theme-tactile", - "distinct": true, - "url": "https://api.github.com/repos/Twenty-App/Twenty-App.github.io/commits/90effa1defcc57fbb19d118a3cf773e200542333" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z", - "org": { - "id": 30188091, - "login": "Twenty-App", - "gravatar_id": "", - "url": "https://api.github.com/orgs/Twenty-App", - "avatar_url": "https://avatars.githubusercontent.com/u/30188091?" - } - }, - { - "id": "6263117473", - "type": "PushEvent", - "actor": { - "id": 8517910, - "login": "LombiqBot", - "display_login": "LombiqBot", - "gravatar_id": "", - "url": "https://api.github.com/users/LombiqBot", - "avatar_url": "https://avatars.githubusercontent.com/u/8517910?" - }, - "repo": { - "id": 46594739, - "name": "Lombiq/Associativy-Taxonomies-Adapter", - "url": "https://api.github.com/repos/Lombiq/Associativy-Taxonomies-Adapter" - }, - "payload": { - "push_id": 1861573805, - "size": 0, - "distinct_size": 0, - "ref": "refs/heads/orchard-upgrade-1.10", - "head": "e1d77dd00dfdc65d5d84b1712be94e609273c838", - "before": "e1d77dd00dfdc65d5d84b1712be94e609273c838", - "commits": [ - - ] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z", - "org": { - "id": 8158177, - "login": "Lombiq", - "gravatar_id": "", - "url": "https://api.github.com/orgs/Lombiq", - "avatar_url": "https://avatars.githubusercontent.com/u/8158177?" - } - }, - { - "id": "6263117472", - "type": "PushEvent", - "actor": { - "id": 25966, - "login": "reconbot", - "display_login": "reconbot", - "gravatar_id": "", - "url": "https://api.github.com/users/reconbot", - "avatar_url": "https://avatars.githubusercontent.com/u/25966?" - }, - "repo": { - "id": 893522, - "name": "EmergingTechnologyAdvisors/node-serialport", - "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport" - }, - "payload": { - "push_id": 1861573804, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", - "before": "2361fa599a16a10ad07ffe863fe00bb2bc75d29a", - "commits": [{ - "sha": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", - "author": { - "email": "wizard@roborooter.com", - "name": "Francis Gulotta" - }, - "message": "[unix] Move setting up the baudrate to the end of the open()\n\n- Test 1000000 baud", - "distinct": true, - "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits/9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z", - "org": { - "id": 8947774, - "login": "EmergingTechnologyAdvisors", - "gravatar_id": "", - "url": "https://api.github.com/orgs/EmergingTechnologyAdvisors", - "avatar_url": "https://avatars.githubusercontent.com/u/8947774?" - } - }, - { - "id": "6263117471", - "type": "IssueCommentEvent", - "actor": { - "id": 737750, - "login": "samuelkarp", - "display_login": "samuelkarp", - "gravatar_id": "", - "url": "https://api.github.com/users/samuelkarp", - "avatar_url": "https://avatars.githubusercontent.com/u/737750?" - }, - "repo": { - "id": 59514412, - "name": "awslabs/amazon-ecr-credential-helper", - "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper" - }, - "payload": { - "action": "created", - "issue": { - "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49", - "repository_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper", - "labels_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/labels{/name}", - "comments_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/comments", - "events_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/events", - "html_url": "https://github.com/awslabs/amazon-ecr-credential-helper/issues/49", - "id": 241526602, - "number": 49, - "title": "no basic auth credentials yet AWS CLI has access", - "user": { - "login": "guyisra", - "id": 1073521, - "avatar_url": "https://avatars5.githubusercontent.com/u/1073521?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/guyisra", - "html_url": "https://github.com/guyisra", - "followers_url": "https://api.github.com/users/guyisra/followers", - "following_url": "https://api.github.com/users/guyisra/following{/other_user}", - "gists_url": "https://api.github.com/users/guyisra/gists{/gist_id}", - "starred_url": "https://api.github.com/users/guyisra/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/guyisra/subscriptions", - "organizations_url": "https://api.github.com/users/guyisra/orgs", - "repos_url": "https://api.github.com/users/guyisra/repos", - "events_url": "https://api.github.com/users/guyisra/events{/privacy}", - "received_events_url": "https://api.github.com/users/guyisra/received_events", - "type": "User", - "site_admin": false - }, - "labels": [ - - ], - "state": "open", - "locked": false, - "assignee": null, - "assignees": [ - - ], - "milestone": null, - "comments": 3, - "created_at": "2017-07-09T13:59:15Z", - "updated_at": "2017-07-15T17:06:46Z", - "closed_at": null, - "body": "I am using Docker v17 and for some reason when trying to push to ECR I get no basic auth credentials.\r\n\r\nThis doesn't happen if I manually login with `aws ecr get-login ...`\r\n\r\nthe policy is configured correctly, I can run other AWS commands.\r\nIt gives the same response with either a profile with the proper policy or with the access key and secret explicitly set.." - }, - "comment": { - "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/comments/315547939", - "html_url": "https://github.com/awslabs/amazon-ecr-credential-helper/issues/49#issuecomment-315547939", - "issue_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49", - "id": 315547939, - "user": { - "login": "samuelkarp", - "id": 737750, - "avatar_url": "https://avatars7.githubusercontent.com/u/737750?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/samuelkarp", - "html_url": "https://github.com/samuelkarp", - "followers_url": "https://api.github.com/users/samuelkarp/followers", - "following_url": "https://api.github.com/users/samuelkarp/following{/other_user}", - "gists_url": "https://api.github.com/users/samuelkarp/gists{/gist_id}", - "starred_url": "https://api.github.com/users/samuelkarp/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/samuelkarp/subscriptions", - "organizations_url": "https://api.github.com/users/samuelkarp/orgs", - "repos_url": "https://api.github.com/users/samuelkarp/repos", - "events_url": "https://api.github.com/users/samuelkarp/events{/privacy}", - "received_events_url": "https://api.github.com/users/samuelkarp/received_events", - "type": "User", - "site_admin": false - }, - "created_at": "2017-07-15T17:06:46Z", - "updated_at": "2017-07-15T17:06:46Z", - "body": "@mskutin Thanks for providing the log; that's very helpful. Can you let me know what region this was for so I can investigate further?" - } - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z", - "org": { - "id": 3299148, - "login": "awslabs", - "gravatar_id": "", - "url": "https://api.github.com/orgs/awslabs", - "avatar_url": "https://avatars.githubusercontent.com/u/3299148?" - } - }, - { - "id": "6263117468", - "type": "IssueCommentEvent", - "actor": { - "id": 1645308, - "login": "almereyda", - "display_login": "almereyda", - "gravatar_id": "", - "url": "https://api.github.com/users/almereyda", - "avatar_url": "https://avatars.githubusercontent.com/u/1645308?" - }, - "repo": { - "id": 22657662, - "name": "wsargent/docker-cheat-sheet", - "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet" - }, - "payload": { - "action": "created", - "issue": { - "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136", - "repository_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet", - "labels_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/labels{/name}", - "comments_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/comments", - "events_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/events", - "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136", - "id": 243181907, - "number": 136, - "title": "Volumes can be files", - "user": { - "login": "phoen1x", - "id": 2550793, - "avatar_url": "https://avatars7.githubusercontent.com/u/2550793?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/phoen1x", - "html_url": "https://github.com/phoen1x", - "followers_url": "https://api.github.com/users/phoen1x/followers", - "following_url": "https://api.github.com/users/phoen1x/following{/other_user}", - "gists_url": "https://api.github.com/users/phoen1x/gists{/gist_id}", - "starred_url": "https://api.github.com/users/phoen1x/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/phoen1x/subscriptions", - "organizations_url": "https://api.github.com/users/phoen1x/orgs", - "repos_url": "https://api.github.com/users/phoen1x/repos", - "events_url": "https://api.github.com/users/phoen1x/events{/privacy}", - "received_events_url": "https://api.github.com/users/phoen1x/received_events", - "type": "User", - "site_admin": false - }, - "labels": [ - - ], - "state": "open", - "locked": false, - "assignee": null, - "assignees": [ - - ], - "milestone": null, - "comments": 0, - "created_at": "2017-07-15T15:28:10Z", - "updated_at": "2017-07-15T17:06:46Z", - "closed_at": null, - "pull_request": { - "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/pulls/136", - "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136", - "diff_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136.diff", - "patch_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136.patch" - }, - "body": "Just wanted to add that is possible to mount files as volumes. \r\n\r\nDon't know if that is worth mentioning. But it can be useful if you want to toy around with a image from [Docker Hub](https://hub.docker.com) without writing your own Dockerfile." - }, - "comment": { - "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/comments/315547938", - "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136#issuecomment-315547938", - "issue_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136", - "id": 315547938, - "user": { - "login": "almereyda", - "id": 1645308, - "avatar_url": "https://avatars4.githubusercontent.com/u/1645308?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/almereyda", - "html_url": "https://github.com/almereyda", - "followers_url": "https://api.github.com/users/almereyda/followers", - "following_url": "https://api.github.com/users/almereyda/following{/other_user}", - "gists_url": "https://api.github.com/users/almereyda/gists{/gist_id}", - "starred_url": "https://api.github.com/users/almereyda/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/almereyda/subscriptions", - "organizations_url": "https://api.github.com/users/almereyda/orgs", - "repos_url": "https://api.github.com/users/almereyda/repos", - "events_url": "https://api.github.com/users/almereyda/events{/privacy}", - "received_events_url": "https://api.github.com/users/almereyda/received_events", - "type": "User", - "site_admin": false - }, - "created_at": "2017-07-15T17:06:46Z", - "updated_at": "2017-07-15T17:06:46Z", - "body": "Indeed, I do that all the time when modifying assets that were turned into immutable images already." - } - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z" - }, - { - "id": "6263117464", - "type": "PushEvent", - "actor": { - "id": 19437824, - "login": "keriwheatley", - "display_login": "keriwheatley", - "gravatar_id": "", - "url": "https://api.github.com/users/keriwheatley", - "avatar_url": "https://avatars.githubusercontent.com/u/19437824?" - }, - "repo": { - "id": 91394098, - "name": "keriwheatley/coursework", - "url": "https://api.github.com/repos/keriwheatley/coursework" - }, - "payload": { - "push_id": 1861573800, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "490f194beb4be216ed955d187aee265443dd532c", - "before": "14034277c8e715f9988686d85701b501845705e7", - "commits": [{ - "sha": "490f194beb4be216ed955d187aee265443dd532c", - "author": { - "email": "keri.wheatley@civitaslearning.com", - "name": "Keri Wheatley" - }, - "message": "updates to twitter_popularity", - "distinct": true, - "url": "https://api.github.com/repos/keriwheatley/coursework/commits/490f194beb4be216ed955d187aee265443dd532c" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z" - }, - { - "id": "6263117462", - "type": "CreateEvent", - "actor": { - "id": 12358972, - "login": "CodePipeline-Test", - "display_login": "CodePipeline-Test", - "gravatar_id": "", - "url": "https://api.github.com/users/CodePipeline-Test", - "avatar_url": "https://avatars.githubusercontent.com/u/12358972?" - }, - "repo": { - "id": 63971386, - "name": "CodePipeline-Test/feature-tests", - "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests" - }, - "payload": { - "ref": "job-worker-features-V5zkpTEUgBlA4TOEJrWq", - "ref_type": "branch", - "master_branch": "master", - "description": "for feature tests", - "pusher_type": "user" - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z" - }, - { - "id": "6263117460", - "type": "WatchEvent", - "actor": { - "id": 9091565, - "login": "chiprunner1995", - "display_login": "chiprunner1995", - "gravatar_id": "", - "url": "https://api.github.com/users/chiprunner1995", - "avatar_url": "https://avatars.githubusercontent.com/u/9091565?" - }, - "repo": { - "id": 308512, - "name": "psake/psake", - "url": "https://api.github.com/repos/psake/psake" - }, - "payload": { - "action": "started" - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z", - "org": { - "id": 1007585, - "login": "psake", - "gravatar_id": "", - "url": "https://api.github.com/orgs/psake", - "avatar_url": "https://avatars.githubusercontent.com/u/1007585?" - } - }, - { - "id": "6263117459", - "type": "PushEvent", - "actor": { - "id": 30199151, - "login": "Geoffers888", - "display_login": "Geoffers888", - "gravatar_id": "", - "url": "https://api.github.com/users/Geoffers888", - "avatar_url": "https://avatars.githubusercontent.com/u/30199151?" - }, - "repo": { - "id": 97330344, - "name": "Geoffers888/Console-Boxes", - "url": "https://api.github.com/repos/Geoffers888/Console-Boxes" - }, - "payload": { - "push_id": 1861573799, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "46f85052c269c7ede354a698e05e5ef5359bc71b", - "before": "ecb8a45cc1e49ee60ffa880eba8219b294ec44f5", - "commits": [{ - "sha": "46f85052c269c7ede354a698e05e5ef5359bc71b", - "author": { - "email": "geoff.cowin@gmail.com", - "name": "Geoffers888" - }, - "message": "Create README.md", - "distinct": true, - "url": "https://api.github.com/repos/Geoffers888/Console-Boxes/commits/46f85052c269c7ede354a698e05e5ef5359bc71b" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z" - }, - { - "id": "6263117454", - "type": "PushEvent", - "actor": { - "id": 8517910, - "login": "LombiqBot", - "display_login": "LombiqBot", - "gravatar_id": "", - "url": "https://api.github.com/users/LombiqBot", - "avatar_url": "https://avatars.githubusercontent.com/u/8517910?" - }, - "repo": { - "id": 46624662, - "name": "Lombiq/Orchard-External-Pages", - "url": "https://api.github.com/repos/Lombiq/Orchard-External-Pages" - }, - "payload": { - "push_id": 1861573796, - "size": 0, - "distinct_size": 0, - "ref": "refs/heads/issue/OSOE-7", - "head": "a630eb8494f07e6f11a5bc396a0829d5aa690c5f", - "before": "a630eb8494f07e6f11a5bc396a0829d5aa690c5f", - "commits": [ - - ] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z", - "org": { - "id": 8158177, - "login": "Lombiq", - "gravatar_id": "", - "url": "https://api.github.com/orgs/Lombiq", - "avatar_url": "https://avatars.githubusercontent.com/u/8158177?" - } - }, - { - "id": "6263117451", - "type": "PullRequestEvent", - "actor": { - "id": 25966, - "login": "reconbot", - "display_login": "reconbot", - "gravatar_id": "", - "url": "https://api.github.com/users/reconbot", - "avatar_url": "https://avatars.githubusercontent.com/u/25966?" - }, - "repo": { - "id": 893522, - "name": "EmergingTechnologyAdvisors/node-serialport", - "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport" - }, - "payload": { - "action": "closed", - "number": 1235, - "pull_request": { - "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235", - "id": 130722112, - "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235", - "diff_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235.diff", - "patch_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235.patch", - "issue_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235", - "number": 1235, - "state": "closed", - "locked": false, - "title": "[unix] Move setting up the baudrate to the end of the open() to better support custom baudrates", - "user": { - "login": "reconbot", - "id": 25966, - "avatar_url": "https://avatars6.githubusercontent.com/u/25966?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/reconbot", - "html_url": "https://github.com/reconbot", - "followers_url": "https://api.github.com/users/reconbot/followers", - "following_url": "https://api.github.com/users/reconbot/following{/other_user}", - "gists_url": "https://api.github.com/users/reconbot/gists{/gist_id}", - "starred_url": "https://api.github.com/users/reconbot/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/reconbot/subscriptions", - "organizations_url": "https://api.github.com/users/reconbot/orgs", - "repos_url": "https://api.github.com/users/reconbot/repos", - "events_url": "https://api.github.com/users/reconbot/events{/privacy}", - "received_events_url": "https://api.github.com/users/reconbot/received_events", - "type": "User", - "site_admin": false - }, - "body": "- Test 1000000 baud\r\n\r\ncloses #1077", - "created_at": "2017-07-15T16:53:28Z", - "updated_at": "2017-07-15T17:06:45Z", - "closed_at": "2017-07-15T17:06:45Z", - "merged_at": "2017-07-15T17:06:45Z", - "merge_commit_sha": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", - "assignee": null, - "assignees": [ - - ], - "requested_reviewers": [ - - ], - "milestone": null, - "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/commits", - "review_comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/comments", - "review_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/comments{/number}", - "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235/comments", - "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/e57b3d685f6497ebe8669ce8b05894bacd895177", - "head": { - "label": "EmergingTechnologyAdvisors:1000000-baud", - "ref": "1000000-baud", - "sha": "e57b3d685f6497ebe8669ce8b05894bacd895177", - "user": { - "login": "EmergingTechnologyAdvisors", - "id": 8947774, - "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/EmergingTechnologyAdvisors", - "html_url": "https://github.com/EmergingTechnologyAdvisors", - "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", - "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", - "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", - "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", - "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", - "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", - "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", - "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", - "type": "Organization", - "site_admin": false - }, - "repo": { - "id": 893522, - "name": "node-serialport", - "full_name": "EmergingTechnologyAdvisors/node-serialport", - "owner": { - "login": "EmergingTechnologyAdvisors", - "id": 8947774, - "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/EmergingTechnologyAdvisors", - "html_url": "https://github.com/EmergingTechnologyAdvisors", - "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", - "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", - "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", - "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", - "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", - "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", - "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", - "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", - "description": "Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!", - "fork": false, - "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport", - "forks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/forks", - "keys_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/teams", - "hooks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/hooks", - "issue_events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/events{/number}", - "events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/events", - "assignees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/assignees{/user}", - "branches_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/branches{/branch}", - "tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/tags", - "blobs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/{sha}", - "languages_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/languages", - "stargazers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/stargazers", - "contributors_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contributors", - "subscribers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscribers", - "subscription_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscription", - "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contents/{+path}", - "compare_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/merges", - "archive_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/downloads", - "issues_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues{/number}", - "pulls_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls{/number}", - "milestones_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/milestones{/number}", - "notifications_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/labels{/name}", - "releases_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/releases{/id}", - "deployments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/deployments", - "created_at": "2010-09-07T12:24:28Z", - "updated_at": "2017-07-14T16:30:58Z", - "pushed_at": "2017-07-15T17:06:45Z", - "git_url": "git://github.com/EmergingTechnologyAdvisors/node-serialport.git", - "ssh_url": "git@github.com:EmergingTechnologyAdvisors/node-serialport.git", - "clone_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport.git", - "svn_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", - "homepage": "", - "size": 1914, - "stargazers_count": 2829, - "watchers_count": 2829, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": false, - "has_pages": true, - "forks_count": 601, - "mirror_url": null, - "open_issues_count": 30, - "forks": 601, - "open_issues": 30, - "watchers": 2829, - "default_branch": "master" - } - }, - "base": { - "label": "EmergingTechnologyAdvisors:master", - "ref": "master", - "sha": "ee7315f59c7698811f4f76405383f18680843926", - "user": { - "login": "EmergingTechnologyAdvisors", - "id": 8947774, - "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/EmergingTechnologyAdvisors", - "html_url": "https://github.com/EmergingTechnologyAdvisors", - "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", - "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", - "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", - "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", - "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", - "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", - "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", - "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", - "type": "Organization", - "site_admin": false - }, - "repo": { - "id": 893522, - "name": "node-serialport", - "full_name": "EmergingTechnologyAdvisors/node-serialport", - "owner": { - "login": "EmergingTechnologyAdvisors", - "id": 8947774, - "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/EmergingTechnologyAdvisors", - "html_url": "https://github.com/EmergingTechnologyAdvisors", - "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", - "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", - "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", - "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", - "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", - "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", - "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", - "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", - "description": "Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!", - "fork": false, - "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport", - "forks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/forks", - "keys_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/teams", - "hooks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/hooks", - "issue_events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/events{/number}", - "events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/events", - "assignees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/assignees{/user}", - "branches_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/branches{/branch}", - "tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/tags", - "blobs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/{sha}", - "languages_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/languages", - "stargazers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/stargazers", - "contributors_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contributors", - "subscribers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscribers", - "subscription_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscription", - "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contents/{+path}", - "compare_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/merges", - "archive_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/downloads", - "issues_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues{/number}", - "pulls_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls{/number}", - "milestones_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/milestones{/number}", - "notifications_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/labels{/name}", - "releases_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/releases{/id}", - "deployments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/deployments", - "created_at": "2010-09-07T12:24:28Z", - "updated_at": "2017-07-14T16:30:58Z", - "pushed_at": "2017-07-15T17:06:45Z", - "git_url": "git://github.com/EmergingTechnologyAdvisors/node-serialport.git", - "ssh_url": "git@github.com:EmergingTechnologyAdvisors/node-serialport.git", - "clone_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport.git", - "svn_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", - "homepage": "", - "size": 1914, - "stargazers_count": 2829, - "watchers_count": 2829, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": false, - "has_pages": true, - "forks_count": 601, - "mirror_url": null, - "open_issues_count": 30, - "forks": 601, - "open_issues": 30, - "watchers": 2829, - "default_branch": "master" - } - }, - "_links": { - "self": { - "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235" - }, - "html": { - "href": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235" - }, - "issue": { - "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235" - }, - "comments": { - "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235/comments" - }, - "review_comments": { - "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/comments" - }, - "review_comment": { - "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/comments{/number}" - }, - "commits": { - "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/commits" - }, - "statuses": { - "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/e57b3d685f6497ebe8669ce8b05894bacd895177" - } - }, - "merged": true, - "mergeable": null, - "rebaseable": null, - "mergeable_state": "unknown", - "merged_by": { - "login": "reconbot", - "id": 25966, - "avatar_url": "https://avatars6.githubusercontent.com/u/25966?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/reconbot", - "html_url": "https://github.com/reconbot", - "followers_url": "https://api.github.com/users/reconbot/followers", - "following_url": "https://api.github.com/users/reconbot/following{/other_user}", - "gists_url": "https://api.github.com/users/reconbot/gists{/gist_id}", - "starred_url": "https://api.github.com/users/reconbot/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/reconbot/subscriptions", - "organizations_url": "https://api.github.com/users/reconbot/orgs", - "repos_url": "https://api.github.com/users/reconbot/repos", - "events_url": "https://api.github.com/users/reconbot/events{/privacy}", - "received_events_url": "https://api.github.com/users/reconbot/received_events", - "type": "User", - "site_admin": false - }, - "comments": 0, - "review_comments": 0, - "maintainer_can_modify": false, - "commits": 1, - "additions": 24, - "deletions": 14, - "changed_files": 2 - } - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z", - "org": { - "id": 8947774, - "login": "EmergingTechnologyAdvisors", - "gravatar_id": "", - "url": "https://api.github.com/orgs/EmergingTechnologyAdvisors", - "avatar_url": "https://avatars.githubusercontent.com/u/8947774?" - } - }, - { - "id": "6263117447", - "type": "PushEvent", - "actor": { - "id": 11887843, - "login": "trimox", - "display_login": "trimox", - "gravatar_id": "", - "url": "https://api.github.com/users/trimox", - "avatar_url": "https://avatars.githubusercontent.com/u/11887843?" - }, - "repo": { - "id": 88184430, - "name": "trimox/angular-mdc-web", - "url": "https://api.github.com/repos/trimox/angular-mdc-web" - }, - "payload": { - "push_id": 1861573792, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "59de0a8bfb229e7e72a1960132fdf24f0a770a08", - "before": "27327b3a3cb4e58ddb1b1188cb0f04092d850106", - "commits": [{ - "sha": "59de0a8bfb229e7e72a1960132fdf24f0a770a08", - "author": { - "email": "trimoxal@gmail.com", - "name": "Dominic Carretto" - }, - "message": "fix(snackbar): Fix actionHandler still required if actionText is empty", - "distinct": true, - "url": "https://api.github.com/repos/trimox/angular-mdc-web/commits/59de0a8bfb229e7e72a1960132fdf24f0a770a08" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:46Z" - }, - { - "id": "6263117445", - "type": "WatchEvent", - "actor": { - "id": 1006434, - "login": "enorrmann", - "display_login": "enorrmann", - "gravatar_id": "", - "url": "https://api.github.com/users/enorrmann", - "avatar_url": "https://avatars.githubusercontent.com/u/1006434?" - }, - "repo": { - "id": 14699489, - "name": "walmik/scribbletune", - "url": "https://api.github.com/repos/walmik/scribbletune" - }, - "payload": { - "action": "started" - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117444", - "type": "PushEvent", - "actor": { - "id": 24412103, - "login": "james341", - "display_login": "james341", - "gravatar_id": "", - "url": "https://api.github.com/users/james341", - "avatar_url": "https://avatars.githubusercontent.com/u/24412103?" - }, - "repo": { - "id": 96979484, - "name": "james341/loading-yan-rp", - "url": "https://api.github.com/repos/james341/loading-yan-rp" - }, - "payload": { - "push_id": 1861573791, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "16bb35eb4a43d916a40155996c9d7dfadb007573", - "before": "ad4b96a5b924783e42d1d0cbf0fd1b5cba3cbd2f", - "commits": [{ - "sha": "16bb35eb4a43d916a40155996c9d7dfadb007573", - "author": { - "email": "taine049@gmail.com", - "name": "james341" - }, - "message": "Add files via upload", - "distinct": true, - "url": "https://api.github.com/repos/james341/loading-yan-rp/commits/16bb35eb4a43d916a40155996c9d7dfadb007573" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117441", - "type": "PushEvent", - "actor": { - "id": 4676211, - "login": "kanke", - "display_login": "kanke", - "gravatar_id": "", - "url": "https://api.github.com/users/kanke", - "avatar_url": "https://avatars.githubusercontent.com/u/4676211?" - }, - "repo": { - "id": 97262451, - "name": "kanke/RedisServerClone", - "url": "https://api.github.com/repos/kanke/RedisServerClone" - }, - "payload": { - "push_id": 1861573790, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "e6312819f0acdc40008b06ae7a2c6c211c2f1db0", - "before": "f9a4fe7e866181c74fbc9352310fbc6c539d2aff", - "commits": [{ - "sha": "e6312819f0acdc40008b06ae7a2c6c211c2f1db0", - "author": { - "email": "sugarkanke@yahoo.com", - "name": "Kanke" - }, - "message": "Adding gitignore and readme.md content. Code cleanup.", - "distinct": true, - "url": "https://api.github.com/repos/kanke/RedisServerClone/commits/e6312819f0acdc40008b06ae7a2c6c211c2f1db0" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117440", - "type": "PushEvent", - "actor": { - "id": 16622965, - "login": "jainhitesh9998", - "display_login": "jainhitesh9998", - "gravatar_id": "", - "url": "https://api.github.com/users/jainhitesh9998", - "avatar_url": "https://avatars.githubusercontent.com/u/16622965?" - }, - "repo": { - "id": 94244445, - "name": "jainhitesh9998/WebDevelopment", - "url": "https://api.github.com/repos/jainhitesh9998/WebDevelopment" - }, - "payload": { - "push_id": 1861573789, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "9e3c3f5f437fbc1f21a30f19f764787b86a393be", - "before": "d69d496b80a5806406f2313d67e63f3adf61b97e", - "commits": [{ - "sha": "9e3c3f5f437fbc1f21a30f19f764787b86a393be", - "author": { - "email": "jainhitesh9998@gmail.com", - "name": "Hitesh C" - }, - "message": "added sounds for the clone", - "distinct": true, - "url": "https://api.github.com/repos/jainhitesh9998/WebDevelopment/commits/9e3c3f5f437fbc1f21a30f19f764787b86a393be" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117437", - "type": "PushEvent", - "actor": { - "id": 1491646, - "login": "MikroAcse", - "display_login": "MikroAcse", - "gravatar_id": "", - "url": "https://api.github.com/users/MikroAcse", - "avatar_url": "https://avatars.githubusercontent.com/u/1491646?" - }, - "repo": { - "id": 96892535, - "name": "MikroAcse/VariousTelegramBots", - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots" - }, - "payload": { - "push_id": 1861573788, - "size": 11, - "distinct_size": 11, - "ref": "refs/heads/dev", - "head": "7ef25bf6aad45c9da53a2d5918e553c68cd69dd4", - "before": "931cef7db8ec69cc951fe8a5ecc2b909397e29a4", - "commits": [{ - "sha": "88b9e4e53f62ff7c9597f66d9e45a0a9be5fe1ca", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "upgrade Node.js version", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/88b9e4e53f62ff7c9597f66d9e45a0a9be5fe1ca" - }, - { - "sha": "d5b91bac58a8c3b88ddd9634578cb3beebb31015", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Update Node js version", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/d5b91bac58a8c3b88ddd9634578cb3beebb31015" - }, - { - "sha": "37cd86961e36e64c8ccd7873bbccc200b920d308", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Fix", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/37cd86961e36e64c8ccd7873bbccc200b920d308" - }, - { - "sha": "471451fd46b9bed62eef062553f480e788c24a3c", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Merge branch 'master' into dev\n\n# Conflicts:\n#\tapp.js", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/471451fd46b9bed62eef062553f480e788c24a3c" - }, - { - "sha": "8f5be591fae47f1ff051f992176faeed8fe3c2d7", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Removed unnecessary dependency and updated README.md", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/8f5be591fae47f1ff051f992176faeed8fe3c2d7" - }, - { - "sha": "d239750fbb26f13daf50a14e1c4a23375df9c5d9", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Update README", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/d239750fbb26f13daf50a14e1c4a23375df9c5d9" - }, - { - "sha": "94adaefc2b4107db89cdbc045a6a106724f12a2d", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Fix in readme", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/94adaefc2b4107db89cdbc045a6a106724f12a2d" - }, - { - "sha": "da8009c4da182c036efbc7a8e9d9353d1282d5ed", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Added version to readme", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/da8009c4da182c036efbc7a8e9d9353d1282d5ed" - }, - { - "sha": "1590092c64e774633040419b69d60d98197ddbde", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Removed requirement of deleted dependency", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/1590092c64e774633040419b69d60d98197ddbde" - }, - { - "sha": "1986905b1d32654a20916fafc60c7484ff85841a", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Yes or no in ChooseBot, slight changes in QuoteBot regexp", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/1986905b1d32654a20916fafc60c7484ff85841a" - }, - { - "sha": "7ef25bf6aad45c9da53a2d5918e553c68cd69dd4", - "author": { - "email": "mike.kroace@gmail.com", - "name": "Vitaly Rudenko" - }, - "message": "Merge commit '1986905b1d32654a20916fafc60c7484ff85841a' into dev", - "distinct": true, - "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/7ef25bf6aad45c9da53a2d5918e553c68cd69dd4" - } - ] - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117435", - "type": "PushEvent", - "actor": { - "id": 12949454, - "login": "jarifibrahim", - "display_login": "jarifibrahim", - "gravatar_id": "", - "url": "https://api.github.com/users/jarifibrahim", - "avatar_url": "https://avatars.githubusercontent.com/u/12949454?" - }, - "repo": { - "id": 93039796, - "name": "jarifibrahim/OpenSourceHelpCommunity.github.io", - "url": "https://api.github.com/repos/jarifibrahim/OpenSourceHelpCommunity.github.io" - }, - "payload": { - "push_id": 1861573787, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/issue-4", - "head": "4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4", - "before": "57c0a65ee93de1955ad5691585a51c358188f311", - "commits": [{ - "sha": "4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4", - "author": { - "email": "jarifibrahim@gmail.com", - "name": "Ibrahim Jarif" - }, - "message": "Add travs.yml", - "distinct": true, - "url": "https://api.github.com/repos/jarifibrahim/OpenSourceHelpCommunity.github.io/commits/4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117430", - "type": "IssueCommentEvent", - "actor": { - "id": 849609, - "login": "wrrn", - "display_login": "wrrn", - "gravatar_id": "", - "url": "https://api.github.com/users/wrrn", - "avatar_url": "https://avatars.githubusercontent.com/u/849609?" - }, - "repo": { - "id": 23096959, - "name": "golang/go", - "url": "https://api.github.com/repos/golang/go" - }, - "payload": { - "action": "created", - "issue": { - "url": "https://api.github.com/repos/golang/go/issues/21017", - "repository_url": "https://api.github.com/repos/golang/go", - "labels_url": "https://api.github.com/repos/golang/go/issues/21017/labels{/name}", - "comments_url": "https://api.github.com/repos/golang/go/issues/21017/comments", - "events_url": "https://api.github.com/repos/golang/go/issues/21017/events", - "html_url": "https://github.com/golang/go/issues/21017", - "id": 243177572, - "number": 21017, - "title": "Gophercon: Contributor Workshop Registration", - "user": { - "login": "jessfraz", - "id": 1445228, - "avatar_url": "https://avatars6.githubusercontent.com/u/1445228?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jessfraz", - "html_url": "https://github.com/jessfraz", - "followers_url": "https://api.github.com/users/jessfraz/followers", - "following_url": "https://api.github.com/users/jessfraz/following{/other_user}", - "gists_url": "https://api.github.com/users/jessfraz/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jessfraz/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jessfraz/subscriptions", - "organizations_url": "https://api.github.com/users/jessfraz/orgs", - "repos_url": "https://api.github.com/users/jessfraz/repos", - "events_url": "https://api.github.com/users/jessfraz/events{/privacy}", - "received_events_url": "https://api.github.com/users/jessfraz/received_events", - "type": "User", - "site_admin": false - }, - "labels": [{ - "id": 150880243, - "url": "https://api.github.com/repos/golang/go/labels/HelpWanted", - "name": "HelpWanted", - "color": "fbca04", - "default": false - }], - "state": "open", - "locked": false, - "assignee": null, - "assignees": [ - - ], - "milestone": { - "url": "https://api.github.com/repos/golang/go/milestones/22", - "html_url": "https://github.com/golang/go/milestone/22", - "labels_url": "https://api.github.com/repos/golang/go/milestones/22/labels", - "id": 1067491, - "number": 22, - "title": "Unreleased", - "description": "Issues that do not affect released Go code and binaries.\r\n", - "creator": { - "login": "rsc", - "id": 104030, - "avatar_url": "https://avatars5.githubusercontent.com/u/104030?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/rsc", - "html_url": "https://github.com/rsc", - "followers_url": "https://api.github.com/users/rsc/followers", - "following_url": "https://api.github.com/users/rsc/following{/other_user}", - "gists_url": "https://api.github.com/users/rsc/gists{/gist_id}", - "starred_url": "https://api.github.com/users/rsc/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/rsc/subscriptions", - "organizations_url": "https://api.github.com/users/rsc/orgs", - "repos_url": "https://api.github.com/users/rsc/repos", - "events_url": "https://api.github.com/users/rsc/events{/privacy}", - "received_events_url": "https://api.github.com/users/rsc/received_events", - "type": "User", - "site_admin": false - }, - "open_issues": 707, - "closed_issues": 918, - "state": "open", - "created_at": "2015-04-14T18:48:22Z", - "updated_at": "2017-07-15T17:06:04Z", - "due_on": "2099-12-31T08:00:00Z", - "closed_at": null - }, - "comments": 14, - "created_at": "2017-07-15T14:13:29Z", - "updated_at": "2017-07-15T17:06:43Z", - "closed_at": null, - "body": "Please do not comment here until the Contributor Workshop begins.\r\n\r\nDuring the workshop leave a comment with your Gerritt profile ID here." - }, - "comment": { - "url": "https://api.github.com/repos/golang/go/issues/comments/315547934", - "html_url": "https://github.com/golang/go/issues/21017#issuecomment-315547934", - "issue_url": "https://api.github.com/repos/golang/go/issues/21017", - "id": 315547934, - "user": { - "login": "wrrn", - "id": 849609, - "avatar_url": "https://avatars7.githubusercontent.com/u/849609?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/wrrn", - "html_url": "https://github.com/wrrn", - "followers_url": "https://api.github.com/users/wrrn/followers", - "following_url": "https://api.github.com/users/wrrn/following{/other_user}", - "gists_url": "https://api.github.com/users/wrrn/gists{/gist_id}", - "starred_url": "https://api.github.com/users/wrrn/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/wrrn/subscriptions", - "organizations_url": "https://api.github.com/users/wrrn/orgs", - "repos_url": "https://api.github.com/users/wrrn/repos", - "events_url": "https://api.github.com/users/wrrn/events{/privacy}", - "received_events_url": "https://api.github.com/users/wrrn/received_events", - "type": "User", - "site_admin": false - }, - "created_at": "2017-07-15T17:06:43Z", - "updated_at": "2017-07-15T17:06:43Z", - "body": "22590" - } - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z", - "org": { - "id": 4314092, - "login": "golang", - "gravatar_id": "", - "url": "https://api.github.com/orgs/golang", - "avatar_url": "https://avatars.githubusercontent.com/u/4314092?" - } - }, - { - "id": "6263117428", - "type": "PushEvent", - "actor": { - "id": 6938676, - "login": "Ordinastie", - "display_login": "Ordinastie", - "gravatar_id": "", - "url": "https://api.github.com/users/Ordinastie", - "avatar_url": "https://avatars.githubusercontent.com/u/6938676?" - }, - "repo": { - "id": 17756561, - "name": "Ordinastie/MalisisDoors", - "url": "https://api.github.com/repos/Ordinastie/MalisisDoors" - }, - "payload": { - "push_id": 1861573783, - "size": 2, - "distinct_size": 2, - "ref": "refs/heads/1.12", - "head": "07334b1700ec9cd173c7560f293b7dd10dc24fd9", - "before": "ee8e1058833056afdcac559c22518b3706b3657f", - "commits": [{ - "sha": "52080012d79ae0320392379b5d054f3e17ec1b98", - "author": { - "email": "ordinastie@hotmail.com", - "name": "Ordinastie" - }, - "message": "Fixed getRegistryType()", - "distinct": true, - "url": "https://api.github.com/repos/Ordinastie/MalisisDoors/commits/52080012d79ae0320392379b5d054f3e17ec1b98" - }, - { - "sha": "07334b1700ec9cd173c7560f293b7dd10dc24fd9", - "author": { - "email": "ordinastie@hotmail.com", - "name": "Ordinastie" - }, - "message": "Updated forgegradle and curseforge version", - "distinct": true, - "url": "https://api.github.com/repos/Ordinastie/MalisisDoors/commits/07334b1700ec9cd173c7560f293b7dd10dc24fd9" - } - ] - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117427", - "type": "DeleteEvent", - "actor": { - "id": 227909, - "login": "amcdnl", - "display_login": "amcdnl", - "gravatar_id": "", - "url": "https://api.github.com/users/amcdnl", - "avatar_url": "https://avatars.githubusercontent.com/u/227909?" - }, - "repo": { - "id": 94944874, - "name": "amcdnl/material2", - "url": "https://api.github.com/repos/amcdnl/material2" - }, - "payload": { - "ref": "autocomplete-demos", - "ref_type": "branch", - "pusher_type": "user" - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - }, - { - "id": "6263117426", - "type": "PushEvent", - "actor": { - "id": 16347325, - "login": "zxui", - "display_login": "zxui", - "gravatar_id": "", - "url": "https://api.github.com/users/zxui", - "avatar_url": "https://avatars.githubusercontent.com/u/16347325?" - }, - "repo": { - "id": 88623154, - "name": "zxui/auto-admin", - "url": "https://api.github.com/repos/zxui/auto-admin" - }, - "payload": { - "push_id": 1861573782, - "size": 1, - "distinct_size": 1, - "ref": "refs/heads/master", - "head": "70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2", - "before": "f673e6b191197827bddb31bcffea61611e8a50b0", - "commits": [{ - "sha": "70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2", - "author": { - "email": "zxshen@qq.com", - "name": "zxui" - }, - "message": "update", - "distinct": true, - "url": "https://api.github.com/repos/zxui/auto-admin/commits/70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2" - }] - }, - "public": true, - "created_at": "2017-07-15T17:06:45Z" - } - ] +[ + { + "id": "6263117491", + "type": "PushEvent", + "actor": { + "id": 12358972, + "login": "CodePipeline-Test", + "display_login": "CodePipeline-Test", + "gravatar_id": "", + "url": "https://api.github.com/users/CodePipeline-Test", + "avatar_url": "https://avatars.githubusercontent.com/u/12358972?" + }, + "repo": { + "id": 63971386, + "name": "CodePipeline-Test/feature-tests", + "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests" + }, + "payload": { + "push_id": 1861573815, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/job-worker-features-V5zkpTEUgBlA4TOEJrWq", + "head": "f283b1955dd88fe65210c842e63408d5ad30d322", + "before": "873d322eb50db0068ae3d0ea2e79cee345e31c93", + "commits": [ + { + "sha": "f283b1955dd88fe65210c842e63408d5ad30d322", + "author": { + "email": "CodePipeline-Test@users.noreply.github.com", + "name": "CodePipeline-Test" + }, + "message": "Test commit", + "distinct": true, + "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests/commits/f283b1955dd88fe65210c842e63408d5ad30d322" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:47Z" + }, + { + "id": "6263117489", + "type": "PushEvent", + "actor": { + "id": 16156445, + "login": "JonnyPickard", + "display_login": "JonnyPickard", + "gravatar_id": "", + "url": "https://api.github.com/users/JonnyPickard", + "avatar_url": "https://avatars.githubusercontent.com/u/16156445?" + }, + "repo": { + "id": 97318059, + "name": "JonnyPickard/albums-react-native", + "url": "https://api.github.com/repos/JonnyPickard/albums-react-native" + }, + "payload": { + "push_id": 1861573814, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "a11c7aedf4f1800357864302fe08fc277e9e8652", + "before": "d33e7adbb46926d1d4030d0c855b245062f1d9b5", + "commits": [ + { + "sha": "a11c7aedf4f1800357864302fe08fc277e9e8652", + "author": { + "email": "jonathandpickard@gmail.com", + "name": "Jonny Pickard" + }, + "message": "Add basic server to send JSON", + "distinct": true, + "url": "https://api.github.com/repos/JonnyPickard/albums-react-native/commits/a11c7aedf4f1800357864302fe08fc277e9e8652" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:47Z" + }, + { + "id": "6263117487", + "type": "IssueCommentEvent", + "actor": { + "id": 4236651, + "login": "0x53A", + "display_login": "0x53A", + "gravatar_id": "", + "url": "https://api.github.com/users/0x53A", + "avatar_url": "https://avatars.githubusercontent.com/u/4236651?" + }, + "repo": { + "id": 29048891, + "name": "Microsoft/visualfsharp", + "url": "https://api.github.com/repos/Microsoft/visualfsharp" + }, + "payload": { + "action": "created", + "issue": { + "url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335", + "repository_url": "https://api.github.com/repos/Microsoft/visualfsharp", + "labels_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/labels{/name}", + "comments_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/comments", + "events_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/events", + "html_url": "https://github.com/Microsoft/visualfsharp/issues/3335", + "id": 243089775, + "number": 3335, + "title": "[15.3 pre] loading in VS / publish fails if FSharp.Compiler.Tools is imported", + "user": { + "login": "0x53A", + "id": 4236651, + "avatar_url": "https://avatars7.githubusercontent.com/u/4236651?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/0x53A", + "html_url": "https://github.com/0x53A", + "followers_url": "https://api.github.com/users/0x53A/followers", + "following_url": "https://api.github.com/users/0x53A/following{/other_user}", + "gists_url": "https://api.github.com/users/0x53A/gists{/gist_id}", + "starred_url": "https://api.github.com/users/0x53A/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/0x53A/subscriptions", + "organizations_url": "https://api.github.com/users/0x53A/orgs", + "repos_url": "https://api.github.com/users/0x53A/repos", + "events_url": "https://api.github.com/users/0x53A/events{/privacy}", + "received_events_url": "https://api.github.com/users/0x53A/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 308803045, + "url": "https://api.github.com/repos/Microsoft/visualfsharp/labels/Area-CoreCLR", + "name": "Area-CoreCLR", + "color": "5319e7", + "default": false + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/Microsoft/visualfsharp/milestones/9", + "html_url": "https://github.com/Microsoft/visualfsharp/milestone/9", + "labels_url": "https://api.github.com/repos/Microsoft/visualfsharp/milestones/9/labels", + "id": 2233574, + "number": 9, + "title": "VS 2017 Updates", + "description": "This milestone is for any bug, new feature, or improvement which makes it into a later VS 2017 update.", + "creator": { + "login": "cartermp", + "id": 6309070, + "avatar_url": "https://avatars4.githubusercontent.com/u/6309070?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cartermp", + "html_url": "https://github.com/cartermp", + "followers_url": "https://api.github.com/users/cartermp/followers", + "following_url": "https://api.github.com/users/cartermp/following{/other_user}", + "gists_url": "https://api.github.com/users/cartermp/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cartermp/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cartermp/subscriptions", + "organizations_url": "https://api.github.com/users/cartermp/orgs", + "repos_url": "https://api.github.com/users/cartermp/repos", + "events_url": "https://api.github.com/users/cartermp/events{/privacy}", + "received_events_url": "https://api.github.com/users/cartermp/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 55, + "closed_issues": 158, + "state": "open", + "created_at": "2017-01-06T17:42:02Z", + "updated_at": "2017-07-15T00:13:34Z", + "due_on": null, + "closed_at": null + }, + "comments": 29, + "created_at": "2017-07-14T19:28:04Z", + "updated_at": "2017-07-15T17:06:46Z", + "closed_at": "2017-07-15T00:13:33Z", + "body": "\r\nEdit2: everything works, thanks @KevinRansom \r\n\r\n_Edited_\r\n\r\nI have tried to test if / how a project using paket works in the new world of ``dotnet 2``, comparing C#, F#, and the previous F# sdk (FSharp.NET.Sdk). I have also tested if using F# without paket works.\r\n\r\nHere are four branches, one for each test: https://github.com/0x53A/dotnet-tests.\r\n\r\nResults:\r\n\r\n* paket works with C# and ``Microsoft.NET.Sdk``: https://github.com/0x53A/dotnet-tests/tree/csharp+paket\r\n* paket works with F# when using the 1.x sdk (``FSharp.NET.Sdk``): https://github.com/0x53A/dotnet-tests/tree/fsharp+paket+FSharp.NET.Sdk\r\n* paket ~does NOT~ does work with F# and ``Microsoft.NET.Sdk``: https://github.com/0x53A/dotnet-tests/tree/fsharp+paket\r\n* using F# with ``Microsoft.NET.Sdk`` and nuget does work: https://github.com/0x53A/dotnet-tests/tree/fsharp+nuget\r\n\r\nThe paket version I have tested this with is ``5.6.12``.\r\n\r\nIt is kind of funny that C# seems to work flawlessly with paket." + }, + "comment": { + "url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/comments/315547940", + "html_url": "https://github.com/Microsoft/visualfsharp/issues/3335#issuecomment-315547940", + "issue_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335", + "id": 315547940, + "user": { + "login": "0x53A", + "id": 4236651, + "avatar_url": "https://avatars7.githubusercontent.com/u/4236651?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/0x53A", + "html_url": "https://github.com/0x53A", + "followers_url": "https://api.github.com/users/0x53A/followers", + "following_url": "https://api.github.com/users/0x53A/following{/other_user}", + "gists_url": "https://api.github.com/users/0x53A/gists{/gist_id}", + "starred_url": "https://api.github.com/users/0x53A/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/0x53A/subscriptions", + "organizations_url": "https://api.github.com/users/0x53A/orgs", + "repos_url": "https://api.github.com/users/0x53A/repos", + "events_url": "https://api.github.com/users/0x53A/events{/privacy}", + "received_events_url": "https://api.github.com/users/0x53A/received_events", + "type": "User", + "site_admin": false + }, + "created_at": "2017-07-15T17:06:46Z", + "updated_at": "2017-07-15T17:06:46Z", + "body": "3) DisableImplicitFSharpCoreReference and paket\r\n\r\npaket.dependencies:\r\n\r\n```nuget FSharp.Core 4.0.0.1```\r\n\r\n```Xml\r\n\r\n \r\n net461\r\n true\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n```\r\n\r\n=>\r\n\r\n```\r\nC:\\source\\dotnet-tests>dotnet publish\r\nMicrosoft (R) Build Engine version 15.3.406.54721 for .NET Core\r\nCopyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nC:\\source\\dotnet-tests\\Library.fs(7,17): error FS0039: The value, namespace, type or module 'Result' is not defined. [C:\\source\\dotnet-tests\\paket-fsharp-test.fsproj]\r\nC:\\source\\dotnet-tests\\Library.fs(8,42): error FS0039: The pattern discriminator 'Ok' is not defined. [C:\\source\\dotnet-tests\\paket-fsharp-test.fsproj]\r\n```\r\n\r\nwhich is good.\r\n\r\n-----------------\r\n\r\nSo it looks like both properties work as expected. It seems that in __2)__ the compiler automagically referenced some FSharp.Core, because none was explicitly referenced." + } + }, + "public": true, + "created_at": "2017-07-15T17:06:47Z", + "org": { + "id": 6154722, + "login": "Microsoft", + "gravatar_id": "", + "url": "https://api.github.com/orgs/Microsoft", + "avatar_url": "https://avatars.githubusercontent.com/u/6154722?" + } + }, + { + "id": "6263117486", + "type": "PushEvent", + "actor": { + "id": 982267, + "login": "gxela", + "display_login": "gxela", + "gravatar_id": "", + "url": "https://api.github.com/users/gxela", + "avatar_url": "https://avatars.githubusercontent.com/u/982267?" + }, + "repo": { + "id": 97197951, + "name": "AudioBible/AudioBible.life", + "url": "https://api.github.com/repos/AudioBible/AudioBible.life" + }, + "payload": { + "push_id": 1861573811, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "31e079597959be78850e06c623383d522f8fe283", + "before": "11d32ac0eb7051ddc7da05dab183f10ed861fa61", + "commits": [ + { + "sha": "31e079597959be78850e06c623383d522f8fe283", + "author": { + "email": "alex@goretoy.com", + "name": "Alex Goretoy" + }, + "message": "update", + "distinct": true, + "url": "https://api.github.com/repos/AudioBible/AudioBible.life/commits/31e079597959be78850e06c623383d522f8fe283" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:47Z", + "org": { + "id": 29329308, + "login": "AudioBible", + "gravatar_id": "", + "url": "https://api.github.com/orgs/AudioBible", + "avatar_url": "https://avatars.githubusercontent.com/u/29329308?" + } + }, + { + "id": "6263117481", + "type": "CreateEvent", + "actor": { + "id": 998519, + "login": "martinstabe", + "display_login": "martinstabe", + "gravatar_id": "", + "url": "https://api.github.com/users/martinstabe", + "avatar_url": "https://avatars.githubusercontent.com/u/998519?" + }, + "repo": { + "id": 90621389, + "name": "ft-interactive/archive", + "url": "https://api.github.com/repos/ft-interactive/archive" + }, + "payload": { + "ref": "personal-data", + "ref_type": "branch", + "master_branch": "master", + "description": "Refactored versions of a few older FT interactive stories", + "pusher_type": "user" + }, + "public": true, + "created_at": "2017-07-15T17:06:47Z", + "org": { + "id": 2511089, + "login": "ft-interactive", + "gravatar_id": "", + "url": "https://api.github.com/orgs/ft-interactive", + "avatar_url": "https://avatars.githubusercontent.com/u/2511089?" + } + }, + { + "id": "6263117480", + "type": "PushEvent", + "actor": { + "id": 30200303, + "login": "musikdusche", + "display_login": "musikdusche", + "gravatar_id": "", + "url": "https://api.github.com/users/musikdusche", + "avatar_url": "https://avatars.githubusercontent.com/u/30200303?" + }, + "repo": { + "id": 97330240, + "name": "musikdusche/hello-world", + "url": "https://api.github.com/repos/musikdusche/hello-world" + }, + "payload": { + "push_id": 1861573809, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/readmeworks", + "head": "e09f4ef810382578be4ba49bcc351c94ac8b15f9", + "before": "10f052d3f22eaad13302b5e0e6d1a4af77a73f91", + "commits": [ + { + "sha": "e09f4ef810382578be4ba49bcc351c94ac8b15f9", + "author": { + "email": "f.toens@gmx.de", + "name": "musikdusche" + }, + "message": "Update README.md\n\ntrying out markdown syntaxes", + "distinct": true, + "url": "https://api.github.com/repos/musikdusche/hello-world/commits/e09f4ef810382578be4ba49bcc351c94ac8b15f9" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:47Z" + }, + { + "id": "6263117478", + "type": "PushEvent", + "actor": { + "id": 4712642, + "login": "neu-rah", + "display_login": "neu-rah", + "gravatar_id": "", + "url": "https://api.github.com/users/neu-rah", + "avatar_url": "https://avatars.githubusercontent.com/u/4712642?" + }, + "repo": { + "id": 23024191, + "name": "neu-rah/ArduinoMenu", + "url": "https://api.github.com/repos/neu-rah/ArduinoMenu" + }, + "payload": { + "push_id": 1861573808, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "1557e3155279ca19e35048f8a6758189cbb2231a", + "before": "fb1b8c70b324bf73231728a708fe496991c51607", + "commits": [ + { + "sha": "1557e3155279ca19e35048f8a6758189cbb2231a", + "author": { + "email": "ruihfazevedo@gmail.com", + "name": "Rui Azevedo" + }, + "message": "remove pin collision between encoder and serial on I2C example as noted by Paul Gaertner", + "distinct": true, + "url": "https://api.github.com/repos/neu-rah/ArduinoMenu/commits/1557e3155279ca19e35048f8a6758189cbb2231a" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:47Z" + }, + { + "id": "6263117476", + "type": "PushEvent", + "actor": { + "id": 22308572, + "login": "zfang399", + "display_login": "zfang399", + "gravatar_id": "", + "url": "https://api.github.com/users/zfang399", + "avatar_url": "https://avatars.githubusercontent.com/u/22308572?" + }, + "repo": { + "id": 93472978, + "name": "zfang399/LeetCode-Problems", + "url": "https://api.github.com/repos/zfang399/LeetCode-Problems" + }, + "payload": { + "push_id": 1861573807, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "dffd54fc9872b0a14ae7b3089c541db439c77dc6", + "before": "31643c5f628a91714dabf3c0472d6b3b6f2d75f9", + "commits": [ + { + "sha": "dffd54fc9872b0a14ae7b3089c541db439c77dc6", + "author": { + "email": "zfang@nd.edu", + "name": "Zhaoyuan Fang" + }, + "message": "Reverse Linked List II", + "distinct": true, + "url": "https://api.github.com/repos/zfang399/LeetCode-Problems/commits/dffd54fc9872b0a14ae7b3089c541db439c77dc6" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z" + }, + { + "id": "6263117475", + "type": "PushEvent", + "actor": { + "id": 4750766, + "login": "rohintangirala", + "display_login": "rohintangirala", + "gravatar_id": "", + "url": "https://api.github.com/users/rohintangirala", + "avatar_url": "https://avatars.githubusercontent.com/u/4750766?" + }, + "repo": { + "id": 97284340, + "name": "Twenty-App/Twenty-App.github.io", + "url": "https://api.github.com/repos/Twenty-App/Twenty-App.github.io" + }, + "payload": { + "push_id": 1861573806, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "90effa1defcc57fbb19d118a3cf773e200542333", + "before": "a3a94db8f23bec183df701cc6f27b761be8f6250", + "commits": [ + { + "sha": "90effa1defcc57fbb19d118a3cf773e200542333", + "author": { + "email": "rohinkt@gmail.com", + "name": "Rohin Tangirala" + }, + "message": "Set theme jekyll-theme-tactile", + "distinct": true, + "url": "https://api.github.com/repos/Twenty-App/Twenty-App.github.io/commits/90effa1defcc57fbb19d118a3cf773e200542333" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z", + "org": { + "id": 30188091, + "login": "Twenty-App", + "gravatar_id": "", + "url": "https://api.github.com/orgs/Twenty-App", + "avatar_url": "https://avatars.githubusercontent.com/u/30188091?" + } + }, + { + "id": "6263117473", + "type": "PushEvent", + "actor": { + "id": 8517910, + "login": "LombiqBot", + "display_login": "LombiqBot", + "gravatar_id": "", + "url": "https://api.github.com/users/LombiqBot", + "avatar_url": "https://avatars.githubusercontent.com/u/8517910?" + }, + "repo": { + "id": 46594739, + "name": "Lombiq/Associativy-Taxonomies-Adapter", + "url": "https://api.github.com/repos/Lombiq/Associativy-Taxonomies-Adapter" + }, + "payload": { + "push_id": 1861573805, + "size": 0, + "distinct_size": 0, + "ref": "refs/heads/orchard-upgrade-1.10", + "head": "e1d77dd00dfdc65d5d84b1712be94e609273c838", + "before": "e1d77dd00dfdc65d5d84b1712be94e609273c838", + "commits": [] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z", + "org": { + "id": 8158177, + "login": "Lombiq", + "gravatar_id": "", + "url": "https://api.github.com/orgs/Lombiq", + "avatar_url": "https://avatars.githubusercontent.com/u/8158177?" + } + }, + { + "id": "6263117472", + "type": "PushEvent", + "actor": { + "id": 25966, + "login": "reconbot", + "display_login": "reconbot", + "gravatar_id": "", + "url": "https://api.github.com/users/reconbot", + "avatar_url": "https://avatars.githubusercontent.com/u/25966?" + }, + "repo": { + "id": 893522, + "name": "EmergingTechnologyAdvisors/node-serialport", + "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport" + }, + "payload": { + "push_id": 1861573804, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", + "before": "2361fa599a16a10ad07ffe863fe00bb2bc75d29a", + "commits": [ + { + "sha": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", + "author": { + "email": "wizard@roborooter.com", + "name": "Francis Gulotta" + }, + "message": "[unix] Move setting up the baudrate to the end of the open()\n\n- Test 1000000 baud", + "distinct": true, + "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits/9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z", + "org": { + "id": 8947774, + "login": "EmergingTechnologyAdvisors", + "gravatar_id": "", + "url": "https://api.github.com/orgs/EmergingTechnologyAdvisors", + "avatar_url": "https://avatars.githubusercontent.com/u/8947774?" + } + }, + { + "id": "6263117471", + "type": "IssueCommentEvent", + "actor": { + "id": 737750, + "login": "samuelkarp", + "display_login": "samuelkarp", + "gravatar_id": "", + "url": "https://api.github.com/users/samuelkarp", + "avatar_url": "https://avatars.githubusercontent.com/u/737750?" + }, + "repo": { + "id": 59514412, + "name": "awslabs/amazon-ecr-credential-helper", + "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper" + }, + "payload": { + "action": "created", + "issue": { + "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49", + "repository_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper", + "labels_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/labels{/name}", + "comments_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/comments", + "events_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/events", + "html_url": "https://github.com/awslabs/amazon-ecr-credential-helper/issues/49", + "id": 241526602, + "number": 49, + "title": "no basic auth credentials yet AWS CLI has access", + "user": { + "login": "guyisra", + "id": 1073521, + "avatar_url": "https://avatars5.githubusercontent.com/u/1073521?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/guyisra", + "html_url": "https://github.com/guyisra", + "followers_url": "https://api.github.com/users/guyisra/followers", + "following_url": "https://api.github.com/users/guyisra/following{/other_user}", + "gists_url": "https://api.github.com/users/guyisra/gists{/gist_id}", + "starred_url": "https://api.github.com/users/guyisra/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/guyisra/subscriptions", + "organizations_url": "https://api.github.com/users/guyisra/orgs", + "repos_url": "https://api.github.com/users/guyisra/repos", + "events_url": "https://api.github.com/users/guyisra/events{/privacy}", + "received_events_url": "https://api.github.com/users/guyisra/received_events", + "type": "User", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2017-07-09T13:59:15Z", + "updated_at": "2017-07-15T17:06:46Z", + "closed_at": null, + "body": "I am using Docker v17 and for some reason when trying to push to ECR I get no basic auth credentials.\r\n\r\nThis doesn't happen if I manually login with `aws ecr get-login ...`\r\n\r\nthe policy is configured correctly, I can run other AWS commands.\r\nIt gives the same response with either a profile with the proper policy or with the access key and secret explicitly set.." + }, + "comment": { + "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/comments/315547939", + "html_url": "https://github.com/awslabs/amazon-ecr-credential-helper/issues/49#issuecomment-315547939", + "issue_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49", + "id": 315547939, + "user": { + "login": "samuelkarp", + "id": 737750, + "avatar_url": "https://avatars7.githubusercontent.com/u/737750?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/samuelkarp", + "html_url": "https://github.com/samuelkarp", + "followers_url": "https://api.github.com/users/samuelkarp/followers", + "following_url": "https://api.github.com/users/samuelkarp/following{/other_user}", + "gists_url": "https://api.github.com/users/samuelkarp/gists{/gist_id}", + "starred_url": "https://api.github.com/users/samuelkarp/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/samuelkarp/subscriptions", + "organizations_url": "https://api.github.com/users/samuelkarp/orgs", + "repos_url": "https://api.github.com/users/samuelkarp/repos", + "events_url": "https://api.github.com/users/samuelkarp/events{/privacy}", + "received_events_url": "https://api.github.com/users/samuelkarp/received_events", + "type": "User", + "site_admin": false + }, + "created_at": "2017-07-15T17:06:46Z", + "updated_at": "2017-07-15T17:06:46Z", + "body": "@mskutin Thanks for providing the log; that's very helpful. Can you let me know what region this was for so I can investigate further?" + } + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z", + "org": { + "id": 3299148, + "login": "awslabs", + "gravatar_id": "", + "url": "https://api.github.com/orgs/awslabs", + "avatar_url": "https://avatars.githubusercontent.com/u/3299148?" + } + }, + { + "id": "6263117468", + "type": "IssueCommentEvent", + "actor": { + "id": 1645308, + "login": "almereyda", + "display_login": "almereyda", + "gravatar_id": "", + "url": "https://api.github.com/users/almereyda", + "avatar_url": "https://avatars.githubusercontent.com/u/1645308?" + }, + "repo": { + "id": 22657662, + "name": "wsargent/docker-cheat-sheet", + "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet" + }, + "payload": { + "action": "created", + "issue": { + "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136", + "repository_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet", + "labels_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/labels{/name}", + "comments_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/comments", + "events_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/events", + "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136", + "id": 243181907, + "number": 136, + "title": "Volumes can be files", + "user": { + "login": "phoen1x", + "id": 2550793, + "avatar_url": "https://avatars7.githubusercontent.com/u/2550793?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phoen1x", + "html_url": "https://github.com/phoen1x", + "followers_url": "https://api.github.com/users/phoen1x/followers", + "following_url": "https://api.github.com/users/phoen1x/following{/other_user}", + "gists_url": "https://api.github.com/users/phoen1x/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phoen1x/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phoen1x/subscriptions", + "organizations_url": "https://api.github.com/users/phoen1x/orgs", + "repos_url": "https://api.github.com/users/phoen1x/repos", + "events_url": "https://api.github.com/users/phoen1x/events{/privacy}", + "received_events_url": "https://api.github.com/users/phoen1x/received_events", + "type": "User", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2017-07-15T15:28:10Z", + "updated_at": "2017-07-15T17:06:46Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/pulls/136", + "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136", + "diff_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136.diff", + "patch_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136.patch" + }, + "body": "Just wanted to add that is possible to mount files as volumes. \r\n\r\nDon't know if that is worth mentioning. But it can be useful if you want to toy around with a image from [Docker Hub](https://hub.docker.com) without writing your own Dockerfile." + }, + "comment": { + "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/comments/315547938", + "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136#issuecomment-315547938", + "issue_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136", + "id": 315547938, + "user": { + "login": "almereyda", + "id": 1645308, + "avatar_url": "https://avatars4.githubusercontent.com/u/1645308?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/almereyda", + "html_url": "https://github.com/almereyda", + "followers_url": "https://api.github.com/users/almereyda/followers", + "following_url": "https://api.github.com/users/almereyda/following{/other_user}", + "gists_url": "https://api.github.com/users/almereyda/gists{/gist_id}", + "starred_url": "https://api.github.com/users/almereyda/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/almereyda/subscriptions", + "organizations_url": "https://api.github.com/users/almereyda/orgs", + "repos_url": "https://api.github.com/users/almereyda/repos", + "events_url": "https://api.github.com/users/almereyda/events{/privacy}", + "received_events_url": "https://api.github.com/users/almereyda/received_events", + "type": "User", + "site_admin": false + }, + "created_at": "2017-07-15T17:06:46Z", + "updated_at": "2017-07-15T17:06:46Z", + "body": "Indeed, I do that all the time when modifying assets that were turned into immutable images already." + } + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z" + }, + { + "id": "6263117464", + "type": "PushEvent", + "actor": { + "id": 19437824, + "login": "keriwheatley", + "display_login": "keriwheatley", + "gravatar_id": "", + "url": "https://api.github.com/users/keriwheatley", + "avatar_url": "https://avatars.githubusercontent.com/u/19437824?" + }, + "repo": { + "id": 91394098, + "name": "keriwheatley/coursework", + "url": "https://api.github.com/repos/keriwheatley/coursework" + }, + "payload": { + "push_id": 1861573800, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "490f194beb4be216ed955d187aee265443dd532c", + "before": "14034277c8e715f9988686d85701b501845705e7", + "commits": [ + { + "sha": "490f194beb4be216ed955d187aee265443dd532c", + "author": { + "email": "keri.wheatley@civitaslearning.com", + "name": "Keri Wheatley" + }, + "message": "updates to twitter_popularity", + "distinct": true, + "url": "https://api.github.com/repos/keriwheatley/coursework/commits/490f194beb4be216ed955d187aee265443dd532c" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z" + }, + { + "id": "6263117462", + "type": "CreateEvent", + "actor": { + "id": 12358972, + "login": "CodePipeline-Test", + "display_login": "CodePipeline-Test", + "gravatar_id": "", + "url": "https://api.github.com/users/CodePipeline-Test", + "avatar_url": "https://avatars.githubusercontent.com/u/12358972?" + }, + "repo": { + "id": 63971386, + "name": "CodePipeline-Test/feature-tests", + "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests" + }, + "payload": { + "ref": "job-worker-features-V5zkpTEUgBlA4TOEJrWq", + "ref_type": "branch", + "master_branch": "master", + "description": "for feature tests", + "pusher_type": "user" + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z" + }, + { + "id": "6263117460", + "type": "WatchEvent", + "actor": { + "id": 9091565, + "login": "chiprunner1995", + "display_login": "chiprunner1995", + "gravatar_id": "", + "url": "https://api.github.com/users/chiprunner1995", + "avatar_url": "https://avatars.githubusercontent.com/u/9091565?" + }, + "repo": { + "id": 308512, + "name": "psake/psake", + "url": "https://api.github.com/repos/psake/psake" + }, + "payload": { + "action": "started" + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z", + "org": { + "id": 1007585, + "login": "psake", + "gravatar_id": "", + "url": "https://api.github.com/orgs/psake", + "avatar_url": "https://avatars.githubusercontent.com/u/1007585?" + } + }, + { + "id": "6263117459", + "type": "PushEvent", + "actor": { + "id": 30199151, + "login": "Geoffers888", + "display_login": "Geoffers888", + "gravatar_id": "", + "url": "https://api.github.com/users/Geoffers888", + "avatar_url": "https://avatars.githubusercontent.com/u/30199151?" + }, + "repo": { + "id": 97330344, + "name": "Geoffers888/Console-Boxes", + "url": "https://api.github.com/repos/Geoffers888/Console-Boxes" + }, + "payload": { + "push_id": 1861573799, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "46f85052c269c7ede354a698e05e5ef5359bc71b", + "before": "ecb8a45cc1e49ee60ffa880eba8219b294ec44f5", + "commits": [ + { + "sha": "46f85052c269c7ede354a698e05e5ef5359bc71b", + "author": { + "email": "geoff.cowin@gmail.com", + "name": "Geoffers888" + }, + "message": "Create README.md", + "distinct": true, + "url": "https://api.github.com/repos/Geoffers888/Console-Boxes/commits/46f85052c269c7ede354a698e05e5ef5359bc71b" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z" + }, + { + "id": "6263117454", + "type": "PushEvent", + "actor": { + "id": 8517910, + "login": "LombiqBot", + "display_login": "LombiqBot", + "gravatar_id": "", + "url": "https://api.github.com/users/LombiqBot", + "avatar_url": "https://avatars.githubusercontent.com/u/8517910?" + }, + "repo": { + "id": 46624662, + "name": "Lombiq/Orchard-External-Pages", + "url": "https://api.github.com/repos/Lombiq/Orchard-External-Pages" + }, + "payload": { + "push_id": 1861573796, + "size": 0, + "distinct_size": 0, + "ref": "refs/heads/issue/OSOE-7", + "head": "a630eb8494f07e6f11a5bc396a0829d5aa690c5f", + "before": "a630eb8494f07e6f11a5bc396a0829d5aa690c5f", + "commits": [] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z", + "org": { + "id": 8158177, + "login": "Lombiq", + "gravatar_id": "", + "url": "https://api.github.com/orgs/Lombiq", + "avatar_url": "https://avatars.githubusercontent.com/u/8158177?" + } + }, + { + "id": "6263117451", + "type": "PullRequestEvent", + "actor": { + "id": 25966, + "login": "reconbot", + "display_login": "reconbot", + "gravatar_id": "", + "url": "https://api.github.com/users/reconbot", + "avatar_url": "https://avatars.githubusercontent.com/u/25966?" + }, + "repo": { + "id": 893522, + "name": "EmergingTechnologyAdvisors/node-serialport", + "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport" + }, + "payload": { + "action": "closed", + "number": 1235, + "pull_request": { + "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235", + "id": 130722112, + "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235", + "diff_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235.diff", + "patch_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235.patch", + "issue_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235", + "number": 1235, + "state": "closed", + "locked": false, + "title": "[unix] Move setting up the baudrate to the end of the open() to better support custom baudrates", + "user": { + "login": "reconbot", + "id": 25966, + "avatar_url": "https://avatars6.githubusercontent.com/u/25966?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/reconbot", + "html_url": "https://github.com/reconbot", + "followers_url": "https://api.github.com/users/reconbot/followers", + "following_url": "https://api.github.com/users/reconbot/following{/other_user}", + "gists_url": "https://api.github.com/users/reconbot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/reconbot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/reconbot/subscriptions", + "organizations_url": "https://api.github.com/users/reconbot/orgs", + "repos_url": "https://api.github.com/users/reconbot/repos", + "events_url": "https://api.github.com/users/reconbot/events{/privacy}", + "received_events_url": "https://api.github.com/users/reconbot/received_events", + "type": "User", + "site_admin": false + }, + "body": "- Test 1000000 baud\r\n\r\ncloses #1077", + "created_at": "2017-07-15T16:53:28Z", + "updated_at": "2017-07-15T17:06:45Z", + "closed_at": "2017-07-15T17:06:45Z", + "merged_at": "2017-07-15T17:06:45Z", + "merge_commit_sha": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "milestone": null, + "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/commits", + "review_comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/comments", + "review_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235/comments", + "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/e57b3d685f6497ebe8669ce8b05894bacd895177", + "head": { + "label": "EmergingTechnologyAdvisors:1000000-baud", + "ref": "1000000-baud", + "sha": "e57b3d685f6497ebe8669ce8b05894bacd895177", + "user": { + "login": "EmergingTechnologyAdvisors", + "id": 8947774, + "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/EmergingTechnologyAdvisors", + "html_url": "https://github.com/EmergingTechnologyAdvisors", + "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", + "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", + "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", + "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", + "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", + "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", + "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", + "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", + "type": "Organization", + "site_admin": false + }, + "repo": { + "id": 893522, + "name": "node-serialport", + "full_name": "EmergingTechnologyAdvisors/node-serialport", + "owner": { + "login": "EmergingTechnologyAdvisors", + "id": 8947774, + "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/EmergingTechnologyAdvisors", + "html_url": "https://github.com/EmergingTechnologyAdvisors", + "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", + "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", + "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", + "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", + "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", + "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", + "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", + "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", + "description": "Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!", + "fork": false, + "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport", + "forks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/forks", + "keys_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/teams", + "hooks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/hooks", + "issue_events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/events{/number}", + "events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/events", + "assignees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/assignees{/user}", + "branches_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/branches{/branch}", + "tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/tags", + "blobs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/{sha}", + "languages_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/languages", + "stargazers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/stargazers", + "contributors_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contributors", + "subscribers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscribers", + "subscription_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscription", + "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contents/{+path}", + "compare_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/merges", + "archive_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/downloads", + "issues_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues{/number}", + "pulls_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls{/number}", + "milestones_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/milestones{/number}", + "notifications_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/labels{/name}", + "releases_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/releases{/id}", + "deployments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/deployments", + "created_at": "2010-09-07T12:24:28Z", + "updated_at": "2017-07-14T16:30:58Z", + "pushed_at": "2017-07-15T17:06:45Z", + "git_url": "git://github.com/EmergingTechnologyAdvisors/node-serialport.git", + "ssh_url": "git@github.com:EmergingTechnologyAdvisors/node-serialport.git", + "clone_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport.git", + "svn_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", + "homepage": "", + "size": 1914, + "stargazers_count": 2829, + "watchers_count": 2829, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "forks_count": 601, + "mirror_url": null, + "open_issues_count": 30, + "forks": 601, + "open_issues": 30, + "watchers": 2829, + "default_branch": "master" + } + }, + "base": { + "label": "EmergingTechnologyAdvisors:master", + "ref": "master", + "sha": "ee7315f59c7698811f4f76405383f18680843926", + "user": { + "login": "EmergingTechnologyAdvisors", + "id": 8947774, + "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/EmergingTechnologyAdvisors", + "html_url": "https://github.com/EmergingTechnologyAdvisors", + "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", + "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", + "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", + "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", + "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", + "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", + "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", + "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", + "type": "Organization", + "site_admin": false + }, + "repo": { + "id": 893522, + "name": "node-serialport", + "full_name": "EmergingTechnologyAdvisors/node-serialport", + "owner": { + "login": "EmergingTechnologyAdvisors", + "id": 8947774, + "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/EmergingTechnologyAdvisors", + "html_url": "https://github.com/EmergingTechnologyAdvisors", + "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", + "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", + "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", + "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", + "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", + "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", + "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", + "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", + "description": "Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!", + "fork": false, + "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport", + "forks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/forks", + "keys_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/teams", + "hooks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/hooks", + "issue_events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/events{/number}", + "events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/events", + "assignees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/assignees{/user}", + "branches_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/branches{/branch}", + "tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/tags", + "blobs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/{sha}", + "languages_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/languages", + "stargazers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/stargazers", + "contributors_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contributors", + "subscribers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscribers", + "subscription_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscription", + "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contents/{+path}", + "compare_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/merges", + "archive_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/downloads", + "issues_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues{/number}", + "pulls_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls{/number}", + "milestones_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/milestones{/number}", + "notifications_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/labels{/name}", + "releases_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/releases{/id}", + "deployments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/deployments", + "created_at": "2010-09-07T12:24:28Z", + "updated_at": "2017-07-14T16:30:58Z", + "pushed_at": "2017-07-15T17:06:45Z", + "git_url": "git://github.com/EmergingTechnologyAdvisors/node-serialport.git", + "ssh_url": "git@github.com:EmergingTechnologyAdvisors/node-serialport.git", + "clone_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport.git", + "svn_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", + "homepage": "", + "size": 1914, + "stargazers_count": 2829, + "watchers_count": 2829, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "forks_count": 601, + "mirror_url": null, + "open_issues_count": 30, + "forks": 601, + "open_issues": 30, + "watchers": 2829, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235" + }, + "html": { + "href": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235" + }, + "issue": { + "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235" + }, + "comments": { + "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/e57b3d685f6497ebe8669ce8b05894bacd895177" + } + }, + "merged": true, + "mergeable": null, + "rebaseable": null, + "mergeable_state": "unknown", + "merged_by": { + "login": "reconbot", + "id": 25966, + "avatar_url": "https://avatars6.githubusercontent.com/u/25966?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/reconbot", + "html_url": "https://github.com/reconbot", + "followers_url": "https://api.github.com/users/reconbot/followers", + "following_url": "https://api.github.com/users/reconbot/following{/other_user}", + "gists_url": "https://api.github.com/users/reconbot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/reconbot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/reconbot/subscriptions", + "organizations_url": "https://api.github.com/users/reconbot/orgs", + "repos_url": "https://api.github.com/users/reconbot/repos", + "events_url": "https://api.github.com/users/reconbot/events{/privacy}", + "received_events_url": "https://api.github.com/users/reconbot/received_events", + "type": "User", + "site_admin": false + }, + "comments": 0, + "review_comments": 0, + "maintainer_can_modify": false, + "commits": 1, + "additions": 24, + "deletions": 14, + "changed_files": 2 + } + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z", + "org": { + "id": 8947774, + "login": "EmergingTechnologyAdvisors", + "gravatar_id": "", + "url": "https://api.github.com/orgs/EmergingTechnologyAdvisors", + "avatar_url": "https://avatars.githubusercontent.com/u/8947774?" + } + }, + { + "id": "6263117447", + "type": "PushEvent", + "actor": { + "id": 11887843, + "login": "trimox", + "display_login": "trimox", + "gravatar_id": "", + "url": "https://api.github.com/users/trimox", + "avatar_url": "https://avatars.githubusercontent.com/u/11887843?" + }, + "repo": { + "id": 88184430, + "name": "trimox/angular-mdc-web", + "url": "https://api.github.com/repos/trimox/angular-mdc-web" + }, + "payload": { + "push_id": 1861573792, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "59de0a8bfb229e7e72a1960132fdf24f0a770a08", + "before": "27327b3a3cb4e58ddb1b1188cb0f04092d850106", + "commits": [ + { + "sha": "59de0a8bfb229e7e72a1960132fdf24f0a770a08", + "author": { + "email": "trimoxal@gmail.com", + "name": "Dominic Carretto" + }, + "message": "fix(snackbar): Fix actionHandler still required if actionText is empty", + "distinct": true, + "url": "https://api.github.com/repos/trimox/angular-mdc-web/commits/59de0a8bfb229e7e72a1960132fdf24f0a770a08" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:46Z" + }, + { + "id": "6263117445", + "type": "WatchEvent", + "actor": { + "id": 1006434, + "login": "enorrmann", + "display_login": "enorrmann", + "gravatar_id": "", + "url": "https://api.github.com/users/enorrmann", + "avatar_url": "https://avatars.githubusercontent.com/u/1006434?" + }, + "repo": { + "id": 14699489, + "name": "walmik/scribbletune", + "url": "https://api.github.com/repos/walmik/scribbletune" + }, + "payload": { + "action": "started" + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117444", + "type": "PushEvent", + "actor": { + "id": 24412103, + "login": "james341", + "display_login": "james341", + "gravatar_id": "", + "url": "https://api.github.com/users/james341", + "avatar_url": "https://avatars.githubusercontent.com/u/24412103?" + }, + "repo": { + "id": 96979484, + "name": "james341/loading-yan-rp", + "url": "https://api.github.com/repos/james341/loading-yan-rp" + }, + "payload": { + "push_id": 1861573791, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "16bb35eb4a43d916a40155996c9d7dfadb007573", + "before": "ad4b96a5b924783e42d1d0cbf0fd1b5cba3cbd2f", + "commits": [ + { + "sha": "16bb35eb4a43d916a40155996c9d7dfadb007573", + "author": { + "email": "taine049@gmail.com", + "name": "james341" + }, + "message": "Add files via upload", + "distinct": true, + "url": "https://api.github.com/repos/james341/loading-yan-rp/commits/16bb35eb4a43d916a40155996c9d7dfadb007573" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117441", + "type": "PushEvent", + "actor": { + "id": 4676211, + "login": "kanke", + "display_login": "kanke", + "gravatar_id": "", + "url": "https://api.github.com/users/kanke", + "avatar_url": "https://avatars.githubusercontent.com/u/4676211?" + }, + "repo": { + "id": 97262451, + "name": "kanke/RedisServerClone", + "url": "https://api.github.com/repos/kanke/RedisServerClone" + }, + "payload": { + "push_id": 1861573790, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "e6312819f0acdc40008b06ae7a2c6c211c2f1db0", + "before": "f9a4fe7e866181c74fbc9352310fbc6c539d2aff", + "commits": [ + { + "sha": "e6312819f0acdc40008b06ae7a2c6c211c2f1db0", + "author": { + "email": "sugarkanke@yahoo.com", + "name": "Kanke" + }, + "message": "Adding gitignore and readme.md content. Code cleanup.", + "distinct": true, + "url": "https://api.github.com/repos/kanke/RedisServerClone/commits/e6312819f0acdc40008b06ae7a2c6c211c2f1db0" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117440", + "type": "PushEvent", + "actor": { + "id": 16622965, + "login": "jainhitesh9998", + "display_login": "jainhitesh9998", + "gravatar_id": "", + "url": "https://api.github.com/users/jainhitesh9998", + "avatar_url": "https://avatars.githubusercontent.com/u/16622965?" + }, + "repo": { + "id": 94244445, + "name": "jainhitesh9998/WebDevelopment", + "url": "https://api.github.com/repos/jainhitesh9998/WebDevelopment" + }, + "payload": { + "push_id": 1861573789, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "9e3c3f5f437fbc1f21a30f19f764787b86a393be", + "before": "d69d496b80a5806406f2313d67e63f3adf61b97e", + "commits": [ + { + "sha": "9e3c3f5f437fbc1f21a30f19f764787b86a393be", + "author": { + "email": "jainhitesh9998@gmail.com", + "name": "Hitesh C" + }, + "message": "added sounds for the clone", + "distinct": true, + "url": "https://api.github.com/repos/jainhitesh9998/WebDevelopment/commits/9e3c3f5f437fbc1f21a30f19f764787b86a393be" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117437", + "type": "PushEvent", + "actor": { + "id": 1491646, + "login": "MikroAcse", + "display_login": "MikroAcse", + "gravatar_id": "", + "url": "https://api.github.com/users/MikroAcse", + "avatar_url": "https://avatars.githubusercontent.com/u/1491646?" + }, + "repo": { + "id": 96892535, + "name": "MikroAcse/VariousTelegramBots", + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots" + }, + "payload": { + "push_id": 1861573788, + "size": 11, + "distinct_size": 11, + "ref": "refs/heads/dev", + "head": "7ef25bf6aad45c9da53a2d5918e553c68cd69dd4", + "before": "931cef7db8ec69cc951fe8a5ecc2b909397e29a4", + "commits": [ + { + "sha": "88b9e4e53f62ff7c9597f66d9e45a0a9be5fe1ca", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "upgrade Node.js version", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/88b9e4e53f62ff7c9597f66d9e45a0a9be5fe1ca" + }, + { + "sha": "d5b91bac58a8c3b88ddd9634578cb3beebb31015", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Update Node js version", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/d5b91bac58a8c3b88ddd9634578cb3beebb31015" + }, + { + "sha": "37cd86961e36e64c8ccd7873bbccc200b920d308", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Fix", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/37cd86961e36e64c8ccd7873bbccc200b920d308" + }, + { + "sha": "471451fd46b9bed62eef062553f480e788c24a3c", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Merge branch 'master' into dev\n\n# Conflicts:\n#\tapp.js", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/471451fd46b9bed62eef062553f480e788c24a3c" + }, + { + "sha": "8f5be591fae47f1ff051f992176faeed8fe3c2d7", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Removed unnecessary dependency and updated README.md", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/8f5be591fae47f1ff051f992176faeed8fe3c2d7" + }, + { + "sha": "d239750fbb26f13daf50a14e1c4a23375df9c5d9", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Update README", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/d239750fbb26f13daf50a14e1c4a23375df9c5d9" + }, + { + "sha": "94adaefc2b4107db89cdbc045a6a106724f12a2d", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Fix in readme", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/94adaefc2b4107db89cdbc045a6a106724f12a2d" + }, + { + "sha": "da8009c4da182c036efbc7a8e9d9353d1282d5ed", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Added version to readme", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/da8009c4da182c036efbc7a8e9d9353d1282d5ed" + }, + { + "sha": "1590092c64e774633040419b69d60d98197ddbde", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Removed requirement of deleted dependency", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/1590092c64e774633040419b69d60d98197ddbde" + }, + { + "sha": "1986905b1d32654a20916fafc60c7484ff85841a", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Yes or no in ChooseBot, slight changes in QuoteBot regexp", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/1986905b1d32654a20916fafc60c7484ff85841a" + }, + { + "sha": "7ef25bf6aad45c9da53a2d5918e553c68cd69dd4", + "author": { + "email": "mike.kroace@gmail.com", + "name": "Vitaly Rudenko" + }, + "message": "Merge commit '1986905b1d32654a20916fafc60c7484ff85841a' into dev", + "distinct": true, + "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/7ef25bf6aad45c9da53a2d5918e553c68cd69dd4" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117435", + "type": "PushEvent", + "actor": { + "id": 12949454, + "login": "jarifibrahim", + "display_login": "jarifibrahim", + "gravatar_id": "", + "url": "https://api.github.com/users/jarifibrahim", + "avatar_url": "https://avatars.githubusercontent.com/u/12949454?" + }, + "repo": { + "id": 93039796, + "name": "jarifibrahim/OpenSourceHelpCommunity.github.io", + "url": "https://api.github.com/repos/jarifibrahim/OpenSourceHelpCommunity.github.io" + }, + "payload": { + "push_id": 1861573787, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/issue-4", + "head": "4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4", + "before": "57c0a65ee93de1955ad5691585a51c358188f311", + "commits": [ + { + "sha": "4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4", + "author": { + "email": "jarifibrahim@gmail.com", + "name": "Ibrahim Jarif" + }, + "message": "Add travs.yml", + "distinct": true, + "url": "https://api.github.com/repos/jarifibrahim/OpenSourceHelpCommunity.github.io/commits/4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117430", + "type": "IssueCommentEvent", + "actor": { + "id": 849609, + "login": "wrrn", + "display_login": "wrrn", + "gravatar_id": "", + "url": "https://api.github.com/users/wrrn", + "avatar_url": "https://avatars.githubusercontent.com/u/849609?" + }, + "repo": { + "id": 23096959, + "name": "golang/go", + "url": "https://api.github.com/repos/golang/go" + }, + "payload": { + "action": "created", + "issue": { + "url": "https://api.github.com/repos/golang/go/issues/21017", + "repository_url": "https://api.github.com/repos/golang/go", + "labels_url": "https://api.github.com/repos/golang/go/issues/21017/labels{/name}", + "comments_url": "https://api.github.com/repos/golang/go/issues/21017/comments", + "events_url": "https://api.github.com/repos/golang/go/issues/21017/events", + "html_url": "https://github.com/golang/go/issues/21017", + "id": 243177572, + "number": 21017, + "title": "Gophercon: Contributor Workshop Registration", + "user": { + "login": "jessfraz", + "id": 1445228, + "avatar_url": "https://avatars6.githubusercontent.com/u/1445228?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jessfraz", + "html_url": "https://github.com/jessfraz", + "followers_url": "https://api.github.com/users/jessfraz/followers", + "following_url": "https://api.github.com/users/jessfraz/following{/other_user}", + "gists_url": "https://api.github.com/users/jessfraz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jessfraz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jessfraz/subscriptions", + "organizations_url": "https://api.github.com/users/jessfraz/orgs", + "repos_url": "https://api.github.com/users/jessfraz/repos", + "events_url": "https://api.github.com/users/jessfraz/events{/privacy}", + "received_events_url": "https://api.github.com/users/jessfraz/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 150880243, + "url": "https://api.github.com/repos/golang/go/labels/HelpWanted", + "name": "HelpWanted", + "color": "fbca04", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/golang/go/milestones/22", + "html_url": "https://github.com/golang/go/milestone/22", + "labels_url": "https://api.github.com/repos/golang/go/milestones/22/labels", + "id": 1067491, + "number": 22, + "title": "Unreleased", + "description": "Issues that do not affect released Go code and binaries.\r\n", + "creator": { + "login": "rsc", + "id": 104030, + "avatar_url": "https://avatars5.githubusercontent.com/u/104030?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rsc", + "html_url": "https://github.com/rsc", + "followers_url": "https://api.github.com/users/rsc/followers", + "following_url": "https://api.github.com/users/rsc/following{/other_user}", + "gists_url": "https://api.github.com/users/rsc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rsc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rsc/subscriptions", + "organizations_url": "https://api.github.com/users/rsc/orgs", + "repos_url": "https://api.github.com/users/rsc/repos", + "events_url": "https://api.github.com/users/rsc/events{/privacy}", + "received_events_url": "https://api.github.com/users/rsc/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 707, + "closed_issues": 918, + "state": "open", + "created_at": "2015-04-14T18:48:22Z", + "updated_at": "2017-07-15T17:06:04Z", + "due_on": "2099-12-31T08:00:00Z", + "closed_at": null + }, + "comments": 14, + "created_at": "2017-07-15T14:13:29Z", + "updated_at": "2017-07-15T17:06:43Z", + "closed_at": null, + "body": "Please do not comment here until the Contributor Workshop begins.\r\n\r\nDuring the workshop leave a comment with your Gerritt profile ID here." + }, + "comment": { + "url": "https://api.github.com/repos/golang/go/issues/comments/315547934", + "html_url": "https://github.com/golang/go/issues/21017#issuecomment-315547934", + "issue_url": "https://api.github.com/repos/golang/go/issues/21017", + "id": 315547934, + "user": { + "login": "wrrn", + "id": 849609, + "avatar_url": "https://avatars7.githubusercontent.com/u/849609?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wrrn", + "html_url": "https://github.com/wrrn", + "followers_url": "https://api.github.com/users/wrrn/followers", + "following_url": "https://api.github.com/users/wrrn/following{/other_user}", + "gists_url": "https://api.github.com/users/wrrn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wrrn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wrrn/subscriptions", + "organizations_url": "https://api.github.com/users/wrrn/orgs", + "repos_url": "https://api.github.com/users/wrrn/repos", + "events_url": "https://api.github.com/users/wrrn/events{/privacy}", + "received_events_url": "https://api.github.com/users/wrrn/received_events", + "type": "User", + "site_admin": false + }, + "created_at": "2017-07-15T17:06:43Z", + "updated_at": "2017-07-15T17:06:43Z", + "body": "22590" + } + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z", + "org": { + "id": 4314092, + "login": "golang", + "gravatar_id": "", + "url": "https://api.github.com/orgs/golang", + "avatar_url": "https://avatars.githubusercontent.com/u/4314092?" + } + }, + { + "id": "6263117428", + "type": "PushEvent", + "actor": { + "id": 6938676, + "login": "Ordinastie", + "display_login": "Ordinastie", + "gravatar_id": "", + "url": "https://api.github.com/users/Ordinastie", + "avatar_url": "https://avatars.githubusercontent.com/u/6938676?" + }, + "repo": { + "id": 17756561, + "name": "Ordinastie/MalisisDoors", + "url": "https://api.github.com/repos/Ordinastie/MalisisDoors" + }, + "payload": { + "push_id": 1861573783, + "size": 2, + "distinct_size": 2, + "ref": "refs/heads/1.12", + "head": "07334b1700ec9cd173c7560f293b7dd10dc24fd9", + "before": "ee8e1058833056afdcac559c22518b3706b3657f", + "commits": [ + { + "sha": "52080012d79ae0320392379b5d054f3e17ec1b98", + "author": { + "email": "ordinastie@hotmail.com", + "name": "Ordinastie" + }, + "message": "Fixed getRegistryType()", + "distinct": true, + "url": "https://api.github.com/repos/Ordinastie/MalisisDoors/commits/52080012d79ae0320392379b5d054f3e17ec1b98" + }, + { + "sha": "07334b1700ec9cd173c7560f293b7dd10dc24fd9", + "author": { + "email": "ordinastie@hotmail.com", + "name": "Ordinastie" + }, + "message": "Updated forgegradle and curseforge version", + "distinct": true, + "url": "https://api.github.com/repos/Ordinastie/MalisisDoors/commits/07334b1700ec9cd173c7560f293b7dd10dc24fd9" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117427", + "type": "DeleteEvent", + "actor": { + "id": 227909, + "login": "amcdnl", + "display_login": "amcdnl", + "gravatar_id": "", + "url": "https://api.github.com/users/amcdnl", + "avatar_url": "https://avatars.githubusercontent.com/u/227909?" + }, + "repo": { + "id": 94944874, + "name": "amcdnl/material2", + "url": "https://api.github.com/repos/amcdnl/material2" + }, + "payload": { + "ref": "autocomplete-demos", + "ref_type": "branch", + "pusher_type": "user" + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + }, + { + "id": "6263117426", + "type": "PushEvent", + "actor": { + "id": 16347325, + "login": "zxui", + "display_login": "zxui", + "gravatar_id": "", + "url": "https://api.github.com/users/zxui", + "avatar_url": "https://avatars.githubusercontent.com/u/16347325?" + }, + "repo": { + "id": 88623154, + "name": "zxui/auto-admin", + "url": "https://api.github.com/repos/zxui/auto-admin" + }, + "payload": { + "push_id": 1861573782, + "size": 1, + "distinct_size": 1, + "ref": "refs/heads/master", + "head": "70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2", + "before": "f673e6b191197827bddb31bcffea61611e8a50b0", + "commits": [ + { + "sha": "70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2", + "author": { + "email": "zxshen@qq.com", + "name": "zxui" + }, + "message": "update", + "distinct": true, + "url": "https://api.github.com/repos/zxui/auto-admin/commits/70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2" + } + ] + }, + "public": true, + "created_at": "2017-07-15T17:06:45Z" + } +] diff --git a/test/fixtures/typescript-effect-schema/main.ts b/test/fixtures/typescript-effect-schema/main.ts index c2bf066b2..944b021f1 100644 --- a/test/fixtures/typescript-effect-schema/main.ts +++ b/test/fixtures/typescript-effect-schema/main.ts @@ -10,7 +10,7 @@ const value = JSON.parse(json.toString()); let schema = TopLevel.TopLevel ?? TopLevel.TopLevelElement; if (!schema) { // Sometimes key is prefixed with funPrefixes (e.g. 2df80.json) - Object.keys(TopLevel).some(key => { + Object.keys(TopLevel).some((key) => { if (key.endsWith("TopLevel") || key.endsWith("TopLevelElement")) { schema = TopLevel[key]; return true; @@ -24,7 +24,7 @@ if (!schema) { let backToJson: string; if (Array.isArray(value)) { - const parsedValue = value.map(v => { + const parsedValue = value.map((v) => { return Schema.decodeUnknownSync(schema)(v); }); backToJson = JSON.stringify(parsedValue, null, 2); diff --git a/test/fixtures/typescript-effect-schema/tsconfig.json b/test/fixtures/typescript-effect-schema/tsconfig.json index 3c2a002bd..a5befbe03 100644 --- a/test/fixtures/typescript-effect-schema/tsconfig.json +++ b/test/fixtures/typescript-effect-schema/tsconfig.json @@ -2,7 +2,5 @@ "compilerOptions": { "target": "es6" }, - "files": [ - "*.ts" - ] -} \ No newline at end of file + "files": ["*.ts"] +} diff --git a/test/fixtures/typescript-zod/main.ts b/test/fixtures/typescript-zod/main.ts index f7e16738c..8c207d961 100644 --- a/test/fixtures/typescript-zod/main.ts +++ b/test/fixtures/typescript-zod/main.ts @@ -2,7 +2,6 @@ import * as TopLevel from "./TopLevel"; import fs from "fs"; import process from "process"; - const sample = process.argv[2]; const json = fs.readFileSync(sample); @@ -10,8 +9,11 @@ const value = JSON.parse(json.toString()); let schema = TopLevel.TopLevelSchema ?? TopLevel.TopLevelElementSchema; if (!schema) { // Sometimes key is prefixed with funPrefixes (e.g. 2df80.json) - Object.keys(TopLevel).some(key => { - if (key.endsWith("TopLevelSchema") || key.endsWith("TopLevelElementSchema")) { + Object.keys(TopLevel).some((key) => { + if ( + key.endsWith("TopLevelSchema") || + key.endsWith("TopLevelElementSchema") + ) { schema = TopLevel[key]; return true; } @@ -24,7 +26,7 @@ if (!schema) { let backToJson: string; if (Array.isArray(value)) { - const parsedValue = value.map(v => schema.parse(v)); + const parsedValue = value.map((v) => schema.parse(v)); backToJson = JSON.stringify(parsedValue, null, 2); } else { const parsedValue = schema.parse(value); diff --git a/test/fixtures/typescript-zod/tsconfig.json b/test/fixtures/typescript-zod/tsconfig.json index 3c2a002bd..a5befbe03 100644 --- a/test/fixtures/typescript-zod/tsconfig.json +++ b/test/fixtures/typescript-zod/tsconfig.json @@ -2,7 +2,5 @@ "compilerOptions": { "target": "es6" }, - "files": [ - "*.ts" - ] -} \ No newline at end of file + "files": ["*.ts"] +} diff --git a/test/fixtures/typescript/main.ts b/test/fixtures/typescript/main.ts index 964d25d89..c22518dd2 100644 --- a/test/fixtures/typescript/main.ts +++ b/test/fixtures/typescript/main.ts @@ -7,7 +7,7 @@ const process = require("process"); const sample = process.argv[2]; const json = fs.readFileSync(sample); -let value = TopLevel.Convert.toTopLevel(json); -let backToJson = TopLevel.Convert.topLevelToJson(value); +const value = TopLevel.Convert.toTopLevel(json); +const backToJson = TopLevel.Convert.topLevelToJson(value); console.log(backToJson); diff --git a/test/fixtures/typescript/tsconfig.json b/test/fixtures/typescript/tsconfig.json index 3c2a002bd..a5befbe03 100644 --- a/test/fixtures/typescript/tsconfig.json +++ b/test/fixtures/typescript/tsconfig.json @@ -2,7 +2,5 @@ "compilerOptions": { "target": "es6" }, - "files": [ - "*.ts" - ] -} \ No newline at end of file + "files": ["*.ts"] +} diff --git a/test/languages.ts b/test/languages.ts index 95d3e3ea7..9573f3e57 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -1,10 +1,15 @@ -import { type LanguageName } from "quicktype-core"; +import type { LanguageName } from "quicktype-core"; import * as process from "process"; // @ts-ignore -import { RendererOptions } from "../dist/quicktype-core/Run"; +import type { RendererOptions } from "../dist/quicktype-core/Run"; -const easySampleJSONs = ["bitcoin-block.json", "pokedex.json", "simple-object.json", "getting-started.json"]; +const easySampleJSONs = [ + "bitcoin-block.json", + "pokedex.json", + "simple-object.json", + "getting-started.json", +]; export type LanguageFeature = | "enum" @@ -52,17 +57,26 @@ export const CSharpLanguage: Language = { diffViaSchema: true, skipDiffViaSchema: ["34702.json", "437e7.json"], allowMissingNull: false, - features: ["enum", "union", "no-defaults", "strict-optional", "date-time", "integer-string", "bool-string", "uuid"], + features: [ + "enum", + "union", + "no-defaults", + "strict-optional", + "date-time", + "integer-string", + "bool-string", + "uuid", + ], output: "QuickType.cs", topLevel: "TopLevel", skipJSON: [ "nbl-stats.json", // See issue #823 "empty-enum.json", // https://github.com/JamesNK/Newtonsoft.Json/issues/1687 - "31189.json" // JSON.NET doesn't accept year 0000 as 1BC, though it should + "31189.json", // JSON.NET doesn't accept year 0000 as 1BC, though it should ], skipMiscJSON: false, skipSchema: [ - "top-level-enum.schema" // The code we generate for top-level enums is incompatible with the driver + "top-level-enum.schema", // The code we generate for top-level enums is incompatible with the driver ], rendererOptions: { "check-required": "true" }, quickTestRendererOptions: [ @@ -70,9 +84,9 @@ export const CSharpLanguage: Language = { { "csharp-version": "5" }, { density: "dense" }, { "number-type": "decimal" }, - { "any-type": "dynamic" } + { "any-type": "dynamic" }, ], - sourceFiles: ["src/language/CSharp/index.ts"] + sourceFiles: ["src/language/CSharp/index.ts"], }; export const CSharpLanguageSystemTextJson: Language = { @@ -86,25 +100,34 @@ export const CSharpLanguageSystemTextJson: Language = { diffViaSchema: true, skipDiffViaSchema: ["34702.json", "437e7.json"], allowMissingNull: false, - features: ["enum", "union", "no-defaults", "strict-optional", "date-time", "integer-string", "bool-string", "uuid"], + features: [ + "enum", + "union", + "no-defaults", + "strict-optional", + "date-time", + "integer-string", + "bool-string", + "uuid", + ], output: "QuickType.cs", topLevel: "TopLevel", skipJSON: [ - "31189.json" // .NET doesn't accept year 0000 as 1BC, though it should + "31189.json", // .NET doesn't accept year 0000 as 1BC, though it should ], skipMiscJSON: false, skipSchema: [ - "top-level-enum.schema" // The code we generate for top-level enums is incompatible with the driver + "top-level-enum.schema", // The code we generate for top-level enums is incompatible with the driver ], - rendererOptions: { "check-required": "true", "framework": "SystemTextJson" }, + rendererOptions: { "check-required": "true", framework: "SystemTextJson" }, quickTestRendererOptions: [ { "array-type": "list" }, { "csharp-version": "6" }, { density: "dense" }, { "number-type": "decimal" }, - { "any-type": "dynamic" } + { "any-type": "dynamic" }, ], - sourceFiles: ["src/language/CSharp/index.ts"] + sourceFiles: ["src/language/CSharp/index.ts"], }; export const JavaLanguage: Language = { @@ -122,34 +145,38 @@ export const JavaLanguage: Language = { features: ["enum", "union", "uuid"], output: "src/main/java/io/quicktype/TopLevel.java", topLevel: "TopLevel", - skipJSON: ["identifiers.json", "simple-identifiers.json", "nst-test-suite.json"], + skipJSON: [ + "identifiers.json", + "simple-identifiers.json", + "nst-test-suite.json", + ], skipMiscJSON: false, skipSchema: ["keyword-unions.schema"], // generates classes with names that are case-insensitively equal rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/Java/index.ts"] + sourceFiles: ["src/language/Java/index.ts"], }; export const JavaLanguageWithLegacyDateTime: Language = { ...JavaLanguage, skipSchema: [ ...JavaLanguage.skipSchema, - "date-time.schema" // Expects less strict serialization. + "date-time.schema", // Expects less strict serialization. ], skipJSON: [ ...(JavaLanguage.skipJSON !== undefined ? JavaLanguage.skipJSON : []), "0a358.json", // Expects less strict serialization (optional milliseconds). - "337ed.json" // Expects less strict serialization (optional milliseconds). + "337ed.json", // Expects less strict serialization (optional milliseconds). ], skipMiscJSON: true, // Handles edge cases differently and does not allow optional milliseconds. rendererOptions: { "datetime-provider": "legacy" }, - quickTestRendererOptions: [{ "array-type": "list" }] + quickTestRendererOptions: [{ "array-type": "list" }], }; export const JavaLanguageWithLombok: Language = { ...JavaLanguage, base: "test/fixtures/java-lombok", - quickTestRendererOptions: [{ "array-type": "list", "lombok": "true" }] + quickTestRendererOptions: [{ "array-type": "list", lombok: "true" }], }; export const PythonLanguage: Language = { @@ -169,22 +196,30 @@ export const PythonLanguage: Language = { "7681c.json", "c3303.json", "e8b04.json", - "f6a65.json" + "f6a65.json", ], allowMissingNull: true, - features: ["enum", "union", "no-defaults", "date-time", "integer-string", "bool-string", "uuid"], + features: [ + "enum", + "union", + "no-defaults", + "date-time", + "integer-string", + "bool-string", + "uuid", + ], output: "quicktype.py", topLevel: "TopLevel", skipJSON: [ - "31189.json" // year 0 is out of range + "31189.json", // year 0 is out of range ], skipMiscJSON: false, skipSchema: [ - "keyword-unions.schema" // Requires more than 255 arguments + "keyword-unions.schema", // Requires more than 255 arguments ], rendererOptions: {}, quickTestRendererOptions: [{ "python-version": "3.5" }], - sourceFiles: ["src/language/Python/index.ts"] + sourceFiles: ["src/language/Python/index.ts"], }; export const RustLanguage: Language = { @@ -210,7 +245,7 @@ export const RustLanguage: Language = { "af2d1.json", "c3303.json", "e8b04.json", - "f6a65.json" + "f6a65.json", ], allowMissingNull: false, features: ["enum", "union", "no-defaults"], @@ -224,9 +259,9 @@ export const RustLanguage: Language = { { density: "dense" }, { visibility: "crate" }, { visibility: "private" }, - { visibility: "public" } + { visibility: "public" }, ], - sourceFiles: ["src/language/Rust/index.ts"] + sourceFiles: ["src/language/Rust/index.ts"], }; export const CrystalLanguage: Language = { @@ -253,19 +288,19 @@ export const CrystalLanguage: Language = { "4961a.json", "32431.json", "68c30.json", - "e8b04.json" + "e8b04.json", ], skipSchema: [ // Crystal does not handle enum mapping "enum.schema", // Crystal does not support top-level primitives "top-level-enum.schema", - "keyword-unions.schema" + "keyword-unions.schema", ], skipMiscJSON: false, rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Crystal/index.ts"] + sourceFiles: ["src/language/Crystal/index.ts"], }; export const RubyLanguage: Language = { @@ -327,7 +362,7 @@ export const RubyLanguage: Language = { "e53b5.json", "f22f5.json", "f3139.json", - "e8b04.json" + "e8b04.json", ], allowMissingNull: true, features: ["enum", "union", "no-defaults"], @@ -348,16 +383,16 @@ export const RubyLanguage: Language = { "union-constructor-clash.json", "unions.json", "nbl-stats.json", - "kitchen-sink.json" + "kitchen-sink.json", ], skipSchema: [ // We don't generate a convenience method for top-level enums - "top-level-enum.schema" + "top-level-enum.schema", ], skipMiscJSON: false, rendererOptions: {}, quickTestRendererOptions: [["pokedex.json", { namespace: "QuickType" }]], - sourceFiles: ["src/language/ruby/index.ts"] + sourceFiles: ["src/language/ruby/index.ts"], }; export const GoLanguage: Language = { @@ -375,7 +410,7 @@ export const GoLanguage: Language = { "337ed.json", "34702.json", "7eb30.json", - "e8b04.json" + "e8b04.json", ], allowMissingNull: false, features: ["union"], @@ -397,17 +432,17 @@ export const GoLanguage: Language = { "437e7.json", "127a1.json", "26b49.json", - "0cffa.json" + "0cffa.json", ], skipMiscJSON: false, skipSchema: [ // can't differenciate empty array and nothing for optional empty array // (omitempty). - "postman-collection.schema" + "postman-collection.schema", ], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Golang/index.ts"] + sourceFiles: ["src/language/Golang/index.ts"], }; export const CJSONLanguage: Language = { @@ -415,7 +450,8 @@ export const CJSONLanguage: Language = { base: "test/fixtures/cjson", setupCommand: "curl -o cJSON.c https://raw.githubusercontent.com/DaveGamble/cJSON/v1.7.15/cJSON.c && curl -o cJSON.h https://raw.githubusercontent.com/DaveGamble/cJSON/v1.7.15/cJSON.h && curl -o list.h https://raw.githubusercontent.com/joelguittet/c-list/master/include/list.h && curl -o list.c https://raw.githubusercontent.com/joelguittet/c-list/master/src/list.c && curl -o hashtable.h https://raw.githubusercontent.com/joelguittet/c-hashtable/master/include/hashtable.h && curl -o hashtable.c https://raw.githubusercontent.com/joelguittet/c-hashtable/master/src/hashtable.c", - compileCommand: "gcc -O0 -o quicktype -I. cJSON.c hashtable.c list.c main.c -lpthread", + compileCommand: + "gcc -O0 -o quicktype -I. cJSON.c hashtable.c list.c main.c -lpthread", runCommand(sample: string) { return `valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --error-exitcode=1 ./quicktype "${sample}"`; }, @@ -430,10 +466,17 @@ export const CJSONLanguage: Language = { "fcca3.json", "bug427.json", "github-events.json", - "keywords.json" + "keywords.json", ], allowMissingNull: false, - features: ["minmax", "minmaxlength", "pattern", "enum", "union", "no-defaults"], + features: [ + "minmax", + "minmaxlength", + "pattern", + "enum", + "union", + "no-defaults", + ], output: "TopLevel.h", topLevel: "TopLevel", skipJSON: [ @@ -450,7 +493,7 @@ export const CJSONLanguage: Language = { /* Map in Array in TopLevel is not supported (for the current implementation, can be added later, need recursivity) */ "combinations2.json", /* Array in Array in Union is not supported (for the current implementation, can be added later, need recursivity) */ - "combinations4.json" + "combinations4.json", ], skipMiscJSON: false, skipSchema: [ @@ -481,11 +524,11 @@ export const CJSONLanguage: Language = { "optional-any.schema", "required-non-properties.schema", /* Other cases not supported */ - "implicit-class-array-union.schema" + "implicit-class-array-union.schema", ], rendererOptions: {}, quickTestRendererOptions: [{ "source-style": "single-source" }], - sourceFiles: ["src/language/CJSON/index.ts"] + sourceFiles: ["src/language/CJSON/index.ts"], }; export const CPlusPlusLanguage: Language = { @@ -512,10 +555,17 @@ export const CPlusPlusLanguage: Language = { "c3303.json", "e8b04.json", "f6a65.json", - "fcca3.json" + "fcca3.json", ], allowMissingNull: false, - features: ["minmax", "minmaxlength", "pattern", "enum", "union", "no-defaults"], + features: [ + "minmax", + "minmaxlength", + "pattern", + "enum", + "union", + "no-defaults", + ], output: "TopLevel.hpp", topLevel: "TopLevel", skipJSON: [ @@ -528,12 +578,12 @@ export const CPlusPlusLanguage: Language = { "combinations1.json", "combinations2.json", "combinations3.json", - "combinations4.json" + "combinations4.json", ], skipMiscJSON: false, skipSchema: [ // uses too much memory - "keyword-unions.schema" + "keyword-unions.schema", ], rendererOptions: {}, quickTestRendererOptions: [ @@ -542,9 +592,9 @@ export const CPlusPlusLanguage: Language = { { "code-format": "with-struct" }, { wstring: "use-wstring" }, { "const-style": "east-const" }, - { boost: "false" } + { boost: "false" }, ], - sourceFiles: ["src/language/CPlusPlus/index.ts"] + sourceFiles: ["src/language/CPlusPlus/index.ts"], }; export const ElmLanguage: Language = { @@ -584,7 +634,7 @@ export const ElmLanguage: Language = { "be234.json", "c3303.json", "e8b04.json", - "f6a65.json" + "f6a65.json", ], allowMissingNull: false, features: ["enum", "union", "no-defaults"], @@ -600,7 +650,7 @@ export const ElmLanguage: Language = { "bug790.json", "list.json", "nst-test-suite.json", - "keywords.json" // stack overflow + "keywords.json", // stack overflow ], skipMiscJSON: false, skipSchema: [ @@ -612,11 +662,11 @@ export const ElmLanguage: Language = { "postman-collection.schema", // recursion "vega-lite.schema", // recursion "simple-ref.schema", // recursion - "keyword-unions.schema" // can't handle "hasOwnProperty" for some reason + "keyword-unions.schema", // can't handle "hasOwnProperty" for some reason ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/Elm/index.ts"] + sourceFiles: ["src/language/Elm/index.ts"], }; export const SwiftLanguage: Language = { @@ -661,7 +711,7 @@ export const SwiftLanguage: Language = { "f6a65.json", // date-time issues "fcca3.json", "f82d9.json", - "bug863.json" // Unable to resolve reserved keyword use, "description" + "bug863.json", // Unable to resolve reserved keyword use, "description" ], allowMissingNull: true, features: ["enum", "union", "no-defaults", "date-time"], @@ -674,7 +724,7 @@ export const SwiftLanguage: Language = { "blns-object.json", // Doesn't seem to work on Linux, works on MacOS "nst-test-suite.json", - "null-safe.json" + "null-safe.json", ], skipMiscJSON: false, skipSchema: [ @@ -691,7 +741,7 @@ export const SwiftLanguage: Language = { "class-with-additional.schema", "class-map-union.schema", "vega-lite.schema", - "top-level-primitive.schema" + "top-level-primitive.schema", ], rendererOptions: { "support-linux": "true" }, quickTestRendererOptions: [ @@ -702,9 +752,9 @@ export const SwiftLanguage: Language = { { "access-level": "internal" }, { "access-level": "public" }, { protocol: "equatable" }, - ["simple-object.json", { protocol: "hashable" }] + ["simple-object.json", { protocol: "hashable" }], ], - sourceFiles: ["src/language/Swift/index.ts"] + sourceFiles: ["src/language/Swift/index.ts"], }; export const ObjectiveCLanguage: Language = { @@ -736,13 +786,13 @@ export const ObjectiveCLanguage: Language = { // Could not convert JSON to model: Error Domain=JSONSerialization Code=-1 "(null)" UserInfo={exception=-[NSNull countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x7fff807b6ea0} "combinations2.json", "combinations3.json", - "combinations4.json" + "combinations4.json", ], skipMiscJSON: false, skipSchema: [], rendererOptions: { functions: "true" }, quickTestRendererOptions: [], - sourceFiles: ["src/language/Objective-C/index.ts"] + sourceFiles: ["src/language/Objective-C/index.ts"], }; export const TypeScriptLanguage: Language = { @@ -768,14 +818,14 @@ export const TypeScriptLanguage: Language = { "c8c7e.json", "cda6c.json", "e53b5.json", - "e8b04.json" + "e8b04.json", ], allowMissingNull: false, features: ["enum", "union", "no-defaults", "strict-optional", "date-time"], output: "TopLevel.ts", topLevel: "TopLevel", skipJSON: [ - "7681c.json" // year 0 is out of range + "7681c.json", // year 0 is out of range ], skipMiscJSON: false, skipSchema: ["keyword-unions.schema"], // can't handle "constructor" property @@ -788,9 +838,9 @@ export const TypeScriptLanguage: Language = { ["pokedex.json", { "prefer-types": "true" }], { "acronym-style": "pascal" }, { converters: "all-objects" }, - { readonly: "true" } + { readonly: "true" }, ], - sourceFiles: ["src/language/TypeScript/index.ts"] + sourceFiles: ["src/language/TypeScript/index.ts"], }; export const JavaScriptLanguage: Language = { @@ -807,7 +857,7 @@ export const JavaScriptLanguage: Language = { output: "TopLevel.js", topLevel: "TopLevel", skipJSON: [ - "7681c.json" // year 0 is out of range + "7681c.json", // year 0 is out of range ], skipMiscJSON: false, skipSchema: ["keyword-unions.schema"], // can't handle "constructor" property @@ -815,9 +865,9 @@ export const JavaScriptLanguage: Language = { quickTestRendererOptions: [ { "runtime-typecheck": "false" }, { "runtime-typecheck-ignore-unknown-properties": "true" }, - { converters: "top-level" } + { converters: "top-level" }, ], - sourceFiles: ["src/language/JavaScript/index.ts"] + sourceFiles: ["src/language/JavaScript/index.ts"], }; export const JavaScriptPropTypesLanguage: Language = { @@ -839,7 +889,7 @@ export const JavaScriptPropTypesLanguage: Language = { "bug790.json", // renderer does not support recursion "recursive.json", // renderer does not support recursion "spotify-album.json", // renderer does not support recursion - "76ae1.json" // renderer does not support recursion + "76ae1.json", // renderer does not support recursion ], skipSchema: [], skipMiscJSON: false, @@ -847,9 +897,9 @@ export const JavaScriptPropTypesLanguage: Language = { quickTestRendererOptions: [ { "runtime-typecheck": "false" }, { "runtime-typecheck-ignore-unknown-properties": "true" }, - { converters: "top-level" } + { converters: "top-level" }, ], - sourceFiles: ["src/language/JavaScriptPropTypes/index.ts"] + sourceFiles: ["src/language/JavaScriptPropTypes/index.ts"], }; export const FlowLanguage: Language = { @@ -865,20 +915,20 @@ export const FlowLanguage: Language = { output: "TopLevel.js", topLevel: "TopLevel", skipJSON: [ - "7681c.json" // year 0 is out of range + "7681c.json", // year 0 is out of range ], skipMiscJSON: false, skipSchema: [ - "keyword-unions.schema" // can't handle "constructor" property + "keyword-unions.schema", // can't handle "constructor" property ], rendererOptions: { "explicit-unions": "yes" }, quickTestRendererOptions: [ { "runtime-typecheck": "false" }, { "runtime-typecheck-ignore-unknown-properties": "true" }, { "nice-property-names": "true" }, - { "declare-unions": "true" } + { "declare-unions": "true" }, ], - sourceFiles: ["src/language/Flow/index.ts"] + sourceFiles: ["src/language/Flow/index.ts"], }; export const Scala3Language: Language = { @@ -938,7 +988,7 @@ I havea no idea how to encode these tests correctly. "combinations3.json", "combinations4.json", "unions.json", - "nst-test-suite.json" + "nst-test-suite.json", ], skipSchema: [ // 12 skips @@ -953,12 +1003,12 @@ I havea no idea how to encode these tests correctly. "enum.schema", "class-with-additional.schema", "class-map-union.schema", - "keyword-unions.schema" + "keyword-unions.schema", ], skipMiscJSON: false, rendererOptions: { framework: "circe" }, quickTestRendererOptions: [], - sourceFiles: ["src/language/Scala3/index.ts"] + sourceFiles: ["src/language/Scala3/index.ts"], }; export const Smithy4sLanguage: Language = { @@ -1018,13 +1068,13 @@ I havea no idea how to encode these tests correctly. "combinations3.json", "combinations4.json", "unions.json", - "nst-test-suite.json" + "nst-test-suite.json", ], skipSchema: [], skipMiscJSON: false, rendererOptions: { framework: "just-types" }, quickTestRendererOptions: [], - sourceFiles: ["src/language/Smithy4s/index.ts"] + sourceFiles: ["src/language/Smithy4s/index.ts"], }; export const KotlinLanguage: Language = { @@ -1040,7 +1090,7 @@ export const KotlinLanguage: Language = { "keywords.json", // TODO Investigate these "34702.json", - "76ae1.json" + "76ae1.json", ], allowMissingNull: true, features: ["enum", "union", "no-defaults"], @@ -1078,7 +1128,7 @@ export const KotlinLanguage: Language = { // TODO Investigate these "af2d1.json", "32431.json", - "bug427.json" + "bug427.json", ], skipSchema: [ // Very weird - the types are correct, but it can (de)serialize the string, @@ -1104,12 +1154,12 @@ export const KotlinLanguage: Language = { "keyword-unions.schema", // Klaxon does not support top-level primitives "top-level-enum.schema", - "top-level-primitive.schema" + "top-level-primitive.schema", ], skipMiscJSON: false, rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Kotlin/index.ts"] + sourceFiles: ["src/language/Kotlin/index.ts"], }; export const KotlinJacksonLanguage: Language = { @@ -1125,7 +1175,7 @@ export const KotlinJacksonLanguage: Language = { "keywords.json", // TODO Investigate these "34702.json", - "76ae1.json" + "76ae1.json", ], allowMissingNull: true, features: ["enum", "union", "no-defaults"], @@ -1162,7 +1212,7 @@ export const KotlinJacksonLanguage: Language = { // TODO Investigate these "af2d1.json", "32431.json", - "bug427.json" + "bug427.json", ], skipSchema: [ // Very weird - the types are correct, but it can (de)serialize the string, @@ -1188,12 +1238,12 @@ export const KotlinJacksonLanguage: Language = { "keyword-unions.schema", // Klaxon does not support top-level primitives "top-level-enum.schema", - "top-level-primitive.schema" + "top-level-primitive.schema", ], skipMiscJSON: false, rendererOptions: { framework: "jackson" }, quickTestRendererOptions: [], - sourceFiles: ["src/language/Kotlin/index.ts"] + sourceFiles: ["src/language/Kotlin/index.ts"], }; export const DartLanguage: Language = { @@ -1223,7 +1273,7 @@ export const DartLanguage: Language = { "us-senators.json", "0a91a.json", "github-events.json", - "keywords.json" + "keywords.json", ], skipSchema: [ "enum-with-null.schema", @@ -1238,12 +1288,12 @@ export const DartLanguage: Language = { "simple-ref.schema", "keyword-unions.schema", "ref-remote.schema", - "uuid.schema" + "uuid.schema", ], skipMiscJSON: true, rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Dart/index.ts"] + sourceFiles: ["src/language/Dart/index.ts"], }; export const PikeLanguage: Language = { @@ -1279,7 +1329,7 @@ export const PikeLanguage: Language = { "d23d5.json", "dc44f.json", "dec3a.json", - "f22f5.json" + "f22f5.json", ], skipMiscJSON: false, skipSchema: [ @@ -1292,11 +1342,11 @@ export const PikeLanguage: Language = { "class-with-additional.schema", "multi-type-enum.schema", "class-map-union.schema", - "implicit-class-array-union.schema" + "implicit-class-array-union.schema", ], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Pike/index.ts"] + sourceFiles: ["src/language/Pike/index.ts"], }; export const HaskellLanguage: Language = { @@ -1323,7 +1373,7 @@ export const HaskellLanguage: Language = { "76ae1.json", "af2d1.json", "be234.json", - "e8b04.json" + "e8b04.json", ], allowMissingNull: false, features: ["enum", "union", "no-defaults"], @@ -1366,7 +1416,7 @@ export const HaskellLanguage: Language = { "recursive.json", "bug427.json", "nst-test-suite.json", - "keywords.json" + "keywords.json", ], skipMiscJSON: false, skipSchema: [ @@ -1381,17 +1431,17 @@ export const HaskellLanguage: Language = { "keyword-unions.schema", "optional-any.schema", "required.schema", - "required-non-properties.schema" + "required-non-properties.schema", ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/Haskell/index.ts"] + sourceFiles: ["src/language/Haskell/index.ts"], }; export const PHPLanguage: Language = { name: "php", base: "test/fixtures/php", - runCommand: sample => `php main.php \"${sample}\"`, + runCommand: (sample) => `php main.php \"${sample}\"`, diffViaSchema: false, skipDiffViaSchema: [], allowMissingNull: true, @@ -1403,7 +1453,7 @@ export const PHPLanguage: Language = { skipSchema: [], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Php/index.ts"] + sourceFiles: ["src/language/Php/index.ts"], }; export const TypeScriptZodLanguage: Language = { @@ -1437,7 +1487,7 @@ export const TypeScriptZodLanguage: Language = { "76ae1.json", "af2d1.json", "be234.json", - "e8b04.json" + "e8b04.json", ], allowMissingNull: false, features: ["enum", "union", "no-defaults", "date-time"], @@ -1502,7 +1552,7 @@ export const TypeScriptZodLanguage: Language = { "keywords.json", "ed095.json", "7681c.json", - "32d5c.json" + "32d5c.json", ], skipMiscJSON: false, skipSchema: [ @@ -1517,11 +1567,11 @@ export const TypeScriptZodLanguage: Language = { "keyword-unions.schema", "optional-any.schema", "required.schema", - "required-non-properties.schema" + "required-non-properties.schema", ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/TypeScriptZod/index.ts"] + sourceFiles: ["src/language/TypeScriptZod/index.ts"], }; export const TypeScriptEffectSchemaLanguage: Language = { @@ -1555,7 +1605,7 @@ export const TypeScriptEffectSchemaLanguage: Language = { "76ae1.json", "af2d1.json", "be234.json", - "e8b04.json" + "e8b04.json", ], allowMissingNull: false, features: ["enum", "union", "no-defaults"], @@ -1618,7 +1668,7 @@ export const TypeScriptEffectSchemaLanguage: Language = { "bug427.json", "nst-test-suite.json", "keywords.json", - "ed095.json" + "ed095.json", ], skipMiscJSON: false, skipSchema: [ @@ -1633,11 +1683,11 @@ export const TypeScriptEffectSchemaLanguage: Language = { "keyword-unions.schema", "optional-any.schema", "required.schema", - "required-non-properties.schema" + "required-non-properties.schema", ], rendererOptions: {}, quickTestRendererOptions: [{ "array-type": "list" }], - sourceFiles: ["src/language/TypeScriptEffectSchema/index.ts"] + sourceFiles: ["src/language/TypeScriptEffectSchema/index.ts"], }; export const ElixirLanguage: Language = { @@ -1671,7 +1721,7 @@ export const ElixirLanguage: Language = { "bug427.json", "keywords.json", "kitchen-sink.json", - "reddit.json" + "reddit.json", ], allowMissingNull: false, features: ["enum", "no-defaults", "strict-optional"], @@ -1679,7 +1729,7 @@ export const ElixirLanguage: Language = { topLevel: "TopLevel", skipJSON: [ // Some field names are too long to be expressed as atoms and some contain invalid characters. - "blns-object.json" + "blns-object.json", ], skipMiscJSON: false, skipSchema: [ @@ -1694,9 +1744,9 @@ export const ElixirLanguage: Language = { // The test incorrectly succeeds due to the emitter being permissive for unions that contain only primitives. A future enhancement // for the Elixir emitter could be a user-controlled 'strict' mode that pattern matches even on unions of only primitive types. - "go-schema-pattern-properties.schema" + "go-schema-pattern-properties.schema", ], rendererOptions: {}, quickTestRendererOptions: [], - sourceFiles: ["src/language/Elixir/index.ts"] + sourceFiles: ["src/language/Elixir/index.ts"], }; diff --git a/test/lib/deepEquals.ts b/test/lib/deepEquals.ts index 0561b76bf..eaeb1209a 100644 --- a/test/lib/deepEquals.ts +++ b/test/lib/deepEquals.ts @@ -1,6 +1,6 @@ import moment from "moment"; -import { Moment } from "moment"; -import { ComparisonRelaxations } from "../utils"; +import type { Moment } from "moment"; +import type { ComparisonRelaxations } from "../utils"; function pathToString(path: string[]): string { return "." + path.join("."); @@ -37,7 +37,7 @@ export default function deepEquals( y: any, assumeStringsEqual: boolean, relax: ComparisonRelaxations, - path: string[] = [] + path: string[] = [], ): boolean { // remember that NaN === NaN returns false // and isNaN(undefined) returns true @@ -64,23 +64,35 @@ export default function deepEquals( if (assumeStringsEqual || x === y) return true; const [xMoment, isTime] = tryParseMoment(x); const [yMoment] = tryParseMoment(y); - if (xMoment !== undefined && yMoment !== undefined && momentsEqual(xMoment, yMoment, isTime)) { + if ( + xMoment !== undefined && + yMoment !== undefined && + momentsEqual(xMoment, yMoment, isTime) + ) { return true; } console.error( - `Strings not equal at path ${pathToString(path)}: ${JSON.stringify(x)} !== ${JSON.stringify(y)}.` + `Strings not equal at path ${pathToString(path)}: ${JSON.stringify(x)} !== ${JSON.stringify(y)}.`, ); return false; } - if (!!relax.allowStringifiedIntegers && typeof x === "string" && typeof y === "number") { + if ( + !!relax.allowStringifiedIntegers && + typeof x === "string" && + typeof y === "number" + ) { if (x === y.toString()) return true; - console.error(`String and number not equal at path ${pathToString(path)}.`); + console.error( + `String and number not equal at path ${pathToString(path)}.`, + ); return false; } if (x instanceof String && y instanceof String) { if (x.toString() === y.toString()) return true; - console.error(`Number or string not equal at path ${pathToString(path)}.`); + console.error( + `Number or string not equal at path ${pathToString(path)}.`, + ); return false; } @@ -96,7 +108,7 @@ export default function deepEquals( console.error( `Not the same constructor at path ${pathToString(path)}: should be ${x.constructor} but is ${ y.constructor - }.` + }.`, ); return false; } @@ -108,7 +120,9 @@ export default function deepEquals( if (Array.isArray(x)) { if (x.length !== y.length) { - console.error(`Arrays don't have the same length at path ${pathToString(path)}.`); + console.error( + `Arrays don't have the same length at path ${pathToString(path)}.`, + ); return false; } for (let i = 0; i < x.length; i++) { @@ -131,7 +145,9 @@ export default function deepEquals( // so long as they're null. if (xKeys.indexOf(p) < 0) { if (y[p] !== null) { - console.error(`Non-null property ${p} is not expected at path ${pathToString(path)}.`); + console.error( + `Non-null property ${p} is not expected at path ${pathToString(path)}.`, + ); return false; } } @@ -142,7 +158,9 @@ export default function deepEquals( if (!!relax.allowMissingNull && x[p] === null) { continue; } - console.error(`Expected property ${p} not found at path ${pathToString(path)}.`); + console.error( + `Expected property ${p} not found at path ${pathToString(path)}.`, + ); return false; } diff --git a/test/lib/multicore.ts b/test/lib/multicore.ts index 78fe2de60..117f28010 100644 --- a/test/lib/multicore.ts +++ b/test/lib/multicore.ts @@ -19,21 +19,23 @@ function randomPick(arr: T[]): T { function guys(n: number): string { return _.range(n) - .map(_i => randomPick(WORKERS)) + .map((_i) => randomPick(WORKERS)) .join(" "); } -export async function inParallel(args: ParallelArgs) { - let { queue } = args; - let items = queue.map((item, i) => { +export async function inParallel( + args: ParallelArgs, +) { + const { queue } = args; + const items = queue.map((item, i) => { return { item, i }; }); if (cluster.isPrimary) { - let { setup, workers, map } = args; + const { setup, workers, map } = args; await setup(); - cluster.on("message", worker => { + cluster.on("message", (worker) => { const msg = items.pop(); if (msg !== undefined) { worker.send(msg); @@ -57,30 +59,30 @@ export async function inParallel(args: ParallelArgs + _.range(workers).forEach((i) => cluster.fork({ worker: i, // https://github.com/TypeStrong/ts-node/issues/367 - TS_NODE_PROJECT: "test/tsconfig.json" - }) + TS_NODE_PROJECT: "test/tsconfig.json", + }), ); } } else { // Setup a worker - let { map } = args; + const { map } = args; // master sends a { fixtureName, sample } to run process.on("message", async ({ item, i }) => { - (process.send as any)({ - result: await map(item, i) + process.send?.({ + result: await map(item, i), }); }); // Ask master for work - (process.send as any)("ready"); + process.send?.("ready"); } } diff --git a/test/test.ts b/test/test.ts index e51058f76..f6015eafa 100755 --- a/test/test.ts +++ b/test/test.ts @@ -2,12 +2,12 @@ import * as os from "os"; import * as _ from "lodash"; import { inParallel } from "./lib/multicore"; -import { execAsync, Sample } from "./utils"; -import { Fixture, allFixtures } from "./fixtures"; +import { execAsync, type Sample } from "./utils"; +import { type Fixture, allFixtures } from "./fixtures"; import { affectedFixtures, divideParallelJobs } from "./buildkite"; const exit = require("exit"); -const CPUs = parseInt(process.env.CPUs || "0", 10) || os.cpus().length; +const CPUs = Number.parseInt(process.env.CPUs || "0", 10) || os.cpus().length; ////////////////////////////////////// // Test driver @@ -20,24 +20,36 @@ async function main(sources: string[]) { const fixturesFromCmdline = process.env.FIXTURE; if (fixturesFromCmdline) { const fixtureNames = fixturesFromCmdline.split(","); - fixtures = _.filter(fixtures, fixture => _.some(fixtureNames, name => fixture.runForName(name))); + fixtures = _.filter(fixtures, (fixture) => + _.some(fixtureNames, (name) => fixture.runForName(name)), + ); } if (allFixtures.length !== fixtures.length) { - console.error(`* Running a subset of fixtures: ${fixtures.map(f => f.name).join(", ")}`); + console.error( + `* Running a subset of fixtures: ${fixtures.map((f) => f.name).join(", ")}`, + ); } // Get an array of all { sample, fixtureName } objects we'll run. // We can't just put the fixture in there because these WorkItems // will be sent in a message, removing all code. - const samples = _.map(fixtures, fixture => ({ + const samples = _.map(fixtures, (fixture) => ({ fixtureName: fixture.name, - samples: fixture.getSamples(sources) + samples: fixture.getSamples(sources), })); - const priority = _.flatMap(samples, x => - _.map(x.samples.priority, s => ({ fixtureName: x.fixtureName, sample: s })) + const priority = _.flatMap(samples, (x) => + _.map(x.samples.priority, (s) => ({ + fixtureName: x.fixtureName, + sample: s, + })), + ); + const others = _.flatMap(samples, (x) => + _.map(x.samples.others, (s) => ({ + fixtureName: x.fixtureName, + sample: s, + })), ); - const others = _.flatMap(samples, x => _.map(x.samples.others, s => ({ fixtureName: x.fixtureName, sample: s }))); const tests = divideParallelJobs(_.concat(priority, others)); @@ -46,7 +58,9 @@ async function main(sources: string[]) { workers: CPUs, setup: async () => { - console.error(`* Running ${tests.length} tests between ${fixtures.length} fixtures`); + console.error( + `* Running ${tests.length} tests between ${fixtures.length} fixtures`, + ); for (const fixture of fixtures) { await execAsync(`rm -rf test/runs`); @@ -57,19 +71,19 @@ async function main(sources: string[]) { }, map: async ({ sample, fixtureName }: WorkItem, index) => { - let fixture = _.find(fixtures, { name: fixtureName }) as Fixture; + const fixture = _.find(fixtures, { name: fixtureName }) as Fixture; try { await fixture.runWithSample(sample, index, tests.length); } catch (e) { console.trace(e); exit(1); } - } + }, }); } // skip 2 `node` args -main(process.argv.slice(2)).catch(reason => { +main(process.argv.slice(2)).catch((reason) => { console.error(reason); process.exit(1); }); diff --git a/test/utils.ts b/test/utils.ts index b53715d24..b532a2e8f 100644 --- a/test/utils.ts +++ b/test/utils.ts @@ -1,16 +1,19 @@ -import * as fs from "fs"; -import * as path from "path"; +import * as fs from "node:fs"; +import * as path from "node:path"; import * as _ from "lodash"; import * as shell from "shelljs"; -import { main as quicktype_, CLIOptions } from "../src"; -import { RendererOptions } from "quicktype-core"; -import * as languages from "./languages"; +import { main as quicktype_, type CLIOptions } from "../src"; +import type { RendererOptions } from "quicktype-core"; +import type * as languages from "./languages"; import deepEquals from "./lib/deepEquals"; import chalk from "chalk"; -const strictDeepEquals: (x: any, y: any) => boolean = require("deep-equal"); +const strictDeepEquals: ( + x: unknown, + y: unknown, +) => boolean = require("deep-equal"); const DEBUG = process.env.DEBUG !== undefined; const ASSUME_STRINGS_EQUAL = process.env.ASSUME_STRINGS_EQUAL !== undefined; @@ -22,7 +25,7 @@ export function debug(x: T): T { return x; } -export function failWith(message: string, obj: { [key: string]: any }): never { +export function failWith(message: string, obj: Record): never { obj.cwd = process.cwd(); console.error(chalk.red(message)); console.error(chalk.red(JSON.stringify(obj, null, " "))); @@ -44,24 +47,25 @@ export function callAndExpectFailure(message: string, f: () => T): void { } catch { return; } - return failWith(message, { result }); + + failWith(message, { result }); } export function exec( s: string, env: NodeJS.ProcessEnv | undefined, - printFailure = true + printFailure = true, ): { stdout: string; code: number } { debug(s); if (env === undefined) { env = process.env; } - const result = shell.exec(s, { silent: !DEBUG, env }) as any; + const result = shell.exec(s, { silent: !DEBUG, env }); if (result.code !== 0) { const failureObj = { command: s, - code: result.code + code: result.code, }; if (!printFailure) { throw failureObj; @@ -74,7 +78,10 @@ export function exec( return result; } -export function execAsync(s: string, opts: { silent: boolean } = { silent: !DEBUG }) { +export function execAsync( + s: string, + opts: { silent: boolean } = { silent: !DEBUG }, +) { return new Promise<{ stdout: string; code: number }>((resolve, reject) => { debug(s); shell.exec(s, opts, (code, stdout, stderr) => { @@ -89,9 +96,9 @@ export function execAsync(s: string, opts: { silent: boolean } = { silent: !DEBU } async function time(work: () => Promise): Promise<[T, number]> { - let start = +new Date(); - let result = await work(); - let end = +new Date(); + const start = +new Date(); + const result = await work(); + const end = +new Date(); return [result, end - start]; } @@ -99,7 +106,9 @@ async function time(work: () => Promise): Promise<[T, number]> { export function mkdirs(dir: string): void { const components = dir.split(path.sep); if (components.length === 0) { - throw new Error("mkdirs must be called with at least one path component"); + throw new Error( + "mkdirs must be called with at least one path component", + ); } let soFar: string; if (components[0].length === 0) { @@ -132,7 +141,7 @@ export async function quicktypeForLanguage( sourceLanguage: string, alphabetizeProperties: boolean, additionalRendererOptions: RendererOptions, - graphqlSchema?: string + graphqlSchema?: string, ) { try { await quicktype({ @@ -143,12 +152,16 @@ export async function quicktypeForLanguage( graphqlSchema, topLevel: language.topLevel, alphabetizeProperties, - rendererOptions: _.merge({}, language.rendererOptions, additionalRendererOptions), + rendererOptions: _.merge( + {}, + language.rendererOptions, + additionalRendererOptions, + ), quiet: true, telemetry: "disable", // GraphQL input can leave unreachable types in the graph, which means // their provenance won't be propagated. It does that for non-nullables. - debug: graphqlSchema === undefined ? "provenance" : undefined + debug: graphqlSchema === undefined ? "provenance" : undefined, }); } catch (e) { failWith("quicktype threw an exception", { @@ -157,13 +170,13 @@ export async function quicktypeForLanguage( sourceFile, sourceLanguage, graphqlSchema, - additionalRendererOptions + additionalRendererOptions, }); } } export async function inDir(dir: string, work: () => Promise) { - let origin = process.cwd(); + const origin = process.cwd(); debug(`cd ${dir}`); process.chdir(dir); @@ -183,28 +196,33 @@ export interface Sample { } export function samplesFromPaths(paths: string[]): Sample[] { - return paths.map(p => ({ path: p, additionalRendererOptions: {}, saveOutput: true })); + return paths.map((p) => ({ + path: p, + additionalRendererOptions: {}, + saveOutput: true, + })); } export function samplesFromSources( sources: string[], prioritySamples: string[], miscSamples: string[], - extension: string + extension: string, ): { priority: Sample[]; others: Sample[] } { if (sources.length === 0) { return { priority: samplesFromPaths(prioritySamples), - others: samplesFromPaths(miscSamples) + others: samplesFromPaths(miscSamples), }; - } else if (sources.length === 1 && fs.lstatSync(sources[0]).isDirectory()) { + } + if (sources.length === 1 && fs.lstatSync(sources[0]).isDirectory()) { return { priority: samplesFromPaths(testsInDir(sources[0], extension)), - others: [] + others: [], }; - } else { - return { priority: samplesFromPaths(sources), others: [] }; } + + return { priority: samplesFromPaths(sources), others: [] }; } export type ComparisonRelaxations = { @@ -212,7 +230,9 @@ export type ComparisonRelaxations = { allowStringifiedIntegers?: boolean; }; -export type FileOrCommand = { file: string } | { command: string; env: NodeJS.ProcessEnv }; +export type FileOrCommand = + | { file: string } + | { command: string; env: NodeJS.ProcessEnv }; function fileOrCommandIsFile(foc: FileOrCommand): foc is { file: string } { return "file" in foc && foc.file !== undefined; @@ -231,24 +251,34 @@ export function compareJsonFileToJson(args: ComparisonArgs) { const { given } = args; const jsonString = fileOrCommandIsFile(given) - ? callAndReportFailure("Could not read JSON output file", () => fs.readFileSync(given.file, "utf8")) - : callAndReportFailure("Could not run command for JSON output", () => exec(given.command, given.env).stdout); + ? callAndReportFailure("Could not read JSON output file", () => + fs.readFileSync(given.file, "utf8"), + ) + : callAndReportFailure( + "Could not run command for JSON output", + () => exec(given.command, given.env).stdout, + ); - const givenJSON = callAndReportFailure("Could not parse output JSON", () => JSON.parse(jsonString)); - const expectedJSON = callAndReportFailure("Could not read or parse expected JSON file", () => - JSON.parse(fs.readFileSync(expectedFile, "utf8")) + const givenJSON = callAndReportFailure("Could not parse output JSON", () => + JSON.parse(jsonString), + ); + const expectedJSON = callAndReportFailure( + "Could not read or parse expected JSON file", + () => JSON.parse(fs.readFileSync(expectedFile, "utf8")), ); - let jsonAreEqual = strict - ? callAndReportFailure("Failed to strictly compare objects", () => strictDeepEquals(givenJSON, expectedJSON)) + const jsonAreEqual = strict + ? callAndReportFailure("Failed to strictly compare objects", () => + strictDeepEquals(givenJSON, expectedJSON), + ) : callAndReportFailure("Failed to compare objects.", () => - deepEquals(expectedJSON, givenJSON, ASSUME_STRINGS_EQUAL, args) + deepEquals(expectedJSON, givenJSON, ASSUME_STRINGS_EQUAL, args), ); if (!jsonAreEqual) { failWith("Error: Output is not equivalent to input.", { expectedFile, - given + given, }); } } From 3b96de894d25adfb18450342c4c1e328ebb2be8e Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 17 May 2025 09:41:38 -0700 Subject: [PATCH 94/99] Fix fetch with build-time substitution (#2744) * split fetch into build-time files * fix lint * test sh * add grep replace for ci * bump types node version * add info log * add override for node-fetch whatwg --- package-lock.json | 51 +++++++++++++------ package.json | 7 +++ packages/quicktype-core/env.sh | 8 +++ packages/quicktype-core/package.json | 11 +++- .../quicktype-core/src/input/io/$fetch.ci.ts | 3 ++ .../quicktype-core/src/input/io/$fetch.ts | 11 ++++ .../quicktype-core/src/input/io/NodeIO.ts | 17 +++---- packages/quicktype-graphql-input/package.json | 2 +- .../quicktype-typescript-input/package.json | 2 +- packages/quicktype-vscode/package.json | 2 +- 10 files changed, 83 insertions(+), 31 deletions(-) create mode 100755 packages/quicktype-core/env.sh create mode 100644 packages/quicktype-core/src/input/io/$fetch.ci.ts create mode 100644 packages/quicktype-core/src/input/io/$fetch.ts diff --git a/package-lock.json b/package-lock.json index b6ddb0397..dc84a547c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -689,10 +689,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "18.19.31", + "version": "22.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", + "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-persist": { @@ -4482,7 +4484,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5326,8 +5327,16 @@ } }, "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } }, "node_modules/ts-api-utils": { "version": "1.3.0", @@ -5469,7 +5478,9 @@ "license": "MIT" }, "node_modules/undici-types": { - "version": "5.26.5", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-properties": { @@ -5574,19 +5585,29 @@ } }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-fetch": { "version": "3.6.2", "license": "MIT" }, "node_modules/whatwg-url": { - "version": "5.0.0", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" } }, "node_modules/which": { @@ -5902,7 +5923,7 @@ "devDependencies": { "@types/browser-or-node": "^1.3.2", "@types/is-url": "^1.2.32", - "@types/node": "18.19.31", + "@types/node": "~22.14.0", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", @@ -5929,7 +5950,7 @@ }, "devDependencies": { "@types/graphql": "^0.11.7", - "@types/node": "18.19.31", + "@types/node": "~22.14.0", "typescript": "~5.8.3" } }, @@ -5942,7 +5963,7 @@ "typescript": "4.9.5" }, "devDependencies": { - "@types/node": "18.19.31" + "@types/node": "~22.14.0" } }, "packages/quicktype-typescript-input/node_modules/@glideapps/ts-necessities": { @@ -6032,7 +6053,7 @@ "version": "23.0.122", "devDependencies": { "@types/mocha": "^10.0.6", - "@types/node": "18.x", + "@types/node": "~22.14.0", "@types/node-persist": "^3.1.8", "@types/readable-stream": "^4.0.10", "@types/vscode": "^1.87.0", diff --git a/package.json b/package.json index 7f2c3bc82..fb19d8882 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,13 @@ "ts-node": "^10.9.2", "watch": "^1.0.2" }, + "overrides": { + "cross-fetch": { + "node-fetch": { + "whatwg-url": "^13.0.0" + } + } + }, "files": ["dist"], "bin": "dist/index.js" } diff --git a/packages/quicktype-core/env.sh b/packages/quicktype-core/env.sh new file mode 100755 index 000000000..edb8ff6f4 --- /dev/null +++ b/packages/quicktype-core/env.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +if [[ $CI ]] +then + grep -rl '$fetch' src | xargs sed -i '' -e 's/$fetch/$fetch.ci/g' +fi + +exit 0 diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 6a66b53d5..902557baa 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -8,7 +8,7 @@ "repository": "https://github.com/quicktype/quicktype", "scripts": { "clean": "rm -rf dist node_modules *~", - "build": "tsc" + "build": "./env.sh && tsc" }, "dependencies": { "@glideapps/ts-necessities": "2.2.3", @@ -29,7 +29,7 @@ "devDependencies": { "@types/browser-or-node": "^1.3.2", "@types/is-url": "^1.2.32", - "@types/node": "18.19.31", + "@types/node": "~22.14.0", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", @@ -38,6 +38,13 @@ "@types/wordwrap": "^1.0.3", "typescript": "~5.8.3" }, + "overrides": { + "cross-fetch": { + "node-fetch": { + "whatwg-url": "^13.0.0" + } + } + }, "files": ["dist"], "browser": { "fs": false diff --git a/packages/quicktype-core/src/input/io/$fetch.ci.ts b/packages/quicktype-core/src/input/io/$fetch.ci.ts new file mode 100644 index 000000000..e52711a9d --- /dev/null +++ b/packages/quicktype-core/src/input/io/$fetch.ci.ts @@ -0,0 +1,3 @@ +console.info("=== RUNNING IN CI, USE FETCH.CI ==="); + +export const fetch = require("cross-fetch").default; diff --git a/packages/quicktype-core/src/input/io/$fetch.ts b/packages/quicktype-core/src/input/io/$fetch.ts new file mode 100644 index 000000000..e2dade593 --- /dev/null +++ b/packages/quicktype-core/src/input/io/$fetch.ts @@ -0,0 +1,11 @@ +import type CrossFetch from "cross-fetch"; + +let fetch: typeof CrossFetch; + +try { + fetch = global.fetch ?? require("cross-fetch").default; +} catch { + fetch = require("cross-fetch").default; +} + +export { fetch }; diff --git a/packages/quicktype-core/src/input/io/NodeIO.ts b/packages/quicktype-core/src/input/io/NodeIO.ts index d417d8ab2..b9b71ba92 100644 --- a/packages/quicktype-core/src/input/io/NodeIO.ts +++ b/packages/quicktype-core/src/input/io/NodeIO.ts @@ -1,4 +1,4 @@ -import * as fs from "fs"; +import * as fs from "node:fs"; import { defined, exceptionToString } from "@glideapps/ts-necessities"; import { isNode } from "browser-or-node"; @@ -10,11 +10,7 @@ import { panic } from "../../support/Support"; import { getStream } from "./get-stream"; -// We need to use cross-fetch in CI or if fetch is not available in the global scope -// We use a dynamic import to avoid punycode deprecated dependency warning on node > 20 -const fetch = process.env.CI - ? require("cross-fetch").default - : ((global as any).fetch ?? require("cross-fetch").default); +import { fetch } from "./$fetch"; interface HttpHeaders { [key: string]: string; @@ -25,10 +21,7 @@ function parseHeaders(httpHeaders?: string[]): HttpHeaders { return {}; } - return httpHeaders.reduce(( - result: HttpHeaders, - httpHeader: string, - ) => { + return httpHeaders.reduce((result: HttpHeaders, httpHeader: string) => { if (httpHeader !== undefined && httpHeader.length > 0) { const split = httpHeader.indexOf(":"); @@ -56,7 +49,9 @@ export async function readableFromFileOrURL( }); return defined(response.body) as unknown as Readable; - } else if (isNode) { + } + + if (isNode) { if (fileOrURL === "-") { // Cast node readable to isomorphic readable from readable-stream return process.stdin as unknown as Readable; diff --git a/packages/quicktype-graphql-input/package.json b/packages/quicktype-graphql-input/package.json index 24432249d..6a95cf3dd 100644 --- a/packages/quicktype-graphql-input/package.json +++ b/packages/quicktype-graphql-input/package.json @@ -16,7 +16,7 @@ "graphql": "^0.11.7" }, "devDependencies": { - "@types/node": "18.19.31", + "@types/node": "~22.14.0", "@types/graphql": "^0.11.7", "typescript": "~5.8.3" }, diff --git a/packages/quicktype-typescript-input/package.json b/packages/quicktype-typescript-input/package.json index 773c5417f..ee5b0442a 100644 --- a/packages/quicktype-typescript-input/package.json +++ b/packages/quicktype-typescript-input/package.json @@ -16,7 +16,7 @@ "@mark.probst/typescript-json-schema": "0.55.0" }, "devDependencies": { - "@types/node": "18.19.31" + "@types/node": "~22.14.0" }, "files": ["dist"] } diff --git a/packages/quicktype-vscode/package.json b/packages/quicktype-vscode/package.json index a30f0783f..702830d32 100644 --- a/packages/quicktype-vscode/package.json +++ b/packages/quicktype-vscode/package.json @@ -139,7 +139,7 @@ }, "devDependencies": { "@types/mocha": "^10.0.6", - "@types/node": "18.x", + "@types/node": "~22.14.0", "@types/node-persist": "^3.1.8", "@types/readable-stream": "^4.0.10", "@types/vscode": "^1.87.0", From 63b028f0dd692437982149fdb0066957fa93a3e9 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 17 May 2025 11:07:15 -0700 Subject: [PATCH 95/99] Fix fetch for ci but not publish (#2745) * grep in ci only but not publish --- .github/workflows/master.yaml | 1 + packages/quicktype-core/env.sh | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/master.yaml b/.github/workflows/master.yaml index 2a099c2d4..be8047ef6 100644 --- a/.github/workflows/master.yaml +++ b/.github/workflows/master.yaml @@ -14,3 +14,4 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }} + PUBLISH: true diff --git a/packages/quicktype-core/env.sh b/packages/quicktype-core/env.sh index edb8ff6f4..9d14844ae 100755 --- a/packages/quicktype-core/env.sh +++ b/packages/quicktype-core/env.sh @@ -1,8 +1,14 @@ #!/usr/bin/env bash -if [[ $CI ]] -then - grep -rl '$fetch' src | xargs sed -i '' -e 's/$fetch/$fetch.ci/g' +if [[ $PUBLISH == true ]]; then + echo 'HAS PUBLISH, exit' + exit 0 fi -exit 0 +if [[ $CI ]]; then + if [[ "$OSTYPE" == "darwin"* ]]; then + grep -rl '$fetch' src | xargs sed -i '' -e 's/$fetch/$fetch.ci/g' + else + grep -rl '$fetch' src | xargs sed -i -e 's/$fetch/$fetch.ci/g' + fi +fi From 4a20324fc60c20bc579a4e143e6a6070ee7cf7fa Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sat, 17 May 2025 11:25:24 -0700 Subject: [PATCH 96/99] Fix publish check for ci (#2746) * fix: move publish to setup step --- .github/workflows/master.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/master.yaml b/.github/workflows/master.yaml index be8047ef6..363eec663 100644 --- a/.github/workflows/master.yaml +++ b/.github/workflows/master.yaml @@ -10,8 +10,9 @@ jobs: steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup + env: + PUBLISH: true - run: npm run pub env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }} - PUBLISH: true From ea36c22e5c0cffa2d38319c4a51acff22c991b9d Mon Sep 17 00:00:00 2001 From: sakets594 Date: Sun, 18 May 2025 21:08:35 +0530 Subject: [PATCH 97/99] fix(C#): added dependency usings based on types present in renderContext (#2606) * added dependecy usings based on types present in renderContext * PR change : removed array usage for emiting , added local function to ensure single addition of "System.Collections.Generic" --------- Co-authored-by: inferrinizzard --- .../src/language/CSharp/CSharpRenderer.ts | 22 +++++++++++++++++++ .../CSharp/NewtonSoftCSharpRenderer.ts | 6 +++-- .../CSharp/SystemTextJsonCSharpRenderer.ts | 6 +++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts index e2ec815be..c8f16738f 100644 --- a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts @@ -24,6 +24,7 @@ import type { } from "../../Type"; import { directlyReachableSingleNamedType, + matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion, @@ -526,4 +527,25 @@ export class CSharpRenderer extends ConvenienceRenderer { this.emitDefaultFollowingComments(); } + + protected emitDependencyUsings(): void { + let genericEmited: boolean = false; + let ensureGenericOnce = () => { + if (!genericEmited) { + this.emitUsing("System.Collections.Generic"); + genericEmited = true; + } + } + this.typeGraph.allTypesUnordered().forEach(_ => { + matchCompoundType( + _, + _arrayType => this._csOptions.useList ? ensureGenericOnce() : undefined, + _classType => { }, + _mapType => ensureGenericOnce(), + _objectType => { }, + _unionType => { } + ) + }); + } + } diff --git a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts index df9e1a6a0..3c3d91cc9 100644 --- a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts @@ -150,8 +150,10 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } protected emitUsings(): void { - // FIXME: We need System.Collections.Generic whenever we have maps or use List. - if (!this._needAttributes && !this._needHelpers) return; + if (!this._needAttributes && !this._needHelpers) { + this.emitDependencyUsings(); + return; + } super.emitUsings(); this.ensureBlankLine(); diff --git a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts index fc5a205e4..3e3def7a5 100644 --- a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts @@ -152,8 +152,10 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } protected emitUsings(): void { - // FIXME: We need System.Collections.Generic whenever we have maps or use List. - if (!this._needAttributes && !this._needHelpers) return; + if (!this._needAttributes && !this._needHelpers) { + this.emitDependencyUsings(); + return; + } super.emitUsings(); this.ensureBlankLine(); From b747e4b01a479d0bf3b415722cf4dd259ece6d3b Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Sun, 18 May 2025 09:50:31 -0700 Subject: [PATCH 98/99] chore: Clean up OptionDefinition (#2747) * expose enum option value map * update option.type to optionType union * add comments to OptionDefinition --- .../src/RendererOptions/index.ts | 17 ++++---- .../src/RendererOptions/types.ts | 19 ++++++-- src/index.ts | 43 +++++++++---------- 3 files changed, 44 insertions(+), 35 deletions(-) diff --git a/packages/quicktype-core/src/RendererOptions/index.ts b/packages/quicktype-core/src/RendererOptions/index.ts index 3c61dcbdb..72d9902fb 100644 --- a/packages/quicktype-core/src/RendererOptions/index.ts +++ b/packages/quicktype-core/src/RendererOptions/index.ts @@ -77,7 +77,7 @@ export class BooleanOption extends Option { super({ name, kind, - type: Boolean, + optionType: "boolean", description, defaultValue, }); @@ -134,15 +134,14 @@ export class StringOption extends Option { defaultValue: string, kind: OptionKind = "primary", ) { - const definition = { + super({ name, kind, - type: String, + optionType: "string", description, typeLabel, defaultValue, - }; - super(definition); + }); } } @@ -163,15 +162,15 @@ export class EnumOption< defaultValue: NoInfer, kind: OptionKind = "primary", ) { - const definition = { + super({ name, kind, - type: String, + optionType: "enum", description, typeLabel: Object.keys(values).join("|"), defaultValue, - }; - super(definition); + values, + }); this._values = values; } diff --git a/packages/quicktype-core/src/RendererOptions/types.ts b/packages/quicktype-core/src/RendererOptions/types.ts index cc8ff70eb..601e13e4c 100644 --- a/packages/quicktype-core/src/RendererOptions/types.ts +++ b/packages/quicktype-core/src/RendererOptions/types.ts @@ -8,14 +8,25 @@ import type { EnumOption, Option } from "./index"; export type OptionKind = "primary" | "secondary" | "cli"; export interface OptionDefinition { + /** Option Name */ + name: Name; + /** Option Alias for CLI */ alias?: string; - defaultOption?: boolean; - defaultValue?: T; + /** Option Description */ description: string; + /** Category of Option */ + optionType: "string" | "boolean" | "enum"; + /** Default Value for Option */ + defaultValue?: T; + /** Enum only, map of possible keys and values */ + values?: Record; + + /** Primary, Secondary, or CLI */ kind?: OptionKind; + /** Whether multiple CLI inputs are allowed for this option */ multiple?: boolean; - name: Name; - type: StringConstructor | BooleanConstructor; + + // Unknown typeLabel?: string; } diff --git a/src/index.ts b/src/index.ts index 550e90d43..c7d4a3aee 100644 --- a/src/index.ts +++ b/src/index.ts @@ -411,7 +411,7 @@ function makeOptionDefinitions( { name: "out", alias: "o", - type: String, + optionType: "string", typeLabel: "FILE", description: "The output file. Determines --lang and --top-level.", kind: "cli", @@ -419,7 +419,7 @@ function makeOptionDefinitions( { name: "top-level", alias: "t", - type: String, + optionType: "string", typeLabel: "NAME", description: "The name for the top level type.", kind: "cli", @@ -432,7 +432,7 @@ function makeOptionDefinitions( { name: "lang", alias: "l", - type: String, + optionType: "string", typeLabel: "LANG", description: "The target language.", kind: "cli", @@ -442,7 +442,7 @@ function makeOptionDefinitions( { name: "src-lang", alias: "s", - type: String, + optionType: "string", defaultValue: undefined, typeLabel: "SRC_LANG", description: "The source language (default is json).", @@ -450,16 +450,15 @@ function makeOptionDefinitions( }, { name: "src", - type: String, + optionType: "string", multiple: true, - defaultOption: true, typeLabel: "FILE|URL|DIRECTORY", description: "The file, url, or data directory to type.", kind: "cli", }, { name: "src-urls", - type: String, + optionType: "string", typeLabel: "FILE", description: "Tracery grammar describing URLs to crawl.", kind: "cli", @@ -469,7 +468,7 @@ function makeOptionDefinitions( mapMap(mapFromObject(inferenceFlags), (flag, name) => { return { name: dashedFromCamelCase(negatedInferenceFlagName(name)), - type: Boolean, + optionType: "boolean" as const, description: flag.negationDescription + ".", kind: "cli" as const, }; @@ -478,21 +477,21 @@ function makeOptionDefinitions( const afterInference: OptionDefinition[] = [ { name: "graphql-schema", - type: String, + optionType: "string", typeLabel: "FILE", description: "GraphQL introspection file.", kind: "cli", }, { name: "graphql-introspect", - type: String, + optionType: "string", typeLabel: "URL", description: "Introspect GraphQL schema from a server.", kind: "cli", }, { name: "http-method", - type: String, + optionType: "string", typeLabel: "METHOD", description: "HTTP method to use for the GraphQL introspection query.", @@ -500,7 +499,7 @@ function makeOptionDefinitions( }, { name: "http-header", - type: String, + optionType: "string", multiple: true, typeLabel: "HEADER", description: @@ -510,7 +509,7 @@ function makeOptionDefinitions( { name: "additional-schema", alias: "S", - type: String, + optionType: "string", multiple: true, typeLabel: "FILE", description: "Register the $id's of additional JSON Schema files.", @@ -518,38 +517,38 @@ function makeOptionDefinitions( }, { name: "no-render", - type: Boolean, + optionType: "boolean", description: "Don't render output.", kind: "cli", }, { name: "alphabetize-properties", - type: Boolean, + optionType: "boolean", description: "Alphabetize order of class properties.", kind: "cli", }, { name: "all-properties-optional", - type: Boolean, + optionType: "boolean", description: "Make all class properties optional.", kind: "cli", }, { name: "build-markov-chain", - type: String, + optionType: "string", typeLabel: "FILE", description: "Markov chain corpus filename.", kind: "cli", }, { name: "quiet", - type: Boolean, + optionType: "boolean", description: "Don't show issues in the generated code.", kind: "cli", }, { name: "debug", - type: String, + optionType: "string", typeLabel: "OPTIONS or all", description: "Comma separated debug options: print-graph, print-reconstitution, print-gather-names, print-transformations, print-schema-resolving, print-times, provenance", @@ -557,7 +556,7 @@ function makeOptionDefinitions( }, { name: "telemetry", - type: String, + optionType: "string", typeLabel: "enable|disable", description: "Enable anonymous telemetry to help improve quicktype", kind: "cli", @@ -565,14 +564,14 @@ function makeOptionDefinitions( { name: "help", alias: "h", - type: Boolean, + optionType: "boolean", description: "Get some help.", kind: "cli", }, { name: "version", alias: "v", - type: Boolean, + optionType: "boolean", description: "Display the version of quicktype", kind: "cli", }, From 41950205609abd8c18a8e315ea87d8904f625012 Mon Sep 17 00:00:00 2001 From: inferrinizzard Date: Mon, 26 May 2025 09:54:12 -0700 Subject: [PATCH 99/99] fix: Extend OptionDefinition from command-line-args, fix positional arg bug (#2767) * add command-line-args as devDep to core * extend option definition type from command line args * add map from optionType to type --- package-lock.json | 1 + packages/quicktype-core/package.json | 1 + packages/quicktype-core/src/RendererOptions/types.ts | 9 +++++---- src/index.ts | 9 ++++++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index dc84a547c..06837b485 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5930,6 +5930,7 @@ "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.25", "@types/wordwrap": "^1.0.3", + "command-line-args": "^5.2.1", "typescript": "~5.8.3" } }, diff --git a/packages/quicktype-core/package.json b/packages/quicktype-core/package.json index 902557baa..769199b79 100644 --- a/packages/quicktype-core/package.json +++ b/packages/quicktype-core/package.json @@ -36,6 +36,7 @@ "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.25", "@types/wordwrap": "^1.0.3", + "command-line-args": "^5.2.1", "typescript": "~5.8.3" }, "overrides": { diff --git a/packages/quicktype-core/src/RendererOptions/types.ts b/packages/quicktype-core/src/RendererOptions/types.ts index 601e13e4c..f9f1be825 100644 --- a/packages/quicktype-core/src/RendererOptions/types.ts +++ b/packages/quicktype-core/src/RendererOptions/types.ts @@ -1,4 +1,5 @@ import type { EnumOption, Option } from "./index"; +import type { OptionDefinition as CommandLineArgsOptionDefinition } from "command-line-args"; /** * Primary options show up in the web UI in the "Language" settings tab, @@ -6,16 +7,16 @@ import type { EnumOption, Option } from "./index"; * CLI is only for cli */ export type OptionKind = "primary" | "secondary" | "cli"; +export type OptionType = "string" | "boolean" | "enum"; -export interface OptionDefinition { +export interface OptionDefinition + extends CommandLineArgsOptionDefinition { /** Option Name */ name: Name; - /** Option Alias for CLI */ - alias?: string; /** Option Description */ description: string; /** Category of Option */ - optionType: "string" | "boolean" | "enum"; + optionType: OptionType; /** Default Value for Option */ defaultValue?: T; /** Enum only, map of possible keys and values */ diff --git a/src/index.ts b/src/index.ts index c7d4a3aee..856542c96 100644 --- a/src/index.ts +++ b/src/index.ts @@ -455,6 +455,7 @@ function makeOptionDefinitions( typeLabel: "FILE|URL|DIRECTORY", description: "The file, url, or data directory to type.", kind: "cli", + defaultOption: true, }, { name: "src-urls", @@ -725,7 +726,13 @@ function parseOptions( ): Partial { let opts: commandLineArgs.CommandLineOptions; try { - opts = commandLineArgs(definitions, { argv, partial }); + opts = commandLineArgs( + definitions.map((def) => ({ + ...def, + type: def.optionType === "boolean" ? Boolean : String, + })), + { argv, partial }, + ); } catch (e) { assert(!partial, "Partial option parsing should not have failed"); return messageError("DriverCLIOptionParsingFailed", {

      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ࣀ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