@intelligentgraphics/ig.gfx.packager 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -3580,6 +3580,270 @@ const buildSortedPackageMap = folders => {
3580
3580
 
3581
3581
  /***/ }),
3582
3582
 
3583
+ /***/ "./src/commands/generate.ts":
3584
+ /*!**********************************!*\
3585
+ !*** ./src/commands/generate.ts ***!
3586
+ \**********************************/
3587
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3588
+
3589
+ "use strict";
3590
+
3591
+
3592
+ Object.defineProperty(exports, "__esModule", ({
3593
+ value: true
3594
+ }));
3595
+ exports.extract = extract;
3596
+
3597
+ var fs = _interopRequireWildcard(__webpack_require__(/*! fs-extra */ "fs-extra"));
3598
+
3599
+ var _path = _interopRequireDefault(__webpack_require__(/*! path */ "path"));
3600
+
3601
+ var ts = _interopRequireWildcard(__webpack_require__(/*! typescript */ "typescript"));
3602
+
3603
+ var _tsc = __webpack_require__(/*! ../tsc */ "./src/tsc.ts");
3604
+
3605
+ var _os = _interopRequireDefault(__webpack_require__(/*! os */ "os"));
3606
+
3607
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3608
+
3609
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3610
+
3611
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3612
+
3613
+ function findTsNode(node, callback) {
3614
+ let result;
3615
+ ts.forEachChild(node, child => {
3616
+ if (callback(child)) {
3617
+ result = child;
3618
+ return true;
3619
+ }
3620
+ });
3621
+ return result;
3622
+ }
3623
+
3624
+ function getParamsFromJsDoc(text) {
3625
+ let lines = text.split(_os.default.EOL);
3626
+ let splitLines = lines.map(line => line.split(":").map(s => s.trim()));
3627
+ let params = {};
3628
+ splitLines.filter(line => line.length > 1).forEach(line => {
3629
+ params[line[0]] = line[1];
3630
+ });
3631
+ return params;
3632
+ }
3633
+
3634
+ function getDescFromJsDoc(text) {
3635
+ let lines = text.split(_os.default.EOL);
3636
+ let splitLines = lines.map(line => line.split(":").map(s => s.trim()));
3637
+ let desc = "";
3638
+ splitLines.filter(line => line.length == 1).forEach((line, i) => {
3639
+ desc += (i == 0 ? "" : " ") + line[0];
3640
+ });
3641
+ return desc.substring(0, 98);
3642
+ }
3643
+
3644
+ function capitalizeFirstLetter(string) {
3645
+ return (string === null || string === void 0 ? void 0 : string.charAt(0).toUpperCase()) + (string === null || string === void 0 ? void 0 : string.slice(1));
3646
+ }
3647
+
3648
+ function parseDefault(value, type) {
3649
+ const uType = capitalizeFirstLetter(type);
3650
+ if (value === "null") return null;
3651
+
3652
+ switch (uType) {
3653
+ case "LengthM":
3654
+ case "ArcDEG":
3655
+ case "Float":
3656
+ return parseFloat(value);
3657
+
3658
+ case "Integer":
3659
+ case "Int":
3660
+ return parseInt(value);
3661
+
3662
+ case "Boolean":
3663
+ case "Bool":
3664
+ return value === "true";
3665
+
3666
+ case "Material":
3667
+ case "String":
3668
+ default:
3669
+ return value.replace(/^"/, '').replace(/"$/, '');
3670
+ }
3671
+ }
3672
+
3673
+ function findEvaluatorNode(node) {
3674
+ if (ts.isModuleDeclaration(node) && node.body && ts.isModuleDeclaration(node.body) && node.body.body) {
3675
+ const classDeclaration = findTsNode(node.body.body, child => {
3676
+ var _child$heritageClause;
3677
+
3678
+ if (!ts.isClassDeclaration(child)) {
3679
+ return false;
3680
+ }
3681
+
3682
+ const isEvaluator = (_child$heritageClause = child.heritageClauses) === null || _child$heritageClause === void 0 ? void 0 : _child$heritageClause.some(clause => {
3683
+ if (clause.token !== ts.SyntaxKind.ExtendsKeyword) {
3684
+ return false;
3685
+ }
3686
+
3687
+ return clause.types.some(type => type.getText().includes("Evaluator"));
3688
+ });
3689
+ return isEvaluator !== null && isEvaluator !== void 0 ? isEvaluator : false;
3690
+ });
3691
+ return classDeclaration;
3692
+ }
3693
+ }
3694
+
3695
+ function getParameter(evaluatorNode) {
3696
+ var _evaluatorNode$member;
3697
+
3698
+ let memb = (_evaluatorNode$member = evaluatorNode.members) === null || _evaluatorNode$member === void 0 ? void 0 : _evaluatorNode$member.find(member => {
3699
+ var _member$name;
3700
+
3701
+ return (member === null || member === void 0 ? void 0 : (_member$name = member.name) === null || _member$name === void 0 ? void 0 : _member$name.getText().toLowerCase()) == "create";
3702
+ });
3703
+
3704
+ if (ts.isMethodDeclaration(memb)) {
3705
+ return memb.parameters.find(para => para.name.getText().toLowerCase() == "parameters");
3706
+ }
3707
+ }
3708
+
3709
+ function findParametersInterface(node, interfaceName) {
3710
+ if (ts.isModuleDeclaration(node) && node.body && ts.isModuleDeclaration(node.body) && node.body.body) {
3711
+ const interfaceDeclaration = findTsNode(node.body.body, child => ts.isInterfaceDeclaration(child) && child.name.getText() == interfaceName);
3712
+ return interfaceDeclaration;
3713
+ }
3714
+
3715
+ return undefined;
3716
+ }
3717
+
3718
+ function getModuleName(sourceFile) {
3719
+ let fullName = "";
3720
+
3721
+ if (ts.isModuleDeclaration(sourceFile)) {
3722
+ fullName += sourceFile.name.getText();
3723
+ let packageB = sourceFile.body;
3724
+
3725
+ if (ts.isModuleDeclaration(packageB)) {
3726
+ fullName += "." + packageB.name.getText();
3727
+ }
3728
+ }
3729
+
3730
+ return fullName;
3731
+ }
3732
+
3733
+ function genParameters(interfac) {
3734
+ return interfac.members.map((member, i) => {
3735
+ let para = {};
3736
+ para.Name = member.name.getText();
3737
+ if (para.Name.length > 45) throw new Error(`Parameter name length >45 '${para.Name}'`);
3738
+ let rawDocTags = ts.getJSDocTags(member);
3739
+
3740
+ if (rawDocTags.length) {
3741
+ let dict = getTagDict(rawDocTags);
3742
+ if (dict.summary) para.Description = dict.summary;
3743
+ if (dict.creatorType) para.Type = dict.creatorType;
3744
+ if (dict.default && dict.creatorType) para.Default = parseDefault(dict.default, dict.creatorType);
3745
+ para.DisplayIndex = i + 1;
3746
+ }
3747
+
3748
+ return para;
3749
+ });
3750
+ }
3751
+
3752
+ function getTagDict(tags) {
3753
+ let dict = {};
3754
+ tags.forEach(tag => {
3755
+ dict[tag.tagName.text] = tag.comment;
3756
+ });
3757
+ return dict;
3758
+ }
3759
+
3760
+ function findParametersInterfaceInFiles(program, fileList, name) {
3761
+ for (const file of fileList) {
3762
+ const sourceFile = program.getSourceFile(file);
3763
+
3764
+ if (sourceFile === undefined) {
3765
+ throw new Error(`Expected a source file to exist for file name "${file}"`);
3766
+ }
3767
+
3768
+ let interfaceDeclaration;
3769
+ ts.forEachChild(sourceFile, node => {
3770
+ interfaceDeclaration = findParametersInterface(node, name);
3771
+ return interfaceDeclaration !== undefined;
3772
+ });
3773
+
3774
+ if (interfaceDeclaration !== undefined) {
3775
+ return interfaceDeclaration;
3776
+ }
3777
+ }
3778
+
3779
+ return undefined;
3780
+ }
3781
+ /**
3782
+ * Extracts and returns script array for _Index.json from a src folder
3783
+ *
3784
+ * @param folderPath path to a src folder
3785
+ */
3786
+
3787
+
3788
+ function extract(folderPath, ignore = []) {
3789
+ const files = (0, _tsc.findTypescriptFiles)(_path.default.join(folderPath, "src"));
3790
+ const filtered = files.filter(path => {
3791
+ return !ignore.some(suffix => path.endsWith(suffix));
3792
+ });
3793
+ let arr = new Array();
3794
+ let program = ts.createProgram(filtered, {
3795
+ allowJs: true
3796
+ });
3797
+ program.getTypeChecker();
3798
+ filtered.forEach(file => {
3799
+ // Create a Program to represent the project, then pull out the
3800
+ // source file to parse its AST.
3801
+ const sourceFile = program.getSourceFile(file); // Loop through the root AST nodes of the file
3802
+
3803
+ ts.forEachChild(sourceFile, node => {
3804
+ let obj = {};
3805
+ const evalNode = findEvaluatorNode(node);
3806
+
3807
+ if (evalNode === undefined) {
3808
+ return;
3809
+ }
3810
+
3811
+ let moduleName = getModuleName(node);
3812
+
3813
+ if (evalNode.name === undefined) {
3814
+ throw new Error(`Expected evaluator class to have a name`);
3815
+ }
3816
+
3817
+ obj.Name = moduleName + "." + evalNode.name.getText();
3818
+ if (obj.Name.length > 45) throw new Error(`Package name length >45 '${obj.Name}'`);
3819
+ let para = getParameter(evalNode);
3820
+ let paraName = para === null || para === void 0 ? void 0 : para.type.typeName.getText();
3821
+ let interfac = findParametersInterfaceInFiles(program, filtered, paraName);
3822
+
3823
+ if (interfac === undefined) {
3824
+ throw new Error(`Failed to find parameters type declaration for evaluator ${evalNode.name.getText()}`);
3825
+ }
3826
+
3827
+ let rawDocTags = ts.getJSDocTags(evalNode);
3828
+
3829
+ if (rawDocTags.length) {
3830
+ let dict = getTagDict(rawDocTags);
3831
+ if (dict.summary) obj.Description = dict.summary;
3832
+ if (dict.creatorType) obj.Type = dict.creatorType;
3833
+ }
3834
+
3835
+ obj.Parameters = genParameters(interfac);
3836
+ arr.push(obj);
3837
+ });
3838
+ });
3839
+
3840
+ let pathX = _path.default.join(folderPath, "_Index.json");
3841
+
3842
+ fs.writeFileSync(pathX, JSON.stringify(arr, null, 4));
3843
+ }
3844
+
3845
+ /***/ }),
3846
+
3583
3847
  /***/ "./src/commands/release.ts":
