@vetala/vetala 0.1.0-beta

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.

Potentially problematic release.


This version of @vetala/vetala might be problematic. Click here for more details.

Files changed (271) hide show
  1. package/CONTRIBUTING.md +77 -0
  2. package/LICENSE +184 -0
  3. package/README.md +136 -0
  4. package/THIRD_PARTY_LICENSES.md +17 -0
  5. package/dist/src/agent.d.ts +30 -0
  6. package/dist/src/agent.js +216 -0
  7. package/dist/src/agent.js.map +1 -0
  8. package/dist/src/approvals.d.ts +18 -0
  9. package/dist/src/approvals.js +81 -0
  10. package/dist/src/approvals.js.map +1 -0
  11. package/dist/src/cli.d.ts +2 -0
  12. package/dist/src/cli.js +87 -0
  13. package/dist/src/cli.js.map +1 -0
  14. package/dist/src/config.d.ts +12 -0
  15. package/dist/src/config.js +183 -0
  16. package/dist/src/config.js.map +1 -0
  17. package/dist/src/context-memory.d.ts +7 -0
  18. package/dist/src/context-memory.js +96 -0
  19. package/dist/src/context-memory.js.map +1 -0
  20. package/dist/src/ink/command-suggestions.d.ts +7 -0
  21. package/dist/src/ink/command-suggestions.js +179 -0
  22. package/dist/src/ink/command-suggestions.js.map +1 -0
  23. package/dist/src/ink/ink-terminal-ui.d.ts +36 -0
  24. package/dist/src/ink/ink-terminal-ui.js +79 -0
  25. package/dist/src/ink/ink-terminal-ui.js.map +1 -0
  26. package/dist/src/ink/repl-app.d.ts +9 -0
  27. package/dist/src/ink/repl-app.js +789 -0
  28. package/dist/src/ink/repl-app.js.map +1 -0
  29. package/dist/src/ink/transcript-cards.d.ts +6 -0
  30. package/dist/src/ink/transcript-cards.js +24 -0
  31. package/dist/src/ink/transcript-cards.js.map +1 -0
  32. package/dist/src/path-policy.d.ts +11 -0
  33. package/dist/src/path-policy.js +67 -0
  34. package/dist/src/path-policy.js.map +1 -0
  35. package/dist/src/process-utils.d.ts +13 -0
  36. package/dist/src/process-utils.js +52 -0
  37. package/dist/src/process-utils.js.map +1 -0
  38. package/dist/src/repl.d.ts +9 -0
  39. package/dist/src/repl.js +13 -0
  40. package/dist/src/repl.js.map +1 -0
  41. package/dist/src/sarvam/client.d.ts +15 -0
  42. package/dist/src/sarvam/client.js +208 -0
  43. package/dist/src/sarvam/client.js.map +1 -0
  44. package/dist/src/sarvam/models.d.ts +2 -0
  45. package/dist/src/sarvam/models.js +7 -0
  46. package/dist/src/sarvam/models.js.map +1 -0
  47. package/dist/src/search-provider.d.ts +6 -0
  48. package/dist/src/search-provider.js +8 -0
  49. package/dist/src/search-provider.js.map +1 -0
  50. package/dist/src/session-store.d.ts +19 -0
  51. package/dist/src/session-store.js +318 -0
  52. package/dist/src/session-store.js.map +1 -0
  53. package/dist/src/skills/runtime.d.ts +26 -0
  54. package/dist/src/skills/runtime.js +317 -0
  55. package/dist/src/skills/runtime.js.map +1 -0
  56. package/dist/src/skills/types.d.ts +25 -0
  57. package/dist/src/skills/types.js +2 -0
  58. package/dist/src/skills/types.js.map +1 -0
  59. package/dist/src/terminal-ui.d.ts +29 -0
  60. package/dist/src/terminal-ui.js +236 -0
  61. package/dist/src/terminal-ui.js.map +1 -0
  62. package/dist/src/tools/filesystem.d.ts +2 -0
  63. package/dist/src/tools/filesystem.js +622 -0
  64. package/dist/src/tools/filesystem.js.map +1 -0
  65. package/dist/src/tools/git.d.ts +2 -0
  66. package/dist/src/tools/git.js +326 -0
  67. package/dist/src/tools/git.js.map +1 -0
  68. package/dist/src/tools/index.d.ts +6 -0
  69. package/dist/src/tools/index.js +21 -0
  70. package/dist/src/tools/index.js.map +1 -0
  71. package/dist/src/tools/registry.d.ts +15 -0
  72. package/dist/src/tools/registry.js +59 -0
  73. package/dist/src/tools/registry.js.map +1 -0
  74. package/dist/src/tools/shell.d.ts +2 -0
  75. package/dist/src/tools/shell.js +97 -0
  76. package/dist/src/tools/shell.js.map +1 -0
  77. package/dist/src/tools/skill.d.ts +3 -0
  78. package/dist/src/tools/skill.js +130 -0
  79. package/dist/src/tools/skill.js.map +1 -0
  80. package/dist/src/tools/web.d.ts +3 -0
  81. package/dist/src/tools/web.js +144 -0
  82. package/dist/src/tools/web.js.map +1 -0
  83. package/dist/src/types.d.ts +236 -0
  84. package/dist/src/types.js +2 -0
  85. package/dist/src/types.js.map +1 -0
  86. package/dist/src/workspace-trust.d.ts +3 -0
  87. package/dist/src/workspace-trust.js +31 -0
  88. package/dist/src/workspace-trust.js.map +1 -0
  89. package/dist/src/xdg.d.ts +9 -0
  90. package/dist/src/xdg.js +77 -0
  91. package/dist/src/xdg.js.map +1 -0
  92. package/package.json +57 -0
  93. package/skill/agents-md-generator/SKILL.md +75 -0
  94. package/skill/agents-md-generator/references/agents_md_template.md +160 -0
  95. package/skill/agents-md-generator/references/loc_measurement.md +67 -0
  96. package/skill/agents-md-generator/references/monorepo_detection.md +78 -0
  97. package/skill/agents-md-generator/references/monorepo_strategy.md +60 -0
  98. package/skill/agents-md-generator/references/read_only_commands.md +151 -0
  99. package/skill/agents-md-generator/references/update_strategy.md +160 -0
  100. package/skill/agents-md-generator/references/working_agreements.md +53 -0
  101. package/skill/biz-opportunity-scout/SKILL.md +53 -0
  102. package/skill/biz-opportunity-scout/references/competitive_analysis.md +84 -0
  103. package/skill/biz-opportunity-scout/references/market_sizing.md +68 -0
  104. package/skill/biz-opportunity-scout/references/pmf_indicators.md +94 -0
  105. package/skill/biz-opportunity-scout/references/report_template.md +243 -0
  106. package/skill/biz-opportunity-scout/references/unit_economics.md +97 -0
  107. package/skill/code-review/SKILL.md +86 -0
  108. package/skill/code-review/references/change_analysis.md +116 -0
  109. package/skill/code-review/references/git_operations.md +115 -0
  110. package/skill/code-review/references/impact_detection.md +149 -0
  111. package/skill/code-review/references/output_format.md +137 -0
  112. package/skill/code-review/references/severity_criteria.md +100 -0
  113. package/skill/code-security-audit/SKILL.md +123 -0
  114. package/skill/code-security-audit/references/audit_process.md +277 -0
  115. package/skill/code-security-audit/references/remediation_patterns.md +599 -0
  116. package/skill/code-security-audit/references/report_format.md +391 -0
  117. package/skill/code-security-audit/references/security_domains.md +830 -0
  118. package/skill/code-security-audit/references/vulnerability_patterns.md +813 -0
  119. package/skill/composition-patterns/SKILL.md +83 -0
  120. package/skill/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  121. package/skill/composition-patterns/rules/architecture-compound-components.md +112 -0
  122. package/skill/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  123. package/skill/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  124. package/skill/composition-patterns/rules/react19-no-forwardref.md +42 -0
  125. package/skill/composition-patterns/rules/state-context-interface.md +191 -0
  126. package/skill/composition-patterns/rules/state-decouple-implementation.md +113 -0
  127. package/skill/composition-patterns/rules/state-lift-state.md +125 -0
  128. package/skill/deploy-to-vercel/SKILL.md +293 -0
  129. package/skill/deploy-to-vercel/resources/deploy-sandbox.sh +301 -0
  130. package/skill/deploy-to-vercel/resources/deploy.sh +301 -0
  131. package/skill/doc/SKILL_GUIDELINES.md +138 -0
  132. package/skill/git-workflow/SKILL.md +94 -0
  133. package/skill/git-workflow/references/advanced-git.md +632 -0
  134. package/skill/git-workflow/references/branching-strategies.md +344 -0
  135. package/skill/git-workflow/references/ci-cd-integration.md +683 -0
  136. package/skill/git-workflow/references/code-quality-tools.md +351 -0
  137. package/skill/git-workflow/references/commit-conventions.md +439 -0
  138. package/skill/git-workflow/references/github-releases.md +288 -0
  139. package/skill/git-workflow/references/pull-request-workflow.md +773 -0
  140. package/skill/git-workflow/scripts/verify-git-workflow.sh +263 -0
  141. package/skill/jetbrains-vmoptions/SKILL.md +51 -0
  142. package/skill/jetbrains-vmoptions/references/common-options.md +357 -0
  143. package/skill/jetbrains-vmoptions/references/gc-options.md +350 -0
  144. package/skill/jetbrains-vmoptions/references/memory-options.md +339 -0
  145. package/skill/jetbrains-vmoptions/references/prerequisite-check.md +65 -0
  146. package/skill/kysely-converter/SKILL.md +62 -0
  147. package/skill/kysely-converter/references/delete.md +323 -0
  148. package/skill/kysely-converter/references/insert.md +386 -0
  149. package/skill/kysely-converter/references/operators.md +331 -0
  150. package/skill/kysely-converter/references/select.md +1000 -0
  151. package/skill/kysely-converter/references/update.md +349 -0
  152. package/skill/kysely-converter/references/window_function.md +537 -0
  153. package/skill/react-best-practices/SKILL.md +131 -0
  154. package/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  155. package/skill/react-best-practices/rules/advanced-init-once.md +42 -0
  156. package/skill/react-best-practices/rules/advanced-use-latest.md +39 -0
  157. package/skill/react-best-practices/rules/async-api-routes.md +38 -0
  158. package/skill/react-best-practices/rules/async-defer-await.md +80 -0
  159. package/skill/react-best-practices/rules/async-dependencies.md +51 -0
  160. package/skill/react-best-practices/rules/async-parallel.md +28 -0
  161. package/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  162. package/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  163. package/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  164. package/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  165. package/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  166. package/skill/react-best-practices/rules/bundle-preload.md +50 -0
  167. package/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  168. package/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  169. package/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  170. package/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  171. package/skill/react-best-practices/rules/js-batch-dom-css.md +107 -0
  172. package/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  173. package/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  174. package/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  175. package/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  176. package/skill/react-best-practices/rules/js-early-exit.md +50 -0
  177. package/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  178. package/skill/react-best-practices/rules/js-index-maps.md +37 -0
  179. package/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  180. package/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  181. package/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  182. package/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  183. package/skill/react-best-practices/rules/rendering-activity.md +26 -0
  184. package/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  185. package/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  186. package/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  187. package/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  188. package/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  189. package/skill/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  190. package/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  191. package/skill/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  192. package/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  193. package/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  194. package/skill/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  195. package/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  196. package/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  197. package/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  198. package/skill/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  199. package/skill/react-best-practices/rules/rerender-memo.md +44 -0
  200. package/skill/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  201. package/skill/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  202. package/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  203. package/skill/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  204. package/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  205. package/skill/react-best-practices/rules/server-auth-actions.md +96 -0
  206. package/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  207. package/skill/react-best-practices/rules/server-cache-react.md +76 -0
  208. package/skill/react-best-practices/rules/server-dedup-props.md +65 -0
  209. package/skill/react-best-practices/rules/server-hoist-static-io.md +142 -0
  210. package/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  211. package/skill/react-best-practices/rules/server-serialization.md +38 -0
  212. package/skill/react-native-skills/SKILL.md +115 -0
  213. package/skill/react-native-skills/rules/animation-derived-value.md +53 -0
  214. package/skill/react-native-skills/rules/animation-gesture-detector-press.md +95 -0
  215. package/skill/react-native-skills/rules/animation-gpu-properties.md +65 -0
  216. package/skill/react-native-skills/rules/design-system-compound-components.md +66 -0
  217. package/skill/react-native-skills/rules/fonts-config-plugin.md +71 -0
  218. package/skill/react-native-skills/rules/imports-design-system-folder.md +68 -0
  219. package/skill/react-native-skills/rules/js-hoist-intl.md +61 -0
  220. package/skill/react-native-skills/rules/list-performance-callbacks.md +44 -0
  221. package/skill/react-native-skills/rules/list-performance-function-references.md +132 -0
  222. package/skill/react-native-skills/rules/list-performance-images.md +53 -0
  223. package/skill/react-native-skills/rules/list-performance-inline-objects.md +97 -0
  224. package/skill/react-native-skills/rules/list-performance-item-expensive.md +94 -0
  225. package/skill/react-native-skills/rules/list-performance-item-memo.md +82 -0
  226. package/skill/react-native-skills/rules/list-performance-item-types.md +104 -0
  227. package/skill/react-native-skills/rules/list-performance-virtualize.md +67 -0
  228. package/skill/react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
  229. package/skill/react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
  230. package/skill/react-native-skills/rules/navigation-native-navigators.md +188 -0
  231. package/skill/react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
  232. package/skill/react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
  233. package/skill/react-native-skills/rules/react-state-dispatcher.md +91 -0
  234. package/skill/react-native-skills/rules/react-state-fallback.md +56 -0
  235. package/skill/react-native-skills/rules/react-state-minimize.md +65 -0
  236. package/skill/react-native-skills/rules/rendering-no-falsy-and.md +74 -0
  237. package/skill/react-native-skills/rules/rendering-text-in-text-component.md +36 -0
  238. package/skill/react-native-skills/rules/scroll-position-no-state.md +82 -0
  239. package/skill/react-native-skills/rules/state-ground-truth.md +80 -0
  240. package/skill/react-native-skills/rules/ui-expo-image.md +66 -0
  241. package/skill/react-native-skills/rules/ui-image-gallery.md +104 -0
  242. package/skill/react-native-skills/rules/ui-measure-views.md +78 -0
  243. package/skill/react-native-skills/rules/ui-menus.md +174 -0
  244. package/skill/react-native-skills/rules/ui-native-modals.md +77 -0
  245. package/skill/react-native-skills/rules/ui-pressable.md +61 -0
  246. package/skill/react-native-skills/rules/ui-safe-area-scroll.md +65 -0
  247. package/skill/react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
  248. package/skill/react-native-skills/rules/ui-styling.md +87 -0
  249. package/skill/react-vite-guide/SKILL.md +101 -0
  250. package/skill/react-vite-guide/references/composition-patterns.md +709 -0
  251. package/skill/react-vite-guide/references/performance-optimization.md +1222 -0
  252. package/skill/react-vite-guide/references/vite-specific.md +385 -0
  253. package/skill/react-vite-guide/references/web-interface.md +146 -0
  254. package/skill/skill-maker/SKILL.md +52 -0
  255. package/skill/skill-maker/references/content_spec.md +67 -0
  256. package/skill/skill-maker/references/frontmatter_spec.md +96 -0
  257. package/skill/skill-maker/references/input_validation.md +90 -0
  258. package/skill/skill-maker/references/skill_structure.md +74 -0
  259. package/skill/system-prompt-creator/SKILL.md +50 -0
  260. package/skill/system-prompt-creator/references/data_format_selection.md +135 -0
  261. package/skill/system-prompt-creator/references/multi_prompt_architecture.md +386 -0
  262. package/skill/system-prompt-creator/references/prompt_structure.md +140 -0
  263. package/skill/system-prompt-creator/references/quality_criteria.md +83 -0
  264. package/skill/typst-creator/SKILL.md +51 -0
  265. package/skill/typst-creator/references/layout.md +401 -0
  266. package/skill/typst-creator/references/math.md +297 -0
  267. package/skill/typst-creator/references/scripting.md +237 -0
  268. package/skill/typst-creator/references/styling.md +217 -0
  269. package/skill/typst-creator/references/syntax.md +234 -0
  270. package/skill/web-design-guidelines/SKILL.md +35 -0
  271. package/terminal.png +0 -0
