@lynxship/cli 0.1.19 → 0.1.21

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 (193) hide show
  1. package/README.md +66 -5
  2. package/dist/android/signing.d.ts +16 -0
  3. package/dist/android/signing.d.ts.map +1 -0
  4. package/dist/android/signing.js +131 -0
  5. package/dist/android/types.d.ts +12 -0
  6. package/dist/android/types.d.ts.map +1 -0
  7. package/dist/android/types.js +1 -0
  8. package/dist/android-build.d.ts +4 -13
  9. package/dist/android-build.d.ts.map +1 -1
  10. package/dist/android-build.js +14 -133
  11. package/dist/android-toolchain/inspection.d.ts +3 -0
  12. package/dist/android-toolchain/inspection.d.ts.map +1 -0
  13. package/dist/android-toolchain/inspection.js +122 -0
  14. package/dist/android-toolchain/probes.d.ts +23 -0
  15. package/dist/android-toolchain/probes.d.ts.map +1 -0
  16. package/dist/android-toolchain/probes.js +183 -0
  17. package/dist/android-toolchain/types.d.ts +20 -0
  18. package/dist/android-toolchain/types.d.ts.map +1 -0
  19. package/dist/android-toolchain/types.js +1 -0
  20. package/dist/android-toolchain.d.ts +4 -20
  21. package/dist/android-toolchain.d.ts.map +1 -1
  22. package/dist/android-toolchain.js +4 -300
  23. package/dist/app-config.d.ts +25 -0
  24. package/dist/app-config.d.ts.map +1 -0
  25. package/dist/app-config.js +106 -0
  26. package/dist/bundle-build.d.ts.map +1 -1
  27. package/dist/bundle-build.js +11 -0
  28. package/dist/cli.d.ts +3 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +66 -0
  31. package/dist/commands/build-execution.d.ts +41 -0
  32. package/dist/commands/build-execution.d.ts.map +1 -0
  33. package/dist/commands/build-execution.js +182 -0
  34. package/dist/commands/configuration.d.ts +19 -0
  35. package/dist/commands/configuration.d.ts.map +1 -0
  36. package/dist/commands/configuration.js +174 -0
  37. package/dist/commands/development.d.ts +22 -0
  38. package/dist/commands/development.d.ts.map +1 -0
  39. package/dist/commands/development.js +132 -0
  40. package/dist/commands/device.d.ts +3 -0
  41. package/dist/commands/device.d.ts.map +1 -0
  42. package/dist/commands/device.js +86 -0
  43. package/dist/commands/doctor.d.ts +18 -0
  44. package/dist/commands/doctor.d.ts.map +1 -0
  45. package/dist/commands/doctor.js +320 -0
  46. package/dist/commands/help.d.ts +2 -0
  47. package/dist/commands/help.d.ts.map +1 -0
  48. package/dist/commands/help.js +118 -0
  49. package/dist/commands/i18n.d.ts +14 -0
  50. package/dist/commands/i18n.d.ts.map +1 -0
  51. package/dist/commands/i18n.js +88 -0
  52. package/dist/commands/logs.d.ts +3 -0
  53. package/dist/commands/logs.d.ts.map +1 -0
  54. package/dist/commands/logs.js +51 -0
  55. package/dist/commands/metadata.d.ts +3 -0
  56. package/dist/commands/metadata.d.ts.map +1 -0
  57. package/dist/commands/metadata.js +45 -0
  58. package/dist/commands/ota.d.ts +28 -0
  59. package/dist/commands/ota.d.ts.map +1 -0
  60. package/dist/commands/ota.js +203 -0
  61. package/dist/commands/project.d.ts +14 -0
  62. package/dist/commands/project.d.ts.map +1 -0
  63. package/dist/commands/project.js +122 -0
  64. package/dist/commands/remote-build.d.ts +35 -0
  65. package/dist/commands/remote-build.d.ts.map +1 -0
  66. package/dist/commands/remote-build.js +73 -0
  67. package/dist/commands/submit.d.ts +27 -0
  68. package/dist/commands/submit.d.ts.map +1 -0
  69. package/dist/commands/submit.js +92 -0
  70. package/dist/ecosystem.d.ts +9 -0
  71. package/dist/ecosystem.d.ts.map +1 -0
  72. package/dist/ecosystem.js +95 -0
  73. package/dist/frameworks.d.ts.map +1 -1
  74. package/dist/frameworks.js +5 -1
  75. package/dist/guidance/catalog.d.ts +3 -0
  76. package/dist/guidance/catalog.d.ts.map +1 -0
  77. package/dist/guidance/catalog.js +504 -0
  78. package/dist/guidance/types.d.ts +10 -0
  79. package/dist/guidance/types.d.ts.map +1 -0
  80. package/dist/guidance/types.js +1 -0
  81. package/dist/guidance.d.ts +2 -9
  82. package/dist/guidance.d.ts.map +1 -1
  83. package/dist/guidance.js +1 -502
  84. package/dist/i18n/discovery.d.ts +14 -0
  85. package/dist/i18n/discovery.d.ts.map +1 -0
  86. package/dist/i18n/discovery.js +106 -0
  87. package/dist/i18n/plan.d.ts +12 -0
  88. package/dist/i18n/plan.d.ts.map +1 -0
  89. package/dist/i18n/plan.js +95 -0
  90. package/dist/i18n/setup.d.ts +11 -0
  91. package/dist/i18n/setup.d.ts.map +1 -0
  92. package/dist/i18n/setup.js +47 -0
  93. package/dist/i18n/types.d.ts +17 -0
  94. package/dist/i18n/types.d.ts.map +1 -0
  95. package/dist/i18n/types.js +1 -0
  96. package/dist/index.d.ts +1 -1
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +4 -2069
  99. package/dist/ios/assets.d.ts +19 -0
  100. package/dist/ios/assets.d.ts.map +1 -0
  101. package/dist/ios/assets.js +128 -0
  102. package/dist/ios/production-build.d.ts +6 -0
  103. package/dist/ios/production-build.d.ts.map +1 -0
  104. package/dist/ios/production-build.js +200 -0
  105. package/dist/ios/project.d.ts +4 -0
  106. package/dist/ios/project.d.ts.map +1 -0
  107. package/dist/ios/project.js +43 -0
  108. package/dist/ios/simulator-build.d.ts +8 -0
  109. package/dist/ios/simulator-build.d.ts.map +1 -0
  110. package/dist/ios/simulator-build.js +188 -0
  111. package/dist/ios/simulator.d.ts +5 -0
  112. package/dist/ios/simulator.d.ts.map +1 -0
  113. package/dist/ios/simulator.js +60 -0
  114. package/dist/ios/types.d.ts +14 -0
  115. package/dist/ios/types.d.ts.map +1 -0
  116. package/dist/ios/types.js +1 -0
  117. package/dist/ios-build.d.ts +4 -37
  118. package/dist/ios-build.d.ts.map +1 -1
  119. package/dist/ios-build.js +3 -575
  120. package/dist/ios-host.d.ts.map +1 -1
  121. package/dist/ios-toolchain/inspection.d.ts +4 -0
  122. package/dist/ios-toolchain/inspection.d.ts.map +1 -0
  123. package/dist/ios-toolchain/inspection.js +211 -0
  124. package/dist/ios-toolchain/probes.d.ts +24 -0
  125. package/dist/ios-toolchain/probes.d.ts.map +1 -0
  126. package/dist/ios-toolchain/probes.js +127 -0
  127. package/dist/ios-toolchain/types.d.ts +17 -0
  128. package/dist/ios-toolchain/types.d.ts.map +1 -0
  129. package/dist/ios-toolchain/types.js +1 -0
  130. package/dist/ios-toolchain.d.ts +3 -18
  131. package/dist/ios-toolchain.d.ts.map +1 -1
  132. package/dist/ios-toolchain.js +1 -333
  133. package/dist/plugins/contracts.d.ts +28 -0
  134. package/dist/plugins/contracts.d.ts.map +1 -0
  135. package/dist/plugins/contracts.js +1 -0
  136. package/dist/plugins/discovery.d.ts +19 -0
  137. package/dist/plugins/discovery.d.ts.map +1 -0
  138. package/dist/plugins/discovery.js +250 -0
  139. package/dist/plugins/native-operations.d.ts +28 -0
  140. package/dist/plugins/native-operations.d.ts.map +1 -0
  141. package/dist/plugins/native-operations.js +217 -0
  142. package/dist/plugins/operations.d.ts +9 -0
  143. package/dist/plugins/operations.d.ts.map +1 -0
  144. package/dist/plugins/operations.js +76 -0
  145. package/dist/plugins/validation.d.ts +9 -0
  146. package/dist/plugins/validation.d.ts.map +1 -0
  147. package/dist/plugins/validation.js +52 -0
  148. package/dist/plugins.d.ts +3 -34
  149. package/dist/plugins.d.ts.map +1 -1
  150. package/dist/plugins.js +2 -595
  151. package/dist/process-runner.d.ts +4 -0
  152. package/dist/process-runner.d.ts.map +1 -1
  153. package/dist/process-runner.js +14 -0
  154. package/dist/remote.d.ts +22 -1
  155. package/dist/remote.d.ts.map +1 -1
  156. package/dist/remote.js +141 -2
  157. package/dist/rspeedy-app-config.d.ts +4 -0
  158. package/dist/rspeedy-app-config.d.ts.map +1 -0
  159. package/dist/rspeedy-app-config.js +32 -0
  160. package/dist/runtime/args.d.ts +3 -0
  161. package/dist/runtime/args.d.ts.map +1 -0
  162. package/dist/runtime/args.js +11 -0
  163. package/dist/runtime/build-commands.d.ts +3 -0
  164. package/dist/runtime/build-commands.d.ts.map +1 -0
  165. package/dist/runtime/build-commands.js +282 -0
  166. package/dist/runtime/context.d.ts +63 -0
  167. package/dist/runtime/context.d.ts.map +1 -0
  168. package/dist/runtime/context.js +179 -0
  169. package/dist/runtime/early-commands.d.ts +4 -0
  170. package/dist/runtime/early-commands.d.ts.map +1 -0
  171. package/dist/runtime/early-commands.js +284 -0
  172. package/dist/runtime/project.d.ts +8 -0
  173. package/dist/runtime/project.d.ts.map +1 -0
  174. package/dist/runtime/project.js +38 -0
  175. package/dist/runtime/state.d.ts +47 -0
  176. package/dist/runtime/state.d.ts.map +1 -0
  177. package/dist/runtime/state.js +33 -0
  178. package/dist/secure-store/backends.d.ts +20 -0
  179. package/dist/secure-store/backends.d.ts.map +1 -0
  180. package/dist/secure-store/backends.js +248 -0
  181. package/dist/secure-store/types.d.ts +27 -0
  182. package/dist/secure-store/types.d.ts.map +1 -0
  183. package/dist/secure-store/types.js +1 -0
  184. package/dist/secure-store.d.ts +2 -26
  185. package/dist/secure-store.d.ts.map +1 -1
  186. package/dist/secure-store.js +3 -245
  187. package/dist/ui/components.d.ts.map +1 -1
  188. package/dist/ui/components.js +2 -1
  189. package/package.json +7 -4
  190. package/templates/android-host/app/build.gradle +1 -0
  191. package/templates/android-host/app/src/main/java/template/MainActivity.java +98 -3
  192. package/templates/ios-host/__IOS_TARGET_NAME__/DemoLynxProvider.swift +26 -16
  193. package/templates/ios-host/__IOS_TARGET_NAME__/ViewController.swift +107 -19
