varlock 0.0.7 → 0.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/dist/auto-load.js +6 -5
- package/dist/{chunk-67DF2S4X.js → chunk-5B7JZEDE.js} +6 -5
- package/dist/chunk-5B7JZEDE.js.map +1 -0
- package/dist/{chunk-WRLSFZTQ.js → chunk-6FFRZOIK.js} +8 -8
- package/dist/{chunk-WRLSFZTQ.js.map → chunk-6FFRZOIK.js.map} +1 -1
- package/dist/{chunk-HQ3K6KKC.js → chunk-7OHVYEDG.js} +4 -3
- package/dist/chunk-7OHVYEDG.js.map +1 -0
- package/dist/{chunk-4D3QUGGJ.js → chunk-BM3UAHAH.js} +5 -6
- package/dist/chunk-BM3UAHAH.js.map +1 -0
- package/dist/chunk-CQHOPN6M.js +14 -0
- package/dist/{chunk-ITXNRGOJ.js.map → chunk-CQHOPN6M.js.map} +1 -1
- package/dist/{chunk-BDA3K24R.js → chunk-GYHC6Y7D.js} +7 -8
- package/dist/chunk-GYHC6Y7D.js.map +1 -0
- package/dist/{chunk-DAZNZPLN.js → chunk-H5PNRKYP.js} +559 -75
- package/dist/chunk-H5PNRKYP.js.map +1 -0
- package/dist/chunk-LZ45SLAI.js +12 -0
- package/dist/chunk-LZ45SLAI.js.map +1 -0
- package/dist/{chunk-QDGAWJPB.js → chunk-MPS3IXAW.js} +18 -7
- package/dist/chunk-MPS3IXAW.js.map +1 -0
- package/dist/{chunk-2AA6IZBK.js → chunk-P74HB2II.js} +4 -3
- package/dist/chunk-P74HB2II.js.map +1 -0
- package/dist/{chunk-Z52EXRDT.js → chunk-PQPGBNGV.js} +6 -7
- package/dist/chunk-PQPGBNGV.js.map +1 -0
- package/dist/{chunk-7NCUE6IU.js → chunk-SHQHITWV.js} +3 -10
- package/dist/chunk-SHQHITWV.js.map +1 -0
- package/dist/{chunk-ZDGB2ZFV.js → chunk-UFPWQAFZ.js} +14 -14
- package/dist/chunk-UFPWQAFZ.js.map +1 -0
- package/dist/{chunk-LJKKUJMC.js → chunk-Y2RFMQ5X.js} +342 -60
- package/dist/chunk-Y2RFMQ5X.js.map +1 -0
- package/dist/{chunk-XCHNL72R.js → chunk-YK4SATSE.js} +7 -8
- package/dist/chunk-YK4SATSE.js.map +1 -0
- package/dist/cli/cli-executable.js +25 -33
- package/dist/cli/cli-executable.js.map +1 -1
- package/dist/dotenv-compat.js +6 -5
- package/dist/index.d.ts +26 -1
- package/dist/index.js +28 -12
- package/dist/index.js.map +1 -1
- package/dist/init.command-L4HF4372.js +9 -0
- package/dist/{init.command-NWFSUQWW.js.map → init.command-L4HF4372.js.map} +1 -1
- package/dist/load.command-VHNPXTDI.js +9 -0
- package/dist/{load.command-U3ZEZYEV.js.map → load.command-VHNPXTDI.js.map} +1 -1
- package/dist/login.command-OIQBNMNZ.js +8 -0
- package/dist/{login.command-SWBJENRF.js.map → login.command-OIQBNMNZ.js.map} +1 -1
- package/dist/run.command-2OE432A5.js +9 -0
- package/dist/{run.command-WNANCLWN.js.map → run.command-2OE432A5.js.map} +1 -1
- package/dist/runtime/env.js +1 -1
- package/dist/runtime/patch-console.js +3 -2
- package/dist/runtime/patch-response.js +3 -2
- package/dist/runtime/patch-server-response.js +3 -2
- package/dist/telemetry.command-MYQU7FPB.js +8 -0
- package/dist/{telemetry.command-QMUHAB3Z.js.map → telemetry.command-MYQU7FPB.js.map} +1 -1
- package/package.json +6 -6
- package/dist/chunk-2AA6IZBK.js.map +0 -1
- package/dist/chunk-2H7TDBLD.js +0 -172
- package/dist/chunk-2H7TDBLD.js.map +0 -1
- package/dist/chunk-4D3QUGGJ.js.map +0 -1
- package/dist/chunk-67DF2S4X.js.map +0 -1
- package/dist/chunk-7NCUE6IU.js.map +0 -1
- package/dist/chunk-BDA3K24R.js.map +0 -1
- package/dist/chunk-DAZNZPLN.js.map +0 -1
- package/dist/chunk-HQ3K6KKC.js.map +0 -1
- package/dist/chunk-ITXNRGOJ.js +0 -14
- package/dist/chunk-LHTLO65N.js +0 -99
- package/dist/chunk-LHTLO65N.js.map +0 -1
- package/dist/chunk-LJKKUJMC.js.map +0 -1
- package/dist/chunk-PUGFIZE3.js +0 -143
- package/dist/chunk-PUGFIZE3.js.map +0 -1
- package/dist/chunk-QDGAWJPB.js.map +0 -1
- package/dist/chunk-WOHPERDH.js +0 -17
- package/dist/chunk-WOHPERDH.js.map +0 -1
- package/dist/chunk-X52WCHVG.js +0 -540
- package/dist/chunk-X52WCHVG.js.map +0 -1
- package/dist/chunk-XCHNL72R.js.map +0 -1
- package/dist/chunk-YZ2H2QXX.js +0 -32
- package/dist/chunk-YZ2H2QXX.js.map +0 -1
- package/dist/chunk-Z52EXRDT.js.map +0 -1
- package/dist/chunk-ZDGB2ZFV.js.map +0 -1
- package/dist/doctor.command-TKHDKSUY.js +0 -7
- package/dist/doctor.command-TKHDKSUY.js.map +0 -1
- package/dist/encrypt.command-AGHQ4KTI.js +0 -7
- package/dist/encrypt.command-AGHQ4KTI.js.map +0 -1
- package/dist/init.command-NWFSUQWW.js +0 -13
- package/dist/load.command-U3ZEZYEV.js +0 -12
- package/dist/login.command-SWBJENRF.js +0 -10
- package/dist/run.command-WNANCLWN.js +0 -12
- package/dist/telemetry.command-QMUHAB3Z.js +0 -10
package/dist/chunk-PUGFIZE3.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { ge, pD } from './chunk-DAZNZPLN.js';
|
|
2
|
-
import { define } from './chunk-33ROL4J5.js';
|
|
3
|
-
import { gracefulExit } from './chunk-LHTLO65N.js';
|
|
4
|
-
import { __name } from './chunk-XN24GZXQ.js';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import os from 'node:os';
|
|
7
|
-
import net from 'node:net';
|
|
8
|
-
import crypto from 'node:crypto';
|
|
9
|
-
import Debug from 'debug';
|
|
10
|
-
|
|
11
|
-
var debug = Debug("varlock:native-app-client");
|
|
12
|
-
var VarlockNativeAppClient = class {
|
|
13
|
-
static {
|
|
14
|
-
__name(this, "VarlockNativeAppClient");
|
|
15
|
-
}
|
|
16
|
-
socket;
|
|
17
|
-
messageQueue;
|
|
18
|
-
isInitialized = false;
|
|
19
|
-
isConnected;
|
|
20
|
-
socketPath;
|
|
21
|
-
constructor(opts) {
|
|
22
|
-
this.socket = new net.Socket();
|
|
23
|
-
this.messageQueue = /* @__PURE__ */ new Map();
|
|
24
|
-
this.isConnected = false;
|
|
25
|
-
this.socketPath = opts?.socketPath ?? path.resolve(
|
|
26
|
-
os.homedir(),
|
|
27
|
-
"Library/Containers/dev.dmno.macapp/Data/dmno-ipc"
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
generateMessageId() {
|
|
31
|
-
const timestamp = Date.now().toString(36);
|
|
32
|
-
const random = crypto.randomBytes(4).toString("hex");
|
|
33
|
-
return `${timestamp}-${random}`;
|
|
34
|
-
}
|
|
35
|
-
initializeSocket() {
|
|
36
|
-
this.isInitialized = true;
|
|
37
|
-
return new Promise((resolve, _reject) => {
|
|
38
|
-
this.socket.on("connect", () => {
|
|
39
|
-
debug("Connected to native app");
|
|
40
|
-
this.isConnected = true;
|
|
41
|
-
resolve(true);
|
|
42
|
-
});
|
|
43
|
-
this.socket.on("data", (data) => {
|
|
44
|
-
debug("> received data");
|
|
45
|
-
try {
|
|
46
|
-
const messageLength = data.readUInt32LE(0);
|
|
47
|
-
const messageData = data.slice(4, 4 + messageLength);
|
|
48
|
-
const message = JSON.parse(messageData.toString());
|
|
49
|
-
debug("> message", message);
|
|
50
|
-
if (message.type === "__disconnect") {
|
|
51
|
-
this.cleanup();
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (message.id && this.messageQueue.has(message.id)) {
|
|
55
|
-
const { resolve: qResolve } = this.messageQueue.get(message.id);
|
|
56
|
-
this.messageQueue.delete(message.id);
|
|
57
|
-
qResolve(message.result);
|
|
58
|
-
} else {
|
|
59
|
-
console.log("Received message without ID:", message);
|
|
60
|
-
}
|
|
61
|
-
} catch (error) {
|
|
62
|
-
console.error("Error processing message:", error);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
this.socket.on("error", (error) => {
|
|
66
|
-
console.error("Socket error:", error);
|
|
67
|
-
this.cleanup();
|
|
68
|
-
});
|
|
69
|
-
this.socket.on("close", () => {
|
|
70
|
-
debug("socket closed");
|
|
71
|
-
this.isConnected = false;
|
|
72
|
-
this.cleanup();
|
|
73
|
-
});
|
|
74
|
-
this.socket.connect(this.socketPath);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
sendMessage(message) {
|
|
78
|
-
return new Promise((resolve, reject) => {
|
|
79
|
-
if (!this.isConnected) {
|
|
80
|
-
reject(new Error("Socket is not connected"));
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
const messageId = this.generateMessageId();
|
|
84
|
-
const messageWithId = {
|
|
85
|
-
...message,
|
|
86
|
-
id: messageId
|
|
87
|
-
};
|
|
88
|
-
const jsonData = JSON.stringify(messageWithId);
|
|
89
|
-
const messageBytes = new TextEncoder().encode(jsonData);
|
|
90
|
-
const lengthBytes = new Uint8Array(4);
|
|
91
|
-
const view = new DataView(lengthBytes.buffer);
|
|
92
|
-
view.setUint32(0, messageBytes.length, true);
|
|
93
|
-
const combinedBytes = new Uint8Array(4 + messageBytes.length);
|
|
94
|
-
combinedBytes.set(lengthBytes);
|
|
95
|
-
combinedBytes.set(messageBytes, 4);
|
|
96
|
-
this.messageQueue.set(messageId, { resolve, reject });
|
|
97
|
-
this.socket.write(combinedBytes);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
async encrypt(plaintext) {
|
|
101
|
-
if (!this.isInitialized) await this.initializeSocket();
|
|
102
|
-
return this.sendMessage({
|
|
103
|
-
action: "encrypt",
|
|
104
|
-
payload: { plaintext }
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
async decrypt(ciphertext) {
|
|
108
|
-
if (!this.isInitialized) await this.initializeSocket();
|
|
109
|
-
return this.sendMessage({
|
|
110
|
-
action: "decrypt",
|
|
111
|
-
payload: { ciphertext }
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
cleanup() {
|
|
115
|
-
for (const { reject } of this.messageQueue.values()) {
|
|
116
|
-
reject(new Error("Connection closed"));
|
|
117
|
-
}
|
|
118
|
-
this.messageQueue.clear();
|
|
119
|
-
this.socket.end();
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
// src/cli/commands/encrypt.command.ts
|
|
124
|
-
var commandSpec = define({
|
|
125
|
-
name: "encrypt",
|
|
126
|
-
description: "Encrypt environment variables in your .env file",
|
|
127
|
-
args: {}
|
|
128
|
-
});
|
|
129
|
-
var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
130
|
-
console.log("");
|
|
131
|
-
console.log("\u{1F9D9} Encrypting environment variables... \u2728");
|
|
132
|
-
const rawValue = await ge({ message: "Enter the value you want to encrypt" });
|
|
133
|
-
if (pD(rawValue)) return gracefulExit();
|
|
134
|
-
const client = new VarlockNativeAppClient();
|
|
135
|
-
await client.initializeSocket();
|
|
136
|
-
const encryptedValue = await client.encrypt(rawValue);
|
|
137
|
-
console.log("Copy this into your .env.local file and rename the key appropriately:\n");
|
|
138
|
-
console.log(`SOME_SENSITIVE_KEY=varlock("${encryptedValue}")`);
|
|
139
|
-
}, "commandFn");
|
|
140
|
-
|
|
141
|
-
export { commandFn, commandSpec };
|
|
142
|
-
//# sourceMappingURL=chunk-PUGFIZE3.js.map
|
|
143
|
-
//# sourceMappingURL=chunk-PUGFIZE3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/native-app-client.ts","../src/cli/commands/encrypt.command.ts"],"names":[],"mappings":"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","file":"chunk-PUGFIZE3.js","sourcesContent":["import path from 'node:path';\nimport os from 'node:os';\nimport net from 'node:net';\nimport crypto from 'node:crypto';\nimport Debug from 'debug';\n\nconst debug = Debug('varlock:native-app-client');\n\nconst MAC_APP_PATH = 'Library/Containers/dev.dmno.macapp';\nconst IPC_SOCKET_FILE_PATH = 'Data/dmno-ipc';\n\nexport class VarlockNativeAppClient {\n private socket: net.Socket;\n\n private messageQueue: Map<string, { resolve: (value: any) => void; reject: (error: Error) => void }>;\n\n private isInitialized: boolean = false;\n private isConnected: boolean;\n private socketPath: string;\n\n constructor(opts?: { socketPath?: string }) {\n this.socket = new net.Socket();\n this.messageQueue = new Map();\n this.isConnected = false;\n this.socketPath = opts?.socketPath ?? path.resolve(\n os.homedir(),\n 'Library/Containers/dev.dmno.macapp/Data/dmno-ipc',\n );\n }\n\n private generateMessageId(): string {\n // Generate a unique ID using timestamp and random bytes\n const timestamp = Date.now().toString(36); // Base36 timestamp\n const random = crypto.randomBytes(4).toString('hex'); // 8 random hex chars\n return `${timestamp}-${random}`;\n }\n\n initializeSocket() {\n this.isInitialized = true;\n\n return new Promise((resolve, _reject) => {\n this.socket.on('connect', () => {\n debug('Connected to native app');\n this.isConnected = true;\n resolve(true);\n });\n\n this.socket.on('data', (data: Buffer) => {\n debug('> received data');\n try {\n // Read message length (4 bytes, little endian)\n const messageLength = data.readUInt32LE(0);\n const messageData = data.slice(4, 4 + messageLength);\n const message = JSON.parse(messageData.toString());\n\n debug('> message', message);\n\n // Handle special messages\n if (message.type === '__disconnect') {\n this.cleanup();\n return;\n }\n\n // Handle response messages\n if (message.id && this.messageQueue.has(message.id)) {\n const { resolve: qResolve } = this.messageQueue.get(message.id)!;\n this.messageQueue.delete(message.id);\n qResolve(message.result);\n } else {\n console.log('Received message without ID:', message);\n }\n } catch (error) {\n console.error('Error processing message:', error);\n }\n });\n\n this.socket.on('error', (error) => {\n console.error('Socket error:', error);\n // TODO: if error is related to initial connection, reject the promise\n this.cleanup();\n });\n\n this.socket.on('close', () => {\n debug('socket closed');\n this.isConnected = false;\n this.cleanup();\n });\n\n this.socket.connect(this.socketPath);\n });\n }\n\n private sendMessage(message: any): Promise<any> {\n return new Promise((resolve, reject) => {\n if (!this.isConnected) {\n reject(new Error('Socket is not connected'));\n return;\n }\n\n const messageId = this.generateMessageId();\n const messageWithId = {\n ...message,\n id: messageId,\n };\n\n const jsonData = JSON.stringify(messageWithId);\n const messageBytes = new TextEncoder().encode(jsonData);\n\n // Create length prefix (4 bytes, little endian)\n const lengthBytes = new Uint8Array(4);\n const view = new DataView(lengthBytes.buffer);\n view.setUint32(0, messageBytes.length, true);\n\n // Combine length and message\n const combinedBytes = new Uint8Array(4 + messageBytes.length);\n combinedBytes.set(lengthBytes);\n combinedBytes.set(messageBytes, 4);\n\n // Store promise handlers\n this.messageQueue.set(messageId, { resolve, reject });\n\n // Send message\n this.socket.write(combinedBytes);\n });\n }\n\n public async encrypt(plaintext: string): Promise<any> {\n if (!this.isInitialized) await this.initializeSocket();\n return this.sendMessage({\n action: 'encrypt',\n payload: { plaintext },\n });\n }\n\n public async decrypt(ciphertext: string): Promise<any> {\n if (!this.isInitialized) await this.initializeSocket();\n return this.sendMessage({\n action: 'decrypt',\n payload: { ciphertext },\n });\n }\n\n public cleanup() {\n // Reject all pending messages\n for (const { reject } of this.messageQueue.values()) {\n reject(new Error('Connection closed'));\n }\n this.messageQueue.clear();\n this.socket.end();\n }\n}\n\n// // Example usage:\n// async function main() {\n// const client = new VarlockNativeAppClient();\n\n// try {\n// await client.initializeSocket();\n\n// // Send multiple messages\n// const encryptedHello = await client.encrypt('hello world');\n// console.log('Encrypted data:', encryptedHello);\n\n// const decryptedHello = await client.decrypt(encryptedHello);\n// console.log('Decrypted data:', decryptedHello);\n\n// // Keep the process running\n// process.on('SIGINT', () => {\n// client.cleanup();\n// process.exit(0);\n// });\n// } catch (error) {\n// console.error('Error:', error);\n// process.exit(1);\n// }\n// }\n\n// main();\n","\nimport { define } from 'gunshi';\nimport { isCancel, password } from '@clack/prompts';\n\nimport { VarlockNativeAppClient } from '../../lib/native-app-client';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\n\nexport const commandSpec = define({\n name: 'encrypt',\n description: 'Encrypt environment variables in your .env file',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n console.log('');\n console.log('🧙 Encrypting environment variables... ✨');\n // intro('🧙 Encrypting environment variables... ✨');\n\n const rawValue = await password({ message: 'Enter the value you want to encrypt' });\n if (isCancel(rawValue)) return gracefulExit();\n\n const client = new VarlockNativeAppClient();\n await client.initializeSocket();\n const encryptedValue = await client.encrypt(rawValue);\n\n console.log('Copy this into your .env.local file and rename the key appropriately:\\n');\n console.log(`SOME_SENSITIVE_KEY=varlock(\"${encryptedValue}\")`);\n\n // const envGraph = await loadEnvGraph();\n // await envGraph.resolveEnvValues();\n // const resolvedEnv = envGraph.getResolvedEnvObject();\n\n // TODO: need to reimplement using the new parser\n\n // const client = new VarlockNativeAppClient();\n // await client.initializeSocket();\n\n // for (const envFile of loadedEnv.files) {\n // let changeCount = 0;\n // for (const itemKey in envFile.items) {\n // const item = envFile.items[itemKey];\n // if (item.decorators?.sensitive) {\n // if ('value' in item && item.value) {\n // console.log('Encrypting', itemKey, envFile.path);\n // const encryptedValue = await client.encrypt(item.value);\n // delete item.value;\n // (item as any).resolverName = 'varlock';\n // (item as any).resolverArgs = [encryptedValue];\n // changeCount++;\n // }\n // } else {\n // if ('resolverName' in item && item.resolverName === 'varlock') {\n // console.log('Decrypting', itemKey, envFile.path);\n // const encryptedValue = item.resolverArgs[0];\n // if (typeof encryptedValue !== 'string') {\n // throw new Error('Expected encrypted value to be a string');\n // }\n // const decryptedValue = await client.decrypt(encryptedValue);\n // (item as any).value = decryptedValue;\n // delete (item as any).resolverName;\n // delete (item as any).resolverArgs;\n // changeCount++;\n // }\n // }\n // }\n\n // const updatedEnvFileStr = dumpDotEnvContents(envFile.parsedContents);\n // await fs.writeFile(envFile.path, updatedEnvFileStr);\n\n // log.success(`Updated ${changeCount} items in ${envFile.path}`);\n // }\n\n // console.log(loadedEnv);\n\n // const unencryptedKeys: Array<string> = [];\n // parsedEnv.forEach((item) => {\n // if (item.type !== 'item') return;\n // if (item.key.startsWith('_VARLOCK_')) return;\n // if (!('value' in item) || !item.value) return;\n\n // unencryptedKeys.push(item.key);\n // });\n\n // if (unencryptedKeys.length === 0) {\n // console.log('No items to encrypt. Exiting...');\n // return;\n // }\n\n // const selectedKeys = await multiselect({\n // message: 'Select env item(s) to encrypt 🔏',\n // options: unencryptedKeys.map((key) => ({\n // value: key,\n // label: key,\n // })),\n // initialValues: unencryptedKeys,\n // required: false,\n // });\n\n // if (isCancel(selectedKeys) || !selectedKeys.length) {\n // console.log('No items selected. Exiting...');\n // return;\n // }\n\n // for (const item of parsedEnv) {\n // if (item.type === 'item' && selectedKeys.includes(item.key)) {\n // if (!('value' in item) || !item.value) throw new Error(`Item ${item.key} has no value`);\n // const encryptedValue = await client.encrypt(item.value);\n // delete item.value;\n // (item as any).resolverName = 'varlock';\n // (item as any).resolverArgs = [encryptedValue];\n // }\n // }\n\n // // write the updated env file\n\n // const updatedEnvFileStr = dumpDotEnvContents(parsedEnv);\n // await fs.writeFile(envFilePath, updatedEnvFileStr);\n\n // outro(`Encrypted ${selectedKeys.length} items!`);\n};\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../utils/src/find-env-files.ts","../../env-graph/src/lib/loader.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,eAAA,GAAkB,CAAC,KAAA,EAAO,OAAO,CAAA;AAEvC,eAAsB,aAAa,IAAA,EAEhC;AACD,EAAA,MAAM,GAAA,GAAM,IAAA,EAAM,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAErC,EAAA,MAAM,WAAW,EAAC;AAElB,EAAA,MAAM,cAAA,GAAiB,MAAM,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA;AAG3C,EAAA,KAAA,MAAW,YAAY,cAAA,EAAgB;AACrC,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AAC/B,MAAA,IAAI,IAAA,GAAO,KAAA;AACX,MAAA,KAAA,MAAW,YAAY,eAAA,EAAiB;AACtC,QAAA,IAAI,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,EAAG,IAAA,GAAO,IAAA;AAAA,MAC1C;AACA,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,IACxC;AAAA,EACF;AAKA,EAAA,OAAO,QAAA;AACT;AAzBsB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;;;ACDtB,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,CAAI,GAAA;AACxB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,gBAAgB,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,GAAA;AACT;AANS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAST,eAAsB,aAAa,IAAA,EAOhC;AACD,EAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,EAAS;AAC3B,EAAA,KAAA,CAAM,QAAA,GAAW,IAAA,EAAM,QAAA,IAAY,kBAAA,EAAmB;AAEtD,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,MAAM,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,MAAM,kBAAA,EAAoB;AAC5B,IAAA,KAAA,CAAM,eAAe,IAAA,CAAK,kBAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,YAAA,CAAa;AAAA,IACtC,KAAK,KAAA,CAAM;AAAA,GACZ,CAAA;AAED,EAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,IAAA,MAAM,cAAA,GAAiB,IAAI,oBAAA,CAAqB,WAAW,CAAA;AAE3D,IAAA,KAAA,CAAM,cAAc,cAAc,CAAA;AAClC,IAAA,MAAM,eAAe,UAAA,EAAW;AAAA,EAClC;AAEA,EAAA,KAAA,CAAM,wBAAA,GAA2B,IAAI,oBAAA,EAAqB;AAE1D,EAAA,MAAM,MAAM,UAAA,EAAW;AAEvB,EAAA,OAAO,KAAA;AACT;AAnCsB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA","file":"chunk-QDGAWJPB.js","sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\n\n// our tool may generate some additional files which we want to ignore\nconst SKIP_FILE_TYPES = ['.md', '.d.ts'];\n\nexport async function findEnvFiles(opts?: {\n cwd?: string,\n}) {\n const cwd = opts?.cwd || process.cwd();\n\n const envFiles = [];\n\n const filesWithinDir = await fs.readdir(cwd);\n\n // Filter for files starting with .env and check if they exist\n for (const fileName of filesWithinDir) {\n if (fileName.startsWith('.env')) {\n let skip = false;\n for (const fileType of SKIP_FILE_TYPES) {\n if (fileName.endsWith(fileType)) skip = true;\n }\n if (skip) continue;\n envFiles.push(path.join(cwd, fileName));\n }\n }\n\n // TODO: we may want to look up or down the folder tree?\n // TODO: we could support looking within specific directories (\"config\", \"env\", etc)\n\n return envFiles;\n}\n","import _ from '@env-spec/utils/my-dash';\nimport { EnvGraph } from './env-graph';\nimport { DotEnvFileDataSource, ProcessEnvDataSource } from './data-source';\nimport { findEnvFiles } from '@env-spec/utils/find-env-files';\n\nfunction autoDetectBasePath() {\n const PWD = process.env.PWD;\n if (!PWD) {\n throw new Error('PWD is not set');\n }\n return PWD;\n}\n\n\nexport async function loadEnvGraph(opts?: {\n basePath?: string,\n relativePaths?: Array<string>,\n checkGitIgnored?: boolean,\n excludeDirs?: Array<string>,\n currentEnvFallback?: string,\n afterInit?: (graph: EnvGraph) => Promise<void>,\n}) {\n const graph = new EnvGraph();\n graph.basePath = opts?.basePath ?? autoDetectBasePath();\n\n if (opts?.afterInit) {\n await opts.afterInit(graph);\n }\n\n if (opts?.currentEnvFallback) {\n graph.envFlagValue = opts.currentEnvFallback;\n }\n\n const envFilePaths = await findEnvFiles({\n cwd: graph.basePath,\n });\n\n for (const envFilePath of envFilePaths) {\n const fileDataSource = new DotEnvFileDataSource(envFilePath);\n // must call before finishInit so the dataSource has a reference to the graph\n graph.addDataSource(fileDataSource);\n await fileDataSource.finishInit();\n }\n // proocss.env overrides get some special treatment\n graph.finalOverridesDataSource = new ProcessEnvDataSource();\n\n await graph.finishLoad();\n\n return graph;\n}\n\n"]}
|
package/dist/chunk-WOHPERDH.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { loadEnvGraph } from './chunk-QDGAWJPB.js';
|
|
2
|
-
import { __name } from './chunk-XN24GZXQ.js';
|
|
3
|
-
|
|
4
|
-
// src/lib/load-graph.ts
|
|
5
|
-
async function loadVarlockEnvGraph(opts) {
|
|
6
|
-
const envGraph = await loadEnvGraph({
|
|
7
|
-
...opts,
|
|
8
|
-
afterInit: /* @__PURE__ */ __name(async (g) => {
|
|
9
|
-
}, "afterInit")
|
|
10
|
-
});
|
|
11
|
-
return envGraph;
|
|
12
|
-
}
|
|
13
|
-
__name(loadVarlockEnvGraph, "loadVarlockEnvGraph");
|
|
14
|
-
|
|
15
|
-
export { loadVarlockEnvGraph };
|
|
16
|
-
//# sourceMappingURL=chunk-WOHPERDH.js.map
|
|
17
|
-
//# sourceMappingURL=chunk-WOHPERDH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/load-graph.ts"],"names":[],"mappings":";;;;AAEA,eAAsB,oBAAoB,IAAA,EAEvC;AACD,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa;AAAA,IAClC,GAAG,IAAA;AAAA,IACH,SAAA,gCAAkB,CAAA,KAAM;AAAA,IAExB,CAAA,EAFW,WAAA;AAAA,GAGZ,CAAA;AAED,EAAA,OAAO,QAAA;AACT;AAXsB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA","file":"chunk-WOHPERDH.js","sourcesContent":["import { loadEnvGraph } from '@env-spec/env-graph';\n\nexport async function loadVarlockEnvGraph(opts?: {\n currentEnvFallback?: string,\n}) {\n const envGraph = await loadEnvGraph({\n ...opts,\n afterInit: async (g) => {\n // TODO: register varlock resolver\n },\n });\n\n return envGraph;\n}\n"]}
|