vortez 4.1.1

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.
Files changed (86) hide show
  1. package/.gitignore +13 -0
  2. package/LICENSE +201 -0
  3. package/Notes.md +12 -0
  4. package/README.md +372 -0
  5. package/build/Beta/JwtManager.d.ts +114 -0
  6. package/build/Beta/JwtManager.js +249 -0
  7. package/build/Beta/JwtManager.js.map +1 -0
  8. package/build/Beta/Mail.d.ts +60 -0
  9. package/build/Beta/Mail.js +192 -0
  10. package/build/Beta/Mail.js.map +1 -0
  11. package/build/Config.d.ts +39 -0
  12. package/build/Config.js +33 -0
  13. package/build/Config.js.map +1 -0
  14. package/build/ConsoleUI.d.ts +57 -0
  15. package/build/ConsoleUI.js +110 -0
  16. package/build/ConsoleUI.js.map +1 -0
  17. package/build/Debug.d.ts +154 -0
  18. package/build/Debug.js +256 -0
  19. package/build/Debug.js.map +1 -0
  20. package/build/LoggerManager/Logger.d.ts +23 -0
  21. package/build/LoggerManager/Logger.js +23 -0
  22. package/build/LoggerManager/Logger.js.map +1 -0
  23. package/build/LoggerManager/LoggerManager.d.ts +18 -0
  24. package/build/LoggerManager/LoggerManager.js +30 -0
  25. package/build/LoggerManager/LoggerManager.js.map +1 -0
  26. package/build/Server/BodyParser.d.ts +125 -0
  27. package/build/Server/BodyParser.js +162 -0
  28. package/build/Server/BodyParser.js.map +1 -0
  29. package/build/Server/Cookie.d.ts +72 -0
  30. package/build/Server/Cookie.js +102 -0
  31. package/build/Server/Cookie.js.map +1 -0
  32. package/build/Server/Request.d.ts +61 -0
  33. package/build/Server/Request.js +79 -0
  34. package/build/Server/Request.js.map +1 -0
  35. package/build/Server/Response.d.ts +90 -0
  36. package/build/Server/Response.js +241 -0
  37. package/build/Server/Response.js.map +1 -0
  38. package/build/Server/Rule.d.ts +81 -0
  39. package/build/Server/Rule.js +146 -0
  40. package/build/Server/Rule.js.map +1 -0
  41. package/build/Server/Server.d.ts +157 -0
  42. package/build/Server/Server.js +330 -0
  43. package/build/Server/Server.js.map +1 -0
  44. package/build/Server/Session.d.ts +66 -0
  45. package/build/Server/Session.js +97 -0
  46. package/build/Server/Session.js.map +1 -0
  47. package/build/Server/WebSocket/Chunk.d.ts +36 -0
  48. package/build/Server/WebSocket/Chunk.js +81 -0
  49. package/build/Server/WebSocket/Chunk.js.map +1 -0
  50. package/build/Server/WebSocket/WebSocket.d.ts +70 -0
  51. package/build/Server/WebSocket/WebSocket.js +184 -0
  52. package/build/Server/WebSocket/WebSocket.js.map +1 -0
  53. package/build/Template.d.ts +32 -0
  54. package/build/Template.js +69 -0
  55. package/build/Template.js.map +1 -0
  56. package/build/Utilities/Env.d.ts +75 -0
  57. package/build/Utilities/Env.js +123 -0
  58. package/build/Utilities/Env.js.map +1 -0
  59. package/build/Utilities/Path.d.ts +18 -0
  60. package/build/Utilities/Path.js +27 -0
  61. package/build/Utilities/Path.js.map +1 -0
  62. package/build/Utilities/Utilities.d.ts +147 -0
  63. package/build/Utilities/Utilities.js +110 -0
  64. package/build/Utilities/Utilities.js.map +1 -0
  65. package/build/Vortez.d.ts +20 -0
  66. package/build/Vortez.js +22 -0
  67. package/build/Vortez.js.map +1 -0
  68. package/changes.md +89 -0
  69. package/examples/in-docs.js +96 -0
  70. package/global/Source/Logo_960.png +0 -0
  71. package/global/Source/Logo_SM_960.png +0 -0
  72. package/global/Style/Template/Error.css +30 -0
  73. package/global/Style/Template/Folder.css +77 -0
  74. package/global/Style/Template/Template.css +128 -0
  75. package/global/Template/Error.vhtml +29 -0
  76. package/global/Template/Folder.vhtml +41 -0
  77. package/package.json +47 -0
  78. package/tests/Template/template.js +18 -0
  79. package/tests/Template/template.txt +13 -0
  80. package/tests/Template/template.vhtml +23 -0
  81. package/tests/debug.js +28 -0
  82. package/tests/jwtManager/jwtManager.js +110 -0
  83. package/tests/test.js +129 -0
  84. package/tests/test.vhtml +14 -0
  85. package/tests/utilities.js +28 -0
  86. package/tests/websocket.vhtml +86 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @author NetFeez <codefeez.dev@gmail.com>
