parent
4430ab5098
commit
64a50f560d
@ -1,15 +0,0 @@
|
|||||||
// .eslintrc.js
|
|
||||||
module.exports = {
|
|
||||||
root: true,
|
|
||||||
plugins: ["@typescript-eslint"],
|
|
||||||
extends: [
|
|
||||||
"airbnb-typescript/base",
|
|
||||||
"prettier",
|
|
||||||
"plugin:@typescript-eslint/recommended",
|
|
||||||
"plugin:import/typescript",
|
|
||||||
],
|
|
||||||
parser: "@typescript-eslint/parser",
|
|
||||||
parserOptions: {
|
|
||||||
project: "./tsconfig.eslint.json",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
/* eslint-env node */
|
/* eslint-env node */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
|
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
|
||||||
parser: "@typescript-eslint/parser",
|
parser: "@typescript-eslint/parser",
|
||||||
plugins: ["@typescript-eslint"],
|
plugins: ["@typescript-eslint"],
|
||||||
root: true,
|
root: true,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"useTabs": true
|
|
||||||
}
|
|
||||||
@ -1,171 +0,0 @@
|
|||||||
import * as semver from "semver";
|
|
||||||
import { svnGetLatestTag, svnPropGet } from "./promises";
|
|
||||||
export class SolutionImplementation {
|
|
||||||
constructor(url) {
|
|
||||||
this.url = "";
|
|
||||||
this.baseUrl = "";
|
|
||||||
this.repository = "";
|
|
||||||
this.repositoryUrl = "";
|
|
||||||
this.componentFolder = null;
|
|
||||||
this._isSolutionComponent = false;
|
|
||||||
this._isImplementation = false;
|
|
||||||
this.implementationUrl = "";
|
|
||||||
this.type = "";
|
|
||||||
this.version = null;
|
|
||||||
this.nextVersion = null;
|
|
||||||
this.component = "";
|
|
||||||
this.parseUrl(url);
|
|
||||||
}
|
|
||||||
getBaseUrl() {
|
|
||||||
return this.baseUrl;
|
|
||||||
}
|
|
||||||
getUrl() {
|
|
||||||
return this.url;
|
|
||||||
}
|
|
||||||
getImplementationUrl() {
|
|
||||||
return this.implementationUrl;
|
|
||||||
}
|
|
||||||
getRepository() {
|
|
||||||
return this.repository;
|
|
||||||
}
|
|
||||||
getRepositoryUrl() {
|
|
||||||
return this.repositoryUrl;
|
|
||||||
}
|
|
||||||
getComponentFolder() {
|
|
||||||
return this.componentFolder;
|
|
||||||
}
|
|
||||||
isSolutionComponent() {
|
|
||||||
return this._isSolutionComponent;
|
|
||||||
}
|
|
||||||
isImplementation() {
|
|
||||||
return this._isImplementation;
|
|
||||||
}
|
|
||||||
getType() {
|
|
||||||
return this.type;
|
|
||||||
}
|
|
||||||
getVersion() {
|
|
||||||
return this.version;
|
|
||||||
}
|
|
||||||
async getNextVersion(semVerIncrementType) {
|
|
||||||
await this.getLatestTag()
|
|
||||||
.then((result) => {
|
|
||||||
if (semver.valid(semver.coerce(result))) {
|
|
||||||
const sv = result;
|
|
||||||
this.nextVersion = semver.inc(sv, semVerIncrementType);
|
|
||||||
} else {
|
|
||||||
this.nextVersion = null;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
// Handle error
|
|
||||||
});
|
|
||||||
return this.nextVersion;
|
|
||||||
}
|
|
||||||
async getLatestTag() {
|
|
||||||
try {
|
|
||||||
const lastTagOrBranch = await svnGetLatestTag(this.implementationUrl);
|
|
||||||
return lastTagOrBranch.name;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error retrieving last tag or branch:", error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getTypeAndVersion() {
|
|
||||||
if ((this.type === "tags" || this.type === "branches") && this.version) {
|
|
||||||
return `${this.type}/${this.version}`;
|
|
||||||
}
|
|
||||||
return `${this.type}`;
|
|
||||||
}
|
|
||||||
getComponent() {
|
|
||||||
return this.component;
|
|
||||||
}
|
|
||||||
getComponentDecoded() {
|
|
||||||
return decodeURIComponent(this.component);
|
|
||||||
}
|
|
||||||
getExternalsRaw() {
|
|
||||||
return decodeURIComponent(this.component);
|
|
||||||
}
|
|
||||||
// GetExternalsCollection(): externalsCollection {
|
|
||||||
// return decodeURIComponent(this.component);
|
|
||||||
// }
|
|
||||||
async getExternals() {
|
|
||||||
const svnOptions = { trustServerCert: true };
|
|
||||||
try {
|
|
||||||
const response = await svnPropGet("svn:externals", this.url, svnOptions);
|
|
||||||
const rawExternals = response.target.property._;
|
|
||||||
return rawExternals;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error retrieving last tag or branch:", error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parseUrl(url) {
|
|
||||||
this.url = url;
|
|
||||||
const regex = /^(https?:\/\/[^\/]+\/svn\/)/;
|
|
||||||
const match = regex.exec(url);
|
|
||||||
if (match && match.length > 1) {
|
|
||||||
this.baseUrl = match[1];
|
|
||||||
} else {
|
|
||||||
throw new Error("Invalid URL");
|
|
||||||
}
|
|
||||||
const segments = url.split("/");
|
|
||||||
const svnIndex = segments.indexOf("svn");
|
|
||||||
const trunkTagBranchIndex = segments.findIndex(
|
|
||||||
(segment, index) =>
|
|
||||||
index > svnIndex &&
|
|
||||||
(segment === "trunk" || segment === "tags" || segment === "branches")
|
|
||||||
);
|
|
||||||
this._isSolutionComponent = trunkTagBranchIndex - svnIndex > 2;
|
|
||||||
if (svnIndex !== -1 && svnIndex + 1 < segments.length) {
|
|
||||||
this.repository = segments[svnIndex + 1];
|
|
||||||
this.repositoryUrl = `${this.baseUrl}${this.repository}`;
|
|
||||||
if (trunkTagBranchIndex !== -1 && trunkTagBranchIndex - 1 > svnIndex) {
|
|
||||||
const nextSegment = segments[trunkTagBranchIndex - 1];
|
|
||||||
if (
|
|
||||||
nextSegment !== "trunk" &&
|
|
||||||
nextSegment !== "tags" &&
|
|
||||||
nextSegment !== "branches"
|
|
||||||
) {
|
|
||||||
if (this._isSolutionComponent) {
|
|
||||||
this.componentFolder = nextSegment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (trunkTagBranchIndex !== -1 && trunkTagBranchIndex < segments.length) {
|
|
||||||
this.type = segments[trunkTagBranchIndex];
|
|
||||||
if (this.type === "tags" || this.type === "branches") {
|
|
||||||
if (trunkTagBranchIndex + 1 < segments.length) {
|
|
||||||
this.version = segments[trunkTagBranchIndex + 1];
|
|
||||||
if (trunkTagBranchIndex + 2 < segments.length) {
|
|
||||||
this.component = segments[trunkTagBranchIndex + 2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (trunkTagBranchIndex + 1 < segments.length) {
|
|
||||||
this.component = segments[trunkTagBranchIndex + 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._isImplementation =
|
|
||||||
this.componentFolder === null && this.component === "";
|
|
||||||
this.implementationUrl = segments
|
|
||||||
.slice(0, trunkTagBranchIndex + (this.version === null ? 1 : 2))
|
|
||||||
.join("/");
|
|
||||||
if (this._isImplementation) {
|
|
||||||
const rawExternals = this.getExternals();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new Error("Invalid URL");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Helper function to retrieve the last tag or branch
|
|
||||||
// async function getLastTagOrBranch(url: string): Promise<string> {
|
|
||||||
// try {
|
|
||||||
// const list = await svnListPromise(url);
|
|
||||||
// const sortedList = list.sort((a, b) => b.date.getTime() - a.date.getTime());
|
|
||||||
// const lastTagOrBranch = sortedList[0].name;
|
|
||||||
// return lastTagOrBranch;
|
|
||||||
// } catch (error) {
|
|
||||||
// throw error;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//# sourceMappingURL=SolutionImplementation.js.map
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"SolutionImplementation.js","sourceRoot":"","sources":["SolutionImplementation.ts"],"names":[],"mappings":"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"}
|
|
||||||
@ -1,210 +0,0 @@
|
|||||||
import * as semver from "semver";
|
|
||||||
import { type SemVerIncrementType, type ApiExternalsResponse } from "./types";
|
|
||||||
import { svnList, svnGetLatestTag, svnPropGet } from "./promises";
|
|
||||||
|
|
||||||
export class SolutionImplementation {
|
|
||||||
private url = "";
|
|
||||||
private baseUrl = "";
|
|
||||||
private repository = "";
|
|
||||||
private repositoryUrl = "";
|
|
||||||
private componentFolder: string | undefined = null;
|
|
||||||
private _isSolutionComponent = false;
|
|
||||||
private _isImplementation = false;
|
|
||||||
private implementationUrl = "";
|
|
||||||
private type = "";
|
|
||||||
private version: string | undefined = null;
|
|
||||||
private nextVersion: string | undefined = null;
|
|
||||||
|
|
||||||
private component = "";
|
|
||||||
|
|
||||||
constructor(url: string) {
|
|
||||||
this.parseUrl(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
getBaseUrl(): string {
|
|
||||||
return this.baseUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
getUrl(): string {
|
|
||||||
return this.url;
|
|
||||||
}
|
|
||||||
|
|
||||||
getImplementationUrl(): string {
|
|
||||||
return this.implementationUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
getRepository(): string {
|
|
||||||
return this.repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
getRepositoryUrl(): string {
|
|
||||||
return this.repositoryUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
getComponentFolder(): string | undefined {
|
|
||||||
return this.componentFolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
isSolutionComponent(): boolean {
|
|
||||||
return this._isSolutionComponent;
|
|
||||||
}
|
|
||||||
|
|
||||||
isImplementation(): boolean {
|
|
||||||
return this._isImplementation;
|
|
||||||
}
|
|
||||||
|
|
||||||
getType(): string {
|
|
||||||
return this.type;
|
|
||||||
}
|
|
||||||
|
|
||||||
getVersion(): string | undefined {
|
|
||||||
return this.version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async getNextVersion(
|
|
||||||
semVerIncrementType: SemVerIncrementType
|
|
||||||
): Promise<string | undefined> {
|
|
||||||
await this.getLatestTag()
|
|
||||||
.then((result) => {
|
|
||||||
if (semver.valid(semver.coerce(result))) {
|
|
||||||
const sv: string = result;
|
|
||||||
this.nextVersion = semver.inc(sv, semVerIncrementType);
|
|
||||||
} else {
|
|
||||||
this.nextVersion = null;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
// Handle error
|
|
||||||
});
|
|
||||||
return this.nextVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async getLatestTag(): Promise<string> {
|
|
||||||
try {
|
|
||||||
const lastTagOrBranch = await svnGetLatestTag(this.implementationUrl);
|
|
||||||
return lastTagOrBranch.name;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error retrieving last tag or branch:", error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getTypeAndVersion(): string {
|
|
||||||
if ((this.type === "tags" || this.type === "branches") && this.version) {
|
|
||||||
return `${this.type}/${this.version}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return `${this.type}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
getComponent(): string {
|
|
||||||
return this.component;
|
|
||||||
}
|
|
||||||
|
|
||||||
getComponentDecoded(): string {
|
|
||||||
return decodeURIComponent(this.component);
|
|
||||||
}
|
|
||||||
|
|
||||||
getExternalsRaw(): string {
|
|
||||||
return decodeURIComponent(this.component);
|
|
||||||
}
|
|
||||||
// GetExternalsCollection(): externalsCollection {
|
|
||||||
// return decodeURIComponent(this.component);
|
|
||||||
// }
|
|
||||||
|
|
||||||
public async getExternals(): Promise<string> {
|
|
||||||
const svnOptions = { trustServerCert: true };
|
|
||||||
try {
|
|
||||||
const response: ApiExternalsResponse = await svnPropGet(
|
|
||||||
"svn:externals",
|
|
||||||
this.url,
|
|
||||||
svnOptions
|
|
||||||
);
|
|
||||||
const rawExternals: string = response.target.property._;
|
|
||||||
return rawExternals;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error retrieving last tag or branch:", error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private parseUrl(url: string): void {
|
|
||||||
this.url = url;
|
|
||||||
|
|
||||||
const regex = /^(https?:\/\/[^\/]+\/svn\/)/;
|
|
||||||
const match = regex.exec(url);
|
|
||||||
|
|
||||||
if (match && match.length > 1) {
|
|
||||||
this.baseUrl = match[1];
|
|
||||||
} else {
|
|
||||||
throw new Error("Invalid URL");
|
|
||||||
}
|
|
||||||
|
|
||||||
const segments = url.split("/");
|
|
||||||
const svnIndex = segments.indexOf("svn");
|
|
||||||
const trunkTagBranchIndex = segments.findIndex(
|
|
||||||
(segment, index) =>
|
|
||||||
index > svnIndex &&
|
|
||||||
(segment === "trunk" || segment === "tags" || segment === "branches")
|
|
||||||
);
|
|
||||||
this._isSolutionComponent = trunkTagBranchIndex - svnIndex > 2;
|
|
||||||
|
|
||||||
if (svnIndex !== -1 && svnIndex + 1 < segments.length) {
|
|
||||||
this.repository = segments[svnIndex + 1];
|
|
||||||
this.repositoryUrl = `${this.baseUrl}${this.repository}`;
|
|
||||||
|
|
||||||
if (trunkTagBranchIndex !== -1 && trunkTagBranchIndex - 1 > svnIndex) {
|
|
||||||
const nextSegment = segments[trunkTagBranchIndex - 1];
|
|
||||||
|
|
||||||
if (
|
|
||||||
nextSegment !== "trunk" &&
|
|
||||||
nextSegment !== "tags" &&
|
|
||||||
nextSegment !== "branches"
|
|
||||||
) {
|
|
||||||
if (this._isSolutionComponent) {
|
|
||||||
this.componentFolder = nextSegment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trunkTagBranchIndex !== -1 && trunkTagBranchIndex < segments.length) {
|
|
||||||
this.type = segments[trunkTagBranchIndex];
|
|
||||||
|
|
||||||
if (this.type === "tags" || this.type === "branches") {
|
|
||||||
if (trunkTagBranchIndex + 1 < segments.length) {
|
|
||||||
this.version = segments[trunkTagBranchIndex + 1];
|
|
||||||
if (trunkTagBranchIndex + 2 < segments.length) {
|
|
||||||
this.component = segments[trunkTagBranchIndex + 2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (trunkTagBranchIndex + 1 < segments.length) {
|
|
||||||
this.component = segments[trunkTagBranchIndex + 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this._isImplementation =
|
|
||||||
this.componentFolder === null && this.component === "";
|
|
||||||
this.implementationUrl = segments
|
|
||||||
.slice(0, trunkTagBranchIndex + (this.version === null ? 1 : 2))
|
|
||||||
.join("/");
|
|
||||||
|
|
||||||
if (this._isImplementation) {
|
|
||||||
const rawExternals = this.getExternals();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new Error("Invalid URL");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper function to retrieve the last tag or branch
|
|
||||||
// async function getLastTagOrBranch(url: string): Promise<string> {
|
|
||||||
// try {
|
|
||||||
// const list = await svnListPromise(url);
|
|
||||||
// const sortedList = list.sort((a, b) => b.date.getTime() - a.date.getTime());
|
|
||||||
// const lastTagOrBranch = sortedList[0].name;
|
|
||||||
// return lastTagOrBranch;
|
|
||||||
// } catch (error) {
|
|
||||||
// throw error;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
import * as fs from "fs";
|
|
||||||
import { SolutionImplementation } from "./SolutionImplementation";
|
|
||||||
export class SolutionImplementationReader {
|
|
||||||
constructor() {
|
|
||||||
const json = fs.readFileSync("solutions.json", "utf-8");
|
|
||||||
this.solutionImplementations = JSON.parse(json);
|
|
||||||
}
|
|
||||||
readSolutionUrl() {
|
|
||||||
this.solutionImplementations.forEach((solutionImplementation) => {
|
|
||||||
const s = new SolutionImplementation(solutionImplementation.url);
|
|
||||||
console.log(JSON.stringify(s, null, 2));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=SolutionImplementationReader.js.map
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"SolutionImplementationReader.js","sourceRoot":"","sources":["SolutionImplementationReader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAEhE,MAAM,OAAO,4BAA4B;IAGxC;QACC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEM,eAAe;QACrB,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,sBAAkD,EAAE,EAAE;YAC3F,MAAM,CAAC,GAAG,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
import * as fs from "fs";
|
|
||||||
import { type TypeSolutionImplementation } from "./types";
|
|
||||||
import { SolutionImplementation } from "./SolutionImplementation";
|
|
||||||
|
|
||||||
export class SolutionImplementationReader {
|
|
||||||
private readonly solutionImplementations: TypeSolutionImplementation[];
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
const json = fs.readFileSync("solutions.json", "utf-8");
|
|
||||||
this.solutionImplementations = JSON.parse(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
public readSolutionUrl(): void {
|
|
||||||
this.solutionImplementations.forEach(
|
|
||||||
(solutionImplementation: TypeSolutionImplementation) => {
|
|
||||||
const s = new SolutionImplementation(solutionImplementation.url);
|
|
||||||
console.log(JSON.stringify(s, null, 2));
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,85 +0,0 @@
|
|||||||
import { SolutionImplementationReader } from "./SolutionImplementationReader";
|
|
||||||
// Const trunkUrl = 'https://svn.bearingpointcaribbean.com/svn/MTS_ANGLO/Business_Licence/trunk/DSC%20Business%20license';
|
|
||||||
// const tagUrl = 'https://svn.bearingpointcaribbean.com/svn/MTS_ANGLO/Interim_Stabilization_Levy/tags/1.0.0/DSC%20Interim%20stabilization%20levy';
|
|
||||||
// const branchUrl = 'https://svn.bearingpointcaribbean.com/svn/MTS_ANGUILLA/branches/1.5.0/SC%20Address%20-%20Specific';
|
|
||||||
// const trunkSolutionUrl = 'https://svn.bearingpointcaribbean.com/svn/MTS_ANGUILLA/trunk';
|
|
||||||
// const tagSolutionUrl = 'https://svn.bearingpointcaribbean.com/svn/MTS_ANGUILLA/tags/2.1.1.1';
|
|
||||||
// const branchSolutionUrl = 'https://svn.bearingpointcaribbean.com/svn/MTS_ANGUILLA/branches/2.1.1';
|
|
||||||
async function showOutPut() {
|
|
||||||
console.log();
|
|
||||||
}
|
|
||||||
// ShowOutPut();
|
|
||||||
// Usage
|
|
||||||
const solutionImplementations = [];
|
|
||||||
const solutionImplementationReader = new SolutionImplementationReader();
|
|
||||||
// SolutionImplementations.push(solutionImplementationReader.readSolutionUrl());
|
|
||||||
// solution = new SolutionImplementation(tagUrl);
|
|
||||||
// console.log('solution.getURL():', solution.getURL());
|
|
||||||
// console.log('solution.getBaseURL():', solution.getBaseURL());
|
|
||||||
// console.log('solution.getRepository():', solution.getRepository());
|
|
||||||
// console.log('solution.getComponentFolder():', solution.getComponentFolder());
|
|
||||||
// console.log('solution.isSolutionComponent():', solution.isSolutionComponent());
|
|
||||||
// console.log('solution.isImplementation():', solution.isImplementation());
|
|
||||||
// console.log('solution.getType():', solution.getType());
|
|
||||||
// console.log('solution.getVersion():', solution.getVersion());
|
|
||||||
// console.log('solution.getTypeAndVersion():', solution.getTypeAndVersion());
|
|
||||||
// console.log('solution.getComponent():', solution.getComponent());
|
|
||||||
// console.log('solution.getComponentDecoded():', solution.getComponentDecoded());
|
|
||||||
// console.log('solution.getImplementationURL():', solution.getImplementationURL());
|
|
||||||
// console.log('--');
|
|
||||||
// solution = new SolutionImplementation(branchUrl);
|
|
||||||
// console.log('solution.getURL():', solution.getURL());
|
|
||||||
// console.log('solution.getBaseURL():', solution.getBaseURL());
|
|
||||||
// console.log('solution.getRepository():', solution.getRepository());
|
|
||||||
// console.log('solution.getComponentFolder():', solution.getComponentFolder());
|
|
||||||
// console.log('solution.isSolutionComponent():', solution.isSolutionComponent());
|
|
||||||
// console.log('solution.isImplementation():', solution.isImplementation());
|
|
||||||
// console.log('solution.getType():', solution.getType());
|
|
||||||
// console.log('solution.getVersion():', solution.getVersion());
|
|
||||||
// console.log('solution.getTypeAndVersion():', solution.getTypeAndVersion());
|
|
||||||
// console.log('solution.getComponent():', solution.getComponent());
|
|
||||||
// console.log('solution.getComponentDecoded():', solution.getComponentDecoded());
|
|
||||||
// console.log('solution.getImplementationURL():', solution.getImplementationURL());
|
|
||||||
// console.log('--');
|
|
||||||
// solution = new SolutionImplementation(trunkSolutionUrl);
|
|
||||||
// console.log('solution.getURL():', solution.getURL());
|
|
||||||
// console.log('solution.getBaseURL():', solution.getBaseURL());
|
|
||||||
// console.log('solution.getRepository():', solution.getRepository());
|
|
||||||
// console.log('solution.getComponentFolder():', solution.getComponentFolder());
|
|
||||||
// console.log('solution.isSolutionComponent():', solution.isSolutionComponent());
|
|
||||||
// console.log('solution.isImplementation():', solution.isImplementation());
|
|
||||||
// console.log('solution.getType():', solution.getType());
|
|
||||||
// console.log('solution.getVersion():', solution.getVersion());
|
|
||||||
// console.log('solution.getTypeAndVersion():', solution.getTypeAndVersion());
|
|
||||||
// console.log('solution.getComponent():', solution.getComponent());
|
|
||||||
// console.log('solution.getComponentDecoded():', solution.getComponentDecoded());
|
|
||||||
// console.log('solution.getImplementationURL():', solution.getImplementationURL());
|
|
||||||
// console.log('--');
|
|
||||||
// solution = new SolutionImplementation(tagSolutionUrl);
|
|
||||||
// console.log('solution.getURL():', solution.getURL());
|
|
||||||
// console.log('solution.getBaseURL():', solution.getBaseURL());
|
|
||||||
// console.log('solution.getRepository():', solution.getRepository());
|
|
||||||
// console.log('solution.getComponentFolder():', solution.getComponentFolder());
|
|
||||||
// console.log('solution.isSolutionComponent():', solution.isSolutionComponent());
|
|
||||||
// console.log('solution.isImplementation():', solution.isImplementation());
|
|
||||||
// console.log('solution.getType():', solution.getType());
|
|
||||||
// console.log('solution.getVersion():', solution.getVersion());
|
|
||||||
// console.log('solution.getTypeAndVersion():', solution.getTypeAndVersion());
|
|
||||||
// console.log('solution.getComponent():', solution.getComponent());
|
|
||||||
// console.log('solution.getComponentDecoded():', solution.getComponentDecoded());
|
|
||||||
// console.log('solution.getImplementationURL():', solution.getImplementationURL());
|
|
||||||
// console.log('--');
|
|
||||||
// solution = new SolutionImplementation(branchSolutionUrl);
|
|
||||||
// console.log('solution.getURL():', solution.getURL());
|
|
||||||
// console.log('solution.getBaseURL():', solution.getBaseURL());
|
|
||||||
// console.log('solution.getRepository():', solution.getRepository());
|
|
||||||
// console.log('solution.getComponentFolder():', solution.getComponentFolder());
|
|
||||||
// console.log('solution.isSolutionComponent():', solution.isSolutionComponent());
|
|
||||||
// console.log('solution.isImplementation():', solution.isImplementation());
|
|
||||||
// console.log('solution.getType():', solution.getType());
|
|
||||||
// console.log('solution.getVersion():', solution.getVersion());
|
|
||||||
// console.log('solution.getTypeAndVersion():', solution.getTypeAndVersion());
|
|
||||||
// console.log('solution.getComponent():', solution.getComponent());
|
|
||||||
// console.log('solution.getComponentDecoded():', solution.getComponentDecoded());
|
|
||||||
// console.log('solution.getImplementationURL():', solution.getImplementationURL());
|
|
||||||
//# sourceMappingURL=index_bak.js.map
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"index_bak.js","sourceRoot":"","sources":["index_bak.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,0HAA0H;AAC1H,mJAAmJ;AACnJ,yHAAyH;AACzH,2FAA2F;AAC3F,gGAAgG;AAChG,qGAAqG;AAErG,KAAK,UAAU,UAAU;IACvB,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,gBAAgB;AAEhB,QAAQ;AACR,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,4BAA4B,GAAG,IAAI,4BAA4B,EAAE,CAAC;AACxE,gFAAgF;AAEhF,iDAAiD;AACjD,wDAAwD;AACxD,gEAAgE;AAChE,sEAAsE;AACtE,gFAAgF;AAChF,kFAAkF;AAClF,4EAA4E;AAC5E,0DAA0D;AAC1D,gEAAgE;AAChE,8EAA8E;AAC9E,oEAAoE;AACpE,kFAAkF;AAClF,oFAAoF;AACpF,qBAAqB;AAErB,oDAAoD;AACpD,wDAAwD;AACxD,gEAAgE;AAChE,sEAAsE;AACtE,gFAAgF;AAChF,kFAAkF;AAClF,4EAA4E;AAC5E,0DAA0D;AAC1D,gEAAgE;AAChE,8EAA8E;AAC9E,oEAAoE;AACpE,kFAAkF;AAClF,oFAAoF;AACpF,qBAAqB;AAErB,2DAA2D;AAC3D,wDAAwD;AACxD,gEAAgE;AAChE,sEAAsE;AACtE,gFAAgF;AAChF,kFAAkF;AAClF,4EAA4E;AAC5E,0DAA0D;AAC1D,gEAAgE;AAChE,8EAA8E;AAC9E,oEAAoE;AACpE,kFAAkF;AAClF,oFAAoF;AACpF,qBAAqB;AAErB,yDAAyD;AACzD,wDAAwD;AACxD,gEAAgE;AAChE,sEAAsE;AACtE,gFAAgF;AAChF,kFAAkF;AAClF,4EAA4E;AAC5E,0DAA0D;AAC1D,gEAAgE;AAChE,8EAA8E;AAC9E,oEAAoE;AACpE,kFAAkF;AAClF,oFAAoF;AACpF,qBAAqB;AAErB,4DAA4D;AAC5D,wDAAwD;AACxD,gEAAgE;AAChE,sEAAsE;AACtE,gFAAgF;AAChF,kFAAkF;AAClF,4EAA4E;AAC5E,0DAA0D;AAC1D,gEAAgE;AAChE,8EAA8E;AAC9E,oEAAoE;AACpE,kFAAkF;AAClF,oFAAoF"}
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
import { promisify } from "util";
|
|
||||||
import * as nodeSVNUltimate from "node-svn-ultimate";
|
|
||||||
// Promisify individual functions
|
|
||||||
const svnList = promisify(nodeSVNUltimate.commands.list);
|
|
||||||
const svnGetLatestTag = promisify(nodeSVNUltimate.util.getLatestTag);
|
|
||||||
const svnPropGet = promisify(nodeSVNUltimate.commands.propget);
|
|
||||||
export { svnList, svnGetLatestTag, svnPropGet };
|
|
||||||
//# sourceMappingURL=promises.js.map
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"promises.js","sourceRoot":"","sources":["promises.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAErD,iCAAiC;AACjC,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACzD,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrE,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAE/D,OAAO,EACN,OAAO,EACP,eAAe,EACf,UAAU,GACV,CAAC"}
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
import { promisify } from "util";
|
|
||||||
import * as nodeSVNUltimate from "node-svn-ultimate";
|
|
||||||
|
|
||||||
// Promisify individual functions
|
|
||||||
const svnList = promisify(nodeSVNUltimate.commands.list);
|
|
||||||
const svnGetLatestTag = promisify(nodeSVNUltimate.util.getLatestTag);
|
|
||||||
const svnPropGet = promisify(nodeSVNUltimate.commands.propget);
|
|
||||||
|
|
||||||
export { svnList, svnGetLatestTag, svnPropGet };
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
export var Role;
|
|
||||||
(function (Role) {
|
|
||||||
Role["ADMIN"] = "admin";
|
|
||||||
Role["USER"] = "user";
|
|
||||||
})(Role || (Role = {}));
|
|
||||||
//# sourceMappingURL=types.js.map
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAN,IAAY,IAGX;AAHD,WAAY,IAAI;IACf,uBAAe,CAAA;IACf,qBAAa,CAAA;AACd,CAAC,EAHW,IAAI,KAAJ,IAAI,QAGf"}
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
export type SemVerIncrementType = "minor" | "major" | "patch";
|
|
||||||
|
|
||||||
export type User = {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
email: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export enum Role {
|
|
||||||
ADMIN = "admin",
|
|
||||||
USER = "user",
|
|
||||||
}
|
|
||||||
|
|
||||||
export type TypeSolutionImplementation = {
|
|
||||||
name: string;
|
|
||||||
functionalName: string;
|
|
||||||
customer: string;
|
|
||||||
customerCode: string;
|
|
||||||
path: string;
|
|
||||||
class: string;
|
|
||||||
url: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type ApiExternalsResponse = {
|
|
||||||
target: {
|
|
||||||
$: {
|
|
||||||
path: string;
|
|
||||||
};
|
|
||||||
property: {
|
|
||||||
_: string;
|
|
||||||
$: {
|
|
||||||
name: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
// Use IntelliSense to learn about possible attributes.
|
// Use IntelliSense to learn about possible attributes.
|
||||||
// Hover to view descriptions of existing attributes.
|
// Hover to view descriptions of existing attributes.
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "Launch Program",
|
"name": "Launch Program",
|
||||||
"skipFiles": ["<node_internals>/**"],
|
"skipFiles": ["<node_internals>/**"],
|
||||||
"program": "${workspaceFolder}/dist/index.js",
|
"program": "${workspaceFolder}/dist/index.js",
|
||||||
"outFiles": ["${workspaceFolder}/**/*.js"]
|
"outFiles": ["${workspaceFolder}/**/*.js"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
"editor.formatOnSave": true
|
"editor.formatOnSave": true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
"type": "typescript",
|
"type": "typescript",
|
||||||
"tsconfig": "tsconfig.json",
|
"tsconfig": "tsconfig.json",
|
||||||
"option": "watch",
|
"option": "watch",
|
||||||
"problemMatcher": ["$tsc-watch"],
|
"problemMatcher": ["$tsc-watch"],
|
||||||
"group": {
|
"group": {
|
||||||
"kind": "build",
|
"kind": "build",
|
||||||
"isDefault": true
|
"isDefault": true
|
||||||
},
|
},
|
||||||
"label": "tsc: watch - tsconfig.json"
|
"label": "tsc: watch - tsconfig.json"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
added 61 packages, removed 6 packages, and audited 284 packages in 9s
|
|
||||||
|
|
||||||
105 packages are looking for funding
|
|
||||||
run `npm fund` for details
|
|
||||||
|
|
||||||
2 moderate severity vulnerabilities
|
|
||||||
|
|
||||||
Some issues need review, and may require choosing
|
|
||||||
a different dependency.
|
|
||||||
|
|
||||||
Run `npm audit` for details.
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,38 +1,39 @@
|
|||||||
{
|
{
|
||||||
"name": "ts-anglo-helper",
|
"name": "ts-anglo-helper",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"format": "prettier --write .",
|
"format": "prettier --write .",
|
||||||
"prepare": "husky install",
|
"prepare": "husky install",
|
||||||
"lint": "eslint ."
|
"lint": "eslint ."
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.2.3",
|
"@types/node": "^20.2.3",
|
||||||
"@types/semver": "^7.5.0",
|
"@types/semver": "^7.5.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.59.8",
|
"@types/xml2js": "^0.4.11",
|
||||||
"@typescript-eslint/parser": "^5.59.8",
|
"@typescript-eslint/eslint-plugin": "^5.59.8",
|
||||||
"eslint": "^8.41.0",
|
"@typescript-eslint/parser": "^5.59.8",
|
||||||
"eslint-config-airbnb-base": "^15.0.0",
|
"eslint": "^8.41.0",
|
||||||
"eslint-config-airbnb-typescript": "^17.0.0",
|
"eslint-config-airbnb-base": "^15.0.0",
|
||||||
"eslint-config-prettier": "^8.8.0",
|
"eslint-config-airbnb-typescript": "^17.0.0",
|
||||||
"eslint-plugin-import": "^2.25.2",
|
"eslint-config-prettier": "^8.8.0",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-import": "^2.25.2",
|
||||||
"husky": "^8.0.3",
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
"lint-staged": "^13.2.2",
|
"husky": "^8.0.3",
|
||||||
"prettier": "^2.8.8",
|
"lint-staged": "^13.2.2",
|
||||||
"typescript": "^5.1.3"
|
"prettier": "^2.8.8",
|
||||||
},
|
"typescript": "^5.1.3"
|
||||||
"dependencies": {
|
},
|
||||||
"node-svn-ultimate": "^1.2.1",
|
"dependencies": {
|
||||||
"semver": "^7.5.1"
|
"semver": "^7.5.1",
|
||||||
},
|
"xml2js": "^0.6.0"
|
||||||
"lint-staged": {
|
},
|
||||||
"*": "prettier --ignore-unknown --write"
|
"lint-staged": {
|
||||||
}
|
"*": "prettier --ignore-unknown --write"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"useTabs": true,
|
||||||
|
"trailingComma": "all",
|
||||||
|
"function-max-lines": [
|
||||||
|
2,
|
||||||
|
{
|
||||||
|
"max": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"function-body-newline": true
|
||||||
|
}
|
||||||
@ -1,75 +1,83 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "MBS_ANGUILLA",
|
"name": "MBS_ANGUILLA",
|
||||||
"functionalName": "MBS Anguilla",
|
"functionalName": "MBS Anguilla",
|
||||||
"customer": "ANGUILLA",
|
"customer": "ANGUILLA",
|
||||||
"customerCode": "aia_mbs",
|
"customerCode": "aia_mbs",
|
||||||
"path": "D:\\repo\\mbs_anguilla_21\\",
|
"path": "D:\\repo\\mbs_anguilla_21\\",
|
||||||
"class": "MxS",
|
"class": "MxS",
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/MBS_ANGUILLA/trunk"
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
},
|
"url": "/svn/MBS_ANGUILLA/trunk"
|
||||||
{
|
},
|
||||||
"name": "MTS_ANGUILLA",
|
{
|
||||||
"functionalName": "MTS Anguilla",
|
"name": "MTS_ANGUILLA",
|
||||||
"customer": "ANGUILLA ",
|
"functionalName": "MTS Anguilla",
|
||||||
"customerCode": "aia_mts",
|
"customer": "ANGUILLA ",
|
||||||
"path": "D:\\repo\\mts_anguilla_21\\",
|
"customerCode": "aia_mts",
|
||||||
"class": "MxS",
|
"path": "D:\\repo\\mts_anguilla_21\\",
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/MTS_ANGUILLA/trunk"
|
"class": "MxS",
|
||||||
},
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
{
|
"url": "/svn/MTS_ANGUILLA/trunk"
|
||||||
"name": "ONLINE_ANGUILLA",
|
},
|
||||||
"functionalName": "Online Anguilla",
|
{
|
||||||
"customer": "ANGUILLA",
|
"name": "ONLINE_ANGUILLA",
|
||||||
"customerCode": "aia_online",
|
"functionalName": "Online Anguilla",
|
||||||
"path": "D:\\repo\\online_anguilla\\",
|
"customer": "ANGUILLA",
|
||||||
"class": "ONLINE",
|
"customerCode": "aia_online",
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/ONLINE_ANGUILLA/trunk"
|
"path": "D:\\repo\\online_anguilla\\",
|
||||||
},
|
"class": "ONLINE",
|
||||||
{
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
"name": "MTS_SKN",
|
"url": "/svn/ONLINE_ANGUILLA/trunk"
|
||||||
"functionalName": "MTS Saint Kitts and Nevis",
|
},
|
||||||
"customer": "SKN",
|
{
|
||||||
"customerCode": "skn_mts",
|
"name": "MTS_SKN",
|
||||||
"path": "D:\\repo\\mts_skn\\",
|
"functionalName": "MTS Saint Kitts and Nevis",
|
||||||
"class": "MxS",
|
"customer": "SKN",
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/MTS_SKN/trunk"
|
"customerCode": "skn_mts",
|
||||||
},
|
"path": "D:\\repo\\mts_skn\\",
|
||||||
{
|
"class": "MxS",
|
||||||
"name": "ONLINE_SKN",
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
"functionalName": "Online Saint Kitts and Nevis",
|
"url": "/svn/MTS_SKN/trunk"
|
||||||
"customer": "SKN",
|
},
|
||||||
"customerCode": "skn_online",
|
{
|
||||||
"path": "D:\\repo\\online_skn\\",
|
"name": "ONLINE_SKN",
|
||||||
"class": "ONLINE",
|
"functionalName": "Online Saint Kitts and Nevis",
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/ONLINE_SKN/trunk"
|
"customer": "SKN",
|
||||||
},
|
"customerCode": "skn_online",
|
||||||
{
|
"path": "D:\\repo\\online_skn\\",
|
||||||
"name": "BDSU_MTS",
|
"class": "ONLINE",
|
||||||
"functionalName": "MTS Belastingdienst Suriname",
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
"customer": "Belastingdienst Suriname",
|
"url": "/svn/ONLINE_SKN/trunk"
|
||||||
"customerCode": "bdsu_mts",
|
},
|
||||||
"path": "D:\\repo\\mts_bdsu\\",
|
{
|
||||||
"class": "MxS",
|
"name": "BDSU_MTS",
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/BDSU_MTS/trunk",
|
"functionalName": "MTS Belastingdienst Suriname",
|
||||||
"test": true
|
"customer": "Belastingdienst Suriname",
|
||||||
},
|
"customerCode": "bdsu_mts",
|
||||||
{
|
"path": "D:\\repo\\mts_bdsu\\",
|
||||||
"name": "MTS_GRENADA",
|
"class": "MxS",
|
||||||
"functionalName": "MTS Grenada",
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
"customer": "GRENADA",
|
"url": "/svn/BDSU_MTS/trunk",
|
||||||
"customerCode": "gd_mts",
|
"test": true
|
||||||
"path": "D:\\repo\\mts_grenada\\",
|
},
|
||||||
"class": "MxS",
|
{
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/MTS_GRENADA/trunk"
|
"name": "MTS_GRENADA",
|
||||||
},
|
"functionalName": "MTS Grenada",
|
||||||
{
|
"customer": "GRENADA",
|
||||||
"name": "ONLINE_GD",
|
"customerCode": "gd_mts",
|
||||||
"functionalName": "Online Grenada",
|
"path": "D:\\repo\\mts_grenada\\",
|
||||||
"customer": "GRENADA",
|
"class": "MxS",
|
||||||
"customerCode": "gd_online",
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
"path": "D:\\repo\\online_gd\\",
|
"url": "/svn/MTS_GRENADA/trunk"
|
||||||
"class": "ONLINE",
|
},
|
||||||
"url": "https://svn.bearingpointcaribbean.com/svn/ONLINE_GD/trunk"
|
{
|
||||||
}
|
"name": "ONLINE_GD",
|
||||||
|
"functionalName": "Online Grenada",
|
||||||
|
"customer": "GRENADA",
|
||||||
|
"customerCode": "gd_online",
|
||||||
|
"path": "D:\\repo\\online_gd\\",
|
||||||
|
"class": "ONLINE",
|
||||||
|
"baseUrl": "https://svn.bearingpointcaribbean.com",
|
||||||
|
"url": "/svn/ONLINE_GD/trunk"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -0,0 +1,259 @@
|
|||||||
|
import * as semver from "semver";
|
||||||
|
import {
|
||||||
|
type SemVerIncrementType,
|
||||||
|
ExternalComponent,
|
||||||
|
DirType,
|
||||||
|
InternalComponent,
|
||||||
|
SVNList,
|
||||||
|
} from "./types.js";
|
||||||
|
import { svnList, svnPropGet, svnTagsBranchesList } from "./svn.js";
|
||||||
|
|
||||||
|
export class SolutionImplementation {
|
||||||
|
#url = "";
|
||||||
|
#baseUrl = "";
|
||||||
|
#fullUrl = "";
|
||||||
|
#bareComponentUrl = "";
|
||||||
|
#repository = "";
|
||||||
|
#repositoryUrl = "";
|
||||||
|
#componentFolder?: string;
|
||||||
|
#isSolutionComponent = false;
|
||||||
|
#isInternal = false;
|
||||||
|
#isImplementation = false;
|
||||||
|
#implementationUrl = "";
|
||||||
|
#dirType: DirType = DirType.trunk;
|
||||||
|
#version?: string;
|
||||||
|
#nextVersion?: string | null;
|
||||||
|
#externalsCollection: SolutionImplementation[] = [];
|
||||||
|
#internalsCollection: SolutionImplementation[] = [];
|
||||||
|
#parentSolutionImplementation?: SolutionImplementation;
|
||||||
|
#componentName = "";
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
baseUrl: string,
|
||||||
|
url: string,
|
||||||
|
parentSolutionImplementation?: SolutionImplementation
|
||||||
|
) {
|
||||||
|
this.parseUrl(baseUrl, url);
|
||||||
|
this.#parentSolutionImplementation = parentSolutionImplementation;
|
||||||
|
}
|
||||||
|
|
||||||
|
baseUrl(): string {
|
||||||
|
return this.#baseUrl;
|
||||||
|
}
|
||||||
|
componentFolder(): string | undefined {
|
||||||
|
return this.#componentFolder;
|
||||||
|
}
|
||||||
|
componentName(): string {
|
||||||
|
return this.#componentName;
|
||||||
|
}
|
||||||
|
componentNameDecoded(): string {
|
||||||
|
return decodeURIComponent(this.#componentName);
|
||||||
|
}
|
||||||
|
componentNameEncoded(): string {
|
||||||
|
return encodeURIComponent(this.#componentName);
|
||||||
|
}
|
||||||
|
fullUrl(): string {
|
||||||
|
return this.#fullUrl;
|
||||||
|
}
|
||||||
|
implementationUrl(): string {
|
||||||
|
return this.#implementationUrl;
|
||||||
|
}
|
||||||
|
isImplementation(): boolean {
|
||||||
|
return this.#isImplementation;
|
||||||
|
}
|
||||||
|
isInternal(): boolean {
|
||||||
|
return this.#isInternal;
|
||||||
|
}
|
||||||
|
isSolutionComponent(): boolean {
|
||||||
|
return this.#isSolutionComponent;
|
||||||
|
}
|
||||||
|
parentSolutionImplementation(): SolutionImplementation | undefined {
|
||||||
|
if (this.#parentSolutionImplementation) {
|
||||||
|
return this.#parentSolutionImplementation;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
repositoryName(): string {
|
||||||
|
return this.#repository;
|
||||||
|
}
|
||||||
|
repositoryUrl(): string {
|
||||||
|
return this.#repositoryUrl;
|
||||||
|
}
|
||||||
|
dirType(): DirType {
|
||||||
|
return this.#dirType;
|
||||||
|
}
|
||||||
|
dirTypeAndVersion(): string {
|
||||||
|
if (
|
||||||
|
(this.#dirType === DirType.tags || this.#dirType === DirType.branches) &&
|
||||||
|
this.#version
|
||||||
|
) {
|
||||||
|
return `${this.#dirType}/${this.#version}`;
|
||||||
|
}
|
||||||
|
return `${this.#dirType}`;
|
||||||
|
}
|
||||||
|
url(): string {
|
||||||
|
return this.#url;
|
||||||
|
}
|
||||||
|
version(): string | undefined {
|
||||||
|
return this.#version;
|
||||||
|
}
|
||||||
|
public async getNextVersion(
|
||||||
|
dirType: DirType,
|
||||||
|
semVerIncrementType: SemVerIncrementType
|
||||||
|
): Promise<string | undefined> {
|
||||||
|
await this.getLatestVersion(dirType)
|
||||||
|
.then((latestTagSolutionImplementation) => {
|
||||||
|
if (
|
||||||
|
semver.valid(semver.coerce(latestTagSolutionImplementation.version()))
|
||||||
|
) {
|
||||||
|
const sv: string | null | undefined =
|
||||||
|
latestTagSolutionImplementation.version();
|
||||||
|
if (semver.inc(sv as string, semVerIncrementType)) {
|
||||||
|
this.#nextVersion = semver.inc(sv as string, semVerIncrementType);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.#nextVersion = undefined;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
return this.#nextVersion as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getLatestVersion(
|
||||||
|
dirType: DirType
|
||||||
|
): Promise<SolutionImplementation> {
|
||||||
|
try {
|
||||||
|
const lastTagOrBranch = await svnTagsBranchesList(
|
||||||
|
dirType,
|
||||||
|
this.#baseUrl,
|
||||||
|
this.#bareComponentUrl,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
const lastTagUrl = `${this.#bareComponentUrl}${lastTagOrBranch}`;
|
||||||
|
return new SolutionImplementation(this.#baseUrl, lastTagUrl);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error retrieving last tag or branch:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getExternals(): Promise<SolutionImplementation[]> {
|
||||||
|
try {
|
||||||
|
if (this.#isImplementation) {
|
||||||
|
const propGetResult = await svnPropGet(
|
||||||
|
"svn:externals",
|
||||||
|
this.#baseUrl,
|
||||||
|
this.#url
|
||||||
|
);
|
||||||
|
|
||||||
|
propGetResult.forEach((externalComponent: ExternalComponent) => {
|
||||||
|
const thisExternal = new SolutionImplementation(
|
||||||
|
this.#baseUrl,
|
||||||
|
externalComponent.path,
|
||||||
|
this
|
||||||
|
);
|
||||||
|
this.#externalsCollection.push(thisExternal);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this.#externalsCollection;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error retrieving externals:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getInternals(): Promise<SolutionImplementation[]> {
|
||||||
|
try {
|
||||||
|
if (this.#isImplementation) {
|
||||||
|
const svnListResult: InternalComponent[] = await svnList(
|
||||||
|
this.#baseUrl,
|
||||||
|
this.#url
|
||||||
|
);
|
||||||
|
|
||||||
|
svnListResult.forEach((internalComponent: InternalComponent) => {
|
||||||
|
const thisInternal = new SolutionImplementation(
|
||||||
|
this.#baseUrl,
|
||||||
|
`${this.#url}/${internalComponent}`,
|
||||||
|
this
|
||||||
|
);
|
||||||
|
this.#internalsCollection.push(thisInternal);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this.#internalsCollection;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error retrieving externals:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private parseUrl(baseUrl: string, url: string): void {
|
||||||
|
this.#url = url;
|
||||||
|
this.#baseUrl = baseUrl;
|
||||||
|
this.#fullUrl = `${baseUrl}${url}`;
|
||||||
|
|
||||||
|
const regex = /^(https?:\/\/[^]+\/svn\/)/; //const regex = /^(https?:\/\/[^\/]+\/svn\/)/;
|
||||||
|
const match = regex.exec(this.#fullUrl);
|
||||||
|
|
||||||
|
if (!(match && match.length > 1)) {
|
||||||
|
throw new Error("Invalid URL");
|
||||||
|
}
|
||||||
|
|
||||||
|
const segments = this.#fullUrl.split("/");
|
||||||
|
const svnIndex = segments.indexOf("svn");
|
||||||
|
const trunkTagBranchIndex = segments.findIndex(
|
||||||
|
(segment, index) =>
|
||||||
|
index > svnIndex &&
|
||||||
|
(segment === "trunk" || segment === "tags" || segment === "branches")
|
||||||
|
);
|
||||||
|
this.#isSolutionComponent = trunkTagBranchIndex - svnIndex > 2;
|
||||||
|
|
||||||
|
if (svnIndex !== -1 && svnIndex + 1 < segments.length) {
|
||||||
|
this.#repository = segments[svnIndex + 1];
|
||||||
|
this.#repositoryUrl = `${this.#baseUrl}/${this.#repository}`;
|
||||||
|
|
||||||
|
if (trunkTagBranchIndex !== -1 && trunkTagBranchIndex - 1 > svnIndex) {
|
||||||
|
const nextSegment = segments[trunkTagBranchIndex - 1];
|
||||||
|
|
||||||
|
if (
|
||||||
|
nextSegment !== "trunk" &&
|
||||||
|
nextSegment !== "tags" &&
|
||||||
|
nextSegment !== "branches"
|
||||||
|
) {
|
||||||
|
if (this.#isSolutionComponent) {
|
||||||
|
this.#componentFolder = nextSegment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trunkTagBranchIndex !== -1 && trunkTagBranchIndex < segments.length) {
|
||||||
|
this.#dirType = segments[trunkTagBranchIndex] as DirType;
|
||||||
|
|
||||||
|
if (this.#dirType === "tags" || this.#dirType === "branches") {
|
||||||
|
if (trunkTagBranchIndex + 1 < segments.length) {
|
||||||
|
this.#version = segments[trunkTagBranchIndex + 1];
|
||||||
|
if (trunkTagBranchIndex + 2 < segments.length) {
|
||||||
|
this.#componentName = segments[trunkTagBranchIndex + 2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (trunkTagBranchIndex + 1 < segments.length) {
|
||||||
|
this.#componentName = segments[trunkTagBranchIndex + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.#isImplementation =
|
||||||
|
this.#componentFolder === undefined && this.#componentName === "";
|
||||||
|
this.#implementationUrl = segments
|
||||||
|
.slice(0, trunkTagBranchIndex + (this.#version === undefined ? 1 : 2))
|
||||||
|
.join("/");
|
||||||
|
this.#bareComponentUrl = segments
|
||||||
|
.slice(0, trunkTagBranchIndex)
|
||||||
|
.join("/")
|
||||||
|
.replaceAll(baseUrl, "");
|
||||||
|
} else {
|
||||||
|
throw new Error("Invalid URL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
import * as fs from "fs";
|
||||||
|
import { type TypeSolutionImplementation, DirType } from "./types";
|
||||||
|
import { SolutionImplementation } from "./SolutionImplementation.js";
|
||||||
|
|
||||||
|
export class SolutionImplementationReader {
|
||||||
|
#solutionImplementationsInFile: TypeSolutionImplementation[];
|
||||||
|
#_solutionImplementationCollection: SolutionImplementation[] = [];
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
const json = fs.readFileSync("solutions.json", "utf-8");
|
||||||
|
this.#solutionImplementationsInFile = JSON.parse(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get solutionImplementationCollection(): Promise<SolutionImplementation[]> {
|
||||||
|
// return this._solutionImplementationCollection;
|
||||||
|
// }
|
||||||
|
public async load(): Promise<SolutionImplementation[]> {
|
||||||
|
await Promise.all(
|
||||||
|
this.#solutionImplementationsInFile.map(
|
||||||
|
async (solutionImplementation: TypeSolutionImplementation) => {
|
||||||
|
const thisSolutionImplementation = new SolutionImplementation(
|
||||||
|
solutionImplementation.baseUrl,
|
||||||
|
solutionImplementation.url
|
||||||
|
);
|
||||||
|
this.#_solutionImplementationCollection.push(
|
||||||
|
thisSolutionImplementation
|
||||||
|
);
|
||||||
|
await thisSolutionImplementation.getInternals();
|
||||||
|
await thisSolutionImplementation.getExternals();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return this.#_solutionImplementationCollection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public readSolutionUrl(): void {
|
||||||
|
this.#solutionImplementationsInFile.forEach(
|
||||||
|
(solutionImplementation: TypeSolutionImplementation) => {
|
||||||
|
const s = new SolutionImplementation(
|
||||||
|
solutionImplementation.baseUrl,
|
||||||
|
solutionImplementation.url
|
||||||
|
);
|
||||||
|
console.log(JSON.stringify(s, null, 2));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,27 +1,94 @@
|
|||||||
// import { spawn } from "child_process ";
|
import { Dir } from "fs";
|
||||||
|
import { SolutionImplementation } from "./SolutionImplementation.js";
|
||||||
// function spawnSample(command: string, args: string[]) {
|
import { DirType } from "./types.js";
|
||||||
// const execProcess = spawn(command, args);
|
import { SolutionImplementationReader } from "./SolutionImplementationReader.js";
|
||||||
// console.log('spawn');
|
// import { SolutionImplementationReader } from "./SolutionImplementationReader.js";
|
||||||
// console.log(execProcess.spawnfile);
|
// import { svnPropGet, svnList, svnGetLatestTag, } from "./svn.js";
|
||||||
// execProcess.on('spawn', () => {
|
|
||||||
// console.log('spawn on spawn');
|
const baseUrl = "https://svn.bearingpointcaribbean.com";
|
||||||
// });
|
const url = "/svn/MBS_ANGUILLA/trunk";
|
||||||
// execProcess.stdout.on('data', (data) => {
|
|
||||||
// console.log(`spawn stdout: ${data}`);
|
// async function start() {
|
||||||
// });
|
// svnList(baseUrl, url)
|
||||||
// execProcess.stderr.on('data', (data) => {
|
// .then((listResult) => {
|
||||||
// console.log(`spawn on error ${data}`);
|
// console.log("Success:", listResult);
|
||||||
// });
|
// return svnPropGet("svn:externals", baseUrl, url);
|
||||||
// execProcess.on('exit', (code, signal) => {
|
// })
|
||||||
// console.log(`spawn on exit code: ${code} signal: ${signal}`);
|
// .then((propGetResult) => {
|
||||||
// });
|
// const payload: string = propGetResult.properties.target[0].property[0]._;
|
||||||
// execProcess.on('close', (code: number, args: any[])=> {
|
// console.log("Second result:", JSON.stringify(payload, null, 2));
|
||||||
// console.log(`spawn on close code: ${code} args: ${args}`);
|
// })
|
||||||
// });
|
// .catch((error) => {
|
||||||
|
// console.error("Error:", error);
|
||||||
|
// });
|
||||||
// }
|
// }
|
||||||
// function start() {
|
|
||||||
// spawnSample('powershell',['node', '-v']);
|
// async function start2() {
|
||||||
|
// const listResult = await svnList(baseUrl, url);
|
||||||
|
// console.log("listResult", listResult);
|
||||||
|
|
||||||
|
// const propGetResult = await svnPropGet("svn:externals", baseUrl, url);
|
||||||
|
// console.log("propGetResult", JSON.stringify(propGetResult, null, 2));
|
||||||
|
|
||||||
|
// const svnGetLatestTagResult = await svnGetLatestTag(baseUrl, url);
|
||||||
|
// console.log(
|
||||||
|
// "svnGetLatestTagResult",
|
||||||
|
// JSON.stringify(svnGetLatestTagResult, null, 2)
|
||||||
|
// );
|
||||||
// }
|
// }
|
||||||
// start();
|
|
||||||
console.log("Hello world!");
|
// async function start3() {
|
||||||
|
// const solutionImplementationReader = new SolutionImplementationReader();
|
||||||
|
// solutionImplementationReader.solutionImplementations.forEach(
|
||||||
|
// (solutionImplementation: TypeSolutionImplementation) => {
|
||||||
|
// console.log(solutionImplementation.customer);
|
||||||
|
// }
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
// async function start4() {
|
||||||
|
// const currentSolution = new SolutionImplementation(baseUrl, url);
|
||||||
|
// await currentSolution.getLatestVersion(DirType.tags);
|
||||||
|
// const externalsCollection = await currentSolution.getExternals();
|
||||||
|
// if (externalsCollection) {
|
||||||
|
// await Promise.all(
|
||||||
|
// externalsCollection.map(async (externalComponent) => {
|
||||||
|
// // const output = `${externalComponent.componentName()} => ${externalComponent.typeAndVersion()}`;
|
||||||
|
// // console.log("Latest external:", output);
|
||||||
|
// // console.log(
|
||||||
|
// // "Externalcomponent.parent:",
|
||||||
|
// // externalComponent.getParentSolutionImplementation()
|
||||||
|
// // );
|
||||||
|
// console.log(
|
||||||
|
// `${externalComponent.componentName()}: this verison: ${externalComponent.version()}, next minor: ${await externalComponent.getNextVersion(
|
||||||
|
// DirType.tags,
|
||||||
|
// 'minor'
|
||||||
|
// )}, next major: ${await externalComponent.getNextVersion(
|
||||||
|
// DirType.tags,
|
||||||
|
// 'major'
|
||||||
|
// )}`
|
||||||
|
// );
|
||||||
|
// })
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // externalComponents.forEach((externalComponent: ExternalComponent) => {
|
||||||
|
// // const currentExternal = new SolutionImplementation(
|
||||||
|
// // baseUrl,
|
||||||
|
// // externalComponent.path
|
||||||
|
// // );
|
||||||
|
// // console.log(currentExternal);
|
||||||
|
// // });
|
||||||
|
// // console.log(await currentSolution.getExternals());
|
||||||
|
// }
|
||||||
|
|
||||||
|
async function start5() {
|
||||||
|
const reader = new SolutionImplementationReader();
|
||||||
|
const output = await reader.load();
|
||||||
|
console.log(output);
|
||||||
|
}
|
||||||
|
//start();
|
||||||
|
//start2();
|
||||||
|
//start3();
|
||||||
|
// start4();
|
||||||
|
start5();
|
||||||
|
|||||||
@ -0,0 +1,76 @@
|
|||||||
|
import { ExternalComponent } from "./types";
|
||||||
|
|
||||||
|
function tidyArrayContent(entry: string): { path: string; name: string } {
|
||||||
|
let name = "";
|
||||||
|
let item;
|
||||||
|
if (entry.includes("'")) {
|
||||||
|
item = entry.split(" '");
|
||||||
|
} else {
|
||||||
|
item = entry.split(" ");
|
||||||
|
}
|
||||||
|
const path = item[0];
|
||||||
|
if (item.length === 2) {
|
||||||
|
name = item[1].replace(/[']/g, "");
|
||||||
|
} else if (item.length === 1) {
|
||||||
|
// eslint-disable-next-line prefer-destructuring
|
||||||
|
name = item[0];
|
||||||
|
}
|
||||||
|
return { path, name };
|
||||||
|
}
|
||||||
|
|
||||||
|
export function parseExternals(
|
||||||
|
rawExternalsString: string
|
||||||
|
): Promise<[ExternalComponent]> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
try {
|
||||||
|
const splittedExternals: string[] = rawExternalsString.split("\r\n");
|
||||||
|
const enrichedExternals = splittedExternals.map(
|
||||||
|
(svnExternal: string) => ({
|
||||||
|
original: svnExternal,
|
||||||
|
key: tidyArrayContent(svnExternal).name,
|
||||||
|
path: decodeURI(tidyArrayContent(svnExternal).path),
|
||||||
|
version: svnExternal.split("/")[svnExternal.split("/").length - 2],
|
||||||
|
})
|
||||||
|
);
|
||||||
|
const cleansedExternals = enrichedExternals.filter(
|
||||||
|
(item) => item.original !== ""
|
||||||
|
);
|
||||||
|
resolve(cleansedExternals as [ExternalComponent]);
|
||||||
|
return cleansedExternals as [ExternalComponent];
|
||||||
|
} catch (error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// splittedExternals.forEach((entry) => {
|
||||||
|
// const tidied = anglo.tidyArrayContent(entry);
|
||||||
|
// // for componentBaseFolder. If domain-specific, keep first 3, else keep first 4 parts
|
||||||
|
// const partsToKeep = (tidied.name.toLowerCase().startsWith('dsc')) ? 4 : 5;
|
||||||
|
// if (tidied.name !== '') {
|
||||||
|
// const component = getComponentName(decodeURI(tidied.path.split('/').slice(0, partsToKeep).join('/')).replace('//', '/'));
|
||||||
|
|
||||||
|
// sol.tidiedexternals.push({
|
||||||
|
// key: tidied.name,
|
||||||
|
// path: decodeURI(tidied.path),
|
||||||
|
// componentBaseFolder: decodeURI(tidied.path.split('/').slice(0, partsToKeep).join('/')).replace('//', '/'),
|
||||||
|
// componentRoot: state.oSVNInfo.baseURL + decodeURI(tidied.path.split('/').slice(0, partsToKeep).join('/')).replace('//', '/').replace(component.bareComponentName, '').replace(/^\//, ''),
|
||||||
|
// componentName: component.fullComponentName,
|
||||||
|
// bareComponentName: component.bareComponentName,
|
||||||
|
// relativeUrl: tidied.path.replaceAll(`${decodeURI(tidied.path.split('/').slice(0, partsToKeep).join('/')).replace('//', '/')}/`, '').split('/').slice(0, -1).join('/')
|
||||||
|
// .split('/')
|
||||||
|
// .splice(-2)
|
||||||
|
// .join('/'),
|
||||||
|
// isExternal: true,
|
||||||
|
// isCoreComponent: !tidied.name.toLowerCase().includes('interface def'),
|
||||||
|
// isInterfaceDefinition: tidied.name.toLowerCase().includes('interface def'),
|
||||||
|
// isSpecific: tidied.name.toLowerCase().includes('specific'),
|
||||||
|
// isDomainSpecific: tidied.name.toLowerCase().startsWith('dsc'),
|
||||||
|
// isSolutionComponent: tidied.name.toLowerCase().startsWith('sc'),
|
||||||
|
// isTagged: decodeURI(tidied.path).toLocaleLowerCase().includes('/tags/'),
|
||||||
|
// isBranched: decodeURI(tidied.path).toLocaleLowerCase().includes('/branches/'),
|
||||||
|
// isTrunk: decodeURI(tidied.path).toLocaleLowerCase().includes('/trunk/'),
|
||||||
|
// isFrontend: tidied.name === 'FRONTEND',
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// });
|
||||||
@ -0,0 +1,175 @@
|
|||||||
|
import { exec } from "child_process";
|
||||||
|
import { parseString } from "xml2js";
|
||||||
|
import {
|
||||||
|
SVNList,
|
||||||
|
ExternalComponent,
|
||||||
|
SVNProperties,
|
||||||
|
DirType,
|
||||||
|
InternalComponent,
|
||||||
|
} from "./types.js";
|
||||||
|
import { parseExternals } from "./parser.js";
|
||||||
|
|
||||||
|
function execShellCommand(cmd: string) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
exec(cmd, { maxBuffer: 1024 * 500 }, (error, stdout, stderr) => {
|
||||||
|
if (error) {
|
||||||
|
console.warn(error);
|
||||||
|
}
|
||||||
|
resolve(stdout || stderr);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
async function svnCmd(
|
||||||
|
cmd: string,
|
||||||
|
baseUrl: string,
|
||||||
|
url: string,
|
||||||
|
returnRaw = false
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
): Promise<any> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const execCommand = `svn ${cmd} "${baseUrl}${url}" --xml`;
|
||||||
|
execShellCommand(execCommand)
|
||||||
|
.then((svnCmdResponse) => {
|
||||||
|
parseString(
|
||||||
|
svnCmdResponse as SVNList | SVNProperties,
|
||||||
|
(err, result) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (returnRaw) {
|
||||||
|
resolve(result);
|
||||||
|
} else {
|
||||||
|
const json = JSON.stringify(result);
|
||||||
|
const svnCmdResponseJson = JSON.parse(json);
|
||||||
|
resolve(svnCmdResponseJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function svnList(
|
||||||
|
baseUrl: string,
|
||||||
|
url: string
|
||||||
|
): Promise<InternalComponent[]> {
|
||||||
|
const svnListResponse: InternalComponent[] = await svnCmd(
|
||||||
|
"list",
|
||||||
|
baseUrl,
|
||||||
|
url,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
type arrayOfSVNList = {
|
||||||
|
name: string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
let internals = svnListResponse.lists.list[0].entry.map(
|
||||||
|
({ name }) => `${name[0]}`
|
||||||
|
);
|
||||||
|
|
||||||
|
// const internals = listResponse.lists.list[0].entry;
|
||||||
|
return internals;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function svnPropGet(
|
||||||
|
property: string,
|
||||||
|
baseUrl: string,
|
||||||
|
url: string
|
||||||
|
): Promise<[ExternalComponent]> {
|
||||||
|
const propGetResponse = await svnCmd(
|
||||||
|
`propget ${property}`,
|
||||||
|
baseUrl,
|
||||||
|
url,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
const rawExternals: string =
|
||||||
|
propGetResponse.properties.target[0].property[0]._;
|
||||||
|
return parseExternals(rawExternals);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function svnTagsBranchesList(
|
||||||
|
dirType: DirType,
|
||||||
|
baseUrl: string,
|
||||||
|
url: string, // expects url that has tags and branches
|
||||||
|
latestOnly = false
|
||||||
|
): Promise<[string]> {
|
||||||
|
url = url.replace(/trunk$/, "");
|
||||||
|
url = url.replace(/tags$/, "");
|
||||||
|
url = url.replace(/branches$/, "");
|
||||||
|
url = dirType === "tags" ? url.concat("/tags") : url.concat("/branches");
|
||||||
|
const svnListResponse: SVNList = await svnCmd("list", baseUrl, url);
|
||||||
|
const regex = /^[0-9.]+$/; // Regular expression for semantic version format
|
||||||
|
type arrayOfSVNList = {
|
||||||
|
name: string[];
|
||||||
|
};
|
||||||
|
const filteredTags = svnListResponse.lists.list[0].entry.filter(
|
||||||
|
(entry: arrayOfSVNList) => {
|
||||||
|
return regex.test(entry.name[0]);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
let flattenedFilteredTags: string[] = filteredTags.map(
|
||||||
|
({ name }) => `${name[0]}`
|
||||||
|
);
|
||||||
|
|
||||||
|
flattenedFilteredTags.sort((a, b) => {
|
||||||
|
const partsA = a.split(".").map(Number);
|
||||||
|
const partsB = b.split(".").map(Number);
|
||||||
|
|
||||||
|
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
||||||
|
const partA = partsA[i] || 0;
|
||||||
|
const partB = partsB[i] || 0;
|
||||||
|
|
||||||
|
if (partA > partB) {
|
||||||
|
return -1;
|
||||||
|
} else if (partA < partB) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
flattenedFilteredTags.sort((a, b) => b.localeCompare(a));
|
||||||
|
flattenedFilteredTags = flattenedFilteredTags.map(
|
||||||
|
(element) => (element = `/${dirType}/${element}`)
|
||||||
|
);
|
||||||
|
if (latestOnly) {
|
||||||
|
return [flattenedFilteredTags[0]];
|
||||||
|
} else {
|
||||||
|
return flattenedFilteredTags as [string];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function svnGetLatestTag(
|
||||||
|
baseUrl: string,
|
||||||
|
url: string
|
||||||
|
): Promise<[string]> {
|
||||||
|
return svnTagsBranchesList(DirType.tags, baseUrl, url, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function svnGetLatestBranch(
|
||||||
|
baseUrl: string,
|
||||||
|
url: string
|
||||||
|
): Promise<[string]> {
|
||||||
|
return svnTagsBranchesList(DirType.branches, baseUrl, url, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function svnGetTagList(
|
||||||
|
baseUrl: string,
|
||||||
|
url: string
|
||||||
|
): Promise<[string]> {
|
||||||
|
return svnTagsBranchesList(DirType.tags, baseUrl, url, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function svnGetBranchesList(
|
||||||
|
baseUrl: string,
|
||||||
|
url: string
|
||||||
|
): Promise<[string]> {
|
||||||
|
return svnTagsBranchesList(DirType.branches, baseUrl, url, false);
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
export type SVNProperties = {
|
||||||
|
properties: {
|
||||||
|
target: {
|
||||||
|
$: {
|
||||||
|
path: string;
|
||||||
|
};
|
||||||
|
property?: {
|
||||||
|
_: string;
|
||||||
|
$: {
|
||||||
|
name: string;
|
||||||
|
};
|
||||||
|
}[];
|
||||||
|
}[];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export type SVNList = {
|
||||||
|
lists: {
|
||||||
|
list: {
|
||||||
|
$: {
|
||||||
|
path: string;
|
||||||
|
};
|
||||||
|
entry: {
|
||||||
|
$: {
|
||||||
|
kind: string;
|
||||||
|
};
|
||||||
|
name: string[];
|
||||||
|
commit: {
|
||||||
|
$: {
|
||||||
|
revision: string;
|
||||||
|
};
|
||||||
|
author: string[];
|
||||||
|
date: string[];
|
||||||
|
}[];
|
||||||
|
}[];
|
||||||
|
}[];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ExternalComponent = {
|
||||||
|
original: string;
|
||||||
|
key: string;
|
||||||
|
path: string;
|
||||||
|
version: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type InternalComponent = {
|
||||||
|
original: string;
|
||||||
|
key: string;
|
||||||
|
path: string;
|
||||||
|
version: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type SemVerIncrementType = "minor" | "major" | "patch";
|
||||||
|
export enum DirType {
|
||||||
|
tags = "tags",
|
||||||
|
branches = "branches",
|
||||||
|
trunk = "trunk",
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TypeSolutionImplementation = {
|
||||||
|
name: string;
|
||||||
|
functionalName: string;
|
||||||
|
customer: string;
|
||||||
|
customerCode: string;
|
||||||
|
path: string;
|
||||||
|
class: string;
|
||||||
|
baseUrl: string;
|
||||||
|
url: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ApiExternalsResponse = {
|
||||||
|
target: {
|
||||||
|
$: {
|
||||||
|
path: string;
|
||||||
|
};
|
||||||
|
property: {
|
||||||
|
_: string;
|
||||||
|
$: {
|
||||||
|
name: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@ -1,5 +1,5 @@
|
|||||||
// tsconfig.eslint.json
|
// tsconfig.eslint.json
|
||||||
{
|
{
|
||||||
"extends": "./tsconfig.json",
|
"extends": "./tsconfig.json",
|
||||||
"include": ["./**/*.ts", "./**/*.js", "./.*.js"]
|
"include": ["./**/*.ts", "./**/*.js", "./.*.js"]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,109 +1,109 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||||
|
|
||||||
/* Projects */
|
/* Projects */
|
||||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||||
|
|
||||||
/* Language and Environment */
|
/* Language and Environment */
|
||||||
"target": "ES2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
|
"target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
|
||||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||||
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
||||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||||
|
|
||||||
/* Modules */
|
/* Modules */
|
||||||
"module": "ESNext" /* Specify what module code is generated. */,
|
"module": "ESNext" /* Specify what module code is generated. */,
|
||||||
"rootDir": "src" /* Specify the root folder within your source files. */,
|
"rootDir": "src" /* Specify the root folder within your source files. */,
|
||||||
"moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
|
"moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
|
||||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||||
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||||
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
||||||
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
||||||
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
||||||
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
||||||
// "resolveJsonModule": true, /* Enable importing .json files. */
|
// "resolveJsonModule": true, /* Enable importing .json files. */
|
||||||
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
||||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||||
|
|
||||||
/* JavaScript Support */
|
/* JavaScript Support */
|
||||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||||
|
|
||||||
/* Emit */
|
/* Emit */
|
||||||
"declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */,
|
"declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */,
|
||||||
"declarationMap": true /* Create sourcemaps for d.ts files. */,
|
"declarationMap": true /* Create sourcemaps for d.ts files. */,
|
||||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||||
"sourceMap": true /* Create source map files for emitted JavaScript files. */,
|
"sourceMap": true /* Create source map files for emitted JavaScript files. */,
|
||||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||||
"outDir": "dist" /* Specify an output folder for all emitted files. */,
|
"outDir": "dist" /* Specify an output folder for all emitted files. */,
|
||||||
// "removeComments": true, /* Disable emitting comments. */
|
// "removeComments": true, /* Disable emitting comments. */
|
||||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
|
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
|
||||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||||
|
|
||||||
/* Interop Constraints */
|
/* Interop Constraints */
|
||||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||||
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
||||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||||
"esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
|
"esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
|
||||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||||
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
|
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
|
||||||
|
|
||||||
/* Type Checking */
|
/* Type Checking */
|
||||||
"strict": true /* Enable all strict type-checking options. */,
|
"strict": true /* Enable all strict type-checking options. */,
|
||||||
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||||
"strictNullChecks": false /* When type checking, take into account 'null' and 'undefined'. */,
|
// "strictNullChecks": false /* When type checking, take into account 'null' and 'undefined'. */,
|
||||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
"strictFunctionTypes": false /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */,
|
||||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||||
|
|
||||||
/* Completeness */
|
/* Completeness */
|
||||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
declare module "node-svn-ultimate";
|
|
||||||
Loading…
Reference in new issue