@peter.naydenov/morph 3.3.0 → 3.3.2
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 +6 -0
- package/build.architecture.png +0 -0
- package/dist/methods/actionData.d.ts +10 -0
- package/dist/methods/actionExtendedRender.d.ts +10 -0
- package/dist/methods/actionMix.d.ts +10 -0
- package/dist/methods/actionRender.d.ts +13 -0
- package/dist/methods/actionSave.d.ts +8 -0
- package/dist/methods/executeActions.d.ts +11 -0
- package/dist/methods/processCommands.d.ts +46 -0
- package/dist/methods/processPlaceholders.d.ts +27 -0
- package/dist/methods/render.d.ts +1 -1
- package/dist/morph.cjs +1 -1
- package/dist/morph.esm.mjs +1 -1
- package/dist/morph.umd.js +1 -1
- package/dist/src/main.d.ts +100 -0
- package/dist/src/methods/_actionSupply.d.ts +18 -0
- package/dist/src/methods/_chopTemplates.d.ts +22 -0
- package/dist/src/methods/_defineData.d.ts +25 -0
- package/dist/src/methods/_defineType.d.ts +15 -0
- package/dist/src/methods/_readTemplate.d.ts +24 -0
- package/dist/src/methods/_renderHolder.d.ts +17 -0
- package/dist/src/methods/_setupActions.d.ts +19 -0
- package/dist/src/methods/actionData.d.ts +10 -0
- package/dist/src/methods/actionExtendedRender.d.ts +10 -0
- package/dist/src/methods/actionMix.d.ts +10 -0
- package/dist/src/methods/actionRender.d.ts +13 -0
- package/dist/src/methods/actionSave.d.ts +8 -0
- package/dist/src/methods/build.d.ts +61 -0
- package/dist/src/methods/executeActions.d.ts +11 -0
- package/dist/src/methods/processCommands.d.ts +46 -0
- package/dist/src/methods/processPlaceholders.d.ts +27 -0
- package/dist/src/methods/render.d.ts +14 -0
- package/dist/src/methods/settings.d.ts +7 -0
- package/package.json +8 -8
- package/src/methods/actionData.js +30 -0
- package/src/methods/actionExtendedRender.js +28 -0
- package/src/methods/actionMix.js +66 -0
- package/src/methods/actionRender.js +86 -0
- package/src/methods/actionSave.js +9 -0
- package/src/methods/build.js +81 -444
- package/src/methods/executeActions.js +65 -0
- package/src/methods/processCommands.js +97 -0
- package/src/methods/processPlaceholders.js +155 -0
- package/src/methods/render.js +1 -1
- package/tsconfig.json +2 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default actionMix;
|
|
2
|
+
declare function actionMix({ name }: {
|
|
3
|
+
name: any;
|
|
4
|
+
}, levelData: any, { helpers, extendArguments, nestedData, level, useHelper }: {
|
|
5
|
+
helpers: any;
|
|
6
|
+
extendArguments: any;
|
|
7
|
+
nestedData: any;
|
|
8
|
+
level: any;
|
|
9
|
+
useHelper: any;
|
|
10
|
+
}): void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default actionRender;
|
|
2
|
+
declare function actionRender({ name }: {
|
|
3
|
+
name: any;
|
|
4
|
+
}, levelData: any, { helpers, original, dependencies, useHelper, extendArguments, nestedData, level, iData }: {
|
|
5
|
+
helpers: any;
|
|
6
|
+
original: any;
|
|
7
|
+
dependencies: any;
|
|
8
|
+
useHelper: any;
|
|
9
|
+
extendArguments: any;
|
|
10
|
+
nestedData: any;
|
|
11
|
+
level: any;
|
|
12
|
+
iData: any;
|
|
13
|
+
}): void;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export default build;
|
|
2
|
+
export type UseHelperFn = (name: string, data?: any) => any;
|
|
3
|
+
export type HelperFn = (args: {
|
|
4
|
+
data: any;
|
|
5
|
+
dependencies: object;
|
|
6
|
+
full?: any;
|
|
7
|
+
useHelper?: UseHelperFn;
|
|
8
|
+
memory?: object;
|
|
9
|
+
}) => any;
|
|
10
|
+
export type Template = {
|
|
11
|
+
/**
|
|
12
|
+
* - Data to be rendered;
|
|
13
|
+
*/
|
|
14
|
+
template: string;
|
|
15
|
+
/**
|
|
16
|
+
* - Optional. Object with helper functions or simple templates for this template;
|
|
17
|
+
*/
|
|
18
|
+
helpers?: {
|
|
19
|
+
[x: string]: string | HelperFn;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* - Optional. Example for data to be rendered with;
|
|
23
|
+
*/
|
|
24
|
+
handshake?: object;
|
|
25
|
+
};
|
|
26
|
+
export type tupleResult = any[];
|
|
27
|
+
/**
|
|
28
|
+
* @callback UseHelperFn
|
|
29
|
+
* @param {string} name - Name of the helper to call.
|
|
30
|
+
* @param {any} [data] - Optional data override.
|
|
31
|
+
* @returns {any} Result of the helper call.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* @callback HelperFn
|
|
35
|
+
* @param {object} args
|
|
36
|
+
* @param {any} args.data - The data context.
|
|
37
|
+
* @param {object} args.dependencies - Injected dependencies.
|
|
38
|
+
* @param {any} [args.full] - Full data context.
|
|
39
|
+
* @param {UseHelperFn} [args.useHelper] - Function to call other helpers.
|
|
40
|
+
* @param {object} [args.memory] - internal memory state.
|
|
41
|
+
* @returns {any} Rendered output.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* @typedef {Object} Template
|
|
45
|
+
* @property {string} template - Data to be rendered;
|
|
46
|
+
* @property {Object.<string, HelperFn|string>} [helpers] - Optional. Object with helper functions or simple templates for this template;
|
|
47
|
+
* @property {object} [handshake] - Optional. Example for data to be rendered with;
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* @typedef {Array} tupleResult
|
|
51
|
+
* @property {boolean} 0 - Indicates success (true) or failure (false).
|
|
52
|
+
* @property {function} 1 - The rendering function or an error function.
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @param {Template} tpl - template definition;
|
|
57
|
+
* @param {boolean} [extra] - Optional. How to receive the answer - false:as a string(answer) or true: as tuple[success, answer];
|
|
58
|
+
* @param {object} [buildDependencies] - Optional. External dependencies injected;
|
|
59
|
+
* @returns {function|tupleResult} - rendering function
|
|
60
|
+
*/
|
|
61
|
+
declare function build(tpl: Template, extra?: boolean, buildDependencies?: object): Function | tupleResult;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default executeActions;
|
|
2
|
+
declare function executeActions({ nestedData, actSetup, helpers, original, dependencies, memory, dElement, createUseHelper }: {
|
|
3
|
+
nestedData: any;
|
|
4
|
+
actSetup: any;
|
|
5
|
+
helpers: any;
|
|
6
|
+
original: any;
|
|
7
|
+
dependencies: any;
|
|
8
|
+
memory: any;
|
|
9
|
+
dElement: any;
|
|
10
|
+
createUseHelper: any;
|
|
11
|
+
}): any;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles debug commands for template inspection.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} d - Debug instruction
|
|
5
|
+
* @param {object} context - Context object
|
|
6
|
+
* @param {object} context.handshake - Example data
|
|
7
|
+
* @param {object} context.helpers - Helper functions
|
|
8
|
+
* @param {array} context.placeholders - Placeholder definitions
|
|
9
|
+
* @param {array} context.cuts - Chopped template parts
|
|
10
|
+
* @returns {any} Debug result or error message
|
|
11
|
+
*/
|
|
12
|
+
export function handleDebug(d: string, { handshake, helpers, placeholders, cuts }: {
|
|
13
|
+
handshake: object;
|
|
14
|
+
helpers: object;
|
|
15
|
+
placeholders: any[];
|
|
16
|
+
cuts: any[];
|
|
17
|
+
}): any;
|
|
18
|
+
/**
|
|
19
|
+
* Handles the 'set' command to modify template properties.
|
|
20
|
+
*
|
|
21
|
+
* @param {object} d - Modification data
|
|
22
|
+
* @param {object} context - Context object
|
|
23
|
+
* @param {object} context.helpers - Current helper functions
|
|
24
|
+
* @param {object} context.handshake - Current handshake data
|
|
25
|
+
* @param {array} context.placeholders - Current placeholders
|
|
26
|
+
* @param {array} context.chop - Current chopped template
|
|
27
|
+
* @param {function} context.build - Build function
|
|
28
|
+
* @param {object} context.buildDependencies - Build dependencies
|
|
29
|
+
* @returns {function} Modified template function
|
|
30
|
+
*/
|
|
31
|
+
export function handleSet(d: object, { helpers, handshake, placeholders, chop, build, buildDependencies }: {
|
|
32
|
+
helpers: object;
|
|
33
|
+
handshake: object;
|
|
34
|
+
placeholders: any[];
|
|
35
|
+
chop: any[];
|
|
36
|
+
build: Function;
|
|
37
|
+
buildDependencies: object;
|
|
38
|
+
}): Function;
|
|
39
|
+
/**
|
|
40
|
+
* Handles snippets command to select specific placeholders.
|
|
41
|
+
*
|
|
42
|
+
* @param {string} command - Snippets command
|
|
43
|
+
* @param {object} snippets - Snippets mapping
|
|
44
|
+
* @returns {array|null} Selected placeholders or null
|
|
45
|
+
*/
|
|
46
|
+
export function handleSnippets(command: string, snippets: object): any[] | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default processPlaceholders;
|
|
2
|
+
/**
|
|
3
|
+
* Processes placeholders in the template with provided data and context.
|
|
4
|
+
*
|
|
5
|
+
* @param {object} params - Parameters object
|
|
6
|
+
* @param {array} params.d - Data array to process
|
|
7
|
+
* @param {array} params.chop - Chopped template parts
|
|
8
|
+
* @param {array} params.placeholders - Placeholder definitions
|
|
9
|
+
* @param {any} params.original - Original data context
|
|
10
|
+
* @param {object} params.helpers - Helper functions
|
|
11
|
+
* @param {object} params.dependencies - Injected dependencies
|
|
12
|
+
* @param {object} params.memory - Internal memory state
|
|
13
|
+
* @param {array} params.args - Additional arguments
|
|
14
|
+
* @param {boolean} params.onlySnippets - Whether to process only snippets
|
|
15
|
+
* @returns {array} Processed template parts
|
|
16
|
+
*/
|
|
17
|
+
declare function processPlaceholders({ d, chop, placeholders, original, helpers, dependencies, memory, args, onlySnippets }: {
|
|
18
|
+
d: any[];
|
|
19
|
+
chop: any[];
|
|
20
|
+
placeholders: any[];
|
|
21
|
+
original: any;
|
|
22
|
+
helpers: object;
|
|
23
|
+
dependencies: object;
|
|
24
|
+
memory: object;
|
|
25
|
+
args: any[];
|
|
26
|
+
onlySnippets: boolean;
|
|
27
|
+
}): any[];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default render;
|
|
2
|
+
/**
|
|
3
|
+
* Renders a helper or template with the provided data and context.
|
|
4
|
+
*
|
|
5
|
+
* @param {any} theData - The data to process.
|
|
6
|
+
* @param {string} name - The name of the helper or template to render.
|
|
7
|
+
* @param {object} helpers - Dictionary of available helpers.
|
|
8
|
+
* @param {any} original - The full original data context.
|
|
9
|
+
* @param {object} dependencies - injected dependencies.
|
|
10
|
+
* @param {...any} args - Additional arguments.
|
|
11
|
+
*
|
|
12
|
+
* @returns {any} The result of the rendering process, or an error string if the helper is not available.
|
|
13
|
+
*/
|
|
14
|
+
declare function render(theData: any, name: string, helpers: object, original: any, dependencies: object, ...args: any[]): any;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peter.naydenov/morph",
|
|
3
3
|
"description": "Template engine",
|
|
4
|
-
"version": "3.3.
|
|
4
|
+
"version": "3.3.2",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Peter Naydenov",
|
|
7
7
|
"main": "./src/main.js",
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"@peter.naydenov/walk": "^5.0.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@rollup/plugin-commonjs": "^29.0.
|
|
31
|
+
"@rollup/plugin-commonjs": "^29.0.2",
|
|
32
32
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
33
|
-
"@rollup/plugin-terser": "^0.
|
|
34
|
-
"c8": "^
|
|
35
|
-
"chai": "6.2.
|
|
33
|
+
"@rollup/plugin-terser": "^1.0.0",
|
|
34
|
+
"c8": "^11.0.0",
|
|
35
|
+
"chai": "6.2.2",
|
|
36
36
|
"esm": "^3.2.25",
|
|
37
|
-
"mocha": "
|
|
38
|
-
"rollup": "^4.
|
|
39
|
-
"typescript": "^
|
|
37
|
+
"mocha": "12.0.0-beta-9",
|
|
38
|
+
"rollup": "^4.60.0",
|
|
39
|
+
"typescript": "^6.0.2"
|
|
40
40
|
},
|
|
41
41
|
"repository": {
|
|
42
42
|
"type": "git",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import _defineDataType from "./_defineType.js"
|
|
2
|
+
|
|
3
|
+
function actionData({ name }, levelData, { helpers, extendArguments, nestedData, level, useHelper }) {
|
|
4
|
+
const theData = levelData
|
|
5
|
+
let dataType = _defineDataType(theData)
|
|
6
|
+
|
|
7
|
+
switch (dataType) {
|
|
8
|
+
case 'array':
|
|
9
|
+
theData.forEach((d, i) => {
|
|
10
|
+
const localUseHelper = useHelper(d);
|
|
11
|
+
theData[i] = (d instanceof Function) ? helpers[name]({ data: d(), ...extendArguments, full: d, useHelper: localUseHelper }) : helpers[name]({ data: d, ...extendArguments, full: d, useHelper: localUseHelper })
|
|
12
|
+
})
|
|
13
|
+
break
|
|
14
|
+
case 'object':
|
|
15
|
+
const uhObj = useHelper(theData);
|
|
16
|
+
nestedData[level] = [helpers[name]({ data: theData, ...extendArguments, full: theData, useHelper: uhObj })]
|
|
17
|
+
break
|
|
18
|
+
case 'function':
|
|
19
|
+
const fnData = theData();
|
|
20
|
+
const uhFn = useHelper(fnData);
|
|
21
|
+
nestedData[level] = [helpers[name]({ data: fnData, ...extendArguments, full: theData, useHelper: uhFn })]
|
|
22
|
+
break
|
|
23
|
+
case 'primitive':
|
|
24
|
+
const uhPrim = useHelper(theData);
|
|
25
|
+
nestedData[level] = helpers[name]({ data: theData, ...extendArguments, full: theData, useHelper: uhPrim })
|
|
26
|
+
break
|
|
27
|
+
} // switch dataType
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default actionData
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import _defineDataType from "./_defineType.js"
|
|
2
|
+
|
|
3
|
+
function actionExtendedRender({ name }, levelData, { helpers, extendArguments, nestedData, level, useHelper }) {
|
|
4
|
+
// levelData is unused?
|
|
5
|
+
// build.js used `nestedData[0]`.
|
|
6
|
+
// "nestedData[0].forEach((d, i) => {"
|
|
7
|
+
// "const uh = createUseHelper(d);"
|
|
8
|
+
// "nestedData[0][i] = helpers[name]({ data: d, ...extendArguments, full: d, useHelper: uh })"
|
|
9
|
+
|
|
10
|
+
// This seems to assume extendedRender operates on ROOT data (nestedData[0])?
|
|
11
|
+
// Yes, `nestedData[0]` is typically the initial data list.
|
|
12
|
+
|
|
13
|
+
const isValid = typeof helpers[name] === 'function';
|
|
14
|
+
|
|
15
|
+
if (isValid) {
|
|
16
|
+
if (nestedData[0] && Array.isArray(nestedData[0])) {
|
|
17
|
+
nestedData[0].forEach((d, i) => {
|
|
18
|
+
const uh = useHelper(d);
|
|
19
|
+
nestedData[0][i] = helpers[name]({ data: d, ...extendArguments, full: d, useHelper: uh })
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
// TODO: Error...
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default actionExtendedRender
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import _defineDataType from "./_defineType.js"
|
|
2
|
+
import walk from '@peter.naydenov/walk'
|
|
3
|
+
|
|
4
|
+
function actionMix({ name }, levelData, { helpers, extendArguments, nestedData, level, useHelper }) {
|
|
5
|
+
const theData = levelData
|
|
6
|
+
let dataType = _defineDataType(theData)
|
|
7
|
+
|
|
8
|
+
if (name === '') { // when is anonymous mixing action
|
|
9
|
+
switch (dataType) {
|
|
10
|
+
case 'object':
|
|
11
|
+
let kTest = Object.keys(theData).find(k => k.includes('/')); // Check if keys are breadcrumbs
|
|
12
|
+
if (kTest) Object.entries(theData).forEach(([k, v]) => nestedData[level][k] = v['text'])
|
|
13
|
+
else nestedData[level] = theData['text']
|
|
14
|
+
for (let i = level - 1; i >= 0; i--) {
|
|
15
|
+
nestedData[i] = walk({ data: nestedData[i], objectCallback: check })
|
|
16
|
+
}
|
|
17
|
+
function check({ value, breadcrumbs }) {
|
|
18
|
+
if (nestedData[level][breadcrumbs]) return nestedData[level][breadcrumbs]
|
|
19
|
+
return value
|
|
20
|
+
} // check func.
|
|
21
|
+
break
|
|
22
|
+
case 'array':
|
|
23
|
+
theData.forEach((x, i) => {
|
|
24
|
+
if (i > 0) {
|
|
25
|
+
let xType = _defineDataType(x);
|
|
26
|
+
if (x == null) return
|
|
27
|
+
if (xType === 'object') theData[0] += `${x.text}`
|
|
28
|
+
else theData[0] += `${x}`
|
|
29
|
+
theData.toSpliced(i, 1)
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
let xxType = _defineDataType(x);
|
|
33
|
+
theData[0] = ''
|
|
34
|
+
if (xxType === null) return
|
|
35
|
+
else if (xxType === 'object') theData[0] = `${x.text}`
|
|
36
|
+
else theData[0] = `${x}`
|
|
37
|
+
}
|
|
38
|
+
}) // forEach theData
|
|
39
|
+
theData.length = 1
|
|
40
|
+
break
|
|
41
|
+
} // switch dataType
|
|
42
|
+
} // if name === ''
|
|
43
|
+
else {
|
|
44
|
+
const dType = _defineDataType ( theData ); // 'd' in build.js was 'd' from loop, here 'theData'
|
|
45
|
+
const localUseHelper = useHelper ( theData );
|
|
46
|
+
let val = helpers[name]({ data: theData, ...extendArguments, full: theData, useHelper: localUseHelper }); // 'full: d' in build.js, here 'theData'
|
|
47
|
+
let valType = _defineDataType(val);
|
|
48
|
+
|
|
49
|
+
theData.forEach((x, i) => theData.splice(i, 1))
|
|
50
|
+
theData.length = 0
|
|
51
|
+
switch (valType) {
|
|
52
|
+
case 'primitive':
|
|
53
|
+
theData[0] = val
|
|
54
|
+
break
|
|
55
|
+
case 'array':
|
|
56
|
+
theData.push(...val)
|
|
57
|
+
break
|
|
58
|
+
} // switch valType
|
|
59
|
+
}
|
|
60
|
+
} // actionMix func.
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
export default actionMix
|
|
65
|
+
|
|
66
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import _defineDataType from "./_defineType.js"
|
|
2
|
+
import render from "./render.js"
|
|
3
|
+
|
|
4
|
+
function actionRender({ name }, levelData, { helpers, original, dependencies, useHelper, extendArguments, nestedData, level, iData }) {
|
|
5
|
+
/**
|
|
6
|
+
* logic from build.js 'render' case
|
|
7
|
+
* levelData is the array we are iterating (nestedData[level] or similar)
|
|
8
|
+
* But wait, build.js iterates levelData.
|
|
9
|
+
* "levelData.forEach((theData, iData) => {"
|
|
10
|
+
* So actionRender receives a SINGLE item?
|
|
11
|
+
* No, existing logic handles 'array' dataType inside the switch.
|
|
12
|
+
* But the loop inside build.js ALREADY iterates levelData.
|
|
13
|
+
* Line 276: `levelData.forEach((theData, iData) => { ... switch(type) ... })`
|
|
14
|
+
* So 'theData' is a single item from the level.
|
|
15
|
+
* BUT 'dataType' switch inside handles 'array'?
|
|
16
|
+
* _defineDataType(theData).
|
|
17
|
+
* If 'theData' is array, it iterates it.
|
|
18
|
+
* Yes.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const theData = levelData
|
|
22
|
+
let dataType = _defineDataType(theData)
|
|
23
|
+
const isRenderFunction = typeof helpers[name] === 'function';
|
|
24
|
+
|
|
25
|
+
switch (dataType) {
|
|
26
|
+
case 'array':
|
|
27
|
+
if (isRenderFunction) {
|
|
28
|
+
theData.forEach((d, i) => {
|
|
29
|
+
if (d == null) return
|
|
30
|
+
const dType = _defineDataType(d);
|
|
31
|
+
// useHelper is specialized for 'd' ??
|
|
32
|
+
// in build.js: const useHelper = createUseHelper(d);
|
|
33
|
+
// access to 'createUseHelper' needed?
|
|
34
|
+
// Yes.
|
|
35
|
+
// So we pass 'createUseHelper' factory, not the instance?
|
|
36
|
+
// Or we pass the instance if it was already created?
|
|
37
|
+
// In build.js loop: "const useHelper = createUseHelper(d);" happens INSIDE case 'route'/'data'/'render' loops usually.
|
|
38
|
+
// But here we are inside case 'render'.
|
|
39
|
+
// So we need 'createUseHelper' passed in context.
|
|
40
|
+
|
|
41
|
+
const localUseHelper = useHelper(d)
|
|
42
|
+
const text = helpers[name]({ data: d, ...extendArguments, full: original, useHelper: localUseHelper });
|
|
43
|
+
|
|
44
|
+
if (text == null) theData[i] = null
|
|
45
|
+
if (dType === 'object') d['text'] = text
|
|
46
|
+
else theData[i] = text
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
theData.forEach((d, i) => {
|
|
51
|
+
if (d == null) return
|
|
52
|
+
const
|
|
53
|
+
dType = _defineDataType(d)
|
|
54
|
+
, text = render(d, name, helpers, original, dependencies)
|
|
55
|
+
;
|
|
56
|
+
if (text == null) theData[i] = null
|
|
57
|
+
else if (dType === 'object') d['text'] = text
|
|
58
|
+
else theData[i] = text
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
break
|
|
62
|
+
case 'function':
|
|
63
|
+
const fD = theData();
|
|
64
|
+
const useHelperFn = useHelper(fD);
|
|
65
|
+
nestedData[level] = helpers[name]({ data: fD, ...extendArguments, full: theData, useHelper: useHelperFn })
|
|
66
|
+
break
|
|
67
|
+
case 'primitive':
|
|
68
|
+
if (isRenderFunction) {
|
|
69
|
+
const uhPrim = useHelper(theData);
|
|
70
|
+
nestedData[level] = helpers[name]({ data: theData, ...extendArguments, full: theData, useHelper: uhPrim })
|
|
71
|
+
}
|
|
72
|
+
else nestedData[level] = render(theData, name, helpers, original, dependencies)
|
|
73
|
+
break
|
|
74
|
+
case 'object':
|
|
75
|
+
if (isRenderFunction) {
|
|
76
|
+
const uhO = useHelper(theData);
|
|
77
|
+
nestedData[level][iData]['text'] = helpers[name]({ data: theData, ...extendArguments, full: theData, useHelper: uhO })
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
theData['text'] = render(theData, name, helpers, original, dependencies)
|
|
81
|
+
}
|
|
82
|
+
break
|
|
83
|
+
} // switch renderDataType
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export default actionRender
|