@kamaalio/codemods 0.0.3 → 0.0.4

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.
package/README.md CHANGED
@@ -109,7 +109,7 @@ Passing both `--dry` and a config `dry_run` at the same time is an error — pic
109
109
 
110
110
  ## joi-to-zod
111
111
 
112
- Rewrites supported Joi schema patterns into Zod equivalents. It only touches files that use a default Joi import:
112
+ Rewrites supported Joi schema patterns into Zod equivalents. It only touches files that use a default import from `'joi'`, under any local name:
113
113
 
114
114
  ```ts
115
115
  import Joi from 'joi';
@@ -248,7 +248,7 @@ The codemod does not format its output. Run your formatter over the changed file
248
248
 
249
249
  ### Current constraints
250
250
 
251
- - The codemod only targets files with a default `import Joi from 'joi'`.
251
+ - The codemod only targets files with a default import from `'joi'`, e.g. `import Joi from 'joi'` — the local binding name can be anything.
252
252
  - The AST language is configured as TypeScript, so this project is best suited to TypeScript-style source files.
253
253
  - Coverage is driven by the rules and tests in [`src/codemods/joi-to-zod`](./src/codemods/joi-to-zod) and [`test/codemods/joi-to-zod`](./test/codemods/joi-to-zod). Patterns outside those rules may remain unchanged.
254
254
  - `precision(n)` reproduces Joi's default rounding behaviour. A source schema validated with `convert: false` rejects imprecise input instead of rounding it, and the generated Zod will not match that.
@@ -275,7 +275,7 @@ const transformed = await joiToZod(source, 'src/schema.ts');
275
275
  // export const id = z.string();
276
276
  ```
277
277
 
278
- Files without a default `Joi` import are returned unchanged.
278
+ Files without a default import from `'joi'` are returned unchanged.
279
279
 
280
280
  ### Inspect transformation details
281
281
 
@@ -1,3 +1,4 @@
1
+ import { spliced } from '../../../utils/arrays.js';
1
2
  import commitEditModifications from '../../utils/commit-edit-modifications.js';
2
3
  import getJoiImport from '../utils/get-joi-import.js';
3
4
  async function joiRemoveImport(modifications) {
@@ -9,8 +10,7 @@ async function joiRemoveImport(modifications) {
9
10
  const index = lines.findIndex(line => line.includes(joiImport.text()));
10
11
  if (index === -1)
11
12
  return modifications;
12
- lines.splice(index, 1);
13
- const edit = root.replace(lines.join('\n'));
13
+ const edit = root.replace(spliced(lines, index, 1).join('\n'));
14
14
  return commitEditModifications([edit], modifications);
15
15
  }
16
16
  export default joiRemoveImport;
@@ -1 +1 @@
1
- {"version":3,"file":"joi-remove-import.js","sourceRoot":"","sources":["../../../../src/codemods/joi-to-zod/rules/joi-remove-import.ts"],"names":[],"mappings":"AACA,OAAO,uBAAuB,MAAM,0CAA0C,CAAC;AAC/E,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD,KAAK,UAAU,eAAe,CAAC,aAA4B;IACzD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,aAAa,CAAC;IAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC;IAEvC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5C,OAAO,uBAAuB,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"joi-remove-import.js","sourceRoot":"","sources":["../../../../src/codemods/joi-to-zod/rules/joi-remove-import.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,uBAAuB,MAAM,0CAA0C,CAAC;AAC/E,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD,KAAK,UAAU,eAAe,CAAC,aAA4B;IACzD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,aAAa,CAAC;IAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/D,OAAO,uBAAuB,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,eAAe,eAAe,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export declare function compactMap<TargetElement, TransformedElement>(array: Array<TargetElement>, transformer: (value: TargetElement, index: number) => TransformedElement | null | undefined): Array<TransformedElement>;
2
+ export declare function spliced<T>(array: Array<T>, start: number, deleteCount?: number, ...items: Array<T>): Array<T>;
2
3
  export declare function groupBy<T, K extends keyof T>(array: Array<T>, key: K): Record<string, Array<T>>;
@@ -9,6 +9,11 @@ export function compactMap(array, transformer) {
9
9
  });
10
10
  return newArray;
11
11
  }
12
+ export function spliced(array, start, deleteCount = 0, ...items) {
13
+ const copy = [...array];
14
+ copy.splice(start, deleteCount, ...items);
15
+ return copy;
16
+ }
12
17
  export function groupBy(array, key) {
13
18
  return [...array].reduce((acc, current) => {
14
19
  const keyValue = String(current[key]);
@@ -1 +1 @@
1
- {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../src/utils/arrays.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CACxB,KAA2B,EAC3B,WAA2F;IAE3F,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAuB,KAAe,EAAE,GAAM;IACnE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../src/utils/arrays.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CACxB,KAA2B,EAC3B,WAA2F;IAE3F,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,KAAe,EAAE,KAAa,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,KAAe;IAC5F,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC;IAE1C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAuB,KAAe,EAAE,GAAM;IACnE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kamaalio/codemods",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "A collection of codemods, runnable as a single CLI.",
5
5
  "keywords": [
6
6
  "codemod",