From 51713f99a5e72b00b61cd71e873569a4b04cf4bc Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 19 Sep 2024 13:15:02 +0000 Subject: [PATCH] ci: Generate code --- test/snapshots/blueprint.test.ts.md | 1304 +++++++++++++--- test/snapshots/blueprint.test.ts.snap | Bin 12072 -> 15971 bytes test/snapshots/seam-blueprint.test.ts.md | 1637 ++++++++++++++++++++ test/snapshots/seam-blueprint.test.ts.snap | Bin 24580 -> 33651 bytes 4 files changed, 2755 insertions(+), 186 deletions(-) diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index cc0ee09..db1ab13 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -847,12 +847,750 @@ Generated by [AVA](https://avajs.dev). }, title: 'List foos', }, + { + codeSamples: [ + { + code: { + javascript: { + request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', + request_syntax: 'javascript', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `foos->get(foo_id:"8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, + request_syntax: 'php', + response: '["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]', + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: 'seam.foos.get(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33")', + request_syntax: 'python', + response: 'Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])', + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: 'seam.foos.get(foo_id: "8d7e0b3a-b889-49a7-9164-4b71a0506a33")', + request_syntax: 'ruby', + response: '{"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}', + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: 'seam foos get --foo_id "8d7e0b3a-b889-49a7-9164-4b71a0506a33"', + request_syntax: 'bash', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the way to get a foo', + request: { + parameters: { + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + }, + path: '/foos/get', + }, + response: { + body: { + foo: { + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, + }, + }, + }, + title: 'Get a foo by ID', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'get', + path: '/foos/get', + request: { + methods: [ + 'GET', + ], + parameters: [], + preferredMethod: 'GET', + semanticMethod: 'GET', + }, + response: { + description: 'Get a foo by ID.', + resourceType: 'foo', + responseKey: 'foo', + responseType: 'resource', + }, + title: 'Get a foo', + }, + { + codeSamples: [ + { + code: { + javascript: { + request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', + request_syntax: 'javascript', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `foos->get(foo_id:"8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, + request_syntax: 'php', + response: '["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]', + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: 'seam.foos.get(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33")', + request_syntax: 'python', + response: 'Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])', + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: 'seam.foos.get(foo_id: "8d7e0b3a-b889-49a7-9164-4b71a0506a33")', + request_syntax: 'ruby', + response: '{"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}', + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: 'seam foos get --foo_id "8d7e0b3a-b889-49a7-9164-4b71a0506a33"', + request_syntax: 'bash', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the way to get a foo', + request: { + parameters: { + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + }, + path: '/foos/get', + }, + response: { + body: { + foo: { + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, + }, + }, + }, + title: 'Get a foo by ID', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'get', + path: '/foos/get', + request: { + methods: [ + 'POST', + ], + parameters: [], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'Get a foo by ID.', + resourceType: 'foo', + responseKey: 'foo', + responseType: 'resource', + }, + title: 'Get a foo', + }, + { + codeSamples: [ + { + code: { + javascript: { + request: 'await seam.foos.list()', + request_syntax: 'javascript', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `foos->list()`, + request_syntax: 'php', + response: '[["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]]', + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: 'seam.foos.list()', + request_syntax: 'python', + response: '[Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])]', + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: 'seam.foos.list()', + request_syntax: 'ruby', + response: '[{"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}]', + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: 'seam foos list ', + request_syntax: 'bash', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the way to list foos', + request: { + parameters: {}, + path: '/foos/list', + }, + response: { + body: { + foos: [ + { + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, + }, + ], + }, + }, + title: 'List foos', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/foos/list', + request: { + methods: [ + 'GET', + ], + parameters: [], + preferredMethod: 'GET', + semanticMethod: 'GET', + }, + response: { + description: 'List all foos.', + resourceType: 'foo', + responseKey: 'foos', + responseType: 'resource_list', + }, + title: 'List foos', + }, + { + codeSamples: [ + { + code: { + javascript: { + request: 'await seam.foos.list()', + request_syntax: 'javascript', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `foos->list()`, + request_syntax: 'php', + response: '[["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]]', + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: 'seam.foos.list()', + request_syntax: 'python', + response: '[Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])]', + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: 'seam.foos.list()', + request_syntax: 'ruby', + response: '[{"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}]', + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: 'seam foos list ', + request_syntax: 'bash', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the way to list foos', + request: { + parameters: {}, + path: '/foos/list', + }, + response: { + body: { + foos: [ + { + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, + }, + ], + }, + }, + title: 'List foos', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/foos/list', + request: { + methods: [ + 'POST', + ], + parameters: [], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'List all foos.', + resourceType: 'foo', + responseKey: 'foos', + responseType: 'resource_list', + }, + title: 'List foos', + }, + ], + name: 'foos', + namespace: null, + path: '/foos', + subroutes: [], + }, + { + endpoints: [ + { + codeSamples: [ + { + code: { + javascript: { + request: 'await seam.transport.air.planes.list()', + request_syntax: 'javascript', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `transport->air->planes->list()`, + request_syntax: 'php', + response: '[["plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"]]', + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: 'seam.transport.air.planes.list()', + request_syntax: 'python', + response: '[Plane(plane_id="9d3163f9-9185-40d3-a0ce-a03d3c7ce402", name="Woosh")]', + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: 'seam.transport.air.planes.list()', + request_syntax: 'ruby', + response: '[{"plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"}]', + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: 'seam transport air planes list ', + request_syntax: 'bash', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the wya to get all plans', + request: { + parameters: {}, + path: '/transport/air/planes/list', + }, + response: { + body: { + planes: [ + { + name: 'Woosh', + plane_id: '9d3163f9-9185-40d3-a0ce-a03d3c7ce402', + }, + ], + }, + }, + title: 'List planes', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/transport/air/planes/list', + request: { + methods: [ + 'GET', + ], + parameters: [], + preferredMethod: 'GET', + semanticMethod: 'GET', + }, + response: { + description: 'List all planes.', + resourceType: 'plane', + responseKey: 'planes', + responseType: 'resource_list', + }, + title: 'List planes', + }, + { + codeSamples: [ + { + code: { + javascript: { + request: 'await seam.transport.air.planes.list()', + request_syntax: 'javascript', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `transport->air->planes->list()`, + request_syntax: 'php', + response: '[["plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"]]', + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: 'seam.transport.air.planes.list()', + request_syntax: 'python', + response: '[Plane(plane_id="9d3163f9-9185-40d3-a0ce-a03d3c7ce402", name="Woosh")]', + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: 'seam.transport.air.planes.list()', + request_syntax: 'ruby', + response: '[{"plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"}]', + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: 'seam transport air planes list ', + request_syntax: 'bash', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the wya to get all plans', + request: { + parameters: {}, + path: '/transport/air/planes/list', + }, + response: { + body: { + planes: [ + { + name: 'Woosh', + plane_id: '9d3163f9-9185-40d3-a0ce-a03d3c7ce402', + }, + ], + }, + }, + title: 'List planes', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/transport/air/planes/list', + request: { + methods: [ + 'GET', + ], + parameters: [], + preferredMethod: 'GET', + semanticMethod: 'GET', + }, + response: { + description: 'List all planes.', + resourceType: 'plane', + responseKey: 'planes', + responseType: 'resource_list', + }, + title: 'List planes', + }, + { + codeSamples: [ + { + code: { + javascript: { + request: 'await seam.transport.air.planes.list()', + request_syntax: 'javascript', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `transport->air->planes->list()`, + request_syntax: 'php', + response: '[["plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"]]', + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: 'seam.transport.air.planes.list()', + request_syntax: 'python', + response: '[Plane(plane_id="9d3163f9-9185-40d3-a0ce-a03d3c7ce402", name="Woosh")]', + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: 'seam.transport.air.planes.list()', + request_syntax: 'ruby', + response: '[{"plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"}]', + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: 'seam transport air planes list ', + request_syntax: 'bash', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the wya to get all plans', + request: { + parameters: {}, + path: '/transport/air/planes/list', + }, + response: { + body: { + planes: [ + { + name: 'Woosh', + plane_id: '9d3163f9-9185-40d3-a0ce-a03d3c7ce402', + }, + ], + }, + }, + title: 'List planes', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/transport/air/planes/list', + request: { + methods: [ + 'GET', + ], + parameters: [], + preferredMethod: 'GET', + semanticMethod: 'GET', + }, + response: { + description: 'List all planes.', + resourceType: 'plane', + responseKey: 'planes', + responseType: 'resource_list', + }, + title: 'List planes', + }, ], - name: 'foos', - namespace: null, - path: '/foos', + name: 'planes', + namespace: { + path: '/transport/air', + }, + path: '/transport/air/planes', subroutes: [], }, + ], + title: 'Foo', + } + +## createBlueprint: with formatCode + +> blueprint + + { + resources: { + foo: { + description: 'A foo resource.', + properties: [ + { + deprecationMessage: '', + description: 'Foo id', + format: 'id', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'foo_id', + }, + { + deprecationMessage: '', + description: 'Foo name', + format: 'string', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + { + deprecationMessage: 'This prop will be removed in the next version', + description: 'This prop is deprecated', + format: 'string', + isDeprecated: true, + isUndocumented: false, + jsonType: 'string', + name: 'deprecated_prop', + }, + { + deprecationMessage: '', + description: 'This prop is undocumented', + format: 'string', + isDeprecated: false, + isUndocumented: true, + jsonType: 'string', + name: 'undocumented_prop', + }, + { + deprecationMessage: '', + description: 'This prop is nullable', + format: 'string', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'nullable_prop', + }, + { + deprecationMessage: '', + description: 'This prop is a number', + format: 'number', + isDeprecated: false, + isUndocumented: false, + jsonType: 'number', + name: 'number_prop', + }, + { + deprecationMessage: '', + description: '', + format: 'object', + isDeprecated: false, + isUndocumented: false, + jsonType: 'object', + name: 'object_prop', + properties: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'foo', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'list', + isDeprecated: false, + isUndocumented: false, + jsonType: 'array', + name: 'array_prop', + }, + ], + resourceType: 'foo', + }, + plane: { + description: 'A plane resource.', + properties: [ + { + deprecationMessage: '', + description: 'plane id', + format: 'id', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'plane_id', + }, + { + deprecationMessage: '', + description: 'Planej name', + format: 'string', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + ], + resourceType: 'plane', + }, + }, + routes: [ { endpoints: [ { @@ -860,58 +1598,277 @@ Generated by [AVA](https://avajs.dev). { code: { javascript: { - request: 'await seam.transport.air.planes.list()', + request: `// javascript␊ + await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, + request_syntax: 'javascript', + response: `// javascript␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `// php␊ + foos->get(foo_id:"8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, + request_syntax: 'php', + response: `// php␊ + ["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]`, + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: `// python␊ + seam.foos.get(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, + request_syntax: 'python', + response: `// python␊ + Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])`, + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: `// ruby␊ + seam.foos.get(foo_id: "8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, + request_syntax: 'ruby', + response: `// ruby␊ + {"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}`, + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: `// bash␊ + seam foos get --foo_id "8d7e0b3a-b889-49a7-9164-4b71a0506a33"`, + request_syntax: 'bash', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the way to get a foo', + request: { + parameters: { + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + }, + path: '/foos/get', + }, + response: { + body: { + foo: { + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, + }, + }, + }, + title: 'Get a foo by ID', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'get', + path: '/foos/get', + request: { + methods: [ + 'GET', + ], + parameters: [], + preferredMethod: 'GET', + semanticMethod: 'GET', + }, + response: { + description: 'Get a foo by ID.', + resourceType: 'foo', + responseKey: 'foo', + responseType: 'resource', + }, + title: 'Get a foo', + }, + { + codeSamples: [ + { + code: { + javascript: { + request: `// javascript␊ + await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, request_syntax: 'javascript', - response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response: `// javascript␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, response_syntax: 'javascript', title: 'JavaScript', }, php: { - request: `transport->air->planes->list()`, + request: `// php␊ + foos->get(foo_id:"8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, request_syntax: 'php', - response: '[["plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"]]', + response: `// php␊ + ["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]`, response_syntax: 'php', title: 'PHP', }, python: { - request: 'seam.transport.air.planes.list()', + request: `// python␊ + seam.foos.get(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, request_syntax: 'python', - response: '[Plane(plane_id="9d3163f9-9185-40d3-a0ce-a03d3c7ce402", name="Woosh")]', + response: `// python␊ + Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])`, response_syntax: 'python', title: 'Python', }, ruby: { - request: 'seam.transport.air.planes.list()', + request: `// ruby␊ + seam.foos.get(foo_id: "8d7e0b3a-b889-49a7-9164-4b71a0506a33")`, request_syntax: 'ruby', - response: '[{"plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"}]', + response: `// ruby␊ + {"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}`, response_syntax: 'ruby', title: 'Ruby', }, seam_cli: { - request: 'seam transport air planes list ', + request: `// bash␊ + seam foos get --foo_id "8d7e0b3a-b889-49a7-9164-4b71a0506a33"`, request_syntax: 'bash', - response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, response_syntax: 'json', title: 'Seam CLI', }, }, - description: 'This is the wya to get all plans', + description: 'This is the way to get a foo', + request: { + parameters: { + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + }, + path: '/foos/get', + }, + response: { + body: { + foo: { + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, + }, + }, + }, + title: 'Get a foo by ID', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'get', + path: '/foos/get', + request: { + methods: [ + 'POST', + ], + parameters: [], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'Get a foo by ID.', + resourceType: 'foo', + responseKey: 'foo', + responseType: 'resource', + }, + title: 'Get a foo', + }, + { + codeSamples: [ + { + code: { + javascript: { + request: `// javascript␊ + await seam.foos.list()`, + request_syntax: 'javascript', + response: `// javascript␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `// php␊ + foos->list()`, + request_syntax: 'php', + response: `// php␊ + [["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]]`, + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: `// python␊ + seam.foos.list()`, + request_syntax: 'python', + response: `// python␊ + [Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])]`, + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: `// ruby␊ + seam.foos.list()`, + request_syntax: 'ruby', + response: `// ruby␊ + [{"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}]`, + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: `// bash␊ + seam foos list `, + request_syntax: 'bash', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the way to list foos', request: { parameters: {}, - path: '/transport/air/planes/list', + path: '/foos/list', }, response: { body: { - planes: [ + foos: [ { - name: 'Woosh', - plane_id: '9d3163f9-9185-40d3-a0ce-a03d3c7ce402', + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, }, ], }, }, - title: 'List planes', + title: 'List foos', }, ], deprecationMessage: '', @@ -919,7 +1876,7 @@ Generated by [AVA](https://avajs.dev). isDeprecated: false, isUndocumented: false, name: 'list', - path: '/transport/air/planes/list', + path: '/foos/list', request: { methods: [ 'GET', @@ -929,70 +1886,89 @@ Generated by [AVA](https://avajs.dev). semanticMethod: 'GET', }, response: { - description: 'List all planes.', - resourceType: 'plane', - responseKey: 'planes', + description: 'List all foos.', + resourceType: 'foo', + responseKey: 'foos', responseType: 'resource_list', }, - title: 'List planes', + title: 'List foos', }, { codeSamples: [ { code: { javascript: { - request: 'await seam.transport.air.planes.list()', + request: `// javascript␊ + await seam.foos.list()`, request_syntax: 'javascript', - response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response: `// javascript␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, response_syntax: 'javascript', title: 'JavaScript', }, php: { - request: `transport->air->planes->list()`, + request: `// php␊ + foos->list()`, request_syntax: 'php', - response: '[["plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"]]', + response: `// php␊ + [["foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => null,"number_prop" => 10,"object_prop" => ["foo" => "bar"],"array_prop" => ["foo", "bar"]]]`, response_syntax: 'php', title: 'PHP', }, python: { - request: 'seam.transport.air.planes.list()', + request: `// python␊ + seam.foos.list()`, request_syntax: 'python', - response: '[Plane(plane_id="9d3163f9-9185-40d3-a0ce-a03d3c7ce402", name="Woosh")]', + response: `// python␊ + [Foo(foo_id="8d7e0b3a-b889-49a7-9164-4b71a0506a33", name="Best foo", nullable_prop=None, number_prop=10, object_prop={"foo":"bar"}, array_prop=["foo","bar"])]`, response_syntax: 'python', title: 'Python', }, ruby: { - request: 'seam.transport.air.planes.list()', + request: `// ruby␊ + seam.foos.list()`, request_syntax: 'ruby', - response: '[{"plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"}]', + response: `// ruby␊ + [{"foo_id" => "8d7e0b3a-b889-49a7-9164-4b71a0506a33","name" => "Best foo","nullable_prop" => nil,"number_prop" => 10,"object_prop" => {"foo":"bar"},"array_prop" => ["foo","bar"]}]`, response_syntax: 'ruby', title: 'Ruby', }, seam_cli: { - request: 'seam transport air planes list ', + request: `// bash␊ + seam foos list `, request_syntax: 'bash', - response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, response_syntax: 'json', title: 'Seam CLI', }, }, - description: 'This is the wya to get all plans', + description: 'This is the way to list foos', request: { parameters: {}, - path: '/transport/air/planes/list', + path: '/foos/list', }, response: { body: { - planes: [ - { - name: 'Woosh', - plane_id: '9d3163f9-9185-40d3-a0ce-a03d3c7ce402', + foos: [ + { + array_prop: [ + 'foo', + 'bar', + ], + foo_id: '8d7e0b3a-b889-49a7-9164-4b71a0506a33', + name: 'Best foo', + nullable_prop: null, + number_prop: 10, + object_prop: { + foo: 'bar', + }, }, ], }, }, - title: 'List planes', + title: 'List foos', }, ], deprecationMessage: '', @@ -1000,158 +1976,23 @@ Generated by [AVA](https://avajs.dev). isDeprecated: false, isUndocumented: false, name: 'list', - path: '/transport/air/planes/list', + path: '/foos/list', request: { methods: [ - 'GET', + 'POST', ], parameters: [], - preferredMethod: 'GET', - semanticMethod: 'GET', + preferredMethod: 'POST', + semanticMethod: 'POST', }, response: { - description: 'List all planes.', - resourceType: 'plane', - responseKey: 'planes', + description: 'List all foos.', + resourceType: 'foo', + responseKey: 'foos', responseType: 'resource_list', }, - title: 'List planes', - }, - ], - name: 'planes', - namespace: { - path: '/transport/air', - }, - path: '/transport/air/planes', - subroutes: [], - }, - ], - title: 'Foo', - } - -## createBlueprint: with formatCode - -> blueprint - - { - resources: { - foo: { - description: 'A foo resource.', - properties: [ - { - deprecationMessage: '', - description: 'Foo id', - format: 'id', - isDeprecated: false, - isUndocumented: false, - jsonType: 'string', - name: 'foo_id', - }, - { - deprecationMessage: '', - description: 'Foo name', - format: 'string', - isDeprecated: false, - isUndocumented: false, - jsonType: 'string', - name: 'name', - }, - { - deprecationMessage: 'This prop will be removed in the next version', - description: 'This prop is deprecated', - format: 'string', - isDeprecated: true, - isUndocumented: false, - jsonType: 'string', - name: 'deprecated_prop', - }, - { - deprecationMessage: '', - description: 'This prop is undocumented', - format: 'string', - isDeprecated: false, - isUndocumented: true, - jsonType: 'string', - name: 'undocumented_prop', - }, - { - deprecationMessage: '', - description: 'This prop is nullable', - format: 'string', - isDeprecated: false, - isUndocumented: false, - jsonType: 'string', - name: 'nullable_prop', - }, - { - deprecationMessage: '', - description: 'This prop is a number', - format: 'number', - isDeprecated: false, - isUndocumented: false, - jsonType: 'number', - name: 'number_prop', - }, - { - deprecationMessage: '', - description: '', - format: 'object', - isDeprecated: false, - isUndocumented: false, - jsonType: 'object', - name: 'object_prop', - properties: [ - { - deprecationMessage: '', - description: '', - format: 'string', - isDeprecated: false, - isUndocumented: false, - jsonType: 'string', - name: 'foo', - }, - ], - }, - { - deprecationMessage: '', - description: '', - format: 'list', - isDeprecated: false, - isUndocumented: false, - jsonType: 'array', - name: 'array_prop', - }, - ], - resourceType: 'foo', - }, - plane: { - description: 'A plane resource.', - properties: [ - { - deprecationMessage: '', - description: 'plane id', - format: 'id', - isDeprecated: false, - isUndocumented: false, - jsonType: 'string', - name: 'plane_id', - }, - { - deprecationMessage: '', - description: 'Planej name', - format: 'string', - isDeprecated: false, - isUndocumented: false, - jsonType: 'string', - name: 'name', + title: 'List foos', }, - ], - resourceType: 'plane', - }, - }, - routes: [ - { - endpoints: [ { codeSamples: [ { @@ -2142,6 +2983,97 @@ Generated by [AVA](https://avajs.dev). }, title: 'List planes', }, + { + codeSamples: [ + { + code: { + javascript: { + request: `// javascript␊ + await seam.transport.air.planes.list()`, + request_syntax: 'javascript', + response: `// javascript␊ + [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, + response_syntax: 'javascript', + title: 'JavaScript', + }, + php: { + request: `// php␊ + transport->air->planes->list()`, + request_syntax: 'php', + response: `// php␊ + [["plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"]]`, + response_syntax: 'php', + title: 'PHP', + }, + python: { + request: `// python␊ + seam.transport.air.planes.list()`, + request_syntax: 'python', + response: `// python␊ + [Plane(plane_id="9d3163f9-9185-40d3-a0ce-a03d3c7ce402", name="Woosh")]`, + response_syntax: 'python', + title: 'Python', + }, + ruby: { + request: `// ruby␊ + seam.transport.air.planes.list()`, + request_syntax: 'ruby', + response: `// ruby␊ + [{"plane_id" => "9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name" => "Woosh"}]`, + response_syntax: 'ruby', + title: 'Ruby', + }, + seam_cli: { + request: `// bash␊ + seam transport air planes list `, + request_syntax: 'bash', + response: `// json␊ + [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, + response_syntax: 'json', + title: 'Seam CLI', + }, + }, + description: 'This is the wya to get all plans', + request: { + parameters: {}, + path: '/transport/air/planes/list', + }, + response: { + body: { + planes: [ + { + name: 'Woosh', + plane_id: '9d3163f9-9185-40d3-a0ce-a03d3c7ce402', + }, + ], + }, + }, + title: 'List planes', + }, + ], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/transport/air/planes/list', + request: { + methods: [ + 'GET', + ], + parameters: [], + preferredMethod: 'GET', + semanticMethod: 'GET', + }, + response: { + description: 'List all planes.', + resourceType: 'plane', + responseKey: 'planes', + responseType: 'resource_list', + }, + title: 'List planes', + }, ], name: 'planes', namespace: { diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index 7d8cf9546614e84833b3f857473f5da66ff8b0fd..2a10a202c58f3c9f20422e54a27a288b2ebb2cc1 100644 GIT binary patch literal 15971 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 literal 12072 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 RM&p&f$mozx&Kwcp{{kxpbI$+( diff --git a/test/snapshots/seam-blueprint.test.ts.md b/test/snapshots/seam-blueprint.test.ts.md index e7b7737..6bceff0 100644 --- a/test/snapshots/seam-blueprint.test.ts.md +++ b/test/snapshots/seam-blueprint.test.ts.md @@ -1339,6 +1339,84 @@ Generated by [AVA](https://avajs.dev). ], resourceType: 'event', }, + thermostat_schedule: { + description: '', + properties: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'datetime', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'created_at', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'datetime', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'ends_at', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isUndocumented: false, + jsonType: 'number', + name: 'max_override_period_minutes', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + { + deprecationMessage: '', + description: '', + format: 'datetime', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'starts_at', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isUndocumented: false, + jsonType: 'string', + name: 'thermostat_schedule_id', + }, + ], + resourceType: 'thermostat_schedule', + }, }, routes: [ { @@ -4077,6 +4155,1565 @@ Generated by [AVA](https://avajs.dev). path: '/events', subroutes: [], }, + { + endpoints: [ + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'activate_climate_preset', + path: '/thermostats/activate_climate_preset', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'cool', + path: '/thermostats/cool', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'boolean', + name: 'sync', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'create_climate_preset', + path: '/thermostats/create_climate_preset', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'fan_mode_setting', + values: [ + { + name: 'auto', + }, + { + name: 'on', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'hvac_mode_setting', + values: [ + { + name: 'off', + }, + { + name: 'heat', + }, + { + name: 'cool', + }, + { + name: 'heat_cool', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'boolean', + name: 'manual_override_allowed', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'delete_climate_preset', + path: '/thermostats/delete_climate_preset', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: 'Use `/devices/get` instead.', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'get', + path: '/thermostats/get', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'heat', + path: '/thermostats/heat', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'boolean', + name: 'sync', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'heat_cool', + path: '/thermostats/heat_cool', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'boolean', + name: 'sync', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/thermostats/list', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'connect_webview_id', + }, + { + deprecationMessage: '', + description: 'List all devices owned by this connected account', + format: 'id', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'connected_account_id', + }, + { + deprecationMessage: '', + description: '', + format: 'list', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'array', + name: 'connected_account_ids', + }, + { + deprecationMessage: '', + description: '', + format: 'datetime', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'created_before', + }, + { + deprecationMessage: '', + description: '', + format: 'record', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'object', + name: 'custom_metadata_has', + }, + { + deprecationMessage: '', + description: '', + format: 'list', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'array', + name: 'device_ids', + }, + { + deprecationMessage: '', + description: '', + format: 'list', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'array', + name: 'device_types', + }, + { + deprecationMessage: '', + description: '', + format: 'list', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'array', + name: 'exclude_if', + }, + { + deprecationMessage: '', + description: '', + format: 'list', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'array', + name: 'include_if', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'limit', + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'manufacturer', + values: [ + { + name: 'akuvox', + }, + { + name: 'august', + }, + { + name: 'avigilon_alta', + }, + { + name: 'brivo', + }, + { + name: 'butterflymx', + }, + { + name: 'doorking', + }, + { + name: 'four_suites', + }, + { + name: 'genie', + }, + { + name: 'igloo', + }, + { + name: 'keywe', + }, + { + name: 'kwikset', + }, + { + name: 'linear', + }, + { + name: 'lockly', + }, + { + name: 'nuki', + }, + { + name: 'philia', + }, + { + name: 'salto', + }, + { + name: 'samsung', + }, + { + name: 'schlage', + }, + { + name: 'seam', + }, + { + name: 'unknown', + }, + { + name: 'wyze', + }, + { + name: 'yale', + }, + { + name: 'minut', + }, + { + name: 'two_n', + }, + { + name: 'ttlock', + }, + { + name: 'nest', + }, + { + name: 'igloohome', + }, + { + name: 'ecobee', + }, + { + name: 'hubitat', + }, + { + name: 'controlbyweb', + }, + { + name: 'smartthings', + }, + { + name: 'dormakaba_oracode', + }, + { + name: 'tedee', + }, + { + name: 'honeywell_resideo', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'user_identifier_key', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'off', + path: '/thermostats/off', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'boolean', + name: 'sync', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'set_fallback_climate_preset', + path: '/thermostats/set_fallback_climate_preset', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'set_fan_mode', + path: '/thermostats/set_fan_mode', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: 'use fan_mode_setting instead.', + description: '', + format: 'enum', + isDeprecated: true, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'fan_mode', + values: [ + { + name: 'auto', + }, + { + name: 'on', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'fan_mode_setting', + values: [ + { + name: 'auto', + }, + { + name: 'on', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'boolean', + name: 'sync', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'update_climate_preset', + path: '/thermostats/update_climate_preset', + request: { + methods: [ + 'PATCH', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'fan_mode_setting', + values: [ + { + name: 'auto', + }, + { + name: 'on', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'hvac_mode_setting', + values: [ + { + name: 'off', + }, + { + name: 'heat', + }, + { + name: 'cool', + }, + { + name: 'heat_cool', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'boolean', + name: 'manual_override_allowed', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + ], + preferredMethod: 'PATCH', + semanticMethod: 'PATCH', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'update_climate_preset', + path: '/thermostats/update_climate_preset', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'cooling_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'fan_mode_setting', + values: [ + { + name: 'auto', + }, + { + name: 'on', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_celsius', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'heating_set_point_fahrenheit', + }, + { + deprecationMessage: '', + description: '', + format: 'enum', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'hvac_mode_setting', + values: [ + { + name: 'off', + }, + { + name: 'heat', + }, + { + name: 'cool', + }, + { + name: 'heat_cool', + }, + ], + }, + { + deprecationMessage: '', + description: '', + format: 'boolean', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'boolean', + name: 'manual_override_allowed', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + ], + name: 'thermostats', + namespace: null, + path: '/thermostats', + subroutes: [], + }, + { + endpoints: [ + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'create', + path: '/thermostats/schedules/create', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'ends_at', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'max_override_period_minutes', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'starts_at', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'delete', + path: '/thermostats/schedules/delete', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'thermostat_schedule_id', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'get', + path: '/thermostats/schedules/get', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'thermostat_schedule_id', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'list', + path: '/thermostats/schedules/list', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'device_id', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'user_identifier_key', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'update', + path: '/thermostats/schedules/update', + request: { + methods: [ + 'PATCH', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'ends_at', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'max_override_period_minutes', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'starts_at', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'thermostat_schedule_id', + }, + ], + preferredMethod: 'PATCH', + semanticMethod: 'PATCH', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + { + codeSamples: [], + deprecationMessage: '', + description: '', + isDeprecated: false, + isUndocumented: false, + name: 'update', + path: '/thermostats/schedules/update', + request: { + methods: [ + 'POST', + ], + parameters: [ + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'climate_preset_key', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'ends_at', + }, + { + deprecationMessage: '', + description: '', + format: 'number', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'number', + name: 'max_override_period_minutes', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'name', + }, + { + deprecationMessage: '', + description: '', + format: 'string', + isDeprecated: false, + isRequired: false, + isUndocumented: false, + jsonType: 'string', + name: 'starts_at', + }, + { + deprecationMessage: '', + description: '', + format: 'id', + isDeprecated: false, + isRequired: true, + isUndocumented: false, + jsonType: 'string', + name: 'thermostat_schedule_id', + }, + ], + preferredMethod: 'POST', + semanticMethod: 'POST', + }, + response: { + description: 'OK', + responseType: 'void', + }, + title: '', + }, + ], + name: 'schedules', + namespace: null, + path: '/thermostats/schedules', + subroutes: [], + }, ], title: 'Seam Connect', } diff --git a/test/snapshots/seam-blueprint.test.ts.snap b/test/snapshots/seam-blueprint.test.ts.snap index 67b456271577c8f2e781b8125c1e1c6fb841417d..a5dc3ab596e5009b2354f467937091e85e6deeda 100644 GIT binary patch literal 33651 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