@looker/api-explorer 0.9.26 → 0.9.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -1
- package/e2e/e2e.spec.ts +1 -1
- package/lib/ApiExplorer.d.ts +2 -6
- package/lib/ApiExplorer.js +53 -74
- package/lib/ApiExplorer.js.map +1 -1
- package/lib/StandaloneApiExplorer.js +35 -47
- package/lib/StandaloneApiExplorer.js.map +1 -1
- package/lib/components/Banner/Banner.d.ts +8 -0
- package/lib/components/Banner/Banner.js +70 -0
- package/lib/components/Banner/Banner.js.map +1 -0
- package/lib/components/Banner/index.d.ts +1 -0
- package/lib/components/Banner/index.js +14 -0
- package/lib/components/Banner/index.js.map +1 -0
- package/lib/components/DocSDKs/DocSDKs.js +3 -3
- package/lib/components/DocSDKs/DocSDKs.js.map +1 -1
- package/lib/components/ExploreType/ExploreType.js +3 -5
- package/lib/components/ExploreType/ExploreType.js.map +1 -1
- package/lib/components/Header/Header.d.ts +2 -5
- package/lib/components/Header/Header.js +1 -5
- package/lib/components/Header/Header.js.map +1 -1
- package/lib/components/SelectorContainer/ApiSpecSelector.d.ts +2 -5
- package/lib/components/SelectorContainer/ApiSpecSelector.js +5 -5
- package/lib/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
- package/lib/components/SelectorContainer/SelectorContainer.d.ts +2 -5
- package/lib/components/SelectorContainer/SelectorContainer.js +3 -7
- package/lib/components/SelectorContainer/SelectorContainer.js.map +1 -1
- package/lib/components/SideNav/SideNav.d.ts +2 -5
- package/lib/components/SideNav/SideNav.js.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +8 -0
- package/lib/components/index.js.map +1 -1
- package/lib/esm/ApiExplorer.js +54 -74
- package/lib/esm/ApiExplorer.js.map +1 -1
- package/lib/esm/StandaloneApiExplorer.js +34 -48
- package/lib/esm/StandaloneApiExplorer.js.map +1 -1
- package/lib/esm/components/Banner/Banner.js +54 -0
- package/lib/esm/components/Banner/Banner.js.map +1 -0
- package/lib/esm/components/Banner/index.js +2 -0
- package/lib/esm/components/Banner/index.js.map +1 -0
- package/lib/esm/components/DocSDKs/DocSDKs.js +2 -2
- package/lib/esm/components/DocSDKs/DocSDKs.js.map +1 -1
- package/lib/esm/components/ExploreType/ExploreType.js +3 -4
- package/lib/esm/components/ExploreType/ExploreType.js.map +1 -1
- package/lib/esm/components/Header/Header.js +1 -5
- package/lib/esm/components/Header/Header.js.map +1 -1
- package/lib/esm/components/SelectorContainer/ApiSpecSelector.js +4 -5
- package/lib/esm/components/SelectorContainer/ApiSpecSelector.js.map +1 -1
- package/lib/esm/components/SelectorContainer/SelectorContainer.js +3 -7
- package/lib/esm/components/SelectorContainer/SelectorContainer.js.map +1 -1
- package/lib/esm/components/SideNav/SideNav.js.map +1 -1
- package/lib/esm/components/index.js +1 -0
- package/lib/esm/components/index.js.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/routes/AppRouter.js +3 -7
- package/lib/esm/routes/AppRouter.js.map +1 -1
- package/lib/esm/scenes/DiffScene/DiffScene.js +43 -99
- package/lib/esm/scenes/DiffScene/DiffScene.js.map +1 -1
- package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
- package/lib/esm/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
- package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
- package/lib/esm/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
- package/lib/esm/scenes/MethodScene/MethodScene.js +4 -5
- package/lib/esm/scenes/MethodScene/MethodScene.js.map +1 -1
- package/lib/esm/state/index.js +1 -0
- package/lib/esm/state/index.js.map +1 -1
- package/lib/esm/state/specs/index.js +3 -0
- package/lib/esm/state/specs/index.js.map +1 -0
- package/lib/esm/state/specs/sagas.js +58 -0
- package/lib/esm/state/specs/sagas.js.map +1 -0
- package/lib/esm/state/specs/selectors.js +8 -0
- package/lib/esm/state/specs/selectors.js.map +1 -0
- package/lib/esm/state/specs/slice.js +55 -0
- package/lib/esm/state/specs/slice.js.map +1 -0
- package/lib/esm/state/store.js +53 -2
- package/lib/esm/state/store.js.map +1 -1
- package/lib/esm/test-utils/redux.js +9 -5
- package/lib/esm/test-utils/redux.js.map +1 -1
- package/lib/esm/utils/adaptorUtils.js +101 -0
- package/lib/esm/utils/adaptorUtils.js.map +1 -0
- package/lib/esm/utils/apixAdaptor.js +48 -0
- package/lib/esm/utils/apixAdaptor.js.map +1 -0
- package/lib/esm/utils/index.js +3 -1
- package/lib/esm/utils/index.js.map +1 -1
- package/lib/esm/utils/path.js +27 -2
- package/lib/esm/utils/path.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +13 -0
- package/lib/index.js.map +1 -1
- package/lib/routes/AppRouter.d.ts +1 -5
- package/lib/routes/AppRouter.js +3 -7
- package/lib/routes/AppRouter.js.map +1 -1
- package/lib/scenes/DiffScene/DiffScene.js +45 -100
- package/lib/scenes/DiffScene/DiffScene.js.map +1 -1
- package/lib/scenes/DiffScene/DocDiff/DiffItem.js +9 -13
- package/lib/scenes/DiffScene/DocDiff/DiffItem.js.map +1 -1
- package/lib/scenes/DiffScene/DocDiff/DocDiff.js +2 -2
- package/lib/scenes/DiffScene/DocDiff/DocDiff.js.map +1 -1
- package/lib/scenes/MethodScene/MethodScene.d.ts +0 -4
- package/lib/scenes/MethodScene/MethodScene.js +5 -5
- package/lib/scenes/MethodScene/MethodScene.js.map +1 -1
- package/lib/state/index.d.ts +1 -0
- package/lib/state/index.js +13 -0
- package/lib/state/index.js.map +1 -1
- package/lib/state/settings/selectors.d.ts +1 -1
- package/lib/state/settings/slice.d.ts +1 -1
- package/lib/state/specs/index.d.ts +2 -0
- package/lib/state/specs/index.js +32 -0
- package/lib/state/specs/index.js.map +1 -0
- package/lib/state/specs/sagas.d.ts +1 -0
- package/lib/state/specs/sagas.js +67 -0
- package/lib/state/specs/sagas.js.map +1 -0
- package/lib/state/specs/selectors.d.ts +4 -0
- package/lib/state/specs/selectors.js +20 -0
- package/lib/state/specs/selectors.js.map +1 -0
- package/lib/state/specs/slice.d.ts +49 -0
- package/lib/state/specs/slice.js +70 -0
- package/lib/state/specs/slice.js.map +1 -0
- package/lib/state/store.d.ts +3 -0
- package/lib/state/store.js +56 -2
- package/lib/state/store.js.map +1 -1
- package/lib/test-data/declarations.d.ts +2 -0
- package/lib/test-data/examples.d.ts +2 -0
- package/lib/test-data/index.d.ts +3 -0
- package/lib/test-data/index.js +12 -42
- package/lib/test-data/index.js.map +1 -1
- package/lib/test-data/specs.d.ts +10 -0
- package/lib/test-data/specs.js +6 -6
- package/lib/test-data/specs.js.map +1 -1
- package/lib/test-utils/redux.d.ts +2 -1
- package/lib/test-utils/redux.js +9 -4
- package/lib/test-utils/redux.js.map +1 -1
- package/lib/utils/adaptorUtils.d.ts +30 -0
- package/lib/utils/adaptorUtils.js +124 -0
- package/lib/utils/adaptorUtils.js.map +1 -0
- package/lib/utils/apixAdaptor.d.ts +15 -0
- package/lib/utils/apixAdaptor.js +67 -0
- package/lib/utils/apixAdaptor.js.map +1 -0
- package/lib/utils/index.d.ts +3 -1
- package/lib/utils/index.js +45 -30
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/path.d.ts +3 -0
- package/lib/utils/path.js +32 -2
- package/lib/utils/path.js.map +1 -1
- package/package.json +10 -10
- package/src/ApiExplorer.tsx +47 -74
- package/src/StandaloneApiExplorer.tsx +37 -52
- package/src/components/Banner/Banner.spec.tsx +99 -0
- package/src/components/Banner/Banner.tsx +87 -0
- package/src/{reducers → components/Banner}/index.ts +1 -1
- package/src/components/DocSDKs/DocSDKs.tsx +4 -5
- package/src/components/ExploreType/ExploreType.spec.tsx +0 -23
- package/src/components/ExploreType/ExploreType.tsx +5 -6
- package/src/components/ExploreType/exploreUtils.spec.tsx +1 -1
- package/src/components/Header/Header.spec.tsx +9 -30
- package/src/components/Header/Header.tsx +3 -10
- package/src/components/SelectorContainer/ApiSpecSelector.spec.tsx +31 -44
- package/src/components/SelectorContainer/ApiSpecSelector.tsx +6 -12
- package/src/components/SelectorContainer/SelectorContainer.spec.tsx +7 -26
- package/src/components/SelectorContainer/SelectorContainer.tsx +4 -10
- package/src/components/SideNav/SideNav.spec.tsx +12 -45
- package/src/components/SideNav/SideNav.tsx +1 -7
- package/src/components/index.ts +1 -0
- package/src/index.ts +1 -0
- package/src/routes/AppRouter.tsx +25 -37
- package/src/scenes/DiffScene/DiffScene.tsx +47 -84
- package/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx +9 -16
- package/src/scenes/DiffScene/DocDiff/DiffItem.tsx +11 -12
- package/src/scenes/DiffScene/DocDiff/DocDiff.tsx +2 -2
- package/src/scenes/MethodScene/MethodScene.tsx +4 -10
- package/src/state/index.ts +1 -0
- package/src/{reducers/spec → state/specs}/index.ts +2 -3
- package/src/state/specs/sagas.spec.ts +135 -0
- package/src/state/specs/sagas.ts +81 -0
- package/src/{reducers/spec/actions.spec.ts → state/specs/selectors.ts} +12 -11
- package/src/state/specs/slice.ts +109 -0
- package/src/state/store.ts +58 -0
- package/src/test-data/index.ts +1 -8
- package/src/test-data/specs.ts +6 -6
- package/src/test-utils/redux.tsx +15 -4
- package/src/utils/adaptorUtils.ts +181 -0
- package/src/utils/apixAdaptor.ts +72 -0
- package/src/utils/index.ts +3 -7
- package/src/utils/path.ts +25 -2
- package/lib/esm/reducers/index.js +0 -2
- package/lib/esm/reducers/index.js.map +0 -1
- package/lib/esm/reducers/spec/actions.js +0 -19
- package/lib/esm/reducers/spec/actions.js.map +0 -1
- package/lib/esm/reducers/spec/index.js +0 -4
- package/lib/esm/reducers/spec/index.js.map +0 -1
- package/lib/esm/reducers/spec/reducer.js +0 -62
- package/lib/esm/reducers/spec/reducer.js.map +0 -1
- package/lib/esm/reducers/spec/utils.js +0 -74
- package/lib/esm/reducers/spec/utils.js.map +0 -1
- package/lib/reducers/index.d.ts +0 -1
- package/lib/reducers/index.js +0 -19
- package/lib/reducers/index.js.map +0 -1
- package/lib/reducers/spec/actions.d.ts +0 -20
- package/lib/reducers/spec/actions.js +0 -31
- package/lib/reducers/spec/actions.js.map +0 -1
- package/lib/reducers/spec/index.d.ts +0 -3
- package/lib/reducers/spec/index.js +0 -45
- package/lib/reducers/spec/index.js.map +0 -1
- package/lib/reducers/spec/reducer.d.ts +0 -7
- package/lib/reducers/spec/reducer.js +0 -73
- package/lib/reducers/spec/reducer.js.map +0 -1
- package/lib/reducers/spec/utils.d.ts +0 -7
- package/lib/reducers/spec/utils.js +0 -91
- package/lib/reducers/spec/utils.js.map +0 -1
- package/src/reducers/spec/actions.ts +0 -62
- package/src/reducers/spec/reducer.spec.ts +0 -44
- package/src/reducers/spec/reducer.ts +0 -69
- package/src/reducers/spec/utils.spec.ts +0 -138
- package/src/reducers/spec/utils.ts +0 -123
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSpecStoreState = exports.useSpecActions = exports.specActions = exports.specsSlice = exports.defaultSpecsState = void 0;
|
|
7
|
+
|
|
8
|
+
var _toolkit = require("@reduxjs/toolkit");
|
|
9
|
+
|
|
10
|
+
var _redux = require("@looker/redux");
|
|
11
|
+
|
|
12
|
+
var _sagas = require("./sagas");
|
|
13
|
+
|
|
14
|
+
var defaultSpecsState = {
|
|
15
|
+
specs: {},
|
|
16
|
+
currentSpecKey: '',
|
|
17
|
+
working: true,
|
|
18
|
+
description: undefined
|
|
19
|
+
};
|
|
20
|
+
exports.defaultSpecsState = defaultSpecsState;
|
|
21
|
+
var specsSlice = (0, _toolkit.createSlice)({
|
|
22
|
+
name: 'specs',
|
|
23
|
+
initialState: defaultSpecsState,
|
|
24
|
+
reducers: {
|
|
25
|
+
initSpecsAction(state, _action) {
|
|
26
|
+
state.working = true;
|
|
27
|
+
state.description = 'Fetching specifications...';
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
initSpecsSuccessAction(state, action) {
|
|
31
|
+
state.specs = action.payload.specs;
|
|
32
|
+
state.currentSpecKey = action.payload.currentSpecKey;
|
|
33
|
+
state.working = false;
|
|
34
|
+
state.description = undefined;
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
initSpecsFailureAction(state, action) {
|
|
38
|
+
state.working = false;
|
|
39
|
+
state.error = action.payload;
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
setCurrentSpecAction(state, action) {
|
|
43
|
+
state.working = true;
|
|
44
|
+
state.description = "Fetching API ".concat(action.payload.currentSpecKey, " spec");
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
setCurrentSpecSuccessAction(state, action) {
|
|
48
|
+
state.currentSpecKey = action.payload.currentSpecKey;
|
|
49
|
+
state.specs[state.currentSpecKey].api = action.payload.api;
|
|
50
|
+
state.description = undefined;
|
|
51
|
+
state.working = false;
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
setCurrentSpecFailureAction(state, action) {
|
|
55
|
+
state.working = false;
|
|
56
|
+
state.error = action.payload;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
exports.specsSlice = specsSlice;
|
|
62
|
+
var specActions = specsSlice.actions;
|
|
63
|
+
exports.specActions = specActions;
|
|
64
|
+
var {
|
|
65
|
+
useActions: useSpecActions,
|
|
66
|
+
useStoreState: useSpecStoreState
|
|
67
|
+
} = (0, _redux.createSliceHooks)(specsSlice, _sagas.saga);
|
|
68
|
+
exports.useSpecStoreState = useSpecStoreState;
|
|
69
|
+
exports.useSpecActions = useSpecActions;
|
|
70
|
+
//# sourceMappingURL=slice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/state/specs/slice.ts"],"names":["defaultSpecsState","specs","currentSpecKey","working","description","undefined","specsSlice","name","initialState","reducers","initSpecsAction","state","_action","initSpecsSuccessAction","action","payload","initSpecsFailureAction","error","setCurrentSpecAction","setCurrentSpecSuccessAction","api","setCurrentSpecFailureAction","specActions","actions","useActions","useSpecActions","useStoreState","useSpecStoreState","saga"],"mappings":";;;;;;;AA0BA;;AAEA;;AAEA;;AAUO,IAAMA,iBAA4B,GAAG;AAC1CC,EAAAA,KAAK,EAAE,EADmC;AAE1CC,EAAAA,cAAc,EAAE,EAF0B;AAG1CC,EAAAA,OAAO,EAAE,IAHiC;AAI1CC,EAAAA,WAAW,EAAEC;AAJ6B,CAArC;;AAyBA,IAAMC,UAAU,GAAG,0BAAY;AACpCC,EAAAA,IAAI,EAAE,OAD8B;AAEpCC,EAAAA,YAAY,EAAER,iBAFsB;AAGpCS,EAAAA,QAAQ,EAAE;AACRC,IAAAA,eAAe,CAACC,KAAD,EAAQC,OAAR,EAAiD;AAC9DD,MAAAA,KAAK,CAACR,OAAN,GAAgB,IAAhB;AACAQ,MAAAA,KAAK,CAACP,WAAN,GAAoB,4BAApB;AACD,KAJO;;AAKRS,IAAAA,sBAAsB,CACpBF,KADoB,EAEpBG,MAFoB,EAGpB;AACAH,MAAAA,KAAK,CAACV,KAAN,GAAca,MAAM,CAACC,OAAP,CAAed,KAA7B;AACAU,MAAAA,KAAK,CAACT,cAAN,GAAuBY,MAAM,CAACC,OAAP,CAAeb,cAAtC;AACAS,MAAAA,KAAK,CAACR,OAAN,GAAgB,KAAhB;AACAQ,MAAAA,KAAK,CAACP,WAAN,GAAoBC,SAApB;AACD,KAbO;;AAcRW,IAAAA,sBAAsB,CAACL,KAAD,EAAQG,MAAR,EAAsC;AAC1DH,MAAAA,KAAK,CAACR,OAAN,GAAgB,KAAhB;AACAQ,MAAAA,KAAK,CAACM,KAAN,GAAcH,MAAM,CAACC,OAArB;AACD,KAjBO;;AAkBRG,IAAAA,oBAAoB,CAACP,KAAD,EAAQG,MAAR,EAAqD;AACvEH,MAAAA,KAAK,CAACR,OAAN,GAAgB,IAAhB;AACAQ,MAAAA,KAAK,CAACP,WAAN,0BAAoCU,MAAM,CAACC,OAAP,CAAeb,cAAnD;AACD,KArBO;;AAsBRiB,IAAAA,2BAA2B,CACzBR,KADyB,EAEzBG,MAFyB,EAGzB;AACAH,MAAAA,KAAK,CAACT,cAAN,GAAuBY,MAAM,CAACC,OAAP,CAAeb,cAAtC;AACAS,MAAAA,KAAK,CAACV,KAAN,CAAYU,KAAK,CAACT,cAAlB,EAAkCkB,GAAlC,GAAwCN,MAAM,CAACC,OAAP,CAAeK,GAAvD;AACAT,MAAAA,KAAK,CAACP,WAAN,GAAoBC,SAApB;AACAM,MAAAA,KAAK,CAACR,OAAN,GAAgB,KAAhB;AACD,KA9BO;;AA+BRkB,IAAAA,2BAA2B,CAACV,KAAD,EAAQG,MAAR,EAAsC;AAC/DH,MAAAA,KAAK,CAACR,OAAN,GAAgB,KAAhB;AACAQ,MAAAA,KAAK,CAACM,KAAN,GAAcH,MAAM,CAACC,OAArB;AACD;;AAlCO;AAH0B,CAAZ,CAAnB;;AAyCA,IAAMO,WAAW,GAAGhB,UAAU,CAACiB,OAA/B;;AACA,IAAM;AAAEC,EAAAA,UAAU,EAAEC,cAAd;AAA8BC,EAAAA,aAAa,EAAEC;AAA7C,IACX,6BAAiBrB,UAAjB,EAA6BsB,WAA7B,CADK","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nimport type { PayloadAction } from '@reduxjs/toolkit'\nimport { createSlice } from '@reduxjs/toolkit'\nimport type { ApiModel, SpecList } from '@looker/sdk-codegen'\nimport { createSliceHooks } from '@looker/redux'\n\nimport { saga } from './sagas'\n\nexport interface SpecState {\n specs: SpecList\n currentSpecKey: string\n error?: Error\n working: boolean\n description?: string\n}\n\nexport const defaultSpecsState: SpecState = {\n specs: {},\n currentSpecKey: '',\n working: true,\n description: undefined,\n}\n\nexport interface InitSpecsAction {\n specKey: string | null\n}\n\nexport interface InitSpecsSuccessPayload {\n specs: SpecList\n currentSpecKey: string\n}\n\nexport interface SetCurrentSpecAction {\n currentSpecKey: string\n}\n\ninterface SetCurrentSpecSuccessAction {\n api: ApiModel\n currentSpecKey: string\n}\n\nexport const specsSlice = createSlice({\n name: 'specs',\n initialState: defaultSpecsState,\n reducers: {\n initSpecsAction(state, _action: PayloadAction<InitSpecsAction>) {\n state.working = true\n state.description = 'Fetching specifications...'\n },\n initSpecsSuccessAction(\n state,\n action: PayloadAction<InitSpecsSuccessPayload>\n ) {\n state.specs = action.payload.specs\n state.currentSpecKey = action.payload.currentSpecKey\n state.working = false\n state.description = undefined\n },\n initSpecsFailureAction(state, action: PayloadAction<Error>) {\n state.working = false\n state.error = action.payload\n },\n setCurrentSpecAction(state, action: PayloadAction<SetCurrentSpecAction>) {\n state.working = true\n state.description = `Fetching API ${action.payload.currentSpecKey} spec`\n },\n setCurrentSpecSuccessAction(\n state,\n action: PayloadAction<SetCurrentSpecSuccessAction>\n ) {\n state.currentSpecKey = action.payload.currentSpecKey\n state.specs[state.currentSpecKey].api = action.payload.api\n state.description = undefined\n state.working = false\n },\n setCurrentSpecFailureAction(state, action: PayloadAction<Error>) {\n state.working = false\n state.error = action.payload\n },\n },\n})\n\nexport const specActions = specsSlice.actions\nexport const { useActions: useSpecActions, useStoreState: useSpecStoreState } =\n createSliceHooks(specsSlice, saga)\n"],"file":"slice.js"}
|
package/lib/state/store.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { SettingState } from './settings';
|
|
2
2
|
import type { LodesState } from './lodes';
|
|
3
|
+
import type { SpecState } from './specs';
|
|
3
4
|
export declare const store: import("@looker/redux").Store<{
|
|
4
5
|
settings: SettingState;
|
|
5
6
|
lodes: LodesState;
|
|
7
|
+
specs: SpecState;
|
|
6
8
|
}, import("redux").AnyAction>;
|
|
7
9
|
export interface RootState {
|
|
8
10
|
settings: SettingState;
|
|
9
11
|
lodes: LodesState;
|
|
12
|
+
specs: SpecState;
|
|
10
13
|
}
|
package/lib/state/store.js
CHANGED
|
@@ -7,18 +7,72 @@ exports.store = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _redux = require("@looker/redux");
|
|
9
9
|
|
|
10
|
+
var _map = _interopRequireDefault(require("lodash/map"));
|
|
11
|
+
|
|
10
12
|
var _settings = require("./settings");
|
|
11
13
|
|
|
12
14
|
var _lodes = require("./lodes");
|
|
13
15
|
|
|
16
|
+
var _specs = require("./specs");
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
+
|
|
22
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
23
|
+
|
|
24
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
25
|
+
|
|
26
|
+
var isInitSuccessAction = action => {
|
|
27
|
+
var _action$payload;
|
|
28
|
+
|
|
29
|
+
return !!((_action$payload = action.payload) !== null && _action$payload !== void 0 && _action$payload.specs);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
var actionSanitizer = (action, _id) => {
|
|
33
|
+
if (isInitSuccessAction(action)) {
|
|
34
|
+
action = _objectSpread(_objectSpread({}, action), {}, {
|
|
35
|
+
payload: _objectSpread(_objectSpread({}, action.payload), {}, {
|
|
36
|
+
specs: sanitizeSpecs(action.payload.specs)
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return action;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
var stateSanitizer = (state, _index) => {
|
|
45
|
+
if (state.specs) {
|
|
46
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
47
|
+
specs: _objectSpread(_objectSpread({}, state.specs), {}, {
|
|
48
|
+
specs: sanitizeSpecs(state.specs.specs)
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return state;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
var sanitizeSpecs = specList => (0, _map.default)(specList, spec => _objectSpread(_objectSpread({}, spec), {}, {
|
|
57
|
+
api: spec.api ? '<api>' : undefined,
|
|
58
|
+
specContent: spec.specContent ? '<specContent>' : undefined
|
|
59
|
+
}));
|
|
60
|
+
|
|
61
|
+
var devTools = process.env.NODE_ENV !== 'production' ? {
|
|
62
|
+
actionSanitizer,
|
|
63
|
+
stateSanitizer
|
|
64
|
+
} : false;
|
|
14
65
|
var store = (0, _redux.createStore)({
|
|
66
|
+
devTools,
|
|
15
67
|
preloadedState: {
|
|
16
68
|
settings: _settings.defaultSettingsState,
|
|
17
|
-
lodes: _lodes.defaultLodesState
|
|
69
|
+
lodes: _lodes.defaultLodesState,
|
|
70
|
+
specs: _specs.defaultSpecsState
|
|
18
71
|
},
|
|
19
72
|
reducer: {
|
|
20
73
|
settings: _settings.settingsSlice.reducer,
|
|
21
|
-
lodes: _lodes.lodesSlice.reducer
|
|
74
|
+
lodes: _lodes.lodesSlice.reducer,
|
|
75
|
+
specs: _specs.specsSlice.reducer
|
|
22
76
|
}
|
|
23
77
|
});
|
|
24
78
|
exports.store = store;
|
package/lib/state/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/state/store.ts"],"names":["store","preloadedState","settings","defaultSettingsState","lodes","defaultLodesState","reducer","settingsSlice","lodesSlice"],"mappings":";;;;;;;AAyBA;;AAGA;;AAEA;;
|
|
1
|
+
{"version":3,"sources":["../../src/state/store.ts"],"names":["isInitSuccessAction","action","payload","specs","actionSanitizer","_id","sanitizeSpecs","stateSanitizer","state","_index","specList","spec","api","undefined","specContent","devTools","process","env","NODE_ENV","store","preloadedState","settings","defaultSettingsState","lodes","defaultLodesState","defaultSpecsState","reducer","settingsSlice","lodesSlice","specsSlice"],"mappings":";;;;;;;AAyBA;;AAGA;;AAIA;;AAEA;;AAEA;;;;;;;;;;AAEA,IAAMA,mBAAmB,GACvBC,MAD0B;AAAA;;AAAA,SAE2B,CAAC,qBAACA,MAAM,CAACC,OAAR,4CAAC,gBAAgBC,KAAjB,CAF5B;AAAA,CAA5B;;AAIA,IAAMC,eAAe,GAAG,CACtBH,MADsB,EAEtBI,GAFsB,KAGhB;AACN,MAAIL,mBAAmB,CAACC,MAAD,CAAvB,EAAiC;AAC/BA,IAAAA,MAAM,mCACDA,MADC;AAEJC,MAAAA,OAAO,kCACFD,MAAM,CAACC,OADL;AAELC,QAAAA,KAAK,EAAEG,aAAa,CAACL,MAAM,CAACC,OAAP,CAAeC,KAAhB;AAFf;AAFH,MAAN;AAOD;;AACD,SAAOF,MAAP;AACD,CAdD;;AAgBA,IAAMM,cAAc,GAAG,CACrBC,KADqB,EAErBC,MAFqB,KAGf;AACN,MAAID,KAAK,CAACL,KAAV,EAAiB;AACf,2CACKK,KADL;AAEEL,MAAAA,KAAK,kCACAK,KAAK,CAACL,KADN;AAEHA,QAAAA,KAAK,EAAEG,aAAa,CAACE,KAAK,CAACL,KAAN,CAAYA,KAAb;AAFjB;AAFP;AAOD;;AACD,SAAOK,KAAP;AACD,CAdD;;AAgBA,IAAMF,aAAa,GAAII,QAAD,IACpB,kBAAIA,QAAJ,EAAeC,IAAD,oCACTA,IADS;AAEZC,EAAAA,GAAG,EAAED,IAAI,CAACC,GAAL,GAAW,OAAX,GAAqBC,SAFd;AAGZC,EAAAA,WAAW,EAAEH,IAAI,CAACG,WAAL,GAAmB,eAAnB,GAAqCD;AAHtC,EAAd,CADF;;AAOA,IAAME,QAAQ,GACZC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,GACI;AAAEd,EAAAA,eAAF;AAAmBG,EAAAA;AAAnB,CADJ,GAEI,KAHN;AAKO,IAAMY,KAAK,GAAG,wBAAY;AAC/BJ,EAAAA,QAD+B;AAE/BK,EAAAA,cAAc,EAAE;AACdC,IAAAA,QAAQ,EAAEC,8BADI;AAEdC,IAAAA,KAAK,EAAEC,wBAFO;AAGdrB,IAAAA,KAAK,EAAEsB;AAHO,GAFe;AAO/BC,EAAAA,OAAO,EAAE;AACPL,IAAAA,QAAQ,EAAEM,wBAAcD,OADjB;AAEPH,IAAAA,KAAK,EAAEK,kBAAWF,OAFX;AAGPvB,IAAAA,KAAK,EAAE0B,kBAAWH;AAHX;AAPsB,CAAZ,CAAd","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nimport { createStore } from '@looker/redux'\nimport type { PayloadAction } from '@reduxjs/toolkit'\nimport type { Action } from 'redux'\nimport map from 'lodash/map'\nimport type { SpecList } from '@looker/sdk-codegen'\n\nimport type { SettingState } from './settings'\nimport { defaultSettingsState, settingsSlice } from './settings'\nimport type { LodesState } from './lodes'\nimport { lodesSlice, defaultLodesState } from './lodes'\nimport type { SpecState, InitSpecsSuccessPayload } from './specs'\nimport { defaultSpecsState, specsSlice } from './specs'\n\nconst isInitSuccessAction = (\n action: any\n): action is PayloadAction<InitSpecsSuccessPayload> => !!action.payload?.specs\n\nconst actionSanitizer = <A extends Partial<Action>>(\n action: A,\n _id: number\n): A => {\n if (isInitSuccessAction(action)) {\n action = {\n ...action,\n payload: {\n ...action.payload,\n specs: sanitizeSpecs(action.payload.specs),\n },\n }\n }\n return action\n}\n\nconst stateSanitizer = <S extends Partial<RootState>>(\n state: S,\n _index: number\n): S => {\n if (state.specs) {\n return {\n ...state,\n specs: {\n ...state.specs,\n specs: sanitizeSpecs(state.specs.specs),\n },\n }\n }\n return state\n}\n\nconst sanitizeSpecs = (specList: SpecList) =>\n map(specList, (spec) => ({\n ...spec,\n api: spec.api ? '<api>' : undefined,\n specContent: spec.specContent ? '<specContent>' : undefined,\n })) as unknown as SpecList\n\nconst devTools =\n process.env.NODE_ENV !== 'production'\n ? { actionSanitizer, stateSanitizer }\n : false\n\nexport const store = createStore({\n devTools,\n preloadedState: {\n settings: defaultSettingsState,\n lodes: defaultLodesState,\n specs: defaultSpecsState,\n },\n reducer: {\n settings: settingsSlice.reducer,\n lodes: lodesSlice.reducer,\n specs: specsSlice.reducer,\n },\n})\n\nexport interface RootState {\n settings: SettingState\n lodes: LodesState\n specs: SpecState\n}\n"],"file":"store.js"}
|
package/lib/test-data/index.js
CHANGED
|
@@ -4,50 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
var _exportNames = {
|
|
7
|
-
api: true,
|
|
8
|
-
api40: true,
|
|
9
|
-
specs: true,
|
|
10
|
-
specState: true,
|
|
11
|
-
getLoadedSpecs: true,
|
|
12
|
-
getLoadedSpecState: true,
|
|
13
7
|
examples: true
|
|
14
8
|
};
|
|
15
|
-
Object.defineProperty(exports, "api", {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
get: function get() {
|
|
18
|
-
return _specs.api;
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(exports, "api40", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function get() {
|
|
24
|
-
return _specs.api40;
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(exports, "specs", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
get: function get() {
|
|
30
|
-
return _specs.specs;
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
Object.defineProperty(exports, "specState", {
|
|
34
|
-
enumerable: true,
|
|
35
|
-
get: function get() {
|
|
36
|
-
return _specs.specState;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
Object.defineProperty(exports, "getLoadedSpecs", {
|
|
40
|
-
enumerable: true,
|
|
41
|
-
get: function get() {
|
|
42
|
-
return _specs.getLoadedSpecs;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
Object.defineProperty(exports, "getLoadedSpecState", {
|
|
46
|
-
enumerable: true,
|
|
47
|
-
get: function get() {
|
|
48
|
-
return _specs.getLoadedSpecState;
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
9
|
Object.defineProperty(exports, "examples", {
|
|
52
10
|
enumerable: true,
|
|
53
11
|
get: function get() {
|
|
@@ -57,6 +15,18 @@ Object.defineProperty(exports, "examples", {
|
|
|
57
15
|
|
|
58
16
|
var _specs = require("./specs");
|
|
59
17
|
|
|
18
|
+
Object.keys(_specs).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
21
|
+
if (key in exports && exports[key] === _specs[key]) return;
|
|
22
|
+
Object.defineProperty(exports, key, {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function get() {
|
|
25
|
+
return _specs[key];
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
60
30
|
var _examples = require("./examples");
|
|
61
31
|
|
|
62
32
|
var _declarations = require("./declarations");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test-data/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/test-data/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAyBA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nexport * from './specs'\nexport { examples } from './examples'\nexport * from './declarations'\n"],"file":"index.js"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SpecList } from '@looker/sdk-codegen';
|
|
2
|
+
import { ApiModel } from '@looker/sdk-codegen';
|
|
3
|
+
import type { SpecState } from '../state';
|
|
4
|
+
export declare const specs: SpecList;
|
|
5
|
+
export declare const api: ApiModel;
|
|
6
|
+
export declare const api40: ApiModel;
|
|
7
|
+
export declare const getLoadedSpecs: () => {
|
|
8
|
+
[x: string]: import("@looker/sdk-codegen").SpecItem;
|
|
9
|
+
};
|
|
10
|
+
export declare const specState: SpecState;
|
package/lib/test-data/specs.js
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.specState = exports.getLoadedSpecs = exports.api40 = exports.api = exports.specs = void 0;
|
|
7
7
|
|
|
8
8
|
var _sdkCodegen = require("@looker/sdk-codegen");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _state = require("../state");
|
|
11
11
|
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
13
13
|
|
|
@@ -34,8 +34,6 @@ var specs = {
|
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
36
|
exports.specs = specs;
|
|
37
|
-
var specState = (0, _reducers.initDefaultSpecState)(specs, window.location);
|
|
38
|
-
exports.specState = specState;
|
|
39
37
|
|
|
40
38
|
var api = _sdkCodegen.ApiModel.fromJson(specs['3.1'].specContent);
|
|
41
39
|
|
|
@@ -55,7 +53,9 @@ var getLoadedSpecs = () => {
|
|
|
55
53
|
|
|
56
54
|
exports.getLoadedSpecs = getLoadedSpecs;
|
|
57
55
|
|
|
58
|
-
var
|
|
56
|
+
var specState = _objectSpread(_objectSpread({}, _state.defaultSpecsState), {}, {
|
|
57
|
+
specs: getLoadedSpecs()
|
|
58
|
+
});
|
|
59
59
|
|
|
60
|
-
exports.
|
|
60
|
+
exports.specState = specState;
|
|
61
61
|
//# sourceMappingURL=specs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test-data/specs.ts"],"names":["specs","key","isDefault","status","specURL","specContent","require","version","
|
|
1
|
+
{"version":3,"sources":["../../src/test-data/specs.ts"],"names":["specs","key","isDefault","status","specURL","specContent","require","version","api","ApiModel","fromJson","api40","getLoadedSpecs","loadedSpecs","specState","defaultSpecsState"],"mappings":";;;;;;;AA0BA;;AAEA;;;;;;;;AAEO,IAAMA,KAAe,GAAG;AAC7B,SAAO;AACLC,IAAAA,GAAG,EAAE,KADA;AAELC,IAAAA,SAAS,EAAE,KAFN;AAGLC,IAAAA,MAAM,EAAE,SAHH;AAILC,IAAAA,OAAO,EAAE,2DAJJ;AAKLC,IAAAA,WAAW,EAAEC,OAAO,CAAC,sCAAD,CALf;AAMLC,IAAAA,OAAO,EAAE;AANJ,GADsB;AAS7B,SAAO;AACLN,IAAAA,GAAG,EAAE,KADA;AAELC,IAAAA,SAAS,EAAE,IAFN;AAGLC,IAAAA,MAAM,EAAE,cAHH;AAILC,IAAAA,OAAO,EAAE,2DAJJ;AAKLC,IAAAA,WAAW,EAAEC,OAAO,CAAC,sCAAD,CALf;AAMLC,IAAAA,OAAO,EAAE;AANJ;AATsB,CAAxB;;;AAmBA,IAAMC,GAAG,GAAGC,qBAASC,QAAT,CAAkBV,KAAK,CAAC,KAAD,CAAL,CAAaK,WAA/B,CAAZ;;;;AACA,IAAMM,KAAK,GAAGF,qBAASC,QAAT,CAAkBV,KAAK,CAAC,KAAD,CAAL,CAAaK,WAA/B,CAAd;;;;AAEA,IAAMO,cAAc,GAAG,MAAM;AAClC,MAAMC,WAAW,qBAAQb,KAAR,CAAjB;;AACAa,EAAAA,WAAW,CAAC,KAAD,CAAX,CAAmBL,GAAnB,GAAyBA,GAAzB;AACAK,EAAAA,WAAW,CAAC,KAAD,CAAX,CAAmBL,GAAnB,GAAyBG,KAAzB;AACA,SAAOE,WAAP;AACD,CALM;;;;AAOA,IAAMC,SAAoB,mCAC5BC,wBAD4B;AAE/Bf,EAAAA,KAAK,EAAEY,cAAc;AAFU,EAA1B","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nimport type { SpecList } from '@looker/sdk-codegen'\nimport { ApiModel } from '@looker/sdk-codegen'\nimport type { SpecState } from '../state'\nimport { defaultSpecsState } from '../state'\n\nexport const specs: SpecList = {\n '3.1': {\n key: '3.1',\n isDefault: false,\n status: 'current',\n specURL: 'https://self-signed.looker.com:19999/api/3.1/swagger.json',\n specContent: require('../../../../spec/Looker.3.1.oas.json'),\n version: '3.1',\n },\n '4.0': {\n key: '4.0',\n isDefault: true,\n status: 'experimental',\n specURL: 'https://self-signed.looker.com:19999/api/4.0/swagger.json',\n specContent: require('../../../../spec/Looker.4.0.oas.json'),\n version: '4.0',\n },\n}\n\nexport const api = ApiModel.fromJson(specs['3.1'].specContent)\nexport const api40 = ApiModel.fromJson(specs['4.0'].specContent)\n\nexport const getLoadedSpecs = () => {\n const loadedSpecs = { ...specs }\n loadedSpecs['3.1'].api = api\n loadedSpecs['4.0'].api = api40\n return loadedSpecs\n}\n\nexport const specState: SpecState = {\n ...defaultSpecsState,\n specs: getLoadedSpecs(),\n}\n"],"file":"specs.js"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReactElement } from 'react';
|
|
2
2
|
import type { Store } from 'redux';
|
|
3
3
|
import type { RenderOptions } from '@testing-library/react';
|
|
4
|
-
import type { LodesState, RootState, SettingState } from '../state';
|
|
4
|
+
import type { LodesState, RootState, SettingState, SpecState } from '../state';
|
|
5
5
|
export declare const withReduxProvider: (consumers: ReactElement<any>, store?: Store<RootState>) => JSX.Element;
|
|
6
6
|
export declare const renderWithReduxProvider: (consumers: ReactElement<any>, store?: Store<RootState, import("redux").AnyAction> | undefined, options?: Omit<RenderOptions<typeof import("@testing-library/dom/types/queries"), HTMLElement>, "queries"> | undefined) => import("@testing-library/react").RenderResult<typeof import("@testing-library/dom/types/queries"), HTMLElement>;
|
|
7
7
|
export declare const renderWithRouterAndReduxProvider: (consumers: ReactElement<any>, initialEntries?: string[], store?: Store<RootState, import("redux").AnyAction> | undefined, options?: Omit<RenderOptions<typeof import("@testing-library/dom/types/queries"), HTMLElement>, "queries"> | undefined) => import("@testing-library/react").RenderResult<typeof import("@testing-library/dom/types/queries"), HTMLElement>;
|
|
@@ -12,5 +12,6 @@ declare type DeepPartial<T> = {
|
|
|
12
12
|
export declare const createTestStore: (overrides?: DeepPartial<RootState> | undefined) => import("@looker/redux").Store<{
|
|
13
13
|
settings: SettingState;
|
|
14
14
|
lodes: LodesState;
|
|
15
|
+
specs: SpecState;
|
|
15
16
|
}, import("redux").AnyAction>;
|
|
16
17
|
export {};
|
package/lib/test-utils/redux.js
CHANGED
|
@@ -19,6 +19,8 @@ var _runIt = require("@looker/run-it");
|
|
|
19
19
|
|
|
20
20
|
var _state = require("../state");
|
|
21
21
|
|
|
22
|
+
var _testData = require("../test-data");
|
|
23
|
+
|
|
22
24
|
var _router = require("./router");
|
|
23
25
|
|
|
24
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -30,7 +32,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
30
32
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
31
33
|
|
|
32
34
|
var withReduxProvider = function withReduxProvider(consumers) {
|
|
33
|
-
var store = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
35
|
+
var store = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createTestStore();
|
|
34
36
|
(0, _extensionUtils.registerEnvAdaptor)(new _extensionUtils.BrowserAdaptor((0, _runIt.initRunItSdk)()));
|
|
35
37
|
return _react.default.createElement(_reactRedux.Provider, {
|
|
36
38
|
store: store
|
|
@@ -53,18 +55,21 @@ var renderWithRouterAndReduxProvider = function renderWithRouterAndReduxProvider
|
|
|
53
55
|
exports.renderWithRouterAndReduxProvider = renderWithRouterAndReduxProvider;
|
|
54
56
|
var preloadedState = {
|
|
55
57
|
settings: _state.defaultSettingsState,
|
|
56
|
-
lodes: _state.defaultLodesState
|
|
58
|
+
lodes: _state.defaultLodesState,
|
|
59
|
+
specs: _state.defaultSpecsState
|
|
57
60
|
};
|
|
58
61
|
exports.preloadedState = preloadedState;
|
|
59
62
|
|
|
60
63
|
var createTestStore = overrides => (0, _redux.createStore)({
|
|
61
64
|
preloadedState: {
|
|
62
65
|
settings: _objectSpread(_objectSpread({}, preloadedState.settings), overrides === null || overrides === void 0 ? void 0 : overrides.settings),
|
|
63
|
-
lodes: _objectSpread(_objectSpread({}, _state.defaultLodesState), overrides === null || overrides === void 0 ? void 0 : overrides.lodes)
|
|
66
|
+
lodes: _objectSpread(_objectSpread({}, _state.defaultLodesState), overrides === null || overrides === void 0 ? void 0 : overrides.lodes),
|
|
67
|
+
specs: _objectSpread(_objectSpread({}, _testData.specState), overrides === null || overrides === void 0 ? void 0 : overrides.specs)
|
|
64
68
|
},
|
|
65
69
|
reducer: {
|
|
66
70
|
settings: _state.settingsSlice.reducer,
|
|
67
|
-
lodes: _state.lodesSlice.reducer
|
|
71
|
+
lodes: _state.lodesSlice.reducer,
|
|
72
|
+
specs: _state.specsSlice.reducer
|
|
68
73
|
}
|
|
69
74
|
});
|
|
70
75
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test-utils/redux.tsx"],"names":["withReduxProvider","consumers","store","
|
|
1
|
+
{"version":3,"sources":["../../src/test-utils/redux.tsx"],"names":["withReduxProvider","consumers","store","createTestStore","BrowserAdaptor","renderWithReduxProvider","options","renderWithRouterAndReduxProvider","initialEntries","preloadedState","settings","defaultSettingsState","lodes","defaultLodesState","specs","defaultSpecsState","overrides","specState","reducer","settingsSlice","lodesSlice","specsSlice"],"mappings":";;;;;;;AA2BA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AAGA;;AAQA;;AACA;;;;;;;;;;AAEO,IAAMA,iBAAiB,GAAG,SAApBA,iBAAoB,CAC/BC,SAD+B,EAG5B;AAAA,MADHC,KACG,uEADuBC,eAAe,EACtC;AACH,0CAAmB,IAAIC,8BAAJ,CAAmB,0BAAnB,CAAnB;AACA,SAAO,6BAAC,oBAAD;AAAU,IAAA,KAAK,EAAEF;AAAjB,KAAyBD,SAAzB,CAAP;AACD,CANM;;;;AAQA,IAAMI,uBAAuB,GAAG,CACrCJ,SADqC,EAErCC,KAFqC,EAGrCI,OAHqC,KAIlC,0CAAgBN,iBAAiB,CAACC,SAAD,EAAYC,KAAZ,CAAjC,EAAqDI,OAArD,CAJE;;;;AAMA,IAAMC,gCAAgC,GAAG,SAAnCA,gCAAmC,CAC9CN,SAD8C;AAAA,MAE9CO,cAF8C,uEAEnB,CAAC,GAAD,CAFmB;AAAA,MAG9CN,KAH8C;AAAA,MAI9CI,OAJ8C;AAAA,SAM9C,8BAAiBN,iBAAiB,CAACC,SAAD,EAAYC,KAAZ,CAAlC,EAAsDM,cAAtD,EAAsEF,OAAtE,CAN8C;AAAA,CAAzC;;;AAQA,IAAMG,cAAyB,GAAG;AACvCC,EAAAA,QAAQ,EAAEC,2BAD6B;AAEvCC,EAAAA,KAAK,EAAEC,wBAFgC;AAGvCC,EAAAA,KAAK,EAAEC;AAHgC,CAAlC;;;AAUA,IAAMZ,eAAe,GAAIa,SAAD,IAC7B,wBAAY;AACVP,EAAAA,cAAc,EAAE;AACdC,IAAAA,QAAQ,kCACHD,cAAc,CAACC,QADZ,GAEHM,SAFG,aAEHA,SAFG,uBAEHA,SAAS,CAAEN,QAFR,CADM;AAKdE,IAAAA,KAAK,kCACAC,wBADA,GAEAG,SAFA,aAEAA,SAFA,uBAEAA,SAAS,CAAEJ,KAFX,CALS;AASdE,IAAAA,KAAK,kCACAG,mBADA,GAEAD,SAFA,aAEAA,SAFA,uBAEAA,SAAS,CAAEF,KAFX;AATS,GADN;AAeVI,EAAAA,OAAO,EAAE;AACPR,IAAAA,QAAQ,EAAES,qBAAcD,OADjB;AAEPN,IAAAA,KAAK,EAAEQ,kBAAWF,OAFX;AAGPJ,IAAAA,KAAK,EAAEO,kBAAWH;AAHX;AAfC,CAAZ,CADK","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { ReactElement } from 'react'\nimport React from 'react'\nimport { Provider } from 'react-redux'\nimport type { Store } from 'redux'\nimport { renderWithTheme } from '@looker/components-test-utils'\nimport type { RenderOptions } from '@testing-library/react'\nimport { createStore } from '@looker/redux'\nimport { BrowserAdaptor, registerEnvAdaptor } from '@looker/extension-utils'\nimport { initRunItSdk } from '@looker/run-it'\n\nimport type { LodesState, RootState, SettingState, SpecState } from '../state'\nimport {\n settingsSlice,\n defaultLodesState,\n defaultSettingsState,\n lodesSlice,\n defaultSpecsState,\n specsSlice,\n} from '../state'\nimport { specState } from '../test-data'\nimport { renderWithRouter } from './router'\n\nexport const withReduxProvider = (\n consumers: ReactElement<any>,\n store: Store<RootState> = createTestStore()\n) => {\n registerEnvAdaptor(new BrowserAdaptor(initRunItSdk()))\n return <Provider store={store}>{consumers}</Provider>\n}\n\nexport const renderWithReduxProvider = (\n consumers: ReactElement<any>,\n store?: Store<RootState>,\n options?: Omit<RenderOptions, 'queries'>\n) => renderWithTheme(withReduxProvider(consumers, store), options)\n\nexport const renderWithRouterAndReduxProvider = (\n consumers: ReactElement<any>,\n initialEntries: string[] = ['/'],\n store?: Store<RootState>,\n options?: Omit<RenderOptions, 'queries'>\n) =>\n renderWithRouter(withReduxProvider(consumers, store), initialEntries, options)\n\nexport const preloadedState: RootState = {\n settings: defaultSettingsState,\n lodes: defaultLodesState,\n specs: defaultSpecsState,\n}\n\ntype DeepPartial<T> = {\n [P in keyof T]?: DeepPartial<T[P]>\n}\n\nexport const createTestStore = (overrides?: DeepPartial<RootState>) =>\n createStore({\n preloadedState: {\n settings: {\n ...preloadedState.settings,\n ...overrides?.settings,\n } as SettingState,\n lodes: {\n ...defaultLodesState,\n ...overrides?.lodes,\n } as LodesState,\n specs: {\n ...specState,\n ...overrides?.specs,\n } as SpecState,\n },\n reducer: {\n settings: settingsSlice.reducer,\n lodes: lodesSlice.reducer,\n specs: specsSlice.reducer,\n },\n })\n"],"file":"redux.js"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ILookerVersions, SpecItem, SpecList } from '@looker/sdk-codegen';
|
|
2
|
+
import { ApiModel } from '@looker/sdk-codegen';
|
|
3
|
+
import type { RunItValues } from '@looker/run-it';
|
|
4
|
+
export declare type StorageLocation = 'session' | 'local';
|
|
5
|
+
export interface IStorageValue {
|
|
6
|
+
location: StorageLocation;
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
export declare type ApiSpecFetcher = (version: string, name: string) => Promise<string | RunItValues>;
|
|
10
|
+
export declare type ParsedSpec = ApiModel | undefined;
|
|
11
|
+
export interface RunItConfigurator {
|
|
12
|
+
getStorage: (key: string, defaultValue?: string) => IStorageValue;
|
|
13
|
+
setStorage(key: string, value: string, location: 'local' | 'session'): string;
|
|
14
|
+
removeStorage(key: string): void;
|
|
15
|
+
}
|
|
16
|
+
export interface ILoadedSpecs {
|
|
17
|
+
baseUrl: string;
|
|
18
|
+
webUrl: string;
|
|
19
|
+
headless: boolean;
|
|
20
|
+
specs: SpecList;
|
|
21
|
+
fetchResult: string;
|
|
22
|
+
}
|
|
23
|
+
export interface IAPIXConfig extends ILookerVersions {
|
|
24
|
+
headless?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare const fullify: (uri: string, baseUrl: string) => string;
|
|
27
|
+
export declare const funFetch: (version: string, name: string) => Promise<string>;
|
|
28
|
+
export declare const specUrlFetch: (url: string) => Promise<ParsedSpec>;
|
|
29
|
+
export declare const sdkSpecFetch: (spec: SpecItem, fetcher: ApiSpecFetcher) => Promise<ParsedSpec>;
|
|
30
|
+
export declare const fallbackFetch: (spec: SpecItem, fetcher: ApiSpecFetcher) => Promise<ParsedSpec>;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.fallbackFetch = exports.sdkSpecFetch = exports.specUrlFetch = exports.funFetch = exports.fullify = void 0;
|
|
7
|
+
|
|
8
|
+
var _sdkCodegen = require("@looker/sdk-codegen");
|
|
9
|
+
|
|
10
|
+
var _sdk = require("@looker/sdk");
|
|
11
|
+
|
|
12
|
+
var _extensionUtils = require("@looker/extension-utils");
|
|
13
|
+
|
|
14
|
+
var _runIt = require("@looker/run-it");
|
|
15
|
+
|
|
16
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
17
|
+
|
|
18
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
19
|
+
|
|
20
|
+
var makeApi = content => {
|
|
21
|
+
var json;
|
|
22
|
+
|
|
23
|
+
if (typeof content === 'string') {
|
|
24
|
+
json = JSON.parse(content);
|
|
25
|
+
} else {
|
|
26
|
+
json = content;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
json = (0, _sdkCodegen.upgradeSpecObject)(json);
|
|
30
|
+
return _sdkCodegen.ApiModel.fromJson(json);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var fullify = (uri, baseUrl) => {
|
|
34
|
+
if (uri.match(/^https?:/)) {
|
|
35
|
+
return uri;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var url = new URL(uri, baseUrl);
|
|
39
|
+
return url.toString();
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
exports.fullify = fullify;
|
|
43
|
+
|
|
44
|
+
var apiSpecBits = spec => {
|
|
45
|
+
var _spec$specURL;
|
|
46
|
+
|
|
47
|
+
return ((_spec$specURL = spec.specURL) === null || _spec$specURL === void 0 ? void 0 : _spec$specURL.split('/').slice(-2)) || [];
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
var funFetch = (version, name) => {
|
|
51
|
+
var sdk = (0, _extensionUtils.getEnvAdaptor)().sdk;
|
|
52
|
+
return sdk.ok((0, _sdk.api_spec)(sdk, version, name));
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
exports.funFetch = funFetch;
|
|
56
|
+
|
|
57
|
+
var specUrlFetch = function () {
|
|
58
|
+
var _ref = _asyncToGenerator(function* (url) {
|
|
59
|
+
try {
|
|
60
|
+
var content = yield (0, _runIt.getUrl)(url);
|
|
61
|
+
return makeApi(content);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return function specUrlFetch(_x) {
|
|
68
|
+
return _ref.apply(this, arguments);
|
|
69
|
+
};
|
|
70
|
+
}();
|
|
71
|
+
|
|
72
|
+
exports.specUrlFetch = specUrlFetch;
|
|
73
|
+
|
|
74
|
+
var sdkSpecFetch = function () {
|
|
75
|
+
var _ref2 = _asyncToGenerator(function* (spec, fetcher) {
|
|
76
|
+
if (spec.api) return spec.api;
|
|
77
|
+
if (!spec.specURL) return undefined;
|
|
78
|
+
var [version, name] = apiSpecBits(spec);
|
|
79
|
+
var content = yield fetcher(version, name);
|
|
80
|
+
return makeApi(content);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return function sdkSpecFetch(_x2, _x3) {
|
|
84
|
+
return _ref2.apply(this, arguments);
|
|
85
|
+
};
|
|
86
|
+
}();
|
|
87
|
+
|
|
88
|
+
exports.sdkSpecFetch = sdkSpecFetch;
|
|
89
|
+
|
|
90
|
+
var fallbackFetch = function () {
|
|
91
|
+
var _ref3 = _asyncToGenerator(function* (spec, fetcher) {
|
|
92
|
+
if (spec.api) return spec.api;
|
|
93
|
+
if (!spec.specURL) return undefined;
|
|
94
|
+
var api;
|
|
95
|
+
|
|
96
|
+
try {
|
|
97
|
+
api = yield specUrlFetch(spec.specURL);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
console.error({
|
|
100
|
+
error
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!api) {
|
|
105
|
+
var sdk = (0, _extensionUtils.getEnvAdaptor)().sdk;
|
|
106
|
+
var authed = sdk.authSession.isAuthenticated();
|
|
107
|
+
|
|
108
|
+
if (!authed) {
|
|
109
|
+
yield sdk.authSession.login();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
api = yield sdkSpecFetch(spec, fetcher);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return api;
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
return function fallbackFetch(_x4, _x5) {
|
|
119
|
+
return _ref3.apply(this, arguments);
|
|
120
|
+
};
|
|
121
|
+
}();
|
|
122
|
+
|
|
123
|
+
exports.fallbackFetch = fallbackFetch;
|
|
124
|
+
//# sourceMappingURL=adaptorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/adaptorUtils.ts"],"names":["makeApi","content","json","JSON","parse","ApiModel","fromJson","fullify","uri","baseUrl","match","url","URL","toString","apiSpecBits","spec","specURL","split","slice","funFetch","version","name","sdk","ok","specUrlFetch","error","undefined","sdkSpecFetch","fetcher","api","fallbackFetch","console","authed","authSession","isAuthenticated","login"],"mappings":";;;;;;;AA2BA;;AACA;;AACA;;AAEA;;;;;;AAmDA,IAAMA,OAAO,GAAIC,OAAD,IAAmC;AACjD,MAAIC,IAAJ;;AACA,MAAI,OAAOD,OAAP,KAAmB,QAAvB,EAAiC;AAC/BC,IAAAA,IAAI,GAAGC,IAAI,CAACC,KAAL,CAAWH,OAAX,CAAP;AACD,GAFD,MAEO;AACLC,IAAAA,IAAI,GAAGD,OAAP;AACD;;AACDC,EAAAA,IAAI,GAAG,mCAAkBA,IAAlB,CAAP;AACA,SAAOG,qBAASC,QAAT,CAAkBJ,IAAlB,CAAP;AACD,CATD;;AAgBO,IAAMK,OAAO,GAAG,CAACC,GAAD,EAAcC,OAAd,KAA0C;AAC/D,MAAID,GAAG,CAACE,KAAJ,CAAU,UAAV,CAAJ,EAA2B;AACzB,WAAOF,GAAP;AACD;;AACD,MAAMG,GAAG,GAAG,IAAIC,GAAJ,CAAQJ,GAAR,EAAaC,OAAb,CAAZ;AACA,SAAOE,GAAG,CAACE,QAAJ,EAAP;AACD,CANM;;;;AAWP,IAAMC,WAAW,GAAIC,IAAD;AAAA;;AAAA,SAClB,kBAAAA,IAAI,CAACC,OAAL,gEAAcC,KAAd,CAAoB,GAApB,EAAyBC,KAAzB,CAA+B,CAAC,CAAhC,MAAsC,EADpB;AAAA,CAApB;;AAQO,IAAMC,QAAQ,GAAG,CAACC,OAAD,EAAkBC,IAAlB,KAAoD;AAC1E,MAAMC,GAAG,GAAG,qCAAgBA,GAA5B;AACA,SAAOA,GAAG,CAACC,EAAJ,CAAO,mBAASD,GAAT,EAAcF,OAAd,EAAuBC,IAAvB,CAAP,CAAP;AACD,CAHM;;;;AASA,IAAMG,YAAY;AAAA,+BAAG,WAAOb,GAAP,EAA4C;AACtE,QAAI;AACF,UAAMV,OAAO,SAAS,mBAAOU,GAAP,CAAtB;AACA,aAAOX,OAAO,CAACC,OAAD,CAAd;AACD,KAHD,CAGE,OAAOwB,KAAP,EAAc;AACd,aAAOC,SAAP;AACD;AACF,GAPwB;;AAAA,kBAAZF,YAAY;AAAA;AAAA;AAAA,GAAlB;;;;AAiBA,IAAMG,YAAY;AAAA,gCAAG,WAC1BZ,IAD0B,EAE1Ba,OAF0B,EAGF;AACxB,QAAIb,IAAI,CAACc,GAAT,EAAc,OAAOd,IAAI,CAACc,GAAZ;AACd,QAAI,CAACd,IAAI,CAACC,OAAV,EAAmB,OAAOU,SAAP;AACnB,QAAM,CAACN,OAAD,EAAUC,IAAV,IAAkBP,WAAW,CAACC,IAAD,CAAnC;AACA,QAAMd,OAAO,SAAS2B,OAAO,CAACR,OAAD,EAAUC,IAAV,CAA7B;AACA,WAAOrB,OAAO,CAACC,OAAD,CAAd;AACD,GATwB;;AAAA,kBAAZ0B,YAAY;AAAA;AAAA;AAAA,GAAlB;;;;AAgBA,IAAMG,aAAa;AAAA,gCAAG,WAC3Bf,IAD2B,EAE3Ba,OAF2B,EAGH;AACxB,QAAIb,IAAI,CAACc,GAAT,EAAc,OAAOd,IAAI,CAACc,GAAZ;AACd,QAAI,CAACd,IAAI,CAACC,OAAV,EAAmB,OAAOU,SAAP;AACnB,QAAIG,GAAJ;;AACA,QAAI;AACFA,MAAAA,GAAG,SAASL,YAAY,CAACT,IAAI,CAACC,OAAN,CAAxB;AACD,KAFD,CAEE,OAAOS,KAAP,EAAc;AACdM,MAAAA,OAAO,CAACN,KAAR,CAAc;AAAEA,QAAAA;AAAF,OAAd;AACD;;AACD,QAAI,CAACI,GAAL,EAAU;AACR,UAAMP,GAAG,GAAG,qCAAgBA,GAA5B;AACA,UAAMU,MAAM,GAAGV,GAAG,CAACW,WAAJ,CAAgBC,eAAhB,EAAf;;AACA,UAAI,CAACF,MAAL,EAAa;AACX,cAAMV,GAAG,CAACW,WAAJ,CAAgBE,KAAhB,EAAN;AACD;;AACDN,MAAAA,GAAG,SAASF,YAAY,CAACZ,IAAD,EAAOa,OAAP,CAAxB;AACD;;AACD,WAAOC,GAAP;AACD,GArByB;;AAAA,kBAAbC,aAAa;AAAA;AAAA;AAAA,GAAnB","sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { ILookerVersions, SpecItem, SpecList } from '@looker/sdk-codegen'\nimport { ApiModel, upgradeSpecObject } from '@looker/sdk-codegen'\nimport { api_spec } from '@looker/sdk'\nimport { getEnvAdaptor } from '@looker/extension-utils'\nimport type { RunItValues } from '@looker/run-it'\nimport { getUrl } from '@looker/run-it'\n\nexport type StorageLocation = 'session' | 'local'\n\n/** Object returned from storage service */\nexport interface IStorageValue {\n /** Location of the stored object */\n location: StorageLocation\n /** Stored string representation of the value (usually JSON) */\n value: string\n}\n\n/** function to retrieve a spec based on version and name */\nexport type ApiSpecFetcher = (\n version: string,\n name: string\n) => Promise<string | RunItValues>\n\n/** Either the spec is parsed or it's undefined */\nexport type ParsedSpec = ApiModel | undefined\n\n/** service abstraction for extension and browser based usage */\nexport interface RunItConfigurator {\n getStorage: (key: string, defaultValue?: string) => IStorageValue\n setStorage(key: string, value: string, location: 'local' | 'session'): string\n removeStorage(key: string): void\n}\n\n/** Processed specifications */\nexport interface ILoadedSpecs {\n /** API server url */\n baseUrl: string\n /** Web server url */\n webUrl: string\n /** should APIX run headless? */\n headless: boolean\n /** loaded specifications */\n specs: SpecList\n /** communication errors */\n fetchResult: string\n}\n\n/** Extends versions payload with headless toggle for API Explorer */\nexport interface IAPIXConfig extends ILookerVersions {\n headless?: boolean\n}\n\n/**\n * Convert content into an ApiModel\n * @param content to convert\n */\nconst makeApi = (content: string | RunItValues) => {\n let json\n if (typeof content === 'string') {\n json = JSON.parse(content)\n } else {\n json = content\n }\n json = upgradeSpecObject(json)\n return ApiModel.fromJson(json)\n}\n\n/**\n * Ensure the URI is a full URL\n * @param uri possible relative path\n * @param baseUrl base url for qualifying full path\n */\nexport const fullify = (uri: string, baseUrl: string): string => {\n if (uri.match(/^https?:/)) {\n return uri\n }\n const url = new URL(uri, baseUrl)\n return url.toString()\n}\n/**\n * parse spec url into version and name for api_spec cccall\n * @param spec to parse\n */\nconst apiSpecBits = (spec: SpecItem): string[] =>\n spec.specURL?.split('/').slice(-2) || []\n\n/**\n * Use the functional api_spec fetch\n * @param version to retrieve\n * @param name to retrieve\n */\nexport const funFetch = (version: string, name: string): Promise<string> => {\n const sdk = getEnvAdaptor().sdk\n return sdk.ok(api_spec(sdk, version, name))\n}\n\n/**\n * try to fetch a spec by URL, trap any errors and return undefined\n * @param url to convert to an API spec\n */\nexport const specUrlFetch = async (url: string): Promise<ParsedSpec> => {\n try {\n const content = await getUrl(url)\n return makeApi(content)\n } catch (error) {\n return undefined\n }\n}\n\n/**\n * fetch and compile an API specification to an ApiModel if it's not already available\n *\n * **NOTE**: This uses Looker API 4.0 to fetch the specification so fetch works with CORS\n *\n * @param spec to fetch and compile\n * @param fetcher function to retrieve API spec content\n */\nexport const sdkSpecFetch = async (\n spec: SpecItem,\n fetcher: ApiSpecFetcher\n): Promise<ParsedSpec> => {\n if (spec.api) return spec.api\n if (!spec.specURL) return undefined\n const [version, name] = apiSpecBits(spec)\n const content = await fetcher(version, name)\n return makeApi(content)\n}\n\n/** Attempt to retrieve spec by URL, then api_spec SDK call\n *\n * @param spec to fetch\n * @param fetcher function to retrieve and parse spec\n */\nexport const fallbackFetch = async (\n spec: SpecItem,\n fetcher: ApiSpecFetcher\n): Promise<ParsedSpec> => {\n if (spec.api) return spec.api\n if (!spec.specURL) return undefined\n let api: ParsedSpec\n try {\n api = await specUrlFetch(spec.specURL)\n } catch (error) {\n console.error({ error })\n }\n if (!api) {\n const sdk = getEnvAdaptor().sdk\n const authed = sdk.authSession.isAuthenticated()\n if (!authed) {\n await sdk.authSession.login()\n }\n api = await sdkSpecFetch(spec, fetcher)\n }\n return api\n}\n"],"file":"adaptorUtils.js"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IEnvironmentAdaptor } from '@looker/extension-utils';
|
|
2
|
+
import { BrowserAdaptor } from '@looker/extension-utils';
|
|
3
|
+
import type { IAPIMethods } from '@looker/sdk-rtl';
|
|
4
|
+
import type { SpecItem, SpecList } from '@looker/sdk-codegen';
|
|
5
|
+
export interface IApixAdaptor extends IEnvironmentAdaptor {
|
|
6
|
+
fetchSpecList(versionsUrl?: string): Promise<SpecList>;
|
|
7
|
+
fetchSpec(spec: SpecItem): Promise<SpecItem>;
|
|
8
|
+
}
|
|
9
|
+
export declare const getApixAdaptor: () => IApixAdaptor;
|
|
10
|
+
export declare class ApixAdaptor extends BrowserAdaptor implements IApixAdaptor {
|
|
11
|
+
private readonly fallbackVersionsUrl;
|
|
12
|
+
constructor(sdk: IAPIMethods, fallbackVersionsUrl: string);
|
|
13
|
+
fetchSpecList(versionsUrl?: string): Promise<SpecList>;
|
|
14
|
+
fetchSpec(spec: SpecItem): Promise<SpecItem>;
|
|
15
|
+
}
|