@saykit/transform-js 0.10.0 → 0.11.0

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/README.md CHANGED
@@ -18,7 +18,7 @@ pnpm add -D @saykit/transform-js
18
18
  import js from '@saykit/transform-js';
19
19
 
20
20
  // inside a bucket:
21
- transformer: js();
21
+ transformer: js(),
22
22
  ```
23
23
 
24
24
  For JSX/TSX, combine with [`@saykit/transform-jsx`](https://github.com/k0d13/saykit/tree/main/packages/transform-jsx):
@@ -28,7 +28,7 @@ import js from '@saykit/transform-js';
28
28
  import jsx from '@saykit/transform-jsx';
29
29
 
30
30
  // inside a bucket:
31
- transformer: [js(), jsx()];
31
+ transformer: [js(), jsx()],
32
32
  ```
33
33
 
34
34
  ## Documentation
@@ -1,6 +1,19 @@
1
1
  import { CompositeMessage } from "@saykit/config/features/messages";
2
2
  import * as t from "@babel/types";
3
3
  //#region src/generator.d.ts
4
+ /**
5
+ * Whether a message is one formatted value and nothing else: `say.date(x)` on
6
+ * its own rather than inside a sentence. The style and the locale already
7
+ * decide what it renders as, so there is nothing in it for a translator to
8
+ * change: it is never extracted, and the call carries the message itself
9
+ * rather than an id to look one up by.
10
+ */
11
+ declare function isLoneArgument(message: CompositeMessage): boolean;
12
+ /**
13
+ * The property a call looks its message up by: an id into the catalogue, or
14
+ * the ICU message itself when nothing was extracted.
15
+ */
16
+ declare function generateDescriptorProperty(message: CompositeMessage): t.ObjectProperty;
4
17
  declare function generateSayCallExpression(message: CompositeMessage): t.CallExpression;
5
18
  //#endregion
6
- export { generateSayCallExpression };
19
+ export { generateDescriptorProperty, generateSayCallExpression, isLoneArgument };
@@ -1,10 +1,18 @@
1
1
  import { ArgumentMessage, ChoiceMessage, CompositeMessage, ElementMessage } from "@saykit/config/features/messages";
2
2
  import * as t from "@babel/types";
3
3
  //#region src/generator.ts
4
- function generateSayCallExpression(message) {
4
+ function isLoneArgument(message) {
5
+ const [child] = message.children;
6
+ return message.children.length === 1 && child instanceof ArgumentMessage && !!child.format;
7
+ }
8
+ function generateDescriptorProperty(message) {
9
+ if (isLoneArgument(message)) return t.objectProperty(t.identifier("message"), t.stringLiteral(message.toICUString()));
5
10
  const id = message.descriptor.id ?? message.toHashString();
11
+ return t.objectProperty(t.identifier("id"), t.stringLiteral(id));
12
+ }
13
+ function generateSayCallExpression(message) {
6
14
  const children = generateChildExpressions(message.children);
7
- const properties = t.objectExpression([t.objectProperty(t.identifier("id"), t.stringLiteral(id)), ...[...new Map(children).entries()].map(([ident, expr]) => t.objectProperty(t.identifier(`_${ident}`), expr))]);
15
+ const properties = t.objectExpression([generateDescriptorProperty(message), ...[...new Map(children).entries()].map(([ident, expr]) => t.objectProperty(t.identifier(`_${ident}`), expr))]);
8
16
  return t.callExpression(t.memberExpression(message.accessor, t.identifier("call")), [properties]);
9
17
  }
10
18
  function generateChildExpressions(messages) {
@@ -23,4 +31,4 @@ function generateChildExpressions(messages) {
23
31
  }, []);
24
32
  }
25
33
  //#endregion
26
- export { generateSayCallExpression };
34
+ export { generateDescriptorProperty, generateSayCallExpression, isLoneArgument };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { generateSayCallExpression } from "./generator.mjs";
1
+ import { generateSayCallExpression, isLoneArgument } from "./generator.mjs";
2
2
  import { collectLeadingComments, isEquivalentPlaceholder, parseExpression } from "./parser.mjs";
3
3
  import { generate } from "@babel/generator";
4
4
  import * as parser from "@babel/parser";
@@ -49,7 +49,7 @@ function createJsTransformer() {
49
49
  path.skip();
50
50
  }
51
51
  } });
52
- return messages.map((message) => ({
52
+ return messages.filter((message) => !isLoneArgument(message)).map((message) => ({
53
53
  message: message.toICUString(),
54
54
  translation: void 0,
55
55
  id: message.descriptor.id,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saykit/transform-js",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "JavaScript and TypeScript transformer for SayKit",
5
5
  "keywords": [
6
6
  "i18n",
@@ -47,7 +47,7 @@
47
47
  "@babel/parser": "^7.29.7",
48
48
  "@babel/traverse": "^7.29.7",
49
49
  "@babel/types": "^7.29.7",
50
- "@saykit/config": "^0.10.0"
50
+ "@saykit/config": "^0.11.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@babel/core": "^7.29.7",