orchid-orm 1.4.20 → 1.4.22

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.
@@ -0,0 +1,124 @@
1
+ import { updateTableFile } from './updateTableFile';
2
+ import { asMock, ast, makeTestWritten, tablePath } from '../testUtils';
3
+ import path from 'path';
4
+ import fs from 'fs/promises';
5
+
6
+ jest.mock('fs/promises', () => ({
7
+ mkdir: jest.fn(),
8
+ readFile: jest.fn(),
9
+ writeFile: jest.fn(),
10
+ }));
11
+
12
+ const baseTablePath = path.resolve('baseTable.ts');
13
+ const baseTableName = 'BaseTable';
14
+ const params = { baseTablePath, baseTableName, tablePath };
15
+
16
+ const testWritten = makeTestWritten(tablePath('renamedTable'));
17
+
18
+ describe('renameTable', () => {
19
+ beforeEach(() => {
20
+ jest.resetAllMocks();
21
+ });
22
+
23
+ it('should change `table` property', async () => {
24
+ asMock(fs.readFile)
25
+ .mockResolvedValue(`import { BaseTable } from '../baseTable';
26
+
27
+ export class Table extends BaseTable {
28
+ table = 'table';
29
+ columns = this.setColumns((t) => ({}));
30
+ }`);
31
+
32
+ await updateTableFile({
33
+ ...params,
34
+ ast: ast.renameTable,
35
+ });
36
+
37
+ testWritten(`import { BaseTable } from '../baseTable';
38
+
39
+ export class Table extends BaseTable {
40
+ table = 'renamedTable';
41
+ columns = this.setColumns((t) => ({}));
42
+ }`);
43
+ });
44
+
45
+ it('should change `schema` property', async () => {
46
+ asMock(fs.readFile)
47
+ .mockResolvedValue(`import { BaseTable } from '../baseTable';
48
+
49
+ export class Table extends BaseTable {
50
+ schema = 'one';
51
+ table = 'table';
52
+ columns = this.setColumns((t) => ({}));
53
+ }`);
54
+
55
+ await updateTableFile({
56
+ ...params,
57
+ ast: {
58
+ ...ast.renameTable,
59
+ fromSchema: 'one',
60
+ toSchema: 'two',
61
+ },
62
+ });
63
+
64
+ testWritten(`import { BaseTable } from '../baseTable';
65
+
66
+ export class Table extends BaseTable {
67
+ schema = 'two';
68
+ table = 'renamedTable';
69
+ columns = this.setColumns((t) => ({}));
70
+ }`);
71
+ });
72
+
73
+ it('should remove `schema` property', async () => {
74
+ asMock(fs.readFile)
75
+ .mockResolvedValue(`import { BaseTable } from '../baseTable';
76
+
77
+ export class Table extends BaseTable {
78
+ schema = 'one';
79
+ table = 'table';
80
+ columns = this.setColumns((t) => ({}));
81
+ }`);
82
+
83
+ await updateTableFile({
84
+ ...params,
85
+ ast: {
86
+ ...ast.renameTable,
87
+ fromSchema: 'one',
88
+ },
89
+ });
90
+
91
+ testWritten(`import { BaseTable } from '../baseTable';
92
+
93
+ export class Table extends BaseTable {
94
+ table = 'renamedTable';
95
+ columns = this.setColumns((t) => ({}));
96
+ }`);
97
+ });
98
+
99
+ it('should add `schema` property', async () => {
100
+ asMock(fs.readFile)
101
+ .mockResolvedValue(`import { BaseTable } from '../baseTable';
102
+
103
+ export class Table extends BaseTable {
104
+ table = 'table';
105
+ columns = this.setColumns((t) => ({}));
106
+ }`);
107
+
108
+ await updateTableFile({
109
+ ...params,
110
+ ast: {
111
+ ...ast.renameTable,
112
+ toSchema: 'schema',
113
+ },
114
+ });
115
+
116
+ testWritten(`import { BaseTable } from '../baseTable';
117
+
118
+ export class Table extends BaseTable {
119
+ schema = 'schema';
120
+ table = 'renamedTable';
121
+ columns = this.setColumns((t) => ({}));
122
+ }`);
123
+ });
124
+ });
@@ -19,12 +19,27 @@ export const renameTable = async ({
19
19
  const statements = ts.getStatements(content);
20
20
  const className = toPascalCase(ast.from);
21
21
 
22
+ const changeSchema = ast.fromSchema !== ast.toSchema;
23
+
22
24
  for (const node of ts.class.iterate(statements)) {
23
25
  if (node.name?.escapedText !== className) continue;
24
26
 
27
+ const addSchema =
28
+ changeSchema &&
29
+ ast.toSchema &&
30
+ !node.members.some((member) => ts.prop.getName(member) === 'schema');
31
+
32
+ if (addSchema && ast.toSchema) {
33
+ changes.add(
34
+ node.members.pos,
35
+ `\n schema = ${singleQuote(ast.toSchema)};`,
36
+ );
37
+ }
38
+
25
39
  for (const member of node.members) {
26
40
  const name = ts.prop.getName(member);
27
- if (name !== 'table') continue;
41
+
42
+ if (name !== 'table' && !(changeSchema && name === 'schema')) continue;
28
43
 
29
44
  const { initializer: value } = member as unknown as {
30
45
  initializer?: Expression;
@@ -32,7 +47,19 @@ export const renameTable = async ({
32
47
 
33
48
  if (!value) continue;
34
49
 
35
- changes.replace(value.pos, value.end, ` ${singleQuote(ast.to)}`);
50
+ if (name === 'schema') {
51
+ if (ast.toSchema) {
52
+ changes.replace(
53
+ value.pos,
54
+ value.end,
55
+ ` ${singleQuote(ast.toSchema)}`,
56
+ );
57
+ } else {
58
+ changes.remove(member.pos, member.end);
59
+ }
60
+ } else {
61
+ changes.replace(value.pos, value.end, ` ${singleQuote(ast.to)}`);
62
+ }
36
63
  }
37
64
  }
38
65
 
File without changes
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './table';
2
2
  export * from './orm';
3
3
  export * from './repo';
4
- export * from './appCodeUpdater/appCodeUpdater';
4
+ export * from './codegen/appCodeUpdater';
@@ -1,43 +0,0 @@
1
- import { updateTableFile } from './updateTableFile';
2
- import { asMock, ast, makeTestWritten, tablePath } from '../testUtils';
3
- import path from 'path';
4
- import fs from 'fs/promises';
5
-
6
- jest.mock('fs/promises', () => ({
7
- readFile: jest.fn(),
8
- writeFile: jest.fn(),
9
- }));
10
-
11
- const baseTablePath = path.resolve('baseTable.ts');
12
- const baseTableName = 'BaseTable';
13
- const params = { baseTablePath, baseTableName, tablePath };
14
-
15
- const testWritten = makeTestWritten(tablePath('renamedTable'));
16
-
17
- describe('renameTable', () => {
18
- beforeEach(() => {
19
- jest.resetAllMocks();
20
- });
21
-
22
- it('should only change `table` property', async () => {
23
- asMock(fs.readFile)
24
- .mockResolvedValue(`import { BaseTable } from '../baseTable';
25
-
26
- export class Table extends BaseTable {
27
- table = 'table';
28
- columns = this.setColumns((t) => ({}));
29
- }`);
30
-
31
- await updateTableFile({
32
- ...params,
33
- ast: ast.renameTable,
34
- });
35
-
36
- testWritten(`import { BaseTable } from '../baseTable';
37
-
38
- export class Table extends BaseTable {
39
- table = 'renamedTable';
40
- columns = this.setColumns((t) => ({}));
41
- }`);
42
- });
43
- });