squilo 0.2.4 → 0.3.0

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 (45) hide show
  1. package/dist/index.d.ts +43 -0
  2. package/dist/index.js +270 -0
  3. package/dist/index.js.map +19 -0
  4. package/dist/pipes/auth/strategies/index.d.ts +8 -0
  5. package/dist/pipes/auth/strategies/index.js +133 -0
  6. package/dist/pipes/auth/strategies/index.js.map +11 -0
  7. package/dist/pipes/output/strategies/index.d.ts +12 -0
  8. package/dist/pipes/output/strategies/index.js +126 -0
  9. package/dist/pipes/output/strategies/index.js.map +13 -0
  10. package/dist/shared/chunk-s3vw82k6.js +23 -0
  11. package/dist/shared/chunk-s3vw82k6.js.map +9 -0
  12. package/package.json +31 -12
  13. package/src/.DS_Store +0 -0
  14. package/src/index.ts +0 -3
  15. package/src/pipes/auth/index.ts +0 -14
  16. package/src/pipes/auth/strategies/index.ts +0 -2
  17. package/src/pipes/auth/strategies/msal.ts +0 -140
  18. package/src/pipes/auth/strategies/userAndPassword.ts +0 -10
  19. package/src/pipes/auth/types.ts +0 -12
  20. package/src/pipes/connect/index.ts +0 -61
  21. package/src/pipes/connect/types.ts +0 -25
  22. package/src/pipes/execute/index.ts +0 -44
  23. package/src/pipes/index.ts +0 -1
  24. package/src/pipes/input/index.ts +0 -14
  25. package/src/pipes/input/types.ts +0 -7
  26. package/src/pipes/output/index.ts +0 -5
  27. package/src/pipes/output/strategies/console.ts +0 -7
  28. package/src/pipes/output/strategies/index.ts +0 -4
  29. package/src/pipes/output/strategies/json.spec.ts +0 -48
  30. package/src/pipes/output/strategies/json.ts +0 -20
  31. package/src/pipes/output/strategies/merge.spec.ts +0 -51
  32. package/src/pipes/output/strategies/merge.ts +0 -11
  33. package/src/pipes/output/strategies/xls.spec.ts +0 -93
  34. package/src/pipes/output/strategies/xls.ts +0 -111
  35. package/src/pipes/output/types.ts +0 -1
  36. package/src/pipes/retrieve/index.ts +0 -63
  37. package/src/pipes/retrieve/types.ts +0 -5
  38. package/src/pipes/server/index.ts +0 -6
  39. package/src/pipes/server/types.ts +0 -8
  40. package/src/pipes/shared/transaction-runner.ts +0 -58
  41. package/src/pipes/types.ts +0 -1
  42. package/src/pool/index.ts +0 -49
  43. package/src/utils/append-error.spec.ts +0 -100
  44. package/src/utils/append-error.ts +0 -74
  45. package/src/utils/load-env.ts +0 -18
