@se-studio/core-data-types 1.0.167 → 1.0.169

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,9 +1,22 @@
1
1
  # @se-studio/core-data-types
2
2
 
3
+ ## 1.0.169
4
+
5
+ ### Patch Changes
6
+
7
+ - 16e795f: Fix `indexOfType` to use CMS-facing type keys (`componentType`, `collectionType`, `externalComponentType`) instead of structural `type`. Adds shared `getContentTypeKey()` helper. Fixes #41.
8
+
9
+ ## 1.0.168
10
+
11
+ ### Patch Changes
12
+
13
+ - Bulk version bump: patch for all packages
14
+
3
15
  ## 1.0.167
4
16
 
5
17
  ### Patch Changes
6
18
 
19
+ - Version bump: patch for changed packages
7
20
  - ccad4d9: Document external component type discriminator (#34): projects must use `externalComponentType` (Contentful field name), not `externalType`. Restore deferred discriminator pattern on `IBaseExternalComponent`. Consumer upgrade guide: `docs/UPGRADE_EXTERNAL_COMPONENT_TYPE.md`.
8
21
 
9
22
  ## 1.0.166
package/README.md CHANGED
@@ -92,7 +92,7 @@ type PartialPage = DeepPartial<IPage>;
92
92
  - Tag / tag type `show?: boolean` - Visual display on cards and detail pages only (`false` hides; unset = visible). Distinct from `hidden` and `indexed` on `IInternalLink`
93
93
  - `date?: string` - Publication date
94
94
  - `author?: IPersonLink` - Optional author
95
- - `externalLink?: string | null` - Override href with an external URL
95
+ - `externalLink?: string | null` - Supplementary external URL (e.g. DOI or publisher link). On `IArticleLink`, `href` is the internal detail URL when the article has article-level body content (`topContent`, `content`, or `bottomContent` on the article entry; article-type `articlePageTopContent` does not count); external-only articles use `externalLink` as `href`.
96
96
  - `download?: IDownloadAsset` - Optional downloadable asset
97
97
  - `subtitle?: string` - Article subtitle (e.g. customer name for case studies)
98
98
  - `visuals?: ReadonlyArray<IVisual>` - Additional visuals beyond the featured image; used for article browser / gallery views
package/dist/index.d.ts CHANGED
@@ -43,5 +43,6 @@ export type { IBaseTag, IBaseTags, IBaseTagType } from './types/tag';
43
43
  export { isTag, isTags, } from './types/tag';
44
44
  export type { Horizontal, IAnimation, IExternalVideo, IFullVideo, IImage, ILocalVideo, IOptimisedSvg, IPicture, IResponsiveVisual, ISvgData, ISvgImage, IVideo, IVideoDetails, IVideoEmbed, IVisual, IVisualCommon, IVisualSizes, Vertical, } from './types/visual';
45
45
  export { getVisualHorizontalPosition, getVisualWidthPercent, isAnimation, isExternalVideo, isFullVideo, isImage, isLocalVideo, isPicture, isResponsiveVisual, isSvgData, isSvgImage, isVideo, isVisual, isVisualAnimation, isVisualImage, isVisualVideo, processSizes, } from './types/visual';
46
+ export { getContentTypeKey } from './utils/getContentTypeKey';
46
47
  export { orderContentWithHtmlHeroFirst } from './utils/orderContentWithHtmlHeroFirst';
47
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,EACN,UAAU,EACV,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,KAAK,EACL,MAAM,GACP,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,MAAM,EACN,WAAW,EACX,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAa,EACb,WAAW,EACX,OAAO,EACP,aAAa,EACb,YAAY,EACZ,QAAQ,GACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,WAAW,EACX,OAAO,EACP,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,EACN,UAAU,EACV,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,KAAK,EACL,MAAM,GACP,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,MAAM,EACN,WAAW,EACX,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAa,EACb,WAAW,EACX,OAAO,EACP,aAAa,EACb,YAAY,EACZ,QAAQ,GACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,WAAW,EACX,OAAO,EACP,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC"}
package/dist/index.js CHANGED
@@ -36,5 +36,6 @@ export { isCustomType } from './types/customType';
36
36
  export { isPage } from './types/page';
37
37
  export { isTag, isTags, } from './types/tag';
38
38
  export { getVisualHorizontalPosition, getVisualWidthPercent, isAnimation, isExternalVideo, isFullVideo, isImage, isLocalVideo, isPicture, isResponsiveVisual, isSvgData, isSvgImage, isVideo, isVisual, isVisualAnimation, isVisualImage, isVisualVideo, processSizes, } from './types/visual';
39
+ export { getContentTypeKey } from './utils/getContentTypeKey';
39
40
  export { orderContentWithHtmlHeroFirst } from './utils/orderContentWithHtmlHeroFirst';
40
41
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAqC1C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EACL,KAAK,EACL,MAAM,GACP,MAAM,aAAa,CAAC;AAqBrB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,WAAW,EACX,OAAO,EACP,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAqC1C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EACL,KAAK,EACL,MAAM,GACP,MAAM,aAAa,CAAC;AAqBrB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,WAAW,EACX,OAAO,EACP,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ITyped } from '../types/common';
2
+ /**
3
+ * Returns the CMS-facing type key used for renderer lookup and position metadata.
4
+ * Component → componentType, Collection → collectionType, External component → externalComponentType.
5
+ */
6
+ export declare function getContentTypeKey(item: ITyped): string;
7
+ //# sourceMappingURL=getContentTypeKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getContentTypeKey.d.ts","sourceRoot":"","sources":["../../src/utils/getContentTypeKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,MAAM,EACP,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYtD"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Returns the CMS-facing type key used for renderer lookup and position metadata.
3
+ * Component → componentType, Collection → collectionType, External component → externalComponentType.
4
+ */
5
+ export function getContentTypeKey(item) {
6
+ switch (item.type) {
7
+ case 'Component':
8
+ return item.componentType;
9
+ case 'Collection':
10
+ return item.collectionType;
11
+ case 'External component':
12
+ return item
13
+ .externalComponentType;
14
+ default:
15
+ return item.type;
16
+ }
17
+ }
18
+ //# sourceMappingURL=getContentTypeKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getContentTypeKey.js","sourceRoot":"","sources":["../../src/utils/getContentTypeKey.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,WAAW;YACd,OAAQ,IAAmD,CAAC,aAAa,CAAC;QAC5E,KAAK,YAAY;YACf,OAAQ,IAAqD,CAAC,cAAc,CAAC;QAC/E,KAAK,oBAAoB;YACvB,OAAQ,IAAmE;iBACxE,qBAAqB,CAAC;QAC3B;YACE,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;AACH,CAAC"}
package/docs/llms.md CHANGED
@@ -109,6 +109,12 @@ import {
109
109
  } from '@se-studio/core-data-types';
