@taqueria/toolkit 0.28.0 → 0.28.1-beta
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/bin/run.js +45 -26
- package/bin/run.js.map +1 -1
- package/bin/run.ts +11 -53
- package/env.d.ts +16 -0
- package/lib/README.md +1 -0
- package/lib/env.d.ts +16 -0
- package/lib/env.ts +67 -0
- package/package.json +5 -2
package/bin/run.js
CHANGED
|
@@ -21,10 +21,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
|
|
22
22
|
// bin/run.ts
|
|
23
23
|
var import_cross_spawn = require("cross-spawn");
|
|
24
|
-
var import_promises = __toESM(require("fs/promises"));
|
|
25
|
-
var import_promises2 = require("fs/promises");
|
|
26
|
-
var import_path = __toESM(require("path"));
|
|
27
24
|
var import_yargs = __toESM(require("yargs"));
|
|
25
|
+
|
|
26
|
+
// lib/env.ts
|
|
27
|
+
var import_promises = require("fs/promises");
|
|
28
|
+
var import_path = __toESM(require("path"));
|
|
28
29
|
var CustomErr = class extends Error {
|
|
29
30
|
};
|
|
30
31
|
var TaqNotFoundError = class extends CustomErr {
|
|
@@ -39,30 +40,12 @@ function isCustomError(err) {
|
|
|
39
40
|
async function checkTaqProject(dir) {
|
|
40
41
|
try {
|
|
41
42
|
const searchPath = import_path.default.join(dir, ".taq");
|
|
42
|
-
await (0,
|
|
43
|
+
await (0, import_promises.stat)(searchPath);
|
|
43
44
|
return searchPath;
|
|
44
45
|
} catch {
|
|
45
46
|
throw new TaqNotFoundError(`${dir} is not a valid Taqueria project.`);
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
function withArguments(cliArgs, fn) {
|
|
49
|
-
if (cliArgs[0].endsWith("node"))
|
|
50
|
-
cliArgs.shift();
|
|
51
|
-
const script = cliArgs.shift();
|
|
52
|
-
const parsedArgs = (0, import_yargs.default)(cliArgs).option("projectDir", {
|
|
53
|
-
alias: "p",
|
|
54
|
-
type: "string",
|
|
55
|
-
requiresArg: true
|
|
56
|
-
}).option("prefix", {
|
|
57
|
-
type: "string",
|
|
58
|
-
requiresArg: true,
|
|
59
|
-
default: ""
|
|
60
|
-
}).global(["projectDir"]).parseSync();
|
|
61
|
-
if (parsedArgs._.length > 0 && parsedArgs.projectDir) {
|
|
62
|
-
fn(parsedArgs.projectDir, parsedArgs.prefix, parsedArgs._.join(" "));
|
|
63
|
-
} else
|
|
64
|
-
console.log(`Usage: ${script} --projectDir <projectDir> [--prefix <prefix>] <command>`);
|
|
65
|
-
}
|
|
66
49
|
function getEnvName(filename, prefix = "") {
|
|
67
50
|
return `${prefix}TAQ_${filename}`.replace(".json", "").replace(/\./mg, "_").replace(/\-/mg, "_").toUpperCase();
|
|
68
51
|
}
|
|
@@ -70,14 +53,14 @@ var TaqConfigError = class extends CustomErr {
|
|
|
70
53
|
};
|
|
71
54
|
async function getConfig(taqDir, prefix) {
|
|
72
55
|
try {
|
|
73
|
-
const files = await import_promises.
|
|
56
|
+
const files = await (0, import_promises.readdir)(taqDir);
|
|
74
57
|
return files.reduce(
|
|
75
58
|
async (retval, file) => {
|
|
76
59
|
if (!file.endsWith(".json"))
|
|
77
60
|
return await retval;
|
|
78
61
|
return {
|
|
79
62
|
...await retval,
|
|
80
|
-
[getEnvName(file, prefix)]: await (0,
|
|
63
|
+
[getEnvName(file, prefix)]: await (0, import_promises.readFile)(import_path.default.join(taqDir, file), "utf-8")
|
|
81
64
|
};
|
|
82
65
|
},
|
|
83
66
|
Promise.resolve({})
|
|
@@ -88,16 +71,52 @@ async function getConfig(taqDir, prefix) {
|
|
|
88
71
|
);
|
|
89
72
|
}
|
|
90
73
|
}
|
|
74
|
+
async function getEncodedConfig(taqDir, prefix) {
|
|
75
|
+
const config = await getConfig(taqDir, prefix);
|
|
76
|
+
return Object.fromEntries(
|
|
77
|
+
Object.entries(config).map(
|
|
78
|
+
([k, v]) => [k, btoa(v)]
|
|
79
|
+
)
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// bin/run.ts
|
|
84
|
+
function withArguments(cliArgs, fn) {
|
|
85
|
+
if (cliArgs[0].endsWith("node"))
|
|
86
|
+
cliArgs.shift();
|
|
87
|
+
const script = cliArgs.shift();
|
|
88
|
+
const parsedArgs = (0, import_yargs.default)(cliArgs).option("projectDir", {
|
|
89
|
+
alias: "p",
|
|
90
|
+
type: "string",
|
|
91
|
+
requiresArg: true
|
|
92
|
+
}).option("prefix", {
|
|
93
|
+
type: "string",
|
|
94
|
+
requiresArg: true,
|
|
95
|
+
default: ""
|
|
96
|
+
}).global(["projectDir"]).parseSync();
|
|
97
|
+
if (parsedArgs._.length > 0 && parsedArgs.projectDir) {
|
|
98
|
+
fn(parsedArgs.projectDir, parsedArgs.prefix, parsedArgs._.join(" "));
|
|
99
|
+
} else
|
|
100
|
+
console.log(`Usage: ${script} --projectDir <projectDir> [--prefix <prefix>] <command>`);
|
|
101
|
+
}
|
|
91
102
|
function toCommandWithEnvVars(cmd, config) {
|
|
92
103
|
return Object.entries(config).reduce(
|
|
93
|
-
(retval, [key, value]) =>
|
|
104
|
+
(retval, [key, value]) => {
|
|
105
|
+
try {
|
|
106
|
+
return `${key}=${value} ${retval}`;
|
|
107
|
+
} catch (err) {
|
|
108
|
+
console.warn(`Could not set ${key}`);
|
|
109
|
+
console.warn("Check the contents of the associated file and ensure that it can be Base64 encoded.");
|
|
110
|
+
return retval;
|
|
111
|
+
}
|
|
112
|
+
},
|
|
94
113
|
cmd
|
|
95
114
|
);
|
|
96
115
|
}
|
|
97
116
|
async function run(projectDir, prefix, cmd) {
|
|
98
117
|
try {
|
|
99
118
|
const taqDir = await checkTaqProject(projectDir);
|
|
100
|
-
const config = await
|
|
119
|
+
const config = await getEncodedConfig(taqDir, prefix);
|
|
101
120
|
const cmdWithEnvVars = toCommandWithEnvVars(cmd, config);
|
|
102
121
|
(0, import_cross_spawn.spawn)(cmdWithEnvVars, {
|
|
103
122
|
shell: true,
|
package/bin/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["run.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { spawn } from 'cross-spawn';\nimport
|
|
1
|
+
{"version":3,"sources":["run.ts","../lib/env.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { spawn } from 'cross-spawn';\nimport path from 'path';\nimport yargs from 'yargs';\nimport { checkTaqProject, getEncodedConfig, isCustomError } from '../lib/env';\n\nfunction withArguments(cliArgs: string[], fn: (projectDir: string, prefix: string, cmd: string) => Promise<void>) {\n\tif (cliArgs[0].endsWith('node')) cliArgs.shift();\n\n\tconst script = cliArgs.shift();\n\n\tconst parsedArgs = yargs(cliArgs)\n\t\t.option('projectDir', {\n\t\t\talias: 'p',\n\t\t\ttype: 'string',\n\t\t\trequiresArg: true,\n\t\t})\n\t\t.option('prefix', {\n\t\t\ttype: 'string',\n\t\t\trequiresArg: true,\n\t\t\tdefault: '',\n\t\t})\n\t\t.global(['projectDir'])\n\t\t.parseSync();\n\n\tif (parsedArgs._.length > 0 && parsedArgs.projectDir) {\n\t\tfn(parsedArgs.projectDir, parsedArgs.prefix, parsedArgs._.join(' '));\n\t} else console.log(`Usage: ${script} --projectDir <projectDir> [--prefix <prefix>] <command>`);\n}\n\nfunction toCommandWithEnvVars(cmd: string, config: Record<string, string>) {\n\treturn Object.entries(config).reduce(\n\t\t(retval, [key, value]) => {\n\t\t\ttry {\n\t\t\t\treturn `${key}=${value} ${retval}`;\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(`Could not set ${key}`);\n\t\t\t\tconsole.warn('Check the contents of the associated file and ensure that it can be Base64 encoded.');\n\t\t\t\treturn retval;\n\t\t\t}\n\t\t},\n\t\tcmd,\n\t);\n}\n\nasync function run(projectDir: string, prefix: string, cmd: string) {\n\ttry {\n\t\tconst taqDir = await checkTaqProject(projectDir);\n\t\tconst config = await getEncodedConfig(taqDir, prefix);\n\t\tconst cmdWithEnvVars = toCommandWithEnvVars(cmd, config);\n\n\t\tspawn(cmdWithEnvVars, {\n\t\t\tshell: true,\n\t\t\tstdio: 'inherit',\n\t\t});\n\t} catch (err) {\n\t\tif (isCustomError(err)) {\n\t\t\tconsole.error(err.message);\n\t\t\treturn;\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nwithArguments(process.argv, run);\n","import { readdir, readFile, stat } from 'fs/promises';\nimport path from 'path';\n\nclass CustomErr extends Error {}\n\nexport class TaqNotFoundError extends CustomErr {\n\tpublic isCustomErr = true;\n}\n\nexport function isCustomError(err: unknown): err is Error {\n\treturn typeof err === 'object' && (err as object).hasOwnProperty('isCustomErr');\n}\n\nexport async function checkTaqProject(dir: string) {\n\ttry {\n\t\tconst searchPath = path.join(dir, '.taq');\n\t\tawait stat(searchPath);\n\t\treturn searchPath;\n\t} catch {\n\t\tthrow new TaqNotFoundError(`${dir} is not a valid Taqueria project.`);\n\t}\n}\n\nfunction getEnvName(filename: string, prefix = '') {\n\treturn `${prefix}TAQ_${filename}`\n\t\t.replace('.json', '')\n\t\t.replace(/\\./mg, '_')\n\t\t.replace(/\\-/mg, '_')\n\t\t.toUpperCase();\n}\n\nexport class TaqConfigError extends CustomErr {}\nexport async function getConfig(taqDir: string, prefix: string) {\n\ttry {\n\t\tconst files = await readdir(taqDir);\n\t\treturn files.reduce(\n\t\t\tasync (retval, file) => {\n\t\t\t\tif (!file.endsWith('.json')) return (await retval);\n\t\t\t\treturn {\n\t\t\t\t\t...(await retval),\n\t\t\t\t\t[getEnvName(file, prefix)]: await readFile(path.join(taqDir, file), 'utf-8'),\n\t\t\t\t};\n\t\t\t},\n\t\t\tPromise.resolve({}),\n\t\t);\n\t} catch {\n\t\tthrow new TaqConfigError(\n\t\t\t`There was a problem reading the config files in ${taqDir}. Please check file permissions are try again.`,\n\t\t);\n\t}\n}\n\nexport async function getEncodedConfig(taqDir: string, prefix: string) {\n\tconst config = await getConfig(taqDir, prefix);\n\treturn Object.fromEntries(\n\t\tObject.entries(config).map(\n\t\t\t([k, v]) => [k, btoa(v as string)],\n\t\t),\n\t);\n}\n\nexport async function getEnv(env: typeof process.env, taqDir: string, prefix: string = '') {\n\treturn Object.entries(getEncodedConfig(taqDir, prefix)).reduce(\n\t\t(retval, [k, v]) => ({ ...retval, [k]: v }),\n\t\tenv,\n\t);\n}\n"],"mappings":"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","names":["path","yargs"]}
|
package/bin/run.ts
CHANGED
|
@@ -1,29 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { spawn } from 'cross-spawn';
|
|
3
|
-
import fs from 'fs/promises';
|
|
4
|
-
import { readFile, stat } from 'fs/promises';
|
|
5
3
|
import path from 'path';
|
|
6
4
|
import yargs from 'yargs';
|
|
7
|
-
|
|
8
|
-
class CustomErr extends Error {}
|
|
9
|
-
|
|
10
|
-
class TaqNotFoundError extends CustomErr {
|
|
11
|
-
public isCustomErr = true;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function isCustomError(err: unknown): err is Error {
|
|
15
|
-
return typeof err === 'object' && (err as object).hasOwnProperty('isCustomErr');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async function checkTaqProject(dir: string) {
|
|
19
|
-
try {
|
|
20
|
-
const searchPath = path.join(dir, '.taq');
|
|
21
|
-
await stat(searchPath);
|
|
22
|
-
return searchPath;
|
|
23
|
-
} catch {
|
|
24
|
-
throw new TaqNotFoundError(`${dir} is not a valid Taqueria project.`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
5
|
+
import { checkTaqProject, getEncodedConfig, isCustomError } from '../lib/env';
|
|
27
6
|
|
|
28
7
|
function withArguments(cliArgs: string[], fn: (projectDir: string, prefix: string, cmd: string) => Promise<void>) {
|
|
29
8
|
if (cliArgs[0].endsWith('node')) cliArgs.shift();
|
|
@@ -49,38 +28,17 @@ function withArguments(cliArgs: string[], fn: (projectDir: string, prefix: strin
|
|
|
49
28
|
} else console.log(`Usage: ${script} --projectDir <projectDir> [--prefix <prefix>] <command>`);
|
|
50
29
|
}
|
|
51
30
|
|
|
52
|
-
function getEnvName(filename: string, prefix = '') {
|
|
53
|
-
return `${prefix}TAQ_${filename}`
|
|
54
|
-
.replace('.json', '')
|
|
55
|
-
.replace(/\./mg, '_')
|
|
56
|
-
.replace(/\-/mg, '_')
|
|
57
|
-
.toUpperCase();
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
class TaqConfigError extends CustomErr {}
|
|
61
|
-
async function getConfig(taqDir: string, prefix: string) {
|
|
62
|
-
try {
|
|
63
|
-
const files = await fs.readdir(taqDir);
|
|
64
|
-
return files.reduce(
|
|
65
|
-
async (retval, file) => {
|
|
66
|
-
if (!file.endsWith('.json')) return (await retval);
|
|
67
|
-
return {
|
|
68
|
-
...(await retval),
|
|
69
|
-
[getEnvName(file, prefix)]: await readFile(path.join(taqDir, file), 'utf-8'),
|
|
70
|
-
};
|
|
71
|
-
},
|
|
72
|
-
Promise.resolve({}),
|
|
73
|
-
);
|
|
74
|
-
} catch {
|
|
75
|
-
throw new TaqConfigError(
|
|
76
|
-
`There was a problem reading the config files in ${taqDir}. Please check file permissions are try again.`,
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
31
|
function toCommandWithEnvVars(cmd: string, config: Record<string, string>) {
|
|
82
32
|
return Object.entries(config).reduce(
|
|
83
|
-
(retval, [key, value]) =>
|
|
33
|
+
(retval, [key, value]) => {
|
|
34
|
+
try {
|
|
35
|
+
return `${key}=${value} ${retval}`;
|
|
36
|
+
} catch (err) {
|
|
37
|
+
console.warn(`Could not set ${key}`);
|
|
38
|
+
console.warn('Check the contents of the associated file and ensure that it can be Base64 encoded.');
|
|
39
|
+
return retval;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
84
42
|
cmd,
|
|
85
43
|
);
|
|
86
44
|
}
|
|
@@ -88,7 +46,7 @@ function toCommandWithEnvVars(cmd: string, config: Record<string, string>) {
|
|
|
88
46
|
async function run(projectDir: string, prefix: string, cmd: string) {
|
|
89
47
|
try {
|
|
90
48
|
const taqDir = await checkTaqProject(projectDir);
|
|
91
|
-
const config = await
|
|
49
|
+
const config = await getEncodedConfig(taqDir, prefix);
|
|
92
50
|
const cmdWithEnvVars = toCommandWithEnvVars(cmd, config);
|
|
93
51
|
|
|
94
52
|
spawn(cmdWithEnvVars, {
|
package/env.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
declare class CustomErr extends Error {
|
|
3
|
+
}
|
|
4
|
+
export declare class TaqNotFoundError extends CustomErr {
|
|
5
|
+
isCustomErr: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function isCustomError(err: unknown): err is Error;
|
|
8
|
+
export declare function checkTaqProject(dir: string): Promise<string>;
|
|
9
|
+
export declare class TaqConfigError extends CustomErr {
|
|
10
|
+
}
|
|
11
|
+
export declare function getConfig(taqDir: string, prefix: string): Promise<{}>;
|
|
12
|
+
export declare function getEncodedConfig(taqDir: string, prefix: string): Promise<{
|
|
13
|
+
[k: string]: string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function getEnv(taqDir: string, prefix: string, env: typeof process.env): Promise<NodeJS.ProcessEnv>;
|
|
16
|
+
export {};
|
package/lib/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This directory contains packages that are NodeJS specific
|
package/lib/env.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
declare class CustomErr extends Error {
|
|
3
|
+
}
|
|
4
|
+
export declare class TaqNotFoundError extends CustomErr {
|
|
5
|
+
isCustomErr: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function isCustomError(err: unknown): err is Error;
|
|
8
|
+
export declare function checkTaqProject(dir: string): Promise<string>;
|
|
9
|
+
export declare class TaqConfigError extends CustomErr {
|
|
10
|
+
}
|
|
11
|
+
export declare function getConfig(taqDir: string, prefix: string): Promise<{}>;
|
|
12
|
+
export declare function getEncodedConfig(taqDir: string, prefix: string): Promise<{
|
|
13
|
+
[k: string]: string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function getEnv(env: typeof process.env, taqDir: string, prefix?: string): Promise<NodeJS.ProcessEnv>;
|
|
16
|
+
export {};
|
package/lib/env.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { readdir, readFile, stat } from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
class CustomErr extends Error {}
|
|
5
|
+
|
|
6
|
+
export class TaqNotFoundError extends CustomErr {
|
|
7
|
+
public isCustomErr = true;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function isCustomError(err: unknown): err is Error {
|
|
11
|
+
return typeof err === 'object' && (err as object).hasOwnProperty('isCustomErr');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function checkTaqProject(dir: string) {
|
|
15
|
+
try {
|
|
16
|
+
const searchPath = path.join(dir, '.taq');
|
|
17
|
+
await stat(searchPath);
|
|
18
|
+
return searchPath;
|
|
19
|
+
} catch {
|
|
20
|
+
throw new TaqNotFoundError(`${dir} is not a valid Taqueria project.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getEnvName(filename: string, prefix = '') {
|
|
25
|
+
return `${prefix}TAQ_${filename}`
|
|
26
|
+
.replace('.json', '')
|
|
27
|
+
.replace(/\./mg, '_')
|
|
28
|
+
.replace(/\-/mg, '_')
|
|
29
|
+
.toUpperCase();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class TaqConfigError extends CustomErr {}
|
|
33
|
+
export async function getConfig(taqDir: string, prefix: string) {
|
|
34
|
+
try {
|
|
35
|
+
const files = await readdir(taqDir);
|
|
36
|
+
return files.reduce(
|
|
37
|
+
async (retval, file) => {
|
|
38
|
+
if (!file.endsWith('.json')) return (await retval);
|
|
39
|
+
return {
|
|
40
|
+
...(await retval),
|
|
41
|
+
[getEnvName(file, prefix)]: await readFile(path.join(taqDir, file), 'utf-8'),
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
Promise.resolve({}),
|
|
45
|
+
);
|
|
46
|
+
} catch {
|
|
47
|
+
throw new TaqConfigError(
|
|
48
|
+
`There was a problem reading the config files in ${taqDir}. Please check file permissions are try again.`,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export async function getEncodedConfig(taqDir: string, prefix: string) {
|
|
54
|
+
const config = await getConfig(taqDir, prefix);
|
|
55
|
+
return Object.fromEntries(
|
|
56
|
+
Object.entries(config).map(
|
|
57
|
+
([k, v]) => [k, btoa(v as string)],
|
|
58
|
+
),
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export async function getEnv(env: typeof process.env, taqDir: string, prefix: string = '') {
|
|
63
|
+
return Object.entries(getEncodedConfig(taqDir, prefix)).reduce(
|
|
64
|
+
(retval, [k, v]) => ({ ...retval, [k]: v }),
|
|
65
|
+
env,
|
|
66
|
+
);
|
|
67
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taqueria/toolkit",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.1-beta",
|
|
4
4
|
"description": "A TypeScript library for NodeJS to work with Taqueria projects",
|
|
5
5
|
"source": "./index.ts",
|
|
6
6
|
"bin": {
|
|
@@ -66,5 +66,8 @@
|
|
|
66
66
|
"skipNodeModulesBundle": true,
|
|
67
67
|
"platform": "node"
|
|
68
68
|
}
|
|
69
|
-
]
|
|
69
|
+
],
|
|
70
|
+
"exports": {
|
|
71
|
+
"./lib/*": "./lib/*"
|
|
72
|
+
}
|
|
70
73
|
}
|