@take-out/cli 0.0.39

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 (331) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -0
  3. package/cli.mjs +3 -0
  4. package/dist/cjs/cli.cjs +71 -0
  5. package/dist/cjs/cli.js +70 -0
  6. package/dist/cjs/cli.js.map +6 -0
  7. package/dist/cjs/cli.native.js +79 -0
  8. package/dist/cjs/cli.native.js.map +6 -0
  9. package/dist/cjs/commands/changed.cjs +212 -0
  10. package/dist/cjs/commands/changed.js +214 -0
  11. package/dist/cjs/commands/changed.js.map +6 -0
  12. package/dist/cjs/commands/changed.native.js +289 -0
  13. package/dist/cjs/commands/changed.native.js.map +6 -0
  14. package/dist/cjs/commands/docs.cjs +388 -0
  15. package/dist/cjs/commands/docs.js +313 -0
  16. package/dist/cjs/commands/docs.js.map +6 -0
  17. package/dist/cjs/commands/docs.native.js +476 -0
  18. package/dist/cjs/commands/docs.native.js.map +6 -0
  19. package/dist/cjs/commands/env-setup.cjs +90 -0
  20. package/dist/cjs/commands/env-setup.js +78 -0
  21. package/dist/cjs/commands/env-setup.js.map +6 -0
  22. package/dist/cjs/commands/env-setup.native.js +85 -0
  23. package/dist/cjs/commands/env-setup.native.js.map +6 -0
  24. package/dist/cjs/commands/onboard.cjs +479 -0
  25. package/dist/cjs/commands/onboard.js +631 -0
  26. package/dist/cjs/commands/onboard.js.map +6 -0
  27. package/dist/cjs/commands/onboard.native.js +608 -0
  28. package/dist/cjs/commands/onboard.native.js.map +6 -0
  29. package/dist/cjs/commands/run.cjs +148 -0
  30. package/dist/cjs/commands/run.js +116 -0
  31. package/dist/cjs/commands/run.js.map +6 -0
  32. package/dist/cjs/commands/run.native.js +140 -0
  33. package/dist/cjs/commands/run.native.js.map +6 -0
  34. package/dist/cjs/commands/script.cjs +379 -0
  35. package/dist/cjs/commands/script.js +339 -0
  36. package/dist/cjs/commands/script.js.map +6 -0
  37. package/dist/cjs/commands/script.native.js +449 -0
  38. package/dist/cjs/commands/script.native.js.map +6 -0
  39. package/dist/cjs/commands/sync.cjs +190 -0
  40. package/dist/cjs/commands/sync.js +168 -0
  41. package/dist/cjs/commands/sync.js.map +6 -0
  42. package/dist/cjs/commands/sync.native.js +211 -0
  43. package/dist/cjs/commands/sync.native.js.map +6 -0
  44. package/dist/cjs/constants/ascii.cjs +36 -0
  45. package/dist/cjs/constants/ascii.js +30 -0
  46. package/dist/cjs/constants/ascii.js.map +6 -0
  47. package/dist/cjs/constants/ascii.native.js +36 -0
  48. package/dist/cjs/constants/ascii.native.js.map +6 -0
  49. package/dist/cjs/index.cjs +64 -0
  50. package/dist/cjs/index.js +55 -0
  51. package/dist/cjs/index.js.map +6 -0
  52. package/dist/cjs/index.native.js +94 -0
  53. package/dist/cjs/index.native.js.map +6 -0
  54. package/dist/cjs/types.cjs +16 -0
  55. package/dist/cjs/types.js +14 -0
  56. package/dist/cjs/types.js.map +6 -0
  57. package/dist/cjs/types.native.js +15 -0
  58. package/dist/cjs/types.native.js.map +6 -0
  59. package/dist/cjs/utils/env-categories.cjs +272 -0
  60. package/dist/cjs/utils/env-categories.js +296 -0
  61. package/dist/cjs/utils/env-categories.js.map +6 -0
  62. package/dist/cjs/utils/env-categories.native.js +317 -0
  63. package/dist/cjs/utils/env-categories.native.js.map +6 -0
  64. package/dist/cjs/utils/env-setup.cjs +181 -0
  65. package/dist/cjs/utils/env-setup.js +190 -0
  66. package/dist/cjs/utils/env-setup.js.map +6 -0
  67. package/dist/cjs/utils/env-setup.native.js +264 -0
  68. package/dist/cjs/utils/env-setup.native.js.map +6 -0
  69. package/dist/cjs/utils/env.cjs +118 -0
  70. package/dist/cjs/utils/env.js +97 -0
  71. package/dist/cjs/utils/env.js.map +6 -0
  72. package/dist/cjs/utils/env.native.js +128 -0
  73. package/dist/cjs/utils/env.native.js.map +6 -0
  74. package/dist/cjs/utils/files.cjs +215 -0
  75. package/dist/cjs/utils/files.js +164 -0
  76. package/dist/cjs/utils/files.js.map +6 -0
  77. package/dist/cjs/utils/files.native.js +266 -0
  78. package/dist/cjs/utils/files.native.js.map +6 -0
  79. package/dist/cjs/utils/parallel-runner.cjs +99 -0
  80. package/dist/cjs/utils/parallel-runner.js +84 -0
  81. package/dist/cjs/utils/parallel-runner.js.map +6 -0
  82. package/dist/cjs/utils/parallel-runner.native.js +123 -0
  83. package/dist/cjs/utils/parallel-runner.native.js.map +6 -0
  84. package/dist/cjs/utils/ports.cjs +101 -0
  85. package/dist/cjs/utils/ports.js +81 -0
  86. package/dist/cjs/utils/ports.js.map +6 -0
  87. package/dist/cjs/utils/ports.native.js +130 -0
  88. package/dist/cjs/utils/ports.native.js.map +6 -0
  89. package/dist/cjs/utils/prerequisites.cjs +119 -0
  90. package/dist/cjs/utils/prerequisites.js +107 -0
  91. package/dist/cjs/utils/prerequisites.js.map +6 -0
  92. package/dist/cjs/utils/prerequisites.native.js +127 -0
  93. package/dist/cjs/utils/prerequisites.native.js.map +6 -0
  94. package/dist/cjs/utils/prompts.cjs +161 -0
  95. package/dist/cjs/utils/prompts.js +162 -0
  96. package/dist/cjs/utils/prompts.js.map +6 -0
  97. package/dist/cjs/utils/prompts.native.js +179 -0
  98. package/dist/cjs/utils/prompts.native.js.map +6 -0
  99. package/dist/cjs/utils/script-listing.cjs +113 -0
  100. package/dist/cjs/utils/script-listing.js +108 -0
  101. package/dist/cjs/utils/script-listing.js.map +6 -0
  102. package/dist/cjs/utils/script-listing.native.js +174 -0
  103. package/dist/cjs/utils/script-listing.native.js.map +6 -0
  104. package/dist/cjs/utils/sync.cjs +85 -0
  105. package/dist/cjs/utils/sync.js +70 -0
  106. package/dist/cjs/utils/sync.js.map +6 -0
  107. package/dist/cjs/utils/sync.native.js +84 -0
  108. package/dist/cjs/utils/sync.native.js.map +6 -0
  109. package/dist/cjs/utils/welcome.cjs +50 -0
  110. package/dist/cjs/utils/welcome.js +42 -0
  111. package/dist/cjs/utils/welcome.js.map +6 -0
  112. package/dist/cjs/utils/welcome.native.js +47 -0
  113. package/dist/cjs/utils/welcome.native.js.map +6 -0
  114. package/dist/esm/cli.js +79 -0
  115. package/dist/esm/cli.js.map +6 -0
  116. package/dist/esm/cli.mjs +71 -0
  117. package/dist/esm/cli.mjs.map +1 -0
  118. package/dist/esm/cli.native.js +69 -0
  119. package/dist/esm/cli.native.js.map +1 -0
  120. package/dist/esm/commands/changed.js +194 -0
  121. package/dist/esm/commands/changed.js.map +6 -0
  122. package/dist/esm/commands/changed.mjs +178 -0
  123. package/dist/esm/commands/changed.mjs.map +1 -0
  124. package/dist/esm/commands/changed.native.js +273 -0
  125. package/dist/esm/commands/changed.native.js.map +1 -0
  126. package/dist/esm/commands/docs.js +306 -0
  127. package/dist/esm/commands/docs.js.map +6 -0
  128. package/dist/esm/commands/docs.mjs +353 -0
  129. package/dist/esm/commands/docs.mjs.map +1 -0
  130. package/dist/esm/commands/docs.native.js +516 -0
  131. package/dist/esm/commands/docs.native.js.map +1 -0
  132. package/dist/esm/commands/env-setup.js +56 -0
  133. package/dist/esm/commands/env-setup.js.map +6 -0
  134. package/dist/esm/commands/env-setup.mjs +56 -0
  135. package/dist/esm/commands/env-setup.mjs.map +1 -0
  136. package/dist/esm/commands/env-setup.native.js +59 -0
  137. package/dist/esm/commands/env-setup.native.js.map +1 -0
  138. package/dist/esm/commands/onboard.js +645 -0
  139. package/dist/esm/commands/onboard.js.map +6 -0
  140. package/dist/esm/commands/onboard.mjs +445 -0
  141. package/dist/esm/commands/onboard.mjs.map +1 -0
  142. package/dist/esm/commands/onboard.native.js +584 -0
  143. package/dist/esm/commands/onboard.native.js.map +1 -0
  144. package/dist/esm/commands/run.js +95 -0
  145. package/dist/esm/commands/run.js.map +6 -0
  146. package/dist/esm/commands/run.mjs +114 -0
  147. package/dist/esm/commands/run.mjs.map +1 -0
  148. package/dist/esm/commands/run.native.js +133 -0
  149. package/dist/esm/commands/run.native.js.map +1 -0
  150. package/dist/esm/commands/script.js +338 -0
  151. package/dist/esm/commands/script.js.map +6 -0
  152. package/dist/esm/commands/script.mjs +336 -0
  153. package/dist/esm/commands/script.mjs.map +1 -0
  154. package/dist/esm/commands/script.native.js +445 -0
  155. package/dist/esm/commands/script.native.js.map +1 -0
  156. package/dist/esm/commands/sync.js +158 -0
  157. package/dist/esm/commands/sync.js.map +6 -0
  158. package/dist/esm/commands/sync.mjs +155 -0
  159. package/dist/esm/commands/sync.mjs.map +1 -0
  160. package/dist/esm/commands/sync.native.js +173 -0
  161. package/dist/esm/commands/sync.native.js.map +1 -0
  162. package/dist/esm/constants/ascii.js +14 -0
  163. package/dist/esm/constants/ascii.js.map +6 -0
  164. package/dist/esm/constants/ascii.mjs +12 -0
  165. package/dist/esm/constants/ascii.mjs.map +1 -0
  166. package/dist/esm/constants/ascii.native.js +12 -0
  167. package/dist/esm/constants/ascii.native.js.map +1 -0
  168. package/dist/esm/index.js +83 -0
  169. package/dist/esm/index.js.map +6 -0
  170. package/dist/esm/index.mjs +7 -0
  171. package/dist/esm/index.mjs.map +1 -0
  172. package/dist/esm/index.native.js +7 -0
  173. package/dist/esm/index.native.js.map +1 -0
  174. package/dist/esm/types.js +1 -0
  175. package/dist/esm/types.js.map +6 -0
  176. package/dist/esm/types.mjs +2 -0
  177. package/dist/esm/types.mjs.map +1 -0
  178. package/dist/esm/types.native.js +2 -0
  179. package/dist/esm/types.native.js.map +1 -0
  180. package/dist/esm/utils/env-categories.js +272 -0
  181. package/dist/esm/utils/env-categories.js.map +6 -0
  182. package/dist/esm/utils/env-categories.mjs +233 -0
  183. package/dist/esm/utils/env-categories.mjs.map +1 -0
  184. package/dist/esm/utils/env-categories.native.js +246 -0
  185. package/dist/esm/utils/env-categories.native.js.map +1 -0
  186. package/dist/esm/utils/env-setup.js +173 -0
  187. package/dist/esm/utils/env-setup.js.map +6 -0
  188. package/dist/esm/utils/env-setup.mjs +146 -0
  189. package/dist/esm/utils/env-setup.mjs.map +1 -0
  190. package/dist/esm/utils/env-setup.native.js +243 -0
  191. package/dist/esm/utils/env-setup.native.js.map +1 -0
  192. package/dist/esm/utils/env.js +83 -0
  193. package/dist/esm/utils/env.js.map +6 -0
  194. package/dist/esm/utils/env.mjs +90 -0
  195. package/dist/esm/utils/env.mjs.map +1 -0
  196. package/dist/esm/utils/env.native.js +99 -0
  197. package/dist/esm/utils/env.native.js.map +1 -0
  198. package/dist/esm/utils/files.js +150 -0
  199. package/dist/esm/utils/files.js.map +6 -0
  200. package/dist/esm/utils/files.mjs +187 -0
  201. package/dist/esm/utils/files.mjs.map +1 -0
  202. package/dist/esm/utils/files.native.js +247 -0
  203. package/dist/esm/utils/files.native.js.map +1 -0
  204. package/dist/esm/utils/parallel-runner.js +69 -0
  205. package/dist/esm/utils/parallel-runner.js.map +6 -0
  206. package/dist/esm/utils/parallel-runner.mjs +76 -0
  207. package/dist/esm/utils/parallel-runner.mjs.map +1 -0
  208. package/dist/esm/utils/parallel-runner.native.js +109 -0
  209. package/dist/esm/utils/parallel-runner.native.js.map +1 -0
  210. package/dist/esm/utils/ports.js +65 -0
  211. package/dist/esm/utils/ports.js.map +6 -0
  212. package/dist/esm/utils/ports.mjs +74 -0
  213. package/dist/esm/utils/ports.mjs.map +1 -0
  214. package/dist/esm/utils/ports.native.js +93 -0
  215. package/dist/esm/utils/ports.native.js.map +1 -0
  216. package/dist/esm/utils/prerequisites.js +91 -0
  217. package/dist/esm/utils/prerequisites.js.map +6 -0
  218. package/dist/esm/utils/prerequisites.mjs +91 -0
  219. package/dist/esm/utils/prerequisites.mjs.map +1 -0
  220. package/dist/esm/utils/prerequisites.native.js +97 -0
  221. package/dist/esm/utils/prerequisites.native.js.map +1 -0
  222. package/dist/esm/utils/prompts.js +139 -0
  223. package/dist/esm/utils/prompts.js.map +6 -0
  224. package/dist/esm/utils/prompts.mjs +112 -0
  225. package/dist/esm/utils/prompts.mjs.map +1 -0
  226. package/dist/esm/utils/prompts.native.js +115 -0
  227. package/dist/esm/utils/prompts.native.js.map +1 -0
  228. package/dist/esm/utils/script-listing.js +91 -0
  229. package/dist/esm/utils/script-listing.js.map +6 -0
  230. package/dist/esm/utils/script-listing.mjs +76 -0
  231. package/dist/esm/utils/script-listing.mjs.map +1 -0
  232. package/dist/esm/utils/script-listing.native.js +151 -0
  233. package/dist/esm/utils/script-listing.native.js.map +1 -0
  234. package/dist/esm/utils/sync.js +50 -0
  235. package/dist/esm/utils/sync.js.map +6 -0
  236. package/dist/esm/utils/sync.mjs +48 -0
  237. package/dist/esm/utils/sync.mjs.map +1 -0
  238. package/dist/esm/utils/sync.native.js +53 -0
  239. package/dist/esm/utils/sync.native.js.map +1 -0
  240. package/dist/esm/utils/welcome.js +21 -0
  241. package/dist/esm/utils/welcome.js.map +6 -0
  242. package/dist/esm/utils/welcome.mjs +15 -0
  243. package/dist/esm/utils/welcome.mjs.map +1 -0
  244. package/dist/esm/utils/welcome.native.js +18 -0
  245. package/dist/esm/utils/welcome.native.js.map +1 -0
  246. package/docs/aggregates.md +579 -0
  247. package/docs/cloudflare-dev-tunnel.md +41 -0
  248. package/docs/database.md +203 -0
  249. package/docs/docs.md +8 -0
  250. package/docs/emitters.md +562 -0
  251. package/docs/hot-updater.md +223 -0
  252. package/docs/native-hot-update.md +252 -0
  253. package/docs/one-components.md +234 -0
  254. package/docs/one-hooks.md +570 -0
  255. package/docs/one-routes.md +660 -0
  256. package/docs/package-json.md +115 -0
  257. package/docs/react-native-navigation-flow.md +184 -0
  258. package/docs/scripts.md +147 -0
  259. package/docs/sync-prompt.md +208 -0
  260. package/docs/tamagui.md +478 -0
  261. package/docs/testing-integration.md +564 -0
  262. package/docs/triggers.md +450 -0
  263. package/docs/zero.md +719 -0
  264. package/package.json +76 -0
  265. package/scripts/seed.ts +209 -0
  266. package/src/cli.ts +147 -0
  267. package/src/commands/changed.ts +313 -0
  268. package/src/commands/docs.ts +582 -0
  269. package/src/commands/env-setup.ts +69 -0
  270. package/src/commands/onboard.ts +1391 -0
  271. package/src/commands/run.ts +173 -0
  272. package/src/commands/script.ts +587 -0
  273. package/src/commands/sync.ts +305 -0
  274. package/src/constants/ascii.ts +17 -0
  275. package/src/index.ts +63 -0
  276. package/src/types.ts +59 -0
  277. package/src/utils/env-categories.ts +245 -0
  278. package/src/utils/env-setup.ts +338 -0
  279. package/src/utils/env.ts +127 -0
  280. package/src/utils/files.ts +302 -0
  281. package/src/utils/parallel-runner.ts +129 -0
  282. package/src/utils/ports.ts +77 -0
  283. package/src/utils/prerequisites.ts +137 -0
  284. package/src/utils/prompts.ts +197 -0
  285. package/src/utils/script-listing.ts +214 -0
  286. package/src/utils/sync.ts +101 -0
  287. package/src/withOpSqliteStatic.cjs +51 -0
  288. package/types/cli.d.ts +7 -0
  289. package/types/cli.d.ts.map +1 -0
  290. package/types/commands/changed.d.ts +14 -0
  291. package/types/commands/changed.d.ts.map +1 -0
  292. package/types/commands/docs.d.ts +5 -0
  293. package/types/commands/docs.d.ts.map +1 -0
  294. package/types/commands/env-setup.d.ts +25 -0
  295. package/types/commands/env-setup.d.ts.map +1 -0
  296. package/types/commands/onboard.d.ts +16 -0
  297. package/types/commands/onboard.d.ts.map +1 -0
  298. package/types/commands/run.d.ts +8 -0
  299. package/types/commands/run.d.ts.map +1 -0
  300. package/types/commands/script.d.ts +28 -0
  301. package/types/commands/script.d.ts.map +1 -0
  302. package/types/commands/sync.d.ts +5 -0
  303. package/types/commands/sync.d.ts.map +1 -0
  304. package/types/constants/ascii.d.ts +6 -0
  305. package/types/constants/ascii.d.ts.map +1 -0
  306. package/types/index.d.ts +12 -0
  307. package/types/index.d.ts.map +1 -0
  308. package/types/types.d.ts +54 -0
  309. package/types/types.d.ts.map +1 -0
  310. package/types/utils/env-categories.d.ts +8 -0
  311. package/types/utils/env-categories.d.ts.map +1 -0
  312. package/types/utils/env-setup.d.ts +10 -0
  313. package/types/utils/env-setup.d.ts.map +1 -0
  314. package/types/utils/env.d.ts +19 -0
  315. package/types/utils/env.d.ts.map +1 -0
  316. package/types/utils/files.d.ts +47 -0
  317. package/types/utils/files.d.ts.map +1 -0
  318. package/types/utils/parallel-runner.d.ts +15 -0
  319. package/types/utils/parallel-runner.d.ts.map +1 -0
  320. package/types/utils/ports.d.ts +16 -0
  321. package/types/utils/ports.d.ts.map +1 -0
  322. package/types/utils/prerequisites.d.ts +11 -0
  323. package/types/utils/prerequisites.d.ts.map +1 -0
  324. package/types/utils/prompts.d.ts +30 -0
  325. package/types/utils/prompts.d.ts.map +1 -0
  326. package/types/utils/script-listing.d.ts +7 -0
  327. package/types/utils/script-listing.d.ts.map +1 -0
  328. package/types/utils/sync.d.ts +16 -0
  329. package/types/utils/sync.d.ts.map +1 -0
  330. package/types/utils/welcome.d.ts +6 -0
  331. package/types/utils/welcome.d.ts.map +1 -0
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@take-out/cli",
3
+ "version": "0.0.39",
4
+ "description": "CLI tools for Takeout starter kit - interactive onboarding and project setup",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "source": "src/index.ts",
8
+ "main": "dist/cjs",
9
+ "module": "dist/esm",
10
+ "types": "./types/index.d.ts",
11
+ "bin": {
12
+ "takeout": "./cli.mjs",
13
+ "tko": "./cli.mjs"
14
+ },
15
+ "files": [
16
+ "src",
17
+ "types",
18
+ "dist",
19
+ "docs",
20
+ "scripts",
21
+ "cli.mjs"
22
+ ],
23
+ "exports": {
24
+ "./package.json": "./package.json",
25
+ ".": {
26
+ "types": "./types/index.d.ts",
27
+ "import": "./dist/esm/index.mjs",
28
+ "require": "./dist/cjs/index.cjs"
29
+ },
30
+ "./utils/*": {
31
+ "types": "./types/utils/*.d.ts",
32
+ "import": "./dist/esm/utils/*.mjs",
33
+ "require": "./dist/cjs/utils/*.cjs"
34
+ },
35
+ "./constants/*": {
36
+ "types": "./types/constants/*.d.ts",
37
+ "import": "./dist/esm/constants/*.mjs",
38
+ "require": "./dist/cjs/constants/*.cjs"
39
+ },
40
+ "./withOpSqliteStatic": "./src/withOpSqliteStatic.cjs"
41
+ },
42
+ "scripts": {
43
+ "build": "tamagui-build",
44
+ "watch": "tamagui-build --watch",
45
+ "typecheck": "tko run typecheck",
46
+ "lint": "oxlint src",
47
+ "lint:fix": "oxfmt src && oxlint --fix --fix-suggestions src",
48
+ "clean": "tamagui-build clean",
49
+ "clean:build": "tamagui-build clean:build",
50
+ "dev": "bun --watch src/cli.ts"
51
+ },
52
+ "dependencies": {
53
+ "@clack/prompts": "^0.8.2",
54
+ "@take-out/scripts": "0.0.39",
55
+ "citty": "^0.1.6",
56
+ "picocolors": "^1.1.1"
57
+ },
58
+ "peerDependencies": {
59
+ "@expo/config-plugins": "*"
60
+ },
61
+ "peerDependenciesMeta": {
62
+ "@expo/config-plugins": {
63
+ "optional": true
64
+ }
65
+ },
66
+ "devDependencies": {
67
+ "@tamagui/build": "1.135.2",
68
+ "@types/node": "24.0.3",
69
+ "bun-types": "latest",
70
+ "oxfmt": "^0.16.0",
71
+ "oxlint": "^1.31.0"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
75
+ }
76
+ }
@@ -0,0 +1,209 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * @description Seed database with demo users and posts
5
+ *
6
+ * run: NODE_TLS_REJECT_UNAUTHORIZED=0 bun run:prod packages/takeout/scripts/seed.ts
7
+ *
8
+ * this is just for the demo takeout site, not intended for use in your own app
9
+ */
10
+
11
+ // allow self-signed certs for managed databases
12
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
13
+
14
+ import { Pool } from 'pg'
15
+
16
+ const connectionString = process.env.ZERO_UPSTREAM_DB
17
+ if (!connectionString) {
18
+ throw new Error('ZERO_UPSTREAM_DB not set')
19
+ }
20
+
21
+ // only use ssl for non-localhost connections
22
+ const isLocalhost =
23
+ connectionString.includes('localhost') || connectionString.includes('127.0.0.1')
24
+ const pool = new Pool({
25
+ connectionString,
26
+ ssl: isLocalhost ? false : { rejectUnauthorized: false },
27
+ })
28
+
29
+ const seedUsers = [
30
+ {
31
+ id: 'seed-user-1',
32
+ name: 'Sarah Chen',
33
+ username: 'sarahc',
34
+ email: 'sarah@example.com',
35
+ image: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400',
36
+ },
37
+ {
38
+ id: 'seed-user-2',
39
+ name: 'Marcus Johnson',
40
+ username: 'marcusj',
41
+ email: 'marcus@example.com',
42
+ image: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400',
43
+ },
44
+ {
45
+ id: 'seed-user-3',
46
+ name: 'Emma Wilson',
47
+ username: 'emmaw',
48
+ email: 'emma@example.com',
49
+ image: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=400',
50
+ },
51
+ {
52
+ id: 'seed-user-4',
53
+ name: 'Alex Rivera',
54
+ username: 'alexr',
55
+ email: 'alex@example.com',
56
+ image: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=400',
57
+ },
58
+ ]
59
+
60
+ const seedPosts = [
61
+ {
62
+ id: 'seed-post-1',
63
+ userId: 'seed-user-1',
64
+ image: 'https://images.unsplash.com/photo-1511920170033-f8396924c348?w=1200',
65
+ caption: 'morning coffee vibes',
66
+ },
67
+ {
68
+ id: 'seed-post-2',
69
+ userId: 'seed-user-2',
70
+ image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1200',
71
+ caption: 'caught this sunset on my hike today',
72
+ },
73
+ {
74
+ id: 'seed-post-3',
75
+ userId: 'seed-user-3',
76
+ image: 'https://images.unsplash.com/photo-1552053831-71594a27632d?w=1200',
77
+ caption: 'someone wanted to say hi',
78
+ },
79
+ {
80
+ id: 'seed-post-4',
81
+ userId: 'seed-user-4',
82
+ image: 'https://images.unsplash.com/photo-1480714378408-67cf0d13bc1b?w=1200',
83
+ caption: 'city lights never get old',
84
+ },
85
+ ]
86
+
87
+ const seedComments = [
88
+ {
89
+ id: 'seed-comment-1',
90
+ postId: 'seed-post-1',
91
+ userId: 'seed-user-2',
92
+ content: 'love this! ☕',
93
+ },
94
+ {
95
+ id: 'seed-comment-2',
96
+ postId: 'seed-post-1',
97
+ userId: 'seed-user-3',
98
+ content: 'perfect way to start the day',
99
+ },
100
+ {
101
+ id: 'seed-comment-3',
102
+ postId: 'seed-post-2',
103
+ userId: 'seed-user-1',
104
+ content: 'stunning view!',
105
+ },
106
+ {
107
+ id: 'seed-comment-4',
108
+ postId: 'seed-post-2',
109
+ userId: 'seed-user-4',
110
+ content: 'where is this?',
111
+ },
112
+ {
113
+ id: 'seed-comment-5',
114
+ postId: 'seed-post-2',
115
+ userId: 'seed-user-3',
116
+ content: 'need to visit',
117
+ },
118
+ {
119
+ id: 'seed-comment-6',
120
+ postId: 'seed-post-3',
121
+ userId: 'seed-user-1',
122
+ content: 'so cute!',
123
+ },
124
+ {
125
+ id: 'seed-comment-7',
126
+ postId: 'seed-post-3',
127
+ userId: 'seed-user-2',
128
+ content: 'adorable 🐕',
129
+ },
130
+ {
131
+ id: 'seed-comment-8',
132
+ postId: 'seed-post-4',
133
+ userId: 'seed-user-3',
134
+ content: 'great shot',
135
+ },
136
+ ]
137
+
138
+ async function seed() {
139
+ const now = new Date().toISOString()
140
+
141
+ // demo user is created lazily via signInAsDemo helper, no need to seed it
142
+
143
+ console.info('seeding users...')
144
+
145
+ for (const u of seedUsers) {
146
+ const postsCount = seedPosts.filter((p) => p.userId === u.id).length
147
+
148
+ // insert into private user table (auth)
149
+ await pool.query(
150
+ `INSERT INTO "user" (id, name, username, email, "emailVerified", image, role)
151
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
152
+ ON CONFLICT (id) DO NOTHING`,
153
+ [u.id, u.name, u.username, u.email, true, u.image, 'user']
154
+ )
155
+
156
+ // insert into public user table
157
+ await pool.query(
158
+ `INSERT INTO "userPublic" (id, name, username, image, "joinedAt", "hasOnboarded", whitelisted, "migrationVersion", "postsCount")
159
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
160
+ ON CONFLICT (id) DO NOTHING`,
161
+ [u.id, u.name, u.username, u.image, now, true, true, 0, postsCount]
162
+ )
163
+
164
+ // insert user state
165
+ await pool.query(
166
+ `INSERT INTO "userState" ("userId", "darkMode", locale, "timeZone", "onlineStatus")
167
+ VALUES ($1, $2, $3, $4, $5)
168
+ ON CONFLICT ("userId") DO NOTHING`,
169
+ [u.id, false, 'en', 'UTC', 'online']
170
+ )
171
+
172
+ console.info(` created user: ${u.username}`)
173
+ }
174
+
175
+ console.info('seeding posts...')
176
+
177
+ for (const p of seedPosts) {
178
+ await pool.query(
179
+ `INSERT INTO post (id, "userId", image, caption, "hiddenByAdmin", "createdAt", "commentCount")
180
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
181
+ ON CONFLICT (id) DO NOTHING`,
182
+ [p.id, p.userId, p.image, p.caption, false, now, 0]
183
+ )
184
+
185
+ console.info(` created post: ${p.id}`)
186
+ }
187
+
188
+ console.info('seeding comments...')
189
+
190
+ for (const c of seedComments) {
191
+ await pool.query(
192
+ `INSERT INTO comment (id, "postId", "userId", content, "createdAt")
193
+ VALUES ($1, $2, $3, $4, $5)
194
+ ON CONFLICT (id) DO NOTHING`,
195
+ [c.id, c.postId, c.userId, c.content, now]
196
+ )
197
+
198
+ console.info(` created comment: ${c.id}`)
199
+ }
200
+
201
+ console.info('done!')
202
+ await pool.end()
203
+ process.exit(0)
204
+ }
205
+
206
+ seed().catch((err) => {
207
+ console.error('seed failed:', err)
208
+ process.exit(1)
209
+ })
package/src/cli.ts ADDED
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Takeout CLI
5
+ * Interactive tools for Takeout starter kit setup and management
6
+ */
7
+
8
+ import { existsSync, statSync } from 'node:fs'
9
+ import { join } from 'node:path'
10
+
11
+ import { defineCommand, runMain } from 'citty'
12
+
13
+ import { changedCommand } from './commands/changed'
14
+ import { docsCommand } from './commands/docs'
15
+ import { envSetupCommand } from './commands/env-setup'
16
+ import { onboardCommand } from './commands/onboard'
17
+ import { runCommand } from './commands/run'
18
+ import { scriptCommand } from './commands/script'
19
+ import { syncCommand } from './commands/sync'
20
+ import { listAllScripts } from './utils/script-listing'
21
+
22
+ // check if a directory exists in scripts folder (lazy check)
23
+ function isScriptCategory(name: string): boolean {
24
+ const scriptsDir = join(process.cwd(), 'scripts')
25
+ const categoryPath = join(scriptsDir, name)
26
+
27
+ try {
28
+ return existsSync(categoryPath) && statSync(categoryPath).isDirectory()
29
+ } catch {
30
+ return false
31
+ }
32
+ }
33
+
34
+ // check if a name is a local script in ./scripts/
35
+ function isLocalScript(name: string): boolean {
36
+ const scriptsDir = join(process.cwd(), 'scripts')
37
+ const normalizedName = name.replace(/:/g, '/')
38
+
39
+ for (const ext of ['.ts', '.js', '']) {
40
+ const scriptPath = join(scriptsDir, `${normalizedName}${ext}`)
41
+ if (existsSync(scriptPath)) {
42
+ return true
43
+ }
44
+ }
45
+
46
+ return false
47
+ }
48
+
49
+ // check if a name could be a built-in script
50
+ function isBuiltInScript(name: string): boolean {
51
+ try {
52
+ const resolved = import.meta.resolve('@take-out/scripts/package.json')
53
+ const packageJsonPath = new URL(resolved).pathname
54
+ const packageRoot = join(packageJsonPath, '..')
55
+ const srcPath = join(packageRoot, 'src')
56
+
57
+ // normalize name: convert colons to slashes
58
+ const normalizedName = name.replace(/:/g, '/')
59
+
60
+ // check if the script file exists
61
+ for (const ext of ['.ts', '.js', '']) {
62
+ const scriptPath = join(srcPath, `${normalizedName}${ext}`)
63
+ if (existsSync(scriptPath)) {
64
+ return true
65
+ }
66
+ }
67
+ } catch {
68
+ // package not found or error resolving
69
+ }
70
+
71
+ return false
72
+ }
73
+
74
+ // detect if running as tko (shorthand mode)
75
+ const isShorthand =
76
+ process.argv[1]?.endsWith('tko') || process.argv[1]?.includes('/.bin/tko')
77
+
78
+ if (isShorthand) {
79
+ // in shorthand mode, treat first arg as potential script command
80
+ const firstArg = process.argv[2]
81
+ const secondArg = process.argv[3]
82
+ const builtInCommands = [
83
+ 'docs',
84
+ 'onboard',
85
+ 'run',
86
+ 'script',
87
+ 'env:setup',
88
+ 'sync',
89
+ 'changed',
90
+ '--help',
91
+ '-h',
92
+ '--version',
93
+ '-v',
94
+ ]
95
+
96
+ if (firstArg && !builtInCommands.includes(firstArg)) {
97
+ // check if it's a script category or has a slash (category/script format)
98
+ // Do a lazy check only on the specific arg, not scanning all directories
99
+ if (isScriptCategory(firstArg)) {
100
+ // If there's a second arg, treat it as a script within the category
101
+ // e.g., "tko aws health" becomes "tko run aws/health"
102
+ if (secondArg && !secondArg.startsWith('-')) {
103
+ // Replace the two args with the combined path
104
+ process.argv.splice(2, 2, `${firstArg}/${secondArg}`)
105
+ }
106
+ // inject "run" into args to use the run command directly
107
+ process.argv.splice(2, 0, 'run')
108
+ } else if (firstArg?.includes('/')) {
109
+ // inject "run" into args to use the run command directly
110
+ process.argv.splice(2, 0, 'run')
111
+ } else if (isLocalScript(firstArg) || isBuiltInScript(firstArg)) {
112
+ // check if it's a local or built-in script (like update-deps, clean, etc.)
113
+ // use "run" to avoid citty parsing issues with hyphens
114
+ process.argv.splice(2, 0, 'run')
115
+ } else {
116
+ // assume it's a script command, inject "script" into args
117
+ process.argv.splice(2, 0, 'script')
118
+ }
119
+ }
120
+ }
121
+
122
+ const main = defineCommand({
123
+ meta: {
124
+ name: isShorthand ? 'tko' : 'takeout',
125
+ version: '0.0.2',
126
+ description: 'CLI tools for Takeout starter kit',
127
+ },
128
+ subCommands: {
129
+ onboard: onboardCommand,
130
+ docs: docsCommand,
131
+ 'env:setup': envSetupCommand,
132
+ run: runCommand,
133
+ script: scriptCommand,
134
+ sync: syncCommand,
135
+ changed: changedCommand,
136
+ },
137
+ run() {
138
+ // only show available scripts when running tko with truly no arguments
139
+ // check if process.argv has any arguments after the command name
140
+ const hasArgs = process.argv.length > 2
141
+ if (!hasArgs) {
142
+ listAllScripts()
143
+ }
144
+ },
145
+ })
146
+
147
+ runMain(main)