Skip to content

Commit 70c8975

Browse files
committed
Updated with implementation for embed content in paths
1 parent 5522c38 commit 70c8975

File tree

12 files changed

+1297
-77
lines changed

12 files changed

+1297
-77
lines changed

package-lock.json

Lines changed: 1165 additions & 41 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "@contentstack/utils",
33
"version": "1.0.0",
44
"description": "Contentstack utilities for Javascript",
5-
"main": "dist/lib/index.js",
5+
"main": "dist/index.es.js",
66
"types": "dist/types/index.d.ts",
77
"files": [
88
"dist"
@@ -17,7 +17,8 @@
1717
"test": "jest --config jestconfig.json",
1818
"test:badges": "npm run test && jest-coverage-badges --output ./badges",
1919
"test:debug": "jest --watchAll --config jestconfig.json --runInBand",
20-
"build": "tsc",
20+
"prebuild": "rimraf dist",
21+
"build": "tsc && rollup -c",
2122
"format": "prettier --write \"src/**/*.ts\"",
2223
"lint": "tslint -p tsconfig.json",
2324
"prepare": "npm run build",
@@ -37,9 +38,27 @@
3738
"jest-html-reporters": "^2.0.4",
3839
"jsdoc": "^3.6.5",
3940
"prettier": "^2.1.2",
41+
"rollup": "^2.32.1",
42+
"rollup-plugin-json": "^4.0.0",
43+
"rollup-plugin-node-resolve": "^5.2.0",
44+
"rollup-plugin-sourcemaps": "^0.6.3",
45+
"rollup-plugin-typescript2": "^0.28.0",
4046
"ts-jest": "^26.3.0",
4147
"tslint": "^6.1.3",
4248
"tslint-config-prettier": "^1.18.0",
43-
"typescript": "^4.0.2"
49+
"typescript": "^4.0.5"
50+
},
51+
"dependencies": {
52+
"babel-core": "^6.26.3",
53+
"babel-loader": "^8.1.0",
54+
"babel-preset-es2015": "^6.24.1",
55+
"babel-preset-react": "^6.24.1",
56+
"node-html-parser": "^1.4.2"
57+
},
58+
"babel": {
59+
"presets": [
60+
"es2015",
61+
"react"
62+
]
4463
}
4564
}

rollup.config.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import resolve from 'rollup-plugin-node-resolve';
2+
import commonjs from 'rollup-plugin-sourcemaps';
3+
import sourceMaps from 'rollup-plugin-sourcemaps';
4+
import typescript from 'rollup-plugin-typescript2';
5+
import json from 'rollup-plugin-json';
6+
7+
import pkg from './package.json'
8+
export default {
9+
input: 'src/index.ts',
10+
output: [
11+
{
12+
file: pkg.main,
13+
format: 'cjs',
14+
sourcemap: true,
15+
},
16+
],
17+
external: [
18+
...Object.keys(pkg.dependencies || {}),
19+
...Object.keys(pkg.peerDependencies || {}),
20+
],
21+
plugins: [
22+
// Allow json resolution
23+
json(),
24+
25+
typescript({
26+
useTsconfigDeclarationDir: true,
27+
objectHashIgnoreUnknownHack: true
28+
}),
29+
// Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs)
30+
commonjs(),
31+
32+
// Allow node_modules resolution, so you can use 'external' to control
33+
// which external modules to include in the bundle
34+
// https://github.com/rollup/rollup-plugin-node-resolve#usage
35+
resolve(),
36+
37+
// Resolve source maps to the original source
38+
sourceMaps(),
39+
],
40+
}
41+

src/Models/embed-attributes-model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import ASSET from '../embedded-types/asset';
33
export interface Attributes {
44
class: string,
55
type: 'entry' | 'asset';
6-
'sys-style-type': ENTRY.BLOCK | ENTRY.INLINE | ENTRY.LINK | ASSET.DISPLAYABLE | ASSET.DOWNLOADABLE;
6+
'sys-style-type': ENTRY.BLOCK | ENTRY.INLINE | ENTRY.LINK | ASSET.DISPLAYABLE;
77
[key: string]: any;
88
}
99

src/Models/entry-model.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,15 @@ export interface EntryModel {
55
[propName: string]: any;
66
}
77

