instant-cli 0.22.177 → 0.22.178

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 (213) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/__tests__/e2e/cli.e2e.test.ts +3 -3
  3. package/__tests__/e2e/helpers.ts +1 -1
  4. package/__tests__/effectHelpers.ts +45 -0
  5. package/__tests__/mergeSchema.test.ts +2 -2
  6. package/dist/commands/claim.d.ts +6 -0
  7. package/dist/commands/claim.d.ts.map +1 -0
  8. package/dist/commands/claim.js +22 -0
  9. package/dist/commands/claim.js.map +1 -0
  10. package/dist/commands/explorer.d.ts +6 -0
  11. package/dist/commands/explorer.d.ts.map +1 -0
  12. package/dist/commands/explorer.js +13 -0
  13. package/dist/commands/explorer.js.map +1 -0
  14. package/dist/commands/info.d.ts +3 -0
  15. package/dist/commands/info.d.ts.map +1 -0
  16. package/dist/commands/info.js +24 -0
  17. package/dist/commands/info.js.map +1 -0
  18. package/dist/commands/init.d.ts +5 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +39 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/initWithoutFiles.d.ts +6 -0
  23. package/dist/commands/initWithoutFiles.d.ts.map +1 -0
  24. package/dist/commands/initWithoutFiles.js +64 -0
  25. package/dist/commands/initWithoutFiles.js.map +1 -0
  26. package/dist/commands/login.d.ts +9 -0
  27. package/dist/commands/login.d.ts.map +1 -0
  28. package/dist/commands/login.js +52 -0
  29. package/dist/commands/login.js.map +1 -0
  30. package/dist/commands/logout.d.ts +4 -0
  31. package/dist/commands/logout.d.ts.map +1 -0
  32. package/dist/commands/logout.js +21 -0
  33. package/dist/commands/logout.js.map +1 -0
  34. package/dist/commands/pull.d.ts +6 -0
  35. package/dist/commands/pull.d.ts.map +1 -0
  36. package/dist/commands/pull.js +16 -0
  37. package/dist/commands/pull.js.map +1 -0
  38. package/dist/commands/push.d.ts +6 -0
  39. package/dist/commands/push.d.ts.map +1 -0
  40. package/dist/commands/push.js +20 -0
  41. package/dist/commands/push.js.map +1 -0
  42. package/dist/commands/query.d.ts +7 -0
  43. package/dist/commands/query.d.ts.map +1 -0
  44. package/dist/commands/query.js +52 -0
  45. package/dist/commands/query.js.map +1 -0
  46. package/dist/context/authToken.d.ts +30 -0
  47. package/dist/context/authToken.d.ts.map +1 -0
  48. package/dist/context/authToken.js +86 -0
  49. package/dist/context/authToken.js.map +1 -0
  50. package/dist/context/currentApp.d.ts +37 -0
  51. package/dist/context/currentApp.d.ts.map +1 -0
  52. package/dist/context/currentApp.js +204 -0
  53. package/dist/context/currentApp.js.map +1 -0
  54. package/dist/context/globalOpts.d.ts +11 -0
  55. package/dist/context/globalOpts.d.ts.map +1 -0
  56. package/dist/context/globalOpts.js +13 -0
  57. package/dist/context/globalOpts.js.map +1 -0
  58. package/dist/context/platformApi.d.ts +19 -0
  59. package/dist/context/platformApi.d.ts.map +1 -0
  60. package/dist/context/platformApi.js +24 -0
  61. package/dist/context/platformApi.js.map +1 -0
  62. package/dist/context/projectInfo.d.ts +29 -0
  63. package/dist/context/projectInfo.d.ts.map +1 -0
  64. package/dist/context/projectInfo.js +149 -0
  65. package/dist/context/projectInfo.js.map +1 -0
  66. package/dist/errors.d.ts +10 -0
  67. package/dist/errors.d.ts.map +1 -0
  68. package/dist/errors.js +6 -0
  69. package/dist/errors.js.map +1 -0
  70. package/dist/index.d.ts +41 -7
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +169 -1781
  73. package/dist/index.js.map +1 -1
  74. package/dist/layer.d.ts +23 -0
  75. package/dist/layer.d.ts.map +1 -0
  76. package/dist/layer.js +68 -0
  77. package/dist/layer.js.map +1 -0
  78. package/dist/lib/createApp.d.ts +12 -0
  79. package/dist/lib/createApp.d.ts.map +1 -0
  80. package/dist/lib/createApp.js +15 -0
  81. package/dist/lib/createApp.js.map +1 -0
  82. package/dist/lib/handleEnv.d.ts +7 -0
  83. package/dist/lib/handleEnv.d.ts.map +1 -0
  84. package/dist/lib/handleEnv.js +91 -0
  85. package/dist/lib/handleEnv.js.map +1 -0
  86. package/dist/lib/http.d.ts +32 -0
  87. package/dist/lib/http.d.ts.map +1 -0
  88. package/dist/lib/http.js +67 -0
  89. package/dist/lib/http.js.map +1 -0
  90. package/dist/lib/login.d.ts +13 -0
  91. package/dist/lib/login.d.ts.map +1 -0
  92. package/dist/lib/login.js +39 -0
  93. package/dist/lib/login.js.map +1 -0
  94. package/dist/lib/pullPerms.d.ts +7 -0
  95. package/dist/lib/pullPerms.d.ts.map +1 -0
  96. package/dist/lib/pullPerms.js +41 -0
  97. package/dist/lib/pullPerms.js.map +1 -0
  98. package/dist/lib/pullSchema.d.ts +12 -0
  99. package/dist/lib/pullSchema.d.ts.map +1 -0
  100. package/dist/lib/pullSchema.js +62 -0
  101. package/dist/lib/pullSchema.js.map +1 -0
  102. package/dist/lib/pushPerms.d.ts +13 -0
  103. package/dist/lib/pushPerms.d.ts.map +1 -0
  104. package/dist/lib/pushPerms.js +54 -0
  105. package/dist/lib/pushPerms.js.map +1 -0
  106. package/dist/lib/pushSchema.d.ts +53 -0
  107. package/dist/lib/pushSchema.d.ts.map +1 -0
  108. package/dist/lib/pushSchema.js +160 -0
  109. package/dist/lib/pushSchema.js.map +1 -0
  110. package/dist/lib/ui.d.ts +16 -0
  111. package/dist/lib/ui.d.ts.map +1 -0
  112. package/dist/lib/ui.js +22 -0
  113. package/dist/lib/ui.js.map +1 -0
  114. package/dist/logging.d.ts +4 -0
  115. package/dist/logging.d.ts.map +1 -0
  116. package/dist/logging.js +17 -0
  117. package/dist/logging.js.map +1 -0
  118. package/dist/old.d.ts +14 -0
  119. package/dist/old.d.ts.map +1 -0
  120. package/dist/old.js +417 -0
  121. package/dist/old.js.map +1 -0
  122. package/dist/program.d.ts +3 -0
  123. package/dist/program.d.ts.map +1 -0
  124. package/dist/program.js +3 -0
  125. package/dist/program.js.map +1 -0
  126. package/dist/renderSchemaPlan.d.ts +3 -3
  127. package/dist/renderSchemaPlan.d.ts.map +1 -1
  128. package/dist/renderSchemaPlan.js +2 -14
  129. package/dist/renderSchemaPlan.js.map +1 -1
  130. package/dist/ui/index.d.ts +4 -3
  131. package/dist/ui/index.d.ts.map +1 -1
  132. package/dist/ui/index.js +2 -2
  133. package/dist/ui/index.js.map +1 -1
  134. package/dist/ui/lib.js +1 -0
  135. package/dist/ui/lib.js.map +1 -1
  136. package/dist/util/findConfigCandidates.d.ts +1 -1
  137. package/dist/util/findConfigCandidates.d.ts.map +1 -1
  138. package/dist/util/findConfigCandidates.js +1 -3
  139. package/dist/util/findConfigCandidates.js.map +1 -1
  140. package/dist/util/fs.d.ts +1 -1
  141. package/dist/util/fs.d.ts.map +1 -1
  142. package/dist/util/fs.js.map +1 -1
  143. package/dist/util/getAuthPaths.d.ts.map +1 -1
  144. package/dist/util/getAuthPaths.js.map +1 -1
  145. package/dist/util/isHeadlessEnvironment.d.ts +3 -1
  146. package/dist/util/isHeadlessEnvironment.d.ts.map +1 -1
  147. package/dist/util/isHeadlessEnvironment.js.map +1 -1
  148. package/dist/util/loadConfig.d.ts +1 -1
  149. package/dist/util/loadConfig.d.ts.map +1 -1
  150. package/dist/util/loadConfig.js +2 -2
  151. package/dist/util/loadConfig.js.map +1 -1
  152. package/dist/util/mergeSchema.d.ts +9 -1
  153. package/dist/util/mergeSchema.d.ts.map +1 -1
  154. package/dist/util/mergeSchema.js +4 -0
  155. package/dist/util/mergeSchema.js.map +1 -1
  156. package/dist/util/renamePrompt.d.ts +2 -1
  157. package/dist/util/renamePrompt.d.ts.map +1 -1
  158. package/dist/util/renamePrompt.js +1 -1
  159. package/dist/util/renamePrompt.js.map +1 -1
  160. package/package.json +17 -7
  161. package/src/commands/claim.ts +31 -0
  162. package/src/commands/explorer.ts +21 -0
  163. package/src/commands/info.ts +34 -0
  164. package/src/commands/init.ts +58 -0
  165. package/src/commands/initWithoutFiles.ts +107 -0
  166. package/src/commands/login.ts +76 -0
  167. package/src/commands/logout.ts +23 -0
  168. package/src/commands/pull.ts +23 -0
  169. package/src/commands/push.ts +25 -0
  170. package/src/commands/query.ts +61 -0
  171. package/src/context/authToken.ts +149 -0
  172. package/src/context/currentApp.ts +277 -0
  173. package/src/context/globalOpts.ts +22 -0
  174. package/src/context/platformApi.ts +35 -0
  175. package/src/context/projectInfo.ts +215 -0
  176. package/src/errors.ts +7 -0
  177. package/src/index.ts +428 -0
  178. package/src/layer.ts +155 -0
  179. package/src/lib/createApp.ts +28 -0
  180. package/src/lib/handleEnv.ts +115 -0
  181. package/src/lib/http.ts +148 -0
  182. package/src/lib/login.ts +54 -0
  183. package/src/lib/pullPerms.ts +50 -0
  184. package/src/lib/pullSchema.ts +95 -0
  185. package/src/lib/pushPerms.ts +80 -0
  186. package/src/lib/pushSchema.ts +240 -0
  187. package/src/lib/ui.ts +36 -0
  188. package/src/logging.ts +32 -0
  189. package/src/old.js +495 -0
  190. package/src/program.ts +3 -0
  191. package/src/renderSchemaPlan.ts +6 -18
  192. package/src/ui/index.ts +4 -3
  193. package/src/util/findConfigCandidates.ts +1 -2
  194. package/src/util/fs.ts +1 -1
  195. package/src/util/getAuthPaths.ts +1 -0
  196. package/src/util/isHeadlessEnvironment.ts +1 -1
  197. package/src/util/loadConfig.ts +3 -6
  198. package/src/util/{mergeSchema.js → mergeSchema.ts} +26 -16
  199. package/src/util/renamePrompt.ts +2 -1
  200. package/tsconfig.build.json +20 -0
  201. package/tsconfig.json +15 -5
  202. package/vitest.config.ts +2 -1
  203. package/dist/util/packageManager.d.ts +0 -3
  204. package/dist/util/packageManager.d.ts.map +0 -1
  205. package/dist/util/packageManager.js +0 -70
  206. package/dist/util/packageManager.js.map +0 -1
  207. package/dist/util/promptOk.d.ts +0 -4
  208. package/dist/util/promptOk.d.ts.map +0 -1
  209. package/dist/util/promptOk.js +0 -18
  210. package/dist/util/promptOk.js.map +0 -1
  211. package/src/index.js +0 -2333
  212. package/src/util/packageManager.js +0 -78
  213. package/src/util/promptOk.ts +0 -26
