@adviser/cement 0.2.16 → 0.2.17

Sign up to get free protection for your applications and to get access to all the features.
package/index.cjs CHANGED
@@ -77,6 +77,7 @@ __export(src_exports, {
77
77
  BrowserEnvActions: () => BrowserEnvActions,
78
78
  BuildURI: () => BuildURI,
79
79
  EnvImpl: () => EnvImpl,
80
+ FanoutWriter: () => FanoutWriter,
80
81
  Future: () => Future,
81
82
  IDMode: () => IDMode,
82
83
  IsLogger: () => IsLogger,
@@ -87,7 +88,8 @@ __export(src_exports, {
87
88
  LevelHandlerImpl: () => LevelHandlerImpl,
88
89
  LogCollector: () => LogCollector,
89
90
  LogValue: () => LogValue,
90
- LogWriter: () => LogWriter,
91
+ LogWriterCollector: () => LogWriterCollector,
92
+ LogWriterStream: () => LogWriterStream,
91
93
  LoggerImpl: () => LoggerImpl,
92
94
  MockLogger: () => MockLogger,
93
95
  None: () => None,
@@ -1024,6 +1026,29 @@ var URI = class _URI {
1024
1026
  }
1025
1027
  };
1026
1028
 
1029
+ // src/runtime.ts
1030
+ function isSet(value, ref = globalThis) {
1031
+ const [head, ...tail] = value.split(".");
1032
+ if (["object", "function"].includes(typeof ref) && ref && ["object", "function"].includes(typeof ref[head]) && ref[head]) {
1033
+ if (tail.length <= 1) {
1034
+ return true;
1035
+ }
1036
+ return isSet(tail.join("."), ref[head]);
1037
+ }
1038
+ return false;
1039
+ }
1040
+ function runtimeFn() {
1041
+ const isReactNative = isSet("navigator.product") && globalThis.navigator.product === "ReactNative";
1042
+ const isNodeIsh = isSet("process.versions.node") && !isReactNative;
1043
+ const isDeno = isSet("Deno") && !isReactNative;
1044
+ return {
1045
+ isNodeIsh,
1046
+ isBrowser: !(isNodeIsh || isDeno) && !isReactNative,
1047
+ isDeno,
1048
+ isReactNative
1049
+ };
1050
+ }
1051
+
1027
1052
  // src/logger_impl.ts
1028
1053
  var encoder = new TextEncoder();
1029
1054
  var LevelHandlerImpl = class {
@@ -1102,7 +1127,7 @@ var LevelHandlerImpl = class {
1102
1127
  }
1103
1128
  };
1104
1129
  var levelSingleton = new LevelHandlerImpl();
1105
- var LogWriter = class {
1130
+ var LogWriterStream = class {
1106
1131
  constructor(out) {
1107
1132
  this._toFlush = [];
1108
1133
  this._flushIsRunning = false;
@@ -1168,6 +1193,68 @@ function toLogValue(lop) {
1168
1193
  }
1169
1194
  return lop;
1170
1195
  }
1196
+ var ConsoleWriterStreamDefaultWriter = class {
1197
+ constructor(stream) {
1198
+ this.stream = stream;
1199
+ this.desiredSize = null;
1200
+ this.decoder = new TextDecoder();
1201
+ this._stream = stream;
1202
+ this.ready = Promise.resolve(void 0);
1203
+ this.closed = Promise.resolve(void 0);
1204
+ }
1205
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
1206
+ abort(reason) {
1207
+ throw new Error("Method not implemented.");
1208
+ }
1209
+ async close() {
1210
+ }
1211
+ releaseLock() {
1212
+ this._stream.locked = false;
1213
+ this.ready = Promise.resolve(void 0);
1214
+ this.closed = Promise.resolve(void 0);
1215
+ }
1216
+ async write(chunk) {
1217
+ const str = this.decoder.decode(chunk).trimEnd();
1218
+ let output = "log";
1219
+ try {
1220
+ const decode = JSON.parse(str);
1221
+ output = decode.level;
1222
+ } catch (e) {
1223
+ }
1224
+ switch (output) {
1225
+ case "error":
1226
+ console.error(str);
1227
+ break;
1228
+ case "warn":
1229
+ console.warn(str);
1230
+ break;
1231
+ default:
1232
+ console.log(str);
1233
+ }
1234
+ }
1235
+ };
1236
+ var ConsoleWriterStream = class {
1237
+ constructor() {
1238
+ this.locked = false;
1239
+ }
1240
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
1241
+ abort(reason) {
1242
+ throw new Error("Method not implemented.");
1243
+ }
1244
+ async close() {
1245
+ return;
1246
+ }
1247
+ getWriter() {
1248
+ if (this.locked) {
1249
+ throw new Error("Stream is locked");
1250
+ }
1251
+ this.locked = true;
1252
+ if (!this._writer) {
1253
+ this._writer = new ConsoleWriterStreamDefaultWriter(this);
1254
+ }
1255
+ return this._writer;
1256
+ }
1257
+ };
1171
1258
  var LoggerImpl = class _LoggerImpl {
1172
1259
  // readonly _id: string = "logger-" + Math.random().toString(36)
1173
1260
  constructor(params) {
@@ -1184,9 +1271,20 @@ var LoggerImpl = class _LoggerImpl {
1184
1271
  this._logWriter = params.logWriter;
1185
1272
  } else {
1186
1273
  if (!params.out) {
1187
- this._logWriter = new LogWriter(this._sys.Stdout());
1274
+ const rt = runtimeFn();
1275
+ let stream;
1276
+ if (rt.isBrowser) {
1277
+ stream = new ConsoleWriterStream();
1278
+ } else {
1279
+ if (rt.isNodeIsh || rt.isReactNative) {
1280
+ stream = this._sys.Stdout();
1281
+ } else {
1282
+ throw new Error("No output defined for runtime");
1283
+ }
1284
+ }
1285
+ this._logWriter = new LogWriterStream(stream);
1188
1286
  } else {
1189
- this._logWriter = new LogWriter(params.out);
1287
+ this._logWriter = new LogWriterStream(params.out);
1190
1288
  }
1191
1289
  }
1192
1290
  if (!params.withAttributes) {
@@ -1483,37 +1581,60 @@ var WithLoggerBuilder = class {
1483
1581
  };
1484
1582
 
1485
1583
  // src/test/log_collector.ts
1486
- var LogWriter2 = class {
1487
- constructor() {
1488
- this._bufferArr = [];
1584
+ var LogWriterCollector = class {
1585
+ constructor(bufferArr) {
1586
+ this._resolveClosed = new Future();
1587
+ this.closed = this._resolveClosed.asPromise();
1489
1588
  this.desiredSize = null;
1490
1589
  this.ready = Promise.resolve(void 0);
1491
- this._resolveClosed = () => {
1492
- };
1493
- this.closed = new Promise((resolve) => {
1494
- this._resolveClosed = resolve;
1495
- });
1590
+ this._bufferArr = bufferArr;
1496
1591
  }
1497
1592
  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
1498
1593
  abort(reason) {
1499
1594
  throw new Error("Method not implemented.");
1500
1595
  }
1501
- close() {
1502
- this._resolveClosed();
1596
+ async close() {
1597
+ await this.closed;
1503
1598
  return Promise.resolve(void 0);
1504
1599
  }
1505
1600
  releaseLock() {
1506
1601
  }
1507
- write(chunk) {
1602
+ async write(chunk) {
1508
1603
  if (chunk) {
1509
1604
  this._bufferArr.push(chunk);
1510
1605
  }
1511
1606
  return Promise.resolve(void 0);
1512
1607
  }
1513
1608
  };
1609
+ var FanoutWriter = class {
1610
+ constructor(writers) {
1611
+ this.desiredSize = null;
1612
+ this._writers = writers;
1613
+ this.ready = Promise.all(this._writers.map((w) => w.ready)).then(() => void 0);
1614
+ this.closed = Promise.all(this._writers.map((w) => w.closed)).then(() => void 0);
1615
+ }
1616
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1617
+ abort(reason) {
1618
+ return Promise.all(this._writers.map((w) => w.abort(reason))).then(() => {
1619
+ });
1620
+ }
1621
+ close() {
1622
+ return Promise.all(this._writers.map((w) => w.close())).then(() => {
1623
+ });
1624
+ }
1625
+ releaseLock() {
1626
+ this._writers.map((w) => w.releaseLock());
1627
+ }
1628
+ write(chunk) {
1629
+ return Promise.all(this._writers.map((w) => w.write(chunk))).then(() => {
1630
+ });
1631
+ }
1632
+ };
1514
1633
  var LogCollector = class {
1515
- constructor() {
1634
+ constructor(pass) {
1516
1635
  this.locked = false;
1636
+ this._bufferArr = [];
1637
+ this._pass = pass;
1517
1638
  }
1518
1639
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1519
1640
  abort(reason) {
@@ -1529,7 +1650,11 @@ var LogCollector = class {
1529
1650
  }
1530
1651
  getWriter() {
1531
1652
  if (!this._writer) {
1532
- this._writer = new LogWriter2();
1653
+ const dests = [new LogWriterCollector(this._bufferArr)];
1654
+ if (this._pass) {
1655
+ dests.push(this._pass);
1656
+ }
1657
+ this._writer = new FanoutWriter(dests);
1533
1658
  }
1534
1659
  return this._writer;
1535
1660
  }
@@ -1544,7 +1669,7 @@ var LogCollector = class {
1544
1669
  for (const x of res) {
1545
1670
  yield* __yieldStar(x);
1546
1671
  }
1547
- }(this._writer._bufferArr)
1672
+ }(this._bufferArr)
1548
1673
  )
1549
1674
  );
1550
1675
  const splitStr = jsonNlStr.split("\n");
@@ -1556,7 +1681,7 @@ var LogCollector = class {
1556
1681
 
1557
1682
  // src/test/mock_logger.ts
1558
1683
  function MockLogger(params) {
1559
- const lc = new LogCollector();
1684
+ const lc = new LogCollector(params == null ? void 0 : params.pass);
1560
1685
  let modNames = ["MockLogger"];
1561
1686
  if (typeof (params == null ? void 0 : params.moduleName) === "string") {
1562
1687
  modNames = [params == null ? void 0 : params.moduleName];
@@ -1699,29 +1824,6 @@ var None = class extends Option {
1699
1824
  }
1700
1825
  };
1701
1826
 
1702
- // src/runtime.ts
1703
- function isSet(value, ref = globalThis) {
1704
- const [head, ...tail] = value.split(".");
1705
- if (["object", "function"].includes(typeof ref) && ref && ["object", "function"].includes(typeof ref[head]) && ref[head]) {
1706
- if (tail.length <= 1) {
1707
- return true;
1708
- }
1709
- return isSet(tail.join("."), ref[head]);
1710
- }
1711
- return false;
1712
- }
1713
- function runtimeFn() {
1714
- const isReactNative = isSet("navigator.product") && globalThis.navigator.product === "ReactNative";
1715
- const isNodeIsh = isSet("process.versions.node") && !isReactNative;
1716
- const isDeno = isSet("Deno") && !isReactNative;
1717
- return {
1718
- isNodeIsh,
1719
- isBrowser: !(isNodeIsh || isDeno) && !isReactNative,
1720
- isDeno,
1721
- isReactNative
1722
- };
1723
- }
1724
-
1725
1827
  // src/crypto.ts
1726
1828
  function randomBytes(size) {
1727
1829
  const bytes = new Uint8Array(size);
@@ -1748,6 +1850,7 @@ function toCryptoRuntime(cryptoOpts = {}) {
1748
1850
  BrowserEnvActions,
1749
1851
  BuildURI,
1750
1852
  EnvImpl,
1853
+ FanoutWriter,
1751
1854
  Future,
1752
1855
  IDMode,
1753
1856
  IsLogger,
@@ -1758,7 +1861,8 @@ function toCryptoRuntime(cryptoOpts = {}) {
1758
1861
  LevelHandlerImpl,
1759
1862
  LogCollector,
1760
1863
  LogValue,
1761
- LogWriter,
1864
+ LogWriterCollector,
1865
+ LogWriterStream,
1762
1866
  LoggerImpl,
1763
1867
  MockLogger,
1764
1868
  None,