@typeorm/codemod 1.0.1 → 1.0.3
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 +2 -1
- package/dist/cli/print-usage.js +1 -0
- package/dist/cli/print-usage.js.map +1 -1
- package/dist/cli/run-transforms.js +167 -79
- package/dist/cli/run-transforms.js.map +1 -1
- package/dist/dependencies/v1.js +1 -0
- package/dist/dependencies/v1.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/transforms/ast-helpers.js +820 -26
- package/dist/transforms/ast-helpers.js.map +1 -1
- package/dist/transforms/stats.js +11 -0
- package/dist/transforms/stats.js.map +1 -1
- package/dist/transforms/todo.js +22 -5
- package/dist/transforms/todo.js.map +1 -1
- package/dist/transforms/v1/column-readonly.js +28 -8
- package/dist/transforms/v1/column-readonly.js.map +1 -1
- package/dist/transforms/v1/column-unsigned-numeric.js +21 -18
- package/dist/transforms/v1/column-unsigned-numeric.js.map +1 -1
- package/dist/transforms/v1/column-width-zerofill.js +9 -3
- package/dist/transforms/v1/column-width-zerofill.js.map +1 -1
- package/dist/transforms/v1/connection-options-reader.js +23 -7
- package/dist/transforms/v1/connection-options-reader.js.map +1 -1
- package/dist/transforms/v1/connection-to-datasource.js +871 -88
- package/dist/transforms/v1/connection-to-datasource.js.map +1 -1
- package/dist/transforms/v1/datasource-expo.js +79 -0
- package/dist/transforms/v1/datasource-expo.js.map +1 -0
- package/dist/transforms/v1/datasource-mongodb.js +77 -50
- package/dist/transforms/v1/datasource-mongodb.js.map +1 -1
- package/dist/transforms/v1/datasource-mssql.js +88 -44
- package/dist/transforms/v1/datasource-mssql.js.map +1 -1
- package/dist/transforms/v1/datasource-mysql-connector.js +22 -6
- package/dist/transforms/v1/datasource-mysql-connector.js.map +1 -1
- package/dist/transforms/v1/datasource-name.js +17 -14
- package/dist/transforms/v1/datasource-name.js.map +1 -1
- package/dist/transforms/v1/datasource-sap.js +51 -39
- package/dist/transforms/v1/datasource-sap.js.map +1 -1
- package/dist/transforms/v1/datasource-sqlite-options.js +4 -1
- package/dist/transforms/v1/datasource-sqlite-options.js.map +1 -1
- package/dist/transforms/v1/file-logger.js +2 -21
- package/dist/transforms/v1/file-logger.js.map +1 -1
- package/dist/transforms/v1/find-options-string-relations.js +75 -11
- package/dist/transforms/v1/find-options-string-relations.js.map +1 -1
- package/dist/transforms/v1/find-options-string-select.js +75 -13
- package/dist/transforms/v1/find-options-string-select.js.map +1 -1
- package/dist/transforms/v1/global-functions.js +79 -21
- package/dist/transforms/v1/global-functions.js.map +1 -1
- package/dist/transforms/v1/index.js +6 -1
- package/dist/transforms/v1/index.js.map +1 -1
- package/dist/transforms/v1/mongodb-stats.js +18 -11
- package/dist/transforms/v1/mongodb-stats.js.map +1 -1
- package/dist/transforms/v1/mongodb-types.js +59 -2
- package/dist/transforms/v1/mongodb-types.js.map +1 -1
- package/dist/transforms/v1/query-builder-on-conflict.js +30 -17
- package/dist/transforms/v1/query-builder-on-conflict.js.map +1 -1
- package/dist/transforms/v1/query-builder-print-sql.js +15 -12
- package/dist/transforms/v1/query-builder-print-sql.js.map +1 -1
- package/dist/transforms/v1/query-builder-replace-property-names.js +13 -12
- package/dist/transforms/v1/query-builder-replace-property-names.js.map +1 -1
- package/dist/transforms/v1/query-builder-where-expression.js +29 -12
- package/dist/transforms/v1/query-builder-where-expression.js.map +1 -1
- package/dist/transforms/v1/query-runner-loaded-tables-views.js +0 -1
- package/dist/transforms/v1/query-runner-loaded-tables-views.js.map +1 -1
- package/dist/transforms/v1/relation-count.js +3 -0
- package/dist/transforms/v1/relation-count.js.map +1 -1
- package/dist/transforms/v1/repository-abstract.js +146 -29
- package/dist/transforms/v1/repository-abstract.js.map +1 -1
- package/dist/transforms/v1/repository-exist.js +18 -1
- package/dist/transforms/v1/repository-exist.js.map +1 -1
- package/dist/transforms/v1/repository-find-by-ids.js +67 -24
- package/dist/transforms/v1/repository-find-by-ids.js.map +1 -1
- package/dist/transforms/v1/repository-find-one-by-id.js +3 -0
- package/dist/transforms/v1/repository-find-one-by-id.js.map +1 -1
- package/dist/transforms/v1/use-container.js +60 -12
- package/dist/transforms/v1/use-container.js.map +1 -1
- package/package.json +17 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-mysql-connector.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-mysql-connector.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,
|
|
1
|
+
{"version":3,"file":"datasource-mysql-connector.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-mysql-connector.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,gDAKuB;AAEV,QAAA,IAAI,GAAG,mBAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAC1D,QAAA,WAAW,GACpB,uEAAuE,CAAA;AAE3E,yEAAyE;AACzE,oEAAoE;AACpE,+DAA+D;AAC/D,yCAAyC;AACzC,MAAM,uBAAuB,GAAG,CAAC,GAAqB,EAAW,EAAE,CAC/D,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;IACtB,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IACtE,IAAI,IAAA,sCAAwB,EAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,KAAK,CAAA;IACxD,MAAM,OAAO,GAAG,IAAA,4BAAc,EAAC,IAAA,gCAAkB,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3D,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,CAAA;AACvD,CAAC,CAAC,CAAA;AAEC,MAAM,wBAAwB,GAAG,CAAC,IAAc,EAAE,GAAQ,EAAE,EAAE;IACjE,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAA;IACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAE3B,IAAI,CAAC,IAAA,6BAAe,EAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IAE1D,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9C,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAM;QAElD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CACF,CAAC,CACG,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;YACtD,IAAA,sCAAwB,EAAC,CAAC,CAAC,KAAK,kBAAkB,CACrD,CACR,CAAA;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAA;YAClC,UAAU,GAAG,IAAI,CAAA;QACrB,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACnD,CAAC,CAAA;AAzBY,QAAA,wBAAwB,4BAyBpC;AAEY,QAAA,EAAE,GAAG,gCAAwB,CAAA;AAC1C,kBAAe,UAAE,CAAA"}
|
|
@@ -14,6 +14,14 @@ const datasourceName = (file, api) => {
|
|
|
14
14
|
const root = j(file.source);
|
|
15
15
|
if (!(0, ast_helpers_1.fileImportsFrom)(root, j, "typeorm"))
|
|
16
16
|
return undefined;
|
|
17
|
+
// Restrict matches to local bindings that resolve to TypeORM's
|
|
18
|
+
// DataSource/Connection types or `createConnection`. Without this, a
|
|
19
|
+
// user class called `Connection` or a `createConnection` from an unrelated
|
|
20
|
+
// package would have its `{ name }` option silently stripped.
|
|
21
|
+
const dataSourceNames = (0, ast_helpers_1.expandLocalNamesForImports)(root, j, "typeorm", new Set(["DataSource", "Connection"]));
|
|
22
|
+
const createConnectionNames = (0, ast_helpers_1.expandLocalNamesForImports)(root, j, "typeorm", new Set(["createConnection"]));
|
|
23
|
+
if (dataSourceNames.size === 0 && createConnectionNames.size === 0)
|
|
24
|
+
return undefined;
|
|
17
25
|
let hasChanges = false;
|
|
18
26
|
const removeNameFromObject = (arg) => {
|
|
19
27
|
if (arg?.type !== "ObjectExpression")
|
|
@@ -22,22 +30,17 @@ const datasourceName = (file, api) => {
|
|
|
22
30
|
hasChanges = true;
|
|
23
31
|
}
|
|
24
32
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
callee
|
|
28
|
-
|
|
29
|
-
removeNameFromObject(path.node.arguments[0]);
|
|
30
|
-
});
|
|
31
|
-
// new Connection({ name: ... })
|
|
32
|
-
root.find(j.NewExpression, {
|
|
33
|
-
callee: { type: "Identifier", name: "Connection" },
|
|
34
|
-
}).forEach((path) => {
|
|
33
|
+
root.find(j.NewExpression).forEach((path) => {
|
|
34
|
+
const callee = path.node.callee;
|
|
35
|
+
if (callee.type !== "Identifier" || !dataSourceNames.has(callee.name))
|
|
36
|
+
return;
|
|
35
37
|
removeNameFromObject(path.node.arguments[0]);
|
|
36
38
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
callee
|
|
40
|
-
|
|
39
|
+
root.find(j.CallExpression).forEach((path) => {
|
|
40
|
+
const callee = path.node.callee;
|
|
41
|
+
if (callee.type !== "Identifier" ||
|
|
42
|
+
!createConnectionNames.has(callee.name))
|
|
43
|
+
return;
|
|
41
44
|
removeNameFromObject(path.node.arguments[0]);
|
|
42
45
|
});
|
|
43
46
|
return hasChanges ? root.toSource() : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-name.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-name.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,
|
|
1
|
+
{"version":3,"file":"datasource-name.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-name.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,gDAIuB;AAEV,QAAA,IAAI,GAAG,mBAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAC1D,QAAA,WAAW,GACpB,2DAA2D,CAAA;AAE/D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAEhC,MAAM,cAAc,GAAG,CAAC,IAAc,EAAE,GAAQ,EAAE,EAAE;IACvD,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAA;IACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAE3B,IAAI,CAAC,IAAA,6BAAe,EAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IAE1D,+DAA+D;IAC/D,qEAAqE;IACrE,2EAA2E;IAC3E,8DAA8D;IAC9D,MAAM,eAAe,GAAG,IAAA,wCAA0B,EAC9C,IAAI,EACJ,CAAC,EACD,SAAS,EACT,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CACxC,CAAA;IACD,MAAM,qBAAqB,GAAG,IAAA,wCAA0B,EACpD,IAAI,EACJ,CAAC,EACD,SAAS,EACT,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAChC,CAAA;IACD,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,qBAAqB,CAAC,IAAI,KAAK,CAAC;QAC9D,OAAO,SAAS,CAAA;IAEpB,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,MAAM,oBAAoB,GAAG,CAAC,GAAwB,EAAE,EAAE;QACtD,IAAI,GAAG,EAAE,IAAI,KAAK,kBAAkB;YAAE,OAAM;QAC5C,IAAI,IAAA,oCAAsB,EAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC;YAC7C,UAAU,GAAG,IAAI,CAAA;QACrB,CAAC;IACL,CAAC,CAAA;IAED,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;QAC/B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACjE,OAAM;QACV,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;QAC/B,IACI,MAAM,CAAC,IAAI,KAAK,YAAY;YAC5B,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAEvC,OAAM;QACV,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACnD,CAAC,CAAA;AApDY,QAAA,cAAc,kBAoD1B;AAEY,QAAA,EAAE,GAAG,sBAAc,CAAA;AAChC,kBAAe,UAAE,CAAA"}
|
|
@@ -8,6 +8,25 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
8
8
|
const ast_helpers_1 = require("../ast-helpers");
|
|
9
9
|
exports.name = node_path_1.default.basename(__filename, node_path_1.default.extname(__filename));
|
|
10
10
|
exports.description = "rename and remove deprecated SAP HANA connection options";
|
|
11
|
+
const getKeyName = (key) => {
|
|
12
|
+
if (key.type === "Identifier")
|
|
13
|
+
return key.name;
|
|
14
|
+
return (0, ast_helpers_1.getStringValue)(key);
|
|
15
|
+
};
|
|
16
|
+
const renameKey = (key, newName) => {
|
|
17
|
+
if (key.type === "Identifier") {
|
|
18
|
+
key.name = newName;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
(0, ast_helpers_1.setStringValue)(key, newName);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
// Matches `{ type: "sap", ... }` objects — only then are SAP-specific
|
|
25
|
+
// option renames safe to apply (avoids clobbering unrelated user code).
|
|
26
|
+
// Peels TS wrappers so `type: "sap" as const` also matches.
|
|
27
|
+
const isSapOptions = (obj) => obj.properties.some((p) => (p.type === "ObjectProperty" || p.type === "Property") &&
|
|
28
|
+
getKeyName(p.key) === "type" &&
|
|
29
|
+
(0, ast_helpers_1.getStringValue)((0, ast_helpers_1.unwrapTsExpression)(p.value)) === "sap");
|
|
11
30
|
const datasourceSap = (file, api) => {
|
|
12
31
|
const j = api.jscodeshift;
|
|
13
32
|
const root = j(file.source);
|
|
@@ -23,48 +42,41 @@ const datasourceSap = (file, api) => {
|
|
|
23
42
|
idleTimeout: "maxPooledIdleTime",
|
|
24
43
|
};
|
|
25
44
|
const poolRemoves = new Set(["min", "maxWaitingRequests", "checkInterval"]);
|
|
26
|
-
|
|
27
|
-
if (
|
|
28
|
-
return key.name;
|
|
29
|
-
return (0, ast_helpers_1.getStringValue)(key);
|
|
30
|
-
};
|
|
31
|
-
const renameKey = (key, newName) => {
|
|
32
|
-
if (key.type === "Identifier") {
|
|
33
|
-
key.name = newName;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
(0, ast_helpers_1.setStringValue)(key, newName);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
// Rename top-level options
|
|
40
|
-
root.find(j.ObjectProperty).forEach((path) => {
|
|
41
|
-
const name = getKeyName(path.node.key);
|
|
42
|
-
if (name === null)
|
|
43
|
-
return;
|
|
44
|
-
// Top-level renames
|
|
45
|
-
if (topLevelRenames[name]) {
|
|
46
|
-
renameKey(path.node.key, topLevelRenames[name]);
|
|
47
|
-
hasChanges = true;
|
|
45
|
+
root.find(j.ObjectExpression).forEach((objPath) => {
|
|
46
|
+
if (!isSapOptions(objPath.node))
|
|
48
47
|
return;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return;
|
|
58
|
-
const gpNode = grandparent.node;
|
|
59
|
-
if (getKeyName(gpNode.key) !== "pool")
|
|
60
|
-
return;
|
|
61
|
-
if (poolRemoves.has(name)) {
|
|
62
|
-
j(path).remove();
|
|
48
|
+
for (const prop of objPath.node.properties) {
|
|
49
|
+
if (prop.type !== "ObjectProperty")
|
|
50
|
+
continue;
|
|
51
|
+
const propName = getKeyName(prop.key);
|
|
52
|
+
if (propName === null)
|
|
53
|
+
continue;
|
|
54
|
+
if (topLevelRenames[propName]) {
|
|
55
|
+
renameKey(prop.key, topLevelRenames[propName]);
|
|
63
56
|
hasChanges = true;
|
|
57
|
+
continue;
|
|
64
58
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
if (propName === "pool" && prop.value.type === "ObjectExpression") {
|
|
60
|
+
const poolObj = prop.value;
|
|
61
|
+
const filtered = poolObj.properties.filter((inner) => {
|
|
62
|
+
if (inner.type !== "ObjectProperty")
|
|
63
|
+
return true;
|
|
64
|
+
const innerName = getKeyName(inner.key);
|
|
65
|
+
if (innerName === null)
|
|
66
|
+
return true;
|
|
67
|
+
if (poolRemoves.has(innerName)) {
|
|
68
|
+
hasChanges = true;
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (poolRenames[innerName]) {
|
|
72
|
+
renameKey(inner.key, poolRenames[innerName]);
|
|
73
|
+
hasChanges = true;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
});
|
|
77
|
+
if (filtered.length !== poolObj.properties.length) {
|
|
78
|
+
poolObj.properties = filtered;
|
|
79
|
+
}
|
|
68
80
|
}
|
|
69
81
|
}
|
|
70
82
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-sap.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-sap.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,
|
|
1
|
+
{"version":3,"file":"datasource-sap.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-sap.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,8 +54,11 @@ const datasourceSqliteOptions = (file, api) => {
|
|
|
54
54
|
if (keyName !== "busyTimeout")
|
|
55
55
|
continue;
|
|
56
56
|
// Replace the key with an identifier — `"timeout"` doesn't need
|
|
57
|
-
// quoting and prettier would strip the quotes anyway.
|
|
57
|
+
// quoting and prettier would strip the quotes anyway. Clear
|
|
58
|
+
// `computed` so `["busyTimeout"]: …` rewrites to a plain
|
|
59
|
+
// `timeout: …` instead of `[timeout]: …`.
|
|
58
60
|
prop.key = j.identifier("timeout");
|
|
61
|
+
prop.computed = false;
|
|
59
62
|
hasChanges = true;
|
|
60
63
|
}
|
|
61
64
|
if ((0, ast_helpers_1.removeObjectProperties)(objPath.node, new Set(["flags"]))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-sqlite-options.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-sqlite-options.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,gDAAuE;AAE1D,QAAA,IAAI,GAAG,mBAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAC1D,QAAA,WAAW,GACpB,uEAAuE,CAAA;AAE3E,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAC9B,QAAQ;IACR,gBAAgB;IAChB,OAAO;IACP,WAAW;IACX,SAAS;IACT,cAAc;IACd,cAAc;IACd,MAAM;CACT,CAAC,CAAA;AAEF,MAAM,eAAe,GAAG,CAAC,GAAqB,EAAW,EAAE;IACvD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC7D,SAAQ;QACZ,CAAC;QACD,MAAM,OAAO,GACT,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;YAC1B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;YACf,CAAC,CAAC,IAAA,4BAAc,EAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,OAAO,KAAK,MAAM;YAAE,SAAQ;QAChC,MAAM,KAAK,GAAG,IAAA,4BAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxC,OAAO,KAAK,KAAK,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,KAAK,CAAA;AAChB,CAAC,CAAA;AAEM,MAAM,uBAAuB,GAAG,CAAC,IAAc,EAAE,GAAQ,EAAE,EAAE;IAChE,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAA;IACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAE3B,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAM;QAE1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC7D,SAAQ;YACZ,CAAC;YACD,MAAM,OAAO,GACT,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;gBAC1B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;gBACf,CAAC,CAAC,IAAA,4BAAc,EAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,OAAO,KAAK,aAAa;gBAAE,SAAQ;YACvC,gEAAgE;YAChE,
|
|
1
|
+
{"version":3,"file":"datasource-sqlite-options.js","sourceRoot":"","sources":["../../../src/transforms/v1/datasource-sqlite-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,13 +23,6 @@ const isNullishLiteral = (node) => {
|
|
|
23
23
|
return true;
|
|
24
24
|
return n.type === "Literal" && n.value === null;
|
|
25
25
|
};
|
|
26
|
-
// Extracts a string from `StringLiteral` or string-valued `Literal`; else null.
|
|
27
|
-
const asStringLiteral = (node) => {
|
|
28
|
-
const n = node;
|
|
29
|
-
if (n.type !== "StringLiteral" && n.type !== "Literal")
|
|
30
|
-
return null;
|
|
31
|
-
return typeof n.value === "string" ? n.value : null;
|
|
32
|
-
};
|
|
33
26
|
// Locates the `logPath` property in an options object expression, alongside
|
|
34
27
|
// whether the object also contains a spread (which could contribute the key).
|
|
35
28
|
const findLogPathProperty = (obj) => {
|
|
@@ -49,24 +42,12 @@ const findLogPathProperty = (obj) => {
|
|
|
49
42
|
}
|
|
50
43
|
return { value: undefined, hasSpread };
|
|
51
44
|
};
|
|
52
|
-
const unwrapTsExpression = (node) => {
|
|
53
|
-
let current = node;
|
|
54
|
-
while (current.type === "TSAsExpression" ||
|
|
55
|
-
current.type === "TSNonNullExpression" ||
|
|
56
|
-
current.type === "TSSatisfiesExpression" ||
|
|
57
|
-
current.type === "TSTypeAssertion") {
|
|
58
|
-
if (!current.expression)
|
|
59
|
-
break;
|
|
60
|
-
current = current.expression;
|
|
61
|
-
}
|
|
62
|
-
return current;
|
|
63
|
-
};
|
|
64
45
|
const inspectOptionsArg = (argNode) => {
|
|
65
46
|
// Missing / explicit nullish → same as omitting options, flag.
|
|
66
47
|
if (isNullishLiteral(argNode)) {
|
|
67
48
|
return { hasOption: false, isAbsolute: false };
|
|
68
49
|
}
|
|
69
|
-
const unwrapped = unwrapTsExpression(argNode);
|
|
50
|
+
const unwrapped = (0, ast_helpers_1.unwrapTsExpression)(argNode);
|
|
70
51
|
// Dynamic options (variable, function call, etc.) — trust the user.
|
|
71
52
|
if (unwrapped.type !== "ObjectExpression") {
|
|
72
53
|
return { hasOption: true, isAbsolute: true };
|
|
@@ -82,7 +63,7 @@ const inspectOptionsArg = (argNode) => {
|
|
|
82
63
|
if (isNullishLiteral(value)) {
|
|
83
64
|
return { hasOption: false, isAbsolute: false };
|
|
84
65
|
}
|
|
85
|
-
const str =
|
|
66
|
+
const str = (0, ast_helpers_1.getStringValue)(value);
|
|
86
67
|
if (str !== null) {
|
|
87
68
|
return { hasOption: true, isAbsolute: isAbsolutePath(str) };
|
|
88
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-logger.js","sourceRoot":"","sources":["../../../src/transforms/v1/file-logger.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,kCAAwD;AACxD,oCAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"file-logger.js","sourceRoot":"","sources":["../../../src/transforms/v1/file-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.fn = exports.findOptionsStringRelations = exports.description = exports.name = void 0;
|
|
6
|
+
exports.fn = exports.findOptionsStringRelations = exports.manual = exports.description = exports.name = void 0;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
8
|
const ast_helpers_1 = require("../ast-helpers");
|
|
9
|
+
const todo_1 = require("../todo");
|
|
10
|
+
const stats_1 = require("../stats");
|
|
9
11
|
exports.name = node_path_1.default.basename(__filename, node_path_1.default.extname(__filename));
|
|
10
12
|
exports.description = "replace string-array `relations` with object syntax";
|
|
13
|
+
exports.manual = true;
|
|
14
|
+
// `relations` differs from `select` in one important way: v0 supported
|
|
15
|
+
// dot-paths (`"posts.comments"`) that must become nested objects in v1
|
|
16
|
+
// (`{ posts: { comments: true } }`). For a dynamic expression we can't
|
|
17
|
+
// tell at transform time whether the values contain dots, so we wrap with
|
|
18
|
+
// `Object.fromEntries(...map(r => [r, true]))` AND attach a comment
|
|
19
|
+
// noting that dot-paths need manual nesting.
|
|
20
|
+
const DYNAMIC_RELATIONS_DOT_PATH_NOTE = '`relations` now takes an object. If the dynamic list contains dot-paths like `"posts.comments"`, the wrap below produces `{ "posts.comments": true }` — convert those to nested objects manually: `{ posts: { comments: true } }`.';
|
|
21
|
+
// Bound variables / member-access values may already hold v1 object form
|
|
22
|
+
// instead of `string[]`, so wrapping would crash at runtime. Leave a
|
|
23
|
+
// comment with the conversion snippets so the user picks the right option.
|
|
24
|
+
const BOUND_RELATIONS_MESSAGE = "`relations` no longer accepts a string array. This value references a variable whose shape can't be determined statically — if it holds `string[]`, wrap it: `Object.fromEntries(<expr>?.map(r => [r, true]) ?? [])` (dot-paths need extra nesting handling). If it already holds the v1 object shape, no change needed.";
|
|
11
25
|
/**
|
|
12
26
|
* Convert an array of dot-path strings into a nested object structure.
|
|
13
27
|
*
|
|
@@ -34,26 +48,76 @@ function convertRelationsArrayToObject(values) {
|
|
|
34
48
|
}
|
|
35
49
|
return result;
|
|
36
50
|
}
|
|
51
|
+
// Builds `Object.fromEntries(<expr>?.map(r => [r, true]) ?? [])` — the
|
|
52
|
+
// optional-chain + nullish fallback keeps the migrated code runnable when
|
|
53
|
+
// the dynamic expression evaluates to `undefined`/`null` (e.g.
|
|
54
|
+
// `relations: flag ? ["posts"] : undefined`). v0 would have skipped the
|
|
55
|
+
// property in that case; the wrap here emits an empty object, matching.
|
|
56
|
+
const wrapDynamicStringArray = (j, expr) => {
|
|
57
|
+
const optionalMapCall = j.callExpression(j.optionalMemberExpression(expr, j.identifier("map")), [
|
|
58
|
+
j.arrowFunctionExpression([j.identifier("r")], j.arrayExpression([j.identifier("r"), j.literal(true)])),
|
|
59
|
+
]);
|
|
60
|
+
return j.callExpression(j.memberExpression(j.identifier("Object"), j.identifier("fromEntries")), [j.logicalExpression("??", optionalMapCall, j.arrayExpression([]))]);
|
|
61
|
+
};
|
|
37
62
|
const findOptionsStringRelations = (file, api) => {
|
|
38
63
|
const j = api.jscodeshift;
|
|
39
64
|
const root = j(file.source);
|
|
40
|
-
if (!(0, ast_helpers_1.fileImportsFrom)(root, j, "typeorm"))
|
|
41
|
-
return undefined;
|
|
42
65
|
let hasChanges = false;
|
|
43
|
-
|
|
66
|
+
let hasTodos = false;
|
|
44
67
|
root.find(j.ObjectProperty, {
|
|
45
68
|
key: { name: "relations" },
|
|
46
|
-
}).forEach((
|
|
47
|
-
|
|
48
|
-
|
|
69
|
+
}).forEach((propPath) => {
|
|
70
|
+
if (!(0, ast_helpers_1.isFindMethodCallArgument)(propPath))
|
|
71
|
+
return;
|
|
72
|
+
const value = propPath.node.value;
|
|
73
|
+
if (value.type === "ArrayExpression") {
|
|
74
|
+
const strings = value.elements.map((el) => el && (0, ast_helpers_1.getStringValue)(el));
|
|
75
|
+
if (strings.some((s) => s === null || s === undefined))
|
|
76
|
+
return;
|
|
77
|
+
const result = convertRelationsArrayToObject(strings);
|
|
78
|
+
propPath.node.value = buildObjectExpression(j, result);
|
|
79
|
+
hasChanges = true;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Already in v1 object form — nothing to do.
|
|
83
|
+
if (value.type === "ObjectExpression")
|
|
49
84
|
return;
|
|
50
|
-
|
|
51
|
-
|
|
85
|
+
// Already wrapped by a previous pass — don't double-wrap, and don't
|
|
86
|
+
// re-add the dot-path comment (`hasTodoComment` would dedupe it anyway).
|
|
87
|
+
if ((0, ast_helpers_1.isObjectFromEntriesCall)(value))
|
|
52
88
|
return;
|
|
53
|
-
const
|
|
54
|
-
|
|
89
|
+
const walkToStatement = (message) => {
|
|
90
|
+
let current = propPath.parent;
|
|
91
|
+
while (current) {
|
|
92
|
+
const t = current.node.type;
|
|
93
|
+
if (t.endsWith("Statement") || t === "VariableDeclaration") {
|
|
94
|
+
if (!(0, todo_1.hasTodoComment)(current.node, message)) {
|
|
95
|
+
(0, todo_1.addTodoComment)(current.node, message, j);
|
|
96
|
+
hasTodos = true;
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
current = current.parent;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
// Bound variable / member access — value might already be in v1
|
|
104
|
+
// object shape. Leave a comment instead of wrapping.
|
|
105
|
+
if (value.type === "Identifier" ||
|
|
106
|
+
value.type === "MemberExpression" ||
|
|
107
|
+
value.type === "OptionalMemberExpression") {
|
|
108
|
+
walkToStatement(BOUND_RELATIONS_MESSAGE);
|
|
109
|
+
hasChanges = true;
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// Inline dynamic value (CallExpression, ConditionalExpression, etc.)
|
|
113
|
+
// — wrap with `Object.fromEntries(...)`. Attach the dot-path comment
|
|
114
|
+
// because nesting can't be detected statically.
|
|
115
|
+
propPath.node.value = wrapDynamicStringArray(j, value);
|
|
55
116
|
hasChanges = true;
|
|
117
|
+
walkToStatement(DYNAMIC_RELATIONS_DOT_PATH_NOTE);
|
|
56
118
|
});
|
|
119
|
+
if (hasTodos)
|
|
120
|
+
stats_1.stats.count.todo(api, exports.name, file);
|
|
57
121
|
return hasChanges ? root.toSource() : undefined;
|
|
58
122
|
};
|
|
59
123
|
exports.findOptionsStringRelations = findOptionsStringRelations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-options-string-relations.js","sourceRoot":"","sources":["../../../src/transforms/v1/find-options-string-relations.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;
|
|
1
|
+
{"version":3,"file":"find-options-string-relations.js","sourceRoot":"","sources":["../../../src/transforms/v1/find-options-string-relations.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAQ5B,gDAIuB;AACvB,kCAAwD;AACxD,oCAAgC;AAEnB,QAAA,IAAI,GAAG,mBAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAC1D,QAAA,WAAW,GAAG,qDAAqD,CAAA;AACnE,QAAA,MAAM,GAAG,IAAI,CAAA;AAM1B,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,0EAA0E;AAC1E,oEAAoE;AACpE,6CAA6C;AAC7C,MAAM,+BAA+B,GACjC,oOAAoO,CAAA;AAExO,yEAAyE;AACzE,qEAAqE;AACrE,2EAA2E;AAC3E,MAAM,uBAAuB,GACzB,0TAA0T,CAAA;AAE9T;;;;;GAKG;AACH,SAAS,6BAA6B,CAAC,MAAgB;IACnD,MAAM,MAAM,GAAiB,EAAE,CAAA;IAE/B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,OAAO,GAAiB,MAAM,CAAA;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACrB,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;YAC1B,CAAC;iBAAM,CAAC;gBACJ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBACxD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;gBACtB,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,uEAAuE;AACvE,0EAA0E;AAC1E,+DAA+D;AAC/D,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,sBAAsB,GAAG,CAC3B,CAAqB,EACrB,IAAa,EACN,EAAE;IAET,MAAM,eAAe,GAAG,CAAC,CAAC,cAAc,CACpC,CAAC,CAAC,wBAAwB,CAAC,IAAS,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAC1D;QACI,CAAC,CAAC,uBAAuB,CACrB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EACnB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1D;KACJ,CACJ,CAAA;IACD,OAAO,CAAC,CAAC,cAAc,CACnB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACvE,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CACtE,CAAA;AACL,CAAC,CAAA;AAEM,MAAM,0BAA0B,GAAG,CAAC,IAAc,EAAE,GAAQ,EAAE,EAAE;IACnE,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAA;IACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAE3B,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE;QACxB,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KAC7B,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QACpB,IAAI,CAAC,IAAA,sCAAwB,EAAC,QAAQ,CAAC;YAAE,OAAM;QAE/C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAA;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAA,4BAAc,EAAC,EAAE,CAAC,CAAC,CAAA;YACpE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;gBAAE,OAAM;YAE9D,MAAM,MAAM,GAAG,6BAA6B,CAAC,OAAmB,CAAC,CAAA;YACjE,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YACtD,UAAU,GAAG,IAAI,CAAA;YACjB,OAAM;QACV,CAAC;QAED,6CAA6C;QAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB;YAAE,OAAM;QAE7C,oEAAoE;QACpE,yEAAyE;QACzE,IAAI,IAAA,qCAAuB,EAAC,KAAK,CAAC;YAAE,OAAM;QAE1C,MAAM,eAAe,GAAG,CAAC,OAAe,EAAQ,EAAE;YAC9C,IAAI,OAAO,GAAG,QAAQ,CAAC,MAGf,CAAA;YACR,OAAO,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA;gBAC3B,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,qBAAqB,EAAE,CAAC;oBACzD,IAAI,CAAC,IAAA,qBAAc,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;wBACzC,IAAA,qBAAc,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;wBACxC,QAAQ,GAAG,IAAI,CAAA;oBACnB,CAAC;oBACD,OAAM;gBACV,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,MAGV,CAAA;YACZ,CAAC;QACL,CAAC,CAAA;QAED,gEAAgE;QAChE,qDAAqD;QACrD,IACI,KAAK,CAAC,IAAI,KAAK,YAAY;YAC3B,KAAK,CAAC,IAAI,KAAK,kBAAkB;YACjC,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAC3C,CAAC;YACC,eAAe,CAAC,uBAAuB,CAAC,CAAA;YACxC,UAAU,GAAG,IAAI,CAAA;YACjB,OAAM;QACV,CAAC;QAED,qEAAqE;QACrE,qEAAqE;QACrE,gDAAgD;QAChD,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAiB,CAAA;QACtE,UAAU,GAAG,IAAI,CAAA;QACjB,eAAe,CAAC,+BAA+B,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,IAAI,QAAQ;QAAE,aAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,YAAI,EAAE,IAAI,CAAC,CAAA;IAE/C,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACnD,CAAC,CAAA;AA1EY,QAAA,0BAA0B,8BA0EtC;AAED,SAAS,qBAAqB,CAC1B,CAAqB,EACrB,GAAiB;IAEjB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACxD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACjE,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,CACb,MAAM,EACN,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EACjB,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAClC,CAAA;IACL,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;AACzC,CAAC;AAEY,QAAA,EAAE,GAAG,kCAA0B,CAAA;AAC5C,kBAAe,UAAE,CAAA"}
|
|
@@ -3,33 +3,95 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.fn = exports.findOptionsStringSelect = exports.description = exports.name = void 0;
|
|
6
|
+
exports.fn = exports.findOptionsStringSelect = exports.manual = exports.description = exports.name = void 0;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
8
|
const ast_helpers_1 = require("../ast-helpers");
|
|
9
|
+
const todo_1 = require("../todo");
|
|
10
|
+
const stats_1 = require("../stats");
|
|
9
11
|
exports.name = node_path_1.default.basename(__filename, node_path_1.default.extname(__filename));
|
|
10
12
|
exports.description = "replace string-array `select` with object syntax";
|
|
13
|
+
exports.manual = true;
|
|
14
|
+
// Bound variables / member-access values may already hold v1 object form
|
|
15
|
+
// (`{ id: true }`) instead of `string[]` — wrapping them with
|
|
16
|
+
// `Object.fromEntries(...)` would crash at runtime. Leave a comment so the
|
|
17
|
+
// user can convert manually based on the actual runtime type.
|
|
18
|
+
const BOUND_SELECT_MESSAGE = "`select` no longer accepts a string array. This value references a variable whose shape can't be determined statically — if it holds `string[]`, wrap it: `Object.fromEntries(<expr>?.map(f => [f, true]) ?? [])`. If it already holds the v1 object shape `{ field: true }`, no change needed.";
|
|
19
|
+
// Builds `Object.fromEntries(<expr>?.map(f => [f, true]) ?? [])` — wraps
|
|
20
|
+
// a `string[]`-returning expression into the v1 `{ [field]: true }` object
|
|
21
|
+
// at runtime. The optional-chain + nullish fallback preserves v0 semantics
|
|
22
|
+
// for patterns like `select: flag ? ["id"] : undefined`, where the original
|
|
23
|
+
// code would simply skip `select` and the post-migration code must do the
|
|
24
|
+
// same (empty object = no explicit selection = all columns).
|
|
25
|
+
const wrapDynamicStringArray = (j, expr) => {
|
|
26
|
+
const optionalMapCall = j.callExpression(j.optionalMemberExpression(expr, j.identifier("map")), [
|
|
27
|
+
j.arrowFunctionExpression([j.identifier("f")], j.arrayExpression([j.identifier("f"), j.literal(true)])),
|
|
28
|
+
]);
|
|
29
|
+
return j.callExpression(j.memberExpression(j.identifier("Object"), j.identifier("fromEntries")), [j.logicalExpression("??", optionalMapCall, j.arrayExpression([]))]);
|
|
30
|
+
};
|
|
31
|
+
// Walks up to the enclosing Statement / VariableDeclaration and attaches
|
|
32
|
+
// the bound-variable comment there (recast drops comments placed on
|
|
33
|
+
// inner expressions). Returns true when a new comment was added.
|
|
34
|
+
const attachBoundTodo = (propPath, j) => {
|
|
35
|
+
let current = propPath.parent;
|
|
36
|
+
while (current) {
|
|
37
|
+
const t = current.node.type;
|
|
38
|
+
if (t.endsWith("Statement") || t === "VariableDeclaration") {
|
|
39
|
+
if ((0, todo_1.hasTodoComment)(current.node, BOUND_SELECT_MESSAGE))
|
|
40
|
+
return false;
|
|
41
|
+
(0, todo_1.addTodoComment)(current.node, BOUND_SELECT_MESSAGE, j);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
current = current.parent;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
};
|
|
11
48
|
const findOptionsStringSelect = (file, api) => {
|
|
12
49
|
const j = api.jscodeshift;
|
|
13
50
|
const root = j(file.source);
|
|
14
|
-
if (!(0, ast_helpers_1.fileImportsFrom)(root, j, "typeorm"))
|
|
15
|
-
return undefined;
|
|
16
51
|
let hasChanges = false;
|
|
17
|
-
|
|
52
|
+
let hasTodos = false;
|
|
18
53
|
root.find(j.ObjectProperty, {
|
|
19
54
|
key: { name: "select" },
|
|
20
|
-
}).forEach((
|
|
21
|
-
|
|
22
|
-
|
|
55
|
+
}).forEach((propPath) => {
|
|
56
|
+
// Gate on call-site shape, not file-level typeorm import, so we still
|
|
57
|
+
// fire in NestJS-style service files that only pull TypeORM types via
|
|
58
|
+
// a wrapper module.
|
|
59
|
+
if (!(0, ast_helpers_1.isFindMethodCallArgument)(propPath))
|
|
60
|
+
return;
|
|
61
|
+
const value = propPath.node.value;
|
|
62
|
+
if (value.type === "ArrayExpression") {
|
|
63
|
+
const strings = value.elements.map((el) => el && (0, ast_helpers_1.getStringValue)(el));
|
|
64
|
+
if (strings.some((s) => s === null || s === undefined))
|
|
65
|
+
return;
|
|
66
|
+
propPath.node.value = j.objectExpression(strings.map((s) => j.property("init", j.identifier(s), j.literal(true))));
|
|
67
|
+
hasChanges = true;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Already in v1 object form — nothing to do.
|
|
71
|
+
if (value.type === "ObjectExpression")
|
|
72
|
+
return;
|
|
73
|
+
// Already wrapped by a previous pass — don't double-wrap.
|
|
74
|
+
if ((0, ast_helpers_1.isObjectFromEntriesCall)(value))
|
|
23
75
|
return;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
76
|
+
// Bound variable / member access — the value might already be in v1
|
|
77
|
+
// object shape (a partially-migrated codebase), so wrapping would
|
|
78
|
+
// crash at runtime. Leave a comment instead.
|
|
79
|
+
if (value.type === "Identifier" ||
|
|
80
|
+
value.type === "MemberExpression" ||
|
|
81
|
+
value.type === "OptionalMemberExpression") {
|
|
82
|
+
if (attachBoundTodo(propPath, j))
|
|
83
|
+
hasTodos = true;
|
|
84
|
+
hasChanges = true;
|
|
27
85
|
return;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
86
|
+
}
|
|
87
|
+
// Inline dynamic value (CallExpression, ConditionalExpression, etc.)
|
|
88
|
+
// — wrap unconditionally; v0 only accepted `string[]` so the runtime
|
|
89
|
+
// shape is known to be the array form.
|
|
90
|
+
propPath.node.value = wrapDynamicStringArray(j, value);
|
|
31
91
|
hasChanges = true;
|
|
32
92
|
});
|
|
93
|
+
if (hasTodos)
|
|
94
|
+
stats_1.stats.count.todo(api, exports.name, file);
|
|
33
95
|
return hasChanges ? root.toSource() : undefined;
|
|
34
96
|
};
|
|
35
97
|
exports.findOptionsStringSelect = findOptionsStringSelect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-options-string-select.js","sourceRoot":"","sources":["../../../src/transforms/v1/find-options-string-select.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,
|
|
1
|
+
{"version":3,"file":"find-options-string-select.js","sourceRoot":"","sources":["../../../src/transforms/v1/find-options-string-select.ts"],"names":[],"mappings":"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"}
|