@lionrapid/cli 0.1.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.
Files changed (130) hide show
  1. package/README.md +159 -0
  2. package/dist/adapters/android-xml.d.ts +20 -0
  3. package/dist/adapters/android-xml.d.ts.map +1 -0
  4. package/dist/adapters/android-xml.js +101 -0
  5. package/dist/adapters/android-xml.js.map +1 -0
  6. package/dist/adapters/arb.d.ts +17 -0
  7. package/dist/adapters/arb.d.ts.map +1 -0
  8. package/dist/adapters/arb.js +45 -0
  9. package/dist/adapters/arb.js.map +1 -0
  10. package/dist/adapters/content.d.ts +13 -0
  11. package/dist/adapters/content.d.ts.map +1 -0
  12. package/dist/adapters/content.js +24 -0
  13. package/dist/adapters/content.js.map +1 -0
  14. package/dist/adapters/index.d.ts +11 -0
  15. package/dist/adapters/index.d.ts.map +1 -0
  16. package/dist/adapters/index.js +34 -0
  17. package/dist/adapters/index.js.map +1 -0
  18. package/dist/adapters/ios-strings.d.ts +15 -0
  19. package/dist/adapters/ios-strings.d.ts.map +1 -0
  20. package/dist/adapters/ios-strings.js +54 -0
  21. package/dist/adapters/ios-strings.js.map +1 -0
  22. package/dist/adapters/json.d.ts +12 -0
  23. package/dist/adapters/json.d.ts.map +1 -0
  24. package/dist/adapters/json.js +31 -0
  25. package/dist/adapters/json.js.map +1 -0
  26. package/dist/adapters/nested.d.ts +9 -0
  27. package/dist/adapters/nested.d.ts.map +1 -0
  28. package/dist/adapters/nested.js +37 -0
  29. package/dist/adapters/nested.js.map +1 -0
  30. package/dist/adapters/po.d.ts +23 -0
  31. package/dist/adapters/po.d.ts.map +1 -0
  32. package/dist/adapters/po.js +197 -0
  33. package/dist/adapters/po.js.map +1 -0
  34. package/dist/adapters/types.d.ts +46 -0
  35. package/dist/adapters/types.d.ts.map +1 -0
  36. package/dist/adapters/types.js +16 -0
  37. package/dist/adapters/types.js.map +1 -0
  38. package/dist/adapters/xcstrings.d.ts +20 -0
  39. package/dist/adapters/xcstrings.d.ts.map +1 -0
  40. package/dist/adapters/xcstrings.js +77 -0
  41. package/dist/adapters/xcstrings.js.map +1 -0
  42. package/dist/adapters/xliff.d.ts +22 -0
  43. package/dist/adapters/xliff.d.ts.map +1 -0
  44. package/dist/adapters/xliff.js +83 -0
  45. package/dist/adapters/xliff.js.map +1 -0
  46. package/dist/adapters/yaml.d.ts +16 -0
  47. package/dist/adapters/yaml.d.ts.map +1 -0
  48. package/dist/adapters/yaml.js +51 -0
  49. package/dist/adapters/yaml.js.map +1 -0
  50. package/dist/api-client.d.ts +123 -0
  51. package/dist/api-client.d.ts.map +1 -0
  52. package/dist/api-client.js +236 -0
  53. package/dist/api-client.js.map +1 -0
  54. package/dist/cli.d.ts +24 -0
  55. package/dist/cli.d.ts.map +1 -0
  56. package/dist/cli.js +365 -0
  57. package/dist/cli.js.map +1 -0
  58. package/dist/commands/context.d.ts +38 -0
  59. package/dist/commands/context.d.ts.map +1 -0
  60. package/dist/commands/context.js +70 -0
  61. package/dist/commands/context.js.map +1 -0
  62. package/dist/commands/doctor.d.ts +27 -0
  63. package/dist/commands/doctor.d.ts.map +1 -0
  64. package/dist/commands/doctor.js +87 -0
  65. package/dist/commands/doctor.js.map +1 -0
  66. package/dist/commands/init.d.ts +36 -0
  67. package/dist/commands/init.d.ts.map +1 -0
  68. package/dist/commands/init.js +111 -0
  69. package/dist/commands/init.js.map +1 -0
  70. package/dist/commands/pull.d.ts +35 -0
  71. package/dist/commands/pull.d.ts.map +1 -0
  72. package/dist/commands/pull.js +123 -0
  73. package/dist/commands/pull.js.map +1 -0
  74. package/dist/commands/push.d.ts +37 -0
  75. package/dist/commands/push.d.ts.map +1 -0
  76. package/dist/commands/push.js +63 -0
  77. package/dist/commands/push.js.map +1 -0
  78. package/dist/commands/scan.d.ts +46 -0
  79. package/dist/commands/scan.d.ts.map +1 -0
  80. package/dist/commands/scan.js +68 -0
  81. package/dist/commands/scan.js.map +1 -0
  82. package/dist/commands/snapshot.d.ts +48 -0
  83. package/dist/commands/snapshot.d.ts.map +1 -0
  84. package/dist/commands/snapshot.js +52 -0
  85. package/dist/commands/snapshot.js.map +1 -0
  86. package/dist/commands/types.d.ts +38 -0
  87. package/dist/commands/types.d.ts.map +1 -0
  88. package/dist/commands/types.js +82 -0
  89. package/dist/commands/types.js.map +1 -0
  90. package/dist/commands/validate.d.ts +28 -0
  91. package/dist/commands/validate.d.ts.map +1 -0
  92. package/dist/commands/validate.js +48 -0
  93. package/dist/commands/validate.js.map +1 -0
  94. package/dist/config.d.ts +80 -0
  95. package/dist/config.d.ts.map +1 -0
  96. package/dist/config.js +279 -0
  97. package/dist/config.js.map +1 -0
  98. package/dist/exit-codes.d.ts +26 -0
  99. package/dist/exit-codes.d.ts.map +1 -0
  100. package/dist/exit-codes.js +42 -0
  101. package/dist/exit-codes.js.map +1 -0
  102. package/dist/index.d.ts +8 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +8 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/output.d.ts +29 -0
  107. package/dist/output.d.ts.map +1 -0
  108. package/dist/output.js +38 -0
  109. package/dist/output.js.map +1 -0
  110. package/dist/scan/canonical.d.ts +33 -0
  111. package/dist/scan/canonical.d.ts.map +1 -0
  112. package/dist/scan/canonical.js +57 -0
  113. package/dist/scan/canonical.js.map +1 -0
  114. package/dist/scan/discover.d.ts +13 -0
  115. package/dist/scan/discover.d.ts.map +1 -0
  116. package/dist/scan/discover.js +95 -0
  117. package/dist/scan/discover.js.map +1 -0
  118. package/dist/scan/scanner.d.ts +32 -0
  119. package/dist/scan/scanner.d.ts.map +1 -0
  120. package/dist/scan/scanner.js +137 -0
  121. package/dist/scan/scanner.js.map +1 -0
  122. package/dist/types-gen/extract.d.ts +22 -0
  123. package/dist/types-gen/extract.d.ts.map +1 -0
  124. package/dist/types-gen/extract.js +148 -0
  125. package/dist/types-gen/extract.js.map +1 -0
  126. package/dist/types-gen/generate.d.ts +10 -0
  127. package/dist/types-gen/generate.d.ts.map +1 -0
  128. package/dist/types-gen/generate.js +39 -0
  129. package/dist/types-gen/generate.js.map +1 -0
  130. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Stable process exit-code taxonomy for the CLI.