110
110
  ```
111
111
 
112
+ **`IArticleLink` `href` vs `externalLink`:**
113
+
114
+ - `href` is internal when the article has article-level body content (`topContent`, `content`, or `bottomContent` on the article entry). Article-type `articlePageTopContent` does not count.
115
+ - External-only articles (no article-level body content, with `externalLink`) use `externalLink` as `href`.
116
+ - `externalLink` is always preserved on the link object when set (e.g. DOI or publisher URL alongside an on-site detail page).
117
+
112
118
  ## Visual / Media Types
113
119
 
114
120
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/core-data-types",
3
- "version": "1.0.167",
3
+ "version": "1.0.169",
4
4
  "description": "Core TypeScript type definitions for SE Studio content models",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,14 +39,16 @@
39
39
  "url": "https://github.com/Something-Else-Studio/se-core-product/issues"
40
40
  },
41
41
  "devDependencies": {
42
- "@biomejs/biome": "^2.4.15",
43
- "typescript": "^6.0.3"
42
+ "@biomejs/biome": "^2.4.16",
43
+ "typescript": "^6.0.3",
44
+ "vitest": "^4.1.8"
44
45
  },
45
46
  "scripts": {
46
47
  "build": "tsc --project tsconfig.build.json",
47
48
  "dev": "tsc --project tsconfig.build.json --watch",
48
49
  "type-check": "tsc --noEmit",
49
50
  "lint": "biome lint .",
51
+ "test": "vitest run",
50
52
  "clean": "rm -rf dist .turbo *.tsbuildinfo"
51
53
  }
52
54
  }