zeed 0.7.147 → 0.7.151

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.
@@ -1,3 +1,3 @@
1
- export { d1 as ArgumentsType, c4 as AsyncMutex, P as BinInput, cC as Channel, cB as ChannelMessageEvent, cQ as CryptoEncoder, al as Currency, aj as CurrencyInput, am as DAY_MS, aJ as Day, ao as DayInput, aI as DayInputLegacy, an as DayValue, aP as DecimalInput, aO as DecimalValue, cI as DefaultListener, bW as Disposable, bV as Disposer, bU as DisposerFunction, cJ as Emitter, cG as EmitterAllHandler, cF as EmitterHandler, cN as Encoder, dq as Json, cP as JsonEncoder, cH as ListenerSignature, cD as LocalChannel, cw as LoggerConsoleHandler, cA as LoggerMemoryHandler, dl as MemStorage, dk as MemStorageOptions, cT as Message, cR as MessageAction, cX as MessageDefinitions, cY as MessageHub, cS as MessageResult, cV as MessagesDefaultMethods, cW as MessagesMethods, cU as MessagesOptions, c3 as Mutex, ds as NestedArray, cO as NoopEncoder, dr as ObjectStorage, cd as Pool, c9 as PoolTask, cb as PoolTaskEvents, c7 as PoolTaskFn, ca as PoolTaskIdConflictResolution, c8 as PoolTaskState, aY as Primitive, c$ as PubSub, d4 as RPCFn, d3 as RPCOptions, d5 as RPCReturn, af as RenderMessagesOptions, d2 as ReturnType, bo as RoundingMode, cr as SerialQueue, bz as SortableItem, cq as TaskEvents, cp as TaskFn, $ as Uint8ArrayToJson, U as Uint8ArrayToString, b$ as UseDefer, bY as UseDispose, bT as XRX, Q as _decodeUtf8Polyfill, _ as _encodeUtf8Polyfill, B as arrayAvg, C as arrayBatches, p as arrayEmptyInPlace, n as arrayFilterInPlace, i as arrayFlatten, j as arrayIntersection, t as arrayIsEqual, y as arrayMax, z as arrayMin, g as arrayMinus, x as arrayRandomElement, l as arrayRemoveElement, m as arraySetElement, v as arrayShuffle, w as arrayShuffleForce, u as arrayShuffleInPlace, q as arraySorted, s as arraySortedNumbers, A as arraySum, k as arraySymmetricDifference, o as arrayToggleInPlace, h as arrayUnion, f as arrayUnique, bf as avg, bd as between, bO as cloneJsonObject, bN as cloneObject, bk as cmp, bj as composeOrderby, D as createArray, ce as createPromise, cZ as createPromiseProxy, c as csv, ak as currency, aN as dateStringToDays, aM as day, ar as dayDay, aH as dayDiff, av as dayFromAny, ax as dayFromDate, ay as dayFromDateGMT, aC as dayFromParts, aD as dayFromString, aA as dayFromTimestamp, au as dayFromToday, aq as dayMonth, aE as dayMonthStart, aG as dayOffset, at as dayToDate, aw as dayToDateGMT, as as dayToParts, aB as dayToString, az as dayToTimestamp, ap as dayYear, aF as dayYearStart, ct as debounce, aQ as decimal, aT as decimalCentsPart, aR as decimalFromCents, aS as decimalToCents, G as decodeBase16, I as decodeBase32, K as decodeBase58, M as decodeBase62, O as decodeBase64, b as decrypt, aU as deepEqual, aV as deepMerge, a as deriveKeyPbkdf2, dg as detect, d as digest, bM as empty, F as encodeBase16, H as encodeBase32, J as encodeBase58, L as encodeBase62, N as encodeBase64, bG as encodeQuery, e as encrypt, bB as endSortWeight, bI as ensureKey, bJ as ensureKeyAsync, Y as equalBinary, aW as escapeHTML, bn as escapeRegExp, cE as fakeWorkerPair, d8 as fetchBasic, d9 as fetchJson, da as fetchOptionsFormURLEncoded, db as fetchOptionsJson, dc as fetchText, ai as fixBrokenUth8String, aK as forEachDay, bQ as forTimes, ag as formatMessages, dn as formatMilliseconds, X as fromBase64, a3 as fromCamelCase, df as getGlobal, cu as getGlobalContext, cK as getGlobalEmitter, cx as getNamespaceFilterString, de as getNavigator, b8 as getSecureRandom, b9 as getSecureRandomIfPossible, dm as getTimestamp, dd as getWindow, d7 as httpMethod, cg as immediate, a$ as isArray, b5 as isBoolean, dh as isBrowser, bq as isEven, bp as isHalf, b3 as isInteger, cv as isLocalHost, b6 as isNullOrUndefined, b2 as isNumber, aZ as isObject, bh as isPrime, bg as isPrimeRX, a_ as isPrimitive, cn as isPromise, b0 as isRecord, b4 as isSafeInteger, b1 as isString, ck as isTimeout, b7 as jsonStringify, Z as jsonToUint8Array, bL as last, cM as lazyListener, bE as linkifyPlainText, bP as memoize, cL as messages, bC as moveSortWeight, dp as parseDate, bi as parseOrderby, bH as parseQuery, di as platform, co as promisify, dC as qid, ba as randomBoolean, bc as randomFloat, bb as randomInt, r as randomUint8Array, bS as regExpEscape, bR as regExpString, ah as renderMessages, bs as roundDown, bv as roundHalfAwayFromZero, bw as roundHalfDown, bx as roundHalfEven, bu as roundHalfOdd, by as roundHalfTowardsZero, bt as roundHalfUp, br as roundUp, bK as size, cf as sleep, bD as sortedItems, bl as sortedOrderby, bA as startSortWeight, a4 as stringToBoolean, a6 as stringToFloat, a5 as stringToInteger, R as stringToUInt8Array, dF as suid, dE as suidBytes, dH as suidBytesDate, dG as suidDate, be as sum, cs as throttle, ci as timeout, ch as timeoutReached, cj as timoutError, V as toBase64, W as toBase64Url, ae as toBool, a0 as toCamelCase, a1 as toCapitalize, a2 as toCapitalizeWords, ab as toFloat, T as toHex, bF as toHumanReadableUrl, ac as toInt, ad as toString, S as toUint8Array, bm as toValidFilename, aL as today, cl as tryTimeout, dB as uname, aX as unescapeHTML, c6 as useAsyncMutex, E as useBase, b_ as useDefer, bX as useDispose, bZ as useDisposer, c2 as useEventListener, dj as useExitHandler, c1 as useInterval, cz as useLevelFilter, c_ as useMessageHub, c5 as useMutex, cy as useNamespaceFilter, cc as usePool, d0 as usePubSub, d6 as useRPC, c0 as useTimeout, dv as uuid, dA as uuid32Decode, dz as uuid32Encode, du as uuid32bit, dy as uuidB32, dt as uuidBytes, dx as uuidDecode, dw as uuidEncode, dD as uuidv4, a7 as valueToBoolean, a9 as valueToFloat, a8 as valueToInteger, aa as valueToString, cm as waitOn } from './uuid-19af3724.js';
1
+ export { d1 as ArgumentsType, c4 as AsyncMutex, P as BinInput, cC as Channel, cB as ChannelMessageEvent, cQ as CryptoEncoder, al as Currency, aj as CurrencyInput, am as DAY_MS, aJ as Day, ao as DayInput, aI as DayInputLegacy, an as DayValue, aP as DecimalInput, aO as DecimalValue, cI as DefaultListener, bW as Disposable, bV as Disposer, bU as DisposerFunction, cJ as Emitter, cG as EmitterAllHandler, cF as EmitterHandler, cN as Encoder, dq as Json, cP as JsonEncoder, cH as ListenerSignature, cD as LocalChannel, cw as LoggerConsoleHandler, cA as LoggerMemoryHandler, dl as MemStorage, dk as MemStorageOptions, cT as Message, cR as MessageAction, cX as MessageDefinitions, cY as MessageHub, cS as MessageResult, cV as MessagesDefaultMethods, cW as MessagesMethods, cU as MessagesOptions, c3 as Mutex, ds as NestedArray, cO as NoopEncoder, dr as ObjectStorage, cd as Pool, c9 as PoolTask, cb as PoolTaskEvents, c7 as PoolTaskFn, ca as PoolTaskIdConflictResolution, c8 as PoolTaskState, aY as Primitive, c$ as PubSub, d4 as RPCFn, d3 as RPCOptions, d5 as RPCReturn, af as RenderMessagesOptions, d2 as ReturnType, bo as RoundingMode, cr as SerialQueue, bz as SortableItem, cq as TaskEvents, cp as TaskFn, $ as Uint8ArrayToJson, U as Uint8ArrayToString, b$ as UseDefer, bY as UseDispose, bT as XRX, Q as _decodeUtf8Polyfill, _ as _encodeUtf8Polyfill, B as arrayAvg, C as arrayBatches, p as arrayEmptyInPlace, n as arrayFilterInPlace, i as arrayFlatten, j as arrayIntersection, t as arrayIsEqual, y as arrayMax, z as arrayMin, g as arrayMinus, x as arrayRandomElement, l as arrayRemoveElement, m as arraySetElement, v as arrayShuffle, w as arrayShuffleForce, u as arrayShuffleInPlace, q as arraySorted, s as arraySortedNumbers, A as arraySum, k as arraySymmetricDifference, o as arrayToggleInPlace, h as arrayUnion, f as arrayUnique, bf as avg, bd as between, bO as cloneJsonObject, bN as cloneObject, bk as cmp, bj as composeOrderby, D as createArray, ce as createPromise, cZ as createPromiseProxy, c as csv, ak as currency, aN as dateStringToDays, aM as day, ar as dayDay, aH as dayDiff, av as dayFromAny, ax as dayFromDate, ay as dayFromDateGMT, aC as dayFromParts, aD as dayFromString, aA as dayFromTimestamp, au as dayFromToday, aq as dayMonth, aE as dayMonthStart, aG as dayOffset, at as dayToDate, aw as dayToDateGMT, as as dayToParts, aB as dayToString, az as dayToTimestamp, ap as dayYear, aF as dayYearStart, ct as debounce, aQ as decimal, aT as decimalCentsPart, aR as decimalFromCents, aS as decimalToCents, G as decodeBase16, I as decodeBase32, K as decodeBase58, M as decodeBase62, O as decodeBase64, b as decrypt, aU as deepEqual, aV as deepMerge, a as deriveKeyPbkdf2, dg as detect, d as digest, bM as empty, F as encodeBase16, H as encodeBase32, J as encodeBase58, L as encodeBase62, N as encodeBase64, bG as encodeQuery, e as encrypt, bB as endSortWeight, bI as ensureKey, bJ as ensureKeyAsync, Y as equalBinary, aW as escapeHTML, bn as escapeRegExp, cE as fakeWorkerPair, d8 as fetchBasic, d9 as fetchJson, da as fetchOptionsFormURLEncoded, db as fetchOptionsJson, dc as fetchText, ai as fixBrokenUth8String, aK as forEachDay, bQ as forTimes, ag as formatMessages, dn as formatMilliseconds, X as fromBase64, a3 as fromCamelCase, df as getGlobal, cu as getGlobalContext, cK as getGlobalEmitter, cx as getNamespaceFilterString, de as getNavigator, b8 as getSecureRandom, b9 as getSecureRandomIfPossible, dm as getTimestamp, dd as getWindow, d7 as httpMethod, cg as immediate, a$ as isArray, b5 as isBoolean, dh as isBrowser, bq as isEven, bp as isHalf, b3 as isInteger, cv as isLocalHost, b6 as isNullOrUndefined, b2 as isNumber, aZ as isObject, bh as isPrime, bg as isPrimeRX, a_ as isPrimitive, cn as isPromise, b0 as isRecord, b4 as isSafeInteger, b1 as isString, ck as isTimeout, b7 as jsonStringify, Z as jsonToUint8Array, bL as last, cM as lazyListener, bE as linkifyPlainText, bP as memoize, cL as messages, bC as moveSortWeight, dp as parseDate, bi as parseOrderby, bH as parseQuery, di as platform, co as promisify, dC as qid, ba as randomBoolean, bc as randomFloat, bb as randomInt, r as randomUint8Array, bS as regExpEscape, bR as regExpString, ah as renderMessages, bs as roundDown, bv as roundHalfAwayFromZero, bw as roundHalfDown, bx as roundHalfEven, bu as roundHalfOdd, by as roundHalfTowardsZero, bt as roundHalfUp, br as roundUp, bK as size, cf as sleep, bD as sortedItems, bl as sortedOrderby, bA as startSortWeight, a4 as stringToBoolean, a6 as stringToFloat, a5 as stringToInteger, R as stringToUInt8Array, dF as suid, dE as suidBytes, dH as suidBytesDate, dG as suidDate, be as sum, cs as throttle, ci as timeout, ch as timeoutReached, cj as timoutError, V as toBase64, W as toBase64Url, ae as toBool, a0 as toCamelCase, a1 as toCapitalize, a2 as toCapitalizeWords, ab as toFloat, T as toHex, bF as toHumanReadableUrl, ac as toInt, ad as toString, S as toUint8Array, bm as toValidFilename, aL as today, cl as tryTimeout, dB as uname, aX as unescapeHTML, c6 as useAsyncMutex, E as useBase, b_ as useDefer, bX as useDispose, bZ as useDisposer, c2 as useEventListener, dj as useExitHandler, c1 as useInterval, cz as useLevelFilter, c_ as useMessageHub, c5 as useMutex, cy as useNamespaceFilter, cc as usePool, d0 as usePubSub, d6 as useRPC, c0 as useTimeout, dv as uuid, dA as uuid32Decode, dz as uuid32Encode, du as uuid32bit, dy as uuidB32, dt as uuidBytes, dx as uuidDecode, dw as uuidEncode, dD as uuidv4, a7 as valueToBoolean, a9 as valueToFloat, a8 as valueToInteger, aa as valueToString, cm as waitOn } from './uuid-ab0c5451.js';
2
2
  export { d as LogHandler, g as LogHandlerOptions, a as LogLevel, b as LogLevelAlias, c as LogMessage, L as Logger, h as LoggerContext, f as LoggerContextInterface, e as LoggerInterface } from './log-b80164f3.js';