@@ -0,0 +1,149 @@
1
+ import { Context, Data, Effect, Layer } from 'effect';
2
+ import { detect } from 'package-manager-detector/detect';
3
+ import { readPackage } from 'pkg-types';
4
+ import { exec } from 'child_process';
5
+ import { promisify } from 'util';
6
+ import { UI } from "../ui/index.js";
7
+ import { findProjectDir } from "../util/projectDir.js";
8
+ import { runUIEffect } from "../lib/ui.js";
9
+ import chalk from 'chalk';
10
+ import { GlobalOpts } from "./globalOpts.js";
11
+ import { BadArgsError } from "../errors.js";
12
+ export class ProjectInfo extends Context.Tag('instant-cli/new/context/projectInfo')() {
13
+ }
14
+ const execAsync = promisify(exec);
15
+ export const PACKAGE_ALIAS_AND_FULL_NAMES = {
16
+ react: '@instantdb/react',
17
+ 'react-native': '@instantdb/react-native',
18
+ core: '@instantdb/core',
19
+ admin: '@instantdb/admin',
20
+ solid: '@instantdb/solidjs',
21
+ svelte: '@instantdb/svelte',
22
+ };
23
+ export class ProjectInfoError extends Data.TaggedError('ProjectInfoError') {
24
+ }
25
+ const getProjectInfo = (coerce = true, packageName) => Effect.gen(function* () {
26
+ const projectDir = yield* Effect.tryPromise({
27
+ try: () => findProjectDir(),
28
+ catch: (e) => new ProjectInfoError({ message: "Couldn't get project dir" }),
29
+ });
30
+ if (!projectDir) {
31
+ return yield* new ProjectInfoError({
32
+ message: "Couldn't find a project directory (package.json). Is there a package.json or deno.json file?",
33
+ });
34
+ }
35
+ if (projectDir.type === 'deno') {
36
+ return {
37
+ pkgDir: projectDir.dir,
38
+ projectType: projectDir.type,
39
+ instantModuleName: '@instantdb/core',
40
+ };
41
+ }
42
+ const pkgJson = yield* Effect.tryPromise({
43
+ try: () => readPackage(),
44
+ catch: () => new ProjectInfoError({
45
+ message: "We couldn't find an Instant SDK. Install one, or run `init`",
46
+ }),
47
+ });
48
+ yield* Effect.log('Checking for an Instant SDK...');
49
+ let moduleName = getInstantModuleName(pkgJson);
50
+ if (!moduleName && !coerce) {
51
+ return yield* new ProjectInfoError({
52
+ message: "We couldn't find an Instant SDK. Install one, or run `init`",
53
+ });
54
+ }
55
+ if (!moduleName && coerce) {
56
+ yield* Effect.log("Couldn't find an Instant SDK in your package.json, let's install one!");
57
+ }
58
+ else {
59
+ yield* Effect.log(`Found ${chalk.green(moduleName)} in your package.json.\n`);
60
+ }
61
+ // TODO: Clean up with option
62
+ const packageManager = yield* Effect.tryPromise(() => detect()).pipe(Effect.flatMap(Effect.fromNullable), Effect.catchTag('NoSuchElementException', () => Effect.succeed({
63
+ name: 'npm',
64
+ agent: 'npm',
65
+ })), Effect.option);
66
+ const { yes } = yield* GlobalOpts;
67
+ if (!moduleName && coerce) {
68
+ // install the packages
69
+ if (packageName) {
70
+ moduleName = PACKAGE_ALIAS_AND_FULL_NAMES[packageName];
71
+ }
72
+ else {
73
+ if (yes) {
74
+ return yield* BadArgsError.make({
75
+ message: '--yes was provided without a package specification and no Instant SDK was found',
76
+ });
77
+ }
78
+ moduleName = yield* runUIEffect(new UI.Select({
79
+ promptText: 'Which package would you like to use?',
80
+ options: [
81
+ { label: '@instantdb/react', value: '@instantdb/react' },
82
+ {
83
+ label: '@instantdb/react-native',
84
+ value: '@instantdb/react-native',
85
+ },
86
+ { label: '@instantdb/core', value: '@instantdb/core' },
87
+ { label: '@instantdb/admin', value: '@instantdb/admin' },
88
+ { label: '@instantdb/solidjs', value: '@instantdb/solidjs' },
89
+ { label: '@instantdb/svelte', value: '@instantdb/svelte' },
90
+ ],
91
+ })).pipe(Effect.flatMap(Effect.fromNullable), Effect.mapError(() => new ProjectInfoError({
92
+ message: 'Failed to select package',
93
+ })));
94
+ }
95
+ const packagesToInstall = [moduleName];
96
+ if (moduleName === '@instantdb/react-native') {
97
+ packagesToInstall.push('react-native-get-random-values', '@react-native-async-storage/async-storage');
98
+ }
99
+ const pkgManager = yield* packageManager.pipe(Effect.mapError((e) => new ProjectInfoError({
100
+ message: 'Failed to detect package manager',
101
+ cause: e,
102
+ })));
103
+ const installCommand = getInstallCommand(pkgManager.agent, packagesToInstall.join(' '));
104
+ yield* Effect.log(installCommand);
105
+ yield* runUIEffect(new UI.Spinner({
106
+ promise: execAsync(installCommand, {
107
+ cwd: projectDir.dir,
108
+ }),
109
+ errorText: 'Failed to install packages',
110
+ workingText: `Installing ${packagesToInstall.join(', ')} using ${pkgManager.agent}...`,
111
+ doneText: `Installed ${packagesToInstall.join(', ')} using ${pkgManager.agent}.`,
112
+ }));
113
+ return {
114
+ pkgDir: projectDir.dir,
115
+ projectType: projectDir.type,
116
+ instantModuleName: moduleName,
117
+ };
118
+ }
119
+ else {
120
+ return {
121
+ pkgDir: projectDir.dir,
122
+ projectType: projectDir.type,
123
+ instantModuleName: moduleName,
124
+ };
125
+ }
126
+ });
127
+ export const ProjectInfoLive = (coerce = true, packageName) => Layer.effect(ProjectInfo, getProjectInfo(coerce, packageName));
128
+ function getInstantModuleName(pkgJson) {
129
+ const deps = pkgJson.dependencies || {};
130
+ const devDeps = pkgJson.devDependencies || {};
131
+ const instantModuleName = [
132
+ '@instantdb/react',
133
+ '@instantdb/react-native',
134
+ '@instantdb/core',
135
+ '@instantdb/admin',
136
+ '@instantdb/solidjs',
137
+ '@instantdb/svelte',
138
+ ].find((name) => deps[name] || devDeps[name]);
139
+ return instantModuleName;
140
+ }
141
+ function getInstallCommand(packageManager, moduleName) {
142
+ if (packageManager === 'npm') {
143
+ return `npm install ${moduleName}`;
144
+ }
145
+ else {
146
+ return `${packageManager} add ${moduleName}`;
147
+ }
148
+ }
149
+ //# sourceMappingURL=projectInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectInfo.js","sourceRoot":"","sources":["../../src/context/projectInfo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Data, Effect, Layer } from 'effect';\nimport { detect } from 'package-manager-detector/detect';\nimport { readPackage } from 'pkg-types';\nimport type { PackageJson } from 'pkg-types';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { UI } from '../ui/index.ts';\nimport { findProjectDir } from '../util/projectDir.ts';\nimport { runUIEffect } from '../lib/ui.ts';\nimport chalk from 'chalk';\nimport { GlobalOpts } from './globalOpts.ts';\nimport { BadArgsError } from '../errors.ts';\n\nexport class ProjectInfo extends Context.Tag(\n 'instant-cli/new/context/projectInfo',\n)<\n ProjectInfo,\n {\n pkgDir: string;\n projectType: 'node' | 'deno';\n instantModuleName: string;\n }\n>() {}\n\nconst execAsync = promisify(exec);\n\nexport const PACKAGE_ALIAS_AND_FULL_NAMES = {\n react: '@instantdb/react',\n 'react-native': '@instantdb/react-native',\n core: '@instantdb/core',\n admin: '@instantdb/admin',\n solid: '@instantdb/solidjs',\n svelte: '@instantdb/svelte',\n};\n\nexport class ProjectInfoError extends Data.TaggedError('ProjectInfoError')<{\n message: string;\n cause?: unknown;\n}> {}\n\nconst getProjectInfo = (\n coerce: boolean = true,\n packageName?: keyof typeof PACKAGE_ALIAS_AND_FULL_NAMES,\n) =>\n Effect.gen(function* () {\n const projectDir = yield* Effect.tryPromise({\n try: () => findProjectDir(),\n catch: (e) =>\n new ProjectInfoError({ message: \"Couldn't get project dir\" }),\n });\n\n if (!projectDir) {\n return yield* new ProjectInfoError({\n message:\n \"Couldn't find a project directory (package.json). Is there a package.json or deno.json file?\",\n });\n }\n\n if (projectDir.type === 'deno') {\n return {\n pkgDir: projectDir.dir,\n projectType: projectDir.type,\n instantModuleName: '@instantdb/core',\n };\n }\n\n const pkgJson = yield* Effect.tryPromise({\n try: () => readPackage(),\n catch: () =>\n new ProjectInfoError({\n message:\n \"We couldn't find an Instant SDK. Install one, or run `init`\",\n }),\n });\n\n yield* Effect.log('Checking for an Instant SDK...');\n let moduleName = getInstantModuleName(pkgJson);\n if (!moduleName && !coerce) {\n return yield* new ProjectInfoError({\n message: \"We couldn't find an Instant SDK. Install one, or run `init`\",\n });\n }\n\n if (!moduleName && coerce) {\n yield* Effect.log(\n \"Couldn't find an Instant SDK in your package.json, let's install one!\",\n );\n } else {\n yield* Effect.log(\n `Found ${chalk.green(moduleName)} in your package.json.\\n`,\n );\n }\n\n // TODO: Clean up with option\n const packageManager = yield* Effect.tryPromise(() => detect()).pipe(\n Effect.flatMap(Effect.fromNullable),\n Effect.catchTag('NoSuchElementException', () =>\n Effect.succeed({\n name: 'npm',\n agent: 'npm',\n }),\n ),\n Effect.option,\n );\n\n const { yes } = yield* GlobalOpts;\n if (!moduleName && coerce) {\n // install the packages\n if (packageName) {\n moduleName = PACKAGE_ALIAS_AND_FULL_NAMES[packageName];\n } else {\n if (yes) {\n return yield* BadArgsError.make({\n message:\n '--yes was provided without a package specification and no Instant SDK was found',\n });\n }\n moduleName = yield* runUIEffect(\n new UI.Select({\n promptText: 'Which package would you like to use?',\n options: [\n { label: '@instantdb/react', value: '@instantdb/react' },\n {\n label: '@instantdb/react-native',\n value: '@instantdb/react-native',\n },\n { label: '@instantdb/core', value: '@instantdb/core' },\n { label: '@instantdb/admin', value: '@instantdb/admin' },\n { label: '@instantdb/solidjs', value: '@instantdb/solidjs' },\n { label: '@instantdb/svelte', value: '@instantdb/svelte' },\n ],\n }),\n ).pipe(\n Effect.flatMap(Effect.fromNullable),\n Effect.mapError(\n () =>\n new ProjectInfoError({\n message: 'Failed to select package',\n }),\n ),\n );\n }\n const packagesToInstall = [moduleName];\n if (moduleName === '@instantdb/react-native') {\n packagesToInstall.push(\n 'react-native-get-random-values',\n '@react-native-async-storage/async-storage',\n );\n }\n\n const pkgManager = yield* packageManager.pipe(\n Effect.mapError(\n (e) =>\n new ProjectInfoError({\n message: 'Failed to detect package manager',\n cause: e,\n }),\n ),\n );\n\n const installCommand = getInstallCommand(\n pkgManager.agent,\n packagesToInstall.join(' '),\n );\n yield* Effect.log(installCommand);\n yield* runUIEffect(\n new UI.Spinner({\n promise: execAsync(installCommand, {\n cwd: projectDir.dir,\n }),\n errorText: 'Failed to install packages',\n workingText: `Installing ${packagesToInstall.join(', ')} using ${pkgManager.agent}...`,\n doneText: `Installed ${packagesToInstall.join(', ')} using ${pkgManager.agent}.`,\n }),\n );\n return {\n pkgDir: projectDir.dir,\n projectType: projectDir.type,\n instantModuleName: moduleName,\n };\n } else {\n return {\n pkgDir: projectDir.dir,\n projectType: projectDir.type,\n instantModuleName: moduleName!,\n };\n }\n });\n\nexport const ProjectInfoLive = (\n coerce: boolean = true,\n packageName?: keyof typeof PACKAGE_ALIAS_AND_FULL_NAMES,\n) => Layer.effect(ProjectInfo, getProjectInfo(coerce, packageName));\n\nfunction getInstantModuleName(pkgJson: PackageJson) {\n const deps = pkgJson.dependencies || {};\n const devDeps = pkgJson.devDependencies || {};\n const instantModuleName = [\n '@instantdb/react',\n '@instantdb/react-native',\n '@instantdb/core',\n '@instantdb/admin',\n '@instantdb/solidjs',\n '@instantdb/svelte',\n ].find((name) => deps[name] || devDeps[name]);\n return instantModuleName;\n}\n\nfunction getInstallCommand(packageManager: string, moduleName: string) {\n if (packageManager === 'npm') {\n return `npm install ${moduleName}`;\n } else {\n return `${packageManager} add ${moduleName}`;\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { Schema } from 'effect';
2
+ declare const BadArgsError_base: Schema.TaggedErrorClass<BadArgsError, "BadArgsError", {
3
+ readonly _tag: Schema.tag<"BadArgsError">;
4
+ } & {
5
+ message: typeof Schema.String;
6
+ }>;
7
+ export declare class BadArgsError extends BadArgsError_base {
8
+ }
9
+ export {};
10
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAEhC,qBAAa,YAAa,SAAQ,iBAIhC;CAAG"}
package/dist/errors.js ADDED
@@ -0,0 +1,6 @@
1
+ import { Schema } from 'effect';
2
+ export class BadArgsError extends Schema.TaggedError('BadArgsError')('BadArgsError', {
3
+ message: Schema.String,
4
+ }) {
5
+ }
6
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,CAClD,cAAc,CACf,CAAC,cAAc,EAAE;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG","sourcesContent":["import { Schema } from 'effect';\n\nexport class BadArgsError extends Schema.TaggedError<BadArgsError>(\n 'BadArgsError',\n)('BadArgsError', {\n message: Schema.String,\n}) {}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,42 @@
1
- export function readConfigAuthTokenWithErrorLogging(): Promise<string | null>;
2
- export const rels: {
3
- 'many-false': string[];
4
- 'one-true': string[];
5
- 'many-true': string[];
6
- 'one-false': string[];
7
- };
1
+ import { Command } from '@commander-js/extra-typings';
2
+ export type OptsFromCommand<C> = C extends Command<any, infer R, any> ? R : never;
3
+ export declare const initDef: Command<[], {
4
+ app?: string | undefined;
5
+ package?: string | undefined;
6
+ title?: string | undefined;
7
+ }, {}>;
8
+ export declare const initWithoutFilesDef: Command<[], {
9
+ title?: string | undefined;
10
+ orgId?: string | undefined;
11
+ temp?: true | undefined;
12
+ }, {}>;
13
+ export declare const loginDef: Command<[], {
14
+ print?: true | undefined;
15
+ headless?: true | undefined;
16
+ }, {}>;
17
+ export declare const infoDef: Command<[], {}, {}>;
18
+ export declare const explorerDef: Command<[], {
19
+ app?: string | undefined;
20
+ }, {}>;
21
+ export declare const queryDef: Command<[string], {
22
+ app?: string | undefined;
23
+ admin?: true | undefined;
24
+ asEmail?: string | undefined;
25
+ asGuest?: true | undefined;
26
+ asToken?: string | undefined;
27
+ }, {}>;
28
+ export declare const pullDef: Command<[string | undefined], {
29
+ app?: string | undefined;
30
+ package?: string | undefined;
31
+ experimentalTypePreservation?: true | undefined;
32
+ }, {}>;
33
+ export declare const pushDef: Command<[string | undefined], {
34
+ app?: string | undefined;
35
+ skipCheckTypes?: true | undefined;
36
+ rename?: true | string[] | undefined;
37
+ package?: string | undefined;
38
+ }, {}>;
39
+ export declare const claimDef: Command<[], {
40
+ app?: string | undefined;
41
+ }, {}>;
8
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAunEA,8EAQC;AA+ED;;;;;EAKE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAU,MAAM,6BAA6B,CAAC;AAwB9D,MAAM,MAAM,eAAe,CAAC,CAAC,IAC3B,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAiBnD,eAAO,MAAM,OAAO;;;;MA2BhB,CAAC;AAEL,eAAO,MAAM,mBAAmB;;;;MAgB5B,CAAC;AAEL,eAAO,MAAM,QAAQ;;;MAYjB,CAAC;AAWL,eAAO,MAAM,OAAO,qBAchB,CAAC;AAEL,eAAO,MAAM,WAAW;;MAmBpB,CAAC;AAEL,eAAO,MAAM,QAAQ;;;;;;MAiBjB,CAAC;AAEL,eAAO,MAAM,OAAO;;;;MA4ChB,CAAC;AAEL,eAAO,MAAM,OAAO;;;;;MAgDhB,CAAC;AAEL,eAAO,MAAM,QAAQ;;MAoBjB,CAAC"}