3
+ * @description Añade la forma de WebSockets a `Vortez`.
4
+ * @license Apache-2.0
5
+ */
6
+ export declare class Chunk implements Chunk.Info {
7
+ fin: Boolean;
8
+ rsv: number;
9
+ opCode: number;
10
+ mask: Boolean;
11
+ size: number | bigint;
12
+ maskKeys: Buffer | null;
13
+ infoSize: number;
14
+ chunkSize: number;
15
+ chunk: Buffer;
16
+ surplus: Buffer;
17
+ constructor(chunk: Buffer);
18
+ pushData(data: Buffer): void;
19
+ getChunk(): Buffer;
20
+ isWaiting(): boolean;
21
+ decode(): Buffer;
22
+ static getInfo(chunk: Buffer): Chunk.Info;
23
+ static decode(chunk: Buffer, bytesInfo: number, maskKeys: Buffer | undefined): Buffer<ArrayBuffer>;
24
+ }
25
+ export declare namespace Chunk {
26
+ interface Info {
27
+ fin: Boolean;
28
+ rsv: number;
29
+ opCode: number;
30
+ mask: Boolean;
31
+ size: number | bigint;
32
+ maskKeys: Buffer | null;
33
+ infoSize: number;
34
+ }
35
+ }
36
+ export default Chunk;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @author NetFeez <codefeez.dev@gmail.com>
3
+ * @description Añade la forma de WebSockets a `Vortez`.
4
+ * @license Apache-2.0
5
+ */
6
+ export class Chunk {
7
+ fin;
8
+ rsv;
9
+ opCode;
10
+ mask;
11
+ size;
12
+ maskKeys;
13
+ infoSize;
14
+ chunkSize;
15
+ chunk;
16
+ surplus;
17
+ constructor(chunk) {
18
+ const { fin, rsv, opCode, mask, size, maskKeys, infoSize: infoSize } = Chunk.getInfo(chunk);
19
+ this.fin = fin;
20
+ this.rsv = rsv;
21
+ this.opCode = opCode;
22
+ this.mask = mask;
23
+ this.size = size;
24
+ this.maskKeys = maskKeys;
25
+ this.infoSize = infoSize;
26
+ this.chunkSize = Number(size) + infoSize;
27
+ if (chunk.length > (BigInt(size) + BigInt(infoSize))) {
28
+ this.surplus = chunk.subarray(this.chunkSize);
29
+ this.chunk = chunk.subarray(0, this.chunkSize);
30
+ }
31
+ else {
32
+ this.surplus = Buffer.alloc(0);
33
+ this.chunk = chunk;
34
+ }
35
+ }
36
+ pushData(data) {
37
+ this.chunk = Buffer.concat([this.chunk, data]);
38
+ if (this.chunk.length > this.chunkSize) {
39
+ this.surplus = this.chunk.subarray(this.chunkSize);
40
+ this.chunk = this.chunk.subarray(0, this.chunkSize);
41
+ }
42
+ }
43
+ getChunk() { return this.chunk; }
44
+ isWaiting() { return this.chunk.length < this.chunkSize; }
45
+ decode() {
46
+ return Chunk.decode(this.chunk, this.infoSize, this.maskKeys ?? undefined);
47
+ }
48
+ static getInfo(chunk) {
49
+ const fin = Boolean(((chunk[0] >>> 0x7) & 0x01));
50
+ const rsv = ((chunk[0] >>> 0x4) & 0x07);
51
+ const opCode = (chunk[0] & 0x0f);
52
+ const mask = Boolean(((chunk[1] >>> 0x7) & 0x01));
53
+ let size = (chunk[1] & 0x7f);
54
+ let maskKeys = null;
55
+ let bytesInfo = null;
56
+ if (size == 0x7f) {
57
+ size = chunk.readBigUint64BE(2);
58
+ maskKeys = mask ? chunk.subarray(10, 14) : null;
59
+ bytesInfo = mask ? 14 : 10;
60
+ }
61
+ else if (size == 0x7e) {
62
+ size = chunk.readUint16BE(2);
63
+ maskKeys = mask ? chunk.subarray(4, 8) : null;
64
+ bytesInfo = mask ? 8 : 4;
65
+ }
66
+ else {
67
+ maskKeys = mask ? chunk.subarray(2, 6) : null;
68
+ bytesInfo = mask ? 6 : 2;
69
+ }
70
+ return { fin, rsv, opCode, mask, size, maskKeys, infoSize: bytesInfo };
71
+ }
72
+ static decode(chunk, bytesInfo, maskKeys) {
73
+ const decoded = [];
74
+ for (let index = bytesInfo, indexMask = 0; index < chunk.length; index++, indexMask++) {
75
+ decoded.push(chunk[index] ^ (maskKeys ? maskKeys[indexMask % 4] : 0));
76
+ }
77
+ return Buffer.from(decoded);
78
+ }
79
+ }
80
+ export default Chunk;
81
+ //# sourceMappingURL=Chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chunk.js","sourceRoot":"","sources":["../../../src/Server/WebSocket/Chunk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @author NetFeez <codefeez.dev@gmail.com>
3
+ * @description Añade la forma de WebSockets a `Vortez`.
4
+ * @license Apache-2.0
5
+ */
6
+ import EVENTS from 'events';
7
+ import { Duplex } from 'stream';
8
+ import Cookie from '../Cookie.js';
9
+ export declare class WebSocket extends EVENTS {
10
+ /**Contiene la conexión con el cliente. */
11
+ private connection;
12
+ /**
13
+ * Crea una conexión WebSocket.
14
+ * @param client La conexión Duplex con el cliente.
15
+ */
16
+ constructor(client: Duplex);
17
+ /**
18
+ * Acepta la conexión del cliente.
19
+ * @param acceptKey La llave de conexión `sec-websocket-key`.
20
+ */
21
+ acceptConnection(acceptKey: string, cookies?: Cookie): void;
22
+ /** Finaliza la conexión esperando a que se terminen de enviar/recibir los datos pendientes. */
23
+ end(): void;
24
+ /** Finaliza la conexión de forma abrupta. */
25
+ destroy(): void;
26
+ /**
27
+ * Envía un dato como respuesta.
28
+ * @param data El dato que se enviara.
29
+ */
30
+ send(data: String | Buffer): void;
31
+ /**
32
+ * Envía un JSON como respuesta.
33
+ * @param data los datos que enviaras como JSON.
34
+ */
35
+ SendJson(data: any): void;
36
+ /**
37
+ * Codifica los datos para enviar por el WebSocket.
38
+ * @param data Los datos que se van a codificar.
39
+ * @param Text indica si el contenido es texto o no.
40
+ */
41
+ private encode;
42
+ /**
43
+ * Convierte un string en un Buffer.
44
+ * @param message El string a transformar.
45
+ */
46
+ private stringToBuffer;
47
+ /**Añade los disparadores de evento.*/
48
+ private initEvents;
49
+ on(event: 'close', listener: WebSocket.listener.close): this;
50
+ on(event: 'error', listener: WebSocket.listener.error): this;
51
+ on(event: 'finish', listener: WebSocket.listener.finish): this;
52
+ on(event: 'message', listener: WebSocket.listener.message): this;
53
+ off(event: 'close', listener: WebSocket.listener.close): this;
54
+ off(event: 'error', listener: WebSocket.listener.error): this;
55
+ off(event: 'finish', listener: WebSocket.listener.finish): this;
56
+ off(event: 'message', listener: WebSocket.listener.message): this;
57
+ }
58
+ export declare namespace WebSocket {
59
+ namespace listener {
60
+ type close = () => void;
61
+ type error = (error: Error) => void;
62
+ type finish = () => void;
63
+ type message = (datos: Buffer, info: dataInfo) => void;
64
+ }
65
+ interface dataInfo {
66
+ opCode: number;
67
+ size: number | bigint;
68
+ }
69
+ }
70
+ export default WebSocket;
@@ -0,0 +1,184 @@
1
+ /**
2
+ * @author NetFeez <codefeez.dev@gmail.com>
3
+ * @description Añade la forma de WebSockets a `Vortez`.
4
+ * @license Apache-2.0
5
+ */
6
+ import EVENTS from 'events';
7
+ import CRYPTO from 'crypto';
8
+ import Chunk from './Chunk.js';
9
+ export class WebSocket extends EVENTS {
10
+ /**Contiene la conexión con el cliente. */
11
+ connection;
12
+ /**
13
+ * Crea una conexión WebSocket.
14
+ * @param client La conexión Duplex con el cliente.
15
+ */
16
+ constructor(client) {
17
+ super();
18
+ this.connection = client;
19
+ this.initEvents();
20
+ }
21
+ /**
22
+ * Acepta la conexión del cliente.
23
+ * @param acceptKey La llave de conexión `sec-websocket-key`.
24
+ */
25
+ acceptConnection(acceptKey, cookies) {
26
+ const cookieSetters = cookies
27
+ ? cookies.getSetters().map((setter) => `Set-Cookie: ${setter}`)
28
+ : [];
29
+ const acceptToken = CRYPTO.createHash('SHA1').update(acceptKey + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11').digest('base64');
30
+ const headers = [
31
+ 'HTTP/1.1 101 Switching Protocols',
32
+ 'Upgrade: websocket',
33
+ 'Connection: Upgrade',
34
+ `Sec-WebSocket-Accept: ${acceptToken}`,
35
+ ...cookieSetters, '\r\n'
36
+ ].join('\r\n');
37
+ this.connection.write(headers);
38
+ }
39
+ /** Finaliza la conexión esperando a que se terminen de enviar/recibir los datos pendientes. */
40
+ end() { this.connection.end(); }
41
+ /** Finaliza la conexión de forma abrupta. */
42
+ destroy() { this.connection.destroy(); }
43
+ /**
44
+ * Envía un dato como respuesta.
45
+ * @param data El dato que se enviara.
46
+ */
47
+ send(data) {
48
+ const [buffer, isText] = typeof data == 'string'
49
+ ? [this.stringToBuffer(data), true]
50
+ : data instanceof Buffer
51
+ ? [data, false]
52
+ : [this.stringToBuffer('[Error]: Dato enviado no soportado por NetFeez-Labs/WebSocket'), true];
53
+ const message = this.encode(buffer, isText);
54
+ this.connection.write(message);
55
+ }
56
+ /**
57
+ * Envía un JSON como respuesta.
58
+ * @param data los datos que enviaras como JSON.
59
+ */
60
+ SendJson(data) {
61
+ const message = JSON.stringify(data);
62
+ this.send(message);
63
+ }
64
+ /**
65
+ * Codifica los datos para enviar por el WebSocket.
66
+ * @param data Los datos que se van a codificar.
67
+ * @param Text indica si el contenido es texto o no.
68
+ */
69
+ encode(data, isText = false) {
70
+ const encoded = isText ? [129] : [130];
71
+ if (data.length <= 125) {
72
+ encoded[1] = data.length;
73
+ }
74
+ else if (data.length >= 126 && data.length <= 65535) {
75
+ encoded[1] = 126;
76
+ encoded[2] = (data.length >> 8) & 255;
77
+ encoded[3] = (data.length) & 255;
78
+ }
79
+ else {
80
+ encoded[1] = 127;
81
+ encoded[2] = (data.length >> 56) & 255;
82
+ encoded[3] = (data.length >> 48) & 255;
83
+ encoded[4] = (data.length >> 40) & 255;
84
+ encoded[5] = (data.length >> 32) & 255;
85
+ encoded[6] = (data.length >> 24) & 255;
86
+ encoded[7] = (data.length >> 16) & 255;
87
+ encoded[8] = (data.length >> 8) & 255;
88
+ encoded[9] = (data.length) & 255;
89
+ }
90
+ /* for (let index = 0; index < data.length; index ++) {
91
+ encoded.push(data[index]);
92
+ } */
93
+ encoded.push(...data);
94
+ return Buffer.from(encoded);
95
+ }
96
+ /**
97
+ * Convierte un string en un Buffer.
98
+ * @param message El string a transformar.
99
+ */
100
+ stringToBuffer(message) {
101
+ return Buffer.from(message, 'utf-8');
102
+ }
103
+ /**Añade los disparadores de evento.*/
104
+ initEvents() {
105
+ let surplus = Buffer.alloc(0);
106
+ let currentChunk = null;
107
+ let chunks = [];
108
+ this.connection.on('data', (data) => {
109
+ if (surplus) {
110
+ data = Buffer.concat([surplus, data]);
111
+ surplus = Buffer.alloc(0);
112
+ }
113
+ if (!currentChunk)
114
+ currentChunk = new Chunk(data);
115
+ else if (currentChunk.isWaiting())
116
+ currentChunk.pushData(data);
117
+ if (!currentChunk.isWaiting()) {
118
+ chunks.push(currentChunk);
119
+ surplus = currentChunk.surplus;
120
+ if (currentChunk.fin) {
121
+ const decoded = Buffer.concat(chunks.map(chunk => chunk.decode()));
122
+ this.emit('message', decoded, {
123
+ opCode: chunks[0].opCode,
124
+ size: chunks[0].size
125
+ });
126
+ chunks = [];
127
+ }
128
+ currentChunk = null;
129
+ }
130
+ });
131
+ this.connection.on('close', () => this.emit('close'));
132
+ this.connection.on('end', () => this.emit('finish'));
133
+ this.connection.on('error', (error) => this.emit('error', error));
134
+ }
135
+ on(event, listener) {
136
+ return super.on(event, listener);
137
+ }
138
+ off(event, listener) {
139
+ return super.off(event, listener);
140
+ }
141
+ }
142
+ export default WebSocket;
143
+ /* Para aceptar las peticiones de conexión a WebSocket
144
+ *
145
+ * HTTP/1.1 101 Switching Protocols
146
+ * Upgrade: websocket
147
+ * Connection: Upgrade
148
+ * Sec-WebSocket-Accept: Sec-Websocket-key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
149
+ * en HASH SHA-1 Codificado en Base64
150
+ *
151
+ ** Formato del intercambio de datos
152
+ * 0 1 2 3
153
+ * 0 1 2 3
154
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
155
+ * +-+-+-+-+-------+-+-------------+-------------------------------+
156
+ * |F|R|R|R| opcode|M| Payload len | Extended payload length |
157
+ * |I|S|S|S| (4) |A| (7) | (16/64) |
158
+ * |N|V|V|V| |S| | (if payload len==126/127) |
159
+ * | |1|2|3| |K| | |
160
+ * +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
161
+ * | Extended payload length continued, if payload len == 127 |
162
+ * + - - - - - - - - - - - - - - - +-------------------------------+
163
+ * | |Masking-key, if MASK set to 1 |
164
+ * +-------------------------------+-------------------------------+
165
+ * | Masking-key (continued) | Payload Data |
166
+ * +-------------------------------- - - - - - - - - - - - - - - - +
167
+ * : Payload Data continued ... :
168
+ * + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
169
+ * | Payload Data continued ... |
170
+ * +---------------------------------------------------------------+
171
+ *
172
+ *
173
+ * FIN y OPCODE funcionan juntos para entregar mensajes con marco separado
174
+ * Solo esta disponible en OPCODE 0x0 a 0x2
175
+ *
176
+ * OPCODES:
177
+ * Continuación = 0x0
178
+ * Texto = 0x1
179
+ * Binario = 0x2
180
+ * Cierre = 0x8
181
+ * Ping = 0x9
182
+ * Pong = 0xa
183
+ */
184
+ //# sourceMappingURL=WebSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocket.js","sourceRoot":"","sources":["../../../src/Server/WebSocket/WebSocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @author NetFeez <codefeez.dev@gmail.com>
3
+ * @description Add the HNetFeez-Labs template engine to the Vortez.
4
+ * @license Apache-2.0
5
+ */
6
+ export declare class Template {
7
+ /** Regular expressions used to compile the template */
8
+ private static expressions;
9
+ /**
10
+ * Load and compile a template.
11
+ * @param path - The path to the template file.
12
+ * @param data - The data used to compile the template.
13
+ * @returns The compiled template.
14
+ * @throws Error if the path is not a file.
15
+ * @throws Error if the file does not exist.
16
+ */
17
+ static load(path: string, data: Template.dataObject): Promise<string>;
18
+ /**
19
+ * Compile a template.
20
+ * @param Content - The content of the template.
21
+ * @param data - The data used to compile the template.
22
+ * @returns The compiled template.
23
+ * @throws Error if key and value names are equal in object blocks.
24
+ */
25
+ private static compile;
26
+ }
27
+ export declare namespace Template {
28
+ interface dataObject {
29
+ [key: string]: any;
30
+ }
31
+ }
32
+ export default Template;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @author NetFeez <codefeez.dev@gmail.com>
3
+ * @description Add the HNetFeez-Labs template engine to the Vortez.
4
+ * @license Apache-2.0
5
+ */
6
+ import FS from 'fs';
7
+ import Utilities from './Utilities/Utilities.js';
8
+ export class Template {
9
+ /** Regular expressions used to compile the template */
10
+ static expressions = {
11
+ variable: /\$\{(.+?)\}/ig,
12
+ object: {
13
+ block: /\$ ?\((.+)\) ?\{([^]+?)\}/g,
14
+ replaces: /\%(.+?)%/g
15
+ }
16
+ };
17
+ /**
18
+ * Load and compile a template.
19
+ * @param path - The path to the template file.
20
+ * @param data - The data used to compile the template.
21
+ * @returns The compiled template.
22
+ * @throws Error if the path is not a file.
23
+ * @throws Error if the file does not exist.
24
+ */
25
+ static async load(path, data) {
26
+ path = Utilities.Path.normalize(path);
27
+ const details = await FS.promises.stat(path);
28
+ if (!details.isFile())
29
+ throw new Error('the path is not a template file');
30
+ const template = await FS.promises.readFile(path);
31
+ return this.compile(template.toString('utf-8'), data);
32
+ }
33
+ /**
34
+ * Compile a template.
35
+ * @param Content - The content of the template.
36
+ * @param data - The data used to compile the template.
37
+ * @returns The compiled template.
38
+ * @throws Error if key and value names are equal in object blocks.
39
+ */
40
+ static compile(Content, data) {
41
+ Content = Content.replace(this.expressions.variable, (text, name) => {
42
+ return name && name in data ? data[name] : text;
43
+ });
44
+ Content = Content.replace(this.expressions.object.block, (block, sentence, loop) => {
45
+ const [name, keyName = 'key', valueName = 'value'] = sentence.split(/, ?/gi);
46
+ if (keyName === valueName)
47
+ throw new Error('the key and value names must be different in block: ' + block);
48
+ return name && name in data && data[name] instanceof Object ? Object.keys(data[name]).map((key) => {
49
+ return loop.replace(this.expressions.object.replaces, (SubText, varName) => {
50
+ if (keyName == varName)
51
+ return key;
52
+ else if (valueName == varName)
53
+ return data[name][key];
54
+ });
55
+ }).join('') : block;
56
+ });
57
+ return Content;
58
+ }
59
+ }
60
+ export default Template;
61
+ /*
62
+ Variables: ${name}
63
+ Objects/Arrays: $(name, keyName, valueName) { the key is $keyName and value $valueName }
64
+ Objects/Arrays: $(name) { the key is %key% and value %value% }
65
+ Objects/Arrays: $(name, customKeyName, customValueName) {
66
+ the key is %customKeyName% and value %customValueName%
67
+ }
68
+ */
69
+ //# sourceMappingURL=Template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Template.js","sourceRoot":"","sources":["../src/Template.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,SAAS,MAAM,0BAA0B,CAAC;AAEjD,MAAM,OAAO,QAAQ;IACpB,uDAAuD;IAC/C,MAAM,CAAC,WAAW,GAAG;QAC5B,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE;YACP,KAAK,EAAE,4BAA4B;YACnC,QAAQ,EAAE,WAAW;SACrB;KACD,CAAC;IACF;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAAyB;QAC/D,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,OAAO,CAAC,OAAe,EAAE,IAAyB;QAChE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACnE,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAa,EAAE,QAAgB,EAAE,IAAY,EAAE,EAAE;YAC1G,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7E,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,GAAG,KAAK,CAAC,CAAC;YAC3G,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjG,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;oBAC1E,IAAI,OAAO,IAAI,OAAO;wBAAE,OAAO,GAAG,CAAA;yBAC7B,IAAI,SAAS,IAAI,OAAO;wBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IAChB,CAAC;;AASF,eAAe,QAAQ,CAAC;AACxB;;;;;;;EAOE"}
@@ -0,0 +1,75 @@
1
+ export declare class Env {
2
+ static get variables(): Env.EnvList;
3
+ /**
4
+ * Check if a file exists
5
+ * @param path - The path to the file
6
+ * @returns A promise that resolves to true if the file exists, false otherwise
7
+ */
8
+ static fileExists(path: string): Promise<boolean>;
9
+ /**
10
+ * Load the environment variables from the given path
11
+ * @param path - The path to the environment variables file
12
+ * @param options - Options to load the environment variables
13
+ * @returns The loaded environment variables as an object
14
+ * @throws Error if the environment variables file does not exist and cannot be created
15
+ * @throws Error if the environment variables file is not readable
16
+ */
17
+ static load(path: string, options?: Env.LoadOptions): Promise<Env.EnvList>;
18
+ static loadSync(path: string, options?: Env.LoadOptions): Env.EnvList;
19
+ /**
20
+ * Extract the environment variables from the given content
21
+ * @param content - The content to extract the environment variables from
22
+ * @param defaultEnv - The default environment variables to use if none are found
23
+ * @returns The extracted environment variables as an object
24
+ */
25
+ private static extractEnv;
26
+ /**
27
+ * Get the value of an environment variable
28
+ * @param key - The environment variable key
29
+ * @param options - Options to get the environment variable
30
+ * @param options.default - The default value to return if the environment variable is not set
31
+ * @param options.warning - Whether to show a warning if the environment variable is not set
32
+ * @returns The value of the environment variable or undefined if not set
33
+ */
34
+ static get(key: string, options: Env.getOptionsGranted): string;
35
+ static get(key: string, options: Env.getOptions): string | undefined;
36
+ /**
37
+ * Set an environment variable
38
+ * @param key - The environment variable key
39
+ * @param value - The value to set
40
+ */
41
+ static set(key: string, value: string): void;
42
+ /**
43
+ * Set multiple environment variables at once
44
+ * @param env - An object containing key-value pairs of environment variables
45
+ */
46
+ static setMany(env: Env.EnvList): void;
47
+ /**
48
+ * Delete an environment variable
49
+ * @param key - The environment variable key to delete
50
+ */
51
+ static delete(key: string): void;
52
+ /**
53
+ * Convert an EnvList to a .env-formatted string
54
+ * @param env - The environment variables object
55
+ * @returns A string in .env format
56
+ */
57
+ static toEnv(env: Env.EnvList): string;
58
+ }
59
+ export declare namespace Env {
60
+ interface EnvList {
61
+ [key: string]: string | undefined;
62
+ }
63
+ interface LoadOptions {
64
+ setEnv?: boolean;
65
+ defaultEnv?: EnvList;
66
+ }
67
+ interface getOptions {
68
+ default?: string;
69
+ warning?: boolean;
70
+ }
71
+ type getOptionsGranted = getOptions & {
72
+ default: string;
73
+ };
74
+ }
75
+ export default Env;