leanweb 1.3.1 → 1.3.4
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/commands/dist.js +2 -2
- package/commands/electron.js +2 -2
- package/commands/help.js +1 -1
- package/commands/init.js +1 -1
- package/commands/serve.js +1 -1
- package/leanweb.js +1 -1
- package/package.json +3 -3
- package/templates/lib/lw-element.js +8 -5
- package/templates/lib/lw-expr-parser.js +40 -3
package/commands/dist.js
CHANGED
|
@@ -17,8 +17,8 @@ if (args.length >= 3) {
|
|
|
17
17
|
(async () => {
|
|
18
18
|
const project = require(`${process.cwd()}/${utils.dirs.src}/leanweb.json`);
|
|
19
19
|
|
|
20
|
-
await utils.exec(`npx
|
|
21
|
-
await utils.exec(`npx
|
|
20
|
+
await utils.exec(`npx leanweb clean`);
|
|
21
|
+
await utils.exec(`npx leanweb build ${env}`);
|
|
22
22
|
|
|
23
23
|
const webpackConfig = utils.getWebPackConfig(utils.dirs.dist, project);
|
|
24
24
|
|
package/commands/electron.js
CHANGED
|
@@ -31,8 +31,8 @@ const require = createRequire(import.meta.url);
|
|
|
31
31
|
fs.writeFileSync(leanwebJSONPath, JSON.stringify(project, null, 2));
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
await utils.exec(`npx
|
|
35
|
-
await utils.exec(`npx
|
|
34
|
+
await utils.exec(`npx leanweb clean`);
|
|
35
|
+
await utils.exec(`npx leanweb build ${env}`);
|
|
36
36
|
|
|
37
37
|
fse.copySync(`./${utils.dirs.build}/electron.js`, `./${utils.dirs.electron}/electron.js`);
|
|
38
38
|
fse.copySync(`./${utils.dirs.build}/index.html`, `./${utils.dirs.electron}/index.html`);
|
package/commands/help.js
CHANGED
|
@@ -2,7 +2,7 @@ import * as utils from './utils.js';
|
|
|
2
2
|
|
|
3
3
|
(async () => {
|
|
4
4
|
if (process.argv.length < 3) {
|
|
5
|
-
utils.exec('npx
|
|
5
|
+
utils.exec('npx leanweb version');
|
|
6
6
|
console.log('Usage: lw target parameters');
|
|
7
7
|
console.log('Targets:\n');
|
|
8
8
|
Object.keys(utils.targets).forEach(t => {
|
package/commands/init.js
CHANGED
|
@@ -66,7 +66,7 @@ const require = createRequire(import.meta.url);
|
|
|
66
66
|
|
|
67
67
|
utils.exec(`npm i -D @babel/runtime --loglevel=error`);
|
|
68
68
|
|
|
69
|
-
utils.exec(`npx
|
|
69
|
+
utils.exec(`npx leanweb generate root`);
|
|
70
70
|
|
|
71
71
|
fse.copySync(`${__dirname}/../templates/lib`, `./${utils.dirs.src}/lib/`);
|
|
72
72
|
|
package/commands/serve.js
CHANGED
|
@@ -24,7 +24,7 @@ const noopen = process.env.noopen || false;
|
|
|
24
24
|
const build = async (eventType, filename) => {
|
|
25
25
|
// console.log(eventType + ': ', filename);
|
|
26
26
|
try {
|
|
27
|
-
await utils.exec(`npx
|
|
27
|
+
await utils.exec(`npx leanweb build ${env}`);
|
|
28
28
|
fse.copySync(`./${utils.dirs.build}/index.html`, `./${utils.dirs.serve}/index.html`);
|
|
29
29
|
fse.copySync(`./${utils.dirs.build}/${project.name}.css`, `./${utils.dirs.serve}/${project.name}.css`);
|
|
30
30
|
fse.copySync(`./${utils.dirs.build}/favicon.svg`, `./${utils.dirs.serve}/favicon.svg`);
|
package/leanweb.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leanweb",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.4",
|
|
4
4
|
"description": "Builds framework agnostic web components.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"leanweb": "leanweb.js",
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"fs-extra": "^10.1.0",
|
|
31
31
|
"globby": "^13.1.2",
|
|
32
32
|
"html-minifier": "^4.0.0",
|
|
33
|
-
"isomorphic-git": "^1.19.
|
|
33
|
+
"isomorphic-git": "^1.19.2",
|
|
34
34
|
"json5-loader": "^4.0.1",
|
|
35
35
|
"node-watch": "^0.7.3",
|
|
36
36
|
"parse5": "^7.0.0",
|
|
37
37
|
"raw-loader": "^4.0.2",
|
|
38
|
-
"sass": "^1.54.
|
|
38
|
+
"sass": "^1.54.5",
|
|
39
39
|
"sass-loader": "^13.0.2",
|
|
40
40
|
"semver": "^7.3.7",
|
|
41
41
|
"webpack": "^5.74.0",
|
|
@@ -200,6 +200,8 @@ export default class LWElement extends HTMLElement {
|
|
|
200
200
|
});
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
+
// properties:
|
|
204
|
+
// lw_input_bound: boolean
|
|
203
205
|
_bindInputs(inputNode) {
|
|
204
206
|
if (inputNode['lw_input_bound']) {
|
|
205
207
|
return;
|
|
@@ -237,14 +239,15 @@ export default class LWElement extends HTMLElement {
|
|
|
237
239
|
const context = this._getNodeContext(eventNode);
|
|
238
240
|
const eventContext = { '$event': event, '$node': eventNode };
|
|
239
241
|
const parsed = parser.evaluate(interpolation.ast, [eventContext, ...context], interpolation.loc);
|
|
240
|
-
|
|
241
|
-
const promises = parsed.filter(p => typeof p?.then === 'function');
|
|
242
|
+
const promises = parsed.filter(p => typeof p?.then === 'function' && typeof p?.finally === 'function');
|
|
242
243
|
if (parsed.length > promises.length) {
|
|
243
244
|
me.update();
|
|
244
245
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
promises.forEach(p => {
|
|
247
|
+
p?.finally(() => {
|
|
248
|
+
me.update();
|
|
249
|
+
});
|
|
250
|
+
});
|
|
248
251
|
}).bind(me));
|
|
249
252
|
});
|
|
250
253
|
}
|
|
@@ -24,6 +24,25 @@ const binaryOperations = {
|
|
|
24
24
|
// '|>': (a, b) => a |> b,
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
const assignmentOperations = {
|
|
28
|
+
'=': (c, a, b) => { c[a] = b; },
|
|
29
|
+
'+=': (c, a, b) => { c[a] += b; },
|
|
30
|
+
'-=': (c, a, b) => { c[a] -= b; },
|
|
31
|
+
'*=': (c, a, b) => { c[a] *= b; },
|
|
32
|
+
'/=': (c, a, b) => { c[a] /= b; },
|
|
33
|
+
'%=': (c, a, b) => { c[a] %= b; },
|
|
34
|
+
'**=': (c, a, b) => { c[a] **= b; },
|
|
35
|
+
'&&=': (c, a, b) => { c[a] &&= b; },
|
|
36
|
+
'??=': (c, a, b) => { c[a] ??= b; },
|
|
37
|
+
'||=': (c, a, b) => { c[a] ||= b; },
|
|
38
|
+
'>>=': (c, a, b) => { c[a] >>= b; },
|
|
39
|
+
'>>>=': (c, a, b) => { c[a] >>>= b; },
|
|
40
|
+
'<<=': (c, a, b) => { c[a] <<= b; },
|
|
41
|
+
'&=': (c, a, b) => { c[a] &= b; },
|
|
42
|
+
'|=': (c, a, b) => { c[a] |= b; },
|
|
43
|
+
'^=': (c, a, b) => { c[a] ^= b; },
|
|
44
|
+
};
|
|
45
|
+
|
|
27
46
|
const logicalOperators = {
|
|
28
47
|
'||': (a, b) => a || b,
|
|
29
48
|
'&&': (a, b) => a && b,
|
|
@@ -43,9 +62,9 @@ const unaryOperators = {
|
|
|
43
62
|
|
|
44
63
|
const updateOperators = (operator, prefix) => {
|
|
45
64
|
if (operator === '++') {
|
|
46
|
-
return
|
|
65
|
+
return (c, a) => prefix ? ++c[a] : c[a]++;
|
|
47
66
|
} else if (operator === '--') {
|
|
48
|
-
return
|
|
67
|
+
return (c, a) => prefix ? --c[a] : c[a]--;
|
|
49
68
|
}
|
|
50
69
|
};
|
|
51
70
|
|
|
@@ -75,9 +94,16 @@ const nodeHandlers = {
|
|
|
75
94
|
|
|
76
95
|
'ExpressionStatement': (node, context) => evalNode(node.expression, context),
|
|
77
96
|
'BinaryExpression': (node, context) => binaryOperations[node.operator](evalNode(node.left, context), evalNode(node.right, context)),
|
|
97
|
+
'AssignmentExpression': (node, context) => {
|
|
98
|
+
const immediateCtx = immediateContext(node.left, context);
|
|
99
|
+
assignmentOperations[node.operator](immediateCtx, node.left.name, evalNode(node.right, context));
|
|
100
|
+
},
|
|
78
101
|
'LogicalExpression': (node, context) => logicalOperators[node.operator](evalNode(node.left, context), evalNode(node.right, context)),
|
|
79
102
|
'UnaryExpression': (node, context) => unaryOperators[node.operator](evalNode(node.argument, context)),
|
|
80
|
-
'UpdateExpression': (node, context) =>
|
|
103
|
+
'UpdateExpression': (node, context) => {
|
|
104
|
+
const immediateCtx = immediateContext(node.argument, context);
|
|
105
|
+
updateOperators(node.operator, node.prefix)(immediateCtx, node.argument.name, evalNode(node.argument, context));
|
|
106
|
+
},
|
|
81
107
|
'ConditionalExpression': (node, context) => {
|
|
82
108
|
const test = evalNode(node.test, context);
|
|
83
109
|
const consequent = evalNode(node.consequent, context);
|
|
@@ -144,6 +170,17 @@ const nodeHandlers = {
|
|
|
144
170
|
'DirectiveLiteral': (node, context) => node.value,
|
|
145
171
|
};
|
|
146
172
|
|
|
173
|
+
const immediateContext = (node, context) => {
|
|
174
|
+
if (Array.isArray(context)) {
|
|
175
|
+
if (context.length === 0) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
return context.find(contextObj => node.name in contextObj) ?? context[0];
|
|
179
|
+
} else if (typeof context === 'object') {
|
|
180
|
+
return context;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
147
184
|
const evalNode = (node, context) => nodeHandlers[node.type](node, context);
|
|
148
185
|
|
|
149
186
|
const evaluate = (ast, context = {}, loc = {}) => {
|