mirror of
https://github.com/typeorm/typeorm.git
synced 2025-12-08 21:26:23 +00:00
# Conflicts: # .github/workflows/commit-validation.yml # .github/workflows/preview.yml # .github/workflows/publish-package.yml # README-zh_CN.md # README_ko.md # docs/docs/query-runner.md # eslint.config.mjs # package-lock.json # package.json # src/commands/InitCommand.ts # src/driver/sqlserver/MssqlParameter.ts # test/utils/xfail.ts
233 lines
6.9 KiB
TypeScript
233 lines
6.9 KiB
TypeScript
import fs from "fs/promises";
|
|
import gulp from "gulp";
|
|
import rename from "gulp-rename";
|
|
import replace from "gulp-replace";
|
|
import shell from "gulp-shell";
|
|
import sourcemaps from "gulp-sourcemaps";
|
|
import ts from "gulp-typescript";
|
|
import { Gulpclass, MergedTask, SequenceTask, Task } from "gulpclass";
|
|
|
|
@Gulpclass()
|
|
export class Gulpfile {
|
|
|
|
// -------------------------------------------------------------------------
|
|
// General tasks
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Cleans build folder.
|
|
*/
|
|
@Task()
|
|
async clean() {
|
|
await fs.rm("./build", { recursive: true, force: true });
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Build and packaging for browser
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Copies all source files into destination folder in a correct structure.
|
|
*/
|
|
@Task()
|
|
browserCopySources() {
|
|
return gulp.src([
|
|
"./src/**/*.ts",
|
|
"!./src/commands/*.ts",
|
|
"!./src/cli.ts",
|
|
"!./src/typeorm.ts",
|
|
"!./src/typeorm-model-shim.ts"
|
|
])
|
|
.pipe(gulp.dest("./build/browser/src"));
|
|
}
|
|
|
|
/**
|
|
* Copies templates for compilation
|
|
*/
|
|
@Task()
|
|
browserCopyTemplates() {
|
|
return gulp.src("./src/platform/*.template")
|
|
.pipe(rename((p) => { p.extname = '.ts'; }))
|
|
.pipe(gulp.dest("./build/browser/src/platform"));
|
|
}
|
|
|
|
@MergedTask()
|
|
browserCompile() {
|
|
const tsProject = ts.createProject("tsconfig.json", {
|
|
lib: ["es2023", "dom"],
|
|
typescript: require("typescript")
|
|
});
|
|
const tsResult = gulp.src([
|
|
"./build/browser/src/**/*.ts",
|
|
"./node_modules/reflect-metadata/**/*.d.ts"
|
|
])
|
|
.pipe(sourcemaps.init())
|
|
.pipe(tsProject());
|
|
|
|
return [
|
|
tsResult.dts.pipe(gulp.dest("./build/package/browser")),
|
|
tsResult.js
|
|
.pipe(sourcemaps.write(".", { sourceRoot: "", includeContent: true }))
|
|
.pipe(gulp.dest("./build/package/browser"))
|
|
];
|
|
}
|
|
|
|
@Task()
|
|
async browserClearPackageDirectory() {
|
|
await fs.rm("./build/browser/", { recursive: true, force: true });
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Main Packaging and Publishing tasks
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Publishes a package to npm from ./build/package directory with @next tag.
|
|
*/
|
|
@Task()
|
|
packagePublishNext() {
|
|
return gulp.src("package.json", { read: false })
|
|
.pipe(shell([
|
|
"cd ./build/package && npm publish --tag next"
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* Copies all sources to the package directory.
|
|
*/
|
|
@MergedTask()
|
|
packageCompile() {
|
|
const tsProject = ts.createProject("tsconfig.json", {
|
|
typescript: require("typescript")
|
|
});
|
|
const tsResult = gulp.src([
|
|
"./src/**/*.ts"
|
|
])
|
|
.pipe(sourcemaps.init())
|
|
.pipe(tsProject());
|
|
|
|
return [
|
|
tsResult.dts.pipe(gulp.dest("./build/package")),
|
|
tsResult.js
|
|
.pipe(sourcemaps.write(".", { sourceRoot: "", includeContent: true }))
|
|
.pipe(gulp.dest("./build/package"))
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Moves all compiled files to the final package directory.
|
|
*/
|
|
@Task()
|
|
packageMoveCompiledFiles() {
|
|
return gulp.src("./build/package/src/**/*")
|
|
.pipe(gulp.dest("./build/package"));
|
|
}
|
|
|
|
/**
|
|
* Create ESM index file in the final package directory.
|
|
*/
|
|
@Task()
|
|
async packageCreateEsmIndex() {
|
|
const buildDir = "./build/package";
|
|
const cjsIndex = require(`${buildDir}/index.js`);
|
|
const cjsKeys = Object.keys(cjsIndex).filter(key => key !== "default" && !key.startsWith("__"));
|
|
|
|
const indexMjsContent =
|
|
'import TypeORM from "./index.js";\n' +
|
|
`const {\n ${cjsKeys.join(",\n ")}\n} = TypeORM;\n` +
|
|
`export {\n ${cjsKeys.join(",\n ")}\n};\n` +
|
|
'export default TypeORM;\n';
|
|
|
|
await fs.writeFile(`${buildDir}/index.mjs`, indexMjsContent, "utf8");
|
|
}
|
|
|
|
/**
|
|
* Removes /// <reference from compiled sources.
|
|
*/
|
|
@Task()
|
|
packageReplaceReferences() {
|
|
return gulp.src("./build/package/**/*.d.ts")
|
|
.pipe(replace(`/// <reference types="node" />`, ""))
|
|
.pipe(replace(`/// <reference types="chai" />`, ""))
|
|
.pipe(gulp.dest("./build/package"));
|
|
}
|
|
|
|
/**
|
|
* Moves all compiled files to the final package directory.
|
|
*/
|
|
@Task()
|
|
async packageClearPackageDirectory() {
|
|
await fs.rm("./build/package/src/", { recursive: true, force: true });
|
|
}
|
|
|
|
/**
|
|
* Change the "private" state of the packaged package.json file to public.
|
|
*/
|
|
@Task()
|
|
packagePreparePackageFile() {
|
|
return gulp.src("./package.json")
|
|
.pipe(replace("\"private\": true,", "\"private\": false,"))
|
|
.pipe(gulp.dest("./build/package"));
|
|
}
|
|
|
|
/**
|
|
* Copies README.md into the package.
|
|
*/
|
|
@Task()
|
|
packageCopyReadme() {
|
|
return gulp.src("./README.md")
|
|
.pipe(replace(/```typescript([\s\S]*?)```/g, "```javascript$1```"))
|
|
.pipe(gulp.dest("./build/package"));
|
|
}
|
|
|
|
/**
|
|
* Copies shims to use typeorm in different environment and conditions file into package.
|
|
*/
|
|
@Task()
|
|
packageCopyShims() {
|
|
return gulp.src(["./extra/typeorm-model-shim.js", "./extra/typeorm-class-transformer-shim.js"])
|
|
.pipe(gulp.dest("./build/package"));
|
|
}
|
|
|
|
/**
|
|
* Move reference to package.json one level up
|
|
*/
|
|
@Task()
|
|
movePackageJsonReferenceLevelUp() {
|
|
return gulp.src("./build/package/commands/InitCommand.js")
|
|
.pipe(replace(/\.\.\/package.json/g, "package.json"))
|
|
.pipe(gulp.dest("./build/package/commands"));
|
|
}
|
|
|
|
/**
|
|
* Creates a package that can be published to npm.
|
|
*/
|
|
@SequenceTask()
|
|
package() {
|
|
return [
|
|
"clean",
|
|
["browserCopySources", "browserCopyTemplates"],
|
|
["packageCompile", "browserCompile"],
|
|
"packageMoveCompiledFiles",
|
|
"packageCreateEsmIndex",
|
|
[
|
|
"browserClearPackageDirectory",
|
|
"packageClearPackageDirectory",
|
|
"packageReplaceReferences",
|
|
"packagePreparePackageFile",
|
|
"packageCopyReadme",
|
|
"packageCopyShims",
|
|
"movePackageJsonReferenceLevelUp"
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Creates a package and publishes it to npm with @next tag.
|
|
*/
|
|
@SequenceTask("publish-next")
|
|
publishNext() {
|
|
return ["package", "packagePublishNext"];
|
|
}
|
|
}
|