@@ -0,0 +1,95 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { dirname, join, relative } from "node:path";
3
+ import { intlPolyfillPlan } from "@lynxship/i18n";
4
+ import { discoverIntlCapabilities, discoverLocales, projectRelative, readProjectPackage, resolveEntryFile, } from "./discovery.js";
5
+ const PERSISTENCE_PACKAGES = ["@lynxship/device-storage"];
6
+ const BASE_PACKAGES = ["@lynxship/i18n", "i18next@^26.0.0"];
7
+ const CAPABILITY_PREREQUISITES = {
8
+ PluralRules: ["getCanonicalLocales", "Locale"],
9
+ NumberFormat: ["getCanonicalLocales", "Locale", "PluralRules"],
10
+ DateTimeFormat: ["getCanonicalLocales", "Locale", "NumberFormat"],
11
+ RelativeTimeFormat: ["getCanonicalLocales", "Locale"],
12
+ ListFormat: ["getCanonicalLocales", "Locale"],
13
+ DisplayNames: ["getCanonicalLocales", "Locale"],
14
+ Segmenter: ["getCanonicalLocales", "Locale"],
15
+ DurationFormat: ["getCanonicalLocales", "Locale"],
16
+ };
17
+ export async function createI18nSetupPlan(options) {
18
+ const entryFile = await resolveEntryFile(options.root, options.entry);
19
+ const packageJson = await readProjectPackage(options.root);
20
+ const dependencies = {
21
+ ...packageJson.dependencies,
22
+ ...packageJson.devDependencies,
23
+ };
24
+ const capabilities = options.capabilities?.length
25
+ ? [...new Set(options.capabilities)]
26
+ : await discoverIntlCapabilities(options.root);
27
+ const expanded = expandCapabilities(capabilities);
28
+ const packages = [
29
+ ...BASE_PACKAGES.filter((packageName) => !hasDependency(dependencies, packageName)),
30
+ ...(options.persistence &&
31
+ !hasDependency(dependencies, "@lynxship/device-storage")
32
+ ? PERSISTENCE_PACKAGES
33
+ : []),
34
+ ...expanded
35
+ .map((capability) => intlPolyfillPlan(capability).packageName)
36
+ .filter((packageName) => !hasDependency(dependencies, packageName)),
37
+ ];
38
+ const polyfillFile = join(options.root, "src", "lynxship", "i18n-polyfills.ts");
39
+ const entrySource = await readFile(entryFile, "utf8");
40
+ const polyfillSource = await readFile(polyfillFile, "utf8").catch(() => "");
41
+ return {
42
+ entryFile: projectRelative(options.root, entryFile),
43
+ polyfillFile: projectRelative(options.root, polyfillFile),
44
+ locales: options.locales?.length
45
+ ? [...options.locales]
46
+ : await discoverLocales(options.root),
47
+ capabilities: expanded,
48
+ packages,
49
+ persistence: options.persistence,
50
+ entryAlreadyPatched: entrySource.includes("./lynxship/i18n-polyfills.js"),
51
+ polyfillAlreadyGenerated: polyfillSource.length > 0,
52
+ };
53
+ }
54
+ export function renderPolyfillSource(plan) {
55
+ const imports = plan.capabilities.flatMap((capability) => {
56
+ const item = intlPolyfillPlan(capability);
57
+ const localeData = item.localeDataEntryPoint
58
+ ? plan.locales.map((locale) => item.localeDataEntryPoint.replace("{locale}", locale))
59
+ : [];
60
+ return [item.setupEntryPoint, ...localeData];
61
+ });
62
+ return [
63
+ "/* Generated by `lynxship i18n setup`. Do not edit by hand. */",
64
+ "/* Imports are intentionally static so native Lynx bundles stay offline and reproducible. */",
65
+ ...[...new Set(imports)].map((entry) => `import ${JSON.stringify(entry)};`),
66
+ "",
67
+ ].join("\n");
68
+ }
69
+ export function entryImportPath(plan) {
70
+ const entryDirectory = dirname(plan.entryFile);
71
+ const polyfillPath = relative(entryDirectory, plan.polyfillFile)
72
+ .replaceAll("\\", "/")
73
+ .replace(/\.tsx?$/, ".js");
74
+ return polyfillPath.startsWith(".") ? polyfillPath : `./${polyfillPath}`;
75
+ }
76
+ function expandCapabilities(capabilities) {
77
+ const expanded = new Set();
78
+ const add = (capability) => {
79
+ if (expanded.has(capability))
80
+ return;
81
+ for (const prerequisite of CAPABILITY_PREREQUISITES[capability] ?? [])
82
+ add(prerequisite);
83
+ expanded.add(capability);
84
+ };
85
+ for (const capability of capabilities)
86
+ add(capability);
87
+ return [...expanded];
88
+ }
89
+ function hasDependency(dependencies, packageName) {
90
+ const separator = packageName.startsWith("@")
91
+ ? packageName.indexOf("@", 1)
92
+ : packageName.indexOf("@");
93
+ const name = separator > 0 ? packageName.slice(0, separator) : packageName;
94
+ return Object.prototype.hasOwnProperty.call(dependencies, name);
95
+ }
@@ -0,0 +1,11 @@
1
+ import type { I18nSetupResult } from "./types.js";
2
+ export declare function setupI18n(options: {
3
+ root: string;
4
+ entry?: string;
5
+ capabilities?: readonly import("@lynxship/i18n").IntlCapability[];
6
+ locales?: readonly string[];
7
+ persistence: boolean;
8
+ dryRun: boolean;
9
+ onOutput?: (line: string) => void;
10
+ }): Promise<I18nSetupResult>;
11
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/i18n/setup.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAsB,SAAS,CAAC,OAAO,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,OAAO,gBAAgB,EAAE,cAAc,EAAE,CAAC;IAClE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,GAAG,OAAO,CAAC,eAAe,CAAC,CA4C3B"}
@@ -0,0 +1,47 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { runProcess, packageManagerInstallCommand } from "../process-runner.js";
4
+ import { createI18nSetupPlan, entryImportPath, renderPolyfillSource, } from "./plan.js";
5
+ import { projectRelative } from "./discovery.js";
6
+ export async function setupI18n(options) {
7
+ const plan = await createI18nSetupPlan(options);
8
+ if (options.dryRun)
9
+ return {
10
+ ...plan,
11
+ status: "planned",
12
+ installed: [],
13
+ filesChanged: [],
14
+ };
15
+ if (plan.packages.length > 0) {
16
+ const command = packageManagerInstallCommand(options.root, plan.packages);
17
+ await runProcess(command.command, command.args, {
18
+ cwd: options.root,
19
+ onOutput: options.onOutput,
20
+ });
21
+ }
22
+ const polyfillFile = join(options.root, plan.polyfillFile);
23
+ await mkdir(join(options.root, "src", "lynxship"), { recursive: true });
24
+ const generated = renderPolyfillSource(plan);
25
+ const oldGenerated = await readFile(polyfillFile, "utf8").catch(() => "");
26
+ if (oldGenerated !== generated)
27
+ await writeFile(polyfillFile, generated, "utf8");
28
+ const entryFile = join(options.root, plan.entryFile);
29
+ const source = await readFile(entryFile, "utf8");
30
+ const importLine = `import ${JSON.stringify(entryImportPath(plan))};`;
31
+ const patched = source.includes(importLine)
32
+ ? source
33
+ : `${importLine}\n${source}`;
34
+ if (patched !== source)
35
+ await writeFile(entryFile, patched, "utf8");
36
+ return {
37
+ ...plan,
38
+ status: "applied",
39
+ installed: plan.packages,
40
+ filesChanged: [
41
+ ...(oldGenerated === generated
42
+ ? []
43
+ : [projectRelative(options.root, polyfillFile)]),
44
+ ...(patched === source ? [] : [plan.entryFile]),
45
+ ],
46
+ };
47
+ }
@@ -0,0 +1,17 @@
1
+ import type { IntlCapability } from "@lynxship/i18n";
2
+ export interface I18nSetupPlan {
3
+ readonly entryFile: string;
4
+ readonly polyfillFile: string;
5
+ readonly locales: readonly string[];
6
+ readonly capabilities: readonly IntlCapability[];
7
+ readonly packages: readonly string[];
8
+ readonly persistence: boolean;
9
+ readonly entryAlreadyPatched: boolean;
10
+ readonly polyfillAlreadyGenerated: boolean;
11
+ }
12
+ export interface I18nSetupResult extends I18nSetupPlan {
13
+ readonly status: "planned" | "applied";
14
+ readonly installed: readonly string[];
15
+ readonly filesChanged: readonly string[];
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C"}
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import "./cli.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAKA,OAAO,UAAU,CAAC"}