3
+ *
4
+ * Scripts and CI gate on these — keep the numbers stable. The mapping is the
5
+ * single place that turns a thrown error into an exit code, so every command's
6
+ * `catch` reports the same code for the same failure class.
7
+ *
8
+ * 0 ok — success
9
+ * 1 error — unexpected/uncategorized failure (bug, file I/O, parse)
10
+ * 2 validation — bad config, validation gaps, or a 4xx the server rejected
11
+ * 3 auth — missing/invalid credentials, or a 401/403 from the server
12
+ * 4 network — request never reached the server, or a 5xx server error
13
+ * 5 partial — some items succeeded and some failed (mixed result)
14
+ */
15
+ export declare const ExitCode: {
16
+ readonly OK: 0;
17
+ readonly ERROR: 1;
18
+ readonly VALIDATION: 2;
19
+ readonly AUTH: 3;
20
+ readonly NETWORK: 4;
21
+ readonly PARTIAL: 5;
22
+ };
23
+ export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
24
+ /** Map a thrown error to its exit code. Pure — safe to unit-test directly. */
25
+ export declare function exitCodeForError(err: unknown): ExitCode;
26
+ //# sourceMappingURL=exit-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAUvD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Stable process exit-code taxonomy for the CLI.
3
+ *
4
+ * Scripts and CI gate on these — keep the numbers stable. The mapping is the
5
+ * single place that turns a thrown error into an exit code, so every command's
6
+ * `catch` reports the same code for the same failure class.
7
+ *
8
+ * 0 ok — success
9
+ * 1 error — unexpected/uncategorized failure (bug, file I/O, parse)
10
+ * 2 validation — bad config, validation gaps, or a 4xx the server rejected
11
+ * 3 auth — missing/invalid credentials, or a 401/403 from the server
12
+ * 4 network — request never reached the server, or a 5xx server error
13
+ * 5 partial — some items succeeded and some failed (mixed result)
14
+ */
15
+ import { ConfigError, ApiKeyError } from './config.js';
16
+ import { ApiError, NetworkError } from './api-client.js';
17
+ export const ExitCode = {
18
+ OK: 0,
19
+ ERROR: 1,
20
+ VALIDATION: 2,
21
+ AUTH: 3,
22
+ NETWORK: 4,
23
+ PARTIAL: 5,
24
+ };
25
+ /** Map a thrown error to its exit code. Pure — safe to unit-test directly. */
26
+ export function exitCodeForError(err) {
27
+ if (err instanceof ApiKeyError)
28
+ return ExitCode.AUTH;
29
+ if (err instanceof ConfigError)
30
+ return ExitCode.VALIDATION;
31
+ if (err instanceof NetworkError)
32
+ return ExitCode.NETWORK;
33
+ if (err instanceof ApiError) {
34
+ if (err.isAuth)
35
+ return ExitCode.AUTH;
36
+ if (err.isServerError)
37
+ return ExitCode.NETWORK;
38
+ return ExitCode.VALIDATION; // other 4xx — the server rejected our request
39
+ }
40
+ return ExitCode.ERROR;
41
+ }
42
+ //# sourceMappingURL=exit-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,EAAE,CAAC;IACL,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;CACF,CAAC;AAIX,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,GAAG,YAAY,WAAW;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACrD,IAAI,GAAG,YAAY,WAAW;QAAE,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC3D,IAAI,GAAG,YAAY,YAAY;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;IACzD,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC;QACrC,IAAI,GAAG,CAAC,aAAa;YAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC/C,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,8CAA8C;IAC5E,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @lionrapid/cli — programmatic entry point.
3
+ *
4
+ * The CLI is primarily a binary (`lionrapid`), but the commander program is
5
+ * exported here so it can be embedded or tested programmatically.
6
+ */
7
+ export { buildProgram, readVersion } from './cli.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @lionrapid/cli — programmatic entry point.
3
+ *
4
+ * The CLI is primarily a binary (`lionrapid`), but the commander program is
5
+ * exported here so it can be embedded or tested programmatically.
6
+ */
7
+ export { buildProgram, readVersion } from './cli.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The `--json` output contract, shared by every command.
3
+ *
4
+ * Convention (matches `scan`): under `--json`, stdout carries exactly one JSON
5
+ * envelope (the machine result) and all human prose is routed to stderr; without
6
+ * `--json`, prose goes to stdout as before. Agents/CI parse stdout; humans read
7
+ * stderr. The envelope always has `ok` and `command`, so a caller can branch on
8
+ * success without format-specific parsing.
9
+ */
10
+ import { type ExitCode } from './exit-codes.js';
11
+ /** Emit a result envelope to stdout: `{ ok, command, ...data }`. */
12
+ export declare function emitJson(command: string, ok: boolean, data: object): void;
13
+ export interface ErrorEnvelope {
14
+ ok: false;
15
+ command: string;
16
+ error: {
17
+ type: string;
18
+ message: string;
19
+ status?: number;
20
+ issues?: {
21
+ path: string;
22
+ message: string;
23
+ }[];
24
+ };
25
+ exitCode: ExitCode;
26
+ }
27
+ /** Shape a thrown error into the stable JSON error envelope. */
28
+ export declare function errorEnvelope(command: string, err: unknown): ErrorEnvelope;
29
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAElE,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC9C,CAAC;IACF,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,aAAa,CAoB1E"}
package/dist/output.js ADDED
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The `--json` output contract, shared by every command.
3
+ *
4
+ * Convention (matches `scan`): under `--json`, stdout carries exactly one JSON
5
+ * envelope (the machine result) and all human prose is routed to stderr; without
6
+ * `--json`, prose goes to stdout as before. Agents/CI parse stdout; humans read
7
+ * stderr. The envelope always has `ok` and `command`, so a caller can branch on
8
+ * success without format-specific parsing.
9
+ */
10
+ import { ApiError, NetworkError } from './api-client.js';
11
+ import { ConfigError } from './config.js';
12
+ import { exitCodeForError } from './exit-codes.js';
13
+ /** Emit a result envelope to stdout: `{ ok, command, ...data }`. */
14
+ export function emitJson(command, ok, data) {
15
+ process.stdout.write(`${JSON.stringify({ ok, command, ...data }, null, 2)}\n`);
16
+ }
17
+ /** Shape a thrown error into the stable JSON error envelope. */
18
+ export function errorEnvelope(command, err) {
19
+ const type = err instanceof ApiError
20
+ ? 'ApiError'
21
+ : err instanceof NetworkError
22
+ ? 'NetworkError'
23
+ : err instanceof Error
24
+ ? err.name
25
+ : 'Error';
26
+ return {
27
+ ok: false,
28
+ command,
29
+ error: {
30
+ type,
31
+ message: err instanceof Error ? err.message : String(err),
32
+ status: err instanceof ApiError ? err.status : undefined,
33
+ issues: err instanceof ConfigError ? err.issues : undefined,
34
+ },
35
+ exitCode: exitCodeForError(err),
36
+ };
37
+ }
38
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAiB,MAAM,iBAAiB,CAAC;AAElE,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,EAAW,EAAE,IAAY;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAcD,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,GAAY;IACzD,MAAM,IAAI,GACR,GAAG,YAAY,QAAQ;QACrB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,GAAG,YAAY,YAAY;YAC3B,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,GAAG,YAAY,KAAK;gBACpB,CAAC,CAAC,GAAG,CAAC,IAAI;gBACV,CAAC,CAAC,OAAO,CAAC;IAClB,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO;QACP,KAAK,EAAE;YACL,IAAI;YACJ,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACzD,MAAM,EAAE,GAAG,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACxD,MAAM,EAAE,GAAG,YAAY,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC5D;QACD,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Turn a *discovered* source string into the canonical ContentUnit + auto_key
3
+ * that the web/edge/SDK stack produces for the SAME rendered text. This is the
4
+ * moat primitive: only if a string scanned from app source hashes to the exact
5
+ * key the web DOM-detect path produces do the two surfaces share one TM row.
6
+ *
7
+ * Two normalizations matter:
8
+ * - JSX whitespace: `<Text>\n Add to cart\n</Text>` renders as "Add to cart".
9
+ * We replicate Babel's JSXText cleaning so the key matches the rendered
10
+ * string (a multi-line literal must NOT hash to a key that exists nowhere).
11
+ * - Inline markup → indexed ContentUnit via core's MarkupParser, so
12
+ * `Read our <b>Terms</b>` hashes identically to the web stack.
13
+ * Plain text is hashed verbatim (generateAutoKey trims), matching the DOM path
14
+ * which preserves internal whitespace and only trims.
15
+ */
16
+ import { type ContentUnit } from '@lionrapid/core';
17
+ /**
18
+ * Replicate React/Babel JSXText whitespace handling: split into lines, drop
19
+ * tabs→spaces, trim leading space on non-first lines and trailing space on
20
+ * non-last lines, drop empty lines, and join surviving lines with a single
21
+ * space. Yields the string the component actually renders.
22
+ */
23
+ export declare function normalizeJsxText(raw: string): string;
24
+ export interface Canonical {
25
+ contentUnit: ContentUnit;
26
+ autoKey: string;
27
+ }
28
+ /**
29
+ * Canonicalize already-rendered text (apply `normalizeJsxText` first for JSX
30
+ * children). Inline markup goes through MarkupParser; plain text is verbatim.
31
+ */
32
+ export declare function canonicalize(text: string): Canonical;
33
+ //# sourceMappingURL=canonical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/scan/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAiC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKlF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBpD;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAKpD"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Turn a *discovered* source string into the canonical ContentUnit + auto_key
3
+ * that the web/edge/SDK stack produces for the SAME rendered text. This is the
4
+ * moat primitive: only if a string scanned from app source hashes to the exact
5
+ * key the web DOM-detect path produces do the two surfaces share one TM row.
6
+ *
7
+ * Two normalizations matter:
8
+ * - JSX whitespace: `<Text>\n Add to cart\n</Text>` renders as "Add to cart".
9
+ * We replicate Babel's JSXText cleaning so the key matches the rendered
10
+ * string (a multi-line literal must NOT hash to a key that exists nowhere).
11
+ * - Inline markup → indexed ContentUnit via core's MarkupParser, so
12
+ * `Read our <b>Terms</b>` hashes identically to the web stack.
13
+ * Plain text is hashed verbatim (generateAutoKey trims), matching the DOM path
14
+ * which preserves internal whitespace and only trims.
15
+ */
16
+ import { generateAutoKey, MarkupParser } from '@lionrapid/core';
17
+ const parser = new MarkupParser();
18
+ const HAS_TAG = /<[^>]+>/;
19
+ /**
20
+ * Replicate React/Babel JSXText whitespace handling: split into lines, drop
21
+ * tabs→spaces, trim leading space on non-first lines and trailing space on
22
+ * non-last lines, drop empty lines, and join surviving lines with a single
23
+ * space. Yields the string the component actually renders.
24
+ */
25
+ export function normalizeJsxText(raw) {
26
+ const lines = raw.split(/\r\n|\n|\r/);
27
+ let lastNonEmpty = 0;
28
+ for (let i = 0; i < lines.length; i += 1) {
29
+ if (/[^ \t]/.test(lines[i]))
30
+ lastNonEmpty = i;
31
+ }
32
+ let out = '';
33
+ for (let i = 0; i < lines.length; i += 1) {
34
+ let line = lines[i].replace(/\t/g, ' ');
35
+ if (i !== 0)
36
+ line = line.replace(/^ +/, '');
37
+ if (i !== lines.length - 1)
38
+ line = line.replace(/ +$/, '');
39
+ if (line) {
40
+ if (i !== lastNonEmpty)
41
+ line += ' ';
42
+ out += line;
43
+ }
44
+ }
45
+ return out;
46
+ }
47
+ /**
48
+ * Canonicalize already-rendered text (apply `normalizeJsxText` first for JSX
49
+ * children). Inline markup goes through MarkupParser; plain text is verbatim.
50
+ */
51
+ export function canonicalize(text) {
52
+ const contentUnit = HAS_TAG.test(text)
53
+ ? parser.parse(text)
54
+ : { text, styles: {} };
55
+ return { contentUnit, autoKey: generateAutoKey(contentUnit.text) };
56
+ }
57
+ //# sourceMappingURL=canonical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/scan/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAElF,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AAClC,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAAE,YAAY,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,YAAY;gBAAE,IAAI,IAAI,GAAG,CAAC;YACpC,GAAG,IAAI,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,WAAW,GAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACzB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * File discovery for the scanner: a recursive walk + a small glob→regex
3
+ * (supports `**`, `*`, `?`, and single-level `{a,b}` braces) honoring
4
+ * include/exclude patterns. Hard-skips heavy/irrelevant dirs. Zero new deps.
5
+ */
6
+ export declare function globToRegExp(glob: string): RegExp;
7
+ export interface DiscoverOptions {
8
+ include: string[];
9
+ exclude?: string[];
10
+ }
11
+ /** Walk `cwd` and return forward-slash relative paths matching include and not exclude. */
12
+ export declare function discoverFiles(cwd: string, opts: DiscoverOptions): string[];
13
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/scan/discover.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmCjD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,EAAE,CA8B1E"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * File discovery for the scanner: a recursive walk + a small glob→regex
3
+ * (supports `**`, `*`, `?`, and single-level `{a,b}` braces) honoring
4
+ * include/exclude patterns. Hard-skips heavy/irrelevant dirs. Zero new deps.
5
+ */
6
+ import { readdirSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ const HARD_SKIP = new Set([
9
+ 'node_modules',
10
+ '.git',
11
+ 'dist',
12
+ 'build',
13
+ '.next',
14
+ '.expo',
15
+ 'coverage',
16
+ 'Pods',
17
+ '.dart_tool',
18
+ ]);
19
+ function escapeLiteral(s) {
20
+ return s.replace(/[.+^${}()|[\]\\]/g, '\\$&');
21
+ }
22
+ export function globToRegExp(glob) {
23
+ let re = '^';
24
+ for (let i = 0; i < glob.length; i += 1) {
25
+ const c = glob[i];
26
+ if (c === '*') {
27
+ if (glob[i + 1] === '*') {
28
+ i += 1;
29
+ if (glob[i + 1] === '/') {
30
+ re += '(?:.*/)?'; // zero or more directories
31
+ i += 1;
32
+ }
33
+ else {
34
+ re += '.*';
35
+ }
36
+ }
37
+ else {
38
+ re += '[^/]*';
39
+ }
40
+ }
41
+ else if (c === '?') {
42
+ re += '[^/]';
43
+ }
44
+ else if (c === '{') {
45
+ let j = i + 1;
46
+ let body = '';
47
+ while (j < glob.length && glob[j] !== '}') {
48
+ body += glob[j];
49
+ j += 1;
50
+ }
51
+ const parts = body.split(',').map((p) => escapeLiteral(p));
52
+ re += `(?:${parts.join('|')})`;
53
+ i = j; // land on the closing brace
54
+ }
55
+ else if ('.+^${}()|[]\\'.includes(c)) {
56
+ re += `\\${c}`;
57
+ }
58
+ else {
59
+ re += c;
60
+ }
61
+ }
62
+ return new RegExp(`${re}$`);
63
+ }
64
+ /** Walk `cwd` and return forward-slash relative paths matching include and not exclude. */
65
+ export function discoverFiles(cwd, opts) {
66
+ const includeRe = opts.include.map(globToRegExp);
67
+ const excludeRe = (opts.exclude ?? []).map(globToRegExp);
68
+ const results = [];
69
+ const walk = (dir, rel) => {
70
+ let entries;
71
+ try {
72
+ entries = readdirSync(dir, { withFileTypes: true });
73
+ }
74
+ catch {
75
+ return;
76
+ }
77
+ for (const entry of entries) {
78
+ const relPath = rel ? `${rel}/${entry.name}` : entry.name;
79
+ if (entry.isDirectory()) {
80
+ if (HARD_SKIP.has(entry.name))
81
+ continue;
82
+ walk(join(dir, entry.name), relPath);
83
+ }
84
+ else if (entry.isFile()) {
85
+ if (includeRe.some((r) => r.test(relPath)) &&
86
+ !excludeRe.some((r) => r.test(relPath))) {
87
+ results.push(relPath);
88
+ }
89
+ }
90
+ }
91
+ };
92
+ walk(cwd, '');
93
+ return results.sort();
94
+ }
95
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/scan/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Deterministic source scanner: find candidate user-facing strings in
3
+ * JS/TS/JSX/TSX via the TypeScript compiler AST, over a FINITE allowlist of UI
4
+ * string sinks (JSX text nodes + a fixed JSX attribute allowlist). Each
5
+ * candidate gets the content-hash auto_key (via canonicalize) so it shares a TM
6
+ * row with the same string on the web.
7
+ *
8
+ * Honest boundary (the part determinism cannot safely own):
9
+ * - static JSX text + allowlisted string-literal attributes → action 'wrap'
10
+ * - interpolation ({expr}) or inline markup (<b>, <Link>…) → action 'review'
11
+ * - expression-valued attributes → action 'review'
12
+ * Negative filtering reuses core's ExcludeFilter (emails/URLs/numbers/phones +
13
+ * min length) for byte-parity with the DOM auto-detect path.
14
+ *
15
+ * `typescript` is imported for its TYPES only at compile time and dynamically
16
+ * loaded at runtime, so push/pull/validate never pay its load cost.
17
+ */
18
+ import { ExcludeFilter } from '@lionrapid/core';
19
+ export type ScanAction = 'wrap' | 'review';
20
+ export interface Candidate {
21
+ text: string;
22
+ /** Content-hash key (empty for 'review' candidates whose final text isn't fixed yet). */
23
+ autoKey: string;
24
+ file: string;
25
+ line: number;
26
+ col: number;
27
+ sink: string;
28
+ action: ScanAction;
29
+ reason?: string;
30
+ }
31
+ export declare function scanSource(code: string, fileName: string, exclude?: ExcludeFilter): Promise<Candidate[]>;
32
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/scan/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA4BD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,gBAAsB,GAC5B,OAAO,CAAC,SAAS,EAAE,CAAC,CAoGtB"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Deterministic source scanner: find candidate user-facing strings in
3
+ * JS/TS/JSX/TSX via the TypeScript compiler AST, over a FINITE allowlist of UI
4
+ * string sinks (JSX text nodes + a fixed JSX attribute allowlist). Each
5
+ * candidate gets the content-hash auto_key (via canonicalize) so it shares a TM
6
+ * row with the same string on the web.
7
+ *
8
+ * Honest boundary (the part determinism cannot safely own):
9
+ * - static JSX text + allowlisted string-literal attributes → action 'wrap'
10
+ * - interpolation ({expr}) or inline markup (<b>, <Link>…) → action 'review'
11
+ * - expression-valued attributes → action 'review'
12
+ * Negative filtering reuses core's ExcludeFilter (emails/URLs/numbers/phones +
13
+ * min length) for byte-parity with the DOM auto-detect path.
14
+ *
15
+ * `typescript` is imported for its TYPES only at compile time and dynamically
16
+ * loaded at runtime, so push/pull/validate never pay its load cost.
17
+ */
18
+ import { ExcludeFilter } from '@lionrapid/core';
19
+ import { canonicalize, normalizeJsxText } from './canonical.js';
20
+ // Lowercased JSX attribute names that carry user-facing copy.
21
+ const ATTR_ALLOWLIST = new Set([
22
+ 'placeholder',
23
+ 'title',
24
+ 'alt',
25
+ 'aria-label',
26
+ 'label',
27
+ 'accessibilitylabel',
28
+ 'accessibilityhint',
29
+ ]);
30
+ function scriptKindFor(fileName, ts) {
31
+ if (fileName.endsWith('.tsx'))
32
+ return ts.ScriptKind.TSX;
33
+ if (fileName.endsWith('.ts'))
34
+ return ts.ScriptKind.TS;
35
+ if (fileName.endsWith('.jsx'))
36
+ return ts.ScriptKind.JSX;
37
+ return ts.ScriptKind.JS;
38
+ }
39
+ let tsModule;
40
+ async function loadTs() {
41
+ if (!tsModule) {
42
+ tsModule = (await import('typescript')).default;
43
+ }
44
+ return tsModule;
45
+ }
46
+ export async function scanSource(code, fileName, exclude = new ExcludeFilter()) {
47
+ const ts = await loadTs();
48
+ const sf = ts.createSourceFile(fileName, code, ts.ScriptTarget.Latest,
49
+ /* setParentNodes */ true, scriptKindFor(fileName, ts));
50
+ const out = [];
51
+ const posOf = (node) => {
52
+ const { line, character } = sf.getLineAndCharacterOfPosition(node.getStart(sf));
53
+ return { line: line + 1, col: character + 1 };
54
+ };
55
+ const handleJsxChildren = (node) => {
56
+ const children = node.children;
57
+ const textNodes = children.filter((c) => ts.isJsxText(c) && !c.containsOnlyTriviaWhiteSpaces);
58
+ if (textNodes.length === 0)
59
+ return;
60
+ const raw = children
61
+ .filter((c) => ts.isJsxText(c))
62
+ .map((c) => c.text)
63
+ .join('');
64
+ const text = normalizeJsxText(raw);
65
+ if (!text || exclude.shouldExclude(text))
66
+ return;
67
+ const hasExpr = children.some((c) => ts.isJsxExpression(c) && c.expression);
68
+ const hasNestedEl = children.some((c) => ts.isJsxElement(c) || ts.isJsxSelfClosingElement(c) || ts.isJsxFragment(c));
69
+ const { line, col } = posOf(textNodes[0]);
70
+ if (hasExpr || hasNestedEl) {
71
+ out.push({
72
+ text,
73
+ autoKey: '',
74
+ file: fileName,
75
+ line,
76
+ col,
77
+ sink: 'jsx-text',
78
+ action: 'review',
79
+ reason: hasExpr ? 'interpolation' : 'inline-markup',
80
+ });
81
+ }
82
+ else {
83
+ out.push({
84
+ text,
85
+ autoKey: canonicalize(text).autoKey,
86
+ file: fileName,
87
+ line,
88
+ col,
89
+ sink: 'jsx-text',
90
+ action: 'wrap',
91
+ });
92
+ }
93
+ };
94
+ const handleAttr = (node) => {
95
+ const name = node.name.getText(sf).toLowerCase();
96
+ if (!ATTR_ALLOWLIST.has(name))
97
+ return;
98
+ const init = node.initializer;
99
+ const { line, col } = posOf(node);
100
+ if (init && ts.isStringLiteral(init)) {
101
+ const text = init.text;
102
+ if (!text || exclude.shouldExclude(text))
103
+ return;
104
+ out.push({
105
+ text,
106
+ autoKey: canonicalize(text).autoKey,
107
+ file: fileName,
108
+ line,
109
+ col,
110
+ sink: `jsx-attr:${name}`,
111
+ action: 'wrap',
112
+ });
113
+ }
114
+ else if (init && ts.isJsxExpression(init)) {
115
+ out.push({
116
+ text: '',
117
+ autoKey: '',
118
+ file: fileName,
119
+ line,
120
+ col,
121
+ sink: `jsx-attr:${name}`,
122
+ action: 'review',
123
+ reason: 'dynamic attribute value',
124
+ });
125
+ }
126
+ };
127
+ const visit = (node) => {
128
+ if (ts.isJsxElement(node) || ts.isJsxFragment(node))
129
+ handleJsxChildren(node);
130
+ if (ts.isJsxAttribute(node))
131
+ handleAttr(node);
132
+ ts.forEachChild(node, visit);
133
+ };
134
+ visit(sf);
135
+ return out;
136
+ }
137
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/scan/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Extract typed parameters from an ICU MessageFormat string.
3
+ *
4
+ * Ported and adapted from the old `@lionrapid/types` inference, but driven by
5
+ * the message text itself (the realigned CLI derives types from your source
6
+ * files, not a separate schema endpoint):
7
+ * - `{count, plural, …}` / `selectordinal` / `number` → `number`
8
+ * - `{gender, select, male{…} female{…} other{…}}` → `'male' | 'female'`
9
+ * (plus `| (string & {})` unless strict)
10
+ * - `{when, date|time, …}` → `Date | string`
11
+ * - bare `{name}` → heuristic (`count`→number, `is*`→boolean, `*Id`→string|number,
12
+ * `*date*`→Date|string, else `string`)
13
+ */
14
+ export interface TypedParam {
15
+ name: string;
16
+ type: string;
17
+ }
18
+ export declare class IcuError extends Error {
19
+ constructor(message: string);
20
+ }
21
+ export declare function extractParams(text: string, strictIcu?: boolean): TypedParam[];
22
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/types-gen/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAmED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,UAAU,EAAE,CAoD3E"}