@@ -0,0 +1,43 @@
1
+ import { config as config2 } from "mssql";
2
+ import { Transaction as Transaction3 } from "mssql";
3
+ import { Transaction as Transaction2 } from "mssql";
4
+ type OutputStrategy<
5
+ TReturn,
6
+ TOutput = void
7
+ > = (data: ReadableStream<Record<string, TReturn>>) => Promise<TOutput>;
8
+ import { ConnectionError, PreparedStatementError, RequestError, TransactionError } from "mssql";
9
+ type ErrorType = Error | ConnectionError | TransactionError | RequestError | PreparedStatementError;
10
+ type ExecutionError = {
11
+ database: string;
12
+ error: ErrorType;
13
+ };
14
+ type RetrieveChain<TReturn> = {
15
+ Output<TOutput>(strategy: OutputStrategy<TReturn, TOutput>): Promise<[ExecutionError[], TOutput]>;
16
+ };
17
+ type InputChain<TParam> = {
18
+ Execute(fn: (transaction: Transaction2, database: string, params: TParam) => Promise<void>): Promise<ExecutionError[]>;
19
+ Retrieve<TResult>(fn: (transaction: Transaction2, database: string, params: TParam) => Promise<TResult>): RetrieveChain<TResult>;
20
+ };
21
+ type ConnectionOptions = {
22
+ database: string;
23
+ query: `SELECT${string}FROM${string}`;
24
+ };
25
+ type ConnectionChain = {
26
+ Execute(fn: (transaction: Transaction3, database: string) => Promise<void>): Promise<ExecutionError[]>;
27
+ Retrieve<TResult>(fn: (transaction: Transaction3, database: string) => Promise<TResult>): RetrieveChain<TResult>;
28
+ Input<TParam>(fn: () => TParam): InputChain<TParam>;
29
+ };
30
+ type AuthenticationChain = {
31
+ Connect(database: string): ConnectionChain;
32
+ Connect(databases: string[], concurrent?: number): ConnectionChain;
33
+ Connect(options: ConnectionOptions, concurrent?: number): ConnectionChain;
34
+ Close(): Promise<void>;
35
+ };
36
+ import { config } from "mssql";
37
+ type AuthStrategy = (config: ServerConfig) => config;
38
+ type ServerConfig = Omit<config2, "authentication" | "user" | "password">;
39
+ type ServerChain = {
40
+ Auth(strategy: AuthStrategy): AuthenticationChain;
41
+ };
42
+ declare const Server: (config: ServerConfig) => ServerChain;
43
+ export { Server };
package/dist/index.js ADDED
@@ -0,0 +1,270 @@
1
+ // @bun
2
+ import"./shared/chunk-s3vw82k6.js";
3
+
4
+ // src/pool/index.ts
5
+ import { ConnectionPool } from "mssql";
6
+ function Pool(poolConfig) {
7
+ const POOL = {};
8
+ return {
9
+ connect: (partialConfig) => {
10
+ const config = { ...poolConfig, ...partialConfig };
11
+ const database = config.database;
12
+ if (!database) {
13
+ throw new Error("Database name is required");
14
+ }
15
+ if (!(database in POOL)) {
16
+ const pool = new ConnectionPool(config);
17
+ const close = pool.close.bind(pool);
18
+ pool.close = async () => {
19
+ delete POOL[database];
20
+ return await close();
21
+ };
22
+ pool.on("error", (err) => {
23
+ delete POOL[database];
24
+ throw err;
25
+ });
26
+ POOL[database] = pool.connect().catch((err) => {
27
+ delete POOL[database];
28
+ throw err;
29
+ });
30
+ }
31
+ return POOL[database];
32
+ },
33
+ closeAll: async () => {
34
+ const closes = Object.values(POOL).map((pool) => pool.then((p) => p.close()));
35
+ await Promise.all(closes);
36
+ }
37
+ };
38
+ }
39
+
40
+ // src/pipes/shared/transaction-runner.ts
41
+ import { Presets, SingleBar } from "cli-progress";
42
+
43
+ // src/utils/load-env.ts
44
+ var LoadEnv = () => {
45
+ const SAFE_GUARD = Number.parseInt(Bun.env.SAFE_GUARD || "1", 10);
46
+ return {
47
+ SAFE_GUARD
48
+ };
49
+ };
50
+
51
+ // src/pipes/shared/transaction-runner.ts
52
+ class SafeGuardError extends Error {
53
+ constructor() {
54
+ super(`Safe guard reached`);
55
+ }
56
+ }
57
+ var TransactionRunner = () => {
58
+ const singleBar = new SingleBar({
59
+ format: `{bar} {percentage}% | {value}/{total} | {database}`
60
+ }, Presets.shades_classic);
61
+ const [guard, trackError] = (() => {
62
+ const limit = LoadEnv().SAFE_GUARD;
63
+ let errorsCount = 0, open = false;
64
+ const guard2 = async () => {
65
+ if (open) {
66
+ throw new SafeGuardError;
67
+ }
68
+ };
69
+ const trackError2 = () => {
70
+ errorsCount++;
71
+ if (errorsCount >= limit) {
72
+ open = true;
73
+ }
74
+ };
75
+ return [guard2, trackError2];
76
+ })();
77
+ const runner = async ({
78
+ connection: dc,
79
+ input,
80
+ fn,
81
+ onSuccess = () => {},
82
+ onError = () => {}
83
+ }) => {
84
+ return guard().then(() => {
85
+ if (singleBar && Bun.env.NODE_ENV !== "test") {
86
+ singleBar.update({ database: dc.database });
87
+ }
88
+ }).then(() => dc.connection).then((opened) => opened.transaction()).then((tran) => tran.begin().then(() => fn(tran, dc.database, input)).then((result) => onSuccess(result)).then(() => tran.commit()).then(() => {
89
+ if (singleBar && Bun.env.NODE_ENV !== "test") {
90
+ singleBar.increment(1, { database: dc.database });
91
+ }
92
+ }).catch((error) => tran.rollback().then(() => {
93
+ throw error;
94
+ }))).catch(async (error) => {
95
+ if (error instanceof SafeGuardError) {
96
+ return;
97
+ }
98
+ trackError();
99
+ onError(error);
100
+ });
101
+ };
102
+ return [runner, singleBar];
103
+ };
104
+
105
+ // src/pipes/execute/index.ts
106
+ var Execute = (connections$, databases$, input) => {
107
+ return async (fn) => {
108
+ const errors = [];
109
+ const [runner, singleBar] = TransactionRunner();
110
+ const executeFn = (dc) => runner({
111
+ connection: dc,
112
+ input,
113
+ fn,
114
+ onError: async (error) => {
115
+ errors.push({
116
+ database: dc.database,
117
+ error: {
118
+ name: error.name,
119
+ message: error.message,
120
+ stack: error.stack,
121
+ code: error.code || undefined,
122
+ number: error.number || undefined,
123
+ state: error.state || undefined,
124
+ class: error.class || undefined,
125
+ serverName: error.serverName || undefined,
126
+ procName: error.procName || undefined,
127
+ lineNumber: error.lineNumber || undefined
128
+ }
129
+ });
130
+ }
131
+ });
132
+ const databases = await databases$;
133
+ if (Bun.env.NODE_ENV !== "test") {
134
+ singleBar.start(databases.length, 0);
135
+ }
136
+ for await (const connectionBatch of connections$(databases)) {
137
+ const executions = connectionBatch.map(executeFn);
138
+ await Promise.allSettled(executions);
139
+ }
140
+ if (Bun.env.NODE_ENV !== "test") {
141
+ singleBar.stop();
142
+ }
143
+ return errors;
144
+ };
145
+ };
146
+
147
+ // src/pipes/output/index.ts
148
+ var Output = (data, error) => async (strategy) => {
149
+ const errors = [];
150
+ const output = await strategy(data);
151
+ for await (const item of error) {
152
+ errors.push(item);
153
+ }
154
+ return [errors, output];
155
+ };
156
+
157
+ // src/pipes/retrieve/index.ts
158
+ var Retrieve = (connections$, databases$, input) => {
159
+ return (fn) => {
160
+ const { readable: readableData, writable: writableData } = new TransformStream;
161
+ const { readable: readableError, writable: writableError } = new TransformStream;
162
+ const dataWriter = writableData.getWriter();
163
+ const errorWriter = writableError.getWriter();
164
+ const [runner, singleBar] = TransactionRunner();
165
+ const executeFn = (dc) => runner({
166
+ connection: dc,
167
+ input,
168
+ fn,
169
+ onSuccess: async (result) => {
170
+ await dataWriter.write({ [dc.database]: result });
171
+ },
172
+ onError: async (error) => {
173
+ await errorWriter.write({ database: dc.database, error });
174
+ }
175
+ });
176
+ (async () => {
177
+ const databases = await databases$;
178
+ if (Bun.env.NODE_ENV !== "test") {
179
+ singleBar.start(databases.length, 0);
180
+ }
181
+ for await (const connectionBatch of connections$(databases)) {
182
+ const executions = connectionBatch.map(executeFn);
183
+ await Promise.allSettled(executions);
184
+ }
185
+ if (Bun.env.NODE_ENV !== "test") {
186
+ singleBar.stop();
187
+ }
188
+ await dataWriter.close();
189
+ await errorWriter.close();
190
+ })();
191
+ return {
192
+ Output: Output(readableData, readableError)
193
+ };
194
+ };
195
+ };
196
+
197
+ // src/pipes/input/index.ts
198
+ var Input = (connections$, databases$) => {
199
+ return (fn) => {
200
+ const params = fn();
201
+ return {
202
+ Execute: Execute(connections$, databases$, params),
203
+ Retrieve: Retrieve(connections$, databases$, params)
204
+ };
205
+ };
206
+ };
207
+
208
+ // src/pipes/connect/index.ts
209
+ var Connect = (pool) => (param, concurrent) => {
210
+ let connections$;
211
+ let databases$;
212
+ function connections(concurrent2 = Number.MAX_VALUE) {
213
+ return function* (databases) {
214
+ const _databases = [...databases];
215
+ const safe_guard = LoadEnv().SAFE_GUARD;
216
+ if (safe_guard > 0) {
217
+ const guard_test = _databases.splice(0, safe_guard);
218
+ for (const database of guard_test) {
219
+ yield [{
220
+ database,
221
+ connection: pool.connect({ database })
222
+ }];
223
+ }
224
+ }
225
+ const databases_result_chunks = Array.from({ length: Math.ceil(_databases.length / concurrent2) }, (_, i) => _databases.slice(i * concurrent2, (i + 1) * concurrent2));
226
+ for (const databases_result_chunk of databases_result_chunks) {
227
+ yield databases_result_chunk.map((database) => ({
228
+ database,
229
+ connection: pool.connect({ database })
230
+ }));
231
+ }
232
+ };
233
+ }
234
+ if (typeof param === "string") {
235
+ databases$ = Promise.resolve([param]);
236
+ } else if (Array.isArray(param)) {
237
+ databases$ = Promise.resolve(param);
238
+ } else if (typeof param === "object" && "query" in param) {
239
+ databases$ = pool.connect({ database: param.database, arrayRowMode: true }).then((conn) => conn.request().query(param.query)).then((result) => result.recordset.flat());
240
+ } else {
241
+ throw new Error("Invalid parameter");
242
+ }
243
+ connections$ = connections(concurrent);
244
+ return {
245
+ Input: Input(connections$, databases$),
246
+ Execute: Execute(connections$, databases$, null),
247
+ Retrieve: Retrieve(connections$, databases$, null)
248
+ };
249
+ };
250
+
251
+ // src/pipes/auth/index.ts
252
+ var Auth = (config) => (strategy) => {
253
+ const configWithAuth = strategy(config);
254
+ const pool = Pool(configWithAuth);
255
+ return {
256
+ Connect: Connect(pool),
257
+ Close: () => pool.closeAll()
258
+ };
259
+ };
260
+
261
+ // src/pipes/server/index.ts
262
+ var Server = (config) => ({
263
+ Auth: Auth(config)
264
+ });
265
+ export {
266
+ Server
267
+ };
268
+
269
+ //# debugId=7B64C9FB2CADE14664756E2164756E21
270
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,19 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/pool/index.ts", "src/pipes/shared/transaction-runner.ts", "src/utils/load-env.ts", "src/pipes/execute/index.ts", "src/pipes/output/index.ts", "src/pipes/retrieve/index.ts", "src/pipes/input/index.ts", "src/pipes/connect/index.ts", "src/pipes/auth/index.ts", "src/pipes/server/index.ts"],
4
+ "sourcesContent": [
5
+ "import { type config, ConnectionPool } from 'mssql';\nexport type Pool = {\n connect: (partialConfig: Partial<config>) => Promise<ConnectionPool>;\n closeAll: () => Promise<void>;\n}\n\nexport function Pool(poolConfig: config): Pool {\n const POOL: Record<string, Promise<ConnectionPool>> = {};\n\n return {\n connect: (partialConfig: Partial<config>) => {\n const config = { ...poolConfig, ...partialConfig };\n const database = config.database;\n\n if (!database) {\n throw new Error('Database name is required');\n }\n\n if (!(database in POOL)) {\n const pool = new ConnectionPool(config);\n const close = pool.close.bind(pool);\n\n pool.close = async () => {\n delete POOL[database];\n return await close();\n }\n\n pool.on('error', err => {\n delete POOL[database];\n throw err;\n });\n\n POOL[database] = pool\n .connect()\n .catch(err => {\n delete POOL[database];\n throw err;\n });\n }\n\n return POOL[database]!;\n },\n closeAll: async () => {\n const closes = Object.values(POOL).map(pool => pool.then(p => p.close()));\n await Promise.all(closes);\n }\n\n }\n}",
6
+ "import type { ConnectionError, PreparedStatementError, RequestError, Transaction, TransactionError } from 'mssql';\nimport type { DatabaseConnection } from '../connect/types';\nimport { Presets, SingleBar } from 'cli-progress';\nimport { LoadEnv } from '../../utils/load-env';\n\nexport type ErrorType = Error | ConnectionError | TransactionError | RequestError | PreparedStatementError;\n\nexport interface TransactionRunnerOptions<TParam, TReturn> {\n connection: DatabaseConnection;\n input: TParam;\n fn: (transaction: Transaction, database: string, params: TParam) => Promise<TReturn>;\n onSuccess?: (result: TReturn) => Promise<void> | void;\n onError?: (error: ErrorType) => Promise<void> | void;\n}\n\nexport type TransactionRunner = <TParam, TReturn>(options: TransactionRunnerOptions<TParam, TReturn>) => Promise<void>;\n\nclass SafeGuardError extends Error {\n constructor() {\n super(`Safe guard reached`);\n }\n}\n\nexport const TransactionRunner = (): [TransactionRunner, SingleBar] => {\n const singleBar = new SingleBar({\n format: `{bar} {percentage}% | {value}/{total} | {database}`\n }, Presets.shades_classic);\n\n const [guard, trackError] = (() => {\n const limit = LoadEnv().SAFE_GUARD;\n let errorsCount = 0, open = false;\n\n const guard = async () => {\n if (open) {\n throw new SafeGuardError();\n }\n }\n\n const trackError = () => {\n errorsCount++;\n if (errorsCount >= limit) {\n open = true;\n }\n }\n\n return [guard, trackError];\n })()\n\n const runner = async <TParam, TReturn>({\n connection: dc,\n input,\n fn,\n onSuccess = () => { },\n onError = () => { }\n }: TransactionRunnerOptions<TParam, TReturn>): Promise<void> => {\n return guard()\n .then(() => {\n if (singleBar && Bun.env.NODE_ENV !== 'test') {\n singleBar.update({ database: dc.database });\n }\n })\n .then(() => dc.connection)\n .then(opened => opened.transaction())\n .then(tran => tran.begin()\n .then(() => fn(tran, dc.database, input))\n .then(result => onSuccess(result))\n .then(() => tran.commit())\n .then(() => {\n if (singleBar && Bun.env.NODE_ENV !== 'test') {\n singleBar.increment(1, { database: dc.database });\n }\n })\n .catch(error => tran.rollback().then(() => { throw error }))\n )\n .catch(async error => {\n if (error instanceof SafeGuardError) {\n return;\n }\n\n trackError();\n onError(error as ErrorType);\n });\n };\n\n return [runner, singleBar];\n};\n",
7
+ "type Env = {\n SAFE_GUARD: number;\n}\n\ntype StringEnv = {\n [P in keyof Env]?: string\n}\n\ndeclare module \"bun\" {\n interface Env extends StringEnv { }\n}\n\nexport const LoadEnv = (): Env => {\n const SAFE_GUARD = Number.parseInt(Bun.env.SAFE_GUARD || '1', 10);\n return {\n SAFE_GUARD: SAFE_GUARD\n }\n}",
8
+ "import type { Transaction } from 'mssql';\nimport type { DatabaseConnection } from \"../connect/types\";\nimport { TransactionRunner } from '../shared/transaction-runner';\nimport type { ExecutionError } from './types';\n\nexport const Execute = <TParam>(\n connections$: (databases: string[]) => Generator<DatabaseConnection[]>,\n databases$: Promise<string[]>,\n input: TParam\n) => {\n return async (\n fn: (transaction: Transaction, database: string, params: TParam) => Promise<void>\n ): Promise<ExecutionError[]> => {\n const errors: ExecutionError[] = [];\n\n const [runner, singleBar] = TransactionRunner();\n\n const executeFn = (dc: DatabaseConnection) => runner({\n connection: dc,\n input,\n fn,\n onError: async (error) => {\n errors.push({\n database: dc.database,\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n code: (error as any).code || undefined,\n number: (error as any).number || undefined,\n state: (error as any).state || undefined,\n class: (error as any).class || undefined,\n serverName: (error as any).serverName || undefined,\n procName: (error as any).procName || undefined,\n lineNumber: (error as any).lineNumber || undefined\n }\n });\n }\n });\n\n const databases = await databases$;\n\n if (Bun.env.NODE_ENV !== 'test') {\n singleBar.start(databases.length, 0);\n }\n\n for await (const connectionBatch of connections$(databases)) {\n const executions = connectionBatch.map(executeFn);\n await Promise.allSettled(executions);\n }\n\n if (Bun.env.NODE_ENV !== 'test') {\n singleBar.stop();\n }\n\n return errors;\n };\n};",
9
+ "import type { ExecutionError } from \"../execute/types\";\nimport type { OutputStrategy } from \"./strategies/types\";\n\nexport const Output =\n <TReturn, TOutput = void>(\n data: ReadableStream<Record<string, TReturn>>,\n error: ReadableStream<ExecutionError>\n ) =>\n async (strategy: OutputStrategy<TReturn, TOutput>): Promise<[ExecutionError[], TOutput]> => {\n const errors: ExecutionError[] = [];\n const output = await strategy(data);\n for await (const item of error) {\n errors.push(item);\n }\n return [errors, output];\n };\n",
10
+ "import type { Transaction } from \"mssql\";\nimport { Output } from \"../output\"\nimport type { DatabaseConnection } from \"../connect/types\";\nimport type { RetrieveChain } from \"./types\";\nimport { TransactionRunner } from \"../shared/transaction-runner\";\nimport type { ExecutionError } from \"../execute/types\";\n\nexport const Retrieve = <TParam>(\n connections$: (databases: string[]) => Generator<DatabaseConnection[]>,\n databases$: Promise<string[]>,\n input: TParam\n) => {\n return <TReturn>(fn: (transaction: Transaction, database: string, params: TParam) => Promise<TReturn>): RetrieveChain<TReturn> => {\n const { readable: readableData, writable: writableData } = new TransformStream<Record<string, TReturn>, Record<string, TReturn>>();\n const { readable: readableError, writable: writableError } = new TransformStream<ExecutionError, ExecutionError>();\n const dataWriter = writableData.getWriter();\n const errorWriter = writableError.getWriter();\n\n const [runner, singleBar] = TransactionRunner();\n\n const executeFn = (dc: DatabaseConnection) => runner({\n connection: dc,\n input,\n fn,\n onSuccess: async (result) => {\n await dataWriter.write({ [dc.database]: result });\n },\n onError: async (error) => {\n await errorWriter.write({ database: dc.database, error });\n }\n });\n\n // Process all connections and close the stream when done\n (async () => {\n const databases = await databases$;\n\n if (Bun.env.NODE_ENV !== 'test') {\n singleBar.start(databases.length, 0);\n }\n\n for await (const connectionBatch of connections$(databases)) {\n const executions = connectionBatch.map(executeFn);\n await Promise.allSettled(executions);\n }\n\n if (Bun.env.NODE_ENV !== 'test') {\n singleBar.stop();\n }\n\n await dataWriter.close();\n await errorWriter.close();\n })();\n\n return {\n Output: Output(readableData, readableError)\n };\n }\n}",
11
+ "import { Execute } from \"../execute\";\nimport type { DatabaseConnection } from \"../connect/types\";\nimport { Retrieve } from \"../retrieve\";\nimport type { InputChain } from \"./types\";\n\nexport const Input = (connections$: (databases: string[]) => Generator<DatabaseConnection[]>, databases$: Promise<string[]>) => {\n return <TParam>(fn: () => TParam): InputChain<TParam> => {\n const params = fn();\n return {\n Execute: Execute(connections$, databases$, params),\n Retrieve: Retrieve(connections$, databases$, params)\n }\n }\n}\n",
12
+ "import type { Pool } from \"../../pool\";\nimport { Input } from \"../input\";\nimport { Execute } from \"../execute\";\nimport { Retrieve } from \"../retrieve\";\n\nimport type { ConnectOverloads, ConnectionOptions, ConnectionChain, DatabaseConnection } from \"./types\";\nimport { LoadEnv } from \"../../utils/load-env\";\n\nexport const Connect = (pool: Pool): ConnectOverloads => (param: string | string[] | ConnectionOptions, concurrent?: number): ConnectionChain => {\n let connections$: (databases: string[]) => Generator<DatabaseConnection[]>;\n let databases$: Promise<string[]>;\n\n function connections(concurrent: number = Number.MAX_VALUE): (databases: string[]) => Generator<DatabaseConnection[]> {\n return function* (databases: string[]) {\n const _databases = [...databases];\n const safe_guard = LoadEnv().SAFE_GUARD;\n\n if (safe_guard > 0) {\n const guard_test = _databases.splice(0, safe_guard);\n\n for (const database of guard_test) {\n yield [{\n database,\n connection: pool.connect({ database })\n }];\n }\n }\n\n const databases_result_chunks = Array.from(\n { length: Math.ceil(_databases.length / concurrent) },\n (_, i) => _databases.slice(i * concurrent, (i + 1) * concurrent)\n );\n\n for (const databases_result_chunk of databases_result_chunks) {\n yield databases_result_chunk.map(database => ({\n database,\n connection: pool.connect({ database })\n }));\n }\n }\n }\n\n if (typeof param === 'string') {\n databases$ = Promise.resolve([param]);\n }\n\n else if (Array.isArray(param)) {\n databases$ = Promise.resolve(param);\n }\n\n else if (typeof param === 'object' && 'query' in param) {\n databases$ = pool\n .connect({ database: param.database, arrayRowMode: true })\n .then(conn => conn\n .request()\n .query<string[]>(param.query)\n )\n .then(result => result.recordset.flat())\n }\n\n else {\n throw new Error(\"Invalid parameter\");\n }\n\n connections$ = connections(concurrent);\n\n return {\n Input: Input(connections$, databases$),\n Execute: Execute(connections$, databases$, null),\n Retrieve: Retrieve(connections$, databases$, null)\n }\n}",
13
+ "import type { ServerConfig } from \"../server/types\";\nimport { Pool } from \"../../pool\";\nimport { Connect } from \"../connect\";\nimport type { AuthenticationChain } from \"./types\";\nimport type { AuthStrategy } from \"./strategies/types\";\n\nexport const Auth = (config: ServerConfig) => (strategy: AuthStrategy): AuthenticationChain => {\n const configWithAuth = strategy(config);\n const pool = Pool(configWithAuth);\n\n return {\n Connect: Connect(pool),\n Close: () => pool.closeAll(),\n }\n}",
14
+ "import { Auth } from \"../auth\";\nimport type { ServerChain, ServerConfig } from \"./types\";\n\nexport const Server = (config: ServerConfig): ServerChain => ({\n Auth: Auth(config),\n});"
15
+ ],
16
+ "mappings": "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",
17
+ "debugId": "7B64C9FB2CADE14664756E2164756E21",
18
+ "names": []
19
+ }
@@ -0,0 +1,8 @@
1
+ import { config } from "mssql";
2
+ type ServerConfig = Omit<config, "authentication" | "user" | "password">;
3
+ import { config as config2 } from "mssql";
4
+ type AuthStrategy = (config2: ServerConfig) => config2;
5
+ declare const UserAndPassword: (username: string, password: string) => AuthStrategy;
6
+ import { NodeAuthOptions } from "@azure/msal-node";
7
+ declare const ActiveDirectoryAccessToken: (config: NodeAuthOptions) => Promise<AuthStrategy>;
8
+ export { UserAndPassword, AuthStrategy, ActiveDirectoryAccessToken };
@@ -0,0 +1,133 @@
1
+ // @bun
2
+ import {
3
+ __require,
4
+ __toESM
5
+ } from "../../../shared/chunk-s3vw82k6.js";
6
+
7
+ // src/pipes/auth/strategies/userAndPassword.ts
8
+ var UserAndPassword = (username, password) => (config) => {
9
+ return {
10
+ ...config,
11
+ user: username,
12
+ password
13
+ };
14
+ };
15
+ // src/pipes/auth/strategies/msal.ts
16
+ import {
17
+ LogLevel,
18
+ PublicClientApplication
19
+ } from "@azure/msal-node";
20
+ import * as path from "path";
21
+ import { cwd } from "process";
22
+ var SCOPES = ["https://database.windows.net//.default"];
23
+ var cacheAccess = (hash) => {
24
+ const cacheFilePath = path.join(cwd(), `./.active-directory-cache/${hash}.json`);
25
+ const before = async (cacheContext) => {
26
+ try {
27
+ const cacheFile = await Bun.file(cacheFilePath).text();
28
+ cacheContext.tokenCache.deserialize(cacheFile);
29
+ } catch (err) {
30
+ await Bun.write(cacheFilePath, "");
31
+ cacheContext.tokenCache.deserialize("");
32
+ }
33
+ };
34
+ const after = async (cacheContext) => {
35
+ if (cacheContext.cacheHasChanged) {
36
+ try {
37
+ await Bun.write(cacheFilePath, cacheContext.tokenCache.serialize());
38
+ } catch (err) {
39
+ console.error(err);
40
+ }
41
+ }
42
+ };
43
+ return {
44
+ beforeCacheAccess: before,
45
+ afterCacheAccess: after
46
+ };
47
+ };
48
+ var msalConfig = (config, cachePlugin) => ({
49
+ auth: config,
50
+ cache: {
51
+ cachePlugin
52
+ },
53
+ system: {
54
+ loggerOptions: {
55
+ loggerCallback(loglevel, message) {
56
+ console.log(message);
57
+ },
58
+ piiLoggingEnabled: false,
59
+ logLevel: LogLevel.Error
60
+ }
61
+ }
62
+ });
63
+ var GetToken = async (config) => {
64
+ const tenantId = config.authority?.replace("https://login.microsoftonline.com/", "");
65
+ const clientId = config.clientId;
66
+ const pca = new PublicClientApplication(msalConfig(config, cacheAccess(`${tenantId}-${clientId}`)));
67
+ const tokenCache = pca.getTokenCache();
68
+ async function getAccount() {
69
+ return await tokenCache.getAllAccounts();
70
+ }
71
+ const accounts = await getAccount();
72
+ let result;
73
+ if (accounts.length > 0 && accounts[0]) {
74
+ try {
75
+ result = await pca.acquireTokenSilent({
76
+ scopes: SCOPES,
77
+ account: accounts[0]
78
+ });
79
+ return result?.accessToken;
80
+ } catch (error) {
81
+ if (error instanceof Error) {
82
+ console.error("Silent token acquisition failed:", error.message);
83
+ }
84
+ console.log("Proceeding to interactive authentication");
85
+ }
86
+ }
87
+ const interactiveRequest = {
88
+ scopes: SCOPES,
89
+ openBrowser: async (url) => {
90
+ const { default: open } = await import("open");
91
+ open(url);
92
+ },
93
+ successTemplate: `
94
+ <html lang="HTML5">
95
+ <head>
96
+ <title>Authentication Success</title>
97
+ </head>
98
+ <script>
99
+ setTimeout(() => {
100
+ window.close();
101
+ }, 1000);
102
+ </script>
103
+ <body>
104
+ <h1>Authentication Success</h1>
105
+ <p>This window will be closed now</p>
106
+ </body>
107
+ </html>
108
+ `
109
+ };
110
+ result = await pca.acquireTokenInteractive(interactiveRequest);
111
+ return result?.accessToken;
112
+ };
113
+ var ActiveDirectoryAccessToken = async (config) => {
114
+ const accessToken = await GetToken(config);
115
+ return (config2) => {
116
+ return {
117
+ ...config2,
118
+ authentication: {
119
+ type: "azure-active-directory-access-token",
120
+ options: {
121
+ token: accessToken
122
+ }
123
+ }
124
+ };
125
+ };
126
+ };
127
+ export {
128
+ UserAndPassword,
129
+ ActiveDirectoryAccessToken
130
+ };
131
+
132
+ //# debugId=2C8A578FAEFB90EA64756E2164756E21
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/pipes/auth/strategies/userAndPassword.ts", "src/pipes/auth/strategies/msal.ts"],
4
+ "sourcesContent": [
5
+ "import type { AuthStrategy } from \"./types\"\nimport type { ServerConfig } from \"../../server/types\"\n\nexport const UserAndPassword = (username: string, password: string): AuthStrategy => (config: ServerConfig) => {\n return {\n ...config,\n user: username,\n password\n }\n}",
6
+ "import {\n type AuthenticationResult,\n type Configuration,\n type ICachePlugin,\n type InteractiveRequest,\n LogLevel,\n type NodeAuthOptions,\n PublicClientApplication,\n type TokenCache,\n type TokenCacheContext,\n} from \"@azure/msal-node\";\n\nimport * as path from \"path\";\nimport type { ServerConfig } from \"../../server/types\";\nimport type { AuthStrategy } from \"./types\";\nimport { cwd } from \"process\";\n\nconst SCOPES = [\"https://database.windows.net//.default\"];\n\nconst cacheAccess = (hash: string) => {\n const cacheFilePath = path.join(cwd(), `./.active-directory-cache/${hash}.json`);\n\n const before = async (cacheContext: TokenCacheContext) => {\n try {\n const cacheFile = await Bun.file(cacheFilePath).text();\n cacheContext.tokenCache.deserialize(cacheFile);\n } catch (err) {\n await Bun.write(cacheFilePath, \"\");\n cacheContext.tokenCache.deserialize(\"\");\n }\n };\n\n const after = async (cacheContext: TokenCacheContext) => {\n if (cacheContext.cacheHasChanged) {\n try {\n await Bun.write(cacheFilePath, cacheContext.tokenCache.serialize());\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n return {\n beforeCacheAccess: before,\n afterCacheAccess: after,\n };\n};\n\nconst msalConfig = (config: NodeAuthOptions, cachePlugin: ICachePlugin) => ({\n auth: config,\n cache: {\n cachePlugin,\n },\n system: {\n loggerOptions: {\n loggerCallback(loglevel, message) {\n console.log(message);\n },\n piiLoggingEnabled: false,\n logLevel: LogLevel.Error,\n },\n },\n} as Configuration);\n\nexport const GetToken = async (config: NodeAuthOptions): Promise<string> => {\n const tenantId = config.authority?.replace(\"https://login.microsoftonline.com/\", \"\");\n const clientId = config.clientId;\n\n const pca: PublicClientApplication = new PublicClientApplication(\n msalConfig(config, cacheAccess(`${tenantId}-${clientId}`)),\n );\n\n const tokenCache: TokenCache = pca.getTokenCache();\n\n async function getAccount() {\n return await tokenCache.getAllAccounts();\n }\n\n const accounts = await getAccount();\n let result: AuthenticationResult | null;\n\n if (accounts.length > 0 && accounts[0]) {\n try {\n result = await pca.acquireTokenSilent({\n scopes: SCOPES,\n account: accounts[0],\n });\n\n return result?.accessToken;\n } catch (error) {\n if (error instanceof Error) {\n console.error('Silent token acquisition failed:', error.message);\n }\n console.log(\"Proceeding to interactive authentication\");\n }\n }\n\n const interactiveRequest: InteractiveRequest = {\n scopes: SCOPES,\n openBrowser: async (url) => {\n const { default: open } = await import(\"open\");\n open(url);\n },\n successTemplate: `\n <html lang=\"HTML5\">\n <head>\n <title>Authentication Success</title>\n </head>\n <script>\n setTimeout(() => {\n window.close();\n }, 1000);\n </script>\n <body>\n <h1>Authentication Success</h1>\n <p>This window will be closed now</p>\n </body>\n </html>\n `,\n };\n\n result = await pca.acquireTokenInteractive(interactiveRequest);\n\n return result?.accessToken;\n};\n\nexport const ActiveDirectoryAccessToken = async (config: NodeAuthOptions): Promise<AuthStrategy> => {\n const accessToken = await GetToken(config);\n return (config: ServerConfig) => {\n return {\n ...config,\n authentication: {\n type: 'azure-active-directory-access-token',\n options: {\n token: accessToken\n }\n }\n }\n }\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "2C8A578FAEFB90EA64756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,12 @@
1
+ type OutputStrategy<
2
+ TReturn,
3
+ TOutput = void
4
+ > = (data: ReadableStream<Record<string, TReturn>>) => Promise<TOutput>;
5
+ declare const MergeOutputStrategy: <
6
+ TData extends Array<unknown>,
7
+ TMerged = TData extends Array<infer TItem> ? TItem : TData
8
+ >() => OutputStrategy<TData, TMerged[]>;
9
+ declare const ConsoleOutputStrategy: <TData>() => OutputStrategy<TData, void>;
10
+ declare const JsonOutputStrategy: <TData>() => OutputStrategy<TData, string>;
11
+ declare const XlsOutputStrategy: <TData>(unique?: boolean) => OutputStrategy<TData, string>;
12
+ export { XlsOutputStrategy, OutputStrategy, MergeOutputStrategy, JsonOutputStrategy, ConsoleOutputStrategy };