@looker/run-it 0.9.23 → 0.9.27
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +82 -1
- package/lib/RunIt.d.ts +2 -2
- package/lib/RunIt.js +18 -30
- package/lib/RunIt.js.map +1 -1
- package/lib/RunItProvider.d.ts +0 -4
- package/lib/RunItProvider.js +2 -7
- package/lib/RunItProvider.js.map +1 -1
- package/lib/components/ConfigForm/ConfigForm.d.ts +1 -6
- package/lib/components/ConfigForm/ConfigForm.js +39 -48
- package/lib/components/ConfigForm/ConfigForm.js.map +1 -1
- package/lib/components/ConfigForm/index.d.ts +1 -1
- package/lib/components/ConfigForm/index.js +4 -4
- package/lib/components/ConfigForm/index.js.map +1 -1
- package/lib/components/ConfigForm/utils.d.ts +11 -0
- package/lib/components/ConfigForm/utils.js +81 -0
- package/lib/components/ConfigForm/utils.js.map +1 -0
- package/lib/components/LoginForm/LoginForm.d.ts +3 -8
- package/lib/components/LoginForm/LoginForm.js +9 -8
- package/lib/components/LoginForm/LoginForm.js.map +1 -1
- package/lib/components/PerfTracker/PerfTracker.d.ts +0 -2
- package/lib/components/PerfTracker/PerfTracker.js +7 -8
- package/lib/components/PerfTracker/PerfTracker.js.map +1 -1
- package/lib/components/RequestForm/RequestForm.d.ts +0 -6
- package/lib/components/RequestForm/RequestForm.js +0 -7
- package/lib/components/RequestForm/RequestForm.js.map +1 -1
- package/lib/components/common/index.d.ts +0 -1
- package/lib/components/common/index.js +0 -18
- package/lib/components/common/index.js.map +1 -1
- package/lib/esm/RunIt.js +19 -32
- package/lib/esm/RunIt.js.map +1 -1
- package/lib/esm/RunItProvider.js +2 -7
- package/lib/esm/RunItProvider.js.map +1 -1
- package/lib/esm/components/ConfigForm/ConfigForm.js +36 -46
- package/lib/esm/components/ConfigForm/ConfigForm.js.map +1 -1
- package/lib/esm/components/ConfigForm/index.js +1 -1
- package/lib/esm/components/ConfigForm/index.js.map +1 -1
- package/lib/esm/components/ConfigForm/utils.js +61 -0
- package/lib/esm/components/ConfigForm/utils.js.map +1 -0
- package/lib/esm/components/LoginForm/LoginForm.js +7 -7
- package/lib/esm/components/LoginForm/LoginForm.js.map +1 -1
- package/lib/esm/components/PerfTracker/PerfTracker.js +7 -8
- package/lib/esm/components/PerfTracker/PerfTracker.js.map +1 -1
- package/lib/esm/components/RequestForm/RequestForm.js +0 -7
- package/lib/esm/components/RequestForm/RequestForm.js.map +1 -1
- package/lib/esm/components/common/index.js +0 -1
- package/lib/esm/components/common/index.js.map +1 -1
- package/lib/esm/index.js +0 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/utils/RunItSDK.js +8 -78
- package/lib/esm/utils/RunItSDK.js.map +1 -1
- package/lib/esm/utils/requestUtils.js +21 -14
- package/lib/esm/utils/requestUtils.js.map +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -13
- package/lib/index.js.map +1 -1
- package/lib/test-data/responses.js +9 -0
- package/lib/test-data/responses.js.map +1 -1
- package/lib/utils/RunItSDK.d.ts +1 -17
- package/lib/utils/RunItSDK.js +10 -88
- package/lib/utils/RunItSDK.js.map +1 -1
- package/lib/utils/requestUtils.d.ts +2 -3
- package/lib/utils/requestUtils.js +22 -15
- package/lib/utils/requestUtils.js.map +1 -1
- package/package.json +8 -7
- package/lib/components/ConfigForm/configUtils.d.ts +0 -39
- package/lib/components/ConfigForm/configUtils.js +0 -232
- package/lib/components/ConfigForm/configUtils.js.map +0 -1
- package/lib/components/common/StandaloneConfigurator.d.ts +0 -7
- package/lib/components/common/StandaloneConfigurator.js +0 -61
- package/lib/components/common/StandaloneConfigurator.js.map +0 -1
- package/lib/esm/components/ConfigForm/configUtils.js +0 -196
- package/lib/esm/components/ConfigForm/configUtils.js.map +0 -1
- package/lib/esm/components/common/StandaloneConfigurator.js +0 -51
- package/lib/esm/components/common/StandaloneConfigurator.js.map +0 -1
- package/lib/esm/scenes/OAuthScene/OAuthScene.js +0 -64
- package/lib/esm/scenes/OAuthScene/OAuthScene.js.map +0 -1
- package/lib/esm/scenes/OAuthScene/index.js +0 -2
- package/lib/esm/scenes/OAuthScene/index.js.map +0 -1
- package/lib/esm/scenes/index.js +0 -2
- package/lib/esm/scenes/index.js.map +0 -1
- package/lib/scenes/OAuthScene/OAuthScene.d.ts +0 -2
- package/lib/scenes/OAuthScene/OAuthScene.js +0 -81
- package/lib/scenes/OAuthScene/OAuthScene.js.map +0 -1
- package/lib/scenes/OAuthScene/index.d.ts +0 -1
- package/lib/scenes/OAuthScene/index.js +0 -14
- package/lib/scenes/OAuthScene/index.js.map +0 -1
- package/lib/scenes/index.d.ts +0 -1
- package/lib/scenes/index.js +0 -14
- package/lib/scenes/index.js.map +0 -1
@@ -4,25 +4,25 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
4
4
|
|
5
5
|
import React from 'react';
|
6
6
|
import { Button, Tooltip } from '@looker/components';
|
7
|
-
import {
|
7
|
+
import { getEnvAdaptor } from '@looker/extension-utils';
|
8
8
|
import { RunItFormKey } from '../ConfigForm';
|
9
9
|
export var readyToLogin = 'OAuth is configured but your browser session is not authenticated. Click Login to enable RunIt.';
|
10
|
+
export var notReadyToLogin = 'OAuth is not configured. Configure it to be able to Login.';
|
10
11
|
export var LoginForm = _ref => {
|
11
12
|
var {
|
12
|
-
|
13
|
-
requestContent,
|
14
|
-
sdk = runItSDK
|
13
|
+
requestContent
|
15
14
|
} = _ref;
|
15
|
+
var adaptor = getEnvAdaptor();
|
16
16
|
|
17
17
|
var handleLogin = function () {
|
18
18
|
var _ref2 = _asyncToGenerator(function* (e) {
|
19
19
|
e.preventDefault();
|
20
20
|
|
21
21
|
if (requestContent) {
|
22
|
-
|
22
|
+
adaptor.localStorageSetItem(RunItFormKey, JSON.stringify(requestContent));
|
23
23
|
}
|
24
24
|
|
25
|
-
yield
|
25
|
+
yield adaptor.login();
|
26
26
|
});
|
27
27
|
|
28
28
|
return function handleLogin(_x) {
|
@@ -31,7 +31,7 @@ export var LoginForm = _ref => {
|
|
31
31
|
}();
|
32
32
|
|
33
33
|
return React.createElement(Tooltip, {
|
34
|
-
content: readyToLogin
|
34
|
+
content: adaptor.sdk.authSession.settings.authIsConfigured() ? readyToLogin : notReadyToLogin
|
35
35
|
}, React.createElement(Button, {
|
36
36
|
onClick: handleLogin
|
37
37
|
}, "Login"));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/LoginForm/LoginForm.tsx"],"names":["React","Button","Tooltip","
|
1
|
+
{"version":3,"sources":["../../../../src/components/LoginForm/LoginForm.tsx"],"names":["React","Button","Tooltip","getEnvAdaptor","RunItFormKey","readyToLogin","notReadyToLogin","LoginForm","requestContent","adaptor","handleLogin","e","preventDefault","localStorageSetItem","JSON","stringify","login","sdk","authSession","settings","authIsConfigured"],"mappings":";;;;AA2BA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,MAAT,EAAiBC,OAAjB,QAAgC,oBAAhC;AAEA,SAASC,aAAT,QAA8B,yBAA9B;AAEA,SAASC,YAAT,QAA6B,eAA7B;AAOA,OAAO,IAAMC,YAAY,GACvB,iGADK;AAGP,OAAO,IAAMC,eAAe,GAC1B,4DADK;AAGP,OAAO,IAAMC,SAA6B,GAAG,QAAwB;AAAA,MAAvB;AAAEC,IAAAA;AAAF,GAAuB;AACnE,MAAMC,OAAO,GAAGN,aAAa,EAA7B;;AACA,MAAMO,WAAW;AAAA,kCAAG,WAAOC,CAAP,EAAiC;AACnDA,MAAAA,CAAC,CAACC,cAAF;;AACA,UAAIJ,cAAJ,EAAoB;AAClBC,QAAAA,OAAO,CAACI,mBAAR,CAA4BT,YAA5B,EAA0CU,IAAI,CAACC,SAAL,CAAeP,cAAf,CAA1C;AACD;;AAED,YAAMC,OAAO,CAACO,KAAR,EAAN;AACD,KAPgB;;AAAA,oBAAXN,WAAW;AAAA;AAAA;AAAA,KAAjB;;AASA,SACE,oBAAC,OAAD;AACE,IAAA,OAAO,EAEHD,OAAO,CAACQ,GAAR,CAAYC,WAAZ,CAAwBC,QAD1B,CAEEC,gBAFF,KAGIf,YAHJ,GAIIC;AANR,KASE,oBAAC,MAAD;AAAQ,IAAA,OAAO,EAAEI;AAAjB,aATF,CADF;AAaD,CAxBM","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 { BaseSyntheticEvent, FC } from 'react'\nimport React from 'react'\nimport { Button, Tooltip } from '@looker/components'\nimport type { OAuthConfigProvider } from '@looker/extension-utils'\nimport { getEnvAdaptor } from '@looker/extension-utils'\n\nimport { RunItFormKey } from '../ConfigForm'\nimport type { RunItValues } from '../..'\n\ninterface LoginFormProps {\n requestContent: RunItValues\n}\n\nexport const readyToLogin =\n 'OAuth is configured but your browser session is not authenticated. Click Login to enable RunIt.'\n\nexport const notReadyToLogin =\n 'OAuth is not configured. Configure it to be able to Login.'\n\nexport const LoginForm: FC<LoginFormProps> = ({ requestContent }) => {\n const adaptor = getEnvAdaptor()\n const handleLogin = async (e: BaseSyntheticEvent) => {\n e.preventDefault()\n if (requestContent) {\n adaptor.localStorageSetItem(RunItFormKey, JSON.stringify(requestContent))\n }\n // This will set storage variables and return to OAuthScene when successful\n await adaptor.login()\n }\n\n return (\n <Tooltip\n content={\n (\n adaptor.sdk.authSession.settings as OAuthConfigProvider\n ).authIsConfigured()\n ? readyToLogin\n : notReadyToLogin\n }\n >\n <Button onClick={handleLogin}>Login</Button>\n </Tooltip>\n )\n}\n"],"file":"LoginForm.js"}
|
@@ -7,12 +7,12 @@ import { PerfTimings } from './perfUtils';
|
|
7
7
|
import { PerfChart } from './PerfChart';
|
8
8
|
import { PerfTable } from './PerfTable';
|
9
9
|
|
10
|
-
var perfFilter = function perfFilter(
|
11
|
-
var all = arguments.length >
|
10
|
+
var perfFilter = function perfFilter() {
|
11
|
+
var all = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
12
12
|
if (all) return '.*';
|
13
|
-
var
|
14
|
-
if (!
|
15
|
-
var config = JSON.parse(
|
13
|
+
var value = localStorage.getItem(RunItConfigKey);
|
14
|
+
if (!value) return '.*';
|
15
|
+
var config = JSON.parse(value);
|
16
16
|
var url = new URL(config.base_url);
|
17
17
|
return "".concat(url.protocol, "//").concat(url.hostname, ".*");
|
18
18
|
};
|
@@ -20,12 +20,11 @@ var perfFilter = function perfFilter(configurator) {
|
|
20
20
|
export var PerfTracker = _ref => {
|
21
21
|
var {
|
22
22
|
perf = new PerfTimings(),
|
23
|
-
showAllColumns = false
|
24
|
-
configurator
|
23
|
+
showAllColumns = false
|
25
24
|
} = _ref;
|
26
25
|
var [loading, setLoading] = useState(false);
|
27
26
|
var [showAll, setShowAll] = useState(false);
|
28
|
-
var [filter, setFilter] = useState(perfFilter(
|
27
|
+
var [filter, setFilter] = useState(perfFilter());
|
29
28
|
var [data, setData] = useState(perf.entries(filter));
|
30
29
|
var [timings, setTimings] = useState(data.length > 0 ? data[0] : undefined);
|
31
30
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/PerfTracker/PerfTracker.tsx"],"names":["React","useEffect","useState","Heading","FlexItem","IconButton","SpaceVertical","FieldToggleSwitch","Flex","Delete","RunItConfigKey","Loading","PerfTimings","PerfChart","PerfTable","perfFilter","
|
1
|
+
{"version":3,"sources":["../../../../src/components/PerfTracker/PerfTracker.tsx"],"names":["React","useEffect","useState","Heading","FlexItem","IconButton","SpaceVertical","FieldToggleSwitch","Flex","Delete","RunItConfigKey","Loading","PerfTimings","PerfChart","PerfTable","perfFilter","all","value","localStorage","getItem","config","JSON","parse","url","URL","base_url","protocol","hostname","PerfTracker","perf","showAllColumns","loading","setLoading","showAll","setShowAll","filter","setFilter","data","setData","entries","timings","setTimings","length","undefined","handleClear","_","clear","handleFilterChange","e","target","checked","pf","handleSelect","item","supported"],"mappings":"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","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 { BaseSyntheticEvent, FC } from 'react'\nimport React, { useEffect, useState } from 'react'\nimport {\n Heading,\n FlexItem,\n IconButton,\n SpaceVertical,\n FieldToggleSwitch,\n Flex,\n} from '@looker/components'\nimport { Delete } from '@styled-icons/material/Delete'\n\nimport { RunItConfigKey } from '../ConfigForm'\nimport { Loading } from '../Loading'\nimport type { LoadTimes } from './perfUtils'\nimport { PerfTimings } from './perfUtils'\nimport { PerfChart } from './PerfChart'\nimport { PerfTable } from './PerfTable'\n\ninterface PerfTrackerProps {\n perf?: PerfTimings\n showAllColumns?: boolean\n}\n\nconst perfFilter = (all = false) => {\n if (all) return '.*'\n // TODO: temporary solution until redux is introduced in RunIt. Using the env\n // adaptor makes the below async, which in turn makes it hard to use this to\n // set the initial state. PerfTracker is only used in the standalone version\n // so this achieves parity.\n const value = localStorage.getItem(RunItConfigKey)\n if (!value) return '.*'\n const config = JSON.parse(value)\n const url = new URL(config.base_url)\n return `${url.protocol}//${url.hostname}.*`\n}\n\nexport const PerfTracker: FC<PerfTrackerProps> = ({\n perf = new PerfTimings(),\n showAllColumns = false,\n}) => {\n // TODO UI option to filter by url pattern\n const [loading, setLoading] = useState(false)\n const [showAll, setShowAll] = useState(false)\n const [filter, setFilter] = useState(perfFilter())\n const [data, setData] = useState<LoadTimes[]>(perf.entries(filter))\n const [timings, setTimings] = useState(data.length > 0 ? data[0] : undefined)\n\n const handleClear = (_: BaseSyntheticEvent) => {\n setLoading(true)\n perf.clear()\n setData([])\n setTimings(undefined)\n }\n\n const handleFilterChange = (e: BaseSyntheticEvent) => {\n setLoading(true)\n const all = e.target.checked\n setShowAll(all)\n const pf = perfFilter(all)\n setFilter(pf)\n setData(perf.entries(pf))\n }\n\n useEffect(() => {\n setLoading(false)\n }, [data])\n\n const handleSelect = (item: LoadTimes) => setTimings(item)\n\n return (\n <>\n <Heading>Load Times for {filter}</Heading>\n <Flex>\n <FlexItem>\n <IconButton\n icon={<Delete />}\n onClick={handleClear}\n label=\"Clear the performance queue\"\n />\n </FlexItem>\n <FlexItem>\n <FieldToggleSwitch\n name=\"filtering\"\n label=\"Show All\"\n onChange={handleFilterChange}\n on={showAll}\n />\n </FlexItem>\n <FlexItem>\n <Loading loading={loading} />\n </FlexItem>\n </Flex>\n <>\n {!PerfTimings.supported &&\n 'Performance timing is not supported in this browser'}\n {PerfTimings.supported && !!timings && (\n <SpaceVertical gap=\"small\">\n <PerfChart loadTimes={timings} />\n <PerfTable\n data={data}\n onSelect={handleSelect}\n showAllColumns={showAllColumns}\n />\n </SpaceVertical>\n )}\n {PerfTimings.supported &&\n data.length < 1 &&\n 'No performance data is loaded'}\n </>\n </>\n )\n}\n"],"file":"PerfTracker.js"}
|
@@ -11,7 +11,6 @@ import { createSimpleItem, createComplexItem, showDataChangeWarning, updateNulla
|
|
11
11
|
import { FormItem } from './FormItem';
|
12
12
|
export var RequestForm = _ref => {
|
13
13
|
var {
|
14
|
-
sdk,
|
15
14
|
inputs,
|
16
15
|
httpMethod,
|
17
16
|
handleSubmit,
|
@@ -20,9 +19,7 @@ export var RequestForm = _ref => {
|
|
20
19
|
needsAuth,
|
21
20
|
hasConfig,
|
22
21
|
handleConfig,
|
23
|
-
setVersionsUrl,
|
24
22
|
setHasConfig,
|
25
|
-
configurator,
|
26
23
|
validationMessage,
|
27
24
|
setValidationMessage,
|
28
25
|
isExtension = false
|
@@ -73,10 +70,6 @@ export var RequestForm = _ref => {
|
|
73
70
|
}, validationMessage), React.createElement(Fieldset, null, inputs.map(input => typeof input.type === 'string' ? createSimpleItem(input, handleChange, handleNumberChange, handleBoolChange, handleDateChange, requestContent) : createComplexItem(input, handleComplexChange, requestContent)), httpMethod !== 'GET' && showDataChangeWarning(), React.createElement(FormItem, {
|
74
71
|
id: "buttonbar"
|
75
72
|
}, React.createElement(React.Fragment, null, hasConfig ? needsAuth ? React.createElement(LoginForm, {
|
76
|
-
sdk: sdk,
|
77
|
-
setVersionsUrl: setVersionsUrl,
|
78
|
-
setHasConfig: setHasConfig,
|
79
|
-
configurator: configurator,
|
80
73
|
requestContent: requestContent
|
81
74
|
}) : React.createElement(Tooltip, {
|
82
75
|
content: "Run the API request"
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/RequestForm/RequestForm.tsx"],"names":["React","Button","Form","ButtonTransparent","Tooltip","Fieldset","MessageBar","LoginForm","createSimpleItem","createComplexItem","showDataChangeWarning","updateNullableProp","FormItem","RequestForm","sdk","inputs","httpMethod","handleSubmit","requestContent","setRequestContent","needsAuth","hasConfig","handleConfig","setVersionsUrl","setHasConfig","configurator","validationMessage","setValidationMessage","isExtension","handleBoolChange","e","target","name","checked","handleNumberChange","value","parseFloat","undefined","newState","handleDateChange","date","handleChange","handleComplexChange","safeSetMessage","handleClear","preventDefault","map","input","type"],"mappings":"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","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 { BaseSyntheticEvent, FC, Dispatch } from 'react'\nimport React from 'react'\nimport {\n Button,\n Form,\n ButtonTransparent,\n Tooltip,\n Fieldset,\n MessageBar,\n} from '@looker/components'\nimport type { IAPIMethods } from '@looker/sdk-rtl'\nimport type { RunItHttpMethod, RunItInput, RunItValues } from '../../RunIt'\nimport type { RunItConfigurator } from '../ConfigForm'\nimport { LoginForm } from '../LoginForm'\nimport type { RunItSetter } from '../..'\nimport {\n createSimpleItem,\n createComplexItem,\n showDataChangeWarning,\n updateNullableProp,\n} from './formUtils'\nimport { FormItem } from './FormItem'\n\n/** Properties required by RequestForm */\ninterface RequestFormProps {\n /** Established SDK instance */\n sdk: IAPIMethods\n /** Request inputs to the endpoint */\n inputs: RunItInput[]\n /** A callback for submitting the form */\n handleSubmit: (e: BaseSyntheticEvent) => void\n /** HTTP method used for this REST request */\n httpMethod: RunItHttpMethod\n /** A collection type react state to store path, query and body parameters as entered by the user */\n requestContent: RunItValues\n /** A set state callback fn for populating requestContent on interaction with the request form */\n setRequestContent: Dispatch<RunItValues>\n /** Is authentication required? */\n needsAuth: boolean\n /** Does RunIt have the configuration values it needs? */\n hasConfig: boolean\n /** Handle config button click */\n handleConfig: (e: BaseSyntheticEvent) => void\n /** Hook to refresh specifications */\n setVersionsUrl: RunItSetter\n /** A set state callback which if present allows for editing, setting or clearing OAuth configuration parameters */\n setHasConfig?: Dispatch<boolean>\n /** Configuration plug-in for stand-alone or extension */\n configurator: RunItConfigurator\n /** Validation message to display */\n validationMessage?: string\n /** Validation message setter */\n setValidationMessage?: Dispatch<string>\n /** Is RunIt being used in a Looker extension? */\n isExtension?: boolean\n}\n\n/**\n * Dynamically generates a REST request form and its form elements corresponding to parameters from an array of RunIt\n * inputs\n */\nexport const RequestForm: FC<RequestFormProps> = ({\n sdk,\n inputs,\n httpMethod,\n handleSubmit,\n requestContent,\n setRequestContent,\n needsAuth,\n hasConfig,\n handleConfig,\n setVersionsUrl,\n setHasConfig,\n configurator,\n validationMessage,\n setValidationMessage,\n isExtension = false,\n}) => {\n const handleBoolChange = (e: BaseSyntheticEvent) => {\n setRequestContent({ ...requestContent, [e.target.name]: e.target.checked })\n }\n\n const handleNumberChange = (e: BaseSyntheticEvent) => {\n const value = e.target.value ? parseFloat(e.target.value) : undefined\n const newState = updateNullableProp(requestContent, e.target.name, value)\n setRequestContent(newState)\n }\n\n const handleDateChange = (name: string, date?: Date) => {\n const newState = updateNullableProp(requestContent, name, date)\n setRequestContent(newState)\n }\n\n const handleChange = (e: BaseSyntheticEvent) => {\n const newState = updateNullableProp(\n requestContent,\n e.target.name,\n e.target.value\n )\n setRequestContent(newState)\n }\n\n const handleComplexChange = (name: string, value: string) => {\n setRequestContent({ ...requestContent, [name]: value })\n }\n\n const safeSetMessage = (value: string) =>\n setValidationMessage && setValidationMessage(value)\n\n const handleClear = (e: BaseSyntheticEvent) => {\n e.preventDefault()\n setRequestContent({})\n safeSetMessage('')\n }\n\n return (\n <Form onSubmit={handleSubmit}>\n {validationMessage && (\n <MessageBar\n intent={'critical'}\n onPrimaryClick={() => safeSetMessage('')}\n visible={validationMessage !== ''}\n >\n {validationMessage}\n </MessageBar>\n )}\n <Fieldset>\n {inputs.map((input) =>\n typeof input.type === 'string'\n ? createSimpleItem(\n input,\n handleChange,\n handleNumberChange,\n handleBoolChange,\n handleDateChange,\n requestContent\n )\n : createComplexItem(input, handleComplexChange, requestContent)\n )}\n {httpMethod !== 'GET' && showDataChangeWarning()}\n <FormItem id=\"buttonbar\">\n <>\n {hasConfig ? (\n needsAuth ? (\n <LoginForm\n sdk={sdk}\n setVersionsUrl={setVersionsUrl}\n setHasConfig={setHasConfig}\n configurator={configurator}\n requestContent={requestContent}\n />\n ) : (\n <Tooltip content=\"Run the API request\">\n <Button type=\"submit\">Run</Button>\n </Tooltip>\n )\n ) : (\n !isExtension &&\n setHasConfig && (\n <Tooltip content=\"Configure your OAuth server to Run requests\">\n <Button onClick={handleConfig}>Configure</Button>\n </Tooltip>\n )\n )}\n <Tooltip content=\"Clear entered values\">\n <ButtonTransparent type=\"button\" onClick={handleClear}>\n Clear\n </ButtonTransparent>\n </Tooltip>\n </>\n </FormItem>\n </Fieldset>\n </Form>\n )\n}\n"],"file":"RequestForm.js"}
|
1
|
+
{"version":3,"sources":["../../../../src/components/RequestForm/RequestForm.tsx"],"names":["React","Button","Form","ButtonTransparent","Tooltip","Fieldset","MessageBar","LoginForm","createSimpleItem","createComplexItem","showDataChangeWarning","updateNullableProp","FormItem","RequestForm","inputs","httpMethod","handleSubmit","requestContent","setRequestContent","needsAuth","hasConfig","handleConfig","setHasConfig","validationMessage","setValidationMessage","isExtension","handleBoolChange","e","target","name","checked","handleNumberChange","value","parseFloat","undefined","newState","handleDateChange","date","handleChange","handleComplexChange","safeSetMessage","handleClear","preventDefault","map","input","type"],"mappings":"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","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 { BaseSyntheticEvent, FC, Dispatch } from 'react'\nimport React from 'react'\nimport {\n Button,\n Form,\n ButtonTransparent,\n Tooltip,\n Fieldset,\n MessageBar,\n} from '@looker/components'\nimport type { RunItHttpMethod, RunItInput, RunItValues } from '../../RunIt'\nimport { LoginForm } from '../LoginForm'\nimport {\n createSimpleItem,\n createComplexItem,\n showDataChangeWarning,\n updateNullableProp,\n} from './formUtils'\nimport { FormItem } from './FormItem'\n\n/** Properties required by RequestForm */\ninterface RequestFormProps {\n /** Request inputs to the endpoint */\n inputs: RunItInput[]\n /** A callback for submitting the form */\n handleSubmit: (e: BaseSyntheticEvent) => void\n /** HTTP method used for this REST request */\n httpMethod: RunItHttpMethod\n /** A collection type react state to store path, query and body parameters as entered by the user */\n requestContent: RunItValues\n /** A set state callback fn for populating requestContent on interaction with the request form */\n setRequestContent: Dispatch<RunItValues>\n /** Is authentication required? */\n needsAuth: boolean\n /** Does RunIt have the configuration values it needs? */\n hasConfig: boolean\n /** Handle config button click */\n handleConfig: (e: BaseSyntheticEvent) => void\n /** A set state callback which if present allows for editing, setting or clearing OAuth configuration parameters */\n setHasConfig?: Dispatch<boolean>\n /** Validation message to display */\n validationMessage?: string\n /** Validation message setter */\n setValidationMessage?: Dispatch<string>\n /** Is RunIt being used in a Looker extension? */\n isExtension?: boolean\n}\n\n/**\n * Dynamically generates a REST request form and its form elements corresponding to parameters from an array of RunIt\n * inputs\n */\nexport const RequestForm: FC<RequestFormProps> = ({\n inputs,\n httpMethod,\n handleSubmit,\n requestContent,\n setRequestContent,\n needsAuth,\n hasConfig,\n handleConfig,\n setHasConfig,\n validationMessage,\n setValidationMessage,\n isExtension = false,\n}) => {\n const handleBoolChange = (e: BaseSyntheticEvent) => {\n setRequestContent({ ...requestContent, [e.target.name]: e.target.checked })\n }\n\n const handleNumberChange = (e: BaseSyntheticEvent) => {\n const value = e.target.value ? parseFloat(e.target.value) : undefined\n const newState = updateNullableProp(requestContent, e.target.name, value)\n setRequestContent(newState)\n }\n\n const handleDateChange = (name: string, date?: Date) => {\n const newState = updateNullableProp(requestContent, name, date)\n setRequestContent(newState)\n }\n\n const handleChange = (e: BaseSyntheticEvent) => {\n const newState = updateNullableProp(\n requestContent,\n e.target.name,\n e.target.value\n )\n setRequestContent(newState)\n }\n\n const handleComplexChange = (name: string, value: string) => {\n setRequestContent({ ...requestContent, [name]: value })\n }\n\n const safeSetMessage = (value: string) =>\n setValidationMessage && setValidationMessage(value)\n\n const handleClear = (e: BaseSyntheticEvent) => {\n e.preventDefault()\n setRequestContent({})\n safeSetMessage('')\n }\n\n return (\n <Form onSubmit={handleSubmit}>\n {validationMessage && (\n <MessageBar\n intent={'critical'}\n onPrimaryClick={() => safeSetMessage('')}\n visible={validationMessage !== ''}\n >\n {validationMessage}\n </MessageBar>\n )}\n <Fieldset>\n {inputs.map((input) =>\n typeof input.type === 'string'\n ? createSimpleItem(\n input,\n handleChange,\n handleNumberChange,\n handleBoolChange,\n handleDateChange,\n requestContent\n )\n : createComplexItem(input, handleComplexChange, requestContent)\n )}\n {httpMethod !== 'GET' && showDataChangeWarning()}\n <FormItem id=\"buttonbar\">\n <>\n {hasConfig ? (\n needsAuth ? (\n <LoginForm requestContent={requestContent} />\n ) : (\n <Tooltip content=\"Run the API request\">\n <Button type=\"submit\">Run</Button>\n </Tooltip>\n )\n ) : (\n !isExtension &&\n setHasConfig && (\n <Tooltip content=\"Configure your OAuth server to Run requests\">\n <Button onClick={handleConfig}>Configure</Button>\n </Tooltip>\n )\n )}\n <Tooltip content=\"Clear entered values\">\n <ButtonTransparent type=\"button\" onClick={handleClear}>\n Clear\n </ButtonTransparent>\n </Tooltip>\n </>\n </FormItem>\n </Fieldset>\n </Form>\n )\n}\n"],"file":"RequestForm.js"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/common/index.ts"],"names":["DarkSpan","RunItHeading"],"mappings":"AAyBA,SAASA,QAAT,EAAmBC,YAAnB,QAAuC,UAAvC
|
1
|
+
{"version":3,"sources":["../../../../src/components/common/index.ts"],"names":["DarkSpan","RunItHeading"],"mappings":"AAyBA,SAASA,QAAT,EAAmBC,YAAnB,QAAuC,UAAvC","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 { DarkSpan, RunItHeading } from './common'\n"],"file":"index.js"}
|
package/lib/esm/index.js
CHANGED
package/lib/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"AA0BA,cAAc,SAAd;AACA,cAAc,iBAAd;AACA,cAAc,SAAd;AACA,cAAc,cAAd
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"AA0BA,cAAc,SAAd;AACA,cAAc,iBAAd;AACA,cAAc,SAAd;AACA,cAAc,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 */\n\nexport * from './RunIt'\nexport * from './RunItProvider'\nexport * from './utils'\nexport * from './components'\n"],"file":"index.js"}
|
@@ -4,93 +4,23 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
4
4
|
|
5
5
|
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; }
|
6
6
|
|
7
|
+
import { BrowserSession, BrowserTransport, DefaultSettings } from '@looker/sdk-rtl';
|
7
8
|
import { functionalSdk40 } from '@looker/sdk';
|
8
|
-
import {
|
9
|
+
import { OAuthConfigProvider } from '@looker/extension-utils';
|
9
10
|
import { RunItConfigKey } from '../components';
|
11
|
+
export var initRunItSdk = () => {
|
12
|
+
var settings = _objectSpread(_objectSpread({}, DefaultSettings()), {}, {
|
13
|
+
base_url: 'https://self-signed.looker.com:19999',
|
14
|
+
agentTag: 'RunIt 0.8'
|
15
|
+
});
|
10
16
|
|
11
|
-
var
|
12
|
-
base_url: 'https://self-signed.looker.com:19999',
|
13
|
-
agentTag: 'RunIt 0.8'
|
14
|
-
});
|
15
|
-
|
16
|
-
export class RunItSettings extends ApiSettings {
|
17
|
-
constructor(settings, configurator) {
|
18
|
-
super(settings);
|
19
|
-
|
20
|
-
_defineProperty(this, "configurator", void 0);
|
21
|
-
|
22
|
-
this.configurator = configurator;
|
23
|
-
}
|
24
|
-
|
25
|
-
getStoredConfig() {
|
26
|
-
var storage = this.configurator.getStorage(RunItConfigKey);
|
27
|
-
var config = {
|
28
|
-
base_url: '',
|
29
|
-
looker_url: ''
|
30
|
-
};
|
31
|
-
|
32
|
-
if (storage.value) {
|
33
|
-
config = JSON.parse(storage.value);
|
34
|
-
}
|
35
|
-
|
36
|
-
return config;
|
37
|
-
}
|
38
|
-
|
39
|
-
authIsConfigured() {
|
40
|
-
var config = this.getStoredConfig();
|
41
|
-
return config.base_url !== '' && config.looker_url !== '';
|
42
|
-
}
|
43
|
-
|
44
|
-
readConfig(_section) {
|
45
|
-
var config = this.getStoredConfig();
|
46
|
-
|
47
|
-
if (!this.authIsConfigured()) {
|
48
|
-
var url = new URL(this.base_url);
|
49
|
-
var authServer = "".concat(url.protocol, "//").concat(url.hostname);
|
50
|
-
config = {
|
51
|
-
base_url: this.base_url,
|
52
|
-
looker_url: "".concat(authServer, ":9999")
|
53
|
-
};
|
54
|
-
}
|
55
|
-
|
56
|
-
var {
|
57
|
-
base_url,
|
58
|
-
looker_url
|
59
|
-
} = config;
|
60
|
-
this.base_url = base_url;
|
61
|
-
return _objectSpread(_objectSpread({}, super.readConfig(_section)), {
|
62
|
-
base_url,
|
63
|
-
looker_url,
|
64
|
-
client_id: 'looker.api-explorer',
|
65
|
-
redirect_uri: "".concat(window.location.origin, "/oauth")
|
66
|
-
});
|
67
|
-
}
|
68
|
-
|
69
|
-
}
|
70
|
-
|
71
|
-
var perfSDK = (settings, configurator) => {
|
72
|
-
var options = new RunItSettings(settings, configurator);
|
17
|
+
var options = new OAuthConfigProvider(settings, RunItConfigKey);
|
73
18
|
var transport = new BrowserTransport(options);
|
74
19
|
var session = new BrowserSession(options, transport);
|
75
20
|
var sdk = functionalSdk40(session);
|
76
21
|
BrowserTransport.trackPerformance = true;
|
77
22
|
return sdk;
|
78
23
|
};
|
79
|
-
|
80
|
-
export var runItSDK;
|
81
|
-
export var initRunItSdk = configurator => {
|
82
|
-
if (!runItSDK) {
|
83
|
-
runItSDK = perfSDK(settings, configurator);
|
84
|
-
}
|
85
|
-
|
86
|
-
return runItSDK;
|
87
|
-
};
|
88
|
-
export var sdkNeedsConfig = sdk => (sdk === null || sdk === void 0 ? void 0 : sdk.authSession.settings) instanceof RunItSettings;
|
89
|
-
export var sdkNeedsAuth = sdk => {
|
90
|
-
if (!sdk) return false;
|
91
|
-
var configIsNeeded = sdkNeedsConfig(sdk);
|
92
|
-
return configIsNeeded && !sdk.authSession.isAuthenticated();
|
93
|
-
};
|
94
24
|
export var StoreConstants;
|
95
25
|
|
96
26
|
(function (StoreConstants) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/RunItSDK.ts"],"names":["
|
1
|
+
{"version":3,"sources":["../../../src/utils/RunItSDK.ts"],"names":["BrowserSession","BrowserTransport","DefaultSettings","functionalSdk40","OAuthConfigProvider","RunItConfigKey","initRunItSdk","settings","base_url","agentTag","options","transport","session","sdk","trackPerformance","StoreConstants"],"mappings":";;;;;;AA2BA,SACEA,cADF,EAEEC,gBAFF,EAGEC,eAHF,QAIO,iBAJP;AAKA,SAASC,eAAT,QAAgC,aAAhC;AACA,SAASC,mBAAT,QAAoC,yBAApC;AAEA,SAASC,cAAT,QAA+B,eAA/B;AAEA,OAAO,IAAMC,YAAY,GAAG,MAAM;AAChC,MAAMC,QAAQ,mCACTL,eAAe,EADN;AAEZM,IAAAA,QAAQ,EAAE,sCAFE;AAGZC,IAAAA,QAAQ,EAAE;AAHE,IAAd;;AAMA,MAAMC,OAAO,GAAG,IAAIN,mBAAJ,CAAwBG,QAAxB,EAAkCF,cAAlC,CAAhB;AACA,MAAMM,SAAS,GAAG,IAAIV,gBAAJ,CAAqBS,OAArB,CAAlB;AACA,MAAME,OAAO,GAAG,IAAIZ,cAAJ,CAAmBU,OAAnB,EAA4BC,SAA5B,CAAhB;AACA,MAAME,GAAG,GAAGV,eAAe,CAACS,OAAD,CAA3B;AACAX,EAAAA,gBAAgB,CAACa,gBAAjB,GAAoC,IAApC;AACA,SAAOD,GAAP;AACD,CAbM;AAeP,WAAYE,cAAZ;;WAAYA,c;AAAAA,EAAAA,c;GAAAA,c,KAAAA,c","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 { IApiSettings } from '@looker/sdk-rtl'\nimport {\n BrowserSession,\n BrowserTransport,\n DefaultSettings,\n} from '@looker/sdk-rtl'\nimport { functionalSdk40 } from '@looker/sdk'\nimport { OAuthConfigProvider } from '@looker/extension-utils'\n\nimport { RunItConfigKey } from '../components'\n\nexport const initRunItSdk = () => {\n const settings = {\n ...DefaultSettings(),\n base_url: 'https://self-signed.looker.com:19999',\n agentTag: 'RunIt 0.8',\n } as IApiSettings\n\n const options = new OAuthConfigProvider(settings, RunItConfigKey)\n const transport = new BrowserTransport(options)\n const session = new BrowserSession(options, transport)\n const sdk = functionalSdk40(session)\n BrowserTransport.trackPerformance = true\n return sdk\n}\n\nexport enum StoreConstants {\n LOCALSTORAGE_SETTINGS_KEY = 'settings',\n}\n"],"file":"RunItSDK.js"}
|
@@ -5,8 +5,8 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
5
5
|
import cloneDeep from 'lodash/cloneDeep';
|
6
6
|
import { isEmpty } from 'lodash';
|
7
7
|
import { ArrayType, DelimArrayType, EnumType, HashType, IntrinsicType, trimInputs } from '@looker/sdk-codegen';
|
8
|
+
import { getEnvAdaptor } from '@looker/extension-utils';
|
8
9
|
import { RunItFormKey } from '../components';
|
9
|
-
import { runItSDK } from './RunItSDK';
|
10
10
|
export var runItNoSet = value => value;
|
11
11
|
|
12
12
|
var macro = (path, vars) => path.replace(/{(\w+)}/g, (_, b) => vars[b]);
|
@@ -46,15 +46,22 @@ export var prepareInputs = (inputs, requestContent) => {
|
|
46
46
|
|
47
47
|
return result;
|
48
48
|
};
|
49
|
-
export var formValues =
|
50
|
-
var
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
49
|
+
export var formValues = function () {
|
50
|
+
var _ref = _asyncToGenerator(function* () {
|
51
|
+
var adaptor = getEnvAdaptor();
|
52
|
+
var formValue = yield adaptor.localStorageGetItem(RunItFormKey);
|
53
|
+
var result = formValue ? JSON.parse(formValue) : {};
|
54
|
+
adaptor.localStorageRemoveItem(RunItFormKey);
|
55
|
+
return result;
|
56
|
+
});
|
57
|
+
|
58
|
+
return function formValues() {
|
59
|
+
return _ref.apply(this, arguments);
|
60
|
+
};
|
61
|
+
}();
|
62
|
+
export var initRequestContent = function initRequestContent(inputs) {
|
63
|
+
var requestContent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
64
|
+
var content = {};
|
58
65
|
|
59
66
|
if (isEmpty(content)) {
|
60
67
|
content = prepareInputs(inputs, requestContent);
|
@@ -93,18 +100,18 @@ export var createRequestParams = (inputs, requestContent) => {
|
|
93
100
|
return [pathParams, queryParams, body];
|
94
101
|
};
|
95
102
|
export var runRequest = function () {
|
96
|
-
var
|
103
|
+
var _ref2 = _asyncToGenerator(function* (sdk, basePath, httpMethod, endpoint, pathParams, queryParams, body) {
|
97
104
|
if (!sdk.authSession.isAuthenticated()) {
|
98
|
-
yield sdk.ok(
|
105
|
+
yield sdk.ok(sdk.authSession.login());
|
99
106
|
}
|
100
107
|
|
101
108
|
var url = "".concat(basePath).concat(pathify(endpoint, pathParams));
|
102
|
-
var raw = yield sdk.authSession.transport.rawRequest(httpMethod, url, queryParams, body, props =>
|
109
|
+
var raw = yield sdk.authSession.transport.rawRequest(httpMethod, url, queryParams, body, props => sdk.authSession.authenticate(props));
|
103
110
|
return raw;
|
104
111
|
});
|
105
112
|
|
106
113
|
return function runRequest(_x, _x2, _x3, _x4, _x5, _x6, _x7) {
|
107
|
-
return
|
114
|
+
return _ref2.apply(this, arguments);
|
108
115
|
};
|
109
116
|
}();
|
110
117
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/requestUtils.ts"],"names":["cloneDeep","isEmpty","ArrayType","DelimArrayType","EnumType","HashType","IntrinsicType","trimInputs","RunItFormKey","runItSDK","runItNoSet","value","macro","path","vars","replace","_","b","pathify","pathParams","result","includes","prepareInputs","inputs","requestContent","input","name","location","parsed","JSON","parse","type","e","formValues","configurator","storage","getStorage","removeStorage","initRequestContent","content","createRequestParams","queryParams","prepped","trimmed","body","Error","runRequest","sdk","basePath","httpMethod","endpoint","authSession","isAuthenticated","ok","login","url","raw","transport","rawRequest","props","authenticate","getTypeDefault","createSampleBody","spec","getSampleValue","elementType","customType","recurse","types","sampleBody","prop","writeable","sampleValue","undefined","editType","createInputs","method","allParams","map","param","required","description"],"mappings":"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","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 { IAPIMethods, IRawResponse } from '@looker/sdk-rtl'\nimport cloneDeep from 'lodash/cloneDeep'\nimport { isEmpty } from 'lodash'\nimport type { IApiModel, IMethod, IType } from '@looker/sdk-codegen'\nimport {\n ArrayType,\n DelimArrayType,\n EnumType,\n HashType,\n IntrinsicType,\n trimInputs,\n} from '@looker/sdk-codegen'\n\nimport type { RunItHttpMethod, RunItInput, RunItValues } from '../RunIt'\nimport type { RunItConfigurator } from '../components'\nimport { RunItFormKey } from '../components'\nimport { runItSDK } from './RunItSDK'\n\n/** Hook to set a URL somewhere else in APIX */\nexport type RunItSetter = (value: any) => any\n\n/**\n * A \"no-op\" function\n * @param value passed through\n */\nexport const runItNoSet: RunItSetter = (value: any) => value\n\n/**\n * Replaces {foo} with vars[foo] in provided path\n * @param path with templatized param names\n * @param vars Collection of path params\n * @returns Path with param names replaced with values\n */\nconst macro = (path: string, vars: RunItValues) =>\n path.replace(/{(\\w+)}/g, (_, b) => vars[b])\n\n/**\n * Construct a full request path including path params\n * @param path A request path with path params in curly braces e.g. /queries/{query_id}/run/{result_format}\n * @param pathParams Collection of path params\n * @returns a full request path\n */\nexport const pathify = (path: string, pathParams?: RunItValues): string => {\n let result = path\n if (pathParams && path.includes('{')) {\n result = macro(path, pathParams)\n }\n return result\n}\n\n/**\n * Prepares the inputs for use with the SDK and other RunIt components\n * @param inputs An array describing RunIt form inputs\n * @param requestContent Current request parameters\n */\nexport const prepareInputs = (\n inputs: RunItInput[],\n requestContent: RunItValues\n) => {\n const result = cloneDeep(requestContent)\n for (const input of inputs) {\n const name = input.name\n if (input.location === 'body') {\n try {\n let parsed\n if (name in requestContent) {\n const value = requestContent[name]\n /** The value is not a string when the user has not interacted with this param and prepareInputs has been\n * called (e.g. if user navigates to the Code tab).\n */\n parsed = typeof value === 'string' ? JSON.parse(value) : value\n } else {\n /** This scenario occurs when RunIt is about to be mounted for a new method */\n parsed = input.type\n }\n result[name] = parsed\n } catch (e) {\n /** Treat as x-www-form-urlencoded */\n result[name] = requestContent[name]\n }\n }\n }\n return result\n}\n\n/**\n * Load and clear any saved form values from the session\n * @param configurator storage service\n */\nexport const formValues = (configurator: RunItConfigurator) => {\n const storage = configurator.getStorage(RunItFormKey)\n const result = storage.value ? JSON.parse(storage.value) : {}\n configurator.removeStorage(RunItFormKey)\n return result\n}\n\n/**\n * Initializes the request content object from local storage or input definitions, in that order\n * @param configurator storage service\n * @param inputs\n * @param requestContent the current request content\n */\nexport const initRequestContent = (\n configurator: RunItConfigurator,\n inputs: RunItInput[],\n requestContent = {}\n) => {\n let content = formValues(configurator)\n if (isEmpty(content)) {\n content = prepareInputs(inputs, requestContent)\n }\n return content\n}\n\n/**\n * Takes all form input values and categorizes them based on their request location\n * @param inputs RunIt form inputs\n * @param requestContent Form input values\n * @returns path, query and body param objects\n */\nexport const createRequestParams = (\n inputs: RunItInput[],\n requestContent: RunItValues\n) => {\n const pathParams = {}\n const queryParams = {}\n const prepped = prepareInputs(inputs, requestContent)\n const trimmed = trimInputs(prepped)\n let body\n for (const input of inputs) {\n const name = input.name\n switch (input.location) {\n case 'path':\n pathParams[name] = trimmed[name]\n break\n case 'query':\n queryParams[name] = trimmed[name]\n break\n case 'body':\n body = trimmed[name]\n break\n default:\n throw new Error(`Invalid input location: '${input.location}'`)\n }\n }\n return [pathParams, queryParams, body]\n}\n\n/**\n * Makes an http request using the SDK browser transport rawRequest method\n * @param sdk functional SDK that supports rawRequest via its transport\n * @param basePath base path for the URL. For standalone this includes the specKey. Empty for extension.\n * @param httpMethod Request operation\n * @param endpoint Request path with path params in curly braces e.g. /queries/{query_id}/run/{result_format}\n * @param pathParams Collection of path params\n * @param queryParams Collection of query params\n * @param body Collection of body params\n */\nexport const runRequest = async (\n sdk: IAPIMethods,\n basePath: string,\n httpMethod: RunItHttpMethod,\n endpoint: string,\n pathParams: RunItValues,\n queryParams: RunItValues,\n body: any\n): Promise<IRawResponse> => {\n if (!sdk.authSession.isAuthenticated()) {\n await sdk.ok(runItSDK.authSession.login())\n }\n const url = `${basePath}${pathify(endpoint, pathParams)}`\n const raw = await sdk.authSession.transport.rawRequest(\n httpMethod,\n url,\n queryParams,\n body,\n (props) => runItSDK.authSession.authenticate(props)\n )\n return raw\n}\n\n/**\n * Return a default value for a given type name\n * @param type A type name\n */\nconst getTypeDefault = (type: string) => {\n // TODO: use potential equivalent from sdk-codegen, confirm formats\n switch (type) {\n case 'boolean':\n return false\n case 'int64':\n case 'integer':\n return 0\n case 'float':\n case 'double':\n return 0.0\n case 'hostname':\n case 'ipv4':\n case 'ipv6':\n case 'uuid':\n case 'uri':\n case 'string':\n case 'email':\n return ''\n case 'string[]':\n return []\n case 'object':\n return {}\n case 'datetime':\n return ''\n default:\n return ''\n }\n}\n\n/**\n * Given a type object reduce it to its writeable intrinsic and/or custom type properties and their default values\n * @param spec Api spec\n * @param type A type object\n */\nconst createSampleBody = (spec: IApiModel, type: IType) => {\n /* eslint-disable @typescript-eslint/no-use-before-define */\n const getSampleValue = (type: IType) => {\n if (type instanceof IntrinsicType) return getTypeDefault(type.name)\n if (type instanceof DelimArrayType)\n return getTypeDefault(type.elementType.name)\n if (type instanceof EnumType) return ''\n if (type instanceof ArrayType)\n return type.customType\n ? [recurse(spec.types[type.customType])]\n : getTypeDefault(type.name)\n if (type instanceof HashType)\n return type.customType ? recurse(spec.types[type.customType]) : {}\n\n return recurse(type)\n }\n /* eslint-enable @typescript-eslint/no-use-before-define */\n\n const recurse = (type: IType) => {\n const sampleBody: RunItValues = {}\n for (const prop of type.writeable) {\n const sampleValue = getSampleValue(prop.type)\n if (sampleValue !== undefined) {\n sampleBody[prop.name] = sampleValue\n }\n }\n return sampleBody\n }\n return recurse(type)\n}\n\n/**\n * Convert model type to an editable type\n * @param spec API model for building input editor\n * @param type to convert\n */\nconst editType = (spec: IApiModel, type: IType) => {\n if (type instanceof IntrinsicType) return type.name\n // TODO create a DelimArray editing component as part of the complex type editor\n if (type instanceof DelimArrayType) return 'string'\n return createSampleBody(spec, type)\n}\n\n/**\n * Given an SDK method create and return an array of inputs for the run-it form\n * @param spec Api spec\n * @param method A method object\n */\nexport const createInputs = (spec: IApiModel, method: IMethod): RunItInput[] =>\n method.allParams.map((param) => ({\n name: param.name,\n location: param.location,\n type: editType(spec, param.type),\n required: param.required,\n description: param.description,\n }))\n"],"file":"requestUtils.js"}
|
1
|
+
{"version":3,"sources":["../../../src/utils/requestUtils.ts"],"names":["cloneDeep","isEmpty","ArrayType","DelimArrayType","EnumType","HashType","IntrinsicType","trimInputs","getEnvAdaptor","RunItFormKey","runItNoSet","value","macro","path","vars","replace","_","b","pathify","pathParams","result","includes","prepareInputs","inputs","requestContent","input","name","location","parsed","JSON","parse","type","e","formValues","adaptor","formValue","localStorageGetItem","localStorageRemoveItem","initRequestContent","content","createRequestParams","queryParams","prepped","trimmed","body","Error","runRequest","sdk","basePath","httpMethod","endpoint","authSession","isAuthenticated","ok","login","url","raw","transport","rawRequest","props","authenticate","getTypeDefault","createSampleBody","spec","getSampleValue","elementType","customType","recurse","types","sampleBody","prop","writeable","sampleValue","undefined","editType","createInputs","method","allParams","map","param","required","description"],"mappings":"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","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 { IAPIMethods, IRawResponse } from '@looker/sdk-rtl'\nimport cloneDeep from 'lodash/cloneDeep'\nimport { isEmpty } from 'lodash'\nimport type { IApiModel, IMethod, IType } from '@looker/sdk-codegen'\nimport {\n ArrayType,\n DelimArrayType,\n EnumType,\n HashType,\n IntrinsicType,\n trimInputs,\n} from '@looker/sdk-codegen'\nimport { getEnvAdaptor } from '@looker/extension-utils'\n\nimport type { RunItHttpMethod, RunItInput, RunItValues } from '../RunIt'\nimport { RunItFormKey } from '../components'\n\n/** Hook to set a URL somewhere else in APIX */\nexport type RunItSetter = (value: any) => any\n\n/**\n * A \"no-op\" function\n * @param value passed through\n */\nexport const runItNoSet: RunItSetter = (value: any) => value\n\n/**\n * Replaces {foo} with vars[foo] in provided path\n * @param path with templatized param names\n * @param vars Collection of path params\n * @returns Path with param names replaced with values\n */\nconst macro = (path: string, vars: RunItValues) =>\n path.replace(/{(\\w+)}/g, (_, b) => vars[b])\n\n/**\n * Construct a full request path including path params\n * @param path A request path with path params in curly braces e.g. /queries/{query_id}/run/{result_format}\n * @param pathParams Collection of path params\n * @returns a full request path\n */\nexport const pathify = (path: string, pathParams?: RunItValues): string => {\n let result = path\n if (pathParams && path.includes('{')) {\n result = macro(path, pathParams)\n }\n return result\n}\n\n/**\n * Prepares the inputs for use with the SDK and other RunIt components\n * @param inputs An array describing RunIt form inputs\n * @param requestContent Current request parameters\n */\nexport const prepareInputs = (\n inputs: RunItInput[],\n requestContent: RunItValues\n) => {\n const result = cloneDeep(requestContent)\n for (const input of inputs) {\n const name = input.name\n if (input.location === 'body') {\n try {\n let parsed\n if (name in requestContent) {\n const value = requestContent[name]\n /** The value is not a string when the user has not interacted with this param and prepareInputs has been\n * called (e.g. if user navigates to the Code tab).\n */\n parsed = typeof value === 'string' ? JSON.parse(value) : value\n } else {\n /** This scenario occurs when RunIt is about to be mounted for a new method */\n parsed = input.type\n }\n result[name] = parsed\n } catch (e) {\n /** Treat as x-www-form-urlencoded */\n result[name] = requestContent[name]\n }\n }\n }\n return result\n}\n\n/**\n * Load and clear any saved form values from the session\n * @param configurator storage service\n */\nexport const formValues = async () => {\n const adaptor = getEnvAdaptor()\n const formValue = await adaptor.localStorageGetItem(RunItFormKey)\n const result = formValue ? JSON.parse(formValue) : {}\n adaptor.localStorageRemoveItem(RunItFormKey)\n return result\n}\n\n/**\n * Initializes the request content object from local storage or input definitions, in that order\n * @param configurator storage service\n * @param inputs\n * @param requestContent the current request content\n */\nexport const initRequestContent = (\n inputs: RunItInput[],\n requestContent = {}\n) => {\n // TODO: Temporarily disabling request form state persistence until RunIt is using redux\n // let content = await formValues()\n let content = {}\n if (isEmpty(content)) {\n content = prepareInputs(inputs, requestContent)\n }\n return content\n}\n\n/**\n * Takes all form input values and categorizes them based on their request location\n * @param inputs RunIt form inputs\n * @param requestContent Form input values\n * @returns path, query and body param objects\n */\nexport const createRequestParams = (\n inputs: RunItInput[],\n requestContent: RunItValues\n) => {\n const pathParams = {}\n const queryParams = {}\n const prepped = prepareInputs(inputs, requestContent)\n const trimmed = trimInputs(prepped)\n let body\n for (const input of inputs) {\n const name = input.name\n switch (input.location) {\n case 'path':\n pathParams[name] = trimmed[name]\n break\n case 'query':\n queryParams[name] = trimmed[name]\n break\n case 'body':\n body = trimmed[name]\n break\n default:\n throw new Error(`Invalid input location: '${input.location}'`)\n }\n }\n return [pathParams, queryParams, body]\n}\n\n/**\n * Makes an http request using the SDK browser transport rawRequest method\n * @param sdk functional SDK that supports rawRequest via its transport\n * @param basePath base path for the URL. For standalone this includes the specKey. Empty for extension.\n * @param httpMethod Request operation\n * @param endpoint Request path with path params in curly braces e.g. /queries/{query_id}/run/{result_format}\n * @param pathParams Collection of path params\n * @param queryParams Collection of query params\n * @param body Collection of body params\n */\nexport const runRequest = async (\n sdk: IAPIMethods,\n basePath: string,\n httpMethod: RunItHttpMethod,\n endpoint: string,\n pathParams: RunItValues,\n queryParams: RunItValues,\n body: any\n): Promise<IRawResponse> => {\n if (!sdk.authSession.isAuthenticated()) {\n await sdk.ok(sdk.authSession.login())\n }\n const url = `${basePath}${pathify(endpoint, pathParams)}`\n const raw = await sdk.authSession.transport.rawRequest(\n httpMethod,\n url,\n queryParams,\n body,\n (props) => sdk.authSession.authenticate(props)\n )\n return raw\n}\n\n/**\n * Return a default value for a given type name\n * @param type A type name\n */\nconst getTypeDefault = (type: string) => {\n // TODO: use potential equivalent from sdk-codegen, confirm formats\n switch (type) {\n case 'boolean':\n return false\n case 'int64':\n case 'integer':\n return 0\n case 'float':\n case 'double':\n return 0.0\n case 'hostname':\n case 'ipv4':\n case 'ipv6':\n case 'uuid':\n case 'uri':\n case 'string':\n case 'email':\n return ''\n case 'string[]':\n return []\n case 'object':\n return {}\n case 'datetime':\n return ''\n default:\n return ''\n }\n}\n\n/**\n * Given a type object reduce it to its writeable intrinsic and/or custom type properties and their default values\n * @param spec Api spec\n * @param type A type object\n */\nconst createSampleBody = (spec: IApiModel, type: IType) => {\n /* eslint-disable @typescript-eslint/no-use-before-define */\n const getSampleValue = (type: IType) => {\n if (type instanceof IntrinsicType) return getTypeDefault(type.name)\n if (type instanceof DelimArrayType)\n return getTypeDefault(type.elementType.name)\n if (type instanceof EnumType) return ''\n if (type instanceof ArrayType)\n return type.customType\n ? [recurse(spec.types[type.customType])]\n : getTypeDefault(type.name)\n if (type instanceof HashType)\n return type.customType ? recurse(spec.types[type.customType]) : {}\n\n return recurse(type)\n }\n /* eslint-enable @typescript-eslint/no-use-before-define */\n\n const recurse = (type: IType) => {\n const sampleBody: RunItValues = {}\n for (const prop of type.writeable) {\n const sampleValue = getSampleValue(prop.type)\n if (sampleValue !== undefined) {\n sampleBody[prop.name] = sampleValue\n }\n }\n return sampleBody\n }\n return recurse(type)\n}\n\n/**\n * Convert model type to an editable type\n * @param spec API model for building input editor\n * @param type to convert\n */\nconst editType = (spec: IApiModel, type: IType) => {\n if (type instanceof IntrinsicType) return type.name\n // TODO create a DelimArray editing component as part of the complex type editor\n if (type instanceof DelimArrayType) return 'string'\n return createSampleBody(spec, type)\n}\n\n/**\n * Given an SDK method create and return an array of inputs for the run-it form\n * @param spec Api spec\n * @param method A method object\n */\nexport const createInputs = (spec: IApiModel, method: IMethod): RunItInput[] =>\n method.allParams.map((param) => ({\n name: param.name,\n location: param.location,\n type: editType(spec, param.type),\n required: param.required,\n description: param.description,\n }))\n"],"file":"requestUtils.js"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
@@ -55,17 +55,4 @@ Object.keys(_components).forEach(function (key) {
|
|
55
55
|
}
|
56
56
|
});
|
57
57
|
});
|
58
|
-
|
59
|
-
var _scenes = require("./scenes");
|
60
|
-
|
61
|
-
Object.keys(_scenes).forEach(function (key) {
|
62
|
-
if (key === "default" || key === "__esModule") return;
|
63
|
-
if (key in exports && exports[key] === _scenes[key]) return;
|
64
|
-
Object.defineProperty(exports, key, {
|
65
|
-
enumerable: true,
|
66
|
-
get: function get() {
|
67
|
-
return _scenes[key];
|
68
|
-
}
|
69
|
-
});
|
70
|
-
});
|
71
58
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AA0BA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AA0BA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;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 */\n\nexport * from './RunIt'\nexport * from './RunItProvider'\nexport * from './utils'\nexport * from './components'\n"],"file":"index.js"}
|