@descope/sdk-mixins 0.11.3 → 0.13.0
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/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/mixins/descopeUiMixin/constants.js +6 -17
- package/dist/cjs/mixins/descopeUiMixin/constants.js.map +1 -1
- package/dist/cjs/mixins/descopeUiMixin/descopeUiMixin.js +17 -89
- package/dist/cjs/mixins/descopeUiMixin/descopeUiMixin.js.map +1 -1
- package/dist/cjs/mixins/descopeUiMixin/helpers.js +0 -10
- package/dist/cjs/mixins/descopeUiMixin/helpers.js.map +1 -1
- package/dist/cjs/mixins/injectNpmLibMixin/constants.js +10 -0
- package/dist/cjs/mixins/injectNpmLibMixin/constants.js.map +1 -0
- package/dist/cjs/mixins/injectNpmLibMixin/helpers.js +112 -0
- package/dist/cjs/mixins/injectNpmLibMixin/helpers.js.map +1 -0
- package/dist/cjs/mixins/injectNpmLibMixin/injectNpmLibMixin.js +28 -0
- package/dist/cjs/mixins/injectNpmLibMixin/injectNpmLibMixin.js.map +1 -0
- package/dist/cjs/mixins/staticResourcesMixin/fetchWithFallbacks.js +15 -2
- package/dist/cjs/mixins/staticResourcesMixin/fetchWithFallbacks.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mixins/descopeUiMixin/constants.js +4 -11
- package/dist/esm/mixins/descopeUiMixin/constants.js.map +1 -1
- package/dist/esm/mixins/descopeUiMixin/descopeUiMixin.js +18 -90
- package/dist/esm/mixins/descopeUiMixin/descopeUiMixin.js.map +1 -1
- package/dist/esm/mixins/descopeUiMixin/helpers.js +1 -9
- package/dist/esm/mixins/descopeUiMixin/helpers.js.map +1 -1
- package/dist/esm/mixins/injectNpmLibMixin/constants.js +8 -0
- package/dist/esm/mixins/injectNpmLibMixin/constants.js.map +1 -0
- package/dist/esm/mixins/injectNpmLibMixin/helpers.js +109 -0
- package/dist/esm/mixins/injectNpmLibMixin/helpers.js.map +1 -0
- package/dist/esm/mixins/injectNpmLibMixin/injectNpmLibMixin.js +26 -0
- package/dist/esm/mixins/injectNpmLibMixin/injectNpmLibMixin.js.map +1 -0
- package/dist/esm/mixins/staticResourcesMixin/fetchWithFallbacks.js +15 -2
- package/dist/esm/mixins/staticResourcesMixin/fetchWithFallbacks.js.map +1 -1
- package/dist/index.d.ts +510 -176
- package/dist/types/index.d.ts +1 -0
- package/dist/types/mixins/configMixin/configMixin.d.ts +12 -12
- package/dist/types/mixins/configMixin/types.d.ts +1 -1
- package/dist/types/mixins/createStateManagementMixin.d.ts +2 -2
- package/dist/types/mixins/createValidateAttributesMixin/createValidateAttributesMixin.d.ts +5 -5
- package/dist/types/mixins/debuggerMixin/debuggerMixin.d.ts +8 -8
- package/dist/types/mixins/descopeUiMixin/constants.d.ts +3 -7
- package/dist/types/mixins/descopeUiMixin/descopeUiMixin.d.ts +26 -31
- package/dist/types/mixins/descopeUiMixin/helpers.d.ts +0 -1
- package/dist/types/mixins/formMixin.d.ts +2 -2
- package/dist/types/mixins/initLifecycleMixin.d.ts +1 -1
- package/dist/types/mixins/injectNpmLibMixin/constants.d.ts +1 -0
- package/dist/types/mixins/injectNpmLibMixin/helpers.d.ts +7 -0
- package/dist/types/mixins/injectNpmLibMixin/index.d.ts +1 -0
- package/dist/types/mixins/injectNpmLibMixin/injectNpmLibMixin.d.ts +343 -0
- package/dist/types/mixins/loggerMixin/loggerMixin.d.ts +2 -2
- package/dist/types/mixins/modalMixin/modalMixin.d.ts +28 -30
- package/dist/types/mixins/notificationsMixin/notificationsMixin.d.ts +28 -30
- package/dist/types/mixins/observeAttributesMixin/observeAttributesMixin.d.ts +4 -4
- package/dist/types/mixins/projectIdMixin.d.ts +5 -5
- package/dist/types/mixins/resetMixin.d.ts +6 -6
- package/dist/types/mixins/staticResourcesMixin/fetchWithFallbacks.d.ts +1 -1
- package/dist/types/mixins/staticResourcesMixin/staticResourcesMixin.d.ts +8 -8
- package/dist/types/mixins/themeMixin/themeMixin.d.ts +33 -35
- package/package.json +10 -10
package/dist/cjs/index.js
CHANGED
|
@@ -17,6 +17,7 @@ var initLifecycleMixin = require('./mixins/initLifecycleMixin.js');
|
|
|
17
17
|
var projectIdMixin = require('./mixins/projectIdMixin.js');
|
|
18
18
|
var baseUrlMixin = require('./mixins/baseUrlMixin.js');
|
|
19
19
|
var cookieConfigMixin = require('./mixins/cookieConfigMixin.js');
|
|
20
|
+
var injectNpmLibMixin = require('./mixins/injectNpmLibMixin/injectNpmLibMixin.js');
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
|
|
@@ -38,4 +39,5 @@ exports.initLifecycleMixin = initLifecycleMixin.initLifecycleMixin;
|
|
|
38
39
|
exports.projectIdMixin = projectIdMixin.projectIdMixin;
|
|
39
40
|
exports.baseUrlMixin = baseUrlMixin.baseUrlMixin;
|
|
40
41
|
exports.cookieConfigMixin = cookieConfigMixin.cookieConfigMixin;
|
|
42
|
+
exports.injectNpmLibMixin = injectNpmLibMixin.injectNpmLibMixin;
|
|
41
43
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -2,24 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var constants = require('../../constants.js');
|
|
4
4
|
|
|
5
|
-
const DESCOPE_UI_SCRIPT_ID = 'load-descope-ui';
|
|
6
|
-
const DESCOPE_UI_FALLBACK_SCRIPT_ID = 'load-descope-ui-fallback-script';
|
|
7
|
-
const DESCOPE_UI_FALLBACK_2_SCRIPT_ID = 'load-descope-ui-fallback-script-2';
|
|
8
5
|
const UI_COMPONENTS_URL_KEY = 'base.ui.components.url';
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
'https://static.descope.com/npm/@descope/web-components-ui@<version>/dist/umd/index.js';
|
|
13
|
-
const UI_COMPONENTS_FALLBACK_2_URL = (constants.IS_LOCAL_STORAGE && localStorage.getItem(UI_COMPONENTS_URL_KEY)) ||
|
|
14
|
-
'https://cdn.jsdelivr.net/npm/@descope/web-components-ui@<version>/dist/umd/index.js';
|
|
15
|
-
const UI_COMPONENTS_URL_VERSION_PLACEHOLDER = '<version>';
|
|
6
|
+
const LOCAL_STORAGE_OVERRIDE = constants.IS_LOCAL_STORAGE && localStorage.getItem(UI_COMPONENTS_URL_KEY);
|
|
7
|
+
const JS_FILE_PATH = 'dist/umd/index.js';
|
|
8
|
+
const WEB_COMPONENTS_UI_LIB_NAME = '@descope/web-components-ui';
|
|
16
9
|
|
|
17
|
-
exports.
|
|
18
|
-
exports.
|
|
19
|
-
exports.DESCOPE_UI_SCRIPT_ID = DESCOPE_UI_SCRIPT_ID;
|
|
20
|
-
exports.UI_COMPONENTS_FALLBACK_2_URL = UI_COMPONENTS_FALLBACK_2_URL;
|
|
21
|
-
exports.UI_COMPONENTS_FALLBACK_URL = UI_COMPONENTS_FALLBACK_URL;
|
|
22
|
-
exports.UI_COMPONENTS_URL = UI_COMPONENTS_URL;
|
|
10
|
+
exports.JS_FILE_PATH = JS_FILE_PATH;
|
|
11
|
+
exports.LOCAL_STORAGE_OVERRIDE = LOCAL_STORAGE_OVERRIDE;
|
|
23
12
|
exports.UI_COMPONENTS_URL_KEY = UI_COMPONENTS_URL_KEY;
|
|
24
|
-
exports.
|
|
13
|
+
exports.WEB_COMPONENTS_UI_LIB_NAME = WEB_COMPONENTS_UI_LIB_NAME;
|
|
25
14
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../src/mixins/descopeUiMixin/constants.ts"],"sourcesContent":["import { IS_LOCAL_STORAGE } from '../../constants';\n\nexport const
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../src/mixins/descopeUiMixin/constants.ts"],"sourcesContent":["import { IS_LOCAL_STORAGE } from '../../constants';\n\nexport const UI_COMPONENTS_URL_KEY = 'base.ui.components.url';\nexport const LOCAL_STORAGE_OVERRIDE =\n IS_LOCAL_STORAGE && localStorage.getItem(UI_COMPONENTS_URL_KEY);\nexport const JS_FILE_PATH = 'dist/umd/index.js';\nexport const WEB_COMPONENTS_UI_LIB_NAME = '@descope/web-components-ui';\n"],"names":["IS_LOCAL_STORAGE"],"mappings":";;;;AAEO,MAAM,qBAAqB,GAAG,yBAAyB;AACvD,MAAM,sBAAsB,GACjCA,0BAAgB,IAAI,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE;AAC3D,MAAM,YAAY,GAAG,oBAAoB;AACzC,MAAM,0BAA0B,GAAG;;;;;;;"}
|
|
@@ -3,19 +3,18 @@
|
|
|
3
3
|
var tslib = require('tslib');
|
|
4
4
|
var sdkHelpers = require('@descope/sdk-helpers');
|
|
5
5
|
var configMixin = require('../configMixin/configMixin.js');
|
|
6
|
+
var injectNpmLibMixin = require('../injectNpmLibMixin/injectNpmLibMixin.js');
|
|
6
7
|
var loggerMixin = require('../loggerMixin/loggerMixin.js');
|
|
7
|
-
var constants = require('./constants.js');
|
|
8
8
|
var helpers = require('./helpers.js');
|
|
9
|
+
var constants = require('./constants.js');
|
|
9
10
|
|
|
10
11
|
const descopeUiMixin = sdkHelpers.createSingletonMixin((superclass) => {
|
|
11
|
-
var _DescopeUiMixinClass_instances,
|
|
12
|
-
const BaseClass = sdkHelpers.compose(loggerMixin.loggerMixin, configMixin.configMixin)(superclass);
|
|
12
|
+
var _DescopeUiMixinClass_instances, _DescopeUiMixinClass_getComponentsVersion, _DescopeUiMixinClass_descopeUi, _DescopeUiMixinClass_loadDescopeUiComponent, _DescopeUiMixinClass_getDescopeUi, _a;
|
|
13
|
+
const BaseClass = sdkHelpers.compose(loggerMixin.loggerMixin, configMixin.configMixin, injectNpmLibMixin.injectNpmLibMixin)(superclass);
|
|
13
14
|
return _a = class DescopeUiMixinClass extends BaseClass {
|
|
14
15
|
constructor() {
|
|
15
16
|
super(...arguments);
|
|
16
17
|
_DescopeUiMixinClass_instances.add(this);
|
|
17
|
-
_DescopeUiMixinClass_errorCbsSym.set(this, Symbol('errorCbs'));
|
|
18
|
-
_DescopeUiMixinClass_loadCbsSym.set(this, Symbol('loadCbs'));
|
|
19
18
|
_DescopeUiMixinClass_descopeUi.set(this, void 0);
|
|
20
19
|
}
|
|
21
20
|
get descopeUi() {
|
|
@@ -30,12 +29,7 @@ const descopeUiMixin = sdkHelpers.createSingletonMixin((superclass) => {
|
|
|
30
29
|
: helpers.getDescopeUiComponentsList(templateOrComponentNames);
|
|
31
30
|
return Promise.all(descopeUiComponentsList.map((componentName) => tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_loadDescopeUiComponent).call(this, componentName)));
|
|
32
31
|
}
|
|
33
|
-
get baseCdnUrl() {
|
|
34
|
-
return this.getAttribute('base-cdn-url');
|
|
35
|
-
}
|
|
36
32
|
},
|
|
37
|
-
_DescopeUiMixinClass_errorCbsSym = new WeakMap(),
|
|
38
|
-
_DescopeUiMixinClass_loadCbsSym = new WeakMap(),
|
|
39
33
|
_DescopeUiMixinClass_descopeUi = new WeakMap(),
|
|
40
34
|
_DescopeUiMixinClass_instances = new WeakSet(),
|
|
41
35
|
_DescopeUiMixinClass_getComponentsVersion =
|
|
@@ -52,64 +46,6 @@ const descopeUiMixin = sdkHelpers.createSingletonMixin((superclass) => {
|
|
|
52
46
|
}
|
|
53
47
|
return componentsVersion;
|
|
54
48
|
},
|
|
55
|
-
_DescopeUiMixinClass_exposeAlternateEvents = function _DescopeUiMixinClass_exposeAlternateEvents(scriptEle) {
|
|
56
|
-
const errorCbsSym = tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_errorCbsSym, "f");
|
|
57
|
-
const loadCbsSym = tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_loadCbsSym, "f");
|
|
58
|
-
// eslint-disable-next-line no-param-reassign
|
|
59
|
-
scriptEle[errorCbsSym] = [];
|
|
60
|
-
// eslint-disable-next-line no-param-reassign
|
|
61
|
-
scriptEle[loadCbsSym] = [];
|
|
62
|
-
Object.defineProperty(scriptEle, 'onerror', {
|
|
63
|
-
set(cb) {
|
|
64
|
-
scriptEle[errorCbsSym].push(cb);
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
Object.defineProperty(scriptEle, 'onload', {
|
|
68
|
-
set(cb) {
|
|
69
|
-
scriptEle[loadCbsSym].push(cb);
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
},
|
|
73
|
-
_DescopeUiMixinClass_handleFallbackScript = async function _DescopeUiMixinClass_handleFallbackScript(errorCbs, loadCbs, elemId, scriptUrl) {
|
|
74
|
-
this.logger.debug('Trying to load DescopeUI from a fallback URL');
|
|
75
|
-
const fallbackScriptEle = helpers.setupScript(elemId);
|
|
76
|
-
document.body.append(fallbackScriptEle);
|
|
77
|
-
fallbackScriptEle.addEventListener('error', () => {
|
|
78
|
-
errorCbs.forEach((cb) => cb(`Cannot load DescopeUI from fallback URL, Make sure this URL is valid and return the correct script: "${fallbackScriptEle.src}"`));
|
|
79
|
-
});
|
|
80
|
-
fallbackScriptEle.addEventListener('load', () => {
|
|
81
|
-
loadCbs.forEach((cb) => cb());
|
|
82
|
-
});
|
|
83
|
-
fallbackScriptEle.src = helpers.generateScriptUrl(scriptUrl, await tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersion).call(this));
|
|
84
|
-
},
|
|
85
|
-
_DescopeUiMixinClass_registerEvents = function _DescopeUiMixinClass_registerEvents(scriptEle) {
|
|
86
|
-
scriptEle.addEventListener('error', () => {
|
|
87
|
-
scriptEle[tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_errorCbsSym, "f")].forEach((cb) => cb(`Cannot load DescopeUI from main URL, Make sure this URL is valid and return the correct script: "${scriptEle.src}"`));
|
|
88
|
-
// in case we could not load DescopeUI from the main URL, we are trying to load it from a fallback URL
|
|
89
|
-
tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_handleFallbackScript).call(this, [
|
|
90
|
-
// we are adding a second fallback
|
|
91
|
-
tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_handleFallbackScript).bind(this, scriptEle[tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_errorCbsSym, "f")], scriptEle[tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_loadCbsSym, "f")], constants.DESCOPE_UI_FALLBACK_2_SCRIPT_ID, constants.UI_COMPONENTS_FALLBACK_2_URL),
|
|
92
|
-
...scriptEle[tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_errorCbsSym, "f")],
|
|
93
|
-
], scriptEle[tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_loadCbsSym, "f")], constants.DESCOPE_UI_FALLBACK_SCRIPT_ID, constants.UI_COMPONENTS_FALLBACK_URL);
|
|
94
|
-
});
|
|
95
|
-
scriptEle.addEventListener('load', () => {
|
|
96
|
-
scriptEle[tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_loadCbsSym, "f")].forEach((cb) => cb());
|
|
97
|
-
});
|
|
98
|
-
},
|
|
99
|
-
_DescopeUiMixinClass_getDescopeUiLoadingScript = async function _DescopeUiMixinClass_getDescopeUiLoadingScript() {
|
|
100
|
-
if (!document.querySelector(`script#${constants.DESCOPE_UI_SCRIPT_ID}`)) {
|
|
101
|
-
this.logger.debug('DescopeUI loading script does not exist, creating it', this);
|
|
102
|
-
const scriptEle = helpers.setupScript(constants.DESCOPE_UI_SCRIPT_ID);
|
|
103
|
-
document.body.append(scriptEle);
|
|
104
|
-
tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_exposeAlternateEvents).call(this, scriptEle);
|
|
105
|
-
tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_registerEvents).call(this, scriptEle);
|
|
106
|
-
scriptEle.src = helpers.generateScriptUrl(this.baseCdnUrl || constants.UI_COMPONENTS_URL, await tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersion).call(this));
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.logger.debug('DescopeUI loading script already exists', this);
|
|
110
|
-
}
|
|
111
|
-
return document.getElementById(constants.DESCOPE_UI_SCRIPT_ID);
|
|
112
|
-
},
|
|
113
49
|
_DescopeUiMixinClass_loadDescopeUiComponent = async function _DescopeUiMixinClass_loadDescopeUiComponent(componentName) {
|
|
114
50
|
const isComponentAlreadyDefined = !!customElements.get(componentName);
|
|
115
51
|
if (isComponentAlreadyDefined) {
|
|
@@ -139,27 +75,19 @@ const descopeUiMixin = sdkHelpers.createSingletonMixin((superclass) => {
|
|
|
139
75
|
}
|
|
140
76
|
return undefined;
|
|
141
77
|
},
|
|
142
|
-
_DescopeUiMixinClass_getDescopeUi = function _DescopeUiMixinClass_getDescopeUi() {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m",
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
// in case the load event was dispatched before we registered, we have a fallback
|
|
156
|
-
setTimeout(() => {
|
|
157
|
-
if (globalThis.DescopeUI) {
|
|
158
|
-
res(globalThis.DescopeUI);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
});
|
|
78
|
+
_DescopeUiMixinClass_getDescopeUi = async function _DescopeUiMixinClass_getDescopeUi() {
|
|
79
|
+
if (globalThis.DescopeUI) {
|
|
80
|
+
return globalThis.DescopeUI;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
await this.injectNpmLib(constants.WEB_COMPONENTS_UI_LIB_NAME, await tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersion).call(this), constants.JS_FILE_PATH, [constants.LOCAL_STORAGE_OVERRIDE]);
|
|
84
|
+
this.logger.debug('DescopeUI was loaded');
|
|
85
|
+
return globalThis.DescopeUI;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.logger.error(error);
|
|
89
|
+
throw new Error('DescopeUI was not loaded');
|
|
90
|
+
}
|
|
163
91
|
},
|
|
164
92
|
_a;
|
|
165
93
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descopeUiMixin.js","sources":["../../../../src/mixins/descopeUiMixin/descopeUiMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { loggerMixin } from '../loggerMixin';\nimport {\n DESCOPE_UI_FALLBACK_2_SCRIPT_ID,\n DESCOPE_UI_FALLBACK_SCRIPT_ID,\n DESCOPE_UI_SCRIPT_ID,\n UI_COMPONENTS_FALLBACK_2_URL,\n UI_COMPONENTS_FALLBACK_URL,\n UI_COMPONENTS_URL,\n} from './constants';\nimport {\n generateScriptUrl,\n getDescopeUiComponentsList,\n setupScript,\n} from './helpers';\n\ntype ErrorCb = (error: string) => void;\ntype LoadCb = () => void;\n\nexport const descopeUiMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(loggerMixin, configMixin)(superclass);\n\n return class DescopeUiMixinClass extends BaseClass {\n #errorCbsSym = Symbol('errorCbs');\n\n #loadCbsSym = Symbol('loadCbs');\n\n // eslint-disable-next-line class-methods-use-this\n async #getComponentsVersion() {\n const config = await this.config;\n const componentsVersion = config?.projectConfig?.componentsVersion;\n\n if (!componentsVersion) {\n this.logger.error('Could not get components version');\n } else {\n this.logger.debug(`Got component version \"${componentsVersion}\"`);\n }\n\n return componentsVersion;\n }\n\n // in order to allow only single load of DescopeUI across different instances,\n // and also allow fallback in case the components cannot be loaded from descope domain\n // we are managing an alternative way to register to the script events\n #exposeAlternateEvents(scriptEle: HTMLScriptElement) {\n const errorCbsSym = this.#errorCbsSym;\n const loadCbsSym = this.#loadCbsSym;\n\n // eslint-disable-next-line no-param-reassign\n scriptEle[errorCbsSym] = [];\n // eslint-disable-next-line no-param-reassign\n scriptEle[loadCbsSym] = [];\n\n Object.defineProperty(scriptEle, 'onerror', {\n set(cb: ErrorCb) {\n scriptEle[errorCbsSym].push(cb);\n },\n });\n\n Object.defineProperty(scriptEle, 'onload', {\n set(cb: LoadCb) {\n scriptEle[loadCbsSym].push(cb);\n },\n });\n }\n\n async #handleFallbackScript(\n errorCbs: ErrorCb[],\n loadCbs: LoadCb[],\n elemId: string,\n scriptUrl: string,\n ) {\n this.logger.debug('Trying to load DescopeUI from a fallback URL');\n const fallbackScriptEle = setupScript(elemId);\n document.body.append(fallbackScriptEle);\n\n fallbackScriptEle.addEventListener('error', () => {\n errorCbs.forEach((cb: ErrorCb) =>\n cb(\n `Cannot load DescopeUI from fallback URL, Make sure this URL is valid and return the correct script: \"${fallbackScriptEle.src}\"`,\n ),\n );\n });\n\n fallbackScriptEle.addEventListener('load', () => {\n loadCbs.forEach((cb: LoadCb) => cb());\n });\n\n fallbackScriptEle.src = generateScriptUrl(\n scriptUrl,\n await this.#getComponentsVersion(),\n );\n }\n\n #registerEvents(scriptEle: HTMLScriptElement) {\n scriptEle.addEventListener('error', () => {\n scriptEle[this.#errorCbsSym].forEach((cb: ErrorCb) =>\n cb(\n `Cannot load DescopeUI from main URL, Make sure this URL is valid and return the correct script: \"${scriptEle.src}\"`,\n ),\n );\n\n // in case we could not load DescopeUI from the main URL, we are trying to load it from a fallback URL\n this.#handleFallbackScript(\n [\n // we are adding a second fallback\n this.#handleFallbackScript.bind(\n this,\n scriptEle[this.#errorCbsSym],\n scriptEle[this.#loadCbsSym],\n DESCOPE_UI_FALLBACK_2_SCRIPT_ID,\n UI_COMPONENTS_FALLBACK_2_URL,\n ),\n ...scriptEle[this.#errorCbsSym],\n ],\n scriptEle[this.#loadCbsSym],\n DESCOPE_UI_FALLBACK_SCRIPT_ID,\n UI_COMPONENTS_FALLBACK_URL,\n );\n });\n\n scriptEle.addEventListener('load', () => {\n scriptEle[this.#loadCbsSym].forEach((cb: LoadCb) => cb());\n });\n }\n\n async #getDescopeUiLoadingScript() {\n if (!document.querySelector(`script#${DESCOPE_UI_SCRIPT_ID}`)) {\n this.logger.debug(\n 'DescopeUI loading script does not exist, creating it',\n this,\n );\n\n const scriptEle = setupScript(DESCOPE_UI_SCRIPT_ID);\n\n document.body.append(scriptEle);\n\n this.#exposeAlternateEvents(scriptEle);\n this.#registerEvents(scriptEle);\n\n scriptEle.src = generateScriptUrl(\n this.baseCdnUrl || UI_COMPONENTS_URL,\n await this.#getComponentsVersion(),\n );\n } else {\n this.logger.debug('DescopeUI loading script already exists', this);\n }\n\n return document.getElementById(DESCOPE_UI_SCRIPT_ID);\n }\n\n #descopeUi: Promise<any>;\n\n get descopeUi() {\n if (!this.#descopeUi) {\n this.#descopeUi = this.#getDescopeUi();\n }\n\n return this.#descopeUi;\n }\n\n async #loadDescopeUiComponent(componentName: string) {\n const isComponentAlreadyDefined = !!customElements.get(componentName);\n\n if (isComponentAlreadyDefined) {\n this.logger.debug(\n `Loading component \"${componentName}\" is skipped as it is already defined`,\n );\n return undefined;\n }\n\n const descopeUI = await this.descopeUi;\n\n if (!descopeUI[componentName]) {\n this.logger.error(\n `Cannot load UI component \"${componentName}\"`,\n `Descope UI does not have a component named \"${componentName}\", available components are: \"${Object.keys(\n descopeUI,\n ).join(', ')}\"`,\n );\n return undefined;\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/return-await\n return await descopeUI[componentName]();\n } catch (e) {\n // this error is thrown when trying to register a component which is already registered\n // when running 2 flows on the same page, it might happen that the register fn is called twice\n // in case it happens, we are silently ignore the error\n if (e.name === 'NotSupportedError') {\n // eslint-disable-next-line no-console\n console.debug(\n `Encountered an error while attempting to define the \"${componentName}\" component, it is likely that this component is already defined`,\n );\n } else {\n throw e;\n }\n }\n\n return undefined;\n }\n\n async loadDescopeUiComponents(\n templateOrComponentNames: HTMLTemplateElement | string[],\n ) {\n const descopeUiComponentsList = Array.isArray(templateOrComponentNames)\n ? templateOrComponentNames\n : getDescopeUiComponentsList(templateOrComponentNames);\n\n return Promise.all(\n descopeUiComponentsList.map((componentName: string) =>\n this.#loadDescopeUiComponent(componentName),\n ),\n );\n }\n\n #getDescopeUi() {\n return new Promise((res) => {\n if (globalThis.DescopeUI) {\n res(globalThis.DescopeUI);\n }\n\n this.#getDescopeUiLoadingScript().then((scriptEle) => {\n // eslint-disable-next-line no-param-reassign\n scriptEle!.onerror = this.logger.error;\n // eslint-disable-next-line no-param-reassign\n scriptEle!.onload = () => {\n this.logger.debug('DescopeUI was loaded');\n res(globalThis.DescopeUI);\n };\n\n // in case the load event was dispatched before we registered, we have a fallback\n setTimeout(() => {\n if (globalThis.DescopeUI) {\n res(globalThis.DescopeUI);\n }\n });\n });\n });\n }\n\n get baseCdnUrl() {\n return this.getAttribute('base-cdn-url');\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","loggerMixin","configMixin","__classPrivateFieldGet","__classPrivateFieldSet","getDescopeUiComponentsList","setupScript","generateScriptUrl","DESCOPE_UI_FALLBACK_2_SCRIPT_ID","UI_COMPONENTS_FALLBACK_2_URL","DESCOPE_UI_FALLBACK_SCRIPT_ID","UI_COMPONENTS_FALLBACK_URL","DESCOPE_UI_SCRIPT_ID","UI_COMPONENTS_URL"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"descopeUiMixin.js","sources":["../../../../src/mixins/descopeUiMixin/descopeUiMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { injectNpmLibMixin } from '../injectNpmLibMixin';\nimport { loggerMixin } from '../loggerMixin';\nimport { getDescopeUiComponentsList } from './helpers';\nimport {\n JS_FILE_PATH,\n LOCAL_STORAGE_OVERRIDE,\n WEB_COMPONENTS_UI_LIB_NAME,\n} from './constants';\n\nexport const descopeUiMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n configMixin,\n injectNpmLibMixin,\n )(superclass);\n\n return class DescopeUiMixinClass extends BaseClass {\n // eslint-disable-next-line class-methods-use-this\n async #getComponentsVersion() {\n const config = await this.config;\n const componentsVersion = config?.projectConfig?.componentsVersion;\n\n if (!componentsVersion) {\n this.logger.error('Could not get components version');\n } else {\n this.logger.debug(`Got component version \"${componentsVersion}\"`);\n }\n\n return componentsVersion;\n }\n\n #descopeUi: Promise<any>;\n\n get descopeUi() {\n if (!this.#descopeUi) {\n this.#descopeUi = this.#getDescopeUi();\n }\n\n return this.#descopeUi;\n }\n\n async #loadDescopeUiComponent(componentName: string) {\n const isComponentAlreadyDefined = !!customElements.get(componentName);\n\n if (isComponentAlreadyDefined) {\n this.logger.debug(\n `Loading component \"${componentName}\" is skipped as it is already defined`,\n );\n return undefined;\n }\n\n const descopeUI = await this.descopeUi;\n\n if (!descopeUI[componentName]) {\n this.logger.error(\n `Cannot load UI component \"${componentName}\"`,\n `Descope UI does not have a component named \"${componentName}\", available components are: \"${Object.keys(\n descopeUI,\n ).join(', ')}\"`,\n );\n return undefined;\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/return-await\n return await descopeUI[componentName]();\n } catch (e) {\n // this error is thrown when trying to register a component which is already registered\n // when running 2 flows on the same page, it might happen that the register fn is called twice\n // in case it happens, we are silently ignore the error\n if (e.name === 'NotSupportedError') {\n // eslint-disable-next-line no-console\n console.debug(\n `Encountered an error while attempting to define the \"${componentName}\" component, it is likely that this component is already defined`,\n );\n } else {\n throw e;\n }\n }\n\n return undefined;\n }\n\n async #getDescopeUi() {\n if (globalThis.DescopeUI) {\n return globalThis.DescopeUI;\n }\n\n try {\n await this.injectNpmLib(\n WEB_COMPONENTS_UI_LIB_NAME,\n await this.#getComponentsVersion(),\n JS_FILE_PATH,\n [LOCAL_STORAGE_OVERRIDE],\n );\n this.logger.debug('DescopeUI was loaded');\n return globalThis.DescopeUI;\n } catch (error) {\n this.logger.error(error);\n throw new Error('DescopeUI was not loaded');\n }\n }\n\n async loadDescopeUiComponents(\n templateOrComponentNames: HTMLTemplateElement | string[],\n ) {\n const descopeUiComponentsList = Array.isArray(templateOrComponentNames)\n ? templateOrComponentNames\n : getDescopeUiComponentsList(templateOrComponentNames);\n\n return Promise.all(\n descopeUiComponentsList.map((componentName: string) =>\n this.#loadDescopeUiComponent(componentName),\n ),\n );\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","loggerMixin","configMixin","injectNpmLibMixin","__classPrivateFieldGet","__classPrivateFieldSet","getDescopeUiComponentsList","WEB_COMPONENTS_UI_LIB_NAME","JS_FILE_PATH","LOCAL_STORAGE_OVERRIDE"],"mappings":";;;;;;;;;;MAWa,cAAc,GAAGA,+BAAoB,CAChD,CAAqC,UAAa,KAAI;;AACpD,IAAA,MAAM,SAAS,GAAGC,kBAAO,CACvBC,uBAAW,EACXC,uBAAW,EACXC,mCAAiB,CAClB,CAAC,UAAU,CAAC,CAAC;IAEd,OAAO,EAAA,GAAA,MAAM,mBAAoB,SAAQ,SAAS,CAAA;AAA3C,YAAA,WAAA,GAAA;;;gBAeL,8BAAyB,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;aAqF1B;AAnFC,YAAA,IAAI,SAAS,GAAA;AACX,gBAAA,IAAI,CAACC,4BAAA,CAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,CAAW,EAAE;oBACpBC,4BAAA,CAAA,IAAI,kCAAcD,4BAAA,CAAA,IAAI,yEAAc,CAAlB,IAAA,CAAA,IAAI,CAAgB,EAAA,GAAA,CAAA,CAAC;iBACxC;gBAED,OAAOA,4BAAA,CAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,CAAW,CAAC;aACxB;YAgED,MAAM,uBAAuB,CAC3B,wBAAwD,EAAA;AAExD,gBAAA,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC;AACrE,sBAAE,wBAAwB;AAC1B,sBAAEE,kCAA0B,CAAC,wBAAwB,CAAC,CAAC;gBAEzD,OAAO,OAAO,CAAC,GAAG,CAChB,uBAAuB,CAAC,GAAG,CAAC,CAAC,aAAqB,KAChDF,4BAAA,CAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,EAAA,2CAAA,CAAwB,CAA5B,IAAA,CAAA,IAAI,EAAyB,aAAa,CAAC,CAC5C,CACF,CAAC;aACH;AACF,SAAA;;;;;QAlGC,eAAK,yCAAA,GAAA;;AACH,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;AACjC,YAAA,MAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAiB,CAAC;YAEnE,IAAI,CAAC,iBAAiB,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACvD;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAA0B,uBAAA,EAAA,iBAAiB,CAAG,CAAA,CAAA,CAAC,CAAC;aACnE;AAED,YAAA,OAAO,iBAAiB,CAAC;SAC1B;AAYD,QAAA,2CAAA,GAAA,2DAA8B,aAAqB,EAAA;YACjD,MAAM,yBAAyB,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAEtE,IAAI,yBAAyB,EAAE;gBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,CAAsB,mBAAA,EAAA,aAAa,CAAuC,qCAAA,CAAA,CAC3E,CAAC;AACF,gBAAA,OAAO,SAAS,CAAC;aAClB;AAED,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;AAEvC,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;gBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,6BAA6B,aAAa,CAAA,CAAA,CAAG,EAC7C,CAAA,4CAAA,EAA+C,aAAa,CAAA,8BAAA,EAAiC,MAAM,CAAC,IAAI,CACtG,SAAS,CACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,CAAA,CAAA,CAChB,CAAC;AACF,gBAAA,OAAO,SAAS,CAAC;aAClB;AAED,YAAA,IAAI;;AAEF,gBAAA,OAAO,MAAM,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;aACzC;YAAC,OAAO,CAAC,EAAE;;;;AAIV,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE;;AAElC,oBAAA,OAAO,CAAC,KAAK,CACX,wDAAwD,aAAa,CAAA,gEAAA,CAAkE,CACxI,CAAC;iBACH;qBAAM;AACL,oBAAA,MAAM,CAAC,CAAC;iBACT;aACF;AAED,YAAA,OAAO,SAAS,CAAC;SAClB;4CAED,eAAK,iCAAA,GAAA;AACH,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,OAAO,UAAU,CAAC,SAAS,CAAC;aAC7B;AAED,YAAA,IAAI;gBACF,MAAM,IAAI,CAAC,YAAY,CACrBG,oCAA0B,EAC1B,MAAMH,6BAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,EAAA,yCAAA,CAAsB,MAA1B,IAAI,CAAwB,EAClCI,sBAAY,EACZ,CAACC,gCAAsB,CAAC,CACzB,CAAC;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC1C,OAAO,UAAU,CAAC,SAAS,CAAC;aAC7B;YAAC,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzB,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;aAC7C;SACF;AAeD,QAAA,EAAA,CAAA;AACJ,CAAC;;;;"}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var constants = require('./constants.js');
|
|
4
|
-
|
|
5
|
-
const setupScript = (id) => {
|
|
6
|
-
const scriptEle = document.createElement('script');
|
|
7
|
-
scriptEle.id = id;
|
|
8
|
-
return scriptEle;
|
|
9
|
-
};
|
|
10
|
-
const generateScriptUrl = (urlTemplate, componentsVersion) => urlTemplate.replace(constants.UI_COMPONENTS_URL_VERSION_PLACEHOLDER, componentsVersion);
|
|
11
3
|
const getDescopeUiComponentsList = (template) => [
|
|
12
4
|
...Array.from(template.content.querySelectorAll('*')).reduce((acc, el) => el.localName.startsWith('descope-') ? acc.add(el.localName) : acc, new Set()),
|
|
13
5
|
];
|
|
14
6
|
|
|
15
|
-
exports.generateScriptUrl = generateScriptUrl;
|
|
16
7
|
exports.getDescopeUiComponentsList = getDescopeUiComponentsList;
|
|
17
|
-
exports.setupScript = setupScript;
|
|
18
8
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../src/mixins/descopeUiMixin/helpers.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../src/mixins/descopeUiMixin/helpers.ts"],"sourcesContent":["export const setupScript = (id: string) => {\n const scriptEle = document.createElement('script');\n scriptEle.id = id;\n\n return scriptEle;\n};\n\nexport const getDescopeUiComponentsList = (template: HTMLTemplateElement) => [\n ...Array.from(template.content.querySelectorAll('*')).reduce<Set<string>>(\n (acc, el: Element) =>\n el.localName.startsWith('descope-') ? acc.add(el.localName) : acc,\n new Set(),\n ),\n];\n"],"names":[],"mappings":";;MAOa,0BAA0B,GAAG,CAAC,QAA6B,KAAK;IAC3E,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAC1D,CAAC,GAAG,EAAE,EAAW,KACf,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,EACnE,IAAI,GAAG,EAAE,CACV;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../src/mixins/injectNpmLibMixin/constants.ts"],"sourcesContent":["export const BASE_URLS = [\n 'https://descopecdn.com',\n 'https://static.descope.com',\n 'https://cdn.jsdelivr.net',\n];\n"],"names":[],"mappings":";;AAAa,MAAA,SAAS,GAAG;IACvB,wBAAwB;IACxB,4BAA4B;IAC5B,0BAA0B;;;;;"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const getExistingScript = (scriptId) => {
|
|
4
|
+
return document.querySelector(`script#${scriptId}`);
|
|
5
|
+
};
|
|
6
|
+
const isScriptLoaded = (script) => {
|
|
7
|
+
return script.getAttribute('status') === 'loaded';
|
|
8
|
+
};
|
|
9
|
+
const isScriptError = (script) => {
|
|
10
|
+
return script.getAttribute('status') === 'error';
|
|
11
|
+
};
|
|
12
|
+
const hashUrl = (url) => {
|
|
13
|
+
let hash = 0;
|
|
14
|
+
const urlStr = url.toString();
|
|
15
|
+
for (let i = 0; i < urlStr.length; i++) {
|
|
16
|
+
const char = urlStr.charCodeAt(i);
|
|
17
|
+
hash = (hash << 5) - hash + char;
|
|
18
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
19
|
+
}
|
|
20
|
+
return `${Math.abs(hash).toString()}`;
|
|
21
|
+
};
|
|
22
|
+
const setupScript = (id) => {
|
|
23
|
+
const scriptEle = document.createElement('script');
|
|
24
|
+
scriptEle.id = id;
|
|
25
|
+
return scriptEle;
|
|
26
|
+
};
|
|
27
|
+
const injectScript = (scriptId, url) => {
|
|
28
|
+
return new Promise((res, rej) => {
|
|
29
|
+
const scriptEle = setupScript(scriptId);
|
|
30
|
+
scriptEle.onerror = (error) => {
|
|
31
|
+
scriptEle.setAttribute('status', 'error');
|
|
32
|
+
rej(error);
|
|
33
|
+
};
|
|
34
|
+
scriptEle.onload = () => {
|
|
35
|
+
scriptEle.setAttribute('status', 'loaded');
|
|
36
|
+
res(scriptEle);
|
|
37
|
+
};
|
|
38
|
+
scriptEle.src = url.toString();
|
|
39
|
+
document.body.appendChild(scriptEle);
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const handleExistingScript = (existingScript) => {
|
|
43
|
+
if (isScriptLoaded(existingScript)) {
|
|
44
|
+
return Promise.resolve(existingScript);
|
|
45
|
+
}
|
|
46
|
+
if (isScriptError(existingScript)) {
|
|
47
|
+
return Promise.reject();
|
|
48
|
+
}
|
|
49
|
+
return new Promise((res, rej) => {
|
|
50
|
+
existingScript.addEventListener('load', () => {
|
|
51
|
+
res(existingScript);
|
|
52
|
+
});
|
|
53
|
+
existingScript.addEventListener('error', (error) => {
|
|
54
|
+
rej(error);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
const injectScriptWithFallbacks = async (scriptsData, onError) => {
|
|
59
|
+
for (const scriptData of scriptsData) {
|
|
60
|
+
const { id, url } = scriptData;
|
|
61
|
+
const existingScript = getExistingScript(id);
|
|
62
|
+
if (existingScript) {
|
|
63
|
+
try {
|
|
64
|
+
await handleExistingScript(existingScript);
|
|
65
|
+
return scriptData;
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
onError(scriptData, true);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
try {
|
|
73
|
+
await injectScript(id, url);
|
|
74
|
+
return scriptData;
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
onError(scriptData, false);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
throw new Error('All scripts failed to load');
|
|
82
|
+
};
|
|
83
|
+
const generateLibUrls = (baseUrls, libName, version, path = '') => baseUrls.reduce((prev, curr) => {
|
|
84
|
+
const baseUrl = curr;
|
|
85
|
+
if (!baseUrl) {
|
|
86
|
+
return prev;
|
|
87
|
+
}
|
|
88
|
+
let url;
|
|
89
|
+
try {
|
|
90
|
+
url = new URL(baseUrl);
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
throw new Error(`Invalid URL: ${baseUrl}`);
|
|
94
|
+
}
|
|
95
|
+
const isUrlIncludesPath = url.pathname !== '/';
|
|
96
|
+
if (!isUrlIncludesPath) {
|
|
97
|
+
url.pathname = `/npm/${libName}@${version}/${path}`;
|
|
98
|
+
}
|
|
99
|
+
return [
|
|
100
|
+
...prev,
|
|
101
|
+
{
|
|
102
|
+
url: url,
|
|
103
|
+
id: `npmlib-${libName
|
|
104
|
+
.replaceAll('@', '')
|
|
105
|
+
.replaceAll('/', '_')}-${hashUrl(url)}`,
|
|
106
|
+
},
|
|
107
|
+
];
|
|
108
|
+
}, []);
|
|
109
|
+
|
|
110
|
+
exports.generateLibUrls = generateLibUrls;
|
|
111
|
+
exports.injectScriptWithFallbacks = injectScriptWithFallbacks;
|
|
112
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../src/mixins/injectNpmLibMixin/helpers.ts"],"sourcesContent":["const getExistingScript = (scriptId: string): HTMLScriptElement => {\n return document.querySelector(`script#${scriptId}`);\n};\n\nconst isScriptLoaded = (script: HTMLScriptElement) => {\n return script.getAttribute('status') === 'loaded';\n};\n\nconst isScriptError = (script: HTMLScriptElement) => {\n return script.getAttribute('status') === 'error';\n};\n\nconst hashUrl = (url: URL) => {\n let hash = 0;\n const urlStr = url.toString();\n\n for (let i = 0; i < urlStr.length; i++) {\n const char = urlStr.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return `${Math.abs(hash).toString()}`;\n};\n\nconst setupScript = (id: string) => {\n const scriptEle = document.createElement('script');\n scriptEle.id = id;\n\n return scriptEle;\n};\n\ntype ScriptData = {\n id: string;\n url: URL;\n};\n\nconst injectScript = (scriptId: string, url: URL) => {\n return new Promise((res, rej) => {\n const scriptEle = setupScript(scriptId);\n\n scriptEle.onerror = (error) => {\n scriptEle.setAttribute('status', 'error');\n rej(error);\n };\n scriptEle.onload = () => {\n scriptEle.setAttribute('status', 'loaded');\n res(scriptEle);\n };\n\n scriptEle.src = url.toString();\n\n document.body.appendChild(scriptEle);\n });\n};\n\nconst handleExistingScript = (existingScript: HTMLScriptElement) => {\n if (isScriptLoaded(existingScript)) {\n return Promise.resolve(existingScript);\n }\n\n if (isScriptError(existingScript)) {\n return Promise.reject();\n }\n\n return new Promise((res, rej) => {\n existingScript.addEventListener('load', () => {\n res(existingScript);\n });\n\n existingScript.addEventListener('error', (error) => {\n rej(error);\n });\n });\n};\n\nexport const injectScriptWithFallbacks = async (\n scriptsData: ScriptData[],\n onError: (scriptData: ScriptData, existingScript: boolean) => void,\n) => {\n for (const scriptData of scriptsData) {\n const { id, url } = scriptData;\n const existingScript = getExistingScript(id);\n if (existingScript) {\n try {\n await handleExistingScript(existingScript);\n return scriptData;\n } catch (e) {\n onError(scriptData, true);\n }\n } else {\n try {\n await injectScript(id, url);\n return scriptData;\n } catch (e) {\n onError(scriptData, false);\n }\n }\n }\n throw new Error('All scripts failed to load');\n};\n\nexport const generateLibUrls = (\n baseUrls: string[],\n libName: string,\n version: string,\n path = '',\n) =>\n baseUrls.reduce((prev, curr) => {\n const baseUrl = curr;\n if (!baseUrl) {\n return prev;\n }\n\n let url: URL;\n try {\n url = new URL(baseUrl);\n } catch (e) {\n throw new Error(`Invalid URL: ${baseUrl}`);\n }\n\n const isUrlIncludesPath = url.pathname !== '/';\n\n if (!isUrlIncludesPath) {\n url.pathname = `/npm/${libName}@${version}/${path}`;\n }\n\n return [\n ...prev,\n {\n url: url,\n id: `npmlib-${libName\n .replaceAll('@', '')\n .replaceAll('/', '_')}-${hashUrl(url)}`,\n },\n ];\n }, []);\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var sdkHelpers = require('@descope/sdk-helpers');
|
|
4
|
+
var loggerMixin = require('../loggerMixin/loggerMixin.js');
|
|
5
|
+
var constants = require('./constants.js');
|
|
6
|
+
var helpers = require('./helpers.js');
|
|
7
|
+
|
|
8
|
+
const injectNpmLibMixin = sdkHelpers.createSingletonMixin((superclass) => {
|
|
9
|
+
const BaseClass = sdkHelpers.compose(loggerMixin.loggerMixin)(superclass);
|
|
10
|
+
return class InjectNpmLibMixinClass extends BaseClass {
|
|
11
|
+
get baseCdnUrl() {
|
|
12
|
+
return this.getAttribute('base-cdn-url');
|
|
13
|
+
}
|
|
14
|
+
injectNpmLib(libName, version, filePath = '', overrides = []) {
|
|
15
|
+
this.logger.debug(`Injecting npm lib: "${libName}" with version: "${version}"`);
|
|
16
|
+
return helpers.injectScriptWithFallbacks(helpers.generateLibUrls([...overrides, this.baseCdnUrl, ...constants.BASE_URLS], libName, version, filePath), (scriptData, existingScript) => {
|
|
17
|
+
if (existingScript) {
|
|
18
|
+
this.logger.error(`Existing script cannot be loaded: "${scriptData.url}"`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.logger.error(`Cannot load script from URL, Make sure this URL is valid and return the correct script: "${scriptData.url}"`);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
exports.injectNpmLibMixin = injectNpmLibMixin;
|
|
28
|
+
//# sourceMappingURL=injectNpmLibMixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectNpmLibMixin.js","sources":["../../../../src/mixins/injectNpmLibMixin/injectNpmLibMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { loggerMixin } from '../loggerMixin';\nimport { BASE_URLS } from './constants';\nimport { generateLibUrls, injectScriptWithFallbacks } from './helpers';\n\n// scripts load to window under descope object\ndeclare global {\n var descope: any;\n}\n\nexport const injectNpmLibMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(loggerMixin)(superclass);\n\n return class InjectNpmLibMixinClass extends BaseClass {\n get baseCdnUrl() {\n return this.getAttribute('base-cdn-url');\n }\n\n injectNpmLib(\n libName: string,\n version: string,\n filePath = '',\n overrides: string[] = [],\n ) {\n this.logger.debug(\n `Injecting npm lib: \"${libName}\" with version: \"${version}\"`,\n );\n return injectScriptWithFallbacks(\n generateLibUrls(\n [...overrides, this.baseCdnUrl, ...BASE_URLS],\n libName,\n version,\n filePath,\n ),\n (scriptData, existingScript) => {\n if (existingScript) {\n this.logger.error(\n `Existing script cannot be loaded: \"${scriptData.url}\"`,\n );\n return;\n }\n this.logger.error(\n `Cannot load script from URL, Make sure this URL is valid and return the correct script: \"${scriptData.url}\"`,\n );\n },\n );\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","loggerMixin","injectScriptWithFallbacks","generateLibUrls","BASE_URLS"],"mappings":";;;;;;;MAUa,iBAAiB,GAAGA,+BAAoB,CACnD,CAAqC,UAAa,KAAI;IACpD,MAAM,SAAS,GAAGC,kBAAO,CAACC,uBAAW,CAAC,CAAC,UAAU,CAAC,CAAC;IAEnD,OAAO,MAAM,sBAAuB,SAAQ,SAAS,CAAA;AACnD,QAAA,IAAI,UAAU,GAAA;AACZ,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;SAC1C;QAED,YAAY,CACV,OAAe,EACf,OAAe,EACf,QAAQ,GAAG,EAAE,EACb,SAAA,GAAsB,EAAE,EAAA;YAExB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,CAAuB,oBAAA,EAAA,OAAO,CAAoB,iBAAA,EAAA,OAAO,CAAG,CAAA,CAAA,CAC7D,CAAC;AACF,YAAA,OAAOC,iCAAyB,CAC9BC,uBAAe,CACb,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,GAAGC,mBAAS,CAAC,EAC7C,OAAO,EACP,OAAO,EACP,QAAQ,CACT,EACD,CAAC,UAAU,EAAE,cAAc,KAAI;gBAC7B,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,CAAsC,mCAAA,EAAA,UAAU,CAAC,GAAG,CAAG,CAAA,CAAA,CACxD,CAAC;oBACF,OAAO;iBACR;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,CAA4F,yFAAA,EAAA,UAAU,CAAC,GAAG,CAAG,CAAA,CAAA,CAC9G,CAAC;AACJ,aAAC,CACF,CAAC;SACH;KACF,CAAC;AACJ,CAAC;;;;"}
|
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const notLastMsgSuffix = 'Trying the next fallback URL...';
|
|
4
|
-
|
|
4
|
+
// reties in case on network error
|
|
5
|
+
const fetchWithRetry = async (url, init, { logger } = {}) => {
|
|
6
|
+
try {
|
|
7
|
+
return await fetch(url, init);
|
|
8
|
+
}
|
|
9
|
+
catch (e) {
|
|
10
|
+
// if there is an exception, we want to retry
|
|
11
|
+
// so we can overcome network errors
|
|
12
|
+
logger === null || logger === void 0 ? void 0 : logger.debug(`Network error fetching URL ${url} [${e.message}], retrying...`);
|
|
13
|
+
return fetch(url, init);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const fetchWithFallbacks = async (fallbacks, init, { logger, onSuccess, } = {}) => {
|
|
5
17
|
const fallbacksArr = Array.isArray(fallbacks) ? fallbacks : [fallbacks];
|
|
6
18
|
for (let index = 0; index < fallbacksArr.length; index++) {
|
|
7
19
|
const url = fallbacksArr[index];
|
|
8
20
|
const isLast = index === fallbacksArr.length - 1;
|
|
9
21
|
try {
|
|
10
|
-
const res = await
|
|
22
|
+
const res = await fetchWithRetry(url.toString(), init, { logger });
|
|
11
23
|
if (res.ok) {
|
|
12
24
|
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(index);
|
|
25
|
+
logger === null || logger === void 0 ? void 0 : logger.debug(`Successfully fetched URL ${url}`);
|
|
13
26
|
return res;
|
|
14
27
|
}
|
|
15
28
|
const errMsg = `Error fetching URL ${url} [${res.status}]`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchWithFallbacks.js","sources":["../../../../src/mixins/staticResourcesMixin/fetchWithFallbacks.ts"],"sourcesContent":["import { Logger } from '../loggerMixin';\n\ntype FetchParams = Parameters<typeof fetch>;\nconst notLastMsgSuffix = 'Trying the next fallback URL...';\n\nexport const fetchWithFallbacks = async (\n fallbacks: FetchParams['0'] | FetchParams['0'][],\n init: FetchParams['1'],\n {\n logger,\n onSuccess,\n }: { logger?: Logger; onSuccess?: (urlIndex: number) => void },\n): ReturnType<typeof fetch> => {\n const fallbacksArr = Array.isArray(fallbacks) ? fallbacks : [fallbacks];\n\n for (let index = 0; index < fallbacksArr.length; index++) {\n const url = fallbacksArr[index];\n const isLast = index === fallbacksArr.length - 1;\n\n try {\n const res = await
|
|
1
|
+
{"version":3,"file":"fetchWithFallbacks.js","sources":["../../../../src/mixins/staticResourcesMixin/fetchWithFallbacks.ts"],"sourcesContent":["import { Logger } from '../loggerMixin';\n\ntype FetchParams = Parameters<typeof fetch>;\nconst notLastMsgSuffix = 'Trying the next fallback URL...';\n\n// reties in case on network error\nconst fetchWithRetry = async (\n url: string,\n init: FetchParams['1'],\n { logger }: { logger?: Logger } = {},\n) => {\n try {\n return await fetch(url, init);\n } catch (e) {\n // if there is an exception, we want to retry\n // so we can overcome network errors\n logger?.debug(\n `Network error fetching URL ${url} [${e.message}], retrying...`,\n );\n return fetch(url, init);\n }\n};\n\nexport const fetchWithFallbacks = async (\n fallbacks: FetchParams['0'] | FetchParams['0'][],\n init: FetchParams['1'],\n {\n logger,\n onSuccess,\n }: { logger?: Logger; onSuccess?: (urlIndex: number) => void } = {},\n): ReturnType<typeof fetch> => {\n const fallbacksArr = Array.isArray(fallbacks) ? fallbacks : [fallbacks];\n\n for (let index = 0; index < fallbacksArr.length; index++) {\n const url = fallbacksArr[index];\n const isLast = index === fallbacksArr.length - 1;\n\n try {\n const res = await fetchWithRetry(url.toString(), init, { logger });\n if (res.ok) {\n onSuccess?.(index);\n logger?.debug(`Successfully fetched URL ${url}`);\n return res;\n }\n\n const errMsg = `Error fetching URL ${url} [${res.status}]`;\n\n if (isLast) throw new Error(errMsg);\n\n logger?.debug(`${errMsg}. ${notLastMsgSuffix}`);\n } catch (e) {\n const errMsg = `Error fetching URL ${url} [${e.message}]`;\n\n if (isLast) throw new Error(errMsg);\n\n logger?.debug(`${errMsg}. ${notLastMsgSuffix}`);\n }\n }\n};\n"],"names":[],"mappings":";;AAGA,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAE3D;AACA,MAAM,cAAc,GAAG,OACrB,GAAW,EACX,IAAsB,EACtB,EAAE,MAAM,EAA0B,GAAA,EAAE,KAClC;AACF,IAAA,IAAI;AACF,QAAA,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KAC/B;IAAC,OAAO,CAAC,EAAE;;;AAGV,QAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,KAAK,CACX,CAA8B,2BAAA,EAAA,GAAG,KAAK,CAAC,CAAC,OAAO,CAAA,cAAA,CAAgB,CAChE,CAAC;AACF,QAAA,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KACzB;AACH,CAAC,CAAC;AAEW,MAAA,kBAAkB,GAAG,OAChC,SAAgD,EAChD,IAAsB,EACtB,EACE,MAAM,EACN,SAAS,GACsD,GAAA,EAAE,KACvC;AAC5B,IAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;AAExE,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACxD,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAEjD,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACnE,YAAA,IAAI,GAAG,CAAC,EAAE,EAAE;AACV,gBAAA,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAG,KAAK,CAAC,CAAC;gBACnB,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,KAAK,CAAC,CAA4B,yBAAA,EAAA,GAAG,CAAE,CAAA,CAAC,CAAC;AACjD,gBAAA,OAAO,GAAG,CAAC;aACZ;YAED,MAAM,MAAM,GAAG,CAAsB,mBAAA,EAAA,GAAG,KAAK,GAAG,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;AAE3D,YAAA,IAAI,MAAM;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAEpC,YAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,gBAAgB,CAAA,CAAE,CAAC,CAAC;SACjD;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,MAAM,GAAG,CAAsB,mBAAA,EAAA,GAAG,KAAK,CAAC,CAAC,OAAO,CAAA,CAAA,CAAG,CAAC;AAE1D,YAAA,IAAI,MAAM;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAEpC,YAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,gBAAgB,CAAA,CAAE,CAAC,CAAC;SACjD;KACF;AACH;;;;"}
|
package/dist/esm/index.js
CHANGED
|
@@ -15,4 +15,5 @@ export { initLifecycleMixin } from './mixins/initLifecycleMixin.js';
|
|
|
15
15
|
export { projectIdMixin } from './mixins/projectIdMixin.js';
|
|
16
16
|
export { baseUrlMixin } from './mixins/baseUrlMixin.js';
|
|
17
17
|
export { cookieConfigMixin } from './mixins/cookieConfigMixin.js';
|
|
18
|
+
export { injectNpmLibMixin } from './mixins/injectNpmLibMixin/injectNpmLibMixin.js';
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { IS_LOCAL_STORAGE } from '../../constants.js';
|
|
2
2
|
|
|
3
|
-
const DESCOPE_UI_SCRIPT_ID = 'load-descope-ui';
|
|
4
|
-
const DESCOPE_UI_FALLBACK_SCRIPT_ID = 'load-descope-ui-fallback-script';
|
|
5
|
-
const DESCOPE_UI_FALLBACK_2_SCRIPT_ID = 'load-descope-ui-fallback-script-2';
|
|
6
3
|
const UI_COMPONENTS_URL_KEY = 'base.ui.components.url';
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
'https://static.descope.com/npm/@descope/web-components-ui@<version>/dist/umd/index.js';
|
|
11
|
-
const UI_COMPONENTS_FALLBACK_2_URL = (IS_LOCAL_STORAGE && localStorage.getItem(UI_COMPONENTS_URL_KEY)) ||
|
|
12
|
-
'https://cdn.jsdelivr.net/npm/@descope/web-components-ui@<version>/dist/umd/index.js';
|
|
13
|
-
const UI_COMPONENTS_URL_VERSION_PLACEHOLDER = '<version>';
|
|
4
|
+
const LOCAL_STORAGE_OVERRIDE = IS_LOCAL_STORAGE && localStorage.getItem(UI_COMPONENTS_URL_KEY);
|
|
5
|
+
const JS_FILE_PATH = 'dist/umd/index.js';
|
|
6
|
+
const WEB_COMPONENTS_UI_LIB_NAME = '@descope/web-components-ui';
|
|
14
7
|
|
|
15
|
-
export {
|
|
8
|
+
export { JS_FILE_PATH, LOCAL_STORAGE_OVERRIDE, UI_COMPONENTS_URL_KEY, WEB_COMPONENTS_UI_LIB_NAME };
|
|
16
9
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../src/mixins/descopeUiMixin/constants.ts"],"sourcesContent":["import { IS_LOCAL_STORAGE } from '../../constants';\n\nexport const
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../src/mixins/descopeUiMixin/constants.ts"],"sourcesContent":["import { IS_LOCAL_STORAGE } from '../../constants';\n\nexport const UI_COMPONENTS_URL_KEY = 'base.ui.components.url';\nexport const LOCAL_STORAGE_OVERRIDE =\n IS_LOCAL_STORAGE && localStorage.getItem(UI_COMPONENTS_URL_KEY);\nexport const JS_FILE_PATH = 'dist/umd/index.js';\nexport const WEB_COMPONENTS_UI_LIB_NAME = '@descope/web-components-ui';\n"],"names":[],"mappings":";;AAEO,MAAM,qBAAqB,GAAG,yBAAyB;AACvD,MAAM,sBAAsB,GACjC,gBAAgB,IAAI,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE;AAC3D,MAAM,YAAY,GAAG,oBAAoB;AACzC,MAAM,0BAA0B,GAAG;;;;"}
|