@descope/sdk-mixins 0.13.5 → 0.13.7

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.
@@ -55,7 +55,7 @@ const staticResourcesMixin = sdkHelpers.createSingletonMixin((superclass) => {
55
55
  }
56
56
  }
57
57
  get baseStaticUrl() {
58
- return this.getAttribute('base-static-url');
58
+ return this.getAttribute('base-static-url') || '';
59
59
  }
60
60
  },
61
61
  _StaticResourcesMixinClass_lastBaseUrl = new WeakMap(),
@@ -1 +1 @@
1
- {"version":3,"file":"staticResourcesMixin.js","sources":["../../../../src/mixins/staticResourcesMixin/staticResourcesMixin.ts"],"sourcesContent":["import { pathJoin, compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { loggerMixin } from '../loggerMixin';\nimport {\n ASSETS_FOLDER,\n BASE_CONTENT_URL,\n OVERRIDE_CONTENT_URL,\n} from './constants';\nimport { projectIdMixin } from '../projectIdMixin';\nimport { baseUrlMixin } from '../baseUrlMixin';\nimport { fetchWithFallbacks } from './fetchWithFallbacks';\n\ntype Format = 'text' | 'json';\n\ntype CustomUrl = URL & { baseUrl: string };\n\nexport function getResourceUrl({\n projectId,\n filename,\n assetsFolder = ASSETS_FOLDER,\n baseUrl = BASE_CONTENT_URL,\n}: {\n projectId: string;\n filename: string;\n assetsFolder?: string;\n baseUrl?: string;\n}) {\n const url: CustomUrl = new URL(baseUrl) as any;\n url.pathname = pathJoin(url.pathname, projectId, assetsFolder, filename);\n // we want to keep the baseUrl so we can use it later\n url.baseUrl = baseUrl;\n\n return url;\n}\n\nexport const staticResourcesMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n projectIdMixin,\n baseUrlMixin,\n )(superclass);\n\n // the logic should be as following:\n // if there is a local storage override, use it\n // otherwise, if there is a base-static-url attribute, use it\n // otherwise, try to use base-url, and check if it's working\n // if it's working, use it\n // if not, use the default content url\n return class StaticResourcesMixinClass extends BaseClass {\n #lastBaseUrl?: string;\n #workingBaseUrl?: string;\n\n #getResourceUrls(filename: string): CustomUrl[] | CustomUrl {\n const overrideUrl = OVERRIDE_CONTENT_URL || this.baseStaticUrl;\n\n if (overrideUrl) {\n return getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: overrideUrl,\n });\n }\n\n const isBaseUrlUpdated = this.#lastBaseUrl !== this.baseUrl;\n const shouldFallbackFetch = isBaseUrlUpdated && !!this.baseUrl;\n\n // if the base url has changed, reset the working base url\n if (isBaseUrlUpdated) {\n this.#lastBaseUrl = this.baseUrl;\n this.#workingBaseUrl = undefined;\n }\n\n const resourceUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.#workingBaseUrl,\n });\n\n // if there is no reason to check the baseUrl, generate the resource url according to the priority\n if (!shouldFallbackFetch) {\n return resourceUrl;\n }\n\n const resourceUrlFromBaseUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.baseUrl + '/pages',\n });\n\n return [resourceUrlFromBaseUrl, resourceUrl];\n }\n\n async fetchStaticResource<F extends Format>(\n filename: string,\n format: F,\n ): Promise<{\n body: F extends 'json' ? Record<string, any> : string;\n headers: Record<string, string>;\n }> {\n const resourceUrls = this.#getResourceUrls(filename);\n\n // if there are multiple resource urls, it means that there are fallbacks,\n // if one of the options (which is not the last) is working, we want to keep using it by updating the workingBaseUrl\n const onSuccess = !Array.isArray(resourceUrls)\n ? null\n : (index: number) => {\n if (index !== resourceUrls.length - 1) {\n const { baseUrl } = resourceUrls[index];\n this.#workingBaseUrl = baseUrl;\n }\n };\n\n try {\n const res = await fetchWithFallbacks(\n resourceUrls,\n { cache: 'default' },\n { logger: this.logger, onSuccess },\n );\n\n return {\n body: await res[format](),\n headers: Object.fromEntries(res.headers.entries()),\n };\n } catch (e) {\n this.logger.error(e.message);\n }\n }\n\n get baseStaticUrl() {\n return this.getAttribute('base-static-url');\n }\n };\n },\n);\n"],"names":["ASSETS_FOLDER","BASE_CONTENT_URL","pathJoin","createSingletonMixin","compose","loggerMixin","projectIdMixin","baseUrlMixin","__classPrivateFieldGet","__classPrivateFieldSet","fetchWithFallbacks","OVERRIDE_CONTENT_URL"],"mappings":"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"}
1
+ {"version":3,"file":"staticResourcesMixin.js","sources":["../../../../src/mixins/staticResourcesMixin/staticResourcesMixin.ts"],"sourcesContent":["import { pathJoin, compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { loggerMixin } from '../loggerMixin';\nimport {\n ASSETS_FOLDER,\n BASE_CONTENT_URL,\n OVERRIDE_CONTENT_URL,\n} from './constants';\nimport { projectIdMixin } from '../projectIdMixin';\nimport { baseUrlMixin } from '../baseUrlMixin';\nimport { fetchWithFallbacks } from './fetchWithFallbacks';\n\ntype Format = 'text' | 'json';\n\ntype CustomUrl = URL & { baseUrl: string };\n\nexport function getResourceUrl({\n projectId,\n filename,\n assetsFolder = ASSETS_FOLDER,\n baseUrl = BASE_CONTENT_URL,\n}: {\n projectId: string;\n filename: string;\n assetsFolder?: string;\n baseUrl?: string;\n}) {\n const url: CustomUrl = new URL(baseUrl) as any;\n url.pathname = pathJoin(url.pathname, projectId, assetsFolder, filename);\n // we want to keep the baseUrl so we can use it later\n url.baseUrl = baseUrl;\n\n return url;\n}\n\nexport const staticResourcesMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n projectIdMixin,\n baseUrlMixin,\n )(superclass);\n\n // the logic should be as following:\n // if there is a local storage override, use it\n // otherwise, if there is a base-static-url attribute, use it\n // otherwise, try to use base-url, and check if it's working\n // if it's working, use it\n // if not, use the default content url\n return class StaticResourcesMixinClass extends BaseClass {\n #lastBaseUrl?: string;\n #workingBaseUrl?: string;\n\n #getResourceUrls(filename: string): CustomUrl[] | CustomUrl {\n const overrideUrl = OVERRIDE_CONTENT_URL || this.baseStaticUrl;\n\n if (overrideUrl) {\n return getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: overrideUrl,\n });\n }\n\n const isBaseUrlUpdated = this.#lastBaseUrl !== this.baseUrl;\n const shouldFallbackFetch = isBaseUrlUpdated && !!this.baseUrl;\n\n // if the base url has changed, reset the working base url\n if (isBaseUrlUpdated) {\n this.#lastBaseUrl = this.baseUrl;\n this.#workingBaseUrl = undefined;\n }\n\n const resourceUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.#workingBaseUrl,\n });\n\n // if there is no reason to check the baseUrl, generate the resource url according to the priority\n if (!shouldFallbackFetch) {\n return resourceUrl;\n }\n\n const resourceUrlFromBaseUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.baseUrl + '/pages',\n });\n\n return [resourceUrlFromBaseUrl, resourceUrl];\n }\n\n async fetchStaticResource<F extends Format>(\n filename: string,\n format: F,\n ): Promise<{\n body: F extends 'json' ? Record<string, any> : string;\n headers: Record<string, string>;\n }> {\n const resourceUrls = this.#getResourceUrls(filename);\n\n // if there are multiple resource urls, it means that there are fallbacks,\n // if one of the options (which is not the last) is working, we want to keep using it by updating the workingBaseUrl\n const onSuccess = !Array.isArray(resourceUrls)\n ? null\n : (index: number) => {\n if (index !== resourceUrls.length - 1) {\n const { baseUrl } = resourceUrls[index];\n this.#workingBaseUrl = baseUrl;\n }\n };\n\n try {\n const res = await fetchWithFallbacks(\n resourceUrls,\n { cache: 'default' },\n { logger: this.logger, onSuccess },\n );\n\n return {\n body: await res[format](),\n headers: Object.fromEntries(res.headers.entries()),\n };\n } catch (e) {\n this.logger.error(e.message);\n }\n }\n\n get baseStaticUrl() {\n return this.getAttribute('base-static-url') || '';\n }\n };\n },\n);\n"],"names":["ASSETS_FOLDER","BASE_CONTENT_URL","pathJoin","createSingletonMixin","compose","loggerMixin","projectIdMixin","baseUrlMixin","__classPrivateFieldGet","__classPrivateFieldSet","fetchWithFallbacks","OVERRIDE_CONTENT_URL"],"mappings":"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"}
@@ -53,7 +53,7 @@ const staticResourcesMixin = createSingletonMixin((superclass) => {
53
53
  }
54
54
  }
