@mikeyt23/node-cli-utils 2.0.15 → 2.0.17
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.
|
@@ -80,7 +80,7 @@ async function efRemoveLastMigration(projectPath, dbContextName, skipConfirm = f
|
|
|
80
80
|
if (returnCode !== 0) {
|
|
81
81
|
throw new Error(`dotnet ef migrations remove returned non-zero exit code: ${returnCode}`);
|
|
82
82
|
}
|
|
83
|
-
(0, generalUtils_js_1.log)(`Removing migration SQL script files
|
|
83
|
+
(0, generalUtils_js_1.log)(`Removing migration SQL script files if they're empty`);
|
|
84
84
|
await deleteScriptFileIfEmpty(getScriptPath(projectPath, lastMigrationName, true));
|
|
85
85
|
await deleteScriptFileIfEmpty(getScriptPath(projectPath, lastMigrationName, false));
|
|
86
86
|
}
|
|
@@ -145,13 +145,20 @@ async function getCSharpMigrationFilePath(projectDirectory, dbContextName, migra
|
|
|
145
145
|
return filePath;
|
|
146
146
|
}
|
|
147
147
|
async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrationName) {
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
var _a;
|
|
149
|
+
const cSharpMigrationFilePath = await getCSharpMigrationFilePath(projectDirectory, dbContextName, migrationName);
|
|
150
|
+
(0, generalUtils_js_1.log)(`Replacing file contents with boilerplate for file 📄${cSharpMigrationFilePath}`);
|
|
151
|
+
const oldFileContents = await promises_1.default.readFile(cSharpMigrationFilePath, { encoding: 'utf8' });
|
|
152
|
+
const namespaceLine = (_a = oldFileContents.split('\n').find(line => line.startsWith('namespace '))) === null || _a === void 0 ? void 0 : _a.trim();
|
|
153
|
+
if (!namespaceLine) {
|
|
154
|
+
throw new Error(`Unable to find namespace line in file: ${cSharpMigrationFilePath}`);
|
|
155
|
+
}
|
|
150
156
|
const newFileContents = cSharpMigrationFileTemplate
|
|
157
|
+
.replaceAll(namespaceLinePlaceholder, namespaceLine)
|
|
151
158
|
.replaceAll(contextNamePlaceholder, dbContextName)
|
|
152
159
|
.replaceAll(migrationNamePlaceholder, migrationName);
|
|
153
|
-
await promises_1.default.writeFile(
|
|
154
|
-
(0, generalUtils_js_1.log)(`Updated file with boilerplate - please ensure it is correct: 📄${
|
|
160
|
+
await promises_1.default.writeFile(cSharpMigrationFilePath, newFileContents, { encoding: 'utf8' });
|
|
161
|
+
(0, generalUtils_js_1.log)(`Updated file with boilerplate - please ensure it is correct: 📄${cSharpMigrationFilePath}`);
|
|
155
162
|
const upScriptPath = node_path_1.default.join(projectDirectory, `Scripts/${migrationName}.sql`);
|
|
156
163
|
const downScriptPath = node_path_1.default.join(projectDirectory, `Scripts/${migrationName}_Down.sql`);
|
|
157
164
|
(0, generalUtils_js_1.log)('\nCreating corresponding empty sql files (no action will be taken if they already exist):');
|
|
@@ -162,12 +169,14 @@ async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrat
|
|
|
162
169
|
}
|
|
163
170
|
async function writeEmptySqlFileIfNotExists(scriptPath, scriptType) {
|
|
164
171
|
if (!node_fs_1.default.existsSync(scriptPath)) {
|
|
165
|
-
|
|
172
|
+
const filename = node_path_1.default.basename(scriptPath);
|
|
173
|
+
await promises_1.default.writeFile(scriptPath, `-- ${filename} - ${scriptType} script`, { encoding: 'utf8' });
|
|
166
174
|
}
|
|
167
175
|
else {
|
|
168
176
|
(0, generalUtils_js_1.log)(`Skipping ${scriptType} sql script (already exists)`);
|
|
169
177
|
}
|
|
170
178
|
}
|
|
179
|
+
const namespaceLinePlaceholder = '{{namespace}}';
|
|
171
180
|
const contextNamePlaceholder = '{{context_name}}';
|
|
172
181
|
const migrationNamePlaceholder = '{{migration_name}}';
|
|
173
182
|
const cSharpMigrationFileTemplate = `using Microsoft.EntityFrameworkCore.Migrations;
|
|
@@ -175,7 +184,7 @@ using MikeyT.DbMigrations;
|
|
|
175
184
|
|
|
176
185
|
#nullable disable
|
|
177
186
|
|
|
178
|
-
namespace
|
|
187
|
+
{{namespace}}
|
|
179
188
|
{
|
|
180
189
|
public partial class ${migrationNamePlaceholder} : Migration
|
|
181
190
|
{
|
|
@@ -190,6 +199,5 @@ namespace DbMigrator.Migrations.${contextNamePlaceholder}Migrations
|
|
|
190
199
|
}
|
|
191
200
|
}
|
|
192
201
|
}
|
|
193
|
-
|
|
194
202
|
`;
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJNaWdyYXRpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYk1pZ3JhdGlvblV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHVEQUE0RztBQUM1RywwREFBNEI7QUFDNUIsc0RBQXdCO0FBQ3hCLGdFQUFrQztBQUVsQzs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxlQUFlLENBQUMsV0FBbUIsRUFBRSxhQUFxQixFQUFFLElBQWMsRUFBRSxPQUFPLEdBQUcsSUFBSTtJQUM5RyxJQUFBLGtDQUFnQixFQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUM1QyxJQUFBLCtCQUFhLEVBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BKLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQTtBQUNwQixDQUFDO0FBTEQsMENBS0M7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsYUFBcUI7SUFDL0UsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBRSxDQUFBO0FBQzVFLENBQUM7QUFGRCw0Q0FFQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLGtCQUFrQixDQUFDLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxhQUFzQjtJQUN6RyxNQUFNLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUMsVUFB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
|
|
@@ -70,7 +70,7 @@ export async function efRemoveLastMigration(projectPath, dbContextName, skipConf
|
|
|
70
70
|
if (returnCode !== 0) {
|
|
71
71
|
throw new Error(`dotnet ef migrations remove returned non-zero exit code: ${returnCode}`);
|
|
72
72
|
}
|
|
73
|
-
log(`Removing migration SQL script files
|
|
73
|
+
log(`Removing migration SQL script files if they're empty`);
|
|
74
74
|
await deleteScriptFileIfEmpty(getScriptPath(projectPath, lastMigrationName, true));
|
|
75
75
|
await deleteScriptFileIfEmpty(getScriptPath(projectPath, lastMigrationName, false));
|
|
76
76
|
}
|
|
@@ -134,13 +134,19 @@ async function getCSharpMigrationFilePath(projectDirectory, dbContextName, migra
|
|
|
134
134
|
return filePath;
|
|
135
135
|
}
|
|
136
136
|
async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrationName) {
|
|
137
|
-
const
|
|
138
|
-
log(`Replacing file contents with boilerplate for file 📄${
|
|
137
|
+
const cSharpMigrationFilePath = await getCSharpMigrationFilePath(projectDirectory, dbContextName, migrationName);
|
|
138
|
+
log(`Replacing file contents with boilerplate for file 📄${cSharpMigrationFilePath}`);
|
|
139
|
+
const oldFileContents = await fsp.readFile(cSharpMigrationFilePath, { encoding: 'utf8' });
|
|
140
|
+
const namespaceLine = oldFileContents.split('\n').find(line => line.startsWith('namespace '))?.trim();
|
|
141
|
+
if (!namespaceLine) {
|
|
142
|
+
throw new Error(`Unable to find namespace line in file: ${cSharpMigrationFilePath}`);
|
|
143
|
+
}
|
|
139
144
|
const newFileContents = cSharpMigrationFileTemplate
|
|
145
|
+
.replaceAll(namespaceLinePlaceholder, namespaceLine)
|
|
140
146
|
.replaceAll(contextNamePlaceholder, dbContextName)
|
|
141
147
|
.replaceAll(migrationNamePlaceholder, migrationName);
|
|
142
|
-
await fsp.writeFile(
|
|
143
|
-
log(`Updated file with boilerplate - please ensure it is correct: 📄${
|
|
148
|
+
await fsp.writeFile(cSharpMigrationFilePath, newFileContents, { encoding: 'utf8' });
|
|
149
|
+
log(`Updated file with boilerplate - please ensure it is correct: 📄${cSharpMigrationFilePath}`);
|
|
144
150
|
const upScriptPath = path.join(projectDirectory, `Scripts/${migrationName}.sql`);
|
|
145
151
|
const downScriptPath = path.join(projectDirectory, `Scripts/${migrationName}_Down.sql`);
|
|
146
152
|
log('\nCreating corresponding empty sql files (no action will be taken if they already exist):');
|
|
@@ -151,12 +157,14 @@ async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrat
|
|
|
151
157
|
}
|
|
152
158
|
async function writeEmptySqlFileIfNotExists(scriptPath, scriptType) {
|
|
153
159
|
if (!fs.existsSync(scriptPath)) {
|
|
154
|
-
|
|
160
|
+
const filename = path.basename(scriptPath);
|
|
161
|
+
await fsp.writeFile(scriptPath, `-- ${filename} - ${scriptType} script`, { encoding: 'utf8' });
|
|
155
162
|
}
|
|
156
163
|
else {
|
|
157
164
|
log(`Skipping ${scriptType} sql script (already exists)`);
|
|
158
165
|
}
|
|
159
166
|
}
|
|
167
|
+
const namespaceLinePlaceholder = '{{namespace}}';
|
|
160
168
|
const contextNamePlaceholder = '{{context_name}}';
|
|
161
169
|
const migrationNamePlaceholder = '{{migration_name}}';
|
|
162
170
|
const cSharpMigrationFileTemplate = `using Microsoft.EntityFrameworkCore.Migrations;
|
|
@@ -164,7 +172,7 @@ using MikeyT.DbMigrations;
|
|
|
164
172
|
|
|
165
173
|
#nullable disable
|
|
166
174
|
|
|
167
|
-
namespace
|
|
175
|
+
{{namespace}}
|
|
168
176
|
{
|
|
169
177
|
public partial class ${migrationNamePlaceholder} : Migration
|
|
170
178
|
{
|
|
@@ -179,6 +187,5 @@ namespace DbMigrator.Migrations.${contextNamePlaceholder}Migrations
|
|
|
179
187
|
}
|
|
180
188
|
}
|
|
181
189
|
}
|
|
182
|
-
|
|
183
190
|
`;
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJNaWdyYXRpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYk1pZ3JhdGlvblV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDNUcsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxJQUFjLEVBQUUsT0FBTyxHQUFHLElBQUk7SUFDOUcsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEosT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFBO0FBQ3BCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxXQUFtQixFQUFFLGFBQXFCO0lBQy9FLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUUsQ0FBQTtBQUM1RSxDQUFDO0FBRUQ7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
|