@akanjs/nest 1.0.7 → 1.0.8
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/cjs/src/authorization.js +2 -32
- package/cjs/src/generateSecrets.js +0 -23
- package/cjs/src/index.js +0 -21
- package/esm/src/authorization.js +1 -20
- package/esm/src/generateSecrets.js +0 -21
- package/esm/src/index.js +0 -5
- package/package.json +1 -1
- package/src/authorization.d.ts +0 -7
- package/src/generateSecrets.d.ts +0 -2
- package/src/index.d.ts +0 -2
- package/src/pipes.d.ts +2 -2
- package/cjs/src/exporter.js +0 -113
- package/esm/src/exporter.js +0 -76
- package/src/exporter.d.ts +0 -22
package/cjs/src/authorization.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
5
|
var __export = (target, all) => {
|
|
8
6
|
for (var name in all)
|
|
@@ -16,43 +14,16 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
14
|
}
|
|
17
15
|
return to;
|
|
18
16
|
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
18
|
var authorization_exports = {};
|
|
29
19
|
__export(authorization_exports, {
|
|
30
20
|
getArgs: () => getArgs,
|
|
31
21
|
getRequest: () => getRequest,
|
|
32
22
|
getResponse: () => getResponse,
|
|
33
|
-
getSocket: () => getSocket
|
|
34
|
-
resolveJwt: () => resolveJwt
|
|
23
|
+
getSocket: () => getSocket
|
|
35
24
|
});
|
|
36
25
|
module.exports = __toCommonJS(authorization_exports);
|
|
37
|
-
var import_base = require("@akanjs/base");
|
|
38
|
-
var import_common = require("@akanjs/common");
|
|
39
26
|
var import_graphql = require("@nestjs/graphql");
|
|
40
|
-
var jwt = __toESM(require("jsonwebtoken"));
|
|
41
|
-
const resolveJwt = (secret, authorization, defaultResolved) => {
|
|
42
|
-
const [type, token] = authorization?.split(" ") ?? [void 0, void 0];
|
|
43
|
-
if (!token || type !== "Bearer")
|
|
44
|
-
return defaultResolved;
|
|
45
|
-
try {
|
|
46
|
-
const resolved = jwt.verify(token, secret);
|
|
47
|
-
if (resolved.appName !== import_base.baseEnv.appName || resolved.environment !== import_base.baseEnv.environment)
|
|
48
|
-
return defaultResolved;
|
|
49
|
-
return resolved;
|
|
50
|
-
} catch (e) {
|
|
51
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
52
|
-
import_common.Logger.error(`failed to verify token for ${authorization}: ${message}`);
|
|
53
|
-
return defaultResolved;
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
27
|
const getRequest = (context) => {
|
|
57
28
|
const type = context.getType();
|
|
58
29
|
if (type === "ws")
|
|
@@ -89,6 +60,5 @@ const getSocket = (context) => {
|
|
|
89
60
|
getArgs,
|
|
90
61
|
getRequest,
|
|
91
62
|
getResponse,
|
|
92
|
-
getSocket
|
|
93
|
-
resolveJwt
|
|
63
|
+
getSocket
|
|
94
64
|
});
|
|
@@ -18,9 +18,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
18
18
|
var generateSecrets_exports = {};
|
|
19
19
|
__export(generateSecrets_exports, {
|
|
20
20
|
SALT_ROUNDS: () => SALT_ROUNDS,
|
|
21
|
-
generateAeskey: () => generateAeskey,
|
|
22
21
|
generateHost: () => generateHost,
|
|
23
|
-
generateJwtSecret: () => generateJwtSecret,
|
|
24
22
|
generateMeiliKey: () => generateMeiliKey,
|
|
25
23
|
generateMeiliUri: () => generateMeiliUri,
|
|
26
24
|
generateMongoUri: () => generateMongoUri,
|
|
@@ -28,26 +26,7 @@ __export(generateSecrets_exports, {
|
|
|
28
26
|
});
|
|
29
27
|
module.exports = __toCommonJS(generateSecrets_exports);
|
|
30
28
|
var import_base = require("@akanjs/base");
|
|
31
|
-
var import_crypto = require("crypto");
|
|
32
29
|
var import_tunnel_ssh = require("tunnel-ssh");
|
|
33
|
-
const generateHexStringFromSeed = (seed, length = 256) => {
|
|
34
|
-
let hexString = "";
|
|
35
|
-
let currentSeed = seed;
|
|
36
|
-
while (hexString.length < length * 2) {
|
|
37
|
-
const hash = (0, import_crypto.createHash)("sha256").update(currentSeed).digest("hex");
|
|
38
|
-
hexString += hash;
|
|
39
|
-
currentSeed = hash;
|
|
40
|
-
}
|
|
41
|
-
return hexString.substring(0, length * 2);
|
|
42
|
-
};
|
|
43
|
-
const generateJwtSecret = (appName, environment) => {
|
|
44
|
-
const seed = `${appName}-${environment}-jwt-secret`;
|
|
45
|
-
return generateHexStringFromSeed(seed);
|
|
46
|
-
};
|
|
47
|
-
const generateAeskey = (appName, environment) => {
|
|
48
|
-
const seed = `${appName}-${environment}-aes-key`;
|
|
49
|
-
return (0, import_crypto.createHash)("sha256").update(seed).digest("hex");
|
|
50
|
-
};
|
|
51
30
|
const DEFAULT_CLOUD_PORT = 3e4;
|
|
52
31
|
const getEnvironmentPort = (environment) => environment === "main" ? 2e3 : environment === "develop" ? 1e3 : environment === "debug" ? 0 : 0;
|
|
53
32
|
const getServicePort = (service) => service === "redis" ? 300 : service === "mongo" ? 400 : 500;
|
|
@@ -138,9 +117,7 @@ const generateMeiliKey = ({ appName, environment }) => {
|
|
|
138
117
|
// Annotate the CommonJS export names for ESM import in node:
|
|
139
118
|
0 && (module.exports = {
|
|
140
119
|
SALT_ROUNDS,
|
|
141
|
-
generateAeskey,
|
|
142
120
|
generateHost,
|
|
143
|
-
generateJwtSecret,
|
|
144
121
|
generateMeiliKey,
|
|
145
122
|
generateMeiliUri,
|
|
146
123
|
generateMongoUri,
|
package/cjs/src/index.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
5
|
var __copyProps = (to, from, except, desc) => {
|
|
12
6
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
7
|
for (let key of __getOwnPropNames(from))
|
|
@@ -17,27 +11,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
11
|
return to;
|
|
18
12
|
};
|
|
19
13
|
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
14
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
15
|
var src_exports = {};
|
|
30
|
-
__export(src_exports, {
|
|
31
|
-
Exporter: () => Exporter
|
|
32
|
-
});
|
|
33
16
|
module.exports = __toCommonJS(src_exports);
|
|
34
17
|
__reExport(src_exports, require("./authorization"), module.exports);
|
|
35
18
|
__reExport(src_exports, require("./guards"), module.exports);
|
|
36
19
|
__reExport(src_exports, require("./interceptors"), module.exports);
|
|
37
20
|
__reExport(src_exports, require("./redis-io.adapter"), module.exports);
|
|
38
21
|
__reExport(src_exports, require("./pipes"), module.exports);
|
|
39
|
-
var Exporter = __toESM(require("./exporter"));
|
|
40
|
-
__reExport(src_exports, require("./exporter"), module.exports);
|
|
41
22
|
__reExport(src_exports, require("./exceptions"), module.exports);
|
|
42
23
|
__reExport(src_exports, require("./generateSecrets"), module.exports);
|
|
43
24
|
__reExport(src_exports, require("./mongoose"), module.exports);
|
|
@@ -49,13 +30,11 @@ __reExport(src_exports, require("./internalParams"), module.exports);
|
|
|
49
30
|
__reExport(src_exports, require("./guards"), module.exports);
|
|
50
31
|
// Annotate the CommonJS export names for ESM import in node:
|
|
51
32
|
0 && (module.exports = {
|
|
52
|
-
Exporter,
|
|
53
33
|
...require("./authorization"),
|
|
54
34
|
...require("./guards"),
|
|
55
35
|
...require("./interceptors"),
|
|
56
36
|
...require("./redis-io.adapter"),
|
|
57
37
|
...require("./pipes"),
|
|
58
|
-
...require("./exporter"),
|
|
59
38
|
...require("./exceptions"),
|
|
60
39
|
...require("./generateSecrets"),
|
|
61
40
|
...require("./mongoose"),
|
package/esm/src/authorization.js
CHANGED
|
@@ -1,22 +1,4 @@
|
|
|
1
|
-
import { baseEnv } from "@akanjs/base";
|
|
2
|
-
import { Logger } from "@akanjs/common";
|
|
3
1
|
import { GqlExecutionContext } from "@nestjs/graphql";
|
|
4
|
-
import * as jwt from "jsonwebtoken";
|
|
5
|
-
const resolveJwt = (secret, authorization, defaultResolved) => {
|
|
6
|
-
const [type, token] = authorization?.split(" ") ?? [void 0, void 0];
|
|
7
|
-
if (!token || type !== "Bearer")
|
|
8
|
-
return defaultResolved;
|
|
9
|
-
try {
|
|
10
|
-
const resolved = jwt.verify(token, secret);
|
|
11
|
-
if (resolved.appName !== baseEnv.appName || resolved.environment !== baseEnv.environment)
|
|
12
|
-
return defaultResolved;
|
|
13
|
-
return resolved;
|
|
14
|
-
} catch (e) {
|
|
15
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
16
|
-
Logger.error(`failed to verify token for ${authorization}: ${message}`);
|
|
17
|
-
return defaultResolved;
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
2
|
const getRequest = (context) => {
|
|
21
3
|
const type = context.getType();
|
|
22
4
|
if (type === "ws")
|
|
@@ -52,6 +34,5 @@ export {
|
|
|
52
34
|
getArgs,
|
|
53
35
|
getRequest,
|
|
54
36
|
getResponse,
|
|
55
|
-
getSocket
|
|
56
|
-
resolveJwt
|
|
37
|
+
getSocket
|
|
57
38
|
};
|
|
@@ -1,24 +1,5 @@
|
|
|
1
1
|
import { baseEnv } from "@akanjs/base";
|
|
2
|
-
import { createHash } from "crypto";
|
|
3
2
|
import { createTunnel } from "tunnel-ssh";
|
|
4
|
-
const generateHexStringFromSeed = (seed, length = 256) => {
|
|
5
|
-
let hexString = "";
|
|
6
|
-
let currentSeed = seed;
|
|
7
|
-
while (hexString.length < length * 2) {
|
|
8
|
-
const hash = createHash("sha256").update(currentSeed).digest("hex");
|
|
9
|
-
hexString += hash;
|
|
10
|
-
currentSeed = hash;
|
|
11
|
-
}
|
|
12
|
-
return hexString.substring(0, length * 2);
|
|
13
|
-
};
|
|
14
|
-
const generateJwtSecret = (appName, environment) => {
|
|
15
|
-
const seed = `${appName}-${environment}-jwt-secret`;
|
|
16
|
-
return generateHexStringFromSeed(seed);
|
|
17
|
-
};
|
|
18
|
-
const generateAeskey = (appName, environment) => {
|
|
19
|
-
const seed = `${appName}-${environment}-aes-key`;
|
|
20
|
-
return createHash("sha256").update(seed).digest("hex");
|
|
21
|
-
};
|
|
22
3
|
const DEFAULT_CLOUD_PORT = 3e4;
|
|
23
4
|
const getEnvironmentPort = (environment) => environment === "main" ? 2e3 : environment === "develop" ? 1e3 : environment === "debug" ? 0 : 0;
|
|
24
5
|
const getServicePort = (service) => service === "redis" ? 300 : service === "mongo" ? 400 : 500;
|
|
@@ -108,9 +89,7 @@ const generateMeiliKey = ({ appName, environment }) => {
|
|
|
108
89
|
};
|
|
109
90
|
export {
|
|
110
91
|
SALT_ROUNDS,
|
|
111
|
-
generateAeskey,
|
|
112
92
|
generateHost,
|
|
113
|
-
generateJwtSecret,
|
|
114
93
|
generateMeiliKey,
|
|
115
94
|
generateMeiliUri,
|
|
116
95
|
generateMongoUri,
|
package/esm/src/index.js
CHANGED
|
@@ -3,8 +3,6 @@ export * from "./guards";
|
|
|
3
3
|
export * from "./interceptors";
|
|
4
4
|
export * from "./redis-io.adapter";
|
|
5
5
|
export * from "./pipes";
|
|
6
|
-
import * as Exporter from "./exporter";
|
|
7
|
-
export * from "./exporter";
|
|
8
6
|
export * from "./exceptions";
|
|
9
7
|
export * from "./generateSecrets";
|
|
10
8
|
export * from "./mongoose";
|
|
@@ -14,6 +12,3 @@ export * from "./databaseClient";
|
|
|
14
12
|
export * from "./decorators";
|
|
15
13
|
export * from "./internalParams";
|
|
16
14
|
export * from "./guards";
|
|
17
|
-
export {
|
|
18
|
-
Exporter
|
|
19
|
-
};
|
package/package.json
CHANGED
package/src/authorization.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import { Environment } from "@akanjs/base";
|
|
2
1
|
import { ExecutionContext } from "@nestjs/common";
|
|
3
2
|
import { Socket } from "socket.io";
|
|
4
|
-
interface ResolvedToken {
|
|
5
|
-
appName: string;
|
|
6
|
-
environment: Environment;
|
|
7
|
-
}
|
|
8
|
-
export declare const resolveJwt: <Resolved extends ResolvedToken>(secret: string, authorization: string | undefined, defaultResolved: Resolved) => Resolved;
|
|
9
3
|
export interface ReqType {
|
|
10
4
|
method: string;
|
|
11
5
|
url: string;
|
|
@@ -25,4 +19,3 @@ export declare const getArgs: (context: ExecutionContext) => {
|
|
|
25
19
|
[key: string]: any;
|
|
26
20
|
};
|
|
27
21
|
export declare const getSocket: (context: ExecutionContext) => Socket<import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, any>;
|
|
28
|
-
export {};
|
package/src/generateSecrets.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { BackendEnv, type BaseEnv } from "@akanjs/base";
|
|
2
2
|
import { SshOptions } from "tunnel-ssh";
|
|
3
|
-
export declare const generateJwtSecret: (appName: string, environment: BaseEnv["environment"]) => string;
|
|
4
|
-
export declare const generateAeskey: (appName: string, environment: BaseEnv["environment"]) => string;
|
|
5
3
|
interface RedisEnv {
|
|
6
4
|
appName: string;
|
|
7
5
|
environment: BaseEnv["environment"];
|
package/src/index.d.ts
CHANGED
|
@@ -3,8 +3,6 @@ export * from "./guards";
|
|
|
3
3
|
export * from "./interceptors";
|
|
4
4
|
export * from "./redis-io.adapter";
|
|
5
5
|
export * from "./pipes";
|
|
6
|
-
export * as Exporter from "./exporter";
|
|
7
|
-
export * from "./exporter";
|
|
8
6
|
export * from "./exceptions";
|
|
9
7
|
export * from "./generateSecrets";
|
|
10
8
|
export * from "./mongoose";
|
package/src/pipes.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Type } from "@akanjs/base";
|
|
1
|
+
import { Dayjs, Type } from "@akanjs/base";
|
|
2
2
|
import { ArgMeta } from "@akanjs/signal";
|
|
3
3
|
import { ArgumentMetadata, PipeTransform } from "@nestjs/common";
|
|
4
4
|
import { Readable } from "stream";
|
|
@@ -15,7 +15,7 @@ export declare class BooleanPipe implements PipeTransform {
|
|
|
15
15
|
transform(value: string, metadata: ArgumentMetadata): boolean[];
|
|
16
16
|
}
|
|
17
17
|
export declare class DayjsPipe implements PipeTransform {
|
|
18
|
-
transform(value: string, metadata: ArgumentMetadata):
|
|
18
|
+
transform(value: string, metadata: ArgumentMetadata): Dayjs[];
|
|
19
19
|
}
|
|
20
20
|
export declare class JSONPipe implements PipeTransform {
|
|
21
21
|
transform(value: string | object, metadata: ArgumentMetadata): object;
|
package/cjs/src/exporter.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var exporter_exports = {};
|
|
29
|
-
__export(exporter_exports, {
|
|
30
|
-
FileSystem: () => FileSystem,
|
|
31
|
-
exportToCsv: () => exportToCsv,
|
|
32
|
-
exportToJson: () => exportToJson,
|
|
33
|
-
objPath: () => objPath,
|
|
34
|
-
readJson: () => readJson
|
|
35
|
-
});
|
|
36
|
-
module.exports = __toCommonJS(exporter_exports);
|
|
37
|
-
var fs = __toESM(require("fs"));
|
|
38
|
-
const objPath = (o, p) => p.split(".").reduce((a, v) => a[v], o);
|
|
39
|
-
class FileSystem {
|
|
40
|
-
filename = "";
|
|
41
|
-
dirname = "./";
|
|
42
|
-
writeStream;
|
|
43
|
-
constructor(dirname = "./", filename = "") {
|
|
44
|
-
this.dirname = dirname;
|
|
45
|
-
this.filename = filename;
|
|
46
|
-
}
|
|
47
|
-
async init() {
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
fs.mkdirSync(this.dirname, { recursive: true });
|
|
50
|
-
const writeStream = fs.createWriteStream(`${this.dirname}/${this.filename}.csv`);
|
|
51
|
-
if (!writeStream) {
|
|
52
|
-
reject(new Error("No WriteStream"));
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
writeStream.once(`open`, () => {
|
|
56
|
-
this.writeStream = writeStream;
|
|
57
|
-
resolve(writeStream);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
write(body) {
|
|
62
|
-
if (!this.writeStream)
|
|
63
|
-
throw new Error("no write stream");
|
|
64
|
-
return this.writeStream.write(`${body.replace(/\n/g, "")}
|
|
65
|
-
`);
|
|
66
|
-
}
|
|
67
|
-
// async finish() {}
|
|
68
|
-
}
|
|
69
|
-
const exportToCsv = async ({ items, path, fields, delimiter, options }) => {
|
|
70
|
-
return new Promise((resolve, reject) => {
|
|
71
|
-
const dirs = path.split("/");
|
|
72
|
-
if (dirs.length > 1) {
|
|
73
|
-
const dirname = dirs.slice(-1).join("/");
|
|
74
|
-
if (!fs.existsSync(dirname))
|
|
75
|
-
fs.mkdirSync(dirname, { recursive: true });
|
|
76
|
-
}
|
|
77
|
-
if (!fields)
|
|
78
|
-
throw new Error("Fields Required");
|
|
79
|
-
const writeStream = !options?.append && fs.createWriteStream(path);
|
|
80
|
-
const header = fields.reduce((acc, cur) => acc + (delimiter ?? `,`) + cur) + `
|
|
81
|
-
`;
|
|
82
|
-
if (!writeStream) {
|
|
83
|
-
reject(new Error("No WriteStream"));
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
writeStream.once(`open`, () => {
|
|
87
|
-
writeStream.write(header);
|
|
88
|
-
for (const item of items) {
|
|
89
|
-
const data = fields.map((field) => objPath(item, field) ?? null).map((field) => String(field).replace(/\n/g, "").replace(/,/g, ""));
|
|
90
|
-
const body = data.reduce((acc, cur) => acc + (delimiter ?? `,`) + cur) + `
|
|
91
|
-
`;
|
|
92
|
-
if (options?.append)
|
|
93
|
-
fs.appendFileSync(path, body);
|
|
94
|
-
}
|
|
95
|
-
resolve();
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
const exportToJson = (items, localPath) => {
|
|
100
|
-
const dirname = localPath.split("/").slice(0, -1).join("/");
|
|
101
|
-
if (!fs.existsSync(dirname))
|
|
102
|
-
fs.mkdirSync(dirname, { recursive: true });
|
|
103
|
-
fs.writeFileSync(localPath, JSON.stringify(items));
|
|
104
|
-
};
|
|
105
|
-
const readJson = (localPath) => JSON.parse(fs.readFileSync(localPath).toString("utf-8"));
|
|
106
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
107
|
-
0 && (module.exports = {
|
|
108
|
-
FileSystem,
|
|
109
|
-
exportToCsv,
|
|
110
|
-
exportToJson,
|
|
111
|
-
objPath,
|
|
112
|
-
readJson
|
|
113
|
-
});
|
package/esm/src/exporter.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
const objPath = (o, p) => p.split(".").reduce((a, v) => a[v], o);
|
|
3
|
-
class FileSystem {
|
|
4
|
-
filename = "";
|
|
5
|
-
dirname = "./";
|
|
6
|
-
writeStream;
|
|
7
|
-
constructor(dirname = "./", filename = "") {
|
|
8
|
-
this.dirname = dirname;
|
|
9
|
-
this.filename = filename;
|
|
10
|
-
}
|
|
11
|
-
async init() {
|
|
12
|
-
return new Promise((resolve, reject) => {
|
|
13
|
-
fs.mkdirSync(this.dirname, { recursive: true });
|
|
14
|
-
const writeStream = fs.createWriteStream(`${this.dirname}/${this.filename}.csv`);
|
|
15
|
-
if (!writeStream) {
|
|
16
|
-
reject(new Error("No WriteStream"));
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
writeStream.once(`open`, () => {
|
|
20
|
-
this.writeStream = writeStream;
|
|
21
|
-
resolve(writeStream);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
write(body) {
|
|
26
|
-
if (!this.writeStream)
|
|
27
|
-
throw new Error("no write stream");
|
|
28
|
-
return this.writeStream.write(`${body.replace(/\n/g, "")}
|
|
29
|
-
`);
|
|
30
|
-
}
|
|
31
|
-
// async finish() {}
|
|
32
|
-
}
|
|
33
|
-
const exportToCsv = async ({ items, path, fields, delimiter, options }) => {
|
|
34
|
-
return new Promise((resolve, reject) => {
|
|
35
|
-
const dirs = path.split("/");
|
|
36
|
-
if (dirs.length > 1) {
|
|
37
|
-
const dirname = dirs.slice(-1).join("/");
|
|
38
|
-
if (!fs.existsSync(dirname))
|
|
39
|
-
fs.mkdirSync(dirname, { recursive: true });
|
|
40
|
-
}
|
|
41
|
-
if (!fields)
|
|
42
|
-
throw new Error("Fields Required");
|
|
43
|
-
const writeStream = !options?.append && fs.createWriteStream(path);
|
|
44
|
-
const header = fields.reduce((acc, cur) => acc + (delimiter ?? `,`) + cur) + `
|
|
45
|
-
`;
|
|
46
|
-
if (!writeStream) {
|
|
47
|
-
reject(new Error("No WriteStream"));
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
writeStream.once(`open`, () => {
|
|
51
|
-
writeStream.write(header);
|
|
52
|
-
for (const item of items) {
|
|
53
|
-
const data = fields.map((field) => objPath(item, field) ?? null).map((field) => String(field).replace(/\n/g, "").replace(/,/g, ""));
|
|
54
|
-
const body = data.reduce((acc, cur) => acc + (delimiter ?? `,`) + cur) + `
|
|
55
|
-
`;
|
|
56
|
-
if (options?.append)
|
|
57
|
-
fs.appendFileSync(path, body);
|
|
58
|
-
}
|
|
59
|
-
resolve();
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
const exportToJson = (items, localPath) => {
|
|
64
|
-
const dirname = localPath.split("/").slice(0, -1).join("/");
|
|
65
|
-
if (!fs.existsSync(dirname))
|
|
66
|
-
fs.mkdirSync(dirname, { recursive: true });
|
|
67
|
-
fs.writeFileSync(localPath, JSON.stringify(items));
|
|
68
|
-
};
|
|
69
|
-
const readJson = (localPath) => JSON.parse(fs.readFileSync(localPath).toString("utf-8"));
|
|
70
|
-
export {
|
|
71
|
-
FileSystem,
|
|
72
|
-
exportToCsv,
|
|
73
|
-
exportToJson,
|
|
74
|
-
objPath,
|
|
75
|
-
readJson
|
|
76
|
-
};
|
package/src/exporter.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
export declare const objPath: (o: unknown, p: string) => unknown;
|
|
3
|
-
export declare class FileSystem {
|
|
4
|
-
filename: string;
|
|
5
|
-
dirname: string;
|
|
6
|
-
writeStream?: fs.WriteStream;
|
|
7
|
-
constructor(dirname?: string, filename?: string);
|
|
8
|
-
init(): Promise<unknown>;
|
|
9
|
-
write(body: string): boolean;
|
|
10
|
-
}
|
|
11
|
-
export interface ExportForm<T> {
|
|
12
|
-
items: T[];
|
|
13
|
-
path: string;
|
|
14
|
-
fields?: string[];
|
|
15
|
-
options?: {
|
|
16
|
-
append: boolean;
|
|
17
|
-
};
|
|
18
|
-
delimiter?: string;
|
|
19
|
-
}
|
|
20
|
-
export declare const exportToCsv: <T>({ items, path, fields, delimiter, options }: ExportForm<T>) => Promise<void>;
|
|
21
|
-
export declare const exportToJson: <T>(items: T | T[], localPath: string) => void;
|
|
22
|
-
export declare const readJson: (localPath: string) => unknown;
|