8-
export interface ContentTypeEntry extends EntryModel {
9-
_content_type_uid: string;
10-
}
11-
12-
export interface EmbeddedEntries extends EntryModel {
13-
_embedded_entries: ContentTypeEntry[];
8+
export interface EmbedModel<T> {
9+
[path: string]: T[]
1410
}
1511

16-
export interface EmbeddedAssets extends EntryModel {
17-
_embedded_assets: AssetModel[];
12+
export interface ContentTypeEntry extends EntryModel {
13+
_content_type_uid: string;
1814
}
1915

20-
export interface EmbeddedObjets extends EntryModel {
21-
_embedded_assets: AssetModel[];
22-
_embedded_entries: ContentTypeEntry[];
16+
export interface Entry extends EntryModel {
17+
_embedded_assets?: EmbedModel<AssetModel>;
18+
_embedded_entries?: EmbedModel<ContentTypeEntry>;
2319
}
24-
25-
export type Entry = EmbeddedEntries | EmbeddedAssets | EmbeddedObjets;

src/embedded-types/asset.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
enum ASSET {
2-
DOWNLOADABLE = 'download',
32
DISPLAYABLE = 'display',
43
}
54

src/helper/find-embeded-object.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { AssetModel } from '../Models/asset-model';
33
import { RenderOption, RenderObject, RenderContentType } from '../options/index';
44
import { EmbeddedAsset, EmbeddedEntry, Attributes } from '../Models/embed-attributes-model';
55
import { defaultOptions } from '../options/default-options';
6-
import ASSET from '../embedded-types/asset';
76

87
// This function will find Embedded object present in string
98
export function findEmbeddedEntry(
@@ -33,11 +32,11 @@ export function findEmbeddedObjects(object: Attributes, entry: Entry): (ContentT
3332
return findEmbeddedEntry(
3433
embeddedEntry['data-sys-entry-uid'],
3534
embeddedEntry['data-sys-content-type-uid'],
36-
entry._embedded_entries,
35+
Object.values(entry._embedded_entries || []).reduce((accumulator, value) => accumulator.concat(value), []),
3736
);
3837
} else {
3938
const embeddedAsset = object as EmbeddedAsset;
40-
return findEmbeddedAsset(embeddedAsset['data-sys-asset-uid'], entry._embedded_assets);
39+
return findEmbeddedAsset(embeddedAsset['data-sys-asset-uid'], Object.values(entry._embedded_assets || []).reduce((accumulator, value) => accumulator.concat(value), []),);
4140
}
4241
}
4342
return [];
@@ -61,6 +60,12 @@ export function findRenderString(
6160
renderFunction[(object as EmbeddedEntry)['data-sys-content-type-uid']] !== undefined
6261
) {
6362
return (renderFunction as RenderContentType)[(object as EmbeddedEntry)['data-sys-content-type-uid']](renderModel, object);
63+
} else if (
64+
(object as EmbeddedEntry)['data-sys-content-type-uid'] !== undefined &&
65+
typeof renderFunction !== 'function' &&
66+
(renderFunction as RenderContentType).$default !== undefined
67+
) {
68+
return (renderFunction as RenderContentType).$all(renderModel, object);
6469
} else if (typeof renderFunction === 'function') {
6570
return renderFunction(renderModel, object);
6671
}

src/index.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
import { Options, RenderContentType, RenderOption, RenderObject } from './options';
1+
import { Option, RenderContentType, RenderOption, RenderObject } from './options/index';
22
import { AssetModel } from './Models/asset-model';
3-
import { Entry, EntryModel, EmbeddedEntries, ContentTypeEntry } from './Models/entry-model';
3+
import { Entry, EntryModel, ContentTypeEntry } from './Models/entry-model';
44

55
export { default as ENTRY } from './embedded-types/entry';
66
export { default as ASSET } from './embedded-types/asset';
77
export {
8-
Options,
8+
Option as Options,
99
RenderContentType,
1010
RenderObject,
1111
RenderOption,
1212
AssetModel,
1313
Entry,
1414
EntryModel,
15-
EmbeddedEntries,
1615
ContentTypeEntry
1716
};
18-
export { renderContent } from './render-embedded-objects';
17+
export { render, renderContent } from './render-embedded-objects';

src/options/default-options.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ export const defaultOptions: RenderOption = {
66
[ENTRY.BLOCK]: (entry) =>
77
`<div><p>${entry.title || entry.uid}</p><p>Content type: <span>${entry._content_type_uid}</span></p></div>`,
88
[ENTRY.INLINE]: (entry) => `<span>${entry.title || entry.uid}</span>`,
9-
[ENTRY.LINK]: (entry, embedAttributes) => `<a href="${entry.url}">${embedAttributes[`#text`] || entry.title || entry.uid}</a>`, // Todo Check for link with Manish
10-
[ASSET.DOWNLOADABLE]: (asset, embedAttributes) => `<a href="${asset.url}">${embedAttributes[`#text`] || asset.title || asset.filename || asset.uid}</a>`,
9+
[ENTRY.LINK]: (entry, embedAttributes) => `<a href="${entry.url}">${embedAttributes[`#text`] || entry.title || entry.uid}</a>`,
1110
[ASSET.DISPLAYABLE]: (asset, embedAttributes) => {
1211
const displaycontent = `<img src="${asset.url}" alt="${embedAttributes.alt || asset.title || asset.filename || asset.uid}" />`
1312
return displaycontent

src/options/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export interface RenderContentType {
1212
[contentTypeUid: string]: RenderObject;
1313
}
1414

15-
export interface Options {
15+
export interface Option {
1616
entry: Entry;
1717
renderOption?: RenderOption;
1818
}

0 commit comments

Comments
 (0)