merge scripts, tasks and config folder and convert code to typescript
This commit is contained in:
@@ -119,3 +119,5 @@ merged with the old ones, and a new history entry is created for that item.
|
|||||||
** move scripts paths.js and tasks in one folder
|
** move scripts paths.js and tasks in one folder
|
||||||
* Rename package to make more clear that this is a tech radar builder?
|
* Rename package to make more clear that this is a tech radar builder?
|
||||||
* provide only one bin script with subcommands like react-scripts?
|
* provide only one bin script with subcommands like react-scripts?
|
||||||
|
* add tests for scripts
|
||||||
|
* add tests for components
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
const path = require("path");
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const radarJson = "rd.json";
|
|
||||||
const appDirectory = fs.realpathSync(process.cwd());
|
|
||||||
const resolveApp = (relativePath = "") =>
|
|
||||||
path.resolve(appDirectory, relativePath);
|
|
||||||
const templateDirectory = fs.realpathSync(__dirname);
|
|
||||||
const resolveTemplate = (relativePath = "") =>
|
|
||||||
path.resolve(templateDirectory, "..", relativePath);
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
template: resolveTemplate(),
|
|
||||||
templateBuild: resolveTemplate("build"),
|
|
||||||
appRdJson: resolveApp(`build/${radarJson}`),
|
|
||||||
appBuild: resolveApp("build"),
|
|
||||||
appYarnLock: resolveApp("yarn.lock"),
|
|
||||||
};
|
|
||||||
72
dist_scripts/scripts/buildRadar.js
Normal file
72
dist_scripts/scripts/buildRadar.js
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var fs = __importStar(require("fs-extra"));
|
||||||
|
var child_process_1 = require("child_process");
|
||||||
|
var paths = __importStar(require("./paths"));
|
||||||
|
// Do this as the first thing so that any code reading it knows the right env.
|
||||||
|
process.env.BABEL_ENV = "production";
|
||||||
|
process.env.NODE_ENV = "production";
|
||||||
|
// Makes the script crash on unhandled rejections instead of silently
|
||||||
|
// ignoring them. In the future, promise rejections that are not handled will
|
||||||
|
// terminate the Node.js process with a non-zero exit code.
|
||||||
|
process.on("unhandledRejection", function (err) {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
var runCommand = function (command) {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
var executedCommand = child_process_1.spawn(command, {
|
||||||
|
stdio: "inherit",
|
||||||
|
shell: true,
|
||||||
|
});
|
||||||
|
executedCommand.on("error", function (error) {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
executedCommand.on("exit", function (code) {
|
||||||
|
if (code === 0) {
|
||||||
|
resolve(code);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).catch(function (error) {
|
||||||
|
console.error(error);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var buildTemplate = function () {
|
||||||
|
var packageManager = fs.existsSync(paths.appYarnLock) ? "yarn" : "npx";
|
||||||
|
fs.emptyDirSync(paths.templateBuild);
|
||||||
|
process.chdir(paths.template);
|
||||||
|
return runCommand(packageManager + " build");
|
||||||
|
};
|
||||||
|
if (fs.existsSync(paths.appRdJson)) {
|
||||||
|
buildTemplate().then(function () {
|
||||||
|
fs.copySync(paths.templateBuild, paths.appBuild);
|
||||||
|
console.log(paths.appBuild + " was created and can be deployed.");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.error(paths.appRdJson + " does not exist. You have to generate it first.");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
@@ -37,9 +37,18 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
var radar_1 = require("./radar");
|
|
||||||
var fs_1 = require("fs");
|
var fs_1 = require("fs");
|
||||||
|
var radar_1 = require("./generateJson/radar");
|
||||||
var config_1 = require("../src/config");
|
var config_1 = require("../src/config");
|
||||||
|
// Do this as the first thing so that any code reading it knows the right env.
|
||||||
|
process.env.BABEL_ENV = "production";
|
||||||
|
process.env.NODE_ENV = "production";
|
||||||
|
// Makes the script crash on unhandled rejections instead of silently
|
||||||
|
// ignoring them. In the future, promise rejections that are not handled will
|
||||||
|
// terminate the Node.js process with a non-zero exit code.
|
||||||
|
process.on("unhandledRejection", function (err) {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
||||||
var radar, e_1;
|
var radar, e_1;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
@@ -62,7 +71,7 @@ var config_1 = require("../src/config");
|
|||||||
radar.items.forEach(function (item) {
|
radar.items.forEach(function (item) {
|
||||||
fs_1.copyFileSync("build/index.html", "build/" + item.quadrant + "/" + item.name + ".html");
|
fs_1.copyFileSync("build/index.html", "build/" + item.quadrant + "/" + item.name + ".html");
|
||||||
});
|
});
|
||||||
console.log("created static");
|
console.log("created static files.");
|
||||||
return [3 /*break*/, 3];
|
return [3 /*break*/, 3];
|
||||||
case 2:
|
case 2:
|
||||||
e_1 = _a.sent();
|
e_1 = _a.sent();
|
||||||
@@ -1,5 +1,24 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
"use strict";
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
@@ -37,10 +56,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.radarJsonGenerator = void 0;
|
var paths = __importStar(require("./paths"));
|
||||||
var radar_1 = require("./radar");
|
var radar_1 = require("./generateJson/radar");
|
||||||
var file_1 = require("./file");
|
var file_1 = require("./generateJson/file");
|
||||||
var radarJsonGenerator = function () { return __awaiter(void 0, void 0, void 0, function () {
|
// Do this as the first thing so that any code reading it knows the right env.
|
||||||
|
process.env.BABEL_ENV = "production";
|
||||||
|
process.env.NODE_ENV = "production";
|
||||||
|
// Makes the script crash on unhandled rejections instead of silently
|
||||||
|
// ignoring them. In the future, promise rejections that are not handled will
|
||||||
|
// terminate the Node.js process with a non-zero exit code.
|
||||||
|
process.on("unhandledRejection", function (err) {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
var generateJson = function () { return __awaiter(void 0, void 0, void 0, function () {
|
||||||
var radar, e_1;
|
var radar, e_1;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
@@ -49,7 +77,7 @@ var radarJsonGenerator = function () { return __awaiter(void 0, void 0, void 0,
|
|||||||
return [4 /*yield*/, radar_1.createRadar()];
|
return [4 /*yield*/, radar_1.createRadar()];
|
||||||
case 1:
|
case 1:
|
||||||
radar = _a.sent();
|
radar = _a.sent();
|
||||||
return [4 /*yield*/, file_1.save(JSON.stringify(radar), "rd.json")];
|
return [4 /*yield*/, file_1.save(JSON.stringify(radar), paths.radarJson)];
|
||||||
case 2:
|
case 2:
|
||||||
_a.sent();
|
_a.sent();
|
||||||
return [3 /*break*/, 4];
|
return [3 /*break*/, 4];
|
||||||
@@ -61,4 +89,13 @@ var radarJsonGenerator = function () { return __awaiter(void 0, void 0, void 0,
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}); };
|
}); };
|
||||||
exports.radarJsonGenerator = radarJsonGenerator;
|
generateJson()
|
||||||
|
.then(function () {
|
||||||
|
console.log(paths.appRdJson + " created.");
|
||||||
|
})
|
||||||
|
.catch(function (err) {
|
||||||
|
if (err && err.message) {
|
||||||
|
console.error(err.message);
|
||||||
|
}
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
@@ -1,24 +1,39 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
||||||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
||||||
to[j] = from[i];
|
to[j] = from[i];
|
||||||
return to;
|
return to;
|
||||||
};
|
};
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.save = exports.getAllMarkdownFiles = exports.builderPath = exports.buildPath = exports.publicPath = exports.jsPath = exports.faviconPath = exports.assetsPath = exports.stylesPath = exports.radarPath = exports.relativePath = void 0;
|
exports.save = exports.getAllMarkdownFiles = exports.buildPath = exports.jsPath = exports.faviconPath = exports.stylesPath = exports.radarPath = exports.relativePath = void 0;
|
||||||
var fs_extra_1 = require("fs-extra");
|
var fs_extra_1 = require("fs-extra");
|
||||||
var path_1 = __importDefault(require("path"));
|
var path = __importStar(require("path"));
|
||||||
var walk_1 = require("walk");
|
var walk_1 = require("walk");
|
||||||
var relativePath = function () {
|
var relativePath = function () {
|
||||||
var relativePath = [];
|
var relativePath = [];
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||||||
relativePath[_i] = arguments[_i];
|
relativePath[_i] = arguments[_i];
|
||||||
}
|
}
|
||||||
// path.resolve(__dirname, '..', ...relativePath)
|
return path.resolve.apply(path, relativePath);
|
||||||
return path_1.default.resolve.apply(path_1.default, relativePath);
|
|
||||||
};
|
};
|
||||||
exports.relativePath = relativePath;
|
exports.relativePath = relativePath;
|
||||||
var radarPath = function () {
|
var radarPath = function () {
|
||||||
@@ -37,14 +52,6 @@ var stylesPath = function () {
|
|||||||
return exports.relativePath.apply(void 0, __spreadArray(["styles"], pathInSrc));
|
return exports.relativePath.apply(void 0, __spreadArray(["styles"], pathInSrc));
|
||||||
};
|
};
|
||||||
exports.stylesPath = stylesPath;
|
exports.stylesPath = stylesPath;
|
||||||
var assetsPath = function () {
|
|
||||||
var pathInSrc = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInSrc[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return exports.relativePath.apply(void 0, __spreadArray(["assets"], pathInSrc));
|
|
||||||
};
|
|
||||||
exports.assetsPath = assetsPath;
|
|
||||||
var faviconPath = function () {
|
var faviconPath = function () {
|
||||||
var pathInSrc = [];
|
var pathInSrc = [];
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||||||
@@ -61,14 +68,6 @@ var jsPath = function () {
|
|||||||
return exports.relativePath.apply(void 0, __spreadArray(["js"], pathInSrc));
|
return exports.relativePath.apply(void 0, __spreadArray(["js"], pathInSrc));
|
||||||
};
|
};
|
||||||
exports.jsPath = jsPath;
|
exports.jsPath = jsPath;
|
||||||
var publicPath = function () {
|
|
||||||
var pathInDist = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInDist[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return exports.relativePath.apply(void 0, __spreadArray(["public"], pathInDist));
|
|
||||||
};
|
|
||||||
exports.publicPath = publicPath;
|
|
||||||
var buildPath = function () {
|
var buildPath = function () {
|
||||||
var pathInDist = [];
|
var pathInDist = [];
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||||||
@@ -77,14 +76,6 @@ var buildPath = function () {
|
|||||||
return exports.relativePath.apply(void 0, __spreadArray(["build"], pathInDist));
|
return exports.relativePath.apply(void 0, __spreadArray(["build"], pathInDist));
|
||||||
};
|
};
|
||||||
exports.buildPath = buildPath;
|
exports.buildPath = buildPath;
|
||||||
var builderPath = function () {
|
|
||||||
var pathInDist = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInDist[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return exports.relativePath.apply(void 0, __spreadArray(["node_modules", "aoe_technology_radar", "src"], pathInDist));
|
|
||||||
};
|
|
||||||
exports.builderPath = builderPath;
|
|
||||||
var getAllMarkdownFiles = function (folder) {
|
var getAllMarkdownFiles = function (folder) {
|
||||||
return getAllFiles(folder, isMarkdownFile);
|
return getAllFiles(folder, isMarkdownFile);
|
||||||
};
|
};
|
||||||
@@ -95,7 +86,7 @@ var getAllFiles = function (folder, predicate) {
|
|||||||
var files = [];
|
var files = [];
|
||||||
walker.on("file", function (root, fileStat, next) {
|
walker.on("file", function (root, fileStat, next) {
|
||||||
if (predicate(fileStat.name)) {
|
if (predicate(fileStat.name)) {
|
||||||
files.push(path_1.default.resolve(root, fileStat.name));
|
files.push(path.resolve(root, fileStat.name));
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@@ -10,6 +10,25 @@ var __assign = (this && this.__assign) || function () {
|
|||||||
};
|
};
|
||||||
return __assign.apply(this, arguments);
|
return __assign.apply(this, arguments);
|
||||||
};
|
};
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
@@ -57,12 +76,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.createRadar = void 0;
|
exports.createRadar = void 0;
|
||||||
var fs_extra_1 = require("fs-extra");
|
var fs_extra_1 = require("fs-extra");
|
||||||
var path_1 = __importDefault(require("path"));
|
var path = __importStar(require("path"));
|
||||||
var front_matter_1 = __importDefault(require("front-matter"));
|
var front_matter_1 = __importDefault(require("front-matter"));
|
||||||
|
// @ts-ignore esModuleInterop is activated in tsconfig.scripts.json, but IDE typescript uses default typescript config
|
||||||
var marked_1 = __importDefault(require("marked"));
|
var marked_1 = __importDefault(require("marked"));
|
||||||
var highlight_js_1 = __importDefault(require("highlight.js"));
|
var highlight_js_1 = __importDefault(require("highlight.js"));
|
||||||
var config_1 = require("../src/config");
|
|
||||||
var file_1 = require("./file");
|
var file_1 = require("./file");
|
||||||
|
var config_1 = require("../../src/config");
|
||||||
marked_1.default.setOptions({
|
marked_1.default.setOptions({
|
||||||
highlight: function (code) { return highlight_js_1.default.highlightAuto(code).value; },
|
highlight: function (code) { return highlight_js_1.default.highlightAuto(code).value; },
|
||||||
});
|
});
|
||||||
@@ -99,7 +119,7 @@ var checkAttributes = function (fileName, attributes) {
|
|||||||
var createRevisionsFromFiles = function (fileNames) {
|
var createRevisionsFromFiles = function (fileNames) {
|
||||||
return Promise.all(fileNames.map(function (fileName) {
|
return Promise.all(fileNames.map(function (fileName) {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
fs_extra_1.readFile(fileName, 'utf8', function (err, data) {
|
fs_extra_1.readFile(fileName, "utf8", function (err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
}
|
}
|
||||||
@@ -107,7 +127,7 @@ var createRevisionsFromFiles = function (fileNames) {
|
|||||||
var fm = front_matter_1.default(data);
|
var fm = front_matter_1.default(data);
|
||||||
// add target attribute to external links
|
// add target attribute to external links
|
||||||
// todo: check path
|
// todo: check path
|
||||||
var html = marked_1.default(fm.body.replace(/\]\(\//g, '](/techradar/'));
|
var html = marked_1.default(fm.body.replace(/\]\(\//g, "](/techradar/"));
|
||||||
html = html.replace(/a href="http/g, 'a target="_blank" rel="noopener noreferrer" href="http');
|
html = html.replace(/a href="http/g, 'a target="_blank" rel="noopener noreferrer" href="http');
|
||||||
resolve(__assign(__assign(__assign({}, itemInfoFromFilename(fileName)), checkAttributes(fileName, fm.attributes)), { fileName: fileName, body: html }));
|
resolve(__assign(__assign(__assign({}, itemInfoFromFilename(fileName)), checkAttributes(fileName, fm.attributes)), { fileName: fileName, body: html }));
|
||||||
}
|
}
|
||||||
@@ -116,9 +136,9 @@ var createRevisionsFromFiles = function (fileNames) {
|
|||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
var itemInfoFromFilename = function (fileName) {
|
var itemInfoFromFilename = function (fileName) {
|
||||||
var _a = fileName.split(path_1.default.sep).slice(-2), release = _a[0], name = _a[1];
|
var _a = fileName.split(path.sep).slice(-2), release = _a[0], name = _a[1];
|
||||||
return {
|
return {
|
||||||
name: path_1.default.basename(name, '.md'),
|
name: path.basename(name, ".md"),
|
||||||
release: release,
|
release: release,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -138,28 +158,30 @@ var createItems = function (revisions) {
|
|||||||
var _a;
|
var _a;
|
||||||
return __assign(__assign({}, items), (_a = {}, _a[revision.name] = addRevisionToItem(items[revision.name], revision), _a));
|
return __assign(__assign({}, items), (_a = {}, _a[revision.name] = addRevisionToItem(items[revision.name], revision), _a));
|
||||||
}, {});
|
}, {});
|
||||||
return Object.values(itemMap).map(function (item) {
|
return Object.values(itemMap)
|
||||||
|
.map(function (item) {
|
||||||
var _a;
|
var _a;
|
||||||
return (__assign(__assign({}, item), (_a = {}, _a['title'] = item.title || item.name, _a)));
|
return (__assign(__assign({}, item), (_a = {}, _a["title"] = item.title || item.name, _a)));
|
||||||
}).sort(function (x, y) { return (x.name > y.name ? 1 : -1); });
|
})
|
||||||
|
.sort(function (x, y) { return (x.name > y.name ? 1 : -1); });
|
||||||
};
|
};
|
||||||
var ignoreEmptyRevisionBody = function (revision, item) {
|
var ignoreEmptyRevisionBody = function (revision, item) {
|
||||||
if (!revision.body || revision.body.trim() === '') {
|
if (!revision.body || revision.body.trim() === "") {
|
||||||
return item.body;
|
return item.body;
|
||||||
}
|
}
|
||||||
return revision.body;
|
return revision.body;
|
||||||
};
|
};
|
||||||
var addRevisionToItem = function (item, revision) {
|
var addRevisionToItem = function (item, revision) {
|
||||||
if (item === void 0) { item = {
|
if (item === void 0) { item = {
|
||||||
flag: 'default',
|
flag: "default",
|
||||||
featured: true,
|
featured: true,
|
||||||
revisions: [],
|
revisions: [],
|
||||||
name: '',
|
name: "",
|
||||||
title: '',
|
title: "",
|
||||||
ring: 'trial',
|
ring: "trial",
|
||||||
quadrant: '',
|
quadrant: "",
|
||||||
body: '',
|
body: "",
|
||||||
info: '',
|
info: "",
|
||||||
}; }
|
}; }
|
||||||
var newItem = __assign(__assign(__assign({}, item), revision), { body: ignoreEmptyRevisionBody(revision, item) });
|
var newItem = __assign(__assign(__assign({}, item), revision), { body: ignoreEmptyRevisionBody(revision, item) });
|
||||||
if (revisionCreatesNewHistoryEntry(revision)) {
|
if (revisionCreatesNewHistoryEntry(revision)) {
|
||||||
@@ -168,10 +190,12 @@ var addRevisionToItem = function (item, revision) {
|
|||||||
return newItem;
|
return newItem;
|
||||||
};
|
};
|
||||||
var revisionCreatesNewHistoryEntry = function (revision) {
|
var revisionCreatesNewHistoryEntry = function (revision) {
|
||||||
return revision.body.trim() !== '' || typeof revision.ring !== 'undefined';
|
return revision.body.trim() !== "" || typeof revision.ring !== "undefined";
|
||||||
};
|
};
|
||||||
var flagItem = function (items, allReleases) {
|
var flagItem = function (items, allReleases) {
|
||||||
return items.map(function (item) { return (__assign(__assign({}, item), { flag: getItemFlag(item, allReleases) })); }, []);
|
return items.map(function (item) {
|
||||||
|
return (__assign(__assign({}, item), { flag: getItemFlag(item, allReleases) }));
|
||||||
|
}, []);
|
||||||
};
|
};
|
||||||
var isInLastRelease = function (item, allReleases) {
|
var isInLastRelease = function (item, allReleases) {
|
||||||
return item.revisions[0].release === allReleases[allReleases.length - 1];
|
return item.revisions[0].release === allReleases[allReleases.length - 1];
|
||||||
@@ -184,10 +208,10 @@ var hasItemChanged = function (item, allReleases) {
|
|||||||
};
|
};
|
||||||
var getItemFlag = function (item, allReleases) {
|
var getItemFlag = function (item, allReleases) {
|
||||||
if (isNewItem(item, allReleases)) {
|
if (isNewItem(item, allReleases)) {
|
||||||
return 'new';
|
return "new";
|
||||||
}
|
}
|
||||||
if (hasItemChanged(item, allReleases)) {
|
if (hasItemChanged(item, allReleases)) {
|
||||||
return 'changed';
|
return "changed";
|
||||||
}
|
}
|
||||||
return 'default';
|
return "default";
|
||||||
};
|
};
|
||||||
21
dist_scripts/scripts/paths.js
Normal file
21
dist_scripts/scripts/paths.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.appYarnLock = exports.appBuild = exports.appRdJson = exports.templateBuild = exports.template = exports.radarJson = void 0;
|
||||||
|
var path_1 = require("path");
|
||||||
|
var fs_1 = require("fs");
|
||||||
|
exports.radarJson = "rd.json";
|
||||||
|
var appDirectory = fs_1.realpathSync(process.cwd());
|
||||||
|
var resolveApp = function (relativePath) {
|
||||||
|
if (relativePath === void 0) { relativePath = ""; }
|
||||||
|
return path_1.resolve(appDirectory, relativePath);
|
||||||
|
};
|
||||||
|
var templateDirectory = fs_1.realpathSync(__dirname);
|
||||||
|
var resolveTemplate = function (relativePath) {
|
||||||
|
if (relativePath === void 0) { relativePath = ""; }
|
||||||
|
return path_1.resolve(templateDirectory, "..", relativePath);
|
||||||
|
};
|
||||||
|
exports.template = resolveTemplate();
|
||||||
|
exports.templateBuild = resolveTemplate("build");
|
||||||
|
exports.appRdJson = resolveApp("build/" + exports.radarJson);
|
||||||
|
exports.appBuild = resolveApp("build");
|
||||||
|
exports.appYarnLock = resolveApp("yarn.lock");
|
||||||
10
package.json
10
package.json
@@ -10,15 +10,15 @@
|
|||||||
"url": "https://github.com/AOEpeople/aoe_technology_radar.git"
|
"url": "https://github.com/AOEpeople/aoe_technology_radar.git"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"aoe_technology_radar-generateJson": "scripts/generateJson.js",
|
"aoe_technology_radar-generateJson": "dist_scripts/scripts/generateJson.js",
|
||||||
"aoe_technology_radar-buildRadar": "scripts/buildRadar.js",
|
"aoe_technology_radar-buildRadar": "dist_scripts/scripts/buildRadar.js",
|
||||||
"aoe_technology_radar-createStaticFiles": "bin/tasks/create-static.js"
|
"aoe_technology_radar-createStaticFiles": "dist_scripts/scripts/createStaticFiles.js"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prepare": "husky install && yarn build:tasks && yarn build",
|
"prepare": "husky install && yarn build:scripts",
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
"build": "react-scripts build",
|
"build": "react-scripts build",
|
||||||
"build:tasks": "tsc --project tsconfig.tasks.json",
|
"build:scripts": "tsc --project tsconfig.scripts.json",
|
||||||
"test": "react-scripts test",
|
"test": "react-scripts test",
|
||||||
"ts:check": "tsc --noEmit",
|
"ts:check": "tsc --noEmit",
|
||||||
"lint": "yarn ts:check",
|
"lint": "yarn ts:check",
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
"use strict";
|
import * as fs from "fs-extra";
|
||||||
|
import { spawn } from "child_process";
|
||||||
|
import * as paths from "./paths";
|
||||||
|
|
||||||
// Do this as the first thing so that any code reading it knows the right env.
|
// Do this as the first thing so that any code reading it knows the right env.
|
||||||
process.env.BABEL_ENV = "production";
|
process.env.BABEL_ENV = "production";
|
||||||
@@ -13,13 +15,9 @@ process.on("unhandledRejection", (err) => {
|
|||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
|
|
||||||
const fs = require("fs-extra");
|
const runCommand = (command: string) =>
|
||||||
const paths = require("../config/paths");
|
new Promise((resolve, reject) => {
|
||||||
const childProcess = require("child_process");
|
const executedCommand = spawn(command, {
|
||||||
|
|
||||||
const runCommand = (command, args) => {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const executedCommand = childProcess.spawn(command, args, {
|
|
||||||
stdio: "inherit",
|
stdio: "inherit",
|
||||||
shell: true,
|
shell: true,
|
||||||
});
|
});
|
||||||
@@ -30,13 +28,15 @@ const runCommand = (command, args) => {
|
|||||||
|
|
||||||
executedCommand.on("exit", (code) => {
|
executedCommand.on("exit", (code) => {
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
resolve();
|
resolve(code);
|
||||||
} else {
|
} else {
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}).catch((error) => {
|
||||||
|
console.error(error);
|
||||||
|
process.exit(1);
|
||||||
});
|
});
|
||||||
};
|
|
||||||
|
|
||||||
const buildTemplate = () => {
|
const buildTemplate = () => {
|
||||||
const packageManager = fs.existsSync(paths.appYarnLock) ? "yarn" : "npx";
|
const packageManager = fs.existsSync(paths.appYarnLock) ? "yarn" : "npx";
|
||||||
@@ -44,10 +44,7 @@ const buildTemplate = () => {
|
|||||||
fs.emptyDirSync(paths.templateBuild);
|
fs.emptyDirSync(paths.templateBuild);
|
||||||
process.chdir(paths.template);
|
process.chdir(paths.template);
|
||||||
|
|
||||||
return runCommand(`${packageManager} build`).catch((error) => {
|
return runCommand(`${packageManager} build`);
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (fs.existsSync(paths.appRdJson)) {
|
if (fs.existsSync(paths.appRdJson)) {
|
||||||
@@ -1,9 +1,20 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
import { createRadar } from "./radar";
|
|
||||||
import { copyFileSync, mkdirSync, existsSync } from "fs";
|
import { copyFileSync, mkdirSync, existsSync } from "fs";
|
||||||
|
import { createRadar } from "./generateJson/radar";
|
||||||
import { quadrants } from "../src/config";
|
import { quadrants } from "../src/config";
|
||||||
|
|
||||||
|
// Do this as the first thing so that any code reading it knows the right env.
|
||||||
|
process.env.BABEL_ENV = "production";
|
||||||
|
process.env.NODE_ENV = "production";
|
||||||
|
|
||||||
|
// Makes the script crash on unhandled rejections instead of silently
|
||||||
|
// ignoring them. In the future, promise rejections that are not handled will
|
||||||
|
// terminate the Node.js process with a non-zero exit code.
|
||||||
|
process.on("unhandledRejection", (err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
try {
|
try {
|
||||||
console.log("starting static");
|
console.log("starting static");
|
||||||
@@ -26,7 +37,7 @@ import { quadrants } from "../src/config";
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("created static");
|
console.log("created static files.");
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("error:", e);
|
console.error("error:", e);
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
"use strict";
|
import * as paths from "./paths";
|
||||||
|
import { createRadar } from "./generateJson/radar";
|
||||||
|
import { save } from "./generateJson/file";
|
||||||
|
|
||||||
// Do this as the first thing so that any code reading it knows the right env.
|
// Do this as the first thing so that any code reading it knows the right env.
|
||||||
process.env.BABEL_ENV = "production";
|
process.env.BABEL_ENV = "production";
|
||||||
@@ -13,10 +15,17 @@ process.on("unhandledRejection", (err) => {
|
|||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
|
|
||||||
const paths = require("../config/paths");
|
const generateJson = async () => {
|
||||||
|
try {
|
||||||
|
const radar = await createRadar();
|
||||||
|
|
||||||
require("../bin/tasks/radarjson")
|
await save(JSON.stringify(radar), paths.radarJson);
|
||||||
.radarJsonGenerator()
|
} catch (e) {
|
||||||
|
console.error("error:", e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
generateJson()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log(`${paths.appRdJson} created.`);
|
console.log(`${paths.appRdJson} created.`);
|
||||||
})
|
})
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
import { outputFile } from "fs-extra";
|
import { outputFile } from "fs-extra";
|
||||||
import path from "path";
|
import * as path from "path";
|
||||||
import { walk } from "walk";
|
import { walk } from "walk";
|
||||||
|
|
||||||
export const relativePath = (...relativePath: string[]): string =>
|
export const relativePath = (...relativePath: string[]): string =>
|
||||||
// path.resolve(__dirname, '..', ...relativePath)
|
|
||||||
path.resolve(...relativePath);
|
path.resolve(...relativePath);
|
||||||
|
|
||||||
export const radarPath = (...pathInSrc: string[]) =>
|
export const radarPath = (...pathInSrc: string[]) =>
|
||||||
@@ -12,24 +11,15 @@ export const radarPath = (...pathInSrc: string[]) =>
|
|||||||
export const stylesPath = (...pathInSrc: string[]) =>
|
export const stylesPath = (...pathInSrc: string[]) =>
|
||||||
relativePath("styles", ...pathInSrc);
|
relativePath("styles", ...pathInSrc);
|
||||||
|
|
||||||
export const assetsPath = (...pathInSrc: string[]) =>
|
|
||||||
relativePath("assets", ...pathInSrc);
|
|
||||||
|
|
||||||
export const faviconPath = (...pathInSrc: string[]) =>
|
export const faviconPath = (...pathInSrc: string[]) =>
|
||||||
relativePath("assets/favicon.ico", ...pathInSrc);
|
relativePath("assets/favicon.ico", ...pathInSrc);
|
||||||
|
|
||||||
export const jsPath = (...pathInSrc: string[]) =>
|
export const jsPath = (...pathInSrc: string[]) =>
|
||||||
relativePath("js", ...pathInSrc);
|
relativePath("js", ...pathInSrc);
|
||||||
|
|
||||||
export const publicPath = (...pathInDist: string[]) =>
|
|
||||||
relativePath("public", ...pathInDist);
|
|
||||||
|
|
||||||
export const buildPath = (...pathInDist: string[]) =>
|
export const buildPath = (...pathInDist: string[]) =>
|
||||||
relativePath("build", ...pathInDist);
|
relativePath("build", ...pathInDist);
|
||||||
|
|
||||||
export const builderPath = (...pathInDist: string[]) =>
|
|
||||||
relativePath("node_modules", "aoe_technology_radar", "src", ...pathInDist);
|
|
||||||
|
|
||||||
export const getAllMarkdownFiles = (folder: string) =>
|
export const getAllMarkdownFiles = (folder: string) =>
|
||||||
getAllFiles(folder, isMarkdownFile);
|
getAllFiles(folder, isMarkdownFile);
|
||||||
|
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
import { readFile } from 'fs-extra';
|
import { readFile } from "fs-extra";
|
||||||
import path from 'path';
|
import * as path from "path";
|
||||||
import frontmatter from 'front-matter';
|
import frontMatter from "front-matter";
|
||||||
import marked from 'marked';
|
// @ts-ignore esModuleInterop is activated in tsconfig.scripts.json, but IDE typescript uses default typescript config
|
||||||
import hljs from 'highlight.js';
|
import marked from "marked";
|
||||||
import { quadrants, rings } from '../src/config';
|
import highlight from "highlight.js";
|
||||||
import { radarPath, getAllMarkdownFiles } from './file';
|
|
||||||
import { Item, Revision, ItemAttributes, Radar } from '../src/model';
|
|
||||||
|
|
||||||
type FMAttributes = ItemAttributes
|
import { radarPath, getAllMarkdownFiles } from "./file";
|
||||||
|
import { quadrants, rings } from "../../src/config";
|
||||||
|
import { Item, Revision, ItemAttributes, Radar } from "../../src/model";
|
||||||
|
|
||||||
|
type FMAttributes = ItemAttributes;
|
||||||
|
|
||||||
marked.setOptions({
|
marked.setOptions({
|
||||||
highlight: code => hljs.highlightAuto(code).value,
|
highlight: (code) => highlight.highlightAuto(code).value,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const createRadar = async (): Promise<Radar> => {
|
export const createRadar = async (): Promise<Radar> => {
|
||||||
@@ -28,31 +30,35 @@ export const createRadar = async (): Promise<Radar> => {
|
|||||||
|
|
||||||
const checkAttributes = (fileName: string, attributes: FMAttributes) => {
|
const checkAttributes = (fileName: string, attributes: FMAttributes) => {
|
||||||
if (attributes.ring && !rings.includes(attributes.ring)) {
|
if (attributes.ring && !rings.includes(attributes.ring)) {
|
||||||
throw new Error(`Error: ${fileName} has an illegal value for 'ring' - must be one of ${rings}`);
|
throw new Error(
|
||||||
|
`Error: ${fileName} has an illegal value for 'ring' - must be one of ${rings}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attributes.quadrant && !quadrants.includes(attributes.quadrant)) {
|
if (attributes.quadrant && !quadrants.includes(attributes.quadrant)) {
|
||||||
throw new Error(`Error: ${fileName} has an illegal value for 'quadrant' - must be one of ${quadrants}`);
|
throw new Error(
|
||||||
|
`Error: ${fileName} has an illegal value for 'quadrant' - must be one of ${quadrants}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return attributes
|
return attributes;
|
||||||
};
|
};
|
||||||
|
|
||||||
const createRevisionsFromFiles = (fileNames: string[]) =>
|
const createRevisionsFromFiles = (fileNames: string[]) =>
|
||||||
Promise.all(
|
Promise.all(
|
||||||
fileNames.map(fileName => {
|
fileNames.map((fileName) => {
|
||||||
return new Promise<Revision>((resolve, reject) => {
|
return new Promise<Revision>((resolve, reject) => {
|
||||||
readFile(fileName, 'utf8', (err, data) => {
|
readFile(fileName, "utf8", (err, data) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
} else {
|
} else {
|
||||||
const fm = frontmatter<FMAttributes>(data);
|
const fm = frontMatter<FMAttributes>(data);
|
||||||
// add target attribute to external links
|
// add target attribute to external links
|
||||||
// todo: check path
|
// todo: check path
|
||||||
let html = marked(fm.body.replace(/\]\(\//g, '](/techradar/'));
|
let html = marked(fm.body.replace(/\]\(\//g, "](/techradar/"));
|
||||||
html = html.replace(
|
html = html.replace(
|
||||||
/a href="http/g,
|
/a href="http/g,
|
||||||
'a target="_blank" rel="noopener noreferrer" href="http',
|
'a target="_blank" rel="noopener noreferrer" href="http'
|
||||||
);
|
);
|
||||||
|
|
||||||
resolve({
|
resolve({
|
||||||
@@ -64,13 +70,13 @@ const createRevisionsFromFiles = (fileNames: string[]) =>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}),
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
const itemInfoFromFilename = (fileName: string) => {
|
const itemInfoFromFilename = (fileName: string) => {
|
||||||
const [release, name] = fileName.split(path.sep).slice(-2);
|
const [release, name] = fileName.split(path.sep).slice(-2);
|
||||||
return {
|
return {
|
||||||
name: path.basename(name, '.md'),
|
name: path.basename(name, ".md"),
|
||||||
release,
|
release,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -86,18 +92,23 @@ const getAllReleases = (revisions: Revision[]) =>
|
|||||||
.sort();
|
.sort();
|
||||||
|
|
||||||
const createItems = (revisions: Revision[]) => {
|
const createItems = (revisions: Revision[]) => {
|
||||||
const itemMap = revisions.reduce<{[name: string]: Item}>((items, revision) => {
|
const itemMap = revisions.reduce<{ [name: string]: Item }>(
|
||||||
|
(items, revision) => {
|
||||||
return {
|
return {
|
||||||
...items,
|
...items,
|
||||||
[revision.name]: addRevisionToItem(items[revision.name], revision),
|
[revision.name]: addRevisionToItem(items[revision.name], revision),
|
||||||
};
|
};
|
||||||
}, {});
|
},
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
return Object.values(itemMap).map(item => ({...item, ['title']: item.title || item.name})).sort((x, y) => (x.name > y.name ? 1 : -1));
|
return Object.values(itemMap)
|
||||||
|
.map((item) => ({ ...item, ["title"]: item.title || item.name }))
|
||||||
|
.sort((x, y) => (x.name > y.name ? 1 : -1));
|
||||||
};
|
};
|
||||||
|
|
||||||
const ignoreEmptyRevisionBody = (revision: Revision, item: Item) => {
|
const ignoreEmptyRevisionBody = (revision: Revision, item: Item) => {
|
||||||
if (!revision.body || revision.body.trim() === '') {
|
if (!revision.body || revision.body.trim() === "") {
|
||||||
return item.body;
|
return item.body;
|
||||||
}
|
}
|
||||||
return revision.body;
|
return revision.body;
|
||||||
@@ -105,17 +116,17 @@ const ignoreEmptyRevisionBody = (revision: Revision, item: Item) => {
|
|||||||
|
|
||||||
const addRevisionToItem = (
|
const addRevisionToItem = (
|
||||||
item: Item = {
|
item: Item = {
|
||||||
flag: 'default',
|
flag: "default",
|
||||||
featured: true,
|
featured: true,
|
||||||
revisions: [],
|
revisions: [],
|
||||||
name: '',
|
name: "",
|
||||||
title: '',
|
title: "",
|
||||||
ring: 'trial',
|
ring: "trial",
|
||||||
quadrant: '',
|
quadrant: "",
|
||||||
body: '',
|
body: "",
|
||||||
info: '',
|
info: "",
|
||||||
},
|
},
|
||||||
revision: Revision,
|
revision: Revision
|
||||||
): Item => {
|
): Item => {
|
||||||
let newItem: Item = {
|
let newItem: Item = {
|
||||||
...item,
|
...item,
|
||||||
@@ -134,16 +145,17 @@ const addRevisionToItem = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
const revisionCreatesNewHistoryEntry = (revision: Revision) => {
|
const revisionCreatesNewHistoryEntry = (revision: Revision) => {
|
||||||
return revision.body.trim() !== '' || typeof revision.ring !== 'undefined';
|
return revision.body.trim() !== "" || typeof revision.ring !== "undefined";
|
||||||
};
|
};
|
||||||
|
|
||||||
const flagItem = (items: Item[], allReleases: string[]) =>
|
const flagItem = (items: Item[], allReleases: string[]) =>
|
||||||
items.map(
|
items.map(
|
||||||
item => ({
|
(item) =>
|
||||||
|
({
|
||||||
...item,
|
...item,
|
||||||
flag: getItemFlag(item, allReleases),
|
flag: getItemFlag(item, allReleases),
|
||||||
} as Item),
|
} as Item),
|
||||||
[],
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
const isInLastRelease = (item: Item, allReleases: string[]) =>
|
const isInLastRelease = (item: Item, allReleases: string[]) =>
|
||||||
@@ -157,10 +169,10 @@ const hasItemChanged = (item: Item, allReleases: string[]) =>
|
|||||||
|
|
||||||
const getItemFlag = (item: Item, allReleases: string[]): string => {
|
const getItemFlag = (item: Item, allReleases: string[]): string => {
|
||||||
if (isNewItem(item, allReleases)) {
|
if (isNewItem(item, allReleases)) {
|
||||||
return 'new';
|
return "new";
|
||||||
}
|
}
|
||||||
if (hasItemChanged(item, allReleases)) {
|
if (hasItemChanged(item, allReleases)) {
|
||||||
return 'changed';
|
return "changed";
|
||||||
}
|
}
|
||||||
return 'default';
|
return "default";
|
||||||
};
|
};
|
||||||
15
scripts/paths.ts
Normal file
15
scripts/paths.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import { resolve } from "path";
|
||||||
|
import { realpathSync } from "fs";
|
||||||
|
|
||||||
|
export const radarJson = "rd.json";
|
||||||
|
const appDirectory = realpathSync(process.cwd());
|
||||||
|
const resolveApp = (relativePath = "") => resolve(appDirectory, relativePath);
|
||||||
|
const templateDirectory = realpathSync(__dirname);
|
||||||
|
const resolveTemplate = (relativePath = "") =>
|
||||||
|
resolve(templateDirectory, "..", relativePath);
|
||||||
|
|
||||||
|
export const template = resolveTemplate();
|
||||||
|
export const templateBuild = resolveTemplate("build");
|
||||||
|
export const appRdJson = resolveApp(`build/${radarJson}`);
|
||||||
|
export const appBuild = resolveApp("build");
|
||||||
|
export const appYarnLock = resolveApp("yarn.lock");
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
||||||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
||||||
function step(op) {
|
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
|
||||||
while (_) try {
|
|
||||||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
||||||
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
||||||
switch (op[0]) {
|
|
||||||
case 0: case 1: t = op; break;
|
|
||||||
case 4: _.label++; return { value: op[1], done: false };
|
|
||||||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
||||||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
||||||
default:
|
|
||||||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
||||||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
||||||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
||||||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
||||||
if (t[2]) _.ops.pop();
|
|
||||||
_.trys.pop(); continue;
|
|
||||||
}
|
|
||||||
op = body.call(thisArg, _);
|
|
||||||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
||||||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
import { createRadar } from "./radar";
|
|
||||||
import { copyFileSync, mkdirSync } from "fs";
|
|
||||||
import { quadrants } from "../src/config";
|
|
||||||
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
||||||
var radar, e_1;
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0:
|
|
||||||
_a.trys.push([0, 2, , 3]);
|
|
||||||
console.log('starting static');
|
|
||||||
return [4 /*yield*/, createRadar()];
|
|
||||||
case 1:
|
|
||||||
radar = _a.sent();
|
|
||||||
copyFileSync('build/index.html', 'build/overview.html');
|
|
||||||
copyFileSync('build/index.html', 'build/help-and-about-tech-radar.html');
|
|
||||||
quadrants.forEach(function (quadrant) {
|
|
||||||
copyFileSync('build/index.html', 'build/' + quadrant + '.html');
|
|
||||||
mkdirSync('build/' + quadrant);
|
|
||||||
});
|
|
||||||
radar.items.forEach(function (item) {
|
|
||||||
copyFileSync('build/index.html', 'build/' + item.quadrant + '/' + item.name + '.html');
|
|
||||||
});
|
|
||||||
console.log('created static');
|
|
||||||
return [3 /*break*/, 3];
|
|
||||||
case 2:
|
|
||||||
e_1 = _a.sent();
|
|
||||||
console.error('error:', e_1);
|
|
||||||
return [3 /*break*/, 3];
|
|
||||||
case 3: return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}); })();
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
||||||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
||||||
to[j] = from[i];
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
import { outputFile } from 'fs-extra';
|
|
||||||
import path from 'path';
|
|
||||||
import { walk } from 'walk';
|
|
||||||
export var relativePath = function () {
|
|
||||||
var relativePath = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
relativePath[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
// path.resolve(__dirname, '..', ...relativePath)
|
|
||||||
path.resolve.apply(
|
|
||||||
// path.resolve(__dirname, '..', ...relativePath)
|
|
||||||
path, relativePath));
|
|
||||||
};
|
|
||||||
export var radarPath = function () {
|
|
||||||
var pathInSrc = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInSrc[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return (relativePath.apply(void 0, __spreadArray(['radar'], pathInSrc)));
|
|
||||||
};
|
|
||||||
export var stylesPath = function () {
|
|
||||||
var pathInSrc = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInSrc[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return (relativePath.apply(void 0, __spreadArray(['styles'], pathInSrc)));
|
|
||||||
};
|
|
||||||
export var assetsPath = function () {
|
|
||||||
var pathInSrc = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInSrc[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return (relativePath.apply(void 0, __spreadArray(['assets'], pathInSrc)));
|
|
||||||
};
|
|
||||||
export var faviconPath = function () {
|
|
||||||
var pathInSrc = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInSrc[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return (relativePath.apply(void 0, __spreadArray(['assets/favicon.ico'], pathInSrc)));
|
|
||||||
};
|
|
||||||
export var jsPath = function () {
|
|
||||||
var pathInSrc = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInSrc[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return (relativePath.apply(void 0, __spreadArray(['js'], pathInSrc)));
|
|
||||||
};
|
|
||||||
export var distPath = function () {
|
|
||||||
var pathInDist = [];
|
|
||||||
for (var _i = 0; _i < arguments.length; _i++) {
|
|
||||||
pathInDist[_i] = arguments[_i];
|
|
||||||
}
|
|
||||||
return (relativePath.apply(void 0, __spreadArray(['src'], pathInDist)));
|
|
||||||
};
|
|
||||||
export var getAllMarkdownFiles = function (folder) { return (getAllFiles(folder, isMarkdownFile)); };
|
|
||||||
var getAllFiles = function (folder, predicate) { return (new Promise(function (resolve, reject) {
|
|
||||||
var walker = walk(folder, { followLinks: false });
|
|
||||||
var files = [];
|
|
||||||
walker.on("file", function (root, fileStat, next) {
|
|
||||||
if (predicate(fileStat.name)) {
|
|
||||||
files.push(path.resolve(root, fileStat.name));
|
|
||||||
}
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
walker.on("errors", function (root, nodeStatsArray, next) {
|
|
||||||
nodeStatsArray.forEach(function (n) {
|
|
||||||
console.error("[ERROR] " + n.name);
|
|
||||||
if (n.error) {
|
|
||||||
console.error(n.error.message || (n.error.code + ": " + n.error.path));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
walker.on("end", function () {
|
|
||||||
resolve(files.sort());
|
|
||||||
});
|
|
||||||
})); };
|
|
||||||
var isMarkdownFile = function (name) { return name.match(/\.md$/) !== null; };
|
|
||||||
export var save = function (data, fileName) { return outputFile(distPath(fileName), data); };
|
|
||||||
186
tasks/radar.js
186
tasks/radar.js
@@ -1,186 +0,0 @@
|
|||||||
var __assign = (this && this.__assign) || function () {
|
|
||||||
__assign = Object.assign || function(t) {
|
|
||||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
||||||
s = arguments[i];
|
|
||||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
||||||
t[p] = s[p];
|
|
||||||
}
|
|
||||||
return t;
|
|
||||||
};
|
|
||||||
return __assign.apply(this, arguments);
|
|
||||||
};
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
||||||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
||||||
function step(op) {
|
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
|
||||||
while (_) try {
|
|
||||||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
||||||
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
||||||
switch (op[0]) {
|
|
||||||
case 0: case 1: t = op; break;
|
|
||||||
case 4: _.label++; return { value: op[1], done: false };
|
|
||||||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
||||||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
||||||
default:
|
|
||||||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
||||||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
||||||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
||||||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
||||||
if (t[2]) _.ops.pop();
|
|
||||||
_.trys.pop(); continue;
|
|
||||||
}
|
|
||||||
op = body.call(thisArg, _);
|
|
||||||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
||||||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
||||||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
||||||
to[j] = from[i];
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
import { readFile } from 'fs-extra';
|
|
||||||
import path from 'path';
|
|
||||||
import frontmatter from 'front-matter';
|
|
||||||
import marked from 'marked';
|
|
||||||
import hljs from 'highlight.js';
|
|
||||||
import { quadrants, rings } from '../src/config';
|
|
||||||
import { radarPath, getAllMarkdownFiles } from './file';
|
|
||||||
marked.setOptions({
|
|
||||||
highlight: function (code) { return hljs.highlightAuto(code).value; },
|
|
||||||
});
|
|
||||||
export var createRadar = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
||||||
var fileNames, revisions, allReleases, items, flaggedItems;
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0: return [4 /*yield*/, getAllMarkdownFiles(radarPath())];
|
|
||||||
case 1:
|
|
||||||
fileNames = _a.sent();
|
|
||||||
return [4 /*yield*/, createRevisionsFromFiles(fileNames)];
|
|
||||||
case 2:
|
|
||||||
revisions = _a.sent();
|
|
||||||
allReleases = getAllReleases(revisions);
|
|
||||||
items = createItems(revisions);
|
|
||||||
flaggedItems = flagItem(items, allReleases);
|
|
||||||
return [2 /*return*/, {
|
|
||||||
items: flaggedItems,
|
|
||||||
releases: allReleases,
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}); };
|
|
||||||
var checkAttributes = function (fileName, attributes) {
|
|
||||||
if (attributes.ring && !rings.includes(attributes.ring)) {
|
|
||||||
throw new Error("Error: " + fileName + " has an illegal value for 'ring' - must be one of " + rings);
|
|
||||||
}
|
|
||||||
if (attributes.quadrant && !quadrants.includes(attributes.quadrant)) {
|
|
||||||
throw new Error("Error: " + fileName + " has an illegal value for 'quadrant' - must be one of " + quadrants);
|
|
||||||
}
|
|
||||||
return attributes;
|
|
||||||
};
|
|
||||||
var createRevisionsFromFiles = function (fileNames) {
|
|
||||||
return Promise.all(fileNames.map(function (fileName) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
readFile(fileName, 'utf8', function (err, data) {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var fm = frontmatter(data);
|
|
||||||
// add target attribute to external links
|
|
||||||
// todo: check path
|
|
||||||
var html = marked(fm.body.replace(/\]\(\//g, '](/techradar/'));
|
|
||||||
html = html.replace(/a href="http/g, 'a target="_blank" rel="noopener noreferrer" href="http');
|
|
||||||
resolve(__assign(__assign(__assign({}, itemInfoFromFilename(fileName)), checkAttributes(fileName, fm.attributes)), { fileName: fileName, body: html }));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
var itemInfoFromFilename = function (fileName) {
|
|
||||||
var _a = fileName.split(path.sep).slice(-2), release = _a[0], name = _a[1];
|
|
||||||
return {
|
|
||||||
name: path.basename(name, '.md'),
|
|
||||||
release: release,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
var getAllReleases = function (revisions) {
|
|
||||||
return revisions
|
|
||||||
.reduce(function (allReleases, _a) {
|
|
||||||
var release = _a.release;
|
|
||||||
if (!allReleases.includes(release)) {
|
|
||||||
return __spreadArray(__spreadArray([], allReleases), [release]);
|
|
||||||
}
|
|
||||||
return allReleases;
|
|
||||||
}, [])
|
|
||||||
.sort();
|
|
||||||
};
|
|
||||||
var createItems = function (revisions) {
|
|
||||||
var itemMap = revisions.reduce(function (items, revision) {
|
|
||||||
var _a;
|
|
||||||
return __assign(__assign({}, items), (_a = {}, _a[revision.name] = addRevisionToItem(items[revision.name], revision), _a));
|
|
||||||
}, {});
|
|
||||||
return Object.values(itemMap).map(function (item) {
|
|
||||||
var _a;
|
|
||||||
return (__assign(__assign({}, item), (_a = {}, _a['title'] = item.title || item.name, _a)));
|
|
||||||
}).sort(function (x, y) { return (x.name > y.name ? 1 : -1); });
|
|
||||||
};
|
|
||||||
var ignoreEmptyRevisionBody = function (revision, item) {
|
|
||||||
if (!revision.body || revision.body.trim() === '') {
|
|
||||||
return item.body;
|
|
||||||
}
|
|
||||||
return revision.body;
|
|
||||||
};
|
|
||||||
var addRevisionToItem = function (item, revision) {
|
|
||||||
if (item === void 0) { item = {
|
|
||||||
flag: 'default',
|
|
||||||
featured: true,
|
|
||||||
revisions: [],
|
|
||||||
name: '',
|
|
||||||
title: '',
|
|
||||||
ring: 'trial',
|
|
||||||
quadrant: '',
|
|
||||||
body: '',
|
|
||||||
info: '',
|
|
||||||
}; }
|
|
||||||
var newItem = __assign(__assign(__assign({}, item), revision), { body: ignoreEmptyRevisionBody(revision, item) });
|
|
||||||
if (revisionCreatesNewHistoryEntry(revision)) {
|
|
||||||
newItem = __assign(__assign({}, newItem), { revisions: __spreadArray([revision], newItem.revisions) });
|
|
||||||
}
|
|
||||||
return newItem;
|
|
||||||
};
|
|
||||||
var revisionCreatesNewHistoryEntry = function (revision) {
|
|
||||||
return revision.body.trim() !== '' || typeof revision.ring !== 'undefined';
|
|
||||||
};
|
|
||||||
var flagItem = function (items, allReleases) {
|
|
||||||
return items.map(function (item) { return (__assign(__assign({}, item), { flag: getItemFlag(item, allReleases) })); }, []);
|
|
||||||
};
|
|
||||||
var isInLastRelease = function (item, allReleases) {
|
|
||||||
return item.revisions[0].release === allReleases[allReleases.length - 1];
|
|
||||||
};
|
|
||||||
var isNewItem = function (item, allReleases) {
|
|
||||||
return item.revisions.length === 1 && isInLastRelease(item, allReleases);
|
|
||||||
};
|
|
||||||
var hasItemChanged = function (item, allReleases) {
|
|
||||||
return item.revisions.length > 1 && isInLastRelease(item, allReleases);
|
|
||||||
};
|
|
||||||
var getItemFlag = function (item, allReleases) {
|
|
||||||
if (isNewItem(item, allReleases)) {
|
|
||||||
return 'new';
|
|
||||||
}
|
|
||||||
if (hasItemChanged(item, allReleases)) {
|
|
||||||
return 'changed';
|
|
||||||
}
|
|
||||||
return 'default';
|
|
||||||
};
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
||||||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
||||||
function step(op) {
|
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
|
||||||
while (_) try {
|
|
||||||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
||||||
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
||||||
switch (op[0]) {
|
|
||||||
case 0: case 1: t = op; break;
|
|
||||||
case 4: _.label++; return { value: op[1], done: false };
|
|
||||||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
||||||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
||||||
default:
|
|
||||||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
||||||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
||||||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
||||||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
||||||
if (t[2]) _.ops.pop();
|
|
||||||
_.trys.pop(); continue;
|
|
||||||
}
|
|
||||||
op = body.call(thisArg, _);
|
|
||||||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
||||||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
import { createRadar } from "./radar";
|
|
||||||
import { save } from "./file";
|
|
||||||
export var radarJsonGenerator = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
||||||
var radar, e_1;
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0:
|
|
||||||
_a.trys.push([0, 2, , 3]);
|
|
||||||
console.log("start");
|
|
||||||
return [4 /*yield*/, createRadar()];
|
|
||||||
case 1:
|
|
||||||
radar = _a.sent();
|
|
||||||
save(JSON.stringify(radar), "rd.json");
|
|
||||||
save("import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from 'aoe_technology_radar/src/components/App';\nimport 'aoe_technology_radar/src/index.scss';\nimport radardata from './rd.json';\n\nReactDOM.render(\n <React.StrictMode>\n <App items={radardata.items as Item[]} releases={radardata.releases as string[]} />\n </React.StrictMode>,\n document.getElementById('root')\n);\n", "index.tsx");
|
|
||||||
console.log("Built radar");
|
|
||||||
return [3 /*break*/, 3];
|
|
||||||
case 2:
|
|
||||||
e_1 = _a.sent();
|
|
||||||
console.error("error:", e_1);
|
|
||||||
return [3 /*break*/, 3];
|
|
||||||
case 3: return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}); };
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
import { createRadar } from "./radar";
|
|
||||||
import { save } from "./file";
|
|
||||||
|
|
||||||
export const radarJsonGenerator = async () => {
|
|
||||||
try {
|
|
||||||
const radar = await createRadar();
|
|
||||||
|
|
||||||
await save(JSON.stringify(radar), "rd.json");
|
|
||||||
} catch (e) {
|
|
||||||
console.error("error:", e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"jsx": "react-jsx",
|
"jsx": "react-jsx",
|
||||||
"outDir": "bin",
|
"outDir": "dist_scripts",
|
||||||
"noEmit": false
|
"noEmit": false
|
||||||
},
|
},
|
||||||
"files": ["tasks/radarjson.ts", "tasks/create-static.ts"]
|
"include": ["scripts"]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user