@peter.naydenov/morph 3.3.0 → 3.3.1
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/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/package.json +1 -1
- 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
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default actionData;
|
|
2
|
+
declare function actionData({ 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,10 @@
|
|
|
1
|
+
export default actionExtendedRender;
|
|
2
|
+
declare function actionExtendedRender({ 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,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,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[];
|
package/dist/methods/render.d.ts
CHANGED
|
@@ -9,6 +9,6 @@ export default render;
|
|
|
9
9
|
* @param {object} dependencies - injected dependencies.
|
|
10
10
|
* @param {...any} args - Additional arguments.
|
|
11
11
|
*
|
|
12
|
-
* @returns {any} The result of the rendering process.
|
|
12
|
+
* @returns {any} The result of the rendering process, or an error string if the helper is not available.
|
|
13
13
|
*/
|
|
14
14
|
declare function render(theData: any, name: string, helpers: object, original: any, dependencies: object, ...args: any[]): any;
|
package/package.json
CHANGED
|
@@ -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
|