musora-content-services 2.9.4 → 2.9.6
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/.github/workflows/node.js.yml +0 -0
- package/.prettierignore +0 -0
- package/.prettierrc +0 -0
- package/CHANGELOG.md +10 -0
- package/babel.config.cjs +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/scripts/collapse.js +0 -0
- package/docs/scripts/commonNav.js +0 -0
- package/docs/scripts/linenumber.js +0 -0
- package/docs/scripts/nav.js +0 -0
- package/docs/scripts/polyfill.js +0 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
- package/docs/scripts/prettify/lang-css.js +0 -0
- package/docs/scripts/prettify/prettify.js +0 -0
- package/docs/scripts/search.js +0 -0
- package/docs/styles/jsdoc.css +0 -0
- package/docs/styles/prettify.css +0 -0
- package/jest.config.js +0 -0
- package/package.json +1 -1
- package/src/services/imageSRCBuilder.js +5 -0
- package/src/services/imageSRCVerify.js +0 -0
- package/src/services/sanity.js +29 -8
- package/test/dataContext.test.js +0 -0
- package/test/imageSRCVerify.test.js +0 -0
- package/test/live/contentProgressLive.test.js +0 -0
- package/test/live/railcontentLive.test.js +0 -0
- package/test/localStorageMock.js +0 -0
- package/test/log.js +0 -0
- package/.yarnrc.yml +0 -1
- package/docs/module-Content-Services.html +0 -763
- package/docs/module-UserChat.html +0 -410
- package/docs/user_chat.js.html +0 -98
|
File without changes
|
package/.prettierignore
CHANGED
|
File without changes
|
package/.prettierrc
CHANGED
|
File without changes
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [2.9.6](https://github.com/railroadmedia/musora-content-services/compare/v2.9.5...v2.9.6) (2025-06-18)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **BEH-547:** collection modules updates ([#300](https://github.com/railroadmedia/musora-content-services/issues/300)) ([d07002b](https://github.com/railroadmedia/musora-content-services/commit/d07002b32946d3d03dc9b8f3469863a34d2696b5))
|
|
11
|
+
* null check for buildImageSRC ([f841b46](https://github.com/railroadmedia/musora-content-services/commit/f841b460bd41e0405caf7f2c06dd0c057a5f9aa1))
|
|
12
|
+
|
|
13
|
+
### [2.9.5](https://github.com/railroadmedia/musora-content-services/compare/v2.9.4...v2.9.5) (2025-06-18)
|
|
14
|
+
|
|
5
15
|
### [2.9.4](https://github.com/railroadmedia/musora-content-services/compare/v2.9.3...v2.9.4) (2025-06-17)
|
|
6
16
|
|
|
7
17
|
### [2.9.3](https://github.com/railroadmedia/musora-content-services/compare/v2.9.2...v2.9.3) (2025-06-16)
|
package/babel.config.cjs
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/docs/scripts/collapse.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/docs/scripts/nav.js
CHANGED
|
File without changes
|
package/docs/scripts/polyfill.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/docs/scripts/search.js
CHANGED
|
File without changes
|
package/docs/styles/jsdoc.css
CHANGED
|
File without changes
|
package/docs/styles/prettify.css
CHANGED
|
File without changes
|
package/jest.config.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
* @returns {string} The fully constructed image URL with transformations
|
|
36
36
|
*/
|
|
37
37
|
export function buildImageSRC(url, options = {}) {
|
|
38
|
+
// Return early if url is null, undefined, or empty
|
|
39
|
+
if (!url) {
|
|
40
|
+
return url
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
// Process Sanity URL first if applicable
|
|
39
44
|
if (url.includes('cdn.sanity.io')) {
|
|
40
45
|
url = applySanityTransformations(url, options)
|
|
File without changes
|
package/src/services/sanity.js
CHANGED
|
@@ -1307,11 +1307,12 @@ export async function fetchLessonContent(railContentId) {
|
|
|
1307
1307
|
xp,
|
|
1308
1308
|
stbs,ds2stbs, bdsStbs,
|
|
1309
1309
|
...select(
|
|
1310
|
-
defined(live_event_start_time)
|
|
1310
|
+
defined(live_event_start_time) => {
|
|
1311
1311
|
"live_event_start_time": live_event_start_time,
|
|
1312
1312
|
"live_event_end_time": live_event_end_time,
|
|
1313
1313
|
"live_event_youtube_id": live_event_youtube_id,
|
|
1314
1314
|
"videoId": coalesce(live_event_youtube_id, video.external_id),
|
|
1315
|
+
"live_event_is_global": live_global_event == true
|
|
1315
1316
|
}
|
|
1316
1317
|
)`
|
|
1317
1318
|
const query = await buildQuery(`railcontent_id == ${railContentId}`, filterParams, fields, {
|
|
@@ -1413,23 +1414,27 @@ async function fetchRelatedByLicense(railcontentId, brand, onlyUseSongTypes, cou
|
|
|
1413
1414
|
*/
|
|
1414
1415
|
export async function fetchRelatedLessons(railContentId, brand) {
|
|
1415
1416
|
const filterSameTypeAndSortOrder = await new FilterBuilder(
|
|
1416
|
-
`_type==^._type && _type in ${JSON.stringify(typeWithSortOrder)} && brand == "${brand}" && railcontent_id !=${railContentId}
|
|
1417
|
+
`_type==^._type && _type in ${JSON.stringify(typeWithSortOrder)} && brand == "${brand}" && railcontent_id !=${railContentId}`,
|
|
1417
1418
|
).buildFilter()
|
|
1418
1419
|
const filterSameType = await new FilterBuilder(
|
|
1419
|
-
`_type==^._type && !(_type in ${JSON.stringify(typeWithSortOrder)}) && !(defined(parent_type)) && brand == "${brand}" && railcontent_id !=${railContentId}
|
|
1420
|
+
`_type==^._type && !(_type in ${JSON.stringify(typeWithSortOrder)}) && !(defined(parent_type)) && brand == "${brand}" && railcontent_id !=${railContentId}`,
|
|
1420
1421
|
).buildFilter()
|
|
1421
1422
|
const filterSongSameArtist = await new FilterBuilder(
|
|
1422
|
-
`_type=="song" && _type==^._type && brand == "${brand}" && references(^.artist->_id) && railcontent_id !=${railContentId}
|
|
1423
|
+
`_type=="song" && _type==^._type && brand == "${brand}" && references(^.artist->_id) && railcontent_id !=${railContentId}`,
|
|
1423
1424
|
).buildFilter()
|
|
1424
1425
|
const filterSongSameGenre = await new FilterBuilder(
|
|
1425
|
-
`_type=="song" && _type==^._type && brand == "${brand}" && references(^.genre[]->_id) && railcontent_id !=${railContentId}
|
|
1426
|
+
`_type=="song" && _type==^._type && brand == "${brand}" && references(^.genre[]->_id) && railcontent_id !=${railContentId}`,
|
|
1426
1427
|
).buildFilter()
|
|
1427
|
-
const filterNeighbouringSiblings = await new FilterBuilder(`references(^._id)
|
|
1428
|
+
const filterNeighbouringSiblings = await new FilterBuilder(`references(^._id)`, {pullFutureContent: true}).buildFilter()
|
|
1428
1429
|
const childrenFilter = await new FilterBuilder(``, { isChildrenFilter: true }).buildFilter()
|
|
1429
1430
|
const queryFields = `_id, "id":railcontent_id, published_on, "instructor": instructor[0]->name, title, "thumbnail":thumbnail.asset->url, length_in_seconds, web_url_path, "type": _type, difficulty, difficulty_string, railcontent_id, artist->,"permission_id": permission[]->railcontent_id,_type, "genre": genre[]->name`
|
|
1430
1431
|
const queryFieldsWithSort = queryFields + ', sort'
|
|
1431
1432
|
const query = `*[railcontent_id == ${railContentId} && brand == "${brand}" && (!defined(permission) || references(*[_type=='permission']._id))]{
|
|
1432
|
-
_type, parent_type, railcontent_id,
|
|
1433
|
+
_type, parent_type, 'parent_id': parent_content_data[0].id, railcontent_id,
|
|
1434
|
+
'for-calculations': *[references(^._id) && !(_type in ['license'])][0]{
|
|
1435
|
+
'siblings-list': child[]->railcontent_id,
|
|
1436
|
+
'parents-list': *[references(^._id)][0].child[]->railcontent_id
|
|
1437
|
+
},
|
|
1433
1438
|
"related_lessons" : array::unique([
|
|
1434
1439
|
...(*[${filterNeighbouringSiblings}][0].child[${childrenFilter}]->{${queryFields}}),
|
|
1435
1440
|
...(*[${filterSongSameArtist}]{${queryFields}}|order(published_on desc, title asc)[0...10]),
|
|
@@ -1438,7 +1443,23 @@ export async function fetchRelatedLessons(railContentId, brand) {
|
|
|
1438
1443
|
...(*[${filterSameType}]{${queryFields}}|order(published_on desc, title asc)[0...10])
|
|
1439
1444
|
,
|
|
1440
1445
|
])[0...10]}`
|
|
1441
|
-
|
|
1446
|
+
let result = await fetchSanity(query, false)
|
|
1447
|
+
|
|
1448
|
+
//there's no way in sanity to retrieve the index of an array, so we must calculate after fetch
|
|
1449
|
+
if (result['for-calculations']['parents-list']) {
|
|
1450
|
+
const calc = result['for-calculations']
|
|
1451
|
+
const parentCount = calc['parents-list'].length
|
|
1452
|
+
const currentParent = (calc['parents-list'].indexOf(result['parent_id']) + 1)
|
|
1453
|
+
const siblingCount = calc['siblings-list'].length
|
|
1454
|
+
const currentSibling = (calc['siblings-list'].indexOf(result['railcontent_id']) + 1)
|
|
1455
|
+
|
|
1456
|
+
delete result['for-calculations']
|
|
1457
|
+
result = {...result, parentCount, currentParent, siblingCount, currentSibling}
|
|
1458
|
+
return result
|
|
1459
|
+
} else {
|
|
1460
|
+
delete result['for-calculations']
|
|
1461
|
+
return result
|
|
1462
|
+
}
|
|
1442
1463
|
}
|
|
1443
1464
|
|
|
1444
1465
|
/**
|
package/test/dataContext.test.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/localStorageMock.js
CHANGED
|
File without changes
|
package/test/log.js
CHANGED
|
File without changes
|
package/.yarnrc.yml
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
nodeLinker: node-modules
|