@decaf-ts/cli 0.4.3 → 0.4.5
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/README.md +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/lib/CliWrapper.cjs +209 -90
- package/lib/CliWrapper.d.ts +28 -4
- package/lib/CliWrapper.js.map +1 -1
- package/lib/banners.cjs +194 -0
- package/lib/banners.d.ts +3 -0
- package/lib/banners.js.map +1 -0
- package/lib/demo/cli-module.cjs +9 -39
- package/lib/demo/cli-module.d.ts +0 -33
- package/lib/demo/cli-module.js.map +1 -1
- package/lib/environment.cjs +17 -0
- package/lib/environment.d.ts +17 -0
- package/lib/environment.js.map +1 -0
- package/lib/esm/CliWrapper.d.ts +28 -4
- package/lib/esm/CliWrapper.js +210 -91
- package/lib/esm/CliWrapper.js.map +1 -1
- package/lib/esm/banners.d.ts +3 -0
- package/lib/esm/banners.js +191 -0
- package/lib/esm/banners.js.map +1 -0
- package/lib/esm/demo/cli-module.d.ts +0 -33
- package/lib/esm/demo/cli-module.js +9 -39
- package/lib/esm/demo/cli-module.js.map +1 -1
- package/lib/esm/environment.d.ts +17 -0
- package/lib/esm/environment.js +11 -0
- package/lib/esm/environment.js.map +1 -0
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/logging.d.ts +3 -0
- package/lib/esm/logging.js +16 -0
- package/lib/esm/logging.js.map +1 -0
- package/lib/esm/slogans.d.ts +40 -0
- package/lib/esm/slogans.js +142 -0
- package/lib/esm/slogans.js.map +1 -0
- package/lib/esm/utils-module/cli-module.d.ts +2 -0
- package/lib/esm/utils-module/cli-module.js +77 -0
- package/lib/esm/utils-module/cli-module.js.map +1 -0
- package/lib/esm/utils.js +1 -1
- package/lib/esm/utils.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/index.cjs +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js.map +1 -1
- package/lib/logging.cjs +19 -0
- package/lib/logging.d.ts +3 -0
- package/lib/logging.js.map +1 -0
- package/lib/slogans.cjs +150 -0
- package/lib/slogans.d.ts +40 -0
- package/lib/slogans.js.map +1 -0
- package/lib/utils-module/cli-module.cjs +83 -0
- package/lib/utils-module/cli-module.d.ts +2 -0
- package/lib/utils-module/cli-module.js.map +1 -0
- package/lib/utils.cjs +1 -1
- package/lib/utils.js.map +1 -1
- package/lib/version.cjs +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +3 -2
- package/workdocs/assets/slogans.json +194 -0
package/lib/slogans.cjs
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.readSlogans = readSlogans;
|
|
7
|
+
exports.collectSlogans = collectSlogans;
|
|
8
|
+
exports.flattenSlogansWithPriority = flattenSlogansWithPriority;
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const utils_1 = require("@decaf-ts/utils");
|
|
12
|
+
/**
|
|
13
|
+
* @description Reads and parses slogans from workdocs/assets/slogans.json.
|
|
14
|
+
* @summary Attempts to read a slogans.json file from the workdocs/assets directory at the given base path and returns its parsed contents as an array.
|
|
15
|
+
*
|
|
16
|
+
* @param {string} basePath - The base directory path where workdocs/assets/slogans.json should exist.
|
|
17
|
+
* @return {any[] | undefined} The parsed array from slogans.json, or undefined if the file doesn't exist.
|
|
18
|
+
*
|
|
19
|
+
* @function readSlogans
|
|
20
|
+
*
|
|
21
|
+
* @memberOf module:utils
|
|
22
|
+
*/
|
|
23
|
+
function readSlogans(log, basePath) {
|
|
24
|
+
log = log.for(readSlogans);
|
|
25
|
+
const slogansPath = path_1.default.join(basePath, "workdocs", "assets", "slogans.json");
|
|
26
|
+
try {
|
|
27
|
+
if (!fs_1.default.existsSync(slogansPath)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const content = fs_1.default.readFileSync(slogansPath);
|
|
31
|
+
return JSON.parse(content.toString());
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
log.error(`Failed to read slogans from ${slogansPath}`, error);
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @description Collects slogans from a base path and all @decaf scoped packages.
|
|
40
|
+
* @summary Recursively collects slogans.json files from the given base path and all subdirectories under node_modules/@decaf/*. Results are stored in an object keyed by the package name (from package.json).
|
|
41
|
+
*
|
|
42
|
+
* @param {string} basePath - The base directory path to start collecting from.
|
|
43
|
+
* @return {Record<string, any[]>} An object mapping package names to their slogans arrays.
|
|
44
|
+
*
|
|
45
|
+
* @function collectSlogans
|
|
46
|
+
*
|
|
47
|
+
* @memberOf module:utils
|
|
48
|
+
*/
|
|
49
|
+
function collectSlogans(log, basePath) {
|
|
50
|
+
log = log.for(collectSlogans);
|
|
51
|
+
const result = {};
|
|
52
|
+
// Read slogans for the base path
|
|
53
|
+
const baseSlogans = readSlogans(log, basePath);
|
|
54
|
+
if (baseSlogans) {
|
|
55
|
+
try {
|
|
56
|
+
const pkgName = (0, utils_1.getPackage)(basePath, "name");
|
|
57
|
+
result[pkgName] = baseSlogans;
|
|
58
|
+
log.verbose(`Collected ${baseSlogans.length} slogans from ${pkgName}`);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
log.verbose(`Failed to get package name for base path: ${error}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Check for @decaf/* packages in node_modules
|
|
65
|
+
const decafModulesPath = path_1.default.join(basePath, "node_modules", "@decaf-ts");
|
|
66
|
+
if (fs_1.default.existsSync(decafModulesPath)) {
|
|
67
|
+
try {
|
|
68
|
+
const decafPackages = fs_1.default.readdirSync(decafModulesPath, {
|
|
69
|
+
withFileTypes: true,
|
|
70
|
+
});
|
|
71
|
+
for (const pkg of decafPackages) {
|
|
72
|
+
if (!pkg.isDirectory())
|
|
73
|
+
continue;
|
|
74
|
+
const pkgPath = path_1.default.join(decafModulesPath, pkg.name);
|
|
75
|
+
const pkgSlogans = readSlogans(log, pkgPath);
|
|
76
|
+
if (pkgSlogans) {
|
|
77
|
+
try {
|
|
78
|
+
const pkgName = (0, utils_1.getPackage)(pkgPath, "name");
|
|
79
|
+
result[pkgName] = pkgSlogans;
|
|
80
|
+
log.verbose(`Collected ${pkgSlogans.length} slogans from ${pkgName}`);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
log.verbose(`Failed to get package name for ${pkgPath}: ${error}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
log.verbose(`Error reading @decaf-ts modules: ${error}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @description Flattens collected slogans with weighted selection for a priority package.
|
|
96
|
+
* @summary Given a collection of slogans and a priority package name, returns a flat array where slogans from the priority package have a 30-40% chance of appearing at any given position.
|
|
97
|
+
*
|
|
98
|
+
* @param {Record<string, any[]>} slogansMap - Object mapping package names to slogan arrays.
|
|
99
|
+
* @param {string} priorityPackage - The package name whose slogans should be prioritized.
|
|
100
|
+
* @return {any[]} A flat array of all slogans with weighted distribution.
|
|
101
|
+
*
|
|
102
|
+
* @function flattenSlogansWithPriority
|
|
103
|
+
*
|
|
104
|
+
* @memberOf module:utils
|
|
105
|
+
*/
|
|
106
|
+
function flattenSlogansWithPriority(log, slogansMap, priorityPackage) {
|
|
107
|
+
log = log.for(flattenSlogansWithPriority);
|
|
108
|
+
const result = [];
|
|
109
|
+
const prioritySlogans = slogansMap[priorityPackage] || [];
|
|
110
|
+
const otherSlogans = [];
|
|
111
|
+
// Collect all non-priority slogans
|
|
112
|
+
for (const [pkgName, slogans] of Object.entries(slogansMap)) {
|
|
113
|
+
if (pkgName === priorityPackage)
|
|
114
|
+
continue;
|
|
115
|
+
otherSlogans.push(...slogans);
|
|
116
|
+
}
|
|
117
|
+
if (prioritySlogans.length === 0 && otherSlogans.length === 0) {
|
|
118
|
+
log.error("No slogans found to flatten");
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
if (prioritySlogans.length === 0) {
|
|
122
|
+
log.verbose(`package "${priorityPackage}" has no slogans, returning all other slogans`);
|
|
123
|
+
return otherSlogans;
|
|
124
|
+
}
|
|
125
|
+
if (otherSlogans.length === 0) {
|
|
126
|
+
log.debug("Only priority slogans available, returning them");
|
|
127
|
+
return prioritySlogans;
|
|
128
|
+
}
|
|
129
|
+
// Interleave with 30-40% chance for priority slogans
|
|
130
|
+
let priorityIndex = 0;
|
|
131
|
+
let otherIndex = 0;
|
|
132
|
+
const priorityWeight = 0.35; // 35% average chance
|
|
133
|
+
while (priorityIndex < prioritySlogans.length ||
|
|
134
|
+
otherIndex < otherSlogans.length) {
|
|
135
|
+
const usePriority = Math.random() < priorityWeight;
|
|
136
|
+
if (usePriority && priorityIndex < prioritySlogans.length) {
|
|
137
|
+
result.push(prioritySlogans[priorityIndex++]);
|
|
138
|
+
}
|
|
139
|
+
else if (otherIndex < otherSlogans.length) {
|
|
140
|
+
result.push(otherSlogans[otherIndex++]);
|
|
141
|
+
}
|
|
142
|
+
else if (priorityIndex < prioritySlogans.length) {
|
|
143
|
+
// Only priority slogans left
|
|
144
|
+
result.push(prioritySlogans[priorityIndex++]);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
log.debug(`Flattened ${result.length} slogans with priority for "${priorityPackage}"`);
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=slogans.js.map
|
package/lib/slogans.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Logger } from "@decaf-ts/logging";
|
|
2
|
+
/**
|
|
3
|
+
* @description Reads and parses slogans from workdocs/assets/slogans.json.
|
|
4
|
+
* @summary Attempts to read a slogans.json file from the workdocs/assets directory at the given base path and returns its parsed contents as an array.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} basePath - The base directory path where workdocs/assets/slogans.json should exist.
|
|
7
|
+
* @return {any[] | undefined} The parsed array from slogans.json, or undefined if the file doesn't exist.
|
|
8
|
+
*
|
|
9
|
+
* @function readSlogans
|
|
10
|
+
*
|
|
11
|
+
* @memberOf module:utils
|
|
12
|
+
*/
|
|
13
|
+
export declare function readSlogans(log: Logger, basePath: string): {
|
|
14
|
+
Slogan: string;
|
|
15
|
+
}[] | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* @description Collects slogans from a base path and all @decaf scoped packages.
|
|
18
|
+
* @summary Recursively collects slogans.json files from the given base path and all subdirectories under node_modules/@decaf/*. Results are stored in an object keyed by the package name (from package.json).
|
|
19
|
+
*
|
|
20
|
+
* @param {string} basePath - The base directory path to start collecting from.
|
|
21
|
+
* @return {Record<string, any[]>} An object mapping package names to their slogans arrays.
|
|
22
|
+
*
|
|
23
|
+
* @function collectSlogans
|
|
24
|
+
*
|
|
25
|
+
* @memberOf module:utils
|
|
26
|
+
*/
|
|
27
|
+
export declare function collectSlogans(log: Logger, basePath: string): Record<string, any[]>;
|
|
28
|
+
/**
|
|
29
|
+
* @description Flattens collected slogans with weighted selection for a priority package.
|
|
30
|
+
* @summary Given a collection of slogans and a priority package name, returns a flat array where slogans from the priority package have a 30-40% chance of appearing at any given position.
|
|
31
|
+
*
|
|
32
|
+
* @param {Record<string, any[]>} slogansMap - Object mapping package names to slogan arrays.
|
|
33
|
+
* @param {string} priorityPackage - The package name whose slogans should be prioritized.
|
|
34
|
+
* @return {any[]} A flat array of all slogans with weighted distribution.
|
|
35
|
+
*
|
|
36
|
+
* @function flattenSlogansWithPriority
|
|
37
|
+
*
|
|
38
|
+
* @memberOf module:utils
|
|
39
|
+
*/
|
|
40
|
+
export declare function flattenSlogansWithPriority(log: Logger, slogansMap: Record<string, any[]>, priorityPackage: string): any[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slogans.js","sourceRoot":"","sources":["../src/slogans.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = utils;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const logging_1 = require("./../logging.cjs");
|
|
11
|
+
const decoration_1 = require("@decaf-ts/decoration");
|
|
12
|
+
const CliWrapper_1 = require("./../CliWrapper.cjs");
|
|
13
|
+
const logging_2 = require("@decaf-ts/logging");
|
|
14
|
+
const libraries = new commander_1.Command()
|
|
15
|
+
.name("libraries")
|
|
16
|
+
.description("outputs the installed decaf-ts libraries and their versions")
|
|
17
|
+
.option("--format [String]", "additional output formats (json, raw)")
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
20
|
+
const version = pkg.version;
|
|
21
|
+
const log = (0, logging_1.getCmdLogger)(libraries);
|
|
22
|
+
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
23
|
+
const { format } = options;
|
|
24
|
+
const libs = decoration_1.Metadata.libraries();
|
|
25
|
+
switch (format) {
|
|
26
|
+
case "json":
|
|
27
|
+
console.log(JSON.stringify(libs, null, 2));
|
|
28
|
+
break;
|
|
29
|
+
case "raw":
|
|
30
|
+
Object.entries(libs).forEach(([key, value]) => console.log(`${key}: ${value}`));
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
Object.entries(libs).forEach(([key, value]) => log.info(`${key}: ${value}`));
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
const environmentExport = new commander_1.Command()
|
|
37
|
+
.name("environment-export")
|
|
38
|
+
.description("outputs currently enforced environment")
|
|
39
|
+
.option("--format [String]", "additional output formats (json, raw)")
|
|
40
|
+
.action(async (options) => {
|
|
41
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
42
|
+
const version = pkg.version;
|
|
43
|
+
const log = (0, logging_1.getCmdLogger)(environmentExport);
|
|
44
|
+
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
45
|
+
const { format } = options;
|
|
46
|
+
const env = CliWrapper_1.CliWrapper.getEnv();
|
|
47
|
+
const flatten = (accum, obj, prefix = "") => {
|
|
48
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
49
|
+
const envKey = (0, logging_2.toENVFormat)(key);
|
|
50
|
+
const fullKey = prefix ? `${prefix}__${envKey}` : envKey;
|
|
51
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
52
|
+
flatten(accum, value, fullKey);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
accum.push(`${fullKey}=${value}`);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
switch (format) {
|
|
60
|
+
case "json":
|
|
61
|
+
console.log(JSON.stringify(env, null, 2));
|
|
62
|
+
break;
|
|
63
|
+
case "raw": {
|
|
64
|
+
const str = [];
|
|
65
|
+
flatten(str, env);
|
|
66
|
+
console.log(str.join("\n"));
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
default: {
|
|
70
|
+
const str = [];
|
|
71
|
+
flatten(str, env);
|
|
72
|
+
str.forEach((s) => log.info(s));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
function utils() {
|
|
77
|
+
const utilsCmd = new commander_1.Command()
|
|
78
|
+
.command("utils")
|
|
79
|
+
.description("utilitarian cli commands for the decaf-ts framework");
|
|
80
|
+
utilsCmd.addCommand(libraries);
|
|
81
|
+
return utilsCmd;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=cli-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-module.js","sourceRoot":"","sources":["../../src/utils-module/cli-module.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.cjs
CHANGED
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AAIpB;;;;;;;;;;;;;GAaG;AACH,MAAa,QAAQ;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAY;QACpC,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,eAAe,oBAAQ,IAAI,wCAAE,CAAC;QAChD,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe,CAAI,aAAyB;QACvD,mEAAmE;QACnE,OAAO,aAAa,CAAC,IAAI,CACvB,CAAC,CAAU,EAAE,EAAE,CAAC,CAAE,CAAoB,CAAC,OAAO,IAAI,CAAC,CAAM,CAC1D,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,OAAgB,EAAE,QAAgB;QAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO;aACJ,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AAIpB;;;;;;;;;;;;;GAaG;AACH,MAAa,QAAQ;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAY;QACpC,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,eAAe,oBAAQ,IAAI,wCAAE,CAAC;QAChD,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe,CAAI,aAAyB;QACvD,mEAAmE;QACnE,OAAO,aAAa,CAAC,IAAI,CACvB,CAAC,CAAU,EAAE,EAAE,CAAC,CAAE,CAAoB,CAAC,OAAO,IAAI,CAAC,CAAM,CAC1D,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,OAAgB,EAAE,QAAgB;QAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO;aACJ,IAAI,CAAC,OAAO,CAAC;aACb,WAAW,CAAC,QAAQ,IAAI,mBAAmB,CAAC;aAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,UAAU,CAAC,QAAgB;QACxC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CACf,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC7D,CAAC;QACJ,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,QAAgB;QACpC,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAW,CAAC;IAC5D,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,QAAgB;QACjC,MAAM,IAAI,GAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;CACF;AA1FD,4BA0FC"}
|
package/lib/version.cjs
CHANGED
|
@@ -8,7 +8,7 @@ const decoration_1 = require("@decaf-ts/decoration");
|
|
|
8
8
|
* @const VERSION
|
|
9
9
|
* @memberOf module:CLI
|
|
10
10
|
*/
|
|
11
|
-
exports.VERSION = "0.4.
|
|
11
|
+
exports.VERSION = "0.4.4";
|
|
12
12
|
/**
|
|
13
13
|
* @description Stores the current package version
|
|
14
14
|
* @summary A constant that holds the version string of the package, which is replaced during build
|
package/lib/version.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @const VERSION
|
|
5
5
|
* @memberOf module:CLI
|
|
6
6
|
*/
|
|
7
|
-
export declare const VERSION = "0.4.
|
|
7
|
+
export declare const VERSION = "0.4.4";
|
|
8
8
|
/**
|
|
9
9
|
* @description Stores the current package version
|
|
10
10
|
* @summary A constant that holds the version string of the package, which is replaced during build
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decaf-ts/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"description": "cli for decaf-ts projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -55,7 +55,8 @@
|
|
|
55
55
|
},
|
|
56
56
|
"files": [
|
|
57
57
|
"lib",
|
|
58
|
-
"dist"
|
|
58
|
+
"dist",
|
|
59
|
+
"workdocs/assets/slogans.json"
|
|
59
60
|
],
|
|
60
61
|
"keywords": [
|
|
61
62
|
"cli",
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"Slogan": "CLI: Your code’s command‑line calm in a caffeinated world.",
|
|
4
|
+
"Tags": "CLI, Coffee‑themed, Developer"
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"Slogan": "Run commands, not your heartbeat.",
|
|
8
|
+
"Tags": "CLI, Calm, Humor"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"Slogan": "Install once. Ship features forever. No caffeine required.",
|
|
12
|
+
"Tags": "Workflow, Coffee‑themed, Productivity"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"Slogan": "The CLI that brews your releases smoother than your morning decaf.",
|
|
16
|
+
"Tags": "Release, Coffee‑themed, DevX"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"Slogan": "Command‑line interface that doesn’t interface with your panic button.",
|
|
20
|
+
"Tags": "CLI, Calm, Humor"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"Slogan": "Generate, test, deploy — with a gentle click, not a frantic chase.",
|
|
24
|
+
"Tags": "CLI, DevOps, Calm"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"Slogan": "Scaffolding without the caffeine crash.",
|
|
28
|
+
"Tags": "Scaffolding, Coffee‑themed, Developer"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"Slogan": "CLI commands so smooth you’ll forget you typed them.",
|
|
32
|
+
"Tags": "CLI, Chill, Developer"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"Slogan": "Bump version, tag release, sip coffee. Repeat.",
|
|
36
|
+
"Tags": "Release, Coffee‑themed, Humor"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"Slogan": "Your terminal’s new best friend — decaf‑approved.",
|
|
40
|
+
"Tags": "Terminal, Branding, Coffee‑themed"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"Slogan": "CLI this. Command that. Without causing your dev heart to spike.",
|
|
44
|
+
"Tags": "CLI, Calm, Developer"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"Slogan": "Scripts that serve features, not adrenaline.",
|
|
48
|
+
"Tags": "Scripts, Calm, Technical"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"Slogan": "Automate the boring parts. Relax during the rest.",
|
|
52
|
+
"Tags": "Automation, Productivity, Calm"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"Slogan": "CLI with barista‑level polish.",
|
|
56
|
+
"Tags": "CLI, Coffee‑themed, UX"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"Slogan": "Deployments that feel like Sunday brunch.",
|
|
60
|
+
"Tags": "Deploy, Chill, Metaphor"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"Slogan": "Run generator. Grab decaf. Celebrate minimal bug count.",
|
|
64
|
+
"Tags": "Generator, Coffee‑themed, Fun"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"Slogan": "Your tooling should relax you, not stress you — CLI included.",
|
|
68
|
+
"Tags": "DevTools, Calm, Developer"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"Slogan": "Command‑line magic that doesn’t require caffeine spells.",
|
|
72
|
+
"Tags": "CLI, Humor, Calm"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"Slogan": "CLI: Because your code deserves smooth launches and smooth lattes.",
|
|
76
|
+
"Tags": "Release, Coffee‑themed, Branding"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"Slogan": "No caffeine jitters. Just clean builds.",
|
|
80
|
+
"Tags": "Build, Calm, Technical"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"Slogan": "Terminal tasks don’t need to feel like espresso shots.",
|
|
84
|
+
"Tags": "Terminal, Coffee‑themed, Developer"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"Slogan": "Execute commands. Exhale. Enjoy decaf.",
|
|
88
|
+
"Tags": "CLI, Calm, Workflow"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"Slogan": "From init to publish — a journey less frantic, more refined.",
|
|
92
|
+
"Tags": "CLI, Release, Calm"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"Slogan": "Scripts that flow like slow‑pour latte art.",
|
|
96
|
+
"Tags": "Scripts, Coffee‑themed, Fun"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"Slogan": "Your code’s new morning ritual: launch CLI, sip decaf, ship features.",
|
|
100
|
+
"Tags": "Workflow, Coffee‑themed, Developer"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"Slogan": "Generate templates. Delete boilerplate. Breathe deeply.",
|
|
104
|
+
"Tags": "Generator, Calm, Developer"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"Slogan": "CLI commands worthy of a café soundtrack.",
|
|
108
|
+
"Tags": "CLI, Humor, Branding"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"Slogan": "Stop sprinting through your tooling. Walk. Breathe. Ship.",
|
|
112
|
+
"Tags": "Workflow, Calm, DevX"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"Slogan": "Your terminal session: now in lounge mode.",
|
|
116
|
+
"Tags": "Terminal, Chill, Developer"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"Slogan": "From blank project to feature‑rich: all served decaf.",
|
|
120
|
+
"Tags": "Setup, Coffee‑themed, Productivity"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"Slogan": "Automate your release train without boarding a stress express.",
|
|
124
|
+
"Tags": "Release, Calm, Developer"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"Slogan": "The CLI that keeps your dev pulses steady.",
|
|
128
|
+
"Tags": "CLI, Wellness, Tech"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"Slogan": "Less sugar‑rush commands. More stable deployments.",
|
|
132
|
+
"Tags": "Deploy, Calm, Humor"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"Slogan": "Forge your project with elegance — no caffeine spikes needed.",
|
|
136
|
+
"Tags": "ProjectSetup, Calm, Developer"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"Slogan": "Terminal tasks done while your thoughts stay cool and collected.",
|
|
140
|
+
"Tags": "Terminal, Calm, DevX"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"Slogan": "CLI: Because productivity doesn’t require palpitations.",
|
|
144
|
+
"Tags": "CLI, Calm, Developer"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"Slogan": "Generate code while your coffee cools.",
|
|
148
|
+
"Tags": "Coffee‑themed, Generator, Fun"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"Slogan": "Launch scripts. Not panic attacks.",
|
|
152
|
+
"Tags": "Scripts, Calm, Humor"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"Slogan": "Your build scripts finally learned to chill.",
|
|
156
|
+
"Tags": "Build, Calm, Developer"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"Slogan": "From run‑nervous‑to‑build to run‑relax‑to‑ship.",
|
|
160
|
+
"Tags": "Workflow, Humor, Technical"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"Slogan": "Your code’s liftoff, no caffeine liftoff included.",
|
|
164
|
+
"Tags": "Release, Calm, Developer"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"Slogan": "CLI: the quiet hero of your dev stack.",
|
|
168
|
+
"Tags": "CLI, Branding, Chill"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"Slogan": "Script once. Breathe often.",
|
|
172
|
+
"Tags": "Automation, Calm, Developer"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"Slogan": "Deployments that sip, not slam.",
|
|
176
|
+
"Tags": "Deploy, Coffee‑themed, Fun"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"Slogan": "One CLI to rule them… quietly.",
|
|
180
|
+
"Tags": "CLI, Humor, Developer"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"Slogan": "Coffee in your mug. Calm in your terminal.",
|
|
184
|
+
"Tags": "Coffee‑themed, Terminal, Developer"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"Slogan": "CLI commands so smooth they pair with your decaf latte.",
|
|
188
|
+
"Tags": "CLI, Coffee‑themed, UX"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"Slogan": "Your dev stack’s decaf upgrade starts at the terminal.",
|
|
192
|
+
"Tags": "CLI, Branding, Developer"
|
|
193
|
+
}
|
|
194
|
+
]
|