55
55
  get baseStaticUrl() {
56
- return this.getAttribute('base-static-url');
56
+ return this.getAttribute('base-static-url') || '';
57
57
  }
58
58
  },
59
59
  _StaticResourcesMixinClass_lastBaseUrl = new WeakMap(),
@@ -1 +1 @@
1
- {"version":3,"file":"staticResourcesMixin.js","sources":["../../../../src/mixins/staticResourcesMixin/staticResourcesMixin.ts"],"sourcesContent":["import { pathJoin, compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { loggerMixin } from '../loggerMixin';\nimport {\n ASSETS_FOLDER,\n BASE_CONTENT_URL,\n OVERRIDE_CONTENT_URL,\n} from './constants';\nimport { projectIdMixin } from '../projectIdMixin';\nimport { baseUrlMixin } from '../baseUrlMixin';\nimport { fetchWithFallbacks } from './fetchWithFallbacks';\n\ntype Format = 'text' | 'json';\n\ntype CustomUrl = URL & { baseUrl: string };\n\nexport function getResourceUrl({\n projectId,\n filename,\n assetsFolder = ASSETS_FOLDER,\n baseUrl = BASE_CONTENT_URL,\n}: {\n projectId: string;\n filename: string;\n assetsFolder?: string;\n baseUrl?: string;\n}) {\n const url: CustomUrl = new URL(baseUrl) as any;\n url.pathname = pathJoin(url.pathname, projectId, assetsFolder, filename);\n // we want to keep the baseUrl so we can use it later\n url.baseUrl = baseUrl;\n\n return url;\n}\n\nexport const staticResourcesMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n projectIdMixin,\n baseUrlMixin,\n )(superclass);\n\n // the logic should be as following:\n // if there is a local storage override, use it\n // otherwise, if there is a base-static-url attribute, use it\n // otherwise, try to use base-url, and check if it's working\n // if it's working, use it\n // if not, use the default content url\n return class StaticResourcesMixinClass extends BaseClass {\n #lastBaseUrl?: string;\n #workingBaseUrl?: string;\n\n #getResourceUrls(filename: string): CustomUrl[] | CustomUrl {\n const overrideUrl = OVERRIDE_CONTENT_URL || this.baseStaticUrl;\n\n if (overrideUrl) {\n return getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: overrideUrl,\n });\n }\n\n const isBaseUrlUpdated = this.#lastBaseUrl !== this.baseUrl;\n const shouldFallbackFetch = isBaseUrlUpdated && !!this.baseUrl;\n\n // if the base url has changed, reset the working base url\n if (isBaseUrlUpdated) {\n this.#lastBaseUrl = this.baseUrl;\n this.#workingBaseUrl = undefined;\n }\n\n const resourceUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.#workingBaseUrl,\n });\n\n // if there is no reason to check the baseUrl, generate the resource url according to the priority\n if (!shouldFallbackFetch) {\n return resourceUrl;\n }\n\n const resourceUrlFromBaseUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.baseUrl + '/pages',\n });\n\n return [resourceUrlFromBaseUrl, resourceUrl];\n }\n\n async fetchStaticResource<F extends Format>(\n filename: string,\n format: F,\n ): Promise<{\n body: F extends 'json' ? Record<string, any> : string;\n headers: Record<string, string>;\n }> {\n const resourceUrls = this.#getResourceUrls(filename);\n\n // if there are multiple resource urls, it means that there are fallbacks,\n // if one of the options (which is not the last) is working, we want to keep using it by updating the workingBaseUrl\n const onSuccess = !Array.isArray(resourceUrls)\n ? null\n : (index: number) => {\n if (index !== resourceUrls.length - 1) {\n const { baseUrl } = resourceUrls[index];\n this.#workingBaseUrl = baseUrl;\n }\n };\n\n try {\n const res = await fetchWithFallbacks(\n resourceUrls,\n { cache: 'default' },\n { logger: this.logger, onSuccess },\n );\n\n return {\n body: await res[format](),\n headers: Object.fromEntries(res.headers.entries()),\n };\n } catch (e) {\n this.logger.error(e.message);\n }\n }\n\n get baseStaticUrl() {\n return this.getAttribute('base-static-url');\n }\n };\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"staticResourcesMixin.js","sources":["../../../../src/mixins/staticResourcesMixin/staticResourcesMixin.ts"],"sourcesContent":["import { pathJoin, compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { loggerMixin } from '../loggerMixin';\nimport {\n ASSETS_FOLDER,\n BASE_CONTENT_URL,\n OVERRIDE_CONTENT_URL,\n} from './constants';\nimport { projectIdMixin } from '../projectIdMixin';\nimport { baseUrlMixin } from '../baseUrlMixin';\nimport { fetchWithFallbacks } from './fetchWithFallbacks';\n\ntype Format = 'text' | 'json';\n\ntype CustomUrl = URL & { baseUrl: string };\n\nexport function getResourceUrl({\n projectId,\n filename,\n assetsFolder = ASSETS_FOLDER,\n baseUrl = BASE_CONTENT_URL,\n}: {\n projectId: string;\n filename: string;\n assetsFolder?: string;\n baseUrl?: string;\n}) {\n const url: CustomUrl = new URL(baseUrl) as any;\n url.pathname = pathJoin(url.pathname, projectId, assetsFolder, filename);\n // we want to keep the baseUrl so we can use it later\n url.baseUrl = baseUrl;\n\n return url;\n}\n\nexport const staticResourcesMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n projectIdMixin,\n baseUrlMixin,\n )(superclass);\n\n // the logic should be as following:\n // if there is a local storage override, use it\n // otherwise, if there is a base-static-url attribute, use it\n // otherwise, try to use base-url, and check if it's working\n // if it's working, use it\n // if not, use the default content url\n return class StaticResourcesMixinClass extends BaseClass {\n #lastBaseUrl?: string;\n #workingBaseUrl?: string;\n\n #getResourceUrls(filename: string): CustomUrl[] | CustomUrl {\n const overrideUrl = OVERRIDE_CONTENT_URL || this.baseStaticUrl;\n\n if (overrideUrl) {\n return getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: overrideUrl,\n });\n }\n\n const isBaseUrlUpdated = this.#lastBaseUrl !== this.baseUrl;\n const shouldFallbackFetch = isBaseUrlUpdated && !!this.baseUrl;\n\n // if the base url has changed, reset the working base url\n if (isBaseUrlUpdated) {\n this.#lastBaseUrl = this.baseUrl;\n this.#workingBaseUrl = undefined;\n }\n\n const resourceUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.#workingBaseUrl,\n });\n\n // if there is no reason to check the baseUrl, generate the resource url according to the priority\n if (!shouldFallbackFetch) {\n return resourceUrl;\n }\n\n const resourceUrlFromBaseUrl = getResourceUrl({\n projectId: this.projectId,\n filename,\n baseUrl: this.baseUrl + '/pages',\n });\n\n return [resourceUrlFromBaseUrl, resourceUrl];\n }\n\n async fetchStaticResource<F extends Format>(\n filename: string,\n format: F,\n ): Promise<{\n body: F extends 'json' ? Record<string, any> : string;\n headers: Record<string, string>;\n }> {\n const resourceUrls = this.#getResourceUrls(filename);\n\n // if there are multiple resource urls, it means that there are fallbacks,\n // if one of the options (which is not the last) is working, we want to keep using it by updating the workingBaseUrl\n const onSuccess = !Array.isArray(resourceUrls)\n ? null\n : (index: number) => {\n if (index !== resourceUrls.length - 1) {\n const { baseUrl } = resourceUrls[index];\n this.#workingBaseUrl = baseUrl;\n }\n };\n\n try {\n const res = await fetchWithFallbacks(\n resourceUrls,\n { cache: 'default' },\n { logger: this.logger, onSuccess },\n );\n\n return {\n body: await res[format](),\n headers: Object.fromEntries(res.headers.entries()),\n };\n } catch (e) {\n this.logger.error(e.message);\n }\n }\n\n get baseStaticUrl() {\n return this.getAttribute('base-static-url') || '';\n }\n };\n },\n);\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descope/sdk-mixins",
3
- "version": "0.13.5",
3
+ "version": "0.13.7",
4
4
  "author": "Descope Team <info@descope.com>",
5
5
  "homepage": "https://github.com/descope/sdk-mixins",
6
6
  "bugs": {
@@ -115,7 +115,7 @@
115
115
  },
116
116
  "dependencies": {
117
117
  "tslib": "2.8.1",
118
- "@descope/sdk-component-drivers": "0.2.52",
118
+ "@descope/sdk-component-drivers": "0.3.0",
119
119
  "@descope/sdk-helpers": "0.3.0"
120
120
  },
121
121
  "peerDependencies": {