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
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/ui/lib.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReadStream, WriteStream } from 'tty';\nimport { cursor, erase } from 'sisteransi';\nimport throttle from 'lodash.throttle';\nimport readline from 'readline';\n\nconst isWindows = process.platform === 'win32';\n\n/**\n * Set terminal raw mode on stdin, with a Windows workaround.\n *\n * Raw mode (true):\n * - Input available character-by-character (not line-buffered)\n * - No echo of typed characters\n * - Ctrl+C doesn't send SIGINT (must handle manually)\n * - Required to capture arrow keys and other special keys\n *\n * Normal mode (false):\n * - Input is line-buffered (available after Enter)\n * - Typed characters are echoed\n * - Ctrl+C sends SIGINT as normal\n *\n * Windows workaround: We skip disabling raw mode on Windows because\n * toggling it between prompts causes a race condition that breaks\n * subsequent keypress events. Raw mode is automatically reset when\n * the process exits, so this is safe.\n *\n * See: https://github.com/bombshell-dev/clack/issues/176\n */\nexport function setRawModeWindowsFriendly(input: ReadStream, value: boolean) {\n if (!value && isWindows) return;\n input.setRawMode(value);\n}\n\nexport interface Closable {\n close(): void;\n}\n\nexport type ModifyOutputFn = (\n output: string,\n status?: 'idle' | 'submitted' | 'aborted',\n) => string;\n\nexport abstract class Prompt<RESULT> {\n protected terminal: ITerminal | undefined;\n private attachCallbacks: ((terminal: ITerminal) => void)[] = [];\n private detachCallbacks: ((terminal: ITerminal) => void)[] = [];\n private inputCallbacks: ((str: string | undefined, key: AnyKey) => void)[] =\n [];\n\n public modifier: ModifyOutputFn | undefined = undefined;\n\n requestLayout() {\n if (this.terminal) {\n this.terminal!.requestLayout();\n }\n }\n\n constructor(modifier?: ModifyOutputFn) {\n this.modifier = modifier;\n }\n\n on(type: 'attach', callback: (terminal: ITerminal) => void): void;\n on(type: 'detach', callback: (terminal: ITerminal) => void): void;\n on(\n type: 'input',\n callback: (str: string | undefined, key: AnyKey) => void,\n ): void;\n on(type: 'attach' | 'detach' | 'input', callback: any): void {\n if (type === 'attach') {\n this.attachCallbacks.push(callback);\n } else if (type === 'detach') {\n this.detachCallbacks.push(callback);\n } else if (type === 'input') {\n this.inputCallbacks.push(callback);\n }\n }\n\n attach(terminal: ITerminal) {\n this.terminal = terminal;\n this.attachCallbacks.forEach((it) => it(terminal));\n }\n\n detach(terminal: ITerminal) {\n this.detachCallbacks.forEach((it) => it(terminal));\n this.terminal = undefined;\n }\n\n input(str: string | undefined, key: AnyKey) {\n this.inputCallbacks.forEach((it) => it(str, key));\n }\n\n abstract result(): RESULT;\n abstract render(status: 'idle' | 'submitted' | 'aborted'): string;\n fullRender(status: 'idle' | 'submitted' | 'aborted'): string {\n if (this.modifier) {\n return this.modifier(this.render(status), status);\n }\n return this.render(status);\n }\n}\n\nexport class SelectState<T> {\n public selectedIdx = 0;\n constructor(public readonly items: T[]) {}\n\n bind(prompt: Prompt<any>) {\n prompt.on('input', (str, key) => {\n const invalidate = this.consume(str, key);\n if (invalidate) prompt.requestLayout();\n });\n }\n\n private consume(str: string | undefined, key: AnyKey): boolean {\n if (!key) return false;\n\n if (key.name === 'down') {\n this.selectedIdx = (this.selectedIdx + 1) % this.items.length;\n return true;\n }\n\n if (key.name === 'up') {\n this.selectedIdx -= 1;\n this.selectedIdx =\n this.selectedIdx < 0 ? this.items.length - 1 : this.selectedIdx;\n return true;\n }\n\n return false;\n }\n}\n\nexport const deferred = <T>() => {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {\n resolve,\n reject,\n promise,\n };\n};\n\nexport interface ITerminal {\n toggleCursor(state: 'hide' | 'show'): void;\n requestLayout(): void;\n resolve(value: Prompted<{}>): void;\n setAllowInteraction(value: boolean): void;\n}\n\nexport type AnyKey = {\n sequence: string;\n name: string | undefined;\n ctrl: boolean;\n meta: boolean;\n shift: boolean;\n};\n\ntype Prompted<T> =\n | {\n data: undefined;\n status: 'aborted';\n }\n | {\n data: T;\n status: 'submitted';\n };\n\nexport class Terminal implements ITerminal {\n private text = '';\n private status: 'idle' | 'submitted' | 'aborted' = 'idle';\n private _resolve: (value: Prompted<{}>) => void;\n private promise: Promise<Prompted<{}>>;\n private renderFunc: (str: string) => void;\n\n private allowInteraction = true;\n\n public resolve: (value: Prompted<{}>) => void;\n\n public setAllowInteraction(value: boolean) {\n this.allowInteraction = value;\n }\n\n constructor(\n private readonly view: Prompt<any>,\n private readonly stdin: ReadStream,\n private readonly stdout: WriteStream,\n private readonly closable: Closable,\n ) {\n if (this.stdin.isTTY) setRawModeWindowsFriendly(this.stdin, true);\n\n const keypress = (str: string | undefined, key: AnyKey) => {\n if (key.name === 'c' && key.ctrl === true) {\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n if (terminateHandler) {\n terminateHandler(this.stdin, this.stdout);\n return;\n }\n this.stdout.write(`\\n^C\\n`);\n process.exit(1);\n }\n\n if (this.allowInteraction) {\n if (key.name === 'escape') {\n this.status = 'aborted';\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n this._resolve({ status: 'aborted', data: undefined });\n return;\n }\n\n if (key.name === 'return') {\n this.status = 'submitted';\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n this._resolve({ status: 'submitted', data: this.view.result() });\n return;\n }\n }\n\n view.input(str, key);\n };\n\n this.stdin.on('keypress', keypress);\n this.view.attach(this);\n\n const { resolve, promise } = deferred<Prompted<{}>>();\n this._resolve = resolve;\n\n this.resolve = (value: Prompted<{}>) => {\n this.status = 'submitted';\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n this._resolve(value);\n };\n\n this.promise = promise;\n\n this.renderFunc = throttle((str: string) => {\n this.stdout.write(str);\n });\n }\n\n private tearDown(keypress: (...args: any[]) => void) {\n this.stdout.write(cursor.show);\n this.stdin.removeListener('keypress', keypress);\n if (this.stdin.isTTY) setRawModeWindowsFriendly(this.stdin, false);\n this.closable.close();\n }\n\n result(): Promise<{}> {\n return this.promise;\n }\n\n toggleCursor(state: 'hide' | 'show') {\n if (state === 'hide') {\n this.stdout.write(cursor.hide);\n } else {\n this.stdout.write(cursor.show);\n }\n }\n\n requestLayout() {\n const string = this.view.fullRender(this.status);\n let realString = string;\n if (!realString.endsWith('\\n')) {\n realString += '\\n';\n }\n const realText = this.text.endsWith('\\n') ? this.text : `${this.text}\\n`;\n const clearPrefix = this.text ? clear(realText, this.stdout.columns) : '';\n this.text = realString;\n\n this.renderFunc(`${clearPrefix}${realString}`);\n }\n}\n\nexport function render<T>(view: Prompt<T>): Promise<Prompted<T>>;\nexport function render(view: string): void;\nexport function render(view: any): any {\n const { stdin, stdout, closable } = prepareReadLine();\n if (view instanceof Prompt) {\n const terminal = new Terminal(view, stdin, stdout, closable);\n terminal.requestLayout();\n return terminal.result();\n }\n\n stdout.write(`${view}\\n`);\n closable.close();\n return;\n}\n\nexport class CancelledPromptError extends Error {\n constructor(message?: string) {\n super(message);\n this.name = 'CancelledPromptError';\n }\n}\n\n/**\n * Renders a prompt object and throws if the Prompt was \"cancelled\"\n * If using the standard render function you must check if the result ended in a cancellation before accessing the data.\n * Cancellations are rare so this is more of a future proof for future components\n * where cancelling may make more sense.\n */\nexport async function renderUnwrap<T>(view: Prompt<T>): Promise<T> {\n const { stdin, stdout, closable } = prepareReadLine();\n const terminal = new Terminal(view, stdin, stdout, closable);\n terminal.requestLayout();\n const result = (await terminal.result()) as Prompted<T>;\n if (result.status === 'aborted') {\n throw new CancelledPromptError('Prompt was aborted');\n } else {\n // Prompt.result may throw an error but it is swallowed by the use of\n // Terminal. Terminal.result() just returns the prompt's internal promise\n if (result.data instanceof Error) {\n throw result.data;\n }\n return result.data;\n }\n}\n\nlet terminateHandler:\n | ((stdin: ReadStream, stdout: WriteStream) => void)\n | undefined;\n\nexport function onTerminate(\n callback: (stdin: ReadStream, stdout: WriteStream) => void | undefined,\n) {\n terminateHandler = callback;\n}\n\nexport const prepareReadLine = (): {\n stdin: ReadStream;\n stdout: WriteStream;\n closable: Closable;\n} => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n const rl = readline.createInterface({\n input: stdin,\n escapeCodeTimeout: 50,\n });\n\n readline.emitKeypressEvents(stdin, rl);\n\n return {\n stdin,\n stdout,\n closable: rl,\n };\n};\n\nconst strip = (str: string) => {\n const pattern = [\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))',\n ].join('|');\n\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};\n\nconst stringWidth = (str: string) => [...strip(str)].length;\n\nexport const clear = function (prompt: string, perLine: number) {\n if (!perLine) return erase.line + cursor.to(0);\n\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n for (let line of lines) {\n rows += 1 + Math.floor(Math.max(stringWidth(line) - 1, 0) / perLine);\n }\n\n return erase.lines(rows);\n};\n"]}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/ui/lib.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReadStream, WriteStream } from 'tty';\nimport { cursor, erase } from 'sisteransi';\nimport throttle from 'lodash.throttle';\nimport readline from 'readline';\n\nconst isWindows = process.platform === 'win32';\n\n/**\n * Set terminal raw mode on stdin, with a Windows workaround.\n *\n * Raw mode (true):\n * - Input available character-by-character (not line-buffered)\n * - No echo of typed characters\n * - Ctrl+C doesn't send SIGINT (must handle manually)\n * - Required to capture arrow keys and other special keys\n *\n * Normal mode (false):\n * - Input is line-buffered (available after Enter)\n * - Typed characters are echoed\n * - Ctrl+C sends SIGINT as normal\n *\n * Windows workaround: We skip disabling raw mode on Windows because\n * toggling it between prompts causes a race condition that breaks\n * subsequent keypress events. Raw mode is automatically reset when\n * the process exits, so this is safe.\n *\n * See: https://github.com/bombshell-dev/clack/issues/176\n */\nexport function setRawModeWindowsFriendly(input: ReadStream, value: boolean) {\n if (!value && isWindows) return;\n input.setRawMode(value);\n}\n\nexport interface Closable {\n close(): void;\n}\n\nexport type ModifyOutputFn = (\n output: string,\n status?: 'idle' | 'submitted' | 'aborted',\n) => string;\n\nexport abstract class Prompt<RESULT> {\n protected terminal: ITerminal | undefined;\n private attachCallbacks: ((terminal: ITerminal) => void)[] = [];\n private detachCallbacks: ((terminal: ITerminal) => void)[] = [];\n private inputCallbacks: ((str: string | undefined, key: AnyKey) => void)[] =\n [];\n\n public modifier: ModifyOutputFn | undefined = undefined;\n\n requestLayout() {\n if (this.terminal) {\n this.terminal!.requestLayout();\n }\n }\n\n constructor(modifier?: ModifyOutputFn) {\n this.modifier = modifier;\n }\n\n on(type: 'attach', callback: (terminal: ITerminal) => void): void;\n on(type: 'detach', callback: (terminal: ITerminal) => void): void;\n on(\n type: 'input',\n callback: (str: string | undefined, key: AnyKey) => void,\n ): void;\n on(type: 'attach' | 'detach' | 'input', callback: any): void {\n if (type === 'attach') {\n this.attachCallbacks.push(callback);\n } else if (type === 'detach') {\n this.detachCallbacks.push(callback);\n } else if (type === 'input') {\n this.inputCallbacks.push(callback);\n }\n }\n\n attach(terminal: ITerminal) {\n this.terminal = terminal;\n this.attachCallbacks.forEach((it) => it(terminal));\n }\n\n detach(terminal: ITerminal) {\n this.detachCallbacks.forEach((it) => it(terminal));\n this.terminal = undefined;\n }\n\n input(str: string | undefined, key: AnyKey) {\n this.inputCallbacks.forEach((it) => it(str, key));\n }\n\n abstract result(): RESULT;\n abstract render(status: 'idle' | 'submitted' | 'aborted'): string;\n fullRender(status: 'idle' | 'submitted' | 'aborted'): string {\n if (this.modifier) {\n return this.modifier(this.render(status), status);\n }\n return this.render(status);\n }\n}\n\nexport class SelectState<T> {\n public selectedIdx = 0;\n constructor(public readonly items: T[]) {}\n\n bind(prompt: Prompt<any>) {\n prompt.on('input', (str, key) => {\n const invalidate = this.consume(str, key);\n if (invalidate) prompt.requestLayout();\n });\n }\n\n private consume(str: string | undefined, key: AnyKey): boolean {\n if (!key) return false;\n\n if (key.name === 'down') {\n this.selectedIdx = (this.selectedIdx + 1) % this.items.length;\n return true;\n }\n\n if (key.name === 'up') {\n this.selectedIdx -= 1;\n this.selectedIdx =\n this.selectedIdx < 0 ? this.items.length - 1 : this.selectedIdx;\n return true;\n }\n\n return false;\n }\n}\n\nexport const deferred = <T>() => {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {\n resolve,\n reject,\n promise,\n };\n};\n\nexport interface ITerminal {\n toggleCursor(state: 'hide' | 'show'): void;\n requestLayout(): void;\n resolve(value: Prompted<{}>): void;\n setAllowInteraction(value: boolean): void;\n}\n\nexport type AnyKey = {\n sequence: string;\n name: string | undefined;\n ctrl: boolean;\n meta: boolean;\n shift: boolean;\n};\n\ntype Prompted<T> =\n | {\n data: undefined;\n status: 'aborted';\n }\n | {\n data: T;\n status: 'submitted';\n };\n\nexport class Terminal implements ITerminal {\n private text = '';\n private status: 'idle' | 'submitted' | 'aborted' = 'idle';\n private _resolve: (value: Prompted<{}>) => void;\n private promise: Promise<Prompted<{}>>;\n private renderFunc: (str: string) => void;\n\n private allowInteraction = true;\n\n public resolve: (value: Prompted<{}>) => void;\n\n public setAllowInteraction(value: boolean) {\n this.allowInteraction = value;\n }\n\n constructor(\n private readonly view: Prompt<any>,\n private readonly stdin: ReadStream,\n private readonly stdout: WriteStream,\n private readonly closable: Closable,\n ) {\n if (this.stdin.isTTY) setRawModeWindowsFriendly(this.stdin, true);\n\n const keypress = (str: string | undefined, key: AnyKey) => {\n if (key.name === 'c' && key.ctrl === true) {\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n if (terminateHandler) {\n terminateHandler(this.stdin, this.stdout);\n return;\n }\n this.stdout.write(`\\n^C\\n`);\n process.exit(1);\n }\n\n if (this.allowInteraction) {\n if (key.name === 'escape') {\n this.status = 'aborted';\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n this._resolve({ status: 'aborted', data: undefined });\n return;\n }\n\n if (key.name === 'return') {\n this.status = 'submitted';\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n this._resolve({ status: 'submitted', data: this.view.result() });\n return;\n }\n }\n\n view.input(str, key);\n };\n\n this.stdin.on('keypress', keypress);\n this.view.attach(this);\n\n const { resolve, promise } = deferred<Prompted<{}>>();\n this._resolve = resolve;\n\n this.resolve = (value: Prompted<{}>) => {\n this.status = 'submitted';\n this.requestLayout();\n this.view.detach(this);\n this.tearDown(keypress);\n this._resolve(value);\n };\n\n this.promise = promise;\n\n this.renderFunc = throttle((str: string) => {\n this.stdout.write(str);\n });\n }\n\n private tearDown(keypress: (...args: any[]) => void) {\n this.stdout.write(cursor.show);\n this.stdin.removeListener('keypress', keypress);\n if (this.stdin.isTTY) setRawModeWindowsFriendly(this.stdin, false);\n this.closable.close();\n }\n\n result(): Promise<{}> {\n return this.promise;\n }\n\n toggleCursor(state: 'hide' | 'show') {\n if (state === 'hide') {\n this.stdout.write(cursor.hide);\n } else {\n this.stdout.write(cursor.show);\n }\n }\n\n requestLayout() {\n const string = this.view.fullRender(this.status);\n let realString = string;\n if (!realString.endsWith('\\n')) {\n realString += '\\n';\n }\n const realText = this.text.endsWith('\\n') ? this.text : `${this.text}\\n`;\n const clearPrefix = this.text ? clear(realText, this.stdout.columns) : '';\n this.text = realString;\n\n this.renderFunc(`${clearPrefix}${realString}`);\n }\n}\n\nexport function render<T>(view: Prompt<T>): Promise<Prompted<T>>;\nexport function render(view: string): void;\nexport function render(view: any): any {\n const { stdin, stdout, closable } = prepareReadLine();\n if (view instanceof Prompt) {\n const terminal = new Terminal(view, stdin, stdout, closable);\n terminal.requestLayout();\n return terminal.result();\n }\n\n stdout.write(`${view}\\n`);\n closable.close();\n return;\n}\n\nexport class CancelledPromptError extends Error {\n constructor(message?: string) {\n super(message);\n this.name = 'CancelledPromptError';\n }\n}\n\n/**\n * Renders a prompt object and throws if the Prompt was \"cancelled\"\n * If using the standard render function you must check if the result ended in a cancellation before accessing the data.\n * Cancellations are rare so this is more of a future proof for future components\n * where cancelling may make more sense.\n */\nexport async function renderUnwrap<T>(view: Prompt<T>): Promise<T> {\n const { stdin, stdout, closable } = prepareReadLine();\n const terminal = new Terminal(view, stdin, stdout, closable);\n terminal.requestLayout();\n const result = (await terminal.result()) as Prompted<T>;\n if (result.status === 'aborted') {\n throw new CancelledPromptError('Prompt was aborted');\n } else {\n // Prompt.result may throw an error but it is swallowed by the use of\n // Terminal. Terminal.result() just returns the prompt's internal promise\n if (result.data instanceof Error) {\n throw result.data;\n }\n return result.data;\n }\n}\n\nlet terminateHandler:\n | ((stdin: ReadStream, stdout: WriteStream) => void)\n | undefined;\n\nexport function onTerminate(\n callback: (stdin: ReadStream, stdout: WriteStream) => void | undefined,\n) {\n terminateHandler = callback;\n}\n\nexport const prepareReadLine = (): {\n stdin: ReadStream;\n stdout: WriteStream;\n closable: Closable;\n} => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n const rl = readline.createInterface({\n input: stdin,\n escapeCodeTimeout: 50,\n });\n\n readline.emitKeypressEvents(stdin, rl);\n\n return {\n stdin,\n stdout,\n closable: rl,\n };\n};\n\nconst strip = (str: string) => {\n const pattern = [\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))',\n ].join('|');\n\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};\n\nconst stringWidth = (str: string) => [...strip(str)].length;\n\nexport const clear = function (prompt: string, perLine: number) {\n if (!perLine) return erase.line + cursor.to(0);\n\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n for (let line of lines) {\n rows += 1 + Math.floor(Math.max(stringWidth(line) - 1, 0) / perLine);\n }\n\n return erase.lines(rows);\n};\n"]}
@@ -6,6 +6,6 @@ type ConfigCandidate = {
6
6
  export declare function getSchemaReadCandidates(): ConfigCandidate[];
7
7
  export declare function getPermsReadCandidates(): ConfigCandidate[];
8
8
  export declare function getSchemaPathToWrite(existingPath?: string): string;
9
- export declare function getPermsPathToWrite(existingPath?: string): string;
9
+ export declare function getPermsPathToWrite(): string;
10
10
  export {};
11
11
  //# sourceMappingURL=findConfigCandidates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findConfigCandidates.d.ts","sourceRoot":"","sources":["../../src/util/findConfigCandidates.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC,CAAC;AA8EF,wBAAgB,uBAAuB,IAAI,eAAe,EAAE,CA+C3D;AAED,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAwC1D;AAED,wBAAgB,oBAAoB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAUlE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CASjE"}
1
+ {"version":3,"file":"findConfigCandidates.d.ts","sourceRoot":"","sources":["../../src/util/findConfigCandidates.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC,CAAC;AA8EF,wBAAgB,uBAAuB,IAAI,eAAe,EAAE,CA+C3D;AAED,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAwC1D;AAED,wBAAgB,oBAAoB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAUlE;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C"}
@@ -146,9 +146,7 @@ export function getSchemaPathToWrite(existingPath) {
146
146
  }
147
147
  return 'instant.schema.ts';
148
148
  }
149
- export function getPermsPathToWrite(existingPath) {
150
- if (existingPath)
151
- return existingPath;
149
+ export function getPermsPathToWrite() {
152
150
  if (process.env.INSTANT_PERMS_FILE_PATH) {
153
151
  return process.env.INSTANT_PERMS_FILE_PATH;
154
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"findConfigCandidates.js","sourceRoot":"","sources":["../../src/util/findConfigCandidates.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport chalk from 'chalk';\n\ntype ConfigCandidate = {\n files: string;\n extensions?: string[];\n transform: (code: string) => string;\n};\n\n/**\n * Some framework packages can't be loaded in a Node.js CLI context:\n * - @instantdb/react-native brings in react-native which isn't available\n * - @instantdb/svelte re-exports .svelte files which can't be parsed\n *\n * Since schema files only need schema types (i, id, tx, etc.) which all\n * come from @instantdb/core, we rewrite these imports to a safe export\n * in the package that only re-exports from @instantdb/core.\n */\nfunction transformImports(code: string): string {\n return code\n .replace(\n /[\"']@instantdb\\/react-native[\"']/g,\n '\"@instantdb/react-native/dist/cli\"',\n )\n .replace(/[\"']@instantdb\\/svelte[\"']/g, '\"@instantdb/svelte/dist/cli\"');\n}\n\nfunction findPathsRecursive(\n baseDir: string,\n maxDepth: number,\n fileName: string,\n): string[] {\n const paths: string[] = [];\n const cwd = process.cwd();\n\n const scanDir = (currentDir: string, currentDepth: number): void => {\n if (currentDepth > maxDepth) return;\n\n const fullPath = join(cwd, currentDir);\n if (!existsSync(fullPath)) return;\n\n paths.push(join(currentDir, fileName));\n\n if (currentDepth < maxDepth) {\n try {\n const entries = readdirSync(fullPath, { withFileTypes: true });\n for (const entry of entries) {\n if (\n entry.isDirectory() &&\n !entry.name.startsWith('.') &&\n entry.name !== 'node_modules'\n ) {\n scanDir(join(currentDir, entry.name), currentDepth + 1);\n }\n }\n } catch (err) {\n console.error(`Error scanning directory ${fullPath}: ${err}`);\n }\n }\n };\n\n scanDir(baseDir, 0);\n return paths;\n}\n\nfunction getEnvSchemaPathWithLogging(): string | undefined {\n const path = process.env.INSTANT_SCHEMA_FILE_PATH;\n if (path) {\n console.log(\n `Using INSTANT_SCHEMA_FILE_PATH=${chalk.green(process.env.INSTANT_SCHEMA_FILE_PATH)}`,\n );\n }\n return path;\n}\n\nfunction getEnvPermsPathWithLogging(): string | undefined {\n const path = process.env.INSTANT_PERMS_FILE_PATH;\n if (path) {\n console.log(\n `Using INSTANT_PERMS_FILE_PATH=${chalk.green(process.env.INSTANT_PERMS_FILE_PATH)}`,\n );\n }\n return path;\n}\n\nexport function getSchemaReadCandidates(): ConfigCandidate[] {\n const existing = getEnvSchemaPathWithLogging();\n\n if (existing) {\n return [{ files: existing, transform: transformImports }];\n }\n const extensions = ['ts', 'mts', 'cts', 'js', 'mjs', 'cjs'];\n const candidates: ConfigCandidate[] = [];\n\n candidates.push({\n files: 'instant.schema',\n extensions,\n transform: transformImports,\n });\n\n // matches: src/any-folder/any-folder/instant.schema\n // src/any-folder/instant.schema\n // src/instant.schema\n // 3 levels in case someone does src/lib/db/instant.schema\n const srcPaths = findPathsRecursive('src', 3, 'instant.schema');\n for (const srcPath of srcPaths) {\n candidates.push({\n files: srcPath,\n extensions,\n transform: transformImports,\n });\n }\n\n // matches: lib/any-folder/instant.schema\n // lib/instant.schema\n // 2 levels in case someone does lib/db/instant.schema\n const libPaths = findPathsRecursive('lib', 2, 'instant.schema');\n for (const libPath of libPaths) {\n candidates.push({\n files: libPath,\n extensions,\n transform: transformImports,\n });\n }\n\n candidates.push({\n files: 'app/instant.schema',\n extensions,\n transform: transformImports,\n });\n\n return candidates;\n}\n\nexport function getPermsReadCandidates(): ConfigCandidate[] {\n const existing = getEnvPermsPathWithLogging();\n if (existing) {\n return [{ files: existing, transform: transformImports }];\n }\n const extensions = ['ts', 'mts', 'cts', 'js', 'mjs', 'cjs'];\n\n const candidates: ConfigCandidate[] = [];\n\n candidates.push({\n files: 'instant.perms',\n extensions,\n transform: transformImports,\n });\n\n const srcPaths = findPathsRecursive('src', 3, 'instant.perms');\n for (const srcPath of srcPaths) {\n candidates.push({\n files: srcPath,\n extensions,\n transform: transformImports,\n });\n }\n\n const libPaths = findPathsRecursive('lib', 2, 'instant.perms');\n for (const libPath of libPaths) {\n candidates.push({\n files: libPath,\n extensions,\n transform: transformImports,\n });\n }\n\n candidates.push({\n files: 'app/instant.perms',\n extensions,\n transform: transformImports,\n });\n\n return candidates;\n}\n\nexport function getSchemaPathToWrite(existingPath?: string): string {\n if (existingPath) return existingPath;\n if (process.env.INSTANT_SCHEMA_FILE_PATH) {\n return process.env.INSTANT_SCHEMA_FILE_PATH;\n }\n if (existsSync(join(process.cwd(), 'src'))) {\n return join('src', 'instant.schema.ts');\n }\n\n return 'instant.schema.ts';\n}\n\nexport function getPermsPathToWrite(existingPath?: string): string {\n if (existingPath) return existingPath;\n if (process.env.INSTANT_PERMS_FILE_PATH) {\n return process.env.INSTANT_PERMS_FILE_PATH;\n }\n if (existsSync(join(process.cwd(), 'src'))) {\n return join('src', 'instant.perms.ts');\n }\n return 'instant.perms.ts';\n}\n"]}
1
+ {"version":3,"file":"findConfigCandidates.js","sourceRoot":"","sources":["../../src/util/findConfigCandidates.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport chalk from 'chalk';\n\ntype ConfigCandidate = {\n files: string;\n extensions?: string[];\n transform: (code: string) => string;\n};\n\n/**\n * Some framework packages can't be loaded in a Node.js CLI context:\n * - @instantdb/react-native brings in react-native which isn't available\n * - @instantdb/svelte re-exports .svelte files which can't be parsed\n *\n * Since schema files only need schema types (i, id, tx, etc.) which all\n * come from @instantdb/core, we rewrite these imports to a safe export\n * in the package that only re-exports from @instantdb/core.\n */\nfunction transformImports(code: string): string {\n return code\n .replace(\n /[\"']@instantdb\\/react-native[\"']/g,\n '\"@instantdb/react-native/dist/cli\"',\n )\n .replace(/[\"']@instantdb\\/svelte[\"']/g, '\"@instantdb/svelte/dist/cli\"');\n}\n\nfunction findPathsRecursive(\n baseDir: string,\n maxDepth: number,\n fileName: string,\n): string[] {\n const paths: string[] = [];\n const cwd = process.cwd();\n\n const scanDir = (currentDir: string, currentDepth: number): void => {\n if (currentDepth > maxDepth) return;\n\n const fullPath = join(cwd, currentDir);\n if (!existsSync(fullPath)) return;\n\n paths.push(join(currentDir, fileName));\n\n if (currentDepth < maxDepth) {\n try {\n const entries = readdirSync(fullPath, { withFileTypes: true });\n for (const entry of entries) {\n if (\n entry.isDirectory() &&\n !entry.name.startsWith('.') &&\n entry.name !== 'node_modules'\n ) {\n scanDir(join(currentDir, entry.name), currentDepth + 1);\n }\n }\n } catch (err) {\n console.error(`Error scanning directory ${fullPath}: ${err}`);\n }\n }\n };\n\n scanDir(baseDir, 0);\n return paths;\n}\n\nfunction getEnvSchemaPathWithLogging(): string | undefined {\n const path = process.env.INSTANT_SCHEMA_FILE_PATH;\n if (path) {\n console.log(\n `Using INSTANT_SCHEMA_FILE_PATH=${chalk.green(process.env.INSTANT_SCHEMA_FILE_PATH)}`,\n );\n }\n return path;\n}\n\nfunction getEnvPermsPathWithLogging(): string | undefined {\n const path = process.env.INSTANT_PERMS_FILE_PATH;\n if (path) {\n console.log(\n `Using INSTANT_PERMS_FILE_PATH=${chalk.green(process.env.INSTANT_PERMS_FILE_PATH)}`,\n );\n }\n return path;\n}\n\nexport function getSchemaReadCandidates(): ConfigCandidate[] {\n const existing = getEnvSchemaPathWithLogging();\n\n if (existing) {\n return [{ files: existing, transform: transformImports }];\n }\n const extensions = ['ts', 'mts', 'cts', 'js', 'mjs', 'cjs'];\n const candidates: ConfigCandidate[] = [];\n\n candidates.push({\n files: 'instant.schema',\n extensions,\n transform: transformImports,\n });\n\n // matches: src/any-folder/any-folder/instant.schema\n // src/any-folder/instant.schema\n // src/instant.schema\n // 3 levels in case someone does src/lib/db/instant.schema\n const srcPaths = findPathsRecursive('src', 3, 'instant.schema');\n for (const srcPath of srcPaths) {\n candidates.push({\n files: srcPath,\n extensions,\n transform: transformImports,\n });\n }\n\n // matches: lib/any-folder/instant.schema\n // lib/instant.schema\n // 2 levels in case someone does lib/db/instant.schema\n const libPaths = findPathsRecursive('lib', 2, 'instant.schema');\n for (const libPath of libPaths) {\n candidates.push({\n files: libPath,\n extensions,\n transform: transformImports,\n });\n }\n\n candidates.push({\n files: 'app/instant.schema',\n extensions,\n transform: transformImports,\n });\n\n return candidates;\n}\n\nexport function getPermsReadCandidates(): ConfigCandidate[] {\n const existing = getEnvPermsPathWithLogging();\n if (existing) {\n return [{ files: existing, transform: transformImports }];\n }\n const extensions = ['ts', 'mts', 'cts', 'js', 'mjs', 'cjs'];\n\n const candidates: ConfigCandidate[] = [];\n\n candidates.push({\n files: 'instant.perms',\n extensions,\n transform: transformImports,\n });\n\n const srcPaths = findPathsRecursive('src', 3, 'instant.perms');\n for (const srcPath of srcPaths) {\n candidates.push({\n files: srcPath,\n extensions,\n transform: transformImports,\n });\n }\n\n const libPaths = findPathsRecursive('lib', 2, 'instant.perms');\n for (const libPath of libPaths) {\n candidates.push({\n files: libPath,\n extensions,\n transform: transformImports,\n });\n }\n\n candidates.push({\n files: 'app/instant.perms',\n extensions,\n transform: transformImports,\n });\n\n return candidates;\n}\n\nexport function getSchemaPathToWrite(existingPath?: string): string {\n if (existingPath) return existingPath;\n if (process.env.INSTANT_SCHEMA_FILE_PATH) {\n return process.env.INSTANT_SCHEMA_FILE_PATH;\n }\n if (existsSync(join(process.cwd(), 'src'))) {\n return join('src', 'instant.schema.ts');\n }\n\n return 'instant.schema.ts';\n}\n\nexport function getPermsPathToWrite(): string {\n if (process.env.INSTANT_PERMS_FILE_PATH) {\n return process.env.INSTANT_PERMS_FILE_PATH;\n }\n if (existsSync(join(process.cwd(), 'src'))) {\n return join('src', 'instant.perms.ts');\n }\n return 'instant.perms.ts';\n}\n"]}
package/dist/util/fs.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { PathLike } from 'fs';
1
+ import type { PathLike } from 'fs';
2
2
  export declare function pathExists(p: PathLike): Promise<boolean>;
3
3
  export declare function readJsonFile<T = Record<string, any>>(p: PathLike): Promise<T | null>;
4
4
  //# sourceMappingURL=fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/util/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAG9B,wBAAsB,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9D;AAED,wBAAsB,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD,CAAC,EAAE,QAAQ,GACV,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAWnB"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/util/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,wBAAsB,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9D;AAED,wBAAsB,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD,CAAC,EAAE,QAAQ,GACV,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAWnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/util/fs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAW;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,CAAW;IAEX,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IAElB,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { PathLike } from 'fs';\nimport { readFile, stat } from 'fs/promises';\n\nexport async function pathExists(p: PathLike): Promise<boolean> {\n try {\n await stat(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readJsonFile<T = Record<string, any>>(\n p: PathLike,\n): Promise<T | null> {\n if (!pathExists(p)) {\n return null;\n }\n\n try {\n const data = await readFile(p, 'utf-8');\n return JSON.parse(data);\n } catch (error) {}\n\n return null;\n}\n"]}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/util/fs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAW;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,CAAW;IAEX,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IAElB,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import type { PathLike } from 'fs';\nimport { readFile, stat } from 'fs/promises';\n\nexport async function pathExists(p: PathLike): Promise<boolean> {\n try {\n await stat(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readJsonFile<T = Record<string, any>>(\n p: PathLike,\n): Promise<T | null> {\n if (!pathExists(p)) {\n return null;\n }\n\n try {\n const data = await readFile(p, 'utf-8');\n return JSON.parse(data);\n } catch (error) {}\n\n return null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getAuthPaths.d.ts","sourceRoot":"","sources":["../../src/util/getAuthPaths.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY;;;EAM3B"}
1
+ {"version":3,"file":"getAuthPaths.d.ts","sourceRoot":"","sources":["../../src/util/getAuthPaths.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY;;;EAM3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"getAuthPaths.js","sourceRoot":"","sources":["../../src/util/getAuthPaths.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACjD,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEvD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;AAClD,CAAC","sourcesContent":["import envPaths from 'env-paths';\nimport { join } from 'path';\n\nconst dev = Boolean(process.env.INSTANT_CLI_DEV);\nexport function getAuthPaths() {\n const key = `instantdb-${dev ? 'dev' : 'prod'}`;\n const { config: appConfigDirPath } = envPaths(key);\n const authConfigFilePath = join(appConfigDirPath, 'a');\n\n return { authConfigFilePath, appConfigDirPath };\n}\n"]}
1
+ {"version":3,"file":"getAuthPaths.js","sourceRoot":"","sources":["../../src/util/getAuthPaths.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEjD,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEvD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;AAClD,CAAC","sourcesContent":["import envPaths from 'env-paths';\nimport { join } from 'path';\n\nconst dev = Boolean(process.env.INSTANT_CLI_DEV);\n\nexport function getAuthPaths() {\n const key = `instantdb-${dev ? 'dev' : 'prod'}`;\n const { config: appConfigDirPath } = envPaths(key);\n const authConfigFilePath = join(appConfigDirPath, 'a');\n\n return { authConfigFilePath, appConfigDirPath };\n}\n"]}
@@ -1,2 +1,4 @@
1
- export declare function isHeadlessEnvironment(opts: any): boolean;
1
+ export declare function isHeadlessEnvironment(opts?: {
2
+ headless?: boolean;
3
+ }): boolean;
2
4
  //# sourceMappingURL=isHeadlessEnvironment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isHeadlessEnvironment.d.ts","sourceRoot":"","sources":["../../src/util/isHeadlessEnvironment.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,IAAI,KAAA,WAczC"}
1
+ {"version":3,"file":"isHeadlessEnvironment.d.ts","sourceRoot":"","sources":["../../src/util/isHeadlessEnvironment.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,WAclE"}
@@ -1 +1 @@
1
- {"version":3,"file":"isHeadlessEnvironment.js","sourceRoot":"","sources":["../../src/util/isHeadlessEnvironment.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,IAAI;IACxC,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,QAAQ,CACvE,CAAC;IAEF,mDAAmD;IACnD,OAAO,CACL,aAAa;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM;QAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS;QACxC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS;QACpC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,SAAS,CAC1C,CAAC;AACJ,CAAC","sourcesContent":["export function isHeadlessEnvironment(opts) {\n const noBrowserMode = Boolean(\n process.env.INSTANT_CLI_NO_BROWSER || process.env.CI || opts?.headless,\n );\n\n // Check for common headless environment indicators\n return (\n noBrowserMode ||\n process.env.TERM === 'dumb' ||\n process.env.SSH_CONNECTION !== undefined ||\n process.env.SSH_CLIENT !== undefined ||\n (!process.env.DISPLAY && process.platform === 'linux') ||\n process.env.WSL_DISTRO_NAME !== undefined\n );\n}\n"]}
1
+ {"version":3,"file":"isHeadlessEnvironment.js","sourceRoot":"","sources":["../../src/util/isHeadlessEnvironment.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,QAAQ,CACvE,CAAC;IAEF,mDAAmD;IACnD,OAAO,CACL,aAAa;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM;QAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS;QACxC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS;QACpC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,SAAS,CAC1C,CAAC;AACJ,CAAC","sourcesContent":["export function isHeadlessEnvironment(opts?: { headless?: boolean }) {\n const noBrowserMode = Boolean(\n process.env.INSTANT_CLI_NO_BROWSER || process.env.CI || opts?.headless,\n );\n\n // Check for common headless environment indicators\n return (\n noBrowserMode ||\n process.env.TERM === 'dumb' ||\n process.env.SSH_CONNECTION !== undefined ||\n process.env.SSH_CLIENT !== undefined ||\n (!process.env.DISPLAY && process.platform === 'linux') ||\n process.env.WSL_DISTRO_NAME !== undefined\n );\n}\n"]}
@@ -1,3 +1,3 @@
1
- import { LoadConfigOptions, LoadConfigResult } from 'unconfig';
1
+ import type { LoadConfigOptions, LoadConfigResult } from 'unconfig';
2
2
  export declare function loadConfig<T>(opts: LoadConfigOptions<T>): Promise<LoadConfigResult<T>>;
3
3
  //# sourceMappingURL=loadConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/util/loadConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AA8BlB,wBAAsB,UAAU,CAAC,CAAC,EAChC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAgC9B"}
1
+ {"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/util/loadConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AA8BpE,wBAAsB,UAAU,CAAC,CAAC,EAChC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAgC9B"}
@@ -1,7 +1,7 @@
1
- import { loadConfig as _loadConfig, } from 'unconfig';
1
+ import { loadConfig as _loadConfig } from 'unconfig';
2
2
  import { createRequire } from 'module';
3
3
  import path from 'path';
4
- import { findProjectDir } from './projectDir.js';
4
+ import { findProjectDir } from "./projectDir.js";
5
5
  /**
6
6
  * Resolve @instantdb packages from CLI's dependency tree.
7
7
  * For Deno projects, we alias all common @instantdb packages to @instantdb/core
@@ -1 +1 @@
1
- {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/util/loadConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,WAAW,GAG1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;GAIG;AACH,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,2DAA2D;QAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC9C,4DAA4D;QAC5D,+DAA+D;QAC/D,OAAO;YACL,iBAAiB,EAAE,OAAO;YAC1B,kBAAkB,EAAE,OAAO;YAC3B,yBAAyB,EAAE,OAAO;YAClC,mBAAmB,EAAE,OAAO;YAC5B,kBAAkB,EAAE,OAAO;SAC5B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAA0B;IAE1B,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,WAAW,EAAE,IAAI,KAAK,MAAM,CAAC;IAE5C,0EAA0E;IAC1E,sDAAsD;IACtD,IAAI,GAAG,CAAC;IACR,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAClC,GAAG,GAAG,MAAM,WAAW,CAAC;YACtB,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,aAAa,EAAE;oBACb,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;oBAC9B,IAAI,EAAE;wBACJ,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI;wBACpC,KAAK;qBACN;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,oEAAoE;IACpE,eAAe;IACf,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,YAAY,IAAI,GAAG,CAAC,MAAO,EAAE,CAAC;QAClE,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import {\n loadConfig as _loadConfig,\n LoadConfigOptions,\n LoadConfigResult,\n} from 'unconfig';\nimport { createRequire } from 'module';\nimport path from 'path';\nimport { findProjectDir } from './projectDir.js';\n\n/**\n * Resolve @instantdb packages from CLI's dependency tree.\n * For Deno projects, we alias all common @instantdb packages to @instantdb/core\n * since they all re-export the schema types from core.\n */\nfunction getInstantAliases(): Record<string, string> | null {\n try {\n const require = createRequire(import.meta.url);\n // Resolve @instantdb/core directly from CLI's dependencies\n const corePackageJson = require.resolve('@instantdb/core/package.json');\n const coreDir = path.dirname(corePackageJson);\n // All @instantdb packages re-export schema types from core,\n // so we can alias them all to core for schema loading purposes\n return {\n '@instantdb/core': coreDir,\n '@instantdb/react': coreDir,\n '@instantdb/react-native': coreDir,\n '@instantdb/svelte': coreDir,\n '@instantdb/admin': coreDir,\n };\n } catch {\n return null;\n }\n}\n\nexport async function loadConfig<T>(\n opts: LoadConfigOptions<T>,\n): Promise<LoadConfigResult<T>> {\n const projectInfo = await findProjectDir();\n const isDeno = projectInfo?.type === 'deno';\n\n // Deno projects don't have node_modules, so we need to alias @instantdb/*\n // packages to resolve from the CLI's own dependencies\n let res;\n if (isDeno) {\n const alias = getInstantAliases();\n res = await _loadConfig({\n ...opts,\n importx: {\n ...opts.importx,\n loaderOptions: {\n ...opts.importx?.loaderOptions,\n jiti: {\n ...opts.importx?.loaderOptions?.jiti,\n alias,\n },\n },\n },\n });\n } else {\n res = await _loadConfig(opts);\n }\n\n // Unconfig seems to add an __esModule property to the config object\n // Removing it.\n if (typeof res.config === 'object' && '__esModule' in res.config!) {\n delete res.config.__esModule;\n }\n return res;\n}\n"]}
1
+ {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/util/loadConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,UAAU,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;GAIG;AACH,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,2DAA2D;QAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC9C,4DAA4D;QAC5D,+DAA+D;QAC/D,OAAO;YACL,iBAAiB,EAAE,OAAO;YAC1B,kBAAkB,EAAE,OAAO;YAC3B,yBAAyB,EAAE,OAAO;YAClC,mBAAmB,EAAE,OAAO;YAC5B,kBAAkB,EAAE,OAAO;SAC5B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAA0B;IAE1B,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,WAAW,EAAE,IAAI,KAAK,MAAM,CAAC;IAE5C,0EAA0E;IAC1E,sDAAsD;IACtD,IAAI,GAAG,CAAC;IACR,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAClC,GAAG,GAAG,MAAM,WAAW,CAAC;YACtB,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,aAAa,EAAE;oBACb,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;oBAC9B,IAAI,EAAE;wBACJ,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI;wBACpC,KAAK;qBACN;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,oEAAoE;IACpE,eAAe;IACf,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,YAAY,IAAI,GAAG,CAAC,MAAO,EAAE,CAAC;QAClE,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { loadConfig as _loadConfig } from 'unconfig';\nimport type { LoadConfigOptions, LoadConfigResult } from 'unconfig';\nimport { createRequire } from 'module';\nimport path from 'path';\nimport { findProjectDir } from './projectDir.ts';\n\n/**\n * Resolve @instantdb packages from CLI's dependency tree.\n * For Deno projects, we alias all common @instantdb packages to @instantdb/core\n * since they all re-export the schema types from core.\n */\nfunction getInstantAliases(): Record<string, string> | null {\n try {\n const require = createRequire(import.meta.url);\n // Resolve @instantdb/core directly from CLI's dependencies\n const corePackageJson = require.resolve('@instantdb/core/package.json');\n const coreDir = path.dirname(corePackageJson);\n // All @instantdb packages re-export schema types from core,\n // so we can alias them all to core for schema loading purposes\n return {\n '@instantdb/core': coreDir,\n '@instantdb/react': coreDir,\n '@instantdb/react-native': coreDir,\n '@instantdb/svelte': coreDir,\n '@instantdb/admin': coreDir,\n };\n } catch {\n return null;\n }\n}\n\nexport async function loadConfig<T>(\n opts: LoadConfigOptions<T>,\n): Promise<LoadConfigResult<T>> {\n const projectInfo = await findProjectDir();\n const isDeno = projectInfo?.type === 'deno';\n\n // Deno projects don't have node_modules, so we need to alias @instantdb/*\n // packages to resolve from the CLI's own dependencies\n let res;\n if (isDeno) {\n const alias = getInstantAliases();\n res = await _loadConfig({\n ...opts,\n importx: {\n ...opts.importx,\n loaderOptions: {\n ...opts.importx?.loaderOptions,\n jiti: {\n ...opts.importx?.loaderOptions?.jiti,\n alias,\n },\n },\n },\n });\n } else {\n res = await _loadConfig(opts);\n }\n\n // Unconfig seems to add an __esModule property to the config object\n // Removing it.\n if (typeof res.config === 'object' && '__esModule' in res.config!) {\n delete res.config.__esModule;\n }\n return res;\n}\n"]}
@@ -1,2 +1,10 @@
1
- export function mergeSchema(oldFile: any, newFile: any): any;
1
+ declare const MergeSchemaError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
2
+ readonly _tag: "MergeSchemaError";
3
+ } & Readonly<A>;
4
+ export declare class MergeSchemaError extends MergeSchemaError_base<{
5
+ message: string;
6
+ }> {
7
+ }
8
+ export declare function mergeSchema(oldFile: string, newFile: string): string;
9
+ export {};
2
10
  //# sourceMappingURL=mergeSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mergeSchema.d.ts","sourceRoot":"","sources":["../../src/util/mergeSchema.js"],"names":[],"mappings":"AAkMA,6DAyKC"}
1
+ {"version":3,"file":"mergeSchema.d.ts","sourceRoot":"","sources":["../../src/util/mergeSchema.ts"],"names":[],"mappings":";;;AAIA,qBAAa,gBAAiB,SAAQ,sBAAqC;IACzE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;CAAG;AAsML,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyKpE"}
@@ -1,5 +1,9 @@
1
1
  import * as acorn from 'acorn';
2
2
  import tsPlugin from 'acorn-typescript';
3
+ import { Data } from 'effect';
4
+ export class MergeSchemaError extends Data.TaggedError('MergeSchemaError') {
5
+ }
6
+ // @ts-ignore
3
7
  const node = acorn.Parser.extend(tsPlugin({ dts: false }));
4
8
  // --- Import Handling Helpers ---
5
9
  function collectImports(ast) {
@@ -1 +1 @@
1
- {"version":3,"file":"mergeSchema.js","sourceRoot":"","sources":["../../src/util/mergeSchema.js"],"names":[],"mappings":"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","sourcesContent":["import * as acorn from 'acorn';\nimport tsPlugin from 'acorn-typescript';\n\nconst node = acorn.Parser.extend(tsPlugin({ dts: false }));\n\n// --- Import Handling Helpers ---\n\nfunction collectImports(ast) {\n const imports = new Map(); // localName -> { source, importedName, type, importKind }\n\n for (const node of ast.body) {\n if (node.type === 'ImportDeclaration') {\n const source = node.source.value;\n const declImportKind = node.importKind;\n\n for (const specifier of node.specifiers) {\n let kind = 'value';\n if (declImportKind === 'type' || specifier.importKind === 'type') {\n kind = 'type';\n }\n\n if (specifier.type === 'ImportSpecifier') {\n imports.set(specifier.local.name, {\n source,\n importedName: specifier.imported.name,\n type: 'named',\n importKind: kind,\n });\n } else if (specifier.type === 'ImportDefaultSpecifier') {\n imports.set(specifier.local.name, {\n source,\n type: 'default',\n importKind: kind,\n });\n } else if (specifier.type === 'ImportNamespaceSpecifier') {\n imports.set(specifier.local.name, {\n source,\n type: 'namespace',\n importKind: kind,\n });\n }\n }\n }\n }\n return imports;\n}\n\nfunction collectExistingImports(ast) {\n const existing = new Map(); // source -> Set<localName>\n\n for (const node of ast.body) {\n if (node.type === 'ImportDeclaration') {\n const source = node.source.value;\n if (!existing.has(source)) existing.set(source, new Set());\n\n for (const specifier of node.specifiers) {\n existing.get(source).add(specifier.local.name);\n }\n }\n }\n return existing;\n}\n\nfunction findIdentifiers(node, set = new Set()) {\n if (!node) return set;\n\n // If it's a Type Reference, grab the name\n if (node.type === 'TSTypeReference') {\n if (node.typeName.type === 'Identifier') {\n set.add(node.typeName.name);\n } else if (node.typeName.type === 'TSQualifiedName') {\n // For A.B, we need A\n let left = node.typeName.left;\n while (left.type === 'TSQualifiedName') {\n left = left.left;\n }\n if (left.type === 'Identifier') {\n set.add(left.name);\n }\n }\n }\n\n // Recursive walk\n for (const key in node) {\n if (key === 'loc' || key === 'start' || key === 'end') continue;\n if (typeof node[key] === 'object' && node[key] !== null) {\n if (Array.isArray(node[key])) {\n node[key].forEach((child) => findIdentifiers(child, set));\n } else {\n findIdentifiers(node[key], set);\n }\n }\n }\n return set;\n}\n\n// --- Schema Traversal Helpers ---\n\nfunction getPropName(prop) {\n if (prop.key.type === 'Identifier') return prop.key.name;\n if (prop.key.type === 'Literal') return prop.key.value;\n return null;\n}\n\nfunction analyzeChain(node) {\n let curr = node;\n let typeParams = null;\n let baseCall = null;\n\n while (curr.type === 'CallExpression') {\n if (curr.typeParameters) {\n typeParams = curr.typeParameters;\n }\n\n if (\n curr.callee.type === 'MemberExpression' &&\n curr.callee.object.type === 'Identifier' &&\n curr.callee.object.name === 'i'\n ) {\n baseCall = curr;\n }\n\n if (curr.callee.type === 'MemberExpression') {\n curr = curr.callee.object;\n } else {\n break;\n }\n }\n return { typeParams, baseCall };\n}\n\nfunction traverseSchema(node, path, callback) {\n if (node.type === 'ObjectExpression') {\n for (const prop of node.properties) {\n const name = getPropName(prop);\n if (!name) continue;\n const newPath = path ? `${path}.${name}` : name;\n\n if (prop.value.type === 'ObjectExpression') {\n traverseSchema(prop.value, newPath, callback);\n } else if (prop.value.type === 'CallExpression') {\n let isEntity = false;\n if (\n prop.value.callee.type === 'MemberExpression' &&\n prop.value.callee.property.name === 'entity' &&\n prop.value.callee.object.type === 'Identifier' &&\n prop.value.callee.object.name === 'i'\n ) {\n isEntity = true;\n }\n\n if (isEntity) {\n callback(prop.value, newPath);\n if (prop.value.arguments.length > 0) {\n traverseSchema(prop.value.arguments[0], newPath, callback);\n }\n } else {\n callback(prop.value, newPath);\n }\n }\n }\n }\n}\n\nfunction findSchemaObject(ast) {\n let schemaObj = null;\n function walk(node) {\n if (!node) return;\n if (schemaObj) return;\n if (\n node.type === 'CallExpression' &&\n node.callee.type === 'MemberExpression' &&\n node.callee.object.name === 'i' &&\n node.callee.property.name === 'schema' &&\n node.arguments.length > 0\n ) {\n schemaObj = node.arguments[0];\n return;\n }\n for (const key in node) {\n if (key === 'loc' || key === 'start' || key === 'end') continue;\n if (node[key] && typeof node[key] === 'object') {\n if (Array.isArray(node[key])) {\n node[key].forEach(walk);\n } else {\n walk(node[key]);\n }\n }\n }\n }\n walk(ast);\n return schemaObj;\n}\n\nexport function mergeSchema(oldFile, newFile) {\n const oldParsed = node.parse(oldFile, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n locations: true,\n });\n\n const newParsed = node.parse(newFile, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n locations: true,\n });\n\n const schemaMap = new Map(); // Path -> { src, ast }\n\n // 1. Extract from old file\n const oldSchemaObj = findSchemaObject(oldParsed);\n if (oldSchemaObj) {\n traverseSchema(oldSchemaObj, '', (node, path) => {\n const { typeParams } = analyzeChain(node);\n if (typeParams) {\n const src = oldFile.slice(typeParams.start, typeParams.end);\n schemaMap.set(path, { src, ast: typeParams });\n }\n });\n }\n\n // 2. Collect Imports\n const oldImports = collectImports(oldParsed);\n const newExistingImports = collectExistingImports(newParsed);\n const neededIdentifiers = new Set();\n\n // 3. Apply to new file & Collect needed identifiers\n const edits = [];\n const newSchemaObj = findSchemaObject(newParsed);\n\n if (newSchemaObj) {\n traverseSchema(newSchemaObj, '', (node, path) => {\n const { typeParams, baseCall } = analyzeChain(node);\n const stored = schemaMap.get(path);\n\n if (stored) {\n // Collect identifiers from the type params we are about to inject\n findIdentifiers(stored.ast, neededIdentifiers);\n\n if (typeParams) {\n edits.push({\n start: typeParams.start,\n end: typeParams.end,\n text: stored.src,\n });\n } else if (baseCall) {\n edits.push({\n start: baseCall.callee.end,\n end: baseCall.callee.end,\n text: stored.src,\n });\n }\n }\n });\n }\n\n // 4. Generate Import Statements\n const importsToAdd = new Map(); // source -> { named: Map<string, {str, isType}>, default: {str, isType}, namespace: {str, isType} }\n\n for (const id of neededIdentifiers) {\n const importInfo = oldImports.get(id);\n if (importInfo) {\n // Check if already imported in new file\n const existing = newExistingImports.get(importInfo.source);\n if (existing && existing.has(id)) {\n continue; // Already imported\n }\n\n if (!importsToAdd.has(importInfo.source)) {\n importsToAdd.set(importInfo.source, {\n named: new Map(),\n default: null,\n namespace: null,\n });\n }\n const group = importsToAdd.get(importInfo.source);\n const isType = importInfo.importKind === 'type';\n\n if (importInfo.type === 'named') {\n let importStr = id;\n if (importInfo.importedName !== id) {\n importStr = `${importInfo.importedName} as ${id}`;\n }\n group.named.set(importStr, { str: importStr, isType });\n } else if (importInfo.type === 'default') {\n group.default = { str: id, isType };\n } else if (importInfo.type === 'namespace') {\n group.namespace = { str: id, isType };\n }\n }\n }\n\n const importBlocks = [];\n\n for (const [source, info] of importsToAdd) {\n // Check if source exists in new file to merge?\n // For simplicity, we append new import lines.\n // But we can try to be smart.\n\n // If we have named imports\n if (info.named.size > 0) {\n const namedImports = Array.from(info.named.values());\n const allTypes = namedImports.every((x) => x.isType);\n\n if (allTypes) {\n const names = namedImports.map((x) => x.str).join(', ');\n importBlocks.push(`import type { ${names} } from '${source}';`);\n } else {\n const names = namedImports\n .map((x) => (x.isType ? `type ${x.str}` : x.str))\n .join(', ');\n importBlocks.push(`import { ${names} } from '${source}';`);\n }\n }\n if (info.default) {\n if (info.default.isType) {\n importBlocks.push(`import type ${info.default.str} from '${source}';`);\n } else {\n importBlocks.push(`import ${info.default.str} from '${source}';`);\n }\n }\n if (info.namespace) {\n if (info.namespace.isType) {\n importBlocks.push(\n `import type * as ${info.namespace.str} from '${source}';`,\n );\n } else {\n importBlocks.push(\n `import * as ${info.namespace.str} from '${source}';`,\n );\n }\n }\n }\n\n // 5. Apply edits\n edits.sort((a, b) => b.start - a.start);\n\n let output = newFile;\n for (const edit of edits) {\n output = output.slice(0, edit.start) + edit.text + output.slice(edit.end);\n }\n\n // Prepend imports\n if (importBlocks.length > 0) {\n // Check for leading comments (e.g. // Docs: ...)\n // We want to insert imports AFTER the leading comments but BEFORE the first code/import\n\n // Simple heuristic: match consecutive lines at start that begin with //\n const commentMatch = output.match(/^(\\s*\\/\\/.*(\\r?\\n|$))+/);\n\n if (commentMatch) {\n const commentEnd = commentMatch[0].length;\n output =\n output.slice(0, commentEnd) +\n '\\n' +\n importBlocks.join('\\n') +\n output.slice(commentEnd);\n } else {\n output = importBlocks.join('\\n') + '\\n' + output;\n }\n }\n\n return output;\n}\n"]}
1
+ {"version":3,"file":"mergeSchema.js","sourceRoot":"","sources":["../../src/util/mergeSchema.ts"],"names":[],"mappings":"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","sourcesContent":["import * as acorn from 'acorn';\nimport tsPlugin from 'acorn-typescript';\nimport { Data } from 'effect';\n\nexport class MergeSchemaError extends Data.TaggedError('MergeSchemaError')<{\n message: string;\n}> {}\n\n// @ts-ignore\nconst node = acorn.Parser.extend(tsPlugin({ dts: false }));\n\n// --- Import Handling Helpers ---\n\nfunction collectImports(ast: any) {\n const imports = new Map(); // localName -> { source, importedName, type, importKind }\n\n for (const node of ast.body) {\n if (node.type === 'ImportDeclaration') {\n const source = node.source.value;\n const declImportKind = node.importKind;\n\n for (const specifier of node.specifiers) {\n let kind = 'value';\n if (declImportKind === 'type' || specifier.importKind === 'type') {\n kind = 'type';\n }\n\n if (specifier.type === 'ImportSpecifier') {\n imports.set(specifier.local.name, {\n source,\n importedName: specifier.imported.name,\n type: 'named',\n importKind: kind,\n });\n } else if (specifier.type === 'ImportDefaultSpecifier') {\n imports.set(specifier.local.name, {\n source,\n type: 'default',\n importKind: kind,\n });\n } else if (specifier.type === 'ImportNamespaceSpecifier') {\n imports.set(specifier.local.name, {\n source,\n type: 'namespace',\n importKind: kind,\n });\n }\n }\n }\n }\n return imports;\n}\n\nfunction collectExistingImports(ast: any) {\n const existing = new Map(); // source -> Set<localName>\n\n for (const node of ast.body) {\n if (node.type === 'ImportDeclaration') {\n const source = node.source.value;\n if (!existing.has(source)) existing.set(source, new Set());\n\n for (const specifier of node.specifiers) {\n existing.get(source).add(specifier.local.name);\n }\n }\n }\n return existing;\n}\n\nfunction findIdentifiers(node: any, set: Set<string> = new Set<string>()) {\n if (!node) return set;\n\n // If it's a Type Reference, grab the name\n if (node.type === 'TSTypeReference') {\n if (node.typeName.type === 'Identifier') {\n set.add(node.typeName.name);\n } else if (node.typeName.type === 'TSQualifiedName') {\n // For A.B, we need A\n let left = node.typeName.left;\n while (left.type === 'TSQualifiedName') {\n left = left.left;\n }\n if (left.type === 'Identifier') {\n set.add(left.name);\n }\n }\n }\n\n // Recursive walk\n for (const key in node) {\n if (key === 'loc' || key === 'start' || key === 'end') continue;\n if (typeof node[key] === 'object' && node[key] !== null) {\n if (Array.isArray(node[key])) {\n node[key].forEach((child) => findIdentifiers(child, set));\n } else {\n findIdentifiers(node[key], set);\n }\n }\n }\n return set;\n}\n\n// --- Schema Traversal Helpers ---\n\nfunction getPropName(prop: any) {\n if (prop.key.type === 'Identifier') return prop.key.name;\n if (prop.key.type === 'Literal') return prop.key.value;\n return null;\n}\n\nfunction analyzeChain(node: any): { typeParams: any; baseCall: any } {\n let curr = node;\n let typeParams = null;\n let baseCall = null;\n\n while (curr.type === 'CallExpression') {\n if (curr.typeParameters) {\n typeParams = curr.typeParameters;\n }\n\n if (\n curr.callee.type === 'MemberExpression' &&\n curr.callee.object.type === 'Identifier' &&\n curr.callee.object.name === 'i'\n ) {\n baseCall = curr;\n }\n\n if (curr.callee.type === 'MemberExpression') {\n curr = curr.callee.object;\n } else {\n break;\n }\n }\n return { typeParams, baseCall };\n}\n\nfunction traverseSchema(\n node: any,\n path: string,\n callback: (node: any, path: string) => void,\n) {\n if (node.type === 'ObjectExpression') {\n for (const prop of node.properties) {\n const name = getPropName(prop);\n if (!name) continue;\n const newPath = path ? `${path}.${name}` : name;\n\n if (prop.value.type === 'ObjectExpression') {\n traverseSchema(prop.value, newPath, callback);\n } else if (prop.value.type === 'CallExpression') {\n let isEntity = false;\n if (\n prop.value.callee.type === 'MemberExpression' &&\n prop.value.callee.property.name === 'entity' &&\n prop.value.callee.object.type === 'Identifier' &&\n prop.value.callee.object.name === 'i'\n ) {\n isEntity = true;\n }\n\n if (isEntity) {\n callback(prop.value, newPath);\n if (prop.value.arguments.length > 0) {\n traverseSchema(prop.value.arguments[0], newPath, callback);\n }\n } else {\n callback(prop.value, newPath);\n }\n }\n }\n }\n}\n\nfunction findSchemaObject(ast: any) {\n let schemaObj: any = null;\n function walk(node: any) {\n if (!node) return;\n if (schemaObj) return;\n if (\n node.type === 'CallExpression' &&\n node.callee.type === 'MemberExpression' &&\n node.callee.object.name === 'i' &&\n node.callee.property.name === 'schema' &&\n node.arguments.length > 0\n ) {\n schemaObj = node.arguments[0];\n return;\n }\n for (const key in node) {\n if (key === 'loc' || key === 'start' || key === 'end') continue;\n if (node[key] && typeof node[key] === 'object') {\n if (Array.isArray(node[key])) {\n node[key].forEach(walk);\n } else {\n walk(node[key]);\n }\n }\n }\n }\n walk(ast);\n return schemaObj;\n}\n\nexport function mergeSchema(oldFile: string, newFile: string): string {\n const oldParsed = node.parse(oldFile, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n locations: true,\n });\n\n const newParsed = node.parse(newFile, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n locations: true,\n });\n\n const schemaMap = new Map(); // Path -> { src, ast }\n\n // 1. Extract from old file\n const oldSchemaObj = findSchemaObject(oldParsed);\n if (oldSchemaObj) {\n traverseSchema(oldSchemaObj, '', (node: any, path: string) => {\n const { typeParams } = analyzeChain(node);\n if (typeParams) {\n const src = oldFile.slice(typeParams.start, typeParams.end);\n schemaMap.set(path, { src, ast: typeParams });\n }\n });\n }\n\n // 2. Collect Imports\n const oldImports = collectImports(oldParsed);\n const newExistingImports = collectExistingImports(newParsed);\n const neededIdentifiers = new Set<string>();\n\n // 3. Apply to new file & Collect needed identifiers\n const edits: any[] = [];\n const newSchemaObj = findSchemaObject(newParsed);\n\n if (newSchemaObj) {\n traverseSchema(newSchemaObj, '', (node: any, path: string) => {\n const { typeParams, baseCall } = analyzeChain(node);\n const stored = schemaMap.get(path);\n\n if (stored) {\n // Collect identifiers from the type params we are about to inject\n findIdentifiers(stored.ast, neededIdentifiers);\n\n if (typeParams) {\n edits.push({\n start: typeParams.start,\n end: typeParams.end,\n text: stored.src,\n });\n } else if (baseCall) {\n edits.push({\n start: baseCall.callee.end,\n end: baseCall.callee.end,\n text: stored.src,\n });\n }\n }\n });\n }\n\n // 4. Generate Import Statements\n const importsToAdd = new Map(); // source -> { named: Map<string, {str, isType}>, default: {str, isType}, namespace: {str, isType} }\n\n for (const id of neededIdentifiers) {\n const importInfo = oldImports.get(id);\n if (importInfo) {\n // Check if already imported in new file\n const existing = newExistingImports.get(importInfo.source);\n if (existing && existing.has(id)) {\n continue; // Already imported\n }\n\n if (!importsToAdd.has(importInfo.source)) {\n importsToAdd.set(importInfo.source, {\n named: new Map(),\n default: null,\n namespace: null,\n });\n }\n const group = importsToAdd.get(importInfo.source);\n const isType = importInfo.importKind === 'type';\n\n if (importInfo.type === 'named') {\n let importStr = id;\n if (importInfo.importedName !== id) {\n importStr = `${importInfo.importedName} as ${id}`;\n }\n group.named.set(importStr, { str: importStr, isType });\n } else if (importInfo.type === 'default') {\n group.default = { str: id, isType };\n } else if (importInfo.type === 'namespace') {\n group.namespace = { str: id, isType };\n }\n }\n }\n\n const importBlocks: string[] = [];\n\n for (const [source, info] of importsToAdd) {\n // Check if source exists in new file to merge?\n // For simplicity, we append new import lines.\n // But we can try to be smart.\n\n // If we have named imports\n if (info.named.size > 0) {\n const namedImports: any[] = Array.from(info.named.values());\n const allTypes = namedImports.every((x) => x.isType);\n\n if (allTypes) {\n const names = namedImports.map((x) => x.str).join(', ');\n importBlocks.push(`import type { ${names} } from '${source}';`);\n } else {\n const names = namedImports\n .map((x) => (x.isType ? `type ${x.str}` : x.str))\n .join(', ');\n importBlocks.push(`import { ${names} } from '${source}';`);\n }\n }\n if (info.default) {\n if (info.default.isType) {\n importBlocks.push(`import type ${info.default.str} from '${source}';`);\n } else {\n importBlocks.push(`import ${info.default.str} from '${source}';`);\n }\n }\n if (info.namespace) {\n if (info.namespace.isType) {\n importBlocks.push(\n `import type * as ${info.namespace.str} from '${source}';`,\n );\n } else {\n importBlocks.push(\n `import * as ${info.namespace.str} from '${source}';`,\n );\n }\n }\n }\n\n // 5. Apply edits\n edits.sort((a, b) => b.start - a.start);\n\n let output = newFile;\n for (const edit of edits) {\n output = output.slice(0, edit.start) + edit.text + output.slice(edit.end);\n }\n\n // Prepend imports\n if (importBlocks.length > 0) {\n // Check for leading comments (e.g. // Docs: ...)\n // We want to insert imports AFTER the leading comments but BEFORE the first code/import\n\n // Simple heuristic: match consecutive lines at start that begin with //\n const commentMatch = output.match(/^(\\s*\\/\\/.*(\\r?\\n|$))+/);\n\n if (commentMatch) {\n const commentEnd = commentMatch[0].length;\n output =\n output.slice(0, commentEnd) +\n '\\n' +\n importBlocks.join('\\n') +\n output.slice(commentEnd);\n } else {\n output = importBlocks.join('\\n') + '\\n' + output;\n }\n }\n\n return output;\n}\n"]}
@@ -1,4 +1,5 @@
1
- import { ModifyOutputFn, Prompt } from '../ui/lib.js';
1
+ import { Prompt } from '../ui/lib.ts';
2
+ import type { ModifyOutputFn } from '../ui/lib.ts';
2
3
  export interface RenamePromptItem<T> {
3
4
  from: T;
4
5
  to: T;
@@ -1 +1 @@
1
- {"version":3,"file":"renamePrompt.d.ts","sourceRoot":"","sources":["../../src/util/renamePrompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AAGnE,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,CAAC,CAAC;CACP;AAED,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAC/D,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CACxB;IAUG,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAE7D,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;IAIjC,OAAO,CAAC,SAAS,CAAU;gBAGR,IAAI,EAAE,MAAM,EAC7B,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EACjC,SAAS,CAAC,EAAE,GAAG,EACf,YAAY,CAAC,EAAE,cAAc;IAW/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM;CA0CzD"}
1
+ {"version":3,"file":"renamePrompt.d.ts","sourceRoot":"","sources":["../../src/util/renamePrompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,CAAC,CAAC;CACP;AAED,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAC/D,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CACxB;IAUG,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAE7D,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;IAIjC,OAAO,CAAC,SAAS,CAAU;gBAGR,IAAI,EAAE,MAAM,EAC7B,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EACjC,SAAS,CAAC,EAAE,GAAG,EACf,YAAY,CAAC,EAAE,cAAc;IAW/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM;CA0CzD"}
@@ -1,5 +1,5 @@
1
1
  import chalk from 'chalk';
2
- import { Prompt, SelectState } from '../ui/lib.js';
2
+ import { Prompt, SelectState } from "../ui/lib.js";
3
3
  import { isRenamePromptItem } from '@instantdb/platform';
4
4
  export class ResolveRenamePrompt extends Prompt {
5
5
  base;
@@ -1 +1 @@
1
- {"version":3,"file":"renamePrompt.js","sourceRoot":"","sources":["../../src/util/renamePrompt.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { ModifyOutputFn, Prompt, SelectState } from '../ui/lib.js';\nimport { isRenamePromptItem } from '@instantdb/platform';\n\nexport interface RenamePromptItem<T> {\n from: T;\n to: T;\n}\n\nexport class ResolveRenamePrompt<T extends string> extends Prompt<\n RenamePromptItem<T> | T\n> {\n private readonly state: SelectState<RenamePromptItem<T> | T>;\n\n result(): RenamePromptItem<T> | T {\n return this.state.items[this.state.selectedIdx]!;\n }\n\n private thingType = 'attr';\n\n constructor(\n private readonly base: string,\n data: (RenamePromptItem<T> | T)[],\n extraInfo?: any,\n modifyOutput?: ModifyOutputFn,\n ) {\n super(modifyOutput);\n this.on('attach', (terminal) => terminal.toggleCursor('hide'));\n this.state = new SelectState(data);\n this.state.bind(this);\n this.base = base;\n if (extraInfo?.type) {\n this.thingType = extraInfo.type;\n }\n }\n render(status: 'idle' | 'submitted' | 'aborted'): string {\n if (status === 'submitted' || status === 'aborted') {\n return '';\n }\n\n let text = `Is ${chalk.bold.hex('#EA570B')(\n this.base,\n )} created or renamed from another ${this.thingType}?\\n`;\n const isSelectedRenamed = isRenamePromptItem(\n this.state.items[this.state.selectedIdx],\n );\n const selectedPrefix = isSelectedRenamed\n ? chalk.yellow('❯ ')\n : chalk.green('❯ ');\n\n const labelLength: number = this.state.items\n .filter((it) => isRenamePromptItem(it))\n .map((it: RenamePromptItem<T>) => {\n return this.base.length + 3 + it['from'].length;\n })\n .reduce((a, b) => {\n if (a > b) {\n return a;\n }\n return b;\n }, 0);\n\n this.state.items.forEach((it, idx) => {\n const isSelected = idx === this.state.selectedIdx;\n const isRenamed = isRenamePromptItem(it);\n const title = isRenamed\n ? `${it.from} › ${it.to}`.padEnd(labelLength, ' ')\n : it.padEnd(labelLength, ' ');\n const label = isRenamed\n ? `${chalk.yellow('~')} ${title} ${chalk.gray(` rename ${this.thingType}`)}`\n : `${chalk.green('+')} ${title} ${chalk.gray(` create ${this.thingType}`)}`;\n\n text += isSelected ? `${selectedPrefix}${label}` : ` ${label}`;\n text += idx != this.state.items.length - 1 ? '\\n' : '';\n });\n return text;\n }\n}\n"]}
1
+ {"version":3,"file":"renamePrompt.js","sourceRoot":"","sources":["../../src/util/renamePrompt.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { Prompt, SelectState } from '../ui/lib.ts';\nimport type { ModifyOutputFn } from '../ui/lib.ts';\nimport { isRenamePromptItem } from '@instantdb/platform';\n\nexport interface RenamePromptItem<T> {\n from: T;\n to: T;\n}\n\nexport class ResolveRenamePrompt<T extends string> extends Prompt<\n RenamePromptItem<T> | T\n> {\n private readonly state: SelectState<RenamePromptItem<T> | T>;\n\n result(): RenamePromptItem<T> | T {\n return this.state.items[this.state.selectedIdx]!;\n }\n\n private thingType = 'attr';\n\n constructor(\n private readonly base: string,\n data: (RenamePromptItem<T> | T)[],\n extraInfo?: any,\n modifyOutput?: ModifyOutputFn,\n ) {\n super(modifyOutput);\n this.on('attach', (terminal) => terminal.toggleCursor('hide'));\n this.state = new SelectState(data);\n this.state.bind(this);\n this.base = base;\n if (extraInfo?.type) {\n this.thingType = extraInfo.type;\n }\n }\n render(status: 'idle' | 'submitted' | 'aborted'): string {\n if (status === 'submitted' || status === 'aborted') {\n return '';\n }\n\n let text = `Is ${chalk.bold.hex('#EA570B')(\n this.base,\n )} created or renamed from another ${this.thingType}?\\n`;\n const isSelectedRenamed = isRenamePromptItem(\n this.state.items[this.state.selectedIdx],\n );\n const selectedPrefix = isSelectedRenamed\n ? chalk.yellow('❯ ')\n : chalk.green('❯ ');\n\n const labelLength: number = this.state.items\n .filter((it) => isRenamePromptItem(it))\n .map((it: RenamePromptItem<T>) => {\n return this.base.length + 3 + it['from'].length;\n })\n .reduce((a, b) => {\n if (a > b) {\n return a;\n }\n return b;\n }, 0);\n\n this.state.items.forEach((it, idx) => {\n const isSelected = idx === this.state.selectedIdx;\n const isRenamed = isRenamePromptItem(it);\n const title = isRenamed\n ? `${it.from} › ${it.to}`.padEnd(labelLength, ' ')\n : it.padEnd(labelLength, ' ');\n const label = isRenamed\n ? `${chalk.yellow('~')} ${title} ${chalk.gray(` rename ${this.thingType}`)}`\n : `${chalk.green('+')} ${title} ${chalk.gray(` create ${this.thingType}`)}`;\n\n text += isSelected ? `${selectedPrefix}${label}` : ` ${label}`;\n text += idx != this.state.items.length - 1 ? '\\n' : '';\n });\n return text;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "instant-cli",
3
3
  "type": "module",
4
- "version": "0.22.177",
4
+ "version": "0.22.178",
5
5
  "description": "Instant's CLI",
6
6
  "homepage": "https://github.com/instantdb/instant/tree/main/client/packages/cli",
7
7
  "repository": {
@@ -21,6 +21,9 @@
21
21
  "instant-cli": "bin/index.js"
22
22
  },
23
23
  "dependencies": {
24
+ "@commander-js/extra-typings": "^14.0.0",
25
+ "@effect/platform": "^0.94.1",
26
+ "@effect/platform-node": "^0.104.0",
24
27
  "acorn": "^8.15.0",
25
28
  "acorn-typescript": "^1.4.13",
26
29
  "ansi-escapes": "4.3.2",
@@ -29,6 +32,7 @@
29
32
  "commander": "^12.1.0",
30
33
  "dotenv": "^16.3.1",
31
34
  "dotenv-flow": "^4.1.0",
35
+ "effect": "^3.19.14",
32
36
  "env-paths": "^3.0.0",
33
37
  "find-up-simple": "^1.0.0",
34
38
  "json-diff": "^1.0.6",
@@ -36,30 +40,36 @@
36
40
  "lodash.throttle": "^4.1.1",
37
41
  "open": "^10.1.0",
38
42
  "package-directory": "^8.1.0",
43
+ "package-manager-detector": "^1.6.0",
44
+ "pkg-types": "^2.3.0",
39
45
  "prettier": "^3.3.3",
40
46
  "sisteransi": "^1.0.5",
41
47
  "string-width": "^8.1.0",
42
48
  "strip-ansi": "^7.1.2",
43
49
  "terminal-link": "^3.0.0",
44
50
  "unconfig": "^0.5.5",
45
- "@instantdb/core": "0.22.177",
46
- "@instantdb/platform": "0.22.177",
47
- "@instantdb/version": "0.22.177"
51
+ "@instantdb/core": "0.22.178",
52
+ "@instantdb/platform": "0.22.178",
53
+ "@instantdb/version": "0.22.178"
48
54
  },
49
55
  "devDependencies": {
50
56
  "@babel/core": "^7.17.9",
51
57
  "@babel/preset-env": "^7.16.11",
58
+ "@effect/language-service": "^0.64.1",
59
+ "@effect/vitest": "^0.29.0",
52
60
  "@types/json-diff": "^1.0.3",
53
61
  "@types/lodash.throttle": "^4.1.9",
54
- "@types/node": "^22.6.1",
62
+ "@types/node": "^22.13.0",
55
63
  "npm-run-all": "^4.1.5",
56
64
  "typescript": "^5.9.3",
57
65
  "vitest": "^3.2.4"
58
66
  },
59
67
  "scripts": {
60
- "build": "rm -rf dist; tsc -p tsconfig.json",
61
- "dev": "tsc -p tsconfig.json --watch --skipLibCheck --preserveWatchOutput | grep -v '^$'",
68
+ "build": "rm -rf dist; tsc -p tsconfig.build.json",
69
+ "dev": "tsc -p tsconfig.build.json --watch --skipLibCheck --preserveWatchOutput | grep -v '^$'",
70
+ "typecheck": "tsc --noEmit",
62
71
  "test": "vitest --project unit",
72
+ "test:e2e": "vitest --project e2e",
63
73
  "test:ci": "vitest run",
64
74
  "publish-package": "pnpm pack && npm publish *.tgz --access public",
65
75
  "clean": "rm -rf dist"
@@ -0,0 +1,31 @@
1
+ import { HttpClient, HttpClientRequest } from '@effect/platform';
2
+ import chalk from 'chalk';
3
+ import { Effect } from 'effect';
4
+ import { CurrentApp } from '../context/currentApp.ts';
5
+ import { BadArgsError } from '../errors.ts';
6
+ import { InstantHttpAuthed } from '../lib/http.ts';
7
+
8
+ export const claimCommand = Effect.gen(function* () {
9
+ const { appId, adminToken } = yield* CurrentApp;
10
+
11
+ yield* Effect.log(`Found app: ${appId}`);
12
+
13
+ const http = yield* InstantHttpAuthed;
14
+
15
+ if (!adminToken) {
16
+ return yield* BadArgsError.make({ message: 'Missing app admin token' });
17
+ }
18
+
19
+ yield* http
20
+ .pipe(
21
+ HttpClient.mapRequestInputEffect(
22
+ HttpClientRequest.bodyJson({
23
+ app_id: appId,
24
+ token: adminToken,
25
+ }),
26
+ ),
27
+ )
28
+ .post(`/dash/apps/ephemeral/${appId}/claim`);
29
+
30
+ yield* Effect.log(chalk.green('App claimed!'));
31
+ });