3
- export { b as FileStorage, F as FileStorageOptions, L as LoggerFileHandler, g as LoggerNodeHandler, d as colorString, f as colorStringList, c as ensureFolder, e as exists, j as getSourceLocation, m as getSourceLocationByPrecedingPattern, k as getStack, h as getStackLlocationList, i as isTTY, l as loggerStackTraceDebug, p as pbcopy, r as removeFolder, a as setupEnv, s as stringToPath, t as toPath, v as valueToPath } from './log-util-5f7dcfd6.js';
3
+ export { b as FileStorage, F as FileStorageOptions, L as LoggerFileHandler, h as LoggerNodeHandler, f as colorString, g as colorStringList, c as ensureFolder, e as exists, k as getSourceLocation, n as getSourceLocationByPrecedingPattern, m as getStack, j as getStackLlocationList, i as isTTY, l as loggerStackTraceDebug, p as pbcopy, d as readText, r as removeFolder, a as setupEnv, s as stringToPath, t as toPath, v as valueToPath, w as writeText } from './log-util-3742711f.js';
@@ -13,12 +13,14 @@ import {
13
13
  isTTY,
14
14
  loggerStackTraceDebug,
15
15
  pbcopy,
16
+ readText,
16
17
  removeFolder,
17
18
  setupEnv,
18
19
  stringToPath,
19
20
  toPath,
20
- valueToPath
21
- } from "./chunk-7W3LTMPP.js";
21
+ valueToPath,
22
+ writeText
23
+ } from "./chunk-CLY4VF5A.js";
22
24
  import {
23
25
  Channel,
24
26
  CryptoEncoder,
@@ -241,7 +243,7 @@ import {
241
243
  valueToInteger,
242
244
  valueToString,
243
245
  waitOn
244
- } from "./chunk-Z7MQRVMT.js";
246
+ } from "./chunk-XX52WKOZ.js";
245
247
  import {
246
248
  LogLevel,
247
249
  LogLevelAlias,
@@ -267,7 +269,7 @@ import {
267
269
  parseDate,
268
270
  useLevelFilter,
269
271
  useNamespaceFilter
270
- } from "./chunk-XWMV2GEI.js";
272
+ } from "./chunk-LMZGFDSJ.js";
271
273
  export {
272
274
  Channel,
273
275
  CryptoEncoder,
@@ -452,6 +454,7 @@ export {
452
454
  randomFloat,
453
455
  randomInt,
454
456
  randomUint8Array,
457
+ readText,
455
458
  regExpEscape,
456
459
  regExpString,
457
460
  removeFolder,
@@ -532,6 +535,7 @@ export {
532
535
  valueToInteger,
533
536
  valueToPath,
534
537
  valueToString,
535
- waitOn
538
+ waitOn,
539
+ writeText
536
540
  };
537
541
  //# sourceMappingURL=index.node.js.map
@@ -1,4 +1,4 @@
1
- import { dq as Json, dr as ObjectStorage } from './uuid-19af3724.js';
1
+ import { dq as Json, dr as ObjectStorage } from './uuid-ab0c5451.js';
2
2
  import { a as LogLevel, g as LogHandlerOptions, d as LogHandler } from './log-b80164f3.js';
3
3
 
4
4
  declare function urlBase64ToUint8Array(base64String: string): Uint8Array | undefined;
@@ -1,4 +1,4 @@
1
- import { dq as Json, dr as ObjectStorage } from './uuid-19af3724.js';
1
+ import { dq as Json, dr as ObjectStorage } from './uuid-ab0c5451.js';
2
2
  import { g as LogHandlerOptions, c as LogMessage, d as LogHandler } from './log-b80164f3.js';
3
3
 
4
4
  /** Copy string to clipboard */
@@ -58,6 +58,8 @@ declare class FileStorage<T = Json> implements ObjectStorage<T> {
58
58
  declare function exists(path: string): Promise<boolean>;
59
59
  declare function ensureFolder(...parts: string[]): Promise<string>;
60
60
  declare function removeFolder(...parts: string[]): Promise<string>;
61
+ declare function readText(...parts: string[]): Promise<string | undefined>;
62
+ declare function writeText(path: string, content: string): Promise<void>;
61
63
 
62
64
  declare function LoggerFileHandler(path: string, opt?: LogHandlerOptions): (msg: LogMessage) => void;
63
65
 
@@ -80,4 +82,4 @@ declare function getSourceLocation(level?: number, stripCwd?: boolean): string;
80
82
  declare function getStack(): string;
81
83
  declare function getSourceLocationByPrecedingPattern(patterns: string[], stripCwd?: boolean): string;
82
84
 
83
- export { FileStorageOptions as F, LoggerFileHandler as L, setupEnv as a, FileStorage as b, ensureFolder as c, colorString as d, exists as e, colorStringList as f, LoggerNodeHandler as g, getStackLlocationList as h, isTTY as i, getSourceLocation as j, getStack as k, loggerStackTraceDebug as l, getSourceLocationByPrecedingPattern as m, pbcopy as p, removeFolder as r, stringToPath as s, toPath as t, valueToPath as v };
85
+ export { FileStorageOptions as F, LoggerFileHandler as L, setupEnv as a, FileStorage as b, ensureFolder as c, readText as d, exists as e, colorString as f, colorStringList as g, LoggerNodeHandler as h, isTTY as i, getStackLlocationList as j, getSourceLocation as k, loggerStackTraceDebug as l, getStack as m, getSourceLocationByPrecedingPattern as n, pbcopy as p, removeFolder as r, stringToPath as s, toPath as t, valueToPath as v, writeText as w };
@@ -106,7 +106,6 @@ declare function renderMessages(messages: any[], opt?: RenderMessagesOptions): s
106
106
  declare function fixBrokenUth8String(brokenString: string): string;
107
107
 
108
108
  declare type CurrencyInput = number | string | Currency;
109
- declare type CurrencyFormat = (currency?: Currency, opts?: CurrencyOptions) => string;
110
109
  interface CurrencyOptions {
111
110
  symbol?: string;
112
111
  separator?: string;
@@ -372,14 +371,14 @@ declare type Disposer = DisposerFunction | {
372
371
  cleanup?: Function | Promise<unknown>;
373
372
  };
374
373
  interface Disposable {
375
- dispose(): void | Promise<void>;
374
+ dispose: UseDispose;
376
375
  }
377
376
  interface UseDisposeConfig {
378
377
  name?: string;
379
378
  }
380
379
  declare function useDispose(config?: string | UseDisposeConfig): (() => Promise<void>) & {
381
- track: (obj?: Disposer | undefined) => DisposerFunction | undefined;
382
- add: (obj?: Disposer | undefined) => DisposerFunction | undefined;
380
+ track: (obj?: Disposer) => DisposerFunction | undefined;
381
+ add: (obj?: Disposer) => DisposerFunction | undefined;
383
382
  untrack: (disposable: Disposer) => Promise<void>;
384
383
  dispose: () => Promise<void>;
385
384
  exec: () => Promise<void>;
@@ -416,6 +415,14 @@ declare type DefaultListener = {
416
415
  declare class Emitter<RemoteListener extends ListenerSignature<RemoteListener> = DefaultListener, LocalListener extends ListenerSignature<LocalListener> = RemoteListener> implements Disposable {
417
416
  subscribers: any;
418
417
  subscribersOnAny: any[];
418
+ dispose: (() => Promise<void>) & {
419
+ track: (obj?: Disposer | undefined) => DisposerFunction | undefined;
420
+ add: (obj?: Disposer | undefined) => DisposerFunction | undefined;
421
+ untrack: (disposable: Disposer) => Promise<void>;
422
+ dispose: () => Promise<void>;
423
+ exec: () => Promise<void>;
424
+ getSize(): number;
425
+ };
419
426
  call: RemoteListener;
420
427
  emit<U extends keyof RemoteListener>(event: U, ...args: Parameters<RemoteListener[U]>): Promise<boolean>;
421
428
  onAny(fn: EmitterHandler): void;
@@ -424,7 +431,6 @@ declare class Emitter<RemoteListener extends ListenerSignature<RemoteListener> =
424
431
  once<U extends keyof LocalListener>(event: U, listener: LocalListener[U]): DisposerFunction;
425
432
  off<U extends keyof LocalListener>(event: U, listener: LocalListener[U]): this;
426
433
  removeAllListeners(): this;
427
- dispose(): void;
428
434
  }
429
435
  declare global {
430
436
  interface ZeedGlobalContext {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zeed",
3
- "version": "0.7.147",
3
+ "version": "0.7.151",
4
4
  "description": "🌱 Simple foundation library",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -47,6 +47,7 @@
47
47
  "scripts": {
48
48
  "start": "npm run watch",
49
49
  "clean": "rm -rf dist",
50
+ "check": "tsc --noEmit -p tsconfig.json",
50
51
  "build": "npm run clean && npm run build:tsup",
51
52
  "build:tsup": "tsup src/index.*.ts --format esm,cjs --dts --sourcemap --keep-names",
52
53
  "watch": "npm run build:tsup -- --watch",
@@ -56,12 +57,12 @@
56
57
  "test:publish": "vitest src --globals --run"
57
58
  },
58
59
  "devDependencies": {
59
- "@types/jest": "^27.4.1",
60
- "@types/node": "^17.0.29",
61
- "c8": "^7.11.2",
60
+ "@types/jest": "^27.5.1",
61
+ "@types/node": "^17.0.35",
62
+ "c8": "^7.11.3",
62
63
  "cross-fetch": "^3.1.5",
63
- "tsup": "^5.12.6",
64
- "typescript": "^4.6.3",
65
- "vitest": "^0.10.0"
64
+ "tsup": "^6.0.1",
65
+ "typescript": "^4.7.2",
66
+ "vitest": "^0.12.9"
66
67
  }
67
68
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/node/clipboard.ts","../src/node/env.ts","../src/node/filestorage.ts","../src/node/fs.ts","../src/node/log-file.ts","../src/node/log-util.ts","../src/node/log-node.ts","../src/node/crypto.ts","../src/node/log-context-node.ts"],"sourcesContent":["import { spawn } from \"child_process\"\n\n/** Copy string to clipboard */\nexport function pbcopy(data: string) {\n return new Promise(async (resolve, reject) => {\n const proc = spawn(\"pbcopy\")\n proc.on(\"error\", (err: any) => reject(err))\n proc.on(\"close\", () => resolve(data))\n proc.stdin.write(data)\n proc.stdin.end()\n })\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport { LogLevel } from \"../common/log-base\"\nimport { Logger } from \"../common/log\"\n\nimport fs from \"fs\"\nimport { resolve } from \"path\"\n\nconst log = Logger(\"zeed:env\")\n\nconst NEWLINE = \"\\n\"\nconst RE_INI_KEY_VAL = /^\\s*([\\w_.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\n|\\r|\\r\\n/\n\ntype csvOptions = {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n}\n\n// Parses src into an Object\nfunction parse(src: string, options: csvOptions = {}) {\n let obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n .forEach(function (line, idx) {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || \"\"\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === \"'\" && val[end] === \"'\"\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted) {\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n } else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n } else {\n log.debug(\n `did not match key and value when parsing line ${idx + 1}: ${line}`\n )\n }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue: string = \".\"\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = \"\"): string {\n if (value == null) value = defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\n// Populates process.env from .env file\nexport function setupEnv(options: csvOptions = {}) {\n const dotenvPath: string =\n options?.path ?? toPath(options?.filename ?? \".env\")\n const encoding: BufferEncoding = options?.encoding ?? \"utf8\"\n const debug = options?.debug || false\n\n if (debug !== true) log.level = LogLevel.off\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsedEnv = fs.existsSync(dotenvPath)\n ? parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n : {}\n const parsedEnvLocal = fs.existsSync(dotenvPath + \".local\")\n ? parse(fs.readFileSync(dotenvPath + \".local\", { encoding }), { debug })\n : {}\n\n const parsed: Record<string, string> = Object.assign(\n {},\n parsedEnv,\n parsedEnvLocal\n )\n let env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === \"string\") {\n key = options?.prefix + key\n }\n if (!Object.prototype.hasOwnProperty.call(env, key)) {\n if (value != null) {\n log.info(`set env.${key} = ${value}`)\n env[key] = value\n }\n } else {\n log.debug(`\"${key}\" is already defined and will not be overwritten`)\n }\n })\n return { parsed }\n } catch (e) {\n log.error(e)\n return { error: e }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport {\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { toValidFilename } from \"../common/data/path\"\nimport { cloneObject } from \"../common/data/utils\"\nimport { Logger } from \"../common/log\"\nimport { Json, ObjectStorage } from \"../common/types\"\n\nconst log = Logger(\"zeed:filestorage\")\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty: boolean = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path || \".fileStorage\")\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? \".json\"\n\n if (opt.extension && !this.extension.startsWith(\".\")) {\n this.extension = \".\" + this.extension\n }\n this.extensionLength = this.extension.length\n\n this.objectToString =\n opt.objectToString ??\n ((data: any): string => {\n return this.pretty\n ? JSON.stringify(data, null, 2)\n : JSON.stringify(data)\n })\n\n this.objectFromString =\n opt.objectFromString ??\n ((data: string) => {\n try {\n return JSON.parse(data)\n } catch (err) {\n log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, \"utf8\")\n } catch (err) {\n log.error(\"setItem error\", err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): Buffer {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n let value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null) return\n\n if (value != null) {\n return cloneObject(value) // this.objectFromString(value)\n }\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, \"utf8\")\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n } catch (err) {\n log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1) {\n this.fileKeys.splice(index, 1)\n }\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n } catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys =\n readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n (item) =>\n !item.isDirectory() && item.name.endsWith(this.extension)\n )\n .map((item) => item.name.slice(0, -this.extensionLength)) || []\n } catch (err) {}\n }\n let keys = [...(this.fileKeys || [])]\n for (let key of Object.keys(this.store)) {\n if (!keys.includes(key)) {\n keys.push(key)\n }\n }\n keys.sort()\n return keys\n }\n}\n","import { mkdir, rm, stat } from \"node:fs/promises\"\nimport { join as joinPath } from \"node:path\"\n\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n } catch (err) {\n return false\n }\n return true\n}\n\nexport async function ensureFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (!(await exists(path))) {\n await mkdir(path, { recursive: true })\n }\n return path\n}\n\nexport async function removeFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (await exists(path)) {\n await rm(path, { recursive: true })\n }\n return path\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { renderMessages } from \"../common/data/convert\"\nimport { LogHandlerOptions, LogLevel, LogMessage } from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\n\nlet namespaces: Record<string, any> = {}\n\nexport function LoggerFileHandler(path: string, opt: LogHandlerOptions = {}) {\n const { level = LogLevel.all, filter = \"*\" } = opt\n path = resolve(process.cwd(), path)\n mkdirSync(dirname(path), { recursive: true })\n var stream = createWriteStream(path, { flags: \"a\" })\n // stream.end()\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n\n const time = new Date().toISOString()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n namespaces[name] = ninfo\n }\n\n let args: string[] = [\n `[${name || \"*\"}]`,\n renderMessages(msg.messages, { pretty: false }),\n ]\n\n function write(...args: string[]): void {\n stream.write(args.join(\"\\t\") + \"\\n\")\n }\n\n switch (msg.level) {\n case LogLevel.info:\n write(time, `I|* `, ...args)\n break\n case LogLevel.warn:\n write(time, `W|** `, ...args)\n break\n case LogLevel.error:\n write(time, `E|***`, ...args)\n break\n default:\n write(time, `D| `, ...args)\n break\n }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { resolve } from \"path\"\n\nexport function getStackLlocationList(stack: string): any[] {\n if (typeof stack !== \"string\") return []\n // console.log(\"stack\", stack)\n return (\n stack\n ?.split(\"\\n\")\n ?.map((rawLine) => {\n let m = rawLine.match(\n /^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/\n )\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n })\n ?.filter((v) => v != null) || []\n )\n}\n\nconst cwd = resolve(process.cwd())\nconst home = process.env?.HOME ? resolve(process.env?.HOME) : \"\"\n// console.log(`cwd = ${cwd}, home = ${home}}`)\n\nfunction pathStripCwd(path: string) {\n // console.log(\">\", path)\n\n if (path.includes(\"/node_modules/\")) {\n return \"\"\n }\n\n const fileURL = \"file://\"\n if (path.startsWith(fileURL)) {\n return path.substr(fileURL.length)\n }\n\n if (cwd && path.startsWith(cwd)) {\n return path.substr(cwd.length + 1)\n }\n\n if (home && path.startsWith(home)) {\n path = \"~/\" + path.substr(home.length + 1)\n }\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n let m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/)\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n return \"\"\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n * @returns\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n let stack = new Error().stack || \"\"\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n return line || \"\"\n}\n\nexport function getStack(): string {\n return new Error().stack || \"\"\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true\n) {\n let line = \"\"\n let stack = new Error().stack || \"\"\n if (typeof stack === \"string\") {\n const lines = stack.split(\"\\n\").map((l) => l.trim())\n // console.log(lines)\n const index = lines.findIndex((l) => patterns.some((p) => l.startsWith(p)))\n line = lines[index + 1]\n if (line) {\n line = extractFileInfo(line)\n }\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n }\n return line\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport tty from \"tty\"\nimport { renderMessages } from \"../common/data/convert\"\nimport {\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\nimport {\n getSourceLocation,\n getSourceLocationByPrecedingPattern,\n getStack,\n} from \"./log-util\"\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\n\nexport function isTTY(): boolean {\n try {\n return tty.isatty(process.stdout.fd)\n } catch (err) {}\n return false\n}\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nconst useColors = tty.isatty(process.stderr.fd)\n\nfunction log(...args: any[]) {\n return process.stderr.write(renderMessages(args) + \"\\n\")\n}\n\n// export const BOLD = Symbol()\n// export const UNBOLD = Symbol()\n// export const BLUE = Symbol()\n// export const GREY = Symbol()\n// export const GREEN = Symbol()\n// export const RED = Symbol()\n// export const PURPLE = Symbol()\n// export const ORANGE = Symbol()\n// export const UNCOLOR = Symbol()\n\n// const _browserStyleMap = {\n// [BOLD]: pair.create(\"font-weight\", \"bold\"),\n// [UNBOLD]: pair.create(\"font-weight\", \"normal\"),\n// [BLUE]: pair.create(\"color\", \"blue\"),\n// [GREEN]: pair.create(\"color\", \"green\"),\n// [GREY]: pair.create(\"color\", \"grey\"),\n// [RED]: pair.create(\"color\", \"red\"),\n// [PURPLE]: pair.create(\"color\", \"purple\"),\n// [ORANGE]: pair.create(\"color\", \"orange\"), // not well supported in chrome when debugging node with inspector - TODO: deprecate\n// [UNCOLOR]: pair.create(\"color\", \"black\"),\n// }\n\nconst TTY_STYLE = {\n BOLD: \"\\u001b[1m\",\n UNBOLD: \"\\u001b[2m\",\n RED: \"\\u001b[31m\",\n GREEN: \"\\u001b[32m\",\n BLUE: \"\\u001b[34m\",\n PURPLE: \"\\u001b[35m\",\n GRAY: \"\\u001b[37m\",\n ORANGE: \"\\u001b[38;5;208m\",\n UNCOLOR: \"\\u001b[0m\",\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = \"\\u001B[0m\"\n\nexport function colorString(value: string, colorCode: number) {\n const colorStart =\n colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : \"\\u001B[3\" + (colorCode < 8 ? colorCode : \"8;5;\" + colorCode) + \"m\"\n return `${colorStart}${value}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold: boolean = true\n) {\n return list.map((value) => {\n if (typeof value !== \"string\") return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nexport const loggerStackTraceDebug =\n \"loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485\"\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = undefined,\n filter = undefined,\n colors = isTTY(),\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = true,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n const timeNow = getTimestamp()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const diff = formatMilliseconds(timeNow - time)\n\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0) {\n displayName = displayName.padStart(padding, \" \")\n }\n\n if (fill > 0) {\n displayName = displayName.padEnd(fill, \" \")\n }\n\n if (colors && useColors) {\n const c = ninfo.color\n args = [colorString(displayName, c) + ` | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevel.warn) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n } else if (msg.level === LogLevel.error) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n } else {\n args.push(...msg.messages)\n }\n args.push(colorString(`+${diff}`, c))\n } else {\n args = [displayName, ...msg.messages]\n args.push(`+${diff}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n console.log(getStack())\n }\n\n if (stack) {\n let line: string = \"\"\n if (typeof stack === \"boolean\") {\n line = getSourceLocationByPrecedingPattern(\n [\"at Function.\", \"at null.log (\", \"at log (\"],\n true\n )\n if (!line) {\n line = getSourceLocation(0, true)\n }\n } else {\n const depth = typeof stack === \"number\" ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line) {\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n }\n switch (msg.level) {\n case LogLevel.info:\n if (levelHelper) args[0] = `I|* ` + args[0]\n log(...args)\n break\n case LogLevel.warn:\n if (levelHelper)\n args[0] =\n (colors && useColors\n ? colorString(`W|** `, COLOR.ORANGE)\n : `W|** `) + args[0]\n log(...args)\n break\n case LogLevel.error:\n if (levelHelper)\n args[0] =\n (colors && useColors\n ? colorString(`E|*** `, COLOR.RED)\n : `E|*** `) + args[0]\n log(...args)\n break\n default:\n if (levelHelper) args[0] = `D| ` + args[0]\n log(...args)\n break\n }\n }\n}\n","// https://nodejs.org/api/webcrypto.html\nimport nodeCrypto from \"crypto\"\n\nexport {}\n\ndeclare module NodeJS {\n interface Global {\n crypto: Crypto\n }\n}\n\ntry {\n if (\n nodeCrypto &&\n nodeCrypto.webcrypto &&\n typeof globalThis !== \"undefined\" &&\n typeof globalThis.crypto === \"undefined\"\n ) {\n // @ts-ignore\n globalThis.crypto = nodeCrypto.webcrypto\n }\n} catch (err) {\n console.warn(\"Failed to polyfill webcrypto\", err)\n}\n","import { Logger } from \"../common/log\"\nimport { toPath } from \"./env\"\nimport { LoggerFileHandler } from \"./log-file\"\nimport { LoggerNodeHandler } from \"./log-node\"\n\nfunction setupLogContextNode() {\n let handlers = [\n LoggerNodeHandler({\n padding: 32,\n nameBrackets: false,\n // levelHelper: false,\n }),\n ]\n\n let logFilePath = process.env.ZEED_LOG ?? process.env.LOG\n if (logFilePath) {\n handlers.unshift(LoggerFileHandler(toPath(logFilePath)))\n }\n\n Logger.setHandlers(handlers)\n}\n\nsetupLogContextNode()\n"],"mappings":"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","names":[]}