From bbf465cd23c95ee89267dfb06c9d46d1791ff11e Mon Sep 17 00:00:00 2001 From: John Kaster Date: Tue, 26 Oct 2021 00:46:14 +0000 Subject: [PATCH 1/5] chore: another TS SDK error handling tweak --- packages/sdk-rtl/src/transport.ts | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/sdk-rtl/src/transport.ts b/packages/sdk-rtl/src/transport.ts index 8f8dead71..86ff6e7da 100644 --- a/packages/sdk-rtl/src/transport.ts +++ b/packages/sdk-rtl/src/transport.ts @@ -425,9 +425,28 @@ export function addQueryParams(path: string, obj?: Values) { return `${path}${qp ? '?' + qp : ''}` } +const utf8 = 'utf-8' + +/** + * Convert this value to a string representation however we can do it + * @param val + */ function bufferString(val: any) { - const decoder = new TextDecoder('utf-8') - return decoder.decode(val) + let result = 'Unknown error' + try { + const decoder = new TextDecoder(utf8) + result = decoder.decode(val) + } catch (e: any) { + // Supremely ugly hack. If we get here, we must be in Node (or IE 11, but who cares about that?) + // Node requires an import from `util` for TextDecoder to be found BUT it "just has" Buffer unless WebPack messes us up + if (val instanceof Buffer) { + result = Buffer.from(val).toString(utf8) + } else { + // The fallback logic here will at least give us some information about the error being thrown + result = JSON.stringify(val) + } + } + return result } /** From 23df8b408950cb265ba10299540c194ebb168fce Mon Sep 17 00:00:00 2001 From: John Kaster Date: Tue, 26 Oct 2021 16:32:18 +0000 Subject: [PATCH 2/5] protect against webpack 5 removing Buffer --- packages/sdk-rtl/src/transport.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/sdk-rtl/src/transport.ts b/packages/sdk-rtl/src/transport.ts index 86ff6e7da..90d73f2ff 100644 --- a/packages/sdk-rtl/src/transport.ts +++ b/packages/sdk-rtl/src/transport.ts @@ -439,9 +439,13 @@ function bufferString(val: any) { } catch (e: any) { // Supremely ugly hack. If we get here, we must be in Node (or IE 11, but who cares about that?) // Node requires an import from `util` for TextDecoder to be found BUT it "just has" Buffer unless WebPack messes us up - if (val instanceof Buffer) { - result = Buffer.from(val).toString(utf8) - } else { + try { + if (val instanceof Buffer) { + result = Buffer.from(val).toString(utf8) + } else { + result = JSON.stringify(val) + } + } catch (err: any) { // The fallback logic here will at least give us some information about the error being thrown result = JSON.stringify(val) } From 060f83e17b0d301ac68fd4e41644f71781b598b1 Mon Sep 17 00:00:00 2001 From: John Kaster Date: Tue, 26 Oct 2021 17:17:00 +0000 Subject: [PATCH 3/5] update search criteria functions to correct casing style --- .../src/components/SideNav/SideNav.spec.tsx | 4 ++-- .../src/components/SideNav/SideNav.tsx | 4 ++-- .../src/reducers/search/reducer.spec.ts | 4 ++-- .../api-explorer/src/reducers/search/reducer.ts | 4 ++-- packages/sdk-codegen/src/sdkModels.spec.ts | 14 +++++++------- packages/sdk-codegen/src/sdkModels.ts | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx b/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx index c0cf8dff9..e6f8bd064 100644 --- a/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx @@ -24,7 +24,7 @@ */ import React from 'react' -import { CriteriaToSet } from '@looker/sdk-codegen' +import { criteriaToSet } from '@looker/sdk-codegen' import userEvent from '@testing-library/user-event' import { act, screen, waitFor } from '@testing-library/react' @@ -131,7 +131,7 @@ describe('Search', () => { await waitFor(() => { expect(specState.spec.api!.search).toHaveBeenCalledWith( searchPattern, - CriteriaToSet(defaultSearchState.criteria) + criteriaToSet(defaultSearchState.criteria) ) const methods = screen.getByRole('tab', { name: 'Methods (1)' }) const types = screen.getByRole('tab', { name: 'Types (1)' }) diff --git a/packages/api-explorer/src/components/SideNav/SideNav.tsx b/packages/api-explorer/src/components/SideNav/SideNav.tsx index 95823b4c7..23c3ff1b6 100644 --- a/packages/api-explorer/src/components/SideNav/SideNav.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNav.tsx @@ -41,7 +41,7 @@ import type { ISearchResult, ApiModel, } from '@looker/sdk-codegen' -import { CriteriaToSet, tagTypes } from '@looker/sdk-codegen' +import { criteriaToSet, tagTypes } from '@looker/sdk-codegen' import { SearchContext } from '../../context' import type { SpecAction } from '../../reducers' @@ -94,7 +94,7 @@ export const SideNav: FC = ({ headless = false, spec }) => { const [pattern, setSearchPattern] = useState(searchSettings.pattern) const debouncedPattern = useDebounce(pattern, 250) const [searchResults, setSearchResults] = useState() - const searchCriteria = CriteriaToSet(searchSettings.criteria) + const searchCriteria = criteriaToSet(searchSettings.criteria) const [tags, setTags] = useState(api.tags || {}) const [typeTags, setTypeTags] = useState(api.typeTags || {}) const [types, setTypes] = useState(api.types || {}) diff --git a/packages/api-explorer/src/reducers/search/reducer.spec.ts b/packages/api-explorer/src/reducers/search/reducer.spec.ts index 2466f171e..14795bbd2 100644 --- a/packages/api-explorer/src/reducers/search/reducer.spec.ts +++ b/packages/api-explorer/src/reducers/search/reducer.spec.ts @@ -24,7 +24,7 @@ */ import type { SearchCriterionTerm } from '@looker/sdk-codegen' -import { CriteriaToSet, SearchAll } from '@looker/sdk-codegen' +import { criteriaToSet, SearchAll } from '@looker/sdk-codegen' import { searchReducer, defaultSearchState } from './reducer' describe('Search reducer', () => { @@ -63,7 +63,7 @@ describe('Search reducer', () => { test('default search state has all criteria', () => { const actual = defaultSearchState.criteria - const actualSet = CriteriaToSet(actual) + const actualSet = criteriaToSet(actual) expect(actualSet).toEqual(SearchAll) }) }) diff --git a/packages/api-explorer/src/reducers/search/reducer.ts b/packages/api-explorer/src/reducers/search/reducer.ts index 4d37e2f8f..4d0b9289d 100644 --- a/packages/api-explorer/src/reducers/search/reducer.ts +++ b/packages/api-explorer/src/reducers/search/reducer.ts @@ -25,7 +25,7 @@ */ import type { SearchCriterionTerm } from '@looker/sdk-codegen' -import { SearchAll, SetToCriteria } from '@looker/sdk-codegen' +import { SearchAll, setToCriteria } from '@looker/sdk-codegen' export interface SearchState { pattern: string @@ -38,7 +38,7 @@ export interface SearchAction { } export const defaultSearchState: SearchState = { - criteria: SetToCriteria(SearchAll) as SearchCriterionTerm[], + criteria: setToCriteria(SearchAll) as SearchCriterionTerm[], pattern: '', } diff --git a/packages/sdk-codegen/src/sdkModels.spec.ts b/packages/sdk-codegen/src/sdkModels.spec.ts index 074b8aa59..e02db99ab 100644 --- a/packages/sdk-codegen/src/sdkModels.spec.ts +++ b/packages/sdk-codegen/src/sdkModels.spec.ts @@ -40,7 +40,7 @@ import { ApiModel, ArrayType, camelCase, - CriteriaToSet, + criteriaToSet, DelimArrayType, EnumType, firstCase, @@ -54,7 +54,7 @@ import { safeName, SearchAll, SearchCriterion, - SetToCriteria, + setToCriteria, titleCase, typeRefs, } from './sdkModels' @@ -1088,7 +1088,7 @@ describe('sdkModels', () => { ]) // this declaration pattern assures correct enum names const names: SearchCriterionTerm[] = ['method', 'type', 'name'] - const actual = CriteriaToSet(names) + const actual = criteriaToSet(names) expect(actual).toEqual(expected) }) @@ -1099,7 +1099,7 @@ describe('sdkModels', () => { SearchCriterion.name, ]) const expected: SearchCriterionTerm[] = ['method', 'type', 'name'] - const actual = SetToCriteria(criteria) + const actual = setToCriteria(criteria) expect(actual).toEqual(expected) }) @@ -1111,7 +1111,7 @@ describe('sdkModels', () => { ]) const values = ['method', 'type', 'name'] const names = values as SearchCriterionTerm[] - const actual = CriteriaToSet(names) + const actual = criteriaToSet(names) expect(actual).toEqual(expected) }) @@ -1119,7 +1119,7 @@ describe('sdkModels', () => { const expected = new Set([SearchCriterion.method, SearchCriterion.name]) const values = ['method', 'Type', 'name'] const names = values as SearchCriterionTerm[] - const actual = CriteriaToSet(names) + const actual = criteriaToSet(names) expect(actual).toEqual(expected) }) @@ -1130,7 +1130,7 @@ describe('sdkModels', () => { SearchCriterion.name, ]) const expected = ['method', 'type', 'name'] - const actual = SetToCriteria(criteria) + const actual = setToCriteria(criteria) expect(actual).toEqual(expected) }) }) diff --git a/packages/sdk-codegen/src/sdkModels.ts b/packages/sdk-codegen/src/sdkModels.ts index 8c4a56e51..465c20116 100644 --- a/packages/sdk-codegen/src/sdkModels.ts +++ b/packages/sdk-codegen/src/sdkModels.ts @@ -386,7 +386,7 @@ export const SearchAll: SearchCriteria = new Set([ SearchCriterion.response, ]) -export const CriteriaToSet = (criteria: string[]): SearchCriteria => { +export const criteriaToSet = (criteria: string[]): SearchCriteria => { const result: SearchCriteria = new Set() criteria.forEach((name) => { const val = SearchCriterion[name as SearchCriterionTerm] @@ -396,7 +396,7 @@ export const CriteriaToSet = (criteria: string[]): SearchCriteria => { return result } -export const SetToCriteria = (criteria: SearchCriteria): string[] => { +export const setToCriteria = (criteria: SearchCriteria): string[] => { const result: string[] = [] criteria.forEach((value) => result.push(SearchCriterion[value])) return result From b7917ecc71c9fedc72f7e559a21587a910dfc565 Mon Sep 17 00:00:00 2001 From: John Kaster Date: Tue, 26 Oct 2021 17:44:03 +0000 Subject: [PATCH 4/5] fixing failed merge changes --- packages/api-explorer/src/components/SideNav/SideNav.tsx | 4 ++-- packages/api-explorer/src/state/settings/slice.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/api-explorer/src/components/SideNav/SideNav.tsx b/packages/api-explorer/src/components/SideNav/SideNav.tsx index 334cfe28c..d60b7165c 100644 --- a/packages/api-explorer/src/components/SideNav/SideNav.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNav.tsx @@ -43,7 +43,7 @@ import type { TagList, TypeTagList, } from '@looker/sdk-codegen' -import { CriteriaToSet, tagTypes } from '@looker/sdk-codegen' +import { criteriaToSet, tagTypes } from '@looker/sdk-codegen' import { useSelector } from 'react-redux' import type { SpecAction } from '../../reducers' @@ -125,7 +125,7 @@ export const SideNav: FC = ({ headless = false, spec }) => { const api = spec.api || ({} as ApiModel) if (debouncedPattern && api.search) { - results = api.search(pattern, CriteriaToSet(searchCriteria)) + results = api.search(pattern, criteriaToSet(searchCriteria)) newTags = results.tags newTypes = results.types newTypeTags = tagTypes(api, results.types) diff --git a/packages/api-explorer/src/state/settings/slice.ts b/packages/api-explorer/src/state/settings/slice.ts index 900afd106..61a095444 100644 --- a/packages/api-explorer/src/state/settings/slice.ts +++ b/packages/api-explorer/src/state/settings/slice.ts @@ -27,7 +27,7 @@ import { createSlice } from '@reduxjs/toolkit' import type { PayloadAction } from '@reduxjs/toolkit' import { createSliceHooks } from '@looker/redux' import type { SearchCriterionTerm } from '@looker/sdk-codegen' -import { SearchAll, SetToCriteria } from '@looker/sdk-codegen' +import { SearchAll, setToCriteria } from '@looker/sdk-codegen' import { saga } from './sagas' @@ -45,7 +45,7 @@ export interface SettingState extends UserDefinedSettings { export const defaultSettings = { sdkLanguage: 'Python', searchPattern: '', - searchCriteria: SetToCriteria(SearchAll) as SearchCriterionTerm[], + searchCriteria: setToCriteria(SearchAll) as SearchCriterionTerm[], } export const defaultSettingsState: SettingState = { From 85d50d45b77a4bc80c96475a82c9f46868197d32 Mon Sep 17 00:00:00 2001 From: John Kaster Date: Tue, 26 Oct 2021 17:53:39 +0000 Subject: [PATCH 5/5] boy that failed pull/merge really messed up this simple rename --- packages/api-explorer/src/components/SideNav/SideNav.spec.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx b/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx index 33e25e9a8..de7feff88 100644 --- a/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx @@ -24,7 +24,7 @@ */ import React from 'react' -import { CriteriaToSet } from '@looker/sdk-codegen' +import { criteriaToSet } from '@looker/sdk-codegen' import userEvent from '@testing-library/user-event' import { screen, waitFor } from '@testing-library/react' @@ -130,7 +130,7 @@ describe('Search', () => { await waitFor(() => { expect(specState.spec.api!.search).toHaveBeenCalledWith( searchPattern, - CriteriaToSet(defaultSettingsState.searchCriteria) + criteriaToSet(defaultSettingsState.searchCriteria) ) const methods = screen.getByRole('tab', { name: 'Methods (1)' }) userEvent.click(methods)