3584
3848
  /*!*********************************!*\
3585
3849
  !*** ./src/commands/release.ts ***!
@@ -3719,10 +3983,10 @@ const releaseFolder = async (folderPath, options) => {
3719
3983
  fs.ensureDirSync(releasesPath);
3720
3984
  fs.copyFileSync(path.join(options.cwd, "bin", zipFileName), path.join(releasesPath, zipFileName));
3721
3985
  }
3722
- }; //https://regex101.com/r/VfoI7n/1
3986
+ }; // https://regex101.com/r/LtGAu5/1
3723
3987
 
3724
3988
 
3725
- const logRegex = /console\.log\(\s*"([\w\s\.\(\)]+)\ *Copyright[\w\s\(\)\.]+(\d{4}|\d{4} - \d{4})([\w\s\(\)\.]+)?"\)/i;
3989
+ const logRegex = /console\.log\(\s*"([\w\s\.\(\)]+)\ *Copyright[\w\s\(\)\.]+(\d{4}|\d{4} - \d{4})([\w\s\(\)\.]+)?",?\s*\)/i;
3726
3990
  const currentYear = new Date(Date.now()).getFullYear();
3727
3991
 
3728
3992
  const getVersionFile = folder => {
@@ -3772,7 +4036,7 @@ const getVersionFile = folder => {
3772
4036
  return invalidVersionFile();
3773
4037
  }
3774
4038
 
3775
- const [, description, copyright, copyrightStuff] = match;
4039
+ const [_full, _description, copyright, copyrightStuff] = match;
3776
4040
  const copyrightYears = copyright.match(/^(\d+)( ?- ?(\d+))?$/);
3777
4041
  let years;
3778
4042
 
@@ -3783,7 +4047,6 @@ const getVersionFile = folder => {
3783
4047
  }
3784
4048
 
3785
4049
  return {
3786
- version: parseVersion(description),
3787
4050
  write: createVersionFileWriter(years, copyrightStuff),
3788
4051
  reset: () => {
3789
4052
  _igTools.FileUtil.writeFile(filePath, versionFile);
@@ -8082,7 +8345,7 @@ module.exports = require("util");
8082
8345
  /***/ ((module) => {
8083
8346
 
8084
8347
  "use strict";
8085
- module.exports = JSON.parse('{"name":"@intelligentgraphics/ig.gfx.packager","version":"2.2.0","description":"IG.GFX.Packager 2.2.0 (2.2.0.100)","author":"Michael Beier <mb@intelligentgraphics.biz>","main":"build/index.js","private":false,"publishConfig":{"access":"public"},"engines":{"node":">=14.0.0"},"bin":{"packager":"./build/index.js"},"files":["build","locales","scripts"],"scripts":{"dist":"webpack","clean":"rimraf build *.tsbuildinfo","prepublishOnly":"yarn clean && yarn dist","test":"jest","_postinstall":"node scripts/postinstall.js"},"dependencies":{"ajv":"^8.6.2","axios":"^0.21.1","core-js":"^3.16.0","execa":"^5.1.1","fs-extra":"^10.0.0","glob":"^7.1.4","jszip":"^3.10.0","rimraf":"^3.0.2","source-map-support":"^0.5.19","terser":"^4.8.0","typedoc":"~0.23.2","typescript":"~4.7.4","update-notifier":"^5.1.0","v8-compile-cache":"^2.1.1","y18n":"^5.0.8","yargs":"^17.0.1"},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.18.6","@babel/plugin-proposal-object-rest-spread":"^7.18.9","@babel/preset-env":"^7.18.9","@intelligentgraphics/ig.tools.core":"^1.5.1","@intelligentgraphics/ig.utilities":"^1.6.6","@types/fs-extra":"^9.0.12","@types/glob":"^7.1.4","@types/node":"^16.4.11","@types/rimraf":"^3.0.1","@types/update-notifier":"^5.1.0","@types/yargs":"^17.0.2","babel-loader":"^8.1.0","ts-loader":"^9.2.5","ts-node":"^10.1.0","webpack":"^5.64.4","webpack-cli":"^4.7.2"}}');
8348
+ module.exports = JSON.parse('{"name":"@intelligentgraphics/ig.gfx.packager","version":"2.3.0","description":"IG.GFX.Packager 2.3.0 (2.3.0.100)","author":"Michael Beier <mb@intelligentgraphics.biz>","main":"build/index.js","private":false,"publishConfig":{"access":"public"},"engines":{"node":">=14.0.0"},"bin":{"packager":"./build/index.js"},"files":["build","locales","scripts"],"scripts":{"dist":"webpack","clean":"rimraf build *.tsbuildinfo","prepublishOnly":"yarn clean && yarn dist","test":"jest","_postinstall":"node scripts/postinstall.js","format":"prettier --write \\"**/*.{ts,tsx,json}\\""},"dependencies":{"ajv":"^8.6.2","axios":"^0.21.1","core-js":"^3.16.0","execa":"^5.1.1","fs-extra":"^10.0.0","glob":"^7.1.4","jszip":"^3.10.0","rimraf":"^3.0.2","source-map-support":"^0.5.19","terser":"^4.8.0","typedoc":"~0.23.2","typescript":"~4.7.4","update-notifier":"^5.1.0","v8-compile-cache":"^2.1.1","y18n":"^5.0.8","yargs":"^17.0.1"},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.18.6","@babel/plugin-proposal-object-rest-spread":"^7.18.9","@babel/preset-env":"^7.18.9","@intelligentgraphics/ig.tools.core":"^1.5.1","@intelligentgraphics/ig.utilities":"^1.6.6","@types/fs-extra":"^9.0.12","@types/glob":"^7.1.4","@types/node":"^16.4.11","@types/rimraf":"^3.0.1","@types/update-notifier":"^5.1.0","@types/yargs":"^17.0.2","babel-loader":"^8.1.0","ts-loader":"^9.2.5","ts-node":"^10.1.0","webpack":"^5.64.4","webpack-cli":"^4.7.2"}}');
8086
8349
 
8087
8350
  /***/ })
