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 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 lw clean`);
21
- await utils.exec(`npx lw build ${env}`);
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
 
@@ -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 lw clean`);
35
- await utils.exec(`npx lw build ${env}`);
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 lw version');
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 lw generate root`);
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 lw build ${env}`);
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
@@ -17,7 +17,7 @@ const __dirname = path.dirname(__filename);
17
17
  const args = process.argv;
18
18
 
19
19
  if (args.length < 3) {
20
- utils.exec('npx lw help');
20
+ utils.exec('npx leanweb help');
21
21
  return;
22
22
  }
23
23
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leanweb",
3
- "version": "1.3.1",
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.1",
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.4",
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
- if (promises.length > 0) {
246
- Promise.allSettled(promises).then(_ => me.update());
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 prefix ? a => ++a : a => a++;
65
+ return (c, a) => prefix ? ++c[a] : c[a]++;
47
66
  } else if (operator === '--') {
48
- return prefix ? a => --a : a => a--;
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) => updateOperators(node.operator, node.prefix)(evalNode(node.argument, 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 = {}) => {