@@ -0,0 +1,386 @@
1
+ # Kysely INSERT Reference
2
+
3
+ ## Basic INSERT
4
+ ```sql
5
+ INSERT INTO person (first_name, last_name, age) VALUES ('Jennifer', 'Aniston', 40)
6
+ ```
7
+ ```ts
8
+ db.insertInto('person')
9
+ .values({
10
+ first_name: 'Jennifer',
11
+ last_name: 'Aniston',
12
+ age: 40
13
+ })
14
+ .execute()
15
+ ```
16
+
17
+ ## Insert Single Row
18
+ ```sql
19
+ INSERT INTO person (first_name, last_name, age) VALUES ('Jennifer', 'Aniston', 40)
20
+ ```
21
+ ```ts
22
+ const result = await db
23
+ .insertInto('person')
24
+ .values({
25
+ first_name: 'Jennifer',
26
+ last_name: 'Aniston',
27
+ age: 40
28
+ })
29
+ .executeTakeFirst()
30
+
31
+ // MySQL: result.insertId contains auto-increment id
32
+ // PostgreSQL: use returning() to get inserted data
33
+ ```
34
+
35
+ ## Insert Multiple Rows
36
+ ```sql
37
+ INSERT INTO person (first_name, last_name, age) VALUES
38
+ ('Jennifer', 'Aniston', 40),
39
+ ('Arnold', 'Schwarzenegger', 70)
40
+ ```
41
+ ```ts
42
+ db.insertInto('person')
43
+ .values([
44
+ { first_name: 'Jennifer', last_name: 'Aniston', age: 40 },
45
+ { first_name: 'Arnold', last_name: 'Schwarzenegger', age: 70 }
46
+ ])
47
+ .execute()
48
+ ```
49
+
50
+ ## INSERT with RETURNING (PostgreSQL)
51
+ ```sql
52
+ INSERT INTO person (first_name, last_name, age)
53
+ VALUES ('Jennifer', 'Aniston', 40)
54
+ RETURNING id, first_name
55
+ ```
56
+ ```ts
57
+ const result = await db
58
+ .insertInto('person')
59
+ .values({
60
+ first_name: 'Jennifer',
61
+ last_name: 'Aniston',
62
+ age: 40
63
+ })
64
+ .returning(['id', 'first_name'])
65
+ .executeTakeFirstOrThrow()
66
+ ```
67
+
68
+ ### RETURNING All Columns
69
+ ```sql
70
+ INSERT INTO person (first_name) VALUES ('Jennifer') RETURNING *
71
+ ```
72
+ ```ts
73
+ db.insertInto('person')
74
+ .values({ first_name: 'Jennifer' })
75
+ .returningAll()
76
+ .executeTakeFirstOrThrow()
77
+ ```
78
+
79
+ ### RETURNING with Alias
80
+ ```sql
81
+ INSERT INTO person (first_name) VALUES ('Jennifer')
82
+ RETURNING id, first_name AS name
83
+ ```
84
+ ```ts
85
+ db.insertInto('person')
86
+ .values({ first_name: 'Jennifer' })
87
+ .returning(['id', 'first_name as name'])
88
+ .executeTakeFirstOrThrow()
89
+ ```
90
+
91
+ ## INSERT with Expression Values
92
+ ```sql
93
+ INSERT INTO person (first_name, last_name, middle_name, age)
94
+ VALUES ('Jennifer', CONCAT('Ani', 'ston'), first_name, (SELECT AVG(age) FROM person))
95
+ ```
96
+ ```ts
97
+ db.insertInto('person')
98
+ .values(({ ref, selectFrom, fn }) => ({
99
+ first_name: 'Jennifer',
100
+ last_name: sql<string>`CONCAT(${'Ani'}, ${'ston'})`,
101
+ middle_name: ref('first_name'),
102
+ age: selectFrom('person').select(fn.avg<number>('age').as('avg_age'))
103
+ }))
104
+ .execute()
105
+ ```
106
+
107
+ ## INSERT ... SELECT (Subquery)
108
+ ```sql
109
+ INSERT INTO person (first_name, last_name, age)
110
+ SELECT name, 'Petson', 7 FROM pet
111
+ ```
112
+ ```ts
113
+ db.insertInto('person')
114
+ .columns(['first_name', 'last_name', 'age'])
115
+ .expression((eb) => eb
116
+ .selectFrom('pet')
117
+ .select((eb) => [
118
+ 'pet.name',
119
+ eb.val('Petson').as('last_name'),
120
+ eb.lit(7).as('age')
121
+ ])
122
+ )
123
+ .execute()
124
+ ```
125
+
126
+ ## INSERT DEFAULT VALUES
127
+ ```sql
128
+ INSERT INTO person DEFAULT VALUES
129
+ ```
130
+ ```ts
131
+ db.insertInto('person')
132
+ .defaultValues()
133
+ .execute()
134
+ ```
135
+
136
+ ## ON CONFLICT (PostgreSQL, SQLite)
137
+
138
+ ### DO NOTHING
139
+ ```sql
140
+ INSERT INTO pet (name, species, owner_id) VALUES ('Catto', 'cat', 3)
141
+ ON CONFLICT (name) DO NOTHING
142
+ ```
143
+ ```ts
144
+ db.insertInto('pet')
145
+ .values({
146
+ name: 'Catto',
147
+ species: 'cat',
148
+ owner_id: 3
149
+ })
150
+ .onConflict((oc) => oc
151
+ .column('name')
152
+ .doNothing()
153
+ )
154
+ .execute()
155
+ ```
156
+
157
+ ### DO UPDATE SET (Upsert)
158
+ ```sql
159
+ INSERT INTO pet (name, species, owner_id) VALUES ('Catto', 'cat', 3)
160
+ ON CONFLICT (name) DO UPDATE SET species = 'hamster'
161
+ ```
162
+ ```ts
163
+ db.insertInto('pet')
164
+ .values({
165
+ name: 'Catto',
166
+ species: 'cat',
167
+ owner_id: 3
168
+ })
169
+ .onConflict((oc) => oc
170
+ .column('name')
171
+ .doUpdateSet({ species: 'hamster' })
172
+ )
173
+ .execute()
174
+ ```
175
+
176
+ ### ON CONFLICT with Constraint Name
177
+ ```sql
178
+ INSERT INTO pet (name, species) VALUES ('Catto', 'cat')
179
+ ON CONFLICT ON CONSTRAINT pet_name_key DO UPDATE SET species = 'hamster'
180
+ ```
181
+ ```ts
182
+ db.insertInto('pet')
183
+ .values({ name: 'Catto', species: 'cat' })
184
+ .onConflict((oc) => oc
185
+ .constraint('pet_name_key')
186
+ .doUpdateSet({ species: 'hamster' })
187
+ )
188
+ .execute()
189
+ ```
190
+
191
+ ### ON CONFLICT with Multiple Columns
192
+ ```sql
193
+ INSERT INTO pet (name, owner_id, species) VALUES ('Catto', 1, 'cat')
194
+ ON CONFLICT (name, owner_id) DO UPDATE SET species = 'hamster'
195
+ ```
196
+ ```ts
197
+ db.insertInto('pet')
198
+ .values({ name: 'Catto', owner_id: 1, species: 'cat' })
199
+ .onConflict((oc) => oc
200
+ .columns(['name', 'owner_id'])
201
+ .doUpdateSet({ species: 'hamster' })
202
+ )
203
+ .execute()
204
+ ```
205
+
206
+ ### ON CONFLICT with Expression
207
+ ```sql
208
+ INSERT INTO pet (name, species) VALUES ('Catto', 'cat')
209
+ ON CONFLICT (lower(name)) DO UPDATE SET species = 'hamster'
210
+ ```
211
+ ```ts
212
+ db.insertInto('pet')
213
+ .values({ name: 'Catto', species: 'cat' })
214
+ .onConflict((oc) => oc
215
+ .expression(sql<string>`lower(name)`)
216
+ .doUpdateSet({ species: 'hamster' })
217
+ )
218
+ .execute()
219
+ ```
220
+
221
+ ### ON CONFLICT with WHERE
222
+ ```sql
223
+ INSERT INTO pet (name, species) VALUES ('Catto', 'cat')
224
+ ON CONFLICT (name) DO UPDATE SET species = 'hamster'
225
+ WHERE excluded.name != 'Catto'
226
+ ```
227
+ ```ts
228
+ db.insertInto('pet')
229
+ .values({ name: 'Catto', species: 'cat' })
230
+ .onConflict((oc) => oc
231
+ .column('name')
232
+ .doUpdateSet({ species: 'hamster' })
233
+ .where('excluded.name', '!=', 'Catto')
234
+ )
235
+ .execute()
236
+ ```
237
+
238
+ ### Using excluded Table (Upsert with Original Values)
239
+ ```sql
240
+ INSERT INTO person (id, first_name, last_name, gender)
241
+ VALUES (1, 'John', 'Doe', 'male')
242
+ ON CONFLICT (id) DO UPDATE SET
243
+ first_name = excluded.first_name,
244
+ last_name = excluded.last_name
245
+ ```
246
+ ```ts
247
+ db.insertInto('person')
248
+ .values({
249
+ id: 1,
250
+ first_name: 'John',
251
+ last_name: 'Doe',
252
+ gender: 'male'
253
+ })
254
+ .onConflict((oc) => oc
255
+ .column('id')
256
+ .doUpdateSet(({ ref }) => ({
257
+ first_name: ref('excluded.first_name'),
258
+ last_name: ref('excluded.last_name')
259
+ }))
260
+ )
261
+ .execute()
262
+ ```
263
+
264
+ ## ON DUPLICATE KEY UPDATE (MySQL)
265
+ ```sql
266
+ INSERT INTO person (id, first_name, last_name, gender)
267
+ VALUES (1, 'John', 'Doe', 'male')
268
+ ON DUPLICATE KEY UPDATE updated_at = NOW()
269
+ ```
270
+ ```ts
271
+ db.insertInto('person')
272
+ .values({
273
+ id: 1,
274
+ first_name: 'John',
275
+ last_name: 'Doe',
276
+ gender: 'male'
277
+ })
278
+ .onDuplicateKeyUpdate({ updated_at: new Date().toISOString() })
279
+ .execute()
280
+ ```
281
+
282
+ ### ON DUPLICATE KEY with Expression
283
+ ```ts
284
+ db.insertInto('person')
285
+ .values({ id: 1, first_name: 'John' })
286
+ .onDuplicateKeyUpdate((eb) => ({
287
+ first_name: eb.ref('person.first_name'),
288
+ updated_at: sql`NOW()`
289
+ }))
290
+ .execute()
291
+ ```
292
+
293
+ ## INSERT IGNORE (MySQL)
294
+ ```sql
295
+ INSERT IGNORE INTO person (first_name, last_name) VALUES ('John', 'Doe')
296
+ ```
297
+ ```ts
298
+ db.insertInto('person')
299
+ .ignore()
300
+ .values({ first_name: 'John', last_name: 'Doe' })
301
+ .execute()
302
+ ```
303
+
304
+ ## INSERT OR IGNORE (SQLite)
305
+ ```sql
306
+ INSERT OR IGNORE INTO person (first_name, last_name) VALUES ('John', 'Doe')
307
+ ```
308
+ ```ts
309
+ db.insertInto('person')
310
+ .orIgnore()
311
+ .values({ first_name: 'John', last_name: 'Doe' })
312
+ .execute()
313
+ ```
314
+
315
+ ## INSERT OR REPLACE (SQLite)
316
+ ```sql
317
+ INSERT OR REPLACE INTO person (first_name, last_name) VALUES ('John', 'Doe')
318
+ ```
319
+ ```ts
320
+ db.insertInto('person')
321
+ .orReplace()
322
+ .values({ first_name: 'John', last_name: 'Doe' })
323
+ .execute()
324
+ ```
325
+
326
+ ## WITH CTE + INSERT
327
+ ```sql
328
+ WITH jennifer AS (
329
+ SELECT id, first_name FROM person WHERE first_name = 'Jennifer' LIMIT 1
330
+ )
331
+ INSERT INTO pet (owner_id, name, species)
332
+ SELECT id, first_name, 'cat' FROM jennifer
333
+ ```
334
+ ```ts
335
+ db.with('jennifer', (db) => db
336
+ .selectFrom('person')
337
+ .where('first_name', '=', 'Jennifer')
338
+ .select(['id', 'first_name'])
339
+ .limit(1)
340
+ )
341
+ .insertInto('pet')
342
+ .columns(['owner_id', 'name', 'species'])
343
+ .expression((eb) => eb
344
+ .selectFrom('jennifer')
345
+ .select(['id', 'first_name', eb.val('cat').as('species')])
346
+ )
347
+ .execute()
348
+ ```
349
+
350
+ ## Raw SQL in Values
351
+ ```ts
352
+ import { sql } from 'kysely'
353
+
354
+ db.insertInto('person')
355
+ .values({
356
+ first_name: 'John',
357
+ created_at: sql`NOW()`,
358
+ uuid: sql`UUID()`
359
+ })
360
+ .execute()
361
+ ```
362
+
363
+ ## Conditional Insert ($if)
364
+ ```ts
365
+ async function insertPerson(data: PersonInput, returnId: boolean) {
366
+ return await db
367
+ .insertInto('person')
368
+ .values(data)
369
+ .$if(returnId, (qb) => qb.returning('id'))
370
+ .execute()
371
+ }
372
+ ```
373
+
374
+ ## Dialect Differences
375
+
376
+ ### MySQL
377
+ - Uses backticks for identifiers: \`table\`.\`column\`
378
+ - `ON DUPLICATE KEY UPDATE` for upsert
379
+ - `INSERT IGNORE` for ignoring duplicate key errors
380
+ - `insertId` available in result for auto-increment columns
381
+
382
+ ### PostgreSQL
383
+ - Uses double quotes for identifiers: "table"."column"
384
+ - `ON CONFLICT ... DO NOTHING / DO UPDATE` for upsert
385
+ - `RETURNING` clause for getting inserted data
386
+ - No `insertId` - use `RETURNING id` instead
@@ -0,0 +1,331 @@
1
+ # Kysely Operators Reference
2
+
3
+ ## Comparison Operators
4
+ | SQL | Kysely |
5
+ |-----|--------|
6
+ | `=` | `'='` |
7
+ | `==` | `'=='` |
8
+ | `!=` or `<>` | `'!='` or `'<>'` |
9
+ | `>` | `'>'` |
10
+ | `>=` | `'>='` |
11
+ | `<` | `'<'` |
12
+ | `<=` | `'<='` |
13
+ | `IN` | `'in'` |
14
+ | `NOT IN` | `'not in'` |
15
+ | `IS` | `'is'` |
16
+ | `IS NOT` | `'is not'` |
17
+ | `LIKE` | `'like'` |
18
+ | `NOT LIKE` | `'not like'` |
19
+ | `MATCH` | `'match'` |
20
+ | `BETWEEN` | `'between'` |
21
+ | `BETWEEN SYMMETRIC` | `'between symmetric'` |
22
+ | `IS DISTINCT FROM` | `'is distinct from'` |
23
+ | `IS NOT DISTINCT FROM` | `'is not distinct from'` |
24
+
25
+ ### PostgreSQL Specific
26
+ | SQL | Kysely |
27
+ |-----|--------|
28
+ | `ILIKE` | `'ilike'` |
29
+ | `NOT ILIKE` | `'not ilike'` |
30
+ | `~` (regex match) | `'~'` |
31
+ | `~*` (case-insensitive regex) | `'~*'` |
32
+ | `!~` (not regex match) | `'!~'` |
33
+ | `!~*` (case-insensitive not regex) | `'!~*'` |
34
+ | `@@` (full-text search) | `'@@'` |
35
+ | `@@@` | `'@@@'` |
36
+ | `@>` (contains) | `'@>'` |
37
+ | `<@` (contained by) | `'<@'` |
38
+ | `^@` (starts with) | `'^@'` |
39
+ | `&&` (overlap) | `'&&'` |
40
+ | `?` (key exists) | `'?'` |
41
+ | `?&` (all keys exist) | `'?&'` |
42
+ | `?\|` (any key exists) | `'?\|'` |
43
+ | `<->` (distance) | `'<->'` |
44
+
45
+ ### MySQL Specific
46
+ | SQL | Kysely | 비고 |
47
+ |-----|--------|------|
48
+ | `REGEXP` | `'regexp'` | |
49
+ | `RLIKE` | `'regexp'` | `REGEXP`의 동의어 |
50
+ | `<=>` (null-safe equal) | `'<=>'` | |
51
+ | `!<` | `'!<'` | |
52
+ | `!>` | `'!>'` | |
53
+
54
+ ## Arithmetic Operators
55
+ | SQL | Kysely | 비고 |
56
+ |-----|--------|------|
57
+ | `+` | `'+'` | |
58
+ | `-` | `'-'` | |
59
+ | `*` | `'*'` | |
60
+ | `/` | `'/'` | |
61
+ | `%` (modulo) | `'%'` | `MOD`와 동일 |
62
+ | `^` | `'^'` | **PostgreSQL**: power, **MySQL**: bitwise XOR |
63
+ | `&` (bitwise AND) | `'&'` | |
64
+ | `\|` (bitwise OR) | `'\|'` | |
65
+ | `#` (bitwise XOR) | `'#'` | PostgreSQL only |
66
+ | `<<` (left shift) | `'<<'` | |
67
+ | `>>` (right shift) | `'>>'` | |
68
+ | `\|\|` (concat) | `'\|\|'` | **PostgreSQL**: 문자열/배열/JSONB 연결 |
69
+
70
+ ## JSON Operators
71
+ | SQL | Kysely | 비고 |
72
+ |-----|--------|------|
73
+ | `->` (get JSON element) | `'->'` | |
74
+ | `->>` (get JSON element as text) | `'->>'` | |
75
+ | `->$` (JSON path) | `'->$'` | MySQL JSON path syntax |
76
+ | `->>$` (JSON path as text) | `'->>$'` | MySQL JSON path unquoting |
77
+
78
+ ### JSON Path (for eb.ref)
79
+ ```ts
80
+ // PostgreSQL JSON path
81
+ eb.ref('column', '->').key('field').at(0)
82
+ ```
83
+ ```sql
84
+ "column"->'field'->0
85
+ ```
86
+
87
+ ```ts
88
+ // MySQL JSON path
89
+ eb.ref('column', '->$').key('field').at('last')
90
+ ```
91
+ ```sql
92
+ `column`->'$.field[last]'
93
+ ```
94
+
95
+ ## Unary Operators
96
+ | SQL | Kysely | 비고 |
97
+ |-----|--------|------|
98
+ | `EXISTS` | `'exists'` | `eb.exists()` |
99
+ | `NOT EXISTS` | `'not exists'` | |
100
+ | `NOT` | `'not'` | `eb.not()` |
101
+ | `-` (negative) | `'-'` | `eb.neg()` |
102
+ | `!!` | `'!!'` | PostgreSQL boolean 테스트 |
103
+
104
+ ## Logical Operators
105
+
106
+ ### AND
107
+ ```ts
108
+ // Chained where (implicit AND)
109
+ .where('status', '=', 'active')
110
+ .where('type', '=', 'user')
111
+
112
+ // Explicit AND with expression builder
113
+ .where((eb) => eb.and([
114
+ eb('status', '=', 'active'),
115
+ eb('type', '=', 'user')
116
+ ]))
117
+ ```
118
+ ```sql
119
+ WHERE "status" = 'active' AND "type" = 'user'
120
+ ```
121
+
122
+ ### OR
123
+ ```ts
124
+ .where((eb) => eb.or([
125
+ eb('status', '=', 'active'),
126
+ eb('status', '=', 'pending')
127
+ ]))
128
+ ```
129
+ ```sql
130
+ WHERE ("status" = 'active' OR "status" = 'pending')
131
+ ```
132
+
133
+ ### Combined AND/OR
134
+ ```ts
135
+ .where((eb) =>
136
+ eb.or([
137
+ eb.and([
138
+ eb('status', '=', 'active'),
139
+ eb('type', '=', 'a')
140
+ ]),
141
+ eb.and([
142
+ eb('status', '=', 'pending'),
143
+ eb('type', '=', 'b')
144
+ ])
145
+ ])
146
+ )
147
+ ```
148
+ ```sql
149
+ WHERE (("status" = 'active' AND "type" = 'a') OR ("status" = 'pending' AND "type" = 'b'))
150
+ ```
151
+
152
+ ## Usage Examples
153
+
154
+ ### Basic Comparison
155
+ ```ts
156
+ .where('age', '>', 18)
157
+ .where('status', '=', 'active')
158
+ .where('name', 'like', '%john%')
159
+ ```
160
+ ```sql
161
+ WHERE "age" > 18 AND "status" = 'active' AND "name" LIKE '%john%'
162
+ ```
163
+
164
+ ### NULL Checks
165
+ ```ts
166
+ .where('deleted_at', 'is', null)
167
+ .where('name', 'is not', null)
168
+ ```
169
+ ```sql
170
+ WHERE "deleted_at" IS NULL AND "name" IS NOT NULL
171
+ ```
172
+
173
+ ### IN / NOT IN
174
+ ```ts
175
+ .where('id', 'in', [1, 2, 3])
176
+ .where('status', 'not in', ['deleted', 'archived'])
177
+ ```
178
+ ```sql
179
+ WHERE "id" IN (1, 2, 3) AND "status" NOT IN ('deleted', 'archived')
180
+ ```
181
+
182
+ ### BETWEEN
183
+ ```ts
184
+ .where('age', 'between', [18, 65])
185
+ ```
186
+ ```sql
187
+ WHERE "age" BETWEEN 18 AND 65
188
+ ```
189
+
190
+ ### Column to Column (whereRef)
191
+ ```ts
192
+ .whereRef('updated_at', '>', 'created_at')
193
+ .whereRef('pet.owner_id', '=', 'person.id')
194
+ ```
195
+ ```sql
196
+ WHERE "updated_at" > "created_at" AND "pet"."owner_id" = "person"."id"
197
+ ```
198
+
199
+ ### Arithmetic in SET
200
+ ```ts
201
+ .set((eb) => ({
202
+ age: eb('age', '+', 1),
203
+ score: eb('score', '*', 2)
204
+ }))
205
+ ```
206
+ ```sql
207
+ SET "age" = "age" + 1, "score" = "score" * 2
208
+ ```
209
+
210
+ ## Dialect Differences
211
+
212
+ ### MySQL
213
+ - Uses backticks for identifiers: \`table\`.\`column\`
214
+ - `REGEXP` for regex matching
215
+ - `<=>` for null-safe equality comparison
216
+
217
+ ### PostgreSQL
218
+ - Uses double quotes for identifiers: "table"."column"
219
+ - `ILIKE` for case-insensitive LIKE
220
+ - `~`, `~*`, `!~`, `!~*` for regex operations
221
+ - `@@` for full-text search
222
+ - `@>`, `<@`, `&&` for array/JSON operations
223
+ - `||` for string/array/JSONB concatenation
224
+
225
+ ## Array/Subquery Operators
226
+
227
+ ### ANY / SOME
228
+ ```ts
229
+ // PostgreSQL: value = ANY(array_column)
230
+ db.selectFrom('person')
231
+ .selectAll()
232
+ .where((eb) => eb(
233
+ eb.val('Jen'),
234
+ '=',
235
+ eb.fn.any('nicknames') // nicknames is string[] column
236
+ ))
237
+ ```
238
+ ```sql
239
+ SELECT * FROM "person" WHERE 'Jen' = ANY("nicknames")
240
+ ```
241
+
242
+ ```ts
243
+ // With subquery
244
+ db.selectFrom('person')
245
+ .selectAll()
246
+ .where((eb) => eb(
247
+ eb.val('dog'),
248
+ '=',
249
+ eb.fn.any(
250
+ eb.selectFrom('pet')
251
+ .select('species')
252
+ .whereRef('owner_id', '=', 'person.id')
253
+ )
254
+ ))
255
+ ```
256
+ ```sql
257
+ SELECT * FROM "person"
258
+ WHERE 'dog' = ANY(SELECT "species" FROM "pet" WHERE "owner_id" = "person"."id")
259
+ ```
260
+
261
+ ## Raw SQL Required
262
+ 다음 연산자들은 Kysely에서 직접 지원하지 않으며 `sql` 템플릿 태그를 사용해야 합니다:
263
+
264
+ ### MySQL
265
+ | SQL | 설명 |
266
+ |-----|------|
267
+ | `NOT REGEXP` / `NOT RLIKE` | 정규식 불일치 |
268
+ | `DIV` | 정수 나눗셈 |
269
+ | `XOR` | 논리적 XOR |
270
+ | `SOUNDS LIKE` | 발음 유사성 비교 |
271
+ | `BINARY` | 대소문자 구분 비교를 위한 바이너리 캐스팅 |
272
+
273
+ ### PostgreSQL
274
+ | SQL | 설명 |
275
+ |-----|------|
276
+ | `SIMILAR TO` | SQL 표준 정규식 패턴 매칭 |
277
+ | `NOT SIMILAR TO` | SIMILAR TO 부정 |
278
+ | `#>` | JSON 경로로 JSON 객체 접근 |
279
+ | `#>>` | JSON 경로로 텍스트 접근 |
280
+ | `#-` | JSON 경로 삭제 |
281
+ | `OVERLAPS` | 날짜/시간 범위 겹침 |
282
+
283
+ ### Common
284
+ | SQL | 설명 |
285
+ |-----|------|
286
+ | `NOT BETWEEN` | BETWEEN 부정 |
287
+ | `NOT BETWEEN SYMMETRIC` | BETWEEN SYMMETRIC 부정 (PostgreSQL) |
288
+ | `ALL` | 배열/서브쿼리 전체 비교 |
289
+
290
+ ### Raw SQL Example
291
+ ```ts
292
+ import { sql } from 'kysely'
293
+
294
+ // NOT BETWEEN
295
+ .where(sql`${sql.ref('age')} NOT BETWEEN ${18} AND ${65}`)
296
+ ```
297
+ ```sql
298
+ WHERE "age" NOT BETWEEN 18 AND 65
299
+ ```
300
+
301
+ ```ts
302
+ // DIV (MySQL)
303
+ .select(sql<number>`${sql.ref('amount')} DIV 3`.as('quotient'))
304
+ ```
305
+ ```sql
306
+ SELECT `amount` DIV 3 AS `quotient`
307
+ ```
308
+
309
+ ```ts
310
+ // BINARY (MySQL) - 대소문자 구분 비교
311
+ .where(sql`BINARY ${sql.ref('name')} = ${'John'}`)
312
+ ```
313
+ ```sql
314
+ WHERE BINARY `name` = 'John'
315
+ ```
316
+
317
+ ```ts
318
+ // SIMILAR TO (PostgreSQL)
319
+ .where(sql`${sql.ref('name')} SIMILAR TO ${'%(John|Jane)%'}`)
320
+ ```
321
+ ```sql
322
+ WHERE "name" SIMILAR TO '%(John|Jane)%'
323
+ ```
324
+
325
+ ```ts
326
+ // OVERLAPS (PostgreSQL)
327
+ .where(sql`(${sql.ref('start_date')}, ${sql.ref('end_date')}) OVERLAPS (${startDate}, ${endDate})`)
328
+ ```
329
+ ```sql
330
+ WHERE ("start_date", "end_date") OVERLAPS ('2024-01-01', '2024-12-31')
331
+ ```