8088
8351
 
@@ -8138,6 +8401,8 @@ var _localization = __webpack_require__(/*! ./localization */ "./src/localizatio
8138
8401
 
8139
8402
  var _build = __webpack_require__(/*! ./commands/build */ "./src/commands/build.ts");
8140
8403
 
8404
+ var _generate = __webpack_require__(/*! ./commands/generate */ "./src/commands/generate.ts");
8405
+
8141
8406
  const _excluded = ["directories"],
8142
8407
  _excluded2 = ["directory", "user", "password", "service", "license"];
8143
8408
 
@@ -8301,7 +8566,7 @@ yargs.command({
8301
8566
  }
8302
8567
 
8303
8568
  if (license && !license.endsWith(".iglic")) {
8304
- captureError(new Error(`Expected the license path to end with the extension .iglic`));
8569
+ captureError(new Error(`Expected the license path to end with the extension .iglic. Received the path "${license}". You may need to reload your environment variables by restarting the program you're using to execute the packager.`));
8305
8570
  return;
8306
8571
  }
8307
8572
  }
@@ -8348,6 +8613,22 @@ yargs.command({
8348
8613
  releaseFolders(fullOptions).catch(captureError);
8349
8614
  }
8350
8615
  });
8616
+ yargs.command({
8617
+ command: "generateIndex [directory]",
8618
+ builder: argv => {
8619
+ return argv.option("ignore", {
8620
+ type: "array",
8621
+ default: [],
8622
+ description: (0, _localization.translate)("options.ignore.description")
8623
+ });
8624
+ },
8625
+ handler: ({
8626
+ directory,
8627
+ ignore
8628
+ }) => {
8629
+ (0, _generate.extract)(directory, ignore);
8630
+ }
8631
+ });
8351
8632
  yargs.demandCommand().pkgConf("packager").showHelpOnFail(false).version().argv;
8352
8633
  const notifier = (0, _updateNotifier.default)({
8353
8634
  pkg: pjson,